|
|
@ -214,25 +214,25 @@ static const esp_gatts_attr_db_t spp_gatt_db[SPP_IDX_NB] = { |
|
|
|
{ESP_UUID_LEN_128, (uint8_t *)&spp_char_uuid128_tx, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, SPP_DATA_MAX_LEN, sizeof(spp_data_receive_val), |
|
|
|
(uint8_t *)spp_data_receive_val}}, |
|
|
|
|
|
|
|
// // SPP - command characteristic Declaration |
|
|
|
// [SPP_IDX_SPP_COMMAND_CHAR] = {{ESP_GATT_AUTO_RSP}, |
|
|
|
// {ESP_UUID_LEN_16, (uint8_t *)&character_declaration_uuid, ESP_GATT_PERM_READ, CHAR_DECLARATION_SIZE, CHAR_DECLARATION_SIZE, (uint8_t *)&char_prop_read_write}}, |
|
|
|
// // SPP - command characteristic Declaration |
|
|
|
// [SPP_IDX_SPP_COMMAND_CHAR] = {{ESP_GATT_AUTO_RSP}, |
|
|
|
// {ESP_UUID_LEN_16, (uint8_t *)&character_declaration_uuid, ESP_GATT_PERM_READ, CHAR_DECLARATION_SIZE, CHAR_DECLARATION_SIZE, (uint8_t *)&char_prop_read_write}}, |
|
|
|
|
|
|
|
// // SPP - command characteristic Value |
|
|
|
// [SPP_IDX_SPP_COMMAND_VAL] = {{ESP_GATT_AUTO_RSP}, |
|
|
|
// {ESP_UUID_LEN_16, (uint8_t *)&spp_command_uuid, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, SPP_CMD_MAX_LEN, sizeof(spp_command_val), (uint8_t *)spp_command_val}}, |
|
|
|
// // SPP - command characteristic Value |
|
|
|
// [SPP_IDX_SPP_COMMAND_VAL] = {{ESP_GATT_AUTO_RSP}, |
|
|
|
// {ESP_UUID_LEN_16, (uint8_t *)&spp_command_uuid, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, SPP_CMD_MAX_LEN, sizeof(spp_command_val), (uint8_t *)spp_command_val}}, |
|
|
|
|
|
|
|
// // SPP - status characteristic Declaration |
|
|
|
// [SPP_IDX_SPP_STATUS_CHAR] = {{ESP_GATT_AUTO_RSP}, |
|
|
|
// {ESP_UUID_LEN_16, (uint8_t *)&character_declaration_uuid, ESP_GATT_PERM_READ, CHAR_DECLARATION_SIZE, CHAR_DECLARATION_SIZE, (uint8_t *)&char_prop_read_notify}}, |
|
|
|
// // SPP - status characteristic Declaration |
|
|
|
// [SPP_IDX_SPP_STATUS_CHAR] = {{ESP_GATT_AUTO_RSP}, |
|
|
|
// {ESP_UUID_LEN_16, (uint8_t *)&character_declaration_uuid, ESP_GATT_PERM_READ, CHAR_DECLARATION_SIZE, CHAR_DECLARATION_SIZE, (uint8_t *)&char_prop_read_notify}}, |
|
|
|
|
|
|
|
// // SPP - status characteristic Value |
|
|
|
// [SPP_IDX_SPP_STATUS_VAL] = {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&spp_status_uuid, ESP_GATT_PERM_READ, SPP_STATUS_MAX_LEN, sizeof(spp_status_val), (uint8_t *)spp_status_val}}, |
|
|
|
// // SPP - status characteristic Value |
|
|
|
// [SPP_IDX_SPP_STATUS_VAL] = {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&spp_status_uuid, ESP_GATT_PERM_READ, SPP_STATUS_MAX_LEN, sizeof(spp_status_val), (uint8_t *)spp_status_val}}, |
|
|
|
|
|
|
|
// // SPP - status characteristic - Client Characteristic Configuration Descriptor |
|
|
|
// [SPP_IDX_SPP_STATUS_CFG] = {{ESP_GATT_AUTO_RSP}, |
|
|
|
// {ESP_UUID_LEN_16, (uint8_t *)&character_client_config_uuid, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, sizeof(uint16_t), sizeof(spp_status_ccc), |
|
|
|
// (uint8_t *)spp_status_ccc}}, |
|
|
|
// // SPP - status characteristic - Client Characteristic Configuration Descriptor |
|
|
|
// [SPP_IDX_SPP_STATUS_CFG] = {{ESP_GATT_AUTO_RSP}, |
|
|
|
// {ESP_UUID_LEN_16, (uint8_t *)&character_client_config_uuid, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, sizeof(uint16_t), sizeof(spp_status_ccc), |
|
|
|
// (uint8_t *)spp_status_ccc}}, |
|
|
|
|
|
|
|
#ifdef SUPPORT_HEARTBEAT |
|
|
|
// SPP - Heart beat characteristic Declaration |
|
|
@ -498,26 +498,27 @@ static void gatts_profile_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_ |
|
|
|
esp_ble_gatts_create_attr_tab(spp_gatt_db, gatts_if, SPP_IDX_NB, SPP_SVC_INST_ID); |
|
|
|
break; |
|
|
|
case ESP_GATTS_READ_EVT: |
|
|
|
res = find_char_and_desr_index(p_data->read.handle); |
|
|
|
if (res == SPP_IDX_SPP_STATUS_VAL) { |
|
|
|
// TODO:client read the status characteristic |
|
|
|
} |
|
|
|
// res = find_char_and_desr_index(p_data->read.handle); |
|
|
|
// if (res == SPP_IDX_SPP_STATUS_VAL) { |
|
|
|
// // TODO:client read the status characteristic |
|
|
|
// } |
|
|
|
break; |
|
|
|
case ESP_GATTS_WRITE_EVT: { |
|
|
|
res = find_char_and_desr_index(p_data->write.handle); |
|
|
|
if (p_data->write.is_prep == false) { |
|
|
|
ESP_LOGI(GATTS_TABLE_TAG, "ESP_GATTS_WRITE_EVT : handle = %d\n", res); |
|
|
|
if (res == SPP_IDX_SPP_COMMAND_VAL) { |
|
|
|
uint8_t *spp_cmd_buff = NULL; |
|
|
|
spp_cmd_buff = (uint8_t *)malloc((spp_mtu_size - 3) * sizeof(uint8_t)); |
|
|
|
if (spp_cmd_buff == NULL) { |
|
|
|
ESP_LOGE(GATTS_TABLE_TAG, "%s malloc failed\n", __func__); |
|
|
|
break; |
|
|
|
} |
|
|
|
memset(spp_cmd_buff, 0x0, (spp_mtu_size - 3)); |
|
|
|
memcpy(spp_cmd_buff, p_data->write.value, p_data->write.len); |
|
|
|
xQueueSend(cmd_cmd_queue, &spp_cmd_buff, 10 / portTICK_PERIOD_MS); |
|
|
|
} else if (res == SPP_IDX_SPP_DATA_NTF_CFG) { |
|
|
|
// if (res == SPP_IDX_SPP_COMMAND_VAL) { |
|
|
|
// uint8_t *spp_cmd_buff = NULL; |
|
|
|
// spp_cmd_buff = (uint8_t *)malloc((spp_mtu_size - 3) * sizeof(uint8_t)); |
|
|
|
// if (spp_cmd_buff == NULL) { |
|
|
|
// ESP_LOGE(GATTS_TABLE_TAG, "%s malloc failed\n", __func__); |
|
|
|
// break; |
|
|
|
// } |
|
|
|
// memset(spp_cmd_buff, 0x0, (spp_mtu_size - 3)); |
|
|
|
// memcpy(spp_cmd_buff, p_data->write.value, p_data->write.len); |
|
|
|
// xQueueSend(cmd_cmd_queue, &spp_cmd_buff, 10 / portTICK_PERIOD_MS); |
|
|
|
// } else if (res == SPP_IDX_SPP_DATA_NTF_CFG) { |
|
|
|
if (res == SPP_IDX_SPP_DATA_NTF_CFG) { |
|
|
|
if ((p_data->write.len == 2) && (p_data->write.value[0] == 0x01) && (p_data->write.value[1] == 0x00)) { |
|
|
|
enable_data_ntf = true; |
|
|
|
} else if ((p_data->write.len == 2) && (p_data->write.value[0] == 0x00) && (p_data->write.value[1] == 0x00)) { |
|
|
|