*/
#define CONFIG_LVGL_SPAN 1
#define CONFIG_LVGL_FS_HELIOS 1
-#define CONFIG_LVGL_GIF_DECODE 1
-#define CONFIG_LVGL_SPINNER 1
#define CONFIG_LCD 1
-#define CONFIG_LVGL_ANIMIMG 1
#define CONFIG_LVGL_KEYBOARD 1
-#define CONFIG_LVGL_CALENDAR 1
-#define CONFIG_LVGL_LED 1
#define CONFIG_VIOCE_CALL 1
#define CONFIG_LVGL_FS_EXTFLASH_HELIOS 1
-#define CONFIG_LVGL_TABVIEW 1
#define CONFIG_LVGL_LINE 1
#define CONFIG_LVGL 1
-#define CONFIG_LVGL_CHART 1
#define CONFIG_LVGL_LIST 1
#define CONFIG_LVGL_MSGBOX 1
-#define CONFIG_LVGL_ARC 1
-#define CONFIG_LVGL_METER 1
#define CONFIG_LVGL_JPG_DECODE 1
#define CONFIG_LVGL_PNG_DECODE 1
#define CONFIG_LVGL_IMGBTN 1
#define CONFIG_GH301x 1
-#define CONFIG_SC7A20 1
#define CONFIG_MBEDTLS 1
+#define CONFIG_SC7A20 1
#define CONFIG_LVGL_WIN 1
-#define CONFIG_LVGL_COLORWHEEL 1
#define CONFIG_LVGL_CANVAS 1
-#define CONFIG_LVGL_SPINBOX 1
#define CONFIG_LVGL_QRCODE 1
#define CONFIG_LVGL_TILEVIEW 1
#define CONFIG_LVGL_HANDLER_TASK_PRIORITY 90
# lvgl option
#
CONFIG_LVGL_PNG_DECODE=y
-CONFIG_LVGL_GIF_DECODE=y
+# CONFIG_LVGL_GIF_DECODE is not set
CONFIG_LVGL_JPG_DECODE=y
CONFIG_LVGL_FS_HELIOS=y
# CONFIG_LVGL_FS_SD_HELIOS is not set
# CONFIG_LVGL_CUSTOMER_FONT_SUPPORT is not set
CONFIG_LVGL_QRCODE=y
# CONFIG_LVGL_FONT is not set
-CONFIG_LVGL_ARC=y
+# CONFIG_LVGL_ARC is not set
CONFIG_LVGL_IMGBTN=y
CONFIG_LVGL_LINE=y
CONFIG_LVGL_LIST=y
-CONFIG_LVGL_CHART=y
-CONFIG_LVGL_LED=y
+# CONFIG_LVGL_CHART is not set
+# CONFIG_LVGL_LED is not set
CONFIG_LVGL_CANVAS=y
CONFIG_LVGL_WIN=y
-CONFIG_LVGL_TABVIEW=y
+# CONFIG_LVGL_TABVIEW is not set
CONFIG_LVGL_TILEVIEW=y
CONFIG_LVGL_MSGBOX=y
-CONFIG_LVGL_METER=y
-CONFIG_LVGL_CALENDAR=y
-CONFIG_LVGL_SPINNER=y
-CONFIG_LVGL_SPINBOX=y
-CONFIG_LVGL_ANIMIMG=y
-CONFIG_LVGL_COLORWHEEL=y
+# CONFIG_LVGL_METER is not set
+# CONFIG_LVGL_CALENDAR is not set
+# CONFIG_LVGL_SPINNER is not set
+# CONFIG_LVGL_SPINBOX is not set
+# CONFIG_LVGL_ANIMIMG is not set
+# CONFIG_LVGL_COLORWHEEL is not set
CONFIG_LVGL_KEYBOARD=y
CONFIG_LVGL_SPAN=y
CONFIG_LVGL_HANDLER_TASK_PRIORITY=90
CONFIG_MBEDTLS=y
#
-# EC800MCN_GA_ALIPAY
+# EG810MCN_GA_ALIPAY
#
CONFIG_LVGL=y
# lvgl option
#
CONFIG_LVGL_PNG_DECODE=y
-CONFIG_LVGL_GIF_DECODE=y
+# CONFIG_LVGL_GIF_DECODE is not set
CONFIG_LVGL_JPG_DECODE=y
CONFIG_LVGL_FS_HELIOS=y
# CONFIG_LVGL_FS_SD_HELIOS is not set
# CONFIG_LVGL_CUSTOMER_FONT_SUPPORT is not set
CONFIG_LVGL_QRCODE=y
# CONFIG_LVGL_FONT is not set
-CONFIG_LVGL_ARC=y
+# CONFIG_LVGL_ARC is not set
CONFIG_LVGL_IMGBTN=y
CONFIG_LVGL_LINE=y
CONFIG_LVGL_LIST=y
-CONFIG_LVGL_CHART=y
-CONFIG_LVGL_LED=y
+# CONFIG_LVGL_CHART is not set
+# CONFIG_LVGL_LED is not set
CONFIG_LVGL_CANVAS=y
CONFIG_LVGL_WIN=y
-CONFIG_LVGL_TABVIEW=y
+# CONFIG_LVGL_TABVIEW is not set
CONFIG_LVGL_TILEVIEW=y
CONFIG_LVGL_MSGBOX=y
-CONFIG_LVGL_METER=y
-CONFIG_LVGL_CALENDAR=y
-CONFIG_LVGL_SPINNER=y
-CONFIG_LVGL_SPINBOX=y
+# CONFIG_LVGL_METER is not set
+# CONFIG_LVGL_CALENDAR is not set
+# CONFIG_LVGL_SPINNER is not set
+# CONFIG_LVGL_SPINBOX is not set
CONFIG_LVGL_ANIMIMG=y
CONFIG_LVGL_COLORWHEEL=y
CONFIG_LVGL_KEYBOARD=y
# CONFIG_UART_SLIP is not set
# CONFIG_POC is not set
CONFIG_GH301x=y
+CONFIG_SC7A20=y
$(BUILD)/uwebsocket.mpy \
$(BUILD)/uping.mpy \
$(BUILD)/ymodem.mpy \
+ $(BUILD)/mgr.mpy \
+ $(BUILD)/ui.mpy \
+ $(BUILD)/ui_setting.mpy \
+ $(BUILD)/alarm.mpy \
+ $(BUILD)/appAlipay.mpy \
+ $(BUILD)/appWechat.mpy \
+ $(BUILD)/ui_WatchFaceScreen.mpy \
+ $(BUILD)/ui_main_menu.mpy \
endif
--- /dev/null
+import modem
+import osTimer
+import utime
+import lvgl as lv
+from ext import EventMesh
+from machine import Timer
+from ui import Screen
+from ext.common import Abstract, LogAdapter
+from machine import RTC
+import ujson
+import ql_fs
+import audio
+from ui import style_img,style_screen,style_font_youyuan_20
+import ntptime
+ntptime.settime(timezone=8)
+"""
+可以添加/编辑闹钟时间、周期;
+最多添加三个闹钟;
+可以删除已有的闹钟;
+可以启用/禁用已有的闹钟;
+保存已添加/编辑的闹钟信息,并在下次运行时恢复。
+"""
+#标题高度
+TITLE_HEIGHT = 30
+#闹钟元素高度
+ALARM_HEIGHT = 75
+ALARM_WIDTH = 224
+#闹钟最大数量
+MAX_ALARM = 3
+#CONT的样式
+style_cont_alarm = lv.style_t()
+style_cont_alarm.init()
+style_cont_alarm.set_bg_color(lv.color_make(0x22, 0x28, 0x3D))
+style_cont_alarm.set_radius(0)
+style_cont_alarm.set_pad_left(0)
+style_cont_alarm.set_pad_right(0)
+style_cont_alarm.set_pad_top(0)
+style_cont_alarm.set_pad_bottom(0)
+
+#字体样式
+# style_font_white = lv.style_t()
+# style_font_white.init()
+# style_font_white.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+# style_font_white.set_text_font_v2("font_22.bin",22,0)
+# style_font_white.set_border_width(0)
+# style_font_white.set_pad_left(0)
+# style_font_white.set_pad_right(0)
+# style_font_white.set_pad_top(0)
+# style_font_white.set_pad_bottom(0)
+
+style_font_yellow = lv.style_t()
+style_font_yellow.init()
+style_font_yellow.set_text_color(lv.color_make(0xF1, 0xA3, 0x3B))
+style_font_yellow.set_text_font_v2("font_22.bin",22,0)
+
+#背景样式
+style_alarm_screen_default = lv.style_t()
+style_alarm_screen_default.init()
+style_alarm_screen_default.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+style_alarm_screen_default.set_border_width(0)
+style_alarm_screen_default.set_pad_left(0)
+style_alarm_screen_default.set_pad_right(0)
+style_alarm_screen_default.set_pad_top(0)
+style_alarm_screen_default.set_pad_bottom(0)
+
+# -------------------------------------------clk_list screen----------------------------------------------------------
+clk_list_screen = lv.obj()
+clk_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_list_title_bg= lv.btn(clk_list_screen)
+clk_list_title_bg.set_size(220,40)
+clk_list_title_bg.set_pos(10,10)
+clk_list_title_bg.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_list_title_bg.set_ext_click_area(40)
+
+clk_list_title = lv.label(clk_list_title_bg)
+clk_list_title.set_pos(0, 15)
+clk_list_title.set_size(240, 40)
+clk_list_title.set_text("闹钟列表")
+clk_list_title.set_long_mode(lv.label.LONG.WRAP)
+clk_list_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+clk_list_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# clk_list_add_btn = lv.btn(clk_list_screen)
+# clk_list_add_btn.set_pos(180,45)
+# clk_list_add_btn.set_size(50,20)
+# clk_list_add_btn.add_style(style_alarm_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# clk_list_add = lv.label(clk_list_screen)
+# clk_list_add.set_pos(180, 45)
+# clk_list_add.set_size(50, 20)
+# clk_list_add.set_text("添加")
+# clk_list_add.set_long_mode(lv.label.LONG.WRAP)
+# clk_list_add.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# clk_list_add.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# clk_list_add.set_ext_click_area(15)
+
+clk_list_screen1_1 = lv.obj(clk_list_screen)
+clk_list_screen1_1.set_pos(0, 65)
+clk_list_screen1_1.set_size(240, 255)
+clk_list_screen1_1.add_style(style_alarm_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+no_add_alarm_img = lv.img(clk_list_screen1_1)
+no_add_alarm_img.set_pos(63, 0)
+no_add_alarm_img.set_size(113, 152)
+no_add_alarm_img.set_src("E:/static/IMAGE_IDLE_SCREEN_ALARM_ICON_NEW.png")
+no_add_alarm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+#暂未添加闹钟
+no_add_alarm = lv.label(clk_list_screen1_1)
+no_add_alarm.set_pos(0, 170)
+no_add_alarm.set_size(240, 50)
+no_add_alarm.set_text("闹钟暂未设置")
+no_add_alarm.set_long_mode(lv.label.LONG.WRAP)
+no_add_alarm.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+no_add_alarm.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# -------------------------------------------clk_edit screen----------------------------------------------------------
+
+clk_edit_screen = lv.obj()
+clk_edit_screen.add_style(style_alarm_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_edit_title = lv.label(clk_edit_screen)
+clk_edit_title.set_pos(0, 0)
+clk_edit_title.set_size(240, TITLE_HEIGHT)
+clk_edit_title.set_text("编辑闹钟")
+clk_edit_title.set_long_mode(lv.label.LONG.WRAP)
+clk_edit_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+clk_edit_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_edit_time = lv.btn(clk_edit_screen)
+clk_edit_time.set_size(224,75)
+clk_edit_time.set_pos(8,58)
+clk_edit_time.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_edit_time_label = lv.label(clk_edit_time)
+clk_edit_time_label.set_pos(60, 15)
+clk_edit_time_label.set_size(100, 40)
+clk_edit_time_label.set_text("编辑时间")
+clk_edit_time_label.set_long_mode(lv.label.LONG.WRAP)
+clk_edit_time_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+clk_edit_time_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_edit_weekday = lv.btn(clk_edit_screen)
+clk_edit_weekday.set_size(224,75)
+clk_edit_weekday.set_pos(8,137)
+clk_edit_weekday.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_edit_weekday_label = lv.label(clk_edit_weekday)
+clk_edit_weekday_label.set_pos(60, 15)
+clk_edit_weekday_label.set_size(100, 40)
+clk_edit_weekday_label.set_text("编辑星期")
+clk_edit_weekday_label.set_long_mode(lv.label.LONG.WRAP)
+clk_edit_weekday_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+clk_edit_weekday_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_delete_alarm = lv.btn(clk_edit_screen)
+clk_delete_alarm.set_size(224,75)
+clk_delete_alarm.set_pos(8,216)
+clk_delete_alarm.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_delete_alarm_label = lv.label(clk_delete_alarm)
+clk_delete_alarm_label.set_pos(60, 15)
+clk_delete_alarm_label.set_size(100, 40)
+clk_delete_alarm_label.set_text("删除闹钟")
+clk_delete_alarm_label.set_long_mode(lv.label.LONG.WRAP)
+clk_delete_alarm_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+clk_delete_alarm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# -------------------------------------------clk_repeat screen----------------------------------------------------------
+clk_repeat_screen = lv.obj()
+clk_repeat_screen.set_scrollbar_mode(0)
+clk_repeat_screen.add_style(style_alarm_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_btn = lv.btn(clk_repeat_screen)
+clk_repeat_btn.set_size(224,40)
+clk_repeat_btn.set_pos(9,40)
+clk_repeat_btn.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label = lv.label(clk_repeat_btn)
+clk_repeat_label.set_pos(8, 10)
+clk_repeat_label.set_size(103, 40)
+clk_repeat_label.set_text("星期一")
+clk_repeat_label.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+clk_repeat_switch = lv.switch(clk_repeat_btn)
+clk_repeat_switch.set_pos(191, 5)
+clk_repeat_switch.set_size(24, 24)
+clk_repeat_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch.set_ext_click_area(20)
+clk_repeat_switch.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+
+clk_repeat_btn1 = lv.btn(clk_repeat_screen)
+clk_repeat_btn1.set_size(224,40)
+clk_repeat_btn1.set_pos(9,90)
+clk_repeat_btn1.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label1 = lv.label(clk_repeat_btn1)
+clk_repeat_label1.set_pos(8, 10)
+clk_repeat_label1.set_size(103, 40)
+clk_repeat_label1.set_text("星期二")
+clk_repeat_label1.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+clk_repeat_switch1 = lv.switch(clk_repeat_btn1)
+clk_repeat_switch1.set_pos(191, 5)
+clk_repeat_switch1.set_size(24, 24)
+clk_repeat_switch1.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch1.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch1.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch1.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch1.set_ext_click_area(20)
+clk_repeat_switch1.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+
+
+clk_repeat_btn2 = lv.btn(clk_repeat_screen)
+clk_repeat_btn2.set_size(224,40)
+clk_repeat_btn2.set_pos(9,140)
+clk_repeat_btn2.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label2 = lv.label(clk_repeat_btn2)
+clk_repeat_label2.set_pos(8, 10)
+clk_repeat_label2.set_size(103, 40)
+clk_repeat_label2.set_text("星期三")
+clk_repeat_label2.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label2.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+clk_repeat_switch2 = lv.switch(clk_repeat_btn2)
+clk_repeat_switch2.set_pos(191, 5)
+clk_repeat_switch2.set_size(24, 24)
+clk_repeat_switch2.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch2.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch2.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch2.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch2.set_ext_click_area(20)
+clk_repeat_switch2.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+
+clk_repeat_btn3 = lv.btn(clk_repeat_screen)
+clk_repeat_btn3.set_size(224,40)
+clk_repeat_btn3.set_pos(9,190)
+clk_repeat_btn3.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label3 = lv.label(clk_repeat_btn3)
+clk_repeat_label3.set_pos(8, 10)
+clk_repeat_label3.set_size(103, 40)
+clk_repeat_label3.set_text("星期四")
+clk_repeat_label3.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label3.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label3.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+clk_repeat_switch3 = lv.switch(clk_repeat_btn3)
+clk_repeat_switch3.set_pos(191, 5)
+clk_repeat_switch3.set_size(24, 24)
+clk_repeat_switch3.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch3.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch3.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch3.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch3.set_ext_click_area(20)
+clk_repeat_switch3.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+
+clk_repeat_btn4 = lv.btn(clk_repeat_screen)
+clk_repeat_btn4.set_size(224,40)
+clk_repeat_btn4.set_pos(9,240)
+clk_repeat_btn4.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label4 = lv.label(clk_repeat_btn4)
+clk_repeat_label4.set_pos(8, 10)
+clk_repeat_label4.set_size(103, 40)
+clk_repeat_label4.set_text("星期五")
+clk_repeat_label4.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label4.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label4.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+clk_repeat_switch4 = lv.switch(clk_repeat_btn4)
+clk_repeat_switch4.set_pos(191, 5)
+clk_repeat_switch4.set_size(24, 24)
+clk_repeat_switch4.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch4.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch4.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch4.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch4.set_ext_click_area(20)
+clk_repeat_switch4.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+
+clk_repeat_btn5 = lv.btn(clk_repeat_screen)
+clk_repeat_btn5.set_size(224,40)
+clk_repeat_btn5.set_pos(9,290)
+clk_repeat_btn5.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label5 = lv.label(clk_repeat_btn5)
+clk_repeat_label5.set_pos(8, 10)
+clk_repeat_label5.set_size(103, 40)
+clk_repeat_label5.set_text("星期六")
+clk_repeat_label5.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label5.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label5.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+clk_repeat_switch5 = lv.switch(clk_repeat_btn5)
+clk_repeat_switch5.set_pos(191, 5)
+clk_repeat_switch5.set_size(24, 24)
+clk_repeat_switch5.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch5.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch5.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+clk_repeat_switch5.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch5.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch5.set_ext_click_area(20)
+
+clk_repeat_btn6 = lv.btn(clk_repeat_screen)
+clk_repeat_btn6.set_size(224,40)
+clk_repeat_btn6.set_pos(9,340)
+clk_repeat_btn6.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+clk_repeat_label6 = lv.label(clk_repeat_btn6)
+clk_repeat_label6.set_pos(8, 10)
+clk_repeat_label6.set_size(103, 40)
+clk_repeat_label6.set_text("星期日")
+clk_repeat_label6.set_long_mode(lv.label.LONG.DOT)
+clk_repeat_label6.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_repeat_label6.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+clk_repeat_switch6 = lv.switch(clk_repeat_btn6)
+clk_repeat_switch6.set_pos(191, 5)
+clk_repeat_switch6.set_size(24, 24)
+clk_repeat_switch6.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN)
+clk_repeat_switch6.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR)
+clk_repeat_switch6.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.KNOB)
+clk_repeat_switch6.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+clk_repeat_switch6.set_ext_click_area(20)
+clk_repeat_switch6.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF),lv.PART.INDICATOR| lv.STATE.CHECKED)
+
+# -------------------------------------------clk_repeat screen----------------------------------------------------------
+clk_time_screen = lv.obj()
+clk_time_screen.set_scrollbar_mode(0)
+clk_time_screen.add_style(style_alarm_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+#hour的样式
+style_roller_hour_main = lv.style_t()
+style_roller_hour_main.init()
+style_roller_hour_main.set_radius(6)
+style_roller_hour_main.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+style_roller_hour_main.set_bg_opa(102)
+style_roller_hour_main.set_border_width(0)
+
+style_roller_hour_selected = lv.style_t()
+style_roller_hour_selected.init()
+style_roller_hour_selected.set_radius(6)
+style_roller_hour_selected.set_bg_color(lv.color_make(0x2c, 0x2c, 0x2f))
+style_roller_hour_selected.set_border_width(0)
+
+#创建hour的roller
+clk_time_roller_1 = lv.roller(clk_time_screen)
+clk_time_roller_1.set_width(50)
+clk_time_roller_1.set_pos(60, 50)
+clk_time_roller_1.set_options(
+ "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23",
+ lv.roller.MODE.NORMAL)
+clk_time_roller_1.set_visible_row_count(5)
+clk_time_roller_1.add_style(style_roller_hour_main, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_time_roller_1.add_style(style_roller_hour_selected, lv.PART.SELECTED | lv.STATE.DEFAULT)
+
+#min的样式
+#创建min的roller
+clk_time_roller_2 = lv.roller(clk_time_screen)
+clk_time_roller_2.set_width(50)
+clk_time_roller_2.set_pos(130, 50)
+clk_time_roller_2.set_options(
+ "00\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59",
+ lv.roller.MODE.NORMAL)
+clk_time_roller_2.set_visible_row_count(5)
+clk_time_roller_2.add_style(style_roller_hour_main, lv.PART.MAIN | lv.STATE.DEFAULT)
+clk_time_roller_2.add_style(style_roller_hour_selected, lv.PART.SELECTED | lv.STATE.DEFAULT)
+
+#完成按钮
+alarm_ok= lv.btn(clk_time_screen)
+alarm_ok.set_size(150,40)
+alarm_ok.set_pos(45,250)
+alarm_ok.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+alarm_ok.set_ext_click_area(20)
+
+label_ok = lv.label(alarm_ok)
+label_ok.set_pos(30, 20)
+label_ok.set_size(100, 40)
+label_ok.set_text("完成")
+label_ok.set_long_mode(lv.label.LONG.DOT)
+label_ok.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+label_ok.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+#闹钟信息
+alarm_list = []
+
+class ClockManager(Abstract):
+ def __init__(self):
+ super().__init__()
+ self.rtc = RTC()
+ self.days = 0
+ self.idx = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("push_clock_info", self.set)
+ EventMesh.subscribe("read_alarminjson", self.read_alarminjson)
+ EventMesh.subscribe("add_alarm", self.add_alarm)
+ EventMesh.subscribe("remove_alarm", self.remove_alarm)
+ EventMesh.subscribe("set_rtc_alarm", self.set_rtc_alarm)
+
+ def set(self, event, msg):
+ global alarm_list
+ print("msg = {}".format(msg))
+ idx = msg.get("idx")
+ print("修改第{}个闹钟信息{}".format(idx,alarm_list[idx]))
+ alarm_list[idx]["hour"] = msg["hour"]
+ alarm_list[idx]["minute"] = msg["minute"]
+ alarm_list[idx]["days"] = msg["days"]
+ alarm_list[idx]["enabled"] = msg["enabled"]
+ alarm_list[idx]["repeart"] = msg["repeart"]
+ with open("/ext/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:
+ ujson.dump(alarm_list,fd)
+
+ def read_alarminjson(self, event, msg):
+ IFEXIST = ql_fs.path_exists("/ext/static/storage_file/alarm_msg.json")
+ global alarm_list
+ if IFEXIST == False:
+ with open("/ext/static/storage_file/alarm_msg.json","w",encoding='utf-8') as fd:
+ ujson.dump(alarm_list,fd)
+ print("闹钟信息加载完成")
+ else:
+ with open("/ext/static/storage_file/alarm_msg.json","r",encoding='utf-8') as fd:
+ alarm_list = ujson.load(fd)
+
+ def add_alarm(self, event, msg):
+ global alarm_list
+ idx = len(alarm_list)
+ print("add_here-----idx:",idx)
+ alarm_list.append({"idx": idx, "hour": 0, "minute": 0, "days": [], "enabled": False,"repeart":1})
+ with open("/ext/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:
+ ujson.dump(alarm_list,fd)
+
+ def remove_alarm(self, event, msg):
+ global alarm_list
+ print("ddddddddddddddddddd:",msg)
+ idx = msg.get("idx")
+ print("delete_here1-----{},{}:".format(idx,msg))
+
+ for i, alarm in enumerate(alarm_list):
+ print("delete_here2-----{},{}:".format(i,alarm))
+
+ if alarm["idx"] == idx:
+ del alarm_list[i]
+ print("delete_here3-----",alarm_list)
+
+ #删除闹钟后,对idx重新排序
+ if alarm_list:
+ for j in range(i,len(alarm_list)):
+ alarm_list[j]["idx"] -= 1
+ print("delete_here4-----",alarm_list)
+
+ with open("/ext/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:
+ ujson.dump(alarm_list,fd)
+
+ def _rtc_callback(self,args):
+ print("---!!!!!!alarm_ring!!!!!!!---,idx:",args)
+ global alarm_list
+ EventMesh.publish("read_alarminjson")
+ idx = self.idx
+ print("单次闹钟关闭:",idx)
+ #判断是否是单次闹钟,如果是,则将开关状态设置为关闭
+ print("关闭1:",alarm_list [idx]["days"])
+ if not alarm_list [idx]["days"] :
+ print("关闭2:",alarm_list [idx]["days"])
+ alarm_list[idx]["enabled"] = False
+ with open("/ext/static/storage_file/alarm_msg.json", 'w+',encoding='utf-8') as fd:
+ ujson.dump(alarm_list,fd)
+
+ #设置下一个闹钟
+ EventMesh.publish("set_rtc_alarm")
+ get_hr_state = EventMesh.publish("get_hr_state")
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+ if get_hr_state != None or get_spo2_state != None:
+ if get_hr_state != 1 and get_spo2_state != 1:
+ EventMesh.publish("load_screen", {"screen": "popup_alarm"})
+
+ # def _reset_rtc_alarm_time(self, args):
+ # print("---alarm_ring---")
+
+ def set_rtc_alarm(self,event,msg):
+ global alarm_list
+ EventMesh.publish("read_alarminjson")
+ rtc_now_time = self.rtc.datetime()
+
+ print("00获取所有闹钟信息:{}".format(alarm_list))
+ new_alarm_list = [(alarm['hour'], alarm['minute'], alarm['days'],alarm["idx"]) for alarm in alarm_list if alarm['enabled']]
+
+ print("01获取开启的闹钟:{}".format(new_alarm_list))
+ start_day = 0 # 周日
+ start_minute = 0 # 0点
+ end_minute = 60*24*7
+ minute_list = []
+
+ if not new_alarm_list:
+ print("02当前并没有开启的闹钟,退出闹钟设置程序:{}".format(new_alarm_list))
+ self.rtc.enable_alarm(0)
+ return
+
+ for alarm in new_alarm_list:
+ hour, minute, days,idx = alarm
+ #如果没有选择day,则表示是单次闹钟
+ if days:
+ for day in days:
+ minute_list.append(hour*60 + minute + (day-start_day)*24*60)
+
+ else:
+ #如果当前时间没超过闹钟设置时间,则设置为今天,否则设置为明天
+ if (hour*60 + minute) > (rtc_now_time[4]*60 + rtc_now_time[5]):
+ minute_list.append(hour*60 + minute + (rtc_now_time[3]-start_day)*24*60)
+ print("设置单次闹钟:{}".format(new_alarm_list))
+
+ else:
+ minute_list.append(hour*60 + minute + (rtc_now_time[3]-start_day+1)*24*60)
+
+ total_minutes = sorted(minute_list)
+ print("02以周日00:00为起点,计算所有开启闹钟的total_min并排序:{}".format(total_minutes))
+
+ #获取当前时间 (2020, 9, 11, 5, 15, 43, 23, 0)
+ # rtc_now_time = (2020, 9, 11, 6, 11, 43, 23, 0)
+ # rtc_now_time = self.rtc.datetime()
+
+ print("03当前的rtc时间:{}".format(rtc_now_time))
+
+ current_minute = rtc_now_time[4]*60 + rtc_now_time[5] + (rtc_now_time[3]-start_day)*24*60
+ print("04当前的rtc_total_minutes:{}".format(current_minute))
+
+ if current_minute in minute_list:
+ print("当前时间和闹钟列表时间重复,删除重复的时间")
+ minute_list.remove(current_minute)
+
+ minute_list.append(current_minute)
+
+ # 对分钟数列表进行排序,并获取当前时间分钟数所在的位置
+ minute_list = sorted(minute_list)
+ current_index = minute_list.index(current_minute)
+
+ print("05将当前时间插入min_list后的min_list:{}".format(minute_list))
+ print("06当前时间所在位置:{}".format(current_index))
+
+ next_index = current_index + 1
+ if next_index >= len(minute_list):
+ next_minute = minute_list[0]
+ print("07下一个闹钟的分钟数:", next_minute)
+ else:
+ next_minute = minute_list[next_index]
+ print("07下一个闹钟的分钟数:", next_minute)
+
+ if next_minute >= current_minute:
+ interval_minute = next_minute - current_minute
+ print("08距离下一次响铃的的分钟数:", interval_minute)
+ else:
+ interval_minute = end_minute - current_minute + next_minute
+ print("08距离下一次响铃的的分钟数:", interval_minute)
+
+ #反向获取时间戳
+ time = utime.localtime()
+ print("09获取utime的时间戳:", time)
+ rtc_mktime = utime.mktime(time)
+ print("10反向获取utime的mktime:", rtc_mktime)
+
+ #加上下一次响铃需要的时间
+ next_alarm_mktime = rtc_mktime + interval_minute*60
+ print("11下一次响铃的mktime:", next_alarm_mktime)
+
+ #格式化时间戳,得到下一次闹钟的时间
+ next_alarm_time = utime.localtime(next_alarm_mktime)
+ print("12下一次响铃的准确时间:", next_alarm_time)
+ #将时间转换为rtc的格式
+ data_l = [2021, 7, 9, 5, 12, 30, 0, 0]
+ #给rtc时间赋值
+ data_l[0] = next_alarm_time[0] #year
+ data_l[1] = next_alarm_time[1] #month
+ data_l[2] = next_alarm_time[2] #day
+ data_l[4] = next_alarm_time[3] #hour
+ data_l[5] = next_alarm_time[4] #minute
+ #转换为元组
+ data_e=tuple(data_l)
+ print("13将该时间转换为RTC元组:", data_e)
+
+ for alarm in alarm_list:
+ if not alarm["days"] and alarm["enabled"]:
+ print("关闭666:",alarm["idx"])
+ if alarm["hour"] == data_l[4] and alarm["minute"]==data_l[5]:
+ self.idx = alarm["idx"]
+ #设置rtc闹钟时间
+ self.rtc.register_callback(self._rtc_callback)
+
+ FLAG = self.rtc.set_alarm(data_e)
+ if FLAG == 0:
+ print("14成功设置rtc的到期时间:", data_e)
+ else:
+ print("14设置rtc的到期时间失败:", data_e)
+
+ self.rtc.enable_alarm(1)
+
+#闹钟弹窗
+popup_alarm_screen = lv.obj()
+popup_alarm_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+popup_alarm_img = lv.img(popup_alarm_screen)
+popup_alarm_img.set_pos(63, 20)
+popup_alarm_img.set_size(113, 152)
+popup_alarm_img.set_src("E:/static/IMAGE_IDLE_SCREEN_ALARM_ICON_NEW.png")
+popup_alarm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+popup_alarm_time = lv.label(popup_alarm_screen)
+popup_alarm_time.set_pos(0, 200)
+popup_alarm_time.set_size(240, 50)
+popup_alarm_time.set_text(" ")
+popup_alarm_time.set_long_mode(lv.label.LONG.WRAP)
+popup_alarm_time.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+popup_alarm_time.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+#闹钟列表
+class PopupAlarmScreen(Screen):
+ NAME = "popup_alarm"
+ def __init__(self):
+ super().__init__()
+ self.meta = popup_alarm_screen
+ self.timer = osTimer()
+ self.aud = audio.Audio(0)
+ self.alarm_count = 0
+
+ def initialization(self):
+ self.alarm_count = 0
+ self.timer.start(3*1000,1,self.exit_alarm_page)
+ time = EventMesh.publish("screen_get_time")#获取系统时间
+ popup_alarm_time.set_text("{}:{}".format("%02d"%(time[0][0]),"%02d"%(time[0][1])))
+
+
+ def Close(self):
+ self.alarm_count=0
+ self.timer.stop()
+ self.aud.stop()
+
+ def exit_alarm_page(self,*arges):
+ self.alarm_count+=1
+ if self.alarm_count > 10:
+ self.alarm_count = 0
+ self.aud.stop()
+ self.timer.stop()
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ return
+ self.aud.play(1, 1, 'E:/static/audio_audio_haixiu.mp3') #播放声音
+
+
+
+ def done_left_to_right(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_right_to_left(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_bottom_to_top(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_top_to_bottom(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+#闹钟列表
+class ClkListScreen(Screen):
+ NAME = "clk_list"
+ def __init__(self):
+ super().__init__()
+ self.meta = clk_list_screen
+ self.clock_list = []
+ # clk_list_add_btn.add_event_cb(lambda e: self.add_alarm_btn(e),
+ # lv.EVENT.PRESSED, None)
+ self.weekdays_list = ["日","一","二","三","四","五","六"]
+ EventMesh.subscribe("push_update_alarm_show", self.update_show_info)
+ self.alarm_show_list = lv.obj(clk_list_screen)
+ self.timer=osTimer()
+
+
+ def initialization(self):
+ EventMesh.publish("read_alarminjson")
+ EventMesh.publish("set_rtc_alarm")
+ print("n闹钟列表初始化!!")
+ self.alarm_draw_btn()
+
+ def update_show_info(self,event,msg):
+ EventMesh.publish("read_alarminjson")
+ self.timer.start(1*1000,0,self.delay_update)
+ def delay_update(self,*agrs):
+ EventMesh.publish("set_rtc_alarm")
+ self.alarm_draw_btn()
+
+
+ def alarm_draw_btn(self):
+ global alarm_list
+ self.clock_list = alarm_list
+ IFEXIST = ql_fs.path_exists("/ext/static/storage_file/alarm_msg.json")
+ if IFEXIST == True:
+ if self.clock_list:
+ # print("nalarm_list:{}".format(alarm_list))
+ no_add_alarm_img.add_flag(lv.obj.FLAG.HIDDEN)
+ no_add_alarm.add_flag(lv.obj.FLAG.HIDDEN)
+ self.alarm_show_list.delete()#先删除一次控件
+ self.alarm_show_list = lv.obj(clk_list_screen)
+ self.alarm_show_list.set_pos(0, 65)
+ self.alarm_show_list.set_size(240, 255)
+ self.alarm_show_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ self.alarm_show_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ #print("菜单的孩子个数:",clk_list_screen1.get_child_cnt())
+ num = 0
+ for i ,each in enumerate(self.clock_list):
+
+ _btn = lv.btn(self.alarm_show_list)
+ _btn.set_size(230,75)
+ _btn.set_pos(8,79*i)
+ _btn.add_style(style_cont_alarm, lv.PART.MAIN | lv.STATE.DEFAULT)
+ _btn.add_event_cb(lambda e: self.edit_alarm(e),
+ lv.EVENT.CLICKED, None)
+
+ num = each["idx"]
+ # print("------刷新闹钟列表噢:{} num:{}",each,num)
+ _btn_label1 = lv.label(_btn)
+ _btn_label1.set_pos(50, 0)
+ _btn_label1.set_size(0, 0)
+ _btn_label1.set_text(str(num))
+
+ _btn_label2 = lv.label(_btn)
+ _btn_label2.set_pos(8, 10)
+ _btn_label2.set_size(97, 40)
+ _btn_label2.set_text("%02d" % each["hour"] + ":"+"%02d" % each["minute"])
+ # _btn_label2.set_text(str(each["days"]))
+
+ _btn_label2.set_long_mode(lv.label.LONG.DOT)
+ _btn_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ _btn_label2.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ _new_list = sorted(each["days"])
+ repeart = each["repeart"]
+ _output = [self.weekdays_list[x] for x in _new_list]
+ _btn_label3 = lv.label(_btn)
+ _btn_label3.set_pos(10, 40)
+ _btn_label3.set_size(200, 40)
+ print("_new_list:{} repeart:{}".format(_new_list,repeart))
+ if repeart == 1:
+ _btn_label3.set_text("一次")
+ elif repeart == 2:
+ _btn_label3.set_text("每天")
+ else:
+ _btn_label3.set_text(",".join(_output))
+ _btn_label3.set_long_mode(lv.label.LONG.DOT)
+ _btn_label3.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ _btn_label3.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ _btn_switch = lv.switch(_btn)
+ _btn_switch.set_pos(174, 29)
+ _btn_switch.set_size(50, 25)
+ _btn_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.INDICATOR)
+ _btn_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.INDICATOR| lv.STATE.CHECKED)
+ _btn_switch.add_event_cb(lambda e:
+ self.switch_event_cb(e),
+ lv.EVENT.VALUE_CHANGED,
+ None)
+
+ _btn_switch.set_style_bg_color(lv.color_make(0xf1, 0xa3, 0x3b),lv.PART.KNOB| lv.STATE.CHECKED)
+ _btn_switch.set_style_bg_color(lv.color_make(0x3d, 0x3d, 0x3d),lv.PART.KNOB)
+
+ _btn_switch.set_ext_click_area(40)
+ if each["enabled"]:
+ _btn_switch.add_state(lv.STATE.CHECKED)
+ else:
+ _btn_switch.clear_state(lv.STATE.CHECKED)
+ else:
+ no_add_alarm_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ no_add_alarm.clear_flag(lv.obj.FLAG.HIDDEN)
+ self.alarm_show_list.add_flag(lv.obj.FLAG.HIDDEN)
+ else:
+ no_add_alarm_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ no_add_alarm.clear_flag(lv.obj.FLAG.HIDDEN)
+ self.alarm_show_list.add_flag(lv.obj.FLAG.HIDDEN)
+
+ def edit_alarm(self, e):#暂时屏蔽
+ return
+ idx = int(e.get_target().get_child(0).get_text())
+ print("edit!!!!!!!!!!!!:",idx)
+ clock_info = self.clock_list[idx]
+ clock_info["idx"] = idx
+
+ EventMesh.publish("load_screen", {"screen": "new_edit_clk","meta": clock_info})
+
+ def add_alarm_btn(self, e):
+
+ if len(self.clock_list) >= 3:
+ return
+ print("!!!!!!!!!!!!!!!!!------")
+ EventMesh.publish("add_alarm")
+ self.alarm_draw_btn()
+
+ def switch_event_cb(self, e):
+ obj = e.get_target()
+ idx = int(e.get_target().get_parent().get_child(0).get_text())
+ clock_info = self.clock_list[idx]
+ print("修改闹钟开关:",self.clock_list[idx])
+ clock_info["idx"] = idx
+ if obj.has_state(lv.STATE.CHECKED):
+ print("ON ~~~")
+ clock_info["enabled"] = True
+ else:
+ print("OFF ~~~")
+ clock_info["enabled"] = False
+ EventMesh.publish("push_clock_info", clock_info)
+ EventMesh.publish("set_rtc_alarm")
+
+ print("sw_event_cb ~~~")
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+
+class NewEditClk(Screen):
+ NAME = "new_edit_clk"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = clk_edit_screen
+ clk_edit_weekday.add_event_cb(lambda e: self.edit_weekday(e), lv.EVENT.CLICKED, None)
+ clk_edit_time.add_event_cb(lambda e: self.edit_time(e), lv.EVENT.CLICKED, None)
+ clk_delete_alarm.add_event_cb(lambda e: self.delete_alarm(e), lv.EVENT.CLICKED, None)
+
+ def initialization(self):
+ print("hahahahh",self.meta_info["idx"])
+
+ def delete_alarm(self, e):
+ EventMesh.publish("remove_alarm",self.meta_info)
+
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+
+ def edit_weekday(self,e):
+ self.load_screen(e, {"screen": "clk_period",
+ "meta": self.meta_info})
+
+ def edit_time(self,e):
+ self.load_screen(e, {"screen": "clk_time",
+ "meta": self.meta_info})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+class CLKTimeScreen(Screen):
+ NAME = "clk_time"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = clk_time_screen
+ # alarm_ok.add_event_cb(lambda e: self.handler(e), lv.EVENT.PRESSED, None)
+
+ def initialization(self):
+ roll_1_v = self.meta_info["hour"]
+ roll_2_v = self.meta_info["minute"]
+
+ clk_time_roller_1.set_selected(int(roll_1_v), lv.ANIM.ON)
+ clk_time_roller_2.set_selected(int(roll_2_v), lv.ANIM.ON)
+
+ def handler(self, e):
+ option_1 = " " * 10
+ option_2 = " " * 10
+ clk_time_roller_2.get_selected_str(option_2, len(option_2))
+ clk_time_roller_1.get_selected_str(option_1, len(option_1))
+ option_1_strip = option_1.strip()[:2]
+ option_2_strip = option_2.strip()[:2]
+ print("option_1_strip = {} option_2_strip = {}".format(option_1_strip, option_2_strip))
+ self.meta_info["hour"] = int(option_1_strip)
+ self.meta_info["minute"] = int(option_2_strip)
+ EventMesh.publish("push_clock_info", self.meta_info)
+
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+class ClkPeriod(Screen):
+ NAME = "clk_period"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = clk_repeat_screen
+ self.choice_list=[]
+ self.alarm_info={}
+ self.clk_switch_list = [
+ clk_repeat_switch6,
+ clk_repeat_switch,
+ clk_repeat_switch1,
+ clk_repeat_switch2,
+ clk_repeat_switch3,
+ clk_repeat_switch4,
+ clk_repeat_switch5,
+
+ ]
+
+ clk_repeat_switch.add_event_cb(lambda e: self.save_choice(e,1), lv.EVENT.VALUE_CHANGED, None)
+ clk_repeat_switch1.add_event_cb(lambda e: self.save_choice(e,2), lv.EVENT.VALUE_CHANGED, None)
+ clk_repeat_switch2.add_event_cb(lambda e: self.save_choice(e,3), lv.EVENT.VALUE_CHANGED, None)
+ clk_repeat_switch3.add_event_cb(lambda e: self.save_choice(e,4), lv.EVENT.VALUE_CHANGED, None)
+ clk_repeat_switch4.add_event_cb(lambda e: self.save_choice(e,5), lv.EVENT.VALUE_CHANGED, None)
+ clk_repeat_switch5.add_event_cb(lambda e: self.save_choice(e,6), lv.EVENT.VALUE_CHANGED, None)
+ clk_repeat_switch6.add_event_cb(lambda e: self.save_choice(e,0), lv.EVENT.VALUE_CHANGED, None)
+
+ def initialization(self):
+ self.choice_list = self.meta_info["days"]
+ self.alarm_info = self.meta_info
+ print("初始化:{},{}".format(self.alarm_info,self.choice_list))
+
+
+ for i in range(0,6):
+ if i in self.choice_list:
+ self.clk_switch_list[i].add_state(lv.STATE.CHECKED)
+
+ else:
+ self.clk_switch_list[i].clear_state(lv.STATE.CHECKED)
+
+
+ def save_choice(self,e,i):
+ if i in self.choice_list:
+ self.clk_switch_list[i].clear_state(lv.STATE.CHECKED)
+ self.choice_list.remove(i)
+ print("here1-----",self.choice_list,i)
+
+ else:
+ self.clk_switch_list[i].add_state(lv.STATE.CHECKED)
+ self.choice_list.append(i)
+ print("here2-----",self.choice_list,i)
+
+ print("here-----",self.choice_list)
+ self.alarm_info["days"] = self.choice_list
+
+ print("编辑星期:{}".format(self.alarm_info))
+ if self.alarm_info["days"] == []:
+ self.alarm_info["repeart"] = 1
+ else:
+ num = self.alarm_info["days"]
+ if len(num) >= 7:
+ self.alarm_info["repeart"] = 2
+ else:
+ self.alarm_info["repeart"] = 3
+
+ EventMesh.publish("push_clock_info", self.alarm_info)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "clk_list"})
+
--- /dev/null
+import modem
+import sim
+import osTimer
+import ALIPAY
+from ext.common import Lock, Abstract, LogAdapter
+import utime
+import lvgl as lv
+from ext import EventMesh
+from machine import Timer
+from ext import constants
+from misc import Power
+import pm
+from ui import Screen
+
+style_font_youyuan_20 = lv.style_t()
+style_font_youyuan_20.init()
+style_font_youyuan_20.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+style_font_youyuan_20.set_text_font_v2("font_22.bin",22,0)
+
+style_btn_alipay = lv.style_t()
+style_btn_alipay.init()
+style_btn_alipay.set_radius(20)
+style_btn_alipay.set_bg_opa(lv.OPA.COVER)
+style_btn_alipay.set_bg_color(lv.palette_main(lv.PALETTE.BLUE))
+style_btn_alipay.set_bg_grad_color(lv.palette_darken(lv.PALETTE.BLUE, 2))
+style_btn_alipay.set_bg_grad_dir(lv.GRAD_DIR.VER)
+
+style_cont_alipay = lv.style_t()
+style_cont_alipay.init()
+style_cont_alipay.set_radius(20)
+style_cont_alipay.set_bg_opa(lv.OPA.COVER)
+style_cont_alipay.set_bg_color(lv.color_make(0xff, 0xff, 0xff))
+
+
+class Alipay(Abstract):
+ """
+ 支付宝
+ """
+ def __init__(self):
+ self.imei = modem.getDevImei()
+ if self.imei == None :
+ self.imei = "1111"
+ self.iccid = sim.getIccid()
+ if self.iccid == -1 :
+ self.iccid = "1111"
+ self.imsi = sim.getImsi()
+ if self.imsi == -1:
+ self.imsi = "1111"
+ self.mac = "123456"
+ self.sn = modem.getDevSN()
+ self.vendor = "ZHSX"
+ self.product_name = "ZHSX"
+ self. product_model = modem.getDevModel()
+ self.pk_alipay = "voPuTFiLcdA"
+ self.pk_aliyun = "a1c7Ojs6HMR"
+ self.ps_aliyun = "TxPFIJ5F1kwa0zO3"
+ self.product_type = 0
+ self.timer_Alipay = osTimer()
+
+
+ self.is_simcard_identify = 255
+ self.is_init = 255
+ self.upay_bound = 0 #绑定结果
+ self.alipay = ALIPAY(self.imei, self.iccid,self.imsi, self.mac, self.sn,self.vendor, self.product_name, self. product_model, self.pk_alipay , self.pk_aliyun, self.ps_aliyun,0)
+ #self.alipay = ALIPAY("867387060319491", "898604293619F0549750","460044917509047", "123456", "P1Q22I80C0007530P","ZHIHUISHIXUN", "ZHIHUISHIXUN", "EC800M", "uHTfYqOlGlA" , "a15PcyZ3IHA", "kOGGPhtXAg1Lz1vg",0)
+ self.alipay.register_print()
+ self.alipay.set_log_limit(0)
+ if self.is_init != 0:
+ id2_st = bytearray([0])
+ id2_ret = self.alipay.id2_init()
+ #print("id2_ret:%d"%id2_ret)
+ self.alipay.id2_check_status(id2_st)
+ #print("id2_st:",str(id2_st))
+ if id2_st[0] == 1:
+ self.is_init = self.alipay.pay_init(90000, 90000,\
+ 2000, 2000, \
+ 200, 40*1024, \
+ self.upay_display_notify_cb, 0)
+ #alipay.pay_init(90000, 90000,2000, 2000,200, 40*1024,upay_display_notify_cb, 0)
+ print("self.is_pay_init:%d"%self.is_init)
+ if self.is_init == 0 :
+ self.alipay.enable_collectioncode(1)
+ self.timer_Alipay.start(20000, 1, self.timeout_Alipay)
+ def post_processor_after_instantiation(self):
+ print("post_processor_after_instantiation")
+
+
+
+ EventMesh.subscribe("alipay_1", self.alipay_1)
+ EventMesh.subscribe("get_payment_code", self.get_payment_code)
+ EventMesh.subscribe("get_collect_code", self.get_collect_code)
+ EventMesh.subscribe("get_parent_code", self.get_parent_code)
+ EventMesh.subscribe("get_alipay_init", self.get_alipay_init)
+ EventMesh.subscribe("alipay_exit", self.alipay_exit)
+
+ def timeout_Alipay(self, *args, **kwargs):
+ #print("timeout_Alipay1:{}".format(EventMesh.publish(constants.EVENT.GET_CONNECT)))
+ time = utime.localtime()
+
+ if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and self.alipay != None and (self.is_simcard_identify != 0 or time[3] == 0 or time[3] == 12):
+ #if self.alipay != None and (self.is_simcard_identify != 0 or time[3] == 0 or time[3] == 12):
+ self.is_simcard_identify = self.alipay.start_simcard_identify()
+ print("is_simcard_identify:%d"%self.is_simcard_identify)
+
+ #if self.is_simcard_identify == 0 and EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 and self.is_init != 0:
+ if self.is_init != 0:
+ id2_st = bytearray([0])
+ id2_ret = self.alipay.id2_init()
+ #print("id2_ret:%d"%id2_ret)
+ self.alipay.id2_check_status(id2_st)
+ #print("id2_st:",str(id2_st))
+ if id2_st[0] == 1:
+ self.is_init = self.alipay.pay_init(90000, 90000,\
+ 2000, 2000, \
+ 200, 40*1024, \
+ self.upay_display_notify_cb, 0)
+ #alipay.pay_init(90000, 90000,2000, 2000,200, 40*1024,upay_display_notify_cb, 0)
+
+ if self.is_init == 0 :
+ self.alipay.enable_collectioncode(1)
+ print("self.is_pay_init:%d"%self.is_init)
+
+ def upay_display_notify_cb(self,arg):
+ #print("upay_display_notify_cb!!!!!!!!!!!!!!!!!!!!")
+ cmd = arg[0]
+ rsp_code = arg[1]
+ result = arg[2]
+ result_len = arg[3]
+ userdata = arg[4]
+ print("upay_display_notify_cb:\r\ncmd:{}\r\nrsp_code:{}".format(cmd,rsp_code))
+
+ if rsp_code == 4 :
+ # 打印获取到的绑定码
+ print("bindcode[%d]: %s\n"%(result_len, result))
+ #查询绑定结果
+ utime.sleep_ms(1000);
+ cmd_t = 2 #UPAY_MSG_GET_BINDING_RESULT;
+ userdata_t = None
+ args = None
+ ret = self.alipay.msg_send(cmd_t,args,userdata_t)
+ #EventMesh.subscribe("get_binding_code", self.get_binding_code)
+ #EventMesh.publish("load_screen", {"screen": "alipay_invite","meta":{"result":result,"result_len":result_len}})
+ EventMesh.publish("load_screen", {"screen": "alipay_invite","meta":str(result)})
+
+ #case UPAY_RSP_PROCESSING:
+ elif rsp_code == 1:
+ #轮询绑定结果
+ if cmd == 2 :
+ print("upay_display_notify_cb: bind processing\n")
+
+ elif rsp_code == 5:
+ #获取付款码回调
+ print("upay_display_notify_cb: paycode[%d]: %s\n"%( result_len, result))
+ EventMesh.publish("load_screen", {"screen": "alipay_paycode","meta":str(result)})
+
+ # 查询付款结果
+ print("upay_display_notify_cb: get payment result\n")
+ utime.sleep_ms(500)
+ cmd_t = 4
+ userdata_t = None
+ args = None
+ ret = self.alipay.msg_send(cmd_t,args,userdata_t)
+
+ elif rsp_code == 6:
+ #打印获取到的收款码
+ print("upay_display_notify_cb: collectioncode[%d]: %s\n"%(result_len, result))
+ EventMesh.publish("load_screen", {"screen": "alipay_collect","meta":str(result)})
+ utime.sleep_ms(500)
+
+ elif rsp_code == 7:
+ #打印家长控制码
+ print("upay_display_notify_cb: parentctrlcode[%d]: %s\n"%(result_len, result) )
+ EventMesh.publish("load_screen", {"screen": "alipay_parent","meta":str(result)})
+
+
+ elif rsp_code == 8:
+ #付款结果
+ print("upay_display_notify_cb: order result, bitmap size %d\n"%(result_len))
+ EventMesh.publish("load_screen", {"screen": "alipay_pay_success","meta":str(result)})
+
+ elif rsp_code == 3:
+ #绑定成功
+ print("upay_display_notify_cb: bind complete\n")
+ EventMesh.publish("load_screen", {"screen": "alipay_success"})
+
+ self.upay_bound = 1
+
+ elif rsp_code == 2:
+ # 绑定进度
+ print("upay_display_notify_cb: bind progress %s\n"%(str(result)))
+ EventMesh.publish("load_screen", {"screen": "alipay_inviting"})
+
+ elif rsp_code == 11:
+ # 解绑成功
+ print("upay_display_notify_cb: unbind complete\n")
+
+
+ elif rsp_code == 9:
+ #主扫码解析结果
+ print("%s: recv scancode info\n")
+ #upay_scancode_info_t *scancode_info = (upay_scancode_info_t *)result
+ seller_name = result[10]#未验证
+ amount = result[20]#未验证
+ print("upay_display_notify_cb: seller name %s, amount %s\n"%(seller_name, amount))
+
+ #发起主扫支付
+ cmd_t = 7 #UPAY_MSG_POST_SCAN_PAYMENT;
+ args = amount
+ userdata_t = None
+ print("upay_display_notify_cb: ---------------------------- post scan payment\n")
+ ret = self.alipay.msg_send(cmd_t,args,userdata_t)
+
+ elif rsp_code == 20:
+ if cmd == 6 :
+ print("TODO:show 网络异常,请重试")
+
+ elif rsp_code == 21:
+ if cmd == 6 :
+ print("TODO:show 二维码无法识别")
+
+ elif rsp_code == 46:
+ if cmd == 6 :
+ print("TODO:show 网络异常,请重试")
+
+ elif rsp_code == 48:
+ if cmd == 6 :
+ print("TODO:show 网络异常,请重试")
+
+ elif rsp_code == 37:
+ if cmd == 6 :
+ print("TODO:show 网络异常,请重试")
+
+ elif rsp_code == 49:
+ if cmd == 6:
+ print("TODO:show 网络异常,请重试")
+
+ elif rsp_code == 50:
+ if cmd == 6:
+ print("TODO:show 网络异常,请重试")
+
+ elif rsp_code == 10:
+ #发起主扫支付结果
+ print("upay_display_notify_cb: post scan payment complete\n")
+
+ elif rsp_code == 18:
+ # 发起主扫支付结果
+ print("upay_display_notify_cb: post scan payment failed\n")
+
+ elif rsp_code == 19:
+ # 发起主扫支付结果
+ print("upay_display_notify_cb: post scan payment failed\n")
+
+ elif rsp_code == 42:
+ #发起主扫支付结果
+ print("upay_display_notify_cb: post scan payment failed\n")
+
+ elif rsp_code == 43:
+ # 发起主扫支付结果
+ print("upay_display_notify_cb: post scan payment failed\n")
+
+ elif rsp_code == 44:
+ # 服务端已解绑
+ print("upay_display_notify_cb: not bind !\n")
+
+ def get_binding_code(self, event, msg):
+ return self.result
+
+ def get_payment_code(self, event, msg):
+ if self.is_init == 0 :
+ args = ""
+ userdata = ""
+ ret = self.alipay.msg_send(3,args,userdata)
+
+ def get_collect_code(self, event, msg):
+ if self.is_init == 0 :
+ args = ""
+ userdata = ""
+ ret = self.alipay.msg_send(5,args,userdata)
+
+ def get_parent_code(self, event, msg):
+ if self.is_init == 0 :
+ args = ""
+ userdata = ""
+ ret = self.alipay.msg_send(8,args,userdata)
+ def get_alipay_init(self, event, msg):
+ return self.is_init
+
+ def alipay_exit(self, event, msg):
+ if self.is_init == 0 :
+ args = ""
+ userdata = ""
+ ret = self.alipay.msg_send(11,args,userdata) #发送退出程序命令
+ print("alipay_exit")
+
+ def alipay_1(self, event, msg):
+ #本地判断是否绑定
+ check_bind = self.alipay.check_bind_status()
+ check_bind_online = self.alipay.check_bind_status()
+ print("check_bind:{} check_bind_online:{}".format(check_bind,check_bind_online))
+ if check_bind == 4: #已绑定
+ EventMesh.publish("load_screen", {"screen": "alipay_1_1"})
+ # if self.is_init == 0 :
+ # args = ""
+ # userdata = ""
+ # ret = self.alipay.msg_send(3,args,userdata) #发送获取付款码消息
+ # ret = self.alipay.msg_send(5,args,userdata) #发送获取收款码消息
+ elif check_bind == 5: #未绑定
+ #EventMesh.publish("load_screen", {"screen": "alipay_invite"})
+ if self.is_init == 0 :
+ args = ""
+ userdata = ""
+ print("--000--")
+ ret = self.alipay.msg_send(1,args,userdata) #发送获取绑定码消息
+ print("alipay_1 send msg:HELIOS_PAY_MSG_GET_BIND_CODE:{}".format(ret))
+ else :
+ print("check bind error!!!")
+
+
+style_alipay_screen_default = lv.style_t()
+style_alipay_screen_default.init()
+style_alipay_screen_default.set_radius(0)
+style_alipay_screen_default.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+style_alipay_screen_default.set_bg_opa(255)
+style_alipay_screen_default.set_border_width(0)
+style_alipay_screen_default.set_pad_left(0)
+style_alipay_screen_default.set_pad_right(0)
+style_alipay_screen_default.set_pad_top(0)
+style_alipay_screen_default.set_pad_bottom(0)
+
+style_alipay_img_default = lv.style_t()
+style_alipay_img_default.init()
+style_alipay_img_default.set_img_opa(255)
+style_alipay_img_default.set_img_recolor_opa(0)
+style_alipay_img_default.set_img_recolor(lv.color_make(0xff,0xff,0xff))
+
+alipay_open_screen = lv.obj()
+alipay_open_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+# add style for watchface
+alipay_open_screen.add_style(style_alipay_screen_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#进入图片
+AlipayOpen_img = lv.img(alipay_open_screen)
+AlipayOpen_img.set_pos(int(70),int(80))
+AlipayOpen_img.set_size(100,100)
+AlipayOpen_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+AlipayOpen_img.add_flag(lv.obj.FLAG.CLICKABLE)
+AlipayOpen_img.set_src("E:/static/APP/alipay/1.jpg")
+AlipayOpen_img.add_style(style_alipay_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+class AlipayOpenScreen(Screen):
+ NAME = "alipay_open"
+ #打开支付宝
+ def __init__(self):
+ super().__init__()
+ self.meta = alipay_open_screen
+ self.timer_AlipayOpen = osTimer()
+
+ def initialization(self):
+ print("AlipayOpenScreen:initialization")
+ self.timer_AlipayOpen.start(1000, 1, self.timeout_AlipayOpen)
+ pass
+
+ def timeout_AlipayOpen(self, *args, **kwargs):
+ if EventMesh.publish("get_alipay_init") == 0:
+ EventMesh.publish("alipay_1")
+ self.timer_AlipayOpen.stop()
+
+ def post_processor_after_initialization(self):
+ pass
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def Close(self):
+ self.timer_AlipayOpen.stop()
+ EventMesh.publish("alipay_exit")
+
+ pass
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+alipay_1_1_screen = lv.obj()
+alipay_1_1_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+# add style for watchface
+alipay_1_1_screen.add_style(style_alipay_screen_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+#付款码
+alipay_imgbtn_3 = lv.img(alipay_1_1_screen)
+alipay_imgbtn_3.set_pos(8,10)
+alipay_imgbtn_3.set_size(224,69)
+alipay_imgbtn_3.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+alipay_imgbtn_3.add_flag(lv.obj.FLAG.CLICKABLE)
+alipay_imgbtn_3.set_src("E:/static/APP/alipay/1_13.png")
+alipay_imgbtn_3.add_style(style_alipay_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+#收钱
+alipay_imgbtn_2 = lv.img(alipay_1_1_screen)
+alipay_imgbtn_2.set_pos(8,86)
+alipay_imgbtn_2.set_size(224,69)
+alipay_imgbtn_2.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+alipay_imgbtn_2.add_flag(lv.obj.FLAG.CLICKABLE)
+alipay_imgbtn_2.set_src("E:/static/APP/alipay/1_12.png")
+alipay_imgbtn_2.add_style(style_alipay_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+#家长设置
+alipay_imgbtn_1 = lv.img(alipay_1_1_screen)
+alipay_imgbtn_1.set_pos(8,168)
+alipay_imgbtn_1.set_size(224,69)
+alipay_imgbtn_1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+alipay_imgbtn_1.add_flag(lv.obj.FLAG.CLICKABLE)
+alipay_imgbtn_1.set_src("E:/static/APP/alipay/1_11.png")
+alipay_imgbtn_1.add_style(style_alipay_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+class Alipay_1_1(Screen):
+ NAME = "alipay_1_1"
+ #已绑定,显示功能列表
+ def __init__(self):
+ super().__init__()
+ self.meta = alipay_1_1_screen
+ #付款码
+ alipay_imgbtn_3.add_event_cb(lambda e: self.alipay_paycode(e),
+ lv.EVENT.PRESSED, None)
+ #收钱
+ alipay_imgbtn_2.add_event_cb(lambda e: self.alipay_collect(e),
+ lv.EVENT.PRESSED, None)
+ #家长设置
+ alipay_imgbtn_1.add_event_cb(lambda e: self.alipay_parent(e),
+ lv.EVENT.PRESSED, None)
+
+ def initialization(self):
+ pass
+
+ def Close(self):
+ EventMesh.publish("alipay_exit")
+ pass
+
+ def alipay_paycode(self,e):
+ # Alipay.alipay.msg_send(3,"","") #发送获取付款码消息
+ EventMesh.publish("get_payment_code")
+
+ def alipay_collect(self,e):
+ EventMesh.publish("get_collect_code")
+ # EventMesh.publish("load_screen", {"screen": "alipay_collect"})
+
+ def alipay_parent(self,e):
+ EventMesh.publish("get_parent_code")
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+alipay_invite_screen = lv.obj()
+alipay_invite_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+# add style for watchface
+alipay_invite_screen.add_style(style_alipay_screen_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#背景
+alipay_invite_bg = lv.img(alipay_invite_screen)
+alipay_invite_bg.center()
+alipay_invite_bg.set_size(240,240)
+alipay_invite_bg.set_src("E:/static/APP/alipay/1_2.jpg")
+alipay_invite_bg.add_style(style_alipay_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#提示词
+alipay_invite_label = lv.label(alipay_invite_bg)
+alipay_invite_label.set_pos(0, 8)
+alipay_invite_label.set_size(240, 50)
+alipay_invite_label.set_long_mode(lv.label.LONG.WRAP)
+alipay_invite_label.set_text("请家长用手机支付宝扫一扫")
+alipay_invite_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+alipay_invite_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+#二维码
+alipay_invite_bg_color = lv.palette_lighten(lv.PALETTE.LIGHT_BLUE, 5)
+alipay_invite_fg_color = lv.palette_darken(lv.PALETTE.BLUE, 4)
+
+alipay_invite_alipay_qr = lv.qrcode(alipay_invite_bg, 150, alipay_invite_fg_color, alipay_invite_bg_color)
+alipay_invite_alipay_qr.set_pos(41,67)
+# Add a border with alipay_invite_bg_color
+alipay_invite_alipay_qr.set_style_border_color(alipay_invite_bg_color, 0)
+alipay_invite_alipay_qr.set_style_border_width(5, 0)
+class Alipay_invite(Screen):
+ NAME = "alipay_invite"
+ #未绑定,获取二维码显示
+ def __init__(self):
+ super().__init__()
+ self.meta = alipay_invite_screen
+
+ def initialization(self):
+ pass
+
+ def post_processor_after_initialization(self):
+ # 二维码数据
+ self.alipay_qr_data = str(self.meta_info)
+ print("alipay_invite:",str(self.meta_info))
+ alipay_invite_alipay_qr.update(self.alipay_qr_data,len(self.alipay_qr_data))
+
+ def Close(self):
+ EventMesh.publish("alipay_exit")
+ pass
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+alipay_inviting_screen = lv.obj()
+alipay_inviting_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+# add style for watchface
+alipay_inviting_screen.add_style(style_alipay_screen_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#提示词
+alipay_inviting_label = lv.label(alipay_inviting_screen)
+alipay_inviting_label.set_pos(0, 158)
+alipay_inviting_label.set_size(240, 24)
+alipay_inviting_label.set_long_mode(lv.label.LONG.WRAP)
+alipay_inviting_label.set_text("绑定中,不要走开")
+alipay_inviting_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+alipay_inviting_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+class Alipay_inviting(Screen):
+ NAME = "alipay_inviting"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = alipay_inviting_screen
+
+ def initialization(self):
+ pass
+
+ def post_processor_after_initialization(self):
+ pass
+
+ def Close(self):
+ EventMesh.publish("alipay_exit")
+ pass
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+alipay_success_screen = lv.obj()
+alipay_success_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+# add style for watchface
+alipay_success_screen.add_style(style_alipay_screen_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#背景
+alipay_success_bg = lv.img(alipay_success_screen)
+alipay_success_bg.set_pos(56,30)
+alipay_success_bg.set_size(128,127)
+alipay_success_bg.set_src("E:/static/APP/alipay/1_2_1.png")
+alipay_success_bg.add_style(style_alipay_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#提示词
+alipay_success_label = lv.label(alipay_success_screen)
+alipay_success_label.set_pos(0, 168)
+alipay_success_label.set_size(240, 29)
+alipay_success_label.set_long_mode(lv.label.LONG.WRAP)
+alipay_success_label.set_text("绑定成功")
+alipay_success_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+alipay_success_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+class Alipay_success(Screen):
+ NAME = "alipay_success"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = alipay_success_screen
+ self.timer_Alipay_success = osTimer()
+
+ def initialization(self):
+ self.timer_Alipay_success.start(1000, 0, self.timeout_Alipay_success)
+
+ def post_processor_after_initialization(self):
+ pass
+
+ def timeout_AlipayOpen(self, *args, **kwargs):
+ EventMesh.publish("load_screen", {"screen": "alipay_1_1"})
+ self.timer_AlipayOpen.stop()
+
+
+ def Close(self):
+ EventMesh.publish("alipay_exit")
+ pass
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+alipay_paycode_screen = lv.obj()
+alipay_paycode_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+# add style for watchface
+alipay_paycode_screen.add_style(style_alipay_screen_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+alipay_paycode = lv.tileview(alipay_paycode_screen)
+alipay_paycode.center()
+alipay_paycode.set_size(240, 320)
+alipay_paycode.add_style(style_alipay_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# 1 - 条形码界面
+alipay_barcode = alipay_paycode.add_tile(0, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+
+#椭圆背景
+alipay_paycode_cont = lv.obj(alipay_barcode)
+alipay_paycode_cont.set_size(240,220)
+alipay_paycode_cont.set_pos(0,21)
+alipay_paycode_cont.add_style(style_cont_alipay, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+#提示词
+alipay_paycode_label = lv.label(alipay_barcode)
+alipay_paycode_label.set_pos(0, 33)
+alipay_paycode_label.set_size(240, 24)
+alipay_paycode_label.set_long_mode(lv.label.LONG.WRAP)
+alipay_paycode_label.set_text("收银员扫一扫,完成付款")
+alipay_paycode_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+alipay_paycode_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+#条形码
+alipay_paycode_bg_color = lv.palette_lighten(lv.PALETTE.LIGHT_BLUE, 5)
+alipay_paycode_fg_color = lv.palette_darken(lv.PALETTE.BLUE, 4)
+alipay_bar = lv.qrcode(alipay_barcode, 150, alipay_paycode_fg_color, alipay_paycode_bg_color)
+alipay_bar.set_pos(33,61)
+alipay_bar.set_style_border_color(alipay_paycode_bg_color, 0)
+alipay_bar.set_style_border_width(5, 0)
+
+#编号
+
+# 2 - 二维码界面
+alipay_qrcode = alipay_paycode.add_tile(1, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+
+#白色背景
+
+#提示词
+alipay_paycode_label1 = lv.label(alipay_qrcode)
+alipay_paycode_label1.set_pos(0, 33)
+alipay_paycode_label1.set_size(240, 24)
+alipay_paycode_label1.set_long_mode(lv.label.LONG.WRAP)
+alipay_paycode_label1.set_text("收银员扫一扫,完成付款")
+alipay_paycode_label1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+alipay_paycode_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+#二维码
+
+alipay_paycode_alipay_qr = lv.qrcode(alipay_qrcode, 150, alipay_paycode_fg_color, alipay_paycode_bg_color)
+alipay_paycode_alipay_qr.set_pos(33,61)
+alipay_paycode_alipay_qr.set_style_border_color(alipay_paycode_bg_color, 0)
+alipay_paycode_alipay_qr.set_style_border_width(5, 0)
+class Alipay_paycode(Screen):
+ NAME = "alipay_paycode"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = alipay_paycode_screen
+
+ def post_processor_after_initialization(self):
+ self.alipay_qr_data = str(self.meta_info)
+ print("alipay_paycode:",str(self.meta_info))
+ alipay_paycode_alipay_qr.update(self.alipay_qr_data,len(self.alipay_qr_data))
+ alipay_bar.update(self.alipay_qr_data,len(self.alipay_qr_data))
+
+ def Close(self):
+ EventMesh.publish("alipay_exit")
+ pass
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "alipay_1_1"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+alipay_pay_success_screen = lv.obj()
+alipay_pay_success_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+# add style for watchface
+alipay_pay_success_screen.add_style(style_alipay_screen_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+ #支付成功LOGO
+alipay_pay_bg = lv.img(alipay_pay_success_screen)
+alipay_pay_bg.set_pos(82, 120)
+alipay_pay_bg.set_size(78,78)
+alipay_pay_bg.set_src("E:/static/APP/alipay/1_13_1_1.png")
+alipay_pay_bg.add_flag(lv.obj.FLAG.CLICKABLE)
+alipay_pay_bg.add_style(style_alipay_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+#付款金额
+alipay_pay_label = lv.label(alipay_pay_success_screen)
+alipay_pay_label.set_pos(0, 220)
+alipay_pay_label.set_size(240, 45)
+alipay_pay_label.set_long_mode(lv.label.LONG.WRAP)
+alipay_pay_label.set_text(" ")
+alipay_pay_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+alipay_pay_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+#完成按钮
+alipay_pay_text = lv.label(alipay_pay_success_screen)
+alipay_pay_text.set_text("支付完成")
+alipay_pay_text.set_pos(8, 10)
+alipay_pay_text.set_size(220,40)
+alipay_pay_text.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+alipay_pay_text.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+class Alipay_pay_success(Screen):
+ NAME = "alipay_pay_success"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = alipay_pay_success_screen
+ alipay_pay_bg.add_event_cb(lambda e: self.button_cb(e), lv.EVENT.CLICKED, None)
+
+ def post_processor_after_initialization(self):
+ print("money:",str(self.meta_info))
+ alipay_pay_label.set_text(str(self.meta_info))
+
+ def button_cb(self,e):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def initialization(self):
+ pass
+
+ def Close(self):
+ EventMesh.publish("alipay_exit")
+ pass
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+alipay_collect_screen = lv.obj()
+alipay_collect_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+# add style for watchface
+alipay_collect_screen.add_style(style_alipay_screen_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#二维码
+alipay_collect_bg_color = lv.palette_lighten(lv.PALETTE.LIGHT_BLUE, 5)
+alipay_collect_bg_fg_color = lv.palette_darken(lv.PALETTE.BLUE, 4)
+
+alipay_collect_alipay_qr = lv.qrcode(alipay_collect_screen, 150, alipay_collect_bg_fg_color, alipay_collect_bg_color)
+alipay_collect_alipay_qr.set_pos(33,22)
+# Add a border with bg_color
+alipay_collect_alipay_qr.set_style_border_color(alipay_collect_bg_color, 0)
+alipay_collect_alipay_qr.set_style_border_width(5, 0)
+
+#提示词
+alipay_collect_label = lv.label(alipay_collect_screen)
+alipay_collect_label.set_pos(0, 204)
+alipay_collect_label.set_size(240, 50)
+alipay_collect_label.set_long_mode(lv.label.LONG.WRAP)
+alipay_collect_label.set_text("请对方使用支付宝扫码")
+alipay_collect_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+alipay_collect_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+class Alipay_collect(Screen):
+ NAME = "alipay_collect"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = alipay_collect_screen
+
+
+
+ def initialization(self):
+ pass
+
+ def post_processor_after_initialization(self):
+ self.alipay_qr_data = str(self.meta_info)
+ print("alipay_collect:",str(self.meta_info))
+ alipay_collect_alipay_qr.update(self.alipay_qr_data,len(self.alipay_qr_data))
+
+ def Close(self):
+ EventMesh.publish("alipay_exit")
+ pass
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "alipay_1_1"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+alipay_parent_screen = lv.obj()
+alipay_parent_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+# add style for watchface
+alipay_parent_screen.add_style(style_alipay_screen_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#家长头像
+alipay_parent_bg = lv.img(alipay_parent_screen)
+alipay_parent_bg.set_pos(8,12)
+alipay_parent_bg.set_size(81,81)
+alipay_parent_bg.set_src("E:/static/APP/alipay/1_11_1.png")
+alipay_parent_bg.add_style(style_alipay_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#提示词
+alipay_parent_label = lv.label(alipay_parent_screen)
+alipay_parent_label.set_pos(104, 12)
+alipay_parent_label.set_size(96, 29)
+alipay_parent_label.set_long_mode(lv.label.LONG.WRAP)
+alipay_parent_label.set_text("家长设置")
+alipay_parent_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+alipay_parent_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+alipay_parent_label1 = lv.label(alipay_parent_screen)
+alipay_parent_label1.set_pos(100, 43)
+alipay_parent_label1.set_size(120, 29)
+alipay_parent_label1.set_long_mode(lv.label.LONG.WRAP)
+alipay_parent_label1.set_text("零花钱管理")
+alipay_parent_label1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+alipay_parent_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+alipay_parent_label2 = lv.label(alipay_parent_screen)
+alipay_parent_label2.set_pos(100, 71)
+alipay_parent_label2.set_size(120, 29)
+alipay_parent_label2.set_long_mode(lv.label.LONG.WRAP)
+alipay_parent_label2.set_text("解绑退钱")
+alipay_parent_label2.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+alipay_parent_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+#家长码
+alipay_parent_bg_color = lv.palette_lighten(lv.PALETTE.LIGHT_BLUE, 5)
+alipay_parent_fg_color = lv.palette_darken(lv.PALETTE.BLUE, 4)
+
+alipay_parent_alipay_qr = lv.qrcode(alipay_parent_screen, 150, alipay_parent_fg_color, alipay_parent_bg_color)
+alipay_parent_alipay_qr.set_pos(8,171)
+# Add a border with bg_color
+alipay_parent_alipay_qr.set_style_border_color(alipay_parent_bg_color, 0)
+alipay_parent_alipay_qr.set_style_border_width(5, 0)
+class Alipay_parent(Screen):
+ NAME = "alipay_parent"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = alipay_parent_screen
+
+
+
+ def initialization(self):
+ pass
+
+ def post_processor_after_initialization(self):
+ self.alipay_qr_data = str(self.meta_info)
+ print("alipay_parent:",str(self.meta_info))
+ alipay_parent_alipay_qr.update(self.alipay_qr_data,len(self.alipay_qr_data))
+
+ def Close(self):
+ EventMesh.publish("alipay_exit")
+ pass
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "alipay_1_1"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
\ No newline at end of file
--- /dev/null
+import osTimer
+import lvgl as lv
+from ext import EventMesh
+import osTimer
+from ext import constants
+import ujson
+import ql_fs
+import audio
+from machine import Pin
+from ui import style_font_youyuan_20,style_screen,Screen,style_font_youyuan_20_black,style_img
+import audio
+from machine import Pin
+from ext.protocol import ProtoCol,UnicodeHexStr_To_Utf8Str
+
+style_wechat_r_btn = lv.style_t()
+style_wechat_r_btn.init()
+style_wechat_r_btn.set_bg_color(lv.color_make(0x00, 0xff, 0x2a))
+style_wechat_r_btn.set_border_width(0)
+style_wechat_r_btn.set_shadow_opa(0)
+
+
+style_wechat_s_btn = lv.style_t()
+style_wechat_s_btn.init()
+style_wechat_s_btn.set_bg_color(lv.color_make(0xff, 0xff, 0xff))
+style_wechat_s_btn.set_border_width(0)
+style_wechat_s_btn.set_shadow_opa(0)
+
+style_common_bg_rect_btn_pressed = lv.style_t()
+style_common_bg_rect_btn_pressed.init()
+style_common_bg_rect_btn_pressed.set_bg_color(lv.color_make(0x1E, 0x26, 0xff))
+style_common_bg_rect_btn_pressed.set_bg_opa(100)
+style_common_bg_rect_btn_pressed.set_border_width(0)
+style_common_bg_rect_btn_pressed.set_shadow_opa(0)
+
+style_wechat_btn = lv.style_t()
+style_wechat_btn.init()
+style_wechat_btn.set_bg_color(lv.color_make(0x1E, 0x26, 0xff))
+style_wechat_btn.set_border_width(0)
+style_wechat_btn.set_shadow_opa(0)
+
+# -------------------------------------------wechat screen----------------------------------------------------------
+wechat_screen = lv.obj()
+wechat_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+wechat_press_btn = lv.btn(wechat_screen)
+wechat_press_btn.set_pos(10, 260)
+wechat_press_btn.set_size(220, 56)
+wechat_press_btn.add_style(style_wechat_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+wechat_press_btn.add_style(style_common_bg_rect_btn_pressed, lv.PART.MAIN | lv.STATE.PRESSED)
+wechat_press_btn.set_style_radius(30,0)
+
+wechat_press_label = lv.label(wechat_press_btn)
+wechat_press_label.set_text("请按住说话")
+wechat_press_label.align(lv.ALIGN.CENTER, 10, 0)
+wechat_press_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+wechat_label = lv.label(wechat_screen)
+wechat_label.center()
+wechat_label.set_size(240, 40)
+wechat_label.set_long_mode(lv.label.LONG.WRAP)
+wechat_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+wechat_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+wechat_press_label_countdown = lv.label(wechat_screen)
+wechat_press_label_countdown.set_pos(100, 100)
+wechat_press_label_countdown.set_size(40, 40)
+wechat_press_label_countdown.set_text(" ")
+wechat_press_label_countdown.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+wechat_press_label_countdown.set_long_mode(lv.label.LONG.WRAP)
+wechat_press_label_countdown.set_style_text_align(lv.TEXT_ALIGN.RIGHT, 0)
+
+
+
+
+
+class WechatScreen(Screen):
+ NAME = "wechat"
+
+ def __init__(self):
+ super().__init__()
+ self.MXA_MSG = 10
+ self.wechat_recode_list = {}
+ self.wechat_num = 0
+ self.read_data = {}
+ self.volum_size = 8
+ check_txt = ql_fs.path_exists("/ext/static/storage_file/wechat_num.txt")
+ if check_txt == True :
+ with open("/ext/static/storage_file/wechat_num.txt","r") as fd:#音频文件编号
+ num_tmp = fd.read()
+ if not num_tmp:
+ self.wechat_num = 0
+ else:
+ self.wechat_num = int(num_tmp)#
+ if self.wechat_num != 0:
+ with open("/ext/static/storage_file/wechat_record.json","r",encoding="utf-8") as fd:#音频文件记录
+ self.wechat_recode_list = ujson.load(fd)#读取每一个amr音频文件的时长ui_setting.py
+
+ self.record_test = audio.Record()
+ self.aud = audio.Audio(0)
+ self.aud.set_pa(Pin.GPIO29)
+ check_volum = ql_fs.path_exists("/ext/static/storage_file/config.json")
+ if check_volum == True :
+ with open("/ext/static/storage_file/config.json","r") as fd:#音频文件编号
+ self.read_data = ujson.load(fd)
+ if self.read_data != {}:
+ b = str("volum") in self.read_data.keys()
+ if b == True:
+ self.volum_size = self.read_data["volum"]
+ else:
+ self.volum_size = 8
+ else:
+ self.volum_size = 8
+ else:
+ self.volum_size = 8
+ self.aud.setVolume(self.volum_size)
+ self.meta = wechat_screen
+ wechat_press_btn.add_event_cb(lambda e: self.talking(e),
+ lv.EVENT.LONG_PRESSED, None)
+ wechat_press_btn.add_event_cb(lambda e: self.sending(e),
+ lv.EVENT.RELEASED, None)
+ self.timer = osTimer()
+ self.second_timer = osTimer()
+ self.play_timer = osTimer()
+
+ wechat_label.set_text(" ")
+
+ self.startY = 0
+ self.startWidth = 0
+ self.check_json = 0
+ self.wechat_list =lv.obj(wechat_screen)
+ EventMesh.subscribe("wechat_updata_list_show", self.wechat_updata_list_show)
+ EventMesh.subscribe("get_wechat_data", self.get_wechat_data)
+ EventMesh.subscribe("set_wechat_data", self.set_wechat_data)
+
+ EventMesh.subscribe("get_aduio_state", self.get_aduio_state)
+ EventMesh.subscribe("get_send_state", self.get_send_state)
+
+ self.countdown = 1
+ self.count_img = 0
+ self.play_img_cnt = None
+ self.play_text = None
+ self.play_sec = 0
+ self.sec_num = 0
+ self.countdown_old = 0
+ self.press_state = 0
+ self.ble_send = 0
+
+ def get_wechat_data(self,event, msg):
+ return [self.MXA_MSG,self.wechat_num ,self.wechat_recode_list]
+
+ def set_wechat_data(self, event, msg):
+
+ self.MXA_MSG = msg[0]
+ self.wechat_num = msg[1]
+ self.wechat_recode_list = msg[2]
+ with open("/ext/static/storage_file/wechat_record.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+ #写编号
+ with open("/ext/static/storage_file/wechat_num.txt","w") as fd:
+ fd.write("{}".format(self.wechat_num))
+ #print("self.MXA_MSG:{} self.wechat_num:{} self.wechat_recode_list:{}".format(self.MXA_MSG,self.wechat_num,self.wechat_recode_list))
+
+ def wechat_updata_list_show(self, event, msg):
+ if (self.wechat_list.has_flag(lv.obj.FLAG.HIDDEN)) == False:
+ wechat_label.clear_flag(lv.obj.FLAG.HIDDEN)
+ wechat_label.set_text("接收中")
+ self.updata_list_show(2)
+ self.timer.start(1 * 1000, 0, self.reciving)
+
+
+
+
+ def updata_list_show(self,index):
+ if self.press_state != 1:
+ if self.wechat_num != 0:
+ if index == 0:
+ self.wechat_list.clear_flag(lv.obj.FLAG.HIDDEN)
+ wechat_label.add_flag(lv.obj.FLAG.HIDDEN)
+ elif index == 2 or index == 1:
+ #读取json文件中的键作为label文本;
+ #print("self.wechat_list.self.wechat_num:{}".format(self.wechat_num))
+ self.startWidth = 0
+ self.startY = 0
+ i = 0
+ print("self.wechat_recode_list:{}".format(self.wechat_recode_list))
+ self.wechat_list.delete()#先删除一次控件
+ self.wechat_list = lv.obj(wechat_screen)
+ self.wechat_list.set_pos(0, 0)
+ self.wechat_list.set_size(240, 250)
+ self.wechat_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ self.wechat_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.play_img_cnt = None
+ if index == 2:
+ self.wechat_list.add_flag(lv.obj.FLAG.HIDDEN)
+ j = 1
+ count = 0
+ if len(self.wechat_recode_list) == self.MXA_MSG:
+ j = self.wechat_num+1
+ for i in range(self.MXA_MSG):
+ if j > self.MXA_MSG:
+ j = 1
+ key = "%02d"%(j)
+
+ # if j > len(self.wechat_recode_list) :
+ # break
+ j+=1
+
+ # print("self.wechat_recode_list.keys():{}".format(self.wechat_recode_list.keys()))
+ # if self.wechat_recode_list.keys().find("%02d"%(j)) == -1:
+ # continue
+ # num = "%02d"
+ if key in self.wechat_recode_list:
+
+ print('键存在于字典中')
+ else:
+ if count > 0:
+ count-=1
+ continue
+ print('键不存在于字典中')
+
+ value = self.wechat_recode_list[key]
+ print("value:{}".format(value))
+ self.startY = 52*count
+ if value.find("S:") != -1 or value.find("R:") != -1:
+ msg_tmp = value[2:]
+ msg_tmp = int(msg_tmp)
+ self.startWidth = 55+msg_tmp*10
+
+ elif value.find("T:") != -1:#文字显示
+ msg_tmp = value[2:]
+ size = len(msg_tmp)
+ self.startWidth = size*20
+ # print("self.startWidth :{} size:{}".format(self.startWidth,size))
+ if self.startWidth > 200:
+ self.startWidth = 200
+
+ wechat_btn = lv.btn(self.wechat_list)
+ # if value.find("R:") != -1:
+ wechat_btn.set_size(self.startWidth,50)
+ if value.find("R:") != -1 or value.find("T:") != -1 :#显示文字:
+ wechat_btn.set_pos(10,self.startY )
+ wechat_btn.add_style(style_wechat_s_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+ elif value.find("S:") != -1 :
+ wechat_btn.set_pos(230-self.startWidth,self.startY )
+ wechat_btn.add_style(style_wechat_r_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+ if value.find("R:") != -1 or value.find("S:") != -1:
+ wechat_btn.add_event_cb(lambda e: self.play_label(e),
+ lv.EVENT.CLICKED, None)
+
+ _btn_label1 = lv.label(wechat_btn)
+ if value.find("R:") != -1:
+ _btn_label1.set_size(40, 40)
+ _btn_label1.set_pos(35, 8)
+ _btn_label1.set_text(str(msg_tmp)+'\"')
+
+ elif value.find("S:") != -1:
+ _btn_label1.set_size(40, 40)
+ _btn_label1.set_pos(self.startWidth-72, 8)
+ _btn_label1.set_text(str(msg_tmp)+'\"')
+ elif value.find("T:") != -1:
+ _btn_label1.set_size(200, 60)
+ _btn_label1.set_pos(0, 0)
+ _btn_label1.set_text(str(msg_tmp))
+ _btn_label1.set_long_mode(lv.label.LONG.DOT)
+
+ _btn_label1.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ _btn_label2 = lv.label(wechat_btn)
+ _btn_label2.set_size(0, 0)
+ if value.find("R:") != -1:
+ _btn_label2.set_text('R:'+key)
+ elif value.find("S:") != -1:
+ _btn_label2.set_text('S:'+key)
+ elif value.find("T:") != -1:
+ _btn_label2.set_text('T:'+key)
+
+ if value.find("R:") != -1 or value.find("S:") != -1:
+ _btn_img = lv.img(wechat_btn)
+ _btn_img.set_size(30, 30)
+ if value.find("R:") != -1:
+ _btn_img.set_pos(5, 0)
+ _btn_img.set_src("E:/static/APP/wechat/R_3.png")
+ elif value.find("S:") != -1:
+ _btn_img.set_pos(self.startWidth-50, 0)
+ _btn_img.set_src("E:/static/APP/wechat/S_3.png")
+ _btn_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ count+=1
+ bottom_btn1 = self.wechat_list.get_child(-1)
+ bottom_btn1.scroll_to_view(lv.ANIM.OFF)
+
+ def initialization(self):
+ wechat_label.add_flag(lv.obj.FLAG.HIDDEN)
+ wechat_press_label_countdown.add_flag(lv.obj.FLAG.HIDDEN)
+ self.wechat_list.clear_flag(lv.obj.FLAG.HIDDEN)
+ #读取json文件中的字典放到self.phonebook中
+ #创建btn
+ self.updata_list_show(1)
+ self.count_img = 0
+ self.play_sec = 0
+ self.ble_send = 0
+ #按下录音
+ def talking(self,e):
+ self.play_timer.stop()
+ self.aud.stop()
+ self.wechat_list.add_flag(lv.obj.FLAG.HIDDEN)#隐藏列表选项方框
+ self.countdown = 1
+ wechat_label.clear_flag(lv.obj.FLAG.HIDDEN)
+ wechat_label.set_text("松开发送")
+ wechat_press_label_countdown.clear_flag(lv.obj.FLAG.HIDDEN)
+ wechat_press_label_countdown.set_text("{}S".format(str(self.countdown)))
+
+
+ self.updata_list_show(2)#不需要显示语音列表
+ #按下说话
+ if self.wechat_num >= self.MXA_MSG:
+ self.wechat_num = 0
+ self.wechat_num += 1
+ print("talking self.wechat_num ...:{}".format(self.wechat_num))
+ self.record_test.start("/ext/static/storage_file/{}.amr".format(self.wechat_num),16)
+ self.second_timer.start(1000, 1, self.reduce_second)
+ self.press_state = 1
+ self.ble_send = 1
+ #松开发送
+ def reciving(self,e):
+ self.updata_list_show(0)
+
+ #松开发送
+ def sending(self,e):
+ if self.press_state == 1:
+ wechat_label.clear_flag(lv.obj.FLAG.HIDDEN)
+ wechat_label.set_text("发送中")
+ wechat_press_label_countdown.add_flag(lv.obj.FLAG.HIDDEN)
+ wechat_press_label_countdown.set_text(" ")
+
+ if self.countdown >= 15:
+ self.countdown = 15
+ #松开发送数据
+ #num.txt为记录的最后编号
+ #record.json文件里的json元素为记录编号,json键值:"S:"开头为发送的语音,"R:"为接收的语音,后面跟随语音长度;"T:"为接收的文字信息。
+
+ #写序号
+ self.record_test.stop() #停止錄音
+ self.second_timer.stop() #停止计时器
+ self.countdown_old = self.countdown
+ # print("self.countdown :{} self.wechat_num:{}".format(self.countdown,self.wechat_num))
+ self.wechat_recode_list["%02d"%(self.wechat_num)] = "S:{}".format(str(self.countdown))
+
+ with open("/ext/static/storage_file/wechat_num.txt","w") as fd:
+ fd.write(str(self.wechat_num))
+ #读音频amr二进制数据
+
+ #修改或添加词典键值
+
+ with open("/ext/static/storage_file/wechat_record.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.wechat_recode_list,fd)
+
+ path = "/ext/static/storage_file/{}.amr".format(self.wechat_num)
+ with open(path,"rb") as fd:
+ buf = bytearray(ql_fs.path_getsize(path))
+ fd.readinto(buf)
+ senddata = [self.countdown_old,buf]
+ EventMesh.publish(constants.PROTOCOL.TK_SEND,senddata)
+ #隐藏显示文本 显示列表显示框
+ self.press_state = 0
+ self.ble_send = 0
+ self.timer.start(2 * 1000, 0, self.hide_label)
+ self.updata_list_show(2)
+
+
+
+ def play_img_cb(self,*args):
+ # print("self.count_img :{} self.play_text:{}".format(self.count_img,self.play_text))
+ self.count_img+=1
+ if self.count_img > 3:
+ self.count_img = 1
+ if self.play_text == "R:":
+ self.play_img_cnt.set_src("E:/static/APP/wechat/R_{}.png".format(self.count_img))
+ elif self.play_text == "S:":
+ self.play_img_cnt.set_src("E:/static/APP/wechat/S_{}.png".format(self.count_img))
+
+ self.sec_num+=1
+ if self.sec_num % 2 == 0:
+ # print("self.play_sec:{}".format(self.play_sec))
+ if self.play_sec > 0:
+ self.play_sec -= 1
+ if self.play_sec == 0:
+ self.play_timer.stop()
+ if self.play_text == "R:":
+ self.play_img_cnt.set_src("E:/static/APP/wechat/R_3.png")
+ elif self.play_text == "S:":
+ self.play_img_cnt.set_src("E:/static/APP/wechat/S_3.png")
+
+ #点击播放
+ def play_label(self,e):
+ self.sec_num = 0
+ # print("play_label self.play_text:{}".format(self.play_text))
+ if self.play_text != None and self.play_img_cnt != None: #停止东画还原到3图标
+ if self.play_text == "R:":
+ self.play_img_cnt.set_src("E:/static/APP/wechat/R_3.png")
+ elif self.play_text == "S:":
+ self.play_img_cnt.set_src("E:/static/APP/wechat/S_3.png")
+
+ self.count_img = 0 #喇叭动画显示的数量
+ play_img = e.get_target()
+ self.play_img_cnt = play_img.get_child(2)
+ text = play_img.get_child(1).get_text()
+ self.play_text = text[0:2] #区分左右喇叭动画显示 "R":左边 "S:"右边 "T:":左边
+
+ play_img_s = play_img.get_child(0).get_text()
+ play_img_s = play_img_s.split('"')
+ play_img_s = play_img_s[0]#获取实际显示秒数 '"'前面实际的秒数
+
+ if self.play_text == "R:" or self.play_text == "S:":
+ if self.play_text == "R:":
+ self.play_sec = 15
+ else:
+ self.play_sec = int(play_img_s)
+
+ self.play_timer.start(500, 1, self.play_img_cb)
+ # print("play_label self.count_img :{} self.play_text:{} play_img_s:{} self.play_sec:{}".format(self.count_img,self.play_text,play_img_s,self.play_sec))
+
+ num_amr = play_img.get_child(1).get_text()
+ num_amr = num_amr.split(':')
+ num_amr = num_amr[1]#获取实际秒数
+ i = int(num_amr)
+ # print("num:{}".format(i))
+ if self.play_text == "R:" or self.play_text == "S:":#过滤掉文字显示 不需要播放音频文件
+ self.aud = audio.Audio(0)
+ self.aud.stop()#
+ self.aud.play(1, 1, '/ext/static/storage_file/{}.amr'.format(i)) #文件名前面要加上路径
+
+ #松手2秒后发送数据
+ def hide_label(self,*args):
+ if self.ble_send != 1:
+ wechat_label.add_flag(lv.obj.FLAG.HIDDEN)
+ wechat_label.set_text(" ")
+ self.updata_list_show(0)
+
+ #获取是否在录音
+ def get_aduio_state(self, event, msg):
+ return self.press_state
+
+ def get_send_state(self, event, msg):
+ return self.ble_send
+
+ def Close(self):
+ self.play_timer.stop()
+ self.record_test.stop() #停止錄音
+ self.second_timer.stop() #停止计时器
+ self.aud.stop()
+
+ def reduce_second(self,*args):
+ if self.countdown < 15:
+ self.countdown += 1
+ else:
+ self.countdown = 15
+ self.sending(0)
+
+ if self.countdown >= 15:
+ self.countdown = 15
+ wechat_press_label_countdown.set_text("{}S".format(str(self.countdown)))
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+#微聊弹窗
+
+wechat_popup_screen = lv.obj()
+wechat_popup_screen.center()
+wechat_popup_screen.set_size(240, 320)
+wechat_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+wechat_popup_title = lv.label(wechat_popup_screen)
+wechat_popup_title.set_pos(0, 150)
+wechat_popup_title.set_size(240, 40)
+wechat_popup_title.set_text("你有新的微聊消息")
+wechat_popup_title.set_long_mode(lv.label.LONG.WRAP)
+wechat_popup_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+wechat_popup_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+class NewWechatPopupScreen(Screen):
+ NAME = "wechat_popup"
+ def __init__(self):
+ super().__init__()
+ self.meta = wechat_popup_screen
+
+ def done_left_to_right(self):
+ EventMesh.publish("wechat_updata_list_show")
+ EventMesh.publish("load_screen", {"screen": "wechat"})
+
+ def done_right_to_left(self):
+ EventMesh.publish("wechat_updata_list_show")
+ EventMesh.publish("load_screen", {"screen": "wechat"})
+
+ def done_bottom_to_top(self):
+ EventMesh.publish("wechat_updata_list_show")
+ EventMesh.publish("load_screen", {"screen": "wechat"})
+
+ def done_top_to_bottom(self):
+ EventMesh.publish("wechat_updata_list_show")
+ EventMesh.publish("load_screen", {"screen": "wechat"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_click(self):
+ EventMesh.publish("wechat_updata_list_show")
+ EventMesh.publish("load_screen", {"screen": "wechat"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+
+
+
+class TK_ProtoCol(ProtoCol):
+ """微聊"""
+ TYPE = "TK"
+
+
+ def send(self, event, msg):
+ # [SZKW*YYYYYYYYYYYYYYY*LEN*TK,AMR 格式音频数据]
+ #[XT*YYYYYYYYYYYYYYY*LEN*TKS,秒数(十进制),AMR 格式音频数据]
+ arm_data = msg[1]
+ arm_sec = msg[0]
+ print("TK_ProtoCol:msgtype:{} arm_sec:{}".format(type(msg),arm_sec))
+
+ arm = bytearray()
+ for i in range(len(arm_data)):
+ if arm_data[i] == 0x7d:
+ arm.extend(b'\x7d\x01')
+ elif arm_data[i] == 0x5b :
+ arm.extend(b'\x7d\x02')
+ elif arm_data[i] == 0x5d :
+ arm.extend(b'\x7d\x03')
+ elif arm_data[i] == 0x2c :
+ arm.extend(b'\x7d\x04')
+ elif arm_data[i] == 0x2a :
+ arm.extend(b'\x7d\x05')
+ else :
+ arm.append(arm_data[i])
+
+ datalen = len(arm) + 4+len(str(arm_sec))+1
+ #print("len(str(arm_sec)):{}".format(len(str(arm_sec))+1))
+ send_data = bytearray("SZKW*%s*%04X*TKS,%d,"%(self.imei,datalen,arm_sec))
+ send_data.extend(arm)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = bytearray('[')
+ data.extend(MD5_SIGN)
+ data.extend(send_data)
+ data.extend(']')
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+ def recv(self, event, msg):
+ """
+
+
+ @param event: 微聊
+ @param msg: 接收到的下行数据
+ [SZKW*860132060004322*20BD*TK,#!AMR...]
+ """
+ #print("K_ProtoCol:recv:data:{}".format(msg))
+ msg_tmp = msg.decode('ascii')
+ str = msg_tmp.split('TK,')
+ # print("TK_ProtoCol:recv:len:{} {} {}".format(len(msg),len(str),msg_tmp.find("#!AMR")))
+ if msg_tmp.find("#!AMR") != -1: #是否是服务器下发音频数据
+ # print("TK_ProtoCol:recv:datalen{}".format(len(msg)))
+ arm_data = bytearray(str[1])#获取amr输出
+ get_wechat_data = EventMesh.publish("get_wechat_data")
+ wechat_num = get_wechat_data[1]
+ MXA_MSG = get_wechat_data[0]
+ wechat_recode_list = get_wechat_data[2]
+ if wechat_num > 0:
+ wechat_num += 1
+ if wechat_num >= MXA_MSG:
+ wechat_num = 0
+ if wechat_num == 0:
+ wechat_num += 1
+
+ #写记录列表
+ wechat_recode_list["%02d"%(wechat_num)] = "R:{}".format(3)
+ EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_num,wechat_recode_list])
+ #写语音文件数据
+ get_send_state=EventMesh.publish("get_send_state")
+ if get_send_state != 1:
+ EventMesh.publish("load_screen", {"screen": "wechat_popup"})
+ EventMesh.publish("wechat_updata_list_show")
+ # path = "/ext/static/storage_file/audio_amr/amr/{}.amr".format(wechat_num)
+ path = "/ext/static/storage_file/{}.amr".format(wechat_num)
+ with open(path,"w") as fd:
+ arm = bytearray()
+ j = 0
+ for i in range(len(arm_data)):
+ if arm_data[j] == 0x7d and arm_data[j+1] == 0x01:
+ arm.extend(b'\x7d')
+ j+=1
+ elif arm_data[j] == 0x7d and arm_data[j+1] == 0x02:
+ arm.extend(b'\x5b')
+ j+=1
+ elif arm_data[j] == 0x7d and arm_data[j+1] == 0x03:
+ arm.extend(b'\x5d')
+ j+=1
+ elif arm_data[j] == 0x7d and arm_data[j+1] == 0x04:
+ arm.extend(b'\x2c')
+ j+=1
+ elif arm_data[j] == 0x7d and arm_data[j+1] == 0x05:
+ arm.extend(b'\x2a')
+ j+=1
+ else :
+ arm.append(arm_data[j])
+ j+=1
+ if j >= len(arm_data):
+ break
+ fd.write(arm)
+
+
+
+
+class MESSAGE_ProtoCol(ProtoCol):
+ """微聊"""
+ TYPE = "MESSAGE"
+
+
+ def send(self, event, msg):
+
+ #[XT*334588000000156*0007*MESSAGE]
+ send_data = "SZKW*%s*0007*MESSAGE"%(self.imei)
+ MD5_SIGN = self.pack_MD5_head(send_data)
+ data = "[%s%s]"%(str(MD5_SIGN),send_data)
+ #print("POWEROFF_ProtoCol:send:%s"%(data))
+ # 通过socket发送到服务器端
+ EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
+
+ def recv(self, event, msg):
+ """
+
+ @param event: 微聊文字
+ @param msg: 接收到的下行数据
+ """
+ msg = msg[1:-1]
+
+ msg_s = msg.decode('ascii')
+ msg_s = msg_s.split(',')
+ msg_s = msg_s[1]
+ # print("msg_tmp:len:{}\r\n data:{}".format(len(msg_s),msg_s))
+
+
+ get_wechat_data = EventMesh.publish("get_wechat_data")
+ wechat_num = get_wechat_data[1]
+ MXA_MSG = get_wechat_data[0]
+ wechat_recode_list = get_wechat_data[2]
+ if wechat_num > 0:
+ wechat_num += 1
+ if wechat_num >= MXA_MSG:
+ wechat_num = 0
+ if wechat_num == 0:
+ wechat_num += 1
+ msg_txt = {}
+ # 0 1 2 3
+ # print("msg_tmp:init {}".format(msg_s))
+ msg_txt = UnicodeHexStr_To_Utf8Str(msg_s)
+ # print("msg_txt:{}".format(msg_txt))
+ wechat_recode_list["%02d"%(wechat_num)] = "T:{}".format(msg_txt)
+ EventMesh.publish("set_wechat_data",[MXA_MSG,wechat_num,wechat_recode_list])
+ # print("wechat_recode_list:len data:{}".format(wechat_recode_list))
+ EventMesh.publish(constants.PROTOCOL.MESSAGE_SEND)
+ get_send_state=EventMesh.publish("get_send_state")
+ if get_send_state != 1:
+ EventMesh.publish("load_screen", {"screen": "wechat_popup"})
+ EventMesh.publish("wechat_updata_list_show")
+
+
+
+
+
--- /dev/null
+from ext.common import Abstract, LogAdapter
+from ext import EventMesh
+import usocket
+import ql_fs
+import ujson
+import _thread
+import modem
+import utime
+import sim
+import net
+import dataCall
+import checkNet
+import osTimer
+from ext import constants
+
+from ext.common import Lock, Abstract, LogAdapter
+from ext.location import GPS, GPSMatch,CellLocator
+from misc import USB, Power, ADC
+from machine import ExtInt, Pin,Timer,RTC,UART
+from ext import EventMesh
+import audio
+from Gsensor import SC7A20
+from Hsensor import GH3018
+import quecgnss
+import wifiScan
+import math
+import voiceCall
+from misc import PWM
+
+class PhoneVolumeLevelManager(Abstract):
+ def __init__(self):
+ self.level = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("push_add_phonering_level", self.add)
+ EventMesh.subscribe("push_reduce_phonering_level", self.reduce)
+ EventMesh.subscribe("get_phonering_level", self.get)
+
+ def add(self, event, msg):
+ if self.level < 7:
+ self.level = self.level + 1
+
+ def reduce(self, event, msg):
+ if self.level > 0:
+ self.level = self.level - 1
+
+ def get(self, event=None, msg=None):
+ return self.level
+
+class MsgVolumeLevelManager(Abstract):
+ def __init__(self):
+ self.level = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("push_add_msgvolume_level", self.add)
+ EventMesh.subscribe("push_reduce_msgvolume_level", self.reduce)
+ EventMesh.subscribe("get_msgvolume_level", self.get)
+
+ def add(self, event, msg):
+ if self.level < 7:
+ self.level = self.level + 1
+
+ def reduce(self, event, msg):
+ if self.level > 0:
+ self.level = self.level - 1
+
+ def get(self, event=None, msg=None):
+ return self.level
+
+class AlarmVolumeLevelManager(Abstract):
+ def __init__(self):
+ self.level = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("push_add_alarmvolume_level", self.add)
+ EventMesh.subscribe("push_reduce_alarmvolume_level", self.reduce)
+ EventMesh.subscribe("get_alarmvolume_level", self.get)
+
+ def add(self, event, msg):
+ if self.level < 7:
+ self.level = self.level + 1
+
+ def reduce(self, event, msg):
+ if self.level > 0:
+ self.level = self.level - 1
+
+ def get(self, event=None, msg=None):
+ return self.level
+
+class StopwatchManager(Abstract):
+ def __init__(self):
+ self.level = 0
+ self.ms_value = 0
+ self.sec_value = 0
+ self.min_value = 0
+ self.timer = Timer(Timer.Timer1)
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("stopwatch_start", self.start)
+ EventMesh.subscribe("stopwatch_stop", self.paused)
+ EventMesh.subscribe("stopwatch_reset", self.reset)
+ EventMesh.subscribe("get_stopwatch_ms", self.get_ms)
+ EventMesh.subscribe("get_stopwatch_sec", self.get_sec)
+ EventMesh.subscribe("get_stopwatch_min", self.get_min)
+
+ def start(self, event, msg):
+ self.timer.start(period=100, mode=self.timer.PERIODIC, callback=self.fun)
+
+ def paused(self, event, msg):
+ self.timer.stop()
+
+ def reset(self, event, msg):
+ self.timer.stop()
+ self.sec_value = 0
+ self.min_value = 0
+ self.ms_value = 0
+
+ def fun(self):
+ self.ms_value += 1
+ if self.ms_value > 9:
+ self.ms_value = 0
+ self.sec_value += 1
+ if self.sec_value > 60:
+ self.sec_value = 0
+ self.min_value += 1
+ if self.min_value > 60:
+ self.timer.stop()
+
+ def get_ms(self, event=None, msg=None):
+ return self.ms_value
+
+ def get_min(self, event=None, msg=None):
+ return self.min_value
+
+ def get_sec(self, event=None, msg=None):
+ return self.sec_value
+
+class CountdownManager(Abstract):
+ def __init__(self):
+ self.level = 0
+ self.sec = 0
+ self.min = 0
+ self.hour = 0
+ self.timer = Timer(Timer.Timer3)
+ self.total = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("add_countdown_sec", self.add_sec)
+ EventMesh.subscribe("reduce_countdown_sec", self.reduce_sec)
+ EventMesh.subscribe("add_countdown_min", self.add_min)
+ EventMesh.subscribe("reduce_countdown_min", self.reduce_min)
+ EventMesh.subscribe("add_countdown_hour", self.add_hour)
+ EventMesh.subscribe("reduce_countdown_hour", self.reduce_hour)
+ EventMesh.subscribe("get_countdown_sec", self.get_sec)
+ EventMesh.subscribe("get_countdown_min", self.get_min)
+ EventMesh.subscribe("get_countdown_hour", self.get_hour)
+ EventMesh.subscribe("stopwatch_start", self.start)
+ EventMesh.subscribe("stopwatch_reset", self.reset)
+
+
+
+
+
+ def add_sec(self, event, msg):
+ if self.sec < 59:
+ self.sec = self.sec + 1
+
+ def reduce_sec(self, event, msg):
+ if self.sec > 0:
+ self.sec = self.sec - 1
+
+ def add_min(self, event, msg):
+ if self.min < 59:
+ self.min = self.min + 1
+
+ def reduce_min(self, event, msg):
+ if self.min > 0:
+ self.min = self.min - 1
+
+ def add_hour(self, event, msg):
+ if self.hour < 23:
+ self.hour = self.hour + 1
+
+ def reduce_hour(self, event, msg):
+ if self.hour > 0:
+ self.hour = self.hour - 1
+
+ def get_sec(self, event=None, msg=None):
+ return self.sec
+
+ def get_min(self, event=None, msg=None):
+ return self.min
+
+ def get_hour(self, event=None, msg=None):
+ return self.hour
+
+ def start(self, event=None, msg=None):
+ self.timer.start(period=1000, mode=self.timer.PERIODIC, callback=self.fun)
+
+ def fun(self):
+
+ self.total = self.get_hour()*60*60 + self.get_min()*60 + self.get_sec()
+ self.total = self.total - 1
+ self.hour = self.total/3600
+ self.min = (self.total - self.hour*3600) / 60
+ self.sec = self.total % 60
+
+ if self.total < 1:
+ self.timer.stop()
+
+ def reset(self, event=None, msg=None):
+ self.hour = 0
+ self.min = 0
+ self.sec = 0
+ self.timer.stop()
+
+ def pause(self, event=None, msg=None):
+ self.timer.stop()
+
+BATTERY_OCV_TABLE = {
+ "nix_coy_mnzo2": {
+ 55: {
+ 4152: 100, 4083: 95, 4023: 90, 3967: 85, 3915: 80, 3864: 75, 3816: 70, 3773: 65, 3737: 60, 3685: 55,
+ 3656: 50, 3638: 45, 3625: 40, 3612: 35, 3596: 30, 3564: 25, 3534: 20, 3492: 15, 3457: 10, 3410: 5, 3380: 0,
+ },
+ 20: {
+ 4143: 100, 4079: 95, 4023: 90, 3972: 85, 3923: 80, 3876: 75, 3831: 70, 3790: 65, 3754: 60, 3720: 55,
+ 3680: 50, 3652: 45, 3634: 40, 3621: 35, 3608: 30, 3595: 25, 3579: 20, 3548: 15, 3511: 10, 3468: 5, 3430: 0,
+ },
+ 0: {
+ 4147: 100, 4089: 95, 4038: 90, 3990: 85, 3944: 80, 3899: 75, 3853: 70, 3811: 65, 3774: 60, 3741: 55,
+ 3708: 50, 3675: 45, 3651: 40, 3633: 35, 3620: 30, 3608: 25, 3597: 20, 3585: 15, 3571: 10, 3550: 5, 3500: 0,
+ },
+ },
+}
+
+
+
+class Battery(object):
+ """This class is for battery info.
+
+ This class can get battery voltage and energy.
+ if adc_args is not None, use cbc to read battery
+
+ adc_args: (adc_num, adc_period, factor)
+
+ adc_num: ADC channel num
+ adc_period: Cyclic read ADC cycle period
+ factor: calculation coefficient
+ """
+
+ def __init__(self, adc_args=None, chrg_gpion=None, stdby_gpion=None):
+ self.__energy = 100
+ self.__temp = 55
+
+ # ADC params
+ self.__adc = None
+ if adc_args:
+ self.__adc_num, self.__adc_period, self.__factor = adc_args
+ if not isinstance(self.__adc_num, int):
+ raise TypeError("adc_args adc_num is not int number.")
+ if not isinstance(self.__adc_period, int):
+ raise TypeError("adc_args adc_period is not int number.")
+ if not isinstance(self.__factor, float):
+ raise TypeError("adc_args factor is not int float.")
+ self.__adc = ADC()
+
+ # Charge params
+ self.__charge_callback = None
+ self.__charge_status = None
+ self.__chrg_gpion = chrg_gpion
+ self.__stdby_gpion = stdby_gpion
+ self.__chrg_gpio = None
+ self.__stdby_gpio = None
+ self.__chrg_exint = None
+ self.__stdby_exint = None
+ if self.__chrg_gpion is not None and self.__stdby_gpion is not None:
+ self.__init_charge()
+
+ def __chrg_callback(self, args):
+ self.__update_charge_status()
+ if self.__charge_callback is not None:
+ self.__charge_callback(self.__charge_status)
+
+ def __stdby_callback(self, args):
+ self.__update_charge_status()
+ if self.__charge_callback is not None:
+ self.__charge_callback(self.__charge_status)
+
+ def __update_charge_status(self):
+ if self.__chrg_gpio.read() == 1 and self.__stdby_gpio.read() == 1:
+ self.__charge_status = 0
+ elif self.__chrg_gpio.read() == 0 and self.__stdby_gpio.read() == 1:
+ self.__charge_status = 1
+ elif self.__chrg_gpio.read() == 1 and self.__stdby_gpio.read() == 0:
+ self.__charge_status = 2
+ else:
+ raise TypeError("CHRG and STDBY cannot be 0 at the same time!")
+
+ def __init_charge(self):
+ self.__chrg_gpio = Pin(self.__chrg_gpion, Pin.IN, Pin.PULL_DISABLE)
+ self.__stdby_gpio = Pin(self.__stdby_gpion, Pin.IN, Pin.PULL_DISABLE)
+ self.__chrg_exint = ExtInt(self.__chrg_gpion, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU, self.__chrg_callback)
+ self.__stdby_exint = ExtInt(self.__stdby_gpion, ExtInt.IRQ_RISING_FALLING, ExtInt.PULL_PU,
+ self.__stdby_callback)
+ self.__chrg_exint.enable()
+ self.__stdby_exint.enable()
+ self.__update_charge_status()
+
+ def __get_soc_from_dict(self, key, volt_arg):
+ """Get battery energy from map"""
+ if key in BATTERY_OCV_TABLE["nix_coy_mnzo2"]:
+ volts = sorted(BATTERY_OCV_TABLE["nix_coy_mnzo2"][key].keys(), reverse=True)
+ pre_volt = 0
+ volt_not_under = 0 # Determine whether the voltage is lower than the minimum voltage value of soc.
+ for volt in volts:
+ if volt_arg > volt:
+ volt_not_under = 1
+ soc1 = BATTERY_OCV_TABLE["nix_coy_mnzo2"][key].get(volt, 0)
+ soc2 = BATTERY_OCV_TABLE["nix_coy_mnzo2"][key].get(pre_volt, 0)
+ break
+ else:
+ pre_volt = volt
+ if pre_volt == 0: # Input Voltarg > Highest Voltarg
+ return soc1
+ elif volt_not_under == 0:
+ return 0
+ else:
+ return soc2 - (soc2 - soc1) * (pre_volt - volt_arg) // (pre_volt - volt)
+
+ def __get_soc(self, temp, volt_arg, bat_type="nix_coy_mnzo2"):
+ """Get battery energy by temperature and voltage"""
+ if bat_type == "nix_coy_mnzo2":
+ if temp > 30:
+ return self.__get_soc_from_dict(55, volt_arg)
+ elif temp < 10:
+ return self.__get_soc_from_dict(0, volt_arg)
+ else:
+ return self.__get_soc_from_dict(20, volt_arg)
+
+ def __get_power_vbatt(self):
+ return int(sum([Power.getVbatt() for i in range(100)]) / 100)
+
+ def __get_adc_vbatt(self):
+ self.__adc.open()
+ utime.sleep_ms(self.__adc_period)
+ adc_list = list()
+ for i in range(self.__adc_period):
+ adc_list.append(self.__adc.read(self.__adc_num))
+ utime.sleep_ms(self.__adc_period)
+ adc_list.remove(min(adc_list))
+ adc_list.remove(max(adc_list))
+ adc_value = int(sum(adc_list) / len(adc_list))
+ self.__adc.close()
+ vbatt_value = adc_value * (self.__factor + 1)
+ return vbatt_value
+
+ def set_temp(self, temp):
+ """Set now temperature."""
+ if isinstance(temp, int) or isinstance(temp, float):
+ self.__temp = temp
+ return True
+ return False
+
+ def get_voltage(self):
+ """Get battery voltage"""
+ if self.__adc is None:
+ return self.__get_power_vbatt()
+ else:
+ return self.__get_adc_vbatt()
+
+ def get_energy(self):
+ """Get battery energy"""
+ self.__energy = self.__get_soc(self.__temp, self.get_voltage())
+ return self.__energy
+
+ def set_charge_callback(self, charge_callback):
+ if self.__chrg_gpion is not None and self.__stdby_gpion is not None:
+ if callable(charge_callback):
+ self.__charge_callback = charge_callback
+ return True
+ return False
+
+ def get_charge_status(self):
+ return self.__charge_status
+
+
+class BatteryManager(Abstract):
+ def __init__(self):
+ """电池管理器"""
+ self.battery = Battery()
+ self.low_battery = False
+
+ def post_processor_after_instantiation(self):
+ """订阅此类所有的事件到 EventMesh中"""
+ EventMesh.subscribe("get_battery", self.get_battery)
+
+ def get_battery(self, event=None, msg=None):
+ battery = self.battery.get_energy()
+ return battery
+
+ def get_voltage(self, event=None, msg=None):
+ voltage = self.battery.get_voltage()
+ return voltage
+
+class ConfigStoreManager(Abstract):
+ """
+ 持久化落盘存储
+ """
+
+ def __init__(self):
+ self.file_name = "/ext/conf_store.json"
+ self.lock = Lock()
+ self.map = dict()
+
+ def post_processor_after_instantiation(self):
+ if ql_fs.path_exists(self.file_name):
+ self.map = ql_fs.read_json(self.file_name)
+ else:
+ self.__store()
+ EventMesh.subscribe("persistent_config_get", self.__read)
+ EventMesh.subscribe("persistent_config_store", self.__store)
+
+ def __read(self, event, msg):
+ with self.lock:
+ return self.map.get(msg)
+
+ def __store(self, event=None, msg=None):
+ if msg is None:
+ msg = dict()
+ with self.lock:
+ self.map.update(msg)
+ ql_fs.touch(self.file_name, self.map)
+
+def voice_callback(args):
+ print('voicecall iinfo:{}'.format(args))
+ if args[0] == 10:
+ print('voicecall incoming call, PhoneNO.: ', args[6])
+ size_len = len(str(args[6]))
+ tmp = []
+ tmp = args[6]
+ find_num = tmp[0]
+ b = tmp.isdigit()#判断是否不是数字开头 暂时不用 因为截取了+判断不了
+ if find_num != 0 and size_len > 11:
+ tmp = tmp[size_len-11:]
+ EventMesh.publish("load_screen", {"screen": "incoming_call","meta":str(tmp)})
+
+ elif args[0] == 11:
+ print('voicecall connected, PhoneNO.: ', args[6])
+ size_len = len(str(args[6]))
+ tmp = []
+ tmp = args[6]
+ find_num = tmp[0]
+ b = tmp.isdigit()#判断是否不是数字开头 暂时不用 因为截取了+判断不了
+ if find_num != 0 and size_len > 11:
+ tmp = tmp[size_len-11:]
+ EventMesh.publish("load_screen", {"screen": "on_call","meta":str(tmp)})
+
+ elif args[0] == 12:
+ print('voicecall disconnect')
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ elif args[0] == 13:
+ print('voicecall is waiting, PhoneNO.: ', args[6])
+ elif args[0] == 14:
+ print('voicecall dialing, PhoneNO.: ', args[6])
+ EventMesh.publish("load_screen", {"screen": "dialing"})
+
+ elif args[0] == 15:
+ print('voicecall alerting, PhoneNO.: ', args[6])
+
+ elif args[0] == 16:
+ print('voicecall holding, PhoneNO.: ', args[6])
+
+class DeviceInfoManager(Abstract):
+
+ """
+ 设备信息管理
+ """
+
+ def __init__(self):
+ self.key = ""
+ self.imei = ""
+ self.cid = "ETEST20221014010"
+ self.imsi = ""
+ self.password = "000000"
+ #self.__city = None
+ #self.__location = None
+ self.timer_push_schedule = osTimer()
+ self.usb = USB()
+ #self.battery_push_schedule = osTimer()
+ self.check_battery_list = []
+ self.__bat_num = 0
+ self.usb.setCallback(self.usb_event_cb)
+ self.log = LogAdapter(self.__class__.__name__)
+ self.rtc = RTC()
+ self.step = [0,0,0,0]
+ self.timer_push=0
+ self.timer_push_tmp=60
+ self.PING = "0" #绑定状态
+ self.connect = 0 #服务器连接状态
+ self.KA_time = 0
+ self.HR_time = 0
+ self.SENSOR_time = 0
+ self.HR_state = 0
+ self.HR_Onestate = 0
+ self.get_hr_state = 0
+ self.get_spo2_state = 0
+ self.set_hsenor_crt = 0
+ self.HR_OneTime = 0
+ self.Hr_Need_Open = 0
+ self.Spo2_Need_Open = 0
+ self.bat_time = 0
+
+ self.old_time = 0
+ self.UD_time = 0
+ self.UD_timeout = 7*60
+ print("DeviceInfoManager:1")
+ self.gsensor = SC7A20()
+ print("DeviceInfoManager:1.0")
+ self.gsensor.activate()
+ print("DeviceInfoManager:1.1")
+ self.gsensor.init()
+ print("DeviceInfoManager:2")
+ self.hsensor = GH3018()
+ self.hsensor.activate()
+ self.hsensor.init()
+ self.hsensor.close()
+ # #print("hsensor.open_heart:%d\r\n"%(self.hsensor.open_heart()))
+ print("DeviceInfoManager:3")
+ ret = quecgnss.init()
+ if ret == 0:
+ print('GNSS init ok.')
+ else:
+ print('GNSS init failed.')
+
+ def post_processor_after_instantiation(self):
+ print("post_processor_after_instantiation:1")
+ """订阅此类所有的事件到 EventMesh中"""
+ EventMesh.subscribe("screen_get_ope", self.get_device_ope)
+ EventMesh.subscribe("screen_get_sig", self.get_signal)
+ EventMesh.subscribe("screen_get_time", self.get_time)
+ EventMesh.subscribe("about_get_imei", self.get_imei)
+ EventMesh.subscribe("about_get_iccid", self.get_ic_cid)
+ EventMesh.subscribe("about_get_phonenum", self.get_phone_num)
+ EventMesh.subscribe("screen_get_battery", self.get_battery)
+ EventMesh.subscribe("get_fw_version", self.get_device_fw_version)
+ EventMesh.subscribe("get_standby_time", self.get_standby_time)
+ EventMesh.subscribe(constants.EVENT.GET_STEP, self.get_step_count)
+ EventMesh.subscribe("sim_slot_get", self.sim_slot_get)
+ EventMesh.subscribe("sim_slot_switch", self.sim_slot_switch)
+ EventMesh.subscribe(constants.EVENT.GET_KEY, self.get_key)
+ EventMesh.subscribe(constants.EVENT.SET_KEY, self.set_key)
+ EventMesh.subscribe(constants.EVENT.GET_IMEI, self.get_imei)
+ EventMesh.subscribe(constants.EVENT.GET_CID, self.get_cid)
+ EventMesh.subscribe(constants.EVENT.SET_CID, self.set_cid)
+ EventMesh.subscribe(constants.EVENT.GET_IMSI, self.get_imsi)
+ EventMesh.subscribe(constants.EVENT.GET_PASSWORD, self.get_password)
+ EventMesh.subscribe(constants.EVENT.SET_PASSWORD, self.set_password)
+ EventMesh.subscribe(constants.EVENT.READ_LOCATION, self.READ_LOCATION)
+ EventMesh.subscribe(constants.EVENT.SET_PING, self.set_ping)
+ EventMesh.subscribe(constants.EVENT.GET_PING, self.get_ping)
+ EventMesh.subscribe(constants.EVENT.SET_CONNECT, self.set_connect)
+ EventMesh.subscribe(constants.EVENT.GET_CONNECT, self.get_connect)
+
+
+ EventMesh.subscribe(constants.EVENT.START_BLOOD_OXYGEN, self.start_blood_oxygen)
+ EventMesh.subscribe(constants.EVENT.START_HEART, self.start_heart)
+ EventMesh.subscribe(constants.EVENT.STOP_BLOOD_OXYGEN, self.stop_blood_oxygen)
+ EventMesh.subscribe(constants.EVENT.STOP_HEART, self.stop_heart)
+ EventMesh.subscribe(constants.EVENT.GET_BLOOD_OXYGEN, self.get_blood_oxygen)
+ EventMesh.subscribe(constants.EVENT.GET_HEART, self.get_heart)
+
+ print("post_processor_after_instantiation:2")
+ self.timer_push_schedule.start(10000, 1, self.publish_event)
+ # self.battery_push_schedule.start(3000, 1, self.__check_battery)
+ self.log.debug("post_processor_after_instantiation finished")
+ #EventMesh.publish(constants.EVENT.START_HEART)
+ # 设备开机立刻更新一次参数
+ self.publish_event()
+ print("post_processor_after_instantiation:3")
+
+
+ def publish_event(self, *args, **kwargs):
+ """
+ 主动推送事件
+ :param args:
+ :param kwargs:
+ :return:
+ """
+
+ self.timer_push = self.timer_push+1
+ #if self.timer_push > 10 :
+ # EventMesh.publish("time", self.get_time())
+ # EventMesh.publish("battery", self.get_battery())
+ # EventMesh.publish("signal", self.get_signal())
+ self.timer_push = 0
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ if math.fabs(time_tmp - self.KA_time) > 7*60: #7分钟一次心跳
+ self.KA_time = time_tmp
+ EventMesh.publish(constants.PROTOCOL.KA_SEND)
+ if math.fabs(time_tmp - self.UD_time) > self.UD_timeout: #7分钟一次定位
+ self.UD_time = time_tmp
+ EventMesh.publish(constants.EVENT.START_LOCATION) #开始定位
+ EventMesh.publish(constants.EVENT.PUSH_STEP, self.get_step_count())
+
+ hr_time = EventMesh.publish("get_time_hr_spo2")#获取时间是否大于0
+
+ self.get_hr_state = EventMesh.publish("get_hr_state")
+ self.get_spo2_state = EventMesh.publish("get_spo2_state")
+ # print("hr_time:{} get_hr_state:{} get_spo2_state:{}".format(hr_time,self.get_hr_state,self.get_spo2_state))
+
+ battery = EventMesh.publish("screen_get_battery")
+ self.bat_time+=10
+ if self.bat_time > 5*60:
+ self.bat_time = 0
+ if battery == 20:
+ EventMesh.publish("load_screen", {"screen": "low_power"})
+
+
+ if hr_time != None:
+ # print("hr......01....{}\r\n".format(hr_time))
+ if hr_time > 0:
+ # print("get_hr_state:{} get_spo2_state:{} self.old_time:{} hr_time:{}".format(self.get_hr_state,self.get_spo2_state,self.old_time,hr_time))
+ if self.get_hr_state != 1 and self.get_spo2_state != 1:
+ if self.HR_state == 0:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+
+ if self.old_time != hr_time:
+ self.SENSOR_time = time_tmp#防止改变时间的时候正在开启测量突然10s就停止测量
+ if self.get_hr_state == 2 and self.HR_state == 1:#自动检测的心率还在测量立马关了测试
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ self.HR_state = 0
+ elif self.get_spo2_state == 2 and self.HR_state == 2:
+ self.HR_state = 0
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+ self.old_time = hr_time
+
+ # print("time_tmp :{} self.SENSOR_time :{} time_tmp - self.SENSOR_time:{} self.HR_state:{}".format(time_tmp,self.SENSOR_time,time_tmp - self.SENSOR_time,self.HR_state))
+ if math.fabs(time_tmp - self.SENSOR_time) >= hr_time and self.HR_state == 0:
+ print("START_HEART:1")
+ EventMesh.publish("set_hr_state",2)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_HEART)
+ self.HR_state = 1
+ elif math.fabs(time_tmp - self.SENSOR_time) >= (hr_time+60) and self.HR_state == 1:
+ EventMesh.publish("set_hr_state",0)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ #获取心率数据上传数据app
+ print("STOP_HEART:")
+ EventMesh.publish("set_spo2_state",2)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+ print("START_BLOOD_OXYGEN:")
+ self.HR_state = 2
+ elif math.fabs(time_tmp - self.SENSOR_time) >= (hr_time+120) and self.HR_state == 2:
+ print("STOP_BLOOD_OXYGEN:")
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#停止血氧测试
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ print("spo2_value:{}".format(spo2_value))
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ self.HR_state = 0
+ self.SENSOR_time = time_tmp
+ else:
+ # print("endtime.........\r\n")
+ self.SENSOR_time = time_tmp
+ self.HR_state = 0
+ self.old_time = 0
+ if self.HR_state == 0:#只有不在测量的时候才测单次的
+ if self.get_spo2_state == 3 or self.get_hr_state == 3:#单次测量
+ self.HR_state = 0
+ self.HR_OneTime+=1
+ if self.HR_OneTime == 1 and self.HR_Onestate == 0:
+ print("hr..........\r\n")
+ if self.get_hr_state == 3:
+ self.Hr_Need_Open = 1
+ EventMesh.publish("set_hr_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_HEART)
+ else:
+ self.Hr_Need_Open = 0
+
+ if self.get_spo2_state == 3 and self.Hr_Need_Open == 0:
+ self.Spo2_Need_Open = 1
+ EventMesh.publish("set_spo2_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+ else:
+ self.Spo2_Need_Open = 0
+ self.HR_Onestate = 1
+ # print("self.HR_Onestate....3..:{} {} {} {} {}".format(self.HR_Onestate,self.get_hr_state,self.get_spo2_state,self.Hr_Need_Open,self.Spo2_Need_Open))
+ elif self.HR_OneTime > 6 and self.HR_Onestate == 1:
+ # print("self.HR_Onestate...4....:{} {} {} {} {}".format(self.HR_Onestate,self.get_hr_state,self.get_spo2_state,self.Hr_Need_Open,self.Spo2_Need_Open))
+ if self.Hr_Need_Open == 1:#需要关闭心率测量
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ print("STOP_HEART.01:")
+ if self.Spo2_Need_Open == 0 and self.get_spo2_state == 3:
+ EventMesh.publish("set_spo2_state",3)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+ print("START_BLOOD_OXYGEN 02")
+ self.HR_Onestate = 2
+ self.set_hsenor_crt = 2#血氧关闭
+ else:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ self.set_hsenor_crt = 0#
+ print("START_end......")
+ EventMesh.publish("set_hr_state",0)#2代表后台进入血氧测试
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ else:
+ if self.Spo2_Need_Open == 1:#停止测试血氧
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#K开血氧
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ print("spo2_value:{}.......01..".format(spo2_value))
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ if self.Hr_Need_Open == 0 and self.get_hr_state == 3:
+ EventMesh.publish("set_hr_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_HEART)
+ self.HR_Onestate = 2
+ self.set_hsenor_crt = 1#心率
+ else:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ self.set_hsenor_crt = 2#血氧关闭
+ print("STOP_BLOOD_OXYGEN:....09.....")
+
+ elif self.HR_OneTime > 6+6 and self.HR_Onestate == 2:
+ print("HR_OneTime:....05")
+ if self.set_hsenor_crt == 2:
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#停止血氧测试
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ print("spo2_value:{}......08.....".format(spo2_value))
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ elif self.set_hsenor_crt == 1:
+ EventMesh.publish("set_hr_state",0)#0代表g关闭测试
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ print("STOP_HEART.03:")
+ self.HR_Onestate = 0
+ else:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+
+ else:
+ # print("hr......01....{} {} self.HR_Onestate {} {}".format(self.get_hr_state,self.get_spo2_state,self.HR_OneTime,self.HR_Onestate))
+ self.SENSOR_time = time_tmp#进入最后一次的时间戳
+ self.old_time = 0
+
+ if self.get_hr_state != 1 and self.get_spo2_state != 1:
+ if self.get_spo2_state == 3 or self.get_hr_state == 3:#单次测量
+ self.HR_state = 0
+ self.HR_OneTime+=1
+ if self.HR_OneTime == 1 and self.HR_Onestate == 0:
+ print("hr.......01...\r\n")
+ if self.get_hr_state == 3:
+ self.Hr_Need_Open = 1
+ EventMesh.publish("set_hr_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_HEART)
+ else:
+ self.Hr_Need_Open = 0
+
+ if self.get_spo2_state == 3 and self.Hr_Need_Open == 0:
+ self.Spo2_Need_Open = 1
+ EventMesh.publish("set_spo2_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+ else:
+ self.Spo2_Need_Open = 0
+ self.HR_Onestate = 1
+ print("self.HR_Onestate....3")
+ elif self.HR_OneTime > 6 and self.HR_Onestate == 1:
+ print("self.HR_Onestate...4..")
+ if self.Hr_Need_Open == 1:#需要关闭心率测量
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ print("STOP_HEART.06:")
+ if self.Spo2_Need_Open == 0 and self.get_spo2_state == 3:
+ EventMesh.publish("set_spo2_state",3)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)#K开血氧
+ print("START_BLOOD_OXYGEN 06")
+ self.HR_Onestate = 2
+ self.set_hsenor_crt = 2#血氧关闭
+ else:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ self.set_hsenor_crt = 0#
+ print("START_end....06..")
+ EventMesh.publish("set_hr_state",0)#2代表后台进入血氧测试
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ else:
+ if self.Spo2_Need_Open == 1:#停止测试血氧
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#K开血氧
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ print("spo2_value:{}.......01..".format(spo2_value))
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ if self.Hr_Need_Open == 0 and self.get_hr_state == 3:
+ EventMesh.publish("set_hr_state",3)#2代表后台进入测试
+ EventMesh.publish(constants.EVENT.START_HEART)
+ self.HR_Onestate = 2
+ self.set_hsenor_crt = 1#心率
+ else:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+ self.set_hsenor_crt = 2#血氧关闭
+ print("STOP_BLOOD_OXYGEN:....06.....")
+
+ elif self.HR_OneTime > 6+6 and self.HR_Onestate == 2:
+ print("HR_OneTime:....06")
+ if self.set_hsenor_crt == 2:
+ EventMesh.publish("set_spo2_state",0)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)#停止血氧测试
+ spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ print("spo2_value:{}......06.....".format(spo2_value))
+ if spo2_value > 85 and spo2_value != None:
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
+ elif self.set_hsenor_crt == 1:
+ EventMesh.publish("set_hr_state",0)#0代表g关闭测试
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+ heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if heart_value > 50 and heart_value != None:
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
+ print("STOP_HEART.06:")
+ self.HR_Onestate = 0
+ else:
+ self.HR_Onestate = 0
+ self.HR_OneTime = 0
+
+ voiceCall.setCallback(voice_callback)
+
+ #quecgnss.gnssEnable(0)
+
+
+ def READ_LOCATION(self, event, msg) :
+ #print("READ_LOCATIO",msg)
+
+ EventMesh.publish(constants.PROTOCOL.UD_SEND,msg)
+
+ def get_device_ope(self, event, msg):
+ """
+ 获取设备运营商信息
+ :param event:
+ :param msg:
+ :return: 运营商
+ """
+ net_ope_map = {
+ "UNICOM": "中国联通HD",
+ "CMCC": "中国移动HD",
+ "CT": "中国电信HD"
+ }
+ """获取运营商"""
+ try:
+ short_eons = net.operatorName()[1]
+ except Exception:
+ return "无"
+ return net_ope_map.get(short_eons, None)
+
+ def get_signal(self, event=None, msg=None):
+ """
+ 获取信号事件
+ :param event:
+ :param msg:
+ :return: int 类型
+ """
+ return net.csqQueryPoll()
+
+ def get_time_bucket(self, time):
+ if time < 12:
+ return '上午'
+ else:
+ return '下午'
+
+ def get_week(self, week):
+ if week == 1:
+ return '一'
+ elif week == 2:
+ return '二'
+ elif week == 3:
+ return '三'
+ elif week == 4:
+ return '四'
+ elif week == 5:
+ return '五'
+ elif week == 6:
+ return '六'
+ elif week == 7 or week == 0:
+ return '日'
+
+ def get_time(self, event=None, msg=None):
+ """
+ 获取时间事件
+ :param event:
+ :param msg:
+ :return: HH:MM 格式
+ """
+ rtc_time = self.rtc.datetime()
+
+ date = ("%d月%d日" % (rtc_time[1], rtc_time[2]))
+ year = ("%04d年" % (rtc_time[0]))
+ week = ("星期%s"%(self.get_week(rtc_time[3])))
+ week_data = rtc_time[3]
+ time = [rtc_time[4], rtc_time[5]]
+ time_quantum = ("%s" % (self.get_time_bucket(rtc_time[4])))
+
+ result = [time, time_quantum, date , week,year,week_data]
+ #时分,上午下午,日期,星期,年 星期
+ return result
+
+ def get_step_count(self, event=None, msg=None):
+ """
+ 获取步数
+ """
+ XYZ = self.gsensor.get_x_y_z()
+ tmp = 0
+
+ tmp = self.gsensor.get_step()
+ # print("x:%d,y:%d,z:%d tmp %d",XYZ[0],XYZ[1],XYZ[2],tmp)
+ self.step[0]= tmp
+ self.step[1] = XYZ[0]
+ self.step[2] = XYZ[1]
+ self.step[3] = XYZ[2]
+
+ return self.step
+
+ def get_ic_cid(self, event, msg):
+ """
+ 获取ic cid事件
+ :param event:
+ :param msg:
+ :return: str ic cid
+ """
+ return sim.getIccid()
+
+ def get_phone_num(self, event, msg):
+ """
+ 获取电话号码事件
+ :param event:
+ :param msg:
+ :return: str number
+ """
+ return sim.getPhoneNumber()
+
+ def get_battery(self, event=None, msg=None):
+ """
+ 获取电池事件,暂时没支持
+ :param event:
+ :param msg:
+ :return:
+ """
+
+ charge_state = '0'
+ if self.get_usb_state() == 1:
+ charge_state = '1'
+ else:
+ charge_state = '0'
+
+ vbat = 0
+ temp = Power.getVbatt()
+ if temp <= 3500:
+ vbat = 20 #"E:/vbat_20.jpg"
+ elif temp <= 3600:
+ vbat = 40 #"E:/vbat_40.jpg"
+ elif temp <= 3800:
+ vbat = 60 #"E:/vbat_60.jpg"
+ elif temp <= 4000:
+ vbat = 80 #"E:/vbat_80.jpg"
+ else:
+ vbat = 100 #"E:/vbat_100.jpg"
+
+ result = [charge_state, vbat]
+
+ return result
+
+ def get_device_fw_version(self, *args):
+ '''
+ 获取设备固件版本号
+ '''
+ fw_version = modem.getDevFwVersion()
+ if isinstance(fw_version, str):
+ return fw_version
+ return "--"
+
+ def get_standby_time(self, *args):
+ '''
+ 获取设备单次开机待机时间
+ '''
+ time_msg = utime.time()
+ d = int(
+ time_msg / 86400) # The int call removes the decimals. Conveniently, it always rounds down. int(2.9) returns 2 instead of 3, for example.
+ time_msg -= (
+ d * 86400) # This updates the value of x to show that the already counted seconds won't be double counted or anything.
+ h = int(time_msg / 3600)
+ time_msg -= (h * 3600)
+ m = int(time_msg / 60)
+ time_msg -= (m * 60)
+ s = time_msg
+ result = "{}天{}小时{}分".format(d, h, m)
+ return result
+
+ def set_key(self, topic, msg):
+ self.key = msg["value"]
+ def get_key(self, topic, msg):
+ return self.key
+
+ def get_imei(self, topic, msg):
+ if not self.imei:
+ self.imei = modem.getDevImei()
+ return self.imei
+
+ def get_cid(self, topic, msg):
+ return self.cid
+
+ def set_cid(self, topic, msg):
+ self.cid = msg["value"]
+
+ def get_imsi(self, topic, msg):
+ if not self.imei:
+ self.imei = sim.getImsi()
+ return self.imsi
+
+ def get_password(self, topic, msg):
+ return self.password
+
+ def set_password(self, topic, msg):
+ self.password = msg["value"]
+
+ def set_ping(self, topic, msg):
+ self.PING = msg
+ def get_ping(self, topic, msg):
+ return self.PING
+
+ def set_connect(self, topic, msg):
+ #print("set_connect:{}".format(msg))
+ self.connect = msg
+ def get_connect(self, topic, msg):
+ return self.connect
+
+ def start_blood_oxygen(self, topic, msg):
+ print("start_blood_oxygen!!!")
+ self.hsensor.open_blood_oxygen()
+
+ def start_heart(self, topic, msg):
+ print("start_heart!!!")
+ self.hsensor.open_heart()
+
+ def stop_blood_oxygen(self, topic, msg):
+ print("stop_blood_oxygen!!!")
+ self.hsensor.close()
+
+ def stop_heart(self, topic, msg):
+ print("stop_heart!!!")
+ self.hsensor.close()
+
+ def get_blood_oxygen(self, topic, msg):
+ data = self.hsensor.get_all_data()
+ return data[1]
+
+ def get_heart(self, topic, msg):
+ data = self.hsensor.get_all_data()
+ return data[0]
+
+
+
+
+ def sim_slot_get(self, topic=None, msg=None):
+ return sim.getCurSimid()
+
+ def sim_slot_switch(self, topic=None, slot=None):
+ """
+ sim 卡槽切换
+ :param topic:
+ :param slot:
+ :return: 切换sim卡卡槽 0 切换成功, 1 无需切换, -1 切换失败
+ """
+ if self.sim_slot_get() == slot:
+ return 1
+ else:
+ return sim.switchCard(slot)
+
+ def usb_event_cb(self, state):
+ EventMesh.publish("battery", self.get_battery())
+
+ def get_usb_state(self):
+ state = self.usb.getStatus()
+ if state == -1:
+ state = 0
+ return state
+
+class SockManager(Abstract):
+ #END = "]"
+
+ def __init__(self):
+ self.sock = None
+ self.resolver = None
+ self.run_flag = False
+ self.lost_conn_check_time = 5 * 60 * 30
+ self.monitor_timer = osTimer()
+ self.connect_tmp = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe(constants.EVENT.CHANNEL_SOCKET_SEND, self.send)
+ self.monitor_timer.start(7 * 60 * 1000, 1, self.check)
+
+ def add_support_resolver(self, resolver):
+ self.resolver = resolver
+
+ def initialization(self, *args, **kwargs):
+ self.connect()
+
+ def connect(self):
+ print("tcp connect:api.xcloudtech.com")
+ try:
+ if(self.sock != None) :
+ self.sock.close()
+ self.sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
+ self.sock.connect(("api.xcloudtech.com", 9000))
+ _thread.start_new_thread(self.recv, ())
+ utime.sleep(1)
+ # 发送数据
+ EventMesh.publish(constants.PROTOCOL.LK_SEND)
+ except Exception as e:
+ print(e)
+ self.run_flag = False
+ else:
+ self.run_flag = True
+
+ def check(self, *args):
+ if (not self.run_flag) or (self.connect_tmp == 0) : #7分钟无数据读取,则认为是掉线了
+ print("tcp reconnect!!!!!!!!!!!!!!!!!!")
+ EventMesh.publish(constants.EVENT.SET_CONNECT,0) #标记断网
+ if(self.sock != None) :
+ self.sock.close()
+ _thread.start_new_thread(self.reconnect, ()) #重连
+
+ self.connect_tmp = 0
+
+ def reconnect(self, *args):
+ self.connect()
+
+ def send(self, topic, msg):
+ # print("send msg:{}".format(msg))
+ self.sock.send(msg)
+
+ def recv(self):
+ data = b''
+ while True:
+ try:
+ r = self.sock.recv(512)
+ except Exception as e:
+ self.run_flag = False
+ if(self.sock != None) :
+ self.sock.close()
+ _thread.start_new_thread(self.reconnect, ())
+ break
+ if not r:
+ self.run_flag = False
+ if(self.sock != None) :
+ self.sock.close()
+ _thread.start_new_thread(self.reconnect, ())
+ break
+ data = data + r
+ if data[-1] != 0x5d and len(data)<10*1024: #']':
+ continue
+ self.connect_tmp = 1 #有数据,就认为是连接状态
+ print("TCP:recv:len:{} type:{}".format(len(data),type(data)))
+ EventMesh.publish(constants.EVENT.SET_CONNECT, 1)
+ data_str = data.decode('ascii')
+ data_str = data_str.split(']')
+ if len(data_str) < 3 :
+ self.resolver.handler(data)
+ else :
+ for i in range(len(data_str)):
+ self.resolver.handler(data_str[i].decode("utf-8"))
+ data = b''
+
+
+class NetManager(Abstract):
+ THRESHOLD = 10
+
+ def __init__(self):
+ self.__data_call = dataCall
+ self.__net = net
+ self.check_net = checkNet.CheckNetwork("QuecPython_Helios_Framework", "this latest version")
+ self.timer = osTimer()
+ self.check_net_timeout = 100 * 1000
+
+ def post_processor_after_instantiation(self, *args, **kwargs):
+ count = 0
+ while True:
+ count += 1
+ if count > 5 :
+ return
+ data = dataCall.getInfo(1, 0)
+ print("data call INFO {}".format(data))
+ if data[2][0]:
+ break
+ utime.sleep(1)
+ self.__data_call.start(2, 0, "", "", "", 0)
+ self.__data_call.setCallback(self.__datacall_cb)
+
+ def __datacall_cb(self, args):
+ pdp = args[0]
+ nw_sta = args[1]
+ if nw_sta == 1:
+ state = 2
+ print("*** network %d connected! ***" % pdp)
+ EventMesh.publish('network_state', state)
+ else:
+ state = 3
+ print("*** network %d not connected! ***" % pdp)
+ EventMesh.publish('network_state', state)
+
+def wifiScan_cb(args):
+ EventMesh.publish(constants.EVENT.WIFIINFO, args)
+
+class LocationManager(Abstract):
+
+ def __init__(self):
+ self.gps = None
+ self.match = GPSMatch()
+ self.timer_read_GPS_info = osTimer()
+ self.wifi_data = []
+ self.gps_data = []
+ self.cell_data = []
+ self.location_timer_count = 0
+ self.location_check_data_timer_count = 0
+ self.location_type = 0 #定位类型,0:正常定位,有gps数据或60秒关闭;1:测试模式,只有发CLOSE_LOCATION消息才关闭
+ @staticmethod
+ def get_date():
+ return "{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])
+
+ @staticmethod
+ def get_time():
+ return "{:02d}:{:02d}:{:02d}".format(*utime.localtime()[3:6])
+
+ def post_processor_after_instantiation(self):
+ _gps_cfg = {
+ "UARTn": UART.UART1,
+ "buadrate": 115200,
+ "databits": 8,
+ "parity": 0,
+ "stopbits": 1,
+ "flowctl": 0,
+ "PowerPin": Pin.GPIO2,
+ "StandbyPin": Pin.GPIO3,
+ "BackupPin": None,
+ "gps_mode": 0x01,
+ }
+ self.gps = GPS(**_gps_cfg)
+ self.gps.power_switch(0)#关闭GPS
+ EventMesh.subscribe(constants.EVENT.GPSOPEN, self.gps_open)
+ EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)
+ EventMesh.subscribe(constants.EVENT.START_LOCATION, self.start_location)
+ EventMesh.subscribe(constants.EVENT.WIFIINFO, self.WIFI_INFO)
+ EventMesh.subscribe(constants.EVENT.WIFISCANOPEN,self.WIFI_scan_open)
+ EventMesh.subscribe(constants.EVENT.CLOSE_LOCATION,self.close_location)
+
+ #EventMesh.subscribe(constants.EVENT.GPSCLOSE, self.gps_close)
+
+ def start_location(self, event, msg):
+ #self.gps_open(event, msg)
+ # print("start_location")
+ EventMesh.publish(constants.EVENT.GPSOPEN)
+ self.location_timer_count = 0
+ self.timer_read_GPS_info.start(1000, 1, self.location_timer)
+ self.wifi_data = []
+ self.gps_data = []
+ self.cell_data = []
+ EventMesh.publish(constants.EVENT.WIFISCANOPEN)
+ if msg != None :
+ self.location_type = msg
+ else :
+ self.location_type = 0
+
+ def close_location(self, event, msg):
+ self.gps.power_switch(0)
+ wifiScan.control(0)
+ self.timer_read_GPS_info.stop()
+
+ def WIFI_INFO(self, event, msg):
+ self.wifi_data = msg
+ # print("WIFI_INFO:")
+ # print([msg[0],msg])
+
+ def WIFI_scan_open(self, event, msg):
+ #print("WIFI_scan_open")
+ self.wifi_data = []
+ if wifiScan.support():
+ if wifiScan.getState() == False :
+ wifiScan.control(1)
+ wifiScan.setConfig(4, 2, 5, 6, 0) #设置WiFi参数,10秒上层,两轮,最多6个,6秒底层,PS优先
+ wifiScan.setCallback(wifiScan_cb) #注册回调函数
+ wifiScan.asyncStart()
+ #print("wifiScan.asyncStart")
+ else :
+ print("WIFI_scan_open:error1")
+
+
+
+ def gps_open(self, event, msg):
+ #print("publish:gps_open")
+ quecgnss.init()
+ self.gps.__gps_nmea_data_clean()
+
+
+ def gps_close(self, event, msg):
+ quecgnss.gnssEnable(0)
+
+
+ def location_timer(self, *args, **kwargs):
+ data = ""
+ self.location_timer_count = self.location_timer_count +1
+ self.location_check_data_timer_count = self.location_check_data_timer_count+1
+ if self.location_check_data_timer_count > 5 :#5秒查一次
+ self.location_check_data_timer_count = 0
+ #print(self.location_timer_count)
+ #检查wifi数据
+ if self.wifi_data == [] or (self.wifi_data != [] and self.wifi_data[0] == 0):#and self.wifi_data[0] <= 0:
+ EventMesh.publish(constants.EVENT.WIFISCANOPEN)
+ #检查GNSS数据
+ if self.gps_data == [] and quecgnss.get_state() == 2:
+ self.gps.__gps_nmea_data_clean()
+ data = quecgnss.read(4096)
+ #print(data[1].decode())
+ if data[0] > 0 : #有数据
+ if self.gps.__check_gps_valid(data[1].decode()): #数据齐全
+ match_gmc_data = self.match.GxRMC(data[1]).split(",")
+ match_vtg_data = self.match.GxVTG(data[1]).split(",")
+ match_gga_data = self.match.GxGGA(data[1]).split(",")
+ data = self.gps.read_coordinates(data[1])
+ latitude_tmp = str(data[1]).split(".")
+ if len(latitude_tmp) >= 2 and len(latitude_tmp[1])>=5:
+ latitude = "%s.%s"%(latitude_tmp[0],latitude_tmp[1][:6])
+ latitude = "%s,%s"%(latitude,match_gmc_data[4] )
+ longitude_tmp = str(data[0]).split(".")
+ if len(longitude_tmp) >= 2 and len(longitude_tmp[1])>=5:
+ longitude = "%s.%s"%(longitude_tmp[0],longitude_tmp[1][:6])
+ longitude = "%s,%s"%(longitude,match_gmc_data[6] ) #match_gmc_data[6] + str(data[1])
+ high = str(data[2])
+ self.gps_data = {
+ "latitude": latitude,
+ "longitude": longitude,
+ "high": high,
+ "direction": match_vtg_data[1],
+ "speed": match_vtg_data[5],
+ "number": match_gga_data[7],
+ }
+ #检查基站数据
+ if self.cell_data == []:
+
+ self.cell_data = net.getCellInfo()
+ for cell in self.cell_data:
+ if cell and cell[0][0] == 0 :
+ self.cell_data = cell
+ break
+ if self.location_type == 1: #测试模式
+ EventMesh.publish("PUSH_LOCATION_DATA", [data,self.wifi_data,self.cell_data])
+ elif self.location_type == 0: #正常模式
+ if self.gps_data != [] or self.location_timer_count > 60: #or( self.wifi_data != [] and self.cell_data != []):
+ #print("publish:READ_LOCATION")
+ EventMesh.publish(constants.EVENT.READ_LOCATION, [self.gps_data,self.wifi_data,self.cell_data])
+ EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
+ # if self.location_timer_count > 60 : #1分钟定位超时,超时发送数据,停止定时器及关闭定位
+ # EventMesh.publish(constants.EVENT.CLOSE_LOCATION)#关闭定位
+ # EventMesh.publish(constants.EVENT.READ_LOCATION, [self.gps_data,self.wifi_data,self.cell_data])#发送数据
+
+
+
+
+# class AddrBookManager(Abstract):
+# # 通讯录
+# def post_processor_after_instantiation(self):
+# EventMesh.subscribe("get_addr_book_list", self.get)
+# # 可通过此push_addr_book_list主动推送
+
+# def get(self, event, msg):
+# print("phonebook %s"%(msg))
+# return {
+# "张三": "15692025051",
+# "李四": "15692025051",
+# "崔崔": "15692025051",
+# "鱼鱼": "15692025051",
+# "坤坤": "15692025051",
+# }
+# def set(self, event, msg):
+# print("phonebook %s"%(msg))
+class AddrBookManager(Abstract):
+ # 通讯录
+ def __init__(self):
+ self.read_phonebook = {}
+ self.check_json = 0
+ self.check_json = ql_fs.path_exists("/ext/static/storage_file/phonebook.json")
+
+ if self.check_json == True:
+ with open("/ext/static/storage_file/phonebook.json","r",encoding="utf-8") as fd:
+ self.read_phonebook = ujson.load(fd)
+ print("读取电话本")
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("get_phonebook_list", self.get)
+ EventMesh.subscribe("set_phonebook_list", self.set)
+
+ def get(self, event, msg):
+ self.check_json = ql_fs.path_exists("/ext/static/storage_file/phonebook.json")
+ return [self.check_json,self.read_phonebook]
+
+ def set(self, event, msg):
+ self.check_json = msg[0]
+ self.read_phonebook = msg[1]
+
+import sms
+class MsgManager(Abstract):
+ # 短信
+ def __init__(self):
+ self.msg_nums = 0
+ self.msg_detail = ""
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("get_msg_nums", self.get_msg_nums)
+ # 可通过此push_addr_book_list主动推送
+ EventMesh.subscribe("get_msg_detail", self.get_msg_detail)
+
+ def get_msg_nums(self, event, msg):
+
+ self.msg_nums = sms.getMsgNums()
+ print("self.msg_nums {}:".format(self.msg_nums))
+ return self.msg_nums
+
+ def get_msg_detail(self, event, msg):
+
+ # self.msg_detail = sms.searchTextMsg(self.msg_nums)
+ # print("self.msg_detai {}:".format(self.msg_detai))
+ return{
+ "小明":"有内鬼,停止交易",
+ "小红":"今晚十点一起吃饭"
+ }
+
+class MsgdetailManager(Abstract):
+ def __init__(self):
+ self.level = 0
+ self.msg_name = ""
+ self.msg_content = ""
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("save_msg_name", self.save_msg_name)
+ EventMesh.subscribe("save_msg_content", self.save_msg_content)
+ EventMesh.subscribe("get_msg_name", self.get_msg_name)
+ EventMesh.subscribe("get_msg_content", self.get_msg_content)
+
+ def save_msg_name(self, event, msg):
+ self.msg_name = str(msg)
+
+ def save_msg_content(self, event, msg):
+ self.msg_content = str(msg)
+
+ def get_msg_content(self, event, msg):
+ return self.msg_content
+
+ def get_msg_name(self, event, msg):
+ return self.msg_name
+
+class CallLogManager(Abstract):
+ # 通话记录
+ def __init__(self):
+ self.read_call_log = {}
+ self.check_json = ql_fs.path_exists("/ext/static/storage_file/Call_log.json")
+
+ if self.check_json == True:
+ with open("/ext/static/storage_file/Call_log.json","r",encoding="utf-8") as fd:
+ self.read_call_log = ujson.load(fd)
+ print("读取通话记录")
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("get_call_log_list", self.get)
+ EventMesh.subscribe("set_call_log_list", self.set)
+
+ def get(self, event, msg):
+ self.check_json = ql_fs.path_exists("/ext/static/storage_file/Call_log.json")
+ return [self.check_json,self.read_call_log]
+
+ def set(self, event, msg):
+ self.check_json = msg[0]
+ self.read_call_log = msg[1]
+
+ # def call_usr(self,event,msg):
+ # content = self.log[msg]
+ # # 参数1 姓名 参数2 电话 参数3 1/主动呼叫 0别人呼叫
+ # EventMesh.publish("call_in", [content[2], content[0], 1])
+
+
+
+class PhoneCallingManager(Abstract):
+ def __init__(self):
+ self.phonenum = ""
+ self.phonename = ""
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("save_phonenum", self.save_phonenum)
+ EventMesh.subscribe("get_phonenum", self.get_phonenum)
+ EventMesh.subscribe("get_phonename", self.get_phonename)
+ EventMesh.subscribe("save_phonename", self.save_phonename)
+
+ def get_phonename(self, event, msg):
+ return self.phonename
+
+ def save_phonename(self, event, msg):
+ self.phonename = str(msg)
+
+ def save_phonenum(self, event, msg):
+ self.phonenum = str(msg)
+
+ def get_phonenum(self, event, msg):
+ return self.phonenum
+
+#获取心率 血氧历史数据
+class getOldHrDataManager(Abstract):
+ def __init__(self):
+ self.oldHr = 0
+ self.oldspo2 = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_old_hr_data", self.save_hr_value)
+ EventMesh.subscribe("get_old_hr_data", self.get_hr_value)
+ EventMesh.subscribe("set_old_spo2_data", self.save_spo2_value)
+ EventMesh.subscribe("get_old_spo2_data", self.get_spo2_value)
+
+ def save_hr_value(self, event, msg):
+ self.oldHr = msg
+
+ def get_hr_value(self, event, msg):
+ return self.oldHr
+
+ def save_spo2_value(self, event, msg):
+ self.oldspo2 = msg
+
+ def get_spo2_value(self, event, msg):
+ return self.oldspo2
+
+
+class getWeatherDataManager(Abstract):
+ # 获取天气数据
+ def __init__(self):
+ self.date = {} #日期23-04-07
+ self.time = {} #14:41:41
+ self.content = {} #天气描述
+ self.type = None #天气类型
+ self.temp = None #当前温度
+ self.min_temp = None #最低温度
+ self.max_temp = None #最高温度
+ self.city = {} #城市
+ self.no_data = 0#0沒有数据 1有数据
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("get_weather_data", self.get)
+ EventMesh.subscribe("set_weather_data", self.set)
+
+ def get(self, event, msg):
+ return [self.date,self.time,self.content,self.type,self.temp,self.min_temp,self.max_temp,self.city,self.no_data]
+
+ def set(self, event, msg):
+ self.date = msg[0]
+ self.time = msg[1]
+ self.content = msg[2]
+ self.type = msg[3]
+ self.temp = msg[4]
+ self.min_temp = msg[5]
+ self.max_temp = msg[6]
+ self.city = msg[7]
+ self.no_data = msg[8]
+
+
+class getHrTimeManager(Abstract):
+ def __init__(self):
+ self.set_time = 0
+ self.set_hr = 0 #0关闭 1手动 2 自动测量按照时间间隔测试心率
+ self.set_spo2 = 0
+ check = ql_fs.path_exists("/ext/static/storage_file/config.json")
+ if check == True:
+ with open("/ext/static/storage_file/config.json","r") as fd:
+ self.read_data = ujson.load(fd)
+ if self.read_data != {}:
+ b = str("measure_time") in self.read_data.keys()
+ if b == True:
+ self.set_time = self.read_data["measure_time"]
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_time_hr_spo2", self.set_time_hr_spo2)
+ EventMesh.subscribe("get_time_hr_spo2", self.get_time_hr_spo2)
+ EventMesh.subscribe("set_hr_state", self.set_hr_state)
+ EventMesh.subscribe("get_hr_state", self.get_hr_state)
+ EventMesh.subscribe("set_spo2_state", self.set_spo2_state)
+ EventMesh.subscribe("get_spo2_state", self.get_spo2_state)
+
+ def set_time_hr_spo2(self, event, msg):
+ self.set_time = msg
+
+ def get_time_hr_spo2(self, event, msg):
+
+ return self.set_time
+
+ def set_hr_state(self, event, msg):
+ self.set_hr = msg
+
+ def get_hr_state(self, event, msg):
+ return self.set_hr
+
+ def set_spo2_state(self, event, msg):
+ self.set_spo2 = msg
+
+ def get_spo2_state(self, event, msg):
+ return self.set_spo2
+
+class getBrightnessManager(Abstract):#获取亮度级别
+ def __init__(self):
+ self.level = 5#默认值5
+ self.read_data = {}
+ self.PWM_backlight = None
+ check = ql_fs.path_exists("/ext/static/storage_file/config.json")
+ if check == True:
+ with open("/ext/static/storage_file/config.json","r") as fd:
+ self.read_data = ujson.load(fd)
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("get_brightness_level", self.get_brightness_level)
+ EventMesh.subscribe("push_add_brightness_level", self.add)
+ EventMesh.subscribe("push_reduce_brightness_level", self.reduce)
+ EventMesh.subscribe("set_brightness_level", self.set_brightness_level)
+
+ def set_brightness_level(self, event, msg):
+ self.level = msg
+
+ def get_brightness_level(self, event, msg):
+ if self.read_data != {}:
+ b = str("brightness_level") in self.read_data.keys()
+ if b == True:
+ self.level = self.read_data["brightness_level"]
+ return self.level
+
+ def add(self, event, msg):
+ if self.level < 10:
+ self.level = self.level + 1
+ self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, self.level, 10)
+ self.PWM_backlight.open()
+
+ self.read_data = EventMesh.publish("get_storage_data")
+ self.read_data["brightness_level"] = self.level
+
+ EventMesh.publish("set_storage_data", self.read_data)
+ with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_data,fd)
+
+ def reduce(self, event, msg):
+ if self.level > 0:
+ self.level = self.level - 1
+ if self.level <= 0:
+ self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, 1, 10)
+ else:
+ self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS,self.level, 10)
+
+ self.PWM_backlight.open()
+ self.read_data = EventMesh.publish("get_storage_data")
+ self.read_data["brightness_level"] = self.level
+ EventMesh.publish("set_storage_data", self.read_data)
+ with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_data,fd)
+
+class getStorageDataManager(Abstract):#获取内存数据
+ def __init__(self):
+ self.read_data = {}
+ check = ql_fs.path_exists("/ext/static/storage_file/config.json")
+ if check == True:
+ with open("/ext/static/storage_file/config.json","r") as fd:
+ self.read_data = ujson.load(fd)
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_storage_data", self.set_storage_data)
+ EventMesh.subscribe("get_storage_data", self.get_storage_data)
+
+ def set_storage_data(self, event, msg):
+ if msg != None:
+ self.read_data = msg
+
+ def get_storage_data(self, event, msg):
+ return self.read_data
+
+class getVolumSizeManager(Abstract):#设置或获取音量大小数据
+ def __init__(self):
+ self.volume_size = 8
+ self.read_data = {}
+ check = ql_fs.path_exists("/ext/static/storage_file/config.json")
+ print("check:{}".format(check))
+ if check == True:
+ with open("/ext/static/storage_file/config.json","r") as fd:
+ self.read_data = ujson.load(fd)
+ if self.read_data != {}:
+ b = str("volum") in self.read_data.keys()
+ if b == True:
+ self.volume_size = self.read_data["volum"]
+ else:
+ self.volume_size = 8
+ else:
+ self.volume_size = 8
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("set_volum_size", self.set_volum_size)
+ EventMesh.subscribe("get_volum_size", self.get_volum_size)
+
+ def set_volum_size(self, event, msg):
+ self.volume_size = msg
+
+ def get_volum_size(self, event, msg):
+ return self.volume_size
+
--- /dev/null
+import utime
+import osTimer
+import lvgl as lv
+from ext import EventMesh
+from machine import Timer
+import voiceCall
+import osTimer
+from ext import constants
+from misc import Power
+import pm
+import ujson
+import audio
+import ql_fs
+import audio
+import sms
+from machine import Pin
+from ext.lcd import lcd,lcd_ctrl,tp_cst816
+from misc import PWM
+import uos
+import gc
+# -----------------------------------------style create--------------------------------------
+style_screen = lv.style_t()
+style_screen.init()
+style_screen.set_radius(0)
+style_screen.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+style_screen.set_bg_opa(255)
+style_screen.set_border_width(0)
+style_screen.set_pad_left(0)
+style_screen.set_pad_right(0)
+style_screen.set_pad_top(0)
+style_screen.set_pad_bottom(0)
+# 默认白色
+
+style_font_youyuan_20 = lv.style_t()
+style_font_youyuan_20.init()
+style_font_youyuan_20.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+style_font_youyuan_20.set_text_font_v2("font_22.bin",22,0)
+
+style_font_youyuan_40 = lv.style_t()
+style_font_youyuan_40.init()
+style_font_youyuan_40.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+style_font_youyuan_40.set_text_font_v2("font_40.bin",40,0)
+#黑色
+style_font_youyuan_20_black = lv.style_t()
+style_font_youyuan_20_black.init()
+style_font_youyuan_20_black.set_text_color(lv.color_make(0x00, 0x00, 0x00))
+style_font_youyuan_20_black.set_text_font_v2("font_22.bin",22,0)
+
+
+class LabelStyle(object):
+ def __init__(self):
+ self.style = lv.style_t()
+
+ def style_label(self, font):
+ self.style.init()
+ self.style.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+ self.style.set_text_font(font)
+ return self.style
+
+# cont style
+class ContStyle(object):
+ def __init__(self):
+ self.style = lv.style_t()
+
+ def style_cont(self, radius, color1, color2, opa):
+ self.style.init()
+ self.style.set_radius(radius)
+ self.style.set_bg_color(color1)
+ self.style.set_bg_grad_color(color2)
+ self.style.set_bg_grad_dir(lv.GRAD_DIR.VER)
+ self.style.set_bg_opa(opa)
+ self.style.set_border_width(0)
+ self.style.set_pad_left(0)
+ self.style.set_pad_right(0)
+ self.style.set_pad_top(0)
+ self.style.set_pad_bottom(0)
+ return self.style
+
+style_img = lv.style_t()
+style_img.init()
+style_img.set_img_opa(255)
+
+style_line = lv.style_t()
+style_line.init()
+style_line.set_line_width(2)
+style_line.set_line_color(lv.color_make(0xff, 0xff, 0xff))
+
+
+style_list = lv.style_t()
+style_list.init()
+style_list.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+style_list.set_radius(0)
+style_list.set_bg_opa(255)
+style_list.set_border_width(0)
+style_list.set_pad_left(0)
+style_list.set_pad_right(0)
+style_list.set_pad_top(0)
+
+style_list_scro = lv.style_t()
+style_list_scro.init()
+style_list_scro.set_bg_opa(0)
+
+# create style style_btn
+style_btn = lv.style_t()
+style_btn.init()
+style_btn.set_bg_opa(0)
+style_btn.set_shadow_opa(0)
+style_btn.set_border_width(0)
+
+style_wechat_btn = lv.style_t()
+style_wechat_btn.init()
+style_wechat_btn.set_bg_color(lv.color_make(0x1E, 0x26, 0xff))
+style_wechat_btn.set_border_width(0)
+style_wechat_btn.set_shadow_opa(0)
+
+style_contact_btn = lv.style_t()
+style_contact_btn.init()
+style_contact_btn.set_bg_color(lv.color_make(0xff, 0xff, 0xff))
+style_contact_btn.set_border_width(0)
+style_contact_btn.set_shadow_opa(0)
+
+style_common_bg_rect_btn_pressed = lv.style_t()
+style_common_bg_rect_btn_pressed.init()
+style_common_bg_rect_btn_pressed.set_bg_color(lv.color_make(0x1E, 0x26, 0xff))
+style_common_bg_rect_btn_pressed.set_bg_opa(100)
+style_common_bg_rect_btn_pressed.set_border_width(0)
+style_common_bg_rect_btn_pressed.set_shadow_opa(0)
+
+style_contact_btn_pressed = lv.style_t()
+style_contact_btn_pressed.init()
+style_contact_btn_pressed.set_radius(5)
+style_contact_btn_pressed.set_bg_color(lv.color_make(0xff,0xff,0xff))
+style_contact_btn_pressed.set_bg_grad_color(lv.color_make(0x21,0x95,0xf6))
+style_contact_btn_pressed.set_bg_grad_dir(lv.GRAD_DIR.HOR)
+style_contact_btn_pressed.set_bg_opa(217)
+style_contact_btn_pressed.set_border_color(lv.color_make(0x21,0x95,0xf6))
+style_contact_btn_pressed.set_border_width(0)
+style_contact_btn_pressed.set_border_opa(255)
+style_contact_btn_pressed.set_text_color(lv.color_make(0x00,0x00,0x00))
+
+
+style_alipay_btn = lv.style_t()
+style_alipay_btn.init()
+style_alipay_btn.set_bg_color(lv.color_make(0xFF, 0xFF, 0xff))
+style_alipay_btn.set_bg_opa(20)
+style_alipay_btn.set_border_width(0)
+style_alipay_btn.set_shadow_opa(0)
+
+
+
+style_circle = lv.style_t()
+style_circle.init()
+style_circle.set_bg_color(lv.color_make(0xff, 0xff, 0xff))
+style_circle.set_radius(0x7FFF)
+
+
+
+from ext.common import Abstract
+
+class Screen(Abstract):
+ def __init__(self):
+ self.meta = None
+ self.meta_info = None
+ self.last_screen_info = None
+ self.bg_img = None
+
+ def set_bg_img(self, _fp):
+ print("bg _fp = {} NAME = {} bg_img = {}".format(_fp, self.NAME, self.bg_img))
+ if self.bg_img:
+ self.bg_img.set_src(_fp)
+
+ def load_screen(self, e, msg):
+ print("msg = {}".format(msg))
+ EventMesh.publish("load_screen", msg)
+
+
+
+ def load(self):
+ pass
+
+ def get_meta(self):
+ return self.meta
+
+ def Close(self):
+ pass
+
+ def done_left_to_right(self):
+ pass
+
+ def done_right_to_left(self):
+ pass
+
+ def done_bottom_to_top(self):
+ pass
+
+ def done_top_to_bottom(self):
+ pass
+
+ def done_return(self):
+ pass
+
+ def done_click(self):
+ pass
+
+ def done_error(self):
+ pass
+
+PHONE_CALL_MAX_DATA = 22
+line_points = [{"x":0,"y":0},{"x":0,"y":35}]
+phone_screen = None
+phone_line = None
+phone_label = None
+phone_one = None
+phone_two = None
+phone_three = None
+phone_four = None
+phone_five = None
+phone_six = None
+phone_seven = None
+phone_eight = None
+phone_nine = None
+phone_start = None
+phone_zero = None
+phone_hash = None
+phone_call = None
+phone_call_btn = None
+phone_contact = None
+phone_contact_btn = None
+phone_delete = None
+phone_delete_btn = None
+
+class PhoneScreen(Screen):
+ NAME = "Phone"
+
+ def __init__(self):
+
+ super().__init__()
+ self.meta = None
+ self.phone_num = ''
+ self.phone_list = []
+ self.button = 0
+ self.timer = osTimer()
+ self.count = 0
+
+
+
+ def initialization(self):
+ self.phone_num=''
+ self.phone_list = []
+ global phone_screen ,phone_line,phone_label,phone_one,phone_two,phone_three,phone_four,phone_five,phone_six,phone_seven,phone_eight,phone_nine,phone_start,\
+ phone_zero,phone_hash,phone_call,phone_call_btn,phone_contact,phone_contact_btn,phone_delete,phone_delete_btn
+ if phone_screen == None:
+ phone_screen = lv.obj()
+ phone_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ phone_line = lv.line(phone_screen)
+ phone_line.set_points(line_points,2)
+ phone_line.set_pos(235,58)
+ phone_line.set_size(2,35)
+ phone_line.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ phone_line.add_style(style_line,0)
+
+ phone_label = lv.label(phone_screen)
+ phone_label.set_pos(0, 45)
+ phone_label.set_size(0, 55)
+ phone_label.set_text(" ")
+ phone_label.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_label.set_long_mode(lv.label.LONG.CLIP)
+ phone_label.set_style_text_align(lv.TEXT_ALIGN.RIGHT, 0)
+
+ phone_one = lv.img(phone_screen)
+ phone_one.set_src("E:/static/IMAGE_NUMBER_KEY1_ICON.png")
+ phone_one.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_one.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_one.set_pos(3, 100)
+
+ phone_two = lv.img(phone_screen)
+ phone_two.set_size(76, 40)
+ phone_two.set_src("E:/static/IMAGE_NUMBER_KEY2_ICON.png")
+ phone_two.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_two.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_two.set_pos(82, 100)
+
+ phone_three = lv.img(phone_screen)
+ phone_three.set_size(76, 40)
+ phone_three.set_src("E:/static/IMAGE_NUMBER_KEY3_ICON.png")
+ phone_three.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_three.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_three.set_pos(161, 100)
+
+ phone_four = lv.img(phone_screen)
+ phone_four.set_size(76, 40)
+ phone_four.set_src("E:/static/IMAGE_NUMBER_KEY4_ICON.png")
+ phone_four.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_four.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_four.set_pos(3, 142)
+
+ phone_five = lv.img(phone_screen)
+ phone_five.set_size(76, 40)
+ phone_five.set_src("E:/static/IMAGE_NUMBER_KEY5_ICON.png")
+ phone_five.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_five.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_five.set_pos(82, 142)
+
+ phone_six = lv.img(phone_screen)
+ phone_six.set_size(76, 40)
+ phone_six.set_src("E:/static/IMAGE_NUMBER_KEY6_ICON.png")
+ phone_six.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_six.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_six.set_pos(161, 142)
+
+ phone_seven = lv.img(phone_screen)
+ phone_seven.set_size(76, 40)
+ phone_seven.set_src("E:/static/IMAGE_NUMBER_KEY7_ICON.png")
+ phone_seven.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_seven.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_seven.set_pos(3, 184)
+
+ phone_eight = lv.img(phone_screen)
+ phone_eight.set_size(76, 40)
+ phone_eight.set_src("E:/static/IMAGE_NUMBER_KEY8_ICON.png")
+ phone_eight.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_eight.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_eight.set_pos(82, 184)
+
+ phone_nine = lv.img(phone_screen)
+ phone_nine.set_size(76, 40)
+ phone_nine.set_src("E:/static/IMAGE_NUMBER_KEY9_ICON.png")
+ phone_nine.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_nine.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_nine.set_pos(161, 184)
+
+ phone_start = lv.img(phone_screen)
+ phone_start.set_size(76, 40)
+ phone_start.set_src("E:/static/IMAGE_NUMBER_KEYSTAR_ICON.png")
+ phone_start.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_start.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_start.set_pos(3, 226)
+
+ phone_zero = lv.img(phone_screen)
+ phone_zero.set_size(76, 40)
+ phone_zero.set_src("E:/static/IMAGE_NUMBER_KEY0_ICON.png")
+ phone_zero.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_zero.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_zero.set_pos(82, 226)
+
+ phone_hash = lv.img(phone_screen)
+ phone_hash.set_size(76, 40)
+ phone_hash.set_src("E:/static/IMAGE_NUMBER_KEYHASH_ICON.png")
+ phone_hash.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_hash.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_hash.set_pos(161, 226)
+
+ phone_call = lv.img(phone_screen)
+ phone_call.set_size(76, 40)
+ phone_call.set_src("E:/static/IMAGE_BUTTON_DIAL.png")
+ phone_call.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_call.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_call.set_pos(3, 268)
+
+ phone_call_btn = lv.img(phone_screen)
+ phone_call_btn.set_size(76, 52)
+ phone_call_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_call_btn.set_pos(3, 268)
+
+ phone_contact = lv.img(phone_screen)
+ phone_contact.set_size(64, 40)
+ phone_contact.set_src("E:/static/IMAGE_BUTTON_DIAL_CONTACT.png")
+ phone_contact.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_contact.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_contact.set_pos(87, 268)
+
+ phone_contact_btn = lv.img(phone_screen)
+ phone_contact_btn.set_size(76, 52)
+ phone_contact_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_contact_btn.set_pos(87, 268)
+
+ phone_delete = lv.img(phone_screen)
+ phone_delete.set_size(76, 40)
+ phone_delete.set_src("E:/static/IMAGE_BUTTON_DELKEY.png")
+ phone_delete.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_delete.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_delete.set_pos(161, 268)
+
+ phone_delete_btn = lv.img(phone_screen)
+ phone_delete_btn.set_size(76, 52)
+ phone_delete_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_delete_btn.set_pos(161, 268)
+
+ self.meta = phone_screen
+
+ phone_one.add_event_cb(lambda e: self.one(e),
+ lv.EVENT.CLICKED, None)
+ phone_two.add_event_cb(lambda e: self.two(e),
+ lv.EVENT.CLICKED, None)
+ phone_three.add_event_cb(lambda e: self.three(e),
+ lv.EVENT.CLICKED, None)
+ phone_four.add_event_cb(lambda e: self.four(e),
+ lv.EVENT.CLICKED, None)
+ phone_five.add_event_cb(lambda e: self.five(e),
+ lv.EVENT.CLICKED, None)
+ phone_six.add_event_cb(lambda e: self.six(e),
+ lv.EVENT.CLICKED, None)
+ phone_seven.add_event_cb(lambda e: self.seven(e),
+ lv.EVENT.CLICKED, None)
+ phone_eight.add_event_cb(lambda e: self.eight(e),
+ lv.EVENT.CLICKED, None)
+ phone_nine.add_event_cb(lambda e: self.nine(e),
+ lv.EVENT.CLICKED, None)
+ phone_zero.add_event_cb(lambda e: self.zero(e),
+ lv.EVENT.CLICKED, None)
+
+ phone_call_btn.add_event_cb(lambda e: self.call(e),
+ lv.EVENT.CLICKED, None)
+ phone_contact_btn.add_event_cb(lambda e: self.contact(e),
+ lv.EVENT.CLICKED, None)
+ phone_delete_btn.add_event_cb(lambda e: self.delete(e),
+ lv.EVENT.CLICKED, None)
+
+ phone_start.add_event_cb(lambda e: self.start(e),
+ lv.EVENT.CLICKED, None)#短按显示*
+
+ phone_start.add_event_cb(lambda e: self.pressed_start(e),
+ lv.EVENT.LONG_PRESSED, None)#长按显示+
+
+ phone_start.add_event_cb(lambda e: self.endpressed_start(e),
+ lv.EVENT.RELEASED, None)#释放按键
+
+
+ phone_hash.add_event_cb(lambda e: self.hash(e),
+ lv.EVENT.CLICKED, None)
+
+
+ self.phone_num=''
+ self.phone_list = []
+ self.count = 0
+ phone_label.set_text(" ")
+ # print("self.phone_list :{} self.phone_num:{}".format(self.phone_list,self.phone_num))
+ self.timer.start(1000,1,self.refresh_line)
+
+ def refresh_line(self,e):
+
+ if self.count > 2 :
+ self.count = 1
+ if (self.count%2) == 0:
+ phone_line.clear_flag(lv.obj.FLAG.HIDDEN)
+ else:
+ phone_line.add_flag(lv.obj.FLAG.HIDDEN)
+ self.count+=1
+ def one(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ return
+ self.phone_list.append("1")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def two(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ return
+ self.phone_list.append("2")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def three(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ return
+ self.phone_list.append("3")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def four(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ return
+ self.phone_list.append("4")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def five(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ return
+ self.phone_list.append("5")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def six(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ return
+ self.phone_list.append("6")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def seven(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ return
+ self.phone_list.append("7")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def eight(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ return
+ self.phone_list.append("8")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def nine(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:
+ return
+ self.phone_list.append("9")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def zero(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:#限制拨号数量20个数字
+ return
+ self.phone_list.append("0")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def start(self,e):
+ self.button = 0
+
+ def pressed_start(self,e):
+ self.button = 1
+
+ def endpressed_start(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:#限制拨号数量20个数字
+ return
+
+ if self.button == 1:#长按
+ self.phone_list.append("+")
+ else:#短按
+ self.phone_list.append("*")
+
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def hash(self,e):
+ if len(self.phone_list) >= PHONE_CALL_MAX_DATA:#限制拨号数量20个数字
+ return
+ self.phone_list.append("#")
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+
+ def delete(self,e):
+ if len(self.phone_list) != 0:
+ self.phone_list.pop()
+ self.phone_num = ''.join(self.phone_list)
+ self.show_num()
+
+ def contact(self,e):
+ EventMesh.publish("load_screen", {"screen": "contacts"})
+
+ def call(self,e):
+ self.name = None
+ self.phonebook = {}
+ self.number_tmp = {}
+ if len(self.phone_list) != 0:
+ data = EventMesh.publish("get_phonebook_list")
+ check = data[0]
+ self.phonebook = data[1]
+ # print("check :{}".format(check))
+ if check == 1:#检查通讯录
+ phonebook_keys = sorted(self.phonebook.keys())
+ b = str(self.phone_num) in self.phonebook.values()#查找key中是否包含content电话号码 True 包含在里面 False不包含在里面
+ j = 0
+ if b == True:
+ for i in range(len(self.phonebook)): #字典 key value
+ #'001:张三':15521469561
+ name = self.phonebook[phonebook_keys[j]]
+ name_value = phonebook_keys[j]
+ number_tmp = str(self.phone_num)
+ # print("name :{} number_tmp:{}".format(name,number_tmp))
+ if name.find(number_tmp) != -1:#查找电话号码是否在通讯录里面
+ number_f= name_value
+ name_s = number_f.split(':')
+ name_s = name_s[1]
+ self.name = name_s
+ break
+ j+=1
+ else:
+ self.name = self.phone_num
+ else:
+ self.name = self.phone_num
+
+ EventMesh.publish("save_phonenum",self.phone_num)
+ EventMesh.publish("save_phonename",self.name)#
+ voiceCall.callStart(self.phone_num)
+
+ def show_num(self):
+ len_t = len(self.phone_list)*40
+ if len_t > 230:
+ len_t = 230
+ phone_label.set_size(len_t,45)
+ phone_label.set_pos(230-len_t,60)
+ phone_label.set_text(self.phone_num)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+call_log_screen = None
+contacts_cont_list = None
+call_log_title = None
+none_call_log_title = None
+
+CALLLOG_FLAG = 0
+class CallLogScreen(Screen):
+ NAME = "call_log"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.log_list = []
+ self.read_call_log = {}
+ self.check_json = 0
+ self.call_log_detail_list = None
+
+ self.timer = osTimer()
+ EventMesh.subscribe("call_log_update_show_list", self.call_log_update_show_list)
+
+ def post_processor_before_initialization(self):
+ read_call_log = EventMesh.publish("get_call_log_list")
+ self.check_json = read_call_log[0]
+ self.read_call_log = read_call_log[1]
+
+
+
+ def call_log_update_show_list(self, event, msg):
+ read_call_log = EventMesh.publish("get_call_log_list")
+ print("read_call_log:{}".format(read_call_log))
+ self.check_json = read_call_log[0] #文件是否存在
+ self.read_call_log = read_call_log[1]#通话记录数据
+ self.timer.start(500,0,self.reciving)
+
+ def reciving(self,e):
+ self.btn_create()
+
+ def initialization(self):
+ global call_log_screen,contacts_cont_list ,call_log_title ,none_call_log_title
+ if call_log_screen == None:
+ call_log_screen = lv.obj()
+ call_log_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ contacts_cont_list= lv.obj(call_log_screen)
+ contacts_cont_list.set_pos(0, 50)
+ contacts_cont_list.set_size(240, 270)
+ contacts_cont_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ contacts_cont_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ call_log_title = lv.label(call_log_screen)
+ call_log_title.set_pos(0, 10)
+ call_log_title.set_size(240, 40)
+ call_log_title.set_long_mode(lv.label.LONG.WRAP)
+ call_log_title.set_text("通话记录")
+ call_log_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ call_log_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ none_call_log_title = lv.label(contacts_cont_list)
+ none_call_log_title.set_pos(0, 120)
+ none_call_log_title.set_size(240, 40)
+ none_call_log_title.set_long_mode(lv.label.LONG.WRAP)
+ none_call_log_title.set_text(" ")
+ none_call_log_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ none_call_log_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.call_log_detail_list = lv.obj(call_log_screen)
+ self.meta = call_log_screen
+
+
+ read_call_log = EventMesh.publish("get_call_log_list")
+ print("read_call_log:{}".format(read_call_log))
+ self.check_json = read_call_log[0] #文件是否存在
+ self.read_call_log = read_call_log[1]#通话记录数据
+ if self.check_json == True and self.read_call_log != {}:
+ none_call_log_title.set_text(" ")
+ else:
+ none_call_log_title.set_text("暂无记录")
+ self.btn_create()
+
+ def btn_create(self):
+ global call_log_screen,contacts_cont_list ,call_log_title ,none_call_log_title
+ h = 0
+ if self.check_json == True and len(self.read_call_log) != 0:
+ none_call_log_title.set_text(" ")
+ self.call_log_detail_list.delete()#先删除一次控件
+ self.call_log_detail_list = lv.obj(call_log_screen)
+ self.call_log_detail_list.set_pos(0, 50)
+ self.call_log_detail_list.set_size(240, 270)
+ self.call_log_detail_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ self.call_log_detail_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ sort_tmp = self.read_call_log.values()
+ sort_new = sorted(sort_tmp, key = lambda i: i['timesec'],reverse = True)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
+ # print("self.call_log :{} \r\n sort_new:{}\r\n".format(self.read_call_log,sort_new))
+
+ for sort_new_tmp in sort_new: #字典 key value
+ num_count = sort_new_tmp["count"]#获取通话次数
+ num_name = sort_new_tmp["name"]#获取名称
+ num_phonnum = sort_new_tmp["number"]#获取电话号码
+ num_time = sort_new_tmp["time"]#获取电话号码
+
+ # print("num_count :{} num_name:{} num_time:{}".format(num_count,num_name,num_time))
+ _btn = lv.btn(self.call_log_detail_list)
+ _btn.set_size(240,80)
+ _btn.set_pos(0,82*h)
+ _btn.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+ _btn.add_event_cb(lambda e: self.calling(e),
+ lv.EVENT.CLICKED, None)
+
+
+ _btn_label2 = lv.label(_btn)
+ _btn_label2.set_pos(0, 5)
+ _btn_label2.set_size(0, 25)
+ _btn_label2.set_text(num_phonnum)
+ #_btn_label2.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+ #
+ _btn_label3 = lv.label(_btn)
+ _btn_label3.set_pos(0, 0)
+ _btn_label3.set_size(0, 0)
+ _btn_label3.set_text("(" + str(num_count) + ")")
+ # _btn_label3.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ _btn_label4 = lv.label(_btn)
+ _btn_label4.set_pos(0, 38)
+ _btn_label4.set_size(230, 30)
+ _btn_label4.set_text(num_phonnum)
+ _btn_label4.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ _btn_label4 = lv.label(_btn)
+ _btn_label4.set_pos(0, 5)
+ _btn_label4.set_size(0, 0)
+ _btn_label4.set_text(num_name)
+ # _btn_label4.set_long_mode(lv.obj.LONG.DOT)
+ # _btn_label4.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ _btn_label5 = lv.label(_btn)
+ _btn_label5.set_pos(0, 5)
+ _btn_label5.set_size(230, 28)
+ _btn_label5.set_text(num_name)
+ _btn_label5.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+ h = h + 1
+ else:
+ none_call_log_title.set_text("暂无记录")
+ self.call_log_detail_list.add_flag(lv.obj.FLAG.HIDDEN)#隐藏空文本
+
+ def calling(self,e):
+ global call_log_screen,contacts_cont_list ,call_log_title ,none_call_log_title
+ # print("e.get_text():{} {}".format(e.get_target().get_child(0).get_text(),e.get_target().get_child(3).get_text()))
+ phonnum = int(e.get_target().get_child(0).get_text())
+ phnoname = e.get_target().get_child(3).get_text()
+ # print("phonnum :{} _msg:{}".format(phonnum,phnoname))
+ EventMesh.publish("save_phonenum",phonnum)#保存电话号码用于界面显示获取
+
+ self.name = None
+ self.phonebook = {}
+
+ self.call_log = {}
+ self.call_log_value = {}
+ self.read_call_log = {}
+ self.number_tmp = {}
+
+ data = EventMesh.publish("get_phonebook_list")
+ check = data[0]
+ self.phonebook = data[1]
+ # print("check :{}".format(check))
+ if check == 1:#检查通讯录
+ phonebook_keys = sorted(self.phonebook.keys())
+ b = str(phonnum) in self.phonebook.values()#查找key中是否包含content电话号码 True 包含在里面 False不包含在里面
+ j = 0
+ if b == True:
+ for i in range(len(self.phonebook)): #字典 key value
+ #'001:':15521469561
+ name = self.phonebook[phonebook_keys[j]]
+ name_value = phonebook_keys[j]
+ number_tmp = str(phonnum)
+ # print("name :{} number_tmp:{}".format(name,number_tmp))
+ if name.find(number_tmp) != -1:#查找电话号码是否在通讯录里面
+ number_f= name_value
+ name_s = number_f.split(':')
+ name_s = name_s[1]
+ self.name = name_s
+ break
+ j+=1
+ else:
+ self.name = phnoname
+ else:
+ self.name = phnoname
+
+ if self.name == None:
+ self.name = phnoname
+
+ EventMesh.publish("save_phonename",self.name)#
+ voiceCall.callStart(str(phonnum))
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+# ------------------------------拨打电话-------------dialing screen----------------------------------------------------------
+CALL_LOG_MAX = 50
+dialing_screen = None
+dialing_img = None
+dialing_name = None
+hangup_imgbtn = None
+class DialingScreen(Screen):
+ NAME = "dialing"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+
+ self.call_log = {}
+ self.call_log_value = {}
+ self.read_call_log = {}
+ self.number_tmp = {}
+
+ def initialization(self):
+ global dialing_screen,dialing_img,dialing_name ,hangup_imgbtn
+ if dialing_screen == None:
+ dialing_screen = lv.obj()
+ dialing_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ dialing_img = lv.img(dialing_screen)
+ dialing_img.set_pos(80, 60)
+ dialing_img.set_size(64, 64)
+ dialing_img.set_src("E:/static/IMAGE_NOTICE_CALL.png")
+ dialing_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ dialing_name = lv.label(dialing_screen)
+ dialing_name.set_pos(0, 160)
+ dialing_name.set_size(240, 50)
+ dialing_name.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ dialing_name.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ hangup_imgbtn = lv.img(dialing_screen)
+ hangup_imgbtn.set_size(64, 64)
+ hangup_imgbtn.set_src("E:/static/IMG_CC_HUNGUP1.png")
+ hangup_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ hangup_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ hangup_imgbtn.set_pos(80, 220)
+ hangup_imgbtn.add_event_cb(lambda e: self.hangup(e),
+ lv.EVENT.CLICKED, None)
+ self.meta = dialing_screen
+
+ #获取字符串
+ name = EventMesh.publish("get_phonename")#获取拨打电话名称
+ content = EventMesh.publish("get_phonenum")#获取电话号码
+ time = EventMesh.publish("screen_get_time")#获取系统时间
+
+ # ["15692025051","2","12:59","哥gdh符合双方和开发商开发好看的思考"],
+ # 格式:{"电话号码":{"timesec":'时间戳',"number":'电话号码',"name":'名字',"time":'时间',"count":'通话次数'}}
+
+ dialing_name.set_text(name)#名称
+ # dialing_content.set_text(content)#电话号码
+ num = 0
+
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ # print("time_tmp:{}".format(time_tmp))
+ read_call_log = EventMesh.publish("get_call_log_list")
+ check_json = read_call_log[0]
+
+ if check_json == True:
+ self.read_call_log = read_call_log[1]
+ b = content in self.read_call_log.keys()#查找key中是否包含content电话号码 True 包含在里面 False不包含在里面
+ if b == True:#查找是否有相同的电话号码 有就直接读出来的次数上加一 没有则从1开始加起
+ number_tmp = {}
+ number_tmp = self.read_call_log[content] #通话次数加一
+ num_tmp_t = number_tmp["count"]
+ # print("number_tmp:{} self.read_call_log.value:{}".format(number_tmp,self.read_call_log.values()))
+ else :
+ num_tmp_t = 0
+ num = num_tmp_t
+ else:
+ num = 0 #通话次数
+
+ sort_tmp = {}
+ sort_tmp = self.read_call_log.values()
+ sort_new = {}
+ sort_new = sorted(sort_tmp, key = lambda i: i['timesec'],reverse = True)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
+
+ i = 0
+ # 49 50
+ if len(self.read_call_log) >= CALL_LOG_MAX:
+ for sort_new_tmp in sort_new: #字典 key value
+ i+=1 # 1
+ if i >= CALL_LOG_MAX:#大于50条把最后一条删除掉只保留前面50调最新的数据
+ key_tmp = sort_new_tmp["number"]
+ del self.read_call_log[key_tmp]
+ tmp = {}
+ tmp["count"]= num+1 #通话次数
+ tmp["time"]= "{}:{}".format("%02d"%(time[0][0]),"%02d"%(time[0][1]))#通湖时间
+ tmp["name"]= name #名称
+ tmp["timesec"]= time_tmp #时间戳
+ tmp["number"] = content
+
+ self.read_call_log[content] = tmp
+ with open("/ext/static/storage_file/Call_log.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_call_log,fd)
+ print("创建通话记录")
+ EventMesh.publish("set_call_log_list", [1,self.read_call_log])
+ EventMesh.publish("call_log_update_show_list")
+
+ def hangup(self,e):
+ voiceCall.callEnd()
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+message_popup_screen = None
+message_popup_title = None
+#信息弹窗
+class NewMessageScreen(Screen):
+ NAME = "message_popup"
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+
+ def initialization(self):
+ global message_popup_screen,message_popup_title
+ if message_popup_screen == None :
+ message_popup_screen = lv.obj()
+ message_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ message_popup_title = lv.label(message_popup_screen)
+ message_popup_title.set_pos(0, 150)
+ message_popup_title.set_size(240, 40)
+ message_popup_title.set_text("你有新的消息")
+ message_popup_title.set_long_mode(lv.label.LONG.WRAP)
+ message_popup_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ message_popup_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = message_popup_screen
+ EventMesh.publish("set_sms_clear_all_data",10)
+
+ def done_left_to_right(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def done_right_to_left(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def done_bottom_to_top(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def done_top_to_bottom(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_click(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+message_full_screen = None
+message_full_label = None
+message_full_confirm = None
+message_full_cancel = None
+#信息弹窗
+class MessageFullScreen(Screen):
+ NAME = "message_full"
+ def __init__(self):
+ super().__init__()
+ self.timer = osTimer()
+ self.clear_state = 10
+ self.meta = None
+ EventMesh.subscribe("sms_clear_all_data", self.sms_clear_all_data)
+ EventMesh.subscribe("set_sms_clear_all_data", self.set_sms_clear_all_data)
+
+ def initialization(self):
+ global message_full_screen,message_full_label,message_full_confirm,message_full_cancel
+ if message_full_screen == None :
+ message_full_screen = lv.obj()
+ message_full_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ message_full_label = lv.label(message_full_screen)
+ message_full_label.set_pos(0, 100)
+ message_full_label.set_size(240, 40)
+ message_full_label.set_text("信息已满,是否清除所有?")
+ message_full_label.set_long_mode(lv.label.LONG.WRAP)
+ message_full_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ message_full_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ message_full_confirm = lv.label(message_full_screen)
+ message_full_confirm.set_text("确认")
+ message_full_confirm.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ message_full_confirm.set_size(120, 60)
+ message_full_confirm.set_pos(0,180)
+ message_full_confirm.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ message_full_confirm.add_flag(lv.obj.FLAG.CLICKABLE)
+ message_full_confirm.set_ext_click_area(20)
+
+ message_full_cancel = lv.label(message_full_screen)
+ message_full_cancel.set_text("取消")
+ message_full_cancel.set_size(120, 60)
+ message_full_cancel.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ message_full_cancel.set_pos(120,180)
+ message_full_cancel.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ message_full_cancel.add_flag(lv.obj.FLAG.CLICKABLE)
+ message_full_cancel.set_ext_click_area(20)
+ self.meta = message_full_screen
+
+ message_full_confirm.add_event_cb(lambda e: self.confirm(e),lv.EVENT.CLICKED, None)
+ message_full_cancel.add_event_cb(lambda e: self.concel(e),lv.EVENT.CLICKED, None)
+
+
+ self.timer.start(10*1000,0,self.return_back)
+
+ def return_back(self, e):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def confirm(self, e):
+ self.clear_state = 0
+ # self.timer.start(2*1000,0,self.clear_data)
+ sms.deleteMsg(1,4)
+ EventMesh.publish("load_screen", {"screen": "popup"})
+ def clear_data(self, e):
+ sms.deleteMsg(1,4)
+
+ def sms_clear_all_data(self, event,msg):
+ return self.clear_state
+
+ def set_sms_clear_all_data(self, event,msg):
+ self.clear_state = msg
+
+ def concel(self, e):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def done_left_to_right(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def done_right_to_left(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def done_bottom_to_top(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def done_top_to_bottom(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_click(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+############短信###############################
+MSG_FLAG = 0
+MSG_MAX = 5 #最大显示短信内容条数
+def msg_cb(args):
+ index = args[1]
+ storage = args[2]
+ print("index:{}".format(index))
+ if index >= 49:
+ EventMesh.publish("load_screen", {"screen": "message_full"})
+ else:
+ EventMesh.publish("load_screen", {"screen": "message_popup"})
+
+sms.setCallback(msg_cb)
+style_sms_bg_btn = lv.style_t()
+style_sms_bg_btn.init()
+#style_sms_bg_btn.set_bg_color(lv.color_make(0x00, 0xff, 0x2a))
+style_sms_bg_btn.set_bg_color(lv.color_make(0xff, 0xff, 0xff))
+style_sms_bg_btn.set_border_width(0)
+style_sms_bg_btn.set_shadow_opa(0)
+
+msg_list_screen = None
+msg_top_title = None
+msg_cont_detail = None
+msg_list_t = None
+msg_list_t_done_img = None
+no_msg_text = None
+
+class PopupScreen(Screen):
+ NAME = "popup"
+
+ def __init__(self):
+ super().__init__()
+ # -------------------------------------------popup_menu screen----------------------------------------------------------
+ self.meta = None
+ self.msg_detail = {}
+ self.msg_nums = 0
+ self.sms_detail_list = None
+ EventMesh.subscribe("sms_updata_list_show", self.sms_create_list)
+ def post_processor_before_initialization(self):
+ self.msg_nums = sms.getMsgNums() #获取短信条数
+
+ def initialization(self):
+ global msg_list_screen,msg_top_title,msg_cont_detail,msg_list_t,msg_list_t_done_img,no_msg_text
+ if msg_list_screen == None :
+ msg_list_screen = lv.obj()
+ msg_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ msg_top_title = lv.label(msg_list_screen)
+ msg_top_title.set_pos(0, 10)
+ msg_top_title.set_size(240, 40)
+ msg_top_title.set_text("信息")
+ msg_top_title.set_long_mode(lv.label.LONG.WRAP)
+ msg_top_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ msg_top_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ msg_cont_detail = lv.obj(msg_list_screen)
+ msg_cont_detail.set_pos(0, 50)
+ msg_cont_detail.set_size(240, 270)
+ msg_cont_detail.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ msg_list_t= lv.obj(msg_list_screen)
+ msg_list_t.set_pos(0, 50)
+ msg_list_t.set_size(240, 270)
+ msg_list_t.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ msg_list_t.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ msg_list_t_done_img = lv.img(msg_list_t)
+ msg_list_t_done_img.set_pos(53, 20)
+ msg_list_t_done_img.set_size(134, 117)
+ msg_list_t_done_img.set_src("E:/static/IMAGE_NOTICE_NONE.jpg")
+ msg_list_t_done_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_msg_text = lv.label(msg_list_t)
+ no_msg_text.set_pos(0, 210)
+ no_msg_text.set_size(240, 40)
+ no_msg_text.set_text("暂无信息")
+ no_msg_text.set_long_mode(lv.label.LONG.WRAP)
+ no_msg_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_msg_text.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ self.sms_detail_list = lv.obj(msg_list_screen)
+ self.meta = msg_list_screen
+
+
+ self.msg_nums = sms.getMsgNums()
+ # print("self.msg_nums:{} type:{}".format(self.msg_nums,type(sms.getMsgNums())))
+ self.btn_create(0)
+ def sms_create_list(self,event,msg):
+ self.msg_nums = sms.getMsgNums()
+ self.btn_create(1)
+
+
+ def btn_create(self,msg):
+ global msg_list_screen,msg_top_title,msg_cont_detail,msg_list_t,msg_list_t_done_img,no_msg_text
+ count = 0
+ j = 0
+ print("self.msg_nums:{}".format(self.msg_nums))
+ clear_state = EventMesh.publish("sms_clear_all_data")
+ if self.msg_nums > 0 :
+ msg_list_t_done_img.add_flag(lv.obj.FLAG.HIDDEN)
+ no_msg_text.add_flag(lv.obj.FLAG.HIDDEN)
+ self.sms_detail_list.delete()#先删除一次控件
+
+ self.sms_detail_list = lv.obj(msg_list_screen)
+ self.sms_detail_list.set_pos(0, 50)
+ self.sms_detail_list.set_size(230, 270)
+ self.sms_detail_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ self.sms_detail_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ if self.msg_nums > MSG_MAX:
+ j = self.msg_nums-MSG_MAX
+ for i in range(MSG_MAX):
+ if count > (MSG_MAX-1):#j = 16 -10 6 7 8 9 10 11 12 13 14 15
+ break
+ tmp = sms.searchTextMsg(j)
+
+ if tmp != -1:
+ msg_btn = lv.btn(self.sms_detail_list)
+ msg_btn.set_size(230,65)
+ msg_btn.set_pos(0,67*count)
+ msg_btn.add_style(style_sms_bg_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+ msg_btn.add_event_cb(lambda e: self.calling(e),
+ lv.EVENT.CLICKED, None)
+
+ title = tmp[0]
+ # print("title:{}".format(title))
+ _btn_label2 = lv.label(msg_btn)
+ _btn_label2.set_pos(0, 0)
+ _btn_label2.set_size(0, 0)
+ _btn_label2.set_text(title)
+ # _btn_label2.set_long_mode(lv.label.LONG.DOT)
+ # _btn_label2.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+ #
+ detail = tmp[1]
+ _btn_label3 = lv.label(msg_btn)
+ _btn_label3.set_pos(0, 0)
+ _btn_label3.set_size(0, 0)
+ _btn_label3.set_text(detail)
+ # _btn_label3.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ detail1 = tmp[1]
+ _btn_label4 = lv.label(msg_btn)
+ _btn_label4.set_pos(0, 34)
+ _btn_label4.set_size(180, 28)
+ _btn_label4.set_text(detail1)
+ _btn_label4.set_long_mode(lv.label.LONG.DOT)
+ _btn_label4.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ title1 = tmp[0]
+ _btn_label5 = lv.label(msg_btn)
+ _btn_label5.set_pos(0, 5)
+ _btn_label5.set_size(180, 25)
+ _btn_label5.set_text(title1)
+ _btn_label5.set_long_mode(lv.label.LONG.DOT)
+ _btn_label5.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+ count = count + 1
+ j = j + 1
+ if msg == 1:
+ bottom_btn = self.sms_detail_list.get_child(-1)
+ bottom_btn.scroll_to_view(lv.ANIM.OFF)
+ else:
+ msg_list_t_done_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ no_msg_text.clear_flag(lv.obj.FLAG.HIDDEN)
+ self.sms_detail_list.add_flag(lv.obj.FLAG.HIDDEN)
+ no_msg_text.set_text("暂无信息")
+
+ def calling(self,e):
+ #上传标题和内容
+ _name = e.get_target().get_child(0).get_text()
+ EventMesh.publish("save_msg_name", _name)
+ content = e.get_target().get_child(1).get_text()
+ EventMesh.publish("save_msg_content", content)
+
+ #显示详细页面
+ EventMesh.publish("load_screen", {"screen": "msg_detail"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+
+msg_detail_screen = None
+msg_detail_title = None
+msg_detail_cont = None
+class MsgDetailScreen(Screen):
+ NAME = "msg_detail"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+
+ self.name = ""
+ self.contetn = ""
+
+
+ def initialization(self):
+ global msg_detail_screen,msg_detail_title,msg_detail_cont
+ if msg_detail_screen == None:
+ msg_detail_screen = lv.obj()
+ msg_detail_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ msg_detail_title = lv.label(msg_detail_screen)
+ msg_detail_title.set_pos(0, 10)
+ msg_detail_title.set_size(240, 40)
+ msg_detail_title.set_long_mode(lv.label.LONG.WRAP)
+ msg_detail_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ msg_detail_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ msg_detail_cont = lv.label(msg_detail_screen)
+ msg_detail_cont.set_pos(0, 50)
+ msg_detail_cont.set_size(240, 200)
+ msg_detail_cont.set_long_mode(lv.label.LONG.WRAP)
+ msg_detail_cont.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ msg_detail_cont.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = msg_detail_screen
+ #获取字符串
+ self.name = EventMesh.publish("get_msg_name")
+ self.content = EventMesh.publish("get_msg_content")
+ msg_detail_title.set_text(self.name)
+ msg_detail_cont.set_text(self.content)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def hangup(self,e):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+
+
+# -------------------------------------------heartrate screen----------------------------------------------------------
+heartrate_screen = None
+heartrate_label = None
+heartrate_done_img = None
+heartrate_start_label = None
+heartrate_bpm_label = None
+heartrate_done_label = None
+class HeartrateScreen(Screen):
+ NAME = "heartrate"
+
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.timer = osTimer()
+ self.point = 0
+ self.heart_value = 0
+
+ def initialization(self):
+ global heartrate_screen,heartrate_label,heartrate_done_img ,heartrate_start_label,heartrate_bpm_label ,heartrate_done_label
+ if heartrate_screen == None:
+ heartrate_screen = lv.obj()
+ heartrate_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ heartrate_label = lv.label(heartrate_screen)
+ heartrate_label.set_pos(0, 10)
+ heartrate_label.set_size(240, 40)
+ heartrate_label.set_text("心率")
+ heartrate_label.set_long_mode(lv.label.LONG.WRAP)
+ heartrate_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ heartrate_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ heartrate_done_img = lv.img(heartrate_screen)
+ heartrate_done_img.set_pos(0, 50)
+ heartrate_done_img.set_size(240, 96)
+ heartrate_done_img.set_src("E:/static/IMAGE_HEART_ONLY_TEST_DONE.jpg")
+
+ heartrate_start_label = lv.label(heartrate_screen)
+ heartrate_start_label.set_size(240,40)
+ heartrate_start_label.set_pos(0,160)
+ heartrate_start_label.set_text(" ")
+ heartrate_start_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ heartrate_start_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ heartrate_start_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+
+
+ heartrate_bpm_label = lv.label(heartrate_screen)
+ heartrate_bpm_label.set_size(240, 40)
+ heartrate_bpm_label.set_pos(0, 180)
+ heartrate_bpm_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ heartrate_bpm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ heartrate_bpm_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+
+ heartrate_done_label = lv.label(heartrate_screen)
+ heartrate_done_label.set_size(240, 40)
+ heartrate_done_label.set_pos(0, 270)
+ heartrate_done_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ heartrate_done_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ heartrate_done_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+ self.meta = heartrate_screen
+ heartrate_done_label.set_text(" ")
+ heartrate_bpm_label.set_text(" ")
+ heartrate_start_label.set_text("正在测量中.")
+ EventMesh.publish("set_hr_state",1)#1代表手动进入测试界面
+
+ EventMesh.publish(constants.EVENT.START_HEART)
+
+ def post_processor_after_initialization(self):
+ self.point = 0
+ self.timer.start(1*1000, 1, self.start_measure)
+
+
+
+ def start_measure(self,*args):
+ global heartrate_screen,heartrate_label,heartrate_done_img ,heartrate_start_label,heartrate_bpm_label ,heartrate_done_label
+ self.point = self.point + 1
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ # print("self.heart_value:{}".format(self.heart_value))
+ if self.heart_value < 40:
+ self.heart_value = 0
+ if self.heart_value != 0:
+ heartrate_start_label.set_text(" ")
+ heartrate_bpm_label.set_text("{} bpm".format(self.heart_value))
+ else:
+ heartrate_bpm_label.set_text(" ")
+ if self.point%4 == 0 :
+ heartrate_start_label.set_text("正在测量中..")
+ if self.point%4 == 1 :
+ heartrate_start_label.set_text("正在测量中...")
+ if self.point%4 == 2 :
+ heartrate_start_label.set_text("正在测量中....")
+ if self.point%4 == 3 :
+ heartrate_start_label.set_text("正在测量中.")
+
+ if self.point > 60: #测20s
+ self.heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
+ if self.heart_value > 50:
+ EventMesh.publish("set_old_hr_data",self.heart_value)
+ EventMesh.publish(constants.PROTOCOL.HEART_SEND,self.heart_value)
+ if self.heart_value != 0:
+ heartrate_start_label.set_text(" ")
+ heartrate_bpm_label.set_text("{}bpm".format(self.heart_value))
+ heartrate_done_label.set_text("测量完成")
+ else:
+ heartrate_start_label.set_text("退出,请重新测量")
+
+ self.timer.stop()
+ self.point = 0
+ EventMesh.publish("set_hr_state",0)#0代表关闭测试
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+
+ def Close(self):
+ self.timer.stop()
+ get_hr_state = EventMesh.publish("get_hr_state")
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+ if get_hr_state == 1 or get_spo2_state == 1:
+ EventMesh.publish("set_hr_state",0)#0代表关闭测试
+ EventMesh.publish(constants.EVENT.STOP_HEART)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+# -------------------------------------------toolbox screen----------------------------------------------------------
+
+toolbox_screen = None
+toolbox_text_img = None
+toolbox_cont = None
+toolbox_step_img = None
+toolbox_weather_img = None
+toolbox_alarm_img = None
+toolbox_sms_img = None
+toolbox_countdown_img = None
+toolbox_stopwatch_img = None
+class ToolboxScreen(Screen):
+ NAME = "toolbox"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+
+ def initialization(self):
+ global toolbox_screen,toolbox_text_img,toolbox_cont,toolbox_step_img,toolbox_weather_img ,toolbox_alarm_img ,toolbox_sms_img ,\
+ toolbox_countdown_img,toolbox_stopwatch_img
+ if toolbox_screen == None:
+ toolbox_screen = lv.obj()
+ toolbox_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ toolbox_screen.set_scrollbar_mode(0)
+
+ toolbox_text_img = lv.img(toolbox_screen)
+ toolbox_text_img.set_pos(75, 10)
+ toolbox_text_img.set_size(90, 30)
+ toolbox_text_img.set_src("E:/static/tool/tool_text.png")
+ toolbox_text_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ toolbox_cont = lv.obj(toolbox_screen)
+ toolbox_cont.set_pos(0, 50)
+ toolbox_cont.set_size(240, 270)
+ toolbox_cont_style = ContStyle()
+ toolbox_cont.add_style(
+ toolbox_cont_style.style_cont(0, lv.color_make(0x00, 0x00, 0x00), lv.color_make(0x00, 0x00, 0x00), 255),
+ lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ toolbox_step_img = lv.img(toolbox_cont)
+ toolbox_step_img.set_pos(4, 0)
+ toolbox_step_img.set_size(232, 80)
+ toolbox_step_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_step_img.set_src("E:/static/tool/IMAGE_SECMENU_STEP.png")
+ toolbox_step_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ toolbox_weather_img = lv.img(toolbox_cont)
+ toolbox_weather_img.set_pos(4, 90)
+ toolbox_weather_img.set_size(232, 80)
+ toolbox_weather_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_weather_img.set_src("E:/static/tool/IMAGE_SECMENU_WEATHER.png")
+ toolbox_weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ toolbox_alarm_img = lv.img(toolbox_cont)
+ toolbox_alarm_img.set_pos(4, 180)
+ toolbox_alarm_img.set_size(232, 80)
+ toolbox_alarm_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_alarm_img.set_src("E:/static/tool/IMAGE_SECMENU_ALARM.png")
+ toolbox_alarm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+ toolbox_sms_img = lv.img(toolbox_cont)
+ toolbox_sms_img.set_pos(4, 270)
+ toolbox_sms_img.set_size(232, 80)
+ toolbox_sms_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_sms_img.set_src("E:/static/tool/sms_setting.png")
+ toolbox_sms_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ toolbox_countdown_img = lv.img(toolbox_cont)
+ toolbox_countdown_img.set_pos(4, 360)
+ toolbox_countdown_img.set_size(232, 80)
+ toolbox_countdown_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_countdown_img.set_src("E:/static/tool/IMAGE_SECMENU_COUNTDOWN.png")
+ toolbox_countdown_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ toolbox_stopwatch_img = lv.img(toolbox_cont)
+ toolbox_stopwatch_img.set_pos(4, 450)
+ toolbox_stopwatch_img.set_size(232, 80)
+ toolbox_stopwatch_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_stopwatch_img.set_src("E:/static/tool/IMAGE_SECMENU_STOPWATCH.png")
+ toolbox_stopwatch_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ toolbox_step_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "step"}), lv.EVENT.CLICKED, None)
+ toolbox_weather_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "weather"}), lv.EVENT.CLICKED, None)
+ toolbox_alarm_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "clk_list"}), lv.EVENT.CLICKED, None)
+ toolbox_sms_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "popup"}), lv.EVENT.CLICKED, None)
+ toolbox_countdown_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "countdown"}), lv.EVENT.CLICKED, None)
+ toolbox_stopwatch_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "stopwatch"}), lv.EVENT.CLICKED, None)
+ self.meta = toolbox_screen
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+
+incoming_call_screen = None
+incoming_call_img = None
+incoming_call_name_label = None
+incoming_call_answer = None
+incoming_call_hangup = None
+CALL_LOG_MAX = 50
+class IncomingCallScreen(Screen):
+ NAME = "incoming_call"
+
+ def __init__(self):
+ super().__init__()
+ self.read_data = {}
+ self.volum_size = 8
+ check_volum = ql_fs.path_exists("/ext/static/storage_file/config.json")
+ if check_volum == True :
+ with open("/ext/static/storage_file/config.json","r") as fd:#音频文件编号
+ self.read_data = ujson.load(fd)
+ if self.read_data != {}:
+ b = str("volum") in self.read_data.keys()
+ if b == True:
+ self.volum_size = self.read_data["volum"]
+ else:
+ self.volum_size = 8
+ else:
+ self.volum_size = 8
+ else:
+ self.volum_size = 8
+ self.aud = audio.Audio(0)
+ self.aud.set_pa(Pin.GPIO29)
+ self.aud.setVolume(self.volum_size)
+ self.call_timer = osTimer()
+ self.name = None
+ self.phonebook = {}
+ self.pro_state = 0
+ self.meta = None
+
+
+ self.call_log = {}
+ self.call_log_value = {}
+ self.read_call_log = {}
+ self.number_tmp = {}
+ def initialization(self):
+ global incoming_call_screen,incoming_call_img,incoming_call_name_label,incoming_call_answer ,incoming_call_hangup
+ if incoming_call_screen == None :
+ # -------------------------------------------incoming_call screen----------------------------------------------------------
+ incoming_call_screen = lv.obj()
+ incoming_call_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ incoming_call_img = lv.img(incoming_call_screen)
+ incoming_call_img.set_pos(80, 20)
+ incoming_call_img.set_size(64, 64)
+ incoming_call_img.set_src("E:/static/IMAGE_NOTICE_CALL.png")
+ incoming_call_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ incoming_call_name_label = lv.label(incoming_call_screen)
+ incoming_call_name_label.set_pos(0, 140)
+ incoming_call_name_label.set_size(240, 50)
+ incoming_call_name_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ incoming_call_name_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ incoming_call_answer = lv.img(incoming_call_screen)
+ incoming_call_answer.set_size(64, 64)
+ incoming_call_answer.add_flag(lv.obj.FLAG.CLICKABLE)
+ incoming_call_answer.set_pos(30, 220)
+ incoming_call_answer.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ incoming_call_answer.set_src("E:/static/answer.png")
+
+ incoming_call_hangup = lv.img(incoming_call_screen)
+ incoming_call_hangup.set_size(64, 64)
+ incoming_call_hangup.add_flag(lv.obj.FLAG.CLICKABLE)
+ incoming_call_hangup.set_pos(150, 220)
+ incoming_call_hangup.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ incoming_call_hangup.set_src("E:/static/hang_up.png")
+ incoming_call_answer.add_event_cb(lambda e: self.answer(e),
+ lv.EVENT.CLICKED, None)
+ incoming_call_hangup.add_event_cb(lambda e: self.hangup(e),
+ lv.EVENT.CLICKED, None)
+ self.meta = incoming_call_screen
+
+ def post_processor_after_initialization(self):
+ global incoming_call_screen,incoming_call_img,incoming_call_name_label,incoming_call_answer ,incoming_call_hangup
+ utime.sleep_ms(200)#不加延时会切屏
+ data = EventMesh.publish("get_phonebook_list")
+ check = data[0]
+ self.phonebook = data[1]
+ if check == 1:#先检查通讯录
+ phonebook_keys = sorted(self.phonebook.keys())
+ b = self.meta_info in self.phonebook.values()#查找key中是否包含content电话号码 True 包含在里面 False不包含在里面
+ j = 0
+ if b == True:
+ for i in range(len(self.phonebook)): #字典 key value
+ #'001:邓雪英':15521469561
+ name = self.phonebook[phonebook_keys[j]]
+ name_value = phonebook_keys[j]
+ number_tmp = str(self.meta_info)
+ # print("name :{} number_tmp:{}".format(name,number_tmp))
+ if name.find(number_tmp) != -1:#查找电话号码是否在通讯录里面
+ number_f= name_value
+ name_s = number_f.split(':')
+ name_s = name_s[1]
+ self.name = name_s
+ self.pro_state = 1
+ break
+ j+=1
+ else:
+ self.name = str(self.meta_info)
+ self.pro_state = 0
+ else:
+ self.name = str(self.meta_info)
+ self.pro_state = 0
+
+ read_call_log = EventMesh.publish("get_call_log_list")
+ check_call_log_json = read_call_log[0]
+ self.read_call_log = read_call_log[1]
+ if self.pro_state == 0 and check_call_log_json == 1:#电话本没有就在通话记录查找电话号码并且文件存在是查找
+
+ sort_tmp = self.read_call_log.values()
+ for sort_new_tmp in sort_tmp: #字典 key value
+ number = sort_new_tmp["number"]
+ find_ok = self.meta_info in number
+ # print("find_ok:{} sort_tmp :{} self.meta_info:{}\r\n".format(find_ok,number,self.meta_info))
+ if find_ok == True:
+ name_value = sort_new_tmp["name"]#查找到相同的电话号码就退出break
+ self.name = name_value
+ break
+
+ if self.name == None:
+ self.name = str(self.meta_info)
+
+ # incoming_call_label.set_text(str(self.meta_info))
+ incoming_call_name_label.set_text(self.name)
+ EventMesh.publish("save_phonename",self.name)
+ time = EventMesh.publish("screen_get_time")#获取系统时间
+
+ # ["15692025051","2","12:59","哥gdh符合双方和开发商开发好看的思考"],
+ # 格式:{"电话号码":{"timesec":'时间戳',"number":'电话号码',"name":'名字',"time":'时间',"count":'通话次数'}}
+ self.num = 0
+
+ date_tmp = utime.localtime()
+ time_tmp = utime.mktime(date_tmp)
+ # print("time_tmp:{}".format(time_tmp))
+ read_call_log = EventMesh.publish("get_call_log_list")
+ check_json = read_call_log[0]
+
+ if check_json == True:
+ self.read_call_log = read_call_log[1]
+ print("读取通话记录")
+ b = str(self.meta_info) in self.read_call_log.keys()#查找key中是否包含content电话号码 True 包含在里面 False不包含在里面
+
+ if b == True:#查找是否有相同的电话号码 有就直接读出来的次数上加一 没有则从1开始加起
+ number_tmp = {}
+ number_tmp = self.read_call_log[str(self.meta_info)] #通话次数加一
+ num_tmp_t = number_tmp["count"]#读取本地保存的通话次数
+ else :
+ num_tmp_t = 0
+ self.num = num_tmp_t
+ else:
+ self.num = 0 #通话次数
+
+ sort_tmp = {}
+ sort_tmp = self.read_call_log.values()
+ sort_new = {}
+ sort_new = sorted(sort_tmp, key = lambda i: i['timesec'],reverse = True)#按照时间戳进行排序 去掉最旧的一次数据如果满了五十条
+ i = 0
+ if len(self.read_call_log) >= CALL_LOG_MAX:
+ for sort_new_tmp in sort_new: #字典 key value
+ i+=1 # 1
+ if i >= CALL_LOG_MAX:#大于50条把最后一条删除掉只保留前面50调最新的数据
+ key_tmp = sort_new_tmp["number"]
+ del self.read_call_log[key_tmp]
+
+ tmp = {}
+ self.num = self.num +1
+ if self.num > 99:
+ self.num = 99
+ tmp["count"]= self.num #通话次数
+ tmp["time"]= "{}:{}".format("%02d"%(time[0][0]),"%02d"%(time[0][1]))#通话时间
+ tmp["name"]= self.name #名称
+ tmp["timesec"]= time_tmp #时间戳
+ tmp["number"] = self.meta_info
+
+ self.read_call_log[self.meta_info] = tmp
+ with open("/ext/static/storage_file/Call_log.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_call_log,fd)
+ print("创建通话记录")
+ EventMesh.publish("set_call_log_list", [1,self.read_call_log])
+ EventMesh.publish("call_log_update_show_list")
+
+ self.call_timer.start(6000, 1, self.call_timer_cb)
+ self.aud.play(1, 1, 'E:/static/R_CALL_mp3.mp3') #播放来电铃声
+
+ def call_timer_cb(self,e):
+ self.aud.play(1, 1, 'E:/static/R_CALL_mp3.mp3') #播放来电铃声
+
+ def answer(self,e):
+ self.call_timer.stop()
+ self.aud.stop()
+ voiceCall.callAnswer()
+
+ def Close(self):
+ self.call_timer.stop()
+ self.aud.stop()
+
+ def hangup(self,e):
+ self.aud.stop()
+ self.call_timer.stop()
+ voiceCall.callEnd()
+
+
+ def btn1_release(self):
+ pass
+
+ def btn8_press(self):
+ self.aud.stop()
+ self.call_timer.stop()
+
+
+ def done_left_to_right(self):
+ pass
+
+ def done_right_to_left(self):
+ pass
+
+ def done_bottom_to_top(self):
+ pass
+
+ def done_top_to_bottom(self):
+ pass
+
+ def done_return(self):
+ pass
+
+
+on_call_screen = None
+on_call_label_name = None
+on_call_second_label = None
+on_call_hangup = None
+class OnCallScreen(Screen):
+ NAME = "on_call"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.count_sec = 0
+ self.timer = osTimer()
+ def initialization(self):
+ global on_call_screen,on_call_label_name,on_call_second_label ,on_call_hangup
+ if on_call_screen ==None :
+ on_call_screen = lv.obj()
+ on_call_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_label_name = lv.label(on_call_screen)
+ on_call_label_name.set_pos(0, 100)
+ on_call_label_name.set_size(240, 50)
+ on_call_label_name.set_text(" ")
+ on_call_label_name.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ on_call_label_name.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ on_call_second_label = lv.label(on_call_screen)
+ on_call_second_label.set_pos(0, 160)
+ on_call_second_label.set_size(240, 50)
+ on_call_second_label.set_text("00:00")
+ on_call_second_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ on_call_second_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ on_call_hangup = lv.img(on_call_screen)
+ on_call_hangup.set_size(64, 64)
+ on_call_hangup.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_hangup.set_pos(85, 220)
+ on_call_hangup.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_hangup.set_src("E:/static/hang_up.png")
+ on_call_hangup.add_event_cb(lambda e: self.hangup(e),
+ lv.EVENT.CLICKED, None)
+ self.meta = on_call_screen
+
+ name = EventMesh.publish("get_phonename")
+ on_call_label_name.set_text(name)
+ # on_call_label.set_text(str(self.meta_info))
+ on_call_second_label.set_text("00:00")
+
+ def post_processor_after_initialization(self):
+ self.count_sec = 0
+ self.timer.start(1000,1,self.refresh)
+
+
+ def refresh(self,e):
+ global on_call_screen,on_call_label_name,on_call_second_label ,on_call_hangup
+ min = self.count_sec/60
+ sec = self.count_sec%60
+ if min > 99:
+ total = "%03d:%02d"%(min,sec)
+ else:
+ total = "%02d:%02d"%(min,sec)
+ on_call_second_label.set_text(str(total))
+ self.count_sec+=1
+
+ def hangup(self,e):
+ voiceCall.callEnd()
+
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+# -------------------------------------------step screen----------------------------------------------------------#
+
+step_screen = None
+step_label = None
+step_label_01 = None
+step_img = None
+class StepScreen(Screen):
+ NAME = "step"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.timer = osTimer()
+
+ def initialization(self):
+ global step_screen,step_label ,step_label_01 ,step_img
+ if step_screen == None:
+ step_screen = lv.obj()
+ step_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ step_label = lv.label(step_screen)
+ step_label.set_pos(10, 30)
+ step_label.set_size(100, 50)
+ step_label.set_text("今日步数")
+ step_label.set_long_mode(lv.label.LONG.WRAP)
+ step_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ step_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ step_label_01 = lv.label(step_screen)
+ step_label_01.set_pos(0, 100)
+ step_label_01.set_size(240, 50)
+ step_label_01.set_text("0步")
+ step_label_01.set_long_mode(lv.label.LONG.WRAP)
+ step_label_01.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ step_label_01.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ step_img = lv.img(step_screen)
+ step_img.set_pos(100, 150)
+ step_img.set_size(40, 65)
+ step_img.set_src("E:/static/IMAGE_STEP.png")
+ step_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = step_screen
+
+ step = EventMesh.publish(constants.EVENT.GET_STEP)
+ step_label_01.set_text("{}步".format(step[0]))
+ self.timer.start(1000, 1, self.revcing)
+
+ def revcing(self, *args, **kwargs):
+ global step_screen,step_label ,step_label_01 ,step_img
+ step = EventMesh.publish(constants.EVENT.GET_STEP)
+ step_label_01.set_text("{}步".format(step[0]))
+
+ def Close(self):
+ self.timer.stop()
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+# -------------------------------------------weather screen----------------------------------------------------------
+
+weather_screen = None
+weather_img = None
+no_weather_img = None
+weather_tem_label = None
+no_weather_degree = None
+weather_detail_label = None
+weather_location_label = None
+no_connect_label = None
+no_connect_label1 = None
+class WeatherScreen(Screen):
+ NAME = "weather"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.weather_data = {}
+ EventMesh.subscribe("updata_weather_show", self.update_weather_data)
+
+ def initialization(self):
+ global weather_screen,weather_img,no_weather_img,weather_tem_label,no_weather_degree,\
+ weather_detail_label,weather_location_label,no_connect_label ,no_connect_label1
+ if weather_screen == None :
+ weather_screen = lv.obj()
+ weather_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ weather_img = lv.img(weather_screen)
+ weather_img.set_pos(10, 10)
+ weather_img.set_size(135, 120)
+
+ weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_weather_img = lv.img(weather_screen)
+ no_weather_img.set_pos(10, 10)
+ no_weather_img.set_size(135, 120)
+ no_weather_img.set_src("E:/static/update.png")
+ no_weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ weather_tem_label = lv.label(weather_screen)
+ weather_tem_label.set_pos(155, 44)
+ weather_tem_label.set_size(60, 50)
+ weather_tem_label.set_text("_ _")
+ weather_tem_label.set_long_mode(lv.label.LONG.WRAP)
+ weather_tem_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ weather_tem_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_weather_degree = lv.img(weather_screen)
+ no_weather_degree.set_pos(200, 40)
+ no_weather_degree.set_size(22, 22)
+ no_weather_degree.set_src("E:/static/degree.png")
+ no_weather_degree.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ weather_detail_label = lv.label(weather_screen)
+ weather_detail_label.set_pos(155, 80)
+ weather_detail_label.set_size(85, 50)
+ weather_detail_label.set_text("-/-")
+ weather_detail_label.set_long_mode(lv.label.LONG.WRAP)
+ weather_detail_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ weather_detail_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ weather_location_label = lv.label(weather_screen)
+ weather_location_label.set_pos(0, 200)
+ weather_location_label.set_size(240, 50)
+ weather_location_label.set_text("--")
+ weather_location_label.set_long_mode(lv.label.LONG.WRAP)
+ weather_location_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ weather_location_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_connect_label = lv.label(weather_screen)
+ no_connect_label.set_pos(0, 200)
+ no_connect_label.set_size(240, 40)
+ no_connect_label.set_text("找不到服务器")
+ no_connect_label.set_long_mode(lv.label.LONG.WRAP)
+ no_connect_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_connect_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_connect_label1 = lv.label(weather_screen)
+ no_connect_label1.set_pos(0, 250)
+ no_connect_label1.set_size(240, 70)
+ no_connect_label1.set_text("请联网后重试")
+ no_connect_label1.set_long_mode(lv.label.LONG.WRAP)
+ no_connect_label1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_connect_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = weather_screen
+
+ def post_processor_after_initialization(self):
+ EventMesh.publish("updata_weather_show")
+
+
+ def update_weather_data(self, event, msg):
+ global weather_screen,weather_img,no_weather_img,weather_tem_label,no_weather_degree,\
+ weather_detail_label,weather_location_label,no_connect_label ,no_connect_label1
+ connect = EventMesh.publish(constants.EVENT.GET_CONNECT) #获取网络状态
+ self.weather_data = EventMesh.publish("get_weather_data")
+ if connect != 0:
+ no_data = self.weather_data[8]
+ if no_data != 0:
+ no_weather_img.add_flag(lv.obj.FLAG.HIDDEN)
+ weather_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ no_connect_label.set_text(" ")
+ no_connect_label1.set_text(" ")
+ # print("self.weather_data:{}".format(self.weather_data))
+ type = self.weather_data[3]
+ if type == None:
+ weather_img.set_src("E:/static/update.png")#天气类型
+ else:
+ weather_img.set_src("E:/static/{}_weather.png".format(type))#天气类型
+
+ temp = self.weather_data[4]
+ if temp == None:
+ weather_tem_label.set_text("_ _")
+ else:
+ weather_tem_label.set_text("{}".format(temp))
+
+ date = self.weather_data[0]
+ if date != '{}':
+ date_month = date.split('-')[1]
+ date_day = date.split('-')[2]
+ weather_detail_label.set_text("{}/{}".format(date_month,date_day))#天气更新时间
+ else:
+ weather_detail_label.set_text("-/-")
+
+ city = self.weather_data[7]
+ if city != '{}':
+ weather_location_label.set_text("{}".format(city))#城市
+ else:
+ weather_location_label.set_text("--")
+ else:#已联网未获取到天气数据
+ weather_location_label.set_text(" ")
+ weather_detail_label.set_text("-/-")
+ weather_tem_label.set_text("_ _")
+
+ no_connect_label.set_text("未获取网络数据")
+ no_connect_label1.set_text("请稍候重试")
+
+ else:
+ weather_location_label.set_text(" ")
+ weather_detail_label.set_text("-/-")
+ weather_tem_label.set_text("_ _")
+
+ no_weather_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ weather_img.add_flag(lv.obj.FLAG.HIDDEN)
+ no_connect_label.set_text("找不到服务器")
+ no_connect_label1.set_text("请联网后重试")
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+import audio
+from machine import Pin
+
+
+
+
+# -----------------------------联系人--------------contacts screen----------------------------------------------------------
+
+CONTACT_FLAG = 0
+contacts_screen = None
+contacts_cont = None
+contacts_top_title = None
+contact_none_label = None
+class ContactsScreen(Screen):
+ NAME = "contacts"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.phonebook = {}
+ self.count = 0
+ self.phone_num_count = 0
+ self.phone_num = {}
+ self.name = []
+ self.check_json = 0
+ self.timer = osTimer()
+ self.contact_detail_list = None
+ EventMesh.subscribe("contact_updata_list_show", self.btn_create_list)
+
+ def post_processor_before_initialization(self):
+ data = EventMesh.publish("get_phonebook_list")
+ self.check_json = data[0]
+ self.phonebook = data[1]
+ self.count = 0
+
+ def initialization(self):
+ global contacts_screen,contacts_cont,contacts_top_title,contact_none_label
+ if contacts_screen == None:
+ contacts_screen = lv.obj()
+ contacts_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ contacts_screen.set_scrollbar_mode(0)
+
+ contacts_cont= lv.obj(contacts_screen)
+ contacts_cont.set_pos(0, 50)
+ contacts_cont.set_size(240, 270)
+ contacts_cont.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ contacts_cont.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ contacts_top_title = lv.label(contacts_screen)
+ contacts_top_title.set_pos(0, 10)
+ contacts_top_title.set_size(240, 40)
+ contacts_top_title.set_text("联系人")
+ contacts_top_title.set_long_mode(lv.label.LONG.WRAP)
+ contacts_top_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ contacts_top_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+ contact_none_label = lv.label(contacts_cont)
+ contact_none_label.set_pos(0, 120)
+ contact_none_label.set_size(240, 60)
+ contact_none_label.set_text("空")
+ contact_none_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ contact_none_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = contacts_screen
+ self.contact_detail_list = lv.obj(contacts_screen)
+ #读取json文件中的字典放到self.phonebook中
+ #创建btn
+ self.count = 0
+ self.btn_create_list_show(0)
+
+ def btn_create_list(self,event,msg):
+ self.post_processor_before_initialization()
+ self.timer.start(1 * 1000, 0, self.OutTime_s)
+
+ def OutTime_s(self,e):
+ self.btn_create_list_show(1)
+
+ def btn_create_list_show(self,state):
+ global contacts_screen,contacts_cont,contacts_top_title,contact_none_label
+ #读取json文件中的键作为label文本;
+ if self.check_json == True and len(self.phonebook) != 0:
+ contact_none_label.add_flag(lv.obj.FLAG.HIDDEN)#隐藏空文本
+ j =0
+ i = 0
+ # print("self.phonebook sorted :{} len(self.phonebook) :{}".format(sorted(self.phonebook.keys()),len(self.phonebook)))
+ phonebook_keys = sorted(self.phonebook.keys())
+
+ self.contact_detail_list.delete()#先删除一次控件
+ self.contact_detail_list = lv.obj(contacts_screen)
+ self.contact_detail_list.set_pos(0, 50)
+ self.contact_detail_list.set_size(240, 270)
+ self.contact_detail_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ self.contact_detail_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ for i in range(len(self.phonebook)): #字典 key value
+ if j > 50:
+ j = 0
+ j+=1
+ name = self.phonebook[phonebook_keys[j-1]]
+ key_tmp = phonebook_keys[j-1]
+
+ # print("name :{} key_tmp:{}".format(name,key_tmp))
+
+ contact_btn = lv.btn(self.contact_detail_list)
+ contact_btn.set_size(230,80)
+ contact_btn.set_pos(0,82*i )
+ contact_btn.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+ # contact_btn.add_style(style_contact_btn_pressed, lv.PART.MAIN | lv.STATE.PRESSED)
+ contact_btn.add_event_cb(lambda e: self.calling(e),
+ lv.EVENT.CLICKED, None)
+
+ contact_btn_label_1 = lv.label(contact_btn)
+ contact_btn_label_1.set_pos(0, 5)
+ contact_btn_label_1.set_size(180, 25)
+ contact_btn_label_1.set_text(key_tmp[4:])
+ contact_btn_label_1.set_long_mode(lv.label.LONG.DOT)
+ contact_btn_label_1.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ contact_btn_label_1 = lv.label(contact_btn)
+ contact_btn_label_1.set_pos(0, 5)
+ contact_btn_label_1.set_size(0, 0)
+ contact_btn_label_1.set_text(key_tmp)
+
+
+ contact_btn_label_2 = lv.label(contact_btn)
+ contact_btn_label_2.set_pos(0, 30)
+ contact_btn_label_2.set_size(220, 35)
+ contact_btn_label_2.set_text(name)
+ contact_btn_label_2.add_style(style_font_youyuan_20_black, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ i += 1
+ if state == 1:
+ bottom_btn = self.contact_detail_list.get_child(-1)
+ bottom_btn.scroll_to_view(lv.ANIM.OFF)
+ else:
+ contact_none_label.clear_flag(lv.obj.FLAG.HIDDEN) #显示空文本
+ self.contact_detail_list.add_flag(lv.obj.FLAG.HIDDEN)#隐藏空文本
+
+
+
+ def calling(self,e):
+ _msg = e.get_target().get_child(1).get_text()
+ # print("_msg:{}".format(_msg))
+ msg_tmp = _msg.split(':')
+ msg_tmp = msg_tmp[1]
+ EventMesh.publish("save_phonename", msg_tmp)
+
+ phone_num = self.phonebook[_msg]
+ EventMesh.publish("save_phonenum", phone_num)
+ # phone_num_tmp = int(phone_num)
+ voiceCall.callStart(phone_num)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+# -------------------------------------------temperature screen----------------------------------------------------------
+
+temperature_screen = None
+temperature_bg_img = None
+temperature_body_label = None
+temperature_degree_img = None
+temperature_value_label = None
+temperature_wrist_label = None
+temperature_wrist_degree_img = None
+temperature_wrist_value_label = None
+class TemperatureScreen(Screen):
+ NAME = "temperature"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+
+ def initialization(self):
+ global temperature_screen,temperature_bg_img ,temperature_body_label ,temperature_degree_img ,temperature_value_label,\
+ temperature_wrist_label,temperature_wrist_degree_img ,temperature_wrist_value_label
+ if temperature_screen == None:
+ temperature_screen = lv.obj()
+ temperature_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_bg_img = lv.img(temperature_screen)
+ temperature_bg_img.set_pos(0, 0)
+ temperature_bg_img.set_size(71, 170)
+ temperature_bg_img.set_src("E:/static/temp_bg.png")
+ temperature_bg_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_body_label = lv.label(temperature_screen)
+ temperature_body_label.set_pos(80, 40)
+ temperature_body_label.set_size(100, 20)
+ temperature_body_label.set_text("当前体温")
+ temperature_body_label.set_long_mode(lv.label.LONG.WRAP)
+ temperature_body_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ temperature_body_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_degree_img = lv.img(temperature_screen)
+ temperature_degree_img.set_pos(150, 70)
+ temperature_degree_img.set_size(22, 22)
+ temperature_degree_img.set_src("E:/static/degree.png")
+ temperature_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_value_label = lv.label(temperature_screen)
+ temperature_value_label.set_pos(100,70)
+ temperature_value_label.set_size(50, 20)
+ temperature_value_label.set_text("36.1")
+ temperature_value_label.set_long_mode(lv.label.LONG.WRAP)
+ temperature_value_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ temperature_value_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_wrist_label = lv.label(temperature_screen)
+ temperature_wrist_label.set_pos(80,120)
+ temperature_wrist_label.set_size(100, 20)
+ temperature_wrist_label.set_text("当前腕温")
+ temperature_wrist_label.set_long_mode(lv.label.LONG.WRAP)
+ temperature_wrist_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ temperature_wrist_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_wrist_degree_img = lv.img(temperature_screen)
+ temperature_wrist_degree_img.set_pos(150, 150)
+ temperature_wrist_degree_img.set_size(22, 22)
+ temperature_wrist_degree_img.set_src("E:/static/degree.png")
+ temperature_wrist_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_wrist_value_label = lv.label(temperature_screen)
+ temperature_wrist_value_label.set_pos(100,150)
+ temperature_wrist_value_label.set_size(50, 20)
+ temperature_wrist_value_label.set_text("24.9")
+ temperature_wrist_value_label.set_long_mode(lv.label.LONG.WRAP)
+ temperature_wrist_value_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ temperature_wrist_value_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = temperature_screen
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+line_points = [{"x":0,"y":0},{"x":240,"y":0}]
+spo2_screen = None
+spo2_label_0 = None
+spo2_done_img = None
+spo2_label = None
+spo2_label_1 = None
+spo2_line = None
+spo2_last_time = None
+spo2_last_value = None
+class Spo2Screen(Screen):
+ NAME = "spo2"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.timer = osTimer()
+ self.point = 0
+ self.spo2_value = 0
+ self.last_spo2_value = 0
+
+ def initialization(self):
+ global spo2_screen ,spo2_label_0 ,spo2_done_img ,spo2_label ,spo2_label_1 ,spo2_line ,spo2_last_time,spo2_last_value
+ if spo2_screen == None:
+ spo2_screen = lv.obj()
+ spo2_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ spo2_label_0 = lv.label(spo2_screen)
+ spo2_label_0.set_pos(0, 10)
+ spo2_label_0.set_size(240, 40)
+ spo2_label_0.set_text("血氧")
+ spo2_label_0.set_long_mode(lv.label.LONG.WRAP)
+ spo2_label_0.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ spo2_label_0.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ spo2_done_img = lv.img(spo2_screen)
+ spo2_done_img.set_pos(0, 50)
+ spo2_done_img.set_size(240, 96)
+ spo2_done_img.set_src("E:/static/IMAGE_SPO2_ONLY_TEST_DONE.jpg")
+
+ spo2_label = lv.label(spo2_screen)
+ spo2_label.set_size(240,30)
+ spo2_label.set_pos(0,160)
+ spo2_label.set_text(" ")
+ spo2_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ spo2_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ spo2_label_1 = lv.label(spo2_screen)
+ spo2_label_1.set_size(240,40)
+ spo2_label_1.set_pos(0,200)
+ spo2_label_1.set_text(" ")
+ spo2_label_1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ spo2_label_1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ spo2_line = lv.line(spo2_screen)
+ spo2_line.set_points(line_points,2)
+ spo2_line.set_pos(0,240)
+ spo2_line.set_size(240,10)
+ spo2_line.add_style(style_line,0)
+
+ spo2_last_time = lv.label(spo2_screen)
+ spo2_last_time.set_size(240, 15)
+ spo2_last_time.set_pos(0, 250)
+ spo2_last_time.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ spo2_last_time.set_text(" ")
+ spo2_last_time.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+ spo2_last_value = lv.label(spo2_screen)
+ spo2_last_value.set_size(240, 15)
+ spo2_last_value.set_pos(0, 280)
+ spo2_last_value.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ spo2_last_value.set_text(" ")
+ spo2_last_value.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ self.meta = spo2_screen
+
+ self.point = 0
+ self.spo2_value = 0
+ self.timer.start(1*1000, 1, self.start_measure)
+ EventMesh.publish("set_spo2_state",1)#2代表后台进入血氧测试
+ EventMesh.publish(constants.EVENT.START_BLOOD_OXYGEN)
+ self.last_spo2_value = EventMesh.publish("get_old_spo2_data")
+ spo2_label.set_text("--%")
+ if self.last_spo2_value == 0:
+ spo2_last_value.set_text(" ")
+ else:
+ spo2_last_value.set_text("{}%".format(self.last_spo2_value))
+
+ def start_measure(self,*args):
+ global spo2_screen ,spo2_label_0 ,spo2_done_img ,spo2_label ,spo2_label_1 ,spo2_line ,spo2_last_time,spo2_last_value
+ self.point = self.point + 1
+ EventMesh.publish("system_sleep_rest")#防止黑屏
+ self.spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ if self.spo2_value == 0:
+ spo2_label.set_text("--%")
+ else:
+ spo2_label.set_text("{} %".format(self.spo2_value))
+ if self.point%4 == 0 :
+ spo2_label_1.set_text("测量中.")
+ if self.point%4 == 1 :
+ spo2_label_1.set_text("测量中..")
+ if self.point%4 == 2 :
+ spo2_label_1.set_text("测量中...")
+ if self.point%4 == 3 :
+ spo2_label_1.set_text("测量中....")
+
+ if self.point > 60: #测20s
+ self.spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
+ # print("ui self.spo2_value :{}".format(self.spo2_value))
+ if self.spo2_value > 85 and self.spo2_value != None:
+ EventMesh.publish("set_old_spo2_data",self.spo2_value)
+ EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,self.spo2_value)
+ spo2_label.set_text("{} %".format(self.spo2_value))
+ if self.spo2_value == 0:
+ spo2_label.set_text(" ")
+ spo2_label_1.set_text("退出,请重新测量")
+ self.last_spo2_value = EventMesh.publish("get_old_spo2_data")
+ spo2_last_value.set_text(" ")
+ else:
+ self.last_spo2_value = self.spo2_value
+ spo2_last_value.set_text("{}%".format(self.last_spo2_value))
+ spo2_label_1.set_text("测量完成")
+ time = EventMesh.publish("screen_get_time")
+ time_year = time[4]
+ time_month = time[2]
+ time_time =" {}:{}".format("%02d"%(time[0][0]),"%02d"%(time[0][1]))#通话时间
+ spo2_last_time.set_text(str(time_year)+str(time_month)+str(time_time))
+
+
+
+ self.timer.stop()
+ self.point = 0
+ EventMesh.publish("set_spo2_state",0)#0代表关闭测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+ # spo2_last_time.set_text()
+
+ def Close(self):
+ self.timer.stop()
+ get_hr_state = EventMesh.publish("get_hr_state")
+ get_spo2_state = EventMesh.publish("get_spo2_state")
+ if get_hr_state == 1 or get_spo2_state == 1:
+ EventMesh.publish("set_spo2_state",0)#0代表关闭测试
+ EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+# -------------------------------------------countdown screen----------------------------------------------------------
+countdown_screen = None
+countdown_title = None
+countdown_hour = None
+countdown_mao = None
+countdown_mao = None
+countdown_mao1 = None
+countdown_sec = None
+countdown_hour_up = None
+countdown_hour_up_btn = None
+countdown_hour_down = None
+countdown_hour_down_btn = None
+countdown_min_up = None
+countdown_min_up_btn = None
+countdown_min_down = None
+countdown_min_down_btn = None
+countdown_sec_up = None
+countdown_sec_up_btn = None
+countdown_sec_down = None
+countdown_sec_down_btn = None
+countdown_reset_img = None
+countdown_reset_imgbtn = None
+countdown_start_img = None
+countdown_start_imgbtn = None
+countdown_stop_img = None
+countdown_min = None
+class CountdownScreen(Screen):
+ NAME = "countdown"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.timer = Timer(Timer.Timer1)
+ self.sec = 0
+ self.min = 0
+ self.hour = 0
+ self.total = 0
+ self.flag = 1
+ self.g_state = 0
+ self.g_end = 0
+ self.total = 0
+
+
+ def initialization(self):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
+ if countdown_screen == None :
+ countdown_screen = lv.obj()
+ countdown_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_title = lv.label(countdown_screen)
+ countdown_title.set_pos(0, 20)
+ countdown_title.set_size(240, 20)
+ countdown_title.set_text("倒计时")
+ countdown_title.set_long_mode(lv.label.LONG.WRAP)
+ countdown_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ countdown_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_hour = lv.label(countdown_screen)
+ countdown_hour.set_pos(30, 140)
+ countdown_hour.set_size(60, 30)
+ countdown_hour.set_text("00")
+ countdown_hour.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_hour.set_long_mode(lv.label.LONG.WRAP)
+ countdown_hour.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ countdown_mao = lv.label(countdown_screen)
+ countdown_mao.set_pos(82, 138)
+ countdown_mao.set_size(30, 30)
+ countdown_mao.set_text(":")
+ countdown_mao.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_mao.set_long_mode(lv.label.LONG.WRAP)
+ countdown_mao.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+ countdown_min = lv.label(countdown_screen)
+ countdown_min.set_pos(95, 140)
+ countdown_min.set_size(60, 30)
+ countdown_min.set_text("00")
+ countdown_min.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_min.set_long_mode(lv.label.LONG.WRAP)
+ countdown_min.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ countdown_mao1 = lv.label(countdown_screen)
+ countdown_mao1.set_pos(146, 138)
+ countdown_mao1.set_size(30, 30)
+ countdown_mao1.set_text(":")
+ countdown_mao1.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_mao1.set_long_mode(lv.label.LONG.WRAP)
+ countdown_mao1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+ countdown_sec = lv.label(countdown_screen)
+ countdown_sec.set_pos(160, 140)
+ countdown_sec.set_size(60, 30)
+ countdown_sec.set_text("00")
+ countdown_sec.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_sec.set_long_mode(lv.label.LONG.WRAP)
+ countdown_sec.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ countdown_hour_up = lv.img(countdown_screen)
+ countdown_hour_up.set_size(34, 30)
+ countdown_hour_up.set_pos(36, 100)
+ countdown_hour_up.set_src("E:/static/time_up.png")
+ countdown_hour_up.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_hour_up_btn= lv.img(countdown_screen)
+ countdown_hour_up_btn.set_size(62, 70)
+ countdown_hour_up_btn.set_pos(20, 80)
+ countdown_hour_up_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+ countdown_hour_down = lv.img(countdown_screen)
+ countdown_hour_down.set_size(34, 30)
+ countdown_hour_down.set_pos(36, 180)
+ countdown_hour_down.set_src("E:/static/time_down.png")
+ countdown_hour_down.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_hour_down.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_hour_down_btn= lv.img(countdown_screen)
+ countdown_hour_down_btn.set_size(62, 80)
+ countdown_hour_down_btn.set_pos(20, 150)
+ countdown_hour_down_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+ countdown_min_up = lv.img(countdown_screen)
+ countdown_min_up.set_size(34, 30)
+ countdown_min_up.set_pos(99, 100)
+ countdown_min_up.set_src("E:/static/time_up.png")
+ countdown_min_up.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_min_up.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_min_up_btn= lv.img(countdown_screen)
+ countdown_min_up_btn.set_size(64, 70)
+ countdown_min_up_btn.set_pos(82, 80)
+ countdown_min_up_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+
+ countdown_min_down = lv.img(countdown_screen)
+ countdown_min_down.set_size(34, 30)
+ countdown_min_down.set_pos(99, 180)
+ countdown_min_down.set_src("E:/static/time_down.png")
+ countdown_min_down.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_min_down.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_min_down_btn= lv.img(countdown_screen)
+ countdown_min_down_btn.set_size(64, 80)
+ countdown_min_down_btn.set_pos(82, 150)
+ countdown_min_down_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+ countdown_sec_up = lv.img(countdown_screen)
+ countdown_sec_up.set_size(34, 30)
+ countdown_sec_up.set_pos(165, 100)
+ countdown_sec_up.set_src("E:/static/time_up.png")
+ countdown_sec_up.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_sec_up_btn = lv.img(countdown_screen)
+ countdown_sec_up_btn.set_size(64, 70)
+ countdown_sec_up_btn.set_pos(146, 80)
+ countdown_sec_up_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+ countdown_sec_down = lv.img(countdown_screen)
+ countdown_sec_down.set_size(34, 30)
+ countdown_sec_down.set_pos(165, 180)
+ countdown_sec_down.set_src("E:/static/time_down.png")
+ countdown_sec_down.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_sec_down.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_sec_down_btn = lv.img(countdown_screen)
+ countdown_sec_down_btn.set_size(64, 80)
+ countdown_sec_down_btn.set_pos(146, 150)
+ countdown_sec_down_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+ countdown_reset_img = lv.img(countdown_screen)
+ countdown_reset_img.set_size(99, 36)
+ countdown_reset_img.set_src("E:/static/stopwatch_reset.png")
+ countdown_reset_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_reset_img.set_pos(10, 260)
+
+ countdown_reset_imgbtn = lv.img(countdown_screen)
+ countdown_reset_imgbtn.set_size(99, 70)
+ countdown_reset_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_reset_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_reset_imgbtn.set_pos(10, 240)
+
+
+
+ countdown_start_img = lv.img(countdown_screen)
+ countdown_start_img.set_size(99, 36)
+ countdown_start_img.set_src("E:/static/stopwatch_play.png")
+ countdown_start_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_start_img.set_pos(120, 260)
+
+ countdown_start_imgbtn = lv.img(countdown_screen)
+ countdown_start_imgbtn.set_size(99, 70)
+ countdown_start_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_start_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_start_imgbtn.set_pos(120, 240)
+
+
+
+ countdown_stop_img = lv.img(countdown_screen)
+ countdown_stop_img.set_size(99, 36)
+ countdown_stop_img.set_src("E:/static/stopwatch_stop.png")
+ countdown_stop_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_stop_img.set_pos(120, 260)
+ countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_reset_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ self.meta = countdown_screen
+
+ countdown_sec_up_btn.add_event_cb(lambda e: self.sec_up(e),
+ lv.EVENT.CLICKED, None)
+ countdown_sec_down_btn.add_event_cb(lambda e: self.sec_down(e),
+ lv.EVENT.CLICKED, None)
+ countdown_min_up_btn.add_event_cb(lambda e: self.min_up(e),
+ lv.EVENT.CLICKED, None)
+ countdown_min_down_btn.add_event_cb(lambda e: self.min_down(e),
+ lv.EVENT.CLICKED, None)
+ countdown_hour_up_btn.add_event_cb(lambda e: self.hour_up(e),
+ lv.EVENT.CLICKED, None)
+ countdown_hour_down_btn.add_event_cb(lambda e: self.hour_down(e),
+ lv.EVENT.CLICKED, None)
+ countdown_start_imgbtn.add_event_cb(lambda e: self.start(e),
+ lv.EVENT.CLICKED, None)
+ countdown_reset_imgbtn.add_event_cb(lambda e: self.reset(e),
+ lv.EVENT.CLICKED, None)
+ # countdown_stop_imgbtn.add_event_cb(lambda e: self.stop(e),
+ # lv.EVENT.CLICKED, None)
+
+ if self.g_state == 0:
+ countdown_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_reset_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_up.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_down.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_up.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_down.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_up.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_down.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_title.clear_flag(lv.obj.FLAG.HIDDEN)
+ self.g_end = 0
+ self.total = 0
+ self.hour = 0
+ self.min = 0
+ self.sec = 0
+
+
+ def sec_up(self,e):
+ if self.sec < 59:
+ self.sec = self.sec + 1
+ print("sec_up:",self.sec)
+ self.show_value()
+
+ def sec_down(self,e):
+ if self.sec > 0:
+ self.sec = self.sec - 1
+ print("sec_down:",self.sec)
+ self.show_value()
+
+ def min_up(self,e):
+ if self.min < 59:
+ self.min = self.min + 1
+ print("min_up:",self.min)
+ self.show_value()
+
+ def min_down(self,e):
+ if self.min > 0:
+ self.min = self.min - 1
+ print("min_down:",self.min)
+ self.show_value()
+
+ def hour_up(self,e):
+ if self.hour < 23:
+ self.hour = self.hour + 1
+ print("hour_up:",self.hour)
+ self.show_value()
+
+ def hour_down(self,e):
+ if self.hour > 0:
+ self.hour = self.hour - 1
+ print("hour_down:",self.hour)
+ self.show_value()
+
+ def start(self,e):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
+ self.total = self.hour*60*60 + self.min*60 + self.sec
+ print("--00:",self.total,self.hour,self.min,self.sec,self.g_state)
+ if self.g_state == 1:
+ self.g_state = 2
+ self.stop()
+ elif self.g_state == 2:
+ self.g_state = 1
+ if self.total > 0:
+ if self.g_state != 2:
+ self.g_state = 1
+ self.g_end = 0
+ self.show_value()
+ self.timer.start(period=1000, mode=self.timer.PERIODIC, callback=self.fun)
+ countdown_hour_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_start_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_stop_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_reset_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+
+ def stop(self):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
+ print("in stop")
+ countdown_hour_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_up.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_down.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_reset_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ self.g_end = 0
+ self.timer.stop()
+ # self.show_value()
+ # EventMesh.publish("load_screen", {"screen": "countdown"})
+
+ def fun(self,e):
+ self.hour = self.total//3600
+ self.min = self.total%3600//60
+
+ self.show_value()
+
+ if self.total <= 0:
+ self.g_state = 0
+ self.g_end = 1
+ self.timer.stop()
+ EventMesh.publish("load_screen", {"screen": "countdown_end"})
+
+ self.total = self.total - 1
+
+ self.sec = self.sec - 1
+ if self.sec < 0:
+ self.sec = 59
+
+
+ def reset(self,e):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
+ # print("in reset")
+ self.timer.stop()
+ self.hour = 0
+ self.min = 0
+ self.sec = 0
+ self.g_state = 0
+ self.g_end = 0
+ countdown_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_reset_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ countdown_hour_up.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_hour_down.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_up.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_min_down.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_up.clear_flag(lv.obj.FLAG.HIDDEN)
+ countdown_sec_down.clear_flag(lv.obj.FLAG.HIDDEN)
+ self.show_value()
+
+ def show_value(self):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
+ countdown_sec.set_text(str("%02d"%(self.sec)))
+ countdown_min.set_text(str("%02d"%(self.min)))
+ countdown_hour.set_text(str("%02d"%(self.hour)))
+
+
+ def done_return(self):
+ if self.g_state == 0:
+ self.timer.stop()
+ if self.g_end == 1:
+ EventMesh.publish("load_screen", {"screen": "countdown"})
+ else:
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn1_release(self):
+ if self.g_state == 0:
+ self.timer.stop()
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ if self.g_state == 0:
+ self.timer.stop()
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+#结束倒计时显示图标
+countdown_end_screen = None
+countdown_end_img = None
+countdown_end_label = None
+class CountdownEndScreen(Screen):
+ NAME = "countdown_end"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.FIND_timer=osTimer()
+ self.aud = audio.Audio(0)
+ self.FIND_timer_count = 0
+
+ def initialization(self):
+ global countdown_end_screen ,countdown_end_img ,countdown_end_label
+ if countdown_end_screen == None:
+ countdown_end_screen = lv.obj()
+ countdown_end_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_end_img = lv.img(countdown_end_screen)
+ countdown_end_img.set_size(140, 140)
+ countdown_end_img.set_pos(50, 20)
+ countdown_end_img.set_src("E:/static/time_finish.png")
+ countdown_end_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_end_label = lv.label(countdown_end_screen)
+ countdown_end_label.set_pos(0, 200)
+ countdown_end_label.set_size(240, 40)
+ countdown_end_label.set_text("时间到")
+ countdown_end_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_end_label.set_long_mode(lv.label.LONG.WRAP)
+ countdown_end_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ self.meta = countdown_end_screen
+ self.FIND_timer_count = 0
+ self.FIND_timer.start(3000, 1, self.FIND_timer_cb)
+ self.aud.play(1, 1, 'E:/static/audio_audio_haixiu.mp3') #播放声音
+
+ def FIND_timer_cb(self, *args):
+
+ self.FIND_timer_count += 1
+ if self.FIND_timer_count >= 2: #120秒
+ self.stop_FIND()
+ self.aud.play(1, 1, 'E:/static/audio_audio_haixiu.mp3')
+
+ def stop_FIND(self) :
+ self.FIND_timer.stop()
+ self.aud.stopAll()
+
+ def Close(self):
+ self.stop_FIND()
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "countdown"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "countdown"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+# -------------------------------------------stopwatch screen----------------------------------------------------------
+
+
+stopwatch_screen = None
+stopwatch_title = None
+stopwatch_label_min = None
+stopwatch_mao = None
+stopwatch_label_sec = None
+stopwatch_mao1 = None
+stopwatch_label_ms = None
+stopwatch_reset_img = None
+stopwatch_reset_imgbtn = None
+stopwatch_start_img = None
+stopwatch_start_imgbtn = None
+stopwatch_stop_img = None
+class StopwatchScreen(Screen):
+ NAME = "stopwatch"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+ self.ms_value = 0
+ self.sec_value = 0
+ self.min_value = 0
+ self.s_state = 0
+ self.timer = Timer(Timer.Timer1)
+
+ def initialization(self):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
+ if stopwatch_screen == None :
+ stopwatch_screen = lv.obj()
+ stopwatch_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ stopwatch_title = lv.label(stopwatch_screen)
+ stopwatch_title.set_pos(0, 20)
+ stopwatch_title.set_size(240, 20)
+ stopwatch_title.set_text("秒表")
+ stopwatch_title.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ stopwatch_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ stopwatch_label_min = lv.label(stopwatch_screen)
+ stopwatch_label_min.set_pos(30, 140)
+ stopwatch_label_min.set_size(60, 30)
+ stopwatch_label_min.set_text("00")
+ stopwatch_label_min.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_label_min.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_label_min.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ stopwatch_mao = lv.label(stopwatch_screen)
+ stopwatch_mao.set_pos(82, 138)
+ stopwatch_mao.set_size(30, 30)
+ stopwatch_mao.set_text(":")
+ stopwatch_mao.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_mao.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_mao.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+ stopwatch_label_sec = lv.label(stopwatch_screen)
+ stopwatch_label_sec.set_pos(95, 140)
+ stopwatch_label_sec.set_size(60, 30)
+ stopwatch_label_sec.set_text("00")
+ stopwatch_label_sec.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_label_sec.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_label_sec.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ stopwatch_mao1 = lv.label(stopwatch_screen)
+ stopwatch_mao1.set_pos(146, 138)
+ stopwatch_mao1.set_size(30, 30)
+ stopwatch_mao1.set_text(".")
+ stopwatch_mao1.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_mao1.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_mao1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+ stopwatch_label_ms = lv.label(stopwatch_screen)
+ stopwatch_label_ms.set_pos(160, 140)
+ stopwatch_label_ms.set_size(60, 30)
+ stopwatch_label_ms.set_text("0")
+ stopwatch_label_ms.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_label_ms.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_label_ms.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+
+
+ stopwatch_reset_img = lv.img(stopwatch_screen)
+ stopwatch_reset_img.set_size(99, 36)
+ stopwatch_reset_img.set_src("E:/static/stopwatch_reset.png")
+ stopwatch_reset_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_reset_img.set_pos(10, 210)
+
+ stopwatch_reset_imgbtn = lv.img(stopwatch_screen)
+ stopwatch_reset_imgbtn.set_size(99, 76)
+ stopwatch_reset_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ stopwatch_reset_imgbtn.set_pos(10, 190)
+
+
+ stopwatch_start_img = lv.img(stopwatch_screen)
+ stopwatch_start_img.set_size(99, 36)
+ stopwatch_start_img.set_src("E:/static/stopwatch_play.png")
+ stopwatch_start_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_start_img.set_pos(115, 210)
+
+
+ stopwatch_start_imgbtn = lv.img(stopwatch_screen)
+ stopwatch_start_imgbtn.set_size(99, 76)
+ stopwatch_start_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ stopwatch_start_imgbtn.set_pos(115, 190)
+
+
+ stopwatch_stop_img = lv.img(stopwatch_screen)
+ stopwatch_stop_img.set_size(99, 36)
+ stopwatch_stop_img.set_src("E:/static/stopwatch_stop.png")
+ stopwatch_stop_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_stop_img.set_pos(115, 210)
+ stopwatch_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ stopwatch_start_imgbtn.add_event_cb(lambda e: self.start(e),
+ lv.EVENT.CLICKED, None)
+
+ stopwatch_reset_imgbtn.add_event_cb(lambda e: self.reset(e),
+ lv.EVENT.CLICKED, None)
+ self.meta = stopwatch_screen
+
+ if self.s_state == 0:
+ self.reset(0)
+
+ def start(self, e):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
+ print("stopwatch start:{}".format(self.s_state))
+ #self.timer.start(100, 1, self._fun)
+ if self.s_state == 1:
+ self.s_state = 2
+ self.paused()
+ elif self.s_state == 2:
+ self.s_state = 1
+ if self.s_state != 2:
+ self.s_state = 1
+ self.timer.start(period=100, mode=self.timer.PERIODIC, callback=self._fun)
+ stopwatch_stop_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ stopwatch_start_img.add_flag(lv.obj.FLAG.HIDDEN)
+
+
+ def paused(self):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
+ print("stopwatch pause")
+ stopwatch_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ stopwatch_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ self.timer.stop()
+ self.show_value()
+
+ def reset(self,e):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
+ print("stopwatch reset")
+
+ self.sec_value = 0
+ self.min_value = 0
+ self.ms_value = 0
+ self.s_state = 0
+ stopwatch_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ stopwatch_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ self.timer.stop()
+ self.show_value()
+
+ def _fun(self,e):
+ self.ms_value += 1
+ if self.ms_value > 9:
+ self.ms_value = 0
+ self.sec_value += 1
+ if self.sec_value > 60:
+ self.sec_value = 0
+ self.min_value += 1
+ if self.min_value > 99:
+ self.timer.stop()
+ self.show_value()
+
+ def show_value(self):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
+ stopwatch_label_ms.set_text(str("%d"%(self.ms_value)))
+ stopwatch_label_sec.set_text(str("%02d"%(self.sec_value)))
+ stopwatch_label_min.set_text(str("%02d"%(self.min_value)))
+
+ def done_return(self):
+ if self.s_state == 0:
+ self.timer.stop()
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+ def btn1_release(self):
+ if self.s_state == 0:
+ self.timer.stop()
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ if self.s_state == 0:
+ self.timer.stop()
+ EventMesh.publish("load_screen", {"screen": "toolbox"})
+
+FIND_screen = None
+watchface_mpsignal_img = None
+class UIFINDScreen(Screen):
+ NAME = "FIND"
+ def __init__(self):
+ super().__init__()
+ self.read_data = {}
+ self.volum_size = 8
+ check_volum = ql_fs.path_exists("/ext/static/storage_file/config.json")
+ if check_volum == True :
+ with open("/ext/static/storage_file/config.json","r") as fd:#音频文件编号
+ self.read_data = ujson.load(fd)
+ if self.read_data != {}:
+ b = str("volum") in self.read_data.keys()
+ if b == True:
+ self.volum_size = self.read_data["volum"]
+ else:
+ self.volum_size = 8
+ else:
+ self.volum_size = 8
+ else:
+ self.volum_size = 8
+ self.aud = audio.Audio(0)
+ self.aud.set_pa(Pin.GPIO29)
+ self.aud.setVolume(self.volum_size)
+ self.FIND_timer = osTimer()
+ self.FIND_timer_count = 0
+
+ self.meta = None
+
+ def initialization(self):
+ global FIND_screen ,watchface_mpsignal_img
+ if FIND_screen ==None:
+ FIND_screen = lv.obj()
+ FIND_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ # add style for watchface
+ FIND_screen.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+ #进入图片
+ watchface_mpsignal_img = lv.img(FIND_screen)
+ watchface_mpsignal_img.set_pos(int(40),int(45))
+ watchface_mpsignal_img.set_size(160,230)
+ watchface_mpsignal_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ watchface_mpsignal_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ watchface_mpsignal_img.set_src("E:/static/find_phone.png")
+ watchface_mpsignal_img.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+ self.meta = FIND_screen
+
+
+ def post_processor_after_initialization(self):
+ utime.sleep_ms(200)#不加延时会切屏
+ self.FIND_timer.start(3000, 1, self.FIND_timer_cb)
+ self.aud.play(1, 1, 'E:/static/audio_audio_haixiu.mp3') #播放声音
+ pass
+ def FIND_timer_cb(self, *args):
+ self.aud.play(1, 1, 'E:/static/audio_audio_haixiu.mp3')
+ self.FIND_timer_count += 1
+ if self.FIND_timer_count > 40: #120秒
+ self.stop_FIND()
+
+ def stop_FIND(self) :
+ self.FIND_timer.stop()
+ self.aud.stopAll()
+ def Close(self):
+ self.stop_FIND()
+
+ def done_left_to_right(self):
+
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_right_to_left(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_bottom_to_top(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_top_to_bottom(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_click(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+Lowpower_screen = None
+Lowpower_screen_img = None
+class LowPowerScreen(Screen):
+ NAME = "LOW_POWER"
+ def __init__(self):
+ super().__init__()
+ self.meta = None
+
+ def initialization(self):
+ global Lowpower_screen ,Lowpower_screen_img
+ if Lowpower_screen == None :
+ Lowpower_screen = lv.obj()
+ Lowpower_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ # add style for watchface
+ Lowpower_screen.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+ #进入图片
+ Lowpower_screen_img = lv.img(Lowpower_screen)
+ Lowpower_screen_img.set_pos(int(40),int(45))
+ Lowpower_screen_img.set_size(160,230)
+ Lowpower_screen_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ Lowpower_screen_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ Lowpower_screen_img.set_src("E:/static/low_power.png")
+ Lowpower_screen_img.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+ self.meta = Lowpower_screen
+
+ def done_left_to_right(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_right_to_left(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_bottom_to_top(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_top_to_bottom(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_click(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+#from usr.ui_WatchFaceScreen import WatchFaceScreen
+class UI(object):
+ def __init__(self):
+ #self.screen = WatchFaceScreen()
+ #self.screen_old = self.screen
+ self.screen = None
+ self.screen_old = None
+ self.screen_list = []
+ self.lv = lv
+ self.system_sleep_timer = osTimer()
+ self.system_sleep_timer_count = 0
+ self.sleep_flag = 1
+ self.level = 0
+ self.read_data = {}
+ self.level = EventMesh.publish("get_brightness_level")
+ self.read_data = EventMesh.publish("get_storage_data")
+ self.main_flag = 0
+ self.main_id = 0
+ # print("self.read_data:{} self.level:{}".format(self.read_data,self.level))
+ if self.level == None:
+
+ check = ql_fs.path_exists("/ext/static/storage_file/config.json")
+ if check == True:
+ with open("/ext/static/storage_file/config.json","r") as fd:
+ self.read_data = ujson.load(fd)
+ if self.read_data != {}:
+ b = str("brightness_level") in self.read_data.keys()
+ if b == True:
+ self.level = self.read_data["brightness_level"]
+ else:
+ self.level = 6
+ self.read_data["brightness_level"] = self.level
+ EventMesh.publish("set_storage_data", self.read_data)
+ with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_data,fd)
+ else:
+ self.level = 6 #默认是5级别
+ EventMesh.publish("set_brightness_level", self.level)
+ elif self.level > 10:
+ self.level = 10
+ elif self.level <= 0:
+ self.level = 1
+
+ self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, self.level, 10)
+ self.PWM_backlight.open()
+ self.sleep_lock = 0
+
+ def post_processor_after_instantiation(self):
+ EventMesh.subscribe("load_screen", self.load_screen)
+
+ EventMesh.subscribe("btn1_press", self.btn_press)
+ EventMesh.subscribe("btn8_press", self.btn_press)
+ EventMesh.subscribe("btn8_long_press", self.btn_press)
+
+ EventMesh.subscribe("btn1_release", self.btn_release)
+
+ EventMesh.subscribe("done_left_to_right", self.ui_press)
+ EventMesh.subscribe("done_right_to_left", self.ui_press)
+ EventMesh.subscribe("done_bottom_to_top", self.ui_press)
+ EventMesh.subscribe("done_top_to_bottom", self.ui_press)
+ EventMesh.subscribe("done_return", self.ui_press)
+ EventMesh.subscribe("done_click", self.ui_press)
+ EventMesh.subscribe("done_error", self.ui_press)
+ EventMesh.subscribe("call_in", self.publish_call_in)
+
+ EventMesh.subscribe("get_lcd_state", self.get_lcd_state)
+ EventMesh.subscribe("set_lcd_state", self.set_lcd_state)
+
+ #EventMesh.subscribe("call_in", self.publish_call_in)
+ #EventMesh.subscribe("set_bg_img", self.set_bg_img)
+
+ EventMesh.subscribe(constants.EVENT.SYSTEM_SLEEP, self.system_sleep)
+ EventMesh.subscribe(constants.EVENT.SYSTEM_UP, self.system_up)
+ EventMesh.subscribe("system_sleep_rest", self.system_sleep_rest)
+ self.system_sleep_timer.start(1000, 1, self.system_sleep_timer_cb)
+
+
+ def get_lcd_state(self, event, key):
+ return self.sleep_flag
+
+ def set_lcd_state(self, event, key):
+ print("key_:{}".format(key))
+ self.sleep_flag = key
+
+ def system_sleep_rest(self, event, key):
+ self.system_sleep_timeout_rest()
+
+ def ui_press(self, event, key):
+ self.system_sleep_timeout_rest()
+ print("ui press {}".format(event))
+ if event == "done_left_to_right":
+ self.screen.done_left_to_right()
+ if event == "done_right_to_left":
+ self.screen.done_right_to_left()
+ if event == "done_bottom_to_top":
+ self.screen.done_bottom_to_top()
+ if event == "done_top_to_bottom":
+ self.screen.done_top_to_bottom()
+ if event == "done_return":
+ self.screen.done_return()
+ if event == "done_click":
+ self.screen.done_click()
+ def btn_press(self, event, key):
+ print("btn_press: {}".format(event))
+ #主表盘按电源键,息屏
+
+ #息屏状态按按钮都亮屏
+
+
+ if self.main_flag != 1 and self.sleep_flag == 0:
+ self.__lcd_on()
+ return
+ # if event == "btn1_press":
+ # self.screen.btn1_press()
+ if event == "btn8_press":
+ self.screen.btn8_press()
+ if event == "btn8_long_press":
+ EventMesh.publish("load_screen", {"screen": "poweroff_comfirm"})
+
+ def btn_release(self, event, msg):
+ print("btn_release: {}".format(event))
+ if event == "btn1_release":
+ self.screen.btn1_release()
+
+ def __lcd_on(self):
+ self.system_sleep_timeout_rest()
+ if self.sleep_flag == 0 :
+ print("__lcd_on")
+ if self.sleep_lock == 1:
+ utime.sleep_ms(200)
+ self.sleep_lock = 1
+ self.sleep_flag = 1
+
+
+ #lcd_ctrl.write(1)
+ #utime.sleep(10)
+ tp_cst816.resume()
+ lcd.lcd_display_on()
+ lv.autoSleep(0)
+ pm.autosleep(0)
+ utime.sleep_ms(100)
+ EventMesh.publish("set_lcd_state",self.sleep_flag)
+ self.level = EventMesh.publish("get_brightness_level")
+
+ self.read_data = EventMesh.publish("get_storage_data")
+ # print("self.read_data:{} self.level:{}".format(self.read_data,self.level))
+ if self.level == None:
+ self.level = 6
+ elif self.level > 10:
+ self.level = 10
+ elif self.level <= 0:
+ self.level = 1
+ self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, self.level, 10)
+ self.PWM_backlight.open()
+ self.sleep_lock = 0
+
+ def publish_call_in(self, event, msg):
+ EventMesh.publish("load_screen", {"screen": "dialing", "meta": msg})
+
+ def __lcd_off(self):
+
+ if self.sleep_flag == 1 :
+ print("__lcd_off")
+ if self.sleep_lock == 1:
+ utime.sleep_ms(200)
+ self.sleep_lock = 1
+ self.sleep_flag = 0
+ self.PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, 0, 1)
+ self.PWM_backlight.open()
+ #lcd_ctrl.write(0)
+ #utime.sleep(10)
+ tp_cst816.suspend()
+ lcd.lcd_display_off()
+ lv.autoSleep(1)
+ pm.autosleep(1)
+ utime.sleep_ms(100)
+ EventMesh.publish("set_lcd_state",self.sleep_flag)
+ self.sleep_lock = 0
+
+ def system_sleep(self, event, msg) :
+ self.__lcd_off()
+
+ def system_up(self, event, msg):
+ self.__lcd_on()
+
+ def system_sleep_timer_cb(self, *args):
+ self.system_sleep_timer_count += 1
+ if self.system_sleep_timer_count > 50 :
+ self.system_sleep_timer_count = 0
+ self.__lcd_off()
+
+ def system_sleep_timeout_rest(self) :
+ #print("system_sleep_timeout_rest")
+ self.system_sleep_timer_count = 0
+
+ def start(self):
+ #self.post_processor_after_instantiation()
+ pass
+
+ def add_screen(self, screen):
+ self.screen_list.append(screen)
+ return self
+
+
+ def load_screen(self, topic, msg):
+ print("msg1={}".format(msg))
+ for scr in self.screen_list:
+ if scr.NAME == msg["screen"]:
+ # 每次屏幕切换开始息屏倒计时
+ self.__lcd_on()
+ if scr.NAME == 'main_menu':
+ self.main_flag = 1
+ else :
+ self.main_flag = 0
+ mem = gc.mem_free()
+ print('1剩余内存RAM:{} KB'.format(mem / 1024))
+
+ self.screen = scr
+ if self.screen_old != None :
+ self.screen_old.Close() #先关闭上一次界面
+ self.lv.img.cache_invalidate_src(None) #清img cache
+ self.lv.img.cache_set_size(16) #开img cache
+ self.screen_old = self.screen
+ if msg.get("meta"):
+ self.screen.meta_info = msg.get("meta")
+ self.screen.post_processor_before_initialization()
+ self.screen.initialization()
+
+ print("load_screen.load()")
+ self.screen.load()
+ self.lv.scr_load(self.screen.get_meta())
+
+ self.screen.post_processor_after_initialization()
+ mem = gc.mem_free()
+ print('2剩余内存RAM:{} KB'.format(mem / 1024))
+
+
+
+
+
--- /dev/null
+#表盘
+import osTimer
+import lvgl as lv
+from ext import EventMesh
+import osTimer
+from ext import constants
+from ui import Screen,style_screen
+import ql_fs
+import ujson
+
+from ui_main_menu import MainMenu2_Watchface
+
+
+style_font_youyuan_20 = lv.style_t()
+style_font_youyuan_20.init()
+style_font_youyuan_20.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+style_font_youyuan_20.set_text_font_v2("font_22.bin",22,0)
+
+
+Watchface = lv.obj()
+
+Watchface1 = lv.obj(Watchface)
+
+Watchface1.set_size(240,320)
+#Watchface1.set_pos(0,0)
+Watchface1.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+Watchface1.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+# create style style_watchface_img_default
+style_watchface_img_default = lv.style_t()
+style_watchface_img_default.init()
+style_watchface_img_default.set_img_recolor(lv.color_make(0xff,0xff,0xff))
+style_watchface_img_default.set_img_recolor_opa(0)
+style_watchface_img_default.set_img_opa(255)
+
+
+#表盘
+
+#状态栏
+
+watchface1_mpsignal_img = lv.img(Watchface1)
+watchface1_mpsignal_img.set_pos(int(20),int(0))
+watchface1_mpsignal_img.set_size(24,17)
+watchface1_mpsignal_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface1_mpsignal_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface1_mpsignal_img.set_src("E:/static/mpsignal5.png")
+watchface1_mpsignal_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface1_res_stat_battery_img = lv.img(Watchface1)
+watchface1_res_stat_battery_img.set_pos(int(200),int(0))
+watchface1_res_stat_battery_img.set_size(30,18)
+watchface1_res_stat_battery_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface1_res_stat_battery_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface1_res_stat_battery_img.set_src("E:/static/vbat_100.png")
+watchface1_res_stat_battery_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface1_res_stat_charge_in_img = lv.img(Watchface1)
+watchface1_res_stat_charge_in_img.set_pos(int(180),int(0))
+watchface1_res_stat_charge_in_img.set_size(6,16)
+watchface1_res_stat_charge_in_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface1_res_stat_charge_in_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface1_res_stat_charge_in_img.set_src("E:/static/charge_in.png")
+# add style for watchface1_res_stat_charge_in_img
+watchface1_res_stat_charge_in_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#主图片
+watchface1_bg_img = lv.img(Watchface1)
+watchface1_bg_img.set_pos(int(0),int(40))
+watchface1_bg_img.set_size(240,280)
+watchface1_bg_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface1_bg_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface1_bg_img.set_src("E:/static/watch_plate/style_1/bg.png")
+watchface1_bg_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+#时间
+
+
+style_font_youyuan_70_black = lv.style_t()
+style_font_youyuan_70_black.init()
+style_font_youyuan_70_black.set_text_color(lv.color_make(0x32, 0xc8, 0xdb))
+style_font_youyuan_70_black.set_text_font(lv.font_70_bold)
+
+watchface1_time1_text = lv.label(Watchface1)
+watchface1_time1_text.set_pos(20, 60)
+watchface1_time1_text.set_size(190, 71)
+watchface1_time1_text.set_align(lv.TEXT_ALIGN.LEFT)
+watchface1_time1_text.set_text("12:00")
+watchface1_time1_text.add_style(style_font_youyuan_70_black, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#日期
+watchface1_date_span = lv.label(Watchface1)
+watchface1_date_span.set_pos(24, 131)
+watchface1_date_span.set_size(84, 30)
+watchface1_date_span.set_align(lv.TEXT_ALIGN.LEFT)
+watchface1_date_span.set_text("12月9日")
+watchface1_date_span.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
+#星期
+watchface1_week_span = lv.label(Watchface1)
+watchface1_week_span.set_pos(24, 163)
+watchface1_week_span.set_size(70, 30)
+watchface1_week_span.set_align(lv.TEXT_ALIGN.LEFT)
+watchface1_week_span.set_text("星期四")
+watchface1_week_span.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+
+watchface1_step_span = lv.label(Watchface1)
+watchface1_step_span.set_pos(170, 163)
+watchface1_step_span.set_size(70, 30)
+watchface1_step_span.set_align(lv.TEXT_ALIGN.LEFT)
+watchface1_step_span.set_text("0")
+watchface1_step_span.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+
+watchface1_HB_span = lv.label(Watchface1)
+watchface1_HB_span.set_pos(55, 235)
+watchface1_HB_span.set_size(80, 30)
+watchface1_HB_span.set_align(lv.TEXT_ALIGN.LEFT)
+watchface1_HB_span.set_text("0")
+watchface1_HB_span.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+
+watchface1_SPO2_span = lv.label(Watchface1)
+watchface1_SPO2_span.set_pos(160, 235)
+watchface1_SPO2_span.set_size(80, 30)
+watchface1_SPO2_span.set_align(lv.TEXT_ALIGN.LEFT)
+watchface1_SPO2_span.set_text("0")
+watchface1_SPO2_span.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+class WatchFace1():
+ NAME = "Watchface1"
+ # # #表盘1
+ def __init__(self):
+ print("Watchface1:__init__")
+ self.meta = Watchface1
+
+
+ def initialization(self,main_menu):
+ print("Watchface1:initialization")
+ Watchface1.set_parent(main_menu)#设置父控件
+ #获取信号
+ signal = EventMesh.publish("screen_get_sig")
+ if signal:
+ self.__signal(None, signal)
+ # 获取电池电量
+ battery = EventMesh.publish("screen_get_battery")
+ if battery:
+ self.__battery(None, battery)
+ time = EventMesh.publish("screen_get_time")
+ #print("publish_time:"+time)
+ if time:
+ self.__time(None, time)
+ hrValue = EventMesh.publish("get_old_hr_data")
+ if hrValue:
+ self.__oldHrValue(None, hrValue)
+
+ spo2Value = EventMesh.publish("get_old_spo2_data")
+ if spo2Value :
+ self.__oldSpo2Value(None, spo2Value)
+ # print("main get_step msg:{}".format(msg))
+ step = EventMesh.publish(constants.EVENT.GET_STEP)
+ if step :
+ self.__stepValue(None, step[0])
+
+
+ def timerout_update(self):
+ #获取信号
+ signal = EventMesh.publish("screen_get_sig")
+ if signal:
+ self.__signal(None, signal)
+ # 获取电池电量
+ battery = EventMesh.publish("screen_get_battery")
+ if battery:
+ self.__battery(None, battery)
+
+ time = EventMesh.publish("screen_get_time")
+ #print("publish_time:"+time)
+ if time:
+ self.__time(None, time)
+
+ hrValue = EventMesh.publish("get_old_hr_data")
+ if hrValue:
+ self.__oldHrValue(None, hrValue)
+
+ spo2Value = EventMesh.publish("get_old_spo2_data")
+ if spo2Value :
+ self.__oldSpo2Value(None, spo2Value)
+ # print("main get_step msg:{}".format(msg))
+ step = EventMesh.publish(constants.EVENT.GET_STEP)
+ if step :
+ self.__stepValue(None, step[0])
+
+ def __time(self, event, msg):
+ #时间
+ watchface1_time1_text.set_text("{}:{}".format("%02d"%(msg[0][0]),"%02d"%(msg[0][1])))
+
+ watchface1_date_span.set_text(msg[2])#日期
+ watchface1_week_span.set_text(msg[3]) #星期
+
+ def __signal(self, event, msg):
+ #print("__signal_cb:",str(msg))
+ # 信号强度值范围0 ~ 31,值越大表示信号强度越好
+ #print("__signal_cb:{}".format(msg//8))
+ if msg:
+ if msg >= 0 and msg<=31 :
+ watchface1_mpsignal_img.set_src("E:/static/mpsignal{}.png".format(msg//8))
+ else :
+ watchface1_mpsignal_img.set_src("E:/static/mpsignal5.png")
+
+ def __battery(self, event, msg):
+ #print("__battery_cb:",str(msg))
+ #print(msg)
+ if msg[0] == '1':
+ watchface1_res_stat_charge_in_img.set_src("E:/static/charge_in.png")
+ else:
+ watchface1_res_stat_charge_in_img.set_src("E:/static/charge_in1.png")
+
+ watchface1_res_stat_battery_img.set_src("E:/static/vbat_%d.png"%(msg[1]))#"E:/vbat_60.png"
+ pass
+
+ def __oldHrValue(self, event, msg):
+ watchface1_HB_span.set_text(str(msg))
+
+ def __oldSpo2Value(self, event, msg):
+ watchface1_SPO2_span.set_text(str(msg))
+
+ def __stepValue(self, event, msg):
+ watchface1_step_span.set_text(str(msg))
+
+ def Close(self):
+ pass
+
+ def done_left_to_right(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_right_to_left(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_top_to_bottom(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def done_bottom_to_top(self):
+ EventMesh.publish("load_screen", {"screen": "call_log"})
+
+# create style style_watchface_img_default
+style_watchface_img_default = lv.style_t()
+style_watchface_img_default.init()
+style_watchface_img_default.set_img_recolor(lv.color_make(0xff,0xff,0xff))
+style_watchface_img_default.set_img_recolor_opa(0)
+style_watchface_img_default.set_img_opa(255)
+
+Watchface2 = lv.obj(Watchface)
+Watchface2.set_size(240,320)
+#Watchface2.set_pos(0,0)
+Watchface2.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+Watchface2.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#表盘
+
+#状态栏
+
+watchface2_mpsignal_img = lv.img(Watchface2)
+watchface2_mpsignal_img.set_pos(int(20),int(0))
+watchface2_mpsignal_img.set_size(24,17)
+watchface2_mpsignal_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface2_mpsignal_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface2_mpsignal_img.set_src("E:/static/mpsignal5.png")
+watchface2_mpsignal_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface2_res_stat_battery_img = lv.img(Watchface2)
+watchface2_res_stat_battery_img.set_pos(int(200),int(0))
+watchface2_res_stat_battery_img.set_size(30,18)
+watchface2_res_stat_battery_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface2_res_stat_battery_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface2_res_stat_battery_img.set_src("E:/static/vbat_100.png")
+watchface2_res_stat_battery_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface2_res_stat_charge_in_img = lv.img(Watchface2)
+watchface2_res_stat_charge_in_img.set_pos(int(180),int(0))
+watchface2_res_stat_charge_in_img.set_size(6,16)
+watchface2_res_stat_charge_in_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface2_res_stat_charge_in_img.add_flag(lv.obj.FLAG.CLICKABLE)
+watchface2_res_stat_charge_in_img.set_src("E:/static/charge_in.png")
+# add style for watchface_res_stat_charge_in_img
+watchface2_res_stat_charge_in_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+style_font_youyuan_70_red = lv.style_t()
+style_font_youyuan_70_red.init()
+style_font_youyuan_70_red.set_text_color(lv.color_make(0xe5, 0x37, 0x29))
+style_font_youyuan_70_red.set_text_font(lv.font_70_bold)
+#时间
+x = 30
+y = 80
+watchface2_time1_hour1_text = lv.label(Watchface2)
+watchface2_time1_hour1_text.set_pos(40, 80)
+watchface2_time1_hour1_text.set_size(50, 70)
+watchface2_time1_hour1_text.set_align(lv.TEXT_ALIGN.LEFT)
+watchface2_time1_hour1_text.set_text("1")
+watchface2_time1_hour1_text.add_style(style_font_youyuan_70_red, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface2_time1_hour2_text = lv.label(Watchface2)
+watchface2_time1_hour2_text.set_pos(90, 80)
+watchface2_time1_hour2_text.set_size(50, 70)
+watchface2_time1_hour2_text.set_align(lv.TEXT_ALIGN.LEFT)
+watchface2_time1_hour2_text.set_text("2")
+watchface2_time1_hour2_text.add_style(style_font_youyuan_70_red, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface2_time2_min1_text = lv.label(Watchface2)
+watchface2_time2_min1_text.set_pos(40, 156)
+watchface2_time2_min1_text.set_size(50, 70)
+watchface2_time2_min1_text.set_align(lv.TEXT_ALIGN.LEFT)
+watchface2_time2_min1_text.set_text("0")
+watchface2_time2_min1_text.add_style(style_font_youyuan_70_red, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface2_time2_min2_text = lv.label(Watchface2)
+watchface2_time2_min2_text.set_pos(90, 156)
+watchface2_time2_min2_text.set_size(50, 70)
+watchface2_time2_min2_text.set_align(lv.TEXT_ALIGN.LEFT)
+watchface2_time2_min2_text.set_text("0")
+watchface2_time2_min2_text.add_style(style_font_youyuan_70_red, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+# create style watchface2_style_default
+# watchface2_style_default = lv.style_t()
+# watchface2_style_default.init()
+# watchface2_style_default.set_radius(0)
+# watchface2_style_default.set_bg_color(lv.color_make(0x21,0x95,0xf6))
+# watchface2_style_default.set_bg_grad_color(lv.color_make(0x21,0x95,0xf6))
+# watchface2_style_default.set_bg_grad_dir(lv.GRAD_DIR.NONE)
+# watchface2_style_default.set_bg_opa(0)
+# watchface2_style_default.set_border_color(lv.color_make(0x00,0x00,0x00))
+# watchface2_style_default.set_border_width(0)
+# watchface2_style_default.set_border_opa(255)
+# watchface2_style_default.set_pad_left(0)
+# watchface2_style_default.set_pad_right(0)
+# watchface2_style_default.set_pad_top(0)
+# watchface2_style_default.set_pad_bottom(0)
+# watchface2_style_default.set_text_font_v2("font_22.bin",22,0) #将外部字体库与该style对象绑定
+
+watchface2_style_default = lv.style_t()
+watchface2_style_default.init()
+watchface2_style_default.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+watchface2_style_default.set_text_font_v2("font_22.bin",22,0)
+
+
+#日期
+watchface2_date_span = lv.label(Watchface2)
+watchface2_date_span.set_pos(30+56+20+56, 100)
+watchface2_date_span.set_size(84, 35)
+watchface2_date_span.set_align(lv.TEXT_ALIGN.LEFT)
+watchface2_date_span.set_text("12月9日")
+watchface2_date_span.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+#星期
+
+
+watchface2_week = lv.img(Watchface2)
+watchface2_week.set_pos(int(30+15),int(y+20+56+56+30))
+watchface2_week.set_size(90,30)
+watchface2_week.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface2_week.set_src("E:/static/watch_plate/style_2/week/0_week.png")
+watchface2_week.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+
+#天气
+watchface2_temp_img = lv.img(Watchface2)
+watchface2_temp_img.set_pos(int(x+56+56+20),int(y+56+20))
+watchface2_temp_img.set_size(65,45)
+watchface2_temp_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface2_temp_img.set_src("E:/static/watch_plate/style_2/0_main2_weather.png")
+watchface2_temp_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface2_temp_degree = lv.img(Watchface2)
+watchface2_temp_degree.set_pos(int(x+56+56+65),int(215))
+watchface2_temp_degree.set_size(10,10)
+watchface2_temp_degree.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+watchface2_temp_degree.set_src("E:/static/watch_plate/style_2/degree.png")
+watchface2_temp_degree.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface2_temp_txt = lv.label(Watchface2)
+watchface2_temp_txt.set_pos(int(x+56+56+39),int(215))
+watchface2_temp_txt.set_size(240-(x+56+56+34),30)
+watchface2_temp_txt.set_align(lv.TEXT_ALIGN.LEFT)
+watchface2_temp_txt.set_text("00")
+watchface2_temp_txt.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+watchface2_no_temp_txt = lv.label(Watchface2)
+watchface2_no_temp_txt.set_pos(30+56+56+20, 176)
+watchface2_no_temp_txt.set_size(80, 35)
+watchface2_no_temp_txt.set_align(lv.TEXT_ALIGN.LEFT)
+watchface2_no_temp_txt.set_text("无数据")
+watchface2_no_temp_txt.add_style(style_font_youyuan_20, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+class WatchFace2():
+ NAME = "Watchface2"
+ # # #表盘2
+ def __init__(self):
+ print("Watchface2:__init__")
+ self.meta = Watchface2
+
+
+ def initialization(self,main_menu):
+ print("Watchface2:initialization")
+ Watchface2.set_parent(main_menu)#设置父控件
+ #获取信号
+ signal = EventMesh.publish("screen_get_sig")
+ if signal:
+ self.__signal(None, signal)
+ # 获取电池电量
+ battery = EventMesh.publish("screen_get_battery")
+ if battery:
+ self.__battery(None, battery)
+ time = EventMesh.publish("screen_get_time")
+ #print("publish_time:"+time)
+ if time:
+ self.__time(None, time)
+
+ connect = EventMesh.publish(constants.EVENT.GET_CONNECT) #获取网络状态
+ self.weather_data = EventMesh.publish("get_weather_data")
+ if connect == 1 and self.weather_data != None:
+ no_data = self.weather_data[8]
+ if no_data != 0:
+ type = self.weather_data[3]
+ if type == None:
+ self.__weather_type(None,None)
+ else:
+ self.__weather_type(None,type)
+
+ temp = self.weather_data[4]
+ if temp == None:
+ self.__weather_value(None,None)
+ else:
+ self.__weather_value(None,temp)
+ else:
+ self.__weather_type(None,None)
+ self.__weather_value(None,None)
+ else:
+ self.__weather_type(None,None)
+ self.__weather_value(None,None)
+
+
+ def timerout_update(self):
+ #获取信号
+ signal = EventMesh.publish("screen_get_sig")
+ if signal:
+ self.__signal(None, signal)
+ # 获取电池电量
+ battery = EventMesh.publish("screen_get_battery")
+ if battery:
+ self.__battery(None, battery)
+
+ time = EventMesh.publish("screen_get_time")
+ #print("publish_time:"+time)
+ if time:
+ self.__time(None, time)
+
+ connect = EventMesh.publish(constants.EVENT.GET_CONNECT) #获取网络状态
+ self.weather_data = EventMesh.publish("get_weather_data")
+ if connect != 0:
+ no_data = self.weather_data[8]
+ if no_data != 0:
+ type = self.weather_data[3]
+ if type == None:
+ self.__weather_type(None,None)
+ else:
+ self.__weather_type(None,type)
+
+ temp = self.weather_data[4]
+ if temp == None:
+ self.__weather_value(None,None)
+ else:
+ self.__weather_value(None,temp)
+ else:
+ self.__weather_type(None,None)
+ self.__weather_value(None,None)
+ else:
+ self.__weather_type(None,None)
+ self.__weather_value(None,None)
+
+ def __time(self, event, msg):
+ #时间
+ hour1_chose = (msg[0][0])//10%10
+ hour2_chose = (msg[0][0])%10
+ min1_chose = (msg[0][1])//10%10
+ min2_chose = (msg[0][1])%10
+ # watchface2_time1_text.set_text("{}:{}".format("%02d"%(msg[0][0]),"%02d"%(msg[0][1])))
+ watchface2_time1_hour1_text.set_text("{}".format("%d"%(hour1_chose)))
+ watchface2_time1_hour2_text.set_text("{}".format("%d"%(hour2_chose)))
+ watchface2_time2_min1_text.set_text("{}".format("%d"%(min1_chose)))
+ watchface2_time2_min2_text.set_text("{}".format("%d"%(min2_chose)))
+ watchface2_date_span.set_text(msg[2])#日期
+ watchface2_week.set_src("E:/static/watch_plate/style_2/week/%d_week.png"%(msg[5])) #星期
+
+ def __signal(self, event, msg):
+ #print("__signal_cb:",str(msg))
+ # 信号强度值范围0 ~ 31,值越大表示信号强度越好
+ #print("__signal_cb:{}".format(msg//8))
+ if msg:
+ if msg >= 0 and msg<=31 :
+ watchface2_mpsignal_img.set_src("E:/static/mpsignal{}.png".format(msg//8))
+ else :
+ watchface2_mpsignal_img.set_src("E:/static/mpsignal5.png")
+
+ def __battery(self, event, msg):
+ #print("__battery_cb:",str(msg))
+ #print(msg)
+ if msg[0] == '1':
+ watchface2_res_stat_charge_in_img.set_src("E:/static/charge_in.png")
+ else:
+ watchface2_res_stat_charge_in_img.set_src("E:/static/charge_in1.png")
+
+ watchface2_res_stat_battery_img.set_src("E:/static/vbat_%d.png"%(msg[1]))#"E:/vbat_60.png"
+ pass
+
+ def __weather_type(self, event, msg):
+ if msg == None:
+ watchface2_temp_img.add_flag(lv.obj.FLAG.HIDDEN)
+ watchface2_no_temp_txt.clear_flag(lv.obj.FLAG.HIDDEN)
+ else:
+ type = int(msg)
+ watchface2_no_temp_txt.add_flag(lv.obj.FLAG.HIDDEN)
+ watchface2_temp_img.clear_flag(lv.obj.FLAG.HIDDEN)
+ watchface2_temp_img.set_src("E:/static/watch_plate/style_2/%d_main2_weather.png"%(type))
+
+ def __weather_value(self, event, msg):
+ if msg == None:
+ watchface2_temp_degree.add_flag(lv.obj.FLAG.HIDDEN)
+ watchface2_no_temp_txt.clear_flag(lv.obj.FLAG.HIDDEN)
+ watchface2_temp_txt.add_flag(lv.obj.FLAG.HIDDEN)
+ else:
+ watchface2_no_temp_txt.add_flag(lv.obj.FLAG.HIDDEN)
+ watchface2_temp_txt.clear_flag(lv.obj.FLAG.HIDDEN)
+ watchface2_temp_degree.clear_flag(lv.obj.FLAG.HIDDEN)
+ watchface2_temp_txt.set_text(str(msg))
+
+ def Close(self):
+ pass
+
+ def done_left_to_right(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_right_to_left(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ def done_top_to_bottom(self):
+ EventMesh.publish("load_screen", {"screen": "popup"})
+
+ def done_bottom_to_top(self):
+ EventMesh.publish("load_screen", {"screen": "call_log"})
+
+class WatchFace():
+ #NAME = "Watchface"
+
+ def __init__(self):
+ #表盘
+ self.meta = None
+ self.watchface_style_num = "Watchface1"
+ self.watchface_list = []
+ self.timer_update = osTimer()
+ EventMesh.subscribe("set_change_face", self.change_face)
+ self.read_data = {}
+ self.PWM_backlight = None
+ check = ql_fs.path_exists("/ext/static/storage_file/config.json")
+ if check == True:
+ with open("/ext/static/storage_file/config.json","r") as fd:
+ self.read_data = ujson.load(fd)
+ if self.read_data != {}:
+ b = str("watchface") in self.read_data.keys()
+ if b == True:
+ self.watchface_style_num = self.read_data["watchface"]
+ else:
+ self.watchface_style_num = "Watchface1"
+ else:
+ self.watchface_style_num = "Watchface1"
+
+ def initialization(self,main_menu):
+ if self.watchface_list == [] : #第一次初始化
+ self.watchface_list.append( WatchFace1())
+ self.watchface_list.append( WatchFace2())
+ print("watchface INIT !!!!!!!!:",self.watchface_style_num)
+ for wat in self.watchface_list:
+ if wat.NAME == self.watchface_style_num :
+ self.watchface_style = wat
+ wat.meta.add_flag(lv.obj.FLAG.HIDDEN) #隐藏
+ self.watchface_style.initialization(main_menu)
+ self.meta = self.watchface_style.meta
+ self.watchface_style.meta.clear_flag(lv.obj.FLAG.HIDDEN)#显示
+ self.timer_update.start(10000, 1, self.timerout_update)
+
+ def timerout_update(self, *args, **kwargs):
+ self.watchface_style.timerout_update()
+
+ def change_face(self, event=None, msg=None):
+ print("change_face :",msg)
+ self.watchface_style_num = str(msg)
+
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ # def done_left_to_right(self):
+ # EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ # def done_right_to_left(self):
+ # EventMesh.publish("load_screen", {"screen": "main_menu"})
+ # def done_top_to_bottom(self):
+ # EventMesh.publish("load_screen", {"screen": "popup"})
+
+ # def done_bottom_to_top(self):
+ # EventMesh.publish("load_screen", {"screen": "call_log"})
+ # def done_return(self):
+ # EventMesh.publish("load_screen", {"screen": "Watchface"})
+
+ # def btn1_release(self):
+ # EventMesh.publish("load_screen", {"screen": "Watchface"})
+
+ # def btn8_press(self):
+ # EventMesh.publish("load_screen", {"screen": "Watchface"})
+
+ def Close(self):
+ print("watchface Close !!!!!!!!")
+ self.timer_update.stop()
+ self.watchface_style.Close()
+ return
+
+
+
+
--- /dev/null
+#主菜单
+import utime
+import osTimer
+import lvgl as lv
+from ext import EventMesh
+from machine import Timer
+import voiceCall
+import osTimer
+from ext import constants
+from misc import Power
+import pm
+from ui import Screen
+style_MainMenu_screen_default = lv.style_t()
+style_MainMenu_screen_default.init()
+style_MainMenu_screen_default.set_radius(0)
+style_MainMenu_screen_default.set_bg_color(lv.color_make(0x00, 0x00, 0x00))
+style_MainMenu_screen_default.set_bg_opa(255)
+style_MainMenu_screen_default.set_border_width(0)
+style_MainMenu_screen_default.set_pad_left(0)
+style_MainMenu_screen_default.set_pad_right(0)
+style_MainMenu_screen_default.set_pad_top(0)
+style_MainMenu_screen_default.set_pad_bottom(0)
+
+style_MainMenu_img_default = lv.style_t()
+style_MainMenu_img_default.init()
+style_MainMenu_img_default.set_img_recolor(lv.color_make(0xff,0xff,0xff))
+style_MainMenu_img_default.set_img_recolor_opa(0)
+style_MainMenu_img_default.set_img_opa(255)
+
+style_font_youyuan_20 = lv.style_t()
+style_font_youyuan_20.init()
+style_font_youyuan_20.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+style_font_youyuan_20.set_text_font_v2("font_22.bin",22,0)
+
+style_font_youyuan_25 = lv.style_t()
+style_font_youyuan_25.init()
+style_font_youyuan_25.set_text_color(lv.color_make(0xff, 0xff, 0xff))
+style_font_youyuan_25.set_text_font_v2("font_22.bin",22,0)
+
+style_btn = lv.style_t()
+style_btn.init()
+style_btn.set_bg_opa(lv.OPA.TRANSP)
+style_btn.set_shadow_opa(0)
+style_btn.set_border_width(0)
+
+
+# MainMenu = lv.obj()
+# class MainMenuScreen(Screen):
+# NAME = "main_menu"
+
+# def __init__(self):
+# super().__init__()
+# #主菜单
+# self.meta = MainMenu
+# self.main_menu_style_num = "MainMenu2"
+
+# def initialization(self):
+# print("main_menu INIT !!!!!!!!")
+# EventMesh.publish("load_screen", {"screen": self.main_menu_style_num})
+
+
+# def post_processor_after_instantiation(self):
+# EventMesh.subscribe("change_style", self.change_style)
+
+
+# def change_style(self, event=None, msg=None): #换风格
+# self.main_menu_style_num = msg
+# EventMesh.publish("load_screen", {"screen": self.main_menu_style_num})
+
+# def Close(self):
+# return
+
+
+# def done_return(self):
+# EventMesh.publish("load_screen", {"screen": "Watchface"})
+
+# def btn1_release(self):
+# EventMesh.publish("load_screen", {"screen": "Watchface"})
+
+# def btn8_press(self):
+# EventMesh.publish("load_screen", {"screen": "Watchface"})
+
+
+
+
+
+style_font_youyuan_font_60 = lv.style_t()
+style_font_youyuan_font_60.init()
+style_font_youyuan_font_60.set_text_color(lv.color_make(0xFF, 0xFF, 0xFF))
+style_font_youyuan_font_60.set_text_font(lv.font_60_main_menu)
+
+MainMenu2 = lv.obj()
+MainMenu2_til = lv.tileview(MainMenu2)
+MainMenu2_til.set_scrollbar_mode(0)
+MainMenu2_til.add_style(style_MainMenu_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+#表盘
+MainMenu2_Watchface = MainMenu2_til.add_tile(0, 1, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_Watchface)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("0")
+#支付宝
+MainMenu2_alipay = MainMenu2_til.add_tile(0, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_alipay)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("1")
+MainMenu2_img_alipay_text = lv.label(MainMenu2_alipay)
+MainMenu2_img_alipay_text.set_pos(int(0),int(220))
+MainMenu2_img_alipay_text.set_size(240,100)
+MainMenu2_img_alipay_text.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_alipay_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_alipay_text.set_text("支付宝")
+MainMenu2_img_alipay_text.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+MainMenu2_img_alipay = lv.img(MainMenu2_alipay)
+MainMenu2_img_alipay.set_size(160,160)
+MainMenu2_img_alipay.set_pos(40,20)
+MainMenu2_img_alipay.set_src("E:/static/main_menu/main_menu2/alipay_.png")
+MainMenu2_img_alipay.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_alipay.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+# label_alipay.set_long_mode(lv.label.LONG.WRAP)
+# label_alipay.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# label_alipay.add_style(style_font_youyuan_25, lv.PART.MAIN | lv.STATE.DEFAULT)
+#拨号盘
+MainMenu2_phone = MainMenu2_til.add_tile(1, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_phone)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("2")
+MainMenu2_img_phone = lv.img(MainMenu2_phone)
+MainMenu2_img_phone.set_size(160,160)
+MainMenu2_img_phone.set_pos(40,20)
+MainMenu2_img_phone.set_src("E:/static/main_menu/main_menu2/IMAGE_ONE_PAGE_CALL.png")
+MainMenu2_img_phone.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_phone.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_phone_text = lv.label(MainMenu2_phone)
+MainMenu2_img_phone_text.set_pos(int(0),int(220))
+MainMenu2_img_phone_text.set_size(240,100)
+MainMenu2_img_phone_text.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_phone_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_phone_text.set_text("拨号盘")
+MainMenu2_img_phone_text.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+#通讯录
+MainMenu2_contacts = MainMenu2_til.add_tile(2, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_contacts)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("3")
+MainMenu2_img_contacts = lv.img(MainMenu2_contacts)
+MainMenu2_img_contacts.set_size(160,160)
+MainMenu2_img_contacts.set_pos(40,20)
+MainMenu2_img_contacts.set_src("E:/static/main_menu/main_menu2/IMAGE_ONE_PAGE_CONTACTS.png")
+MainMenu2_img_contacts.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_contacts.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_contacts_txt = lv.label(MainMenu2_contacts)
+MainMenu2_img_contacts_txt.set_pos(int(0),int(220))
+MainMenu2_img_contacts_txt.set_size(240,100)
+MainMenu2_img_contacts_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_contacts_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_contacts_txt.set_text("联系人")
+MainMenu2_img_contacts_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+#心律检测
+MainMenu2_heartrate = MainMenu2_til.add_tile(3, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_heartrate)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("4")
+MainMenu2_img_heartrate = lv.img(MainMenu2_heartrate)
+MainMenu2_img_heartrate.set_size(160,160)
+MainMenu2_img_heartrate.set_pos(40,20)
+MainMenu2_img_heartrate.set_src("E:/static/main_menu/main_menu2/IMAGE_ONE_PAGE_HEART_RATE_HEALTH_DETECT.png")
+MainMenu2_img_heartrate.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_heartrate.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_heartrate_txt = lv.label(MainMenu2_heartrate)
+MainMenu2_img_heartrate_txt.set_pos(int(0),int(220))
+MainMenu2_img_heartrate_txt.set_size(240,100)
+MainMenu2_img_heartrate_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_heartrate_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_heartrate_txt.set_text("心率检测")
+MainMenu2_img_heartrate_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+#血样检测
+MainMenu2_spo2 = MainMenu2_til.add_tile(4, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_spo2)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("5")
+MainMenu2_img_spo2 = lv.img(MainMenu2_spo2)
+MainMenu2_img_spo2.set_size(160,160)
+MainMenu2_img_spo2.set_pos(40,20)
+MainMenu2_img_spo2.set_src("E:/static/main_menu/main_menu2/IMAGE_ONE_PAGE_SPO2_DETECT.png")
+MainMenu2_img_spo2.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_spo2.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_spo2_txt = lv.label(MainMenu2_spo2)
+MainMenu2_img_spo2_txt.set_pos(int(0),int(220))
+MainMenu2_img_spo2_txt.set_size(240,100)
+MainMenu2_img_spo2_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_spo2_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_spo2_txt.set_text("血氧检测")
+MainMenu2_img_spo2_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+#工具箱
+MainMenu2_toolbox = MainMenu2_til.add_tile(5, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_toolbox)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("6")
+MainMenu2_img_toolbox = lv.img(MainMenu2_toolbox)
+MainMenu2_img_toolbox.set_size(160,160)
+MainMenu2_img_toolbox.set_pos(40,20)
+MainMenu2_img_toolbox.set_src("E:/static/main_menu/main_menu2/IMAGE_ONE_PAGE_TOOLS.png")
+MainMenu2_img_toolbox.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_toolbox.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_toolbox_txt = lv.label(MainMenu2_toolbox)
+MainMenu2_img_toolbox_txt.set_pos(int(0),int(220))
+MainMenu2_img_toolbox_txt.set_size(240,100)
+MainMenu2_img_toolbox_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_toolbox_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_toolbox_txt.set_text("工具箱")
+MainMenu2_img_toolbox_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+#设置
+MainMenu2_setting = MainMenu2_til.add_tile(6, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_setting)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("7")
+MainMenu2_img_setting = lv.img(MainMenu2_setting)
+MainMenu2_img_setting.set_size(160,160)
+MainMenu2_img_setting.set_pos(40,20)
+MainMenu2_img_setting.set_src("E:/static/main_menu/main_menu2/IMAGE_ONE_PAGE_SETTINGS.png")
+MainMenu2_img_setting.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_setting.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_setting_txt = lv.label(MainMenu2_setting)
+MainMenu2_img_setting_txt.set_pos(int(0),int(220))
+MainMenu2_img_setting_txt.set_size(240,100)
+MainMenu2_img_setting_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_setting_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_setting_txt.set_text("设置")
+MainMenu2_img_setting_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+#体温测量
+MainMenu2_temperature = MainMenu2_til.add_tile(7, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_temperature)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("8")
+MainMenu2_img_temperature = lv.img(MainMenu2_temperature)
+MainMenu2_img_temperature.set_size(160,160)
+MainMenu2_img_temperature.set_pos(40,20)
+MainMenu2_img_temperature.set_src("E:/static/main_menu/main_menu2/IMAGE_ONE_PAGE_TEMPERATURE.png")
+MainMenu2_img_temperature.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_temperature.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_temperature_txt = lv.label(MainMenu2_temperature)
+MainMenu2_img_temperature_txt.set_pos(int(0),int(220))
+MainMenu2_img_temperature_txt.set_size(240,100)
+MainMenu2_img_temperature_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_temperature_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_temperature_txt.set_text("体温测量")
+MainMenu2_img_temperature_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+
+#微聊
+MainMenu2_wechat = MainMenu2_til.add_tile(8, 0, lv.DIR.LEFT | lv.DIR.RIGHT)
+label_text = lv.label(MainMenu2_wechat)
+label_text.set_pos(0, 240)
+label_text.set_size(0, 0)
+label_text.set_text("9")
+MainMenu2_img_wechat = lv.img(MainMenu2_wechat)
+MainMenu2_img_wechat.set_size(160,160)
+MainMenu2_img_wechat.set_pos(40,20)
+MainMenu2_img_wechat.set_src("E:/static/main_menu/main_menu2/IMAGE_ONE_PAGE_WECHAT.png")
+MainMenu2_img_wechat.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_wechat.add_style(style_MainMenu_img_default, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+MainMenu2_img_wechat_txt = lv.label(MainMenu2_wechat)
+MainMenu2_img_wechat_txt.set_pos(int(0),int(220))
+MainMenu2_img_wechat_txt.set_size(240,100)
+MainMenu2_img_wechat_txt.add_flag(lv.obj.FLAG.CLICKABLE)
+MainMenu2_img_wechat_txt.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+MainMenu2_img_wechat_txt.set_text("微聊")
+MainMenu2_img_wechat_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
+
+from ui_WatchFaceScreen import WatchFace
+#主菜单风格2,单页
+class MainMenuScreen(Screen):
+ NAME = "main_menu"
+ def __init__(self):
+ self.meta = MainMenu2
+ self.watchface = WatchFace()
+ self.menu_id = 0
+ print("MainMenu1:__init__")
+ MainMenu2_img_phone.add_event_cb(lambda e: self.img_cb(e, "Phone"), lv.EVENT.CLICKED, None)
+ MainMenu2_img_toolbox.add_event_cb(lambda e: self.img_cb(e, "toolbox"), lv.EVENT.CLICKED, None)
+ MainMenu2_img_setting.add_event_cb(lambda e: self.img_cb(e, "setting"), lv.EVENT.CLICKED, None)
+ MainMenu2_img_heartrate.add_event_cb(lambda e: self.img_cb(e, "heartrate"), lv.EVENT.CLICKED, None)
+ MainMenu2_img_contacts.add_event_cb(lambda e: self.img_cb(e, "contacts"), lv.EVENT.CLICKED, None)
+ MainMenu2_img_wechat.add_event_cb(lambda e: self.img_cb(e, "wechat"), lv.EVENT.CLICKED, None)
+ MainMenu2_img_spo2.add_event_cb(lambda e: self.img_cb(e, "spo2"), lv.EVENT.CLICKED, None)
+ MainMenu2_img_temperature.add_event_cb(lambda e: self.img_cb(e, "temperature"), lv.EVENT.CLICKED, None)
+ MainMenu2_img_alipay.add_event_cb(lambda e: self.img_cb(e, "alipay_open"), lv.EVENT.CLICKED, None)
+ #MainMenu2_img_alipay.add_event_cb(lambda e: img_cb(e, "Watchface_set"), lv.EVENT.CLICKED, None)
+ MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)
+ def initialization(self):
+ self.watchface.initialization(MainMenu2_Watchface)
+ EventMesh.subscribe("watch_top_show", self.watch_top_show)
+ # if self.meta_info in globals() :
+ # MainMenu2_til.set_tile_id(self.meta_info[0],self.meta_info[1],lv.ANIM.OFF)
+ pass#
+
+ def watch_top_show(self, event, msg): #
+ MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)
+
+ def img_cb(self, e, msg):
+ print("MainMenu2:img_cb:{}".format(msg))
+ EventMesh.publish("load_screen", {"screen": "{}".format(msg)})
+
+ def done_return(self):
+ MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF)
+
+ def btn1_release(self):
+ flag = EventMesh.publish("get_lcd_state")
+ if flag == 0:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+ else:
+ if MainMenu2_til.get_tile_act() != None:
+ id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+ if id != "0":
+ MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF)
+
+
+ def btn8_press(self):
+ flag = EventMesh.publish("get_lcd_state")
+ if MainMenu2_til.get_tile_act() != None:
+ id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+ if id == "0":
+ if flag == 1:
+ EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
+ else:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+ else:
+ if flag == 1:
+ MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF)
+ else:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+ else:
+ if flag == 1:
+ MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF)
+ else:
+ EventMesh.publish(constants.EVENT.SYSTEM_UP)
+
+ def done_bottom_to_top(self):
+ id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+ if id == "0":
+ EventMesh.publish("load_screen", {"screen": "call_log"})
+
+ def done_top_to_bottom(self):
+ id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+ if id == "0":
+ EventMesh.publish("load_screen", {"screen": "popup"})
+ def done_left_to_right(self):
+ id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+ print("done_left_to_right:ID{}".format(id))
+ if id == "0":
+ MainMenu2_til.set_tile_id(8,0,lv.ANIM.OFF)
+ elif self.menu_id != '2' and id == '1':
+ MainMenu2_til.set_tile_id(8,0,lv.ANIM.OFF)
+ self.menu_id = id
+ def done_right_to_left(self):
+ id = MainMenu2_til.get_tile_act().get_child(0).get_text()
+ print("done_right_to_left:ID{}".format(id))
+ if id == "0":
+ MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF)
+ elif (self.menu_id != '8' ) and id == '9':
+ MainMenu2_til.set_tile_id(0,0,lv.ANIM.OFF)
+ self.menu_id = id
+
+ def Close(self):
+ self.watchface.Close()
+ print("main_menu Close !!!!!!!!")
+ return
+
--- /dev/null
+
+import lvgl as lv
+import ql_fs
+from ext import EventMesh
+from misc import Power
+from ui import style_screen,style_font_youyuan_20,ContStyle,style_btn,style_img,Screen,style_contact_btn
+from ext import constants
+import osTimer
+import audio
+from machine import Pin
+import ujson
+from ext.lcd import style_font_youyuan_40
+# -------------------------------------------setting screen----------------------------------------------------------
+
+style_bar = lv.style_t()
+style_bar.init()
+style_bar.set_radius(10)
+style_bar.set_bg_color(lv.color_make(0xA0, 0xA0, 0xA0))
+style_bar.set_bg_grad_color(lv.color_make(0xA0, 0xA0, 0xA0))
+style_bar.set_bg_grad_dir(lv.GRAD_DIR.VER)
+style_bar.set_bg_opa(60)
+style_bar.set_pad_left(0)
+style_bar.set_pad_right(0)
+style_bar.set_pad_top(0)
+style_bar.set_pad_bottom(0)
+
+style_volume_btn = lv.style_t()
+style_volume_btn.init()
+style_volume_btn.set_shadow_opa(0)
+style_volume_btn.set_border_width(0)
+style_volume_btn.set_bg_color(lv.color_make(0x80, 0x80, 0x80))
+
+style_bar_indic = lv.style_t()
+style_bar_indic.init()
+style_bar_indic.set_radius(10)
+style_bar_indic.set_bg_color(lv.color_make(0xff, 0x61, 0x3a))
+style_bar_indic.set_bg_grad_color(lv.color_make(0xff, 0x61, 0x3a))
+style_bar_indic.set_bg_grad_dir(lv.GRAD_DIR.VER)
+style_bar_indic.set_bg_opa(255)
+
+setting_cont_y = 0
+setting_screen = lv.obj()
+setting_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+setting_imei_img = lv.img(setting_screen)
+setting_imei_img.set_pos(75, 10)
+setting_imei_img.set_size(90, 30)
+setting_imei_img.set_src("E:/static/setting/setting_text.png")
+setting_imei_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+# setting_title = lv.label(setting)
+# setting_title.set_pos(0, 10)
+# setting_title.set_size(240, 40)
+# setting_title.set_text("设置")
+# setting_title.set_long_mode(lv.label.LONG.WRAP)
+# setting_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+# setting_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+setting_cont = lv.obj(setting_screen)
+setting_cont.set_pos(0, 50)
+setting_cont.set_size(240, 270)
+setting_cont_style = ContStyle()
+setting_cont.add_style(
+ setting_cont_style.style_cont(0, lv.color_make(0x00, 0x00, 0x00), lv.color_make(0x00, 0x00, 0x00), 255),
+ lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# setting_language = lv.btn(setting_cont)
+# setting_language.set_pos(0, setting_cont_y)
+# setting_language.set_size(240, 54)
+# setting_language_label = lv.label(setting_language)
+# setting_language_label.set_text("语言设置")
+# setting_language.set_style_pad_all(0, lv.STATE.DEFAULT)
+# setting_language_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+# setting_language_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+# setting_language_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# setting_language.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+# setting_language_img = lv.img(setting_cont)
+# setting_language_img.set_pos(10, setting_cont_y)set_size(47, 47)
+# setting_language_img.set_size(232, 80)
+# setting_language_img.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_language_img.set_src("E:/static/menu_language.png")
+# setting_language_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+#setting_cont_y += 60
+
+setting_dialswitch = lv.btn(setting_cont)
+setting_dialswitch.set_pos(0, setting_cont_y)
+setting_dialswitch.set_size(0, 0)
+setting_dialswitch_label = lv.label(setting_dialswitch)
+setting_dialswitch_label.set_text("表盘切换")
+setting_dialswitch.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_dialswitch_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_dialswitch_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_dialswitch_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_dialswitch.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_dialswitch_img = lv.img(setting_cont)
+setting_dialswitch_img.set_pos(0, setting_cont_y)
+setting_dialswitch_img.set_size(232, 80)
+setting_dialswitch_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_dialswitch_img.set_src("E:/static/setting/menu_watch_switch.png")
+setting_dialswitch_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+
+# setting_themeswitch = lv.btn(setting_cont)
+# setting_themeswitch.set_pos(0, 120)
+# setting_themeswitch.set_size(240, 54)
+# setting_themeswitch_label = lv.label(setting_themeswitch)
+# setting_themeswitch_label.set_text("主题切换")
+# setting_themeswitch.set_style_pad_all(0, lv.STATE.DEFAULT)
+# setting_themeswitch_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+# setting_themeswitch_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+# setting_themeswitch_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+# setting_themeswitch.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+# setting_themeswitch_img = lv.img(setting_cont)
+# setting_themeswitch_img.set_pos(10, 120)
+# setting_themeswitch_img.set_size(232, 80)
+# setting_themeswitch_img.add_flag(lv.obj.FLAG.CLICKABLE)
+# setting_themeswitch_img.set_src("E:/static/menu_theme_switch.png")
+# setting_themeswitch_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+#setting_cont_y+=60
+
+setting_imei = lv.btn(setting_cont)
+setting_imei.set_pos(0, setting_cont_y)
+setting_imei.set_size(0, 0)
+setting_imei_label = lv.label(setting_imei)
+setting_imei_label.set_text("设备IMEI号")
+setting_imei.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_imei_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_imei_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_imei_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_imei.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_imei_img = lv.img(setting_cont)
+setting_imei_img.set_pos(0, setting_cont_y)
+setting_imei_img.set_size(232, 80)
+setting_imei_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_imei_img.set_src("E:/static/setting/menu_imei_qrcode.png")
+setting_imei_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_app = lv.btn(setting_cont)
+setting_app.set_pos(0, setting_cont_y)
+setting_app.set_size(0, 0)
+setting_app_label = lv.label(setting_app)
+setting_app_label.set_text("手机安装APP")
+setting_app.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_app_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_app_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_app_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_app.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_app_img = lv.img(setting_cont)
+setting_app_img.set_pos(0, setting_cont_y)
+setting_app_img.set_size(232, 80)
+setting_app_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_app_img.set_src("E:/static/setting/menu_app_qrcode.png")
+setting_app_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_bright = lv.btn(setting_cont)
+setting_bright.set_pos(0, setting_cont_y)
+setting_bright.set_size(0, 0)
+setting_bright_label = lv.label(setting_bright)
+setting_bright_label.set_text("屏幕调节")
+setting_bright.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_bright_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_bright_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_bright_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_bright.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_bright_img = lv.img(setting_cont)
+setting_bright_img.set_pos(0, setting_cont_y)
+setting_bright_img.set_size(232, 80)
+setting_bright_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_bright_img.set_src("E:/static/setting/menu_bright.png")
+setting_bright_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_volume = lv.btn(setting_cont)
+setting_volume.set_pos(0, setting_cont_y)
+setting_volume.set_size(0, 0)
+setting_volume_label = lv.label(setting_volume)
+setting_volume_label.set_text("铃声")
+setting_volume.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_volume_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_volume_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_volume_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_volume.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_volume_img = lv.img(setting_cont)
+setting_volume_img.set_pos(0, setting_cont_y)
+setting_volume_img.set_size(232, 80)
+setting_volume_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_volume_img.set_src("E:/static/setting/menu_volume.png")
+setting_volume_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_restore = lv.btn(setting_cont)
+setting_restore.set_pos(0, setting_cont_y)
+setting_restore.set_size(0, 0)
+setting_restore_label = lv.label(setting_restore)
+setting_restore_label.set_text("恢复出厂设置")
+setting_restore.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_restore_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_restore_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_restore_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_restore.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_restore_img = lv.img(setting_cont)
+setting_restore_img.set_pos(0, setting_cont_y)
+setting_restore_img.set_size(232, 80)
+setting_restore_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_restore_img.set_src("E:/static/setting/menu_restore.png")
+setting_restore_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_poweroff = lv.btn(setting_cont)
+setting_poweroff.set_pos(0, setting_cont_y)
+setting_poweroff.set_size(0, 0)
+setting_poweroff_label = lv.label(setting_poweroff)
+setting_poweroff_label.set_text("关机")
+setting_poweroff.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_poweroff_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_poweroff_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_poweroff_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_poweroff.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_poweroff_img = lv.img(setting_cont)
+setting_poweroff_img.set_pos(0, setting_cont_y)
+setting_poweroff_img.set_size(232, 80)
+setting_poweroff_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_poweroff_img.set_src("E:/static/setting/menu_poweroff.png")
+setting_poweroff_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_version = lv.btn(setting_cont)
+setting_version.set_pos(0, setting_cont_y)
+setting_version.set_size(0, 0)
+setting_version_label = lv.label(setting_version)
+setting_version_label.set_text("关于设备")
+setting_version.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_version_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_version_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_version_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_version.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_version_img = lv.img(setting_cont)
+setting_version_img.set_pos(0, setting_cont_y)
+setting_version_img.set_size(232, 80)
+setting_version_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_version_img.set_src("E:/static/setting/menu_version.png")
+setting_version_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_cont_y+=90
+
+setting_update = lv.btn(setting_cont)
+setting_update.set_pos(0, setting_cont_y)
+setting_update.set_size(0, 0)
+setting_update_label = lv.label(setting_update)
+setting_update_label.set_text("系统升级")
+setting_update.set_style_pad_all(0, lv.STATE.DEFAULT)
+setting_update_label.align(lv.ALIGN.LEFT_MID, 70, 0)
+setting_update_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+setting_update_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_update.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+setting_update_img = lv.img(setting_cont)
+setting_update_img.set_pos(0, setting_cont_y)
+setting_update_img.set_size(232, 80)
+setting_update_img.add_flag(lv.obj.FLAG.CLICKABLE)
+setting_update_img.set_src("E:/static/setting/menu_upgrade.png")
+setting_update_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+class SettingScreen(Screen):
+ NAME = "setting"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = setting_screen
+ # setting_language.add_event_cb(lambda e: self.load_screen(e, {"screen": "language"}), lv.EVENT.CLICKED, None)
+ setting_dialswitch.add_event_cb(lambda e: self.load_screen(e, {"screen": "dialswitch"}), lv.EVENT.CLICKED, None)
+ # setting_themeswitch.add_event_cb(lambda e: self.load_screen(e, {"screen": "themeswitch"}), lv.EVENT.CLICKED, None)
+ setting_imei.add_event_cb(lambda e: self.load_screen(e, {"screen": "imei"}), lv.EVENT.CLICKED, None)
+ setting_app.add_event_cb(lambda e: self.load_screen(e, {"screen": "app"}), lv.EVENT.CLICKED, None)
+ setting_bright.add_event_cb(lambda e: self.load_screen(e, {"screen": "brightness"}), lv.EVENT.CLICKED, None)
+ setting_volume.add_event_cb(lambda e: self.load_screen(e, {"screen": "totalvolume"}), lv.EVENT.CLICKED, None)
+ setting_restore.add_event_cb(lambda e: self.load_screen(e, {"screen": "restore"}), lv.EVENT.CLICKED, None)
+ setting_poweroff.add_event_cb(lambda e: self.load_screen(e, {"screen": "poweroff"}), lv.EVENT.CLICKED, None)
+ setting_update.add_event_cb(lambda e: self.load_screen(e, {"screen": "update"}), lv.EVENT.CLICKED, None)
+ setting_version.add_event_cb(lambda e: self.load_screen(e, {"screen": "version"}), lv.EVENT.CLICKED, None)
+
+ # img regist btton
+ # setting_language.add_event_cb(lambda e: self.load_screen(e, {"screen": "language"}), lv.EVENT.CLICKED, None)
+ setting_dialswitch_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "dialswitch"}), lv.EVENT.CLICKED, None)
+ # setting_themeswitch.add_event_cb(lambda e: self.load_screen(e, {"screen": "themeswitch"}), lv.EVENT.CLICKED, None)
+ setting_imei_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "imei"}), lv.EVENT.CLICKED, None)
+ setting_app_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "app"}), lv.EVENT.CLICKED, None)
+ setting_bright_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "brightness"}), lv.EVENT.CLICKED, None)
+ setting_volume_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "totalvolume"}), lv.EVENT.CLICKED, None)
+ setting_restore_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "restore"}), lv.EVENT.CLICKED, None)
+ setting_poweroff_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "poweroff"}), lv.EVENT.CLICKED, None)
+ setting_update_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "update"}), lv.EVENT.CLICKED, None)
+ setting_version_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "version"}), lv.EVENT.CLICKED, None)
+
+
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+##################################################################
+# -------------------------------------------language screen----------------------------------------------------------
+language_screen = lv.obj()
+language_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+language_title = lv.label(language_screen)
+language_title.set_pos(0, 10)
+language_title.set_size(240, 40)
+language_title.set_text("语言设置")
+language_title.set_long_mode(lv.label.LONG.WRAP)
+language_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+language_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+language_english_btn = lv.btn(language_screen)
+language_english_btn.set_size(240,50)
+language_english_btn.set_pos(0, 60)
+language_english_btn.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+language_english_btn.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+language_english_btn_label = lv.label(language_english_btn)
+language_english_btn_label.set_text("English")
+language_english_btn_label.align(lv.ALIGN.LEFT_MID, 10, 0)
+language_english_btn_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+language_chinese_btn = lv.btn(language_screen)
+language_chinese_btn.set_size(240,50)
+language_chinese_btn.set_pos(0, 120)
+language_chinese_btn.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+language_chinese_btn.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+language_chinese_btn_label = lv.label(language_chinese_btn)
+language_chinese_btn_label.set_text("简体中文")
+language_chinese_btn_label.align(lv.ALIGN.LEFT_MID, 10, 0)
+language_chinese_btn_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# -------------------------------------------dialswitch screen----------------------------------------------------------
+dialswitch_screen = lv.obj()
+dialswitch_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+dialswitch_title = lv.label(dialswitch_screen)
+dialswitch_title.set_pos(0, 10)
+dialswitch_title.set_size(240, 40)
+dialswitch_title.set_text("表盘切换")
+dialswitch_title.set_long_mode(lv.label.LONG.WRAP)
+dialswitch_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+dialswitch_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+dialswitch_btn1 = lv.btn(dialswitch_screen)
+dialswitch_btn1.set_size(240,54)
+dialswitch_btn1.set_pos(0, 50)
+dialswitch_btn1.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+dialswitch_btn1.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+dialswitch_btn1_label = lv.label(dialswitch_btn1)
+dialswitch_btn1_label.set_text("表盘1")
+dialswitch_btn1_label.align(lv.ALIGN.LEFT_MID, 10, 0)
+dialswitch_btn1_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+dialswitch_btn2 = lv.btn(dialswitch_screen)
+dialswitch_btn2.set_size(240,54)
+dialswitch_btn2.set_pos(0, 104)
+dialswitch_btn2.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+dialswitch_btn2.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+dialswitch_btn2_label = lv.label(dialswitch_btn2)
+dialswitch_btn2_label.set_text("表盘2")
+dialswitch_btn2_label.align(lv.ALIGN.LEFT_MID, 10, 0)
+dialswitch_btn2_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+btn1_switch = lv.switch(dialswitch_btn1)
+btn1_switch.set_pos(185, 3)
+btn1_switch.set_size(10, 10)
+btn1_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN | lv.PART.INDICATOR)
+btn1_switch.set_style_bg_color(lv.color_make(0xff, 0x00, 0x00),lv.PART.KNOB | lv.STATE.CHECKED)
+btn1_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.KNOB)
+
+btn2_switch = lv.switch(dialswitch_btn2)
+btn2_switch.set_pos(185, 3)
+btn2_switch.set_size(10, 10)
+btn2_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN | lv.PART.INDICATOR)
+btn2_switch.set_style_bg_color(lv.color_make(0xff, 0x00, 0x00),lv.PART.KNOB | lv.STATE.CHECKED)
+btn2_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.KNOB)
+
+# -------------------------------------------menustyle screen----------------------------------------------------------
+menustyle_screen = lv.obj()
+menustyle_screen.center()
+menustyle_screen.set_size(240, 320)
+menustyle_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+menustyle_title = lv.label(menustyle_screen)
+menustyle_title.set_pos(0, 10)
+menustyle_title.set_size(240, 40)
+menustyle_title.set_text("主菜单风格")
+menustyle_title.set_long_mode(lv.label.LONG.WRAP)
+menustyle_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+menustyle_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+menustyle_btn1 = lv.btn(menustyle_screen)
+menustyle_btn1.set_size(240,54)
+menustyle_btn1.set_pos(0, 50)
+menustyle_btn1.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+menustyle_btn1.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+menustyle_btn1_label = lv.label(menustyle_btn1)
+menustyle_btn1_label.set_text("四宫格")
+menustyle_btn1_label.align(lv.ALIGN.LEFT_MID, 10, 0)
+menustyle_btn1_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+menu_btn1_switch = lv.switch(menustyle_btn1)
+menu_btn1_switch.set_pos(185, 3)
+menu_btn1_switch.set_size(10, 10)
+menu_btn1_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN | lv.PART.INDICATOR)
+menu_btn1_switch.set_style_bg_color(lv.color_make(0xff, 0x00, 0x00),lv.PART.KNOB | lv.STATE.CHECKED)
+menu_btn1_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.KNOB)
+
+menustyle_btn2 = lv.btn(menustyle_screen)
+menustyle_btn2.set_size(240,54)
+menustyle_btn2.set_pos(0, 104)
+menustyle_btn2.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.PRESSED)
+menustyle_btn2.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+menustyle_btn2_label = lv.label(menustyle_btn2)
+menustyle_btn2_label.set_text("单页")
+menustyle_btn2_label.align(lv.ALIGN.LEFT_MID, 10, 0)
+menustyle_btn2_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+menu_btn2_switch = lv.switch(menustyle_btn2)
+menu_btn2_switch.set_pos(185, 3)
+menu_btn2_switch.set_size(10, 10)
+menu_btn2_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN | lv.PART.INDICATOR)
+menu_btn2_switch.set_style_bg_color(lv.color_make(0xff, 0x00, 0x00),lv.PART.KNOB | lv.STATE.CHECKED)
+menu_btn2_switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.KNOB)
+
+
+
+
+
+# -------------------------------------------app screen----------------------------------------------------------
+#app_screen = lv.obj()
+app_screen = lv.obj()
+app_screen.center()
+app_screen.set_size(240, 320)
+app_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+app_img = lv.img(app_screen)
+app_img.set_pos(int(20),int(40))
+app_img.set_size(200,200)
+app_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+app_img.add_flag(lv.obj.FLAG.CLICKABLE)
+app_img.set_src("E:/static/IMAGE_APP_QR_CODE.png")
+app_img.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+# app_qr = lv.qrcode(imei, 150, fg_color, bg_color)
+# app_qr.center()
+# Add a border with bg_color
+# app_qr.set_style_border_color(bg_color, 0)
+# app_qr.set_style_border_width(5, 0)
+# app_qr_data = str("https://fangzoudiu.xcloudtech.com/xiao_jian")
+# app_qr.update(app_qr_data,len(app_qr_data))
+
+app_label = lv.label(app_screen)
+app_label.set_pos(0, 280)
+app_label.set_size(240, 20)
+app_label.set_text(" ")
+app_label.set_long_mode(lv.label.LONG.WRAP)
+app_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+app_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+# -------------------------------------------volume screen----------------------------------------------------------
+volume_screen = lv.obj()
+volume_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+volume_phone_btn = lv.btn(volume_screen)
+volume_phone_btn.set_size(240,40)
+volume_phone_btn.set_pos(0,30)
+volume_phone_btn.add_style(style_volume_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+volume_phone_label = lv.label(volume_phone_btn)
+volume_phone_label.set_text("电话铃声")
+volume_phone_label.align(lv.ALIGN.CENTER, 0, 0)
+volume_phone_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+volume_alarm_btn = lv.btn(volume_screen)
+volume_alarm_btn.set_size(240,40)
+volume_alarm_btn.set_pos(0,100)
+volume_alarm_btn.add_style(style_volume_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+volume_alarm_label = lv.label(volume_alarm_btn)
+volume_alarm_label.set_text("闹钟铃声")
+volume_alarm_label.align(lv.ALIGN.CENTER, 0, 0)
+volume_alarm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+volume_message_btn = lv.btn(volume_screen)
+volume_message_btn.set_size(240,40)
+volume_message_btn.set_pos(0,170)
+volume_message_btn.add_style(style_volume_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+volume_message_label = lv.label(volume_message_btn)
+volume_message_label.set_text("消息铃声")
+volume_message_label.align(lv.ALIGN.CENTER, 0, 0)
+volume_message_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+# -------------------------------------------phonering screen----------------------------------------------------------
+phonering_screen = lv.obj()
+phonering_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+phonering_title = lv.label(phonering_screen)
+phonering_title.set_pos(0, 10)
+phonering_title.set_size(240, 40)
+phonering_title.set_text("电话铃声")
+phonering_title.set_long_mode(lv.label.LONG.WRAP)
+phonering_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+phonering_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+phonering_label1 = lv.label(phonering_screen)
+phonering_label1.set_pos(10, 70)
+phonering_label1.set_size(230, 40)
+phonering_label1.set_text("电话铃声:")
+phonering_label1.set_long_mode(lv.label.LONG.WRAP)
+phonering_label1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+phonering_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+phonering_bar = lv.bar(phonering_screen)
+phonering_bar.set_pos(20, 120)
+phonering_bar.set_size(200, 15)
+phonering_bar.set_style_anim_time(1000, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+phonering_bar.set_mode(lv.bar.MODE.NORMAL)
+phonering_bar.set_value(50, lv.ANIM.OFF)
+phonering_bar.add_style(style_bar, lv.PART.MAIN | lv.STATE.DEFAULT)
+phonering_bar.add_style(style_bar_indic, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+
+phonering_reduce_imgbtn = lv.img(phonering_screen)
+phonering_reduce_imgbtn.set_pos(0, 150)
+phonering_reduce_imgbtn.set_size(110, 46)
+phonering_reduce_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+phonering_reduce_imgbtn.set_src("E:/static/reduce_btn.png")
+phonering_reduce_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+phonering_add_imgbtn = lv.img(phonering_screen)
+phonering_add_imgbtn.set_pos(120, 150)
+phonering_add_imgbtn.set_size(110, 46)
+phonering_add_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+phonering_add_imgbtn.set_src("E:/static/add_btn.png")
+
+phonering_add_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+# -------------------------------------------alarmvolume screen----------------------------------------------------------
+alarmvolume_screen = lv.obj()
+alarmvolume_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+alarmvolume_title = lv.label(alarmvolume_screen)
+alarmvolume_title.set_pos(0, 10)
+alarmvolume_title.set_size(240, 40)
+alarmvolume_title.set_text("闹钟铃声")
+alarmvolume_title.set_long_mode(lv.label.LONG.WRAP)
+alarmvolume_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+alarmvolume_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+alarmvolume_label1 = lv.label(alarmvolume_screen)
+alarmvolume_label1.set_pos(10, 70)
+alarmvolume_label1.set_size(230, 40)
+alarmvolume_label1.set_text("闹钟铃声:")
+alarmvolume_label1.set_long_mode(lv.label.LONG.WRAP)
+alarmvolume_label1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+alarmvolume_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+alarmvolume_bar = lv.bar(alarmvolume_screen)
+alarmvolume_bar.set_pos(20, 120)
+alarmvolume_bar.set_size(200, 15)
+alarmvolume_bar.set_style_anim_time(1000, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+alarmvolume_bar.set_mode(lv.bar.MODE.NORMAL)
+alarmvolume_bar.set_value(50, lv.ANIM.OFF)
+alarmvolume_bar.add_style(style_bar, lv.PART.MAIN | lv.STATE.DEFAULT)
+alarmvolume_bar.add_style(style_bar_indic, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+
+alarmvolume_reduce_imgbtn = lv.img(alarmvolume_screen)
+alarmvolume_reduce_imgbtn.set_pos(5, 150)
+alarmvolume_reduce_imgbtn.set_size(110, 46)
+alarmvolume_reduce_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+alarmvolume_reduce_imgbtn.set_src("E:/static/reduce_btn.png")
+
+alarmvolume_reduce_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+alarmvolume_add_imgbtn = lv.img(alarmvolume_screen)
+alarmvolume_add_imgbtn.set_pos(125, 150)
+alarmvolume_add_imgbtn.set_size(110, 46)
+alarmvolume_add_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+alarmvolume_add_imgbtn.set_src("E:/static/add_btn.png")
+
+alarmvolume_add_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+# -------------------------------------------msgvolume screen----------------------------------------------------------
+msgvolume_screen = lv.obj()
+msgvolume_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+msgvolume_title = lv.label(msgvolume_screen)
+msgvolume_title.set_pos(0, 10)
+msgvolume_title.set_size(240, 40)
+msgvolume_title.set_text("消息铃声")
+msgvolume_title.set_long_mode(lv.label.LONG.WRAP)
+msgvolume_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+msgvolume_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+msgvolume_label1 = lv.label(msgvolume_screen)
+msgvolume_label1.set_pos(10, 70)
+msgvolume_label1.set_size(230, 40)
+msgvolume_label1.set_text("消息铃声:")
+msgvolume_label1.set_long_mode(lv.label.LONG.WRAP)
+msgvolume_label1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+msgvolume_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+msgvolume_bar = lv.bar(msgvolume_screen)
+msgvolume_bar.set_pos(20, 120)
+msgvolume_bar.set_size(200, 15)
+msgvolume_bar.set_style_anim_time(1000, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+msgvolume_bar.set_mode(lv.bar.MODE.NORMAL)
+msgvolume_bar.set_value(50, lv.ANIM.OFF)
+msgvolume_bar.add_style(style_bar, lv.PART.MAIN | lv.STATE.DEFAULT)
+msgvolume_bar.add_style(style_bar_indic, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+
+msgvolume_reduce_imgbtn = lv.img(msgvolume_screen)
+msgvolume_reduce_imgbtn.set_pos(5, 150)
+msgvolume_reduce_imgbtn.set_size(110, 46)
+msgvolume_reduce_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+msgvolume_reduce_imgbtn.set_src("E:/static/reduce_btn.png")
+
+msgvolume_reduce_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+msgvolume_add_imgbtn = lv.img(msgvolume_screen)
+msgvolume_add_imgbtn.set_pos(125, 150)
+msgvolume_add_imgbtn.set_size(110, 46)
+msgvolume_add_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+msgvolume_add_imgbtn.set_src("E:/static/add_btn.png")
+
+msgvolume_add_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+# -------------------------------------------restore screen----------------------------------------------------------
+restore_screen = lv.obj()
+restore_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+restore_label = lv.label(restore_screen)
+restore_label.set_pos(0, 100)
+restore_label.set_size(240, 40)
+restore_label.set_text("恢复出厂设置?")
+restore_label.set_long_mode(lv.label.LONG.WRAP)
+restore_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+restore_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+restore_confirm = lv.label(restore_screen)
+restore_confirm.set_text("确认")
+restore_confirm.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+restore_confirm.set_size(120, 40)
+restore_confirm.set_pos(0,180)
+restore_confirm.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+restore_confirm.add_flag(lv.obj.FLAG.CLICKABLE)
+restore_confirm.set_ext_click_area(20)
+
+restore_cancel = lv.label(restore_screen)
+restore_cancel.set_text("返回")
+restore_cancel.set_size(120, 40)
+restore_cancel.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+restore_cancel.set_pos(120,180)
+restore_cancel.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+restore_cancel.add_flag(lv.obj.FLAG.CLICKABLE)
+restore_cancel.set_ext_click_area(20)
+
+
+
+
+
+# -------------------------------------------version screen----------------------------------------------------------
+version_screen = lv.obj()
+version_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_msg = "Software Version:\n\
+MMI\n\
+Version:UIX8910_C55_V\n\
+1.0_Release\n\
+Build Time:\n\
+2-17-2023\n\
+9:32:5\n\
+IMEI:\n\
+"
+
+version_label1 = lv.label(version_screen)
+version_label1.set_pos(0, 0)
+version_label1.set_size(240, 25)
+version_label1.set_long_mode(lv.label.LONG.WRAP)
+version_label1.set_text("Software Version:")
+version_label1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label2 = lv.label(version_screen)
+version_label2.set_pos(0, 25)
+version_label2.set_size(240, 25)
+version_label2.set_long_mode(lv.label.LONG.WRAP)
+version_label2.set_text("MMI")
+version_label2.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label3 = lv.label(version_screen)
+version_label3.set_pos(0, 50)
+version_label3.set_size(240, 25)
+version_label3.set_long_mode(lv.label.LONG.WRAP)
+version_label3.set_text("Version:UIX8910_C55_V")
+version_label3.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label3.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label4 = lv.label(version_screen)
+version_label4.set_pos(0, 75)
+version_label4.set_size(240, 25)
+version_label4.set_long_mode(lv.label.LONG.WRAP)
+version_label4.set_text("1.0_Release")
+version_label4.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label4.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label5 = lv.label(version_screen)
+version_label5.set_pos(0, 100)
+version_label5.set_size(240, 25)
+version_label5.set_long_mode(lv.label.LONG.WRAP)
+version_label5.set_text("Build Time:")
+version_label5.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label5.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label6 = lv.label(version_screen)
+version_label6.set_pos(0, 125)
+version_label6.set_size(240, 25)
+version_label6.set_long_mode(lv.label.LONG.WRAP)
+version_label6.set_text("2-17-2023")
+version_label6.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label6.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label7 = lv.label(version_screen)
+version_label7.set_pos(0, 150)
+version_label7.set_size(240, 25)
+version_label7.set_long_mode(lv.label.LONG.WRAP)
+version_label7.set_text("9:32:5")
+version_label7.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label7.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label8 = lv.label(version_screen)
+version_label8.set_pos(0, 175)
+version_label8.set_size(240, 25)
+version_label8.set_long_mode(lv.label.LONG.WRAP)
+version_label8.set_text("IMEI:")
+version_label8.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label8.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+version_label9 = lv.label(version_screen)
+version_label9.set_pos(20, 200)
+version_label9.set_size(220, 100)
+version_label9.set_long_mode(lv.label.LONG.WRAP)
+version_label9.set_text(" ")
+version_label9.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+version_label9.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+# -------------------------------------------update screen----------------------------------------------------------
+update_screen = lv.obj()
+update_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+update_title = lv.label(update_screen)
+update_title.set_pos(0, 10)
+update_title.set_size(240, 40)
+update_title.set_text("系统更新")
+update_title.set_long_mode(lv.label.LONG.WRAP)
+update_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+update_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+update_label = lv.label(update_screen)
+update_label.set_text(" 检查版本更新!/n 请稍后...")
+update_label.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+update_label.set_size(240, 50)
+update_label.set_pos(0,50)
+update_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+update_return = lv.label(update_screen)
+update_return.set_text("返回")
+update_return.set_size(240, 40)
+update_return.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+update_return.set_pos(0,240)
+update_return.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+update_return.add_flag(lv.obj.FLAG.CLICKABLE)
+
+class RestoreScreen(Screen):
+ NAME = "restore"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = restore_screen
+ restore_confirm.add_event_cb(lambda e: self.confirm(e),lv.EVENT.CLICKED, None)
+ restore_cancel.add_event_cb(lambda e: self.concel(e),lv.EVENT.CLICKED, None)
+
+
+ def confirm(self, e):
+ ret = 0
+ ret = ql_fs.path_exists("/ext/static/storage_file")#电话本
+ if ret == True:
+ ql_fs.rmdirs("/ext/static/storage_file")
+ ql_fs.mkdirs("/ext/static/storage_file")
+ # [XT*334588000000156*0003*DLT]
+ EventMesh.publish(constants.PROTOCOL.DLT_SEND)
+
+
+ # EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def concel(self, e):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+
+class UpdateScreen(Screen):
+ NAME = "update"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = update_screen
+ update_return.add_event_cb(lambda e: self.back(e),lv.EVENT.CLICKED, None)
+
+ def back(self,e):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+
+class VersionScreen(Screen):
+ NAME = "version"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = version_screen
+ self.btn_count = 0
+ def initialization(self):
+ imei = EventMesh.publish(constants.EVENT.GET_IMEI)
+ version_label9.set_text(imei)
+
+ def Close(self):
+ self.btn_count = 0
+
+ def done_click(self):
+ self.btn_count += 1
+ if self.btn_count >= 5 :
+ EventMesh.publish("load_screen", {"screen": "factorymode"})
+
+ def done_bottom_to_top(self):
+ self.btn_count += 1
+ if self.btn_count >= 5 :
+ EventMesh.publish("load_screen", {"screen": "factorymode"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+# -------------------------------------------poweroff screen----------------------------------------------------------
+poweroff_screen = lv.obj()
+poweroff_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+poweroff_img = lv.img(poweroff_screen)
+poweroff_img.set_pos(100, 30)
+poweroff_img.set_size(61, 61)
+poweroff_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+poweroff_img.set_src("E:/static/poweroff_icon.png")
+
+poweroff_label = lv.label(poweroff_screen)
+poweroff_label.set_text("是否关机?")
+poweroff_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+poweroff_label.set_size(240, 20)
+poweroff_label.set_pos(0,120)
+poweroff_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+poweroff_confirm_img = lv.img(poweroff_screen)
+poweroff_confirm_img.set_size(176, 46)
+poweroff_confirm_img.set_pos(32, 150)
+poweroff_confirm_img.set_src("E:/static/off_icon.png")
+poweroff_confirm_img.add_flag(lv.obj.FLAG.CLICKABLE)
+poweroff_confirm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+poweroff_confirm_label = lv.label(poweroff_confirm_img)
+poweroff_confirm_label.set_text("关机")
+poweroff_confirm_label.align(lv.ALIGN.CENTER, 0, 0)
+poweroff_confirm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+poweroff_return = lv.img(poweroff_screen)
+poweroff_return.set_size(176, 46)
+poweroff_return.set_pos(32, 210)
+poweroff_return.set_src("E:/static/cancel_icon.png")
+poweroff_return.add_flag(lv.obj.FLAG.CLICKABLE)
+poweroff_return.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+poweroff_return_label = lv.label(poweroff_return)
+poweroff_return_label.set_text("返回")
+poweroff_return_label.align(lv.ALIGN.CENTER, 0, 0)
+poweroff_return_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+poweroff_return.set_ext_click_area(20)
+
+
+class PoweroffScreen(Screen):
+ NAME = "poweroff"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = poweroff_screen
+ self.timer = osTimer()
+ self.button_flag = 0
+ poweroff_confirm_img.add_event_cb(lambda e: self.confirm(e),lv.EVENT.CLICKED, None)
+ poweroff_return.add_event_cb(lambda e: self.concel(e),lv.EVENT.CLICKED, None)
+
+ def initialization(self):
+ pass
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def confirm(self, e):
+ EventMesh.publish("load_screen", {"screen": "poweroff_comfirm"})
+
+
+ def concel(self, e):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+
+
+poweroff_confirm_screen = lv.obj()
+poweroff_confirm_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+poweroff_confirm_label = lv.label(poweroff_confirm_screen)
+poweroff_confirm_label.set_text("Goodbye")
+poweroff_confirm_label.align(lv.ALIGN.CENTER, 0, 0)
+poweroff_confirm_label.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+class PoweroffConfirmScreen(Screen):
+ NAME = "poweroff_comfirm"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = poweroff_confirm_screen
+ self.timer = osTimer()
+ def initialization(self):
+ self.timer.start(2*1000,0,self.power_off)
+
+ def power_off(self,*args):
+ Power.powerDown()
+
+ def done_return(self):
+ pass
+
+ def btn1_release(self):
+ pass
+
+ def btn8_press(self):
+ pass
+
+
+class LanguageScreen(Screen):
+ NAME = "language"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = language_screen
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+
+class DialswitchScreen(Screen):
+ NAME = "dialswitch"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = dialswitch_screen
+ self.read_data = {}
+ self.watchface_style_num = "Watchface1"
+ dialswitch_btn1.add_event_cb(lambda e: self.watchface01(e),
+ lv.EVENT.PRESSED, None)
+
+ dialswitch_btn2.add_event_cb(lambda e: self.watchface02(e),
+ lv.EVENT.PRESSED, None)
+ def initialization(self):
+ self.read_data = EventMesh.publish("get_storage_data")
+ if self.read_data != {}:
+ b = str("watchface") in self.read_data.keys()
+ if b == True:
+ self.watchface_style_num = self.read_data["watchface"]
+ if self.watchface_style_num == "Watchface1":
+ btn1_switch.add_state(lv.STATE.CHECKED)
+ btn2_switch.clear_state(lv.STATE.CHECKED)
+ else:
+ btn1_switch.clear_state(lv.STATE.CHECKED)
+ btn2_switch.add_state(lv.STATE.CHECKED)
+
+
+ def watchface01(self,e):
+ btn1_switch.add_state(lv.STATE.CHECKED)
+ btn2_switch.clear_state(lv.STATE.CHECKED)
+ self.read_data["watchface"] = "Watchface1"
+ EventMesh.publish("set_storage_data", self.read_data)
+ with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_data,fd)
+ EventMesh.publish("set_change_face", "Watchface1")
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def watchface02(self,e):
+ btn1_switch.clear_state(lv.STATE.CHECKED)
+ btn2_switch.add_state(lv.STATE.CHECKED)
+ self.read_data["watchface"] = "Watchface2"
+ EventMesh.publish("set_storage_data", self.read_data)
+ with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_data,fd)
+ EventMesh.publish("set_change_face", "Watchface2")
+ EventMesh.publish("watch_top_show")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+
+class ThemeswitchScreen(Screen):
+ NAME = "themeswitch"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = menustyle_screen
+ menustyle_btn1.add_event_cb(lambda e: self.fun1(e),
+ lv.EVENT.PRESSED, None)
+
+ menustyle_btn2.add_event_cb(lambda e: self.fun2(e),
+ lv.EVENT.PRESSED, None)
+
+ def fun1(self,e):
+ menu_btn1_switch.add_state(lv.STATE.CHECKED)
+ menu_btn2_switch.clear_state(lv.STATE.CHECKED)
+ EventMesh.publish("change_style", "MainMenu1")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def fun2(self,e):
+ menu_btn1_switch.clear_state(lv.STATE.CHECKED)
+ menu_btn2_switch.add_state(lv.STATE.CHECKED)
+ EventMesh.publish("change_style", "MainMenu2")
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+# -------------------------------------------imei screen----------------------------------------------------------
+imei_screen = lv.obj()
+imei_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+bg_color = lv.palette_lighten(lv.PALETTE.LIGHT_BLUE, 5)
+fg_color = lv.palette_darken(lv.PALETTE.BLUE, 4)
+
+imei_qr = lv.qrcode(imei_screen, 150, fg_color, bg_color)
+imei_qr.center()
+# Add a border with bg_color
+imei_qr.set_style_border_color(bg_color, 0)
+imei_qr.set_style_border_width(5, 0)
+
+
+imei_label = lv.label(imei_screen)
+imei_label.set_pos(0, 280)
+imei_label.set_size(240, 20)
+imei_label.set_text(" ")
+imei_label.set_long_mode(lv.label.LONG.WRAP)
+imei_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+imei_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+class ImeiScreen(Screen):
+ NAME = "imei"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = imei_screen
+
+ def initialization(self):
+
+ imei = EventMesh.publish(constants.EVENT.GET_IMEI)
+ imei_qr_data = str(imei)
+ imei_qr.update(imei_qr_data,len(imei_qr_data))
+ imei_label.set_text(imei)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+
+class AppScreen(Screen):
+ NAME = "app"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = app_screen
+ def initialization(self):
+ imei = EventMesh.publish(constants.EVENT.GET_IMEI)
+ app_label.set_text(imei)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+# -------------------------------------------brightness screen----------------------------------------------------------
+brightness_screen = lv.obj()
+brightness_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+brightness_title = lv.label(brightness_screen)
+brightness_title.set_pos(0, 10)
+brightness_title.set_size(240, 40)
+brightness_title.set_text("屏幕调节")
+brightness_title.set_long_mode(lv.label.LONG.WRAP)
+brightness_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+brightness_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+brightness_label1 = lv.label(brightness_screen)
+brightness_label1.set_pos(10, 70)
+brightness_label1.set_size(230, 40)
+brightness_label1.set_text("亮度:")
+brightness_label1.set_long_mode(lv.label.LONG.WRAP)
+brightness_label1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+brightness_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+brightness_bar = lv.bar(brightness_screen)
+brightness_bar.set_pos(20, 120)
+brightness_bar.set_size(200, 15)
+brightness_bar.set_style_anim_time(1000, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+brightness_bar.set_mode(lv.bar.MODE.NORMAL)
+brightness_bar.set_value(50, lv.ANIM.OFF)
+brightness_bar.add_style(style_bar, lv.PART.MAIN | lv.STATE.DEFAULT)
+brightness_bar.add_style(style_bar_indic, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+
+brightness_reduce_imgbtn = lv.img(brightness_screen)
+brightness_reduce_imgbtn.set_pos(5, 150)
+brightness_reduce_imgbtn.set_size(110, 46)
+brightness_reduce_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+brightness_reduce_imgbtn.set_src("E:/static/reduce_btn.png")
+
+brightness_reduce_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+brightness_add_imgbtn = lv.img(brightness_screen)
+brightness_add_imgbtn.set_pos(125, 150)
+brightness_add_imgbtn.set_size(110, 46)
+brightness_add_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+brightness_add_imgbtn.set_src("E:/static/add_btn.png")
+brightness_add_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+class BrightnessScreen(Screen):
+ NAME = "brightness"
+
+ def __init__(self):
+ super().__init__()
+ self.level = 0
+ self.meta = brightness_screen
+ brightness_add_imgbtn.add_event_cb(lambda e: self.add_level(e),
+ lv.EVENT.CLICKED, None)
+ brightness_reduce_imgbtn.add_event_cb(lambda e: self.reduce_level(e),
+ lv.EVENT.CLICKED, None)
+ def initialization(self):
+ self.level = EventMesh.publish("get_brightness_level")
+ self.show_bar()
+ def add_level(self, e):
+ EventMesh.publish("push_add_brightness_level")
+ self.level = EventMesh.publish("get_brightness_level")
+ self.show_bar()
+
+ def reduce_level(self, e):
+ EventMesh.publish("push_reduce_brightness_level")
+ self.level = EventMesh.publish("get_brightness_level")
+ self.show_bar()
+
+ def show_bar(self):
+ if self.level == None:
+ self.level = 6
+ brightness_bar.set_value((100 // 10) * self.level, lv.ANIM.OFF)
+
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+
+class VolumeScreen(Screen):
+ NAME = "volume"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = volume_screen
+ volume_phone_btn.add_event_cb(lambda e: self.load_screen(e, {"screen": "phonering"}), lv.EVENT.CLICKED, None)
+ volume_message_btn.add_event_cb(lambda e: self.load_screen(e, {"screen": "msgvolume"}), lv.EVENT.CLICKED, None)
+ volume_alarm_btn.add_event_cb(lambda e: self.load_screen(e, {"screen": "alarmvolume"}), lv.EVENT.CLICKED, None)
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+
+
+class PhoneringScreen(Screen):
+ NAME = "phonering"
+
+ def __init__(self):
+ super().__init__()
+ self.level = 0
+ self.meta = phonering_screen
+ phonering_add_imgbtn.add_event_cb(lambda e: self.add_level(e),
+ lv.EVENT.CLICKED, None)
+ phonering_reduce_imgbtn.add_event_cb(lambda e: self.reduce_level(e),
+ lv.EVENT.CLICKED, None)
+ phonering_add_imgbtn.set_ext_click_area(20)
+ phonering_reduce_imgbtn.set_ext_click_area(20)
+
+ def add_level(self, e):
+ EventMesh.publish("push_add_phonering_level")
+ self.level = EventMesh.publish("get_phonering_level")
+ self.show_bar()
+
+ def reduce_level(self, e):
+ EventMesh.publish("push_reduce_phonering_level")
+ self.level = EventMesh.publish("get_phonering_level")
+ self.show_bar()
+
+ def show_bar(self):
+ phonering_bar.set_value((100 // 7) * self.level, lv.ANIM.OFF)
+
+ def initialization(self):
+ self.level = EventMesh.publish("get_phonering_level")
+ self.show_bar()
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "volume"})
+
+ def done_left_to_right(self):
+ pass
+
+ def done_right_to_left(self):
+ pass
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "volume"})
+
+
+
+class AlarmvolumeScreen(Screen):
+ NAME = "alarmvolume"
+
+ def __init__(self):
+ super().__init__()
+ self.level = 0
+ self.meta = alarmvolume_screen
+ alarmvolume_add_imgbtn.add_event_cb(lambda e: self.add_level(e),
+ lv.EVENT.CLICKED, None)
+ alarmvolume_reduce_imgbtn.add_event_cb(lambda e: self.reduce_level(e),
+ lv.EVENT.CLICKED, None)
+
+ def add_level(self, e):
+ EventMesh.publish("push_add_alarmvolume_level")
+ self.level = EventMesh.publish("get_alarmvolume_level")
+ self.show_bar()
+
+ def reduce_level(self, e):
+ EventMesh.publish("push_reduce_alarmvolume_level")
+ self.level = EventMesh.publish("get_alarmvolume_level")
+ self.show_bar()
+
+ def show_bar(self):
+ alarmvolume_bar.set_value((100 // 7) * self.level, lv.ANIM.OFF)
+
+ def initialization(self):
+ self.level = EventMesh.publish("get_alarmvolume_level")
+ self.show_bar()
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "volume"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "volume"})
+
+
+
+class MsgvolumeScreen(Screen):
+ NAME = "msgvolume"
+
+ def __init__(self):
+ super().__init__()
+ self.level = 0
+ self.meta = msgvolume_screen
+ msgvolume_add_imgbtn.add_event_cb(lambda e: self.add_level(e),
+ lv.EVENT.CLICKED, None)
+ msgvolume_reduce_imgbtn.add_event_cb(lambda e: self.reduce_level(e),
+ lv.EVENT.CLICKED, None)
+
+ def add_level(self, e):
+ EventMesh.publish("push_add_msgvolume_level")
+ self.level = EventMesh.publish("get_msgvolume_level")
+ self.show_bar()
+
+ def reduce_level(self, e):
+ EventMesh.publish("push_reduce_msgvolume_level")
+ self.level = EventMesh.publish("get_msgvolume_level")
+ self.show_bar()
+
+ def show_bar(self):
+ msgvolume_bar.set_value((100 // 7) * self.level, lv.ANIM.OFF)
+
+ def initialization(self):
+ self.level = EventMesh.publish("get_msgvolume_level")
+ self.show_bar()
+
+ def done_return(self):
+ EventMesh.publish("load_screen", {"screen": "volume"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "volume"})
+
+
+
+#-----------------------------------------Total--volum-------------------------------
+
+volume_adjust_screen = lv.obj()
+volume_adjust_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+totalvolume_title = lv.label(volume_adjust_screen)
+totalvolume_title.set_pos(0, 10)
+totalvolume_title.set_size(240, 40)
+totalvolume_title.set_text("铃声调节")
+totalvolume_title.set_long_mode(lv.label.LONG.WRAP)
+totalvolume_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+totalvolume_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+totalvolume_label1 = lv.label(volume_adjust_screen)
+totalvolume_label1.set_pos(10, 70)
+totalvolume_label1.set_size(230, 40)
+totalvolume_label1.set_text("铃声:")
+totalvolume_label1.set_long_mode(lv.label.LONG.WRAP)
+totalvolume_label1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+totalvolume_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+totalvolume_bar = lv.bar(volume_adjust_screen)
+totalvolume_bar.set_pos(20, 120)
+totalvolume_bar.set_size(200, 15)
+totalvolume_bar.set_style_anim_time(1000, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+totalvolume_bar.set_mode(lv.bar.MODE.NORMAL)
+totalvolume_bar.set_value(50, lv.ANIM.OFF)
+totalvolume_bar.add_style(style_bar, lv.PART.MAIN | lv.STATE.DEFAULT)
+totalvolume_bar.add_style(style_bar_indic, lv.PART.INDICATOR | lv.STATE.DEFAULT)
+
+totalvolume_reduce_imgbtn = lv.img(volume_adjust_screen)
+totalvolume_reduce_imgbtn.set_pos(5, 150)
+totalvolume_reduce_imgbtn.set_size(110, 46)
+totalvolume_reduce_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+totalvolume_reduce_imgbtn.set_src("E:/static/reduce_btn.png")
+totalvolume_reduce_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+totalvolume_add_imgbtn = lv.img(volume_adjust_screen)
+totalvolume_add_imgbtn.set_pos(125, 150)
+totalvolume_add_imgbtn.set_size(110, 46)
+totalvolume_add_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+totalvolume_add_imgbtn.set_src("E:/static/add_btn.png")
+totalvolume_add_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+class totalvolumeScreen(Screen):
+ NAME = "totalvolume"
+
+ def __init__(self):
+ super().__init__()
+ self.meta = volume_adjust_screen
+ totalvolume_add_imgbtn.add_event_cb(lambda e: self.add_volum_size(e),
+ lv.EVENT.CLICKED, None)
+ totalvolume_reduce_imgbtn.add_event_cb(lambda e: self.reduce_volum_size(e),
+ lv.EVENT.CLICKED, None)
+ self.read_data = {}
+ self.volum_size = 8
+ self.aud = audio.Audio(0)
+ self.aud.set_pa(Pin.GPIO29)
+
+ def initialization(self):
+ self.read_data = EventMesh.publish("get_storage_data")
+ # print("self.read_data:{}".format(self.read_data))
+ num = EventMesh.publish("get_volum_size")
+ if num == None:
+ self.volum_size = 8
+ else:
+ self.volum_size = num
+ self.aud.setVolume(self.volum_size)
+ self.show_bar(0)
+
+ def add_volum_size(self, e):
+ self.volum_size+=2
+ if self.volum_size >= 11:
+ self.volum_size = 11
+ self.show_bar(1)
+
+ def reduce_volum_size(self, e):
+ if self.volum_size > 0:
+ self.volum_size -= 2
+ self.show_bar(1)
+
+ def show_bar(self,msg):
+ totalvolume_bar.set_value((100 // 11) * self.volum_size, lv.ANIM.OFF)
+ if msg == 1:
+ self.read_data = EventMesh.publish("get_storage_data")
+ self.read_data["volum"] = self.volum_size
+ self.aud.setVolume(self.volum_size)
+ EventMesh.publish("set_storage_data", self.read_data)
+ EventMesh.publish("set_volum_size",self.volum_size)
+ print("self.read_data:size :{}".format(self.read_data))
+ with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
+ ujson.dump(self.read_data,fd)
+ self.aud.play(1, 1, 'E:/static/audio_audio_haixiu.mp3') #播放声音
+
+ def Close(self):
+ self.aud.stop()
+
+ def done_return(self):
+ self.aud.stop()
+ EventMesh.publish("load_screen", {"screen": "setting"})
+
+ def btn1_release(self):
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+
+ def btn8_press(self):
+ EventMesh.publish("load_screen", {"screen": "setting"})
*/
#define CONFIG_LVGL_SPAN 1
#define CONFIG_LVGL_FS_HELIOS 1
-#define CONFIG_LVGL_GIF_DECODE 1
-#define CONFIG_LVGL_SPINNER 1
#define CONFIG_LCD 1
-#define CONFIG_LVGL_ANIMIMG 1
#define CONFIG_LVGL_KEYBOARD 1
-#define CONFIG_LVGL_CALENDAR 1
-#define CONFIG_LVGL_LED 1
#define CONFIG_VIOCE_CALL 1
#define CONFIG_LVGL_FS_EXTFLASH_HELIOS 1
-#define CONFIG_LVGL_TABVIEW 1
#define CONFIG_LVGL_LINE 1
#define CONFIG_LVGL 1
-#define CONFIG_LVGL_CHART 1
#define CONFIG_LVGL_LIST 1
#define CONFIG_LVGL_MSGBOX 1
-#define CONFIG_LVGL_ARC 1
-#define CONFIG_LVGL_METER 1
#define CONFIG_LVGL_JPG_DECODE 1
#define CONFIG_LVGL_PNG_DECODE 1
#define CONFIG_LVGL_IMGBTN 1
#define CONFIG_GH301x 1
-#define CONFIG_SC7A20 1
#define CONFIG_MBEDTLS 1
+#define CONFIG_SC7A20 1
#define CONFIG_LVGL_WIN 1
-#define CONFIG_LVGL_COLORWHEEL 1
#define CONFIG_LVGL_CANVAS 1
-#define CONFIG_LVGL_SPINBOX 1
#define CONFIG_LVGL_QRCODE 1
#define CONFIG_LVGL_TILEVIEW 1
#define CONFIG_LVGL_HANDLER_TASK_PRIORITY 90
# lvgl option
#
CONFIG_LVGL_PNG_DECODE=y
-CONFIG_LVGL_GIF_DECODE=y
+# CONFIG_LVGL_GIF_DECODE is not set
CONFIG_LVGL_JPG_DECODE=y
CONFIG_LVGL_FS_HELIOS=y
# CONFIG_LVGL_FS_SD_HELIOS is not set
# CONFIG_LVGL_CUSTOMER_FONT_SUPPORT is not set
CONFIG_LVGL_QRCODE=y
# CONFIG_LVGL_FONT is not set
-CONFIG_LVGL_ARC=y
+# CONFIG_LVGL_ARC is not set
CONFIG_LVGL_IMGBTN=y
CONFIG_LVGL_LINE=y
CONFIG_LVGL_LIST=y
-CONFIG_LVGL_CHART=y
-CONFIG_LVGL_LED=y
+# CONFIG_LVGL_CHART is not set
+# CONFIG_LVGL_LED is not set
CONFIG_LVGL_CANVAS=y
CONFIG_LVGL_WIN=y
-CONFIG_LVGL_TABVIEW=y
+# CONFIG_LVGL_TABVIEW is not set
CONFIG_LVGL_TILEVIEW=y
CONFIG_LVGL_MSGBOX=y
-CONFIG_LVGL_METER=y
-CONFIG_LVGL_CALENDAR=y
-CONFIG_LVGL_SPINNER=y
-CONFIG_LVGL_SPINBOX=y
-CONFIG_LVGL_ANIMIMG=y
-CONFIG_LVGL_COLORWHEEL=y
+# CONFIG_LVGL_METER is not set
+# CONFIG_LVGL_CALENDAR is not set
+# CONFIG_LVGL_SPINNER is not set
+# CONFIG_LVGL_SPINBOX is not set
+# CONFIG_LVGL_ANIMIMG is not set
+# CONFIG_LVGL_COLORWHEEL is not set
CONFIG_LVGL_KEYBOARD=y
CONFIG_LVGL_SPAN=y
CONFIG_LVGL_HANDLER_TASK_PRIORITY=90
#define MICROPY_QPY_DEVICE_REPORT (1)
/***********************micropython opts*******************************/
-#define MICROPY_QPY_DEBUG_PRINTERS (1) //flash 4160 Byte
+#define MICROPY_QPY_DEBUG_PRINTERS (0) //flash 4160 Byte
#define MICROPY_QPY_PY_MATH (1) //flash 14880 Byte
-#define MICROPY_QPY_PY_CMATH (1) //flash 3136 Byte
-#define MICROPY_QPY_PY_USELECT (1) //flash 1792 Byte
-#define MICROPY_QPY_PY_UCTYPES (1) //flash 2816 Byte
-#define MICROPY_QPY_PY_UZLIB (1) //flash 3072 Byte
-#define MICROPY_QPY_PY_UASYNCIO (1) //flash 2048 Byte
-#define MICROPY_QPY_PY_ENABLE_WEBSERVER (1) //flash 3424 Byte
+#define MICROPY_QPY_PY_CMATH (0) //flash 3136 Byte
+#define MICROPY_QPY_PY_USELECT (0) //flash 1792 Byte
+#define MICROPY_QPY_PY_UCTYPES (0) //flash 2816 Byte
+#define MICROPY_QPY_PY_UZLIB (0) //flash 3072 Byte
+#define MICROPY_QPY_PY_UASYNCIO (0) //flash 2048 Byte
+#define MICROPY_QPY_PY_ENABLE_WEBSERVER (0) //flash 3424 Byte
#define MICROPY_QPY_PERSISTENT_CODE_LOAD (1) //flash 2048 Byte
-#define MICROPY_QPY_EMIT_XTENSAWIN (1) //flash 19776 Byte
-
+#define MICROPY_QPY_EMIT_XTENSAWIN (0) //flash 19776 Byte
+#define MICROPY_QPY_MODULE_VFS_THREADSAFE (1)
#define MICROPY_QPY_GC_HEAP_SIZE (1000 * 1024)
#endif
\ No newline at end of file
import lvgl as lv
from ext import EventMesh
from machine import Timer
-from ext.ui import Screen
+from ui import Screen
from ext.common import Abstract, LogAdapter
from machine import RTC
import ujson
import ql_fs
import audio
-from ext.ui import style_img,style_screen,style_font_youyuan_20
+from ui import style_img,style_screen,style_font_youyuan_20
import ntptime
ntptime.settime(timezone=8)
"""
from ext import constants
from misc import Power
import pm
-from ext.ui import Screen
+from ui import Screen
style_font_youyuan_20 = lv.style_t()
style_font_youyuan_20.init()
import ql_fs
import audio
from machine import Pin
-from ext.ui import style_screen,style_font_youyuan_20,ContStyle,style_btn,style_img,Screen,style_contact_btn
+from ui import style_screen,style_font_youyuan_20,ContStyle,style_btn,style_img,Screen,style_contact_btn
import audio
factorymode_cont_y = 0
factorymode_screen = lv.obj()
import ql_fs
import audio
from machine import Pin
-from ext.ui import style_font_youyuan_20,style_screen,Screen,style_font_youyuan_20_black,style_img
+from ui import style_font_youyuan_20,style_screen,Screen,style_font_youyuan_20_black,style_img
import audio
from machine import Pin
from ext.protocol import ProtoCol,UnicodeHexStr_To_Utf8Str
from ext.lcd import tp_cst816
print("init3:{}".format(utime.localtime()))
from ext.btn_device_ec800m import BtnDevice
- from ext.protocol import LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,ProtoColResolver,PHL_ProtoCol
- print("init4:{}".format(utime.localtime()))
- import ext.mgr as mgr
- print("init5:{}".format(utime.localtime()))
- import ext.ui as _ui
- print("init6:{}".format(utime.localtime()))
- from ext.mgr import ConfigStoreManager, LocationManager, SockManager, \
- NetManager,AddrBookManager,MsgdetailManager,PhoneCallingManager,getOldHrDataManager,getStorageDataManager,getBrightnessManager,getHrTimeManager
- from ext.appAlipay import Alipay ,AlipayOpenScreen,Alipay_1_1,Alipay_invite,Alipay_inviting,\
- Alipay_success,Alipay_paycode,Alipay_pay_success,Alipay_collect,Alipay_parent
- # from ext.ui_WatchFaceScreen import WatchFaceScreen
- from ext.alarm import ClkListScreen,ClockManager,NewEditClk,CLKTimeScreen,ClkPeriod,PopupAlarmScreen
- from ext.ui_main_menu import MainMenuScreen
- #from ext.ui_WatchFaceScreen import WatchFaceScreen
- from ext.appWechat import WechatScreen,TK_ProtoCol,MESSAGE_ProtoCol
- import ext.ui_setting as _ui_setting
+ from ui_main_menu import MainMenuScreen
+
+
+
+ # from ui_WatchFaceScreen import WatchFaceScreen
+
from ext.appFactoryMode import FactoryModeLocationScreen,FactoryModeScreen
- # from usr.test_sms import HRSTART_ProtoCol,getHrTimeManager,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,getBrightnessManager,\
- # getStorageDataManager
- print("init7:{}".format(utime.localtime()))
- #from usr.ui_wechat import WechatScreen,TK_ProtoCol
- btn_device = BtnDevice(tp_cst816)
- btn_device.start()
- print("init8:{}".format(utime.localtime()))
+ import ui as _ui
+ print("init4:{}".format(utime.localtime()))
ui = _ui.UI()
- # ui.add_screen(WatchFaceScreen())
+ ui.post_processor_after_instantiation()
+ ui.add_screen(MainMenuScreen())
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ print("init5:{}".format(utime.localtime()))
+
ui.add_screen(_ui.PopupScreen())
ui.add_screen(_ui.PhoneScreen())
- #ui.add_screen(WatchFaceScreen())
- # ui.add_screen(WatchFace1Screen())
- # ui.add_screen(WatchFace2Screen())
- ui.add_screen(MainMenuScreen())
- #ui.add_screen(MainMenu2Screen())
ui.add_screen(_ui.HeartrateScreen())
+ import ui_setting as _ui_setting
ui.add_screen(_ui_setting.SettingScreen())
ui.add_screen(_ui.ToolboxScreen())
ui.add_screen(_ui.StepScreen())
- ui.add_screen(_ui.AlarmScreen())
ui.add_screen(_ui.CountdownScreen())
ui.add_screen(_ui.StopwatchScreen())
ui.add_screen(_ui.WeatherScreen())
ui.add_screen(_ui.Spo2Screen())
ui.add_screen(_ui.TemperatureScreen())
ui.add_screen(_ui.ContactsScreen())
+ from appWechat import WechatScreen,TK_ProtoCol,MESSAGE_ProtoCol,NewWechatPopupScreen
ui.add_screen(WechatScreen())
+ from alarm import ClkListScreen,ClockManager,NewEditClk,CLKTimeScreen,ClkPeriod,PopupAlarmScreen
ui.add_screen(ClkListScreen())
ui.add_screen(_ui.CountdownEndScreen())
ui.add_screen(NewEditClk())
ui.add_screen(_ui_setting.MsgvolumeScreen())
ui.add_screen(_ui_setting.PhoneringScreen())
ui.add_screen(_ui_setting.totalvolumeScreen())
+ ui.add_screen(_ui_setting.PoweroffConfirmScreen())
ui.add_screen(_ui.DialingScreen())
ui.add_screen(_ui.CallLogScreen())
+ from appAlipay import Alipay ,AlipayOpenScreen,Alipay_1_1,Alipay_invite,Alipay_inviting,\
+ Alipay_success,Alipay_paycode,Alipay_pay_success,Alipay_collect,Alipay_parent
ui.add_screen(AlipayOpenScreen())
ui.add_screen(Alipay_1_1())
ui.add_screen(Alipay_invite())
ui.add_screen(_ui.MsgDetailScreen())
ui.add_screen(_ui.IncomingCallScreen())
ui.add_screen(_ui.OnCallScreen())
+ ui.add_screen(_ui.MessageFullScreen())
# ui.add_screen(_ui.PowerOnScreen())
ui.add_screen(FactoryModeLocationScreen())
ui.add_screen(FactoryModeScreen())
ui.add_screen(PopupAlarmScreen())
+ ui.add_screen(_ui.LowPowerScreen())
+ ui.add_screen(_ui.NewMessageScreen())
+ ui.add_screen(NewWechatPopupScreen())
# ui.add_screen(_ui.Setting3Screen())
+ print("init6:{}".format(utime.localtime()))
+
+
+ from ext.protocol import LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,UPLOAD_ProtoCol,TEMP_ProtoCol,DLT_ProtoCol,\
+ WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,ProtoColResolver,PHL_ProtoCol,MONITOR_ProtoCol
+ import mgr as mgr
+ print("init7:{}".format(utime.localtime()))
+
+ from mgr import ConfigStoreManager, LocationManager, SockManager,getVolumSizeManager, \
+ NetManager,AddrBookManager,MsgdetailManager,PhoneCallingManager,getOldHrDataManager,getStorageDataManager,getBrightnessManager,getHrTimeManager
+ print("init8:{}".format(utime.localtime()))
+
+
+ #from ui_WatchFaceScreen import WatchFaceScreen
+
+
+ # from usr.test_sms import HRSTART_ProtoCol,getHrTimeManager,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,getBrightnessManager,\
+ # getStorageDataManager
print("init9:{}".format(utime.localtime()))
+ #from usr.ui_wechat import WechatScreen,TK_ProtoCol
+ btn_device = BtnDevice(tp_cst816)
+ btn_device.start()
+ print("init10:{}".format(utime.localtime()))
+
app = watchApp()
app.set_ui(ui)
app.append_manager(getHrTimeManager())
app.append_manager(getBrightnessManager())
app.append_manager(getStorageDataManager())
- print("init10:{}".format(utime.localtime()))
+
+ print("init11:{}".format(utime.localtime()))
pcr = ProtoColResolver()
pcr.add_support(LK_ProtoCol())
pcr.add_support(PING_ProtoCol())
pcr.add_support(HEART_ProtoCol())
pcr.add_support(OXYGEN_ProtoCol())
pcr.add_support(OXYGEN_One_ProtoCol())
+ pcr.add_support(TEMP_ProtoCol())
+ pcr.add_support(DLT_ProtoCol())
+ pcr.add_support(UPLOAD_ProtoCol())
+ pcr.add_support(MONITOR_ProtoCol())
sm = SockManager()
sm.add_support_resolver(pcr)
app.append_manager(sm)
app.start()
- print("init11:{}".format(utime.localtime()))
- EventMesh.publish("load_screen", {"screen": "main_menu"})
+ print("init12:{}".format(utime.localtime()))
+
from ext.lcd import tp_cst816
print("init3:{}".format(utime.localtime()))
from ext.btn_device_ec800m import BtnDevice
- from ext.protocol import LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,UPLOAD_ProtoCol,TEMP_ProtoCol,DLT_ProtoCol,\
- WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,ProtoColResolver,PHL_ProtoCol,MONITOR_ProtoCol
- import ext.mgr as mgr
- print("init1:{}".format(utime.localtime()))
- import ext.ui as _ui
- print("init2:{}".format(utime.localtime()))
- from ext.mgr import ConfigStoreManager, LocationManager, SockManager,getVolumSizeManager, \
- NetManager,AddrBookManager,MsgdetailManager,PhoneCallingManager,getOldHrDataManager,getStorageDataManager,getBrightnessManager,getHrTimeManager
- print("init3:{}".format(utime.localtime()))
- from ext.appAlipay import Alipay ,AlipayOpenScreen,Alipay_1_1,Alipay_invite,Alipay_inviting,\
- Alipay_success,Alipay_paycode,Alipay_pay_success,Alipay_collect,Alipay_parent
- # from ext.ui_WatchFaceScreen import WatchFaceScreen
- from ext.alarm import ClkListScreen,ClockManager,NewEditClk,CLKTimeScreen,ClkPeriod,PopupAlarmScreen
- from ext.ui_main_menu import MainMenuScreen
- #from ext.ui_WatchFaceScreen import WatchFaceScreen
- from ext.appWechat import WechatScreen,TK_ProtoCol,MESSAGE_ProtoCol,NewWechatPopupScreen
- import ext.ui_setting as _ui_setting
+ from ui_main_menu import MainMenuScreen
+ # from ui_WatchFaceScreen import WatchFaceScreen
+
from ext.appFactoryMode import FactoryModeLocationScreen,FactoryModeScreen
- # from usr.test_sms import HRSTART_ProtoCol,getHrTimeManager,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,getBrightnessManager,\
- # getStorageDataManager
- print("init7:{}".format(utime.localtime()))
- #from usr.ui_wechat import WechatScreen,TK_ProtoCol
- btn_device = BtnDevice(tp_cst816)
- btn_device.start()
- print("init8:{}".format(utime.localtime()))
+ import ui as _ui
+ print("init4:{}".format(utime.localtime()))
ui = _ui.UI()
- # ui.add_screen(WatchFaceScreen())
+ ui.post_processor_after_instantiation()
+ ui.add_screen(MainMenuScreen())
+ EventMesh.publish("load_screen", {"screen": "main_menu"})
+ print("init5:{}".format(utime.localtime()))
+
ui.add_screen(_ui.PopupScreen())
ui.add_screen(_ui.PhoneScreen())
- #ui.add_screen(WatchFaceScreen())
- # ui.add_screen(WatchFace1Screen())
- # ui.add_screen(WatchFace2Screen())
- ui.add_screen(MainMenuScreen())
- #ui.add_screen(MainMenu2Screen())
ui.add_screen(_ui.HeartrateScreen())
+ import ui_setting as _ui_setting
ui.add_screen(_ui_setting.SettingScreen())
ui.add_screen(_ui.ToolboxScreen())
ui.add_screen(_ui.StepScreen())
- ui.add_screen(_ui.AlarmScreen())
ui.add_screen(_ui.CountdownScreen())
ui.add_screen(_ui.StopwatchScreen())
ui.add_screen(_ui.WeatherScreen())
ui.add_screen(_ui.Spo2Screen())
ui.add_screen(_ui.TemperatureScreen())
ui.add_screen(_ui.ContactsScreen())
+ from appWechat import WechatScreen,TK_ProtoCol,MESSAGE_ProtoCol,NewWechatPopupScreen
ui.add_screen(WechatScreen())
+ from alarm import ClkListScreen,ClockManager,NewEditClk,CLKTimeScreen,ClkPeriod,PopupAlarmScreen
ui.add_screen(ClkListScreen())
ui.add_screen(_ui.CountdownEndScreen())
ui.add_screen(NewEditClk())
ui.add_screen(_ui_setting.PoweroffConfirmScreen())
ui.add_screen(_ui.DialingScreen())
ui.add_screen(_ui.CallLogScreen())
+ from appAlipay import Alipay ,AlipayOpenScreen,Alipay_1_1,Alipay_invite,Alipay_inviting,\
+ Alipay_success,Alipay_paycode,Alipay_pay_success,Alipay_collect,Alipay_parent
ui.add_screen(AlipayOpenScreen())
ui.add_screen(Alipay_1_1())
ui.add_screen(Alipay_invite())
ui.add_screen(_ui.NewMessageScreen())
ui.add_screen(NewWechatPopupScreen())
# ui.add_screen(_ui.Setting3Screen())
+ print("init6:{}".format(utime.localtime()))
+
+
+ from ext.protocol import LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,UPLOAD_ProtoCol,TEMP_ProtoCol,DLT_ProtoCol,\
+ WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,ProtoColResolver,PHL_ProtoCol,MONITOR_ProtoCol
+ import mgr as mgr
+ print("init7:{}".format(utime.localtime()))
+
+ from mgr import ConfigStoreManager, LocationManager, SockManager,getVolumSizeManager, \
+ NetManager,AddrBookManager,MsgdetailManager,PhoneCallingManager,getOldHrDataManager,getStorageDataManager,getBrightnessManager,getHrTimeManager
+ print("init8:{}".format(utime.localtime()))
+
+
+ #from ui_WatchFaceScreen import WatchFaceScreen
+
+
+ # from usr.test_sms import HRSTART_ProtoCol,getHrTimeManager,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,getBrightnessManager,\
+ # getStorageDataManager
print("init9:{}".format(utime.localtime()))
+ #from usr.ui_wechat import WechatScreen,TK_ProtoCol
+ btn_device = BtnDevice(tp_cst816)
+ btn_device.start()
+ print("init10:{}".format(utime.localtime()))
+
app = watchApp()
app.set_ui(ui)
app.append_manager(getBrightnessManager())
app.append_manager(getStorageDataManager())
- print("init10:{}".format(utime.localtime()))
+ print("init11:{}".format(utime.localtime()))
pcr = ProtoColResolver()
pcr.add_support(LK_ProtoCol())
pcr.add_support(PING_ProtoCol())
sm.add_support_resolver(pcr)
app.append_manager(sm)
app.start()
- print("init11:{}".format(utime.localtime()))
- EventMesh.publish("load_screen", {"screen": "main_menu"})
+ print("init12:{}".format(utime.localtime()))
+
# ldev = uos.VfsLfs1(32, 32, 32, "ext_fs",0,3)
# uos.mount(ldev,'/ext')
- #import ext.ui as _ui
+ #import ui as _ui
from ext.protocol import LK_ProtoCol,PING_ProtoCol, CR_ProtoCol,UD_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,ProtoColResolver
- import ext.mgr as mgr
- import ext.ui as _ui
- from ext.mgr import ConfigStoreManager, DeviceInfoManager, LocationManager, SockManager, \
+ import mgr as mgr
+ import ui as _ui
+ from mgr import ConfigStoreManager, DeviceInfoManager, LocationManager, SockManager, \
NetManager, BatteryManager
from ext.Alipay import Alipay
- from ext.ui_WatchFaceScreen import WatchFaceScreen
+ from ui_WatchFaceScreen import WatchFaceScreen
btn_device = BtnDevice(tp_cst816)
btn_device.start()
import lvgl as lv
from ext import EventMesh
import sms
-from ext.ui import style_screen,style_font_youyuan_20_black,style_font_youyuan_20,Screen,style_contact_btn,style_img,style_line
+from ui import style_screen,style_font_youyuan_20_black,style_font_youyuan_20,Screen,style_contact_btn,style_img,style_line
from ext.common import Abstract
import voiceCall
import ql_fs
style_contact_btn_pressed.set_border_opa(255)
style_contact_btn_pressed.set_text_color(lv.color_make(0x00,0x00,0x00))
-# style_contact_btn_pressed = lv.style_t()
-# style_contact_btn_pressed.init()
-# style_contact_btn_pressed.set_bg_color(lv.color_make(0xff, 0xff, 0xff))
-# style_contact_btn_pressed.set_bg_opa(100)
-# style_contact_btn_pressed.set_border_width(0)
-# style_contact_btn_pressed.set_shadow_opa(0)
-
-# style_contact_btn_pressed = lv.style_t()
-# style_contact_btn_pressed.init()
-# style_contact_btn_pressed.set_bg_color(lv.color_make(0xff, 0xff, 0xff))
-# style_contact_btn_pressed.set_bg_opa(100)
-# style_contact_btn_pressed.set_border_width(0)
-# style_contact_btn_pressed.set_shadow_opa(0)
-
style_alipay_btn = lv.style_t()
style_alipay_btn.init()
-
-
-
-
-
-# -------------------------------------------toolbox screen----------------------------------------------------------
-toolbox_screen = lv.obj()
-toolbox_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-toolbox_screen.set_scrollbar_mode(0)
-
-toolbox_step_img = lv.img(toolbox_screen)
-toolbox_step_img.set_pos(75, 10)
-toolbox_step_img.set_size(90, 30)
-toolbox_step_img.set_src("E:/static/tool/tool_text.png")
-toolbox_step_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-# toolbox_title = lv.label(toolbox_screen)
-# toolbox_title.set_pos(0, 10)
-# toolbox_title.set_size(240, 40)
-# toolbox_title.set_text("工具箱")
-# toolbox_title.set_long_mode(lv.label.LONG.WRAP)
-# toolbox_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# toolbox_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-toolbox_cont = lv.obj(toolbox_screen)
-toolbox_cont.set_pos(0, 50)
-toolbox_cont.set_size(240, 270)
-toolbox_cont_style = ContStyle()
-toolbox_cont.add_style(
- toolbox_cont_style.style_cont(0, lv.color_make(0x00, 0x00, 0x00), lv.color_make(0x00, 0x00, 0x00), 255),
- lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-toolbox_step_img = lv.img(toolbox_cont)
-toolbox_step_img.set_pos(4, 0)
-toolbox_step_img.set_size(232, 80)
-toolbox_step_img.add_flag(lv.obj.FLAG.CLICKABLE)
-toolbox_step_img.set_src("E:/static/tool/IMAGE_SECMENU_STEP.png")
-toolbox_step_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-toolbox_weather_img = lv.img(toolbox_cont)
-toolbox_weather_img.set_pos(4, 90)
-toolbox_weather_img.set_size(232, 80)
-toolbox_weather_img.add_flag(lv.obj.FLAG.CLICKABLE)
-toolbox_weather_img.set_src("E:/static/tool/IMAGE_SECMENU_WEATHER.png")
-toolbox_weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-toolbox_alarm_img = lv.img(toolbox_cont)
-toolbox_alarm_img.set_pos(4, 180)
-toolbox_alarm_img.set_size(232, 80)
-toolbox_alarm_img.add_flag(lv.obj.FLAG.CLICKABLE)
-toolbox_alarm_img.set_src("E:/static/tool/IMAGE_SECMENU_ALARM.png")
-toolbox_alarm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-
-toolbox_sms_img = lv.img(toolbox_cont)
-toolbox_sms_img.set_pos(4, 270)
-toolbox_sms_img.set_size(232, 80)
-toolbox_sms_img.add_flag(lv.obj.FLAG.CLICKABLE)
-toolbox_sms_img.set_src("E:/static/tool/sms_setting.png")
-toolbox_sms_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-toolbox_countdown_img = lv.img(toolbox_cont)
-toolbox_countdown_img.set_pos(4, 360)
-toolbox_countdown_img.set_size(232, 80)
-toolbox_countdown_img.add_flag(lv.obj.FLAG.CLICKABLE)
-toolbox_countdown_img.set_src("E:/static/tool/IMAGE_SECMENU_COUNTDOWN.png")
-toolbox_countdown_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-toolbox_stopwatch_img = lv.img(toolbox_cont)
-toolbox_stopwatch_img.set_pos(4, 450)
-toolbox_stopwatch_img.set_size(232, 80)
-toolbox_stopwatch_img.add_flag(lv.obj.FLAG.CLICKABLE)
-toolbox_stopwatch_img.set_src("E:/static/tool/IMAGE_SECMENU_STOPWATCH.png")
-toolbox_stopwatch_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-
-
-
-
-
-# -------------------------------------------alarm screen----------------------------------------------------------
-alarm_screen = lv.obj()
-alarm_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-# alarm_nodata_img = lv.img(alarm_screen)
-# alarm_nodata_img.center()
-# alarm_nodata_img.set_size(113, 152)
-# alarm_nodata_img.set_src("E:/static/IMAGE_IDLE_SCREEN_ALARM_ICON_NEW.png")
-# alarm_nodata_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-alarm_title = lv.label(alarm_screen)
-alarm_title.set_pos(0, 20)
-alarm_title.set_size(240, 20)
-alarm_title.set_text("闹钟")
-alarm_title.set_long_mode(lv.label.LONG.WRAP)
-alarm_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-alarm_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-# alarm_list = lv.list(alarm_screen)
-# alarm_list.set_pos(0, 50)
-# alarm_list.set_size(240, 250)
-# alarm_list.add_style(style_list, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-
-
-
-
-
-# -------------------------------------------temperature screen----------------------------------------------------------
-temperature_screen = lv.obj()
-temperature_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-temperature_bg_img = lv.img(temperature_screen)
-temperature_bg_img.set_pos(0, 0)
-temperature_bg_img.set_size(71, 170)
-temperature_bg_img.set_src("E:/static/temp_bg.png")
-temperature_bg_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-temperature_body_label = lv.label(temperature_screen)
-temperature_body_label.set_pos(80, 40)
-temperature_body_label.set_size(100, 20)
-temperature_body_label.set_text("当前体温")
-temperature_body_label.set_long_mode(lv.label.LONG.WRAP)
-temperature_body_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-temperature_body_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-temperature_degree_img = lv.img(temperature_screen)
-temperature_degree_img.set_pos(150, 70)
-temperature_degree_img.set_size(22, 22)
-temperature_degree_img.set_src("E:/static/degree.png")
-temperature_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-temperature_value_label = lv.label(temperature_screen)
-temperature_value_label.set_pos(100,70)
-temperature_value_label.set_size(50, 20)
-temperature_value_label.set_text("36.1")
-temperature_value_label.set_long_mode(lv.label.LONG.WRAP)
-temperature_value_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-temperature_value_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-temperature_wrist_label = lv.label(temperature_screen)
-temperature_wrist_label.set_pos(80,120)
-temperature_wrist_label.set_size(100, 20)
-temperature_wrist_label.set_text("当前腕温")
-temperature_wrist_label.set_long_mode(lv.label.LONG.WRAP)
-temperature_wrist_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-temperature_wrist_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-temperature_wrist_degree_img = lv.img(temperature_screen)
-temperature_wrist_degree_img.set_pos(150, 150)
-temperature_wrist_degree_img.set_size(22, 22)
-temperature_wrist_degree_img.set_src("E:/static/degree.png")
-temperature_wrist_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-temperature_wrist_value_label = lv.label(temperature_screen)
-temperature_wrist_value_label.set_pos(100,150)
-temperature_wrist_value_label.set_size(50, 20)
-temperature_wrist_value_label.set_text("24.9")
-temperature_wrist_value_label.set_long_mode(lv.label.LONG.WRAP)
-temperature_wrist_value_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-temperature_wrist_value_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-
-# temperature_status_label = lv.label(temperature_screen)
-# temperature_status_label.set_pos(80,160)
-# temperature_status_label.set_size(100, 20)
-# temperature_status_label.set_text("对对对对")
-# temperature_status_label.set_long_mode(lv.label.LONG.WRAP)
-# temperature_status_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# temperature_status_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-# temperature_notice_label = lv.label(temperature_screen)
-# temperature_notice_label.set_pos(50,200)
-# temperature_notice_label.set_size(100, 20)
-# temperature_notice_label.set_text("对对对对对对")
-# temperature_notice_label.set_long_mode(lv.label.LONG.WRAP)
-# temperature_notice_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# temperature_notice_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-
-
-
-# -------------------------------------------wechat screen----------------------------------------------------------
-wechat_screen = lv.obj()
-wechat_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-wechat_press_btn = lv.btn(wechat_screen)
-wechat_press_btn.set_pos(0, 260)
-wechat_press_btn.set_size(220, 56)
-wechat_press_btn.add_style(style_wechat_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
-wechat_press_btn.add_style(style_common_bg_rect_btn_pressed, lv.PART.MAIN | lv.STATE.PRESSED)
-wechat_press_btn.set_style_radius(30,0)
-
-wechat_press_label = lv.label(wechat_press_btn)
-wechat_press_label.set_text("请按住说话")
-wechat_press_label.align(lv.ALIGN.CENTER, 10, 0)
-wechat_press_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-wechat_label = lv.label(wechat_screen)
-wechat_label.center()
-wechat_label.set_size(240, 40)
-wechat_label.set_long_mode(lv.label.LONG.WRAP)
-wechat_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-wechat_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-wechat_press_play_btn = lv.btn(wechat_screen)
-wechat_press_play_btn.set_pos(0, 120)
-wechat_press_play_btn.set_size(60, 40)
-wechat_press_play_btn.add_style(style_wechat_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
-wechat_press_play_btn.add_style(style_common_bg_rect_btn_pressed, lv.PART.MAIN | lv.STATE.PRESSED)
-wechat_press_play_btn.set_style_radius(30,0)
-
-wechat_press_label_play = lv.label(wechat_press_play_btn)
-wechat_press_label_play.set_text("请点击播放")
-wechat_press_label_play.align(lv.ALIGN.CENTER, 40, 20)
-wechat_press_label_play.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-
-
-
-
-
-
-
-# -------------------------------------------incoming_call screen----------------------------------------------------------
-incoming_call_screen = lv.obj()
-incoming_call_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-incoming_call_img = lv.img(incoming_call_screen)
-incoming_call_img.set_pos(80, 20)
-incoming_call_img.set_size(64, 64)
-incoming_call_img.set_src("E:/static/IMAGE_NOTICE_CALL.png")
-incoming_call_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-incoming_call_name_label = lv.label(incoming_call_screen)
-incoming_call_name_label.set_pos(0, 140)
-incoming_call_name_label.set_size(240, 50)
-incoming_call_name_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-incoming_call_name_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-# incoming_call_label = lv.label(incoming_call_screen)
-# incoming_call_label.set_pos(0, 160)
-# incoming_call_label.set_size(240, 50)
-# incoming_call_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# incoming_call_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-incoming_call_answer = lv.img(incoming_call_screen)
-incoming_call_answer.set_size(64, 64)
-incoming_call_answer.add_flag(lv.obj.FLAG.CLICKABLE)
-incoming_call_answer.set_pos(30, 220)
-incoming_call_answer.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-incoming_call_answer.set_src("E:/static/answer.png")
-
-incoming_call_hangup = lv.img(incoming_call_screen)
-incoming_call_hangup.set_size(64, 64)
-incoming_call_hangup.add_flag(lv.obj.FLAG.CLICKABLE)
-incoming_call_hangup.set_pos(150, 220)
-incoming_call_hangup.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-incoming_call_hangup.set_src("E:/static/hang_up.png")
-
-# -------------------------------------------on_call screen----------------------------------------------------------
-on_call_screen = lv.obj()
-on_call_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-on_call_label_name = lv.label(on_call_screen)
-on_call_label_name.set_pos(0, 100)
-on_call_label_name.set_size(240, 50)
-on_call_label_name.set_text(" ")
-on_call_label_name.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-on_call_label_name.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-# on_call_label = lv.label(on_call_screen)
-# on_call_label.set_pos(0, 100)
-# on_call_label.set_size(240, 50)
-# on_call_label.set_text(" ")
-# on_call_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# on_call_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-on_call_second_label = lv.label(on_call_screen)
-on_call_second_label.set_pos(0, 160)
-on_call_second_label.set_size(240, 50)
-on_call_second_label.set_text("00:00")
-on_call_second_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-on_call_second_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-on_call_hangup = lv.img(on_call_screen)
-on_call_hangup.set_size(64, 64)
-on_call_hangup.add_flag(lv.obj.FLAG.CLICKABLE)
-on_call_hangup.set_pos(85, 220)
-on_call_hangup.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-on_call_hangup.set_src("E:/static/hang_up.png")
-
-
-# -------------------------------------------sms_detail screen----------------------------------------------------------
-msg_detail_screen = lv.obj()
-msg_detail_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-msg_detail_title = lv.label(msg_detail_screen)
-msg_detail_title.set_pos(0, 10)
-msg_detail_title.set_size(240, 40)
-msg_detail_title.set_long_mode(lv.label.LONG.WRAP)
-msg_detail_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-msg_detail_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-msg_detail_cont = lv.label(msg_detail_screen)
-msg_detail_cont.set_pos(0, 50)
-msg_detail_cont.set_size(240, 200)
-msg_detail_cont.set_long_mode(lv.label.LONG.WRAP)
-msg_detail_cont.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-msg_detail_cont.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-
-
-
from ext.common import Abstract
class Screen(Abstract):
def done_error(self):
pass
-#..............................phone................................................#
-phone_screen = lv.obj()
-phone_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-line_points = [{"x":0,"y":0},{"x":0,"y":35}]
-phone_line = lv.line(phone_screen)
-phone_line.set_points(line_points,2)
-phone_line.set_pos(235,58)
-phone_line.set_size(2,35)
-phone_line.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
-phone_line.add_style(style_line,0)
-
-phone_label = lv.label(phone_screen)
-phone_label.set_pos(0, 45)
-phone_label.set_size(0, 55)
-phone_label.set_text(" ")
-phone_label.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_label.set_long_mode(lv.label.LONG.CLIP)
-phone_label.set_style_text_align(lv.TEXT_ALIGN.RIGHT, 0)
-
-phone_one = lv.img(phone_screen)
-phone_one.set_src("E:/static/IMAGE_NUMBER_KEY1_ICON.png")
-phone_one.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_one.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_one.set_pos(3, 100)
-
-phone_two = lv.img(phone_screen)
-phone_two.set_size(76, 40)
-phone_two.set_src("E:/static/IMAGE_NUMBER_KEY2_ICON.png")
-phone_two.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_two.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_two.set_pos(82, 100)
-
-phone_three = lv.img(phone_screen)
-phone_three.set_size(76, 40)
-phone_three.set_src("E:/static/IMAGE_NUMBER_KEY3_ICON.png")
-phone_three.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_three.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_three.set_pos(161, 100)
-
-phone_four = lv.img(phone_screen)
-phone_four.set_size(76, 40)
-phone_four.set_src("E:/static/IMAGE_NUMBER_KEY4_ICON.png")
-phone_four.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_four.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_four.set_pos(3, 142)
-
-phone_five = lv.img(phone_screen)
-phone_five.set_size(76, 40)
-phone_five.set_src("E:/static/IMAGE_NUMBER_KEY5_ICON.png")
-phone_five.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_five.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_five.set_pos(82, 142)
-
-phone_six = lv.img(phone_screen)
-phone_six.set_size(76, 40)
-phone_six.set_src("E:/static/IMAGE_NUMBER_KEY6_ICON.png")
-phone_six.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_six.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_six.set_pos(161, 142)
-
-phone_seven = lv.img(phone_screen)
-phone_seven.set_size(76, 40)
-phone_seven.set_src("E:/static/IMAGE_NUMBER_KEY7_ICON.png")
-phone_seven.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_seven.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_seven.set_pos(3, 184)
-
-phone_eight = lv.img(phone_screen)
-phone_eight.set_size(76, 40)
-phone_eight.set_src("E:/static/IMAGE_NUMBER_KEY8_ICON.png")
-phone_eight.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_eight.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_eight.set_pos(82, 184)
-
-phone_nine = lv.img(phone_screen)
-phone_nine.set_size(76, 40)
-phone_nine.set_src("E:/static/IMAGE_NUMBER_KEY9_ICON.png")
-phone_nine.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_nine.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_nine.set_pos(161, 184)
-
-phone_start = lv.img(phone_screen)
-phone_start.set_size(76, 40)
-phone_start.set_src("E:/static/IMAGE_NUMBER_KEYSTAR_ICON.png")
-phone_start.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_start.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_start.set_pos(3, 226)
-
-phone_zero = lv.img(phone_screen)
-phone_zero.set_size(76, 40)
-phone_zero.set_src("E:/static/IMAGE_NUMBER_KEY0_ICON.png")
-phone_zero.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_zero.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_zero.set_pos(82, 226)
-
-phone_hash = lv.img(phone_screen)
-phone_hash.set_size(76, 40)
-phone_hash.set_src("E:/static/IMAGE_NUMBER_KEYHASH_ICON.png")
-phone_hash.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_hash.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_hash.set_pos(161, 226)
-
-phone_call = lv.img(phone_screen)
-phone_call.set_size(76, 40)
-phone_call.set_src("E:/static/IMAGE_BUTTON_DIAL.png")
-phone_call.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_call.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_call.set_pos(3, 268)
-
-phone_call_btn = lv.img(phone_screen)
-phone_call_btn.set_size(76, 52)
-phone_call_btn.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_call_btn.set_pos(3, 268)
-
-phone_contact = lv.img(phone_screen)
-phone_contact.set_size(64, 40)
-phone_contact.set_src("E:/static/IMAGE_BUTTON_DIAL_CONTACT.png")
-phone_contact.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_contact.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_contact.set_pos(87, 268)
-
-phone_contact_btn = lv.img(phone_screen)
-phone_contact_btn.set_size(76, 52)
-phone_contact_btn.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_contact_btn.set_pos(87, 268)
-
-phone_delete = lv.img(phone_screen)
-phone_delete.set_size(76, 40)
-phone_delete.set_src("E:/static/IMAGE_BUTTON_DELKEY.png")
-phone_delete.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_delete.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-phone_delete.set_pos(161, 268)
-
-phone_delete_btn = lv.img(phone_screen)
-phone_delete_btn.set_size(76, 52)
-phone_delete_btn.add_flag(lv.obj.FLAG.CLICKABLE)
-phone_delete_btn.set_pos(161, 268)
PHONE_CALL_MAX_DATA = 22
+line_points = [{"x":0,"y":0},{"x":0,"y":35}]
+phone_screen = None
+phone_line = None
+phone_label = None
+phone_one = None
+phone_two = None
+phone_three = None
+phone_four = None
+phone_five = None
+phone_six = None
+phone_seven = None
+phone_eight = None
+phone_nine = None
+phone_start = None
+phone_zero = None
+phone_hash = None
+phone_call = None
+phone_call_btn = None
+phone_contact = None
+phone_contact_btn = None
+phone_delete = None
+phone_delete_btn = None
class PhoneScreen(Screen):
NAME = "Phone"
def __init__(self):
super().__init__()
- self.meta = phone_screen
+ self.meta = None
self.phone_num = ''
self.phone_list = []
self.button = 0
self.timer = osTimer()
self.count = 0
- phone_one.add_event_cb(lambda e: self.one(e),
- lv.EVENT.CLICKED, None)
- phone_two.add_event_cb(lambda e: self.two(e),
- lv.EVENT.CLICKED, None)
- phone_three.add_event_cb(lambda e: self.three(e),
- lv.EVENT.CLICKED, None)
- phone_four.add_event_cb(lambda e: self.four(e),
- lv.EVENT.CLICKED, None)
- phone_five.add_event_cb(lambda e: self.five(e),
- lv.EVENT.CLICKED, None)
- phone_six.add_event_cb(lambda e: self.six(e),
- lv.EVENT.CLICKED, None)
- phone_seven.add_event_cb(lambda e: self.seven(e),
- lv.EVENT.CLICKED, None)
- phone_eight.add_event_cb(lambda e: self.eight(e),
- lv.EVENT.CLICKED, None)
- phone_nine.add_event_cb(lambda e: self.nine(e),
- lv.EVENT.CLICKED, None)
- phone_zero.add_event_cb(lambda e: self.zero(e),
- lv.EVENT.CLICKED, None)
-
- phone_call_btn.add_event_cb(lambda e: self.call(e),
- lv.EVENT.CLICKED, None)
- phone_contact_btn.add_event_cb(lambda e: self.contact(e),
- lv.EVENT.CLICKED, None)
- phone_delete_btn.add_event_cb(lambda e: self.delete(e),
- lv.EVENT.CLICKED, None)
-
- phone_start.add_event_cb(lambda e: self.start(e),
- lv.EVENT.CLICKED, None)#短按显示*
-
- phone_start.add_event_cb(lambda e: self.pressed_start(e),
- lv.EVENT.LONG_PRESSED, None)#长按显示+
-
- phone_start.add_event_cb(lambda e: self.endpressed_start(e),
- lv.EVENT.RELEASED, None)#释放按键
+
- phone_hash.add_event_cb(lambda e: self.hash(e),
- lv.EVENT.CLICKED, None)
- def post_processor_after_instantiation(self):
+ def initialization(self):
self.phone_num=''
self.phone_list = []
+ global phone_screen ,phone_line,phone_label,phone_one,phone_two,phone_three,phone_four,phone_five,phone_six,phone_seven,phone_eight,phone_nine,phone_start,\
+ phone_zero,phone_hash,phone_call,phone_call_btn,phone_contact,phone_contact_btn,phone_delete,phone_delete_btn
+ if phone_screen == None:
+ phone_screen = lv.obj()
+ phone_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ phone_line = lv.line(phone_screen)
+ phone_line.set_points(line_points,2)
+ phone_line.set_pos(235,58)
+ phone_line.set_size(2,35)
+ phone_line.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ phone_line.add_style(style_line,0)
+
+ phone_label = lv.label(phone_screen)
+ phone_label.set_pos(0, 45)
+ phone_label.set_size(0, 55)
+ phone_label.set_text(" ")
+ phone_label.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_label.set_long_mode(lv.label.LONG.CLIP)
+ phone_label.set_style_text_align(lv.TEXT_ALIGN.RIGHT, 0)
+
+ phone_one = lv.img(phone_screen)
+ phone_one.set_src("E:/static/IMAGE_NUMBER_KEY1_ICON.png")
+ phone_one.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_one.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_one.set_pos(3, 100)
+
+ phone_two = lv.img(phone_screen)
+ phone_two.set_size(76, 40)
+ phone_two.set_src("E:/static/IMAGE_NUMBER_KEY2_ICON.png")
+ phone_two.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_two.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_two.set_pos(82, 100)
+
+ phone_three = lv.img(phone_screen)
+ phone_three.set_size(76, 40)
+ phone_three.set_src("E:/static/IMAGE_NUMBER_KEY3_ICON.png")
+ phone_three.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_three.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_three.set_pos(161, 100)
+
+ phone_four = lv.img(phone_screen)
+ phone_four.set_size(76, 40)
+ phone_four.set_src("E:/static/IMAGE_NUMBER_KEY4_ICON.png")
+ phone_four.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_four.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_four.set_pos(3, 142)
+
+ phone_five = lv.img(phone_screen)
+ phone_five.set_size(76, 40)
+ phone_five.set_src("E:/static/IMAGE_NUMBER_KEY5_ICON.png")
+ phone_five.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_five.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_five.set_pos(82, 142)
+
+ phone_six = lv.img(phone_screen)
+ phone_six.set_size(76, 40)
+ phone_six.set_src("E:/static/IMAGE_NUMBER_KEY6_ICON.png")
+ phone_six.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_six.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_six.set_pos(161, 142)
+
+ phone_seven = lv.img(phone_screen)
+ phone_seven.set_size(76, 40)
+ phone_seven.set_src("E:/static/IMAGE_NUMBER_KEY7_ICON.png")
+ phone_seven.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_seven.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_seven.set_pos(3, 184)
+
+ phone_eight = lv.img(phone_screen)
+ phone_eight.set_size(76, 40)
+ phone_eight.set_src("E:/static/IMAGE_NUMBER_KEY8_ICON.png")
+ phone_eight.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_eight.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_eight.set_pos(82, 184)
+
+ phone_nine = lv.img(phone_screen)
+ phone_nine.set_size(76, 40)
+ phone_nine.set_src("E:/static/IMAGE_NUMBER_KEY9_ICON.png")
+ phone_nine.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_nine.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_nine.set_pos(161, 184)
+
+ phone_start = lv.img(phone_screen)
+ phone_start.set_size(76, 40)
+ phone_start.set_src("E:/static/IMAGE_NUMBER_KEYSTAR_ICON.png")
+ phone_start.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_start.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_start.set_pos(3, 226)
+
+ phone_zero = lv.img(phone_screen)
+ phone_zero.set_size(76, 40)
+ phone_zero.set_src("E:/static/IMAGE_NUMBER_KEY0_ICON.png")
+ phone_zero.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_zero.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_zero.set_pos(82, 226)
+
+ phone_hash = lv.img(phone_screen)
+ phone_hash.set_size(76, 40)
+ phone_hash.set_src("E:/static/IMAGE_NUMBER_KEYHASH_ICON.png")
+ phone_hash.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_hash.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_hash.set_pos(161, 226)
+
+ phone_call = lv.img(phone_screen)
+ phone_call.set_size(76, 40)
+ phone_call.set_src("E:/static/IMAGE_BUTTON_DIAL.png")
+ phone_call.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_call.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_call.set_pos(3, 268)
+
+ phone_call_btn = lv.img(phone_screen)
+ phone_call_btn.set_size(76, 52)
+ phone_call_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_call_btn.set_pos(3, 268)
+
+ phone_contact = lv.img(phone_screen)
+ phone_contact.set_size(64, 40)
+ phone_contact.set_src("E:/static/IMAGE_BUTTON_DIAL_CONTACT.png")
+ phone_contact.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_contact.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_contact.set_pos(87, 268)
+
+ phone_contact_btn = lv.img(phone_screen)
+ phone_contact_btn.set_size(76, 52)
+ phone_contact_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_contact_btn.set_pos(87, 268)
+
+ phone_delete = lv.img(phone_screen)
+ phone_delete.set_size(76, 40)
+ phone_delete.set_src("E:/static/IMAGE_BUTTON_DELKEY.png")
+ phone_delete.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_delete.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ phone_delete.set_pos(161, 268)
+
+ phone_delete_btn = lv.img(phone_screen)
+ phone_delete_btn.set_size(76, 52)
+ phone_delete_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+ phone_delete_btn.set_pos(161, 268)
+
+ self.meta = phone_screen
+
+ phone_one.add_event_cb(lambda e: self.one(e),
+ lv.EVENT.CLICKED, None)
+ phone_two.add_event_cb(lambda e: self.two(e),
+ lv.EVENT.CLICKED, None)
+ phone_three.add_event_cb(lambda e: self.three(e),
+ lv.EVENT.CLICKED, None)
+ phone_four.add_event_cb(lambda e: self.four(e),
+ lv.EVENT.CLICKED, None)
+ phone_five.add_event_cb(lambda e: self.five(e),
+ lv.EVENT.CLICKED, None)
+ phone_six.add_event_cb(lambda e: self.six(e),
+ lv.EVENT.CLICKED, None)
+ phone_seven.add_event_cb(lambda e: self.seven(e),
+ lv.EVENT.CLICKED, None)
+ phone_eight.add_event_cb(lambda e: self.eight(e),
+ lv.EVENT.CLICKED, None)
+ phone_nine.add_event_cb(lambda e: self.nine(e),
+ lv.EVENT.CLICKED, None)
+ phone_zero.add_event_cb(lambda e: self.zero(e),
+ lv.EVENT.CLICKED, None)
+
+ phone_call_btn.add_event_cb(lambda e: self.call(e),
+ lv.EVENT.CLICKED, None)
+ phone_contact_btn.add_event_cb(lambda e: self.contact(e),
+ lv.EVENT.CLICKED, None)
+ phone_delete_btn.add_event_cb(lambda e: self.delete(e),
+ lv.EVENT.CLICKED, None)
+
+ phone_start.add_event_cb(lambda e: self.start(e),
+ lv.EVENT.CLICKED, None)#短按显示*
+
+ phone_start.add_event_cb(lambda e: self.pressed_start(e),
+ lv.EVENT.LONG_PRESSED, None)#长按显示+
+
+ phone_start.add_event_cb(lambda e: self.endpressed_start(e),
+ lv.EVENT.RELEASED, None)#释放按键
+
+
+ phone_hash.add_event_cb(lambda e: self.hash(e),
+ lv.EVENT.CLICKED, None)
+
- def initialization(self):
self.phone_num=''
self.phone_list = []
self.count = 0
EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-
-
-
-
-
-# ----------------------------------通话记录---------call_log screen----------------------------------------------------------
-
-call_log_screen = lv.obj()
-call_log_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-contacts_cont_list= lv.obj(call_log_screen)
-contacts_cont_list.set_pos(0, 50)
-contacts_cont_list.set_size(240, 270)
-contacts_cont_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
-contacts_cont_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-call_log_title = lv.label(call_log_screen)
-call_log_title.set_pos(0, 10)
-call_log_title.set_size(240, 40)
-call_log_title.set_long_mode(lv.label.LONG.WRAP)
-call_log_title.set_text("通话记录")
-call_log_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-call_log_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-none_call_log_title = lv.label(contacts_cont_list)
-none_call_log_title.set_pos(0, 120)
-none_call_log_title.set_size(240, 40)
-none_call_log_title.set_long_mode(lv.label.LONG.WRAP)
-none_call_log_title.set_text(" ")
-none_call_log_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-none_call_log_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
+call_log_screen = None
+contacts_cont_list = None
+call_log_title = None
+none_call_log_title = None
CALLLOG_FLAG = 0
class CallLogScreen(Screen):
def __init__(self):
super().__init__()
- self.meta = call_log_screen
+ self.meta = None
self.log_list = []
self.read_call_log = {}
self.check_json = 0
- self.call_log_detail_list = lv.obj(call_log_screen)
- EventMesh.subscribe("call_log_update_show_list", self.call_log_update_show_list)
+ self.call_log_detail_list = None
+
self.timer = osTimer()
+ EventMesh.subscribe("call_log_update_show_list", self.call_log_update_show_list)
def post_processor_before_initialization(self):
read_call_log = EventMesh.publish("get_call_log_list")
self.btn_create()
def initialization(self):
+ global call_log_screen,contacts_cont_list ,call_log_title ,none_call_log_title
+ if call_log_screen == None:
+ call_log_screen = lv.obj()
+ call_log_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ contacts_cont_list= lv.obj(call_log_screen)
+ contacts_cont_list.set_pos(0, 50)
+ contacts_cont_list.set_size(240, 270)
+ contacts_cont_list.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ contacts_cont_list.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ call_log_title = lv.label(call_log_screen)
+ call_log_title.set_pos(0, 10)
+ call_log_title.set_size(240, 40)
+ call_log_title.set_long_mode(lv.label.LONG.WRAP)
+ call_log_title.set_text("通话记录")
+ call_log_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ call_log_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ none_call_log_title = lv.label(contacts_cont_list)
+ none_call_log_title.set_pos(0, 120)
+ none_call_log_title.set_size(240, 40)
+ none_call_log_title.set_long_mode(lv.label.LONG.WRAP)
+ none_call_log_title.set_text(" ")
+ none_call_log_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ none_call_log_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.call_log_detail_list = lv.obj(call_log_screen)
+ self.meta = call_log_screen
+
+
read_call_log = EventMesh.publish("get_call_log_list")
print("read_call_log:{}".format(read_call_log))
self.check_json = read_call_log[0] #文件是否存在
self.btn_create()
def btn_create(self):
+ global call_log_screen,contacts_cont_list ,call_log_title ,none_call_log_title
h = 0
if self.check_json == True and len(self.read_call_log) != 0:
none_call_log_title.set_text(" ")
self.call_log_detail_list.add_flag(lv.obj.FLAG.HIDDEN)#隐藏空文本
def calling(self,e):
+ global call_log_screen,contacts_cont_list ,call_log_title ,none_call_log_title
# print("e.get_text():{} {}".format(e.get_target().get_child(0).get_text(),e.get_target().get_child(3).get_text()))
phonnum = int(e.get_target().get_child(0).get_text())
phnoname = e.get_target().get_child(3).get_text()
def btn8_press(self):
EventMesh.publish("load_screen", {"screen": "main_menu"})
-# ------------------------------拨打电话-------------dialing screen----------------------------------------------------------
-dialing_screen = lv.obj()
-dialing_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-dialing_img = lv.img(dialing_screen)
-dialing_img.set_pos(80, 60)
-dialing_img.set_size(64, 64)
-dialing_img.set_src("E:/static/IMAGE_NOTICE_CALL.png")
-dialing_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-dialing_name = lv.label(dialing_screen)
-dialing_name.set_pos(0, 160)
-dialing_name.set_size(240, 50)
-dialing_name.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-dialing_name.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-# dialing_content = lv.label(dialing_screen)
-# dialing_content.set_pos(0, 160)
-# dialing_content.set_size(240, 50)
-# dialing_content.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-# dialing_content.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-hangup_imgbtn = lv.img(dialing_screen)
-hangup_imgbtn.set_size(64, 64)
-hangup_imgbtn.set_src("E:/static/IMG_CC_HUNGUP1.png")
-hangup_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
-hangup_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-hangup_imgbtn.set_pos(80, 220)
+# ------------------------------拨打电话-------------dialing screen----------------------------------------------------------
CALL_LOG_MAX = 50
-
+dialing_screen = None
+dialing_img = None
+dialing_name = None
+hangup_imgbtn = None
class DialingScreen(Screen):
NAME = "dialing"
def __init__(self):
super().__init__()
- self.meta = dialing_screen
- hangup_imgbtn.add_event_cb(lambda e: self.hangup(e),
- lv.EVENT.CLICKED, None)
+ self.meta = None
+
self.call_log = {}
self.call_log_value = {}
self.read_call_log = {}
self.number_tmp = {}
def initialization(self):
+ global dialing_screen,dialing_img,dialing_name ,hangup_imgbtn
+ if dialing_screen == None:
+ dialing_screen = lv.obj()
+ dialing_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ dialing_img = lv.img(dialing_screen)
+ dialing_img.set_pos(80, 60)
+ dialing_img.set_size(64, 64)
+ dialing_img.set_src("E:/static/IMAGE_NOTICE_CALL.png")
+ dialing_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ dialing_name = lv.label(dialing_screen)
+ dialing_name.set_pos(0, 160)
+ dialing_name.set_size(240, 50)
+ dialing_name.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ dialing_name.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ hangup_imgbtn = lv.img(dialing_screen)
+ hangup_imgbtn.set_size(64, 64)
+ hangup_imgbtn.set_src("E:/static/IMG_CC_HUNGUP1.png")
+ hangup_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ hangup_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ hangup_imgbtn.set_pos(80, 220)
+ hangup_imgbtn.add_event_cb(lambda e: self.hangup(e),
+ lv.EVENT.CLICKED, None)
+ self.meta = dialing_screen
+
#获取字符串
name = EventMesh.publish("get_phonename")#获取拨打电话名称
content = EventMesh.publish("get_phonenum")#获取电话号码
def btn8_press(self):
EventMesh.publish("load_screen", {"screen": "main_menu"})
-############短信###############################
-MSG_FLAG = 0
-MSG_MAX = 5 #最大显示短信内容条数
-style_sms_bg_btn = lv.style_t()
-style_sms_bg_btn.init()
-#style_sms_bg_btn.set_bg_color(lv.color_make(0x00, 0xff, 0x2a))
-style_sms_bg_btn.set_bg_color(lv.color_make(0xff, 0xff, 0xff))
-style_sms_bg_btn.set_border_width(0)
-style_sms_bg_btn.set_shadow_opa(0)
-
-
-msg_list_screen = lv.obj()
-msg_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-msg_top_title = lv.label(msg_list_screen)
-msg_top_title.set_pos(0, 10)
-msg_top_title.set_size(240, 40)
-msg_top_title.set_text("信息")
-msg_top_title.set_long_mode(lv.label.LONG.WRAP)
-msg_top_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-msg_top_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-msg_cont_detail = lv.obj(msg_list_screen)
-msg_cont_detail.set_pos(0, 50)
-msg_cont_detail.set_size(240, 270)
-msg_cont_detail.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-msg_list_t= lv.obj(msg_list_screen)
-msg_list_t.set_pos(0, 50)
-msg_list_t.set_size(240, 270)
-msg_list_t.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
-msg_list_t.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-msg_list_t_done_img = lv.img(msg_list_t)
-msg_list_t_done_img.set_pos(53, 20)
-msg_list_t_done_img.set_size(134, 117)
-msg_list_t_done_img.set_src("E:/static/IMAGE_NOTICE_NONE.jpg")
-msg_list_t_done_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-no_msg_text = lv.label(msg_list_t)
-no_msg_text.set_pos(0, 210)
-no_msg_text.set_size(240, 40)
-no_msg_text.set_text("暂无信息")
-no_msg_text.set_long_mode(lv.label.LONG.WRAP)
-no_msg_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-no_msg_text.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-
-
-
-
-
-
-
-def msg_cb(args):
- index = args[1]
- storage = args[2]
- print("index:{}".format(index))
- if index >= 49:
- EventMesh.publish("load_screen", {"screen": "message_full"})
- else:
- EventMesh.publish("load_screen", {"screen": "message_popup"})
-sms.setCallback(msg_cb)
-
-message_popup_screen = lv.obj()
-message_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-message_popup_title = lv.label(message_popup_screen)
-message_popup_title.set_pos(0, 150)
-message_popup_title.set_size(240, 40)
-message_popup_title.set_text("你有新的消息")
-message_popup_title.set_long_mode(lv.label.LONG.WRAP)
-message_popup_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-message_popup_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+message_popup_screen = None
+message_popup_title = None
#信息弹窗
class NewMessageScreen(Screen):
NAME = "message_popup"
def __init__(self):
super().__init__()
- self.meta = message_popup_screen
+ self.meta = None
def initialization(self):
+ global message_popup_screen,message_popup_title
+ if message_popup_screen == None :
+ message_popup_screen = lv.obj()
+ message_popup_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ message_popup_title = lv.label(message_popup_screen)
+ message_popup_title.set_pos(0, 150)
+ message_popup_title.set_size(240, 40)
+ message_popup_title.set_text("你有新的消息")
+ message_popup_title.set_long_mode(lv.label.LONG.WRAP)
+ message_popup_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ message_popup_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = message_popup_screen
EventMesh.publish("set_sms_clear_all_data",10)
def done_left_to_right(self):
def btn8_press(self):
EventMesh.publish("load_screen", {"screen": "main_menu"})
-message_full_screen = lv.obj()
-message_full_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-message_full_label = lv.label(message_full_screen)
-message_full_label.set_pos(0, 100)
-message_full_label.set_size(240, 40)
-message_full_label.set_text("信息已满,是否清除所有?")
-message_full_label.set_long_mode(lv.label.LONG.WRAP)
-message_full_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-message_full_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-message_full_confirm = lv.label(message_full_screen)
-message_full_confirm.set_text("确认")
-message_full_confirm.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-message_full_confirm.set_size(120, 60)
-message_full_confirm.set_pos(0,180)
-message_full_confirm.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-message_full_confirm.add_flag(lv.obj.FLAG.CLICKABLE)
-message_full_confirm.set_ext_click_area(20)
-
-message_full_cancel = lv.label(message_full_screen)
-message_full_cancel.set_text("取消")
-message_full_cancel.set_size(120, 60)
-message_full_cancel.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-message_full_cancel.set_pos(120,180)
-message_full_cancel.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-message_full_cancel.add_flag(lv.obj.FLAG.CLICKABLE)
-message_full_cancel.set_ext_click_area(20)
+message_full_screen = None
+message_full_label = None
+message_full_confirm = None
+message_full_cancel = None
#信息弹窗
class MessageFullScreen(Screen):
NAME = "message_full"
super().__init__()
self.timer = osTimer()
self.clear_state = 10
- self.meta = message_full_screen
+ self.meta = None
EventMesh.subscribe("sms_clear_all_data", self.sms_clear_all_data)
EventMesh.subscribe("set_sms_clear_all_data", self.set_sms_clear_all_data)
- message_full_confirm.add_event_cb(lambda e: self.confirm(e),lv.EVENT.CLICKED, None)
- message_full_cancel.add_event_cb(lambda e: self.concel(e),lv.EVENT.CLICKED, None)
def initialization(self):
+ global message_full_screen,message_full_label,message_full_confirm,message_full_cancel
+ if message_full_screen == None :
+ message_full_screen = lv.obj()
+ message_full_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ message_full_label = lv.label(message_full_screen)
+ message_full_label.set_pos(0, 100)
+ message_full_label.set_size(240, 40)
+ message_full_label.set_text("信息已满,是否清除所有?")
+ message_full_label.set_long_mode(lv.label.LONG.WRAP)
+ message_full_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ message_full_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ message_full_confirm = lv.label(message_full_screen)
+ message_full_confirm.set_text("确认")
+ message_full_confirm.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ message_full_confirm.set_size(120, 60)
+ message_full_confirm.set_pos(0,180)
+ message_full_confirm.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ message_full_confirm.add_flag(lv.obj.FLAG.CLICKABLE)
+ message_full_confirm.set_ext_click_area(20)
+
+ message_full_cancel = lv.label(message_full_screen)
+ message_full_cancel.set_text("取消")
+ message_full_cancel.set_size(120, 60)
+ message_full_cancel.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ message_full_cancel.set_pos(120,180)
+ message_full_cancel.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ message_full_cancel.add_flag(lv.obj.FLAG.CLICKABLE)
+ message_full_cancel.set_ext_click_area(20)
+ self.meta = message_full_screen
+
+ message_full_confirm.add_event_cb(lambda e: self.confirm(e),lv.EVENT.CLICKED, None)
+ message_full_cancel.add_event_cb(lambda e: self.concel(e),lv.EVENT.CLICKED, None)
+
+
self.timer.start(10*1000,0,self.return_back)
def return_back(self, e):
def btn8_press(self):
EventMesh.publish("load_screen", {"screen": "main_menu"})
+############短信###############################
+MSG_FLAG = 0
+MSG_MAX = 5 #最大显示短信内容条数
+def msg_cb(args):
+ index = args[1]
+ storage = args[2]
+ print("index:{}".format(index))
+ if index >= 49:
+ EventMesh.publish("load_screen", {"screen": "message_full"})
+ else:
+ EventMesh.publish("load_screen", {"screen": "message_popup"})
+
+sms.setCallback(msg_cb)
+style_sms_bg_btn = lv.style_t()
+style_sms_bg_btn.init()
+#style_sms_bg_btn.set_bg_color(lv.color_make(0x00, 0xff, 0x2a))
+style_sms_bg_btn.set_bg_color(lv.color_make(0xff, 0xff, 0xff))
+style_sms_bg_btn.set_border_width(0)
+style_sms_bg_btn.set_shadow_opa(0)
+
+msg_list_screen = None
+msg_top_title = None
+msg_cont_detail = None
+msg_list_t = None
+msg_list_t_done_img = None
+no_msg_text = None
class PopupScreen(Screen):
NAME = "popup"
def __init__(self):
super().__init__()
# -------------------------------------------popup_menu screen----------------------------------------------------------
- self.meta = msg_list_screen
+ self.meta = None
self.msg_detail = {}
self.msg_nums = 0
- self.sms_detail_list = lv.obj(msg_list_screen)
+ self.sms_detail_list = None
EventMesh.subscribe("sms_updata_list_show", self.sms_create_list)
-
def post_processor_before_initialization(self):
self.msg_nums = sms.getMsgNums() #获取短信条数
def initialization(self):
+ global msg_list_screen,msg_top_title,msg_cont_detail,msg_list_t,msg_list_t_done_img,no_msg_text
+ if msg_list_screen == None :
+ msg_list_screen = lv.obj()
+ msg_list_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ msg_top_title = lv.label(msg_list_screen)
+ msg_top_title.set_pos(0, 10)
+ msg_top_title.set_size(240, 40)
+ msg_top_title.set_text("信息")
+ msg_top_title.set_long_mode(lv.label.LONG.WRAP)
+ msg_top_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ msg_top_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ msg_cont_detail = lv.obj(msg_list_screen)
+ msg_cont_detail.set_pos(0, 50)
+ msg_cont_detail.set_size(240, 270)
+ msg_cont_detail.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ msg_list_t= lv.obj(msg_list_screen)
+ msg_list_t.set_pos(0, 50)
+ msg_list_t.set_size(240, 270)
+ msg_list_t.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ msg_list_t.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ msg_list_t_done_img = lv.img(msg_list_t)
+ msg_list_t_done_img.set_pos(53, 20)
+ msg_list_t_done_img.set_size(134, 117)
+ msg_list_t_done_img.set_src("E:/static/IMAGE_NOTICE_NONE.jpg")
+ msg_list_t_done_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_msg_text = lv.label(msg_list_t)
+ no_msg_text.set_pos(0, 210)
+ no_msg_text.set_size(240, 40)
+ no_msg_text.set_text("暂无信息")
+ no_msg_text.set_long_mode(lv.label.LONG.WRAP)
+ no_msg_text.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_msg_text.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ self.sms_detail_list = lv.obj(msg_list_screen)
+ self.meta = msg_list_screen
+
+
self.msg_nums = sms.getMsgNums()
# print("self.msg_nums:{} type:{}".format(self.msg_nums,type(sms.getMsgNums())))
self.btn_create(0)
def btn_create(self,msg):
+ global msg_list_screen,msg_top_title,msg_cont_detail,msg_list_t,msg_list_t_done_img,no_msg_text
count = 0
j = 0
print("self.msg_nums:{}".format(self.msg_nums))
-
+msg_detail_screen = None
+msg_detail_title = None
+msg_detail_cont = None
class MsgDetailScreen(Screen):
NAME = "msg_detail"
def __init__(self):
super().__init__()
- self.meta = msg_detail_screen
+ self.meta = None
self.name = ""
self.contetn = ""
def initialization(self):
+ global msg_detail_screen,msg_detail_title,msg_detail_cont
+ if msg_detail_screen == None:
+ msg_detail_screen = lv.obj()
+ msg_detail_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ msg_detail_title = lv.label(msg_detail_screen)
+ msg_detail_title.set_pos(0, 10)
+ msg_detail_title.set_size(240, 40)
+ msg_detail_title.set_long_mode(lv.label.LONG.WRAP)
+ msg_detail_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ msg_detail_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ msg_detail_cont = lv.label(msg_detail_screen)
+ msg_detail_cont.set_pos(0, 50)
+ msg_detail_cont.set_size(240, 200)
+ msg_detail_cont.set_long_mode(lv.label.LONG.WRAP)
+ msg_detail_cont.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ msg_detail_cont.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = msg_detail_screen
#获取字符串
self.name = EventMesh.publish("get_msg_name")
self.content = EventMesh.publish("get_msg_content")
# -------------------------------------------heartrate screen----------------------------------------------------------
-heartrate_screen = lv.obj()
-heartrate_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-heartrate_label = lv.label(heartrate_screen)
-heartrate_label.set_pos(0, 10)
-heartrate_label.set_size(240, 40)
-heartrate_label.set_text("心率")
-heartrate_label.set_long_mode(lv.label.LONG.WRAP)
-heartrate_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-heartrate_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-heartrate_done_img = lv.img(heartrate_screen)
-heartrate_done_img.set_pos(0, 50)
-heartrate_done_img.set_size(240, 96)
-heartrate_done_img.set_src("E:/static/IMAGE_HEART_ONLY_TEST_DONE.jpg")
-
-heartrate_start_label = lv.label(heartrate_screen)
-heartrate_start_label.set_size(240,40)
-heartrate_start_label.set_pos(0,160)
-heartrate_start_label.set_text(" ")
-heartrate_start_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-heartrate_start_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-heartrate_start_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
-
-
-heartrate_bpm_label = lv.label(heartrate_screen)
-heartrate_bpm_label.set_size(240, 40)
-heartrate_bpm_label.set_pos(0, 180)
-heartrate_bpm_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-heartrate_bpm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-heartrate_bpm_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
-
-heartrate_done_label = lv.label(heartrate_screen)
-heartrate_done_label.set_size(240, 40)
-heartrate_done_label.set_pos(0, 270)
-heartrate_done_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-heartrate_done_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-heartrate_done_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
-
+heartrate_screen = None
+heartrate_label = None
+heartrate_done_img = None
+heartrate_start_label = None
+heartrate_bpm_label = None
+heartrate_done_label = None
class HeartrateScreen(Screen):
NAME = "heartrate"
def __init__(self):
super().__init__()
- self.meta = heartrate_screen
+ self.meta = None
self.timer = osTimer()
self.point = 0
self.heart_value = 0
-
-
- def post_processor_after_initialization(self):
- self.point = 0
- self.timer.start(1*1000, 1, self.start_measure)
+ def initialization(self):
+ global heartrate_screen,heartrate_label,heartrate_done_img ,heartrate_start_label,heartrate_bpm_label ,heartrate_done_label
+ if heartrate_screen == None:
+ heartrate_screen = lv.obj()
+ heartrate_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ heartrate_label = lv.label(heartrate_screen)
+ heartrate_label.set_pos(0, 10)
+ heartrate_label.set_size(240, 40)
+ heartrate_label.set_text("心率")
+ heartrate_label.set_long_mode(lv.label.LONG.WRAP)
+ heartrate_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ heartrate_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ heartrate_done_img = lv.img(heartrate_screen)
+ heartrate_done_img.set_pos(0, 50)
+ heartrate_done_img.set_size(240, 96)
+ heartrate_done_img.set_src("E:/static/IMAGE_HEART_ONLY_TEST_DONE.jpg")
+
+ heartrate_start_label = lv.label(heartrate_screen)
+ heartrate_start_label.set_size(240,40)
+ heartrate_start_label.set_pos(0,160)
+ heartrate_start_label.set_text(" ")
+ heartrate_start_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ heartrate_start_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ heartrate_start_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+
+
+ heartrate_bpm_label = lv.label(heartrate_screen)
+ heartrate_bpm_label.set_size(240, 40)
+ heartrate_bpm_label.set_pos(0, 180)
+ heartrate_bpm_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ heartrate_bpm_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ heartrate_bpm_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+
+ heartrate_done_label = lv.label(heartrate_screen)
+ heartrate_done_label.set_size(240, 40)
+ heartrate_done_label.set_pos(0, 270)
+ heartrate_done_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ heartrate_done_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ heartrate_done_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
+ self.meta = heartrate_screen
heartrate_done_label.set_text(" ")
heartrate_bpm_label.set_text(" ")
heartrate_start_label.set_text("正在测量中.")
EventMesh.publish(constants.EVENT.START_HEART)
+ def post_processor_after_initialization(self):
+ self.point = 0
+ self.timer.start(1*1000, 1, self.start_measure)
+
+
def start_measure(self,*args):
+ global heartrate_screen,heartrate_label,heartrate_done_img ,heartrate_start_label,heartrate_bpm_label ,heartrate_done_label
self.point = self.point + 1
EventMesh.publish("system_sleep_rest")#防止黑屏
self.heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
EventMesh.publish("load_screen", {"screen": "main_menu"})
+# -------------------------------------------toolbox screen----------------------------------------------------------
+toolbox_screen = None
+toolbox_text_img = None
+toolbox_cont = None
+toolbox_step_img = None
+toolbox_weather_img = None
+toolbox_alarm_img = None
+toolbox_sms_img = None
+toolbox_countdown_img = None
+toolbox_stopwatch_img = None
class ToolboxScreen(Screen):
NAME = "toolbox"
def __init__(self):
super().__init__()
- self.meta = toolbox_screen
- # toolbox_step.add_event_cb(lambda e: self.load_screen(e, {"screen": "step"}), lv.EVENT.CLICKED, None)
- # toolbox_weather.add_event_cb(lambda e: self.load_screen(e, {"screen": "weather"}), lv.EVENT.CLICKED, None)
- # toolbox_alarm.add_event_cb(lambda e: self.load_screen(e, {"screen": "clk_list"}), lv.EVENT.CLICKED, None)
- # toolbox_sms_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "popup"}), lv.EVENT.CLICKED, None)
- # toolbox_countdown.add_event_cb(lambda e: self.load_screen(e, {"screen": "countdown"}), lv.EVENT.CLICKED, None)
- # toolbox_stopwatch.add_event_cb(lambda e: self.load_screen(e, {"screen": "stopwatch"}), lv.EVENT.CLICKED, None)
-
- toolbox_step_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "step"}), lv.EVENT.CLICKED, None)
- toolbox_weather_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "weather"}), lv.EVENT.CLICKED, None)
- toolbox_alarm_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "clk_list"}), lv.EVENT.CLICKED, None)
- toolbox_sms_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "popup"}), lv.EVENT.CLICKED, None)
- toolbox_countdown_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "countdown"}), lv.EVENT.CLICKED, None)
- toolbox_stopwatch_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "stopwatch"}), lv.EVENT.CLICKED, None)
+ self.meta = None
+
+ def initialization(self):
+ global toolbox_screen,toolbox_text_img,toolbox_cont,toolbox_step_img,toolbox_weather_img ,toolbox_alarm_img ,toolbox_sms_img ,\
+ toolbox_countdown_img,toolbox_stopwatch_img
+ if toolbox_screen == None:
+ toolbox_screen = lv.obj()
+ toolbox_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ toolbox_screen.set_scrollbar_mode(0)
+
+ toolbox_text_img = lv.img(toolbox_screen)
+ toolbox_text_img.set_pos(75, 10)
+ toolbox_text_img.set_size(90, 30)
+ toolbox_text_img.set_src("E:/static/tool/tool_text.png")
+ toolbox_text_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ toolbox_cont = lv.obj(toolbox_screen)
+ toolbox_cont.set_pos(0, 50)
+ toolbox_cont.set_size(240, 270)
+ toolbox_cont_style = ContStyle()
+ toolbox_cont.add_style(
+ toolbox_cont_style.style_cont(0, lv.color_make(0x00, 0x00, 0x00), lv.color_make(0x00, 0x00, 0x00), 255),
+ lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ toolbox_step_img = lv.img(toolbox_cont)
+ toolbox_step_img.set_pos(4, 0)
+ toolbox_step_img.set_size(232, 80)
+ toolbox_step_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_step_img.set_src("E:/static/tool/IMAGE_SECMENU_STEP.png")
+ toolbox_step_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ toolbox_weather_img = lv.img(toolbox_cont)
+ toolbox_weather_img.set_pos(4, 90)
+ toolbox_weather_img.set_size(232, 80)
+ toolbox_weather_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_weather_img.set_src("E:/static/tool/IMAGE_SECMENU_WEATHER.png")
+ toolbox_weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ toolbox_alarm_img = lv.img(toolbox_cont)
+ toolbox_alarm_img.set_pos(4, 180)
+ toolbox_alarm_img.set_size(232, 80)
+ toolbox_alarm_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_alarm_img.set_src("E:/static/tool/IMAGE_SECMENU_ALARM.png")
+ toolbox_alarm_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+ toolbox_sms_img = lv.img(toolbox_cont)
+ toolbox_sms_img.set_pos(4, 270)
+ toolbox_sms_img.set_size(232, 80)
+ toolbox_sms_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_sms_img.set_src("E:/static/tool/sms_setting.png")
+ toolbox_sms_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ toolbox_countdown_img = lv.img(toolbox_cont)
+ toolbox_countdown_img.set_pos(4, 360)
+ toolbox_countdown_img.set_size(232, 80)
+ toolbox_countdown_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_countdown_img.set_src("E:/static/tool/IMAGE_SECMENU_COUNTDOWN.png")
+ toolbox_countdown_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ toolbox_stopwatch_img = lv.img(toolbox_cont)
+ toolbox_stopwatch_img.set_pos(4, 450)
+ toolbox_stopwatch_img.set_size(232, 80)
+ toolbox_stopwatch_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ toolbox_stopwatch_img.set_src("E:/static/tool/IMAGE_SECMENU_STOPWATCH.png")
+ toolbox_stopwatch_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ toolbox_step_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "step"}), lv.EVENT.CLICKED, None)
+ toolbox_weather_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "weather"}), lv.EVENT.CLICKED, None)
+ toolbox_alarm_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "clk_list"}), lv.EVENT.CLICKED, None)
+ toolbox_sms_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "popup"}), lv.EVENT.CLICKED, None)
+ toolbox_countdown_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "countdown"}), lv.EVENT.CLICKED, None)
+ toolbox_stopwatch_img.add_event_cb(lambda e: self.load_screen(e, {"screen": "stopwatch"}), lv.EVENT.CLICKED, None)
+ self.meta = toolbox_screen
def done_return(self):
EventMesh.publish("load_screen", {"screen": "main_menu"})
EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-
-
+incoming_call_screen = None
+incoming_call_img = None
+incoming_call_name_label = None
+incoming_call_answer = None
+incoming_call_hangup = None
CALL_LOG_MAX = 50
class IncomingCallScreen(Screen):
NAME = "incoming_call"
self.name = None
self.phonebook = {}
self.pro_state = 0
- self.meta = incoming_call_screen
- incoming_call_answer.add_event_cb(lambda e: self.answer(e),
- lv.EVENT.CLICKED, None)
- incoming_call_hangup.add_event_cb(lambda e: self.hangup(e),
- lv.EVENT.CLICKED, None)
+ self.meta = None
+
self.call_log = {}
self.call_log_value = {}
self.read_call_log = {}
self.number_tmp = {}
-
-
+ def initialization(self):
+ global incoming_call_screen,incoming_call_img,incoming_call_name_label,incoming_call_answer ,incoming_call_hangup
+ if incoming_call_screen == None :
+ # -------------------------------------------incoming_call screen----------------------------------------------------------
+ incoming_call_screen = lv.obj()
+ incoming_call_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ incoming_call_img = lv.img(incoming_call_screen)
+ incoming_call_img.set_pos(80, 20)
+ incoming_call_img.set_size(64, 64)
+ incoming_call_img.set_src("E:/static/IMAGE_NOTICE_CALL.png")
+ incoming_call_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ incoming_call_name_label = lv.label(incoming_call_screen)
+ incoming_call_name_label.set_pos(0, 140)
+ incoming_call_name_label.set_size(240, 50)
+ incoming_call_name_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ incoming_call_name_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ incoming_call_answer = lv.img(incoming_call_screen)
+ incoming_call_answer.set_size(64, 64)
+ incoming_call_answer.add_flag(lv.obj.FLAG.CLICKABLE)
+ incoming_call_answer.set_pos(30, 220)
+ incoming_call_answer.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ incoming_call_answer.set_src("E:/static/answer.png")
+
+ incoming_call_hangup = lv.img(incoming_call_screen)
+ incoming_call_hangup.set_size(64, 64)
+ incoming_call_hangup.add_flag(lv.obj.FLAG.CLICKABLE)
+ incoming_call_hangup.set_pos(150, 220)
+ incoming_call_hangup.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ incoming_call_hangup.set_src("E:/static/hang_up.png")
+ incoming_call_answer.add_event_cb(lambda e: self.answer(e),
+ lv.EVENT.CLICKED, None)
+ incoming_call_hangup.add_event_cb(lambda e: self.hangup(e),
+ lv.EVENT.CLICKED, None)
+ self.meta = incoming_call_screen
def post_processor_after_initialization(self):
+ global incoming_call_screen,incoming_call_img,incoming_call_name_label,incoming_call_answer ,incoming_call_hangup
utime.sleep_ms(200)#不加延时会切屏
data = EventMesh.publish("get_phonebook_list")
check = data[0]
pass
-
-
-
+on_call_screen = None
+on_call_label_name = None
+on_call_second_label = None
+on_call_hangup = None
class OnCallScreen(Screen):
NAME = "on_call"
def __init__(self):
super().__init__()
- self.meta = on_call_screen
+ self.meta = None
self.count_sec = 0
- on_call_hangup.add_event_cb(lambda e: self.hangup(e),
- lv.EVENT.CLICKED, None)
self.timer = osTimer()
-
- def post_processor_after_initialization(self):
- self.count_sec = 0
- self.timer.start(1000,1,self.refresh)
+ def initialization(self):
+ global on_call_screen,on_call_label_name,on_call_second_label ,on_call_hangup
+ if on_call_screen ==None :
+ on_call_screen = lv.obj()
+ on_call_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_label_name = lv.label(on_call_screen)
+ on_call_label_name.set_pos(0, 100)
+ on_call_label_name.set_size(240, 50)
+ on_call_label_name.set_text(" ")
+ on_call_label_name.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ on_call_label_name.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ on_call_second_label = lv.label(on_call_screen)
+ on_call_second_label.set_pos(0, 160)
+ on_call_second_label.set_size(240, 50)
+ on_call_second_label.set_text("00:00")
+ on_call_second_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ on_call_second_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+ on_call_hangup = lv.img(on_call_screen)
+ on_call_hangup.set_size(64, 64)
+ on_call_hangup.add_flag(lv.obj.FLAG.CLICKABLE)
+ on_call_hangup.set_pos(85, 220)
+ on_call_hangup.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ on_call_hangup.set_src("E:/static/hang_up.png")
+ on_call_hangup.add_event_cb(lambda e: self.hangup(e),
+ lv.EVENT.CLICKED, None)
+ self.meta = on_call_screen
+
name = EventMesh.publish("get_phonename")
on_call_label_name.set_text(name)
# on_call_label.set_text(str(self.meta_info))
on_call_second_label.set_text("00:00")
+ def post_processor_after_initialization(self):
+ self.count_sec = 0
+ self.timer.start(1000,1,self.refresh)
+
+
def refresh(self,e):
+ global on_call_screen,on_call_label_name,on_call_second_label ,on_call_hangup
min = self.count_sec/60
sec = self.count_sec%60
if min > 99:
on_call_second_label.set_text(str(total))
self.count_sec+=1
-
def hangup(self,e):
voiceCall.callEnd()
def btn8_press(self):
EventMesh.publish("load_screen", {"screen": "main_menu"})
# -------------------------------------------step screen----------------------------------------------------------#
-step_screen = lv.obj()
-step_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-step_label = lv.label(step_screen)
-step_label.set_pos(10, 30)
-step_label.set_size(100, 50)
-step_label.set_text("今日步数")
-step_label.set_long_mode(lv.label.LONG.WRAP)
-step_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-step_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-step_label_01 = lv.label(step_screen)
-step_label_01.set_pos(0, 100)
-step_label_01.set_size(240, 50)
-step_label_01.set_text("0步")
-step_label_01.set_long_mode(lv.label.LONG.WRAP)
-step_label_01.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-step_label_01.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-step_img = lv.img(step_screen)
-step_img.set_pos(100, 150)
-step_img.set_size(40, 65)
-step_img.set_src("E:/static/IMAGE_STEP.png")
-step_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+step_screen = None
+step_label = None
+step_label_01 = None
+step_img = None
class StepScreen(Screen):
NAME = "step"
-
+
def __init__(self):
super().__init__()
- self.meta = step_screen
+ self.meta = None
self.timer = osTimer()
- def initialization(self):
+ def initialization(self):
+ global step_screen,step_label ,step_label_01 ,step_img
+ if step_screen == None:
+ step_screen = lv.obj()
+ step_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ step_label = lv.label(step_screen)
+ step_label.set_pos(10, 30)
+ step_label.set_size(100, 50)
+ step_label.set_text("今日步数")
+ step_label.set_long_mode(lv.label.LONG.WRAP)
+ step_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ step_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ step_label_01 = lv.label(step_screen)
+ step_label_01.set_pos(0, 100)
+ step_label_01.set_size(240, 50)
+ step_label_01.set_text("0步")
+ step_label_01.set_long_mode(lv.label.LONG.WRAP)
+ step_label_01.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ step_label_01.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ step_img = lv.img(step_screen)
+ step_img.set_pos(100, 150)
+ step_img.set_size(40, 65)
+ step_img.set_src("E:/static/IMAGE_STEP.png")
+ step_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = step_screen
+
step = EventMesh.publish(constants.EVENT.GET_STEP)
step_label_01.set_text("{}步".format(step[0]))
self.timer.start(1000, 1, self.revcing)
def revcing(self, *args, **kwargs):
+ global step_screen,step_label ,step_label_01 ,step_img
step = EventMesh.publish(constants.EVENT.GET_STEP)
step_label_01.set_text("{}步".format(step[0]))
EventMesh.publish("load_screen", {"screen": "toolbox"})
# -------------------------------------------weather screen----------------------------------------------------------
-weather_screen = lv.obj()
-weather_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-weather_img = lv.img(weather_screen)
-weather_img.set_pos(10, 10)
-weather_img.set_size(135, 120)
-
-weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-no_weather_img = lv.img(weather_screen)
-no_weather_img.set_pos(10, 10)
-no_weather_img.set_size(135, 120)
-no_weather_img.set_src("E:/static/update.png")
-no_weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-weather_tem_label = lv.label(weather_screen)
-weather_tem_label.set_pos(155, 44)
-weather_tem_label.set_size(60, 50)
-weather_tem_label.set_text("_ _")
-weather_tem_label.set_long_mode(lv.label.LONG.WRAP)
-weather_tem_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-weather_tem_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-no_weather_degree = lv.img(weather_screen)
-no_weather_degree.set_pos(200, 40)
-no_weather_degree.set_size(22, 22)
-no_weather_degree.set_src("E:/static/degree.png")
-no_weather_degree.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-weather_detail_label = lv.label(weather_screen)
-weather_detail_label.set_pos(155, 80)
-weather_detail_label.set_size(85, 50)
-weather_detail_label.set_text("-/-")
-weather_detail_label.set_long_mode(lv.label.LONG.WRAP)
-weather_detail_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-weather_detail_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-weather_location_label = lv.label(weather_screen)
-weather_location_label.set_pos(0, 200)
-weather_location_label.set_size(240, 50)
-weather_location_label.set_text("--")
-weather_location_label.set_long_mode(lv.label.LONG.WRAP)
-weather_location_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-weather_location_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-no_connect_label = lv.label(weather_screen)
-no_connect_label.set_pos(0, 200)
-no_connect_label.set_size(240, 40)
-no_connect_label.set_text("找不到服务器")
-no_connect_label.set_long_mode(lv.label.LONG.WRAP)
-no_connect_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-no_connect_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-no_connect_label1 = lv.label(weather_screen)
-no_connect_label1.set_pos(0, 250)
-no_connect_label1.set_size(240, 70)
-no_connect_label1.set_text("请联网后重试")
-no_connect_label1.set_long_mode(lv.label.LONG.WRAP)
-no_connect_label1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-no_connect_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+weather_screen = None
+weather_img = None
+no_weather_img = None
+weather_tem_label = None
+no_weather_degree = None
+weather_detail_label = None
+weather_location_label = None
+no_connect_label = None
+no_connect_label1 = None
class WeatherScreen(Screen):
NAME = "weather"
-
+
def __init__(self):
super().__init__()
- self.meta = weather_screen
+ self.meta = None
self.weather_data = {}
EventMesh.subscribe("updata_weather_show", self.update_weather_data)
+ def initialization(self):
+ global weather_screen,weather_img,no_weather_img,weather_tem_label,no_weather_degree,\
+ weather_detail_label,weather_location_label,no_connect_label ,no_connect_label1
+ if weather_screen == None :
+ weather_screen = lv.obj()
+ weather_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ weather_img = lv.img(weather_screen)
+ weather_img.set_pos(10, 10)
+ weather_img.set_size(135, 120)
+
+ weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_weather_img = lv.img(weather_screen)
+ no_weather_img.set_pos(10, 10)
+ no_weather_img.set_size(135, 120)
+ no_weather_img.set_src("E:/static/update.png")
+ no_weather_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ weather_tem_label = lv.label(weather_screen)
+ weather_tem_label.set_pos(155, 44)
+ weather_tem_label.set_size(60, 50)
+ weather_tem_label.set_text("_ _")
+ weather_tem_label.set_long_mode(lv.label.LONG.WRAP)
+ weather_tem_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ weather_tem_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_weather_degree = lv.img(weather_screen)
+ no_weather_degree.set_pos(200, 40)
+ no_weather_degree.set_size(22, 22)
+ no_weather_degree.set_src("E:/static/degree.png")
+ no_weather_degree.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ weather_detail_label = lv.label(weather_screen)
+ weather_detail_label.set_pos(155, 80)
+ weather_detail_label.set_size(85, 50)
+ weather_detail_label.set_text("-/-")
+ weather_detail_label.set_long_mode(lv.label.LONG.WRAP)
+ weather_detail_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ weather_detail_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ weather_location_label = lv.label(weather_screen)
+ weather_location_label.set_pos(0, 200)
+ weather_location_label.set_size(240, 50)
+ weather_location_label.set_text("--")
+ weather_location_label.set_long_mode(lv.label.LONG.WRAP)
+ weather_location_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ weather_location_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_connect_label = lv.label(weather_screen)
+ no_connect_label.set_pos(0, 200)
+ no_connect_label.set_size(240, 40)
+ no_connect_label.set_text("找不到服务器")
+ no_connect_label.set_long_mode(lv.label.LONG.WRAP)
+ no_connect_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_connect_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ no_connect_label1 = lv.label(weather_screen)
+ no_connect_label1.set_pos(0, 250)
+ no_connect_label1.set_size(240, 70)
+ no_connect_label1.set_text("请联网后重试")
+ no_connect_label1.set_long_mode(lv.label.LONG.WRAP)
+ no_connect_label1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ no_connect_label1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = weather_screen
def post_processor_after_initialization(self):
EventMesh.publish("updata_weather_show")
def update_weather_data(self, event, msg):
-
+ global weather_screen,weather_img,no_weather_img,weather_tem_label,no_weather_degree,\
+ weather_detail_label,weather_location_label,no_connect_label ,no_connect_label1
connect = EventMesh.publish(constants.EVENT.GET_CONNECT) #获取网络状态
self.weather_data = EventMesh.publish("get_weather_data")
if connect != 0:
# -----------------------------联系人--------------contacts screen----------------------------------------------------------
-contacts_screen = lv.obj()
-contacts_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-contacts_screen.set_scrollbar_mode(0)
-
-contacts_cont= lv.obj(contacts_screen)
-contacts_cont.set_pos(0, 50)
-contacts_cont.set_size(240, 270)
-contacts_cont.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
-contacts_cont.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-contacts_top_title = lv.label(contacts_screen)
-contacts_top_title.set_pos(0, 10)
-contacts_top_title.set_size(240, 40)
-contacts_top_title.set_text("联系人")
-contacts_top_title.set_long_mode(lv.label.LONG.WRAP)
-contacts_top_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-contacts_top_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-
-contact_none_label = lv.label(contacts_cont)
-contact_none_label.set_pos(0, 120)
-contact_none_label.set_size(240, 60)
-contact_none_label.set_text("空")
-contact_none_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-contact_none_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
CONTACT_FLAG = 0
-
+contacts_screen = None
+contacts_cont = None
+contacts_top_title = None
+contact_none_label = None
class ContactsScreen(Screen):
NAME = "contacts"
def __init__(self):
super().__init__()
- self.meta = contacts_screen
+ self.meta = None
self.phonebook = {}
self.count = 0
self.phone_num_count = 0
self.name = []
self.check_json = 0
self.timer = osTimer()
- self.contact_detail_list = lv.obj(contacts_screen)
+ self.contact_detail_list = None
EventMesh.subscribe("contact_updata_list_show", self.btn_create_list)
def post_processor_before_initialization(self):
self.count = 0
def initialization(self):
+ global contacts_screen,contacts_cont,contacts_top_title,contact_none_label
+ if contacts_screen == None:
+ contacts_screen = lv.obj()
+ contacts_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ contacts_screen.set_scrollbar_mode(0)
+
+ contacts_cont= lv.obj(contacts_screen)
+ contacts_cont.set_pos(0, 50)
+ contacts_cont.set_size(240, 270)
+ contacts_cont.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ contacts_cont.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ contacts_top_title = lv.label(contacts_screen)
+ contacts_top_title.set_pos(0, 10)
+ contacts_top_title.set_size(240, 40)
+ contacts_top_title.set_text("联系人")
+ contacts_top_title.set_long_mode(lv.label.LONG.WRAP)
+ contacts_top_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ contacts_top_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+
+
+ contact_none_label = lv.label(contacts_cont)
+ contact_none_label.set_pos(0, 120)
+ contact_none_label.set_size(240, 60)
+ contact_none_label.set_text("空")
+ contact_none_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ contact_none_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = contacts_screen
+ self.contact_detail_list = lv.obj(contacts_screen)
#读取json文件中的字典放到self.phonebook中
#创建btn
self.count = 0
self.btn_create_list_show(1)
def btn_create_list_show(self,state):
-
+ global contacts_screen,contacts_cont,contacts_top_title,contact_none_label
#读取json文件中的键作为label文本;
if self.check_json == True and len(self.phonebook) != 0:
contact_none_label.add_flag(lv.obj.FLAG.HIDDEN)#隐藏空文本
def btn8_press(self):
EventMesh.publish("load_screen", {"screen": "main_menu"})
+# -------------------------------------------temperature screen----------------------------------------------------------
-
-
-
-class AlarmScreen(Screen):
- NAME = "alarm"
-
- def __init__(self):
- super().__init__()
- self.meta = alarm_screen
- self.count = 2
-
- def post_processor_after_initialization(self):
- self.btn_create()
-
- def btn_create(self):
- for i in range(self.count):
-
- _btn = lv.btn(alarm)
- _btn.set_size(240,50)
- _btn.set_pos(0, 52*i + 50)
- _btn.add_style(style_contact_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
- _btn.add_style(style_contact_btn_pressed, lv.PART.MAIN | lv.STATE.PRESSED)
-
- _label = lv.label(_btn)
- _label.set_text("08:00")
- _label.set_pos(2, 0)
- _label.set_size(100, 25)
-
- _label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
- #频率
- _label2 = lv.label(_btn)
- _label2.set_pos(2, 25)
- _label2.set_size(100, 25)
- _label2.set_text("一 二 三")
- _label2.set_long_mode(lv.label.LONG.DOT)
- _label2.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
- #开关
- _switch = lv.switch(_btn)
- _switch.set_pos(150, 3)
- _switch.set_size(50, 25)
- _switch.set_style_bg_color(lv.color_make(0xff, 0xff, 0xff),lv.PART.MAIN | lv.PART.INDICATOR)
- _switch.set_style_bg_color(lv.color_make(0xff, 0x00, 0x00),lv.PART.KNOB)
-
-
-
- def done_return(self):
- EventMesh.publish("load_screen", {"screen": "toolbox"})
-
- def btn1_release(self):
- EventMesh.publish("load_screen", {"screen": "main_menu"})
-
- def btn8_press(self):
- EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-
+temperature_screen = None
+temperature_bg_img = None
+temperature_body_label = None
+temperature_degree_img = None
+temperature_value_label = None
+temperature_wrist_label = None
+temperature_wrist_degree_img = None
+temperature_wrist_value_label = None
class TemperatureScreen(Screen):
NAME = "temperature"
def __init__(self):
super().__init__()
- self.meta = temperature_screen
+ self.meta = None
+
+ def initialization(self):
+ global temperature_screen,temperature_bg_img ,temperature_body_label ,temperature_degree_img ,temperature_value_label,\
+ temperature_wrist_label,temperature_wrist_degree_img ,temperature_wrist_value_label
+ if temperature_screen == None:
+ temperature_screen = lv.obj()
+ temperature_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_bg_img = lv.img(temperature_screen)
+ temperature_bg_img.set_pos(0, 0)
+ temperature_bg_img.set_size(71, 170)
+ temperature_bg_img.set_src("E:/static/temp_bg.png")
+ temperature_bg_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_body_label = lv.label(temperature_screen)
+ temperature_body_label.set_pos(80, 40)
+ temperature_body_label.set_size(100, 20)
+ temperature_body_label.set_text("当前体温")
+ temperature_body_label.set_long_mode(lv.label.LONG.WRAP)
+ temperature_body_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ temperature_body_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_degree_img = lv.img(temperature_screen)
+ temperature_degree_img.set_pos(150, 70)
+ temperature_degree_img.set_size(22, 22)
+ temperature_degree_img.set_src("E:/static/degree.png")
+ temperature_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_value_label = lv.label(temperature_screen)
+ temperature_value_label.set_pos(100,70)
+ temperature_value_label.set_size(50, 20)
+ temperature_value_label.set_text("36.1")
+ temperature_value_label.set_long_mode(lv.label.LONG.WRAP)
+ temperature_value_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ temperature_value_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_wrist_label = lv.label(temperature_screen)
+ temperature_wrist_label.set_pos(80,120)
+ temperature_wrist_label.set_size(100, 20)
+ temperature_wrist_label.set_text("当前腕温")
+ temperature_wrist_label.set_long_mode(lv.label.LONG.WRAP)
+ temperature_wrist_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ temperature_wrist_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_wrist_degree_img = lv.img(temperature_screen)
+ temperature_wrist_degree_img.set_pos(150, 150)
+ temperature_wrist_degree_img.set_size(22, 22)
+ temperature_wrist_degree_img.set_src("E:/static/degree.png")
+ temperature_wrist_degree_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ temperature_wrist_value_label = lv.label(temperature_screen)
+ temperature_wrist_value_label.set_pos(100,150)
+ temperature_wrist_value_label.set_size(50, 20)
+ temperature_wrist_value_label.set_text("24.9")
+ temperature_wrist_value_label.set_long_mode(lv.label.LONG.WRAP)
+ temperature_wrist_value_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ temperature_wrist_value_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ self.meta = temperature_screen
def done_return(self):
EventMesh.publish("load_screen", {"screen": "main_menu"})
def btn8_press(self):
EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-spo2_screen = lv.obj()
-spo2_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-spo2_label = lv.label(spo2_screen)
-spo2_label.set_pos(0, 10)
-spo2_label.set_size(240, 40)
-spo2_label.set_text("血氧")
-spo2_label.set_long_mode(lv.label.LONG.WRAP)
-spo2_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-spo2_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-spo2_done_img = lv.img(spo2_screen)
-spo2_done_img.set_pos(0, 50)
-spo2_done_img.set_size(240, 96)
-spo2_done_img.set_src("E:/static/IMAGE_SPO2_ONLY_TEST_DONE.jpg")
-
-# spo2_finish_gif = lv.gif(spo2_screen)
-# spo2_finish_gif.set_pos(0, 40)
-# spo2_finish_gif.set_size(240, 120)
-# #spo2_finish_img.add_flag(lv.obj.FLAG.CLICKABLE)
-# spo2_finish_gif.set_src("E:/static/IMAGE_SPO2_ONLY_ANI.gif")
-# #spo2_finish_gif.set_opa(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-spo2_label = lv.label(spo2_screen)
-spo2_label.set_size(240,30)
-spo2_label.set_pos(0,160)
-spo2_label.set_text(" ")
-spo2_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-spo2_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-spo2_label_1 = lv.label(spo2_screen)
-spo2_label_1.set_size(240,40)
-spo2_label_1.set_pos(0,200)
-spo2_label_1.set_text(" ")
-spo2_label_1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-spo2_label_1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-
-
line_points = [{"x":0,"y":0},{"x":240,"y":0}]
-spo2_line = lv.line(spo2_screen)
-spo2_line.set_points(line_points,2)
-spo2_line.set_pos(0,240)
-spo2_line.set_size(240,10)
-spo2_line.add_style(style_line,0)
-
-
-
-
-spo2_last_time = lv.label(spo2_screen)
-spo2_last_time.set_size(240, 15)
-spo2_last_time.set_pos(0, 250)
-spo2_last_time.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-spo2_last_time.set_text(" ")
-spo2_last_time.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-
-spo2_last_value = lv.label(spo2_screen)
-spo2_last_value.set_size(240, 15)
-spo2_last_value.set_pos(0, 280)
-spo2_last_value.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-spo2_last_value.set_text(" ")
-spo2_last_value.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-
-
+spo2_screen = None
+spo2_label_0 = None
+spo2_done_img = None
+spo2_label = None
+spo2_label_1 = None
+spo2_line = None
+spo2_last_time = None
+spo2_last_value = None
class Spo2Screen(Screen):
NAME = "spo2"
def __init__(self):
super().__init__()
- self.meta = spo2_screen
+ self.meta = None
self.timer = osTimer()
self.point = 0
self.spo2_value = 0
self.last_spo2_value = 0
+ def initialization(self):
+ global spo2_screen ,spo2_label_0 ,spo2_done_img ,spo2_label ,spo2_label_1 ,spo2_line ,spo2_last_time,spo2_last_value
+ if spo2_screen == None:
+ spo2_screen = lv.obj()
+ spo2_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ spo2_label_0 = lv.label(spo2_screen)
+ spo2_label_0.set_pos(0, 10)
+ spo2_label_0.set_size(240, 40)
+ spo2_label_0.set_text("血氧")
+ spo2_label_0.set_long_mode(lv.label.LONG.WRAP)
+ spo2_label_0.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ spo2_label_0.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ spo2_done_img = lv.img(spo2_screen)
+ spo2_done_img.set_pos(0, 50)
+ spo2_done_img.set_size(240, 96)
+ spo2_done_img.set_src("E:/static/IMAGE_SPO2_ONLY_TEST_DONE.jpg")
+
+ spo2_label = lv.label(spo2_screen)
+ spo2_label.set_size(240,30)
+ spo2_label.set_pos(0,160)
+ spo2_label.set_text(" ")
+ spo2_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ spo2_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ spo2_label_1 = lv.label(spo2_screen)
+ spo2_label_1.set_size(240,40)
+ spo2_label_1.set_pos(0,200)
+ spo2_label_1.set_text(" ")
+ spo2_label_1.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ spo2_label_1.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ spo2_line = lv.line(spo2_screen)
+ spo2_line.set_points(line_points,2)
+ spo2_line.set_pos(0,240)
+ spo2_line.set_size(240,10)
+ spo2_line.add_style(style_line,0)
+
+ spo2_last_time = lv.label(spo2_screen)
+ spo2_last_time.set_size(240, 15)
+ spo2_last_time.set_pos(0, 250)
+ spo2_last_time.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ spo2_last_time.set_text(" ")
+ spo2_last_time.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+
+ spo2_last_value = lv.label(spo2_screen)
+ spo2_last_value.set_size(240, 15)
+ spo2_last_value.set_pos(0, 280)
+ spo2_last_value.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ spo2_last_value.set_text(" ")
+ spo2_last_value.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ self.meta = spo2_screen
- def post_processor_after_initialization(self):
self.point = 0
self.spo2_value = 0
self.timer.start(1*1000, 1, self.start_measure)
spo2_last_value.set_text("{}%".format(self.last_spo2_value))
def start_measure(self,*args):
+ global spo2_screen ,spo2_label_0 ,spo2_done_img ,spo2_label ,spo2_label_1 ,spo2_line ,spo2_last_time,spo2_last_value
self.point = self.point + 1
EventMesh.publish("system_sleep_rest")#防止黑屏
self.spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
def btn8_press(self):
EventMesh.publish("load_screen", {"screen": "main_menu"})
# -------------------------------------------countdown screen----------------------------------------------------------
-countdown_screen = lv.obj()
-countdown_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-countdown_title = lv.label(countdown_screen)
-countdown_title.set_pos(0, 20)
-countdown_title.set_size(240, 20)
-countdown_title.set_text("倒计时")
-countdown_title.set_long_mode(lv.label.LONG.WRAP)
-countdown_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-countdown_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-countdown_hour = lv.label(countdown_screen)
-countdown_hour.set_pos(30, 140)
-countdown_hour.set_size(60, 30)
-countdown_hour.set_text("00")
-countdown_hour.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-countdown_hour.set_long_mode(lv.label.LONG.WRAP)
-countdown_hour.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
-
-countdown_mao = lv.label(countdown_screen)
-countdown_mao.set_pos(82, 138)
-countdown_mao.set_size(30, 30)
-countdown_mao.set_text(":")
-countdown_mao.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-countdown_mao.set_long_mode(lv.label.LONG.WRAP)
-countdown_mao.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
-
-
-countdown_min = lv.label(countdown_screen)
-countdown_min.set_pos(95, 140)
-countdown_min.set_size(60, 30)
-countdown_min.set_text("00")
-countdown_min.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-countdown_min.set_long_mode(lv.label.LONG.WRAP)
-countdown_min.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
-
-countdown_mao1 = lv.label(countdown_screen)
-countdown_mao1.set_pos(146, 138)
-countdown_mao1.set_size(30, 30)
-countdown_mao1.set_text(":")
-countdown_mao1.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-countdown_mao1.set_long_mode(lv.label.LONG.WRAP)
-countdown_mao1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
-
-
-countdown_sec = lv.label(countdown_screen)
-countdown_sec.set_pos(160, 140)
-countdown_sec.set_size(60, 30)
-countdown_sec.set_text("00")
-countdown_sec.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-countdown_sec.set_long_mode(lv.label.LONG.WRAP)
-countdown_sec.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
-
-countdown_hour_up = lv.img(countdown_screen)
-countdown_hour_up.set_size(34, 30)
-countdown_hour_up.set_pos(36, 100)
-countdown_hour_up.set_src("E:/static/time_up.png")
-countdown_hour_up.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-countdown_hour_up_btn= lv.img(countdown_screen)
-countdown_hour_up_btn.set_size(62, 70)
-countdown_hour_up_btn.set_pos(20, 80)
-countdown_hour_up_btn.add_flag(lv.obj.FLAG.CLICKABLE)
-
-
-countdown_hour_down = lv.img(countdown_screen)
-countdown_hour_down.set_size(34, 30)
-countdown_hour_down.set_pos(36, 180)
-countdown_hour_down.set_src("E:/static/time_down.png")
-countdown_hour_down.add_flag(lv.obj.FLAG.CLICKABLE)
-countdown_hour_down.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-countdown_hour_down_btn= lv.img(countdown_screen)
-countdown_hour_down_btn.set_size(62, 80)
-countdown_hour_down_btn.set_pos(20, 150)
-countdown_hour_down_btn.add_flag(lv.obj.FLAG.CLICKABLE)
-
-
-countdown_min_up = lv.img(countdown_screen)
-countdown_min_up.set_size(34, 30)
-countdown_min_up.set_pos(99, 100)
-countdown_min_up.set_src("E:/static/time_up.png")
-countdown_min_up.add_flag(lv.obj.FLAG.CLICKABLE)
-countdown_min_up.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-countdown_min_up_btn= lv.img(countdown_screen)
-countdown_min_up_btn.set_size(64, 70)
-countdown_min_up_btn.set_pos(82, 80)
-countdown_min_up_btn.add_flag(lv.obj.FLAG.CLICKABLE)
-
-
-
-countdown_min_down = lv.img(countdown_screen)
-countdown_min_down.set_size(34, 30)
-countdown_min_down.set_pos(99, 180)
-countdown_min_down.set_src("E:/static/time_down.png")
-countdown_min_down.add_flag(lv.obj.FLAG.CLICKABLE)
-countdown_min_down.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-countdown_min_down_btn= lv.img(countdown_screen)
-countdown_min_down_btn.set_size(64, 80)
-countdown_min_down_btn.set_pos(82, 150)
-countdown_min_down_btn.add_flag(lv.obj.FLAG.CLICKABLE)
-
-
-countdown_sec_up = lv.img(countdown_screen)
-countdown_sec_up.set_size(34, 30)
-countdown_sec_up.set_pos(165, 100)
-countdown_sec_up.set_src("E:/static/time_up.png")
-countdown_sec_up.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-countdown_sec_up_btn = lv.img(countdown_screen)
-countdown_sec_up_btn.set_size(64, 70)
-countdown_sec_up_btn.set_pos(146, 80)
-countdown_sec_up_btn.add_flag(lv.obj.FLAG.CLICKABLE)
-
-countdown_sec_down = lv.img(countdown_screen)
-countdown_sec_down.set_size(34, 30)
-countdown_sec_down.set_pos(165, 180)
-countdown_sec_down.set_src("E:/static/time_down.png")
-countdown_sec_down.add_flag(lv.obj.FLAG.CLICKABLE)
-countdown_sec_down.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-countdown_sec_down_btn = lv.img(countdown_screen)
-countdown_sec_down_btn.set_size(64, 80)
-countdown_sec_down_btn.set_pos(146, 150)
-countdown_sec_down_btn.add_flag(lv.obj.FLAG.CLICKABLE)
-
-countdown_reset_img = lv.img(countdown_screen)
-countdown_reset_img.set_size(99, 36)
-countdown_reset_img.set_src("E:/static/stopwatch_reset.png")
-countdown_reset_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-countdown_reset_img.set_pos(10, 260)
-
-countdown_reset_imgbtn = lv.img(countdown_screen)
-countdown_reset_imgbtn.set_size(99, 70)
-countdown_reset_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
-countdown_reset_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-countdown_reset_imgbtn.set_pos(10, 240)
-
-
-
-countdown_start_img = lv.img(countdown_screen)
-countdown_start_img.set_size(99, 36)
-countdown_start_img.set_src("E:/static/stopwatch_play.png")
-countdown_start_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-countdown_start_img.set_pos(120, 260)
-
-countdown_start_imgbtn = lv.img(countdown_screen)
-countdown_start_imgbtn.set_size(99, 70)
-countdown_start_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
-countdown_start_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-countdown_start_imgbtn.set_pos(120, 240)
-
-
-
-countdown_stop_img = lv.img(countdown_screen)
-countdown_stop_img.set_size(99, 36)
-countdown_stop_img.set_src("E:/static/stopwatch_stop.png")
-countdown_stop_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-countdown_stop_img.set_pos(120, 260)
-countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
-
-#............................................................................................
+countdown_screen = None
+countdown_title = None
+countdown_hour = None
+countdown_mao = None
+countdown_mao = None
+countdown_mao1 = None
+countdown_sec = None
+countdown_hour_up = None
+countdown_hour_up_btn = None
+countdown_hour_down = None
+countdown_hour_down_btn = None
+countdown_min_up = None
+countdown_min_up_btn = None
+countdown_min_down = None
+countdown_min_down_btn = None
+countdown_sec_up = None
+countdown_sec_up_btn = None
+countdown_sec_down = None
+countdown_sec_down_btn = None
+countdown_reset_img = None
+countdown_reset_imgbtn = None
+countdown_start_img = None
+countdown_start_imgbtn = None
+countdown_stop_img = None
+countdown_min = None
class CountdownScreen(Screen):
NAME = "countdown"
def __init__(self):
super().__init__()
- self.meta = countdown_screen
+ self.meta = None
self.timer = Timer(Timer.Timer1)
self.sec = 0
self.min = 0
self.g_state = 0
self.g_end = 0
self.total = 0
- countdown_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
- countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
- countdown_reset_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+
+ def initialization(self):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
+ if countdown_screen == None :
+ countdown_screen = lv.obj()
+ countdown_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_title = lv.label(countdown_screen)
+ countdown_title.set_pos(0, 20)
+ countdown_title.set_size(240, 20)
+ countdown_title.set_text("倒计时")
+ countdown_title.set_long_mode(lv.label.LONG.WRAP)
+ countdown_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ countdown_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_hour = lv.label(countdown_screen)
+ countdown_hour.set_pos(30, 140)
+ countdown_hour.set_size(60, 30)
+ countdown_hour.set_text("00")
+ countdown_hour.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_hour.set_long_mode(lv.label.LONG.WRAP)
+ countdown_hour.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ countdown_mao = lv.label(countdown_screen)
+ countdown_mao.set_pos(82, 138)
+ countdown_mao.set_size(30, 30)
+ countdown_mao.set_text(":")
+ countdown_mao.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_mao.set_long_mode(lv.label.LONG.WRAP)
+ countdown_mao.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+ countdown_min = lv.label(countdown_screen)
+ countdown_min.set_pos(95, 140)
+ countdown_min.set_size(60, 30)
+ countdown_min.set_text("00")
+ countdown_min.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_min.set_long_mode(lv.label.LONG.WRAP)
+ countdown_min.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ countdown_mao1 = lv.label(countdown_screen)
+ countdown_mao1.set_pos(146, 138)
+ countdown_mao1.set_size(30, 30)
+ countdown_mao1.set_text(":")
+ countdown_mao1.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_mao1.set_long_mode(lv.label.LONG.WRAP)
+ countdown_mao1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+ countdown_sec = lv.label(countdown_screen)
+ countdown_sec.set_pos(160, 140)
+ countdown_sec.set_size(60, 30)
+ countdown_sec.set_text("00")
+ countdown_sec.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_sec.set_long_mode(lv.label.LONG.WRAP)
+ countdown_sec.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ countdown_hour_up = lv.img(countdown_screen)
+ countdown_hour_up.set_size(34, 30)
+ countdown_hour_up.set_pos(36, 100)
+ countdown_hour_up.set_src("E:/static/time_up.png")
+ countdown_hour_up.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_hour_up_btn= lv.img(countdown_screen)
+ countdown_hour_up_btn.set_size(62, 70)
+ countdown_hour_up_btn.set_pos(20, 80)
+ countdown_hour_up_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+ countdown_hour_down = lv.img(countdown_screen)
+ countdown_hour_down.set_size(34, 30)
+ countdown_hour_down.set_pos(36, 180)
+ countdown_hour_down.set_src("E:/static/time_down.png")
+ countdown_hour_down.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_hour_down.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_hour_down_btn= lv.img(countdown_screen)
+ countdown_hour_down_btn.set_size(62, 80)
+ countdown_hour_down_btn.set_pos(20, 150)
+ countdown_hour_down_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+ countdown_min_up = lv.img(countdown_screen)
+ countdown_min_up.set_size(34, 30)
+ countdown_min_up.set_pos(99, 100)
+ countdown_min_up.set_src("E:/static/time_up.png")
+ countdown_min_up.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_min_up.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_min_up_btn= lv.img(countdown_screen)
+ countdown_min_up_btn.set_size(64, 70)
+ countdown_min_up_btn.set_pos(82, 80)
+ countdown_min_up_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+
+ countdown_min_down = lv.img(countdown_screen)
+ countdown_min_down.set_size(34, 30)
+ countdown_min_down.set_pos(99, 180)
+ countdown_min_down.set_src("E:/static/time_down.png")
+ countdown_min_down.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_min_down.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_min_down_btn= lv.img(countdown_screen)
+ countdown_min_down_btn.set_size(64, 80)
+ countdown_min_down_btn.set_pos(82, 150)
+ countdown_min_down_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+
+ countdown_sec_up = lv.img(countdown_screen)
+ countdown_sec_up.set_size(34, 30)
+ countdown_sec_up.set_pos(165, 100)
+ countdown_sec_up.set_src("E:/static/time_up.png")
+ countdown_sec_up.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_sec_up_btn = lv.img(countdown_screen)
+ countdown_sec_up_btn.set_size(64, 70)
+ countdown_sec_up_btn.set_pos(146, 80)
+ countdown_sec_up_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+ countdown_sec_down = lv.img(countdown_screen)
+ countdown_sec_down.set_size(34, 30)
+ countdown_sec_down.set_pos(165, 180)
+ countdown_sec_down.set_src("E:/static/time_down.png")
+ countdown_sec_down.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_sec_down.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_sec_down_btn = lv.img(countdown_screen)
+ countdown_sec_down_btn.set_size(64, 80)
+ countdown_sec_down_btn.set_pos(146, 150)
+ countdown_sec_down_btn.add_flag(lv.obj.FLAG.CLICKABLE)
+
+ countdown_reset_img = lv.img(countdown_screen)
+ countdown_reset_img.set_size(99, 36)
+ countdown_reset_img.set_src("E:/static/stopwatch_reset.png")
+ countdown_reset_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_reset_img.set_pos(10, 260)
+
+ countdown_reset_imgbtn = lv.img(countdown_screen)
+ countdown_reset_imgbtn.set_size(99, 70)
+ countdown_reset_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_reset_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_reset_imgbtn.set_pos(10, 240)
+
+
+
+ countdown_start_img = lv.img(countdown_screen)
+ countdown_start_img.set_size(99, 36)
+ countdown_start_img.set_src("E:/static/stopwatch_play.png")
+ countdown_start_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_start_img.set_pos(120, 260)
+
+ countdown_start_imgbtn = lv.img(countdown_screen)
+ countdown_start_imgbtn.set_size(99, 70)
+ countdown_start_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ countdown_start_imgbtn.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_start_imgbtn.set_pos(120, 240)
+
+
+
+ countdown_stop_img = lv.img(countdown_screen)
+ countdown_stop_img.set_size(99, 36)
+ countdown_stop_img.set_src("E:/static/stopwatch_stop.png")
+ countdown_stop_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_stop_img.set_pos(120, 260)
+ countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ countdown_reset_img.clear_flag(lv.obj.FLAG.HIDDEN)
+
+ self.meta = countdown_screen
+
+ countdown_sec_up_btn.add_event_cb(lambda e: self.sec_up(e),
+ lv.EVENT.CLICKED, None)
+ countdown_sec_down_btn.add_event_cb(lambda e: self.sec_down(e),
+ lv.EVENT.CLICKED, None)
+ countdown_min_up_btn.add_event_cb(lambda e: self.min_up(e),
+ lv.EVENT.CLICKED, None)
+ countdown_min_down_btn.add_event_cb(lambda e: self.min_down(e),
+ lv.EVENT.CLICKED, None)
+ countdown_hour_up_btn.add_event_cb(lambda e: self.hour_up(e),
+ lv.EVENT.CLICKED, None)
+ countdown_hour_down_btn.add_event_cb(lambda e: self.hour_down(e),
+ lv.EVENT.CLICKED, None)
+ countdown_start_imgbtn.add_event_cb(lambda e: self.start(e),
+ lv.EVENT.CLICKED, None)
+ countdown_reset_imgbtn.add_event_cb(lambda e: self.reset(e),
+ lv.EVENT.CLICKED, None)
+ # countdown_stop_imgbtn.add_event_cb(lambda e: self.stop(e),
+ # lv.EVENT.CLICKED, None)
- countdown_sec_up_btn.add_event_cb(lambda e: self.sec_up(e),
- lv.EVENT.CLICKED, None)
- countdown_sec_down_btn.add_event_cb(lambda e: self.sec_down(e),
- lv.EVENT.CLICKED, None)
- countdown_min_up_btn.add_event_cb(lambda e: self.min_up(e),
- lv.EVENT.CLICKED, None)
- countdown_min_down_btn.add_event_cb(lambda e: self.min_down(e),
- lv.EVENT.CLICKED, None)
- countdown_hour_up_btn.add_event_cb(lambda e: self.hour_up(e),
- lv.EVENT.CLICKED, None)
- countdown_hour_down_btn.add_event_cb(lambda e: self.hour_down(e),
- lv.EVENT.CLICKED, None)
- countdown_start_imgbtn.add_event_cb(lambda e: self.start(e),
- lv.EVENT.CLICKED, None)
- countdown_reset_imgbtn.add_event_cb(lambda e: self.reset(e),
- lv.EVENT.CLICKED, None)
- # countdown_stop_imgbtn.add_event_cb(lambda e: self.stop(e),
- # lv.EVENT.CLICKED, None)
-
- def post_processor_before_initialization(self):
if self.g_state == 0:
countdown_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
countdown_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
self.show_value()
def start(self,e):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
self.total = self.hour*60*60 + self.min*60 + self.sec
print("--00:",self.total,self.hour,self.min,self.sec,self.g_state)
if self.g_state == 1:
def stop(self):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
print("in stop")
countdown_hour_up.add_flag(lv.obj.FLAG.HIDDEN)
countdown_hour_down.add_flag(lv.obj.FLAG.HIDDEN)
# EventMesh.publish("load_screen", {"screen": "countdown"})
def fun(self,e):
-
-
self.hour = self.total//3600
self.min = self.total%3600//60
def reset(self,e):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
# print("in reset")
self.timer.stop()
self.hour = 0
self.show_value()
def show_value(self):
+ global countdown_screen ,countdown_title,countdown_hour ,countdown_mao ,countdown_mao ,countdown_mao1 ,\
+ countdown_sec ,countdown_hour_up ,countdown_hour_up_btn ,countdown_hour_down ,countdown_hour_down_btn ,\
+ countdown_min_up,countdown_min_up_btn ,countdown_min_down,countdown_min_down_btn,countdown_sec_up ,\
+ countdown_sec_up_btn,countdown_sec_down ,countdown_sec_down_btn ,countdown_reset_img ,countdown_reset_imgbtn ,\
+ countdown_start_img,countdown_start_imgbtn,countdown_stop_img ,countdown_min
countdown_sec.set_text(str("%02d"%(self.sec)))
countdown_min.set_text(str("%02d"%(self.min)))
countdown_hour.set_text(str("%02d"%(self.hour)))
self.timer.stop()
EventMesh.publish("load_screen", {"screen": "toolbox"})
#结束倒计时显示图标
-countdown_end_screen = lv.obj()
-countdown_end_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-countdown_end_img = lv.img(countdown_end_screen)
-countdown_end_img.set_size(140, 140)
-countdown_end_img.set_pos(50, 20)
-countdown_end_img.set_src("E:/static/time_finish.png")
-countdown_end_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-countdown_end_label = lv.label(countdown_end_screen)
-countdown_end_label.set_pos(0, 200)
-countdown_end_label.set_size(240, 40)
-countdown_end_label.set_text("时间到")
-countdown_end_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-countdown_end_label.set_long_mode(lv.label.LONG.WRAP)
-countdown_end_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+countdown_end_screen = None
+countdown_end_img = None
+countdown_end_label = None
class CountdownEndScreen(Screen):
NAME = "countdown_end"
def __init__(self):
super().__init__()
- self.meta = countdown_end_screen
+ self.meta = None
self.FIND_timer=osTimer()
self.aud = audio.Audio(0)
self.FIND_timer_count = 0
def initialization(self):
+ global countdown_end_screen ,countdown_end_img ,countdown_end_label
+ if countdown_end_screen == None:
+ countdown_end_screen = lv.obj()
+ countdown_end_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_end_img = lv.img(countdown_end_screen)
+ countdown_end_img.set_size(140, 140)
+ countdown_end_img.set_pos(50, 20)
+ countdown_end_img.set_src("E:/static/time_finish.png")
+ countdown_end_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ countdown_end_label = lv.label(countdown_end_screen)
+ countdown_end_label.set_pos(0, 200)
+ countdown_end_label.set_size(240, 40)
+ countdown_end_label.set_text("时间到")
+ countdown_end_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+ countdown_end_label.set_long_mode(lv.label.LONG.WRAP)
+ countdown_end_label.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ self.meta = countdown_end_screen
self.FIND_timer_count = 0
self.FIND_timer.start(3000, 1, self.FIND_timer_cb)
self.aud.play(1, 1, 'E:/static/audio_audio_haixiu.mp3') #播放声音
EventMesh.publish("load_screen", {"screen": "main_menu"})
# -------------------------------------------stopwatch screen----------------------------------------------------------
-stopwatch_screen = lv.obj()
-stopwatch_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-stopwatch_title = lv.label(stopwatch_screen)
-stopwatch_title.set_pos(0, 20)
-stopwatch_title.set_size(240, 20)
-stopwatch_title.set_text("秒表")
-stopwatch_title.set_long_mode(lv.label.LONG.WRAP)
-stopwatch_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-stopwatch_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-stopwatch_label_min = lv.label(stopwatch_screen)
-stopwatch_label_min.set_pos(30, 140)
-stopwatch_label_min.set_size(60, 30)
-stopwatch_label_min.set_text("00")
-stopwatch_label_min.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-stopwatch_label_min.set_long_mode(lv.label.LONG.WRAP)
-stopwatch_label_min.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
-
-stopwatch_mao = lv.label(stopwatch_screen)
-stopwatch_mao.set_pos(82, 138)
-stopwatch_mao.set_size(30, 30)
-stopwatch_mao.set_text(":")
-stopwatch_mao.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-stopwatch_mao.set_long_mode(lv.label.LONG.WRAP)
-stopwatch_mao.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
-
-
-stopwatch_label_sec = lv.label(stopwatch_screen)
-stopwatch_label_sec.set_pos(95, 140)
-stopwatch_label_sec.set_size(60, 30)
-stopwatch_label_sec.set_text("00")
-stopwatch_label_sec.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-stopwatch_label_sec.set_long_mode(lv.label.LONG.WRAP)
-stopwatch_label_sec.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
-
-stopwatch_mao1 = lv.label(stopwatch_screen)
-stopwatch_mao1.set_pos(146, 138)
-stopwatch_mao1.set_size(30, 30)
-stopwatch_mao1.set_text(".")
-stopwatch_mao1.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-stopwatch_mao1.set_long_mode(lv.label.LONG.WRAP)
-stopwatch_mao1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
-
-
-stopwatch_label_ms = lv.label(stopwatch_screen)
-stopwatch_label_ms.set_pos(160, 140)
-stopwatch_label_ms.set_size(60, 30)
-stopwatch_label_ms.set_text("0")
-stopwatch_label_ms.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-stopwatch_label_ms.set_long_mode(lv.label.LONG.WRAP)
-stopwatch_label_ms.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
-
-
-
-
-stopwatch_reset_img = lv.img(stopwatch_screen)
-stopwatch_reset_img.set_size(99, 36)
-stopwatch_reset_img.set_src("E:/static/stopwatch_reset.png")
-stopwatch_reset_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-stopwatch_reset_img.set_pos(10, 210)
-
-stopwatch_reset_imgbtn = lv.img(stopwatch_screen)
-stopwatch_reset_imgbtn.set_size(99, 76)
-stopwatch_reset_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
-stopwatch_reset_imgbtn.set_pos(10, 190)
-
-
-stopwatch_start_img = lv.img(stopwatch_screen)
-stopwatch_start_img.set_size(99, 36)
-stopwatch_start_img.set_src("E:/static/stopwatch_play.png")
-stopwatch_start_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-stopwatch_start_img.set_pos(115, 210)
-
-
-stopwatch_start_imgbtn = lv.img(stopwatch_screen)
-stopwatch_start_imgbtn.set_size(99, 76)
-stopwatch_start_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
-stopwatch_start_imgbtn.set_pos(115, 190)
-
-
-stopwatch_stop_img = lv.img(stopwatch_screen)
-stopwatch_stop_img.set_size(99, 36)
-stopwatch_stop_img.set_src("E:/static/stopwatch_stop.png")
-stopwatch_stop_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-stopwatch_stop_img.set_pos(115, 210)
-stopwatch_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+stopwatch_screen = None
+stopwatch_title = None
+stopwatch_label_min = None
+stopwatch_mao = None
+stopwatch_label_sec = None
+stopwatch_mao1 = None
+stopwatch_label_ms = None
+stopwatch_reset_img = None
+stopwatch_reset_imgbtn = None
+stopwatch_start_img = None
+stopwatch_start_imgbtn = None
+stopwatch_stop_img = None
class StopwatchScreen(Screen):
NAME = "stopwatch"
def __init__(self):
super().__init__()
- self.meta = stopwatch_screen
+ self.meta = None
self.ms_value = 0
self.sec_value = 0
self.min_value = 0
self.s_state = 0
self.timer = Timer(Timer.Timer1)
- stopwatch_start_imgbtn.add_event_cb(lambda e: self.start(e),
+
+ def initialization(self):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
+ if stopwatch_screen == None :
+ stopwatch_screen = lv.obj()
+ stopwatch_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ stopwatch_title = lv.label(stopwatch_screen)
+ stopwatch_title.set_pos(0, 20)
+ stopwatch_title.set_size(240, 20)
+ stopwatch_title.set_text("秒表")
+ stopwatch_title.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
+ stopwatch_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
+
+ stopwatch_label_min = lv.label(stopwatch_screen)
+ stopwatch_label_min.set_pos(30, 140)
+ stopwatch_label_min.set_size(60, 30)
+ stopwatch_label_min.set_text("00")
+ stopwatch_label_min.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_label_min.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_label_min.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ stopwatch_mao = lv.label(stopwatch_screen)
+ stopwatch_mao.set_pos(82, 138)
+ stopwatch_mao.set_size(30, 30)
+ stopwatch_mao.set_text(":")
+ stopwatch_mao.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_mao.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_mao.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+ stopwatch_label_sec = lv.label(stopwatch_screen)
+ stopwatch_label_sec.set_pos(95, 140)
+ stopwatch_label_sec.set_size(60, 30)
+ stopwatch_label_sec.set_text("00")
+ stopwatch_label_sec.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_label_sec.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_label_sec.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+ stopwatch_mao1 = lv.label(stopwatch_screen)
+ stopwatch_mao1.set_pos(146, 138)
+ stopwatch_mao1.set_size(30, 30)
+ stopwatch_mao1.set_text(".")
+ stopwatch_mao1.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_mao1.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_mao1.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+ stopwatch_label_ms = lv.label(stopwatch_screen)
+ stopwatch_label_ms.set_pos(160, 140)
+ stopwatch_label_ms.set_size(60, 30)
+ stopwatch_label_ms.set_text("0")
+ stopwatch_label_ms.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_label_ms.set_long_mode(lv.label.LONG.WRAP)
+ stopwatch_label_ms.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
+
+
+
+
+ stopwatch_reset_img = lv.img(stopwatch_screen)
+ stopwatch_reset_img.set_size(99, 36)
+ stopwatch_reset_img.set_src("E:/static/stopwatch_reset.png")
+ stopwatch_reset_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_reset_img.set_pos(10, 210)
+
+ stopwatch_reset_imgbtn = lv.img(stopwatch_screen)
+ stopwatch_reset_imgbtn.set_size(99, 76)
+ stopwatch_reset_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ stopwatch_reset_imgbtn.set_pos(10, 190)
+
+
+ stopwatch_start_img = lv.img(stopwatch_screen)
+ stopwatch_start_img.set_size(99, 36)
+ stopwatch_start_img.set_src("E:/static/stopwatch_play.png")
+ stopwatch_start_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_start_img.set_pos(115, 210)
+
+
+ stopwatch_start_imgbtn = lv.img(stopwatch_screen)
+ stopwatch_start_imgbtn.set_size(99, 76)
+ stopwatch_start_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
+ stopwatch_start_imgbtn.set_pos(115, 190)
+
+
+ stopwatch_stop_img = lv.img(stopwatch_screen)
+ stopwatch_stop_img.set_size(99, 36)
+ stopwatch_stop_img.set_src("E:/static/stopwatch_stop.png")
+ stopwatch_stop_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
+ stopwatch_stop_img.set_pos(115, 210)
+ stopwatch_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
+ stopwatch_start_imgbtn.add_event_cb(lambda e: self.start(e),
lv.EVENT.CLICKED, None)
- stopwatch_reset_imgbtn.add_event_cb(lambda e: self.reset(e),
+ stopwatch_reset_imgbtn.add_event_cb(lambda e: self.reset(e),
lv.EVENT.CLICKED, None)
-
- def post_processor_before_initialization(self):
+ self.meta = stopwatch_screen
+
if self.s_state == 0:
self.reset(0)
def start(self, e):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
print("stopwatch start:{}".format(self.s_state))
#self.timer.start(100, 1, self._fun)
if self.s_state == 1:
def paused(self):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
print("stopwatch pause")
stopwatch_start_img.clear_flag(lv.obj.FLAG.HIDDEN)
stopwatch_stop_img.add_flag(lv.obj.FLAG.HIDDEN)
self.show_value()
def reset(self,e):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
print("stopwatch reset")
self.sec_value = 0
self.show_value()
def show_value(self):
+ global stopwatch_screen,stopwatch_title,stopwatch_label_min,stopwatch_mao,stopwatch_label_sec ,\
+ stopwatch_mao1 ,stopwatch_label_ms,stopwatch_reset_img ,topwatch_reset_imgbtn ,stopwatch_start_img ,\
+ stopwatch_start_imgbtn, stopwatch_stop_img
stopwatch_label_ms.set_text(str("%d"%(self.ms_value)))
stopwatch_label_sec.set_text(str("%02d"%(self.sec_value)))
stopwatch_label_min.set_text(str("%02d"%(self.min_value)))
self.timer.stop()
EventMesh.publish("load_screen", {"screen": "toolbox"})
-
-
-
-
-
-FIND_screen = lv.obj()
-FIND_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
-# add style for watchface
-FIND_screen.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
-#进入图片
-watchface_mpsignal_img = lv.img(FIND_screen)
-watchface_mpsignal_img.set_pos(int(40),int(45))
-watchface_mpsignal_img.set_size(160,230)
-watchface_mpsignal_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
-watchface_mpsignal_img.add_flag(lv.obj.FLAG.CLICKABLE)
-watchface_mpsignal_img.set_src("E:/static/find_phone.png")
-watchface_mpsignal_img.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+FIND_screen = None
+watchface_mpsignal_img = None
class UIFINDScreen(Screen):
NAME = "FIND"
def __init__(self):
self.FIND_timer = osTimer()
self.FIND_timer_count = 0
- self.meta = FIND_screen
+ self.meta = None
def initialization(self):
- # self.FIND_timer.start(3000, 1, self.FIND_timer_cb)
- # self.aud.play(1, 1, 'E:/static/audio_audio_haixiu.mp3') #播放声音
- #utime.sleep_ms(200)#不加延时会切屏
- self.FIND_timer.start(3000, 1, self.FIND_timer_cb)
- self.aud.play(1, 1, 'E:/static/audio_audio_haixiu.mp3') #播放声音
+ global FIND_screen ,watchface_mpsignal_img
+ if FIND_screen ==None:
+ FIND_screen = lv.obj()
+ FIND_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ # add style for watchface
+ FIND_screen.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+ #进入图片
+ watchface_mpsignal_img = lv.img(FIND_screen)
+ watchface_mpsignal_img.set_pos(int(40),int(45))
+ watchface_mpsignal_img.set_size(160,230)
+ watchface_mpsignal_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ watchface_mpsignal_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ watchface_mpsignal_img.set_src("E:/static/find_phone.png")
+ watchface_mpsignal_img.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+ self.meta = FIND_screen
- def post_processor_after_instantiation(self):
- pass
+
def post_processor_after_initialization(self):
utime.sleep_ms(200)#不加延时会切屏
self.FIND_timer.start(3000, 1, self.FIND_timer_cb)
def btn8_press(self):
EventMesh.publish("load_screen", {"screen": "main_menu"})
-Lowpower_screen = lv.obj()
-Lowpower_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
-# add style for watchface
-Lowpower_screen.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
-#进入图片
-Lowpower_screen_img = lv.img(Lowpower_screen)
-Lowpower_screen_img.set_pos(int(40),int(45))
-Lowpower_screen_img.set_size(160,230)
-Lowpower_screen_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
-Lowpower_screen_img.add_flag(lv.obj.FLAG.CLICKABLE)
-Lowpower_screen_img.set_src("E:/static/low_power.png")
-Lowpower_screen_img.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+Lowpower_screen = None
+Lowpower_screen_img = None
class LowPowerScreen(Screen):
NAME = "LOW_POWER"
def __init__(self):
super().__init__()
- self.meta = Lowpower_screen
+ self.meta = None
+
+ def initialization(self):
+ global Lowpower_screen ,Lowpower_screen_img
+ if Lowpower_screen == None :
+ Lowpower_screen = lv.obj()
+ Lowpower_screen.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ # add style for watchface
+ Lowpower_screen.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+ #进入图片
+ Lowpower_screen_img = lv.img(Lowpower_screen)
+ Lowpower_screen_img.set_pos(int(40),int(45))
+ Lowpower_screen_img.set_size(160,230)
+ Lowpower_screen_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
+ Lowpower_screen_img.add_flag(lv.obj.FLAG.CLICKABLE)
+ Lowpower_screen_img.set_src("E:/static/low_power.png")
+ Lowpower_screen_img.add_style(style_screen, lv.PART.MAIN|lv.STATE.DEFAULT)
+ self.meta = Lowpower_screen
def done_left_to_right(self):
-
EventMesh.publish("load_screen", {"screen": "main_menu"})
def done_right_to_left(self):
EventMesh.publish("load_screen", {"screen": "main_menu"})
EventMesh.subscribe("system_sleep_rest", self.system_sleep_rest)
self.system_sleep_timer.start(1000, 1, self.system_sleep_timer_cb)
- for screen in self.screen_list:
- screen.post_processor_after_instantiation()
def get_lcd_state(self, event, key):
return self.sleep_flag
self.system_sleep_timer_count = 0
def start(self):
- self.post_processor_after_instantiation()
+ #self.post_processor_after_instantiation()
+ pass
def add_screen(self, screen):
self.screen_list.append(screen)
def load_screen(self, topic, msg):
- print("msg={}".format(msg))
+ print("msg1={}".format(msg))
for scr in self.screen_list:
if scr.NAME == msg["screen"]:
# 每次屏幕切换开始息屏倒计时
from ext import EventMesh
import osTimer
from ext import constants
-from ext.ui import Screen,style_screen
+from ui import Screen,style_screen
import ql_fs
import ujson
-from ext.ui_main_menu import MainMenu2_Watchface
+from ui_main_menu import MainMenu2_Watchface
style_font_youyuan_20 = lv.style_t()
connect = EventMesh.publish(constants.EVENT.GET_CONNECT) #获取网络状态
self.weather_data = EventMesh.publish("get_weather_data")
- if connect != 0:
+ if connect == 1 and self.weather_data != None:
no_data = self.weather_data[8]
if no_data != 0:
type = self.weather_data[3]
from ext import constants
from misc import Power
import pm
-from ext.ui import Screen
+from ui import Screen
style_MainMenu_screen_default = lv.style_t()
style_MainMenu_screen_default.init()
style_MainMenu_screen_default.set_radius(0)
MainMenu2_img_wechat_txt.set_text("微聊")
MainMenu2_img_wechat_txt.add_style(style_font_youyuan_font_60, lv.PART.MAIN|lv.STATE.DEFAULT)
-from ext.ui_WatchFaceScreen import WatchFace
+from ui_WatchFaceScreen import WatchFace
#主菜单风格2,单页
class MainMenuScreen(Screen):
NAME = "main_menu"
import ql_fs
from ext import EventMesh
from misc import Power
-from ext.ui import style_screen,style_font_youyuan_20,ContStyle,style_btn,style_img,Screen,style_contact_btn
+from ui import style_screen,style_font_youyuan_20,ContStyle,style_btn,style_img,Screen,style_contact_btn
from ext import constants
import osTimer
import audio