From: Inga Stotland <inga.stotland@intel.com>
To: linux-bluetooth@vger.kernel.org
Cc: brian.gix@intel.com, Inga Stotland <inga.stotland@intel.com>
Subject: [PATCH BlueZ 2/4] mesh: Update UnprovisionedScan, AddNode & ScanResult
Date: Fri, 27 Mar 2020 11:42:55 -0700 [thread overview]
Message-ID: <20200327184257.15042-3-inga.stotland@intel.com> (raw)
In-Reply-To: <20200327184257.15042-1-inga.stotland@intel.com>
The following methods are modified to allow for future development:
Interface org.bluez.mesh.Management1:
Old: void UnprovisionedScan(uint16 seconds)
New: void UnprovisionedScan(dict options)
The options parameter is a dictionary with the following keys defined:
uint16 Seconds
Specifies number of seconds for scanning to be active.
If set to 0 or if this key is not present, then the
scanning will continue until UnprovisionedScanCancel()
or AddNode() methods are called.
other keys TBD
Old: void AddNode(array{byte}[16] uuid)
New: void AddNode(array{byte}[16] uuid, dict options)
The options parameter is currently an empty dictionary
Interface org.bluez.mesh.Provisioner1
Old: void ScanResult(int16 rssi, array{byte} data)
New: void ScanResult(int16 rssi, array{byte} data, dict options)
The options parameter is currently an empty dictionary
---
mesh/manager.c | 39 ++++++++++++++++++++++++++++++---------
1 file changed, 30 insertions(+), 9 deletions(-)
diff --git a/mesh/manager.c b/mesh/manager.c
index 0909c7e16..8e948e47d 100644
--- a/mesh/manager.c
+++ b/mesh/manager.c
@@ -217,21 +217,22 @@ static struct l_dbus_message *add_node_call(struct l_dbus *dbus,
void *user_data)
{
struct mesh_node *node = user_data;
- struct l_dbus_message_iter iter_uuid;
+ struct l_dbus_message_iter iter_uuid, options;
struct l_dbus_message *reply;
uint8_t *uuid;
- uint32_t n;
+ uint32_t n = 22;
l_debug("AddNode request");
- if (!l_dbus_message_get_arguments(msg, "ay", &iter_uuid))
+ if (!l_dbus_message_get_arguments(msg, "aya{sv}", &iter_uuid, &options))
return dbus_error(msg, MESH_ERROR_INVALID_ARGS, NULL);
if (!l_dbus_message_iter_get_fixed_array(&iter_uuid, &uuid, &n)
- || n != 16)
+ || n != 16) {
+ l_debug("n = %u", n);
return dbus_error(msg, MESH_ERROR_INVALID_ARGS,
"Bad device UUID");
-
+ }
/* Allow AddNode to cancel Scanning if from the same node */
if (scan_node) {
if (scan_node != node)
@@ -361,6 +362,9 @@ static void prov_beacon_recv(void *user_data, struct mesh_io_recv_info *info,
builder = l_dbus_message_builder_new(msg);
l_dbus_message_builder_append_basic(builder, 'n', &rssi);
dbus_append_byte_array(builder, data + 2, len -2);
+ l_dbus_message_builder_enter_array(builder, "{sv}");
+ /* TODO: populate with options when defined */
+ l_dbus_message_builder_leave_array(builder);
l_dbus_message_builder_finalize(builder);
l_dbus_message_builder_destroy(builder);
@@ -372,17 +376,34 @@ static struct l_dbus_message *start_scan_call(struct l_dbus *dbus,
void *user_data)
{
struct mesh_node *node = user_data;
- uint16_t duration;
+ uint16_t duration = 0;
struct mesh_io *io;
struct mesh_net *net;
+ const char *key;
+ struct l_dbus_message_iter options, var;
const char *sender = l_dbus_message_get_sender(msg);
if (strcmp(sender, node_get_owner(node)))
return dbus_error(msg, MESH_ERROR_NOT_AUTHORIZED, NULL);
- if (!l_dbus_message_get_arguments(msg, "q", &duration))
+ if (!l_dbus_message_get_arguments(msg, "a{sv}", &options))
return dbus_error(msg, MESH_ERROR_INVALID_ARGS, NULL);
+ while (l_dbus_message_iter_next_entry(&options, &key, &var)) {
+ bool failed = true;
+
+ if (!strcmp(key, "Seconds")) {
+ if (l_dbus_message_iter_get_variant(&var, "q",
+ &duration)) {
+ failed = false;
+ }
+ }
+
+ if (failed)
+ return dbus_error(msg, MESH_ERROR_INVALID_ARGS,
+ "Invalid options");
+ }
+
if (scan_node && scan_node != node)
return dbus_error(msg, MESH_ERROR_BUSY, NULL);
@@ -752,13 +773,13 @@ static struct l_dbus_message *set_key_phase_call(struct l_dbus *dbus,
static void setup_management_interface(struct l_dbus_interface *iface)
{
l_dbus_interface_method(iface, "AddNode", 0, add_node_call, "",
- "ay", "uuid");
+ "aya{sv}", "uuid", "options");
l_dbus_interface_method(iface, "ImportRemoteNode", 0, import_node_call,
"", "qyay", "primary", "count", "dev_key");
l_dbus_interface_method(iface, "DeleteRemoteNode", 0, delete_node_call,
"", "qy", "primary", "count");
l_dbus_interface_method(iface, "UnprovisionedScan", 0, start_scan_call,
- "", "q", "seconds");
+ "", "a{sv}", "options");
l_dbus_interface_method(iface, "UnprovisionedScanCancel", 0,
cancel_scan_call, "", "");
l_dbus_interface_method(iface, "CreateSubnet", 0, create_subnet_call,
--
2.21.1
next prev parent reply other threads:[~2020-03-27 18:43 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-27 18:42 [PATCH BlueZ 0/4] API changes for forward compatibility Inga Stotland
2020-03-27 18:42 ` [PATCH BlueZ 1/4] doc/mesh-api: Forward compatibility modifications Inga Stotland
2020-03-27 18:42 ` Inga Stotland [this message]
2020-03-27 21:17 ` [PATCH BlueZ 2/4] mesh: Update UnprovisionedScan, AddNode & ScanResult Gix, Brian
2020-03-27 22:22 ` Stotland, Inga
2020-03-27 18:42 ` [PATCH BlueZ 3/4] test/test-mesh: Update to match modified APIs Inga Stotland
2020-03-27 18:42 ` [PATCH BlueZ 4/4] tools/mesh-cfgclient: " Inga Stotland
2020-03-30 22:07 ` [PATCH BlueZ 0/4] API changes for forward compatibility Gix, Brian
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200327184257.15042-3-inga.stotland@intel.com \
--to=inga.stotland@intel.com \
--cc=brian.gix@intel.com \
--cc=linux-bluetooth@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox