tsb_ui_main.lua 5.6 KB

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