This is needed for cleaning all targets when a new poll starts.
&target_path);
}
-static void target_changed(struct near_adapter *adapter)
+void __near_adapter_target_changed(uint32_t adapter_idx)
{
+ struct near_adapter *adapter;
+
+ adapter = g_hash_table_lookup(adapter_hash,
+ GINT_TO_POINTER(adapter_idx));
+ if (adapter == NULL)
+ return;
+
near_dbus_property_changed_array(adapter->path,
NFC_ADAPTER_INTERFACE, "Target",
DBUS_TYPE_OBJECT_PATH, append_target,
static void tag_read_cb(uint32_t adapter_idx, int status)
{
- struct near_adapter *adapter;
-
- DBG("%d", status);
-
if (status < 0)
return;
- adapter = g_hash_table_lookup(adapter_hash, GINT_TO_POINTER(adapter_idx));
- if (adapter == NULL)
- return;
-
- target_changed(adapter);
+ __near_adapter_target_changed(adapter_idx);
}
-int __near_adapter_add_target(uint32_t idx, struct near_target *target)
+int __near_adapter_add_target(uint32_t idx, uint32_t target_idx,
+ uint32_t protocols, enum near_target_type type,
+ uint16_t sens_res, uint8_t sel_res)
{
struct near_adapter *adapter;
+ struct near_target *target;
DBG("idx %d", idx);
if (adapter == NULL)
return -ENODEV;
- /* TODO target reference */
- adapter->target = target;
adapter->polling = FALSE;
-
polling_changed(adapter);
+ /* TODO target reference */
+ target = __near_target_add(idx, target_idx, protocols, type,
+ sens_res, sel_res);
+ if (target == NULL)
+ return -ENODEV;
+
+ adapter->target = target;
+
__near_tag_read(target, tag_read_cb);
return 0;
adapter->target = NULL;
}
+ __near_target_remove(target);
+
return 0;
}
void __near_adapter_cleanup(void)
{
+ DBG("");
+
g_hash_table_destroy(adapter_hash);
adapter_hash = NULL;
}
int __near_manager_init(DBusConnection *conn);
void __near_manager_cleanup(void);
-#include <near/adapter.h>
-
-struct near_adapter * __near_adapter_create(uint32_t idx,
- const char *name, uint32_t protocols);
-void __near_adapter_destroy(struct near_adapter *adapter);
-const char *__near_adapter_get_path(struct near_adapter *adapter);
-struct near_adapter *__near_adapter_get(uint32_t idx);
-int __near_adapter_add(struct near_adapter *adapter);
-void __near_adapter_remove(struct near_adapter *adapter);
-int __near_adapter_add_target(uint32_t idx, struct near_target *target);
-int __near_adapter_remove_target(uint32_t idx, struct near_target *target);
-void __near_adapter_list(DBusMessageIter *iter, void *user_data);
-int __near_adapter_init(void);
-void __near_adapter_cleanup(void);
-
#include <near/target.h>
enum near_target_type {
uint32_t __near_target_get_idx(struct near_target *target);
uint32_t __near_target_get_adapter_idx(struct near_target *target);
uint32_t __near_target_get_protocols(struct near_target *target);
-int __near_target_add(uint32_t adapter_idx, uint32_t target_idx,
- uint32_t protocols, enum near_target_type type,
- uint16_t sens_res, uint8_t sel_res);
+struct near_target * __near_target_add(uint32_t adapter_idx, uint32_t target_idx,
+ uint32_t protocols, enum near_target_type type,
+ uint16_t sens_res, uint8_t sel_res);
void __near_target_remove(struct near_target *target);
int __near_target_init(void);
void __near_target_cleanup(void);
+#include <near/adapter.h>
+
+struct near_adapter * __near_adapter_create(uint32_t idx,
+ const char *name, uint32_t protocols);
+void __near_adapter_destroy(struct near_adapter *adapter);
+const char *__near_adapter_get_path(struct near_adapter *adapter);
+struct near_adapter *__near_adapter_get(uint32_t idx);
+int __near_adapter_add(struct near_adapter *adapter);
+void __near_adapter_remove(struct near_adapter *adapter);
+int __near_adapter_add_target(uint32_t idx, uint32_t target_idx,
+ uint32_t protocols, enum near_target_type type,
+ uint16_t sens_res, uint8_t sel_res);
+int __near_adapter_remove_target(uint32_t idx, struct near_target *target);
+void __near_adapter_target_changed(uint32_t adapter_idx);
+void __near_adapter_list(DBusMessageIter *iter, void *user_data);
+int __near_adapter_init(void);
+void __near_adapter_cleanup(void);
+
#include <near/ndef.h>
int __near_ndef_init(void);
DBG("target idx %d proto 0x%x sens_res 0x%x sel_res 0x%x",
target_idx, protocols, sens_res, sel_res);
- __near_target_add(adapter_idx, target_idx, protocols,
+ __near_adapter_add_target(adapter_idx, target_idx, protocols,
NEAR_TARGET_TYPE_TAG, sens_res, sel_res);
return 0;
{
struct near_target *target = data;
+ DBG("");
+
if (target->tag != NULL)
__near_tag_free(target->tag);
- g_free(target->path);
g_free(target);
}
DBG("tag type 0x%x", target->tag_type);
}
-int __near_target_add(uint32_t adapter_idx, uint32_t target_idx,
- uint32_t protocols, enum near_target_type type,
- uint16_t sens_res, uint8_t sel_res)
+struct near_target *__near_target_add(uint32_t adapter_idx, uint32_t target_idx,
+ uint32_t protocols, enum near_target_type type,
+ uint16_t sens_res, uint8_t sel_res)
{
struct near_target *target;
char *path;
adapter_idx, target_idx);
if (path == NULL)
- return -ENOMEM;
+ return NULL;
if (g_hash_table_lookup(target_hash, path) != NULL)
- return -EEXIST;
+ return NULL;
target = g_try_malloc0(sizeof(struct near_target));
if (target == NULL)
- return -ENOMEM;
+ return NULL;
target->path = path;
target->idx = target_idx;
target_methods, target_signals,
NULL, target, NULL);
- return __near_adapter_add_target(adapter_idx, target);
+ return target;
}
void __near_target_remove(struct near_target *target)
if (g_hash_table_lookup(target_hash, target->path) == NULL)
return;
- __near_adapter_remove_target(target->adapter_idx, target);
-
g_dbus_unregister_interface(connection, target->path,
NFC_TARGET_INTERFACE);