diff --git a/main/gatts_demo.c b/main/gatts_demo.c index 33d5871..fe91839 100644 --- a/main/gatts_demo.c +++ b/main/gatts_demo.c @@ -20,51 +20,8 @@ /*********************************************************************************************************************** * ****************************************************user_define**************************************************** * ***********************************************************************************************************************/ -typedef struct bluetooth_processer -{ - char *bluetooth_processer_rx_buf; - uint8_t bluetooth_processer_rx_buf_size; // - - int bluetooth_baundrate_one_packet_delay_ms; - void (*port_delay_ms)(uint64_t us); - - char *order; //指令名称 - int index; // - int speed_level; // - double position; //角度 - int direction; //旋转方向 - int code; //错误码 - char *info; //错误码信息 - char *deviceState; //设备状态 - int deviceException; //设备异常编号 - char *deviceExceptionInfo; //设备异常信息 - - bool cmd_flag; - bool actively_report_flag; -} bluetooth_processer_t; - -#define profile_b_buffer_size 128 char bluetooth_rx_buffer[profile_b_buffer_size] = {0}; -uint8_t bluetooth_rx_buffer_len = 0; -bool bluetooth_rx_buffer_start_receving = false; -bool bluetooth_rx_buffer_processing = false; - -bool flag = true; -uint32_t total = 0; -#define timer_group0_interval_num 10000 -// #define timer_group1_interval_num 5 -#define timer_interval_s (uint32_t)1000000 -#define timer_interval_ms (uint32_t)1000 -#define timer_interval_us (uint32_t)1 -#define kbluetooth_baundrate_one_packet_delay_ms 200 - -#define cmd_length_set_position 5 -#define cmd_length_get_status 2 -// #define cmd_length_device_status_report 6 - -#define set_position "setPosition" -#define get_status "getStatus" ble_gatts_str_t ble_gatts_a_str = { .attr_handle = 0, @@ -79,7 +36,6 @@ void buffer_all_init(); void bluetooth_gatts_try_process_data(); void timer_set_pause_and_counter_zero(int group, int timer); void port_timer_delay_ms(uint64_t delay); -void start_receive_data_to_buffer(uint16_t length, uint8_t *value); bool parse_rxbuffer_and_validation_data(cJSON **json_tmp); bool parse_json_to_struct(cJSON *ch); void receipt_json_set_position(); @@ -92,6 +48,9 @@ bluetooth_processer_t s_bluetooth_processer = { .bluetooth_baundrate_one_packet_delay_ms = kbluetooth_baundrate_one_packet_delay_ms, .port_delay_ms = port_timer_delay_ms, + .bluetooth_rx_buffer_start_receving = false, + .bluetooth_rx_buffer_processing = false, + .order = "order", .index = 0, .speed_level = 0, @@ -151,10 +110,10 @@ void timer_group_init(int group, int timer, bool auto_reload, int timer_interval ***********************************************************************************************************************/ void app_main(void) { - esp_ble_gatts_init(&ble_gatts_a_str); + esp_ble_gatts_init(&ble_gatts_a_str, &s_bluetooth_processer); // motor_init(); // motor_encoder_init(); - // timer_group_init(TIMER_GROUP_0, TIMER_0, false, timer_group0_interval_num, timer_interval_ms); + timer_group_init(TIMER_GROUP_0, TIMER_0, false, timer_group0_interval_num, timer_interval_ms); // uint8_t temp[5] = "hello"; // esp_gatt_rsp_t rsp; @@ -173,18 +132,18 @@ void app_main(void) // ESP_LOGI(GATTS_TAG, "%d,%d,%d", ble_gatts_a_str.attr_handle, ble_gatts_a_str.send_conn_id, ble_gatts_a_str.send_gatts_if); // esp_ble_gatts_send_indicate(ble_gatts_a_str.send_gatts_if, ble_gatts_a_str.send_conn_id, // ble_gatts_a_str.attr_handle, 5, temp, true); - // esp_ble_gatts_send_response(ble_gatts_a_str.send_gatts_if, ble_gatts_a_str.send_conn_id, 1, - // ESP_GATT_OK, &rsp); - // ets_delay_us(1000000); + // esp_ble_gatts_send_response(ble_gatts_a_str.send_gatts_if, ble_gatts_a_str.send_conn_id, 1, + // ESP_GATT_OK, &rsp); + // ets_delay_us(1000000); // } // esp_ble_gatts_set_attr_value(ble_gatts_a_str.constructor_param->read.handle, 5, temp); - // bluetooth_gatts_try_process_data(); - // if (s_bluetooth_processer.actively_report_flag) - // { - // receipt_json_get_status(); - // s_bluetooth_processer.actively_report_flag = false; - // } + bluetooth_gatts_try_process_data(); + if (s_bluetooth_processer.actively_report_flag) + { + receipt_json_get_status(); + s_bluetooth_processer.actively_report_flag = false; + } } return; @@ -193,11 +152,7 @@ void app_main(void) /*********************************************************************************************************************** * *************************************************user_funtion_def************************************************** * ***********************************************************************************************************************/ -void buffer_all_init() -{ - bluetooth_rx_buffer_len = 0; - memset(bluetooth_rx_buffer, 0, profile_b_buffer_size); -} + void timer_set_pause_and_counter_zero(int group, int timer) { @@ -225,12 +180,12 @@ void bluetooth_gatts_try_process_data() cJSON *json_tmp; // cJSON *ch; //开始接收 - if (bluetooth_rx_buffer_start_receving) + if (s_bluetooth_processer.bluetooth_rx_buffer_start_receving) { //开启定时器 s_bluetooth_processer.port_delay_ms(s_bluetooth_processer.bluetooth_baundrate_one_packet_delay_ms); // port_timer_delay_ms(kbluetooth_baundrate_one_packet_delay_ms); - bluetooth_rx_buffer_processing = true; + s_bluetooth_processer.bluetooth_rx_buffer_processing = true; //打印输出 // ESP_LOGI(GATTS_TAG, "%s", s_bluetooth_processer.bluetooth_processer_rx_buf); @@ -269,8 +224,8 @@ void bluetooth_gatts_try_process_data() buffer_all_init(); //未在处理数据 s_bluetooth_processer.cmd_flag = false; - bluetooth_rx_buffer_start_receving = false; - bluetooth_rx_buffer_processing = false; + s_bluetooth_processer.bluetooth_rx_buffer_start_receving = false; + s_bluetooth_processer.bluetooth_rx_buffer_processing = false; } } @@ -288,26 +243,6 @@ void port_timer_delay_ms(uint64_t delay) timer_pause(TIMER_GROUP_0, TIMER_0); } -void start_receive_data_to_buffer(uint16_t length, uint8_t *value) -{ - bluetooth_rx_buffer_start_receving = true; - timer_set_counter_value(TIMER_GROUP_0, TIMER_0, 0); - //判断是否buffer越界 - if ((length + bluetooth_rx_buffer_len) > profile_b_buffer_size) - { - return; - } - - if (!bluetooth_rx_buffer_processing) - { - //写入到buffer - for (int i = 0; i < length; i++) - { - bluetooth_rx_buffer[bluetooth_rx_buffer_len++] = value[i]; - } - } -} - bool parse_rxbuffer_and_validation_data(cJSON **json_tmp) { *json_tmp = cJSON_Parse(&bluetooth_rx_buffer[0]); diff --git a/main/t_bluetooth.c b/main/t_bluetooth.c index f8c9aa3..8f0604d 100644 --- a/main/t_bluetooth.c +++ b/main/t_bluetooth.c @@ -4,7 +4,10 @@ * *******************************************************user******************************************************** * ***********************************************************************************************************************/ -static ble_gatts_str_t *ble_gatts_a_structer; +uint8_t bluetooth_rx_buffer_len = 0; + +static ble_gatts_str_t *g_ble_gatts_a_structer; +static bluetooth_processer_t *g_bluetooth_processer; /*********************************************************************************************************************** * ******************************************************************************************************************* * @@ -477,12 +480,7 @@ static void gatts_profile_b_event_handler(esp_gatts_cb_event_t event, esp_gatt_i { ESP_LOGI(GATTS_TAG, "GATT_WRITE_EVT, value len %d, value :", param->write.len); esp_log_buffer_hex(GATTS_TAG, param->write.value, param->write.len); - ESP_LOGI(GATTS_TAG, "ye!!!!!!!!!"); - // start_receive_data_to_buffer(param->write.len, param->write.value); - // for (int i = 0; i < param->write.len; i++) - // { - // bluetooth_rx_buffer[bluetooth_rx_buffer_len++] = param->write.value[i]; - // } + start_receive_data_to_buffer(param->write.len, param->write.value); } example_write_event_env(gatts_if, &b_prepare_write_env, param); break; @@ -608,11 +606,12 @@ static void gatts_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_ } while (0); } -void esp_ble_gatts_init(ble_gatts_str_t *ble_gatts_a_str) +void esp_ble_gatts_init(ble_gatts_str_t *ble_gatts_a_str, bluetooth_processer_t *bluetooth_processer) { esp_err_t ret; - ble_gatts_a_structer = ble_gatts_a_str; + g_ble_gatts_a_structer = ble_gatts_a_str; + g_bluetooth_processer = bluetooth_processer; // Initialize NVS. ret = nvs_flash_init(); @@ -692,7 +691,33 @@ void esp_ble_gatts_init(ble_gatts_str_t *ble_gatts_a_str) void gatts_profile_a_constructor(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param) { - ble_gatts_a_structer->attr_handle = param->read.handle; - ble_gatts_a_structer->send_conn_id = param->read.conn_id; - ble_gatts_a_structer->send_gatts_if = gatts_if; + g_ble_gatts_a_structer->attr_handle = param->read.handle; + g_ble_gatts_a_structer->send_conn_id = param->read.conn_id; + g_ble_gatts_a_structer->send_gatts_if = gatts_if; +} + +void start_receive_data_to_buffer(uint16_t length, uint8_t *value) +{ + g_bluetooth_processer->bluetooth_rx_buffer_start_receving = true; + timer_set_counter_value(TIMER_GROUP_0, TIMER_0, 0); + //判断是否buffer越界 + if ((length + bluetooth_rx_buffer_len) > profile_b_buffer_size) + { + return; + } + + if (!g_bluetooth_processer->bluetooth_rx_buffer_processing) + { + //写入到buffer + for (int i = 0; i < length; i++) + { + g_bluetooth_processer->bluetooth_processer_rx_buf[bluetooth_rx_buffer_len++] = value[i]; + } + } +} + +void buffer_all_init() +{ + bluetooth_rx_buffer_len = 0; + memset(g_bluetooth_processer->bluetooth_processer_rx_buf, 0, profile_b_buffer_size); } \ No newline at end of file diff --git a/main/t_bluetooth.h b/main/t_bluetooth.h index d1e3eb1..4693bf7 100644 --- a/main/t_bluetooth.h +++ b/main/t_bluetooth.h @@ -46,6 +46,25 @@ #define PROFILE_A_APP_ID 0 #define PROFILE_B_APP_ID 1 +/*********************************************************************************************************************** + * ****************************************************user_define**************************************************** * + ***********************************************************************************************************************/ +#define profile_b_buffer_size 128 + +#define timer_group0_interval_num 10000 +// #define timer_group1_interval_num 5 +#define timer_interval_s (uint32_t)1000000 +#define timer_interval_ms (uint32_t)1000 +#define timer_interval_us (uint32_t)1 +#define kbluetooth_baundrate_one_packet_delay_ms 200 + +#define cmd_length_set_position 5 +#define cmd_length_get_status 2 +// #define cmd_length_device_status_report 6 + +#define set_position "setPosition" +#define get_status "getStatus" + struct gatts_profile_inst { esp_gatts_cb_t gatts_cb; @@ -75,8 +94,38 @@ typedef struct ble_gatts_str uint16_t attr_handle; } ble_gatts_str_t; +typedef struct bluetooth_processer +{ + char *bluetooth_processer_rx_buf; + uint8_t bluetooth_processer_rx_buf_size; // + + int bluetooth_baundrate_one_packet_delay_ms; + void (*port_delay_ms)(uint64_t us); + + bool bluetooth_rx_buffer_start_receving; + bool bluetooth_rx_buffer_processing; + + char *order; //指令名称 + int index; // + int speed_level; // + double position; //角度 + int direction; //旋转方向 + int code; //错误码 + char *info; //错误码信息 + char *deviceState; //设备状态 + int deviceException; //设备异常编号 + char *deviceExceptionInfo; //设备异常信息 + + bool cmd_flag; + bool actively_report_flag; + +} bluetooth_processer_t; + void example_write_event_env(esp_gatt_if_t gatts_if, prepare_type_env_t *prepare_write_env, esp_ble_gatts_cb_param_t *param); void example_exec_write_event_env(prepare_type_env_t *prepare_write_env, esp_ble_gatts_cb_param_t *param); -void esp_ble_gatts_init(ble_gatts_str_t* ble_gatts_a_str); +void esp_ble_gatts_init(ble_gatts_str_t *ble_gatts_a_str, bluetooth_processer_t *bluetooth_processer); void gatts_profile_a_constructor(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param); + +void start_receive_data_to_buffer(uint16_t length, uint8_t *value); +void buffer_all_init(); \ No newline at end of file