|
@ -2,6 +2,7 @@ |
|
|
#include "cJSON_Utils.h" |
|
|
#include "cJSON_Utils.h" |
|
|
#include "driver/gpio.h" |
|
|
#include "driver/gpio.h" |
|
|
#include "driver/timer.h" |
|
|
#include "driver/timer.h" |
|
|
|
|
|
#include "driver/uart.h" |
|
|
#include "esp_log.h" |
|
|
#include "esp_log.h" |
|
|
#include "esp_system.h" |
|
|
#include "esp_system.h" |
|
|
#include "freertos/FreeRTOS.h" |
|
|
#include "freertos/FreeRTOS.h" |
|
@ -38,7 +39,7 @@ bleuart_t ble_uart_init_struct = { |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
static cJSON *json_tmp; |
|
|
static cJSON *json_tmp; |
|
|
// static double encoder_befor_num; |
|
|
|
|
|
|
|
|
static double encoder_befor_num; |
|
|
#define set_position "setPosition" |
|
|
#define set_position "setPosition" |
|
|
#define get_status "getStatus" |
|
|
#define get_status "getStatus" |
|
|
#define set_motor_current_size "setMotorCurrentSize" |
|
|
#define set_motor_current_size "setMotorCurrentSize" |
|
@ -77,28 +78,32 @@ ble_uart_receive_data_t ble_uart_receive_data = { |
|
|
.cmd_flag = false, |
|
|
.cmd_flag = false, |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
motor_t ble_uart_motor_structer = {.uartNum = UART_NUM_1}; |
|
|
|
|
|
|
|
|
|
|
|
void buffer_all_init() { |
|
|
|
|
|
ble_rx_buffer_now_len = 0; |
|
|
|
|
|
memset(ble_uart_init_struct.rxbuf, 0, ble_uart_init_struct.rxbufsize); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void blerxcb(uint8_t *rxmessage, size_t rxsize) { |
|
|
void blerxcb(uint8_t *rxmessage, size_t rxsize) { |
|
|
|
|
|
// start_time = esp_log_timestamp(); |
|
|
if ((rxsize + ble_rx_buffer_now_len) > ble_uart_init_struct.rxbufsize) { |
|
|
if ((rxsize + ble_rx_buffer_now_len) > ble_uart_init_struct.rxbufsize) { |
|
|
ESP_LOGW("MAIN", "rx buffer overstep"); |
|
|
ESP_LOGW("MAIN", "rx buffer overstep"); |
|
|
|
|
|
buffer_all_init(); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
for (int i = 0; i < rxsize; i++) { |
|
|
for (int i = 0; i < rxsize; i++) { |
|
|
ble_uart_init_struct.rxbuf[ble_rx_buffer_now_len++] = rxmessage[i]; |
|
|
ble_uart_init_struct.rxbuf[ble_rx_buffer_now_len++] = rxmessage[i]; |
|
|
ble_rx_buffer_off++; |
|
|
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) { |
|
|
void wait_ble_uart_receive_ms(uint16_t wait_time_ms) { |
|
|
start_time = esp_log_timestamp(); |
|
|
start_time = esp_log_timestamp(); |
|
|
while ((esp_log_timestamp() - start_time) < wait_time_ms) { |
|
|
while ((esp_log_timestamp() - start_time) < wait_time_ms) { |
|
|
} |
|
|
} |
|
|
|
|
|
modbus_uart_rx_off_before = ble_rx_buffer_off; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bool parse_rxbuffer_and_validation_data(cJSON **json_tmp) { |
|
|
bool parse_rxbuffer_and_validation_data(cJSON **json_tmp) { |
|
@ -164,33 +169,36 @@ void processing_uart_rx_data() { |
|
|
if (ble_rx_buffer_off != 0) { |
|
|
if (ble_rx_buffer_off != 0) { |
|
|
modbus_uart_rx_off_before = ble_rx_buffer_off; |
|
|
modbus_uart_rx_off_before = ble_rx_buffer_off; |
|
|
|
|
|
|
|
|
wait_ble_uart_receive_ms(100); |
|
|
|
|
|
|
|
|
wait_ble_uart_receive_ms(200); |
|
|
|
|
|
|
|
|
if (ble_rx_buffer_off == modbus_uart_rx_off_before) { |
|
|
if (ble_rx_buffer_off == modbus_uart_rx_off_before) { |
|
|
ble_uart_init_struct.receive_data_processing_flag = true; |
|
|
ble_uart_init_struct.receive_data_processing_flag = true; |
|
|
ESP_LOGI("MAIN", "%s", ble_uart_init_struct.rxbuf); |
|
|
ESP_LOGI("MAIN", "%s", ble_uart_init_struct.rxbuf); |
|
|
if (parse_rxbuffer_and_validation_data(&json_tmp)) { |
|
|
if (parse_rxbuffer_and_validation_data(&json_tmp)) { |
|
|
if (parse_json_to_struct(json_tmp->child)) { |
|
|
if (parse_json_to_struct(json_tmp->child)) { |
|
|
ESP_LOGI(MAIN_LOG_TAG, "order:%s ,index:%d speedLevel:%d position:%f direction:%d", ble_uart_receive_data.order, ble_uart_receive_data.index, ble_uart_receive_data.speedLevel, |
|
|
|
|
|
|
|
|
ESP_LOGI(MAIN_LOG_TAG, "order:%s ,index:%d speedLevel:%d position:%f direction:%d", // |
|
|
|
|
|
ble_uart_receive_data.order, ble_uart_receive_data.index, ble_uart_receive_data.speedLevel, // |
|
|
ble_uart_receive_data.position, ble_uart_receive_data.direction); |
|
|
ble_uart_receive_data.position, ble_uart_receive_data.direction); |
|
|
// if (strcmp(ble_uart_receive_data.order, set_position) == 0) { |
|
|
|
|
|
// // ble_uart_receive_data.auto_report_flag = true; |
|
|
|
|
|
// ESP_LOGI(MAIN_LOG_TAG, set_position); |
|
|
|
|
|
|
|
|
|
|
|
// encoder_befor_num = motor_drive_read_encoder(); |
|
|
|
|
|
// if (encoder_befor_num >= 0) { |
|
|
|
|
|
// if (motor_drive_set_packages_ctr(ble_uart_receive_data.position, ble_uart_receive_data.direction) == 0) { |
|
|
|
|
|
// ets_delay_us(50000); |
|
|
|
|
|
// if (encoder_befor_num == motor_drive_read_encoder()) { |
|
|
|
|
|
// ESP_LOGW(MAIN_LOG_TAG, "motor no turning"); |
|
|
|
|
|
// } else { |
|
|
|
|
|
// ESP_LOGI(MAIN_LOG_TAG, "motor turning"); |
|
|
|
|
|
// } |
|
|
|
|
|
// } |
|
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
// // receipt_json_set_position(); |
|
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (strcmp(ble_uart_receive_data.order, set_position) == 0) { |
|
|
|
|
|
// ble_uart_receive_data.auto_report_flag = true; |
|
|
|
|
|
ESP_LOGI(MAIN_LOG_TAG, set_position); |
|
|
|
|
|
|
|
|
|
|
|
encoder_befor_num = motor_drive_read_encoder(); |
|
|
|
|
|
if (encoder_befor_num >= 0) { |
|
|
|
|
|
ESP_LOGI(MAIN_LOG_TAG, "%.2lf", encoder_befor_num); |
|
|
|
|
|
// if (motor_drive_set_packages_ctr(ble_uart_receive_data.position, ble_uart_receive_data.direction) == 0) { |
|
|
|
|
|
// ets_delay_us(50000); |
|
|
|
|
|
// if (encoder_befor_num == motor_drive_read_encoder()) { |
|
|
|
|
|
// ESP_LOGW(MAIN_LOG_TAG, "motor no turning"); |
|
|
|
|
|
// } else { |
|
|
|
|
|
// ESP_LOGI(MAIN_LOG_TAG, "motor turning"); |
|
|
|
|
|
// } |
|
|
|
|
|
// } |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// receipt_json_set_position(); |
|
|
|
|
|
} |
|
|
// if (strcmp(ble_uart_receive_data.order, get_status) == 0) { |
|
|
// if (strcmp(ble_uart_receive_data.order, get_status) == 0) { |
|
|
// ESP_LOGI(MAIN_LOG_TAG, get_status); |
|
|
// ESP_LOGI(MAIN_LOG_TAG, get_status); |
|
|
// receipt_json_get_status(); |
|
|
// receipt_json_get_status(); |
|
@ -212,8 +220,8 @@ void processing_uart_rx_data() { |
|
|
|
|
|
|
|
|
if (ble_uart_init_struct.receive_data_processing_flag == true) { |
|
|
if (ble_uart_init_struct.receive_data_processing_flag == true) { |
|
|
buffer_all_init(); |
|
|
buffer_all_init(); |
|
|
ble_uart_init_struct.receive_data_processing_flag = false; |
|
|
|
|
|
ble_rx_buffer_off = 0; |
|
|
ble_rx_buffer_off = 0; |
|
|
|
|
|
ble_uart_init_struct.receive_data_processing_flag = false; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
@ -221,6 +229,7 @@ void processing_uart_rx_data() { |
|
|
void app_main(void) { |
|
|
void app_main(void) { |
|
|
ble_spp_server_demo_app_main(&ble_uart_init_struct); |
|
|
ble_spp_server_demo_app_main(&ble_uart_init_struct); |
|
|
bleuart_reg_cb(blerxcb); |
|
|
bleuart_reg_cb(blerxcb); |
|
|
|
|
|
motor_init(&ble_uart_motor_structer); |
|
|
|
|
|
|
|
|
while (true) { |
|
|
while (true) { |
|
|
processing_uart_rx_data(); |
|
|
processing_uart_rx_data(); |
|
|