OpenHarmony中AT模块的代码理解之一

系统 OpenHarmony
现在的RTOS操作系统中也都包含了这部分的内容,比如RTT等,通用性更强,代码的逻辑性也值得我们去分析和学习。

​想了解更多内容,请访问:​

​51CTO和华为官方合作共建的鸿蒙技术社区​

​https://ost.51cto.com​

1、背景

最早接触AT命令是在使用通信模块的时候,那时的AT命令的打包和解析都是自己写的函数实现,代码逻辑和框架也都不成熟,通用性也不强。现在的RTOS操作系统中也都包含了这部分的内容,比如RTT等,通用性更强,代码的逻辑性也值得我们去分析和学习。接触openharmony,发现系统代码中也包含了AT相关的业务。今天,尝试整理一下这部分代码的思路。

2、提要

(1)代码路径

device\hisilicon\hispark_pegasus\sdk_liteos\components\at\src\

(2)关闭AT服务

有时候自己需要使用串口做一些私有业务,不想使用原生的AT命令,比如,移植micropython,就需要关闭AT服务。关闭的方法如下:

打开device\hisilicon\hispark_pegasus\sdk_liteos\build\config\usr_config.mk。

将其中的#CONFIG_AT_SUPPORT=y删除。或者使用menuconfig操作该文件关闭。

关闭宏之后,config.mk中,会判断该宏的值。

ifeq ($(CONFIG_AT_SUPPORT), y)
DEFINES += -DCONFIG_AT_COMMAND
endif

会使得AT的初始化,注册相关函数无效。

3、框架

简单的描述一下程序框架,核心内容分为接收任务和处理任务,两个任务之间通过Event事件同步。cmd_register函数用来注册我们需要解析的AT命令。

4、代码

(1) 数据的接收

在hi_u32 hi_at_init(hi_void)中创建了数据接收的任务。

attr.stack_size  = g_at_uart_task_size;
attr.task_prio = AT_UART_TASK_PRIO;
attr.task_name = (hi_char*)"at_uart";
ret = hi_task_create(&at_uart_task, &attr, at_uart_task_body, 0);
if (ret != HI_ERR_SUCCESS) {
hi_at_printf("AT_UART_TSK init fail\r\n");
return ret;
}

(2) 数据的处理

attr.stack_size  = 1024*6;
attr.task_prio = AT_PROC_TASK_PRIO;
attr.task_name = (hi_char*)"at_proc";
ret = hi_task_create(&at_proc_task, &attr, at_proc_task_body, 0);
if (ret != HI_ERR_SUCCESS) {
hi_at_printf("AT_PROC_TSK init fail\r\n");
return ret;
}

两个任务之间通过g_at_event传递数据。buf = at_get_buf();获取数据之后,进行解析和处理。处理函数如下。

hi_void at_cmd_execute(hi_char *buf)
{
hi_u32 ret;
if (memcmp(buf, AT_CMD_HEADER, strlen(AT_CMD_HEADER)) == EOK) {
hi_char *at_buf = buf + strlen(AT_CMD_HEADER);

ret = at_cmd_process(at_buf);
if ((ret != HI_ERR_SUCCESS) && (ret != HI_ERR_RECVING)) {
g_at_ctrl.at_state = AT_IDLE;
}
} else {
AT_ENTER;
AT_RESPONSE_ERROR;
g_at_ctrl.at_state = AT_IDLE;
}
}

处理函数会从注册的AT命令中对比关键词,然后解析,处理,执行。

5、总结

这篇文章先整理到这里,后续会有更详细的对AT命令逻辑的分析。

后续的计划:

(1)继续分析openharmony的AT命令的代码思路和关键函数的使用。

(2)对比RT-Thread等其他RTOS的AT部分实现。

(3)精简openharmony部分代码,移植出一套可以在其他平台使用的AT框架。

​想了解更多内容,请访问:​

​51CTO和华为官方合作共建的鸿蒙技术社区​

​https://ost.51cto.com​

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2022-03-22 11:33:13

AT模块Harmony鸿蒙

2022-02-28 14:54:48

openHarmon鸿蒙操作系统

2022-04-18 10:47:55

UI框架鸿蒙操作系统

2022-05-16 11:50:45

HDF驱动框架

2018-12-10 14:59:20

代码卷积模块架构

2023-06-27 15:12:46

C++三方库移植

2021-07-20 08:02:41

Linux进程睡眠

2022-07-07 14:32:30

蓝牙技术鸿蒙

2020-05-21 10:24:59

语音技能智能

2013-05-30 17:43:49

WooYun京东商城代码执行

2021-06-22 14:15:03

人工智能AI

2023-04-26 15:29:35

NAPI模块鸿蒙

2022-05-26 15:28:03

网络管理Socket 模块

2013-07-19 09:50:10

Java8API

2024-02-07 01:47:47

atexit模块程序

2011-02-28 15:46:22

SQLSQL ServerSQL Server

2014-09-17 10:30:25

代码

2021-02-04 15:08:37

Vue渐进式框架

2011-04-25 11:18:39

Ajax

2022-04-01 16:04:33

Harmonytabs容器鸿蒙
点赞
收藏

51CTO技术栈公众号