/******************************************************************************* ** ** Function gap_ble_cl_read_request ** ** Description utility function to start a read request for a GAP charactersitic ** ** Returns TRUE if read started, else FALSE if GAP is busy ** *******************************************************************************/ BOOLEAN gap_ble_cl_read_request(tGAP_CLCB *p_clcb, UINT16 uuid, void * p_cback) { tGATT_READ_PARAM param; memset(¶m, 0, sizeof(tGATT_READ_PARAM)); param.service.uuid.len = LEN_UUID_16; param.service.uuid.uu.uuid16 = uuid; param.service.s_handle = 1; param.service.e_handle = 0xFFFF; param.service.auth_req = 0; if (GATTC_Read(p_clcb->conn_id, GATT_READ_BY_TYPE, ¶m) != GATT_SUCCESS) { GAP_TRACE_ERROR ("GAP_BleReadPeerPrefConnParams: GATT_Read Failed"); /* release the link here */ GATT_Disconnect(p_clcb->conn_id); return(FALSE); } else { p_clcb->p_cback = p_cback; p_clcb->cl_op_uuid = uuid; return TRUE; } }
/******************************************************************************* ** ** Function srvc_eng_release_channel ** ** Description Client operation complete callback. ** ** Returns void ** *******************************************************************************/ void srvc_eng_release_channel (UINT16 conn_id) { tSRVC_CLCB *p_clcb = srvc_eng_find_clcb_by_conn_id(conn_id); p_clcb->cur_srvc_id = SRVC_ID_NONE; /* check pending request */ //if (p_clcb->pend_req == NULL) GATT_Disconnect(p_clcb->conn_id); }
/******************************************************************************* ** ** Function srvc_eng_release_channel ** ** Description Client operation complete callback. ** ** Returns void ** *******************************************************************************/ void srvc_eng_release_channel (UINT16 conn_id) { tSRVC_CLCB *p_clcb = srvc_eng_find_clcb_by_conn_id(conn_id); if (p_clcb == NULL) { GATT_TRACE_ERROR("%s: invalid connection id %d", __FUNCTION__, conn_id); return; } p_clcb->cur_srvc_id = SRVC_ID_NONE; /* check pending request */ GATT_Disconnect(p_clcb->conn_id); }
bt_status_t btif_gattc_test_command_impl(uint16_t command, btgatt_test_params_t* params) { switch(command) { case 0x01: /* Enable */ { LOG_DEBUG(LOG_TAG, "%s: ENABLE - enable=%d", __FUNCTION__, params->u1); if (params->u1) { tBT_UUID app_uuid = {LEN_UUID_128,{0xAE}}; test_cb.gatt_if = GATT_Register(&app_uuid, &btif_test_callbacks); GATT_StartIf(test_cb.gatt_if); } else { GATT_Deregister(test_cb.gatt_if); test_cb.gatt_if = 0; } break; } case 0x02: /* Connect */ { LOG_DEBUG(LOG_TAG, "%s: CONNECT - device=%02x:%02x:%02x:%02x:%02x:%02x (dev_type=%d, addr_type=%d)", __FUNCTION__, params->bda1->address[0], params->bda1->address[1], params->bda1->address[2], params->bda1->address[3], params->bda1->address[4], params->bda1->address[5], params->u1, params->u2); if (params->u1 == BT_DEVICE_TYPE_BLE) BTM_SecAddBleDevice(params->bda1->address, NULL, BT_DEVICE_TYPE_BLE, params->u2); if ( !GATT_Connect(test_cb.gatt_if, params->bda1->address, TRUE, BT_TRANSPORT_LE) ) { LOG_ERROR(LOG_TAG, "%s: GATT_Connect failed!", __FUNCTION__); } break; } case 0x03: /* Disconnect */ { LOG_DEBUG(LOG_TAG, "%s: DISCONNECT - conn_id=%d", __FUNCTION__, test_cb.conn_id); GATT_Disconnect(test_cb.conn_id); break; } case 0x04: /* Discover */ { char buf[50] = {0}; tGATT_DISC_PARAM param; memset(¶m, 0, sizeof(tGATT_DISC_PARAM)); if (params->u1 >= GATT_DISC_MAX) { LOG_ERROR(LOG_TAG, "%s: DISCOVER - Invalid type (%d)!", __FUNCTION__, params->u1); return 0; } param.s_handle = params->u2; param.e_handle = params->u3; btif_to_bta_uuid(¶m.service, params->uuid1); LOG_DEBUG(LOG_TAG, "%s: DISCOVER (%s), conn_id=%d, uuid=%s, handles=0x%04x-0x%04x", __FUNCTION__, disc_name[params->u1], test_cb.conn_id, format_uuid(param.service, buf), params->u2, params->u3); GATTC_Discover(test_cb.conn_id, params->u1, ¶m); break; } case 0xF0: /* Pairing configuration */ LOG_DEBUG(LOG_TAG, "%s: Setting pairing config auth=%d, iocaps=%d, keys=%d/%d/%d", __FUNCTION__, params->u1, params->u2, params->u3, params->u4, params->u5); bte_appl_cfg.ble_auth_req = params->u1; bte_appl_cfg.ble_io_cap = params->u2; bte_appl_cfg.ble_init_key = params->u3; bte_appl_cfg.ble_resp_key = params->u4; bte_appl_cfg.ble_max_key_size = params->u5; break; default: LOG_ERROR(LOG_TAG, "%s: UNKNOWN TEST COMMAND 0x%02x", __FUNCTION__, command); break; } return 0; }