From 3d7d12ee99e2ee87f2eb81b291d2b6867a2194ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Lowas-Rzechonek?= Date: Wed, 28 Aug 2019 09:52:30 +0200 Subject: [PATCH] mesh: Add org.bluez.mesh.Node1.Addresses property To enable applications to talk to the local node's internal models, it's useful to know its unicast addresses. They are known after CreateNetwork and Import, but after Join, the allocated address is only known to the provisioner. This patch enables read only access to list of allocated unicast addresses. --- doc/mesh-api.txt | 4 ++++ mesh/node.c | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/doc/mesh-api.txt b/doc/mesh-api.txt index 255104ab6..470751f7a 100644 --- a/doc/mesh-api.txt +++ b/doc/mesh-api.txt @@ -423,6 +423,10 @@ Properties: seconds since mesh network layer traffic was last detected on this node's network. + array{uint16} Addresses [read-only] + + This property contains unicast addresses of node's elements. + Mesh Provisioning Hierarchy ============================ Service org.bluez.mesh diff --git a/mesh/node.c b/mesh/node.c index 3d9ded3b1..b6824f505 100644 --- a/mesh/node.c +++ b/mesh/node.c @@ -2198,6 +2198,28 @@ static bool lastheard_getter(struct l_dbus *dbus, struct l_dbus_message *msg, } +static bool addresses_getter(struct l_dbus *dbus, struct l_dbus_message *msg, + struct l_dbus_message_builder *builder, + void *user_data) +{ + struct mesh_node *node = user_data; + const struct l_queue_entry *entry; + + l_dbus_message_builder_enter_array(builder, "q"); + + entry = l_queue_get_entries(node->elements); + for (; entry; entry = entry->next) { + const struct node_element *ele = entry->data; + uint16_t address = node->primary + ele->idx; + + l_dbus_message_builder_append_basic(builder, 'q', &address); + } + + l_dbus_message_builder_leave_array(builder); + + return true; +} + static void setup_node_interface(struct l_dbus_interface *iface) { l_dbus_interface_method(iface, "Send", 0, send_call, "", "oqqay", @@ -2222,6 +2244,8 @@ static void setup_node_interface(struct l_dbus_interface *iface) NULL); l_dbus_interface_property(iface, "SecondsSinceLastHeard", 0, "u", lastheard_getter, NULL); + l_dbus_interface_property(iface, "Addresses", 0, "aq", addresses_getter, + NULL); } bool node_dbus_init(struct l_dbus *bus) -- 2.47.3