Эх сурвалжийг харах

update:8000的AirPHY_1000 demo

王城钧 4 сар өмнө
parent
commit
198c48935e

+ 0 - 61
module/Air8101/demo/accessory_board/AirPHY_1000/http/http_app.lua

@@ -9,67 +9,6 @@
 本文件没有对外接口,直接在main.lua中require "http_app"就可以加载运行;
 ]]
 
---[[
-此处先详细解释下http.request接口的使用方法
-
-接口定义:
-    http.request(method, url, headers, body, opts, server_ca_cert, client_cert, client_key, client_password)
-
-使用方法:
-    local code, headers, body = http.request(method, url, headers, body, opts, server_ca_cert, client_cert, client_key, client_password).wait()
-    只能在task中使用
-    发送http请求到服务器,等待服务器的http应答,此处会阻塞当前task,等待整个过程成功结束或者出现错误异常结束或者超时结束
-
-参数定义:
-    method,stirng类型,必须包含此参数,表示HTTP请求方法,支持"GET"、"POST"、"HEAD"等所有HTTP请求方法
-    url,string类型,必须包含此参数,表示HTTP请求URL地址,支持HTTP、HTTPS,支持域名、IP地址,支持自定义端口,标准的HTTP URL格式都支持
-    headers,table或者nil类型,可选包含此参数,表示HTTP请求头,例如 {["Content-Type"] = "application/x-www-form-urlencoded", ["self_defined_key"] = "self_defined_value"}
-    body,string或者zbuff或者nil类型,可选包含此参数,表示HTTP请求体,如果请求体是一个文件中的内容,要把文件内容读出来,赋值给body使用
-    opts,table或者nil类型,可选包含此参数,表示HTTP请求的一些额外配置,包含以下内容
-    {
-        timeout    -- -- number或者nil类型,单位毫秒,可选包含此参数,表示从发送请求到读取到服务器响应整个过程的超时时间,如果传入0,表示永久等待;如果没有传入此参数或者传入nil,则使用默认值10分钟
-        dst        -- 下载路径,string类型,当HTTP请求的数据需要保存到文件中时,此处填写完整的文件路径
-        adapter    -- 使用的网卡ID,number类型,例如4G网卡,SPI外挂以太网卡,WIFI网卡等;如果没有传入此参数,内核固件会自动选择当前时间点其他功能模块设置的默认网卡
-                    -- 除非你HTTP请求时,一定要使用某一种网卡,才设置此参数;如果没什么特别要求,不要使用此参数,使用系统中设置的默认网卡即可
-                    -- 这个参数和本demo中的netdrv_device.lua关系比较大,netdrv_device会设置默认网卡,此处http不要设置adapter参数,直接使用netdrv_device设置的默认网卡就行
-        debug      -- 调试开关,bool类型,true表示打开debug调试信息日志,false表示关闭debug调试信息日志,默认为关闭状态
-        ipv6       -- 是否为ipv6,bool类型,true表示使用ipv6,false表示不使用ipv6,默认为false
-        userdata   -- 下载回调函数使用的用户自定义回调参数,做为callback回调函数的第三个参数使用
-        callback   -- 下载回调函数,function类型,当下载数据时,无论是保存到内存中,还是保存到文件系统中,如果设置了callback,内核固件中每收到一包body数据,都会自动执行一次callback回调函数
-                    -- 回调函数的调用形式为callback(content_len, body_len, userdata)
-                    --     content_len:number类型,数据总长度
-                    --     body_len:number类型,已经下载的数据长度
-                    --     userdata:下载回调函数使用的用户自定义回调参数
-    }
-    server_ca_cert,string类型,服务器ca证书数据,可选包含此参数,当客户端需要验证服务器证书时,需要此参数,如果证书数据在一个文件中,要把文件内容读出来,赋值给server_ca_cert
-    client_cert,string类型,客户端证书数据,可选包含此参数,当服务器需要验证客户端证书时,需要此参数,如果证书数据在一个文件中,要把文件内容读出来,赋值给client_cert
-    client_key, string类型,客户端加密后的私钥数据,可选包含此参数,当服务器需要验证客户端证书时,需要此参数,如果加密后的私钥数据在一个文件中,要把文件内容读出来,赋值给client_key
-    client_password,string类型,客户端私钥口令数据,可选包含此参数,当服务器需要验证客户端证书时,需要此参数,如果私钥口令数据在一个文件中,要把文件内容读出来,赋值给client_password
-
-返回值定义:
-
-    http.request().wait()有三个返回值code,headers,body
-    code表示执行结果,number类型,有以下两种含义:
-        1、code大于等于100时,表示服务器返回的HTTP状态码,例如200表示成功,详细说明可以通过搜索引擎搜索“HTTP状态码”自行了解
-        2、code小于0时,表示内核固件中检测到通信异常,有如下几种:
-            -1 HTTP_ERROR_STATE 错误的状态, 一般是底层异常,请报issue
-            -2 HTTP_ERROR_HEADER 错误的响应头部, 通常是服务器问题
-            -3 HTTP_ERROR_BODY 错误的响应体,通常是服务器问题
-            -4 HTTP_ERROR_CONNECT 连接服务器失败, 未联网,地址错误,域名错误
-            -5 HTTP_ERROR_CLOSE 提前断开了连接, 网络或服务器问题
-            -6 HTTP_ERROR_RX 接收数据报错, 网络问题
-            -7 HTTP_ERROR_DOWNLOAD 下载文件过程报错, 网络问题或下载路径问题
-            -8 HTTP_ERROR_TIMEOUT 超时, 包括连接超时,读取数据超时
-            -9 HTTP_ERROR_FOTA fota功能报错,通常是更新包不合法
-    headers有以下两种含义:
-        1、当code的返回值大于等于100时,headers表示服务器返回的应答头,table类型
-        2、当code的返回值小于0时,headers为nil
-    body有以下三种含义
-        1、当code的返回值大于等于100时,如果请求的body数据不需要保存到文件中,而是直接保存到内存中,则body表示请求到的数据内容,string类型
-        2、当code的返回值大于等于100时,如果请求的body数据需要保存到文件中,则body表示保存请求数据后的文件的大小,number类型
-        3、当code的返回值小于0时,body为nil
-]]
-
 
 -- 普通的http get请求功能演示
 -- 请求的body数据保存到内存变量中,在内存够用的情况下,最大支持32KB的数据存储到内存中

+ 5 - 6
module/Air8101/demo/accessory_board/AirPHY_1000/http/main.lua

@@ -6,12 +6,11 @@
 @author  王城钧
 @usage
 本demo演示的核心功能为:
-1、分别使用http核心库和httpplus扩展库,演示以下一种应用场景的使用方式
-   (1) 普通的http get请求功能演示;;
-2、netdrv_device:配置连接外网使用的网卡,目前支持以下四种选择(二选一)
-   (3) netdrv_eth_spi:通过SPI外挂CH390H芯片的以太网卡
-   (4) netdrv_multiple:支持以上三种网卡,可以配置三种网卡的优先级
-
+1、http_app:普通的http get请求功能演示
+2、netdrv_device:配置连接外网使用的网卡,目前支持以下四种选择(三选一)
+    (1) netdrv_eth_rmii:通过MAC层的rmii接口外挂PHY芯片(LAN8720Ai)的以太网卡
+    (2) netdrv_multiple:支持以上三种网卡,可以配置三种网卡的优先级
+    (3) netdrv_wifi:WIFI STA网卡
 更多说明参考本目录下的readme.md文件
 ]]
 

+ 2 - 2
module/Air8101/demo/accessory_board/AirPHY_1000/http/netdrv/netdrv_multiple.lua

@@ -3,7 +3,7 @@
 @summary 多网卡(WIFI STA网卡、通过MAC层的rmii接口外挂PHY芯片(LAN8720Ai)的以太网卡)驱动模块
 @version 1.0
 @date    2025.07.24
-@author  马梦阳
+@author  王城钧
 @usage
 本文件为多网卡驱动模块 ,核心业务逻辑为:
 1、调用exnetif.set_priority_order配置多网卡的控制参数以及优先级;
@@ -79,7 +79,7 @@ local function netdrv_multiple_task_func()
                     -- 要连接的WIFI路由器名称
                     ssid = "iPhone",
                     -- 要连接的WIFI路由器密码
-                    password = "xiaoshuai", 
+                    password = "HZ88888888", 
 
                     -- 连通性检测ip(选填参数);
                     -- 如果没有传入ip地址,exnetif中会默认使用httpdns能否成功获取baidu.com的ip作为是否连通的判断条件;

+ 52 - 0
module/Air8101/demo/accessory_board/AirPHY_1000/http/netdrv/netdrv_wifi.lua

@@ -0,0 +1,52 @@
+--[[
+@module  netdrv_wifi
+@summary “WIFI STA网卡”驱动模块 
+@version 1.0
+@date    2025.07.01
+@author  朱天华
+@usage
+本文件为WIFI STA网卡驱动模块,核心业务逻辑为:
+1、初始化WIFI网络;
+2、连接WIFI路由器;
+3、和WIFI路由器之间的连接状态发生变化时,在日志中进行打印;
+
+本文件没有对外接口,直接在其他功能模块中require "netdrv_wifi"就可以加载运行;
+]]
+
+local function ip_ready_func()
+    log.info("netdrv_wifi.ip_ready_func", "IP_READY", json.encode(wlan.getInfo()))
+end
+
+local function ip_lose_func()
+    log.warn("netdrv_wifi.ip_lose_func", "IP_LOSE")
+end
+
+
+
+--此处订阅"IP_READY"和"IP_LOSE"两种消息
+--在消息的处理函数中,仅仅打印了一些信息,便于实时观察WIFI的连接状态
+--也可以根据自己的项目需求,在消息处理函数中增加自己的业务逻辑控制,例如可以在连网状态发生改变时更新网络图标
+sys.subscribe("IP_READY", ip_ready_func)
+sys.subscribe("IP_LOSE", ip_lose_func)
+
+
+-- 设置默认网卡为socket.LWIP_STA
+-- 在Air8101上,内核固件运行起来之后,默认网卡就是socket.LWIP_STA
+-- 在单socket.LWIP_STA网卡使用场景下,下面这一行代码加不加都没有影响,为了和其他网卡驱动模块的代码风格保持一致,所以加上了
+socket.dft(socket.LWIP_STA)
+
+
+wlan.init()
+--连接WIFI热点,连接结果会通过"IP_READY"或者"IP_LOSE"消息通知
+--Air8101仅支持2.4G的WIFI,不支持5G的WIFI
+--此处前两个参数表示WIFI热点名称以及密码,更换为自己测试时的真实参数即可
+--第三个参数1表示WIFI连接异常时,内核固件会自动重连
+wlan.connect("茶室-降功耗,找合宙!", "Air123456", 1)
+
+--WIFI联网成功(做为STATION成功连接AP,并且获取到了IP地址)后,内核固件会产生一个"IP_READY"消息
+--各个功能模块可以订阅"IP_READY"消息实时处理WIFI联网成功的事件
+--也可以在任何时刻调用socket.adapter(socket.LWIP_STA)来获取WIFI网络是否连接成功
+
+--WIFI断网后,内核固件会产生一个"IP_LOSE"消息
+--各个功能模块可以订阅"IP_LOSE"消息实时处理WIFI断网的事件
+--也可以在任何时刻调用socket.adapter(socket.LWIP_STA)来获取WIFI网络是否连接成功

+ 5 - 2
module/Air8101/demo/accessory_board/AirPHY_1000/http/netdrv_device.lua

@@ -19,7 +19,10 @@
 -- 根据自己的项目需求,只需要require以下其中的一种即可;
 
 -- 加载“通过MAC层的rmii接口外挂PHY芯片(LAN8720Ai)的以太网卡”驱动模块
--- require "netdrv_eth_rmii"
+require "netdrv_eth_rmii"
 
 -- 加载“可以配置优先级的多种网卡”驱动模块
-require "netdrv_multiple"
+-- require "netdrv_multiple"
+
+-- 加载“WIFI STA网卡”驱动模块
+-- require "netdrv_wifi"