#include "driver/gpio.h" #include "driver/timer.h" #include "esp_log.h" #include "esp_system.h" #include "freertos/FreeRTOS.h" #include "freertos/event_groups.h" #include "freertos/task.h" #include "nvs_flash.h" #include "string.h" // #include "ble_spp_server_demo.h" #include "motor_drive.h" #define ble_uart_tx_size 128 #define ble_uart_rx_size 128 static uint8_t bluetooth_tx_buffer[ble_uart_tx_size] = {0}; static uint8_t bluetooth_rx_buffer[ble_uart_rx_size] = {0}; uint8_t ble_rx_buffer_now_len = 0; uint8_t ble_rx_buffer_off = 0; uint32_t start_time = 0; uint16_t modbus_uart_rx_off_before = 0; bleuart_t ble_uart_init_struct = { .txbuf = bluetooth_tx_buffer, .txbufsize = sizeof(bluetooth_tx_buffer), .rxbuf = bluetooth_rx_buffer, .rxbufsize = sizeof(bluetooth_rx_buffer), .rxpacketReceiveOvertime = 200, .receive_data_processing_flag = false, .maxClientNum = 1, .bleName = "yimei_ble", }; void blerxcb(uint8_t *rxmessage, size_t rxsize) { if ((rxsize + ble_rx_buffer_now_len) > ble_uart_init_struct.rxbufsize) { ESP_LOGW("MAIN", "rx buffer overstep"); return; } for (int i = 0; i < rxsize; i++) { ble_uart_init_struct.rxbuf[ble_rx_buffer_now_len++] = rxmessage[i]; ble_rx_buffer_off++; start_time = esp_log_timestamp(); } } void buffer_all_init() { ble_rx_buffer_now_len = 0; memset(ble_uart_init_struct.rxbuf, 0, ble_uart_init_struct.rxbufsize); } void wait_ble_uart_receive_ms(uint16_t wait_time_ms) { start_time = esp_log_timestamp(); while ((esp_log_timestamp() - start_time) < wait_time_ms) { } } void app_main(void) { ble_spp_server_demo_app_main(&ble_uart_init_struct); bleuart_reg_cb(blerxcb); while (true) { if (ble_rx_buffer_off != 0) { modbus_uart_rx_off_before = ble_rx_buffer_off; wait_ble_uart_receive_ms(100); if (ble_rx_buffer_off == modbus_uart_rx_off_before) { ble_uart_init_struct.receive_data_processing_flag = true; ESP_LOGI("MAIN", "%s", ble_uart_init_struct.rxbuf); } if (ble_uart_init_struct.receive_data_processing_flag == true) { buffer_all_init(); ble_uart_init_struct.receive_data_processing_flag = false; ble_rx_buffer_off = 0; } } } }