summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am27
-rw-r--r--doc/adapter-api.txt8
-rw-r--r--doc/agent-api.txt39
-rw-r--r--doc/manager-api.txt63
-rw-r--r--doc/phdc-api.txt2
-rw-r--r--include/dbus.h4
-rw-r--r--plugins/phdc.c4
-rw-r--r--src/adapter.c251
-rw-r--r--src/agent.c163
-rw-r--r--src/manager.c212
-rw-r--r--src/near.h8
-rwxr-xr-xtest/disable-adapter23
-rwxr-xr-xtest/enable-adapter23
-rwxr-xr-xtest/handover-agent4
-rwxr-xr-xtest/list-adapters40
-rwxr-xr-xtest/monitor-near131
-rwxr-xr-xtest/ndef-agent4
-rw-r--r--test/neardutils.py24
-rwxr-xr-xtest/phdc-simple-manager4
-rwxr-xr-xtest/start-poll30
-rwxr-xr-xtest/stop-poll23
-rwxr-xr-xtest/test-adapter107
22 files changed, 510 insertions, 684 deletions
diff --git a/Makefile.am b/Makefile.am
index cfea48f..4186069 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -71,18 +71,18 @@ else
build_plugindir = $(plugindir)
endif
-doc_files = doc/manager-api.txt doc/tag-api.txt doc/device-api.txt \
- doc/adapter-api.txt doc/agent-api.txt doc/phdc-api.txt
+doc_files = doc/tag-api.txt doc/device-api.txt doc/adapter-api.txt \
+ doc/agent-api.txt doc/phdc-api.txt
EXTRA_DIST = src/genbuiltin $(doc_files)
dist_man_MANS = doc/neard.8 doc/neard.conf.5 doc/nfctool.1
-test_scripts = test/disable-adapter test/enable-adapter test/list-adapters \
+test_scripts = test/test-adapter \
test/dump-device test/dump-tag test/dump-record \
- test/monitor-near test/start-poll test/stop-poll test/write-tag \
+ test/monitor-near test/write-tag \
test/push-device test/bt-handover test/handover-agent \
- test/phdc-simple-manager
+ test/phdc-simple-manager test/neardutils.py
if TEST
testdir = $(pkglibdir)/test
@@ -96,7 +96,8 @@ noinst_PROGRAMS = tools/snep-send
tools_snep_send_SOURCES = $(gdbus_sources) src/log.c src/dbus.c \
src/bluetooth.c src/ndef.c \
- tools/snep-send.c src/agent.c
+ tools/snep-send.c src/error.c \
+ src/agent.c
tools_snep_send_LDADD = @GLIB_LIBS@ @DBUS_LIBS@
tools_nfctool_nfctool_SOURCES = tools/nfctool/main.c \
@@ -121,18 +122,20 @@ tools_nfctool_nfctool_LDADD = @GLIB_LIBS@ @NETLINK_LIBS@
unit_tests = unit/test-ndef-parse unit/test-ndef-build unit/test-snep-read
unit_test_ndef_parse_SOURCES = $(gdbus_sources) src/log.c src/dbus.c \
- src/agent.c src/bluetooth.c \
- src/ndef.c unit/test-ndef-parse.c
+ src/error.c src/agent.c \
+ src/bluetooth.c src/ndef.c \
+ unit/test-ndef-parse.c
unit_test_ndef_parse_LDADD = @GLIB_LIBS@ @DBUS_LIBS@
unit_test_ndef_build_SOURCES = $(gdbus_sources) src/log.c src/dbus.c \
- src/agent.c src/bluetooth.c \
- src/ndef.c unit/test-ndef-build.c
+ src/error.c src/agent.c \
+ src/bluetooth.c src/ndef.c \
+ unit/test-ndef-build.c
unit_test_ndef_build_LDADD = @GLIB_LIBS@ @DBUS_LIBS@
unit_test_snep_read_SOURCES = $(gdbus_sources) src/log.c src/dbus.c \
- src/agent.c src/bluetooth.c \
- src/ndef.c src/snep.c \
+ src/error.c src/agent.c \
+ src/bluetooth.c src/ndef.c src/snep.c \
unit/test-snep-read.c unit/test-utils.c \
unit/test-utils.h
unit_test_snep_read_LDADD = @GLIB_LIBS@ @DBUS_LIBS@
diff --git a/doc/adapter-api.txt b/doc/adapter-api.txt
index b6a5831..86aa818 100644
--- a/doc/adapter-api.txt
+++ b/doc/adapter-api.txt
@@ -117,11 +117,3 @@ Properties string Mode [readonly]
The adapter supported protocols.
Possible values are "Felica", "MIFARE", "Jewel",
"ISO-DEP" and "NFC-DEP".
-
- array{object} Tags [readonly]
-
- The tags object paths.
-
- array{object} Devices [readonly]
-
- The devices object paths.
diff --git a/doc/agent-api.txt b/doc/agent-api.txt
index 758a803..b049ecc 100644
--- a/doc/agent-api.txt
+++ b/doc/agent-api.txt
@@ -1,3 +1,42 @@
+Agent Manager hierarchy
+=======================
+
+Service org.neard
+Interface org.neard.AgentManager
+Object path /org/neard
+
+Methods void RegisterHandoverAgent(object path, string carrier)
+
+ Register new handover agent.
+
+ Supported carriers are: 'bluetooth', 'wifi'.
+ Only one registration will be accepted per carrier.
+
+ Possible Errors: org.neard.Error.InvalidArguments
+ org.neard.Error.AlreadyExists.
+
+ void UnregisterHandoverAgent(object path, string carrier)
+
+ Unregister an existing handover agent.
+
+ Possible Errors: org.neard.Error.InvalidArguments
+
+ void RegisterNDEFAgent(object path, string type)
+
+ Register new NDEF agent.
+
+ When a record matching the registered type is found,
+ the agent will get the whole NDEF as a raw byte stream.
+
+ Possible Errors: org.neard.Error.InvalidArguments
+
+ void UnregisterNDEFAgent(object path, string type)
+
+ Unregister an existing NDEF agent.
+
+ Possible Errors: org.neard.Error.InvalidArguments
+
+
HandoverAgent hierarchy
=======================
diff --git a/doc/manager-api.txt b/doc/manager-api.txt
deleted file mode 100644
index 0182bd3..0000000
--- a/doc/manager-api.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-Manager hierarchy
-=================
-
-Service org.neard
-Interface org.neard.Manager
-Object path /
-
-Methods dict GetProperties()
-
- Returns all properties for the manager. See the
- properties section for available properties.
-
- Possible Errors: org.neard.Error.DoesNotExist
-
- void RegisterHandoverAgent(object path, string carrier)
-
- Register new handover agent.
-
- Supported carriers are: 'bluetooth', 'wifi'.
- Only one registration will be accepted per carrier.
-
- Possible Errors: org.neard.Error.InvalidArguments
- org.neard.Error.AlreadyExists.
-
- void UnregisterHandoverAgent(object path, string carrier)
-
- Unregister an existing handover agent.
-
- Possible Errors: org.neard.Error.InvalidArguments
-
- void RegisterNDEFAgent(object path, string type)
-
- Register new NDEF agent.
-
- When a record matching the registered type is found,
- the agent will get the whole NDEF as a raw byte stream.
-
- Possible Errors: org.neard.Error.InvalidArguments
-
- void UnregisterNDEFAgent(object path, string type)
-
- Unregister an existing NDEF agent.
-
- Possible Errors: org.neard.Error.InvalidArguments
-
-
-Signals PropertyChanged(string name, variant value)
-
- This signal indicates a changed value of the given
- property.
-
- AdapterAdded(object adapter)
-
- Parameter is the object path of added adapter.
-
- AdapterRemoved(object adapter)
-
- Parameter is the object path of removed adapter.
-
-
-Properties array{object} Adapters [readonly]
-
- List of adapter object paths.
diff --git a/doc/phdc-api.txt b/doc/phdc-api.txt
index 1dc7983..4d24195 100644
--- a/doc/phdc-api.txt
+++ b/doc/phdc-api.txt
@@ -2,7 +2,7 @@ PHDC hierarchy
==============
Service org.neard
Interface org.neard.PHDC
-Object path /
+Object path /org/neard
Methods void RegisterAgent(dict values)
diff --git a/include/dbus.h b/include/dbus.h
index 245152a..8ed2329 100644
--- a/include/dbus.h
+++ b/include/dbus.h
@@ -25,12 +25,10 @@
#define NFC_PATH "/org/neard"
#define NFC_ERROR_INTERFACE NFC_SERVICE ".Error"
+#define NFC_AGENT_MANAGER_INTERFACE NFC_SERVICE ".AgentManager"
#define NFC_NDEF_AGENT_INTERFACE NFC_SERVICE ".NDEFAgent"
#define NFC_HANDOVER_AGENT_INTERFACE NFC_SERVICE ".HandoverAgent"
-#define NFC_MANAGER_INTERFACE NFC_SERVICE ".Manager"
-#define NFC_MANAGER_PATH "/"
-
#define NFC_ADAPTER_INTERFACE NFC_SERVICE ".Adapter"
#define NFC_DEVICE_INTERFACE NFC_SERVICE ".Device"
#define NFC_TAG_INTERFACE NFC_SERVICE ".Tag"
diff --git a/plugins/phdc.c b/plugins/phdc.c
index 149da27..575ee83 100644
--- a/plugins/phdc.c
+++ b/plugins/phdc.c
@@ -533,7 +533,7 @@ int phdc_init(void)
free_mgr_data);
/* register dbus interface */
- err = g_dbus_register_interface(phdc_conn, NFC_NEARD_PHDC_PATH,
+ err = g_dbus_register_interface(phdc_conn, "/org/neard",
NFC_NEARD_PHDC_IFACE,
phdc_methods,
NULL, NULL, NULL, NULL);
@@ -549,7 +549,7 @@ void phdc_exit(void)
/* Notify listeners...*/
g_hash_table_foreach(mgr_list, mgr_agent_release, NULL);
- g_dbus_unregister_interface(phdc_conn, NFC_NEARD_PHDC_PATH,
+ g_dbus_unregister_interface(phdc_conn, "/org/neard",
NFC_NEARD_PHDC_IFACE);
/* Clean before leaving */
g_hash_table_remove_all(mgr_list);
diff --git a/src/adapter.c b/src/adapter.c
index 674d8ef..ccef7ba 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -142,24 +142,14 @@ static char *rf_mode_to_string(struct near_adapter *adapter)
static void polling_changed(struct near_adapter *adapter)
{
- dbus_bool_t polling;
-
- polling = adapter->polling;
- near_dbus_property_changed_basic(adapter->path,
- NFC_ADAPTER_INTERFACE, "Polling",
- DBUS_TYPE_BOOLEAN, &polling);
+ g_dbus_emit_property_changed(connection, adapter->path,
+ NFC_ADAPTER_INTERFACE, "Polling");
}
static void rf_mode_changed(struct near_adapter *adapter)
{
- const char *rf_mode = rf_mode_to_string(adapter);
-
- if (!rf_mode)
- return;
-
- near_dbus_property_changed_basic(adapter->path,
- NFC_ADAPTER_INTERFACE, "Mode",
- DBUS_TYPE_STRING, &rf_mode);
+ g_dbus_emit_property_changed(connection, adapter->path,
+ NFC_ADAPTER_INTERFACE, "Mode");
}
static int adapter_start_poll(struct near_adapter *adapter)
@@ -221,44 +211,6 @@ void __near_adapter_list(DBusMessageIter *iter, void *user_data)
g_hash_table_foreach(adapter_hash, append_path, iter);
}
-static void append_protocols(DBusMessageIter *iter, void *user_data)
-{
- struct near_adapter *adapter = user_data;
- const char *str;
-
- DBG("protocols 0x%x", adapter->protocols);
-
- if (adapter->protocols & NFC_PROTO_FELICA_MASK) {
- str = "Felica";
-
- dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &str);
- }
-
- if (adapter->protocols & NFC_PROTO_MIFARE_MASK) {
- str = "MIFARE";
-
- dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &str);
- }
-
- if (adapter->protocols & NFC_PROTO_JEWEL_MASK) {
- str = "Jewel";
-
- dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &str);
- }
-
- if (adapter->protocols & NFC_PROTO_ISO14443_MASK) {
- str = "ISO-DEP";
-
- dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &str);
- }
-
- if (adapter->protocols & NFC_PROTO_NFC_DEP_MASK) {
- str = "NFC-DEP";
-
- dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &str);
- }
-}
-
static void append_tag_path(gpointer key, gpointer value, gpointer user_data)
{
struct near_tag *tag = value;
@@ -342,97 +294,151 @@ void __near_adapter_devices_changed(uint32_t adapter_idx)
adapter);
}
-static DBusMessage *get_properties(DBusConnection *conn,
- DBusMessage *msg, void *data)
+static gboolean property_get_mode(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *user_data)
{
- struct near_adapter *adapter = data;
+ struct near_adapter *adapter = user_data;
const char *rf_mode;
- DBusMessage *reply;
- DBusMessageIter array, dict;
+
+ rf_mode = rf_mode_to_string(adapter);
+ if (!rf_mode)
+ return FALSE;
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &rf_mode);
+
+ return TRUE;
+}
+
+static gboolean property_get_polling(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *user_data)
+{
+ struct near_adapter *adapter = user_data;
dbus_bool_t val;
- DBG("conn %p", conn);
+ val = adapter->polling;
- reply = dbus_message_new_method_return(msg);
- if (!reply)
- return NULL;
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &val);
- dbus_message_iter_init_append(reply, &array);
+ return TRUE;
+}
- near_dbus_dict_open(&array, &dict);
+static gboolean property_get_powered(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *user_data)
+{
+ struct near_adapter *adapter = user_data;
+ dbus_bool_t val;
val = adapter->powered;
- near_dbus_dict_append_basic(&dict, "Powered",
- DBUS_TYPE_BOOLEAN, &val);
- val = adapter->polling;
- near_dbus_dict_append_basic(&dict, "Polling",
- DBUS_TYPE_BOOLEAN, &val);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &val);
- rf_mode = rf_mode_to_string(adapter);
- if (rf_mode)
- near_dbus_dict_append_basic(&dict, "Mode",
- DBUS_TYPE_STRING, &rf_mode);
+ return TRUE;
+}
+
+static void set_powered(GDBusPendingPropertySet id, dbus_bool_t powered,
+ void *data)
+{
+ struct near_adapter *adapter = data;
+ int err;
+
+ err = __near_netlink_adapter_enable(adapter->idx, powered);
+ if (err < 0) {
+ if (err == -EALREADY) {
+ if (powered)
+ g_dbus_pending_property_error(id,
+ NFC_ERROR_INTERFACE ".Failed",
+ "Device already enabled");
+ else
+ g_dbus_pending_property_error(id,
+ NFC_ERROR_INTERFACE ".Failed",
+ "Device already disabled");
+ }
- near_dbus_dict_append_array(&dict, "Protocols",
- DBUS_TYPE_STRING, append_protocols, adapter);
+ g_dbus_pending_property_error(id,
+ NFC_ERROR_INTERFACE ".Failed",
+ strerror(err));
- near_dbus_dict_append_array(&dict, "Tags",
- DBUS_TYPE_OBJECT_PATH, append_tags, adapter);
+ return;
+ }
- near_dbus_dict_append_array(&dict, "Devices",
- DBUS_TYPE_OBJECT_PATH, append_devices, adapter);
+ g_dbus_pending_property_success(id);
- near_dbus_dict_close(&array, &dict);
+ adapter->powered = powered;
- return reply;
+ g_dbus_emit_property_changed(connection, adapter->path,
+ NFC_ADAPTER_INTERFACE, "Powered");
}
-static DBusMessage *set_property(DBusConnection *conn,
- DBusMessage *msg, void *data)
+static void property_set_powered(const GDBusPropertyTable *property,
+ DBusMessageIter *value,
+ GDBusPendingPropertySet id, void *data)
{
- struct near_adapter *adapter = data;
- DBusMessageIter iter, value;
- const char *name;
- int type, err;
+ dbus_bool_t powered;
- DBG("conn %p", conn);
+ if (dbus_message_iter_get_arg_type(value) != DBUS_TYPE_BOOLEAN) {
+ g_dbus_pending_property_error(id,
+ NFC_ERROR_INTERFACE ".InvalidArguments",
+ "Invalid arguments in method call");
+ return;
+ }
- if (!dbus_message_iter_init(msg, &iter))
- return __near_error_invalid_arguments(msg);
+ dbus_message_iter_get_basic(value, &powered);
- dbus_message_iter_get_basic(&iter, &name);
- dbus_message_iter_next(&iter);
- dbus_message_iter_recurse(&iter, &value);
+ set_powered(id, powered, data);
+}
- type = dbus_message_iter_get_arg_type(&value);
+static void append_protocols(DBusMessageIter *iter,
+ struct near_adapter *adapter)
+{
+ const char *str;
- if (g_str_equal(name, "Powered")) {
- dbus_bool_t powered;
+ DBG("protocols 0x%x", adapter->protocols);
- if (type != DBUS_TYPE_BOOLEAN)
- return __near_error_invalid_arguments(msg);
+ if (adapter->protocols & NFC_PROTO_FELICA_MASK) {
+ str = "Felica";
- dbus_message_iter_get_basic(&value, &powered);
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &str);
+ }
- err = __near_netlink_adapter_enable(adapter->idx, powered);
- if (err < 0) {
- if (err == -EALREADY) {
- if (powered)
- return __near_error_already_enabled(msg);
- else
- return __near_error_already_disabled(msg);
- }
+ if (adapter->protocols & NFC_PROTO_MIFARE_MASK) {
+ str = "MIFARE";
- return __near_error_failed(msg, -err);
- }
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &str);
+ }
- adapter->powered = powered;
- } else {
- return __near_error_invalid_property(msg);
+ if (adapter->protocols & NFC_PROTO_JEWEL_MASK) {
+ str = "Jewel";
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &str);
}
- return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+ if (adapter->protocols & NFC_PROTO_ISO14443_MASK) {
+ str = "ISO-DEP";
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &str);
+ }
+
+ if (adapter->protocols & NFC_PROTO_NFC_DEP_MASK) {
+ str = "NFC-DEP";
+
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &str);
+ }
+}
+
+static gboolean property_get_protocols(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *user_data)
+{
+ struct near_adapter *adapter = user_data;
+ DBusMessageIter dict;
+
+ dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
+ DBUS_TYPE_STRING_AS_STRING, &dict);
+
+ append_protocols(&dict, adapter);
+
+ dbus_message_iter_close_container(iter, &dict);
+
+ return TRUE;
}
static DBusMessage *start_poll_loop(DBusConnection *conn,
@@ -601,23 +607,18 @@ void __near_adapter_stop_check_presence(uint32_t adapter_idx,
}
static const GDBusMethodTable adapter_methods[] = {
- { GDBUS_METHOD("GetProperties",
- NULL, GDBUS_ARGS({"properties", "a{sv}"}),
- get_properties) },
- { GDBUS_METHOD("SetProperty",
- GDBUS_ARGS({"name", "s"}, {"value", "v"}),
- NULL, set_property) },
{ GDBUS_METHOD("StartPollLoop", GDBUS_ARGS({"name", "s"}), NULL,
start_poll_loop) },
{ GDBUS_METHOD("StopPollLoop", NULL, NULL, stop_poll_loop) },
{ },
};
-static const GDBusSignalTable adapter_signals[] = {
- { GDBUS_SIGNAL("PropertyChanged",
- GDBUS_ARGS({"name", "s"}, {"value", "v"})) },
- { GDBUS_SIGNAL("TagFound", GDBUS_ARGS({"address", "o"})) },
- { GDBUS_SIGNAL("TagLost", GDBUS_ARGS({"address", "o"})) },
+static const GDBusPropertyTable adapter_properties[] = {
+ { "Mode", "s", property_get_mode },
+ { "Powered", "b", property_get_powered, property_set_powered },
+ { "Polling", "b", property_get_polling },
+ { "Protocols", "as", property_get_protocols },
+
{ }
};
@@ -737,8 +738,8 @@ int __near_adapter_add(struct near_adapter *adapter)
g_dbus_register_interface(connection, adapter->path,
NFC_ADAPTER_INTERFACE,
- adapter_methods, adapter_signals,
- NULL, adapter, NULL);
+ adapter_methods, NULL,
+ adapter_properties, adapter, NULL);
return 0;
}
diff --git a/src/agent.c b/src/agent.c
index a521cb8..168086b 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -25,6 +25,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <unistd.h>
#include <errno.h>
#include <string.h>
@@ -188,7 +189,7 @@ void __near_agent_ndef_parse_records(GList *records)
ndef_agent_push_records(agent, records);
}
-int __near_agent_ndef_register(const char *sender, const char *path,
+static int ndef_register(const char *sender, const char *path,
const char *record_type)
{
struct near_ndef_agent *agent;
@@ -220,7 +221,7 @@ int __near_agent_ndef_register(const char *sender, const char *path,
return 0;
}
-int __near_agent_ndef_unregister(const char *sender, const char *path,
+static int ndef_unregister(const char *sender, const char *path,
const char *record_type)
{
struct near_ndef_agent *agent;
@@ -601,7 +602,7 @@ static int create_handover_agent(const char *sender, const char *path,
return 0;
}
-int __near_agent_handover_register(const char *sender, const char *path,
+static int handover_register(const char *sender, const char *path,
const char *carrier)
{
struct near_handover_agent *agent;
@@ -621,7 +622,7 @@ int __near_agent_handover_register(const char *sender, const char *path,
return create_handover_agent(sender, path, ho_carrier);
}
-int __near_agent_handover_unregister(const char *sender, const char *path,
+static int handover_unregister(const char *sender, const char *path,
const char *carrier)
{
struct near_handover_agent *agent;
@@ -652,6 +653,150 @@ bool __near_agent_handover_registered(enum ho_agent_carrier carrier)
return agent ? TRUE : FALSE;
}
+static DBusMessage *register_handover_agent(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ DBusMessageIter iter;
+ const char *sender, *path, *carrier;
+ int err;
+
+ DBG("conn %p", conn);
+
+ sender = dbus_message_get_sender(msg);
+
+ if (!dbus_message_iter_init(msg, &iter))
+ return __near_error_invalid_arguments(msg);
+
+ if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_OBJECT_PATH)
+ return __near_error_invalid_arguments(msg);
+
+ dbus_message_iter_get_basic(&iter, &path);
+ dbus_message_iter_next(&iter);
+
+ if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
+ return __near_error_invalid_arguments(msg);
+
+ dbus_message_iter_get_basic(&iter, &carrier);
+
+ err = handover_register(sender, path, carrier);
+ if (err < 0)
+ return __near_error_failed(msg, -err);
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static DBusMessage *unregister_handover_agent(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ DBusMessageIter iter;
+ const char *sender, *path, *carrier;
+ int err;
+
+ DBG("conn %p", conn);
+
+ sender = dbus_message_get_sender(msg);
+
+ if (!dbus_message_iter_init(msg, &iter))
+ return __near_error_invalid_arguments(msg);
+
+ if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_OBJECT_PATH)
+ return __near_error_invalid_arguments(msg);
+
+ dbus_message_iter_get_basic(&iter, &path);
+ dbus_message_iter_next(&iter);
+
+ if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
+ return __near_error_invalid_arguments(msg);
+
+ dbus_message_iter_get_basic(&iter, &carrier);
+
+ err = handover_unregister(sender, path, carrier);
+ if (err < 0)
+ return __near_error_failed(msg, -err);
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static DBusMessage *register_ndef_agent(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ DBusMessageIter iter;
+ const char *sender, *path, *type;
+ int err;
+
+ DBG("conn %p", conn);
+
+ sender = dbus_message_get_sender(msg);
+
+ if (!dbus_message_iter_init(msg, &iter))
+ return __near_error_invalid_arguments(msg);
+
+ if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_OBJECT_PATH)
+ return __near_error_invalid_arguments(msg);
+
+ dbus_message_iter_get_basic(&iter, &path);
+ dbus_message_iter_next(&iter);
+
+ if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
+ return __near_error_invalid_arguments(msg);
+
+ dbus_message_iter_get_basic(&iter, &type);
+
+ err = ndef_register(sender, path, type);
+ if (err < 0)
+ return __near_error_failed(msg, -err);
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static DBusMessage *unregister_ndef_agent(DBusConnection *conn,
+ DBusMessage *msg, void *data)
+{
+ DBusMessageIter iter;
+ const char *sender, *path, *type;
+ int err;
+
+ DBG("conn %p", conn);
+
+ sender = dbus_message_get_sender(msg);
+
+ if (!dbus_message_iter_init(msg, &iter))
+ return __near_error_invalid_arguments(msg);
+
+ if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_OBJECT_PATH)
+ return __near_error_invalid_arguments(msg);
+
+ dbus_message_iter_get_basic(&iter, &path);
+ dbus_message_iter_next(&iter);
+
+ if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
+ return __near_error_invalid_arguments(msg);
+
+ dbus_message_iter_get_basic(&iter, &type);
+
+ err = ndef_unregister(sender, path, type);
+ if (err < 0)
+ return __near_error_failed(msg, -err);
+
+ return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
+}
+
+static const GDBusMethodTable manager_methods[] = {
+ { GDBUS_METHOD("RegisterHandoverAgent",
+ GDBUS_ARGS({ "path", "o" }, { "type", "s"}),
+ NULL, register_handover_agent) },
+ { GDBUS_METHOD("UnregisterHandoverAgent",
+ GDBUS_ARGS({ "path", "o" }, { "type", "s"}),
+ NULL, unregister_handover_agent) },
+ { GDBUS_METHOD("RegisterNDEFAgent",
+ GDBUS_ARGS({"path", "o"}, {"type", "s"}),
+ NULL, register_ndef_agent) },
+ { GDBUS_METHOD("UnregisterNDEFAgent",
+ GDBUS_ARGS({"path", "o"}, {"type", "s"}),
+ NULL, unregister_ndef_agent) },
+ { },
+};
+
int __near_agent_init(void)
{
DBG("");
@@ -660,6 +805,12 @@ int __near_agent_init(void)
if (!connection)
return -1;
+ g_dbus_register_interface(connection, NFC_PATH,
+ NFC_AGENT_MANAGER_INTERFACE,
+ manager_methods,
+ NULL, NULL, NULL, NULL);
+
+
ndef_app_hash = g_hash_table_new_full(g_str_hash, g_str_equal,
g_free, ndef_agent_free);
@@ -681,5 +832,9 @@ void __near_agent_cleanup(void)
g_hash_table_destroy(ho_agent_hash);
ho_agent_hash = NULL;
+ g_dbus_unregister_interface(connection, NFC_PATH,
+ NFC_AGENT_MANAGER_INTERFACE);
+
+
dbus_connection_unref(connection);
}
diff --git a/src/manager.c b/src/manager.c
index 94593a2..e4b72a7 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -35,30 +35,6 @@
static DBusConnection *connection;
-static DBusMessage *get_properties(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- DBusMessage *reply;
- DBusMessageIter array, dict;
-
- DBG("conn %p", conn);
-
- reply = dbus_message_new_method_return(msg);
- if (!reply)
- return NULL;
-
- dbus_message_iter_init_append(reply, &array);
-
- near_dbus_dict_open(&array, &dict);
-
- near_dbus_dict_append_array(&dict, "Adapters",
- DBUS_TYPE_OBJECT_PATH, __near_adapter_list, NULL);
-
- near_dbus_dict_close(&array, &dict);
-
- return reply;
-}
-
int __near_manager_adapter_add(uint32_t idx, const char *name,
uint32_t protocols, bool powered)
{
@@ -79,19 +55,8 @@ int __near_manager_adapter_add(uint32_t idx, const char *name,
}
err = __near_adapter_add(adapter);
- if (err < 0) {
+ if (err < 0)
__near_adapter_destroy(adapter);
- } else {
- near_dbus_property_changed_array(NFC_MANAGER_PATH,
- NFC_MANAGER_INTERFACE, "Adapters",
- DBUS_TYPE_OBJECT_PATH, __near_adapter_list,
- NULL);
-
- g_dbus_emit_signal(connection, "/",
- NFC_MANAGER_INTERFACE, "AdapterAdded",
- DBUS_TYPE_OBJECT_PATH, &path,
- DBUS_TYPE_INVALID);
- }
return err;
}
@@ -111,175 +76,9 @@ void __near_manager_adapter_remove(uint32_t idx)
if (!path)
return;
-
- g_dbus_emit_signal(connection, "/",
- NFC_MANAGER_INTERFACE, "AdapterRemoved",
- DBUS_TYPE_OBJECT_PATH, &path,
- DBUS_TYPE_INVALID);
-
__near_adapter_remove(adapter);
-
- near_dbus_property_changed_array(NFC_MANAGER_PATH,
- NFC_MANAGER_INTERFACE, "Adapters",
- DBUS_TYPE_OBJECT_PATH, __near_adapter_list,
- NULL);
-}
-
-static DBusMessage *register_handover_agent(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- DBusMessageIter iter;
- const char *sender, *path, *carrier;
- int err;
-
- DBG("conn %p", conn);
-
- sender = dbus_message_get_sender(msg);
-
- if (!dbus_message_iter_init(msg, &iter))
- return __near_error_invalid_arguments(msg);
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_OBJECT_PATH)
- return __near_error_invalid_arguments(msg);
-
- dbus_message_iter_get_basic(&iter, &path);
- dbus_message_iter_next(&iter);
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
- return __near_error_invalid_arguments(msg);
-
- dbus_message_iter_get_basic(&iter, &carrier);
-
- err = __near_agent_handover_register(sender, path, carrier);
- if (err < 0)
- return __near_error_failed(msg, -err);
-
- return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
-}
-
-static DBusMessage *unregister_handover_agent(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- DBusMessageIter iter;
- const char *sender, *path, *carrier;
- int err;
-
- DBG("conn %p", conn);
-
- sender = dbus_message_get_sender(msg);
-
- if (!dbus_message_iter_init(msg, &iter))
- return __near_error_invalid_arguments(msg);
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_OBJECT_PATH)
- return __near_error_invalid_arguments(msg);
-
- dbus_message_iter_get_basic(&iter, &path);
- dbus_message_iter_next(&iter);
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
- return __near_error_invalid_arguments(msg);
-
- dbus_message_iter_get_basic(&iter, &carrier);
-
- err = __near_agent_handover_unregister(sender, path, carrier);
- if (err < 0)
- return __near_error_failed(msg, -err);
-
- return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
}
-static DBusMessage *register_ndef_agent(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- DBusMessageIter iter;
- const char *sender, *path, *type;
- int err;
-
- DBG("conn %p", conn);
-
- sender = dbus_message_get_sender(msg);
-
- if (!dbus_message_iter_init(msg, &iter))
- return __near_error_invalid_arguments(msg);
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_OBJECT_PATH)
- return __near_error_invalid_arguments(msg);
-
- dbus_message_iter_get_basic(&iter, &path);
- dbus_message_iter_next(&iter);
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
- return __near_error_invalid_arguments(msg);
-
- dbus_message_iter_get_basic(&iter, &type);
-
- err = __near_agent_ndef_register(sender, path, type);
- if (err < 0)
- return __near_error_failed(msg, -err);
-
- return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
-}
-
-static DBusMessage *unregister_ndef_agent(DBusConnection *conn,
- DBusMessage *msg, void *data)
-{
- DBusMessageIter iter;
- const char *sender, *path, *type;
- int err;
-
- DBG("conn %p", conn);
-
- sender = dbus_message_get_sender(msg);
-
- if (!dbus_message_iter_init(msg, &iter))
- return __near_error_invalid_arguments(msg);
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_OBJECT_PATH)
- return __near_error_invalid_arguments(msg);
-
- dbus_message_iter_get_basic(&iter, &path);
- dbus_message_iter_next(&iter);
-
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING)
- return __near_error_invalid_arguments(msg);
-
- dbus_message_iter_get_basic(&iter, &type);
-
- err = __near_agent_ndef_unregister(sender, path, type);
- if (err < 0)
- return __near_error_failed(msg, -err);
-
- return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
-}
-
-static const GDBusMethodTable manager_methods[] = {
- { GDBUS_METHOD("GetProperties",
- NULL, GDBUS_ARGS({"properties", "a{sv}"}),
- get_properties) },
- { GDBUS_METHOD("RegisterHandoverAgent",
- GDBUS_ARGS({ "path", "o" }, { "type", "s"}),
- NULL, register_handover_agent) },
- { GDBUS_METHOD("UnregisterHandoverAgent",
- GDBUS_ARGS({ "path", "o" }, { "type", "s"}),
- NULL, unregister_handover_agent) },
- { GDBUS_METHOD("RegisterNDEFAgent",
- GDBUS_ARGS({"path", "o"}, {"type", "s"}),
- NULL, register_ndef_agent) },
- { GDBUS_METHOD("UnregisterNDEFAgent",
- GDBUS_ARGS({"path", "o"}, {"type", "s"}),
- NULL, unregister_ndef_agent) },
- { },
-};
-
-static const GDBusSignalTable manager_signals[] = {
- { GDBUS_SIGNAL("PropertyChanged",
- GDBUS_ARGS({"name", "s"}, {"value", "v"})) },
- { GDBUS_SIGNAL("AdapterAdded", GDBUS_ARGS({"adapter", "o" })) },
- { GDBUS_SIGNAL("AdapterRemoved", GDBUS_ARGS({"adapter", "o" })) },
- { }
-};
-
int __near_manager_init(DBusConnection *conn)
{
DBG("");
@@ -288,11 +87,7 @@ int __near_manager_init(DBusConnection *conn)
DBG("connection %p", connection);
- g_dbus_register_interface(connection, NFC_MANAGER_PATH,
- NFC_MANAGER_INTERFACE,
- manager_methods,
- manager_signals,
- NULL, NULL, NULL);
+ g_dbus_attach_object_manager(connection);
return __near_netlink_get_adapters();
}
@@ -301,8 +96,7 @@ void __near_manager_cleanup(void)
{
DBG("");
- g_dbus_unregister_interface(connection, NFC_MANAGER_PATH,
- NFC_MANAGER_INTERFACE);
+ g_dbus_detach_object_manager(connection);
dbus_connection_unref(connection);
}
diff --git a/src/near.h b/src/near.h
index 883ac59..58a3cbe 100644
--- a/src/near.h
+++ b/src/near.h
@@ -241,14 +241,6 @@ int __near_bluetooth_pair(void *data);
struct carrier_data *__near_bluetooth_local_get_properties(uint16_t mime_props);
void __near_agent_ndef_parse_records(GList *records);
-int __near_agent_ndef_register(const char *sender, const char *path,
- const char *record_type);
-int __near_agent_ndef_unregister(const char *sender, const char *path,
- const char *record_type);
-int __near_agent_handover_register(const char *sender, const char *path,
- const char *carrier);
-int __near_agent_handover_unregister(const char *sender, const char *path,
- const char *carrier);
bool __near_agent_handover_registered(enum ho_agent_carrier carrier);
struct carrier_data *__near_agent_handover_request_data(
diff --git a/test/disable-adapter b/test/disable-adapter
deleted file mode 100755
index fe514ff..0000000
--- a/test/disable-adapter
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/python
-
-import sys
-import dbus
-
-if len(sys.argv) < 2:
- print "Usage: %s <nfc device>" % (sys.argv[0])
- sys.exit(1)
-
-bus = dbus.SystemBus()
-
-manager = dbus.Interface(bus.get_object("org.neard", "/"),
- "org.neard.Manager")
-
-
-path = "/org/neard/" + sys.argv[1]
-adapter = dbus.Interface(bus.get_object("org.neard", path),
- "org.neard.Adapter")
-
-try:
- adapter.SetProperty("Powered", dbus.Boolean(0), timeout = 10)
-except dbus.DBusException, error:
- print "%s: %s" % (error._dbus_error_name, error.message) \ No newline at end of file
diff --git a/test/enable-adapter b/test/enable-adapter
deleted file mode 100755
index bd6f03a..0000000
--- a/test/enable-adapter
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/python
-
-import sys
-import dbus
-
-if len(sys.argv) < 2:
- print "Usage: %s <nfc device>" % (sys.argv[0])
- sys.exit(1)
-
-bus = dbus.SystemBus()
-
-manager = dbus.Interface(bus.get_object("org.neard", "/"),
- "org.neard.Manager")
-
-
-path = "/org/neard/" + sys.argv[1]
-adapter = dbus.Interface(bus.get_object("org.neard", path),
- "org.neard.Adapter")
-
-try:
- adapter.SetProperty("Powered", dbus.Boolean(1), timeout = 10)
-except dbus.DBusException, error:
- print "%s: %s" % (error._dbus_error_name, error.message)
diff --git a/test/handover-agent b/test/handover-agent
index 8854266..7f2ac23 100755
--- a/test/handover-agent
+++ b/test/handover-agent
@@ -117,8 +117,8 @@ if __name__ == '__main__':
power_state = options.power_state
- manager = dbus.Interface(bus.get_object('org.neard', '/'),
- 'org.neard.Manager')
+ obj = bus.get_object("org.neard", "/org/neard");
+ manager = dbus.Interface(obj, "org.neard.AgentManager")
btpath = '/test/handover/bt/agent'
btcarrier = 'bluetooth'
diff --git a/test/list-adapters b/test/list-adapters
deleted file mode 100755
index 9e11322..0000000
--- a/test/list-adapters
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/python
-
-import dbus
-
-
-def extract_list(list):
- val = "["
- for i in list:
- val += " " + str(i)
- val += " ]"
- return val
-
-bus = dbus.SystemBus()
-
-manager = dbus.Interface(bus.get_object("org.neard", "/"),
- "org.neard.Manager")
-
-
-properties = manager.GetProperties()
-
-for path in properties["Adapters"]:
- print "[ %s ]" % (path)
-
- adapter = dbus.Interface(bus.get_object("org.neard", path),
- "org.neard.Adapter")
-
- properties = adapter.GetProperties()
-
- for key in properties.keys():
- if key in ["Powered", "Polling"]:
- if properties[key] == dbus.Boolean(1):
- val = "true"
- else:
- val = "false"
- elif key in ["Protocols", "Tags", "Devices"]:
- val = extract_list(properties[key])
- else:
- val = str(properties[key])
-
- print " %s = %s" % (key, val)
diff --git a/test/monitor-near b/test/monitor-near
index 98bb64f..f3ad021 100755
--- a/test/monitor-near
+++ b/test/monitor-near
@@ -1,123 +1,46 @@
#!/usr/bin/python
+from __future__ import absolute_import, print_function, unicode_literals
+
import gobject
import dbus
import dbus.mainloop.glib
-from dbus.lowlevel import MethodCallMessage, HANDLER_RESULT_NOT_YET_HANDLED
-
-def extract_list(list):
- val = "["
- for i in list:
- val += " " + str(i)
- val += " ]"
- return val
-
-def extract_bool(b):
- if b == dbus.Boolean(1):
- val = "true"
- else:
- val = "false"
- return val
-
-def property_changed_device(name, value, path):
- device = path[path.rfind("/") + 1:]
- if name in ["Records"]:
- val = extract_list(value)
-
- print "[Device] [%s] %s = %s" % (device, name, val)
-
-def property_changed_adapter(name, value, path):
- adapter = path[path.rfind("/") + 1:]
- if name in ["Polling"]:
- val = extract_bool(value)
- elif name in ["Tags", "Devices"]:
- val = extract_list(value)
- else:
- val = str(value)
-
- print "[Adapter] [%s] %s = %s" % (adapter, name, val)
-
-def extract_record(key, list):
- for i in list:
- record = dbus.Interface(bus.get_object("org.neard", i),
- "org.neard.Record")
-
- properties = record.GetProperties()
- print " Record = [ %s ]" % (str(i))
+def property_changed(interface, changed, invalidated, path):
+ iface = interface[interface.rfind(".") + 1:]
+ for name, value in changed.iteritems():
+ val = str(value)
+ print("{%s.PropertyChanged} [%s] %s = %s" % (iface, path, name,
+ val))
- for key in properties.keys():
- if key in ["Representation"]:
- val = unicode(properties[key])
- else:
- val = str(properties[key])
- print " %s = %s" % (key, val)
-
-def tag_found(path, properties, adapter_path):
- tag = path[path.rfind("/") + 1:]
- adapter = adapter_path[adapter_path.rfind("/") + 1:]
-
- print "[Adapter] [%s] TagFound %s" % (adapter, path)
- for key in properties.keys():
- if key in ["Type"]:
- val = str(properties[key])
- print " %s = %s" % (key, val)
- elif key in ["Protocol"]:
- val = str(properties[key])
- print " %s = %s" % (key, val)
-
- elif key in ["Records"]:
- extract_record(key, properties[key])
-
-def tag_lost(path, adapter_path):
- tag = path[path.rfind("/") + 1:]
- adapter = adapter_path[adapter_path.rfind("/") + 1:]
-
- print "[Adapter] [%s] TagLost %s" % (adapter, path)
-
-def property_changed_manager(name, value, path):
- manager = path[path.rfind("/") + 1:]
- if name in ["Adapters"]:
- val = extract_list(value)
-
- print "[Manager] %s = %s" % (name, val)
+def interfaces_added(path, interfaces):
+ for iface, props in interfaces.iteritems():
+ print("{Added %s} [%s]" % (iface, path))
+ for name, value in props.iteritems():
+ print(" %s = %s" % (name, value))
+def interfaces_removed(path, interfaces):
+ for iface in interfaces:
+ print("{Removed %s} [%s]" % (iface, path))
if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
- bus.add_signal_receiver(property_changed_manager,
- bus_name="org.neard",
- dbus_interface="org.neard.Manager",
- signal_name = "PropertyChanged",
- path_keyword="path")
-
- bus.add_signal_receiver(property_changed_adapter,
- bus_name="org.neard",
- dbus_interface="org.neard.Adapter",
- signal_name = "PropertyChanged",
- path_keyword="path")
-
- bus.add_signal_receiver(tag_found,
- bus_name="org.neard",
- dbus_interface="org.neard.Adapter",
- signal_name = "TagFound",
- path_keyword="adapter_path")
+ bus.add_signal_receiver(property_changed, bus_name="org.neard",
+ dbus_interface="org.freedesktop.DBus.Properties",
+ signal_name="PropertiesChanged",
+ path_keyword="path")
- bus.add_signal_receiver(tag_lost,
- bus_name="org.neard",
- dbus_interface="org.neard.Adapter",
- signal_name = "TagLost",
- path_keyword="adapter_path")
+ bus.add_signal_receiver(interfaces_added, bus_name="org.neard",
+ dbus_interface="org.freedesktop.DBus.ObjectManager",
+ signal_name="InterfacesAdded")
- bus.add_signal_receiver(property_changed_device,
- bus_name="org.neard",
- dbus_interface="org.neard.Device",
- signal_name = "PropertyChanged",
- path_keyword="path")
+ bus.add_signal_receiver(interfaces_removed, bus_name="org.neard",
+ dbus_interface="org.freedesktop.DBus.ObjectManager",
+ signal_name="InterfacesRemoved")
mainloop = gobject.MainLoop()
- mainloop.run()
+ mainloop.run() \ No newline at end of file
diff --git a/test/ndef-agent b/test/ndef-agent
index 4121d8e..2464c82 100755
--- a/test/ndef-agent
+++ b/test/ndef-agent
@@ -55,8 +55,8 @@ if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
- manager = dbus.Interface(bus.get_object('org.neard', "/"),
- 'org.neard.Manager')
+ obj = bus.get_object("org.neard", "/org/neard");
+ manager = dbus.Interface(obj, "org.neard.AgentManager")
path = "/test/ndef/agent"
object = NDEFAgent(bus, path)
diff --git a/test/neardutils.py b/test/neardutils.py
new file mode 100644
index 0000000..770fb45
--- /dev/null
+++ b/test/neardutils.py
@@ -0,0 +1,24 @@
+import dbus
+
+SERVICE_NAME = "org.neard"
+ADAPTER_INTERFACE = SERVICE_NAME + ".Adapter"
+
+def get_managed_objects():
+ bus = dbus.SystemBus()
+ manager = dbus.Interface(bus.get_object("org.neard", "/"),
+ "org.freedesktop.DBus.ObjectManager")
+ return manager.GetManagedObjects()
+
+def find_adapter(pattern=None):
+ return find_adapter_in_objects(get_managed_objects(), pattern)
+
+def find_adapter_in_objects(objects, pattern=None):
+ bus = dbus.SystemBus()
+ for path, ifaces in objects.iteritems():
+ adapter = ifaces.get(ADAPTER_INTERFACE)
+ if adapter is None:
+ continue
+ if not pattern or path.endswith(pattern):
+ obj = bus.get_object(SERVICE_NAME, path)
+ return dbus.Interface(obj, ADAPTER_INTERFACE)
+ raise Exception("NFC adapter not found")
diff --git a/test/phdc-simple-manager b/test/phdc-simple-manager
index 5317f25..4fd25df 100755
--- a/test/phdc-simple-manager
+++ b/test/phdc-simple-manager
@@ -161,8 +161,8 @@ if "__main__" == __name__:
print 'PHDC Simple Manager Test'
bus = dbus.SystemBus()
- neard_manager = dbus.Interface(bus.get_object('org.neard', '/'),
- 'org.neard.PHDC')
+ obj = bus.get_object("org.neard", "/org/neard");
+ neard_manager = dbus.Interface(obj, "org.neard.PHDC")
simple_path = '/Simple'
valid_path = '/Validation'
diff --git a/test/start-poll b/test/start-poll
deleted file mode 100755
index 858597b..0000000
--- a/test/start-poll
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/python
-
-import sys
-import dbus
-
-if len(sys.argv) < 2:
- print "Usage: %s [nfc device] <polling mode>" % (sys.argv[0])
- sys.exit(1)
-
-if len(sys.argv) < 3:
- mode = "Initiator"
-else:
- mode = sys.argv[2]
-
-bus = dbus.SystemBus()
-
-manager = dbus.Interface(bus.get_object("org.neard", "/"),
- "org.neard.Manager")
-
-
-print "Polling Mode %s" % (mode)
-
-path = "/org/neard/" + sys.argv[1]
-adapter = dbus.Interface(bus.get_object("org.neard", path),
- "org.neard.Adapter")
-
-try:
- adapter.StartPollLoop(mode)
-except dbus.DBusException, error:
- print "%s: %s" % (error._dbus_error_name, error.message)
diff --git a/test/stop-poll b/test/stop-poll
deleted file mode 100755
index 5ef2ef9..0000000
--- a/test/stop-poll
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/python
-
-import sys
-import dbus
-
-if len(sys.argv) < 2:
- print "Usage: %s <nfc device>" % (sys.argv[0])
- sys.exit(1)
-
-bus = dbus.SystemBus()
-
-manager = dbus.Interface(bus.get_object("org.neard", "/"),
- "org.neard.Manager")
-
-
-path = "/org/neard/" + sys.argv[1]
-adapter = dbus.Interface(bus.get_object("org.neard", path),
- "org.neard.Adapter")
-
-try:
- adapter.StopPollLoop()
-except dbus.DBusException, error:
- print "%s: %s" % (error._dbus_error_name, error.message)
diff --git a/test/test-adapter b/test/test-adapter
new file mode 100755
index 0000000..20ebac3
--- /dev/null
+++ b/test/test-adapter
@@ -0,0 +1,107 @@
+#!/usr/bin/python
+
+import sys
+import dbus
+import neardutils
+
+bus = dbus.SystemBus()
+
+def extract_list(list):
+ val = "["
+ for i in list:
+ val += " " + str(i)
+ val += " ]"
+ return val
+
+def usage():
+ print("Usage: %s <command>" % (sys.argv[0]) )
+ print("")
+ print(" list")
+ print(" powered [on/off] nfcX")
+ print(" poll [on/off] nfcX [Initiator/Target/Dual]")
+ sys.exit(1)
+
+if (len(sys.argv) < 2):
+ usage()
+
+if (sys.argv[1] == "list"):
+ if (len(sys.argv) < 3):
+ om = dbus.Interface(bus.get_object("org.neard", "/"),
+ "org.freedesktop.DBus.ObjectManager")
+ objects = om.GetManagedObjects()
+ for path, interfaces in objects.iteritems():
+ if "org.neard.Adapter" not in interfaces:
+ continue
+
+ print(" [ %s ]" % (path))
+
+ props = interfaces["org.neard.Adapter"]
+
+ for (key, value) in props.items():
+ if (key == "Protocols"):
+ val = extract_list(value)
+ print(" %s = %s" % (key, val))
+
+ elif key in ["Powered", "Polling"]:
+ if value == dbus.Boolean(1):
+ val = "true"
+ else:
+ val = "false"
+ print(" %s = %s" % (key, val))
+
+ else:
+ print(" %s = %s" % (key, value))
+
+ sys.exit(0)
+
+if (sys.argv[1] == "powered"):
+ if (len(sys.argv) < 4):
+ usage()
+ else:
+ path = "/org/neard/" + sys.argv[3]
+
+ adapter_path = neardutils.find_adapter(path).object_path
+ adapter = dbus.Interface(bus.get_object("org.neard", adapter_path),
+ "org.freedesktop.DBus.Properties")
+
+ if (sys.argv[2] == "on"):
+ value = dbus.Boolean(1)
+ elif (sys.argv[2] == "off"):
+ value = dbus.Boolean(0)
+ else:
+ value = dbus.Boolean(sys.argv[2])
+ try:
+ adapter.Set("org.neard.Adapter", "Powered", value)
+ except dbus.DBusException, error:
+ print "%s: %s" % (error._dbus_error_name, error.message)
+ sys.exit(0)
+
+if (sys.argv[1] == "poll"):
+ if (len(sys.argv) < 4):
+ usage()
+ else:
+ path = "/org/neard/" + sys.argv[3]
+
+ adapter = neardutils.find_adapter(path)
+
+ if (sys.argv[2] == "on"):
+ if (len(sys.argv) == 4):
+ mode = "Initiator"
+ else:
+ mode = sys.argv[4]
+
+ try:
+ adapter.StartPollLoop(mode)
+ except dbus.DBusException, error:
+ print "%s: %s" % (error._dbus_error_name, error.message)
+
+ elif (sys.argv[2] == "off"):
+ try:
+ adapter.StopPollLoop()
+ except dbus.DBusException, error:
+ print "%s: %s" % (error._dbus_error_name, error.message)
+
+ else:
+ usage()
+
+ sys.exit(0)