产测参考例程开发指南
1. 概述
产测程序可以使用串口与上位机通信。本示例中,上位机发送相关AT指令至串口,示例程序成功解析AT指令后完成相关测试项。YoC SDK的AT Server模块实现了AT指令的解析,用户可以快速实现AT产测指令的开发与扩展。
2. 开发板支持
该产测例程适用于CB6502M开发板。
3. 工作流程
AT Server的工作流程如下图所示,用户可根据需要扩展自定义的AT命令及处理函数。
3.1. 应用初始化
应用入口函数为app_main,用于实现了板级的初始化和创建APP任务。
void main()
{
/* 板级初始化入口 */
board_yoc_init();
/* 获取当前运行模式 */
g_app_dev_mode = get_dev_mode();
if (g_app_dev_mode == DEV_MODE_FACTORY) {
/* 当前运行模式为工厂测试模式,创建产测任务及LoRaWAN协议栈任务 */
aos_task_new_ext(&task_handle, "lorafactory_task", radiolora_app_entry,
&g_app_dev_mode, 2048, AOS_DEFAULT_APP_PRI);
} else {
......
/* 当前运行模式为AT模式,创建LoRaWAN协议栈任务 */
lorawan_task_entry();
}
/* AT Server初始化入口 */
at_server_init(NULL);
}
3.2. 板级初始化
板级初始化的入口为board_yoc_init,主要完成硬件初始化以及OS组件的初始化,由app_main函数调用。
void board_yoc_init(void)
{
/* 引脚复用关系定义 */
app_pinmux_config();
/* 打印串口初始化,指定打印串口端口号 */
console_init(CONSOLE_ID, 115200, 128);
......
/* Flash分区初始化 */
partition_init();
......
/* KV系统初始化 */
aos_kv_init("kv");
/* 事件服务初始化 */
event_service_init(NULL);
......
}
3.3. AT服务初始化
AT Server的初始化入口为 at_server_init,主要完成AT Server微任务的创建、自定义AT命令的注册。
/* AT Server初始化 */
void at_server_init(utask_t *task)
{
......
/* 创建AT Server微任务 */
task = utask_new("at_srv", 2 * 1024, QUEUE_MSG_COUNT, AOS_DEFAULT_APP_PRI);
if (task) {
/* atserver模块初始化,指定AT串口端口号及工作参数 */
atserver_init(task, AT_UART_DEV_NAME, &config);
/* 打开命令回显 */
atserver_set_echo(1);
/* 增加自定义AT指令及处理回调函数 */
atserver_add_command(lora_at_cmd);
}
}
3.4. AT指令扩展
示例程序通过AT指令数组定义系统需要支持的命令,用户可以选择注册YoC通用AT指令,也可以添加数组成员以扩展自定义AT指令。
const atserver_cmd_t lora_at_cmd[] = {
/* YoC通用AT指令注册 */
AT_FWVER, //获取固件版本
AT_KVGET, //KV系统键值获取命令
AT_KVSET, //KV系统键值设置命令
AT_KVDEL, //KV系统键值删除命令
AT_KVGETINT, //KV系统整形类型键值获取命令
AT_KVSETINT, //KV系统整形类型键值设置命令
AT_KVDELINT, //KV系统整形类型键值删除命令
......
/* 自定义AT指令注册 */
LORA_AT_CDEVEUI,
......
LORA_AT_NULL,
};
/* AT指令 回调处理函数 */
#define LORA_AT_CDEVEUI {"AT+CDEVEUI", lora_at_cmd_cdeveui} // dev eui (OTAA)
static void lora_at_cmd_cdeveui(char *cmd, int type, char *data)
{
char info[30] = {0};
if (type == TEST_CMD) {
/* AT测试指令,AT+CMD=? */
......
} else if (type == READ_CMD) {
/* AT查询指令,AT+CMD? */
......
} else if (type == WRITE_CMD) {
/* AT执行指令,AT+CMD=param1,param2...... */
......
}
/* 发送执行结果至AT串口 */
atserver_send(......);
}
4. 例程运行
- 连接打印串口、AT串口和调试口
- 打印串口以及AT串口的串口调试工具配置为: 波特率: 115200, 数据位: 8, 校验位: None, 停止位: 1, 流控: None
- 使用集成开发环境CDK编译工程文件,然后下载至CB6502M开发板
- 按RESET按键,复位开发板,打印串口将打印如下信息
[ 0.362673][I][init ]OS version: 7.0.2
[ 0.392438][D][factory_test_demo]Enter Factory mode
- AT串口打印
System enter into Factory Mode
- AT命令执行
AT+CDEVEUI?
+CDEVEUI:D896E0FFFF0113F9
OK
AT+CDEVEUI=?
+CDEVEUI="DevEUI:length is 16"
OK