#include <Arduino.h>
#include "AtShell.h"
#include "Protothread.h"
//Atshell 是一个精简好用的嵌入端Shell, 支持tab命令补全, 历史命令, 根据命令 或 命令序号执行对应函数
//只有AtShell.h, AtShell.cpp 两个文件
//Atshell AT模式与 MSH 模式
//MSH模式 fun a b
//AT模式 AT+fun(a,b)
//ATShell 唯一依赖的函数
static int user_at_write(uint8_t* srcBuf, uint32_t toSendLen,uint32_t timeout) {
return Serial.write(srcBuf, toSendLen);
}
//测试 函数
static int test_01(int argc, char** argv) {
AT_println("hello test_01");
return 0;
}
void setup() {
Serial.begin(115200);
//初始化AtShell
at_init(user_at_write);
//命令导出,控制台输入test01 则执行 test_01函数
AT_SHELL_EXPORT(test01, 测试 ,test_01);
//执行AtShell内置的help函数
AT_EXEC("help");
//启动PT协程
Protothread::AllStart();
}
void loop() {
static uint32_t s_ms_tick=0;
static uint32_t s_ms_s=0;
long ms= millis();
if(ms-s_ms_tick>=PT_THREAD_TICK_MS){
s_ms_tick=ms;
s_ms_s=1;
}
if(s_ms_s){
int len= Serial.available();
if(len>0) {
Serial.readBytes((uint8_t *)AT_m_buf, len);
if (len > 0) {
//导入AtShell
at_import((uint8_t *)AT_m_buf, len, millis());
}
}
Protothread::OnTickAll();
s_ms_s=0;
}
}