netdrv_wifi_ap.lua 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. --[[
  2. @module netdrv_wifi_ap
  3. @summary "WIFI AP网卡"驱动模块
  4. @version 1.0
  5. @date 2025.11.15
  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()
  22. log.warn("netdrv_wifi.ip_lose_func", "IP_LOSE")
  23. sys.publish(SERVER_TOPIC, "SOCKET_CLOSED")
  24. end
  25. -- 监听WLAN_AP_INC消息,处理WiFi接入点相关事件
  26. local function ap_ready_func(evt, data)
  27. -- evt 可能的值有: "CONNECTED", "DISCONNECTED"
  28. -- 当evt=CONNECTED, data是连接的AP的新STA的MAC地址
  29. -- 当evt=DISCONNECTED, data是断开与AP连接的STA的MAC地址
  30. log.info("收到AP事件", evt, data and data:toHex())
  31. end
  32. -- 订阅系统网络相关消息,实现事件驱动的网络状态管理
  33. sys.subscribe("IP_READY", ip_ready_func)
  34. sys.subscribe("IP_LOSE", ip_lose_func)
  35. sys.subscribe("WLAN_AP_INC", ap_ready_func)
  36. -- 设置默认网卡为socket.LWIP_AP
  37. socket.dft(socket.LWIP_AP)
  38. --这个task的核心业务逻辑是:执行WiFi AP初始化和配置流程
  39. local function netdrv_wifi_ap_task_func()
  40. -- wlan初始化
  41. wlan.init()
  42. -- 创建热点,SSID=LuatOS+IMEI,密码=12345678
  43. wlan.createAP("LuatOS" .. wlan.getMac(), "12345678")
  44. -- 为AP网卡分配静态IPv4地址、子网掩码、网关
  45. netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
  46. -- 等待AP接口就绪
  47. while netdrv.ready(socket.LWIP_AP) ~= true do
  48. sys.wait(100)
  49. end
  50. -- 在AP接口上创建DHCP服务器,为连接到热点的设备自动分配IP地址
  51. dhcpsrv.create({adapter=socket.LWIP_AP})
  52. end
  53. --创建并且启动一个task
  54. --task的处理函数为netdrv_wifi_ap_task_func
  55. sys.taskInit(netdrv_wifi_ap_task_func)