air_lan.lua 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. local air_lan = {}
  2. local test_type = "lan_test"
  3. dhcps = require "dhcpsrv"
  4. dnsproxy = require "dnsproxy"
  5. --[[
  6. @brief 初始化LAN网络功能
  7. @description
  8. 1. 初始化CH390芯片供电和SPI通信
  9. 2. 配置网络适配器参数
  10. 3. 设置IPv4地址和子网掩码
  11. 4. 等待网络连接就绪
  12. 5. 创建DHCP服务器和DNS代理
  13. 6. 可选启动iperf服务器
  14. @return air_lan 返回air_lan对象
  15. ]]
  16. function air_lan.run_tests()
  17. sys.wait(500)
  18. log.info("ch390", "打开LDO供电")
  19. gpio.setup(140, 1, gpio.PULLUP) -- 打开ch390供电
  20. lcd.clear()
  21. log.info("lan测试开始")
  22. lcd.drawStr(50, 50, "lan测试开始")
  23. sys.wait(6000)
  24. local result = spi.setup(1, -- spi_id
  25. nil, 0, -- CPHA
  26. 0, -- CPOL
  27. 8, -- 数据宽度
  28. 25600000 -- ,--频率
  29. -- spi.MSB,--高低位顺序 可选,默认高位在前
  30. -- spi.master,--主模式 可选,默认主
  31. -- spi.full--全双工 可选,默认全双工
  32. )
  33. log.info("main", "open", result)
  34. if result ~= 0 then -- 返回值为0,表示打开成功
  35. log.info("main", "spi open error", result)
  36. return
  37. end
  38. -- 初始化指定netdrv设备,
  39. -- socket.LWIP_ETH 网络适配器编号
  40. -- netdrv.CH390外挂CH390
  41. -- SPI ID 1, 片选 GPIO12
  42. netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {
  43. spi = 1,
  44. cs = 12
  45. })
  46. sys.wait(3000)
  47. local ipv4, mark, gw = netdrv.ipv4(socket.LWIP_ETH, "192.168.4.1", "255.255.255.0", "192.168.4.1")
  48. log.info(" lan ipv4", ipv4, mark, gw)
  49. local cunt = 1
  50. while netdrv.link(socket.LWIP_ETH) ~= true and cunt < 10 do
  51. log.info("lan ", "没联网成功 尝试重连第" .. cunt .. "次")
  52. lcd.clear()
  53. lcd.drawStr(50, 50, "没联网成功 尝试重连第" .. cunt .. "次")
  54. cunt = cunt + 1
  55. sys.wait(1000)
  56. end
  57. sys.wait(2000)
  58. dhcps.create({
  59. adapter = socket.LWIP_ETH
  60. })
  61. if iperf then
  62. log.info("启动iperf服务器端")
  63. lcd.clear()
  64. lcd.drawStr(50, 50, "启动iperf服务器端")
  65. iperf.server(socket.LWIP_ETH)
  66. end
  67. log.info("lan 执行到61行")
  68. local isReady, default = socket.adapter(socket.LWIP_ETH)
  69. local test_mode, test_end, failing_res, pass, failing_item = "", "", "", false, ""
  70. log.info("lan 执行到64行")
  71. if isReady then
  72. test_mode = "测试项目通过"
  73. test_end = "pass"
  74. pass = "pass"
  75. log.info(test_type, test_mode)
  76. else
  77. test_mode = "测试项目未通过"
  78. test_end = "fail"
  79. pass = "fail"
  80. failing_res = "CH390联网未成功"
  81. failing_item = "lan"
  82. log.info(test_type, test_mode)
  83. end
  84. log.info("lan 执行到80行")
  85. local data = {
  86. type = test_type,
  87. test_mode = test_mode,
  88. test_end = pass or failing_item,
  89. fail_res = failing_res,
  90. imei = mobile.imei()
  91. }
  92. lcd.clear()
  93. lcd.drawStr(50, 50, "lan测试结束")
  94. lcd.drawStr(50, 70, "测试结果:" .. pass or failing_res)
  95. if pass =="fail" then
  96. lcd.drawStr(50, 90, "失败的原因是:" .. failing_res)
  97. end
  98. local data = json.encode(data)
  99. log.info("lan 准备给服务器发消息", data)
  100. sys.publish("OTHER_FILE_SENDMSG", data)
  101. end
  102. return air_lan