init: Air780EPM 官方 LuatOS 项目代码基线
- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
--[[
|
||||
@module main
|
||||
@summary LuatOS用户应用脚本文件入口,总体调度应用逻辑
|
||||
@version 1.0
|
||||
@date 2025.08.25
|
||||
@author 拓毅恒
|
||||
@usage
|
||||
演示功能概述
|
||||
RNDIS是指Remote NDIS,基于USB实现RNDIS实际上就是TCP/IP over USB,就是在USB设备上跑TCP/IP,让USB设备看上去像一块网卡。从而使Windows /Linux可以通过 USB 设备连接网络。
|
||||
ECM(Ethernet Control Model)是一种基于 USB 的通信设备类(CDC)子类协议,它将 “TCP/IP over USB” 抽象成一条虚拟以太网链路:USB 设备端实现 ECM 功能后,会在主机侧呈现为一块标准的以太网卡(如 usb0)。主机操作系统(Linux、macOS 等)无需额外专用驱动,即可通过该虚拟网卡发送/接收以太网帧,从而经 USB 设备连接到网络。
|
||||
1、功能使用说明
|
||||
由于 Air780EPM 只支持 LUATOS 模式,且 RNDIS 网卡应用默认关闭,所以在使用 RNIDS 之前,需要使用接口打开,本demo将为大家讲解如何使用 RNIDS 功能。
|
||||
本demo仅演示在 Windows系统上运行 RNDIS 功能,如果需要在 Linux系统上使用功能,请查看文档:xxxxxxxxx
|
||||
2、ECM 功能说明
|
||||
由于Windows系统没有测试环境无法测试 ECM 功能,所以 open_ecm.lua 没有完整测试。
|
||||
|
||||
注:在v2013以下固件使用mobile.config()的返回值有bug,无论是否开启成功,返回值均为false,需要烧录V2013及以上固件才能完整验证此功能。
|
||||
|
||||
更多说明参考本目录下的readme.md文件
|
||||
]]
|
||||
PROJECT = "RNDIS_ECM"
|
||||
VERSION = "001.999.000"
|
||||
|
||||
|
||||
-- 在日志中打印项目名和项目版本号
|
||||
log.info("main", PROJECT, VERSION)
|
||||
|
||||
|
||||
|
||||
|
||||
-- 如果内核固件支持errDump功能,此处进行配置,【强烈建议打开此处的注释】
|
||||
-- 因为此功能模块可以记录并且上传脚本在运行过程中出现的语法错误或者其他自定义的错误信息,可以初步分析一些设备运行异常的问题
|
||||
-- 以下代码是最基本的用法,更复杂的用法可以详细阅读API说明文档
|
||||
-- 启动errDump日志存储并且上传功能,600秒上传一次
|
||||
-- if errDump then
|
||||
-- errDump.config(true, 600)
|
||||
-- end
|
||||
|
||||
|
||||
-- 使用LuatOS开发的任何一个项目,都强烈建议使用远程升级FOTA功能
|
||||
-- 可以使用合宙的iot.openluat.com平台进行远程升级
|
||||
-- 也可以使用客户自己搭建的平台进行远程升级
|
||||
-- 远程升级的详细用法,可以参考fota的demo进行使用
|
||||
|
||||
|
||||
-- 启动一个循环定时器
|
||||
-- 每隔3秒钟打印一次总内存,实时的已使用内存,历史最高的已使用内存情况
|
||||
-- 方便分析内存使用是否有异常
|
||||
-- sys.timerLoopStart(function()
|
||||
-- log.info("mem.lua", rtos.meminfo())
|
||||
-- log.info("mem.sys", rtos.meminfo("sys"))
|
||||
-- end, 3000)
|
||||
|
||||
-- 加载 open_rndis 主应用功能模块
|
||||
require "open_rndis"
|
||||
|
||||
-- 加载 open_ecm 主应用功能模块
|
||||
-- require "open_ecm"
|
||||
|
||||
-- 用户代码已结束---------------------------------------------
|
||||
-- 结尾总是这一句
|
||||
sys.run()
|
||||
-- sys.run()之后后面不要加任何语句!!!!!
|
||||
@@ -0,0 +1,51 @@
|
||||
--[[
|
||||
@module open_ecm
|
||||
@summary ecm 服务启动功能模块
|
||||
@version 1.2
|
||||
@date 2026.08.03
|
||||
@author 拓毅恒
|
||||
@usage
|
||||
用法实例
|
||||
|
||||
启动 ECM 服务
|
||||
- 运行 ecm_task 任务,来执行开启 ECM 的操作。
|
||||
- 使用 mobile.config(mobile.CONF_USB_ETHERNET, 3) 来启用 ECM 功能。
|
||||
- ECM 设置完毕后需要主动进出飞行模式一次才能生效。
|
||||
|
||||
注:由于Windows系统没有测试环境无法测试 ECM 功能,所以本demo没有完整测试。
|
||||
|
||||
特别注意:
|
||||
1. USB默认是ECM配置,设置完毕后还需要开关USB电源将USB协议重置为ecm配置
|
||||
|
||||
|
||||
本文件没有对外接口,直接在 main.lua 中 require "open_ecm" 即可加载运行。
|
||||
]]
|
||||
|
||||
local function ip_ready_func(ip, adapter)
|
||||
if adapter == socket.LWIP_GP then
|
||||
-- IP_READY后打印IP地址
|
||||
log.info("IP_READY", socket.localIP(socket.LWIP_GP))
|
||||
end
|
||||
end
|
||||
|
||||
--订阅"IP_READY"消息
|
||||
sys.subscribe("IP_READY", ip_ready_func)
|
||||
|
||||
-- 运行 ECM 模式任务
|
||||
local function ecm_task()
|
||||
-- 调用 mobile.config 函数启用 ECM 功能
|
||||
-- 传入的第二个参数 7 ,实际为二进制的 0111
|
||||
-- 蜂窝网络模块的usb以太网卡控制,bit0开关:1开0关,bit1模式:1-NAT 0-独立IP(在usb以太网卡开启前可以修改,开启过就不行),bit2协议:1 ECM,0 ECM(需在飞行模式下设置)
|
||||
log.info("我看看 ECM 是否启动成功:", mobile.config(mobile.CONF_USB_ETHERNET, 7))
|
||||
-- 设置完毕后,需要进出一次飞行模式,才能生效
|
||||
log.info("进入飞行模式")
|
||||
mobile.flymode(0, true)
|
||||
log.info("退出飞行模式")
|
||||
mobile.flymode(0, false)
|
||||
-- 设置网卡需要开关USB电源将USB协议重置为ECM配置
|
||||
pm.power(pm.USB ,false)
|
||||
pm.power(pm.USB ,true)
|
||||
end
|
||||
|
||||
-- 初始化一个系统任务,执行 ecm_task 函数
|
||||
sys.taskInit(ecm_task)
|
||||
@@ -0,0 +1,43 @@
|
||||
--[[
|
||||
@module open_rndis
|
||||
@summary rndis 服务启动功能模块
|
||||
@version 1.2
|
||||
@date 2026.08.03
|
||||
@author 拓毅恒
|
||||
@usage
|
||||
用法实例
|
||||
|
||||
启动 RNDIS 服务
|
||||
- 运行 rndis_task 任务,来执行开启 RNDIS 的操作。
|
||||
- 使用 mobile.config(mobile.CONF_USB_ETHERNET, 3) 来启用 RNDIS 功能。
|
||||
- RNDIS 设置完毕后需要主动进出飞行模式一次才能生效。
|
||||
|
||||
本文件没有对外接口,直接在 main.lua 中 require "open_rndis" 即可加载运行。
|
||||
]]
|
||||
|
||||
local function ip_ready_func(ip, adapter)
|
||||
if adapter == socket.LWIP_GP then
|
||||
-- IP_READY后打印IP地址
|
||||
log.info("IP_READY", socket.localIP(socket.LWIP_GP))
|
||||
end
|
||||
end
|
||||
|
||||
--订阅"IP_READY"消息
|
||||
sys.subscribe("IP_READY", ip_ready_func)
|
||||
|
||||
-- 运行 RNDIS 模式任务
|
||||
local function rndis_task()
|
||||
-- 蜂窝网络模块的usb以太网卡控制,bit0开关:1开0关,bit1模式:1-NAT 0-独立IP(在usb以太网卡开启前可以修改,开启过就不行),bit2协议:1 ECM,0 RNDIS(设置完毕后需要进出一次飞行模式)
|
||||
log.info("我看看 RNDIS 是否启动成功:", mobile.config(mobile.CONF_USB_ETHERNET, 3))
|
||||
-- 设置完毕后,需要进出一次飞行模式,才能生效
|
||||
log.info("进入飞行模式")
|
||||
mobile.flymode(0, true)
|
||||
log.info("退出飞行模式")
|
||||
mobile.flymode(0, false)
|
||||
-- 设置网卡需要开关USB电源将USB协议重置为RNDIS配置
|
||||
pm.power(pm.USB ,false)
|
||||
pm.power(pm.USB ,true)
|
||||
end
|
||||
|
||||
-- 初始化一个系统任务,执行 rndis_task 函数
|
||||
sys.taskInit(rndis_task)
|
||||
@@ -0,0 +1,112 @@
|
||||
## 演示功能概述
|
||||
|
||||
本demo支持两种基于USB的网络连接模式:RNDIS和ECM。
|
||||
|
||||
- **RNDIS**(Remote NDIS):基于USB实现的TCP/IP over USB,让USB设备在Windows系统上呈现为一块网卡,从而使Windows/Linux可以通过USB设备连接网络。
|
||||
|
||||
- **ECM**(Ethernet Control Model):一种基于USB的通信设备类(CDC)子类协议,将"TCP/IP over USB"抽象成一条虚拟以太网链路,在主机侧呈现为一块标准的以太网卡。Linux、macOS等操作系统无需额外专用驱动即可使用。
|
||||
|
||||
#### 1、功能使用说明
|
||||
|
||||
本demo已将功能拆分为三个文件:
|
||||
- `main.lua`:主入口文件,负责加载和调度各个功能模块
|
||||
- `open_rndis.lua`:RNDIS功能实现模块
|
||||
- `open_ecm.lua`:ECM功能实现模块
|
||||
|
||||
由于 Air780EPM 只支持 LUATOS 模式,且RNDIS/ECM网卡应用默认关闭,需要使用接口打开。
|
||||
|
||||
**注意:**
|
||||
- 本demo在Windows系统上主要测试RNDIS功能
|
||||
- ECM功能由于Windows系统缺少测试环境,无法在Windows上完整测试
|
||||
|
||||
#### 2、启动 RNDIS 服务
|
||||
|
||||
- 运行 rndis_task 任务,来执行开启 RNDIS 的操作。
|
||||
|
||||
- RNDIS 需要在飞行模式下开启,所以首先进入飞行模式。
|
||||
|
||||
- 进入飞行模式后,使用 mobile.config(mobile.CONF_USB_ETHERNET, 3) 来启用 RNDIS 功能。
|
||||
|
||||
> 函数讲解:mobile.config(mobile.CONF_USB_ETHERNET, 3)
|
||||
传入的第二个参数 3 ,实际为二进制的 0011
|
||||
从右往前数第0个bit位为1,则开启USB以太网卡控制,第一个bit位为1,则使用NAT模式(基站分配ip),第二个bit位为0,则开启RNDIS模式。
|
||||
|
||||
#### 3、启动 ECM 服务
|
||||
|
||||
- 运行 ecm_task 任务,来执行开启 ECM 的操作。
|
||||
|
||||
- ECM 需要在飞行模式下开启,所以首先进入飞行模式。
|
||||
|
||||
- 进入飞行模式后,使用 mobile.config(mobile.CONF_USB_ETHERNET, 7) 来启用 ECM 功能。
|
||||
|
||||
> 函数讲解:mobile.config(mobile.CONF_USB_ETHERNET, 7)
|
||||
传入的第二个参数 7 ,实际为二进制的 0111
|
||||
从右往前数第0个bit位为1,则开启USB以太网卡控制,第一个bit位为1,则使用NAT模式(基站分配ip),第二个bit位为1,则开启ECM模式。
|
||||
|
||||
> 特别说明:由于Windows系统缺少测试环境,ECM功能无法在Windows系统上完整测试。在Linux、macOS等系统上可能需要不同的配置和测试方法。
|
||||
>
|
||||
>注:在v2013以下固件使用mobile.config()的返回值有bug,无论是否开启成功,返回值均为false,需要烧录V2013及以上固件才能完整验证此功能。
|
||||
|
||||
#### 4、运行效果
|
||||
|
||||
- **飞行模式进入成功**:日志打印 “进入飞行模式成功”
|
||||
|
||||
- **RNDIS 创建成功**:日志中会打印“我看看 RNDIS 是否启动成功: true”,并且在电脑网络上显示出RNDIS联网图标。
|
||||
|
||||
- **ECM 创建**:由于Windows系统缺少测试环境,ECM功能在Windows系统上无法完整测试。在日志中会打印“我看看 ECM 是否启动成功: [结果]”,但无法在Windows系统上验证网络连接状态。
|
||||
|
||||
> **注意**:在main.lua中,RNDIS和ECM功能默认只启用了RNDIS。如需测试ECM功能,请修改main.lua文件,注释掉`require "open_rndis"`并取消注释`require "open_ecm"`
|
||||
|
||||
## 演示硬件环境
|
||||
|
||||
1、Air780EPM核心板/开发板一块
|
||||
|
||||
2、配套天线一套
|
||||
|
||||
3、TYPE-C USB数据线一根
|
||||
|
||||
## 演示软件环境
|
||||
|
||||
1、Luatools下载调试工具
|
||||
|
||||
2、[Air780EPM 版本固件](https://docs.openluat.com/air780EPM/luatos/firmware/)(V2013以下固件使用mobile.config()的返回值有bug,需要烧录V2013及以上固件才能完整验证此demo)
|
||||
|
||||
3、确保插入的sim卡可以正常上网。
|
||||
|
||||
## 演示核心步骤
|
||||
|
||||
### RNDIS功能测试步骤
|
||||
|
||||
1、搭建好硬件环境
|
||||
|
||||
2、通过Luatools将demo与固件烧录到核心板中(默认启用RNDIS功能)
|
||||
|
||||
3、烧录好后,板子开机同时在luatools上查看日志,确认是否进入飞行模式、RNDIS是否启用成功。
|
||||
|
||||
`
|
||||
[2025-08-22 09:55:54.459][000000000.210] I/user.main RNDIS_ECM 1.0.0
|
||||
[2025-08-22 09:55:54.529][000000000.661] I/user.进入飞行模式成功,打开RNDIS模式
|
||||
[2025-08-22 09:55:54.533][000000000.661] I/user.我看看 RNDIS 是否启动成功: true
|
||||
[2025-08-22 09:55:54.649][000000000.815] I/user.退出飞行模式 false
|
||||
|
||||
`
|
||||
|
||||
4、日志提示成功后,可以在**Windows** → **设备管理器** → **网络适配器** 中查看是否有 **“Remote NDIS based Internet Sharing Device”** 来确认 RNDIS是否开启成功,如果被禁用请手动开启。
|
||||
|
||||
### ECM功能测试说明
|
||||
|
||||
1、**修改配置**:在测试ECM功能前,需要修改main.lua文件,注释掉`require = "open_rndis"`并取消注释`require = "open_ecm"`
|
||||
|
||||
2、**烧录程序**:通过Luatools将修改后的demo与固件烧录到核心板中
|
||||
|
||||
3、**查看日志**:板子开机后在luatools上查看日志,确认是否进入飞行模式、ECM是否尝试启动
|
||||
|
||||
`
|
||||
[2025-08-22 09:55:54.459][000000000.210] I/user.main RNDIS_ECM 1.0.0
|
||||
[2025-08-22 09:55:54.529][000000000.661] I/user.进入飞行模式成功,打开ECM模式
|
||||
[2025-08-22 09:55:54.533][000000000.661] I/user.我看看 ECM 是否启动成功: [结果]
|
||||
[2025-08-22 09:55:54.649][000000000.815] I/user.退出飞行模式 false
|
||||
|
||||
`
|
||||
|
||||
4、**特别说明**:由于Windows系统缺少测试环境,ECM功能在Windows系统上无法完整测试。即使日志显示ECM启动成功,也无法在Windows系统上验证网络连接状态。ECM功能主要适用于Linux、macOS等操作系统。
|
||||
Reference in New Issue
Block a user