日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AliOS Things网络适配框架 - SAL

發布時間:2024/8/23 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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或其他具有網絡通信能力的平臺。

總結

以上是生活随笔為你收集整理的AliOS Things网络适配框架 - SAL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。