tsb_ui_main.lua 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. --[[
  2. @module ui_main
  3. @summary 调试宝UI主程序,负责页面管理和主循环
  4. @version 1.0
  5. @date 2026.03.04
  6. @author 李一玮
  7. @usage
  8. 本文件管理所有调试宝UI页面,包括主页和各个演示页面。
  9. ]]
  10. require("tsb_login_page")
  11. require("tsb_home_page")
  12. require("tsb_bsk_page")
  13. require("tsb_tq_page")
  14. require("tsb_bmq_page")
  15. require("tsb_ywy_page")
  16. require("tsb_lora_page")
  17. require("tsb_devlog_page")
  18. require("tsb_485log_page")
  19. require("tsb_mqtt_page")
  20. require("tsb_firm_page")
  21. require("tsb_upgrade_page")
  22. require("tsb_reflash_page")
  23. require("tsb_light_page")
  24. require("tsb_devinfo_page")
  25. require("tsb_update_page")
  26. require("tsb_wlan_page")
  27. require("tsb_game_page")
  28. require("tsb_wavein_page")
  29. require("tsb_waveout_page")
  30. require("tsb_ywy_1_page")
  31. require("tsb_ywy_2_page")
  32. require("tsb_232log_page")
  33. require("tsb_channel_page")
  34. require("tsb_log_page")
  35. require("tsb_help_page")
  36. require("tsb_waveform_page")
  37. require("tsb_test_page")
  38. -- 当前显示的页面
  39. local current_page = nil
  40. local page_stack = {} -- 页面,用于返回功能
  41. -- local frame_time = 20 -- 主循环刷新间隔,单位ms
  42. -- 页面定义
  43. local pages = {
  44. tsb_login_page = "tsb_login_page", -- 调试宝登录页面
  45. tsb_home_page = "tsb_home_page", -- 调试宝主界面
  46. tsb_bsk_page = "tsb_bsk_page", -- 报税口页面
  47. tsb_tq_page = "tsb_tq_page", -- 提枪信号页面
  48. tsb_bmq_page = "tsb_bmq_page", -- 编码器页面
  49. tsb_ywy_page = "tsb_ywy_page", -- 液位仪页面
  50. tsb_lora_page = "tsb_lora_page", -- 无线局域网监测页面
  51. tsb_devlog_page = "tsb_devlog_page", -- 设备日志监测页面
  52. tsb_485log_page = "tsb_485log_page", -- 485日志监测页面
  53. tsb_mqtt_page = "tsb_mqtt_page", -- MQTT配置页面
  54. tsb_firm_page = "tsb_firm_page", -- 固件包下载页面
  55. tsb_upgrade_page = "tsb_upgrade_page", -- 升级演示页面
  56. tsb_reflash_page = "tsb_reflash_page", -- 刷机页面
  57. tsb_light_page = "tsb_light_page", -- 亮度页面
  58. tsb_devinfo_page = "tsb_devinfo_page", -- 设备信息页面
  59. tsb_update_page = "tsb_update_page", -- 更新页面
  60. tsb_wlan_page = "tsb_wlan_page", -- 网络配置页面
  61. tsb_wavein_page = "tsb_wavein_page", -- 波形输入页面
  62. tsb_waveout_page = "tsb_waveout_page", -- 波形输出页面
  63. tsb_ywy_1_page = "tsb_ywy_1_page", -- 液位仪页面1
  64. tsb_ywy_2_page = "tsb_ywy_2_page", -- 液位仪页面2
  65. tsb_232log_page = "tsb_232log_page", -- 232日志监测页面
  66. tsb_channel_page = "tsb_channel_page", -- 信道切换页面
  67. tsb_log_page = "tsb_log_page", -- 本机日志页面
  68. tsb_help_page = "tsb_help_page", -- 帮助页面
  69. tsb_waveform_page = "tsb_waveform_page", -- 波形页面
  70. tsb_test_page = "tsb_test_page", -- 测试页面
  71. -- tsb_game_page = "tsb_game_page", -- 游戏页面
  72. }
  73. -- 显示指定页面
  74. local function show_page(page_name, params)
  75. -- 保存当前页面
  76. if not params or not (params.from_back or params.from_home) then
  77. if current_page then
  78. table.insert(page_stack, {
  79. name = current_page.name,
  80. instance = current_page.instance
  81. })
  82. end
  83. end
  84. -- 清理当前页面
  85. if current_page and current_page.instance.cleanup then
  86. current_page.instance.cleanup()
  87. end
  88. -- 加载新页面
  89. local module_name = pages[page_name]
  90. if not module_name then
  91. log.error("tsb_ui_main", "页面不存在:", page_name)
  92. return false
  93. end
  94. local page_module = require(module_name)
  95. -- 初始化页面
  96. if page_module.init then
  97. page_module.init(params)
  98. end
  99. -- 更新当前页面信息
  100. current_page = {
  101. name = page_name,
  102. module = module_name,
  103. instance = page_module
  104. }
  105. log.info("tsb_ui_main", "切换到页面:", page_name)
  106. return true
  107. end
  108. -- 返回上一个页面
  109. local function go_back()
  110. if #page_stack > 0 then
  111. local prev_page = table.remove(page_stack)
  112. if prev_page.instance and prev_page.instance.show then
  113. prev_page.instance.show()
  114. current_page = prev_page
  115. log.info("tsb_ui_main", "返回页面:", prev_page.name)
  116. return true
  117. else
  118. return show_page(prev_page.name, { from_back = true })
  119. end
  120. else
  121. return show_page("tsb_login_page", { from_back = true })
  122. end
  123. end
  124. -- 返回到首页面
  125. local function go_home()
  126. -- 先判断是否已在首页
  127. if current_page and current_page.name == "tsb_home_page" then
  128. log.info("tsb_ui_main", "当前已在首页,无需跳转")
  129. return true
  130. end
  131. -- 清空页面栈
  132. page_stack = {}
  133. -- 调用show_page,用from_home标识
  134. return show_page("tsb_home_page", { from_home = true })
  135. end
  136. -- 主任务函数
  137. local function tsb_ui_main_task()
  138. -- 3V3供电使能
  139. gpio.setup(153,1, gpio.PULLUP)
  140. -- 10V供电使能
  141. gpio.setup(147,1, gpio.PULLUP)
  142. -- gpio.setup(140,1, gpio.PULLUP)
  143. -- gpio.setup(30,0)
  144. -- gpio.set(30, gpio.HIGH)
  145. -- -- 开启屏幕供电
  146. -- gpio.setup(32,0)
  147. -- gpio.set(32,0)
  148. -- 初始化硬件
  149. lcd_drv.init()
  150. tp_drv.init()
  151. -- 显示主页
  152. show_page("tsb_login_page")
  153. end
  154. -- 全局函数,方便页面调用
  155. _G.show_page = show_page
  156. _G.go_back = go_back
  157. _G.go_home = go_home
  158. -- 启动UI主任务
  159. sys.taskInit(tsb_ui_main_task)