ui.lua 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. module(...,package.seeall)
  2. require "sys"
  3. require "audio"
  4. require "net"
  5. require "misc"
  6. require "lvsym"
  7. scr0 = nil
  8. scr1 = nil
  9. sign = nil
  10. menu_btn = nil
  11. ret_btn = nil
  12. menu_page = nil
  13. is_hidden = true
  14. clock = nil
  15. key_number = lvgl.KEY_NEXT
  16. key_pending = false
  17. key_state = lvgl.INDEV_STATE_REL
  18. local function menu_item_event_cb(label, event)
  19. --if (label == nil) then
  20. -- return
  21. --end
  22. --if (event == lvgl.EVENT_FOCUSED) then
  23. -- sys.timerStart(lvgl.page_focus, 500, menu_page, label, lvgl.ANIM_ON)
  24. lvgl.page_focus(menu_page, label, lvgl.ANIM_ON)
  25. --end
  26. end
  27. local function update_sign()
  28. quality = net.getRssi()
  29. lvgl.img_set_src(sign, lvgl.SYMBOL_BATTERY_FULL)
  30. end
  31. local function btn_event_cb(btn, event)
  32. if (btn == nil) then
  33. return
  34. end
  35. --if (event == lvgl.EVENT_CLICKED) then
  36. --toggle_menu_page()
  37. if (btn == menu_btn) then
  38. lvgl.obj_set_hidden(menu_page, false)
  39. else
  40. lvgl.obj_set_hidden(menu_page, true)
  41. end
  42. --end
  43. end
  44. local function send_to_menu_btn()
  45. lvgl.event_send(menu_btn, lvgl.EVENT_CLICKED, nil)
  46. end
  47. local function send_to_ret_btn()
  48. lvgl.event_send(ret_btn, lvgl.EVENT_CLICKED, nil)
  49. end
  50. local function show_scr1()
  51. lvgl.disp_load_scr(scr1)
  52. -- sys.timerStart(show_menu, 2000)
  53. sys.timerStart(send_to_menu_btn, 2000)
  54. sys.timerStart(send_to_ret_btn, 10000)
  55. end
  56. local function create()
  57. th = lvgl.theme_material_init(80, nil)
  58. lvgl.theme_set_current(th)
  59. scr0 = lvgl.cont_create(nil, nil)
  60. scr1 = lvgl.cont_create(nil, nil)
  61. logo = lvgl.img_create(scr0, nil)
  62. lvgl.img_set_src(logo, "/lua/logo.jpg")
  63. lvgl.obj_align(logo, nil, lvgl.ALIGN_CENTER, 0, -40)
  64. label = lvgl.label_create(scr0, nil)
  65. lvgl.label_set_text(label, "上海合宙通信")
  66. lvgl.obj_align(label, nil, lvgl.ALIGN_CENTER, 0, 50)
  67. bg = lvgl.img_create(scr1, nil)
  68. lvgl.img_set_src(bg, "/lua/bg.jpg")
  69. lvgl.obj_align(bg, nil, lvgl.ALIGN_CENTER, 0, 0)
  70. sign = lvgl.img_create(scr1, nil)
  71. lvgl.img_set_src(sign, lvgl.SYMBOL_BATTERY_FULL)
  72. lvgl.obj_align(sign, nil, lvgl.ALIGN_IN_TOP_LEFT, 2, 1)
  73. battery = lvgl.img_create(scr1, nil)
  74. lvgl.img_set_src(battery, lvgl.SYMBOL_NEW_LINE)
  75. lvgl.obj_align(battery, nil, lvgl.ALIGN_IN_TOP_RIGHT, -2, 1)
  76. clock = lvgl.label_create(scr1, nil)
  77. time = misc.getClock()
  78. lvgl.label_set_text(clock, time.hour..":"..time.min..":"..time.sec)
  79. lvgl.obj_align(clock, nil, lvgl.ALIGN_CENTER, 0, 0)
  80. menu_btn = lvgl.btn_create(scr1, nil)
  81. lvgl.obj_set_size(menu_btn, 40, 30)
  82. menu_label = lvgl.label_create(menu_btn, nil)
  83. lvgl.label_set_text(menu_label, "菜单")
  84. lvgl.obj_align(menu_btn, nil, lvgl.ALIGN_IN_BOTTOM_LEFT, 2, -1)
  85. lvgl.obj_set_event_cb(menu_btn, btn_event_cb)
  86. g = lvgl.get_keypad_group()
  87. --lvgl.group_add_obj(g, menu_btn)
  88. ret_btn = lvgl.btn_create(scr1, nil)
  89. lvgl.obj_set_size(ret_btn, 40, 30)
  90. ret = lvgl.label_create(ret_btn, nil)
  91. lvgl.label_set_text(ret, "返回")
  92. lvgl.obj_align(ret_btn, nil, lvgl.ALIGN_IN_BOTTOM_RIGHT, -2, -1)
  93. lvgl.obj_set_event_cb(ret_btn, btn_event_cb)
  94. --lvgl.group_add_obj(g, ret_btn)
  95. menu_page = lvgl.page_create(scr1, nil)
  96. lvgl.page_set_sb_mode(menu_page, lvgl.SB_MODE_AUTO)
  97. lvgl.page_set_scrl_layout(menu_page, lvgl.LAYOUT_COL_M)
  98. lvgl.obj_set_width(menu_page, lvgl.obj_get_width(scr1))
  99. lvgl.obj_set_height(menu_page, 120)
  100. lvgl.obj_align(menu_page, nil, lvgl.ALIGN_CENTER, 0, 0)
  101. menu_opt_0 = lvgl.label_create(menu_page, nil)
  102. --menu_opts["0"] = menu_opt_0
  103. lvgl.label_set_text(menu_opt_0, "选项0")
  104. lvgl.obj_set_width(menu_opt_0, lvgl.page_get_fit_width(menu_page))
  105. lvgl.obj_set_event_cb(menu_opt_0, menu_item_event_cb)
  106. lvgl.group_add_obj(g, menu_opt_0)
  107. menu_opt_1 = lvgl.label_create(menu_page, nil)
  108. --menu_opts["1"] = menu_opt_1
  109. lvgl.label_set_text(menu_opt_1, "选项1")
  110. lvgl.obj_set_width(menu_opt_1, lvgl.page_get_fit_width(menu_page))
  111. lvgl.obj_set_event_cb(menu_opt_1, menu_item_event_cb)
  112. lvgl.group_add_obj(g, menu_opt_1)
  113. menu_opt_2 = lvgl.label_create(menu_page, nil)
  114. --menu_opts["2"] = menu_opt_2
  115. lvgl.label_set_text(menu_opt_2, "选项2")
  116. lvgl.obj_set_width(menu_opt_2, lvgl.page_get_fit_width(menu_page))
  117. lvgl.obj_set_event_cb(menu_opt_2, menu_item_event_cb)
  118. lvgl.group_add_obj(g, menu_opt_2)
  119. menu_opt_3 = lvgl.label_create(menu_page, nil)
  120. --menu_opts["3"] = menu_opt_3
  121. lvgl.label_set_text(menu_opt_3, "选项3")
  122. lvgl.obj_set_width(menu_opt_3, lvgl.page_get_fit_width(menu_page))
  123. lvgl.obj_set_event_cb(menu_opt_3, menu_item_event_cb)
  124. lvgl.group_add_obj(g, menu_opt_3)
  125. lvgl.obj_set_hidden(menu_page, is_hidden)
  126. lvgl.disp_load_scr(scr0)
  127. sys.timerStart(show_scr1, 3000)
  128. end
  129. local function keyMsg(msg)
  130. log.info("keyMsg",msg.key_matrix_row,msg.key_matrix_col,msg.pressed)
  131. if (msg.pressed) then
  132. key_state = lvgl.INDEV_STATE_PR
  133. else
  134. key_state = lvgl.INDEV_STATE_REL
  135. end
  136. key_pending = true;
  137. end
  138. rtos.on(rtos.MSG_KEYPAD,keyMsg)
  139. rtos.init_module(rtos.MOD_KEYPAD,0,0x0F,0x0F)
  140. local function input()
  141. if (key_pending) then
  142. local data = {
  143. type = lvgl.INDEV_TYPE_KEYPAD,
  144. state = key_state,
  145. key = key_number
  146. }
  147. key_pending = false
  148. return data
  149. end
  150. return nil
  151. end
  152. count = 0
  153. local function key_event_gen()
  154. key_pending = true
  155. key_state = (count % 2) == 0 and lvgl.INDEV_STATE_PR or lvgl.INDEV_STATE_REL
  156. --lvgl.page_focus(menu_page, menu_opts[""..(count % 4)])
  157. count = count + 1
  158. end
  159. local function update_time()
  160. time = misc.getClock()
  161. lvgl.label_set_text(clock, time.hour..":"..time.min..":"..time.sec)
  162. end
  163. sys.timerLoopStart(update_sign, 5000)
  164. sys.timerLoopStart(update_time, 1000)
  165. sys.timerLoopStart(key_event_gen, 1000)
  166. -- sys.timerStart(lvgl.init, 5000, create, input)
  167. lvgl.init(create, input)