¶Ô±ÈÐÂÎļþ |
| | |
| | | #include "serial_at_cmd_app.h" |
| | | #include <string.h> |
| | | |
| | | uint8_t g_frame_data[MAX_FRAME_LEN] = {0}; |
| | | uint8_t g_frame_data_len = 0; |
| | | |
| | | uint32_t g_alarm_dist = 200; |
| | | uint8_t g_alarm_dev = 0; |
| | | |
| | | void ParseFrame(void) |
| | | { |
| | | if(!memcmp(g_frame_data, "SET", 3)) |
| | | { |
| | | g_alarm_dist = (g_frame_data[3]-'0')*1000 + (g_frame_data[4]-'0')*100 + (g_frame_data[5]-'0')*10 + (g_frame_data[6]-'0'); |
| | | } |
| | | else if(!memcmp(g_frame_data, "DEV", 3)) |
| | | { |
| | | g_alarm_dev = g_frame_data[3]-'0'; |
| | | } |
| | | } |
| | | |
| | | void UsartParseDataHandler(uint8_t data) |
| | | { |
| | | static uint8_t s_usart_state = 0; |
| | | static uint8_t s_data_pos; |
| | | |
| | | switch(s_usart_state) |
| | | { |
| | | case 0: |
| | | if(data=='A') s_usart_state= 1; |
| | | break; |
| | | |
| | | case 1: |
| | | if(data=='T') s_usart_state = 2; |
| | | break; |
| | | |
| | | case 2: |
| | | if(data=='+') |
| | | { |
| | | s_usart_state = 3; |
| | | s_data_pos = 0; |
| | | g_frame_data_len = 0; |
| | | } |
| | | break; |
| | | |
| | | case 3: |
| | | g_frame_data_len = s_data_pos; |
| | | g_frame_data[s_data_pos++] = data; |
| | | if(data == 0x0d) |
| | | { |
| | | s_usart_state = 4; |
| | | } |
| | | if(s_data_pos >= MAX_FRAME_LEN) //妿è¶
è¿æå¤§é¿åº¦ |
| | | { |
| | | g_frame_data_len = MAX_FRAME_LEN; |
| | | ParseFrame(); |
| | | s_usart_state = 0; |
| | | } |
| | | break; |
| | | |
| | | case 4: |
| | | if(data == 0x0a) |
| | | { |
| | | ParseFrame(); |
| | | s_usart_state = 0; |
| | | } |
| | | break; |
| | | |
| | | default: break; |
| | | } |
| | | } |