}
static void _bt_hal_send_client_char_search_result_event(int conn_id, int status,
- btgatt_srvc_id_t *svc_id, bt_uuid_t *char_uuid, int char_prop)
+ btgatt_srvc_id_t *svc_id, bt_uuid_t *char_uuid, int char_prop, char *char_handle)
{
struct hal_ev_gatt_client_char_search_result ev;
/* building char uuid */
memcpy(ev.char_uuid, char_uuid->uu, sizeof(ev.char_uuid));
ev.char_prop = char_prop;
+
+ ev.char_handle = (int)strtol(char_handle +54, NULL, 16);
}
DBG("sending the char search event. conn_id[%d] status[%d]", conn_id, status);
/* send event */
if (BT_STATUS_SUCCESS == status) {
_bt_hal_send_client_char_search_result_event(conn_id, status, srvc_id,
- &gattc_char->chr_uuid, gattc_char->permission);
+ &gattc_char->chr_uuid, gattc_char->permission, gattc_char->chr_path);
}
}
status = BT_STATUS_FAIL;
- _bt_hal_send_client_char_search_result_event(conn_id, status, srvc_id, NULL, 0);
+ _bt_hal_send_client_char_search_result_event(conn_id, status, srvc_id, NULL, 0, NULL);
browse_service_char(conn_id);
/* retrive uuid for characteristic and object path for descriptor */
ev.inst_id = svc_id->id.inst_id;
ev.is_primary = svc_id->is_primary;
ev.status = status;
+ ev.char_handle = char_id->inst_id;
memcpy(ev.svc_uuid, svc_id->id.uuid.uu, sizeof(ev.svc_uuid));
memcpy(ev.char_uuid, char_id->uuid.uu, sizeof(ev.char_uuid));
_bt_hal_convert_uuid_type_to_string(svc_uuid_str, gattc_service->svc_uuid.uu);
// DBG("%s %s", gattc_service->svc_path + 37, svc_uuid_str);
+ int characteristic_handle;
/* find characteristics */
/* a service can have two char with same uuid */
for (l = gattc_service->gatt_list_chars; l != NULL; l = g_slist_next(l)) {
gattc_char = (hal_gattc_char_t*)l->data;
if (gattc_char == NULL)
continue;
+ characteristic_handle = (int)strtol(gattc_char->chr_path + 54, NULL, 16);
- if (!memcmp(&gattc_char->chr_uuid, &char_id->uuid, sizeof(bt_uuid_t))) {
+ if (!memcmp(&gattc_char->chr_uuid, &char_id->uuid, sizeof(bt_uuid_t)) &&
+ characteristic_handle == char_id->inst_id) {
_bt_hal_convert_uuid_type_to_string(char_uuid_str, gattc_char->chr_uuid.uu);
// DBG("%s %s", gattc_char->chr_path + 37, char_uuid_str);
ev.inst_id = resp_data->srvc_id.id.inst_id;
ev.is_primary = resp_data->srvc_id.is_primary;
ev.status = result;
+ ev.char_handle = resp_data->char_id.inst_id;
memcpy(ev.svc_uuid, resp_data->srvc_id.id.uuid.uu, sizeof(ev.svc_uuid));
memcpy(ev.char_uuid, resp_data->char_id.uuid.uu, sizeof(ev.char_uuid));
ev.inst_id = resp_data->srvc_id.id.inst_id;
ev.is_primary = resp_data->srvc_id.is_primary;
ev.status = result;
+ ev.char_handle = resp_data->char_id.inst_id;
memcpy(ev.svc_uuid, resp_data->srvc_id.id.uuid.uu, sizeof(ev.svc_uuid));
memcpy(ev.char_uuid, resp_data->char_id.uuid.uu, sizeof(ev.char_uuid));
ev.inst_id = resp_data->srvc_id.id.inst_id;
ev.is_primary = resp_data->srvc_id.is_primary;
ev.status = result;
+ ev.char_handle = resp_data->char_id.inst_id;
memcpy(ev.svc_uuid, resp_data->srvc_id.id.uuid.uu, sizeof(ev.svc_uuid));
memcpy(ev.char_uuid, resp_data->char_id.uuid.uu, sizeof(ev.char_uuid));
ev.inst_id = resp_data->srvc_id.id.inst_id;
ev.is_primary = resp_data->srvc_id.is_primary;
ev.status = result;
+ ev.char_handle = resp_data->char_id.inst_id;
memcpy(ev.svc_uuid, resp_data->srvc_id.id.uuid.uu, sizeof(ev.svc_uuid));
memcpy(ev.char_uuid, resp_data->char_id.uuid.uu, sizeof(ev.char_uuid));
ev.is_primary = resp_data->srvc_id.is_primary;
ev.inst_id = resp_data->srvc_id.id.inst_id;
+ ev.char_handle = resp_data->char_id.inst_id;
memcpy(ev.svc_uuid, resp_data->srvc_id.id.uuid.uu, sizeof(ev.svc_uuid));
memcpy(ev.char_uuid, resp_data->char_id.uuid.uu, sizeof(ev.char_uuid));
ev.is_primary = resp_data->srvc_id.is_primary;
ev.inst_id = resp_data->srvc_id.id.inst_id;
+ ev.char_handle = resp_data->char_id.inst_id;
memcpy(ev.svc_uuid, resp_data->srvc_id.id.uuid.uu, sizeof(ev.svc_uuid));
memcpy(ev.char_uuid, resp_data->char_id.uuid.uu, sizeof(ev.char_uuid));
ev.conn_id = gattc_client->conn_id;
ev.inst_id = conn_info->inst_id;
ev.is_primary = svc_info->is_primary;
+ ev.char_handle = (int)strtol(char_info->chr_path +54, NULL, 16);
+
memcpy(ev.svc_uuid, svc_info->svc_uuid.uu, sizeof(ev.svc_uuid));
memcpy(ev.char_uuid, char_info->chr_uuid.uu, sizeof(ev.char_uuid));
if (BT_STATUS_SUCCESS == ev->status) {
memcpy(gatt_char_id.uuid.uu, ev->char_uuid, 16);
- gatt_char_id.inst_id = ev->inst_id;
+ gatt_char_id.inst_id = ev->char_handle;
}
if (bt_gatt_callbacks->client->get_characteristic_cb)
memcpy(gatt_srvc_id.id.uuid.uu, ev->svc_uuid, 16);
memcpy(gatt_char_id.uuid.uu, ev->char_uuid, 16);
- gatt_char_id.inst_id = ev->inst_id;
+ gatt_char_id.inst_id = ev->char_handle;
if (BT_STATUS_SUCCESS == ev->status) {
memcpy(gatt_desc_id.uuid.uu, ev->desc_uuid, 16);
char_read_parm.srvc_id.id.inst_id = ev->inst_id;
memcpy(char_read_parm.srvc_id.id.uuid.uu, ev->svc_uuid, 16);
- char_read_parm.char_id.inst_id = ev->inst_id;
+ char_read_parm.char_id.inst_id = ev->char_handle;
memcpy(char_read_parm.char_id.uuid.uu, ev->char_uuid, 16);
char_read_parm.value.len = ev->len;
desc_read_parm.srvc_id.id.inst_id = ev->inst_id;
memcpy(desc_read_parm.srvc_id.id.uuid.uu, ev->svc_uuid, 16);
- desc_read_parm.char_id.inst_id = ev->inst_id;
+ desc_read_parm.char_id.inst_id = ev->char_handle;
memcpy(desc_read_parm.char_id.uuid.uu, ev->char_uuid, 16);
desc_read_parm.descr_id.inst_id = ev->inst_id;
char_write_parm.srvc_id.id.inst_id = ev->inst_id;
memcpy(char_write_parm.srvc_id.id.uuid.uu, ev->svc_uuid, 16);
- char_write_parm.char_id.inst_id = ev->inst_id;
+ char_write_parm.char_id.inst_id = ev->char_handle;
memcpy(char_write_parm.char_id.uuid.uu, ev->char_uuid, 16);
if (bt_gatt_callbacks->client->write_characteristic_cb)
desc_write_parm.srvc_id.id.inst_id = ev->inst_id;
memcpy(desc_write_parm.srvc_id.id.uuid.uu, ev->svc_uuid, 16);
- desc_write_parm.char_id.inst_id = ev->inst_id;
+ desc_write_parm.char_id.inst_id = ev->char_handle;
memcpy(desc_write_parm.char_id.uuid.uu, ev->char_uuid, 16);
desc_write_parm.descr_id.inst_id = ev->inst_id;
memcpy(gatt_srvc_id.id.uuid.uu, ev->svc_uuid, 16);
memcpy(gatt_char_id.uuid.uu, ev->char_uuid, 16);
- gatt_char_id.inst_id = ev->inst_id;
+ gatt_char_id.inst_id = ev->char_handle;
if (bt_gatt_callbacks->client->register_for_notification_cb)
bt_gatt_callbacks->client->register_for_notification_cb(ev->conn_id,
changd_value_parm.srvc_id.id.inst_id = ev->inst_id;
memcpy(changd_value_parm.srvc_id.id.uuid.uu, ev->svc_uuid, 16);
- changd_value_parm.char_id.inst_id = ev->inst_id;
+ changd_value_parm.char_id.inst_id = ev->char_handle;
memcpy(changd_value_parm.char_id.uuid.uu, ev->char_uuid, 16);
+
changd_value_parm.is_notify = ev->is_notify;
memcpy(changd_value_parm.bda.address, ev->bdaddr, 6);