AT命令簡易解析

2021-09-10 13:16:47 字數 2204 閱讀 9280

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

巨集定義at命令的三種狀態:

#define query_cmd		0x01 	/* 查詢命令 */

#define execute_cmd 0x02 /* 執行命令 */

#define set_cmd 0x03 /* 設定命令 */

定義命令結構體,列出需要的at命令,以及處理的指標函式。

tyepdef struct at_cmd_t;

int deal_uart_func(int argc, char *ar**);

at_cmd_t at_table = ,

};#define at_table_size (sizeof(at_table) / sizeof(at_cmd_t))

對於at命令中的多個引數進行字串引數拆分處理,比如at+uart=9600,0,8,1 ,最後拆分為9600、0、8、1字串存入ar**中。

/*

* @brief 字串拆分解析處理

* @return 檢測歸類的引數個數

**/int string_split(char *strp, uint32_t strsize, char ch, char *ar**, uint32_t argcm )

#endif

splitflag = 1;

} else if (splitflag == 1) else }

return argc_index;

}

將接收到at命令跟列表中的at指令進行匹對解析,歸類劃分為查詢型別、執行型別、設定型別。

查詢型別:命令字尾為『?』+『\r』+』\n』,例如:at+uart?\r\n.

執行型別:命令字尾只為』\r』+』\n』,例如:at+uart\r\n.

設定型別:命令『=』後有多個引數,並以』\r』+』\n』結尾,例如:at+uart=9600,0,8,1\r\n

#define respond_error()	printf("error\r\n")

#define respond_ok() printf("ok\r\n");

int at_cmd_parse(uint8_t *pdata, uint16_t size)

; if (strstr((const char *)pdata, "at") == null) goto at_end;

for (index = 0; index < at_table_size; index++)

} if (index >= at_table_size) goto at_end;

/* 解析查詢命令 */

if ((ptr[0] == '?') && (ptr[1] == '\r') && (ptr[2] == '\n'))

} else if ((ptr[0] == '\r') && (ptr[1] == '\n'))

} else if (ptr[0] == '=')

} else

at_end:

if (-1 == ret) respond_error();

else respond_ok();

return ret;

}

在應用層定義乙個接收at命令的緩衝區,接收處理每乙個位元組資料,當出現』\r』+』\n』,則為一條at命令,並設定超時處理,設定時間內沒接收到下乙個位元組則超時重新接收。

#define at_rx_timeout	200	/* ms */

#define at_rx_buf_size 512 /* bytes */

static uint8_t cmdbuf[at_rx_buf_size];

int at_cmd_recv(uint8_t data)

tick = hal_gettick();

cmdbuf[index++] = data;

if ((data == '\n') && flag) else if (data == '\r') else

return ret;

}void at_task(void)

}

簡易csv解析

遊戲開發中少不了配置資料,csv格式既方便匯出又方便使用,下面是簡單csv解析 字段資料中不能含有分隔符 以後會繼續完善,嘿嘿。ccsvparse.hpp cppalgorithm created by xujw on 16 2 26.ifndef ccsvparse h define ccsvpa...

簡易Linux命令

ctrl shift v 複製 跨平台 grep 查詢檔案 grep options pattern file pattern 是查詢條件 可以是普通字串 可以是正規表示式,通常用單引號將re括起來。file 是要查詢的檔案,可以是用空格間隔的多個檔案,也可是使用shell的萬用字元在多個檔案中查詢...

Git簡易命令歸納

a 意為 所有的變更都add 另外還有 表示add新增 變更 u 表示僅add刪除log指變更內容,須寫 不然提交失敗add是為把它加到緩衝區,ci是為提交到本分支。ps 必須站在本分支上操作 一旦遠端主機的版本庫有了更新,需要將這些更新取回本地case 1 期間若出現conflict,解決之,再g...