mesh: Provide destination address in MessageReceived API 06/221706/1
authorMichał Lowas-Rzechonek <michal.lowas-rzechonek@silvair.com>
Tue, 26 Nov 2019 14:54:00 +0000 (15:54 +0100)
committerAbhay Agarwal <ay.agarwal@samsung.com>
Tue, 7 Jan 2020 05:12:21 +0000 (10:42 +0530)
Change-Id: I90cd462038491612e12a4684871cc305683834f6
Signed-off-by: Abhay Agarwal <ay.agarwal@samsung.com>
doc/mesh-api.txt
mesh/model.c
test/test-join
test/test-mesh

index 5edd47c..32890e8 100644 (file)
@@ -784,7 +784,7 @@ Object path <app_defined_element_path>
 
 Methods:
        void MessageReceived(uint16 source, uint16 key_index,
-                                       boolean subscription, array{byte} data)
+                                       variant destination, array{byte} data)
 
                This method is called by bluetooth-meshd daemon when a message
                arrives addressed to the application.
@@ -797,10 +797,17 @@ Methods:
                be used by the application when sending a response to this
                message (in case a response is expected).
 
-               The subscription parameter is a boolean that is set to true if
-               the message is received as a part of the subscription (i.e., the
-               destination is either a well known group address or a virtual
-               label.
+               The destination parameter contains the destination address of
+               received message. Underlying variant types are:
+
+               uint16
+
+                       Destination is an unicast address, or a well known
+                       group address
+
+               array{byte}
+
+                       Destination is a virtual address label
 
                The data parameter is the incoming message.
 
index f1e1a21..d899f13 100644 (file)
@@ -823,8 +823,10 @@ static void send_dev_key_msg_rcvd(struct mesh_node *node, uint8_t ele_idx,
        l_dbus_send(dbus, msg);
 }
 
-static void send_msg_rcvd(struct mesh_node *node, uint8_t ele_idx, bool is_sub,
-                                       uint16_t src, uint16_t app_idx,
+static void send_msg_rcvd(struct mesh_node *node, uint8_t ele_idx,
+                                       uint16_t src, uint16_t dst,
+                                       const struct mesh_virtual *virt,
+                                       uint16_t app_idx,
                                        uint16_t size, const uint8_t *data)
 {
        struct l_dbus *dbus = dbus_get_bus();
@@ -847,7 +849,17 @@ static void send_msg_rcvd(struct mesh_node *node, uint8_t ele_idx, bool is_sub,
 
        l_dbus_message_builder_append_basic(builder, 'q', &src);
        l_dbus_message_builder_append_basic(builder, 'q', &app_idx);
-       l_dbus_message_builder_append_basic(builder, 'b', &is_sub);
+
+       if (virt) {
+               l_dbus_message_builder_enter_variant(builder, "ay");
+               dbus_append_byte_array(builder, virt->label,
+                                                       sizeof(virt->label));
+               l_dbus_message_builder_leave_variant(builder);
+       } else {
+               l_dbus_message_builder_enter_variant(builder, "q");
+               l_dbus_message_builder_append_basic(builder, 'q', &dst);
+               l_dbus_message_builder_leave_variant(builder);
+       }
 
        dbus_append_byte_array(builder, data, size);
 
@@ -986,7 +998,7 @@ bool mesh_model_rx(struct mesh_node *node, bool szmict, uint32_t seq0,
                 */
                if (forward.has_dst && !forward.done) {
                        if ((decrypt_idx & APP_IDX_MASK) == decrypt_idx)
-                               send_msg_rcvd(node, i, is_subscription, src,
+                               send_msg_rcvd(node, i, src, dst, decrypt_virt,
                                                forward.app_idx, forward.size,
                                                forward.data);
                        else if (decrypt_idx == APP_IDX_DEV_REMOTE ||
index 079f711..fb7b0d6 100644 (file)
@@ -268,10 +268,10 @@ class Element(dbus.service.Object):
                        self.UpdateModelConfiguration(mod_id, config[1])
 
        @dbus.service.method(MESH_ELEMENT_IFACE,
-                                       in_signature="qqbay", out_signature="")
-       def MessageReceived(self, source, key, is_sub, data):
-               print('Message Received on Element ', end='')
-               print(self.index)
+                                       in_signature="qqvay", out_signature="")
+       def MessageReceived(self, source, key, destination, data):
+               print('Message Received on Element %d, src=%04x, dst=%s' %
+                                               self.index, source, destination)
                for model in self.models:
                        model.process_message(source, key, data)
 
index 3c5ded7..c67bb65 100755 (executable)
@@ -556,10 +556,10 @@ class Element(dbus.service.Object):
                        self.UpdateModelConfiguration(mod_id, config[1])
 
        @dbus.service.method(MESH_ELEMENT_IFACE,
-                                       in_signature="qqbay", out_signature="")
-       def MessageReceived(self, source, key, is_sub, data):
-               print('Message Received on Element ', end='')
-               print(self.index)
+                                       in_signature="qqvay", out_signature="")
+       def MessageReceived(self, source, key, destination, data):
+               print('Message Received on Element %d, src=%04x, dst=%s' %
+                                               self.index, source, destination)
                for model in self.models:
                        model.process_message(source, key, data)