当解析不出飞控数据时闪红灯
This commit is contained in:
@@ -76,7 +76,7 @@ typedef struct
|
|||||||
uint8_t connect_pc;
|
uint8_t connect_pc;
|
||||||
// int (*embedded_read)(device_t *port, void *buffer, uint32_t length);
|
// int (*embedded_read)(device_t *port, void *buffer, uint32_t length);
|
||||||
// int (*embedded_write)(device_t *port, const void *data, uint32_t size);
|
// int (*embedded_write)(device_t *port, const void *data, uint32_t size);
|
||||||
|
uint8_t last_color;
|
||||||
|
|
||||||
}device_t;
|
}device_t;
|
||||||
|
|
||||||
|
|||||||
@@ -466,21 +466,23 @@ void msp_recv_loop(msp_port_t *msp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void msp_recv_buf(msp_port_t *msp, void *data, uint32_t size)
|
int msp_recv_buf(msp_port_t *msp, void *data, uint32_t size)
|
||||||
{
|
{
|
||||||
|
uint8_t res = 0;
|
||||||
uint32_t size_lat = size;
|
uint32_t size_lat = size;
|
||||||
uint8_t* data_char = (uint8_t*)data;
|
uint8_t* data_char = (uint8_t*)data;
|
||||||
|
|
||||||
while (size_lat --)
|
while (size_lat --)
|
||||||
{
|
{
|
||||||
uint8_t c = data_char[size - size_lat - 1];
|
uint8_t c = data_char[size - size_lat - 1];
|
||||||
if (msp_parse_received_data(msp, c))
|
if (msp_parse_received_data(msp, c))
|
||||||
{
|
{
|
||||||
if (msp->c_state == MSP_COMMAND_RECEIVED)
|
if (msp->c_state == MSP_COMMAND_RECEIVED)
|
||||||
{
|
{
|
||||||
msp_process_received_command(msp);
|
msp_process_received_command(msp);
|
||||||
// break;
|
res ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -318,8 +318,9 @@ void msp_recv_loop(msp_port_t *msp);
|
|||||||
* @param msp 接口
|
* @param msp 接口
|
||||||
* @param data 接收数据
|
* @param data 接收数据
|
||||||
* @param size 接收数据长度
|
* @param size 接收数据长度
|
||||||
|
* @retval 解析成功次数
|
||||||
*/
|
*/
|
||||||
void msp_recv_buf(msp_port_t *msp,void *data, uint32_t size);
|
int msp_recv_buf(msp_port_t *msp,void *data, uint32_t size);
|
||||||
/**
|
/**
|
||||||
* @brief MSP数据包解析
|
* @brief MSP数据包解析
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -179,10 +179,11 @@ void mavlink_recv_loop(mavlink_device_t* mavlink_device)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void mavlink_recv_buf(mavlink_device_t* mavlink_device, void *data, uint32_t size)
|
int mavlink_recv_buf(mavlink_device_t* mavlink_device, void *data, uint32_t size)
|
||||||
{
|
{
|
||||||
|
uint8_t res = 0;
|
||||||
bool success = false;
|
bool success = false;
|
||||||
|
|
||||||
mavlink_message_t message;
|
mavlink_message_t message;
|
||||||
|
|
||||||
uint32_t size_lat = size;
|
uint32_t size_lat = size;
|
||||||
@@ -196,8 +197,9 @@ void mavlink_recv_buf(mavlink_device_t* mavlink_device, void *data, uint32_t siz
|
|||||||
if(success){
|
if(success){
|
||||||
// printf("Received message from serial with ID #%d (sys:%d|comp:%d):\n", message.msgid, message.sysid, message.compid);
|
// printf("Received message from serial with ID #%d (sys:%d|comp:%d):\n", message.msgid, message.sysid, message.compid);
|
||||||
mavlik_packet_processing(mavlink_device,&message);
|
mavlik_packet_processing(mavlink_device,&message);
|
||||||
// break;
|
success = false;
|
||||||
|
res++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,8 @@ void mavlink_recv_loop(mavlink_device_t* mavlink_device);
|
|||||||
* @param mavlink_device 接口
|
* @param mavlink_device 接口
|
||||||
* @param data 数据
|
* @param data 数据
|
||||||
* @param size 大小
|
* @param size 大小
|
||||||
|
* @retval 解析成功次数
|
||||||
*/
|
*/
|
||||||
void mavlink_recv_buf(mavlink_device_t* mavlink_device, void *data, uint32_t size);
|
int mavlink_recv_buf(mavlink_device_t* mavlink_device, void *data, uint32_t size);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -128,10 +128,27 @@ void Protocol_buf_decode(void* data, uint32_t size)
|
|||||||
protocol.pro_type = Protocol_buf_search(data, size);
|
protocol.pro_type = Protocol_buf_search(data, size);
|
||||||
break;
|
break;
|
||||||
case PROTOCOL_MSP:
|
case PROTOCOL_MSP:
|
||||||
msp_recv_buf(&protocol.msp, data, size);
|
protocol.analysis_sussess_count += msp_recv_buf(&protocol.msp, data, size);
|
||||||
break;
|
break;
|
||||||
case PROTOCOL_MAVLINK:
|
case PROTOCOL_MAVLINK:
|
||||||
mavlink_recv_buf(&protocol.mavlink_device, data, size);
|
protocol.analysis_sussess_count += mavlink_recv_buf(&protocol.mavlink_device, data, size);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protocol_status_t get_protocol_status(void)
|
||||||
|
{
|
||||||
|
protocol.protocol_status = PROTOCOL_STATUS_OK;
|
||||||
|
|
||||||
|
if(protocol.pro_type == PROTOCOL_IDLE)
|
||||||
|
{
|
||||||
|
protocol.protocol_status = PROTOCOL_STATUS_TYPE_IDLE;
|
||||||
|
} else if(protocol.analysis_sussess_count == 0)
|
||||||
|
{
|
||||||
|
protocol.protocol_status = PROTOCOL_STATUS_NO_DATA;
|
||||||
|
}
|
||||||
|
|
||||||
|
protocol.analysis_sussess_count = 0;
|
||||||
|
|
||||||
|
return protocol.protocol_status;
|
||||||
}
|
}
|
||||||
@@ -23,6 +23,13 @@ typedef enum
|
|||||||
PORT_LINUX_UART = 0,
|
PORT_LINUX_UART = 0,
|
||||||
PORT_LINUX_SBDATA,
|
PORT_LINUX_SBDATA,
|
||||||
}port_type_m;
|
}port_type_m;
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
PROTOCOL_STATUS_OK = 0,
|
||||||
|
PROTOCOL_STATUS_NO_DATA, //没有收到数据,或者数据小于一定量
|
||||||
|
PROTOCOL_STATUS_TYPE_IDLE, //协议类型未知
|
||||||
|
PROTOCOL_STATUS_ANALYSIS_ERROR, //长时间解析失败
|
||||||
|
}protocol_status_t;
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
protocol_port_t port;
|
protocol_port_t port;
|
||||||
@@ -32,6 +39,8 @@ typedef struct
|
|||||||
mavlink_device_t mavlink_device;
|
mavlink_device_t mavlink_device;
|
||||||
msp_port_t msp;
|
msp_port_t msp;
|
||||||
|
|
||||||
|
protocol_status_t protocol_status;
|
||||||
|
uint16_t analysis_sussess_count; //数据解析成功次数
|
||||||
}protocol_t;
|
}protocol_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -66,4 +75,10 @@ int Protocol_buf_search(void* data, uint32_t size);
|
|||||||
* @param size 数据长度
|
* @param size 数据长度
|
||||||
*/
|
*/
|
||||||
void Protocol_buf_decode(void* data, uint32_t size);
|
void Protocol_buf_decode(void* data, uint32_t size);
|
||||||
|
/**
|
||||||
|
* @brief 获取协议状态
|
||||||
|
*
|
||||||
|
* @retval 协议状态
|
||||||
|
*/
|
||||||
|
protocol_status_t get_protocol_status(void);
|
||||||
#endif
|
#endif
|
||||||
@@ -27,6 +27,12 @@ void sertrf_start(void)
|
|||||||
NULL,
|
NULL,
|
||||||
4096,
|
4096,
|
||||||
20);
|
20);
|
||||||
|
os_thread_create(&sertrf.task_thread,
|
||||||
|
"task_thread",
|
||||||
|
task_thread,
|
||||||
|
NULL,
|
||||||
|
2048,
|
||||||
|
10);
|
||||||
}
|
}
|
||||||
void embedded_thread(void* arg)
|
void embedded_thread(void* arg)
|
||||||
{
|
{
|
||||||
@@ -54,15 +60,52 @@ void embedded_thread(void* arg)
|
|||||||
embedded_device_write(&sertrf.device, data, pc_size);
|
embedded_device_write(&sertrf.device, data, pc_size);
|
||||||
}
|
}
|
||||||
// printf_chill_time(10,1000);
|
// printf_chill_time(10,1000);
|
||||||
pc_link_rgb_color(&sertrf.device);
|
|
||||||
//需要添加一些延时,否则会卡死,导致看门狗复位
|
//需要添加一些延时,否则会卡死,导致看门狗复位
|
||||||
// vTaskDelay(( TickType_t ) 1000 / configTICK_RATE_HZ);
|
// vTaskDelay(( TickType_t ) 1000 / configTICK_RATE_HZ);
|
||||||
os_thread_sleep(1);
|
os_thread_sleep(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void task_thread(void* arg)
|
||||||
|
{
|
||||||
|
while(true)
|
||||||
|
{
|
||||||
|
size_t start_time = os_get_sys_time();
|
||||||
|
pc_link_rgb_color(&sertrf.device);
|
||||||
|
|
||||||
|
if(sertrf.device.connect_pc > DISCONNECT)
|
||||||
|
{
|
||||||
|
size_t end_time = 0;
|
||||||
|
if(start_time - end_time > 1000)
|
||||||
|
{
|
||||||
|
switch(get_protocol_status())
|
||||||
|
{
|
||||||
|
case PROTOCOL_STATUS_OK:
|
||||||
|
rgb_color_change(0, sertrf.device.last_color);
|
||||||
|
break;
|
||||||
|
case PROTOCOL_STATUS_NO_DATA:
|
||||||
|
rgb_color_change(0, RGB_COLOR_RAD);
|
||||||
|
break;
|
||||||
|
case PROTOCOL_STATUS_TYPE_IDLE:
|
||||||
|
rgb_color_change(0, RGB_COLOR_RAD);
|
||||||
|
break;
|
||||||
|
case PROTOCOL_STATUS_ANALYSIS_ERROR:
|
||||||
|
rgb_color_change(0, RGB_COLOR_RAD);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
end_time = os_get_sys_time();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
os_thread_sleep(100);
|
||||||
|
}
|
||||||
|
}
|
||||||
void pc_link_rgb_color(device_t* device)
|
void pc_link_rgb_color(device_t* device)
|
||||||
{
|
{
|
||||||
static uint8_t last_connect = 255, last_wifi_mode = 0;
|
static uint8_t last_connect = 255, last_wifi_mode = 0;
|
||||||
|
uint8_t new_color = 0;
|
||||||
if(device->connect_pc != last_connect || last_wifi_mode != device->init_device.wifi_mode)
|
if(device->connect_pc != last_connect || last_wifi_mode != device->init_device.wifi_mode)
|
||||||
{
|
{
|
||||||
switch (device->connect_pc)
|
switch (device->connect_pc)
|
||||||
@@ -70,34 +113,39 @@ void pc_link_rgb_color(device_t* device)
|
|||||||
case DISCONNECT:
|
case DISCONNECT:
|
||||||
{
|
{
|
||||||
if(device->init_device.wifi_mode == WIFI_NETIF_MODE_AP)
|
if(device->init_device.wifi_mode == WIFI_NETIF_MODE_AP)
|
||||||
rgb_color_change(0, RGB_COLOR_GREEN_WHITE);
|
new_color = RGB_COLOR_GREEN_WHITE;
|
||||||
else
|
else
|
||||||
rgb_color_change(0, RGB_COLOR_GREEN_PURPLE);
|
new_color = RGB_COLOR_GREEN_PURPLE;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CONNECT_WIFI_TCP:
|
case CONNECT_WIFI_TCP:
|
||||||
{
|
{
|
||||||
if(device->init_device.wifi_mode == WIFI_NETIF_MODE_AP)
|
if(device->init_device.wifi_mode == WIFI_NETIF_MODE_AP)
|
||||||
rgb_color_change(0, RGB_COLOR_WHITE);
|
new_color = RGB_COLOR_WHITE;
|
||||||
else
|
else
|
||||||
rgb_color_change(0, RGB_COLOR_PURPLE);
|
new_color = RGB_COLOR_PURPLE;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CONNECT_WIFI_UDP:
|
case CONNECT_WIFI_UDP:
|
||||||
{
|
{
|
||||||
if(device->init_device.wifi_mode == WIFI_NETIF_MODE_AP)
|
if(device->init_device.wifi_mode == WIFI_NETIF_MODE_AP)
|
||||||
rgb_color_change(0, RGB_COLOR_WHITE);
|
new_color = RGB_COLOR_WHITE;
|
||||||
else
|
else
|
||||||
rgb_color_change(0, RGB_COLOR_PURPLE);
|
new_color = RGB_COLOR_PURPLE;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CONNECT_BLE:
|
case CONNECT_BLE:
|
||||||
rgb_color_change(0, RGB_COLOR_GREEN);
|
new_color = RGB_COLOR_GREEN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(device->last_color != new_color)
|
||||||
|
rgb_color_change(0,new_color);
|
||||||
|
|
||||||
|
device->last_color = new_color;
|
||||||
|
|
||||||
last_connect = device->connect_pc;
|
last_connect = device->connect_pc;
|
||||||
last_wifi_mode = device->init_device.wifi_mode;
|
last_wifi_mode = device->init_device.wifi_mode;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ typedef struct
|
|||||||
{
|
{
|
||||||
device_t device;
|
device_t device;
|
||||||
os_thread_t embedded_thread;
|
os_thread_t embedded_thread;
|
||||||
|
os_thread_t task_thread;
|
||||||
}sertrf_t;
|
}sertrf_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -36,6 +36,10 @@ void sertrf_status(void);
|
|||||||
* @brief embedded thread
|
* @brief embedded thread
|
||||||
*/
|
*/
|
||||||
void embedded_thread(void* arg);
|
void embedded_thread(void* arg);
|
||||||
|
/**
|
||||||
|
* @brief task thread
|
||||||
|
*/
|
||||||
|
void task_thread(void* arg);
|
||||||
/**
|
/**
|
||||||
* @brief 根据连接状态显示不同的颜色
|
* @brief 根据连接状态显示不同的颜色
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user