AliOS Things网络适配框架 - SAL

摘要: 很多物联网应用场景中,都需要使用主控MCU外接连接芯片(如WiFi、NB-IoT)的解决方案。为方便这类场景的开发,AliOS Things提供了Socket Adapter Layer(SAL)框架和组件方案

AliOS Things中提供了丰富的SAL开发组件,来加速MCU+通信连接芯片的应用场景开发和部署。在此类应用场景中,主控MCU芯片通过UART或SPI总线与WiFi、NB-IoT等通信芯片相连,AliOS Things操作系统和用户APP运行在主控MCU中,需要网络数据访问时,通过外接的通信芯片进行网络负载的接收和发射。主控MCU和外接通信芯片之间的通信,可以是AT Command通道,也可以是厂商私有协议通道。

图片描述
AliOS Things SAL方案概述
目前,AliOS Things提供了atparser、at_adapter、SAL等开发组件。借助这些组件,用户可以方便地进行应用开发,同时这些组件也方便厂商在现有MCU产品基础上通过外接通信芯片方式扩展网络访问能力。下图展示了AliOS Things提供的SAL组件和方案架构:

图片描述
其中,atparser组件提供了基础的AT Command访问接口和异步收发机制。用户可以直接访问atparser组件提供的接口进行应用开发。上层应用直接通过atparser访问网络是,需要自行处理AT命令细节。

基于atparser的基础上,AliOS Things进一步提供了Socket Adapter Layer(SAL)组件(即上图中的方案一)。SAL组件提供AT通道或厂商私有协议通道(如高通通信模组的WMI)到Socket套接字(如socket、getaddrinfo、send、recvfrom等)接口的对接。通过SAL组件,应用层不需要关注通信芯片底层操作的细节,只需要通过标准的Socket接口来达到访问网络的目的。SAL组件支持大多数常用的Socket接口。SAL组件可以很大程度上提高应用层开发的效率,显著降低应用层开发的难度。

此外,AliOS Things还提供了另外一种基于AT Command的网络访问方案 - SAL LwIP模式(即上图中的方案三)。SAL LwIP模式基于at_adapter组件工具。at_adapter组件提供AT底层到LwIP的对接,即AT通道作为LwIP的一个网络接口(netif)。使用该方案时,应用层通过标准的Socket接口访问网络,不需要关注底层AT细节。该方案无缝对接LwIP协议栈,应用层可以使用所有LwIP提供的接口和服务。但该方案需要连接芯片固件支持IP包收发模式,目前庆科的moc108已经支持该模式。

atparser组件
atparser组件是AliOS Things SAL框架的基础组件之一,它提供统一和规范的AT命令访问接口(如at.send、recv、write、read、oob等)和异步收发机制(at_worker)。目前atparser组件仅支持了UART连接方式。

atparser有两种工作模式,即NORMAL模式和ASYN模式。工作模式的选择在atparser组件的初始化时进行。

NORMAL模式下,仅支持上层应用以单进程/线程方式访问AT(同一时刻只有一个进程访问AT)。由于AT底层通过串行方式(UART或其他)发送和接收数据,在多进程情况下,多个AT读写可能会产生数据交叉,从而造成AT访问的混乱及错误。下面是在NORMAL模式下,使用AT接口的示例(连接WiFi AP):

if (at.send("AT+WJAP=test_AP,test_passwd") == false) {printf("at.send failed.\r\n");return -1;
}
// Read AT cmd response right after a cmd is sent
if (at.recv("OK") == false) {printf("Connecting AP failed.\r\n");return -1
}

在ASYN模式下,支持AT命令的多进程访问以及收据的异步接收。系统中只有一个线程(at_worker)负责读取AT数据,发送线程发送完AT命令后,等待at_worker线程唤醒;at_worker线程接收到对应AT命令的结果数据后,将结果传递给发送线程,并唤醒发送线程继续执行。发送线程确保一个AT命令发送是原子操作。在ASYN模式下,可以支持多个进程对AT的访问。

AT事件的处理(例如网络数据到达),通过注册的oob回调函数处理。at_worker线程负责识别AT事件并通过调用oob回调函数处理AT事件和数据。

Socket Adapter Layer (SAL)
SAL模块提供基于AT Command或厂商私有协议方案实现的标准Socket接口访问。下图是SAL(方案一)的架构图。

图片描述
SAL对上(应用层)提供标准Socket接口访问。目前SAL支持多数常用的Socket接口,后续还将持续演进。以下是SAL目前支持的Socket接口:

int select(int maxfdp1, fd_set *readset, fd_set *writeset,fd_set *exceptset, struct timeval *timeout);
int socket(int domain, int type, int protocol);
int write(int s, const void *data, size_t size);
int connect(int s, const struct sockaddr *name, socklen_t namelen);
int bind(int s, const struct sockaddr *name, socklen_t namelen);
int eventfd(unsigned int initval, int flags);
int setsockopt(int s, int level, int optname,const void *optval, socklen_t optlen);
int getsockopt(int s, int level, int optname,void *optval, socklen_t *optlen);
struct hostent* gethostbyname(const char *name);
int close(int s);
int sendto(int s, const void * data, size_t size, int flags,const struct sockaddr * to, socklen_t tolen);
int send(int s, const void *data, size_t size, int flags);
int shutdown(int s, int how);
int recvfrom(int s, void *mem, size_t len, int flags,struct sockaddr *from, socklen_t *fromlen);
int recv(int s, void *mem, size_t len, int flags);
int read(int s, void *mem, size_t len);
void freeaddrinfo(struct addrinfo *ai);
int getaddrinfo(const char *nodename, const char *servname,const struct addrinfo *hints, struct addrinfo **res);
void freeaddrinfo(struct addrinfo *ai);
int shutdown(int s, int how);
int getaddrinfo(const char *nodename, const char *servname,const struct addrinfo *hints, struct addrinfo **res);
int fcntl(int s, int cmd, int val);

SAL层对下抽象了通信模组/芯片访问控制层接口(如下),不同厂家的连接模组/芯片,可以通过对接底层控制访问层接口来对接和支持SAL。

typedef struct sal_op_s {char *version;int (*init)(void);int (*start)(at_conn_t *c);int (*send)(int fd, uint8_t *data, uint32_t len,char remote_ip[IP_LEN], int32_t remote_port);int (*domain_to_ip)(char *domain, char ip[IP_LEN]);int (*close)(int fd, int32_t remote_port);int (*deinit)(void);int (*register_netconn_evt_cb)(netconn_evt_cb_t cb);
} sal_op_t;

SAL LwIP模式
AliOS Things还提供了SAL LwIP模式(方案二)。该方案区别于方案一的地方在于,主控MCU上运行完整的LwIP协议栈,LwIP协议栈底层通过AT方式访问网络;方案一中主控MCU侧不运行协议栈。

该方案的运行方式类似于MCU行业常用的SLIP(Serial Line Internet Protocol)方案,区别在于底层使用厂商模组/芯片的AT Command命令和服务,厂商模组/芯片不需要额外再支持SLIP通信。

at_adapter组件提供AT底层到LwIP网络接口(netif)的对接。通过netif的对接,AT通道可以无缝对接上LwIP。该模式下,SAL对上层应用提供完整的TCP/IP协议栈接口和服务。该方案的缺点是需要AT通信模块固件支持IP包传输,目前moc108已经支持该模式。

总结
综上所述,AliOS Things提供了丰富的SAL组件和方案。AliOS Things提供的SAL框架和组件,具有以下优势:

为主控MCU外接连接芯片场景提供完整解决方案;
可以降低上层应用开发基于外接连接芯片场景的应用的难度,提高开发效率,加速产品部署;
方便模组和设备厂商在现有成熟的MCU产品和方案上,通过外接通信芯片方式扩展网络连接能力,而不需要将先有的MCU芯片切换成WiFi或其他具有网络通信能力的平台。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文末送书啦!| Device Mapper,那些你不知道的Docker核心技术

戳蓝字“CSDN云计算”关注我们哦!接触Docker 比较早的同学应该知道,Docker 在最开始只能在Ubuntu和Debian等少数的Linux 发行版上运行,并且在这些发行版上默认使用的存储驱动为AUFS。由于Linux 并未将AUFS的支持纳入自己的内核主线(据说是因为…

铃木uy125最高时速_五菱宏光mini EV月销三万辆,铃木是否后悔退出中国?

国内新能源汽车市场一直是“兵家必争之地”,大到传统汽车厂商,小到造车新势力,都希望能在新能源汽车市场分一杯羹。但长久以来,大多数汽车厂商都只注意到了一部分中国消费者对于“大”的需求,忽视了微型车市场&#xf…

服务器读取账号密码,WIN服务器得明文密码神器 mimikatz、WCE

一、mimikatz(自己亲试,可以在win7 x64下使用)昨天有朋友发了个法国佬写的神器叫mimikatz 让我们看下还有一篇用这个神器直接从 lsass.exe 里获取windows处于active状态账号明文密码的文章http://pentestmonkey.net/blog/mimikatz-tool-to-recover-cleartext-passwo…

100%移植阿里云移动测试技术,竟仅需1周?!——移动测试专有云(3)——内容详解...

摘要: Android兼容性测试旨在帮助解决Android应用在不同真机机型上的各类兼容性问题,包括 Crash/ANR分析、6项性能分析、UI检测、3个版本的覆盖安装检测等。Android兼容性测试使用非常简单,客户只需要提交被检测的APK文件(如需登录…

投篮机投篮有技巧吗_「技巧干货」高手练习投篮的几个技巧,让投篮变得更实用...

会打篮球的都知道,篮球主要的是用更高于对手的得分来取得胜利;然而,让很多的球友烦恼的是,投篮时因为不够稳定,而导致每一场的发挥都不一样,全靠运气投球;这可是球场上的一大禁忌,人…

天龙八部服务器都需要那种系统,天龙八部排行榜系统怎么看 排行榜系统分类介绍...

天龙八部排行榜系统怎么看?有这么一群人,不但战力高,等级高,在其他玩家眼中,他们就是膜拜的大神,他们便是游戏中排行榜上的大神玩家。排行榜分类等级:排行榜打开后的第一个排名就是玩家角色的等级排名&…

SDN精华问答 | 了解SDN架构

SDN火热了好一阵子,无论运营商、政府企业、投资机构,一段时间,不知道SDN、不能甩几个SDN相关的名词术语,似乎都落后于时代了。今天,就来看看关于SDN的精华问答吧。1Q:SDN的本质属性? A&#xff…

SpringBoot2整合Activiti6工作流框架

文章目录下载实战操作:创建用户3 创建app4 选择我们的指定的流程图下载 wget https://github.com/Activiti/Activiti/releases/download/activiti-6.0.0/activiti-6.0.0.zip浏览器 http://localhost:8080/activiti-app/#实战操作: 创建用户 2.创建流程…

如何转obj_Java 开发中如何正确的踩坑,看完这个你可以避免50%的错误

为什么说一个好的员工能顶 100 个普通员工我们的做法是,要用最好的人。我一直都认为研发本身是很有创造性的,如果人不放松,或不够聪明,都很难做得好。你要找到最好的人,一个好的工程师不是顶10个,是顶100个…

ajax 在新选卡打开,开始使用 AJAX 控制工具包 (VB) | Microsoft Docs

AJAX 控件工具包入门 (VB)05/12/2009本文内容了解开始使用 AJAX 控制工具包所需的所有知识。AJAX 控制工具包包含 30 多个免费控件,可用于ASP.NET应用程序中。 在本教程中,您将了解如何下载 AJAX 控件工具包,并将工具包控件添加到可视化工作室…

IBM斥资340亿美元完成收购红帽;亚马逊云计算Q2营收数据新鲜出炉;甲骨文推出Oracle专用自治数据库云……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go Waymo应用(图片来…

AliOS Things全链路优化-CoAP FOTA

摘要: FOTA(Firmware Over-The-Air)即空中固件升级功能;CoAP(Constrained Application Protocol),字面意思为受限的应用协议,基于UDP,专为资源有限的物联网设备量身定制;所以AliOS Things的纯Co…

关于IoT网络的一些特征的探讨

摘要: 网络是IoT设备非常关键的部分,本文和大家一起探讨IoT网络的几个重要特征,及AliOS Things尝试提供的一些解决方案。 IoT网络的特征包括IP网络,UDP网络,多种通信手段及拓扑。而AliOS Things也尝试提供包括CoAP,SAL…

字典 学生成绩等级_python-列表及字典进阶

# -*- coding: utf-8 -*-l list(python) print(l) l[2:] zza print(l)numbers [1, 5] print(numbers)numbers[1:1] [2, 3, 4] print(numbers)numbers[1:4] [] print(numbers)d {lilei: 98, hanmeimei: 99} # 写字典的方法 print(d)message [(lilei, 98), (hanmeimei, 9…

highcharts ajax 数据格式,Highcharts ajax获取json对象动态生成报表生成 .

最近做个项目,项目经理想做一个统计报表,在网上查看些资料就选用Highchars 这里和大家分享下使用心得。重点说明此代码是针对一个报表显示多个项对比显示。直接贴代码:web端$(document).ready(function() {var options {chart: {renderTo: c…

5G承载网,到底有哪些关键技术?

戳蓝字“CSDN云计算”关注我们哦!作者 | 小枣君来源 | 鲜枣课堂之前小枣君给大家介绍了5G承载网的基本知识(链接:5G承载网到底有什么不同?)。今天,我们再来看看5G承载网中的常见关键技术。首先&#xff0c…

SpringBoot2整合Activiti6工作流框架 源码

git clone gitgithub.com:gb-heima/Activiti.git 创建分支 cd Activiti git checkout -b study6 activiti-6.0.0编译项目 mvn clean test-compilercd modules/activiti-ui//activiti-appmvn clean tomca7:rundemo开始 流程图绘制 首先创建一个基本的maven工程 初步流程图效果…

一个智能运维算法测试方法

摘要: 质量是企业长远生存的根基,是企业竞争的免死金牌。作为质量控制团队的一员,保障和提高所负责系统的质量,是工作的核心。而完善的测试覆盖,是保证质量的有效手段。 写在前面 质量是企业长远生存的根基&#xff0…

阿里巴巴1682亿背后的“企业级”高效持续交付

摘要: 在2017北京云栖大会上,阿里巴巴高级技术专家陈鑫(花名神秀),给大家带来了《1682亿背后的企业级高效持续交付》,引起强烈共鸣。神秀从技术负责人关心的研发流程混乱、质量无法保障、环境管理低效、资源…

星形和雪花模型_数据仓库多维数据模型设计

建设数据模型既然是整个数据仓库建设中一个非常重要的关键部分,那么,怎么建设我们的数据仓库模型就是我们需要解决的一个问题。这里我们将要详细介绍如何创建适合自己的数据模型。数据仓库建模方法大千世界,表面看五彩缤纷,实质上…