netdrv_wifi_ap.lua 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. --[[
  2. @module netdrv_wifi_ap
  3. @summary "WIFI AP网卡"驱动模块
  4. @version 1.0
  5. @date 2025.10.16
  6. @author 王世豪
  7. @usage
  8. 本文件为WIFI AP网卡驱动模块,核心业务逻辑为:
  9. 1、初始化WiFi AP功能;
  10. 2、配置热点名称、密码等参数;
  11. 3、启动接入点供其他设备连接;
  12. 本文件没有对外接口,直接在其他功能模块中require "netdrv_wifi_ap"就可以加载运行;
  13. ]]
  14. dnsproxy = require("dnsproxy")
  15. dhcpsrv = require("dhcpsrv")
  16. local function ip_ready_func(ip,adapter)
  17. if adapter == socket.LWIP_AP then
  18. log.info("netdrv_wifi.ip_ready_func", "IP_READY: ", ip)
  19. end
  20. end
  21. local function ip_lose_func(ip,adapter)
  22. if adapter == socket.LWIP_AP then
  23. log.warn("netdrv_wifi.ip_lose_func", "IP_LOSE")
  24. sys.publish(SERVER_TOPIC, "SOCKET_CLOSED")
  25. end
  26. end
  27. -- 监听WLAN_AP_INC消息,处理WiFi接入点相关事件
  28. local function ap_ready_func(evt, data)
  29. -- evt 可能的值有: "CONNECTED", "DISCONNECTED"
  30. -- 当evt=CONNECTED, data是连接的AP的新STA的MAC地址
  31. -- 当evt=DISCONNECTED, data是断开与AP连接的STA的MAC地址
  32. log.info("收到AP事件", evt, data and data:toHex())
  33. end
  34. -- 订阅系统网络相关消息,实现事件驱动的网络状态管理
  35. sys.subscribe("IP_READY", ip_ready_func)
  36. sys.subscribe("IP_LOSE", ip_lose_func)
  37. sys.subscribe("WLAN_AP_INC", ap_ready_func)
  38. -- 设置默认网卡为socket.LWIP_AP
  39. socket.dft(socket.LWIP_AP)
  40. --这个task的核心业务逻辑是:执行WiFi AP初始化和配置流程
  41. local function netdrv_wifi_ap_task_func()
  42. -- wlan初始化
  43. wlan.init()
  44. -- 创建热点,SSID=LuatOS+IMEI,密码=12345678
  45. wlan.createAP("LuatOS" .. mobile.imei(), "12345678")
  46. -- 为AP网卡分配静态IPv4地址、子网掩码、网关
  47. netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
  48. -- 等待AP接口就绪
  49. while netdrv.ready(socket.LWIP_AP) ~= true do
  50. sys.wait(100)
  51. end
  52. -- 配置DNS代理
  53. dnsproxy.setup(socket.LWIP_AP, socket.LWIP_GP)
  54. -- 在AP接口上创建DHCP服务器,为连接到热点的设备自动分配IP地址
  55. dhcpsrv.create({adapter=socket.LWIP_AP})
  56. -- 配置网络共享(NAPT),使用4G网络作为主网关出口
  57. while 1 do
  58. if netdrv.ready(socket.LWIP_GP) then
  59. netdrv.napt(socket.LWIP_GP)
  60. log.info("AP 创建成功,如果无法连接,需要将按照https://docs.openluat.com/air8000/luatos/app/updatwifi/update/ 升级固件")
  61. log.info("AP 创建成功,如果无法连接,请升级本仓库的最新core")
  62. break
  63. end
  64. sys.wait(1000)
  65. end
  66. end
  67. --创建并且启动一个task
  68. --task的处理函数为netdrv_wifi_ap_task_func
  69. sys.taskInit(netdrv_wifi_ap_task_func)