Update for Neard 0.4 (introduce new start_poll as initiator/target or both)
authorFrederic PAUT <frederic.paut@intel.com>
Thu, 19 Jul 2012 13:08:08 +0000 (15:08 +0200)
committerFrederic PAUT <frederic.paut@intel.com>
Thu, 19 Jul 2012 13:08:08 +0000 (15:08 +0200)
lib/interface/org.neard.Adapter.xml
lib/interface/org.neard.Manager.xml
lib/neardal.c
lib/neardal.h
lib/neardal_adapter.c
lib/neardal_manager.c
lib/neardal_manager.h
ncl/ncl_cmd.c

index f9309be..f7b6e2d 100644 (file)
@@ -3,24 +3,26 @@
 <node>
        <interface name="org.neard.Adapter">
                <method name="GetProperties">
-                       <arg type="a{sv}" direction="out"/>
+                       <arg name="properties" type="a{sv}" direction="out"/>
                </method>
                <method name="SetProperty">
-                       <arg type="s" direction="in"/>
-                       <arg type="v" direction="in"/>
+                       <arg name="name" type="s" direction="in"/>
+                       <arg name="value" type="v" direction="in"/>
                </method>
-               <method name="StartPoll"/>
-               <method name="StopPoll"/>
+               <method name="StartPollLoop">
+                       <arg name="name" type="s" direction="in"/>
+               </method>
+               <method name="StopPollLoop"/>
                <signal name="PropertyChanged">
-                       <arg type="s"/>
-                       <arg type="v"/>
+                       <arg name="name" type="s"/>
+                       <arg name="value" type="v"/>
                </signal>
                <signal name="TagFound">
-                       <arg type="o"/>
+                       <arg name="address" type="o"/>
                </signal>
                <signal name="TagLost">
-                       <arg type="o"/>
+                       <arg name="address" type="o"/>
                </signal>
        </interface>
-       <node name="tag0"/>
 </node>
+
index 34dabe5..0c96529 100644 (file)
@@ -3,22 +3,28 @@
 <node>
        <interface name="org.neard.Manager">
                <method name="GetProperties">
-                       <arg type="a{sv}" direction="out"/>
+                       <arg name="properties" type="a{sv}" direction="out"/>
                </method>
                <method name="SetProperty">
-                       <arg type="s" direction="in"/>
-                       <arg type="v" direction="in"/>
+                       <arg name="name" type="s" direction="in"/>
+                       <arg name="value" type="v" direction="in"/>
+               </method>
+               <method name="RegisterHandoverAgent">
+                       <arg name="path" type="o" direction="in"/>
+               </method>
+               <method name="UnregisterHandoverAgent">
+                       <arg name="path" type="o" direction="in"/>
                </method>
                <signal name="PropertyChanged">
-                       <arg type="s"/>
-                       <arg type="v"/>
+                       <arg name="name" type="s"/>
+                       <arg name="value" type="v"/>
                </signal>
                <signal name="AdapterAdded">
-                       <arg type="o"/>
+                       <arg name="adapter" type="o"/>
                </signal>
                <signal name="AdapterRemoved">
-                       <arg type="o"/>
+                       <arg name="adapter" type="o"/>
                </signal>
        </interface>
+       <node name="org"/>
 </node>
-
index fbb4f6b..c7b3d59 100644 (file)
                gValue = g_variant_new_boolean((gboolean) value); \
                 } while (0);
 
+#define        ADP_INITIATOR_MODE              "Initiator"
+#define        ADP_TARGET_MODE                 "Target"
+#define        ADP_BOTH_MODE                   "Both"
+
+
 neardalCtx neardalMgr = {NULL, NULL, {NULL}, NULL, NULL, NULL, NULL, NULL, NULL,
 NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL};
 
@@ -109,6 +114,9 @@ void neardal_destroy(void)
 errorCode_t neardal_set_cb_adapter_added(adapter_cb cb_adp_added,
                                         void *user_data)
 {
+       if (neardalMgr.proxy == NULL)
+               neardal_prv_construct(NULL);
+
        neardalMgr.cb_adp_added         = cb_adp_added;
        neardalMgr.cb_adp_added_ud      = user_data;
 
@@ -124,6 +132,9 @@ errorCode_t neardal_set_cb_adapter_removed(adapter_cb cb_adp_removed,
                                           void *user_data)
 {
 
+       if (neardalMgr.proxy == NULL)
+               neardal_prv_construct(NULL);
+
        neardalMgr.cb_adp_removed       = cb_adp_removed;
        neardalMgr.cb_adp_removed_ud    = user_data;
 
@@ -139,6 +150,9 @@ errorCode_t neardal_set_cb_adapter_property_changed(
                                        adapter_prop_cb cb_adp_property_changed,
                                        void *user_data)
 {
+       if (neardalMgr.proxy == NULL)
+               neardal_prv_construct(NULL);
+
        neardalMgr.cb_adp_prop_changed          = cb_adp_property_changed;
        neardalMgr.cb_adp_prop_changed_ud       = user_data;
 
@@ -153,6 +167,9 @@ errorCode_t neardal_set_cb_adapter_property_changed(
 errorCode_t neardal_set_cb_tag_found(tag_cb cb_tag_found,
                                        void *user_data)
 {
+       if (neardalMgr.proxy == NULL)
+               neardal_prv_construct(NULL);
+
        neardalMgr.cb_tag_found         = cb_tag_found;
        neardalMgr.cb_tag_found_ud      = user_data;
 
@@ -167,6 +184,9 @@ errorCode_t neardal_set_cb_tag_found(tag_cb cb_tag_found,
 errorCode_t neardal_set_cb_tag_lost(tag_cb cb_tag_lost,
                                       void *user_data)
 {
+       if (neardalMgr.proxy == NULL)
+               neardal_prv_construct(NULL);
+
        neardalMgr.cb_tag_lost          = cb_tag_lost;
        neardalMgr.cb_tag_lost_ud       = user_data;
 
@@ -182,6 +202,9 @@ errorCode_t neardal_set_cb_tag_lost(tag_cb cb_tag_lost,
 errorCode_t neardal_set_cb_record_found(record_cb cb_rcd_found,
                                        void *user_data)
 {
+       if (neardalMgr.proxy == NULL)
+               neardal_prv_construct(NULL);
+
        neardalMgr.cb_rcd_found         = cb_rcd_found;
        neardalMgr.cb_rcd_found_ud      = user_data;
 
@@ -397,10 +420,6 @@ errorCode_t neardal_set_adapter_property(const char *adpName,
                propKey = "Powered";
                NEARDAL_SET_BOOL_VALUE(variantTmp, value);
                break;
-       case NEARD_ADP_PROP_MODE:
-               propKey = "Mode";
-               NEARDAL_SET_STRING_VALUE(variantTmp, value);
-               break;
        default:
                break;
        }
@@ -434,7 +453,7 @@ exit:
 /*****************************************************************************
  * neardal_start_poll: Request Neard to start polling
  ****************************************************************************/
-errorCode_t neardal_start_poll(char *adpName)
+errorCode_t neardal_start_poll_loop(char *adpName, int mode)
 {
        errorCode_t     err             = NEARDAL_SUCCESS;
        AdpProp         *adpProp        = NULL;
@@ -446,28 +465,40 @@ errorCode_t neardal_start_poll(char *adpName)
 
        err = neardal_mgr_prv_get_adapter(adpName, &adpProp);
 
-       err = NEARDAL_ERROR_NO_ADAPTER;
        if (adpProp == NULL)
                goto exit;
 
        if (adpProp->proxy == NULL)
                goto exit;
 
-       if (!adpProp->polling) {
-               org_neard_adp__call_start_poll_sync(adpProp->proxy, NULL,
-                                                   &neardalMgr.gerror);
-
-               err = NEARDAL_SUCCESS;
-               if (neardalMgr.gerror != NULL) {
-                       NEARDAL_TRACE_ERR(
-                               "Error with neard dbus method (err:%d:'%s')\n"
-                                       , neardalMgr.gerror->code
-                                       , neardalMgr.gerror->message);
-                       err = NEARDAL_ERROR_DBUS_INVOKE_METHOD_ERROR;
-                       neardal_tools_prv_free_gerror(&neardalMgr.gerror);
-               }
-       } else
+       if (adpProp->polling) {
                err = NEARDAL_ERROR_POLLING_ALREADY_ACTIVE;
+               goto exit;
+       }
+       
+       if (mode == NEARD_ADP_MODE_INITIATOR)
+               org_neard_adp__call_start_poll_loop_sync(adpProp->proxy,
+                                                       ADP_INITIATOR_MODE,
+                                                       NULL,
+                                                       &neardalMgr.gerror);
+       else if (mode == NEARD_ADP_MODE_TARGET)
+               org_neard_adp__call_start_poll_loop_sync(adpProp->proxy,
+                                                       ADP_TARGET_MODE, NULL,
+                                                       &neardalMgr.gerror);
+       else
+               org_neard_adp__call_start_poll_loop_sync(adpProp->proxy,
+                                                       ADP_BOTH_MODE, NULL,
+                                                       &neardalMgr.gerror);
+       
+       err = NEARDAL_SUCCESS;
+       if (neardalMgr.gerror != NULL) {
+               NEARDAL_TRACE_ERR(
+                       "Error with neard dbus method (err:%d:'%s')\n"
+                               , neardalMgr.gerror->code
+                               , neardalMgr.gerror->message);
+               err = NEARDAL_ERROR_DBUS_INVOKE_METHOD_ERROR;
+               neardal_tools_prv_free_gerror(&neardalMgr.gerror);
+       }
 
 exit:
        return err;
@@ -494,7 +525,7 @@ errorCode_t neardal_stop_poll(char *adpName)
                goto exit;
 
        if (adpProp->polling) {
-               org_neard_adp__call_stop_poll_sync(adpProp->proxy, NULL,
+               org_neard_adp__call_stop_poll_loop_sync(adpProp->proxy, NULL,
                                                   &neardalMgr.gerror);
 
                err = NEARDAL_SUCCESS;
@@ -521,7 +552,7 @@ exit:
  ****************************************************************************/
 errorCode_t neardal_get_tags(char *adpName, char ***array, int *len)
 {
-       errorCode_t     err             = NEARDAL_ERROR_NO_TAG;
+       errorCode_t     err             = NEARDAL_SUCCESS;
        AdpProp         *adpProp        = NULL;
        int             tagNb           = 0;
        int             ct              = 0;    /* counter */
@@ -531,8 +562,10 @@ errorCode_t neardal_get_tags(char *adpName, char ***array, int *len)
 
        if (neardalMgr.proxy == NULL)
                neardal_prv_construct(&err);
+       else
+               err = NEARDAL_ERROR_NO_TAG;
 
-       if (err != NEARDAL_SUCCESS || adpName == NULL || array == NULL)
+       if (adpName == NULL || array == NULL)
                return NEARDAL_ERROR_INVALID_PARAMETER;
 
        err = neardal_mgr_prv_get_adapter(adpName, &adpProp);
index c43510b..85cf711 100644 (file)
@@ -170,12 +170,34 @@ typedef void (*record_cb) (const char *rcdName, void *user_data);
 */
 void neardal_destroy();
 
+/*! @brief NEARDAL Properties identifiers
+ * @addtogroup NEARDAL_CALLBACK Defines
+ * @{ */
+#define NEARD_ADP_MODE_INITIATOR               0
+#define NEARD_ADP_MODE_TARGET                  1
+#define NEARD_ADP_MODE_BOTH                    2
+
+
+/* @}*/
+
+
+/*! \fn errorCode_t neardal_start_poll_loop(char *adpName, int mode)
+*  \brief Request Neard to start polling on specific NEARDAL adapter with
+*  specific mode
+*  \param adpName : DBus interface adapter name (as identifier)
+*  \param mode : Polling mode (see NEARD_ADP_MODE_...)
+*  @return errorCode_t error code
+*/
+errorCode_t neardal_start_poll_loop(char *adpName, int mode);
+
 /*! \fn errorCode_t neardal_start_poll(char *adpName)
-*  \brief Request Neard to start polling on specific NEARDAL adapter
+*  \brief Request Neard to start polling on specific NEARDAL adapter in
+* Initiator mode
 *  \param adpName : DBus interface adapter name (as identifier)
 *  @return errorCode_t error code
 */
-errorCode_t neardal_start_poll(char *adpName);
+#define neardal_start_poll(adpName)     neardal_start_poll_loop(adpName, \
+                                               NEARD_ADP_MODE_INITIATOR);
 
 /*! \fn errorCode_t neardal_stop_poll(char *adpName)
 *  \brief Request Neard to stop polling on specific NEARDAL adapter
@@ -232,7 +254,6 @@ errorCode_t neardal_free_array(char ***array);
  * @addtogroup NEARDAL_CALLBACK Defines
  * @{ */
 #define NEARD_ADP_PROP_POWERED                 0
-#define NEARD_ADP_PROP_MODE                    1
 
 
 /* @}*/
@@ -367,8 +388,6 @@ errorCode_t neardal_write(neardal_record *record);
 errorCode_t neardal_set_cb_record_found(record_cb cb_rcd_found,
                                         void *user_data);
 
-/* @}*/
-
 
 #ifdef __cplusplus
 }
index 33eae91..cdca450 100644 (file)
@@ -235,7 +235,6 @@ static errorCode_t neardal_adp_prv_read_properties(AdpProp *adpProp)
                                tagName = tagArray[len++];
                                err = neardal_tag_prv_add(tagName,
                                                          adpProp);
-                               adpProp->tagNb++;
                        }
                }
        }
@@ -266,7 +265,7 @@ exit:
 }
 
 /*****************************************************************************
- * neardal_adp_prv_get_current_tag: Get current NFC tag
+ * neardal_adp_prv_get_tag: Get current NFC tag
  ****************************************************************************/
 errorCode_t neardal_adp_prv_get_tag(AdpProp *adpProp, gchar *tagName,
                                       TagProp **tagProp)
@@ -401,34 +400,39 @@ errorCode_t neardal_adp_add(gchar *adapterName)
        TagProp         *tagProp;
        gsize           len;
 
-       NEARDAL_TRACEF("Adding adapter:%s\n", adapterName);
+       err = neardal_mgr_prv_get_adapter(adapterName, NULL);
+       if (err != NEARDAL_SUCCESS) {
+               NEARDAL_TRACEF("Adding adapter:%s\n", adapterName);
 
-       adpProp = g_try_malloc0(sizeof(AdpProp));
-       if (adpProp == NULL)
-               return NEARDAL_ERROR_NO_MEMORY;
+               adpProp = g_try_malloc0(sizeof(AdpProp));
+               if (adpProp == NULL)
+                       return NEARDAL_ERROR_NO_MEMORY;
 
-       adpProp->name = g_strdup(adapterName);
-       adpProp->parent = &neardalMgr;
+               adpProp->name = g_strdup(adapterName);
+               adpProp->parent = &neardalMgr;
 
-       adpList = &neardalMgr.prop.adpList;
-       *adpList = g_list_prepend(*adpList, (gpointer) adpProp);
-       err = neardal_adp_prv_init(adpProp);
+               adpList = &neardalMgr.prop.adpList;
+               *adpList = g_list_prepend(*adpList, (gpointer) adpProp);
+               err = neardal_adp_prv_init(adpProp);
 
-       NEARDAL_TRACEF("NEARDAL LIB adapterList contains %d elements\n",
-                     g_list_length(*adpList));
+               NEARDAL_TRACEF("NEARDAL LIB adapterList contains %d elements\n",
+                       g_list_length(*adpList));
 
-       /* Invoke client cb 'adapter added' */
-       if (neardalMgr.cb_adp_added != NULL)
-                       (neardalMgr.cb_adp_added)((char *) adapterName,
-                                              neardalMgr.cb_adp_added_ud);
+               /* Invoke client cb 'adapter added' */
+               if (neardalMgr.cb_adp_added != NULL)
+                               (neardalMgr.cb_adp_added)((char *) adapterName,
+                                               neardalMgr.cb_adp_added_ud);
 
-       /* Notify 'Tag Found' */
-       len = 0;
-       while (len < g_list_length(adpProp->tagList)) {
-               tagProp = g_list_nth_data(adpProp->tagList, len++);
-               neardal_tag_notify_tag_found(tagProp);
-               len++;
-       }
+               /* Notify 'Tag Found' */
+               len = 0;
+               while (len < g_list_length(adpProp->tagList)) {
+                       tagProp = g_list_nth_data(adpProp->tagList, len++);
+                       neardal_tag_notify_tag_found(tagProp);
+                       len++;
+               }
+       } else
+               NEARDAL_TRACEF("Adapter '%s' already added\n", adapterName);
+       
        return err;
 }
 
index b29d8b6..54cb380 100644 (file)
@@ -154,15 +154,14 @@ errorCode_t neardal_mgr_prv_get_adapter(gchar *adpName, AdpProp **adpProp)
        AdpProp         *adapter;
        GList           *tmpList;
 
-       g_assert(adpProp != NULL);
-
        tmpList = neardalMgr.prop.adpList;
        while (len < g_list_length(tmpList)) {
                adapter = g_list_nth_data(tmpList, len);
                if (adapter != NULL) {
                        if (neardal_tools_prv_cmp_path(adapter->name,
                                                        adpName)) {
-                               *adpProp = adapter;
+                               if (adpProp != NULL)
+                                       *adpProp = adapter;
                                err = NEARDAL_SUCCESS;
                                break;
                        }
index 922d69b..b488305 100644 (file)
@@ -32,7 +32,7 @@ extern "C" {
 #define NEARD_MGR_IF_NAME                      "org.neard.Manager"
 #define NEARD_MGR_SECTION_ADAPTERS             "Adapters"
 #define NEARD_MGR_SIG_PROPCHANGED              "property-changed"
-#define NEARD_MGR_SIG_ADP_ADDED                        "adapter-added"
+#define NEARD_MGR_SIG_ADP_ADDED                "adapter-added"
 #define NEARD_MGR_SIG_ADP_RM                   "adapter-removed"
 
 /* NEARDAL Manager Properties */
index 9f8d21f..917b0d1 100644 (file)
@@ -702,17 +702,12 @@ static NCLError ncl_cmd_set_adapter_property(int argc, char *argv[])
        errorCode_t     ec              = NEARDAL_SUCCESS;
        NCLError        nclErr;
        static int      powered         = -1;
-       static char     *strMode        = NULL;
        char            *adapterName    = NULL;
 
 static GOptionEntry options[] = {
                { "powered", 's', 0, G_OPTION_ARG_INT , &powered
                                , "Set Adapter power ON/OFF", "<>0 or =0" },
                                
-               { "mode", 's', 0, G_OPTION_ARG_STRING , &strMode
-                               , "Set Adapter mode initiator/target",
-                               "'initiator' or 'target'" },
-
                { NULL, 0, 0, 0, NULL, NULL, NULL} /* End of List */
        };
 
@@ -740,20 +735,11 @@ static GOptionEntry options[] = {
                ec = neardal_set_adapter_property(adapterName,
                                                  NEARD_ADP_PROP_POWERED,
                                                  (void*) powered);
-
-       if (strMode != NULL)
-               ec = neardal_set_adapter_property(adapterName,
-                                                 NEARD_ADP_PROP_MODE,
-                                                 strMode);
-
        
 exit:
        NCL_CMD_PRINT("\nExit with error code %d:%s\n", ec,
                      neardal_error_get_text(ec));
        
-       if (strMode != NULL)
-               g_free(strMode);
-
        return nclErr;
 }
 /*****************************************************************************
@@ -767,18 +753,46 @@ exit:
 static NCLError ncl_cmd_start_poll(int argc, char *argv[])
 {
        errorCode_t     ec              = NEARDAL_SUCCESS;
+       NCLError        nclErr;
        char            *adpName        = NULL;
+       static char     *strMode        = NULL;
 
-       if (argc <= 1)
-               return NCLERR_PARSING_PARAMETERS;
+static GOptionEntry options[] = {
+               { "mode", 's', 0, G_OPTION_ARG_STRING , &strMode
+                               , "Set Adapter mode initiator/target/both",
+                               "'initiator, target, both'" },
+
+               { NULL, 0, 0, 0, NULL, NULL, NULL} /* End of List */
+       };
 
        /* Install Neardal Callback*/
        if (sNclCmdCtx.cb_initialized == false)
                ncl_cmd_install_callback();
 
+       if (argc > 1)
+               /* Parse options */
+               nclErr = ncl_cmd_prv_parseOptions(&argc, &argv, options);
+       else
+               nclErr = NCLERR_PARSING_PARAMETERS;
+
+       if (nclErr != NCLERR_NOERROR)
+               goto exit;
+
        /* Start polling if adapter present */
        adpName = argv[1];
-       ec = neardal_start_poll(adpName);
+       if (strMode != NULL) {
+               if (!strcmp(strMode, "initiator"))
+                       ec = neardal_start_poll_loop(adpName,
+                                                    NEARD_ADP_MODE_INITIATOR);
+               else if (!strcmp(strMode, "target"))
+                       ec = neardal_start_poll_loop(adpName,
+                                                    NEARD_ADP_MODE_TARGET);
+               else
+                       ec = neardal_start_poll_loop(adpName,
+                                                    NEARD_ADP_MODE_BOTH);
+       } else
+               ec = neardal_start_poll(adpName);
+       
        if (ec != NEARDAL_SUCCESS) {
                NCL_CMD_PRINTF("NFC polling activation error:%d='%s'\n",
                                ec, neardal_error_get_text(ec));
@@ -788,7 +802,14 @@ static NCLError ncl_cmd_start_poll(int argc, char *argv[])
        NCL_CMD_PRINT("\nExit with error code %d:%s\n", ec,
                      neardal_error_get_text(ec));
 
-       return NCLERR_NOERROR;
+exit:
+       if (strMode != NULL)
+               g_free(strMode);
+       
+       if (ec != NEARDAL_SUCCESS)
+               nclErr = NCLERR_LIB_ERROR;
+
+       return nclErr;
 }
 /*****************************************************************************
  * ncl_cmd_start_poll : END