diff --git a/main/ble_spp_server_demo.c b/main/ble_spp_server_demo.c index dff2410..95eebf1 100644 --- a/main/ble_spp_server_demo.c +++ b/main/ble_spp_server_demo.c @@ -7,6 +7,7 @@ */ #include "ble_spp_server_demo.h" + #include "rgb_led.h" #define GATTS_TABLE_TAG "GATTS_SPP_SERVER" @@ -129,22 +130,22 @@ static const uint8_t char_prop_read_write_notify = ESP_GATT_CHAR_PROP_BIT_READ | #endif /// SPP Service - data receive characteristic, read&write without response -// static const uint16_t spp_data_receive_uuid = ESP_GATT_UUID_SPP_DATA_RECEIVE; +static const uint16_t spp_data_receive_uuid = ESP_GATT_UUID_SPP_DATA_RECEIVE; static const uint8_t spp_data_receive_val[128] = {0x00}; /// SPP Service - data notify characteristic, notify&read -// static const uint16_t spp_data_notify_uuid = ESP_GATT_UUID_SPP_DATA_NOTIFY; +static const uint16_t spp_data_notify_uuid = ESP_GATT_UUID_SPP_DATA_NOTIFY; static const uint8_t spp_data_notify_val[20] = {0x00}; static const uint8_t spp_data_notify_ccc[2] = {0x00, 0x00}; /// SPP Service - command characteristic, read&write without response -// static const uint16_t spp_command_uuid = ESP_GATT_UUID_SPP_COMMAND_RECEIVE; -// static const uint8_t spp_command_val[10] = {0x00}; +static const uint16_t spp_command_uuid = ESP_GATT_UUID_SPP_COMMAND_RECEIVE; +static const uint8_t spp_command_val[10] = {0x00}; /// SPP Service - status characteristic, notify&read -// static const uint16_t spp_status_uuid = ESP_GATT_UUID_SPP_COMMAND_NOTIFY; -// static const uint8_t spp_status_val[10] = {0x00}; -// static const uint8_t spp_status_ccc[2] = {0x00, 0x00}; +static const uint16_t spp_status_uuid = ESP_GATT_UUID_SPP_COMMAND_NOTIFY; +static const uint8_t spp_status_val[10] = {0x00}; +static const uint8_t spp_status_ccc[2] = {0x00, 0x00}; #ifdef SUPPORT_HEARTBEAT /// SPP Server - Heart beat characteristic, notify&write&read @@ -158,15 +159,15 @@ static const uint8_t spp_service_uuid128[16] = { 0x9E, 0xCA, 0xDC, 0x24, 0x0E, 0xE5, 0xA9, 0xE0, 0x93, 0xF3, 0xA3, 0xB5, 0x01, 0x00, 0x40, 0x6E, // }; -static const uint8_t spp_char_uuid128_rx[16] = { - /* LSB <--------------------------------------------------------------------------------> MSB */ - 0x9E, 0xCA, 0xDC, 0x24, 0x0E, 0xE5, 0xA9, 0xE0, 0x93, 0xF3, 0xA3, 0xB5, 0x02, 0x00, 0x40, 0x6E, // -}; +// static const uint8_t spp_char_uuid128_rx[16] = { +// /* LSB <--------------------------------------------------------------------------------> MSB */ +// 0x9E, 0xCA, 0xDC, 0x24, 0x0E, 0xE5, 0xA9, 0xE0, 0x93, 0xF3, 0xA3, 0xB5, 0x02, 0x00, 0x40, 0x6E, // +// }; -static const uint8_t spp_char_uuid128_tx[16] = { - /* LSB <--------------------------------------------------------------------------------> MSB */ - 0x9E, 0xCA, 0xDC, 0x24, 0x0E, 0xE5, 0xA9, 0xE0, 0x93, 0xF3, 0xA3, 0xB5, 0x03, 0x00, 0x40, 0x6E, // -}; +// static const uint8_t spp_char_uuid128_tx[16] = { +// /* LSB <--------------------------------------------------------------------------------> MSB */ +// 0x9E, 0xCA, 0xDC, 0x24, 0x0E, 0xE5, 0xA9, 0xE0, 0x93, 0xF3, 0xA3, 0xB5, 0x03, 0x00, 0x40, 0x6E, // +// }; /// Full HRS Database Description - Used to add attributes into the database static const esp_gatts_attr_db_t spp_gatt_db[SPP_IDX_NB] = { @@ -174,51 +175,47 @@ static const esp_gatts_attr_db_t spp_gatt_db[SPP_IDX_NB] = { [SPP_IDX_SVC] = {{ESP_GATT_AUTO_RSP}, {ESP_UUID_LEN_16, (uint8_t *)&primary_service_uuid, ESP_GATT_PERM_READ, sizeof(spp_service_uuid128), sizeof(spp_service_uuid128), (uint8_t *)&spp_service_uuid128}}, + // SPP - data receive characteristic Declaration + [SPP_IDX_SPP_DATA_RECV_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 - data receive characteristic Value + [SPP_IDX_SPP_DATA_RECV_VAL] = {{ESP_GATT_AUTO_RSP}, + {ESP_UUID_LEN_16, (uint8_t *)&spp_data_receive_uuid, ESP_GATT_PERM_READ | ESP_GATT_PERM_WRITE, SPP_DATA_MAX_LEN, sizeof(spp_data_receive_val), + (uint8_t *)spp_data_receive_val}}, + // SPP - data notify characteristic Declaration [SPP_IDX_SPP_DATA_NOTIFY_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 - data notify characteristic Value [SPP_IDX_SPP_DATA_NTY_VAL] = {{ESP_GATT_AUTO_RSP}, - {ESP_UUID_LEN_128, (uint8_t *)&spp_char_uuid128_rx, ESP_GATT_PERM_READ, SPP_DATA_MAX_LEN, sizeof(spp_data_notify_val), (uint8_t *)spp_data_notify_val}}, + {ESP_UUID_LEN_16, (uint8_t *)&spp_data_notify_uuid, ESP_GATT_PERM_READ, SPP_DATA_MAX_LEN, sizeof(spp_data_notify_val), (uint8_t *)spp_data_notify_val}}, // SPP - data notify characteristic - Client Characteristic Configuration Descriptor [SPP_IDX_SPP_DATA_NTF_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_data_notify_ccc), (uint8_t *)spp_data_notify_ccc}}, - // SPP - data receive characteristic Declaration - [SPP_IDX_SPP_DATA_RECV_CHAR] = {{ESP_GATT_AUTO_RSP}, - {ESP_UUID_LEN_16, (uint8_t *)&character_declaration_uuid, ESP_GATT_PERM_WRITE, CHAR_DECLARATION_SIZE, CHAR_DECLARATION_SIZE, (uint8_t *)&char_prop_read_write}}, - - // SPP - data receive characteristic Value - [SPP_IDX_SPP_DATA_RECV_VAL] = {{ESP_GATT_AUTO_RSP}, - {ESP_UUID_LEN_128, (uint8_t *)&spp_char_uuid128_tx, 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 @@ -378,25 +375,25 @@ void uart_task(void *pvParameters) { vTaskDelete(NULL); } -// static void spp_uart_init(void) { -// uart_config_t uart_config = { -// .baud_rate = 115200, -// .data_bits = UART_DATA_8_BITS, -// .parity = UART_PARITY_DISABLE, -// .stop_bits = UART_STOP_BITS_1, -// .flow_ctrl = UART_HW_FLOWCTRL_RTS, -// .rx_flow_ctrl_thresh = 122, -// .source_clk = UART_SCLK_APB, -// }; - -// // Install UART driver, and get the queue. -// uart_driver_install(UART_NUM_0, 4096, 8192, 10, &spp_uart_queue, 0); -// // Set UART parameters -// uart_param_config(UART_NUM_0, &uart_config); -// // Set UART pins -// uart_set_pin(UART_NUM_0, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); -// xTaskCreate(uart_task, "uTask", 2048, (void *)UART_NUM_0, 8, NULL); -// } +static void spp_uart_init(void) { + uart_config_t uart_config = { + .baud_rate = 115200, + .data_bits = UART_DATA_8_BITS, + .parity = UART_PARITY_DISABLE, + .stop_bits = UART_STOP_BITS_1, + .flow_ctrl = UART_HW_FLOWCTRL_RTS, + .rx_flow_ctrl_thresh = 122, + .source_clk = UART_SCLK_APB, + }; + + // Install UART driver, and get the queue. + uart_driver_install(UART_NUM_0, 4096, 8192, 10, &spp_uart_queue, 0); + // Set UART parameters + uart_param_config(UART_NUM_0, &uart_config); + // Set UART pins + uart_set_pin(UART_NUM_0, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); + xTaskCreate(uart_task, "uTask", 2048, (void *)UART_NUM_0, 8, NULL); +} #ifdef SUPPORT_HEARTBEAT void spp_heartbeat_task(void *arg) { @@ -436,17 +433,17 @@ void spp_cmd_task(void *arg) { vTaskDelete(NULL); } -// static void spp_task_init(void) { -// spp_uart_init(); +static void spp_task_init(void) { + spp_uart_init(); -// #ifdef SUPPORT_HEARTBEAT -// cmd_heartbeat_queue = xQueueCreate(10, sizeof(uint32_t)); -// xTaskCreate(spp_heartbeat_task, "spp_heartbeat_task", 2048, NULL, 10, NULL); -// #endif +#ifdef SUPPORT_HEARTBEAT + cmd_heartbeat_queue = xQueueCreate(10, sizeof(uint32_t)); + xTaskCreate(spp_heartbeat_task, "spp_heartbeat_task", 2048, NULL, 10, NULL); +#endif -// cmd_cmd_queue = xQueueCreate(10, sizeof(uint32_t)); -// xTaskCreate(spp_cmd_task, "spp_cmd_task", 2048, NULL, 10, NULL); -// } + cmd_cmd_queue = xQueueCreate(10, sizeof(uint32_t)); + xTaskCreate(spp_cmd_task, "spp_cmd_task", 2048, NULL, 10, NULL); +} static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param) { esp_err_t err; @@ -491,6 +488,7 @@ static void gatts_profile_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_ break; case ESP_GATTS_WRITE_EVT: { res = find_char_and_desr_index(p_data->write.handle); + ESP_LOGI("test","---------res = %d--------",res); 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) { @@ -685,7 +683,7 @@ void ble_spp_server_demo_app_main(bluetooth_processer_t *bluetooth_processer) { esp_ble_gap_register_callback(gap_event_handler); esp_ble_gatts_app_register(ESP_SPP_APP_ID); - // spp_task_init(); + spp_task_init(); return; } diff --git a/main/ble_spp_server_demo.h b/main/ble_spp_server_demo.h index 58d4690..2a07f50 100644 --- a/main/ble_spp_server_demo.h +++ b/main/ble_spp_server_demo.h @@ -40,13 +40,13 @@ enum { SPP_IDX_SVC, + SPP_IDX_SPP_DATA_RECV_CHAR, + SPP_IDX_SPP_DATA_RECV_VAL, + SPP_IDX_SPP_DATA_NOTIFY_CHAR, SPP_IDX_SPP_DATA_NTY_VAL, SPP_IDX_SPP_DATA_NTF_CFG, - SPP_IDX_SPP_DATA_RECV_CHAR, - SPP_IDX_SPP_DATA_RECV_VAL, - SPP_IDX_SPP_COMMAND_CHAR, SPP_IDX_SPP_COMMAND_VAL,