#include "bluetooth-gatt-server-api.h"
#endif
+#include "bluetooth-mesh-api.h"
+
#include "bt-common.h"
#include "bt-event-handler.h"
#include "bt-gatt-client.h"
}
}
+/* Mesh Event Handler */
+static void __bt_mesh_event_filter(GDBusConnection *connection,
+ const gchar *sender_name,
+ const gchar *object_path,
+ const gchar *interface_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ BT_INFO("Mesh event handler Entry >>");
+ bt_event_info_t *event_info;
+
+ event_info = (bt_event_info_t *)user_data;
+ ret_if(event_info == NULL);
+
+ if (strcasecmp(signal_name, BT_MESH_SCAN_STARTED) == 0) {
+ int result;
+ GVariant *param = NULL;
+ GArray *dbus_data = NULL;
+ bluetooth_mesh_network_t *info = NULL;
+
+ g_variant_get(parameters, "(iv)", &result, ¶m);
+ dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ __bt_fill_garray_from_variant(param, dbus_data);
+ g_variant_unref(param);
+
+ info = &g_array_index(dbus_data, bluetooth_mesh_network_t, 0);
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_SCAN_STARTED,
+ result, info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_MESH_SCAN_FINISHED) == 0) {
+ int result;
+ GVariant *param = NULL;
+ GArray *dbus_data = NULL;
+ bluetooth_mesh_network_t *info = NULL;
+
+ g_variant_get(parameters, "(iv)", &result, ¶m);
+ dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ __bt_fill_garray_from_variant(param, dbus_data);
+ g_variant_unref(param);
+
+ info = &g_array_index(dbus_data, bluetooth_mesh_network_t, 0);
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_SCAN_FINISHED,
+ result, info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_MESH_SCAN_RESULT) == 0) {
+ int result;
+ GVariant *param = NULL;
+ GArray *dbus_data = NULL;
+ bluetooth_mesh_scan_result_t *info = NULL;
+
+ g_variant_get(parameters, "(iv)", &result, ¶m);
+ dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ __bt_fill_garray_from_variant(param, dbus_data);
+ g_variant_unref(param);
+
+ info = &g_array_index(dbus_data, bluetooth_mesh_scan_result_t, 0);
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_SCAN_RESULT,
+ result, info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_MESH_AUTHENTICATION_REQ) == 0) {
+ int result;
+ GVariant *param = NULL;
+ GArray *dbus_data = NULL;
+ bluetooth_mesh_authentication_request_t *info = NULL;
+
+ g_variant_get(parameters, "(iv)", &result, ¶m);
+ dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ __bt_fill_garray_from_variant(param, dbus_data);
+ g_variant_unref(param);
+
+ info = &g_array_index(dbus_data, bluetooth_mesh_authentication_request_t, 0);
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_AUTHENTICATION_REQUEST,
+ result, info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_MESH_PROVISIONING_RESULT) == 0) {
+ int result;
+ GVariant *param = NULL;
+ GArray *dbus_data = NULL;
+ bluetooth_mesh_provisioning_result_t *info = NULL;
+
+ g_variant_get(parameters, "(iv)", &result, ¶m);
+ dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ __bt_fill_garray_from_variant(param, dbus_data);
+ g_variant_unref(param);
+
+ info = &g_array_index(dbus_data, bluetooth_mesh_provisioning_result_t, 0);
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_PROVISIONING_FINISHED,
+ result, info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_MESH_NODE_BROWSED) == 0) {
+ int result;
+ GVariant *param = NULL;
+ GArray *dbus_data = NULL;
+ bluetooth_mesh_node_discover_t *info = NULL;
+
+ g_variant_get(parameters, "(iv)", &result, ¶m);
+ dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ __bt_fill_garray_from_variant(param, dbus_data);
+ g_variant_unref(param);
+
+ info = &g_array_index(dbus_data, bluetooth_mesh_node_discover_t, 0);
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_NODE_BROWSED,
+ result, info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_MESH_NODE_VEND_FEATS) == 0) {
+ int result;
+ GVariant *param = NULL;
+ GArray *dbus_data = NULL;
+ bluetooth_mesh_node_features_t *info = NULL;
+
+ g_variant_get(parameters, "(iv)", &result, ¶m);
+ dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ __bt_fill_garray_from_variant(param, dbus_data);
+ g_variant_unref(param);
+
+ info = &g_array_index(dbus_data, bluetooth_mesh_node_features_t, 0);
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_NODE_VENDOR_FEATURES,
+ result, info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_MESH_NODE_KEY_CONFIGURED) == 0) {
+ int result;
+ GVariant *param = NULL;
+ GArray *dbus_data = NULL;
+ bluetooth_mesh_key_configure_t *info = NULL;
+
+ g_variant_get(parameters, "(iv)", &result, ¶m);
+ dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ __bt_fill_garray_from_variant(param, dbus_data);
+ g_variant_unref(param);
+
+ info = &g_array_index(dbus_data, bluetooth_mesh_key_configure_t, 0);
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_NODE_KEY_CONFIGURED,
+ result, info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_MESH_MODEL_APPKEY_LIST) == 0) {
+ int result;
+ GVariantIter *iter = NULL;
+ bluetooth_mesh_model_configure_t info;
+ uint16_t node_unicast;
+ int elem_idx;
+ uint32_t model;
+ const char *net_uuid = NULL;
+ int total = 0;
+ uint16_t appkey_idx;
+ int i;
+
+ g_variant_get(parameters, "(i&sqiui(ay))", &result, &net_uuid,
+ &node_unicast, &elem_idx, &model, &total, &iter);
+
+ memset(&info, 0x00, sizeof(bluetooth_mesh_model_configure_t));
+ info.primary_unicast = node_unicast;
+ g_strlcpy(info.net_uuid, net_uuid, 33);
+ info.elem_index = elem_idx;
+ info.model = model;
+ info.appkeylist_count = total;
+
+ if (total) {
+ info.appkey_list = (uint16_t**)g_malloc0(sizeof(uint16_t*) * total);
+
+ for (i = 0; i < total && g_variant_iter_loop(iter, "q", &appkey_idx); ++i) {
+ info.appkey_list[i] = g_malloc0(sizeof(uint16_t));
+ *info.appkey_list[i] = appkey_idx;
+ }
+ }
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_MODEL_APPKEY_LIST,
+ result, &info,
+ event_info->cb, event_info->user_data);
+
+ if (total) {
+ for (i = 0; i < total; i++)
+ g_free(info.appkey_list[i]);
+ g_variant_iter_free(iter);
+ }
+ } else if (strcasecmp(signal_name, BT_MESH_MODEL_SUB_LIST) == 0) {
+ int result;
+ GVariantIter *iter = NULL;
+ bluetooth_mesh_model_configure_t info;
+ uint16_t node_unicast;
+ int elem_idx;
+ uint32_t model;
+ const char *net_uuid = NULL;
+ int total = 0;
+ uint16_t sub_addr;
+ int i;
+
+ g_variant_get(parameters, "(i&sqiui(ay))", &result, &net_uuid,
+ &node_unicast, &elem_idx, &model, &total, &iter);
+
+ memset(&info, 0x00, sizeof(bluetooth_mesh_model_configure_t));
+ info.primary_unicast = node_unicast;
+ g_strlcpy(info.net_uuid, net_uuid, 33);
+ info.elem_index = elem_idx;
+ info.model = model;
+ info.sublist_count = total;
+
+ if (total) {
+ info.sub_list = (uint16_t**)g_malloc0(sizeof(uint16_t*) * total);
+ for (i = 0; i < total && g_variant_iter_loop(iter, "q", &sub_addr); ++i) {
+ info.sub_list[i] = g_malloc0(sizeof(uint16_t));
+ *info.sub_list[i] = sub_addr;
+ }
+ }
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_MODEL_SUBSCRIPTION_LIST,
+ result, &info,
+ event_info->cb, event_info->user_data);
+
+ if (total) {
+ for (i = 0; i < total; i++)
+ g_free(info.sub_list[i]);
+ g_variant_iter_free(iter);
+ }
+ } else if (strcasecmp(signal_name, BT_MESH_NODE_TTL_CONFIGURED) == 0) {
+ int result;
+ GVariant *param = NULL;
+ GArray *dbus_data = NULL;
+ bluetooth_mesh_node_ttl_info_t *info = NULL;
+
+ g_variant_get(parameters, "(iv)", &result, ¶m);
+ dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ __bt_fill_garray_from_variant(param, dbus_data);
+ g_variant_unref(param);
+
+ info = &g_array_index(dbus_data, bluetooth_mesh_node_ttl_info_t, 0);
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_NODE_TTL_CONFIGURED,
+ result, info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_MESH_NODE_TTL_CONFIGURED) == 0) {
+ int result;
+ GVariant *param = NULL;
+ GArray *dbus_data = NULL;
+ bluetooth_mesh_node_ttl_info_t *info = NULL;
+
+ g_variant_get(parameters, "(iv)", &result, ¶m);
+ dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ __bt_fill_garray_from_variant(param, dbus_data);
+ g_variant_unref(param);
+
+ info = &g_array_index(dbus_data, bluetooth_mesh_node_ttl_info_t, 0);
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_NODE_TTL_CONFIGURED,
+ result, info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_MESH_MODEL_SUB_CONF) == 0) {
+ int result;
+ GVariant *param = NULL;
+ GArray *dbus_data = NULL;
+ bluetooth_mesh_key_configure_t *info = NULL;
+
+ g_variant_get(parameters, "(iv)", &result, ¶m);
+ dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ __bt_fill_garray_from_variant(param, dbus_data);
+ g_variant_unref(param);
+
+ info = &g_array_index(dbus_data, bluetooth_mesh_key_configure_t, 0);
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_MODEL_SUBSCRIPTION_CONFGURED,
+ result, info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_MESH_MODEL_VIR_SUB_CONF) == 0) {
+ int result;
+ GVariant *param = NULL;
+ GArray *dbus_data = NULL;
+ bluetooth_mesh_key_configure_t *info = NULL;
+
+ g_variant_get(parameters, "(iv)", &result, ¶m);
+ dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ __bt_fill_garray_from_variant(param, dbus_data);
+ g_variant_unref(param);
+
+ info = &g_array_index(dbus_data, bluetooth_mesh_key_configure_t, 0);
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_MODEL_VIRTUAL_SUBSCRIPTION_CONFGURED,
+ result, info,
+ event_info->cb, event_info->user_data);
+ } else if (strcasecmp(signal_name, BT_MESH_MODEL_PUB_STATUS) == 0) {
+ int result;
+ GVariant *param = NULL;
+ GArray *dbus_data = NULL;
+ bluetooth_mesh_key_configure_t *info = NULL;
+
+ g_variant_get(parameters, "(iv)", &result, ¶m);
+ dbus_data = g_array_new(TRUE, TRUE, sizeof(gchar));
+
+ __bt_fill_garray_from_variant(param, dbus_data);
+ g_variant_unref(param);
+
+ info = &g_array_index(dbus_data, bluetooth_mesh_key_configure_t, 0);
+
+ _bt_mesh_event_cb(BLUETOOTH_EVENT_MESH_MODEL_PUBLICATION_STATUS,
+ result, info,
+ event_info->cb, event_info->user_data);
+ }
+ BT_INFO("Mesh event handler Exit <<");
+}
+
void __bt_adapter_event_filter(GDBusConnection *connection,
const gchar *sender_name,
const gchar *object_path,
data->session_end_time = info->session_end_time;
data->session_scan_time = info->session_scan_time;
data->session_connected_time = info->session_connected_time;
+ data->tx_time = info->tx_time;
+ data->rx_time = info->rx_time;
+ data->idle_time = info->idle_time;
data->atm_list = NULL;
BT_INFO("Received battery data in bt-api: %ld %ld %d %d.",
int link_type;
gboolean rssi_enabled = FALSE;
- g_variant_get(parameters, "(isib)", &result, &address,
+ g_variant_get(parameters, "(i&sib)", &result, &address,
&link_type, &rssi_enabled);
BT_DBG("RSSI Enabled[Address:%s LinkType:%d RSSI_dbm:%d]",
int link_type;
bt_rssi_alert_t alert = { 0, };
- g_variant_get(parameters, "(isiii)", &result, &address,
+ g_variant_get(parameters, "(i&siii)", &result, &address,
&link_type, &alert_type, &rssi_dbm);
alert.alert_type = alert_type;
char *address;
bt_raw_rssi_t raw_rssi = { 0, };
- g_variant_get(parameters, "(isii)", &result,
+ g_variant_get(parameters, "(i&sii)", &result,
&address, &link_type, &rssi_dbm);
BT_DBG("Address [%s] Link Type[%d] dBm[%d]",
BT_DBG("BT_PXP_PROPERTY_CHANGED");
- g_variant_get(parameters, "(isiii)", &result, &address, &role, &type, &level);
+ g_variant_get(parameters, "(i&siii)", &result, &address, &role, &type, &level);
_bt_convert_addr_string_to_type(dev_address.addr, address);
memcpy(¶ms.device_address, &dev_address, BLUETOOTH_ADDRESS_LENGTH);
GVariant* value = NULL;
while (g_variant_iter_loop(res, "{sv}", &key, &value)) {
char* string_value = NULL;
- g_variant_get(value, "s", &string_value);
+ g_variant_get(value, "&s", &string_value);
BT_DBG("got folder name: %s", string_value);
folders_struct.names[i] = strdup(string_value);
}
&data_var);
g_strlcpy(char_prop.address, address, BT_ADDRESS_STRING_SIZE);
- BT_INFO("GATT Client Char value changed in remote Server [%s]", address);
- BT_INFO("GATT Client Char Val len: [%d]", char_prop.val_len);
+ BT_DBG("GATT Client Char value changed in remote Server [%s]", address);
+ BT_DBG("GATT Client Char Val len: [%d]", char_prop.val_len);
if (char_prop.val_len > 0) {
/* Copy Data */
g_variant_unref(svc_uuid_var);
g_variant_unref(char_uuid_var);
g_variant_unref(data_var);
-
} else if (strcasecmp(signal_name, BT_GATT_CLIENT_READ_CHAR) == 0) { /* Done */
/* Event: BLUETOOTH_EVENT_GATT_READ_CHAR */
BT_DBG("GATT Client event[BT_GATT_CLIENT_READ_CHAR]");
g_variant_unref(svc_uuid_var);
g_variant_unref(char_uuid_var);
g_variant_unref(data_var);
-
} else if (strcasecmp(signal_name, BT_GATT_CLIENT_WRITE_CHAR) == 0) { /* Done */
/* Event: BLUETOOTH_EVENT_GATT_WRITE_CHAR */
BT_DBG("GATT Client event[BT_GATT_CLIENT_WRITE_CHAR]");
g_variant_unref(svc_uuid_var);
g_variant_unref(char_uuid_var);
-
} else if (strcasecmp(signal_name, BT_GATT_CLIENT_READ_DESC) == 0) { /* Done */
/* Event: BLUETOOTH_EVENT_GATT_READ_DESC */
BT_DBG("GATT Client event[BT_GATT_CLIENT_READ_DESC]");
g_variant_unref(char_uuid_var);
g_variant_unref(desc_uuid_var);
g_variant_unref(data_var);
-
} else if (strcasecmp(signal_name, BT_GATT_CLIENT_WRITE_DESC) == 0) { /* Done */
/* Event: BLUETOOTH_EVENT_GATT_WRITE_DESC */
BT_DBG("GATT Client event[BT_GATT_CLIENT_WRITE_DESC]");
g_strlcpy(desc_prop.address, address, BT_ADDRESS_STRING_SIZE);
- BT_INFO("GATT Client Write Descriptor Callback from [%s]", address);
- BT_INFO("GATT Client Descriptor Val len: [%d]", desc_prop.val_len);
+ BT_DBG("GATT Client Write Descriptor Callback from [%s]", address);
+ BT_DBG("GATT Client Descriptor Val len: [%d]", desc_prop.val_len);
/* Copy Data */
memcpy(&desc_prop.prop.uuid, g_variant_get_data(desc_uuid_var), 16);
g_variant_unref(svc_uuid_var);
g_variant_unref(char_uuid_var);
g_variant_unref(desc_uuid_var);
-
} else if (strcasecmp(signal_name, BT_GATT_CLIENT_SERVICE_CHANGED) == 0) {
- BT_DBG("GATT Client event[BT_GATT_CLIENT_SERVICE_CHANGED]");
bt_gatt_service_change_t change = {0, };
char *address_str = NULL;
char *name = NULL;
g_variant_get(parameters, "(ii&s&s)", &change.inst_id, &change.change_type, &address_str, &change.uuid);
_bt_convert_addr_string_to_type(change.device_addr.addr, address_str);
- bluetooth_get_uuid_name(change.uuid, &name);
- BT_INFO(" ### GATT Service %s [%s]", change.change_type ? "Added" : "Removed", name);
- g_free(name);
if (_bluetooth_gatt_check_service_change_watcher_address(&change.device_addr) == FALSE) {
- BT_INFO("No watcher for %s", address_str);
+ BT_DBG("GATT Service changed, but no watcher for %s", address_str);
return;
}
+ bluetooth_get_uuid_name(change.uuid, &name);
+ BT_INFO(" ### GATT Service %s [%s]", change.change_type ? "Added" : "Removed", name);
+ g_free(name);
+
_bt_gatt_client_event_cb(BLUETOOTH_EVENT_GATT_CLIENT_SERVICE_CHANGED,
BLUETOOTH_ERROR_NONE, &change,
event_info->cb, event_info->user_data);
GVariant *parameters,
gpointer user_data)
{
- BT_INFO("GATT Server event handler Entry >>");
+ BT_DBG("Signal : %s", signal_name);
bt_event_info_t *event_info;
int result = BLUETOOTH_ERROR_NONE;
event_info->cb, event_info->user_data);
} else if (strcasecmp(signal_name, BT_GATT_VALUE_CHANGED) == 0) {
#endif
- BT_INFO("GATT Server event[BT_GATT_SERVER_WRITE_REQUESTED]");
const char *address = NULL;
GVariant *data_var = NULL;
bluetooth_device_address_t dev_address = { {0} };
event_info->cb, event_info->user_data);
}
-
- BT_INFO("GATT Server event handler Exit <<");
}
#endif
path = BT_GATT_CLIENT_PATH;
break;
#endif
+ case BT_MESH_EVENT:
+ event_func = __bt_mesh_event_filter;
+ path = BT_MESH_PATH;
+ break;
default:
BT_ERR("Unknown event");
return BLUETOOTH_ERROR_INTERNAL;
return;
}
owner_sig_id = g_dbus_connection_signal_subscribe(connection_type,
- NULL, BT_EVENT_FREEDESKTOP,
+ BT_DBUS_NAME, BT_EVENT_FREEDESKTOP,
BT_NAME_OWNER_CHANGED, NULL, NULL, 0,
__bt_name_owner_changed, NULL, NULL);
}