mesh: Add options to "Models" property 55/250555/1
authoranuj.bhumiya <anuj.bhumiya@samsung.com>
Fri, 18 Dec 2020 06:55:04 +0000 (12:25 +0530)
committerAbhay Agarwal <ay.agarwal@samsung.com>
Fri, 18 Dec 2020 09:45:10 +0000 (15:15 +0530)
This adds options dictionary to "Models" property to stay
in sync with mesh-api changes.

Change-Id: Ie36b492c55e096330b8101795be5129e4c394733
Signed-off-by: Abhay Agarwal <ay.agarwal@samsung.com>
bt-oal/bluez_hal/src/bt-hal-mesh-dbus-handler.c

index a4b6e77..c50003f 100644 (file)
@@ -799,13 +799,36 @@ static struct l_dbus_message *__mesh_node_join_complete(struct l_dbus *dbus,
        return l_dbus_message_new_method_return(message);
 }
 
+static void append_dict_entry_basic(struct l_dbus_message_builder *builder,
+                const char *key, const char *signature,
+                const void *data)
+{
+        if (!builder)
+                return;
+
+        l_dbus_message_builder_enter_dict(builder, "sv");
+        l_dbus_message_builder_append_basic(builder, 's', key);
+        l_dbus_message_builder_enter_variant(builder, signature);
+        l_dbus_message_builder_append_basic(builder, signature[0], data);
+        l_dbus_message_builder_leave_variant(builder);
+        l_dbus_message_builder_leave_dict(builder);
+}
+
 static void __bt_hal_mesh_foreach_model_getter(gpointer data,
                gpointer user_data)
 {
        struct l_dbus_message_builder *builder = (struct l_dbus_message_builder *) user_data;
        meshcfg_model *model_info = (meshcfg_model*) data;
+       bool pub_enable = false;
+       bool sub_enable = false;
 
+       l_dbus_message_builder_enter_struct(builder, "qa{sv}");
        l_dbus_message_builder_append_basic(builder, 'q', &model_info->model);
+       l_dbus_message_builder_enter_array(builder, "{sv}");
+       append_dict_entry_basic(builder, "Subscribe", "b", &sub_enable);
+       append_dict_entry_basic(builder, "Publish", "b", &pub_enable);
+       l_dbus_message_builder_leave_array(builder);
+       l_dbus_message_builder_leave_struct(builder);
 }
 
 static bool __mesh_model_getter(struct l_dbus *dbus,
@@ -815,7 +838,7 @@ static bool __mesh_model_getter(struct l_dbus *dbus,
 {
        meshcfg_el *element = (meshcfg_el*) user_data;
 
-       l_dbus_message_builder_enter_array(builder, "q");
+       l_dbus_message_builder_enter_array(builder, "(qa{sv})");
        g_slist_foreach(element->models,
                __bt_hal_mesh_foreach_model_getter, builder);
 
@@ -830,7 +853,7 @@ static bool __mesh_vendor_model_getter(struct l_dbus *dbus,
                        struct l_dbus_message_builder *builder,
                                void *user_data)
 {
-       l_dbus_message_builder_enter_array(builder, "(qq)");
+       l_dbus_message_builder_enter_array(builder, "(qqa{sv})");
        l_dbus_message_builder_leave_array(builder);
 
        return true;
@@ -957,9 +980,10 @@ static void __bt_hal_mesh_setup_ele_iface(struct l_dbus_interface *iface)
        /* Properties */
        l_dbus_interface_property(iface, "Index", 0, "y", __mesh_element_index_getter,
                        NULL);
-       l_dbus_interface_property(iface, "VendorModels", 0, "a(qq)",
+       l_dbus_interface_property(iface, "VendorModels", 0, "a(qqa{sv})",
                        __mesh_vendor_model_getter, NULL);
-       l_dbus_interface_property(iface, "Models", 0, "aq", __mesh_model_getter, NULL);
+       l_dbus_interface_property(iface, "Models", 0, "a(qa{sv})", __mesh_model_getter,
+                                                                       NULL);
 
        /* Methods */
        l_dbus_interface_method(iface, "DevKeyMessageReceived", 0,
@@ -1894,21 +1918,6 @@ static void __mesh_scan_reply(struct l_dbus_proxy *proxy,
        l_free(net_uuid);
 }
 
-static void append_dict_entry_basic(struct l_dbus_message_builder *builder,
-               const char *key, const char *signature,
-               const void *data)
-{
-       if (!builder)
-               return;
-
-       l_dbus_message_builder_enter_dict(builder, "sv");
-       l_dbus_message_builder_append_basic(builder, 's', key);
-       l_dbus_message_builder_enter_variant(builder, signature);
-       l_dbus_message_builder_append_basic(builder, signature[0], data);
-       l_dbus_message_builder_leave_variant(builder);
-       l_dbus_message_builder_leave_dict(builder);
-}
-
 static void __mesh_scan_setup(struct l_dbus_message *msg, void *user_data)
 {
        struct l_dbus_message_builder *builder;