點擊上方「嵌入式云IOT技術圈」,選擇「置頂公眾號」第一時間查看嵌入式筆記!
來源 | 碼云-魔羅技術關于AT框架,之前我給TencentOS-tiny貢獻過一個ML302的模組驅動代碼,TencentOS-tiny本身就實現(xiàn)了一個超棒的AT模組框架,是大佬戴神的代表作哈哈,詳情請看:中國移動ML302模組(4G Cat.1 通信模組)TencentOS-tiny AT模組框架適配
4G、Wifi、藍牙所謂的AT指令模式和數(shù)據透傳模式到底是什么意思?還在用傳統(tǒng)的方式驅動一個通信模組?不如一起來學習下TOS的AT模組框架吧!
以下是我在碼云上看到大佬開源的一個項目,非常棒,必須分享一下!有時間我會將它移植到小熊派上。
介紹
一種AT命令通信解析模塊,支持裸機(at_chat)和OS版本(at)。適用于modem、WIFI模塊、藍牙通信。軟件架構
- at_chat.c at_chat.h list.h
- at.c at.h at_util.h comdef.h
使用說明
at_chat 模塊(無OS)
基本概念
at_chat 模塊使用鏈式隊列進行管理,包含2條鏈表,空閑鏈表和就緒鏈表。它們的每一個基本工作單元稱為一個作業(yè)項,對于將要執(zhí)行的命令都會放到就緒鏈表中,命令執(zhí)行完成之后由空閑鏈表來進行回收,作業(yè)項的定義如下:/*AT作業(yè)項*/
typedef?struct?{
????unsigned?int??state?:?3;
????unsigned?int??type??:?3;?????????????????????????????????/*?作業(yè)類型*/
????unsigned?int??abort?:?1;?
????void??????????*param;????????????????????????????????????/*?通用參數(shù)*/
?void??????????*info;?????????????????????????????????????/*?通用信息指針*/
????struct?list_head?node;???????????????????????????????????/*?鏈表結點*/
}at_item_t;
作業(yè)是AT控制器定義時固定分配的,沒有使用動態(tài)內存,默認支持10個作業(yè)項,即同時可以允許10個AT命令排隊等待處理。/...未完,待續(xù)/基本接口與描述
- at_send_singlline, 發(fā)送單行命令,默認等待OK響應,超時3S
- at_send_multiline, 多行命令,默認等待OK響應,超時3S
- at_do_cmd,支持自定義發(fā)送格式與接收匹配串
- at_do_work,支持自定義發(fā)送與接收解析
效果演示
詳細使用可以參考Demo程序wifi_task.c模塊使用步驟
1.定義AT控制器及通信適配器接口/*?
?*?@brief???定義AT控制器
?*/
static?at_obj_t?at;
const?at_adapter_t?adap?=?{??//AT適配器接口
?//適配GPRS模塊的串口讀寫接口
?.write???????=?uart_write,
?.read????????=?uart_read
?...
};
- 初始化AT控制器并放入任務中輪詢(考慮到處理實時性,建議20ms以下)
/*?
?*?@brief????wifi初始化
?*/
void?wifi_init(void)
{
?at_obj_init(