AdpProp *adpProp = user_data;
errorCode_t err;
neardal_t neardalMgr;
+ TgtProp *tgtProp;
NEARDAL_TRACEIN();
(void) proxy; /* remove warning */
* callback 'Record Found' would be called before ) */
err = neardal_tgt_add(neardalMgr, adpProp,
(char *) arg_unnamed_arg0);
- if (err != NEARDAL_SUCCESS) {
- if (neardalMgr->cb_tgt_found != NULL)
- (neardalMgr->cb_tgt_found)((char *) arg_unnamed_arg0,
- neardalMgr->cb_tgt_found_ud);
+ if (err == NEARDAL_SUCCESS) {
+ tgtProp = g_list_nth_data(adpProp->tgtList, 0);
+ neardal_tgt_notify_target_found(neardalMgr, tgtProp);
}
NEARDAL_TRACEF("NEARDAL LIB targetList contains %d elements\n",
g_list_length(adpProp->tgtList));
tgtArray = g_variant_dup_objv (tmp, &tmpLen);
adpProp->tgtNb = tmpLen;
if (tmpLen == 0) {
- GList *node = NULL;
NEARDAL_TRACEF(
"Target array empty! Removing all targets\n");
- while (g_list_length(adpProp->tgtList)) {
- node = g_list_first(adpProp->tgtList);
- tgtProp = (TgtProp *) node->data;
+ while (tmpLen < g_list_length(adpProp->tgtList)) {
+ tgtProp = g_list_nth_data(adpProp->tgtList,
+ tmpLen++);
neardal_adp_prv_cb_target_lost(tgtProp->proxy,
tgtProp->name,
tgtProp->parent);
errorCode_t errCode = NEARDAL_SUCCESS;
AdpProp *adpProp = NULL;
GList **adpList;
+ TgtProp *tgtProp;
+ gsize len;
g_assert(neardalMgr != NULL);
NEARDAL_TRACEF("Adding adapter:%s\n", adapterName);
(neardalMgr->cb_adp_added)((char *) adapterName,
neardalMgr->cb_adp_added_ud);
+ /* Notify 'Target Found' */
+ len = 0;
+ while (len < g_list_length(adpProp->tgtList)) {
+ tgtProp = g_list_nth_data(adpProp->tgtList, len++);
+ neardal_tgt_notify_target_found(neardalMgr, tgtProp);
+ len++;
+ }
return errCode;
}
NEARDAL_TRACEF("NEARDAL LIB recordList contains %d elements\n",
g_list_length(tgtProp->rcdList));
- if (neardalMgr->cb_rcd_found != NULL)
- (neardalMgr->cb_rcd_found)(rcdName,
- neardalMgr->cb_rcd_found_ud);
errCode = NEARDAL_SUCCESS;
exit:
orgNeardRcd *proxy; /* proxy to Neard NFC Record interface */
char *name; /* DBus interface name (as identifier) */
void *parent; /* parent (target) */
+ gboolean notified; /* Already notified to client? */
char *encoding;
gboolean handOver;
}
/******************************************************************************
+ * neardal_tgt_notify_target_found: Invoke client callback for 'record found'
+ * if present, and 'target found' (if not already nofied)
+ *****************************************************************************/
+void neardal_tgt_notify_target_found(neardal_t neardalMgr, TgtProp *tgtProp)
+{
+ RcdProp *rcdProp;
+ gsize len;
+
+ g_assert(neardalMgr != NULL);
+ g_assert(tgtProp != NULL);
+
+
+ if (tgtProp->notified == FALSE && neardalMgr->cb_tgt_found != NULL) {
+ (neardalMgr->cb_tgt_found)(tgtProp->name,
+ neardalMgr->cb_tgt_found_ud);
+ tgtProp->notified = TRUE;
+ }
+
+ len = 0;
+ if (neardalMgr->cb_rcd_found != NULL)
+ while (len < g_list_length(tgtProp->rcdList)) {
+ rcdProp = g_list_nth_data(tgtProp->rcdList, len++);
+ if (rcdProp->notified == FALSE) {
+ (neardalMgr->cb_rcd_found)(rcdProp->name,
+ neardalMgr->cb_rcd_found_ud);
+ rcdProp->notified = TRUE;
+ }
+ }
+}
+/******************************************************************************
* neardal_get_targets: get an array of NFC targets present
*****************************************************************************/
errorCode_t neardal_get_targets(neardal_t neardalMgr, char *adpName,
NEARDAL_TRACEF("NEARDAL LIB targetList contains %d elements\n",
g_list_length(adpProp->tgtList));
- if (neardalMgr->cb_tgt_found != NULL)
- (neardalMgr->cb_tgt_found)(tgtProp->name,
- neardalMgr->cb_tgt_found_ud);
-
return errCode;
error:
/* NEARDAL Target Properties */
typedef struct {
- orgNeardTgt *proxy; /* proxy to Neard NEARDAL Target
- interface */
- char *name; /* DBus interface name
- (as identifier) */
- void *parent; /* parent (adapter ) */
+ orgNeardTgt *proxy; /* proxy to Neard NEARDAL Target interface */
+ char *name; /* DBus interface name (as identifier) */
+ void *parent; /* parent (adapter ) */
+ gboolean notified; /* Already notified to client? */
gchar *type;
} TgtProp;
/******************************************************************************
+ * neardal_tgt_notify_target_found: Invoke client callback for 'record found'
+ * if present, and 'target found' (if not already nofied)
+ *****************************************************************************/
+void neardal_tgt_notify_target_found(neardal_t neardalMgr, TgtProp *tgtProp);
+
+/******************************************************************************
* neardal_tgt_add: add new NEARDAL target, initialize DBus Proxy connection,
* register target signal
*****************************************************************************/