91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 4KB
    文件類型: .c
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-13
  • 語言: 其他
  • 標簽: AT??stm??

資源簡介

AT命令簡易解析
AT命令的應用場合很多,也是應用最為通用的命令。而AT命令并不像通信協議特定的數據幀格式,解析AT命令需要匹配每個字符。AT命令一般有三種狀態:查詢、執行、設置,根據這三種狀態,本文將使用一種簡易的方法解析AT命令

資源截圖

代碼片段和文件信息

#define?QUERY_CMD		0x01?	/*?查詢命令?*/
#define?EXECUTE_CMD 0x02 /*?執行命令?*/
#define?SET_CMD 0x03 /*?設置命令?*/


tyepdef?struct?{
char?*cmd; /*?AT指令?*/
int?(*deal_func)(int?opt?int?argc?char?*argv[]);
}at_cmd_t;

int?deal_uart_func(int?argc?char?*argv[]);
at_cmd_t?at_table[]?=?{
{“AT+UART?“??deal_uart_func}
};

#define?AT_TABLE_SIZE (sizeof(at_table)?/?sizeof(at_cmd_t))


/*
?*?@brief?字符串拆分解析處理?
? AT命令中的多個參數進行字符串參數拆分處理,比如AT+UART=9600081,
? 最后拆分為9600、0、8、1字符串存入argv[]中
?*?@return?檢測歸類的參數個數
?**/
int?string_split(char?*strp?uint32_t?strsize?char?ch?char?*argv[]?uint32_t?argcM?)
{
int?ch_index?=?0;
int?argc_index?=?0;
uint8_t?spliflag?=?0;

if?((!strsize)?||?(!argcM))?return?0;

argv[argc_index++]?=?&strp[ch_index];
for?(ch_index?=?0;?ch_index? if?(strp[ch_index]?==?‘ch‘)?{
strp[ch_index]?=?‘\0‘;
#if?0 /*?處理連續出現ch情況?*/
if?(1?==?splitflag)?{
argv[argc_index++]?=?&strp[ch_index];
}
#endif
splitflag?=?1;
}?else?if?(splitflag?==?1)?{
splitflag?=?0;
argv[argc_index++]?=?&strp[ch_index];
if?(argc_index?>=?argcM)?break;
}?else?{
splitflag?=?0;
}
}

return?argc_index;
}


#define?respond_error() printf(“ERROR\r\n“)
#define?respond_ok() printf(“OK\r\n“);

/*
將接收到AT命令跟列表中的AT指令進行匹對解析,歸類劃分為查詢類型、執行類型、設置類型。
查詢類型:命令后綴為‘?’+‘\r’+’\n’,例如:AT+UART?\r\n.
執行類型:命令后綴只為’\r’+’\n’,例如:AT+UART\r\n.
設置類型:命令‘=’后有多個參數,并以’\r’+’\n’結尾,例如:AT+UART=9600081\r\n
*/
int?at_cmd_parse(uint8_t?*pdata?uint16_t?size)
{
int?ret??=?-1;
char?*ptr?=?NULL;
int?argc?=?ARGC_LIMIT;
uint16_t?offset?=?0;
int?index?=?0;
char?*argv[ARGC_LIMIT]?=?{?(char?*)0?};

if?(strstr((const?char?*)pdata?“AT“)?==?NULL)?goto?at_end;
for?(index?=?0;?in

評論

共有 條評論