<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>
+
<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>
-
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};
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;
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;
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;
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;
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;
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;
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;
}
/*****************************************************************************
* 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;
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;
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;
****************************************************************************/
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 */
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);
*/
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
* @addtogroup NEARDAL_CALLBACK Defines
* @{ */
#define NEARD_ADP_PROP_POWERED 0
-#define NEARD_ADP_PROP_MODE 1
/* @}*/
errorCode_t neardal_set_cb_record_found(record_cb cb_rcd_found,
void *user_data);
-/* @}*/
-
#ifdef __cplusplus
}
tagName = tagArray[len++];
err = neardal_tag_prv_add(tagName,
adpProp);
- adpProp->tagNb++;
}
}
}
}
/*****************************************************************************
- * 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)
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;
}
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;
}
#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 */
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 */
};
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;
}
/*****************************************************************************
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));
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