summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2013-10-23 01:58:04 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2013-11-10 17:57:09 +0100
commite17ec5222707768b5f039b224077ec98c2d5f23f (patch)
tree8586846a88be4174488fdc582be9432b50bf4fe5
parent2673654f7bcbf9ca365e1485682019924427c5f5 (diff)
downloadneard-e17ec5222707768b5f039b224077ec98c2d5f23f.tar.gz
neard-e17ec5222707768b5f039b224077ec98c2d5f23f.tar.bz2
neard-e17ec5222707768b5f039b224077ec98c2d5f23f.zip
adapter: Initial transition to managed objects
The manager Adapters property is removed. And so are the adapter Tags and Devices properties. All of them become managed objects and thus no longer need to be explicit parent object properties. Since the only methods left to the Manager interface were agent registration ones, the Manager interface becomes the AgentManager one.
-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)