sdk项目编译整理
authorp15692025051 <846603105@qq.com>
Mon, 15 May 2023 08:19:00 +0000 (16:19 +0800)
committerp15692025051 <846603105@qq.com>
Mon, 15 May 2023 08:19:00 +0000 (16:19 +0800)
209 files changed:
2.sdk/images/customer_fs.bin [new file with mode: 0644]
2.sdk/images/ext_font.bin [moved from 3.code/1.watch/3.font/ext_font.bin with 100% similarity]
2.sdk/images/ext_fs.bin [new file with mode: 0644]
2.sdk/new.bat [new file with mode: 0644]
2.sdk/project/K5/ext/static/0_weather.png [moved from 3.code/1.watch/2.code/static/0_weather.png with 100% similarity]
2.sdk/project/K5/ext/static/1_weather.png [moved from 3.code/1.watch/2.code/static/1_weather.png with 100% similarity]
2.sdk/project/K5/ext/static/2_weather.png [moved from 3.code/1.watch/2.code/static/2_weather.png with 100% similarity]
2.sdk/project/K5/ext/static/3_weather.png [moved from 3.code/1.watch/2.code/static/3_weather.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/alipay/1.jpg [moved from 3.code/1.watch/2.code/static/APP/alipay/1.jpg with 100% similarity]
2.sdk/project/K5/ext/static/APP/alipay/1_11.png [moved from 3.code/1.watch/2.code/static/APP/alipay/1_11.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/alipay/1_11_1.png [moved from 3.code/1.watch/2.code/static/APP/alipay/1_11_1.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/alipay/1_12.png [moved from 3.code/1.watch/2.code/static/APP/alipay/1_12.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/alipay/1_12_1_1.png [moved from 3.code/1.watch/2.code/static/APP/alipay/1_12_1_1.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/alipay/1_13.png [moved from 3.code/1.watch/2.code/static/APP/alipay/1_13.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/alipay/1_13_1_1.png [moved from 3.code/1.watch/2.code/static/APP/alipay/1_13_1_1.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/alipay/1_1_1.png [moved from 3.code/1.watch/2.code/static/APP/alipay/1_1_1.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/alipay/1_2.jpg [moved from 3.code/1.watch/2.code/static/APP/alipay/1_2.jpg with 100% similarity]
2.sdk/project/K5/ext/static/APP/alipay/1_2_1.png [moved from 3.code/1.watch/2.code/static/APP/alipay/1_2_1.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/alipay/1_2_2.png [moved from 3.code/1.watch/2.code/static/APP/alipay/1_2_2.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/alipay/loading.jpg [moved from 3.code/1.watch/2.code/static/APP/alipay/loading.jpg with 100% similarity]
2.sdk/project/K5/ext/static/APP/wechat/R_1.png [moved from 3.code/1.watch/2.code/static/APP/wechat/R_1.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/wechat/R_2.png [moved from 3.code/1.watch/2.code/static/APP/wechat/R_2.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/wechat/R_3.png [moved from 3.code/1.watch/2.code/static/APP/wechat/R_3.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/wechat/S_1.png [moved from 3.code/1.watch/2.code/static/APP/wechat/S_1.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/wechat/S_2.png [moved from 3.code/1.watch/2.code/static/APP/wechat/S_2.png with 100% similarity]
2.sdk/project/K5/ext/static/APP/wechat/S_3.png [moved from 3.code/1.watch/2.code/static/APP/wechat/S_3.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_APP_QR_CODE.png [moved from 3.code/1.watch/2.code/static/IMAGE_APP_QR_CODE.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_BUTTON_DELKEY.png [moved from 3.code/1.watch/2.code/static/IMAGE_BUTTON_DELKEY.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_BUTTON_DIAL.png [moved from 3.code/1.watch/2.code/static/IMAGE_BUTTON_DIAL.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_BUTTON_DIAL_CONTACT.png [moved from 3.code/1.watch/2.code/static/IMAGE_BUTTON_DIAL_CONTACT.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_HEART_ONLY_TEST_DONE.jpg [moved from 3.code/1.watch/2.code/static/IMAGE_HEART_ONLY_TEST_DONE.jpg with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_IDLE_SCREEN_ALARM_ICON_NEW.png [moved from 3.code/1.watch/2.code/static/IMAGE_IDLE_SCREEN_ALARM_ICON_NEW.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NOTICE_CALL.png [moved from 3.code/1.watch/2.code/static/IMAGE_NOTICE_CALL.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NOTICE_NONE.png [moved from 3.code/1.watch/2.code/static/IMAGE_NOTICE_NONE.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NUMBER_KEY0_ICON.png [moved from 3.code/1.watch/2.code/static/IMAGE_NUMBER_KEY0_ICON.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NUMBER_KEY1_ICON.png [moved from 3.code/1.watch/2.code/static/IMAGE_NUMBER_KEY1_ICON.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NUMBER_KEY2_ICON.png [moved from 3.code/1.watch/2.code/static/IMAGE_NUMBER_KEY2_ICON.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NUMBER_KEY3_ICON.png [moved from 3.code/1.watch/2.code/static/IMAGE_NUMBER_KEY3_ICON.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NUMBER_KEY4_ICON.png [moved from 3.code/1.watch/2.code/static/IMAGE_NUMBER_KEY4_ICON.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NUMBER_KEY5_ICON.png [moved from 3.code/1.watch/2.code/static/IMAGE_NUMBER_KEY5_ICON.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NUMBER_KEY6_ICON.png [moved from 3.code/1.watch/2.code/static/IMAGE_NUMBER_KEY6_ICON.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NUMBER_KEY7_ICON.png [moved from 3.code/1.watch/2.code/static/IMAGE_NUMBER_KEY7_ICON.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NUMBER_KEY8_ICON.png [moved from 3.code/1.watch/2.code/static/IMAGE_NUMBER_KEY8_ICON.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NUMBER_KEY9_ICON.png [moved from 3.code/1.watch/2.code/static/IMAGE_NUMBER_KEY9_ICON.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NUMBER_KEYHASH_ICON.png [moved from 3.code/1.watch/2.code/static/IMAGE_NUMBER_KEYHASH_ICON.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_NUMBER_KEYSTAR_ICON.png [moved from 3.code/1.watch/2.code/static/IMAGE_NUMBER_KEYSTAR_ICON.png with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_SPO2_ONLY_TEST_DONE.jpg [moved from 3.code/1.watch/2.code/static/IMAGE_SPO2_ONLY_TEST_DONE.jpg with 100% similarity]
2.sdk/project/K5/ext/static/IMAGE_STEP.png [moved from 3.code/1.watch/2.code/static/IMAGE_STEP.png with 100% similarity]
2.sdk/project/K5/ext/static/IMG_CC_HUNGUP1.png [moved from 3.code/1.watch/2.code/static/IMG_CC_HUNGUP1.png with 100% similarity]
2.sdk/project/K5/ext/static/add_btn.png [moved from 3.code/1.watch/2.code/static/add_btn.png with 100% similarity]
2.sdk/project/K5/ext/static/answer.png [moved from 3.code/1.watch/2.code/static/answer.png with 100% similarity]
2.sdk/project/K5/ext/static/audio_audio_haixiu.mp3 [new file with mode: 0644]
2.sdk/project/K5/ext/static/cancel_icon.png [moved from 3.code/1.watch/2.code/static/cancel_icon.png with 100% similarity]
2.sdk/project/K5/ext/static/charge_in.png [moved from 3.code/1.watch/2.code/static/charge_in.png with 100% similarity]
2.sdk/project/K5/ext/static/degree.png [moved from 3.code/1.watch/2.code/static/degree.png with 100% similarity]
2.sdk/project/K5/ext/static/find_phone.png [moved from 3.code/1.watch/2.code/static/find_phone.png with 100% similarity]
2.sdk/project/K5/ext/static/hang_up.png [moved from 3.code/1.watch/2.code/static/hang_up.png with 100% similarity]
2.sdk/project/K5/ext/static/low_power.png [moved from 3.code/1.watch/2.code/static/low_power.png with 100% similarity]
2.sdk/project/K5/ext/static/menu_connect_device.png [moved from 3.code/1.watch/2.code/static/menu_connect_device.png with 100% similarity]
2.sdk/project/K5/ext/static/menu_time.png [moved from 3.code/1.watch/2.code/static/menu_time.png with 100% similarity]
2.sdk/project/K5/ext/static/mpsignal1.png [moved from 3.code/1.watch/2.code/static/mpsignal1.png with 100% similarity]
2.sdk/project/K5/ext/static/mpsignal2.png [moved from 3.code/1.watch/2.code/static/mpsignal2.png with 100% similarity]
2.sdk/project/K5/ext/static/mpsignal3.png [moved from 3.code/1.watch/2.code/static/mpsignal3.png with 100% similarity]
2.sdk/project/K5/ext/static/mpsignal4.png [moved from 3.code/1.watch/2.code/static/mpsignal4.png with 100% similarity]
2.sdk/project/K5/ext/static/mpsignal5.png [moved from 3.code/1.watch/2.code/static/mpsignal5.png with 100% similarity]
2.sdk/project/K5/ext/static/off_icon.png [moved from 3.code/1.watch/2.code/static/off_icon.png with 100% similarity]
2.sdk/project/K5/ext/static/poweroff_icon.png [moved from 3.code/1.watch/2.code/static/poweroff_icon.png with 100% similarity]
2.sdk/project/K5/ext/static/reduce_btn.png [moved from 3.code/1.watch/2.code/static/reduce_btn.png with 100% similarity]
2.sdk/project/K5/ext/static/setting/menu_app_qrcode.png [moved from 3.code/1.watch/2.code/static/setting/menu_app_qrcode.png with 100% similarity]
2.sdk/project/K5/ext/static/setting/menu_bright.png [moved from 3.code/1.watch/2.code/static/setting/menu_bright.png with 100% similarity]
2.sdk/project/K5/ext/static/setting/menu_imei_qrcode.png [moved from 3.code/1.watch/2.code/static/setting/menu_imei_qrcode.png with 100% similarity]
2.sdk/project/K5/ext/static/setting/menu_language.png [moved from 3.code/1.watch/2.code/static/setting/menu_language.png with 100% similarity]
2.sdk/project/K5/ext/static/setting/menu_poweroff.png [moved from 3.code/1.watch/2.code/static/setting/menu_poweroff.png with 100% similarity]
2.sdk/project/K5/ext/static/setting/menu_restore.png [moved from 3.code/1.watch/2.code/static/setting/menu_restore.png with 100% similarity]
2.sdk/project/K5/ext/static/setting/menu_theme_switch.png [moved from 3.code/1.watch/2.code/static/setting/menu_theme_switch.png with 100% similarity]
2.sdk/project/K5/ext/static/setting/menu_upgrade.png [moved from 3.code/1.watch/2.code/static/setting/menu_upgrade.png with 100% similarity]
2.sdk/project/K5/ext/static/setting/menu_version.png [moved from 3.code/1.watch/2.code/static/setting/menu_version.png with 100% similarity]
2.sdk/project/K5/ext/static/setting/menu_volume.png [moved from 3.code/1.watch/2.code/static/setting/menu_volume.png with 100% similarity]
2.sdk/project/K5/ext/static/setting/menu_watch_switch.png [moved from 3.code/1.watch/2.code/static/setting/menu_watch_switch.png with 100% similarity]
2.sdk/project/K5/ext/static/setting/setting_text.png [moved from 3.code/1.watch/2.code/static/setting/setting_text.png with 100% similarity]
2.sdk/project/K5/ext/static/stopwatch_play.png [moved from 3.code/1.watch/2.code/static/stopwatch_play.png with 100% similarity]
2.sdk/project/K5/ext/static/stopwatch_reset.png [moved from 3.code/1.watch/2.code/static/stopwatch_reset.png with 100% similarity]
2.sdk/project/K5/ext/static/stopwatch_stop.png [moved from 3.code/1.watch/2.code/static/stopwatch_stop.png with 100% similarity]
2.sdk/project/K5/ext/static/storage_file/wechat_num.txt [moved from 3.code/1.watch/2.code/static/storage_file/wechat_num.txt with 100% similarity]
2.sdk/project/K5/ext/static/temp_bg.png [moved from 3.code/1.watch/2.code/static/temp_bg.png with 100% similarity]
2.sdk/project/K5/ext/static/time_down.png [moved from 3.code/1.watch/2.code/static/time_down.png with 100% similarity]
2.sdk/project/K5/ext/static/time_finish.png [moved from 3.code/1.watch/2.code/static/time_finish.png with 100% similarity]
2.sdk/project/K5/ext/static/time_up.png [moved from 3.code/1.watch/2.code/static/time_up.png with 100% similarity]
2.sdk/project/K5/ext/static/time_up1.png [moved from 3.code/1.watch/2.code/static/time_up1.png with 100% similarity]
2.sdk/project/K5/ext/static/time_up2.png [moved from 3.code/1.watch/2.code/static/time_up2.png with 100% similarity]
2.sdk/project/K5/ext/static/tool/IMAGE_SECMENU_ALARM.png [moved from 3.code/1.watch/2.code/static/tool/IMAGE_SECMENU_ALARM.png with 100% similarity]
2.sdk/project/K5/ext/static/tool/IMAGE_SECMENU_COUNTDOWN.png [moved from 3.code/1.watch/2.code/static/tool/IMAGE_SECMENU_COUNTDOWN.png with 100% similarity]
2.sdk/project/K5/ext/static/tool/IMAGE_SECMENU_STEP.png [moved from 3.code/1.watch/2.code/static/tool/IMAGE_SECMENU_STEP.png with 100% similarity]
2.sdk/project/K5/ext/static/tool/IMAGE_SECMENU_STOPWATCH.png [moved from 3.code/1.watch/2.code/static/tool/IMAGE_SECMENU_STOPWATCH.png with 100% similarity]
2.sdk/project/K5/ext/static/tool/IMAGE_SECMENU_WEATHER.png [moved from 3.code/1.watch/2.code/static/tool/IMAGE_SECMENU_WEATHER.png with 100% similarity]
2.sdk/project/K5/ext/static/tool/sms_setting.png [moved from 3.code/1.watch/2.code/static/tool/sms_setting.png with 100% similarity]
2.sdk/project/K5/ext/static/tool/tool_text.png [moved from 3.code/1.watch/2.code/static/tool/tool_text.png with 100% similarity]
2.sdk/project/K5/ext/static/update.png [moved from 3.code/1.watch/2.code/static/update.png with 100% similarity]
2.sdk/project/K5/ext/static/vbat_0.png [moved from 3.code/1.watch/2.code/static/vbat_0.png with 100% similarity]
2.sdk/project/K5/ext/static/vbat_100.png [moved from 3.code/1.watch/2.code/static/vbat_100.png with 100% similarity]
2.sdk/project/K5/ext/static/vbat_20.png [moved from 3.code/1.watch/2.code/static/vbat_20.png with 100% similarity]
2.sdk/project/K5/ext/static/vbat_40.png [moved from 3.code/1.watch/2.code/static/vbat_40.png with 100% similarity]
2.sdk/project/K5/ext/static/vbat_60.png [moved from 3.code/1.watch/2.code/static/vbat_60.png with 100% similarity]
2.sdk/project/K5/ext/static/vbat_80.png [moved from 3.code/1.watch/2.code/static/vbat_80.png with 100% similarity]
2.sdk/project/K5/font/ext_font.bin [moved from 3.code/1.watch/3.font/font_24.bin with 98% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/Makefile [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/Makefile with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/alarm.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/alarm.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/appAlipay.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/appAlipay.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/appFactoryMode.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/appFactoryMode.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/appWechat.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/appWechat.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/btn_device_ec800m.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/btn_device_ec800m.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/code.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/code.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/constants.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/constants.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/initTP.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/initTP.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/lcd.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/lcd.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/location.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/location.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/main.py [moved from 3.code/1.watch/2.code/main.py with 99% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/main_1.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/main_1.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/mgr.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/mgr.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/protocol.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/protocol.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/sleep_test.py [new file with mode: 0644]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/ui.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui_WatchFaceScreen.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/ui_WatchFaceScreen.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui_main_menu.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/ui_main_menu.py with 100% similarity]
2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/ui_setting.py [moved from 2.sdk/Helios_SDK/services/microPython/ports/quectel/core/ui_setting.py with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/EG810MCN_GA_ALIPAY.mk [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/EG810MCN_GA_ALIPAY.mk with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/autoconf.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/autoconf.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/config.in [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/config.in with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/config.mk [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/config.mk with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/gh301x.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lcd.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lcd.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/canvas.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/canvas.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/fs/extflash/helios.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/fs/extflash/helios.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/fs/helios.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/fs/helios.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/handler/task/priority.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/handler/task/priority.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/imgbtn.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/imgbtn.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/jpg/decode.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/jpg/decode.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/png/decode.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/keyboard.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/keyboard.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/line.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/line.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/list.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/list.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/msgbox.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/msgbox.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/png/decode.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/qrcode.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/qrcode.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/span.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/span.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/tileview.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/tileview.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/win.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/lvgl/win.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/mbedtls.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/mbedtls.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/vioce/call.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/sc7a20.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base.json with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/vioce/call.h [new file with mode: 0644]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/mpconfigboard.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/mpconfigboard.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/DBG.7z [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/DBG.7z with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base.json [new file with mode: 0644]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip with 90% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/include/app_link_start_addr.h [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/include/app_link_start_addr.h with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/libHeliosAPI.lib [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/libHeliosAPI.lib with 100% similarity]
2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/ql_common_api.lib [moved from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/libraries/ql_common_api.lib with 100% similarity]
2.sdk/project/K5/usr/main.py [moved from 3.code/1.watch/2.code/main_1.py with 96% similarity]
2.sdk/project/K5/usr/static/0_main2_weather.png [moved from 3.code/1.watch/2.code/static/watch_plate/style_2/0_main2_weather.png with 100% similarity]
2.sdk/project/K5/usr/static/1_main2_weather.png [moved from 3.code/1.watch/2.code/static/watch_plate/style_2/1_main2_weather.png with 100% similarity]
2.sdk/project/K5/usr/static/2_main2_weather.png [moved from 3.code/1.watch/2.code/static/watch_plate/style_2/2_main2_weather.png with 100% similarity]
2.sdk/project/K5/usr/static/3_main2_weather.png [moved from 3.code/1.watch/2.code/static/watch_plate/style_2/3_main2_weather.png with 100% similarity]
2.sdk/project/K5/usr/static/IMAGE_ONE_PAGE_CALL.png [moved from 3.code/1.watch/2.code/static/main_menu/main_menu2/IMAGE_ONE_PAGE_CALL.png with 100% similarity]
2.sdk/project/K5/usr/static/IMAGE_ONE_PAGE_CONTACTS.png [moved from 3.code/1.watch/2.code/static/main_menu/main_menu2/IMAGE_ONE_PAGE_CONTACTS.png with 100% similarity]
2.sdk/project/K5/usr/static/IMAGE_ONE_PAGE_HEART_RATE_HEALTH_DETECT.png [moved from 3.code/1.watch/2.code/static/main_menu/main_menu2/IMAGE_ONE_PAGE_HEART_RATE_HEALTH_DETECT.png with 100% similarity]
2.sdk/project/K5/usr/static/IMAGE_ONE_PAGE_SETTINGS.png [moved from 3.code/1.watch/2.code/static/main_menu/main_menu2/IMAGE_ONE_PAGE_SETTINGS.png with 100% similarity]
2.sdk/project/K5/usr/static/IMAGE_ONE_PAGE_SPO2_DETECT.png [moved from 3.code/1.watch/2.code/static/main_menu/main_menu2/IMAGE_ONE_PAGE_SPO2_DETECT.png with 100% similarity]
2.sdk/project/K5/usr/static/IMAGE_ONE_PAGE_TEMPERATURE.png [moved from 3.code/1.watch/2.code/static/main_menu/main_menu2/IMAGE_ONE_PAGE_TEMPERATURE.png with 100% similarity]
2.sdk/project/K5/usr/static/IMAGE_ONE_PAGE_TOOLS.png [moved from 3.code/1.watch/2.code/static/main_menu/main_menu2/IMAGE_ONE_PAGE_TOOLS.png with 100% similarity]
2.sdk/project/K5/usr/static/IMAGE_ONE_PAGE_WECHAT.png [moved from 3.code/1.watch/2.code/static/main_menu/main_menu2/IMAGE_ONE_PAGE_WECHAT.png with 100% similarity]
2.sdk/project/K5/usr/static/R_CALL_mp3.mp3 [moved from 3.code/1.watch/2.code/static/R_CALL_mp3.mp3 with 100% similarity]
2.sdk/project/K5/usr/static/alipay_.png [moved from 3.code/1.watch/2.code/static/main_menu/main_menu2/alipay_.png with 100% similarity]
2.sdk/project/K5/usr/static/degree.png [moved from 3.code/1.watch/2.code/static/watch_plate/style_2/degree.png with 100% similarity]
2.sdk/project/K5/usr/static/step.png [moved from 3.code/1.watch/2.code/static/watch_plate/style_2/step.png with 100% similarity]
3.code/1.watch/1.doc/ALIPAY_API.xlsx [deleted file]
3.code/1.watch/1.doc/Quecpython_EC800M外置flash烧录指导.pdf [deleted file]
3.code/1.watch/1.doc/Quectel_ALIPAY_API说明_2023_01_31.pdf [deleted file]
3.code/1.watch/1.doc/云芯科技IOT协议V6.9-All(1).pdf [deleted file]
3.code/1.watch/1.doc/云芯科技硬件开放平台20221116.pdf [deleted file]
3.code/1.watch/1.doc/研强物联云平台业务接口规范_V1.0-已转档.pdf [deleted file]
3.code/1.watch/2.code/EventMesh.py [deleted file]
3.code/1.watch/2.code/alarm.py [deleted file]
3.code/1.watch/2.code/appAlipay.py [deleted file]
3.code/1.watch/2.code/appFactoryMode.py [deleted file]
3.code/1.watch/2.code/appWechat.py [deleted file]
3.code/1.watch/2.code/btn_device_ec800m.py [deleted file]
3.code/1.watch/2.code/capacitive_hynitron_cst816d_update.py [deleted file]
3.code/1.watch/2.code/code.py [deleted file]
3.code/1.watch/2.code/common.py [deleted file]
3.code/1.watch/2.code/constants.py [deleted file]
3.code/1.watch/2.code/initTP.py [deleted file]
3.code/1.watch/2.code/lcd.py [deleted file]
3.code/1.watch/2.code/location.py [deleted file]
3.code/1.watch/2.code/main_4.py [deleted file]
3.code/1.watch/2.code/main_t.py [deleted file]
3.code/1.watch/2.code/mgr.py [deleted file]
3.code/1.watch/2.code/protocol.py [deleted file]
3.code/1.watch/2.code/static/alarm_play.mp3 [deleted file]
3.code/1.watch/2.code/static/audio_audio_haixiu.mp3 [deleted file]
3.code/1.watch/2.code/static/watch_plate/style_1/bg.png [deleted file]
3.code/1.watch/2.code/test_sms.py [deleted file]
3.code/1.watch/2.code/ui.py [deleted file]
3.code/1.watch/2.code/ui_WatchFaceScreen.py [deleted file]
3.code/1.watch/2.code/ui_main_menu.py [deleted file]
3.code/1.watch/2.code/ui_setting.py [deleted file]
3.code/1.watch/3.font/font_24.c [deleted file]
3.code/1.watch/3.font/font_40.bin [deleted file]
3.code/1.watch/3.font/font_40.c [deleted file]
3.code/1.watch/3.font/font_bin_merge.py [deleted file]

diff --git a/2.sdk/images/customer_fs.bin b/2.sdk/images/customer_fs.bin
new file mode 100644 (file)
index 0000000..0c73253
Binary files /dev/null and b/2.sdk/images/customer_fs.bin differ
diff --git a/2.sdk/images/ext_fs.bin b/2.sdk/images/ext_fs.bin
new file mode 100644 (file)
index 0000000..b794f4d
Binary files /dev/null and b/2.sdk/images/ext_fs.bin differ
diff --git a/2.sdk/new.bat b/2.sdk/new.bat
new file mode 100644 (file)
index 0000000..e92c557
--- /dev/null
@@ -0,0 +1,34 @@
+@echo off
+del images /q
+Helios_SDK\tools\ASR_1606\win32\mklfs.exe -c project\%1%\ext -b 4096 -r 4096 -p 4096 -s 2097152 -i images\ext_fs.bin
+if errorlevel 0 (
+    echo "ext_fs.binÉú³É³É¹¦ !!!!!!!!!!!!!!! "
+)
+if errorlevel 1 (
+    echo "ext_fs.binÉú³Éʧ°Ü !!!!!!!!!!!!!!! "
+    goto exit
+)
+Helios_SDK\tools\ASR_1606\win32\mklfs.exe -c project\%1%\usr -b 4096 -r 4096 -p 4096 -s 184320 -i images\customer_fs.bin
+if errorlevel 0 (
+    echo "customer_fs.binÉú³É³É¹¦ !!!!!!!!!!!!!!! "
+)
+if errorlevel 1 (
+    echo "customer_fs.binÉú³Éʧ°Ü Çë¼ì²éusrĿ¼ÊÇ·ñ´óÓÚ180K!!!!!!!!!!!!!!!"
+    goto exit
+)
+
+copy project\%1%\font\ext_font.bin images\ext_font.bin
+
+Helios_SDK\tools\common\win32\7z\7z a project\%1%\sdk\system\platform\ASR_1606\boards\EG810MCN_GA_ALIPAY\images\firmware_base_release_pack.zip images\
+if errorlevel 0 (
+    echo imagesѹËõ³É¹¦!!!!!!!!!!!!!!
+)
+if errorlevel 1 (
+    echo imagesѹËõʧ°Ü!!!!!!!!!!!!!!!!!!
+    goto exit
+)
+xcopy project\K5\sdk\ Helios_SDK\ /e/h/y
+cd Helios_SDK
+helios make services/microPython @EG810MCN_GA_ALIPAY EG810MCN_GA_ALIPAY
+cd ..
+:exit
\ No newline at end of file
diff --git a/2.sdk/project/K5/ext/static/audio_audio_haixiu.mp3 b/2.sdk/project/K5/ext/static/audio_audio_haixiu.mp3
new file mode 100644 (file)
index 0000000..5ef7a93
Binary files /dev/null and b/2.sdk/project/K5/ext/static/audio_audio_haixiu.mp3 differ
similarity index 98%
rename from 3.code/1.watch/3.font/font_24.bin
rename to 2.sdk/project/K5/font/ext_font.bin
index e1ee16a..da6ccf1 100644 (file)
Binary files a/3.code/1.watch/3.font/font_24.bin and b/2.sdk/project/K5/font/ext_font.bin differ
@@ -211,6 +211,6 @@ if __name__ == '__main__':
     app.append_manager(sm)
     app.start()
     print("init12:{}".format(utime.localtime()))
-    
+    #EventMesh.publish("load_screen", {"screen": "FIND"})
 
 
diff --git a/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/sleep_test.py b/2.sdk/project/K5/sdk/services/microPython/ports/quectel/core/sleep_test.py
new file mode 100644 (file)
index 0000000..4c47c04
--- /dev/null
@@ -0,0 +1,37 @@
+import uos
+import ql_fs
+if ql_fs.path_exists("/ext") == False:
+    ldev = uos.VfsLfs1(32, 32, 32, "ext_fs",0,3)
+    uos.mount(ldev,'/ext')
+res = uos.statvfs("/ext")
+res = list(res)
+print('总ext空间:{} MB,剩余空间:{} MB'.format((((res[0] * res[2]) / 1024 / 1024)),((res[0] * res[3]) / 1024 / 1024)))
+from lcd import tp_cst816
+from btn_device_ec800m import BtnDevice
+
+import lvgl as lv
+import utime
+import osTimer
+import pm
+import ql_fs
+from machine import Pin
+from lcd import lcd,lcd_ctrl,tp_cst816,lcd_ctrl
+from misc import PWM
+import uos
+from Hsensor import GH3018
+btn_device = BtnDevice(tp_cst816)
+btn_device.start()
+hsensor = GH3018()
+hsensor.activate()
+hsensor.init()
+hsensor.open_blood_oxygen()
+utime.sleep(5)
+PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, 0, 1)
+PWM_backlight.open()
+hsensor.close()
+tp_cst816.suspend()
+lcd.lcd_display_off()
+#lcd_ctrl.write(0)
+lv.autoSleep(1)
+pm.autosleep(1)
+print("test end2")
\ No newline at end of file
diff --git a/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/vioce/call.h b/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/config/include/config/vioce/call.h
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base.json b/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base.json
new file mode 100644 (file)
index 0000000..e69de29
similarity index 90%
rename from 2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip
rename to 2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip
index 3b9e90d..ac7d12b 100644 (file)
Binary files a/2.sdk/Helios_SDK/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip and b/2.sdk/project/K5/sdk/system/platform/ASR_1606/boards/EG810MCN_GA_ALIPAY/images/firmware_base_release_pack.zip differ
similarity index 96%
rename from 3.code/1.watch/2.code/main_1.py
rename to 2.sdk/project/K5/usr/main.py
index ad3dccb..195b84e 100644 (file)
@@ -76,7 +76,7 @@ if __name__ == '__main__':
     ui.add_screen(_ui.Spo2Screen()) 
     ui.add_screen(_ui.TemperatureScreen()) 
     ui.add_screen(_ui.ContactsScreen()) 
-    from ext.appWechat import WechatScreen,TK_ProtoCol,MESSAGE_ProtoCol,NewWechatPopupScreen
+    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()) 
@@ -131,13 +131,13 @@ if __name__ == '__main__':
     
 
     from protocol import LK_ProtoCol,PING_ProtoCol,HEART_ProtoCol,OXYGEN_ProtoCol,OXYGEN_One_ProtoCol,HRSTART_ProtoCol,CENTER_ProtoCol,UPLOAD_ProtoCol,\
-        TEMP_ProtoCol,DLT_ProtoCol,WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,sosHome_dial_ProtoCol,\
+        TEMP_ProtoCol,DLT_ProtoCol,WT_ProtoCol,UD_ProtoCol,REMIND_ProtoCol, CR_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,\
             ProtoColResolver,PHL_ProtoCol,MONITOR_ProtoCol,bootoff_ProtoCol
     import mgr as mgr
     print("init7:{}".format(utime.localtime()))
     
     from mgr import ConfigStoreManager, LocationManager, SockManager,getVolumSizeManager,gethistoryDataManager,getUpLoadDataManager, \
-    NetManager,AddrBookManager,MsgdetailManager,PhoneCallingManager,getStorageDataManager,getBrightnessManager,getHrTimeManager,getSosFlagManager
+    NetManager,AddrBookManager,MsgdetailManager,PhoneCallingManager,getStorageDataManager,getBrightnessManager,getHrTimeManager
     print("init8:{}".format(utime.localtime()))
     
     
@@ -180,7 +180,6 @@ if __name__ == '__main__':
     app.append_manager(getStorageDataManager())
     app.append_manager(getUpLoadDataManager())
     app.append_manager(getVolumSizeManager())
-    app.append_manager(getSosFlagManager())
 
     print("init11:{}".format(utime.localtime()))    
     pcr = ProtoColResolver()
@@ -207,13 +206,11 @@ if __name__ == '__main__':
     # pcr.add_support(CENTER_ProtoCol())
     pcr.add_support(CENTER_ProtoCol())
     pcr.add_support(bootoff_ProtoCol())
-    pcr.add_support(sosHome_dial_ProtoCol())
-
     sm = SockManager()
     sm.add_support_resolver(pcr)
     app.append_manager(sm)
     app.start()
     print("init12:{}".format(utime.localtime()))
-    
+    #EventMesh.publish("load_screen", {"screen": "FIND"})
 
 
diff --git a/3.code/1.watch/1.doc/ALIPAY_API.xlsx b/3.code/1.watch/1.doc/ALIPAY_API.xlsx
deleted file mode 100644 (file)
index 606aa8e..0000000
Binary files a/3.code/1.watch/1.doc/ALIPAY_API.xlsx and /dev/null differ
diff --git a/3.code/1.watch/1.doc/Quecpython_EC800M外置flash烧录指导.pdf b/3.code/1.watch/1.doc/Quecpython_EC800M外置flash烧录指导.pdf
deleted file mode 100644 (file)
index 4c76c93..0000000
Binary files "a/3.code/1.watch/1.doc/Quecpython_EC800M\345\244\226\347\275\256flash\347\203\247\345\275\225\346\214\207\345\257\274.pdf" and /dev/null differ
diff --git a/3.code/1.watch/1.doc/Quectel_ALIPAY_API说明_2023_01_31.pdf b/3.code/1.watch/1.doc/Quectel_ALIPAY_API说明_2023_01_31.pdf
deleted file mode 100644 (file)
index ce2bd79..0000000
Binary files "a/3.code/1.watch/1.doc/Quectel_ALIPAY_API\350\257\264\346\230\216_2023_01_31.pdf" and /dev/null differ
diff --git a/3.code/1.watch/1.doc/云芯科技IOT协议V6.9-All(1).pdf b/3.code/1.watch/1.doc/云芯科技IOT协议V6.9-All(1).pdf
deleted file mode 100644 (file)
index ef25a0c..0000000
Binary files "a/3.code/1.watch/1.doc/\344\272\221\350\212\257\347\247\221\346\212\200IOT\345\215\217\350\256\256V6.9-All(1).pdf" and /dev/null differ
diff --git a/3.code/1.watch/1.doc/云芯科技硬件开放平台20221116.pdf b/3.code/1.watch/1.doc/云芯科技硬件开放平台20221116.pdf
deleted file mode 100644 (file)
index 29c6bff..0000000
Binary files "a/3.code/1.watch/1.doc/\344\272\221\350\212\257\347\247\221\346\212\200\347\241\254\344\273\266\345\274\200\346\224\276\345\271\263\345\217\26020221116.pdf" and /dev/null differ
diff --git a/3.code/1.watch/1.doc/研强物联云平台业务接口规范_V1.0-已转档.pdf b/3.code/1.watch/1.doc/研强物联云平台业务接口规范_V1.0-已转档.pdf
deleted file mode 100644 (file)
index 8587777..0000000
Binary files "a/3.code/1.watch/1.doc/\347\240\224\345\274\272\347\211\251\350\201\224\344\272\221\345\271\263\345\217\260\344\270\232\345\212\241\346\216\245\345\217\243\350\247\204\350\214\203_V1.0-\345\267\262\350\275\254\346\241\243.pdf" and /dev/null differ
diff --git a/3.code/1.watch/2.code/EventMesh.py b/3.code/1.watch/2.code/EventMesh.py
deleted file mode 100644 (file)
index 1b32fbd..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-import _thread
-import usys
-
-
-class EventStore(object):
-    def __init__(self):
-        self.map = dict()
-        self.log = None
-        self.__filters = []
-
-    def add_filter(self, flt):
-        self.__filters.append(flt)
-
-    def append(self, event, cb):
-        self.map[event] = cb
-
-    def fire_async(self, event, msg):
-        if event in self.map:
-            _thread.start_new_thread(self.map[event], (event, msg))
-            if self.log:
-                self.log.info("ASYNC executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, None))
-
-    def fire_sync(self, event, msg):
-        res = None
-        try:
-            if event in self.map:
-                res = self.map[event](event, msg)
-        except Exception as e:
-            usys.print_exception(e)
-            if self.log:
-                self.log.info("ERROR executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, res))
-        if event not in self.__filters:
-            if self.log:
-                self.log.info("SYNC executed (event) -> {} (params) -> {} (result) -> {}".format(event, msg, res))
-        return res
-
-
-event_store = EventStore()
-
-
-def subscribe(event, cb):
-    """
-    subscribe event and cb
-    """
-    return event_store.append(event, cb)
-
-
-def publish(event, msg=None):
-    """
-    publish event and msg
-    """
-    return publish_sync(event, msg)
-
-
-def publish_async(event, msg=None):
-    """
-    异步发送
-    """
-    return event_store.fire_async(event, msg)
-
-
-def publish_sync(event, msg=None):
-    """
-    同步发送
-    """
-    return event_store.fire_sync(event, msg)
-
-
-def set_log(log_adapter):
-    event_store.log = log_adapter
-
-
-def add_filter(flt):
-    event_store.add_filter(flt)
diff --git a/3.code/1.watch/2.code/alarm.py b/3.code/1.watch/2.code/alarm.py
deleted file mode 100644 (file)
index 3cc4089..0000000
+++ /dev/null
@@ -1,982 +0,0 @@
-import modem
-import osTimer
-import utime
-import lvgl as lv
-import EventMesh
-from machine import Timer
-from ui import Screen
-from 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_24.bin",24,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_24.bin",24,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(5, 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(178, 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": "toolbox"})
-
-    def btn8_press(self):
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-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"})
-
diff --git a/3.code/1.watch/2.code/appAlipay.py b/3.code/1.watch/2.code/appAlipay.py
deleted file mode 100644 (file)
index d968b40..0000000
+++ /dev/null
@@ -1,877 +0,0 @@
-import modem
-import sim
-import osTimer
-import ALIPAY
-from common import Lock, Abstract, LogAdapter
-import utime
-import lvgl as lv
-import EventMesh
-from machine import Timer
-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_24.bin",24,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_unbind", self.alipay_unbind)
-
-        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 alipay_unbind(self, event, msg):
-        self.alipay.unbind()
-
-    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("watch_top_show")
-        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
diff --git a/3.code/1.watch/2.code/appFactoryMode.py b/3.code/1.watch/2.code/appFactoryMode.py
deleted file mode 100644 (file)
index 078e0d7..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-import osTimer
-import lvgl as lv
-import EventMesh
-import osTimer
-import constants
-import ujson
-import ql_fs
-import audio
-from machine import Pin
-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()
-factorymode_screen.center()
-factorymode_screen.set_size(240, 320)
-factorymode_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-factorymode_title = lv.label(factorymode_screen)
-factorymode_title.set_pos(0, 10)
-factorymode_title.set_size(240, 40)
-factorymode_title.set_text("-工厂模式-")
-factorymode_title.set_long_mode(lv.label.LONG.WRAP)
-factorymode_title.set_style_text_align(lv.TEXT_ALIGN.CENTER, 0)
-factorymode_title.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-factorymode_cont = lv.obj(factorymode_screen)
-factorymode_cont.set_pos(0, 50)
-factorymode_cont.set_size(240, 270)
-factorymode_cont_style = ContStyle()
-factorymode_cont.add_style(
-    factorymode_cont_style.style_cont(0, lv.color_make(0x00, 0x00, 0x00), lv.color_make(0x00, 0x00, 0x00), 255),
-    lv.PART.MAIN | lv.STATE.DEFAULT)
-
-factorymode_location = lv.btn(factorymode_cont)
-factorymode_location.set_pos(0, factorymode_cont_y)
-factorymode_location.set_size(240, 60)
-factorymode_location_label = lv.label(factorymode_location)
-factorymode_location_label.set_text("定位测试")
-factorymode_location.set_style_pad_all(0, lv.STATE.DEFAULT)
-factorymode_location_label.align(lv.ALIGN.LEFT_MID, 70, 0)
-factorymode_location_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
-factorymode_location_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-factorymode_location.add_style(style_btn, lv.PART.MAIN | lv.STATE.DEFAULT)
-factorymode_cont_y+=60
-
-class FactoryModeScreen(Screen):
-    NAME = "factorymode"
-    def __init__(self):
-        super().__init__()
-        self.meta = factorymode_screen
-        factorymode_location.add_event_cb(lambda e: self.load_screen(e, {"screen": "FactoryModeLocation"}), 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"})
-
-
-FactoryModeLocation_screen = lv.obj()
-FactoryModeLocation_screen.center()
-FactoryModeLocation_screen.set_size(240, 320)
-FactoryModeLocation_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-FactoryModeLocation_WIFI_label = lv.label(FactoryModeLocation_screen)
-FactoryModeLocation_WIFI_label.set_text("WIFI:\n")
-FactoryModeLocation_WIFI_label.set_size(240, 80)
-FactoryModeLocation_WIFI_label.set_pos(0, 0)
-FactoryModeLocation_WIFI_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
-FactoryModeLocation_WIFI_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-FactoryModeLocation_CALL_label = lv.label(FactoryModeLocation_screen)
-FactoryModeLocation_CALL_label.set_text("CALL:\n")
-FactoryModeLocation_CALL_label.set_size(240, 40)
-FactoryModeLocation_CALL_label.set_pos(0, 80)
-FactoryModeLocation_CALL_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
-FactoryModeLocation_CALL_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-FactoryModeLocation_GNSS_label = lv.label(FactoryModeLocation_screen)
-FactoryModeLocation_GNSS_label.set_text("GNSS:\n")
-FactoryModeLocation_GNSS_label.set_size(240, 200)
-FactoryModeLocation_GNSS_label.set_pos(0, 120)
-FactoryModeLocation_GNSS_label.set_style_text_color(lv.color_make(0xff, 0xff, 0xff), lv.STATE.DEFAULT)
-FactoryModeLocation_GNSS_label.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-class FactoryModeLocationScreen(Screen):
-    NAME = "FactoryModeLocation"
-    def __init__(self):
-        super().__init__()
-        self.meta = FactoryModeLocation_screen
-
-    def post_processor_after_initialization(self):
-        EventMesh.subscribe("PUSH_LOCATION_DATA",self.GET_LOCATION_DATA)
-        EventMesh.publish(constants.EVENT.START_LOCATION, 1) #测试模式
-        FactoryModeLocation_GNSS_label.set_text("GNSS:\n") 
-        FactoryModeLocation_WIFI_label.set_text("WIFI:\n")
-        FactoryModeLocation_CALL_label.set_text("CALL:")
-    def GET_LOCATION_DATA(self, event, msg):
-        #print("GPS:{}".format(msg[0]))
-        print("WIFI:{}".format(msg[1]))
-        print("CALL:{}".format(msg[2]))
-        EventMesh.publish("system_sleep_rest")#防止黑屏
-        if msg[1] != [] : #WIFI
-            WIFI_len = len(msg[1][1])
-            WIFI_DATA = "WIFI:\n"
-            if WIFI_len > 3:
-                WIFI_len = 3
-            for i in range(WIFI_len) :
-                WIFI_DATA += "{}\n".format(msg[1][1][i])
-            FactoryModeLocation_WIFI_label.set_text(WIFI_DATA)
-        
-        if len(msg[0]) > 1 : #GPS
-            GNSS_DATA = "GNSS:\n"
-
-            gsv_data = msg[0][1].split("GSV")
-            if len(gsv_data) < 2 :
-                return
-            gsv_data = gsv_data[1:]
-            
-            GSV_dict= {}
-            for i in range(len(gsv_data)) :
-                gsv_data[i] = gsv_data[i].split("\r\n")[0]
-                gsv_tmp = gsv_data[i].split(",")
-                if len(gsv_tmp) < 7 :
-                    break
-                gsv_tmp = gsv_tmp[4:]
-                #print("gsv_tmp:{}".format(gsv_tmp))
-                for i in range(len(gsv_tmp)) :
-                    if i % 4 == 0:
-                        GSV_dict[gsv_tmp[i]] = gsv_tmp[i+3]
-                        #print("GSV_dict:{}:[{}]".format(gsv_tmp[i],gsv_tmp[i+3]))
-                    if len(gsv_tmp)-i < 4:
-                        break 
-            count = 0
-            for key in GSV_dict :
-                GNSS_DATA+="        {}:[{}]\n".format(key,GSV_dict[key])
-                count+=1
-                if count > 9:
-                    break
-            print("GxGSV:{}".format(GNSS_DATA))
-            FactoryModeLocation_GNSS_label.set_text(GNSS_DATA)  
-        if msg[2] != [] :#基站
-            if len(msg[2]) > 2 :
-                FactoryModeLocation_CALL_label.set_text("CALL:{}".format(msg[2][0]))      
-    def Close(self):
-        EventMesh.publish(constants.EVENT.CLOSE_LOCATION) 
-
-    def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "factorymode"})
-
-    def btn1_release(self):
-        EventMesh.publish("load_screen", {"screen": "factorymode"})
-        
-    def btn8_press(self):
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
\ No newline at end of file
diff --git a/3.code/1.watch/2.code/appWechat.py b/3.code/1.watch/2.code/appWechat.py
deleted file mode 100644 (file)
index f37e40d..0000000
+++ /dev/null
@@ -1,675 +0,0 @@
-import osTimer
-import lvgl as lv
-import EventMesh
-import osTimer
-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 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 
-        self.msg_tmp = ""
-        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()
-        
-        
-
-        self.startY = 0
-        self.startWidth = 0
-        self.check_json = 0
-        self.wechat_list =lv.obj()
-        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))
-                    
-                    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
-                    if len(self.wechat_recode_list) == self.MXA_MSG:
-                        j = self.wechat_num+1
-                    print("wechat_num:{} ".format(self.wechat_num))
-                    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
-                    
-                        value = self.wechat_recode_list[key]
-                        print("value:{} key:{}".format(value,key))
-
-                        self.startY = 56*i 
-                        print("self.startY:{}".format(self.startY))
-                        if value.find("S:") != -1 or value.find("R:") != -1:
-                            self.msg_tmp = value[2:] 
-                            self.msg_tmp = int(self.msg_tmp)
-                            self.startWidth = 55+self.msg_tmp*10
-                            
-                        elif value.find("T:") != -1:#文字显示
-                            self.msg_tmp = value[2:] 
-                            self.startWidth = 230
-                        
-                        wechat_btn = lv.btn(self.wechat_list)
-                        # if value.find("R:") != -1:
-                        wechat_btn.set_size(self.startWidth,54)
-                        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(self.msg_tmp)+'\"')
-                            
-                        elif value.find("S:") != -1:
-                            _btn_label1.set_size(40, 40)
-                            _btn_label1.set_pos(self.startWidth-78, 8)
-                            _btn_label1.set_text(str(self.msg_tmp)+'\"')
-                        elif value.find("T:") != -1:
-                            print("msg_tmp:{}".format(self.msg_tmp))
-                            _btn_label1.set_size(216, 66)
-                            _btn_label1.set_pos(0, 0)
-                            _btn_label1.set_text(str(self.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)
-                    bottom_btn1 = self.wechat_list.get_child(-1)
-                    bottom_btn1.scroll_to_view(lv.ANIM.OFF)    
-
-    def initialization(self):
-        wechat_label.set_text(" ")
-        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 ...:{} self.MXA_MSG:{}".format(self.wechat_num,self.MXA_MSG))
-        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二进制数据
-            
-            #修改或添加词典键值
-            self.press_state = 0
-            self.ble_send = 0
-            self.timer.start(2 * 1000, 0, self.hide_label)
-            with open("/ext/static/storage_file/wechat_record.json","w",encoding="utf-8") as fd:
-                ujson.dump(self.wechat_recode_list,fd)
-            print("senddata self.wechat_num ...:{}".format(self.wechat_num))
-            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.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("watch_top_show")
-        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]
-            # print("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
-            
-            if wechat_num >= MXA_MSG:
-                wechat_num = 0 
-            if wechat_num == 0:
-                wechat_num += 1 
-            elif 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]
-        # print("TK_ProtoCol:datalen:{} {} {}".format(wechat_num,MXA_MSG,wechat_recode_list))
-        
-        if wechat_num >= MXA_MSG:
-            wechat_num = 0 
-        if wechat_num == 0:
-            wechat_num += 1 
-        elif 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")
-            
-
-
-
-    
diff --git a/3.code/1.watch/2.code/btn_device_ec800m.py b/3.code/1.watch/2.code/btn_device_ec800m.py
deleted file mode 100644 (file)
index 310e0be..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-from common import Abstract
-import machine
-import osTimer
-from misc import PowerKey
-import EventMesh
-from machine import Pin
-
-
-class BtnDevice(Abstract):
-
-    def __init__(self, tp=None):
-        self.pk = PowerKey()
-        self.__pwk_timer = osTimer()
-
-        self.keypad = machine.KeyPad(4, 1)
-        self.__PowerDownTimeOut = 2000
-        self.__tp = tp
-
-    def post_processor_after_instantiation(self):
-        self.keypad.init()
-        self.keypad.set_callback(self.key_callback)
-        self.pk.powerKeyEventRegister(self.pwk_callback)
-        if self.__tp:
-            self.__tp.set_callback(self.__ui_callback)
-
-    def __ui_callback(self, para):
-        print("para = {}".format(para))
-        if para == 0:
-            EventMesh.publish("done_left_to_right")
-            print("<-")
-        elif para == 1:
-            EventMesh.publish("done_right_to_left")
-            print("->")
-        elif para == 2:
-            EventMesh.publish("done_bottom_to_top")
-            print("^")
-        elif para == 3:
-            EventMesh.publish("done_top_to_bottom")
-            print("V")
-        elif para == 4:
-            EventMesh.publish("done_return")
-            print("return")
-        elif para == 5:
-            EventMesh.publish("done_click")
-            print("CLICK")
-        elif (para == 6):
-            EventMesh.publish("done_error")
-            print("error")
-
-    def key_callback(self, l_list):
-        print("key_callback:",str(l_list))
-        if l_list[0] == 1:
-            # 马达震动预留
-            pass
-        if (l_list[1] == 3) and (l_list[2] == 0):
-            if l_list[0] == 1:
-                EventMesh.publish("btn1_press")
-            else:
-                pass
-                # EventMesh.publish("btn1_press")
-
-
-
-
-    def pwk_callback(self, status):
-        print('==pwr:', status)
-        if status == 1:
-            
-            self.__pwk_timer.start(self.__PowerDownTimeOut, 0, self.__pwk_long_press_cb)
-        elif status == 0:
-            self.__pwk_timer.stop()
-            # print("btn_back:{}".format(mdls.screen_size_style[mdls.models][1]))
-            EventMesh.publish("btn8_press")
-
-    def __pwk_long_press_cb(self, *args):
-        '''KEY2:联动屏幕右下角或返回键长按关机'''
-        EventMesh.publish("btn8_long_press")
-
-    def start(self):
-        self.post_processor_after_instantiation()
diff --git a/3.code/1.watch/2.code/capacitive_hynitron_cst816d_update.py b/3.code/1.watch/2.code/capacitive_hynitron_cst816d_update.py
deleted file mode 100644 (file)
index b99420f..0000000
+++ /dev/null
@@ -1,977 +0,0 @@
-"""
-*Name        : capacitive_hynitron_cst816d_update.h
-*Author      : gary
-*Version     : V1.0
-*Copyright   : Hynitron
-*ProjectName : CSW_2211527_CST816D_COB_ZT_YAT_K5_G1_JL_55028.hex       Modify at 2022-11-21 17:57:42
-"""
-
-app_bin_816d = [
-0x00, 0x00, 0x00, 0x3c, 0x78, 0xa8,
-0x02, 0x1f, 0xc9, 0x7f, 0x00, 0x22, 0x02, 0x34, 0x9c, 0x22, 0x00, 0x00, 0x02, 0x33, 0xd2, 0x02, 
-0x33, 0x5f, 0x85, 0x5b, 0x82, 0x85, 0x5a, 0x83, 0x75, 0xf0, 0x05, 0xe5, 0x21, 0x02, 0x0c, 0xa0, 
-0x00, 0x02, 0x28, 0xf5, 0x8f, 0x22, 0xe5, 0x09, 0x24, 0x05, 0x12, 0x12, 0x63, 0xe0, 0x70, 0x03, 
-0x02, 0x07, 0x77, 0x12, 0x12, 0x89, 0x74, 0x20, 0x93, 0xff, 0xe5, 0x09, 0x24, 0x09, 0x12, 0x12, 
-0x63, 0xe0, 0xc3, 0x9f, 0x50, 0x58, 0xe5, 0x09, 0x24, 0x07, 0x12, 0x12, 0x63, 0xe0, 0x54, 0xfe, 
-0xf0, 0xe5, 0x09, 0x24, 0x11, 0x12, 0x12, 0x63, 0xe4, 0xf0, 0xa3, 0xf0, 0xe5, 0x09, 0x24, 0x13, 
-0x12, 0x12, 0x63, 0xe4, 0xf0, 0x12, 0x12, 0x6e, 0x12, 0x13, 0x2c, 0x24, 0x1b, 0x12, 0x12, 0x63, 
-0x12, 0x12, 0x6b, 0x12, 0x13, 0x2a, 0x24, 0x1d, 0x12, 0x12, 0x29, 0x12, 0x12, 0x6b, 0x12, 0x13, 
-0x2c, 0x24, 0x15, 0x12, 0x12, 0x63, 0x12, 0x12, 0x6b, 0x12, 0x13, 0x2a, 0x24, 0x17, 0x12, 0x12, 
-0x63, 0x12, 0x14, 0x46, 0x24, 0x05, 0x12, 0x12, 0x63, 0xe4, 0xf0, 0x02, 0x01, 0xe1, 0xe5, 0x09, 
-0x24, 0x07, 0x12, 0x12, 0x63, 0xe0, 0x30, 0xe0, 0x03, 0x02, 0x01, 0x3f, 0xe5, 0x09, 0x24, 0x1b, 
-0x12, 0x12, 0x63, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x12, 0x12, 0x70, 0x12, 0x13, 0xe9, 0xf5, 0x28, 
-0xec, 0x9e, 0xf5, 0x27, 0xe5, 0x09, 0x24, 0x1d, 0x12, 0x12, 0x63, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 
-0x12, 0x12, 0x70, 0x12, 0x13, 0xe7, 0xf5, 0x2a, 0xec, 0x9e, 0xf5, 0x29, 0x12, 0x12, 0x89, 0x74, 
-0x19, 0x93, 0xff, 0xe4, 0x8f, 0x36, 0xf5, 0x35, 0xf5, 0x34, 0xf5, 0x33, 0x12, 0x13, 0x62, 0x90, 
-0x02, 0xb8, 0xe0, 0x24, 0x01, 0xff, 0xe4, 0x33, 0xfe, 0x12, 0x13, 0xc6, 0x8f, 0x36, 0x8e, 0x35, 
-0x8d, 0x34, 0x8c, 0x33, 0xaf, 0x2a, 0xae, 0x29, 0x12, 0x2b, 0x6f, 0xc0, 0x06, 0xc0, 0x07, 0xaf, 
-0x28, 0xae, 0x27, 0x12, 0x2b, 0x6f, 0xd0, 0xe0, 0x2f, 0xff, 0xd0, 0xe0, 0x3e, 0xfe, 0x12, 0x13, 
-0x5d, 0xc3, 0x12, 0x0c, 0x2e, 0x50, 0x0d, 0xe5, 0x09, 0x24, 0x07, 0x12, 0x12, 0x63, 0xe0, 0x44, 
-0x01, 0xf0, 0x80, 0x37, 0xe4, 0xf5, 0x27, 0xf5, 0x28, 0xf5, 0x29, 0xf5, 0x2a, 0x80, 0x2c, 0xe5, 
-0x09, 0x24, 0x21, 0x12, 0x12, 0x63, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x12, 0x12, 0x70, 0x12, 0x13, 
-0xe9, 0xf5, 0x28, 0xec, 0x9e, 0xf5, 0x27, 0x12, 0x12, 0x5f, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x12, 
-0x12, 0x70, 0x12, 0x13, 0xe7, 0xf5, 0x2a, 0xec, 0x9e, 0xf5, 0x29, 0xe5, 0x09, 0x24, 0x11, 0x12, 
-0x12, 0x63, 0x12, 0x13, 0x56, 0xe5, 0x28, 0x9f, 0xfd, 0xe5, 0x27, 0x9e, 0xfc, 0xef, 0x78, 0x02, 
-0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0x2d, 0xff, 0xec, 0x3e, 0xfe, 0xef, 0x78, 0x02, 0x12, 
-0x14, 0x01, 0xd8, 0xfb, 0xf5, 0x28, 0x8e, 0x27, 0xe5, 0x09, 0x24, 0x13, 0x12, 0x12, 0x63, 0x12, 
-0x13, 0x56, 0xe5, 0x2a, 0x9f, 0xfd, 0xe5, 0x29, 0x9e, 0xfc, 0xef, 0x78, 0x02, 0xc3, 0x33, 0xce, 
-0x33, 0xce, 0xd8, 0xf9, 0x2d, 0xff, 0xec, 0x3e, 0xfe, 0xef, 0x78, 0x02, 0x12, 0x14, 0x01, 0xd8, 
-0xfb, 0xf5, 0x2a, 0x8e, 0x29, 0xe5, 0x09, 0x24, 0x11, 0x12, 0x12, 0x63, 0xe5, 0x27, 0xf0, 0xa3, 
-0xe5, 0x28, 0xf0, 0xe5, 0x09, 0x24, 0x13, 0x12, 0x12, 0x63, 0xe5, 0x29, 0xf0, 0xa3, 0xe5, 0x2a, 
-0xf0, 0x12, 0x12, 0x89, 0x74, 0x20, 0x93, 0xff, 0xe5, 0x09, 0x24, 0x09, 0x12, 0x12, 0x63, 0xe0, 
-0xc3, 0x9f, 0x50, 0x03, 0x02, 0x07, 0x35, 0xe5, 0x09, 0x24, 0x21, 0x12, 0x12, 0x63, 0xe0, 0xfe, 
-0xa3, 0xe0, 0x25, 0x28, 0xff, 0xe5, 0x27, 0x3e, 0xfe, 0x12, 0x13, 0x7c, 0x12, 0x12, 0x70, 0x12, 
-0x14, 0x08, 0x12, 0x14, 0x01, 0xd8, 0xfb, 0xf5, 0x24, 0x8e, 0x23, 0x12, 0x12, 0x5f, 0xe0, 0xfe, 
-0xa3, 0xe0, 0x25, 0x2a, 0xff, 0xe5, 0x29, 0x3e, 0xfe, 0x12, 0x13, 0x7c, 0x12, 0x12, 0x70, 0xa3, 
-0xa3, 0x12, 0x14, 0x08, 0x12, 0x14, 0x01, 0xd8, 0xfb, 0xf5, 0x26, 0x8e, 0x25, 0xc3, 0xe5, 0x24, 
-0x94, 0x01, 0xe5, 0x23, 0x64, 0x80, 0x94, 0x80, 0x50, 0x08, 0x75, 0x23, 0x00, 0x75, 0x24, 0x01, 
-0x80, 0x1d, 0x12, 0x12, 0x89, 0x74, 0x01, 0x93, 0xfe, 0x74, 0x02, 0x93, 0xff, 0xd3, 0x95, 0x24, 
-0xee, 0x95, 0x23, 0x50, 0x0a, 0xef, 0x24, 0xff, 0xf5, 0x24, 0xee, 0x34, 0xff, 0xf5, 0x23, 0xc3, 
-0xe5, 0x26, 0x94, 0x01, 0xe5, 0x25, 0x64, 0x80, 0x94, 0x80, 0x50, 0x08, 0x75, 0x25, 0x00, 0x75, 
-0x26, 0x01, 0x80, 0x1d, 0x12, 0x12, 0x89, 0x74, 0x03, 0x93, 0xfe, 0x74, 0x04, 0x93, 0xff, 0xd3, 
-0x95, 0x26, 0xee, 0x95, 0x25, 0x50, 0x0a, 0xef, 0x24, 0xff, 0xf5, 0x26, 0xee, 0x34, 0xff, 0xf5, 
-0x25, 0x12, 0x12, 0x89, 0x74, 0x20, 0x93, 0x24, 0x0a, 0xff, 0xe4, 0x33, 0xfe, 0xe5, 0x09, 0x24, 
-0x09, 0x12, 0x12, 0x63, 0xe0, 0xc3, 0x9f, 0xee, 0x64, 0x80, 0xf8, 0x74, 0x80, 0x98, 0x50, 0x5d, 
-0xe5, 0x09, 0x24, 0x11, 0x12, 0x12, 0x63, 0x12, 0x07, 0xc9, 0x12, 0x12, 0x89, 0x74, 0x20, 0x93, 
-0xfd, 0xe5, 0x09, 0x24, 0x09, 0x12, 0x12, 0x63, 0xe0, 0xc3, 0x9d, 0xfd, 0xe4, 0x94, 0x00, 0xfc, 
-0x12, 0x13, 0xd7, 0x12, 0x14, 0x15, 0xe5, 0x09, 0x24, 0x13, 0x12, 0x12, 0x63, 0x12, 0x07, 0xc9, 
-0x12, 0x12, 0x89, 0x74, 0x20, 0x93, 0xfd, 0xe5, 0x09, 0x24, 0x09, 0x12, 0x12, 0x63, 0xe0, 0xc3, 
-0x9d, 0xfd, 0xe4, 0x94, 0x00, 0xfc, 0x12, 0x12, 0xf4, 0xf5, 0x83, 0x12, 0x14, 0x15, 0x75, 0x3b, 
-0x00, 0x75, 0x3c, 0x5a, 0x75, 0x3d, 0x00, 0x75, 0x3e, 0x5a, 0x02, 0x05, 0x45, 0xe5, 0x09, 0x24, 
-0x11, 0x12, 0x12, 0x63, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x12, 0x2b, 0x6f, 0x8e, 0x46, 0x8f, 0x47, 
-0xe5, 0x09, 0x24, 0x13, 0x12, 0x12, 0x63, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x12, 0x2b, 0x6f, 0x8e, 
-0x48, 0x8f, 0x49, 0xd3, 0xe5, 0x47, 0x94, 0xff, 0xe5, 0x46, 0x94, 0x00, 0x40, 0x06, 0x75, 0x46, 
-0x00, 0x75, 0x47, 0xff, 0xd3, 0xe5, 0x49, 0x94, 0xff, 0xe5, 0x48, 0x94, 0x00, 0x40, 0x06, 0x75, 
-0x48, 0x00, 0x75, 0x49, 0xff, 0x85, 0x46, 0x3f, 0x85, 0x47, 0x40, 0x85, 0x48, 0x41, 0x85, 0x49, 
-0x42, 0x75, 0x45, 0x09, 0x12, 0x12, 0xa5, 0xe0, 0x25, 0x40, 0xf5, 0x40, 0xe4, 0x35, 0x3f, 0xf5, 
-0x3f, 0x12, 0x12, 0xf4, 0x12, 0x12, 0xb2, 0xe0, 0x25, 0x42, 0xf5, 0x42, 0xe4, 0x35, 0x41, 0xf5, 
-0x41, 0xe5, 0x22, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xbe, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0x12, 0x12, 
-0xb2, 0xe0, 0xff, 0x12, 0x12, 0xa5, 0xef, 0xf0, 0xe5, 0x22, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xd2, 
-0xf5, 0x82, 0xe4, 0x34, 0x02, 0x12, 0x12, 0xb2, 0xe0, 0xff, 0x12, 0x12, 0xf4, 0x12, 0x12, 0xb2, 
-0xef, 0xf0, 0x15, 0x45, 0xe5, 0x45, 0x70, 0xac, 0x12, 0x13, 0xd7, 0xe5, 0x47, 0xf0, 0x12, 0x12, 
-0xf4, 0xf5, 0x83, 0xe5, 0x49, 0xf0, 0xd3, 0xe5, 0x40, 0x95, 0x42, 0xe5, 0x3f, 0x95, 0x41, 0x40, 
-0x26, 0x75, 0x4a, 0x00, 0x75, 0x4b, 0x00, 0x75, 0x4c, 0x41, 0x75, 0x4d, 0x00, 0x75, 0x4e, 0x00, 
-0x75, 0x4f, 0x3f, 0x75, 0x50, 0x00, 0x75, 0x51, 0x00, 0x75, 0x52, 0x3b, 0x75, 0x53, 0x00, 0x75, 
-0x54, 0x00, 0x75, 0x55, 0x3d, 0x80, 0x24, 0x75, 0x4a, 0x00, 0x75, 0x4b, 0x00, 0x75, 0x4c, 0x3f, 
-0x75, 0x4d, 0x00, 0x75, 0x4e, 0x00, 0x75, 0x4f, 0x41, 0x75, 0x50, 0x00, 0x75, 0x51, 0x00, 0x75, 
-0x52, 0x3d, 0x75, 0x53, 0x00, 0x75, 0x54, 0x00, 0x75, 0x55, 0x3b, 0x12, 0x14, 0x64, 0x45, 0xf0, 
-0x70, 0x06, 0x75, 0xf0, 0x01, 0x12, 0x0a, 0xc5, 0xab, 0x4d, 0xaa, 0x4e, 0xa9, 0x4f, 0x12, 0x0a, 
-0x15, 0xae, 0xf0, 0x78, 0x03, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, 0x12, 0x14, 0x64, 
-0xfd, 0xac, 0xf0, 0x12, 0x09, 0x74, 0x8e, 0x43, 0x8f, 0x44, 0xe5, 0x09, 0x24, 0x0b, 0x12, 0x12, 
-0x63, 0x12, 0x13, 0x77, 0xe5, 0x44, 0x2f, 0xff, 0xe5, 0x43, 0x3e, 0xfe, 0xef, 0x78, 0x02, 0xce, 
-0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xf5, 0x44, 0x8e, 0x43, 0xc3, 0x94, 0x28, 0xe5, 0x43, 0x94, 
-0x00, 0x50, 0x08, 0x75, 0x43, 0x00, 0x75, 0x44, 0x28, 0x80, 0x11, 0xd3, 0xe5, 0x44, 0x94, 0x46, 
-0xe5, 0x43, 0x94, 0x00, 0x40, 0x06, 0x75, 0x43, 0x00, 0x75, 0x44, 0x46, 0xae, 0x43, 0xaf, 0x44, 
-0x7c, 0x00, 0x7d, 0x0a, 0x12, 0x09, 0x62, 0xef, 0x24, 0xca, 0xff, 0xee, 0x34, 0xfe, 0xab, 0x53, 
-0xaa, 0x54, 0xa9, 0x55, 0x8f, 0xf0, 0x12, 0x0a, 0xc5, 0xe5, 0x44, 0x25, 0xe0, 0xff, 0xe5, 0x43, 
-0x33, 0xfe, 0xc3, 0x74, 0xaa, 0x9f, 0xff, 0xe4, 0x9e, 0xab, 0x50, 0xaa, 0x51, 0xa9, 0x52, 0x8f, 
-0xf0, 0x12, 0x0a, 0xc5, 0xe5, 0x09, 0x24, 0x0b, 0x12, 0x12, 0x63, 0xe5, 0x43, 0xf0, 0xa3, 0xe5, 
-0x44, 0xf0, 0xe5, 0x09, 0x24, 0x0d, 0x12, 0x12, 0x63, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x7d, 0x03, 
-0x12, 0x09, 0x62, 0xe5, 0x3c, 0x2f, 0xff, 0xe5, 0x3b, 0x3e, 0xfe, 0xef, 0x78, 0x02, 0xce, 0xc3, 
-0x13, 0xce, 0x13, 0xd8, 0xf9, 0xf5, 0x3c, 0x8e, 0x3b, 0xe5, 0x09, 0x24, 0x0f, 0x12, 0x12, 0x63, 
-0x12, 0x13, 0x77, 0xe5, 0x3e, 0x2f, 0xff, 0xe5, 0x3d, 0x3e, 0xfe, 0xef, 0x78, 0x02, 0xce, 0xc3, 
-0x13, 0xce, 0x13, 0xd8, 0xf9, 0xf5, 0x3e, 0x8e, 0x3d, 0xe5, 0x09, 0x24, 0x0d, 0x12, 0x12, 0x63, 
-0xe5, 0x3b, 0xf0, 0xa3, 0xe5, 0x3c, 0xf0, 0xe5, 0x09, 0x24, 0x0f, 0x12, 0x12, 0x63, 0xe5, 0x3d, 
-0xf0, 0xa3, 0xe5, 0x3e, 0xf0, 0x12, 0x12, 0x5f, 0x12, 0x07, 0xd2, 0x7c, 0x00, 0x7d, 0x02, 0x12, 
-0x09, 0xc9, 0xc0, 0x06, 0xc0, 0x07, 0xe5, 0x09, 0x24, 0x21, 0x12, 0x12, 0x63, 0x12, 0x07, 0xe2, 
-0xd0, 0xe0, 0x2f, 0xff, 0xd0, 0xe0, 0x3e, 0xfe, 0x33, 0x95, 0xe0, 0x8f, 0x36, 0x8e, 0x35, 0xf5, 
-0x34, 0xf5, 0x33, 0xad, 0x34, 0xac, 0x33, 0x12, 0x12, 0x78, 0x12, 0x14, 0x2f, 0xe5, 0x36, 0x2f, 
-0xf5, 0x36, 0xe5, 0x35, 0x3e, 0xf5, 0x35, 0xe5, 0x34, 0x3d, 0xf5, 0x34, 0xe5, 0x33, 0x3c, 0xf5, 
-0x33, 0xae, 0x3b, 0xaf, 0x3c, 0xe4, 0xfc, 0xfd, 0x12, 0x13, 0x62, 0xd3, 0x12, 0x0c, 0x2e, 0x40, 
-0x0b, 0xe4, 0x85, 0x3c, 0x36, 0x85, 0x3b, 0x35, 0xf5, 0x34, 0xf5, 0x33, 0xc3, 0xe5, 0x3c, 0x95, 
-0x36, 0xfb, 0xe5, 0x3b, 0x95, 0x35, 0xfa, 0xe4, 0x95, 0x34, 0xf9, 0xe4, 0x95, 0x33, 0xf8, 0xe5, 
-0x09, 0x24, 0x21, 0x12, 0x12, 0x63, 0x12, 0x13, 0xc1, 0x8f, 0x2e, 0x8e, 0x2d, 0x8d, 0x2c, 0x8c, 
-0x2b, 0xae, 0x23, 0xaf, 0x24, 0xee, 0x12, 0x13, 0x5d, 0x12, 0x0b, 0x11, 0xef, 0x25, 0x2e, 0xff, 
-0xee, 0x35, 0x2d, 0xfe, 0xed, 0x35, 0x2c, 0xfd, 0xec, 0x35, 0x2b, 0xfc, 0x12, 0x13, 0x6e, 0xe5, 
-0x3b, 0xc3, 0x13, 0xfe, 0xe5, 0x3c, 0x12, 0x13, 0x34, 0xc0, 0x06, 0xc0, 0x07, 0xae, 0x3b, 0xaf, 
-0x3c, 0xab, 0x07, 0xaa, 0x06, 0xe4, 0xf9, 0xf8, 0xd0, 0x07, 0xd0, 0x06, 0x12, 0x0b, 0x9c, 0x8f, 
-0x2e, 0x8e, 0x2d, 0x8d, 0x2c, 0x8c, 0x2b, 0xe5, 0x09, 0x24, 0x21, 0x12, 0x12, 0x63, 0x12, 0x07, 
-0xe2, 0x7c, 0x00, 0x7d, 0x02, 0x12, 0x09, 0xc9, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x12, 0x5f, 0x12, 
-0x07, 0xd2, 0xd0, 0xe0, 0x2f, 0xff, 0xd0, 0xe0, 0x3e, 0xfe, 0x33, 0x95, 0xe0, 0x8f, 0x3a, 0x8e, 
-0x39, 0xf5, 0x38, 0xf5, 0x37, 0xad, 0x38, 0xac, 0x37, 0x12, 0x12, 0x78, 0x12, 0x14, 0x2f, 0xe5, 
-0x3a, 0x2f, 0xf5, 0x3a, 0xe5, 0x39, 0x3e, 0xf5, 0x39, 0xe5, 0x38, 0x3d, 0xf5, 0x38, 0xe5, 0x37, 
-0x3c, 0xf5, 0x37, 0xae, 0x3d, 0xaf, 0x3e, 0xe4, 0xfc, 0xfd, 0xab, 0x3a, 0xaa, 0x39, 0xa9, 0x38, 
-0xa8, 0x37, 0xd3, 0x12, 0x0c, 0x2e, 0x40, 0x0b, 0xe4, 0x85, 0x3e, 0x3a, 0x85, 0x3d, 0x39, 0xf5, 
-0x38, 0xf5, 0x37, 0xc3, 0xe5, 0x3e, 0x95, 0x3a, 0xfb, 0xe5, 0x3d, 0x95, 0x39, 0xfa, 0xe4, 0x95, 
-0x38, 0xf9, 0xe4, 0x95, 0x37, 0xf8, 0x12, 0x12, 0x5f, 0x12, 0x13, 0xc1, 0x8f, 0x32, 0x8e, 0x31, 
-0x8d, 0x30, 0x8c, 0x2f, 0xae, 0x25, 0xaf, 0x26, 0xee, 0x33, 0x95, 0xe0, 0xfd, 0xfc, 0xab, 0x3a, 
-0xaa, 0x39, 0xa9, 0x38, 0xa8, 0x37, 0x12, 0x0b, 0x11, 0xef, 0x25, 0x32, 0xff, 0xee, 0x35, 0x31, 
-0xfe, 0xed, 0x35, 0x30, 0xfd, 0xec, 0x35, 0x2f, 0xfc, 0x12, 0x13, 0x6e, 0xe5, 0x3d, 0xc3, 0x13, 
-0xfe, 0xe5, 0x3e, 0x12, 0x13, 0x34, 0xc0, 0x06, 0xc0, 0x07, 0xae, 0x3d, 0xaf, 0x3e, 0xab, 0x07, 
-0xaa, 0x06, 0xe4, 0xf9, 0xf8, 0xd0, 0x07, 0xd0, 0x06, 0x12, 0x0b, 0x9c, 0x8f, 0x32, 0x8e, 0x31, 
-0x8d, 0x30, 0x8c, 0x2f, 0xe5, 0x09, 0x24, 0x07, 0x12, 0x12, 0x63, 0xe0, 0x30, 0xe0, 0x11, 0x12, 
-0x12, 0x70, 0xe5, 0x2d, 0xf0, 0xa3, 0xe5, 0x2e, 0x12, 0x12, 0x6f, 0xa3, 0xa3, 0xee, 0x80, 0x21, 
-0xe5, 0x09, 0x24, 0x1b, 0x12, 0x12, 0x63, 0xe0, 0xff, 0xa3, 0xe0, 0x12, 0x12, 0x70, 0xcf, 0x12, 
-0x14, 0x47, 0x24, 0x1d, 0x12, 0x12, 0x63, 0xe0, 0xff, 0xa3, 0xe0, 0x12, 0x12, 0x70, 0xa3, 0xa3, 
-0xcf, 0xf0, 0xa3, 0xef, 0xf0, 0xe5, 0x09, 0x24, 0x21, 0x12, 0x12, 0x63, 0x12, 0x13, 0x2c, 0x24, 
-0x15, 0x12, 0x12, 0x63, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x12, 0x12, 0x5f, 0x12, 0x13, 0x2c, 0x24, 
-0x17, 0x12, 0x12, 0x29, 0x12, 0x14, 0x46, 0x24, 0x09, 0x12, 0x12, 0x63, 0xe0, 0xc3, 0x94, 0x14, 
-0x50, 0x0a, 0xe5, 0x09, 0x24, 0x09, 0x12, 0x12, 0x63, 0xe0, 0x04, 0xf0, 0xe5, 0x09, 0x24, 0x0a, 
-0x12, 0x12, 0x63, 0x74, 0x01, 0xf0, 0x22, 0xe5, 0x09, 0x24, 0x0a, 0x12, 0x12, 0x63, 0xe0, 0xd3, 
-0x94, 0x00, 0x40, 0x0a, 0xe5, 0x09, 0x24, 0x0a, 0x12, 0x12, 0x63, 0xe0, 0x14, 0xf0, 0xe5, 0x09, 
-0x24, 0x0a, 0x12, 0x12, 0x63, 0xe0, 0x70, 0x30, 0xe5, 0x09, 0x24, 0x09, 0x12, 0x12, 0x63, 0xe4, 
-0xf0, 0xe5, 0x09, 0x24, 0x0d, 0x12, 0x12, 0x63, 0xe4, 0xf0, 0xa3, 0x74, 0x5a, 0xf0, 0xe5, 0x09, 
-0x24, 0x0f, 0x12, 0x12, 0x63, 0xe4, 0xf0, 0xa3, 0x74, 0x5a, 0xf0, 0xe5, 0x09, 0x24, 0x0b, 0x12, 
-0x12, 0x63, 0xe4, 0xf0, 0xa3, 0x74, 0x28, 0xf0, 0x22, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x12, 0x2b, 
-0x6f, 0x22, 0xe0, 0xfe, 0xa3, 0xe0, 0xc3, 0x95, 0x26, 0xff, 0xee, 0x95, 0x25, 0xfe, 0x12, 0x2b, 
-0x6f, 0x22, 0xe0, 0xfe, 0xa3, 0xe0, 0xc3, 0x95, 0x24, 0xff, 0xee, 0x95, 0x23, 0xfe, 0x12, 0x2b, 
-0x6f, 0x22, 0xe7, 0x09, 0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x46, 0xe7, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 
-0x80, 0x3e, 0x88, 0x82, 0x8c, 0x83, 0xe7, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x32, 0xe3, 0x09, 
-0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x78, 0xe3, 0x09, 0xf2, 0x08, 0xdf, 0xfa, 0x80, 0x70, 0x88, 0x82, 
-0x8c, 0x83, 0xe3, 0x09, 0xf0, 0xa3, 0xdf, 0xfa, 0x80, 0x64, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 
-0xf6, 0x08, 0xdf, 0xfa, 0x80, 0x58, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xa3, 0xf2, 0x08, 0xdf, 0xfa, 
-0x80, 0x4c, 0x80, 0xd2, 0x80, 0xfa, 0x80, 0xc6, 0x80, 0xd4, 0x80, 0x69, 0x80, 0xf2, 0x80, 0x33, 
-0x80, 0x10, 0x80, 0xa6, 0x80, 0xea, 0x80, 0x9a, 0x80, 0xa8, 0x80, 0xda, 0x80, 0xe2, 0x80, 0xca, 
-0x80, 0x33, 0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe4, 0x93, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 
-0xc5, 0x83, 0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xdf, 0xe9, 0xde, 
-0xe7, 0x80, 0x0d, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf6, 0x08, 0xdf, 0xf9, 0xec, 0xfa, 
-0xa9, 0xf0, 0xed, 0xfb, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xec, 0xfa, 0xe0, 0xa3, 0xc8, 0xc5, 0x82, 
-0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xf0, 0xa3, 0xc8, 0xc5, 0x82, 0xc8, 0xcc, 0xc5, 0x83, 0xcc, 0xdf, 
-0xea, 0xde, 0xe8, 0x80, 0xdb, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xa3, 0xf2, 0x08, 0xdf, 0xf9, 
-0x80, 0xcc, 0x88, 0xf0, 0xef, 0x60, 0x01, 0x0e, 0x4e, 0x60, 0xc3, 0x88, 0xf0, 0xed, 0x24, 0x02, 
-0xb4, 0x04, 0x00, 0x50, 0xb9, 0xf5, 0x82, 0xeb, 0x24, 0x02, 0xb4, 0x04, 0x00, 0x50, 0xaf, 0x23, 
-0x23, 0x45, 0x82, 0x23, 0x90, 0x08, 0x42, 0x73, 0xbb, 0x01, 0x06, 0x89, 0x82, 0x8a, 0x83, 0xe0, 
-0x22, 0x50, 0x02, 0xe7, 0x22, 0xbb, 0xfe, 0x02, 0xe3, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 
-0x22, 0xbb, 0x01, 0x0c, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0x22, 
-0x50, 0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe6, 0x22, 0xbb, 0xfe, 0x06, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 
-0x22, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe4, 0x93, 0x22, 0xbb, 0x01, 
-0x06, 0x89, 0x82, 0x8a, 0x83, 0xf0, 0x22, 0x50, 0x02, 0xf7, 0x22, 0xbb, 0xfe, 0x01, 0xf3, 0x22, 
-0xf8, 0xbb, 0x01, 0x0d, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe8, 0xf0, 
-0x22, 0x50, 0x06, 0xe9, 0x25, 0x82, 0xc8, 0xf6, 0x22, 0xbb, 0xfe, 0x05, 0xe9, 0x25, 0x82, 0xc8, 
-0xf2, 0x22, 0xef, 0x8d, 0xf0, 0xa4, 0xa8, 0xf0, 0xcf, 0x8c, 0xf0, 0xa4, 0x28, 0xce, 0x8d, 0xf0, 
-0xa4, 0x2e, 0xfe, 0x22, 0xbc, 0x00, 0x0b, 0xbe, 0x00, 0x29, 0xef, 0x8d, 0xf0, 0x84, 0xff, 0xad, 
-0xf0, 0x22, 0xe4, 0xcc, 0xf8, 0x75, 0xf0, 0x08, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xec, 0x33, 
-0xfc, 0xee, 0x9d, 0xec, 0x98, 0x40, 0x05, 0xfc, 0xee, 0x9d, 0xfe, 0x0f, 0xd5, 0xf0, 0xe9, 0xe4, 
-0xce, 0xfd, 0x22, 0xed, 0xf8, 0xf5, 0xf0, 0xee, 0x84, 0x20, 0xd2, 0x1c, 0xfe, 0xad, 0xf0, 0x75, 
-0xf0, 0x08, 0xef, 0x2f, 0xff, 0xed, 0x33, 0xfd, 0x40, 0x07, 0x98, 0x50, 0x06, 0xd5, 0xf0, 0xf2, 
-0x22, 0xc3, 0x98, 0xfd, 0x0f, 0xd5, 0xf0, 0xea, 0x22, 0xc2, 0xd5, 0xec, 0x30, 0xe7, 0x09, 0xb2, 
-0xd5, 0xe4, 0xc3, 0x9d, 0xfd, 0xe4, 0x9c, 0xfc, 0xee, 0x30, 0xe7, 0x15, 0xb2, 0xd5, 0xe4, 0xc3, 
-0x9f, 0xff, 0xe4, 0x9e, 0xfe, 0x12, 0x09, 0x74, 0xc3, 0xe4, 0x9d, 0xfd, 0xe4, 0x9c, 0xfc, 0x80, 
-0x03, 0x12, 0x09, 0x74, 0x30, 0xd5, 0x07, 0xc3, 0xe4, 0x9f, 0xff, 0xe4, 0x9e, 0xfe, 0x22, 0xc5, 
-0xf0, 0xf8, 0xa3, 0xe0, 0x28, 0xf0, 0xc5, 0xf0, 0xf8, 0xe5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 
-0x83, 0xe0, 0x38, 0xf0, 0x22, 0xbb, 0x01, 0x0a, 0x89, 0x82, 0x8a, 0x83, 0xe0, 0xf5, 0xf0, 0xa3, 
-0xe0, 0x22, 0x50, 0x06, 0x87, 0xf0, 0x09, 0xe7, 0x19, 0x22, 0xbb, 0xfe, 0x07, 0xe3, 0xf5, 0xf0, 
-0x09, 0xe3, 0x19, 0x22, 0x89, 0x82, 0x8a, 0x83, 0xe4, 0x93, 0xf5, 0xf0, 0x74, 0x01, 0x93, 0x22, 
-0xbb, 0x01, 0x10, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 0xf5, 0x83, 0xe0, 0xf5, 0xf0, 
-0xa3, 0xe0, 0x22, 0x50, 0x09, 0xe9, 0x25, 0x82, 0xf8, 0x86, 0xf0, 0x08, 0xe6, 0x22, 0xbb, 0xfe, 
-0x0a, 0xe9, 0x25, 0x82, 0xf8, 0xe2, 0xf5, 0xf0, 0x08, 0xe2, 0x22, 0xe5, 0x83, 0x2a, 0xf5, 0x83, 
-0xe9, 0x93, 0xf5, 0xf0, 0xa3, 0xe9, 0x93, 0x22, 0xbb, 0x01, 0x0d, 0xc5, 0x82, 0x29, 0xc5, 0x82, 
-0xc5, 0x83, 0x3a, 0xc5, 0x83, 0x02, 0x09, 0xff, 0x50, 0x11, 0xc5, 0x82, 0x29, 0xf8, 0x08, 0xe5, 
-0xf0, 0x26, 0xf6, 0x18, 0xf5, 0xf0, 0xe5, 0x82, 0x36, 0xf6, 0x22, 0xbb, 0xfe, 0x11, 0xc5, 0x82, 
-0x29, 0xf8, 0x08, 0xe2, 0x25, 0xf0, 0xf5, 0xf0, 0xf2, 0x18, 0xe2, 0x35, 0x82, 0xf2, 0x22, 0xf8, 
-0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x2a, 0xf5, 0x83, 0x74, 0x01, 0x93, 0x25, 0xf0, 0xf5, 
-0xf0, 0xe4, 0x93, 0x38, 0x22, 0xbb, 0x01, 0x0a, 0x89, 0x82, 0x8a, 0x83, 0xf0, 0xe5, 0xf0, 0xa3, 
-0xf0, 0x22, 0x50, 0x06, 0xf7, 0x09, 0xa7, 0xf0, 0x19, 0x22, 0xbb, 0xfe, 0x06, 0xf3, 0xe5, 0xf0, 
-0x09, 0xf3, 0x19, 0x22, 0xf8, 0xbb, 0x01, 0x11, 0xe5, 0x82, 0x29, 0xf5, 0x82, 0xe5, 0x83, 0x3a, 
-0xf5, 0x83, 0xe8, 0xf0, 0xe5, 0xf0, 0xa3, 0xf0, 0x22, 0x50, 0x09, 0xe9, 0x25, 0x82, 0xc8, 0xf6, 
-0x08, 0xa6, 0xf0, 0x22, 0xbb, 0xfe, 0x09, 0xe9, 0x25, 0x82, 0xc8, 0xf2, 0xe5, 0xf0, 0x08, 0xf2, 
-0x22, 0xe8, 0x8f, 0xf0, 0xa4, 0xcc, 0x8b, 0xf0, 0xa4, 0x2c, 0xfc, 0xe9, 0x8e, 0xf0, 0xa4, 0x2c, 
-0xfc, 0x8a, 0xf0, 0xed, 0xa4, 0x2c, 0xfc, 0xea, 0x8e, 0xf0, 0xa4, 0xcd, 0xa8, 0xf0, 0x8b, 0xf0, 
-0xa4, 0x2d, 0xcc, 0x38, 0x25, 0xf0, 0xfd, 0xe9, 0x8f, 0xf0, 0xa4, 0x2c, 0xcd, 0x35, 0xf0, 0xfc, 
-0xeb, 0x8e, 0xf0, 0xa4, 0xfe, 0xa9, 0xf0, 0xeb, 0x8f, 0xf0, 0xa4, 0xcf, 0xc5, 0xf0, 0x2e, 0xcd, 
-0x39, 0xfe, 0xe4, 0x3c, 0xfc, 0xea, 0xa4, 0x2d, 0xce, 0x35, 0xf0, 0xfd, 0xe4, 0x3c, 0xfc, 0x22, 
-0x75, 0xf0, 0x08, 0x75, 0x82, 0x00, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xcd, 0x33, 0xcd, 0xcc, 
-0x33, 0xcc, 0xc5, 0x82, 0x33, 0xc5, 0x82, 0x9b, 0xed, 0x9a, 0xec, 0x99, 0xe5, 0x82, 0x98, 0x40, 
-0x0c, 0xf5, 0x82, 0xee, 0x9b, 0xfe, 0xed, 0x9a, 0xfd, 0xec, 0x99, 0xfc, 0x0f, 0xd5, 0xf0, 0xd6, 
-0xe4, 0xce, 0xfb, 0xe4, 0xcd, 0xfa, 0xe4, 0xcc, 0xf9, 0xa8, 0x82, 0x22, 0xb8, 0x00, 0xc1, 0xb9, 
-0x00, 0x59, 0xba, 0x00, 0x2d, 0xec, 0x8b, 0xf0, 0x84, 0xcf, 0xce, 0xcd, 0xfc, 0xe5, 0xf0, 0xcb, 
-0xf9, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc, 0xeb, 
-0x33, 0xfb, 0x10, 0xd7, 0x03, 0x99, 0x40, 0x04, 0xeb, 0x99, 0xfb, 0x0f, 0xd8, 0xe5, 0xe4, 0xf9, 
-0xfa, 0x22, 0x78, 0x18, 0xef, 0x2f, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc, 
-0xc9, 0x33, 0xc9, 0x10, 0xd7, 0x05, 0x9b, 0xe9, 0x9a, 0x40, 0x07, 0xec, 0x9b, 0xfc, 0xe9, 0x9a, 
-0xf9, 0x0f, 0xd8, 0xe0, 0xe4, 0xc9, 0xfa, 0xe4, 0xcc, 0xfb, 0x22, 0x75, 0xf0, 0x10, 0xef, 0x2f, 
-0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xcc, 0x33, 0xcc, 0xc8, 0x33, 0xc8, 0x10, 0xd7, 0x07, 
-0x9b, 0xec, 0x9a, 0xe8, 0x99, 0x40, 0x0a, 0xed, 0x9b, 0xfd, 0xec, 0x9a, 0xfc, 0xe8, 0x99, 0xf8, 
-0x0f, 0xd5, 0xf0, 0xda, 0xe4, 0xcd, 0xfb, 0xe4, 0xcc, 0xfa, 0xe4, 0xc8, 0xf9, 0x22, 0xeb, 0x9f, 
-0xf5, 0xf0, 0xea, 0x9e, 0x42, 0xf0, 0xe9, 0x9d, 0x42, 0xf0, 0xe8, 0x9c, 0x45, 0xf0, 0x22, 0xe8, 
-0x60, 0x0f, 0xef, 0xc3, 0x33, 0xff, 0xee, 0x33, 0xfe, 0xed, 0x33, 0xfd, 0xec, 0x33, 0xfc, 0xd8, 
-0xf1, 0x22, 0xe6, 0xfc, 0x08, 0xe6, 0xfd, 0x08, 0xe6, 0xfe, 0x08, 0xe6, 0xff, 0x22, 0xe4, 0x93, 
-0xfc, 0x74, 0x01, 0x93, 0xfd, 0x74, 0x02, 0x93, 0xfe, 0x74, 0x03, 0x93, 0xff, 0x22, 0xe6, 0xfb, 
-0x08, 0xe6, 0xf9, 0x08, 0xe6, 0xfa, 0x08, 0xe6, 0xcb, 0xf8, 0x22, 0xec, 0xf6, 0x08, 0xed, 0xf6, 
-0x08, 0xee, 0xf6, 0x08, 0xef, 0xf6, 0x22, 0xd0, 0x83, 0xd0, 0x82, 0xe4, 0x93, 0xf6, 0x08, 0x74, 
-0x01, 0x93, 0xf6, 0x08, 0x74, 0x02, 0x93, 0xf6, 0x08, 0x74, 0x03, 0x93, 0xf6, 0x74, 0x04, 0x73, 
-0xa4, 0x25, 0x82, 0xf5, 0x82, 0xe5, 0xf0, 0x35, 0x83, 0xf5, 0x83, 0x22, 0xec, 0x8e, 0xf0, 0xa4, 
-0xcc, 0xc5, 0xf0, 0xcc, 0xcd, 0xf8, 0xef, 0xa4, 0xce, 0xc5, 0xf0, 0x2d, 0xfd, 0xe4, 0x3c, 0xfc, 
-0xe8, 0xa4, 0x2e, 0xc8, 0xc5, 0xf0, 0x3d, 0xfd, 0xe4, 0x3c, 0xfc, 0xef, 0xa4, 0xff, 0xe5, 0xf0, 
-0x28, 0xfe, 0xe4, 0x3d, 0xfd, 0xe4, 0x3c, 0xfc, 0x22, 0xef, 0x4e, 0x60, 0x12, 0xef, 0x60, 0x01, 
-0x0e, 0xed, 0xbb, 0x01, 0x0b, 0x89, 0x82, 0x8a, 0x83, 0xf0, 0xa3, 0xdf, 0xfc, 0xde, 0xfa, 0x22, 
-0x89, 0xf0, 0x50, 0x07, 0xf7, 0x09, 0xdf, 0xfc, 0xa9, 0xf0, 0x22, 0xbb, 0xfe, 0xfc, 0xf3, 0x09, 
-0xdf, 0xfc, 0xa9, 0xf0, 0x22, 0xe4, 0xf5, 0x23, 0xe5, 0x1e, 0x60, 0x07, 0xe5, 0x1f, 0x70, 0x03, 
-0x02, 0x0f, 0x70, 0xe5, 0x1f, 0x60, 0x07, 0xe5, 0x1e, 0x70, 0x03, 0x02, 0x0f, 0x70, 0xe5, 0x1e, 
-0x70, 0x03, 0x02, 0x0e, 0xd8, 0xe5, 0x1f, 0x70, 0x03, 0x02, 0x0e, 0xd8, 0xe5, 0x20, 0xd3, 0x94, 
-0x01, 0x40, 0x0a, 0x78, 0xa2, 0xe6, 0x94, 0x64, 0x50, 0x0c, 0x06, 0x80, 0x09, 0x78, 0xa1, 0xe6, 
-0xc3, 0x94, 0x64, 0x50, 0x01, 0x06, 0x78, 0x9e, 0xe6, 0x65, 0x20, 0x60, 0x12, 0xe4, 0x78, 0x9c, 
-0xf6, 0x78, 0x92, 0x12, 0x27, 0x98, 0x78, 0x90, 0xf6, 0x08, 0xf6, 0x78, 0x9e, 0xa6, 0x20, 0x78, 
-0x90, 0xe6, 0xff, 0x60, 0x13, 0xe5, 0x1e, 0x12, 0x0f, 0x82, 0x50, 0x0c, 0x78, 0x90, 0xe6, 0xff, 
-0xc3, 0xe5, 0x1e, 0x78, 0x93, 0x12, 0x27, 0xb4, 0x78, 0x90, 0xa6, 0x1e, 0x08, 0xe6, 0xff, 0x60, 
-0x13, 0xe5, 0x1f, 0x12, 0x0f, 0x82, 0x50, 0x0c, 0x78, 0x91, 0xe6, 0xff, 0xc3, 0xe5, 0x1f, 0x78, 
-0x95, 0x12, 0x27, 0xb4, 0x78, 0x91, 0xa6, 0x1f, 0x78, 0x96, 0xe6, 0xfe, 0x08, 0xe6, 0xff, 0x12, 
-0x2b, 0x6f, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x0f, 0x77, 0xd0, 0x05, 0xd0, 0x04, 0x12, 0x27, 0xd7, 
-0x40, 0x04, 0x78, 0x92, 0x80, 0x02, 0x78, 0x96, 0xe6, 0xfe, 0x08, 0xe6, 0xff, 0x78, 0x96, 0xa6, 
-0x06, 0x08, 0xa6, 0x07, 0x08, 0xe6, 0xfe, 0x08, 0xe6, 0xff, 0x12, 0x2b, 0x6f, 0xc0, 0x06, 0xc0, 
-0x07, 0x12, 0x0f, 0xa4, 0xd0, 0x05, 0xd0, 0x04, 0x12, 0x27, 0xd7, 0x40, 0x04, 0x78, 0x94, 0x80, 
-0x02, 0x78, 0x98, 0xe6, 0xfe, 0x08, 0xe6, 0xff, 0x78, 0x98, 0xa6, 0x06, 0x08, 0xa6, 0x07, 0xe4, 
-0x78, 0x9d, 0xf6, 0x78, 0xa3, 0xe6, 0x54, 0x3c, 0x60, 0x79, 0x12, 0x0f, 0x77, 0x12, 0x27, 0xee, 
-0x50, 0x08, 0x12, 0x0f, 0xa4, 0x12, 0x27, 0xee, 0x40, 0x69, 0x78, 0x90, 0xe6, 0x78, 0x94, 0x60, 
-0x0f, 0x12, 0x27, 0xcb, 0x78, 0x92, 0xe6, 0xfc, 0x08, 0xe6, 0xfd, 0x12, 0x09, 0xc9, 0x80, 0x03, 
-0x12, 0x27, 0xcb, 0x8e, 0x24, 0x8f, 0x25, 0xaf, 0x25, 0xae, 0x24, 0x12, 0x2b, 0x6f, 0xd3, 0xef, 
-0x95, 0x21, 0x74, 0x80, 0xf8, 0x6e, 0x98, 0x40, 0x1c, 0x78, 0xa3, 0xe6, 0x54, 0x0c, 0x60, 0x33, 
-0x78, 0x95, 0x12, 0x27, 0xe3, 0x7f, 0x02, 0x40, 0x02, 0x7f, 0x01, 0x12, 0x27, 0xa0, 0x30, 0xe1, 
-0x02, 0x7f, 0x0c, 0x80, 0x1a, 0x78, 0xa3, 0xe6, 0x54, 0x30, 0x60, 0x17, 0x78, 0x93, 0x12, 0x27, 
-0xe3, 0x7f, 0x03, 0x40, 0x02, 0x7f, 0x04, 0x12, 0x27, 0xa0, 0x30, 0xe2, 0x02, 0x7f, 0x30, 0x78, 
-0xa3, 0xa6, 0x07, 0x78, 0xa3, 0xe6, 0x30, 0xe1, 0x52, 0x90, 0x01, 0x9b, 0xe0, 0x60, 0x4c, 0x78, 
-0x92, 0x12, 0x0f, 0xaf, 0x50, 0x45, 0x78, 0x94, 0x12, 0x0f, 0xaf, 0x50, 0x3e, 0xe5, 0x20, 0x64, 
-0x01, 0x70, 0x18, 0x12, 0x27, 0xc2, 0x9f, 0x40, 0x12, 0x75, 0x23, 0x0c, 0x90, 0x01, 0xaa, 0xe0, 
-0x7f, 0x02, 0x30, 0xe0, 0x02, 0x7f, 0x00, 0x78, 0xa3, 0xa6, 0x07, 0xe5, 0x20, 0xd3, 0x94, 0x01, 
-0x40, 0x19, 0x12, 0x27, 0xc2, 0xd3, 0x9f, 0x40, 0x12, 0x75, 0x23, 0x1c, 0x90, 0x01, 0xaa, 0xe0, 
-0x7f, 0x02, 0x30, 0xe0, 0x02, 0x7f, 0x00, 0x78, 0xa3, 0xa6, 0x07, 0x78, 0x9c, 0xe6, 0x60, 0x03, 
-0x02, 0x0f, 0x70, 0x76, 0x01, 0x02, 0x0f, 0x70, 0x78, 0x9c, 0xe6, 0xff, 0x60, 0x4c, 0x78, 0xa3, 
-0xe6, 0x30, 0xe0, 0x22, 0xef, 0xd3, 0x94, 0x01, 0x40, 0x1c, 0x12, 0x27, 0xc2, 0x9f, 0x50, 0x16, 
-0x79, 0xa1, 0xe7, 0x78, 0xa2, 0x96, 0x40, 0x08, 0xe4, 0x78, 0xa0, 0xf6, 0x18, 0x06, 0x80, 0x06, 
-0xe4, 0x78, 0x9f, 0xf6, 0x08, 0x06, 0xe4, 0x78, 0x90, 0x12, 0x27, 0x98, 0x08, 0x12, 0x27, 0x98, 
-0x08, 0xf6, 0x08, 0xf6, 0x78, 0x9c, 0xf6, 0x78, 0xa1, 0xf6, 0x08, 0xf6, 0x78, 0x9e, 0xf6, 0x18, 
-0x76, 0x01, 0x78, 0xa3, 0xe6, 0x44, 0x3e, 0xf6, 0x80, 0x46, 0x90, 0x01, 0x9c, 0xe0, 0x7f, 0x01, 
-0x30, 0xe0, 0x02, 0x7f, 0x14, 0x78, 0x9d, 0xe6, 0xfe, 0xd3, 0x9f, 0x40, 0x33, 0xee, 0x94, 0x1e, 
-0x50, 0x2e, 0x78, 0xa3, 0xe6, 0x30, 0xe0, 0x1e, 0x78, 0x9f, 0xe6, 0xff, 0xb4, 0x01, 0x05, 0x75, 
-0x23, 0x05, 0x80, 0x12, 0xef, 0xb4, 0x02, 0x05, 0x75, 0x23, 0x0b, 0x80, 0x09, 0x78, 0xa0, 0xe6, 
-0xb4, 0x01, 0x03, 0x75, 0x23, 0x15, 0x78, 0xa3, 0x76, 0xff, 0xe4, 0x78, 0x9f, 0xf6, 0x08, 0xf6, 
-0x78, 0xa4, 0xa6, 0x23, 0xaf, 0x23, 0x22, 0x78, 0x92, 0xe6, 0xfe, 0x08, 0xe6, 0xff, 0x12, 0x2b, 
-0x6f, 0x22, 0xc3, 0x9f, 0xff, 0xe4, 0x94, 0x00, 0xfe, 0x12, 0x2b, 0x6f, 0xac, 0x06, 0xad, 0x07, 
-0xe5, 0x22, 0x75, 0xf0, 0x04, 0xa4, 0xff, 0xc3, 0xed, 0x9f, 0xe5, 0xf0, 0x64, 0x80, 0xf8, 0xec, 
-0x64, 0x80, 0x98, 0x22, 0x78, 0x94, 0xe6, 0xfe, 0x08, 0xe6, 0xff, 0x12, 0x2b, 0x6f, 0x22, 0xe6, 
-0xfe, 0x08, 0xe6, 0xff, 0x12, 0x2b, 0x6f, 0xc3, 0xef, 0x95, 0x22, 0x74, 0x80, 0xf8, 0x6e, 0x98, 
-0x22, 0xef, 0x12, 0x12, 0xc2, 0xe0, 0xf5, 0x2f, 0x12, 0x12, 0x89, 0xe4, 0x93, 0xfd, 0x7c, 0x00, 
-0x74, 0x03, 0x93, 0xfe, 0x74, 0x04, 0x93, 0xff, 0x12, 0x09, 0x74, 0x8e, 0x30, 0x8f, 0x31, 0xe5, 
-0x2f, 0x70, 0x58, 0x75, 0x22, 0x01, 0x12, 0x13, 0x04, 0xe4, 0xf5, 0x27, 0xf5, 0x28, 0x78, 0x02, 
-0xe2, 0xfe, 0x08, 0xe2, 0xff, 0x78, 0x01, 0x12, 0x13, 0x49, 0x78, 0x06, 0xe2, 0xfe, 0x08, 0xe2, 
-0xff, 0x78, 0x05, 0x12, 0x13, 0xcd, 0x74, 0x09, 0x93, 0xfc, 0x74, 0x0a, 0x93, 0xfd, 0xc3, 0xec, 
-0x94, 0x00, 0x50, 0x05, 0x12, 0x14, 0x3a, 0x80, 0x04, 0xae, 0x25, 0xaf, 0x26, 0x12, 0x12, 0xd0, 
-0x40, 0x06, 0xae, 0x29, 0xaf, 0x2a, 0x80, 0x04, 0x7e, 0x00, 0x7f, 0x01, 0x8e, 0x25, 0x8f, 0x26, 
-0x78, 0x0a, 0xe2, 0xfe, 0x08, 0xe2, 0xff, 0x78, 0x09, 0x80, 0x62, 0x78, 0xaa, 0xe6, 0x14, 0x65, 
-0x2f, 0x70, 0x6a, 0xf5, 0x22, 0x12, 0x13, 0x04, 0x12, 0x12, 0x89, 0x74, 0x03, 0x93, 0xf5, 0x27, 
-0x74, 0x04, 0x93, 0xf5, 0x28, 0x12, 0x12, 0x90, 0x12, 0x13, 0x46, 0x12, 0x12, 0x9e, 0x24, 0xfe, 
-0x12, 0x12, 0x98, 0x24, 0xfd, 0x12, 0x13, 0xcc, 0x74, 0x0b, 0x93, 0xfc, 0x74, 0x0c, 0x93, 0xfd, 
-0xc3, 0xec, 0x94, 0x00, 0x50, 0x05, 0x12, 0x14, 0x3a, 0x80, 0x04, 0xae, 0x25, 0xaf, 0x26, 0x12, 
-0x12, 0xd0, 0x40, 0x06, 0xae, 0x29, 0xaf, 0x2a, 0x80, 0x04, 0x7e, 0x00, 0x7f, 0x01, 0x8e, 0x25, 
-0x8f, 0x26, 0x12, 0x12, 0x9e, 0x24, 0xfa, 0x12, 0x12, 0x98, 0x24, 0xf9, 0xf8, 0x12, 0x13, 0x15, 
-0xfe, 0xe4, 0x8f, 0x2e, 0x8e, 0x2d, 0xf5, 0x2c, 0xf5, 0x2b, 0x02, 0x11, 0x5d, 0x12, 0x13, 0x9e, 
-0xac, 0x06, 0xad, 0x07, 0xe5, 0x30, 0xc3, 0x13, 0xfe, 0xe5, 0x31, 0x13, 0x2d, 0xf5, 0x28, 0xec, 
-0x3e, 0xf5, 0x27, 0x12, 0x12, 0x9e, 0x24, 0xfe, 0x12, 0x12, 0x98, 0x24, 0xfd, 0x12, 0x13, 0x48, 
-0x12, 0x12, 0x9e, 0x24, 0x06, 0x12, 0x12, 0x98, 0x24, 0x05, 0x12, 0x13, 0xcc, 0xd3, 0xe5, 0x24, 
-0x95, 0x26, 0xe5, 0x23, 0x95, 0x25, 0x40, 0x38, 0xe5, 0x2f, 0xb4, 0x01, 0x25, 0xe5, 0x31, 0xae, 
-0x30, 0x78, 0x02, 0xc3, 0x33, 0xce, 0x33, 0xce, 0xd8, 0xf9, 0xff, 0x7c, 0x00, 0x7d, 0x05, 0x12, 
-0x09, 0x74, 0xaa, 0x06, 0xab, 0x07, 0x12, 0x13, 0x9e, 0xef, 0x2b, 0xf5, 0x28, 0xee, 0x3a, 0x12, 
-0x13, 0x02, 0xe4, 0xf5, 0x22, 0x12, 0x14, 0x59, 0x85, 0x23, 0x25, 0x85, 0x24, 0x26, 0x80, 0x37, 
-0x78, 0xaa, 0xe6, 0x24, 0xfe, 0xb5, 0x2f, 0x1b, 0x12, 0x13, 0x9e, 0xaa, 0x06, 0xab, 0x07, 0xae, 
-0x30, 0xaf, 0x31, 0x7c, 0x00, 0x7d, 0x05, 0x12, 0x09, 0x74, 0xeb, 0x2f, 0xf5, 0x28, 0xea, 0x3e, 
-0x12, 0x13, 0x02, 0x75, 0x22, 0x01, 0xe4, 0x85, 0x24, 0x2e, 0x85, 0x23, 0x2d, 0xf5, 0x2c, 0xf5, 
-0x2b, 0x85, 0x25, 0x25, 0x85, 0x26, 0x26, 0x12, 0x12, 0x90, 0x12, 0x13, 0x46, 0xae, 0x23, 0xaf, 
-0x24, 0xe4, 0xfc, 0xfd, 0xab, 0x2e, 0xaa, 0x2d, 0xa9, 0x2c, 0xa8, 0x2b, 0xc3, 0x12, 0x0c, 0x2e, 
-0x50, 0x29, 0xae, 0x25, 0xaf, 0x26, 0xe4, 0xfc, 0xfd, 0xa8, 0x2b, 0xc3, 0x12, 0x0c, 0x2e, 0x50, 
-0x1a, 0xae, 0x2d, 0xaf, 0x2e, 0xc3, 0xe5, 0x24, 0x9f, 0xf5, 0x24, 0xe5, 0x23, 0x9e, 0xf5, 0x23, 
-0xc3, 0xe5, 0x26, 0x9f, 0xf5, 0x26, 0xe5, 0x25, 0x9e, 0xf5, 0x25, 0xe4, 0x12, 0x14, 0x59, 0x7f, 
-0x80, 0xfe, 0xfd, 0xfc, 0xab, 0x2e, 0xaa, 0x2d, 0xa9, 0x2c, 0xa8, 0x2b, 0x12, 0x13, 0x6b, 0xae, 
-0x30, 0xaf, 0x31, 0x12, 0x13, 0xc6, 0xc0, 0x06, 0xc0, 0x07, 0xe5, 0x24, 0x25, 0x26, 0xff, 0xe5, 
-0x23, 0x35, 0x25, 0xab, 0x07, 0xfa, 0xe4, 0xf9, 0xf8, 0xd0, 0x07, 0xd0, 0x06, 0x12, 0x0b, 0x9c, 
-0xef, 0x24, 0x40, 0xff, 0xe4, 0x3e, 0xfe, 0xe4, 0x3d, 0xfd, 0xe4, 0x3c, 0xfc, 0xe4, 0x7b, 0x80, 
-0xfa, 0xf9, 0xf8, 0x12, 0x0b, 0x9c, 0x8f, 0x2e, 0x8e, 0x2d, 0x8d, 0x2c, 0x8c, 0x2b, 0xe5, 0x22, 
-0x60, 0x1b, 0xe4, 0xfc, 0xfd, 0xe5, 0x2e, 0x25, 0x28, 0xf5, 0x2e, 0xe5, 0x2d, 0x35, 0x27, 0xf5, 
-0x2d, 0xed, 0x35, 0x2c, 0xf5, 0x2c, 0xec, 0x35, 0x2b, 0xf5, 0x2b, 0x80, 0x17, 0xc3, 0xe5, 0x28, 
-0x95, 0x2e, 0xf5, 0x2e, 0xe5, 0x27, 0x95, 0x2d, 0xf5, 0x2d, 0xe4, 0x95, 0x2c, 0xf5, 0x2c, 0xe4, 
-0x95, 0x2b, 0xf5, 0x2b, 0xae, 0x2d, 0xaf, 0x2e, 0x22, 0xf5, 0x82, 0xe4, 0x35, 0x08, 0xf5, 0x83, 
-0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x85, 0x09, 0x82, 0x85, 0x08, 0x83, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 
-0xff, 0xe5, 0x09, 0x24, 0x21, 0xf5, 0x82, 0xe4, 0x35, 0x08, 0xf5, 0x83, 0xee, 0xf0, 0xa3, 0xef, 
-0xf0, 0x85, 0x09, 0x82, 0x85, 0x08, 0x83, 0xa3, 0xa3, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe5, 
-0x09, 0x24, 0x23, 0xf5, 0x82, 0xe4, 0x35, 0x08, 0xf5, 0x83, 0x22, 0xee, 0xf0, 0xef, 0xa3, 0xf0, 
-0x85, 0x09, 0x82, 0x85, 0x08, 0x83, 0xa3, 0x22, 0xe4, 0x7b, 0x0a, 0xfa, 0xf9, 0xf8, 0x12, 0x0b, 
-0x9c, 0xa8, 0x04, 0xa9, 0x05, 0xaa, 0x06, 0xab, 0x07, 0x85, 0x0b, 0x82, 0x85, 0x0a, 0x83, 0x22, 
-0xe5, 0x2f, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0x02, 0xf8, 0xe2, 0xfe, 0x08, 0xe2, 0xff, 0xe5, 0x2f, 
-0x25, 0xe0, 0x25, 0xe0, 0x22, 0xe5, 0x22, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xbf, 0xf5, 0x82, 0xe4, 
-0x34, 0x02, 0xf5, 0x83, 0xe5, 0x82, 0x25, 0x45, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0x22, 
-0xe5, 0x21, 0x75, 0xf0, 0x27, 0xa4, 0x24, 0x69, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0x22, 
-0x8e, 0x29, 0x8f, 0x2a, 0x12, 0x09, 0x62, 0x7c, 0x00, 0x7d, 0x32, 0x12, 0x09, 0x74, 0xef, 0x25, 
-0x26, 0xf5, 0x2a, 0xee, 0x35, 0x25, 0xf5, 0x29, 0xd3, 0xe5, 0x2a, 0x94, 0x00, 0xe5, 0x29, 0x64, 
-0x80, 0x94, 0x80, 0x22, 0xe5, 0x22, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xd3, 0xf5, 0x82, 0xe4, 0x34, 
-0x02, 0x22, 0xf5, 0x27, 0xe5, 0x31, 0x25, 0x31, 0xf5, 0x31, 0xe5, 0x30, 0x33, 0xf5, 0x30, 0x22, 
-0x25, 0xe0, 0x24, 0x01, 0xf8, 0xe2, 0x2f, 0xff, 0x18, 0xe2, 0x3e, 0x22, 0x74, 0x01, 0x93, 0xfe, 
-0x74, 0x02, 0x93, 0xff, 0xe4, 0xfc, 0xfd, 0x02, 0x0c, 0x6e, 0xa3, 0xa3, 0xe0, 0xfe, 0xa3, 0xe0, 
-0xff, 0xe5, 0x09, 0x22, 0x13, 0xff, 0xe4, 0xfc, 0xfd, 0xeb, 0x2f, 0xff, 0xea, 0x3e, 0xfe, 0xed, 
-0x39, 0xfd, 0xec, 0x38, 0xfc, 0x22, 0x24, 0x01, 0xf8, 0xe2, 0x2f, 0xf5, 0x24, 0x18, 0xe2, 0x3e, 
-0xf5, 0x23, 0x22, 0x90, 0x02, 0x8c, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x22, 0x33, 0x95, 0xe0, 
-0xfd, 0xfc, 0xab, 0x36, 0xaa, 0x35, 0xa9, 0x34, 0xa8, 0x33, 0x22, 0x12, 0x0b, 0x11, 0xa8, 0x04, 
-0xa9, 0x05, 0xaa, 0x06, 0xab, 0x07, 0x22, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x7c, 0x00, 0x7d, 0x03, 
-0x02, 0x09, 0x62, 0x93, 0xff, 0xe4, 0xfc, 0xfd, 0x12, 0x0c, 0x6e, 0x12, 0x0b, 0x11, 0xe4, 0x7b, 
-0x02, 0xfa, 0xf9, 0xf8, 0x22, 0x7b, 0x01, 0x7e, 0x00, 0x7f, 0x07, 0x02, 0x08, 0xc2, 0xaf, 0x2f, 
-0x7e, 0x00, 0xac, 0x30, 0xad, 0x31, 0x02, 0x09, 0x62, 0x3e, 0xf5, 0x25, 0xd3, 0xe5, 0x24, 0x95, 
-0x26, 0xe5, 0x23, 0x95, 0x25, 0x22, 0x7e, 0x00, 0x7f, 0x06, 0x7d, 0x00, 0x7b, 0x01, 0x02, 0x0c, 
-0xd9, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe4, 0xfc, 0xfd, 0x02, 0x0b, 0x11, 0xf8, 0xe2, 0x2f, 0xf5, 
-0x26, 0x18, 0xe2, 0x3e, 0xf5, 0x25, 0x22, 0xe5, 0x22, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xbf, 0xf5, 
-0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0x22, 0xa3, 0xa3, 0xe0, 0xfc, 0xa3, 0xe0, 0xc3, 0x9f, 0x22, 
-0x78, 0x6e, 0xfe, 0xe4, 0xfc, 0xfd, 0x02, 0x0c, 0x7b, 0xf0, 0xe5, 0x21, 0x75, 0xf0, 0x27, 0xa4, 
-0x22, 0xce, 0xa2, 0xe7, 0x13, 0xce, 0x13, 0x22, 0xe0, 0xfc, 0xa3, 0xe0, 0x2f, 0xff, 0xee, 0x3c, 
-0xfe, 0xef, 0x78, 0x02, 0x22, 0xe5, 0x82, 0x2d, 0xf5, 0x82, 0xe5, 0x83, 0x3c, 0xf5, 0x83, 0xef, 
-0xf0, 0x22, 0x78, 0x72, 0x12, 0x0c, 0x52, 0x78, 0x6e, 0x12, 0x0c, 0x6e, 0xeb, 0x2f, 0x22, 0x74, 
-0x1a, 0x93, 0xff, 0xe4, 0xfc, 0xfd, 0xfe, 0x02, 0x0b, 0x11, 0xc3, 0xe5, 0x24, 0x95, 0x26, 0xff, 
-0xe5, 0x23, 0x95, 0x25, 0xfe, 0x22, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0xe5, 0x09, 0x22, 0x74, 0x24, 
-0x25, 0x23, 0xf8, 0xa6, 0x06, 0x78, 0x74, 0xe6, 0x22, 0x85, 0x26, 0x2e, 0x85, 0x25, 0x2d, 0xf5, 
-0x2c, 0xf5, 0x2b, 0x22, 0xab, 0x4a, 0xaa, 0x4b, 0xa9, 0x4c, 0x02, 0x0a, 0x15, 0xf8, 0xe2, 0xfe, 
-0x08, 0xe2, 0xff, 0x22, 0x90, 0x02, 0x6e, 0xe0, 0x60, 0x0e, 0x90, 0x02, 0x95, 0xe0, 0x7f, 0x01, 
-0x60, 0x02, 0x7f, 0x02, 0x8f, 0x27, 0x80, 0x0c, 0x90, 0x02, 0x95, 0xe0, 0x7f, 0x00, 0x60, 0x02, 
-0x7f, 0x01, 0x8f, 0x27, 0x90, 0x02, 0x8e, 0xe0, 0xff, 0x60, 0x0e, 0x90, 0x02, 0xb5, 0xe0, 0x7e, 
-0x01, 0x60, 0x02, 0x7e, 0x02, 0x8e, 0x28, 0x80, 0x0c, 0x90, 0x02, 0xb5, 0xe0, 0x7e, 0x00, 0x60, 
-0x02, 0x7e, 0x01, 0x8e, 0x28, 0xe4, 0xf5, 0x22, 0xe5, 0x27, 0x64, 0x01, 0x70, 0x54, 0xe5, 0x28, 
-0x70, 0x03, 0x02, 0x15, 0xe2, 0xe5, 0x28, 0xb4, 0x01, 0x12, 0xef, 0x60, 0x03, 0x02, 0x15, 0xe2, 
-0x90, 0x02, 0xb5, 0xe0, 0x70, 0x03, 0x02, 0x15, 0xe2, 0x02, 0x15, 0xdf, 0xe5, 0x28, 0x64, 0x02, 
-0x60, 0x03, 0x02, 0x15, 0xe2, 0x12, 0x16, 0x77, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x16, 0x10, 0xd0, 
-0xe0, 0x2f, 0xf5, 0x24, 0xd0, 0xe0, 0x12, 0x16, 0x29, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x16, 0x45, 
-0xd0, 0xe0, 0x2f, 0xf5, 0x26, 0xd0, 0xe0, 0x12, 0x13, 0xa9, 0x50, 0x03, 0x02, 0x15, 0xe2, 0x02, 
-0x15, 0xdf, 0xe5, 0x27, 0x64, 0x02, 0x60, 0x03, 0x02, 0x15, 0xe2, 0xe5, 0x28, 0x70, 0x03, 0x02, 
-0x15, 0xe2, 0xe5, 0x28, 0x64, 0x01, 0x70, 0x73, 0x90, 0x02, 0x8e, 0xe0, 0x60, 0x2c, 0x12, 0x16, 
-0x77, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x16, 0x10, 0xd0, 0xe0, 0x2f, 0xf5, 0x24, 0xd0, 0xe0, 0x3e, 
-0xf5, 0x23, 0x90, 0x02, 0x8a, 0x12, 0x16, 0x90, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x13, 0x53, 0x90, 
-0x02, 0x94, 0xe0, 0x9f, 0xff, 0x90, 0x02, 0x93, 0x80, 0x2a, 0x90, 0x02, 0xb1, 0x12, 0x16, 0x90, 
-0xc0, 0x06, 0xc0, 0x07, 0x12, 0x16, 0x5e, 0xd0, 0xe0, 0x2f, 0xf5, 0x24, 0xd0, 0xe0, 0x12, 0x16, 
-0x29, 0xc0, 0x06, 0xc0, 0x07, 0x90, 0x02, 0xb3, 0x12, 0x13, 0x56, 0x90, 0x02, 0x6d, 0xe0, 0x9f, 
-0xff, 0x90, 0x02, 0x6c, 0xe0, 0x9e, 0xfe, 0x12, 0x2b, 0x6f, 0xd0, 0xe0, 0x2f, 0xf5, 0x26, 0xd0, 
-0xe0, 0x3e, 0xf5, 0x25, 0x12, 0x13, 0xac, 0x40, 0x49, 0x80, 0x44, 0xe5, 0x28, 0x64, 0x02, 0x70, 
-0x41, 0x12, 0x16, 0x5e, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x13, 0x53, 0x90, 0x02, 0x6d, 0xe0, 0x90, 
-0x02, 0x6c, 0x12, 0x16, 0xa6, 0xd0, 0xe0, 0x2f, 0xf5, 0x24, 0xd0, 0xe0, 0x3e, 0xf5, 0x23, 0x12, 
-0x13, 0x53, 0x90, 0x02, 0x94, 0xe0, 0x90, 0x02, 0x93, 0x12, 0x16, 0xa6, 0xc0, 0x06, 0xc0, 0x07, 
-0x12, 0x16, 0x45, 0xd0, 0xe0, 0x2f, 0xf5, 0x26, 0xd0, 0xe0, 0x12, 0x13, 0xa9, 0x40, 0x03, 0x75, 
-0x22, 0x01, 0xe5, 0x22, 0x60, 0x29, 0x78, 0x6e, 0x7c, 0x00, 0x7d, 0x00, 0x7a, 0x02, 0x79, 0x69, 
-0x12, 0x13, 0x95, 0x78, 0x69, 0x7c, 0x02, 0x7d, 0x01, 0x7a, 0x02, 0x79, 0x90, 0x12, 0x13, 0x95, 
-0x78, 0x90, 0x7c, 0x02, 0x7d, 0x01, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x6e, 0x12, 0x13, 0x97, 0x22, 
-0x90, 0x02, 0x8c, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x90, 0x02, 0x6d, 0xe0, 0x9f, 0xff, 0x90, 
-0x02, 0x6c, 0xe0, 0x9e, 0xfe, 0x12, 0x2b, 0x6f, 0x22, 0x3e, 0xf5, 0x23, 0x90, 0x02, 0xb1, 0xe0, 
-0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x90, 0x02, 0x6b, 0xe0, 0x9f, 0xff, 0x90, 0x02, 0x6a, 0xe0, 0x9e, 
-0xfe, 0x12, 0x2b, 0x6f, 0x22, 0x90, 0x02, 0xb3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x90, 0x02, 
-0x6d, 0xe0, 0x9f, 0xff, 0x90, 0x02, 0x6c, 0xe0, 0x9e, 0xfe, 0x12, 0x2b, 0x6f, 0x22, 0x90, 0x02, 
-0xb3, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x90, 0x02, 0x94, 0xe0, 0x9f, 0xff, 0x90, 0x02, 0x93, 
-0xe0, 0x9e, 0xfe, 0x12, 0x2b, 0x6f, 0x22, 0x90, 0x02, 0x8a, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 
-0x90, 0x02, 0x6b, 0xe0, 0x9f, 0xff, 0x90, 0x02, 0x6a, 0xe0, 0x9e, 0xfe, 0x12, 0x2b, 0x6f, 0x22, 
-0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 0x90, 0x02, 0x92, 0xe0, 0x9f, 0xff, 0x90, 0x02, 0x91, 0xe0, 
-0x9e, 0xfe, 0x12, 0x2b, 0x6f, 0x22, 0x9f, 0xff, 0xe0, 0x9e, 0xfe, 0x12, 0x2b, 0x6f, 0x22, 0x15, 
-0x0f, 0x15, 0x0f, 0x12, 0x25, 0x8a, 0x78, 0x8c, 0xe6, 0xa8, 0x0f, 0xf6, 0x78, 0x8a, 0xe6, 0x60, 
-0x33, 0xa8, 0x0f, 0x08, 0xe4, 0xf6, 0xa8, 0x0f, 0x08, 0xe6, 0xff, 0xc3, 0x78, 0x8f, 0x96, 0x50, 
-0x58, 0x12, 0x24, 0x95, 0xa8, 0x0f, 0xe6, 0xfd, 0x12, 0x27, 0xf8, 0xa8, 0x0f, 0x08, 0x12, 0x24, 
-0x93, 0xa8, 0x0f, 0xe6, 0x7d, 0x01, 0xb4, 0x08, 0x02, 0x7d, 0x00, 0x12, 0x29, 0xd6, 0xa8, 0x0f, 
-0x08, 0x06, 0x80, 0xd2, 0x78, 0x7d, 0x12, 0x24, 0x93, 0xa8, 0x0f, 0xe6, 0xfd, 0x12, 0x27, 0xf8, 
-0x78, 0x7d, 0x12, 0x24, 0x93, 0xa8, 0x0f, 0xe6, 0x7d, 0x01, 0xb4, 0x08, 0x02, 0x7d, 0x00, 0x12, 
-0x29, 0xd6, 0x12, 0x24, 0x91, 0xa8, 0x0f, 0xe6, 0xfd, 0x12, 0x24, 0x8e, 0xa8, 0x0f, 0xe6, 0x7d, 
-0x01, 0xb4, 0x08, 0x02, 0x7d, 0x00, 0x12, 0x29, 0xd6, 0x90, 0xff, 0x52, 0xe0, 0xfe, 0xa3, 0xe0, 
-0xff, 0x78, 0x7d, 0xe6, 0xfd, 0x12, 0x24, 0xe0, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x90, 0xff, 0x5a, 
-0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x18, 0xe6, 0x12, 0x24, 0xe0, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x74, 
-0x55, 0x2d, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xe0, 0x70, 0x79, 0x08, 0xe6, 0xff, 0x24, 
-0x55, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0x74, 0x01, 0xf0, 0xef, 0x12, 0x24, 0xb8, 0xe0, 
-0xfe, 0xa3, 0xe0, 0xff, 0xe6, 0x12, 0x24, 0xe0, 0x12, 0x25, 0x74, 0x12, 0x2b, 0x6f, 0x90, 0x02, 
-0x51, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x78, 0x7c, 0xe6, 0xff, 0x12, 0x24, 0xb8, 0xe0, 0xfc, 0xa3, 
-0xe0, 0xfd, 0xef, 0x12, 0x24, 0xe0, 0xe0, 0xfe, 0xa3, 0xe0, 0xc3, 0x9d, 0xff, 0xee, 0x9c, 0xfe, 
-0x12, 0x2b, 0x6f, 0x90, 0x02, 0x53, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x12, 0x24, 0xee, 0x74, 0x07, 
-0x93, 0xfe, 0x74, 0x08, 0x93, 0xff, 0xc3, 0x90, 0x02, 0x52, 0xe0, 0x9f, 0x90, 0x02, 0x51, 0xe0, 
-0x9e, 0x50, 0x61, 0xc3, 0x90, 0x02, 0x54, 0xe0, 0x9f, 0x90, 0x02, 0x53, 0xe0, 0x9e, 0x50, 0x54, 
-0x12, 0x25, 0x7f, 0x80, 0x4f, 0x12, 0x25, 0x7f, 0x12, 0x24, 0xee, 0x78, 0x7d, 0x12, 0x24, 0xae, 
-0x12, 0x24, 0xd6, 0x12, 0x25, 0x1d, 0x40, 0x16, 0xe6, 0x12, 0x24, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 
-0x90, 0x02, 0x51, 0x12, 0x25, 0x0e, 0xd0, 0x82, 0xd0, 0x83, 0xf0, 0xa3, 0xef, 0xf0, 0x12, 0x24, 
-0xee, 0x78, 0x7c, 0x12, 0x24, 0xae, 0x12, 0x24, 0xd6, 0x12, 0x25, 0x1d, 0x40, 0x16, 0xe6, 0x12, 
-0x24, 0xe0, 0xc0, 0x83, 0xc0, 0x82, 0x90, 0x02, 0x53, 0x12, 0x25, 0x0e, 0xd0, 0x82, 0xd0, 0x83, 
-0xf0, 0xa3, 0xef, 0xf0, 0x78, 0x8d, 0xe6, 0x70, 0x0a, 0x90, 0xff, 0x50, 0xf0, 0x90, 0xff, 0x58, 
-0xf0, 0x80, 0x03, 0x12, 0x28, 0xa7, 0x05, 0x0f, 0x05, 0x0f, 0x22, 0x8b, 0x1e, 0x8a, 0x1f, 0x89, 
-0x20, 0x7e, 0x00, 0x7f, 0x0c, 0x7d, 0x00, 0x12, 0x0c, 0xd9, 0x7a, 0x02, 0x79, 0x6a, 0x12, 0x13, 
-0xb6, 0x7a, 0x02, 0x79, 0x91, 0x12, 0x13, 0xb6, 0x78, 0xae, 0xe6, 0x14, 0x60, 0x34, 0x04, 0x60, 
-0x03, 0x02, 0x19, 0xb1, 0xe4, 0x78, 0xad, 0xf6, 0xff, 0x12, 0x2b, 0x57, 0x12, 0x1d, 0xe7, 0x78, 
-0x30, 0xe2, 0x30, 0xe2, 0x09, 0x78, 0x89, 0xe6, 0x30, 0xe4, 0x03, 0x02, 0x19, 0xb5, 0x7e, 0x00, 
-0x7f, 0x4e, 0x7d, 0x00, 0x7b, 0x01, 0x7a, 0x02, 0x79, 0x69, 0x12, 0x0c, 0xd9, 0x78, 0xae, 0x76, 
-0x01, 0x22, 0x12, 0x1d, 0xe7, 0x78, 0x30, 0xe2, 0x30, 0xe2, 0x09, 0x78, 0x89, 0xe6, 0x30, 0xe4, 
-0x03, 0x02, 0x19, 0xb1, 0x78, 0x89, 0xe6, 0x20, 0xe3, 0x03, 0x02, 0x19, 0x4e, 0x12, 0x22, 0x5f, 
-0x78, 0xab, 0xe6, 0xff, 0x12, 0x27, 0x22, 0x78, 0xab, 0xa6, 0x07, 0x08, 0xe6, 0xff, 0x12, 0x27, 
-0x22, 0x78, 0xac, 0xa6, 0x07, 0x75, 0x25, 0xfe, 0x75, 0x26, 0x00, 0x75, 0x27, 0x00, 0x7b, 0x00, 
-0x7a, 0x00, 0x79, 0xab, 0x12, 0x33, 0xea, 0xe4, 0xf5, 0x21, 0x74, 0xab, 0x25, 0x21, 0xf8, 0xe6, 
-0xff, 0x12, 0x12, 0xc0, 0xef, 0xf0, 0x12, 0x12, 0xc0, 0xe0, 0xf4, 0x60, 0x49, 0xaf, 0x21, 0x12, 
-0x1c, 0x8e, 0x12, 0x13, 0xfa, 0x24, 0x6a, 0xf5, 0x82, 0xe4, 0x34, 0x02, 0xf5, 0x83, 0xee, 0xf0, 
-0xa3, 0xef, 0xf0, 0xaf, 0x21, 0x12, 0x0f, 0xc1, 0x12, 0x13, 0xfa, 0x24, 0x6c, 0xf5, 0x82, 0xe4, 
-0x34, 0x02, 0xf5, 0x83, 0xee, 0xf0, 0xa3, 0xef, 0x12, 0x13, 0xf9, 0x24, 0x6e, 0xf5, 0x82, 0xe4, 
-0x34, 0x02, 0xf5, 0x83, 0x74, 0x01, 0x12, 0x13, 0xf9, 0x24, 0x6a, 0xf9, 0x74, 0x02, 0x35, 0xf0, 
-0xfa, 0x7b, 0x01, 0x12, 0x00, 0x09, 0x05, 0x21, 0xe5, 0x21, 0xc3, 0x94, 0x02, 0x40, 0x9b, 0x12, 
-0x14, 0x74, 0x78, 0x89, 0xe6, 0x30, 0xe5, 0x15, 0x78, 0xad, 0x76, 0x01, 0x80, 0x0f, 0x90, 0x02, 
-0xb7, 0x74, 0xff, 0xf0, 0xe4, 0xa3, 0xf0, 0x90, 0x02, 0xbd, 0xf0, 0xa3, 0xf0, 0x75, 0x08, 0x02, 
-0x75, 0x09, 0x69, 0xe4, 0xf5, 0x21, 0xe5, 0x21, 0xc3, 0x94, 0x02, 0x50, 0x17, 0xaf, 0x21, 0x12, 
-0x00, 0x24, 0x12, 0x1f, 0x3e, 0x05, 0x21, 0x74, 0x27, 0x25, 0x09, 0xf5, 0x09, 0xe4, 0x35, 0x08, 
-0xf5, 0x08, 0x80, 0xe2, 0xa8, 0x20, 0xac, 0x1f, 0xad, 0x1e, 0x7b, 0x01, 0x7a, 0x02, 0x79, 0x6a, 
-0x7e, 0x00, 0x7f, 0x06, 0x12, 0x08, 0xc2, 0xe5, 0x20, 0x24, 0x06, 0xf9, 0xe4, 0x35, 0x1f, 0xa8, 
-0x01, 0xfc, 0xad, 0x1e, 0x7b, 0x01, 0x7a, 0x02, 0x79, 0x91, 0x7e, 0x00, 0x7f, 0x06, 0x02, 0x08, 
-0xc2, 0xe4, 0x78, 0xae, 0xf6, 0x22, 0x8b, 0x1e, 0x8a, 0x1f, 0x89, 0x20, 0x43, 0xad, 0x04, 0x90, 
-0xff, 0x40, 0xe0, 0x20, 0xe0, 0xf9, 0x43, 0x95, 0x80, 0x90, 0xff, 0x41, 0x74, 0x37, 0xf0, 0x90, 
-0xff, 0x49, 0x74, 0x0d, 0xf0, 0xe4, 0xf5, 0x27, 0xf5, 0x27, 0x12, 0x2a, 0x55, 0xe5, 0x27, 0xc3, 
-0x9f, 0x50, 0x22, 0xe9, 0x24, 0x0c, 0xf9, 0xe4, 0x3a, 0x12, 0x2a, 0x46, 0xe4, 0xfd, 0x12, 0x2a, 
-0x0a, 0x12, 0x2a, 0x3c, 0x7d, 0x08, 0x12, 0x28, 0x53, 0x12, 0x2a, 0x3c, 0xe4, 0xfd, 0x12, 0x29, 
-0xd6, 0x05, 0x27, 0x80, 0xd5, 0xe4, 0x90, 0xff, 0x4a, 0xf0, 0x90, 0xff, 0x50, 0x74, 0x0f, 0xf0, 
-0xe4, 0x90, 0xff, 0x58, 0xf0, 0x90, 0xff, 0x40, 0x74, 0x08, 0xf0, 0x90, 0xff, 0x43, 0x74, 0x9f, 
-0xf0, 0xab, 0x1e, 0xaa, 0x1f, 0xa9, 0x20, 0x12, 0x08, 0xe8, 0x90, 0xff, 0x48, 0xf0, 0x90, 0x00, 
-0x01, 0x12, 0x09, 0x01, 0x90, 0xff, 0x42, 0xf0, 0x90, 0x00, 0x02, 0x12, 0x09, 0x01, 0x90, 0xff, 
-0x55, 0xf0, 0xe4, 0x90, 0xff, 0x5d, 0xf0, 0x90, 0x00, 0x03, 0x12, 0x09, 0x01, 0x90, 0xff, 0x54, 
-0xf0, 0xe4, 0x90, 0xff, 0x5c, 0xf0, 0xf5, 0x27, 0x12, 0x2a, 0x55, 0xe5, 0x27, 0xc3, 0x9f, 0x50, 
-0x5b, 0xe4, 0xf5, 0x28, 0x75, 0x29, 0x64, 0x90, 0xff, 0x50, 0xe0, 0x20, 0xe7, 0x03, 0x43, 0x28, 
-0x01, 0xe5, 0x28, 0x64, 0x01, 0x60, 0x03, 0xd5, 0x29, 0xed, 0x12, 0x2a, 0x63, 0x12, 0x2a, 0x3c, 
-0x7d, 0x06, 0x12, 0x28, 0x53, 0x90, 0xff, 0x40, 0x74, 0x29, 0xf0, 0x90, 0xff, 0x40, 0xe0, 0x20, 
-0xe0, 0xf9, 0x12, 0x2a, 0x3c, 0x7d, 0x08, 0x12, 0x28, 0x53, 0x90, 0xff, 0x52, 0xe0, 0xfe, 0xa3, 
-0xe0, 0xff, 0xab, 0x21, 0xe5, 0x23, 0xf9, 0x24, 0x02, 0xf5, 0x23, 0xe5, 0x22, 0xfa, 0x34, 0x00, 
-0xf5, 0x22, 0xee, 0x8f, 0xf0, 0x12, 0x0a, 0xc5, 0x05, 0x27, 0x80, 0x9c, 0xe4, 0xf5, 0x27, 0x75, 
-0x28, 0x01, 0x12, 0x2a, 0x3c, 0x7d, 0x07, 0x12, 0x28, 0x53, 0xe5, 0x28, 0x24, 0x02, 0x90, 0xff, 
-0x55, 0xf0, 0xe4, 0xf5, 0x29, 0xf5, 0x2a, 0x05, 0x2a, 0xe5, 0x2a, 0x70, 0x02, 0x05, 0x29, 0xb4, 
-0x20, 0xf5, 0xe5, 0x29, 0xb4, 0x03, 0xf0, 0x90, 0xff, 0x50, 0xe0, 0x30, 0xe7, 0x0c, 0x12, 0x2a, 
-0x63, 0x05, 0x28, 0xe5, 0x28, 0xc3, 0x94, 0x64, 0x40, 0xd0, 0xab, 0x24, 0xaa, 0x25, 0xa9, 0x26, 
-0x85, 0x27, 0x82, 0x75, 0x83, 0x00, 0xe5, 0x28, 0x12, 0x09, 0x40, 0x12, 0x2a, 0x3c, 0x7d, 0x08, 
-0x12, 0x28, 0x53, 0x12, 0x2a, 0x63, 0x12, 0x2a, 0x55, 0x05, 0x27, 0xe5, 0x27, 0xc3, 0x9f, 0x40, 
-0x9e, 0xe4, 0x90, 0xff, 0x50, 0xf0, 0xff, 0x22, 0x8b, 0x1f, 0x8a, 0x20, 0x89, 0x21, 0x43, 0xad, 
-0x04, 0x43, 0x95, 0x80, 0x90, 0xff, 0x41, 0x74, 0x80, 0xf0, 0x90, 0xff, 0x49, 0x74, 0x0d, 0xf0, 
-0xe4, 0x90, 0xff, 0x4a, 0xf0, 0x90, 0xff, 0x42, 0x04, 0xf0, 0x90, 0xff, 0x55, 0x74, 0x7d, 0xf0, 
-0x90, 0xff, 0x5d, 0xf0, 0xe4, 0x12, 0x2a, 0x8a, 0x74, 0x10, 0xf0, 0xe4, 0xf5, 0x26, 0xf5, 0x27, 
-0xf5, 0x28, 0xf5, 0x29, 0xf5, 0x25, 0xe4, 0x90, 0xff, 0x50, 0x12, 0x2a, 0x7a, 0xf4, 0x60, 0x0d, 
-0xe4, 0xfd, 0x12, 0x29, 0xd6, 0x12, 0x2a, 0x7f, 0x7d, 0x08, 0x12, 0x28, 0x53, 0x12, 0x2a, 0x6c, 
-0xf4, 0x60, 0x0d, 0xe4, 0xfd, 0x12, 0x29, 0xd6, 0x12, 0x2a, 0x6c, 0x7d, 0x08, 0x12, 0x28, 0x53, 
-0xe4, 0xff, 0x00, 0x0f, 0xbf, 0xc8, 0xfb, 0x90, 0xff, 0x50, 0x74, 0x03, 0x12, 0x2a, 0x7a, 0xf4, 
-0x60, 0x0d, 0xe4, 0xfd, 0x12, 0x2a, 0x0a, 0x12, 0x2a, 0x7f, 0x7d, 0x07, 0x12, 0x28, 0x53, 0x12, 
-0x2a, 0x6c, 0xf4, 0x60, 0x0d, 0x7d, 0x01, 0x12, 0x2a, 0x0a, 0x12, 0x2a, 0x6c, 0x7d, 0x07, 0x12, 
-0x28, 0x53, 0x90, 0xff, 0x43, 0x74, 0x9f, 0xf0, 0x90, 0xff, 0x50, 0x74, 0x07, 0xf0, 0x90, 0xff, 
-0x58, 0xf0, 0x90, 0xff, 0x40, 0x74, 0x09, 0xf0, 0x75, 0x8a, 0xa0, 0xe4, 0x90, 0x00, 0x3a, 0xf0, 
-0x90, 0xff, 0x43, 0xe0, 0x30, 0xe4, 0xf9, 0x90, 0xff, 0x43, 0x74, 0x9f, 0xf0, 0x90, 0xff, 0x52, 
-0xe0, 0xfe, 0xa3, 0xe0, 0x25, 0x27, 0xf5, 0x27, 0xee, 0x35, 0x26, 0xf5, 0x26, 0x90, 0xff, 0x5a, 
-0xe0, 0xfe, 0xa3, 0xe0, 0x25, 0x29, 0xf5, 0x29, 0xee, 0x35, 0x28, 0xf5, 0x28, 0x05, 0x25, 0xe5, 
-0x25, 0xc3, 0x94, 0x04, 0x50, 0x03, 0x02, 0x1b, 0x66, 0xe5, 0x27, 0xae, 0x26, 0x78, 0x02, 0xce, 
-0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0xab, 0x22, 0xaa, 0x23, 0xa9, 0x24, 0xee, 0x8f, 0xf0, 
-0x12, 0x0a, 0xc5, 0xe5, 0x29, 0xae, 0x28, 0x78, 0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 
-0xff, 0xab, 0x22, 0xaa, 0x23, 0xa9, 0x24, 0x90, 0x00, 0x02, 0xee, 0x8f, 0xf0, 0x12, 0x0a, 0xe4, 
-0x53, 0x95, 0x7f, 0xe4, 0x90, 0xff, 0x41, 0xf0, 0x90, 0xff, 0x49, 0xf0, 0x90, 0xff, 0x4a, 0xf0, 
-0x90, 0xff, 0x50, 0xf0, 0x90, 0xff, 0x58, 0xf0, 0x90, 0xff, 0x42, 0xf0, 0x90, 0xff, 0x55, 0xf0, 
-0x90, 0xff, 0x5d, 0xf0, 0x12, 0x2a, 0x8a, 0x12, 0x2a, 0x7e, 0xf4, 0x60, 0x05, 0xe4, 0xfd, 0x12, 
-0x28, 0x53, 0x12, 0x2a, 0x6c, 0xf4, 0x60, 0x05, 0xe4, 0xfd, 0x12, 0x28, 0x53, 0x22, 0xef, 0x12, 
-0x12, 0xc2, 0xe0, 0xff, 0x70, 0x04, 0xf5, 0x22, 0x80, 0x18, 0x78, 0xaa, 0xe6, 0xfe, 0x14, 0xb5, 
-0x07, 0x09, 0xee, 0x25, 0xe0, 0x24, 0xfa, 0xf5, 0x22, 0x80, 0x07, 0xef, 0x25, 0xe0, 0x24, 0xfe, 
-0xf5, 0x22, 0xe5, 0x22, 0x25, 0xe0, 0x24, 0x04, 0x12, 0x14, 0x6d, 0xe5, 0x22, 0x12, 0x13, 0x10, 
-0xfe, 0xe5, 0x22, 0x25, 0xe0, 0x24, 0x09, 0x12, 0x13, 0x14, 0xfe, 0x90, 0x02, 0xbd, 0xe0, 0xfa, 
-0xa3, 0xe0, 0xfb, 0xc3, 0xef, 0x9b, 0xff, 0xee, 0x9a, 0x12, 0x13, 0xf0, 0xe5, 0x22, 0x25, 0xe0, 
-0x24, 0x06, 0x12, 0x14, 0x6d, 0xe5, 0x22, 0x25, 0xe0, 0x24, 0x03, 0x12, 0x13, 0x14, 0xfe, 0xe5, 
-0x22, 0x25, 0xe0, 0x24, 0x0b, 0x12, 0x13, 0x14, 0xcf, 0xc3, 0x9b, 0xcf, 0x9a, 0x78, 0x72, 0x12, 
-0x13, 0xf2, 0x12, 0x12, 0x89, 0x74, 0x07, 0x93, 0xfe, 0x74, 0x08, 0x78, 0x72, 0x12, 0x13, 0x83, 
-0x12, 0x0b, 0x11, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x12, 0x89, 0x78, 0x72, 
-0x12, 0x13, 0x1c, 0x12, 0x0b, 0x11, 0xd0, 0x03, 0xd0, 0x02, 0xd0, 0x01, 0xd0, 0x00, 0xef, 0x2b, 
-0xff, 0xee, 0x3a, 0x12, 0x13, 0x3e, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x12, 
-0x89, 0x74, 0x05, 0x93, 0xfe, 0x74, 0x06, 0x78, 0x6e, 0x12, 0x13, 0x83, 0x12, 0x13, 0x6b, 0xd0, 
-0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xc3, 0xef, 0x9b, 0xff, 0xee, 0x9a, 0xfe, 0xed, 0x99, 
-0xfd, 0xec, 0x98, 0xfc, 0x78, 0x76, 0x12, 0x0c, 0x7b, 0x78, 0x76, 0x12, 0x0c, 0x52, 0xec, 0x33, 
-0x50, 0x0b, 0x78, 0x6e, 0x12, 0x0c, 0x87, 0x00, 0x00, 0x00, 0x01, 0x80, 0x64, 0x12, 0x14, 0x22, 
-0xff, 0xea, 0x3e, 0xfe, 0xe9, 0x3d, 0xfd, 0xe8, 0x3c, 0xfc, 0x12, 0x13, 0x8e, 0x12, 0x0b, 0x9c, 
-0x78, 0x76, 0x12, 0x0c, 0x6e, 0xef, 0x2b, 0xff, 0xee, 0x3a, 0x12, 0x13, 0x3e, 0xc0, 0x04, 0xc0, 
-0x05, 0xc0, 0x06, 0xc0, 0x07, 0x12, 0x14, 0x22, 0xfb, 0xea, 0x3e, 0xfa, 0xe9, 0x3d, 0xf9, 0xe8, 
-0x3c, 0xf8, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0x12, 0x0b, 0x9c, 0x78, 0x6e, 0x12, 
-0x0c, 0x7b, 0x12, 0x12, 0x89, 0x78, 0x6e, 0x12, 0x13, 0x1c, 0xd3, 0x12, 0x0c, 0x2e, 0x40, 0x11, 
-0x12, 0x12, 0x89, 0x74, 0x02, 0x93, 0x24, 0xff, 0xff, 0x74, 0x01, 0x93, 0x34, 0xff, 0x12, 0x13, 
-0xf0, 0x78, 0x6e, 0x12, 0x0c, 0x52, 0x22, 0xe4, 0x78, 0x89, 0xf6, 0x18, 0xe6, 0x14, 0x70, 0x03, 
-0x02, 0x1e, 0xac, 0x14, 0x70, 0x03, 0x02, 0x1f, 0x15, 0x24, 0x02, 0x60, 0x03, 0x02, 0x1f, 0x39, 
-0xe4, 0x78, 0x8e, 0xf6, 0x78, 0x89, 0xf6, 0xfe, 0x7f, 0x8c, 0xfd, 0x12, 0x24, 0xf5, 0x7f, 0x1c, 
-0x7a, 0x00, 0x79, 0x00, 0x12, 0x25, 0x4b, 0x7f, 0x0e, 0x7a, 0x00, 0x79, 0x20, 0x12, 0x25, 0x4b, 
-0x12, 0x24, 0xee, 0x74, 0x02, 0x93, 0x78, 0x8f, 0xf6, 0x78, 0x84, 0xe6, 0x30, 0xe0, 0x08, 0x75, 
-0x23, 0x05, 0x75, 0x24, 0x01, 0x80, 0x06, 0x75, 0x23, 0x08, 0xe4, 0xf5, 0x24, 0xe4, 0xf5, 0x22, 
-0xe5, 0x22, 0xc3, 0x78, 0x8f, 0x96, 0x50, 0x60, 0xe5, 0x59, 0x24, 0x09, 0xf5, 0x82, 0xe4, 0x35, 
-0x58, 0xf5, 0x83, 0xe5, 0x82, 0x25, 0x22, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe4, 0x93, 
-0xf5, 0x25, 0xe5, 0x22, 0x24, 0x0a, 0xff, 0xe4, 0x33, 0xfe, 0xe5, 0x59, 0x2f, 0xf5, 0x82, 0xe5, 
-0x58, 0x3e, 0xf5, 0x83, 0xe4, 0x93, 0xf5, 0x26, 0xe4, 0xfd, 0xaf, 0x25, 0x12, 0x2a, 0x0a, 0x7d, 
-0x01, 0xaf, 0x26, 0x12, 0x2a, 0x0a, 0xad, 0x24, 0xaf, 0x25, 0x12, 0x29, 0xd6, 0xad, 0x24, 0xaf, 
-0x26, 0x12, 0x29, 0xd6, 0xad, 0x23, 0xaf, 0x25, 0x12, 0x28, 0x53, 0xad, 0x23, 0xaf, 0x26, 0x12, 
-0x28, 0x53, 0x05, 0x22, 0x05, 0x22, 0x80, 0x98, 0x78, 0x88, 0x76, 0x01, 0x12, 0x24, 0xee, 0x74, 
-0x08, 0x93, 0x25, 0xe0, 0xf5, 0x25, 0x74, 0x07, 0x93, 0x33, 0xf5, 0x24, 0x75, 0x23, 0x04, 0x12, 
-0x2a, 0xbe, 0x7f, 0xff, 0x12, 0x26, 0x5a, 0x12, 0x2a, 0xbe, 0xe4, 0xf5, 0x22, 0xe5, 0x22, 0xc3, 
-0x78, 0x8f, 0x96, 0x50, 0x36, 0xe5, 0x22, 0x12, 0x24, 0xb8, 0xe0, 0xfe, 0xa3, 0xe0, 0x78, 0x02, 
-0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0xe5, 0x22, 0x12, 0x24, 0xc8, 0xee, 0x8f, 0xf0, 
-0x12, 0x09, 0xff, 0xe5, 0x22, 0x12, 0x24, 0xc8, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe5, 0x22, 0x12, 
-0x25, 0x54, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x05, 0x22, 0x80, 0xc2, 0x15, 0x23, 0xe5, 0x23, 0x70, 
-0xb1, 0x78, 0x88, 0x76, 0x02, 0x12, 0x2a, 0xbe, 0x7f, 0xff, 0x12, 0x26, 0x5a, 0x78, 0x8f, 0xe6, 
-0xfd, 0xe4, 0xff, 0x12, 0x21, 0x29, 0x78, 0x89, 0xe6, 0x30, 0xe1, 0x04, 0x78, 0x8e, 0x76, 0x50, 
-0x78, 0x8f, 0xe6, 0xfd, 0xe4, 0xff, 0x02, 0x1f, 0xf2, 0xe4, 0x78, 0x88, 0xf6, 0x22, 0xe5, 0x09, 
-0x24, 0x05, 0x12, 0x12, 0x63, 0xe0, 0x60, 0x12, 0xe5, 0x09, 0x24, 0x25, 0x12, 0x12, 0x63, 0xe0, 
-0x7e, 0x01, 0x60, 0x02, 0x7e, 0x03, 0xaf, 0x06, 0x80, 0x1e, 0xe5, 0x09, 0x24, 0x25, 0x12, 0x12, 
-0x63, 0xe0, 0x60, 0x12, 0xe5, 0x09, 0x24, 0x0a, 0x12, 0x12, 0x63, 0xe0, 0x7e, 0x02, 0x60, 0x02, 
-0x7e, 0x03, 0xaf, 0x06, 0x80, 0x02, 0xe4, 0xff, 0xe5, 0x09, 0x24, 0x06, 0x12, 0x12, 0x63, 0xef, 
-0xf0, 0xe5, 0x09, 0x24, 0x05, 0x12, 0x12, 0x63, 0xe0, 0xfe, 0xe5, 0x09, 0x24, 0x25, 0x12, 0x12, 
-0x63, 0xee, 0x12, 0x12, 0x6f, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xe5, 0x09, 0x24, 0x21, 0x12, 0x12, 
-0x63, 0xec, 0xf0, 0xed, 0x12, 0x12, 0x6e, 0xa3, 0xa3, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0x12, 0x12, 
-0x5f, 0xec, 0xf0, 0xa3, 0xed, 0xf0, 0xe5, 0x09, 0x24, 0x06, 0x12, 0x12, 0x63, 0xe0, 0xfe, 0xe5, 
-0x09, 0x24, 0x26, 0x12, 0x12, 0x63, 0xee, 0xf0, 0x22, 0x78, 0xff, 0xe4, 0xf6, 0xd8, 0xfd, 0x90, 
-0x00, 0x00, 0x7f, 0x00, 0x7e, 0x03, 0xe4, 0xf0, 0xa3, 0xdf, 0xfc, 0xde, 0xfa, 0x75, 0x81, 0xb0, 
-0x75, 0xa0, 0x00, 0x02, 0x2c, 0xb9, 0x12, 0x2b, 0x22, 0x22, 0x90, 0x00, 0x04, 0x02, 0x09, 0x01, 
-0x01, 0x06, 0x8f, 0x27, 0x8d, 0x28, 0x78, 0x8e, 0xe6, 0x60, 0x01, 0x16, 0x12, 0x24, 0xc6, 0xe0, 
-0xfe, 0xa3, 0xe0, 0xff, 0xe5, 0x27, 0x12, 0x24, 0xb8, 0xe0, 0xfc, 0xa3, 0xe0, 0xc3, 0x9f, 0xf5, 
-0x2a, 0xec, 0x9e, 0xf5, 0x29, 0x12, 0x25, 0x27, 0xe0, 0xf5, 0x2b, 0x78, 0x8e, 0xe6, 0x60, 0x09, 
-0xd3, 0x12, 0x25, 0x62, 0x40, 0x03, 0x02, 0x20, 0xe2, 0xaf, 0x2a, 0xae, 0x29, 0x12, 0x2b, 0x6f, 
-0x12, 0x24, 0xee, 0xc3, 0x74, 0x08, 0x93, 0x9f, 0x74, 0x07, 0x93, 0x9e, 0x50, 0x0d, 0x12, 0x25, 
-0x62, 0x40, 0x04, 0x05, 0x2b, 0x80, 0x57, 0x15, 0x2b, 0x80, 0x53, 0x12, 0x24, 0xfe, 0xe0, 0xff, 
-0x33, 0x95, 0xe0, 0xfe, 0xef, 0x25, 0x2a, 0xf5, 0x2a, 0xee, 0x35, 0x29, 0xf5, 0x29, 0xd3, 0xe5, 
-0x2a, 0x94, 0x78, 0x12, 0x25, 0x66, 0x40, 0x09, 0x12, 0x24, 0xc6, 0xe4, 0x75, 0xf0, 0x01, 0x80, 
-0x1a, 0xe5, 0x2a, 0x24, 0x78, 0xe4, 0x35, 0x29, 0xc3, 0x64, 0x80, 0x94, 0x80, 0xe5, 0x27, 0x75, 
-0xf0, 0x0a, 0x50, 0x11, 0x12, 0x24, 0xcb, 0x74, 0xff, 0xf5, 0xf0, 0x12, 0x09, 0xff, 0x12, 0x24, 
-0xfe, 0xe4, 0xf0, 0x80, 0x06, 0x12, 0x25, 0x03, 0xe5, 0x2a, 0xf0, 0xe4, 0xf5, 0x2b, 0x12, 0x24, 
-0xee, 0x74, 0x04, 0x93, 0xff, 0xd3, 0x64, 0x80, 0xf8, 0xe5, 0x2b, 0x64, 0x80, 0x98, 0x50, 0x17, 
-0xef, 0x33, 0x95, 0xe0, 0xfe, 0xad, 0x2b, 0xed, 0x33, 0x95, 0xe0, 0xfc, 0xed, 0x2f, 0xec, 0x3e, 
-0xc3, 0x64, 0x80, 0x94, 0x80, 0x50, 0x15, 0xe4, 0xf5, 0x2b, 0xe5, 0x27, 0x12, 0x24, 0xb8, 0xe0, 
-0xfe, 0xa3, 0xe0, 0xff, 0x12, 0x24, 0xc6, 0xee, 0xf0, 0xa3, 0xef, 0xf0, 0x12, 0x25, 0x27, 0xe5, 
-0x2b, 0xf0, 0x78, 0x8e, 0xe6, 0x70, 0x36, 0x12, 0x24, 0xc6, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xe5, 
-0x27, 0x12, 0x25, 0x54, 0x12, 0x25, 0x74, 0x12, 0x2b, 0x6f, 0xaa, 0x06, 0xab, 0x07, 0x12, 0x24, 
-0xee, 0x74, 0x07, 0x93, 0xfe, 0x74, 0x08, 0x93, 0xff, 0x7c, 0x00, 0x7d, 0x03, 0x12, 0x09, 0x62, 
-0xd3, 0xeb, 0x9f, 0xea, 0x9e, 0x40, 0x06, 0x78, 0x89, 0xe6, 0x44, 0x10, 0xf6, 0x05, 0x27, 0x15, 
-0x28, 0xe5, 0x28, 0x60, 0x03, 0x02, 0x1f, 0xfc, 0x22, 0xab, 0x07, 0xaa, 0x05, 0xe4, 0x90, 0x01, 
-0xb0, 0xf0, 0xeb, 0x12, 0x24, 0xb8, 0xe0, 0xf5, 0x29, 0xa3, 0xe0, 0xf5, 0x2a, 0x78, 0x8f, 0xe6, 
-0xff, 0xeb, 0xc3, 0x9f, 0x40, 0x04, 0x78, 0x86, 0x80, 0x02, 0x78, 0x7e, 0xe6, 0x75, 0x27, 0x00, 
-0xf5, 0x28, 0xae, 0x27, 0xaf, 0x28, 0x7c, 0x00, 0x7d, 0xfc, 0x12, 0x09, 0x62, 0xd3, 0xe5, 0x2a, 
-0x9f, 0xe5, 0x29, 0x9e, 0x40, 0x0e, 0x78, 0x89, 0xe6, 0x44, 0x20, 0xf6, 0x74, 0x20, 0x2b, 0xf8, 
-0xe2, 0x44, 0x10, 0xf2, 0x12, 0x24, 0xee, 0x74, 0x08, 0x93, 0x25, 0xe0, 0xf5, 0x2a, 0x74, 0x07, 
-0x93, 0x33, 0xf5, 0x29, 0x74, 0x20, 0x2b, 0xf8, 0xe2, 0xf9, 0x30, 0xe0, 0x19, 0xe5, 0x2a, 0xae, 
-0x29, 0x78, 0x02, 0xce, 0xc3, 0x13, 0xce, 0x13, 0xd8, 0xf9, 0xff, 0xc3, 0xe5, 0x2a, 0x9f, 0xf5, 
-0x2a, 0xe5, 0x29, 0x9e, 0xf5, 0x29, 0xe5, 0x29, 0xc3, 0x13, 0xfe, 0xe5, 0x2a, 0x13, 0xff, 0xeb, 
-0x12, 0x24, 0xc8, 0xe0, 0xfc, 0xa3, 0xe0, 0x2f, 0xff, 0xec, 0x3e, 0xfe, 0xeb, 0x12, 0x24, 0xb8, 
-0xe0, 0xfc, 0xa3, 0xe0, 0xd3, 0x9f, 0xec, 0x9e, 0x40, 0x51, 0x74, 0x20, 0x2b, 0xf8, 0xe9, 0x44, 
-0x02, 0xf2, 0xeb, 0x12, 0x24, 0xc8, 0xe0, 0xfe, 0xa3, 0xe0, 0x25, 0x2a, 0xff, 0xe5, 0x29, 0x3e, 
-0xfe, 0xeb, 0x12, 0x24, 0xb8, 0xe0, 0xfc, 0xa3, 0xe0, 0xd3, 0x9f, 0xec, 0x9e, 0x40, 0x22, 0x78, 
-0x89, 0xe6, 0x44, 0x02, 0xf6, 0x44, 0x08, 0xf6, 0x74, 0x20, 0x2b, 0xf8, 0xe2, 0x44, 0x01, 0xf2, 
-0x78, 0x8f, 0xe6, 0xff, 0xeb, 0xc3, 0x9f, 0x50, 0x1a, 0x90, 0x01, 0xb0, 0xe0, 0x04, 0xf0, 0x80, 
-0x12, 0x74, 0x20, 0x2b, 0xf8, 0xe2, 0x54, 0xfe, 0xf2, 0x80, 0x08, 0x74, 0x20, 0x2b, 0xf8, 0xe9, 
-0x54, 0xfd, 0xf2, 0xeb, 0x12, 0x24, 0xc8, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xeb, 0x12, 0x24, 0xb8, 
-0x12, 0x25, 0x1d, 0xeb, 0x40, 0x17, 0x12, 0x24, 0xc8, 0xe0, 0xfe, 0xa3, 0xe0, 0x12, 0x25, 0x15, 
-0xf8, 0xeb, 0x25, 0xe0, 0x24, 0x00, 0xc8, 0xf2, 0x08, 0xef, 0xf2, 0x80, 0x09, 0x25, 0xe0, 0x24, 
-0x00, 0xf8, 0xe4, 0xf2, 0x08, 0xf2, 0x0b, 0x1a, 0xea, 0x60, 0x03, 0x02, 0x21, 0x32, 0x22, 0xe4, 
-0x78, 0x74, 0xf6, 0x08, 0xf6, 0x78, 0x6e, 0xf6, 0x08, 0xf6, 0x08, 0xf6, 0x08, 0xf6, 0x08, 0xf6, 
-0x08, 0xf6, 0xf5, 0x22, 0xff, 0xf5, 0x23, 0x7e, 0xff, 0xe5, 0x22, 0xc3, 0x78, 0xaa, 0x96, 0x40, 
-0x03, 0x02, 0x23, 0x11, 0xe5, 0x22, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0x02, 0xf8, 0xe2, 0xfc, 0x08, 
-0xe2, 0xfd, 0xe5, 0x22, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0x01, 0xf8, 0xe2, 0x2d, 0xf5, 0x28, 0x18, 
-0xe2, 0x3c, 0xf5, 0x27, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0x78, 0x74, 0xe6, 0xfc, 0x08, 0xe6, 
-0xfd, 0x74, 0x08, 0x93, 0x2d, 0xfb, 0x74, 0x07, 0x93, 0x3c, 0xfa, 0xd3, 0xe5, 0x28, 0x9b, 0xe5, 
-0x27, 0x9a, 0x40, 0x05, 0x7f, 0x01, 0x18, 0x80, 0x3c, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0x74, 
-0x08, 0x93, 0x25, 0x28, 0xfb, 0x74, 0x07, 0x93, 0x35, 0x27, 0xfa, 0xd3, 0xed, 0x9b, 0xec, 0x9a, 
-0x40, 0x2a, 0xef, 0x60, 0x1e, 0xe4, 0xff, 0x12, 0x14, 0x4e, 0xfc, 0x08, 0xe6, 0xfd, 0xe5, 0x23, 
-0x25, 0xe0, 0x24, 0x6e, 0xf8, 0xa6, 0x04, 0x08, 0xa6, 0x05, 0x05, 0x23, 0xe5, 0x23, 0xc3, 0x94, 
-0x03, 0x50, 0x0e, 0x78, 0x74, 0xa6, 0x27, 0x08, 0xa6, 0x28, 0xae, 0x22, 0x05, 0x22, 0x02, 0x22, 
-0x79, 0xef, 0x60, 0x1c, 0xe5, 0x23, 0xc3, 0x94, 0x02, 0x50, 0x15, 0x12, 0x14, 0x4e, 0xfe, 0x08, 
-0xe6, 0xff, 0xe5, 0x23, 0x25, 0xe0, 0x24, 0x6e, 0xf8, 0xa6, 0x06, 0x08, 0xa6, 0x07, 0x05, 0x23, 
-0x7b, 0x00, 0x7a, 0x00, 0x79, 0x6e, 0x75, 0x2d, 0xff, 0x12, 0x23, 0x6d, 0xb4, 0xff, 0x04, 0x7f, 
-0xff, 0x80, 0x07, 0x74, 0x24, 0x25, 0x22, 0xf8, 0xe6, 0xff, 0x78, 0xab, 0xa6, 0x07, 0x7b, 0x00, 
-0x7a, 0x00, 0x79, 0x6e, 0x85, 0x22, 0x2d, 0x12, 0x23, 0x6d, 0xb4, 0xff, 0x04, 0x7f, 0xff, 0x80, 
-0x07, 0x74, 0x24, 0x25, 0x22, 0xf8, 0xe6, 0xff, 0x78, 0xac, 0xa6, 0x07, 0x22, 0xad, 0x23, 0x12, 
-0x29, 0x30, 0x8f, 0x22, 0xe5, 0x22, 0x22, 0x8b, 0x1e, 0x8a, 0x1f, 0x89, 0x20, 0xe4, 0xf5, 0x21, 
-0xf5, 0x22, 0xf5, 0x23, 0x85, 0x5b, 0x82, 0x85, 0x5a, 0x83, 0xe4, 0x93, 0xff, 0xe5, 0x21, 0xc3, 
-0x9f, 0x40, 0x03, 0x02, 0x24, 0x58, 0x12, 0x00, 0x18, 0x74, 0x01, 0x93, 0xf5, 0x24, 0x12, 0x00, 
-0x12, 0x74, 0x02, 0x93, 0xf5, 0x25, 0x12, 0x00, 0x12, 0x74, 0x04, 0x93, 0xfc, 0x74, 0x05, 0x93, 
-0xfd, 0xe5, 0x24, 0x25, 0xe0, 0x24, 0x00, 0xf8, 0xe2, 0xfe, 0x08, 0xe2, 0xff, 0xd3, 0x9d, 0xee, 
-0x9c, 0x40, 0x6f, 0x7c, 0x00, 0x7d, 0x05, 0x12, 0x09, 0x62, 0xe5, 0x25, 0x25, 0xe0, 0x24, 0x01, 
-0xf8, 0xe2, 0x24, 0x01, 0xfd, 0x18, 0xe2, 0x34, 0x00, 0xfc, 0x12, 0x09, 0x74, 0x8e, 0x26, 0x8f, 
-0x27, 0x12, 0x00, 0x12, 0x74, 0x03, 0x93, 0x30, 0xe7, 0x2b, 0x54, 0x7f, 0xc3, 0x95, 0x27, 0xff, 
-0xe4, 0x95, 0x26, 0xfe, 0x12, 0x2b, 0x6f, 0xc3, 0x74, 0x03, 0x9f, 0xee, 0x64, 0x80, 0xf8, 0x74, 
-0x80, 0x98, 0x40, 0x2e, 0xaf, 0x21, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 
-0xfc, 0x42, 0x22, 0x80, 0x1d, 0x12, 0x00, 0x12, 0x74, 0x03, 0x93, 0xc3, 0x95, 0x27, 0xe4, 0x95, 
-0x26, 0x50, 0x0f, 0xaf, 0x21, 0x74, 0x01, 0xa8, 0x07, 0x08, 0x80, 0x02, 0xc3, 0x33, 0xd8, 0xfc, 
-0x42, 0x22, 0x12, 0x00, 0x12, 0x74, 0x01, 0x93, 0x24, 0x20, 0xf8, 0xe2, 0xc3, 0x13, 0x20, 0xe0, 
-0x0f, 0x12, 0x00, 0x12, 0x74, 0x02, 0x93, 0x24, 0x20, 0xf8, 0xe2, 0xc3, 0x13, 0x30, 0xe0, 0x03, 
-0x75, 0x23, 0x01, 0x05, 0x21, 0x02, 0x23, 0x84, 0x90, 0x00, 0x36, 0xe0, 0x65, 0x22, 0x60, 0x0a, 
-0xe5, 0x22, 0xf0, 0xe4, 0x90, 0x00, 0x35, 0xf0, 0x80, 0x14, 0x90, 0x00, 0x35, 0xe0, 0x04, 0xf0, 
-0xc3, 0x94, 0x03, 0x40, 0x09, 0xe0, 0x14, 0xf0, 0x90, 0x00, 0x37, 0xe5, 0x22, 0xf0, 0x90, 0x00, 
-0x37, 0xe0, 0xab, 0x1e, 0xaa, 0x1f, 0xa9, 0x20, 0x12, 0x09, 0x2e, 0xaf, 0x23, 0x22, 0x12, 0x27, 
-0xf8, 0x78, 0x7c, 0xe6, 0xff, 0xe5, 0x59, 0x24, 0x09, 0xf5, 0x82, 0xe4, 0x35, 0x58, 0xf5, 0x83, 
-0xe5, 0x82, 0x2f, 0xf5, 0x82, 0xe4, 0x35, 0x83, 0xf5, 0x83, 0xe4, 0x93, 0xff, 0x22, 0x74, 0x07, 
-0x93, 0xfe, 0x74, 0x08, 0x93, 0xff, 0xe6, 0xfd, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xb1, 0xf5, 0x82, 
-0xe4, 0x34, 0x01, 0xf5, 0x83, 0x22, 0xe5, 0x27, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xb3, 0xf5, 0x82, 
-0xe4, 0x34, 0x01, 0xf5, 0x83, 0x22, 0xe0, 0xfa, 0xa3, 0xe0, 0x2f, 0xff, 0xea, 0x3e, 0xfe, 0xed, 
-0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xb7, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83, 0x22, 0x85, 0x59, 
-0x82, 0x85, 0x58, 0x83, 0x22, 0x7b, 0x01, 0x7a, 0x01, 0x79, 0xb1, 0x02, 0x0c, 0xd9, 0xe5, 0x27, 
-0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xb5, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83, 0x22, 0xe0, 0xc3, 
-0x13, 0xfe, 0xa3, 0xe0, 0x13, 0xff, 0xc3, 0xed, 0x9f, 0xff, 0xec, 0x9e, 0x22, 0xe0, 0xfc, 0xa3, 
-0xe0, 0xfd, 0xd3, 0x9f, 0xec, 0x9e, 0x22, 0xe5, 0x27, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xb6, 0xf5, 
-0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83, 0x22, 0xe6, 0x90, 0xff, 0x55, 0xf0, 0x90, 0xff, 0x5d, 0xf0, 
-0x22, 0x43, 0xad, 0x04, 0x90, 0xff, 0x40, 0x74, 0x29, 0xf0, 0x22, 0x7e, 0x00, 0x7d, 0x00, 0x7b, 
-0xfe, 0x02, 0x0c, 0xd9, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xb9, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 
-0x83, 0x22, 0xe5, 0x2a, 0x94, 0x00, 0xe5, 0x29, 0x64, 0x80, 0x94, 0x80, 0x22, 0x85, 0x1f, 0x82, 
-0x85, 0x1e, 0x83, 0x22, 0xe0, 0xfc, 0xa3, 0xe0, 0xc3, 0x9f, 0xff, 0xec, 0x9e, 0xfe, 0x22, 0x78, 
-0x7d, 0x06, 0x06, 0x18, 0x06, 0x06, 0x78, 0x8d, 0x16, 0x22, 0x90, 0xff, 0x43, 0x74, 0x9f, 0xf0, 
-0x22, 0x8e, 0x1e, 0x8f, 0x1f, 0xe4, 0x78, 0x88, 0xf6, 0x78, 0x8b, 0xf6, 0x85, 0x1e, 0x58, 0x85, 
-0x1f, 0x59, 0xe5, 0x1f, 0x24, 0x31, 0xff, 0xe4, 0x35, 0x1e, 0xfa, 0xa9, 0x07, 0x7b, 0xff, 0x78, 
-0x7e, 0x7c, 0x00, 0x7d, 0x00, 0x7e, 0x00, 0x7f, 0x0a, 0x12, 0x08, 0xc2, 0x7e, 0x00, 0x7f, 0xa0, 
-0x7d, 0x00, 0x12, 0x24, 0xf5, 0x12, 0x25, 0x6d, 0x74, 0x31, 0x93, 0x78, 0x7e, 0xf6, 0x12, 0x25, 
-0x6d, 0x74, 0x39, 0x93, 0x78, 0x86, 0xf6, 0x12, 0x24, 0xee, 0x74, 0x05, 0x93, 0xff, 0x7e, 0x00, 
-0x7c, 0x10, 0x7d, 0x00, 0x12, 0x0c, 0xac, 0xe4, 0x7b, 0xc8, 0xfa, 0xf9, 0xf8, 0x12, 0x0b, 0x9c, 
-0x78, 0x7a, 0xa6, 0x06, 0x08, 0xa6, 0x07, 0xe4, 0x78, 0x8d, 0xf6, 0x43, 0x95, 0x80, 0x90, 0xff, 
-0x41, 0x74, 0x77, 0xf0, 0x90, 0xff, 0x49, 0x74, 0x0d, 0xf0, 0x12, 0x25, 0x6d, 0xe4, 0x93, 0xf5, 
-0x20, 0xf4, 0x60, 0x0c, 0xe4, 0xfd, 0xaf, 0x20, 0x12, 0x29, 0xd6, 0xe4, 0xfd, 0x12, 0x26, 0x46, 
-0x12, 0x25, 0x6d, 0x74, 0x01, 0x93, 0xf5, 0x20, 0xf4, 0x60, 0x0c, 0xe4, 0xfd, 0xaf, 0x20, 0x12, 
-0x29, 0xd6, 0x7d, 0x01, 0x12, 0x26, 0x46, 0x78, 0x84, 0xe6, 0x7f, 0x08, 0x30, 0xe0, 0x02, 0x7f, 
-0x05, 0x78, 0x8c, 0xa6, 0x07, 0x22, 0xaf, 0x20, 0x12, 0x2a, 0x0a, 0x7d, 0x08, 0xaf, 0x20, 0x12, 
-0x28, 0x53, 0x7d, 0x07, 0xaf, 0x20, 0x12, 0x28, 0x53, 0x22, 0x90, 0xff, 0x4a, 0x74, 0x71, 0xf0, 
-0x90, 0xff, 0x50, 0x74, 0x0f, 0xf0, 0x90, 0xff, 0x58, 0xf0, 0xe4, 0x90, 0xff, 0x40, 0xf0, 0x12, 
-0x25, 0x8a, 0x78, 0x81, 0xe6, 0x90, 0xff, 0x54, 0xf0, 0x90, 0xff, 0x5c, 0xf0, 0x78, 0x7f, 0xe6, 
-0x90, 0xff, 0x42, 0xf0, 0x78, 0x83, 0x12, 0x25, 0x37, 0x90, 0xff, 0x48, 0x74, 0x02, 0xf0, 0x12, 
-0x25, 0x41, 0x90, 0xff, 0x43, 0xe0, 0x20, 0xe4, 0x08, 0x75, 0x91, 0xc1, 0xe4, 0xf5, 0x91, 0x80, 
-0xf1, 0x12, 0x25, 0x8a, 0xe4, 0x78, 0x8a, 0xf6, 0x78, 0x7d, 0xbf, 0xff, 0x1b, 0xf6, 0x18, 0x76, 
-0x01, 0x78, 0x8f, 0xe6, 0xc3, 0x13, 0x78, 0x8d, 0xf6, 0x78, 0x7f, 0xe6, 0x90, 0xff, 0x42, 0xf0, 
-0x08, 0x12, 0x25, 0x37, 0x78, 0x7e, 0x80, 0x1b, 0xa6, 0x07, 0xef, 0x04, 0x18, 0xf6, 0x78, 0x8d, 
-0x76, 0x01, 0x78, 0x8a, 0x76, 0x01, 0x78, 0x85, 0xe6, 0x90, 0xff, 0x42, 0xf0, 0x78, 0x87, 0x12, 
-0x25, 0x37, 0x18, 0xe6, 0x90, 0xff, 0x48, 0xf0, 0x7e, 0x00, 0x7f, 0x14, 0x7d, 0x00, 0x7b, 0x01, 
-0x7a, 0x02, 0x79, 0x55, 0x12, 0x0c, 0xd9, 0x12, 0x28, 0xa7, 0x78, 0x82, 0xe6, 0x30, 0xe7, 0x1b, 
-0x12, 0x25, 0x41, 0x90, 0xff, 0x43, 0xe0, 0x20, 0xe4, 0x08, 0x75, 0x91, 0xc1, 0xe4, 0xf5, 0x91, 
-0x80, 0xf1, 0x12, 0x16, 0xaf, 0x78, 0x8d, 0xe6, 0x70, 0xe9, 0x22, 0x53, 0xad, 0xfb, 0x12, 0x25, 
-0x44, 0x22, 0xab, 0x07, 0xbb, 0xff, 0x03, 0x7f, 0xff, 0x22, 0xeb, 0x70, 0x0c, 0x12, 0x12, 0x89, 
-0x74, 0x11, 0x93, 0xf5, 0x22, 0x74, 0x12, 0x80, 0x1d, 0x78, 0xaa, 0xe6, 0x14, 0xb5, 0x03, 0x0c, 
-0x12, 0x12, 0x89, 0x74, 0x13, 0x93, 0xf5, 0x22, 0x74, 0x14, 0x80, 0x0a, 0x12, 0x12, 0x89, 0x74, 
-0x0f, 0x93, 0xf5, 0x22, 0x74, 0x10, 0x93, 0xf5, 0x23, 0x90, 0x02, 0x8f, 0xe0, 0x70, 0x06, 0x90, 
-0x02, 0xb6, 0xe0, 0x60, 0x14, 0xe5, 0x23, 0x25, 0xe0, 0xff, 0xe5, 0x22, 0x33, 0xfe, 0x7c, 0x00, 
-0x7d, 0x03, 0x12, 0x09, 0x74, 0x8e, 0x22, 0x8f, 0x23, 0xeb, 0x25, 0xe0, 0x25, 0xe0, 0x24, 0x02, 
-0x12, 0x14, 0x6d, 0xeb, 0x25, 0xe0, 0x12, 0x13, 0x10, 0xfe, 0xc3, 0xef, 0x95, 0x23, 0xee, 0x95, 
-0x22, 0xaf, 0x03, 0x50, 0x02, 0x7f, 0xff, 0x22, 0xf6, 0x08, 0xf6, 0x08, 0xf6, 0x08, 0xf6, 0x22, 
-0x8f, 0x23, 0xe4, 0x78, 0x94, 0xf6, 0x08, 0xf6, 0x78, 0x92, 0xf6, 0x08, 0xf6, 0x90, 0x01, 0x9c, 
-0xe0, 0x7f, 0x00, 0x22, 0x9f, 0xff, 0xe4, 0x94, 0x00, 0xfe, 0xef, 0x26, 0xf6, 0x18, 0xee, 0x36, 
-0xf6, 0x22, 0x90, 0x01, 0x9b, 0xe0, 0xff, 0x78, 0x9c, 0xe6, 0x22, 0xe6, 0xfe, 0x08, 0xe6, 0xff, 
-0x7c, 0x00, 0x7d, 0x0a, 0x02, 0x09, 0x62, 0xd3, 0xef, 0x9d, 0xec, 0x64, 0x80, 0xf8, 0xee, 0x64, 
-0x80, 0x98, 0x22, 0xd3, 0xe6, 0x94, 0x00, 0x18, 0xe6, 0x64, 0x80, 0x94, 0x80, 0x22, 0xd3, 0xef, 
-0x95, 0x22, 0x74, 0x80, 0xf8, 0x6e, 0x98, 0x22, 0xef, 0x54, 0x07, 0x90, 0x2c, 0xa9, 0x93, 0xfe, 
-0xf4, 0xfc, 0xef, 0x54, 0xf0, 0xff, 0xc2, 0xaf, 0x75, 0xa0, 0xff, 0x64, 0x10, 0x70, 0x16, 0xbd, 
-0x08, 0x02, 0x7d, 0x02, 0x78, 0x12, 0xed, 0x30, 0xe2, 0x05, 0xe2, 0x4e, 0xf2, 0x80, 0x03, 0xe2, 
-0x5c, 0xf2, 0x18, 0x80, 0x08, 0xef, 0x13, 0x13, 0x54, 0x3f, 0x24, 0x11, 0xf8, 0xed, 0x24, 0xfb, 
-0x60, 0x0b, 0x14, 0x60, 0x11, 0x24, 0xfe, 0x70, 0x14, 0xe2, 0x5c, 0x80, 0x0b, 0xe2, 0x5c, 0xf2, 
-0x18, 0xe2, 0x4e, 0xf2, 0x80, 0x07, 0xe2, 0x4e, 0xf2, 0x18, 0xe2, 0x5c, 0xf2, 0xe4, 0xf5, 0xa0, 
-0xd2, 0xaf, 0x22, 0xef, 0x54, 0x07, 0x90, 0x2c, 0xb1, 0x93, 0xfe, 0xf4, 0xfc, 0xef, 0x54, 0xf0, 
-0xff, 0xc2, 0xaf, 0x75, 0xa0, 0xff, 0x64, 0x10, 0x70, 0x16, 0xbd, 0x08, 0x02, 0x7d, 0x02, 0x78, 
-0x12, 0xed, 0x30, 0xe2, 0x05, 0xe2, 0x4e, 0xf2, 0x80, 0x03, 0xe2, 0x5c, 0xf2, 0x18, 0x80, 0x08, 
-0xef, 0x13, 0x13, 0x54, 0x3f, 0x24, 0x11, 0xf8, 0xed, 0x30, 0xe1, 0x05, 0xe2, 0x4e, 0xf2, 0x80, 
-0x03, 0xe2, 0x5c, 0xf2, 0x18, 0xed, 0x30, 0xe0, 0x05, 0xe2, 0x4e, 0xf2, 0x80, 0x03, 0xe2, 0x5c, 
-0xf2, 0xe4, 0xf5, 0xa0, 0xd2, 0xaf, 0x22, 0x15, 0x0f, 0xa8, 0x0f, 0x76, 0x64, 0x90, 0xff, 0x58, 
-0xe0, 0xff, 0x90, 0xff, 0x50, 0xe0, 0x4f, 0x30, 0xe7, 0x06, 0xa8, 0x0f, 0x16, 0xe6, 0x70, 0xed, 
-0x78, 0x8a, 0xe6, 0x60, 0x1b, 0xa8, 0x0f, 0xe4, 0xf6, 0xa8, 0x0f, 0xe6, 0xff, 0xc3, 0x78, 0x8f, 
-0x96, 0x50, 0x1c, 0x12, 0x24, 0x95, 0x7d, 0x06, 0x12, 0x28, 0x53, 0xa8, 0x0f, 0x06, 0x80, 0xe9, 
-0x78, 0x7d, 0x12, 0x24, 0x93, 0x7d, 0x06, 0x12, 0x24, 0x8e, 0x7d, 0x06, 0x12, 0x27, 0xf8, 0x12, 
-0x25, 0x44, 0x05, 0x0f, 0x22, 0xc0, 0xe0, 0xc0, 0xf0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 
-0xd0, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 0x03, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 
-0xc0, 0x07, 0x12, 0x16, 0xaf, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xd0, 0x03, 0xd0, 
-0x02, 0xd0, 0x01, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0x32, 
-0x8d, 0x2c, 0xe4, 0xff, 0xf5, 0x2e, 0xf5, 0x2f, 0x7e, 0xff, 0xef, 0xc3, 0x95, 0x2c, 0x50, 0x28, 
-0xef, 0x65, 0x2d, 0x60, 0x19, 0x12, 0x0a, 0x15, 0xfd, 0xac, 0xf0, 0xd3, 0x95, 0x2f, 0xec, 0x95, 
-0x2e, 0x40, 0x0b, 0xed, 0x24, 0x20, 0xf5, 0x2f, 0xe4, 0x3c, 0xf5, 0x2e, 0xae, 0x07, 0x0f, 0x74, 
-0x02, 0x29, 0xf9, 0xe4, 0x3a, 0xfa, 0x80, 0xd2, 0xaf, 0x06, 0x22, 0xe4, 0x90, 0x00, 0x3a, 0xf0, 
-0xef, 0x70, 0x11, 0x75, 0x88, 0x08, 0xf5, 0x8d, 0xf5, 0x8c, 0xf5, 0x8f, 0xf5, 0x8e, 0xf5, 0x88, 
-0x43, 0xac, 0x02, 0x22, 0x75, 0x88, 0x08, 0xe4, 0xf5, 0x8d, 0xf5, 0x8c, 0xef, 0x75, 0xf0, 0x20, 
-0xa4, 0xff, 0xe5, 0xf0, 0x44, 0x80, 0xf5, 0x8f, 0x8f, 0x8e, 0x75, 0x88, 0xa0, 0x53, 0xac, 0xfd, 
-0x22, 0xe4, 0x78, 0xae, 0xf6, 0x8f, 0x82, 0x8e, 0x83, 0x74, 0x64, 0x93, 0x78, 0xaa, 0xf6, 0xef, 
-0x24, 0x64, 0xf5, 0x0b, 0xe4, 0x3e, 0xf5, 0x0a, 0x78, 0x30, 0xe2, 0x54, 0xfe, 0xf2, 0x54, 0xfd, 
-0xf2, 0x54, 0xfb, 0xf2, 0xe4, 0x90, 0x02, 0x72, 0xf0, 0x90, 0x02, 0x99, 0xf0, 0x90, 0x02, 0x73, 
-0xf0, 0x90, 0x02, 0x9a, 0xf0, 0x22, 0x12, 0x2b, 0x4a, 0xfb, 0xef, 0xf4, 0x60, 0x2b, 0xc2, 0xaf, 
-0x75, 0xa0, 0xff, 0xbb, 0x01, 0x04, 0x7e, 0x18, 0x80, 0x08, 0xeb, 0x25, 0xe0, 0x25, 0xe0, 0x24, 
-0x12, 0xfe, 0xed, 0xa8, 0x06, 0x60, 0x05, 0xe2, 0x4c, 0xf2, 0x80, 0x08, 0xe2, 0xff, 0xec, 0xf4, 
-0xfd, 0xef, 0x5d, 0xf2, 0xe4, 0xf5, 0xa0, 0xd2, 0xaf, 0x22, 0x12, 0x2b, 0x4a, 0xfe, 0xef, 0xf4, 
-0x60, 0x29, 0x90, 0xff, 0x13, 0xee, 0xd3, 0x94, 0x03, 0x40, 0x11, 0xaf, 0x06, 0xef, 0x75, 0xf0, 
-0x04, 0xa4, 0x25, 0x82, 0xf5, 0x82, 0xe5, 0xf0, 0x35, 0x83, 0xf5, 0x83, 0xed, 0x60, 0x04, 0xe0, 
-0x4c, 0xf0, 0x22, 0xe0, 0xff, 0xec, 0xf4, 0xfe, 0xef, 0x5e, 0xf0, 0x22, 0xab, 0x1e, 0xe5, 0x20, 
-0x24, 0x0c, 0xf9, 0xe4, 0x35, 0x1f, 0xfa, 0x7e, 0x00, 0xe9, 0x25, 0x27, 0xf9, 0xee, 0x3a, 0xfa, 
-0x12, 0x08, 0xe8, 0xff, 0x22, 0xab, 0x1e, 0xaa, 0x1f, 0xa9, 0x20, 0x90, 0x00, 0x0b, 0x12, 0x09, 
-0x01, 0xff, 0x22, 0x75, 0x8a, 0xa0, 0xe4, 0x90, 0x00, 0x3a, 0xf0, 0x22, 0xab, 0x1f, 0xaa, 0x20, 
-0xa9, 0x21, 0x90, 0x00, 0x01, 0x12, 0x09, 0x01, 0xff, 0x22, 0xf0, 0x90, 0xff, 0x58, 0xf0, 0xab, 
-0x1f, 0xaa, 0x20, 0xa9, 0x21, 0x12, 0x08, 0xe8, 0xff, 0x22, 0x90, 0xff, 0x54, 0xf0, 0x90, 0xff, 
-0x5c, 0xf0, 0x90, 0xff, 0x48, 0x22, 0x75, 0x9b, 0x5a, 0x75, 0x9a, 0xa5, 0x75, 0x99, 0xf0, 0x75, 
-0x98, 0x0f, 0x75, 0xac, 0xff, 0x75, 0xad, 0xff, 0x90, 0xff, 0x88, 0x74, 0x40, 0xf0, 0x74, 0xc0, 
-0xf0, 0x90, 0xff, 0x01, 0x74, 0x0f, 0xf0, 0x43, 0x95, 0x60, 0xe4, 0xf5, 0x96, 0x22, 0x78, 0x8d, 
-0xe6, 0x70, 0xfb, 0xff, 0xef, 0x12, 0x24, 0xe0, 0xe0, 0xfc, 0xa3, 0xe0, 0xfd, 0xef, 0x12, 0x24, 
-0xb8, 0xec, 0xf0, 0xa3, 0xed, 0xf0, 0x0f, 0xbf, 0x10, 0xea, 0x22, 0xef, 0x14, 0x60, 0x0a, 0x04, 
-0x70, 0x0e, 0x78, 0x30, 0xed, 0xf2, 0x7f, 0x00, 0x22, 0x78, 0xae, 0xa6, 0x05, 0x7f, 0x00, 0x22, 
-0x7f, 0x01, 0x22, 0xef, 0x24, 0x3b, 0xf5, 0x5b, 0xe4, 0x3e, 0xf5, 0x5a, 0x7e, 0x00, 0x7f, 0x03, 
-0x7d, 0x00, 0x7b, 0x01, 0x7a, 0x00, 0x79, 0x35, 0x02, 0x0c, 0xd9, 0x78, 0x9c, 0xe6, 0x60, 0x06, 
-0xc3, 0x94, 0xff, 0x50, 0x01, 0x06, 0x78, 0x9d, 0xe6, 0x60, 0x06, 0xc3, 0x94, 0xff, 0x50, 0x01, 
-0x06, 0x22, 0xef, 0x75, 0xf0, 0x0a, 0xa4, 0x24, 0xb1, 0xf5, 0x82, 0xe4, 0x34, 0x01, 0xf5, 0x83, 
-0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0x22, 0x7e, 0x00, 0x7f, 0x15, 0x7d, 0x00, 0x7b, 0x00, 0x7a, 0x00, 
-0x79, 0x90, 0x12, 0x0c, 0xd9, 0x78, 0xa3, 0x76, 0xff, 0x22, 0xef, 0x54, 0x07, 0x90, 0x2c, 0xb1, 
-0x93, 0xfc, 0xef, 0xc4, 0x54, 0x0f, 0x22, 0x78, 0x88, 0xa6, 0x07, 0xef, 0x70, 0x04, 0x78, 0x8b, 
-0xa6, 0x07, 0x22, 0xef, 0x25, 0xe0, 0x24, 0x00, 0xf8, 0xe2, 0xfe, 0x08, 0xe2, 0xff, 0x22, 0xee, 
-0x30, 0xe7, 0x07, 0xc3, 0xe4, 0x9f, 0xff, 0xe4, 0x9e, 0xfe, 0x22, 0x11, 0x16, 0x0e, 0x01, 0x0f, 
-0x78, 0x0f, 0x00, 0x64, 0x10, 0x41, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x46, 0x45, 0x44, 0x43, 
-0x17, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x28, 0x00, 
-0x80, 0x64, 0x00, 0x40, 0x40, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0xf0, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xc8, 
-0x00, 0xc8, 0x00, 0xc8, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 
-0x00, 0x00, 0x00, 0x00, 0x11, 0x16, 0x0c, 0x02, 0x0f, 0x78, 0x14, 0x00, 0x3c, 0x41, 0x44, 0x51, 
-0x45, 0x52, 0x46, 0x53, 0x56, 0x54, 0x55, 0x43, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x2f, 0x28, 0x00, 0x80, 0x78, 0x00, 0x40, 0x0e, 0x14, 0x01, 
-0x0a, 0x08, 0x07, 0x00, 0x82, 0x1f, 0x1e, 0x32, 0x01, 0x2c, 0x1b, 0x1a, 0x32, 0x01, 0x2c, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xef, 0x01, 0x3f, 0x00, 0x28, 0x00, 
-0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, 0xc8, 0x00, 0xf0, 0x01, 0x00, 0x00, 
-0x00, 0x04, 0x01, 0x00, 0x01, 0x01, 0x05, 0x02, 0x02, 0x30, 0x03, 0x07, 0x28, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x18, 
-0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 
-0x80, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0xc2, 0xaf, 0x51, 0x96, 0xe5, 0x9b, 0xb4, 
-0x5a, 0x16, 0xe5, 0x9a, 0xb4, 0xa5, 0x11, 0xe5, 0x99, 0xb4, 0xf0, 0x0c, 0xe5, 0x98, 0xb4, 0x0f, 
-0x07, 0x90, 0xff, 0x85, 0xe0, 0x44, 0x20, 0xf0, 0x75, 0x8a, 0x0a, 0xd2, 0xaf, 0x7f, 0x0c, 0x31, 
-0x6b, 0x12, 0x33, 0xd9, 0x91, 0xea, 0xf1, 0x7e, 0x80, 0xfa, 0x75, 0x8f, 0x81, 0x75, 0x8e, 0x80, 
-0x75, 0x8a, 0xa0, 0x75, 0x8a, 0x0a, 0x90, 0x00, 0x38, 0xe0, 0x70, 0x02, 0xa1, 0xae, 0x14, 0x70, 
-0x02, 0xa1, 0xd6, 0x24, 0xfc, 0x70, 0x02, 0xc1, 0xb0, 0x04, 0x60, 0x02, 0xe1, 0x02, 0xe4, 0xf5, 
-0x1d, 0xf5, 0x1c, 0xf5, 0x1b, 0xf5, 0x1a, 0x75, 0x0d, 0x2b, 0x75, 0x0e, 0x7b, 0x12, 0x35, 0x0c, 
-0xe4, 0xfd, 0xff, 0x51, 0xdb, 0xf1, 0x87, 0x12, 0x18, 0x3b, 0xe4, 0xf5, 0x19, 0xf1, 0x67, 0x74, 
-0x02, 0x93, 0xff, 0xe5, 0x19, 0xc3, 0x9f, 0x50, 0x33, 0xaf, 0x19, 0x12, 0x1f, 0xe6, 0xd3, 0xef, 
-0x94, 0xb0, 0xee, 0x94, 0x36, 0x40, 0x21, 0xe4, 0x7f, 0x01, 0xfe, 0xfd, 0xfc, 0xa9, 0x19, 0xa8, 
-0x01, 0x12, 0x0c, 0x3f, 0xe5, 0x1d, 0x4f, 0xf5, 0x1d, 0xe5, 0x1c, 0x4e, 0xf5, 0x1c, 0xe5, 0x1b, 
-0x4d, 0xf5, 0x1b, 0xe5, 0x1a, 0x4c, 0xf5, 0x1a, 0x05, 0x19, 0x80, 0xc1, 0x75, 0x0c, 0x04, 0xe5, 
-0x0c, 0x70, 0x02, 0xe1, 0x02, 0xff, 0x12, 0x34, 0xef, 0x8e, 0x0d, 0x8f, 0x0e, 0xef, 0x4e, 0x60, 
-0x05, 0xe4, 0x90, 0x00, 0x38, 0xf0, 0x90, 0x01, 0x5a, 0xe5, 0x0c, 0xf1, 0x66, 0x74, 0x85, 0x93, 
-0x90, 0x01, 0xa5, 0xf1, 0x66, 0x74, 0x86, 0x93, 0x90, 0x01, 0xa6, 0xf1, 0x66, 0x74, 0x87, 0x93, 
-0x90, 0x01, 0xa7, 0xf1, 0x66, 0x74, 0x88, 0x93, 0x90, 0x01, 0xa8, 0xf0, 0xe1, 0x02, 0xe4, 0x78, 
-0xa5, 0xf6, 0xf1, 0x8e, 0xef, 0x64, 0x01, 0x60, 0xf9, 0x12, 0x35, 0x0c, 0xaf, 0x0e, 0xae, 0x0d, 
-0x51, 0xf3, 0xe4, 0xfd, 0xff, 0x51, 0xdb, 0x71, 0x36, 0xe4, 0x78, 0xa8, 0xf6, 0x08, 0xf6, 0x90, 
-0x00, 0x38, 0x04, 0xf0, 0xe1, 0x02, 0xe4, 0x78, 0x60, 0xf6, 0x08, 0xf6, 0x90, 0x01, 0xaf, 0xe0, 
-0xb4, 0x01, 0x08, 0x90, 0x00, 0x38, 0x74, 0x05, 0xf0, 0xe1, 0x02, 0x78, 0xa5, 0x76, 0x01, 0xf1, 
-0x87, 0x12, 0x18, 0x3b, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x61, 0x12, 0x23, 0x77, 0x78, 0x60, 0xa6, 
-0x07, 0x78, 0x66, 0xe6, 0x60, 0x07, 0x78, 0x6c, 0xe6, 0x60, 0x02, 0xc1, 0x9f, 0x78, 0x61, 0xe6, 
-0x30, 0xe0, 0x0f, 0x08, 0x76, 0x00, 0x08, 0x76, 0x64, 0x08, 0x76, 0x01, 0x08, 0x76, 0x90, 0x08, 
-0x76, 0x01, 0x78, 0x66, 0xe6, 0x60, 0x11, 0x78, 0x63, 0xe6, 0x78, 0x5c, 0xf6, 0x78, 0x65, 0xe6, 
-0x78, 0x5d, 0xf6, 0x08, 0x76, 0x01, 0x80, 0x08, 0xe4, 0x78, 0x5c, 0xf6, 0x08, 0xf6, 0x08, 0xf6, 
-0x78, 0x1e, 0x7c, 0x00, 0x7d, 0x00, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x5c, 0x7e, 0x00, 0x7f, 0x03, 
-0x12, 0x08, 0xc2, 0x90, 0x01, 0x9f, 0xe0, 0xf5, 0x21, 0x75, 0x22, 0x0f, 0x12, 0x0d, 0x05, 0x78, 
-0x5f, 0xa6, 0x07, 0x78, 0x66, 0xe6, 0x60, 0x3d, 0x90, 0x01, 0xab, 0xe0, 0xff, 0x60, 0x15, 0x78, 
-0x5f, 0xe6, 0x70, 0x10, 0x12, 0x34, 0xfd, 0x70, 0x01, 0x06, 0x86, 0x04, 0xd3, 0x9f, 0xec, 0x9e, 
-0x40, 0x23, 0x80, 0x1b, 0x90, 0x01, 0xac, 0xe0, 0xff, 0x60, 0x1a, 0x78, 0x5f, 0xe6, 0xb4, 0x0c, 
-0x14, 0x12, 0x34, 0xfd, 0x70, 0x01, 0x06, 0x86, 0x04, 0xd3, 0x9f, 0xec, 0x9e, 0x40, 0x06, 0xe4, 
-0x90, 0x00, 0x38, 0xf0, 0x22, 0xf1, 0x87, 0x78, 0x61, 0xe6, 0xfd, 0x12, 0x30, 0xac, 0x80, 0x52, 
-0xf1, 0x67, 0x74, 0x02, 0x93, 0xff, 0x90, 0x01, 0x7b, 0xf0, 0x7e, 0x00, 0xe5, 0x0e, 0x24, 0x09, 
-0xfd, 0xe4, 0x35, 0x0d, 0xfa, 0xa9, 0x05, 0x7b, 0xff, 0x78, 0x7c, 0x7c, 0x01, 0x7d, 0x01, 0x12, 
-0x08, 0xc2, 0x90, 0x01, 0xaf, 0xe0, 0xb4, 0x01, 0x29, 0x75, 0x21, 0x01, 0x75, 0x22, 0x00, 0x75, 
-0x23, 0xf0, 0x75, 0x24, 0x01, 0x75, 0x25, 0x01, 0x75, 0x26, 0x30, 0x7b, 0x01, 0x7a, 0x01, 0x79, 
-0x70, 0x12, 0x19, 0xb6, 0xe4, 0x90, 0x01, 0xaf, 0xf0, 0x75, 0x8a, 0xa0, 0x90, 0x00, 0x3a, 0xf0, 
-0x80, 0xd0, 0x90, 0x01, 0x95, 0xe0, 0x64, 0x03, 0x70, 0x20, 0x7f, 0x01, 0x12, 0x32, 0xe8, 0x7f, 
-0x3c, 0x31, 0x6b, 0x75, 0x8d, 0x83, 0x75, 0x8c, 0xe8, 0xf1, 0x7e, 0x75, 0x8a, 0xa0, 0xf0, 0x75, 
-0x91, 0xc3, 0xf5, 0x91, 0xf1, 0xee, 0xf1, 0xee, 0x80, 0xef, 0xe4, 0x75, 0x1c, 0x88, 0x75, 0x1b, 
-0x13, 0xf5, 0x1a, 0xf5, 0x19, 0x78, 0xa5, 0xe6, 0x60, 0x2b, 0xaf, 0x1c, 0xae, 0x1b, 0xad, 0x1a, 
-0xac, 0x19, 0xec, 0x4d, 0x4e, 0x4f, 0x60, 0x1d, 0xf1, 0x7e, 0x75, 0x91, 0xc1, 0xf5, 0x91, 0xef, 
-0x24, 0xff, 0xf5, 0x1c, 0xee, 0x34, 0xff, 0xf5, 0x1b, 0xed, 0x34, 0xff, 0xf5, 0x1a, 0xec, 0x34, 
-0xff, 0xf5, 0x19, 0x80, 0xd0, 0x22, 0xf0, 0x85, 0x0e, 0x82, 0x85, 0x0d, 0x83, 0x22, 0x75, 0xf0, 
-0x20, 0xa4, 0x24, 0x08, 0xff, 0xe4, 0x35, 0xf0, 0x44, 0x80, 0xf5, 0x8f, 0x8f, 0x8e, 0x75, 0x8a, 
-0xa0, 0xe4, 0x90, 0x00, 0x3a, 0xf0, 0x22, 0x7b, 0x00, 0x7a, 0x00, 0x79, 0x62, 0x22, 0xe4, 0xf5, 
-0x1e, 0xaa, 0x0d, 0xa9, 0x0e, 0x7b, 0xff, 0x75, 0x22, 0x01, 0x75, 0x23, 0x00, 0x75, 0x24, 0x31, 
-0x12, 0x1b, 0x28, 0xf1, 0x67, 0xe4, 0x93, 0xf4, 0x60, 0x0f, 0x90, 0x00, 0x31, 0x12, 0x35, 0x1a, 
-0x40, 0x04, 0xf1, 0xe6, 0x40, 0x03, 0x75, 0x1e, 0x01, 0xf1, 0x67, 0x74, 0x01, 0x93, 0xf4, 0x60, 
-0x0f, 0x90, 0x00, 0x33, 0x12, 0x35, 0x1a, 0x40, 0x04, 0xf1, 0xe6, 0x40, 0x03, 0x75, 0x1e, 0x01, 
-0x78, 0x60, 0x7c, 0x01, 0x7d, 0x01, 0x7b, 0x01, 0x7a, 0x00, 0x79, 0x31, 0x7e, 0x00, 0x7f, 0x04, 
-0x12, 0x08, 0xc2, 0xaf, 0x1e, 0x22, 0xd3, 0xef, 0x94, 0xb8, 0xee, 0x94, 0x0b, 0x22, 0x75, 0x8a, 
-0xa0, 0xf0, 0x75, 0x8a, 0xa0, 0xf0, 0x22, 0x7c, 0x00, 0x7d, 0xb0, 0x7f, 0x15, 0x12, 0x33, 0x18, 
-0x90, 0xff, 0x10, 0xe0, 0x44, 0x18, 0xf0, 0x7e, 0x01, 0x7f, 0x00, 0x7d, 0x00, 0x7b, 0x01, 0x7a, 
-0x00, 0x79, 0xb0, 0x12, 0x0c, 0xd9, 0x51, 0xd5, 0x7d, 0x03, 0x7f, 0x12, 0x12, 0x28, 0x53, 0x90, 
-0xff, 0x1b, 0xe0, 0x54, 0xfb, 0xf0, 0x90, 0xff, 0x14, 0xe0, 0x44, 0x04, 0xf0, 0x90, 0x01, 0x57, 
-0x74, 0xb6, 0xf0, 0xe4, 0xa3, 0xf0, 0xa3, 0x04, 0xf0, 0xe4, 0x90, 0x01, 0x9c, 0xf0, 0xa3, 0x04, 
-0xf0, 0xa3, 0xf0, 0xa3, 0x74, 0x06, 0xf0, 0x90, 0x01, 0xa4, 0x74, 0x04, 0xf0, 0x90, 0x01, 0xa9, 
-0x74, 0x02, 0xf0, 0xa3, 0x74, 0x60, 0xf0, 0xa3, 0x74, 0x2d, 0xf0, 0xa3, 0x74, 0x32, 0xf0, 0xa3, 
-0x74, 0x01, 0xf0, 0xa3, 0xf0, 0x90, 0x01, 0x9b, 0x74, 0x64, 0xf0, 0x90, 0x01, 0x9a, 0x74, 0x03, 
-0xf0, 0xe4, 0x78, 0xb0, 0xf6, 0x11, 0x81, 0x78, 0xaf, 0x76, 0x01, 0xe4, 0x90, 0x00, 0xaf, 0xf0, 
-0x22, 0x90, 0x01, 0xad, 0xe0, 0xff, 0x30, 0xe0, 0x05, 0x43, 0x90, 0x10, 0x80, 0x03, 0x53, 0x90, 
-0xef, 0xef, 0x90, 0xff, 0x10, 0x30, 0xe1, 0x06, 0xe0, 0x54, 0xe7, 0xf0, 0x80, 0x04, 0xe0, 0x44, 
-0x18, 0xf0, 0x90, 0x01, 0xad, 0xe0, 0x30, 0xe2, 0x02, 0x51, 0xdd, 0x22, 0x8b, 0x1e, 0x8a, 0x1f, 
-0x89, 0x20, 0x8d, 0x21, 0x90, 0x01, 0xaa, 0xe0, 0xf5, 0x22, 0xe4, 0xf5, 0x23, 0x85, 0x21, 0x21, 
-0x51, 0xd5, 0x12, 0x1f, 0xea, 0xff, 0x7e, 0x00, 0x60, 0x02, 0x7e, 0x01, 0x90, 0x00, 0xb2, 0xee, 
-0xf0, 0x75, 0x24, 0x01, 0x75, 0x25, 0x00, 0x75, 0x26, 0xb3, 0xef, 0x60, 0x10, 0x51, 0x44, 0xab, 
-0x24, 0xaa, 0x25, 0xa9, 0x26, 0x74, 0x10, 0x75, 0xf0, 0x00, 0x12, 0x0a, 0xc5, 0x7e, 0x00, 0x7f, 
-0x17, 0x7d, 0xff, 0x7b, 0x01, 0x7a, 0x00, 0x79, 0xb9, 0x12, 0x0c, 0xd9, 0x90, 0x00, 0xb2, 0xe0, 
-0xff, 0x78, 0xb0, 0xe6, 0xfe, 0x6f, 0x60, 0x24, 0xa3, 0xe0, 0x54, 0x3f, 0xf0, 0xee, 0x60, 0x06, 
-0xe0, 0x44, 0x40, 0xf0, 0x80, 0x0a, 0x90, 0x00, 0xb3, 0xe0, 0xf0, 0xe4, 0x90, 0x00, 0xb1, 0xf0, 
-0x90, 0x00, 0xb2, 0xe0, 0x78, 0xb0, 0xf6, 0x75, 0x23, 0x01, 0x80, 0x0d, 0xee, 0x60, 0x0a, 0x90, 
-0x00, 0xb3, 0xe0, 0x54, 0x3f, 0xf0, 0x44, 0x80, 0xf0, 0xe5, 0x22, 0x20, 0xe7, 0x1c, 0x30, 0xe6, 
-0x07, 0x51, 0x3d, 0x12, 0x1f, 0xea, 0x70, 0x12, 0xe5, 0x22, 0x30, 0xe5, 0x04, 0xe5, 0x23, 0x70, 
-0x09, 0xe5, 0x22, 0x30, 0xe4, 0x0b, 0xe5, 0x21, 0x60, 0x07, 0x90, 0x01, 0x9d, 0xe0, 0xff, 0x51, 
-0x97, 0x90, 0x01, 0xad, 0xe0, 0x78, 0xaf, 0x66, 0x60, 0x07, 0x11, 0x81, 0x90, 0x01, 0xad, 0xe0, 
-0xf6, 0x90, 0x00, 0xaf, 0xe0, 0x70, 0x02, 0x41, 0x3c, 0xe5, 0x21, 0x60, 0x13, 0x51, 0x3d, 0xe4, 
-0xf5, 0xf0, 0x12, 0x0a, 0xc5, 0x51, 0x3d, 0x90, 0x00, 0x02, 0xe4, 0xf5, 0xf0, 0x12, 0x0a, 0xe4, 
-0x75, 0x2b, 0x30, 0xaf, 0x2b, 0x05, 0x2b, 0x74, 0xb0, 0x2f, 0x51, 0x8f, 0x74, 0x30, 0xf0, 0x51, 
-0x8b, 0xe5, 0x21, 0xf0, 0x05, 0x2b, 0x51, 0x3d, 0x12, 0x1f, 0xea, 0x7f, 0x00, 0x60, 0x02, 0x7f, 
-0x01, 0x51, 0x8b, 0xef, 0xf0, 0x90, 0x00, 0x0a, 0x12, 0x09, 0x01, 0x60, 0x05, 0x51, 0x8b, 0xe0, 
-0x04, 0xf0, 0x75, 0x24, 0x01, 0x75, 0x25, 0x00, 0x75, 0x26, 0xe3, 0x51, 0x44, 0x51, 0x3d, 0x90, 
-0x00, 0x06, 0x51, 0x6f, 0x51, 0x3d, 0x90, 0x00, 0x08, 0x51, 0x6f, 0x90, 0x00, 0xf0, 0x74, 0x40, 
-0xf0, 0x90, 0x01, 0x10, 0x74, 0x60, 0xf0, 0x90, 0x01, 0x30, 0x74, 0x80, 0xf0, 0x75, 0x24, 0x01, 
-0x75, 0x25, 0x00, 0x75, 0x26, 0xf1, 0x75, 0x27, 0x01, 0x75, 0x28, 0x01, 0x75, 0x29, 0x11, 0x75, 
-0x2b, 0x81, 0xe4, 0xf5, 0x2a, 0xaf, 0x2a, 0x12, 0x1f, 0xe6, 0x51, 0x75, 0xaf, 0x2a, 0x12, 0x2b, 
-0x63, 0xab, 0x27, 0xe5, 0x29, 0xf9, 0x24, 0x02, 0xf5, 0x29, 0xe5, 0x28, 0xfa, 0x34, 0x00, 0xf5, 
-0x28, 0x51, 0x85, 0xaf, 0x2a, 0x12, 0x00, 0x03, 0xae, 0x2b, 0x05, 0x2b, 0x74, 0xb0, 0x2e, 0x51, 
-0x8f, 0xef, 0xf0, 0x05, 0x2a, 0xe5, 0x2a, 0xc3, 0x94, 0x10, 0x40, 0xc9, 0x22, 0xab, 0x1e, 0xaa, 
-0x1f, 0xa9, 0x20, 0x22, 0xab, 0x1e, 0xaa, 0x1f, 0xa9, 0x20, 0x12, 0x0a, 0x15, 0xff, 0xae, 0xf0, 
-0xab, 0x24, 0xe5, 0x26, 0xf9, 0x24, 0x02, 0xf5, 0x26, 0xe5, 0x25, 0xfa, 0x34, 0x00, 0xf5, 0x25, 
-0xee, 0x8f, 0xf0, 0x12, 0x0a, 0xc5, 0xab, 0x1e, 0xaa, 0x1f, 0xa9, 0x20, 0x90, 0x00, 0x02, 0x12, 
-0x0a, 0x40, 0xff, 0xae, 0xf0, 0xab, 0x24, 0xe5, 0x26, 0xf9, 0x24, 0x02, 0xf5, 0x26, 0xe5, 0x25, 
-0xfa, 0x34, 0x00, 0xf5, 0x25, 0xee, 0x8f, 0xf0, 0x02, 0x0a, 0xc5, 0x74, 0xb0, 0x25, 0x2b, 0xf5, 
-0x82, 0xe4, 0x34, 0x00, 0xf5, 0x83, 0x22, 0xac, 0x07, 0x90, 0x01, 0xad, 0xe0, 0xfd, 0x30, 0xe2, 
-0x0a, 0x90, 0xff, 0x19, 0xe0, 0x54, 0xfb, 0xf0, 0x43, 0xac, 0x08, 0x90, 0xff, 0x18, 0xe0, 0x54, 
-0xfb, 0xf0, 0xec, 0x12, 0x2f, 0x6e, 0x75, 0x8a, 0x0a, 0x75, 0x91, 0xc1, 0xf5, 0x91, 0x51, 0xd5, 
-0x90, 0x01, 0x9e, 0xe0, 0x12, 0x2f, 0x6e, 0x75, 0x8a, 0x0a, 0x78, 0xa5, 0x76, 0x01, 0xed, 0x30, 
-0xe2, 0x02, 0x51, 0xdd, 0x22, 0x90, 0xff, 0x18, 0xe0, 0x44, 0x04, 0xf0, 0x22, 0x90, 0xff, 0x19, 
-0xe0, 0x44, 0x04, 0xf0, 0x53, 0xac, 0xf7, 0x22, 0xef, 0x60, 0x0e, 0x43, 0xac, 0x10, 0x71, 0x05, 
-0x44, 0x18, 0xf0, 0xe4, 0xf5, 0xa6, 0xf5, 0xa2, 0x22, 0x11, 0x81, 0x75, 0xa6, 0x68, 0x75, 0xa2, 
-0xc1, 0x53, 0xac, 0xef, 0x22, 0x90, 0xff, 0x12, 0xe0, 0x54, 0xe7, 0xf0, 0x90, 0xff, 0x11, 0xe0, 
-0x44, 0x18, 0xf0, 0x90, 0xff, 0x10, 0xe0, 0x22, 0xab, 0x07, 0x8c, 0x56, 0x8d, 0x57, 0x71, 0x05, 
-0x54, 0xe7, 0xf0, 0x90, 0xff, 0x14, 0xe0, 0x44, 0x18, 0xf0, 0x90, 0xff, 0x1b, 0xe0, 0x44, 0x18, 
-0xf0, 0xe4, 0x90, 0x00, 0x39, 0xf0, 0x53, 0xac, 0xef, 0xf5, 0xa3, 0xeb, 0x44, 0x80, 0xf5, 0xa1, 
-0x75, 0xa6, 0x68, 0x75, 0xa2, 0xc1, 0x71, 0x53, 0xf5, 0xd5, 0x8f, 0xd4, 0x75, 0xd2, 0xff, 0x75, 
-0xd1, 0x5a, 0x22, 0xe0, 0x25, 0x57, 0xff, 0xe4, 0x35, 0x56, 0xf5, 0xd7, 0x8f, 0xd6, 0x22, 0xc0, 
-0xe0, 0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x10, 0x85, 0xa3, 0x18, 0xaf, 0xa6, 0x75, 
-0xa3, 0x08, 0xef, 0x30, 0xe4, 0x0b, 0x90, 0x00, 0x39, 0x71, 0x53, 0x75, 0xd2, 0xff, 0x75, 0xd1, 
-0x5a, 0xe5, 0x18, 0x30, 0xe3, 0x16, 0xe5, 0xa6, 0x20, 0xe0, 0x0c, 0x75, 0xd2, 0x01, 0x75, 0xd5, 
-0x00, 0x75, 0xd4, 0x39, 0x75, 0xd1, 0x55, 0x75, 0xa3, 0x00, 0x80, 0x2d, 0xe5, 0x18, 0x30, 0xe0, 
-0x28, 0x90, 0x00, 0x39, 0xe0, 0xff, 0x25, 0x57, 0xfd, 0xe4, 0x35, 0x56, 0xf5, 0xd5, 0x8d, 0xd4, 
-0x75, 0xd2, 0xff, 0xef, 0xc3, 0x94, 0xc0, 0x40, 0x10, 0x75, 0xd1, 0x55, 0x90, 0x00, 0x39, 0xe0, 
-0xb4, 0xfe, 0x06, 0x90, 0x00, 0xaf, 0x74, 0x01, 0xf0, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 
-0xe0, 0x32, 0x75, 0x91, 0xcc, 0x75, 0x91, 0x00, 0x32, 0x12, 0x2f, 0xf7, 0x78, 0xa6, 0x76, 0x00, 
-0x08, 0x76, 0x28, 0x90, 0x00, 0x38, 0x74, 0x04, 0xf0, 0x22, 0x8b, 0x22, 0x8a, 0x23, 0x89, 0x24, 
-0x90, 0x01, 0x9a, 0xe0, 0x30, 0xe1, 0x76, 0xe4, 0xf5, 0x28, 0xf5, 0x29, 0x12, 0x2f, 0x67, 0x74, 
-0x02, 0x93, 0xff, 0xe5, 0x29, 0xc3, 0x9f, 0x50, 0x36, 0xab, 0x25, 0xaa, 0x26, 0xa9, 0x27, 0x75, 
-0xf0, 0x02, 0xe5, 0x29, 0xa4, 0xf5, 0x82, 0x85, 0xf0, 0x83, 0x12, 0x0a, 0x40, 0xfb, 0xaa, 0xf0, 
-0x12, 0x2f, 0x67, 0x74, 0x07, 0x93, 0xfe, 0x74, 0x08, 0x93, 0xff, 0x7c, 0x00, 0x7d, 0x03, 0x12, 
-0x09, 0x62, 0xd3, 0xeb, 0x9f, 0xea, 0x9e, 0x40, 0x02, 0x05, 0x28, 0x05, 0x29, 0x80, 0xbd, 0x12, 
-0x2f, 0x67, 0x74, 0x02, 0x93, 0x75, 0xf0, 0x04, 0xa4, 0xff, 0xae, 0xf0, 0x7c, 0x00, 0x7d, 0x05, 
-0x12, 0x09, 0x74, 0xe5, 0x28, 0xc3, 0x9f, 0x40, 0x14, 0x91, 0x95, 0x74, 0xff, 0x12, 0x09, 0x2e, 
-0x91, 0x95, 0x90, 0x00, 0x01, 0x12, 0x09, 0x40, 0xe4, 0x90, 0x00, 0x38, 0xf0, 0x91, 0x95, 0x12, 
-0x08, 0xe8, 0xb4, 0x04, 0x1f, 0xab, 0x25, 0xaa, 0x26, 0xa9, 0x27, 0x90, 0x00, 0x10, 0x12, 0x0a, 
-0x40, 0xff, 0xae, 0xf0, 0x7c, 0x00, 0x7d, 0x06, 0x12, 0x09, 0x74, 0x90, 0x00, 0x10, 0xee, 0x8f, 
-0xf0, 0x12, 0x0a, 0x78, 0x22, 0xab, 0x22, 0xaa, 0x23, 0xa9, 0x24, 0x22, 0xc0, 0xe0, 0xc0, 0xf0, 
-0xc0, 0x83, 0xc0, 0x82, 0xc0, 0xd0, 0x75, 0xd0, 0x00, 0xc0, 0x00, 0xc0, 0x01, 0xc0, 0x02, 0xc0, 
-0x03, 0xc0, 0x04, 0xc0, 0x05, 0xc0, 0x06, 0xc0, 0x07, 0x75, 0x89, 0x80, 0x90, 0x00, 0x3a, 0xe0, 
-0xc3, 0x94, 0x0a, 0x50, 0x06, 0xe0, 0x04, 0xf0, 0x75, 0x8a, 0x0a, 0x78, 0xa5, 0xe6, 0x60, 0x01, 
-0x16, 0x12, 0x2b, 0x0b, 0xd0, 0x07, 0xd0, 0x06, 0xd0, 0x05, 0xd0, 0x04, 0xd0, 0x03, 0xd0, 0x02, 
-0xd0, 0x01, 0xd0, 0x00, 0xd0, 0xd0, 0xd0, 0x82, 0xd0, 0x83, 0xd0, 0xf0, 0xd0, 0xe0, 0x32, 0xef, 
-0x24, 0xfc, 0x70, 0x05, 0x7e, 0x2c, 0x7f, 0x04, 0x22, 0xe4, 0xfe, 0xff, 0x22, 0xef, 0x75, 0xf0, 
-0x64, 0xa4, 0xff, 0xae, 0xf0, 0x78, 0xa8, 0x08, 0x06, 0xe6, 0x18, 0x22, 0xaf, 0x0e, 0xae, 0x0d, 
-0x12, 0x25, 0x91, 0xaf, 0x0e, 0xae, 0x0d, 0x02, 0x29, 0xa1, 0xe0, 0xfe, 0xa3, 0xe0, 0xff, 0xc3, 
-0x94, 0x78, 0xee, 0x94, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-0xb6, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xa8, 
-0x43, 0x53, 0x57, 0x5f, 0x32, 0x32, 0x31, 0x31, 0x35, 0x32, 0x37, 0x5f, 0x43, 0x53, 0x54, 0x38, 
-0x31, 0x36, 0x44, 0x5f, 0x43, 0x4f, 0x42, 0x5f, 0x5a, 0x54, 0x5f, 0x59, 0x41, 0x54, 0x5f, 0x4b, 
-0x35, 0x5f, 0x47, 0x31, 0x5f, 0x4a, 0x4c, 0x5f, 0x35, 0x35, 0x30, 0x32, 0x38, 0x2e, 0x68, 0x65, 
-0x78, 
-]
-
-#endif /*CAPACITIVE_HYNITRON_CST816D_UPDATE_H__*/
diff --git a/3.code/1.watch/2.code/code.py b/3.code/1.watch/2.code/code.py
deleted file mode 100644 (file)
index 6b81d64..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-from machine import LCD, Pin
-import lvgl as lv
-from tp import cst816
-
-test = (
-
-    0, 0, 0x11,
-    2, 0, 120,
-
-    0, 1, 0x36,
-    1, 1, 0x00,
-
-    0, 1, 0x35,
-    1, 1, 0x01,
-
-    0, 1, 0x3a,
-    1, 1, 0x05,
-
-    0, 5, 0xB2,
-    1, 1, 0x0c,
-    1, 1, 0x0c,
-    1, 1, 0x00,
-    1, 1, 0x33,
-    1, 1, 0x33,
-
-    0, 1, 0xB7,
-    1, 1, 0x77,
-
-    0, 1, 0xBB,
-    1, 1, 0x2c,
-
-    0, 1, 0xC0,
-    1, 1, 0x2C,
-
-    0, 1, 0xC2,
-    1, 1, 0x01,
-
-    0, 1, 0xC3,
-    1, 1, 0x21,
-
-    0, 1, 0xC4,
-    1, 1, 0x20,
-
-    0, 1, 0xC6,
-    1, 1, 0x10,
-
-    0, 2, 0xD0,
-    1, 1, 0xA4,
-    1, 1, 0xA1,
-
-    0, 14, 0xE0,
-    1, 1, 0xd0,
-    1, 1, 0x03,
-    1, 1, 0x08,
-    1, 1, 0x0e,
-    1, 1, 0x12,
-    1, 1, 0x2d,
-    1, 1, 0x42,
-    1, 1, 0x45,
-    1, 1, 0x53,
-    1, 1, 0x29,
-    1, 1, 0x16,
-    1, 1, 0x15,
-    1, 1, 0x22,
-    1, 1, 0x24,
-
-    0, 14, 0xE1,
-    1, 1, 0xd0,
-    1, 1, 0x03,
-    1, 1, 0x08,
-    1, 1, 0x0e,
-    1, 1, 0x13,
-    1, 1, 0x2c,
-    1, 1, 0x42,
-    1, 1, 0x54,
-    1, 1, 0x50,
-    1, 1, 0x2c,
-    1, 1, 0x16,
-    1, 1, 0x16,
-    1, 1, 0x20,
-    1, 1, 0x27,
-    # 0, 0, 0x11,
-    0, 0, 0x21,
-    0, 0, 0x29,
-    # 0, 1, 0xe7,
-    # 1, 1, 0x11,
-)
-
-XSTART_H = 0xf0
-XSTART_L = 0xf1
-YSTART_H = 0xf2
-YSTART_L = 0xf3
-XEND_H = 0xE0
-XEND_L = 0xE1
-YEND_H = 0xE2
-YEND_L = 0xE3
-
-XSTART = 0xD0
-XEND = 0xD1
-YSTART = 0xD2
-YEND = 0xD3
-
-lcd = LCD()
-
-test1 = bytearray(test)
-
-test2 = (
-    0, 4, 0x2a,
-    1, 1, XSTART_H,
-    1, 1, XSTART_L,
-    1, 1, XEND_H,
-    1, 1, XEND_L,
-    0, 4, 0x2b,
-    1, 1, YSTART_H,
-    1, 1, YSTART_L,
-    1, 1, YEND_H,
-    1, 1, YEND_L,
-    0, 0, 0x2c,
-)
-test_invalid = bytearray(test2)
-
-test3 = (
-    0, 0, 0x28,
-    2, 0, 120,
-    0, 0, 0x10,
-)
-test_displayoff = bytearray(test3)
-
-test4 = (
-    0, 0, 0x11,
-    2, 0, 120,
-    0, 0, 0x29,
-)
-test_displayon = bytearray(test4)
-
-gpio4 = Pin(Pin.GPIO18, Pin.OUT, Pin.PULL_PU, 0)
-gpio4.write(1)
-lcd.lcd_init(test1, 240, 320, 52000, 1, 4, 0, test_invalid, test_displayon, test_displayoff, None, TESel=True, TEPin=7)
-lcd.lcd_clear(0xf800)
-gpio5 = Pin(Pin.GPIO17, Pin.OUT, Pin.PULL_PU, 0)
-gpio5.write(1)
-
-LCD_SIZE_W = 240
-LCD_SIZE_H = 320
-
-# 初始化lvgl
-lv.init()
-
-# Register SDL display driver.
-disp_buf1 = lv.disp_draw_buf_t()
-buf1_1 = bytearray(LCD_SIZE_W * LCD_SIZE_H * 2)
-buf1_2 = bytearray(LCD_SIZE_W * LCD_SIZE_H * 2)
-disp_buf1.init(buf1_1, buf1_2, len(buf1_1))
-disp_drv = lv.disp_drv_t()
-disp_drv.init()
-disp_drv.draw_buf = disp_buf1
-disp_drv.flush_cb = lcd.lcd_write
-disp_drv.hor_res = LCD_SIZE_W
-disp_drv.ver_res = LCD_SIZE_H
-disp_drv.register()
-
-# CST816初始化
-tp_cst816 = cst816(i2c_no = 2,irq=33,reset=32)
-tp_cst816.activate()
-tp_cst816.init()
-print("cst816 init...")
-# LVGL触摸注册
-indev_drv = lv.indev_drv_t()
-indev_drv.init()
-indev_drv.type = lv.INDEV_TYPE.POINTER
-indev_drv.read_cb = tp_cst816.read
-indev_drv.register()
-gpio6 = Pin(Pin.GPIO33, Pin.OUT, Pin.PULL_PU, 0)
-gpio6.write(0)
-
-
-# 启动lvgv线程
-lv.tick_inc(5)
-lv.task_handler()
-print("lvgl init complete")
-
-# 界面风格1
-style_bar = lv.style_t()
-style_bar.init()
-style_bar.set_border_width(0)
-style_bar.set_radius(0)
-style_bar.set_pad_top(0)
-style_bar.set_pad_bottom(0)
-style_bar.set_pad_left(0)
-style_bar.set_pad_right(0)
-
-screen = lv.obj()
-
-# Code 39字符集和对应的二进制码
-code_39_dict = {'0': '0001101000', '1': '1001000010', '2': '0011000010', '3': '1011000000', '4': '0001100010',
-                '5': '1001100000', '6': '0011100000', '7': '0001001010', '8': '1001001000', '9': '0011001000',
-                'A': '1000010010', 'B': '0010010010', 'C': '1010010000', 'D': '0000110010', 'E': '1000110000',
-                'F': '0010110000', 'G': '0000011010', 'H': '1000011000', 'I': '0010011000', 'J': '0000111000',
-                'K': '1000000110', 'L': '0010000110', 'M': '1010000100', 'N': '0000100110', 'O': '1000100100',
-                'P': '0010100100', 'Q': '0000001110', 'R': '1000001100', 'S': '0010001100', 'T': '0000101100',
-                'U': '1100000010', 'V': '0110000010', 'W': '1110000000', 'X': '0100100010', 'Y': '1100100000',
-                'Z': '0110100000', '-': '0100001010', '.': '1100001000', ' ': '0110001000', '*': '0100101000',  
-                '$': '0101010000', '/': '0101000100', '+': '0100010100', '%': '0001010100'}
-
-# Code 39条形码的起始和结束符
-code_39_start = '0100101000'
-code_39_end = '010010100'   #结束符结尾'0'去掉
-
-# Code 39条形码的宽度系数
-code_39_narrow = 1
-code_39_wide = 3
-
-
-def code_39_encode(data):
-    """将数据编码为Code 39条形码对应的二进制码"""
-    result = ''
-    for char in data:
-        try:
-            result += code_39_dict[char]
-        except Exception as e:
-            print("your data contains illegal code!")
-            return None
-    return result
-
-
-def code_39_generate_binary(data):
-    """生成Code 39条形码对应的二进制码"""
-    encoded_data = code_39_encode(data)
-    if encoded_data:
-        # 添加起始和结束符
-        encoded_data = code_39_start + encoded_data + code_39_end
-        return encoded_data
-    else:
-        return None
-
-
-def code_39_generate_barcode(screen, data, width=180, height=80):
-    """生成Code 39条形码"""
-    left_curr_line = 0
-
-    # 删除上次的container
-    old_container = screen.get_child(-1)
-    if old_container:
-        old_container.delete()
-
-    # 生成二进制码
-    binary_data = code_39_generate_binary(data)
-    if not binary_data:
-        return
-    print("binary_data is ",binary_data)
-
-    # 在LVGL中创建一个容器对象
-    container = lv.obj(screen)
-    # container.set_size(width, height)
-    container.add_style(style_bar,lv.PART.MAIN | lv.STATE.DEFAULT)
-    container.center()
-
-    # 计算每个条的宽度
-    bar_width = width // (len(binary_data))
-
-    # 按照二进制码中的1和0,分别创建LVGL矩形对象
-    for i in range(len(binary_data)):
-        if i % 2 == 0:
-            # 创建一个黑色矩形
-            bar = lv.obj(container)
-            bar.add_style(style_bar, lv.PART.MAIN | lv.STATE.DEFAULT)
-            if binary_data[i] == '1':
-                real_width = bar_width * code_39_wide
-                bar.set_size(real_width, height)
-            else:
-                real_width = bar_width * code_39_narrow
-                bar.set_size(real_width, height)
-            bar.align(lv.ALIGN.TOP_LEFT, left_curr_line, 0)
-            bar.set_style_bg_color(lv.color_make(0x00, 0x00, 0x00), lv.PART.MAIN | lv.STATE.DEFAULT)
-            left_curr_line += real_width
-        else:
-            # 创建一个白色矩形
-            bar = lv.obj(container)
-            bar.add_style(style_bar, lv.PART.MAIN | lv.STATE.DEFAULT)
-            if binary_data[i] == '1':
-                real_width = bar_width * code_39_wide
-                bar.set_size(real_width, height)
-            else:
-                real_width = bar_width * code_39_narrow
-                bar.set_size(real_width, height)
-            bar.align(lv.ALIGN.TOP_LEFT, left_curr_line, 0)
-            bar.set_style_bg_color(lv.color_make(0xFF, 0xFF, 0xFF), lv.PART.MAIN | lv.STATE.DEFAULT)
-            left_curr_line += real_width
-
-    container.set_size(left_curr_line, height)
-
-
-if __name__ == "__main__":
-    code_39_generate_barcode(screen,"A123 321")
-    lv.scr_load(screen)
-
diff --git a/3.code/1.watch/2.code/common.py b/3.code/1.watch/2.code/common.py
deleted file mode 100644 (file)
index 04489e7..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-import _thread
-import utime
-from event_message import Event, EventManager
-
-
-class Lock(object):
-
-    def __init__(self):
-        self.lock = _thread.allocate_lock()
-
-    def __enter__(self, *args, **kwargs):
-        self.lock.acquire()
-
-    def __exit__(self, *args, **kwargs):
-        self.lock.release()
-
-
-class LOG_LV(object):
-    """日志等级"""
-    DEBUG = "DEBUG"
-    INFO = "INFO"
-    WARNING = "WARNING"
-    ERROR = "ERROR"
-    CRITICAL = "CRITICAL"
-
-
-class Abstract(object):
-    def post_processor_after_instantiation(self, *args, **kwargs):
-        """实例化后调用"""
-        pass
-
-    def post_processor_before_initialization(self, *args, **kwargs):
-        """初始化之前调用"""
-        pass
-
-    def initialization(self, *args, **kwargs):
-        """初始化load"""
-        pass
-
-    def post_processor_after_initialization(self, *args, **kwargs):
-        """初始化之后调用"""
-        pass
-
-
-class AbstractOutput(object):
-    def open(self):
-        pass
-
-    def output(self, message, **kwargs):
-        pass
-
-    def close(self):
-        pass
-
-
-class PrintLogOutput(AbstractOutput):
-    def output(self, message, **kwargs):
-        fmt = "{} [ {} ] {} {}"
-        print(fmt.format(*message))
-
-
-class LogService(Abstract):
-    """
-        default log is async queue
-        you can set
-    """
-    INSTANCE = None
-    REPORTER = PrintLogOutput()
-    LEVEL = LOG_LV.DEBUG
-    MODE = 1
-    LEVEL_MAP = {
-        LOG_LV.DEBUG: 0,
-        LOG_LV.INFO: 1,
-        LOG_LV.WARNING: 2,
-        LOG_LV.ERROR: 3,
-        LOG_LV.CRITICAL: 4
-    }
-
-    def __init__(self):
-        self.__event = Event(__name__)
-        self.__em = EventManager()
-        self.__em.register_event(self.__event)
-
-    @classmethod
-    def create(cls):
-        if not cls.INSTANCE:
-            cls.INSTANCE = LogService()
-            cls.INSTANCE.start()
-        return cls.INSTANCE
-
-    def log_send(self, tag, level, msg, mode):
-        if self.MODE:
-            mode = self.MODE
-        if self.LEVEL_MAP[level] >= self.LEVEL_MAP.get(self.LEVEL, 0):
-            output_format = "{ascdate} {asctime}"
-            rt = utime.localtime()
-            d_f = "{0:02}"
-            send_msg = (output_format.format(
-                ascdate=str(rt[0]) + "-" + d_f.format(rt[1]) + "-" + d_f.format(rt[2])
-                , asctime=d_f.format(rt[3]) + ":" + d_f.format(rt[4]) + ":" + d_f.format(rt[5])
-            ), tag, level, msg)
-            # self.REPORTER.output(send_msg)
-            print("{} [ {} ] {} {}".format(*send_msg))
-            # self.__event.post(send_msg)
-
-    def output(self, *args, **kwargs):
-        emo = kwargs.get("event_message")
-        self.REPORTER.output(emo.msg)
-
-    def start(self):
-        self.__event.add_handler(self.output)
-        self.__em.start()
-
-
-class LogAdapter(object):
-    """
-        log adapter mode
-        mode used : adapter proxy single LogService
-    """
-
-    def __init__(self, tag, enable=1):
-        self.log_service = LogService.create()
-        self.tag = tag
-        self.enable = enable
-        self.mode = 1
-
-    def critical(self, msg):
-        if self.enable:
-            self.log_service.log_send(self.tag, LOG_LV.CRITICAL, msg, self.mode)
-
-    def debug(self, msg):
-        if self.enable:
-            self.log_service.log_send(self.tag, LOG_LV.DEBUG, msg, self.mode)
-
-    def info(self, msg):
-        if self.enable:
-            self.log_service.log_send(self.tag, LOG_LV.INFO, msg, self.mode)
-
-    def warning(self, msg):
-        if self.enable:
-            self.log_service.log_send(self.tag, LOG_LV.WARNING, msg, self.mode)
-
-    def error(self, msg):
-        if self.enable:
-            self.log_service.log_send(self.tag, LOG_LV.ERROR, msg, self.mode)
diff --git a/3.code/1.watch/2.code/constants.py b/3.code/1.watch/2.code/constants.py
deleted file mode 100644 (file)
index ba575e7..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-class PROTOCOL:
-    LK_SEND = "LK_SEND"
-    LK_RECV = "LK_RECV"
-
-    PING_SEND = "PING_SEND"
-    PING_RECV = "PING_RECV"
-
-    KA_SEND = "KA_SEND"
-    KA_RECV = "KA_RECV"
-
-    UD_SEND = "UD_SEND"
-    UD_RECV = "UD_RECV"
-
-    CR_SEND = "CR_SEND"
-    CR_RECV = "CR_RECV"
-
-    FIND_SEND = "FIND_SEND"
-    FIND_RECV = "FIND_RECV"
-
-    POWEROFF_SEND = "POWEROFF_SEND"
-    POWEROFF_RECV = "POWEROFF_RECV"
-
-    PHL_SEND = "PHL_SEND"
-    PHL_RECV = "PHL_RECV"
-
-    TK_SEND = "TK_SEND"
-    TK_RECV = "TK_RECV"
-
-    MESSAGE_SEND = "MESSAGE_SEND"
-    MESSAGE_RECV = "MESSAGE_RECV"
-
-    WT_SEND = "WT_SEND"
-    WT_RECV = "WT_RECV"
-
-    REMIND_SEND = "REMIND_SEND"
-    REMIND_RECV = "REMIND_RECV"
-
-    HRTSTART_SEND = "hrtstart_SEND"
-    HRTSTART_RECV = "hrtstart_RECV"
-
-    HEART_SEND = "heart_SEND"
-    HEART_RECV = "heart_RECV"
-    
-    OXYGEN_SEND = "oxygen_SEND"
-    OXYGEN_RECV = "oxygen_RECV"
-
-    OXSTART_SEND = "oxstart_SEND"
-    OXSTART_RECV = "oxstart_RECV"
-
-    TEMP_SEND = "temp_SEND"
-    TEMP_RECV = "temp_RECV"
-
-    DLT_SEND = "DLT_SEND"
-    DLT_RECV = "DLT_RECV"
-
-    UPLOAD_SEND = "UPLOAD_SEND"
-    UPLOAD_RECV = "UPLOAD_RECV"
-
-    CENTER_SEND = "CENTER_SEND"
-    CENTER_RECV = "CENTER_RECV"
-
-    MONITOR_SEND = "MONITOR_SEND"
-    MONITOR_RECV = "MONITOR_RECV"
-
-    SOS_SEND = "SOS_SEND"
-    SOS_RECV = "SOS_RECV"
-
-class EVENT:
-    CHANNEL_SOCKET_SEND = "CHANNEL_SOCKET_SEND"
-    START_LOCATION = "START_LOCATION" 
-    READ_LOCATION = "READ_LOCATION"  
-    CLOSE_LOCATION = "CLOSE_LOCATION"
-    GPSOPEN = "GPSOPEN"
-    GPSCLOSE = "GPSCLOSE"
-    GPSINFO = "GPSINFO"
-    WIFISCANOPEN = "WIFISCANOPEN"
-    WIFIINFO = "WIFIINFO"
-
-    GET_KEY = "GET_KEY"
-    SET_KEY = "SET_KEY"
-    GET_IMEI = "GET_IMEI"
-    GET_CID = "GET_CID"
-    SET_CID = "SET_CID"
-    GET_IMSI = "GET_IMSI"
-    GET_PASSWORD = "GET_PASSWORD"
-    SET_PASSWORD = "SET_PASSWORD"
-    GET_BATTERY = "GET_BATTERY"
-    PERSISTENT_CONFIG_GET = "PERSISTENT_CONFIG_GET"
-    PERSISTENT_CONFIG_STORE = "PERSISTENT_CONFIG_STORE"
-    SET_PING = "SET_PING"
-    GET_PING = "GET_PING"
-    SET_CONNECT = "SET_CONNECT"
-    GET_CONNECT = "GET_CONNECT"
-    GET_STEP = "GET_STEP"
-    PUSH_STEP = "PUSH_STEP"
-    SYSTEM_SLEEP = "SYSTEM_SLEEP"
-    SYSTEM_UP = "SYSTEM_UP"
-    START_HEART = "START_HEART" 
-    GET_HEART = "GET_HEART"
-    STOP_HEART = "STOP_HEART"
-    START_BLOOD_OXYGEN = "STARTT_BLOOD_OXYGEN" 
-    GET_BLOOD_OXYGEN = "GET_BLOOD_OXYGEN"
-    STOP_BLOOD_OXYGEN = "STOP_BLOOD_OXYGEN"
\ No newline at end of file
diff --git a/3.code/1.watch/2.code/initTP.py b/3.code/1.watch/2.code/initTP.py
deleted file mode 100644 (file)
index 54b7ad2..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-import log
-from machine import I2C
-import utime
-from machine import Pin
-import uos
-
-# import capacitive_hynitron_cst816d_update_new
-import capacitive_hynitron_cst816d_update
-
-TP_HYN_I2C_UPDATE_WRITE_ADDR = (0x6A<<1)  
-TP_HYN_I2C_UPDATE_READ_ADDR =  ((0x6A<<1)|1)
-PER_LEN = 512
-x = 0
-y = 0
-#---------------------------------------------------------------------
-# cst816d_read_checksum
-#---------------------------------------------------------------------
-def cst816d_read_checksum():
-
-    if -1 == cst816d_enter_bootmode():
-        return -1
-
-    i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
-    cmd = [0]
-
-    if -1 == i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x03]), 2, bytearray(cmd), 1):
-        return -1
-    utime.sleep_ms(500)#这里延时太短会读错checksum
-
-    r_data = bytearray(2)
-    if -1 == i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x08]), 2, r_data, 2, 0):
-        return -1
-    check_sum = (r_data[1] << 8) | r_data[0]
-    print("check_sum的值为:",check_sum)
-    return check_sum    
-#---------------------------------------------------------------------
-# GPIO_ResetTP
-#---------------------------------------------------------------------
-def GPIO_ResetTP():
-
-    print("GPIO_ResetTP")
-    
-    gpio_reset = Pin(Pin.GPIO32, Pin.OUT, Pin.PULL_PU, 0)
-    gpio_reset.write(0)
-    utime.sleep_ms(10)
-    gpio_reset.write(1)
-    utime.sleep_ms(10)
-
-#---------------------------------------------------------------------
-# cst816d_update
-#---------------------------------------------------------------------
-def cst816d_update(startAddr, length, data):
-    print("cst816d_update")
-    if -1 == cst816d_enter_bootmode():
-        return -1
-
-    sum_len = 0
-    cmd = [0,0]
-    global x
-    while 1:
-        x += 1
-        if sum_len >= length:
-            print("sum_len >= length,退出循环")
-            return
-        a = startAddr&0xFF
-        cmd[0]=a
-        b = startAddr>>8
-        cmd[1]=b
-        i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
-
-        ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x14]), 2, bytearray(cmd), 2)
-        utime.sleep_ms(100)
-
-        ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x18]), 2, bytearray(data), PER_LEN)
-
-        utime.sleep_ms(100)
-
-        cmd[0] = 0xEE
-        ret = i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x04]), 2, bytearray(cmd), 1)
-
-        utime.sleep_ms(100)
-
-        retrycnt = 51
-        for i in range (retrycnt):
-            r_data = bytearray(1)
-            ret = i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x05]), 2, r_data, 1, 0)
-            utime.sleep_ms(50)
-
-            if r_data[0] == 0x55:
-                print("r_data[0] = 0x55,break")
-                break
-        
-        startAddr = startAddr + PER_LEN
-        del data[0:PER_LEN]
-        sum_len = sum_len + PER_LEN 
-
-#---------------------------------------------------------------------
-# cst816d_enter_bootmode
-#---------------------------------------------------------------------
-def cst816d_enter_bootmode():
-
-    GPIO_ResetTP()
-    i2c_obj = I2C(I2C.I2C2, I2C.FAST_MODE)
-
-    cmd = [0xAB]
-    #进入boot模式
-    retrycnt = 10
-    global y
-    for i in range (retrycnt):
-        y += 1
-        if 0 == i2c_obj.write(TP_HYN_I2C_UPDATE_WRITE_ADDR>>1, bytearray([0xa0,0x01]), 2, bytearray(cmd), 1):
-            utime.sleep_ms(100)
-        else:
-            print("boot模式写命令失败")
-
-        r_data = bytearray(1)
-        if -1 == i2c_obj.read(TP_HYN_I2C_UPDATE_READ_ADDR>>1, bytearray([0xa0,0x03]), 2, r_data, 1, 0):
-            utime.sleep_ms(100)
-        else:
-            if 0xc1 == r_data[0]:
-                utime.sleep_ms(100)
-                return 0
-            else:
-                print("boot模式进入失败")
-    
-    return -1
-#---------------------------------------------------------------------
-# ctp_hynitron_update
-#---------------------------------------------------------------------
-def ctp_hynitron_update():
-
-    # 初始化固件数组和数组长度
-    p_app_bin = []
-    app_bin_len = 0
-
-    #进入boot模式
-    if -1 == cst816d_enter_bootmode():
-        return 
-
-    #  获取固件数组
-    # p_app_bin = capacitive_hynitron_cst816d_update_new.app_bin_816d
-    p_app_bin = capacitive_hynitron_cst816d_update.app_bin_816d
-
-    #  获取固件数组的长度
-    app_bin_len = len(p_app_bin)
-
-    if app_bin_len > 10:
-        startAddr = p_app_bin[1]
-        length = p_app_bin[3]
-        checksum = p_app_bin[5] #a8  78
-
-        startAddr <<= 8; startAddr |= p_app_bin[0]
-        length <<= 8; length |= p_app_bin[2]
-        checksum <<= 8; checksum |= p_app_bin[4] 
-
-        print("startAddr:%x"%startAddr)
-        print("length:%x"%length) 
-        print("checksum:%x"%checksum)   
-
-
-        #检查checksum
-        sum_now = cst816d_read_checksum()
-        if sum_now != checksum:
-            print("固件包checksum不相同!")
-
-            del p_app_bin[0:6]
-            cst816d_update(startAddr, length, p_app_bin)
-
-            #升级后再次确认checksum
-            if checksum == cst816d_read_checksum():
-                print("固件升级成功!")
-
-        elif  checksum == sum_now:
-            print("固件包checksum相同,退出")
-
-
-#---------------------------------------------------------------------
-# HYN_Initial
-#---------------------------------------------------------------------
-def HYN_Initial():
-
-    GPIO_ResetTP()
-
-    ctp_hynitron_update() 
-
-    GPIO_ResetTP()
-
-
-
-
-
-
diff --git a/3.code/1.watch/2.code/lcd.py b/3.code/1.watch/2.code/lcd.py
deleted file mode 100644 (file)
index 5dcd488..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-import lvgl as lv
-from machine import LCD, Pin
-from tp import cst816
-import _thread
-import utime
-import EventMesh
-from misc import PWM
-import initTP
-    
-init_data = (
-
-    0, 0, 0x11,
-    2, 0, 120, 
-
-    0, 1, 0x36,
-    1, 1, 0x00,
-
-    0, 1, 0x35,
-    1, 1, 0x00,
-
-    0, 1, 0x3a,
-    1, 1, 0x05,
-
-    0, 5, 0xB2,
-    1, 1, 0x0c,
-    1, 1, 0x0c,
-    1, 1, 0x00,
-    1, 1, 0x33,
-    1, 1, 0x33,
-
-    0, 1, 0xB7,
-    1, 1, 0x77,
-
-    0, 1, 0xBB,
-    1, 1, 0x2c,
-    
-    0, 1, 0xC0,
-    1, 1, 0x2C,
-
-    0, 1, 0xC2,
-    1, 1, 0x01,
-    
-    0, 1, 0xC3,
-    1, 1, 0x21,
-
-    0, 1, 0xC4,
-    1, 1, 0x20,
-
-    0, 1, 0xC6,
-    1, 1, 0x10,
-
-    0, 2, 0xD0,
-    1, 1, 0xA4,
-    1, 1, 0xA1,
-
-    0, 14, 0xE0,
-    1, 1, 0xd0,
-    1, 1, 0x03,
-    1, 1, 0x08,            
-    1, 1, 0x0e,
-    1, 1, 0x12,
-    1, 1, 0x2d,
-    1, 1, 0x42,
-    1, 1, 0x45,
-    1, 1, 0x53,
-    1, 1, 0x29,
-    1, 1, 0x16,
-    1, 1, 0x15,
-    1, 1, 0x22,
-    1, 1, 0x24,
-
-    0, 14, 0xE1,
-    1, 1, 0xd0,
-    1, 1, 0x03,
-    1, 1, 0x08,
-    1, 1, 0x0e,
-    1, 1, 0x13,
-    1, 1, 0x2c,
-    1, 1, 0x42,
-    1, 1, 0x54,
-    1, 1, 0x50,
-    1, 1, 0x2c,
-    1, 1, 0x16,
-    1, 1, 0x16,
-    1, 1, 0x20,
-    1, 1, 0x27,
-    #0, 0, 0x11,
-    0, 0, 0x21,
-    0, 0, 0x29,
-    #0, 1, 0xe7,
-    #1, 1, 0x11,
-)
-
-XSTART_H = 0xf0
-XSTART_L = 0xf1
-YSTART_H = 0xf2
-YSTART_L = 0xf3
-XEND_H = 0xE0
-XEND_L = 0xE1
-YEND_H = 0xE2
-YEND_L = 0xE3
-
-XSTART = 0xD0
-XEND = 0xD1
-YSTART = 0xD2
-YEND = 0xD3
-
-lcd = LCD()
-
-init_buf = bytearray(init_data)
-
-init_data2 = (
-    0, 4, 0x2a,
-    1, 1, XSTART_H,
-    1, 1, XSTART_L,
-    1, 1, XEND_H,
-    1, 1, XEND_L,
-    0, 4, 0x2b,
-    1, 1, YSTART_H,
-    1, 1, YSTART_L,
-    1, 1, YEND_H,
-    1, 1, YEND_L,
-    0, 0, 0x2c,
-)
-invalid = bytearray(init_data2)
-
-init_data3 = (
-    0, 0, 0x28,
-    2, 0, 120,
-    0, 0, 0x10,
-)
-displayoff = bytearray(init_data3)
-
-init_data4 = (
-    0, 0, 0x11,
-    2, 0, 20,
-    0, 0, 0x29,
-)
-displayon = bytearray(init_data4)
-# CST816初始化
-initTP.HYN_Initial()
-tp_cst816 = cst816(i2c_no = 2,irq=33, reset=32)
-tp_cst816.activate()
-tp_cst816.init()
-print("cst816 init...")
-from btn_device_ec800m import BtnDevice
-btn_device = BtnDevice(tp_cst816)
-btn_device.start()
-
-lcd_ctrl = Pin(Pin.GPIO18, Pin.OUT, Pin.PULL_DISABLE, 1)
-lcd.lcd_init(init_buf, 240, 320, 52000, 1, 4, 0, invalid, displayon, displayoff, None,TESel = True,TEPin = 17)
-# gpio_backlight = Pin(Pin.GPIO37, Pin.OUT, Pin.PULL_DISABLE, 0)
-# gpio_backlight.write(1)
-PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, 0, 1)
-PWM_backlight.open()
-
-LCD_SIZE_W = 240
-LCD_SIZE_H = 320
-# pwm.close()
-# 初始化lvgl
-lv.init()
-
-# Register SDL display driver.
-disp_buf1 = lv.disp_draw_buf_t()
-buf1_1 = bytearray(LCD_SIZE_W * LCD_SIZE_H * 2)
-#buf1_2= bytearray(LCD_SIZE_W * LCD_SIZE_H * 2)
-
-disp_buf1.init(buf1_1, None, len(buf1_1))
-disp_drv = lv.disp_drv_t()
-disp_drv.init()
-disp_drv.draw_buf = disp_buf1
-disp_drv.flush_cb = lcd.lcd_write
-disp_drv.hor_res = LCD_SIZE_W
-disp_drv.ver_res = LCD_SIZE_H
-disp_drv.register()
-
-
-# LVGL触摸注册
-indev_drv = lv.indev_drv_t()
-indev_drv.init()
-indev_drv.type = lv.INDEV_TYPE.POINTER
-indev_drv.read_cb = tp_cst816.read
-indev_drv.long_press_time = 300
-indev_drv.register()
-gpio4 = Pin(Pin.GPIO33, Pin.OUT, Pin.PULL_PU, 0)
-
-# def indev_task():
-#     while 1:
-#         pos_s = tp_cst816.read_xy()
-#         # import _thread
-#         # x = _thread.get_heap_size()
-#         # print('heap:',x)
-#         if pos_s:
-#             if 100 == pos_s[0] and 400 == pos_s[1]:
-#                 EventMesh.publish("done_return")
-#                 print("return")
-#                 utime.sleep_ms(200)
-#         else:
-#             utime.sleep_ms(200)
-
-# _thread.start_new_thread(indev_task,())
-
-# 启动lvgv线程
-lv.tick_inc(5)
-lv.task_handler()
-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_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)
-
-power_on_screen = lv.obj()
-power_on_screen.add_style(style_screen, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-power_on_label = lv.label(power_on_screen)
-power_on_label.set_text("WELCOME")
-power_on_label.align(lv.ALIGN.CENTER, 0, 0)
-power_on_label.add_style(style_font_youyuan_40, lv.PART.MAIN | lv.STATE.DEFAULT)
-print("power_on_screen init...")
-lv.scr_load(power_on_screen)
-utime.sleep_ms(1000)
-print("power_on_screen end...")
-PWM_backlight = PWM(PWM.PWM1, PWM.ABOVE_MS, 1, 1)
-PWM_backlight.open()
diff --git a/3.code/1.watch/2.code/location.py b/3.code/1.watch/2.code/location.py
deleted file mode 100644 (file)
index b546faf..0000000
+++ /dev/null
@@ -1,1024 +0,0 @@
-# Copyright (c) Quectel Wireless Solution, Co., Ltd.All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import ure
-import net
-import math
-import utime
-import osTimer
-import _thread
-import wifiScan
-import cellLocator
-
-from queue import Queue
-from machine import UART, Pin
-
-try:
-    from wifilocator import wifilocator
-except:
-    wifilocator = None
-
-from log import getLogger
-
-try:
-    import quecgnss
-except ImportError:
-    quecgnss = None
-
-log = getLogger(__name__)
-
-_gps_read_lock = _thread.allocate_lock()
-_gps_data_set_lock = _thread.allocate_lock()
-
-EE = 0.00669342162296594323
-EARTH_RADIUS = 6378.137  # Approximate Earth Radius(km)
-M_PI = math.pi
-
-
-class _loc_method(object):
-    gps = 0x1
-    cell = 0x2
-    wifi = 0x4
-
-
-class _gps_mode(object):
-    none = 0x0
-    internal = 0x1
-    external = 0x2
-
-
-def transformLat(x, y):
-    ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * math.sqrt(math.fabs(x))
-    ret += (20.0 * math.sin(6.0 * x * M_PI) + 20.0 * math.sin(2.0 * x * M_PI)) * 2.0 / 3.0
-    ret += (20.0 * math.sin(y * M_PI) + 40.0 * math.sin(y / 3.0 * M_PI)) * 2.0 / 3.0
-    ret += (160.0 * math.sin(y / 12.0 * M_PI) + 320 * math.sin(y * M_PI / 30.0)) * 2.0 / 3.0
-    return ret
-
-
-def transformLon(x, y):
-    ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * math.sqrt(math.fabs(x))
-    ret += (20.0 * math.sin(6.0 * x * M_PI) + 20.0 * math.sin(2.0 * x * M_PI)) * 2.0 / 3.0
-    ret += (20.0 * math.sin(x * M_PI) + 40.0 * math.sin(x / 3.0 * M_PI)) * 2.0 / 3.0
-    ret += (150.0 * math.sin(x / 12.0 * M_PI) + 300.0 * math.sin(x / 30.0 * M_PI)) * 2.0 / 3.0
-    return ret
-
-
-def WGS84ToGCJ02(lon, lat):
-    dLat = transformLat(lon - 105.0, lat - 35.0)
-    dLon = transformLon(lon - 105.0, lat - 35.0)
-    radLat = lat / 180.0 * M_PI
-    magic = math.sin(radLat)
-    magic = 1 - magic * magic * EE
-    sqrtMagic = math.sqrt(magic)
-
-    dLat = (dLat * 180.0) / ((EARTH_RADIUS * 1000 * (1 - EE)) / (magic * sqrtMagic) * M_PI)
-    dLon = (dLon * 180.0) / (EARTH_RADIUS * 1000 / sqrtMagic * math.cos(radLat) * M_PI)
-    lon02 = lon + dLon
-    lat02 = lat + dLat
-
-    return lon02, lat02
-
-
-class GPSMatch(object):
-    """This class is match gps NEMA 0183"""
-
-    def GxRMC(self, gps_data):
-        """Match Recommended Minimum Specific GPS/TRANSIT Data(RMC)
-
-        Args:
-            gps_data(str): GPS NMEA string.
-
-        Returns:
-            str: RMC NMEA string.
-        """
-        if gps_data:
-            rmc_re = ure.search(
-                r"\$G[NP]RMC,\d*\.*\d*,*[AV],*\d*\.*\d*,*[NS],*\d*\.*\d*,*[EW],*\d*\.*\d*,*\d*\.*\d*,*\d*,*\d*\.*\d*,*[EW]*,*[ADEN]*,*[SCUV]*\**(\d|\w)*",
-                gps_data)
-            if rmc_re:
-                return rmc_re.group(0)
-        return ""
-
-    def GxGGA(self, gps_data):
-        """Match Global Positioning System Fix Data(GGA)
-
-        Args:
-            gps_data(str): GPS NMEA string.
-
-        Returns:
-            str: GGA NMEA string.
-        """
-        if gps_data:
-            gga_re = ure.search(
-                r"\$G[BLPN]GGA,\d*\.*\d*,*\d*\.*\d*,*[NS],*\d*\.*\d*,*[EW],*[0126],*\d*,*\d*\.*\d*,*-*\d*\.*\d*,*M,*-*\d*\.*\d*,*M,*\d*,*\**(\d|\w)*",
-                gps_data)
-            if gga_re:
-                return gga_re.group(0)
-        return ""
-
-    def GxVTG(self, gps_data):
-        """Match Track Made Good and Ground Speed(VTG)
-
-        Args:
-            gps_data(str): GPS NMEA string.
-
-        Returns:
-            str: VTG NMEA string.
-        """
-        if gps_data:
-            vtg_re = ure.search(r"\$G[NP]VTG,\d*\.*\d*,*T,*\d*\.*\d*,*M,*\d*\.*\d*,*N,*\d*\.*\d*,*K,*[ADEN]*\*(\d|\w)*",
-                                gps_data)
-            if vtg_re:
-                return vtg_re.group(0)
-        return ""
-
-    def GxGSV(self, gps_data):
-        """Mactch GPS Satellites in View(GSV)
-
-        Args:
-            gps_data(str): GPS NMEA string.
-
-        Returns:
-            str: GSV NMEA string.
-        """
-        if gps_data:
-            gsv_re = ure.search(
-                r"\$G[NP]GSV,\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*\**(\d|\w)*",
-                gps_data)
-            if gsv_re:
-                return gsv_re.group(0)
-        return ""
-
-    def GxGLL(self, gps_data):
-        """Geographic Position
-
-        Args:
-            gps_data(str): GPS NMEA string.
-
-        Returns:
-            str: GLL NMEA string.
-        """
-        if gps_data:
-            gll_re = ure.search(r"\$G[NP]GLL,\d*\.*\d*,*[NS]*,*\d*\.*\d*,*[EW]*,*\d*\.*\d*,*[AV]*,*[ADEN]*\**(\d|\w)*",
-                                gps_data)
-            if gll_re:
-                return gll_re.group(0)
-
-    def GxGSA(self, gps_data):
-        """GNSS DOP and Active Satellites
-
-        Args:
-            gps_data(str): GPS NMEA string.
-
-        Returns:
-            str: GSA NMEA string.
-        """
-        if gps_data:
-            gsa_re = ure.search(
-                r"\$G[NP]GSA,[MA]*,*[123]*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*,*\d*\.*\d*,*\d*\.*\d*,*\d*\.*\d*,*(\d|\w)*\**(\d|\w)*",
-                gps_data)
-            if gsa_re:
-                return gsa_re.group(0)
-
-
-class GPSParse(object):
-    """Parse details from gps data"""
-
-    def GxGGA_satellite_num(self, gga_data):
-        """Parse satellite num from GGA"""
-        if gga_data:
-            satellite_num_re = ure.search(r",[EW],[0126],\d+,", gga_data)
-            if satellite_num_re:
-                return satellite_num_re.group(0).split(",")[-2]
-        return ""
-
-    def GxGGA_latitude(self, gga_data):
-        """Parse latitude from GGA"""
-        if gga_data:
-            latitude_re = ure.search(r",[0-9]+\.[0-9]+,[NS],", gga_data)
-            if latitude_re:
-                latitude = latitude_re.group(0)[1:-3]
-                return str(float(latitude[:2]) + float(latitude[2:]) / 60)
-        return ""
-
-    def GxGGA_longitude(self, gga_data):
-        """Parse longitude from GGA"""
-        if gga_data:
-            longitude_re = ure.search(r",[0-9]+\.[0-9]+,[EW],", gga_data)
-            if longitude_re:
-                longitude = longitude_re.group(0)[1:-3]
-                return str(float(longitude[:3]) + float(longitude[3:]) / 60)
-        return ""
-
-    def GxGGA_altitude(self, gga_data):
-        """Parse altitude from GGA"""
-        if gga_data:
-            altitude_re = ure.search(r",-*[0-9]+\.[0-9]+,M,", gga_data)
-            if altitude_re:
-                return altitude_re.group(0)[1:-3]
-        return ""
-
-    def GxVTG_speed(self, vtg_data):
-        """Parse speed from VTG"""
-        if vtg_data:
-            speed_re = ure.search(r",N,\d+\.\d+,K,", vtg_data)
-            if speed_re:
-                return speed_re.group(0)[3:-3]
-        return ""
-
-    def GxGSV_satellite_num(self, gsv_data):
-        """Parse satellite num from GSV"""
-        if gsv_data:
-            satellite_num_re = ure.search(r"\$G[NP]GSV,\d+,\d+,\d+,", gsv_data)
-            if satellite_num_re:
-                return satellite_num_re.group(0).split(",")[-2]
-        return ""
-
-    def GxRMC_loc_status(self, rmc_data):
-        if rmc_data:
-            loc_status_re = ure.search(r"\$G[NP]RMC,\d*\.*\d*,[AV],", rmc_data)
-            if loc_status_re:
-                loc_status = loc_status_re.group(0).split(",")[-2]
-                return True if loc_status == "A" else False
-        return False
-
-    def __nmea_parse(self, nmea):
-        return tuple(nmea[1:].split("*")[0].split(",")) if nmea else ()
-
-    def GxRMC(self, rmc_data):
-        return self.__nmea_parse(rmc_data)
-
-    def GxGGA(self, gga_data):
-        return self.__nmea_parse(gga_data)
-
-    def GxGSV(self, gsv_data):
-        return self.__nmea_parse(gsv_data)
-
-    def GxGSA(self, gsa_data):
-        return self.__nmea_parse(gsa_data)
-
-    def GxVTG(self, vtg_data):
-        return self.__nmea_parse(vtg_data)
-
-    def GxGLL(self, gll_data):
-        return self.__nmea_parse(gll_data)
-
-
-class GPS(object):
-    """This class if for reading gps data.
-
-    Now support external gps and internal gps.
-
-    Sleep power consumption:
-        power off < backup < standby
-    """
-
-    __RMC = 0
-    __GGA = 1
-    __GSV = 2
-    __GSA = 3
-    __VTG = 4
-    __GLL = 5
-    __NMEA = 0b010111
-
-    def __init__(self, UARTn, buadrate, databits, parity, stopbits, flowctl, PowerPin, StandbyPin, BackupPin, gps_mode):
-        """Init GPS module
-
-        [description]
-
-        Args:
-            UARTn(int): UART No.
-            buadrate(int): baud rate
-            databits(int): data bits (5 ~ 8)
-            parity(int): parity (0 – NONE,1 – EVEN,2 - ODD)
-            stopbits(int): stop bit
-            flowctl(int): hardware control flow (0 – FC_NONE, 1 – FC_HW)
-            PowerPin(int): Power GIPO Pin
-            StandbyPin(int): Standby GPIO Pin
-            BackupPin(int): Back GPIO Pin
-            gps_mode(int): GPS mode
-                0 - None
-                1 - internal GPS
-                2 - external GPS
-        """
-        self.__UARTn = UARTn
-        self.__buadrate = buadrate
-        self.__databits = databits
-        self.__parity = parity
-        self.__stopbits = stopbits
-        self.__flowctl = flowctl
-        self.__PowerPin = PowerPin
-        self.__StandbyPin = StandbyPin
-        self.__BackupPin = BackupPin
-        self.__gps_mode = gps_mode
-
-        self.__external_obj = None
-        self.__internal_obj = quecgnss
-        self.__gps_match = GPSMatch()
-        self.__gps_parse = GPSParse()
-        self.__gps_power_gpio = None
-        self.__gps_standby_gpio = None
-        self.__gps_backup_gpio = None
-
-        self.__external_retrieve_queue = None
-        self.__queue_size = 2
-        self.__first_break = 0
-        self.__break = 0
-        self.__gps_data = ""
-        self.__rmc_data = ""
-        self.__gga_data = ""
-        self.__vtg_data = ""
-        self.__gsv_data = ""
-        self.__gps_timer = osTimer()
-        self.__gps_data_check_timer = osTimer()
-
-        if self.__gps_mode & _gps_mode.external:
-            self.__external_init()
-        elif self.__gps_mode & _gps_mode.internal:
-            self.__internal_init()
-        #print("GPS:__init__%d",self.__gps_mode)
-    def __gps_power_control(self, GPIOn, onoff, method):
-        if method == "power_switch":
-            if self.__gps_power_gpio is None:
-                self.__gps_power_gpio = Pin(GPIOn, Pin.OUT, Pin.PULL_DISABLE, onoff)
-            gpio_obj = self.__gps_power_gpio
-        elif method == "standby":
-            if self.__gps_standby_gpio is None:
-                self.__gps_standby_gpio = Pin(GPIOn, Pin.OUT, Pin.PULL_DISABLE, onoff)
-            gpio_obj = self.__gps_standby_gpio
-        elif method == "backup":
-            if self.__gps_backup_gpio is None:
-                self.__gps_backup_gpio = Pin(GPIOn, Pin.OUT, Pin.PULL_DISABLE, onoff)
-            gpio_obj = self.__gps_backup_gpio
-        else:
-            raise TypeError("Param method %s is not compare." % method)
-
-        if gpio_obj.read() != onoff:
-            gpio_obj.write(onoff)
-            if gpio_obj.read() != onoff:
-                return False
-        return True
-
-    def __reverse_gps_data(self, this_gps_data):
-        """Reverse GPS data for regular match get the latest data"""
-        log.debug("this_gps_data: \n%s" % this_gps_data)
-        delimiter = "\r\n"
-        if this_gps_data:
-            _gps_data = self.__get_gps_data()
-            if _gps_data:
-                _gps_data = delimiter.join(_gps_data.split(delimiter)[::-1])
-            _gps_data += this_gps_data.strip().replace("\r", "").replace("\n", "").replace("$", delimiter + "$")
-            _gps_data = delimiter.join(_gps_data.split(delimiter)[::-1])
-            self.__set_gps_data(_gps_data)
-
-    def __read_latitude(self, gps_data):
-        """Read latitude from gps data"""
-        return self.__gps_parse.GxGGA_latitude(self.__gps_match.GxGGA(gps_data))
-
-    def __read_longitude(self, gps_data):
-        """Read longitude from gps data"""
-        return self.__gps_parse.GxGGA_longitude(self.__gps_match.GxGGA(gps_data))
-
-    def __read_altitude(self, gps_data):
-        """Read altitude from gps data"""
-        return self.__gps_parse.GxGGA_altitude(self.__gps_match.GxGGA(gps_data))
-
-    def __set_gps_data(self, gps_data):
-        self.__gps_data = gps_data
-
-    def __get_gps_data(self):
-        return self.__gps_data
-
-    def __gps_timer_callback(self, args):
-        """GPS read timer callback
-        When over time to get uart data, break queue wait
-        """
-        self.__break = 1
-        if self.__external_retrieve_queue is not None:
-            self.__external_retrieve_queue.put(False)
-
-    def __gps_data_check_callback(self, args):
-        """GPS read old data clean timer callback
-        When GPS read over time, clean old gps data, wait to read new gps data.
-        """
-        clean = False
-        if "" in (self.__rmc_data, self.__gga_data, self.__gsv_data):
-            clean = True
-        else:
-            if self.__nmea_statement_exist(self.__GSA) and not self.__gsa_data:
-                clean = True
-            elif self.__nmea_statement_exist(self.__VTG) and not self.__vtg_data:
-                clean = True
-            elif self.__nmea_statement_exist(self.__GLL) and not self.__gll_data:
-                clean = True
-
-        if clean:
-            self.__gps_nmea_data_clean()
-
-    def __external_init(self):
-        """External GPS init"""
-        self.__external_retrieve_queue = Queue(maxsize=self.__queue_size)
-
-    def __external_open(self):
-        """External GPS start, UART init"""
-        self.power_switch(1)
-        self.__external_obj = UART(
-            self.__UARTn,
-            self.__buadrate,
-            self.__databits,
-            self.__parity,
-            self.__stopbits,
-            self.__flowctl
-        )
-        self.__external_obj.set_callback(self.__external_retrieve_cb)
-
-    def __external_close(self):
-        """External GPS close, UART close, NOT GPS stop"""
-        self.__external_obj.close()
-
-    def __external_retrieve_cb(self, args):
-        """
-        GPS data retrieve callback from UART
-        When data comes, send a message to queue of data length
-        """
-        # log.debug("GPS __external_retrieve_cb args: %s" % str(args))
-        if self.__external_retrieve_queue.size() >= self.__queue_size:
-            self.__external_retrieve_queue.get()
-        self.__external_retrieve_queue.put(True)
-
-    def __internal_init(self):
-        """Internal GPS init"""
-        if self.__internal_obj:
-            if self.__internal_obj.init() != 0:
-                self.__internal_open()
-                log.error("GNSS INIT Failed.")
-            else:
-                log.debug("GNSS INIT Success.")
-        else:
-            log.error("Module quecgnss Import Error.")
-
-    def __internal_open(self):
-        """Internal GPS enable"""
-        if self.__internal_obj.get_state() == 0:
-            return True if self.__internal_obj.gnssEnable(1) == 0 else False
-        else:
-            return True
-
-    def __internal_close(self):
-        """Internal GPS close"""
-        return True if self.__internal_obj.gnssEnable(0) == 0 else False
-
-    def __nmea_statement_exist(self, nmea_item):
-        return (self.__NMEA & (0b1 << nmea_item)) >> nmea_item
-
-    def __gps_nmea_data_clean(self):
-        self.__set_gps_data("")
-        self.__rmc_data = ""
-        self.__gga_data = ""
-        self.__gsv_data = ""
-        self.__gsa_data = ""
-        self.__vtg_data = ""
-        self.__gll_data = ""
-
-    def __check_gps_valid(self, gps_data):
-        self.__reverse_gps_data(gps_data)
-
-        if not self.__rmc_data:
-            self.__rmc_data = self.__gps_match.GxRMC(self.__get_gps_data())
-        loc_status = self.__gps_parse.GxRMC_loc_status(self.__rmc_data)
-
-        if self.__rmc_data and loc_status:
-            if self.__nmea_statement_exist(self.__GGA) and not self.__gga_data:
-                self.__gga_data = self.__gps_match.GxGGA(self.__get_gps_data())
-            if self.__nmea_statement_exist(self.__GSV) and not self.__gsv_data:
-                self.__gsv_data = self.__gps_match.GxGSV(self.__get_gps_data())
-            if self.__nmea_statement_exist(self.__GSA) and not self.__gsa_data:
-                self.__gsa_data = self.__gps_match.GxGSA(self.__get_gps_data())
-            if self.__nmea_statement_exist(self.__VTG) and not self.__vtg_data:
-                self.__vtg_data = self.__gps_match.GxVTG(self.__get_gps_data())
-            if self.__nmea_statement_exist(self.__GLL) and not self.__gll_data:
-                self.__gll_data = self.__gps_match.GxGLL(self.__get_gps_data())
-
-            if self.__nmea_statement_exist(self.__GGA) and not self.__gga_data:
-                return False
-            if self.__nmea_statement_exist(self.__GSV) and not self.__gsv_data:
-                return False
-            if self.__nmea_statement_exist(self.__GSA) and not self.__gsa_data:
-                return False
-            if self.__nmea_statement_exist(self.__VTG) and not self.__vtg_data:
-                return False
-            if self.__nmea_statement_exist(self.__GLL) and not self.__gll_data:
-                return False
-            return True
-
-        return False
-
-    def __external_read(self):
-        """Read external GPS data
-
-        Return:
-            $GPTXT,01,01,02,ANTSTATUS=OPEN*2B
-            $GNRMC,073144.000,A,3149.330773,N,11706.946971,E,0.00,337.47,150422,,,D,V*07
-            $GNVTG,337.47,T,,M,0.00,N,0.00,K,D*22
-            $GNGGA,073144.000,3149.330773,N,11706.946971,E,2,19,0.66,85.161,M,-0.335,M,,*56
-            $GNGSA,A,3,01,195,06,03,21,194,19,17,30,14,,,0.94,0.66,0.66,1*02
-            $GNGSA,A,3,13,26,07,10,24,25,08,03,22,,,,0.94,0.66,0.66,4*03
-            $GPGSV,3,1,12,14,84,210,31,195,67,057,46,17,52,328,28,50,51,161,33,1*54
-            $GPGSV,3,2,12,194,49,157,33,03,48,090,37,19,36,305,32,06,34,242,32,1*58
-            $GPGSV,3,3,12,01,32,041,35,30,17,204,22,21,07,051,13,07,03,183,,1*6B
-            $BDGSV,5,1,18,07,86,063,30,10,75,322,30,08,60,211,34,03,52,192,33,1*71
-            $BDGSV,5,2,18,24,44,276,33,13,43,215,33,01,43,135,30,26,40,208,37,1*71
-            $BDGSV,5,3,18,02,38,230,,04,32,119,,22,26,135,30,19,25,076,,1*70
-            $BDGSV,5,4,18,05,17,251,,25,06,322,27,09,02,211,22,21,02,179,,1*78
-            $BDGSV,5,5,18,29,02,075,,20,01,035,,1*72
-            $GNGLL,3149.330773,N,11706.946971,E,073144.000,A,D*4E
-        """
-        self.__external_open()
-        log.debug("__external_read start")
-
-        while self.__break == 0:
-            self.__gps_timer.start(50, 0, self.__gps_timer_callback)
-            signal = self.__external_retrieve_queue.get()
-            log.debug("[first] signal: %s" % signal)
-            if signal:
-                to_read = self.__external_obj.any()
-                log.debug("[first] to_read: %s" % to_read)
-                if to_read > 0:
-                    self.__set_gps_data(self.__external_obj.read(to_read).decode())
-            self.__gps_timer.stop()
-        self.__break = 0
-
-        self.__gps_nmea_data_clean()
-        self.__gps_data_check_timer.start(2000, 1, self.__gps_data_check_callback)
-        cycle = 0
-        while self.__break == 0:
-            self.__gps_timer.start(1500, 0, self.__gps_timer_callback)
-            signal = self.__external_retrieve_queue.get()
-            log.debug("[second] signal: %s" % signal)
-            if signal:
-                to_read = self.__external_obj.any()
-                log.debug("[second] to_read: %s" % to_read)
-                if to_read > 0:
-                    if self.__check_gps_valid(self.__external_obj.read(to_read).decode()):
-                        self.__break = 1
-
-            self.__gps_timer.stop()
-            cycle += 1
-            if cycle >= self.__retry:
-                self.__break = 1
-            if self.__break != 1:
-                utime.sleep(1)
-        self.__gps_data_check_timer.stop()
-        self.__break = 0
-
-        # To check GPS data is usable or not.
-        self.__gps_data_check_callback(None)
-        self.__external_close()
-        log.debug("__external_read data: %s" % self.__get_gps_data())
-        return self.__get_gps_data()
-
-    def __internal_read(self):
-        import EventMesh
-        log.debug("__internal_read start.")
-        """Read internal GPS data
-
-        Return:
-            $GPTXT,01,01,02,ANTSTATUS=OPEN*2B
-            $GNRMC,073144.000,A,3149.330773,N,11706.946971,E,0.00,337.47,150422,,,D,V*07
-            $GNVTG,337.47,T,,M,0.00,N,0.00,K,D*22
-            $GNGGA,073144.000,3149.330773,N,11706.946971,E,2,19,0.66,85.161,M,-0.335,M,,*56
-            $GNGSA,A,3,01,195,06,03,21,194,19,17,30,14,,,0.94,0.66,0.66,1*02
-            $GNGSA,A,3,13,26,07,10,24,25,08,03,22,,,,0.94,0.66,0.66,4*03
-            $GPGSV,3,1,12,14,84,210,31,195,67,057,46,17,52,328,28,50,51,161,33,1*54
-            $GPGSV,3,2,12,194,49,157,33,03,48,090,37,19,36,305,32,06,34,242,32,1*58
-            $GPGSV,3,3,12,01,32,041,35,30,17,204,22,21,07,051,13,07,03,183,,1*6B
-            $BDGSV,5,1,18,07,86,063,30,10,75,322,30,08,60,211,34,03,52,192,33,1*71
-            $BDGSV,5,2,18,24,44,276,33,13,43,215,33,01,43,135,30,26,40,208,37,1*71
-            $BDGSV,5,3,18,02,38,230,,04,32,119,,22,26,135,30,19,25,076,,1*70
-            $BDGSV,5,4,18,05,17,251,,25,06,322,27,09,02,211,22,21,02,179,,1*78
-            $BDGSV,5,5,18,29,02,075,,20,01,035,,1*72
-            $GNGLL,3149.330773,N,11706.946971,E,073144.000,A,D*4E
-        """
-
-        #self.__gps_nmea_data_clean()
-
-        cycle = 0
-        #while self.__break == 0:
-        gnss_data = quecgnss.read(1024*3)
-        #print("__internal_read")
-        #print(gnss_data)
-        if gnss_data and gnss_data[1]:
-            this_gps_data = gnss_data[1].decode() if len(gnss_data) > 1 and gnss_data[1] else ""
-            _gps_valid = self.__check_gps_valid(this_gps_data)
-            log.debug("_gps_valid: %s" % _gps_valid)
-            
-            #print("_gps_valid:",_gps_valid)
-            #print(str(_gps_valid),self.__get_gps_data())
-            if _gps_valid == True :
-                #EventMesh.publish("time", [self.__get_gps_data(),"0",str(_gps_valid),"0"])
-                return self.__get_gps_data()
-            else :
-                EventMesh.publish("time", [self.__get_gps_data(),"0",str(_gps_valid),"0"])
-                return ""
-        
-    def read(self, retry=30):
-        """For user to read gps data
-
-        Return: (res_code, gps_data)
-            res_code:
-                -  0: Success
-                - -1: Failed
-            gps_data:
-                $GPTXT,01,01,02,ANTSTATUS=OPEN*2B
-                $GNRMC,073144.000,A,3149.330773,N,11706.946971,E,0.00,337.47,150422,,,D,V*07
-                $GNVTG,337.47,T,,M,0.00,N,0.00,K,D*22
-                $GNGGA,073144.000,3149.330773,N,11706.946971,E,2,19,0.66,85.161,M,-0.335,M,,*56
-                $GNGSA,A,3,01,195,06,03,21,194,19,17,30,14,,,0.94,0.66,0.66,1*02
-                $GNGSA,A,3,13,26,07,10,24,25,08,03,22,,,,0.94,0.66,0.66,4*03
-                $GPGSV,3,1,12,14,84,210,31,195,67,057,46,17,52,328,28,50,51,161,33,1*54
-                $GPGSV,3,2,12,194,49,157,33,03,48,090,37,19,36,305,32,06,34,242,32,1*58
-                $GPGSV,3,3,12,01,32,041,35,30,17,204,22,21,07,051,13,07,03,183,,1*6B
-                $BDGSV,5,1,18,07,86,063,30,10,75,322,30,08,60,211,34,03,52,192,33,1*71
-                $BDGSV,5,2,18,24,44,276,33,13,43,215,33,01,43,135,30,26,40,208,37,1*71
-                $BDGSV,5,3,18,02,38,230,,04,32,119,,22,26,135,30,19,25,076,,1*70
-                $BDGSV,5,4,18,05,17,251,,25,06,322,27,09,02,211,22,21,02,179,,1*78
-                $BDGSV,5,5,18,29,02,075,,20,01,035,,1*72
-                $GNGLL,3149.330773,N,11706.946971,E,073144.000,A,D*4E
-        """
-        self.__retry = retry
-        gps_data = ""
-        if self.__gps_mode & _gps_mode.external:
-            gps_data = self.__external_read()
-        elif self.__gps_mode & _gps_mode.internal:
-            gps_data = self.__internal_read()
-
-        res = 0 if gps_data else -1
-        return (res, gps_data)
-
-    def read_coordinates(self, gps_data):
-        """Read positioning coordinates.
-
-        Params:
-            gps_data: read gps data.
-            map_coordinate_system: `WGS84` or GCJ02
-
-        Return:
-            (longitude, latitude, altitude)
-        """
-        latitude = self.__read_latitude(gps_data)
-        latitude = float(latitude) if latitude else latitude
-        longitude = self.__read_longitude(gps_data)
-        longitude = float(longitude) if longitude else longitude
-        altitude = self.__read_altitude(gps_data)
-        altitude = float(altitude) if altitude else altitude
-        return (longitude, latitude, altitude)
-
-    def power_switch(self, onoff):
-        """GPS module power switch
-
-        Params:
-            onoff: 0 -- off, 1 -- on
-        """
-        if self.__gps_mode & _gps_mode.external:
-            if self.__PowerPin is not None:
-                return self.__gps_power_control(self.__PowerPin, onoff, "power_switch")
-            else:
-                return False
-        elif self.__gps_mode & _gps_mode.internal:
-            # TODO: Interal GNSS power down will not be used this api.
-            if onoff == 0:
-                return self.__internal_close()
-            else:
-                return self.__internal_open()
-
-    def backup(self, onoff):
-        """GPS module low enery mode backup
-
-        Params:
-            onoff: 0 -- off, 1 -- on
-        """
-        if self.__BackupPin is not None:
-            return self.__gps_power_control(self.__BackupPin, onoff, "backup")
-        else:
-            return False
-
-    def standby(self, onoff):
-        """GPS module low enery mode standby
-
-        Params:
-            onoff: 0 -- off, 1 -- on
-        """
-        if self.__StandbyPin is not None:
-            return self.__gps_power_control(self.__StandbyPin, onoff, "standby")
-        else:
-            return False
-
-    def set_nmea_statement(self, nmea_statement):
-        """Set NMEA statement to check gps info valid
-
-        RMC, GGA, GSV must be required.
-
-        Args:
-            nmea_statement(int):
-                RMC - 0b1 << 0 (bit0), 0 - off, 1 - on
-                GGA - 0b1 << 1 (bit1), 0 - off, 1 - on
-                GSV - 0b1 << 2 (bit2), 0 - off, 1 - on
-                GSA - 0b1 << 3 (bit3), 0 - off, 1 - on
-                VTG - 0b1 << 4 (bit4), 0 - off, 1 - on
-                GLL - 0b1 << 5 (bit5), 0 - off, 1 - on
-
-        Returns:
-            bool: True - success, False - falied.
-        """
-        if nmea_statement >= 0b111:
-            self.__NMEA = nmea_statement
-            return True
-        return False
-
-
-class CellLocator(object):
-    """This class is for reading cell location data"""
-
-    def __init__(self, serverAddr, port, token, timeout, profileIdx):
-        self.__serverAddr = serverAddr
-        self.__port = port
-        self.__token = token
-        self.__timeout = timeout
-        self.__profileIdx = profileIdx
-
-    def read(self):
-        read_loc_res = self.__read_loc()
-        read_cell_res = self.__read_cell()
-        res = 0 if read_loc_res[0] == 0 or read_cell_res[0] == 0 else -1
-        return (res, read_loc_res[1], read_cell_res[1])
-
-    def __read_loc(self):
-        """Read cell location data.
-
-        Return: (res_code, loc_data)
-            res_code:
-                -  0: Success
-                - -1: Initialization failed
-                - -2: The server address is too long (more than 255 bytes)
-                - -3: Wrong key length, must be 16 bytes
-                - -4: The timeout period is out of range, the supported range is (1 ~ 300) s
-                - -5: The specified PDP network is not connected, please confirm whether the PDP is correct
-                - -6: Error getting coordinates
-            loc_data:
-                (117.1138, 31.82279, 550)
-        """
-        res = -1
-        loc_data = cellLocator.getLocation(
-            self.__serverAddr,
-            self.__port,
-            self.__token,
-            self.__timeout,
-            self.__profileIdx
-        )
-        if isinstance(loc_data, tuple) and len(loc_data) == 3:
-            res = 0
-        else:
-            res = loc_data
-            loc_data = ()
-
-        return (res, loc_data)
-
-    def __read_cell(self):
-        res = -1
-        near_cell = []
-        server_cell = []
-
-        near_cells = net.getCi()
-        if near_cells != -1 and isinstance(near_cells, list):
-            near_cell = list(map(str, near_cells))
-
-        server_cells = net.getCellInfo()
-        if server_cells != -1 and isinstance(server_cells, tuple):
-            server_cell = server_cells
-
-        res = 0 if near_cell or server_cell else -1
-        return (res, {"near_cell": near_cell, "server_cell": server_cell})
-
-
-class WiFiLocator(object):
-    """This class is for reading wifi location data"""
-
-    def __init__(self, token):
-        self.__wifilocator_obj = wifilocator(token)
-
-    def read(self):
-        read_loc_res = self.__read_loc()
-        read_mac_res = self.__read_mac()
-        res = 0 if read_loc_res[0] == 0 or read_mac_res[0] == 0 else -1
-        return (res, read_loc_res[1], read_mac_res[1])
-
-    def __read_loc(self):
-        """Read wifi location data.
-
-        Return: (res_code, loc_data)
-            res_code:
-                -  0: Success
-                - -1: The current network is abnormal, please confirm whether the dial-up is normal
-                - -2: Wrong key length, must be 16 bytes
-                - -3: Error getting coordinates
-            loc_data:
-                (117.1138, 31.82279, 550)
-        """
-        res = -1
-        loc_data = self.__wifilocator_obj.getwifilocator()
-        if isinstance(loc_data, tuple) and len(loc_data) == 3:
-            res = 0
-        else:
-            res = loc_data
-            loc_data = ()
-
-        return (res, loc_data)
-
-    def __read_mac(self):
-        res = -1
-        macs = []
-        if wifiScan.support():
-            if wifiScan.control(1) == 0:
-                if wifiScan.getState():
-                    wifisacn_start = wifiScan.start()
-                    if wifisacn_start != -1 and wifisacn_start[0] > 0:
-                        macs = [i[0] for i in wifisacn_start[1]]
-                        res = 0
-            wifiScan.control(0)
-        return (res, macs)
-
-
-class Location(object):
-    """This class is for reading location data from gps, cell, wifi"""
-    gps = None
-    cellLoc = None
-    wifiLoc = None
-
-    def __init__(self, loc_method, locator_init_params):
-        """Init Location module
-
-        1. If loc_method include gps then init gps module;
-        2. If loc_method inculde cell then init cell module;
-        3. If loc_method Include wifi then init wifi module;
-
-        Args:
-            loc_method(int):
-                1 - gps
-                2 - cell
-                3 - cell & gps
-                4 - wifi
-                5 - wifi & gps
-                6 - wifi & cell
-                7 - wifi & cell & gps
-            locator_init_params(dict):
-                gps_cfg(dict):GPS module init args
-                cell_cfg(dict):CELL module init args
-                wifi_cfg(dict):WIFI module init args
-        """
-        self.__loc_method = loc_method
-        self.__locator_init_params = locator_init_params
-        self.__locater_init()
-
-    def __locater_init(self):
-        """Init gps, cell, wifi by loc_method"""
-
-        if self.__loc_method & _loc_method.gps:
-            if self.gps is None:
-                _gps_cfg = self.__locator_init_params.get("gps_cfg", {})
-                if _gps_cfg:
-                    self.gps = GPS(**_gps_cfg)
-                    if _gps_cfg.get("nmea_cfg") is not None:
-                        self.gps.set_nmea_statement(_gps_cfg.get("nmea_cfg"))
-                else:
-                    raise ValueError("Invalid gps init parameters.")
-        else:
-            self.gps = None
-
-        if self.__loc_method & _loc_method.cell:
-            if self.cellLoc is None:
-                _cell_cfg = self.__locator_init_params.get("cell_cfg")
-                if _cell_cfg:
-                    self.cellLoc = CellLocator(**_cell_cfg)
-                else:
-                    raise ValueError("Invalid cell-locator init parameters.")
-        else:
-            self.cellLoc = None
-
-        if self.__loc_method & _loc_method.wifi:
-            if self.wifiLoc is None:
-                _wifi_cfg = self.__locator_init_params.get("wifi_cfg")
-                if _wifi_cfg:
-                    self.wifiLoc = WiFiLocator(**_wifi_cfg)
-                else:
-                    raise ValueError("Invalid wifi-locator init parameters.")
-        else:
-            self.wifiLoc = None
-
-    def __read_gps(self, retry):
-        """Read loction data from gps module
-
-        Return:
-            $GPTXT,01,01,02,ANTSTATUS=OPEN*2B
-            $GNRMC,073144.000,A,3149.330773,N,11706.946971,E,0.00,337.47,150422,,,D,V*07
-            $GNVTG,337.47,T,,M,0.00,N,0.00,K,D*22
-            $GNGGA,073144.000,3149.330773,N,11706.946971,E,2,19,0.66,85.161,M,-0.335,M,,*56
-            $GNGSA,A,3,01,195,06,03,21,194,19,17,30,14,,,0.94,0.66,0.66,1*02
-            $GNGSA,A,3,13,26,07,10,24,25,08,03,22,,,,0.94,0.66,0.66,4*03
-            $GPGSV,3,1,12,14,84,210,31,195,67,057,46,17,52,328,28,50,51,161,33,1*54
-            $GPGSV,3,2,12,194,49,157,33,03,48,090,37,19,36,305,32,06,34,242,32,1*58
-            $GPGSV,3,3,12,01,32,041,35,30,17,204,22,21,07,051,13,07,03,183,,1*6B
-            $BDGSV,5,1,18,07,86,063,30,10,75,322,30,08,60,211,34,03,52,192,33,1*71
-            $BDGSV,5,2,18,24,44,276,33,13,43,215,33,01,43,135,30,26,40,208,37,1*71
-            $BDGSV,5,3,18,02,38,230,,04,32,119,,22,26,135,30,19,25,076,,1*70
-            $BDGSV,5,4,18,05,17,251,,25,06,322,27,09,02,211,22,21,02,179,,1*78
-            $BDGSV,5,5,18,29,02,075,,20,01,035,,1*72
-            $GNGLL,3149.330773,N,11706.946971,E,073144.000,A,D*4E
-        """
-        if self.gps:
-            return self.gps.read(retry)[1]
-        return ""
-
-    def __read_cell(self):
-        """Read loction data from cell module
-
-        Return:
-            (117.1138, 31.82279, 550) or ()
-        """
-        if self.cellLoc:
-            cell_loc_data = self.cellLoc.read()
-            return (cell_loc_data[1], cell_loc_data[2])
-        return ()
-
-    def __read_wifi(self):
-        """Read loction data from wifi module
-
-        Return:
-            (117.1138, 31.82279, 550) or ()
-        """
-        if self.wifiLoc:
-            wifi_loc_data = self.wifiLoc.read()
-            return (wifi_loc_data[1], wifi_loc_data[2])
-        return ()
-
-    def read(self, retry=30):
-        """Read location data
-
-        args:
-            retry(int): gps read uart data retry count.
-
-        Returns:
-            dict:
-                key:
-                    1 - GPS data
-                    2 - CELL data
-                    4 - WIFI data
-            .e.g:
-            {
-                1: "$GPGGA,XXX",
-                2: (0.00, 0.00, 0.00),
-                4: (0.00, 0.00, 0.00),
-            }
-        """
-        loc_data = {}
-
-        if self.__loc_method & _loc_method.gps:
-            loc_data[_loc_method.gps] = self.__read_gps(retry)
-
-        if self.__loc_method & _loc_method.cell:
-            loc_data[_loc_method.cell] = self.__read_cell()
-
-        if self.__loc_method & _loc_method.wifi:
-            loc_data[_loc_method.wifi] = self.__read_wifi()
-
-        return loc_data
-
-    def wgs84togcj02(self, Longitude, Latitude):
-        return WGS84ToGCJ02(Longitude, Latitude)
-
-
-if __name__ == '__main__':
-    _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,
-    }
-    gps = GPS(**_gps_cfg)
-    print("read {}".format(gps.read(300)))
diff --git a/3.code/1.watch/2.code/main_4.py b/3.code/1.watch/2.code/main_4.py
deleted file mode 100644 (file)
index 2f872f8..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-import example
-import uos
-ldev = uos.VfsLfs1(32, 32, 32, "ext_fs",0,3)
-uos.mount(ldev,'/ext')
-
-#from usr.Alipay import Alipay
-
-#alipay = Alipay()
-#alipay.post_processor_after_instantiation()
-
-example.exec('/ext/initTP.py')
-
- 
-
-    
\ No newline at end of file
diff --git a/3.code/1.watch/2.code/main_t.py b/3.code/1.watch/2.code/main_t.py
deleted file mode 100644 (file)
index 4eb9b25..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-import EventMesh
-from common import Abstract
-from lcd import gpio_backlight,tp_cst816
-from btn_device_ec800m import BtnDevice
-
-
-class App(object):
-    def __init__(self):
-        self.managers = []
-
-    def append_manager(self, manager):
-        if isinstance(manager, Abstract):
-            manager.post_processor_after_instantiation()
-            self.managers.append(manager)
-        return self
-
-    def start(self):
-        for manager in self.managers:
-            manager.post_processor_before_initialization()
-            manager.initialization()
-            manager.post_processor_after_initialization()
-
-
-class watchApp(App):
-    def __init__(self):
-        super(watchApp, self).__init__()
-        self.__ui = None
-
-    def set_ui(self, ui):
-        self.__ui = ui
-
-    def start(self):
-        if self.__ui is not None:
-            self.__ui.start()
-        super().start()
-
-
-
-if __name__ == '__main__':
- 
-    # ldev = uos.VfsLfs1(32, 32, 32, "ext_fs",0,3)
-    # uos.mount(ldev,'/ext')
-    #import ui as _ui
-    from protocol import LK_ProtoCol,PING_ProtoCol, CR_ProtoCol,UD_ProtoCol,KA_ProtoCol,FIND_ProtoCol,POWEROFF_ProtoCol,ProtoColResolver
-    import mgr as mgr
-    import ui as _ui
-    from mgr import ConfigStoreManager, DeviceInfoManager, LocationManager, SockManager, \
-    NetManager, BatteryManager
-    from Alipay import Alipay
-    from ui_WatchFaceScreen import WatchFaceScreen
-
-    btn_device = BtnDevice(tp_cst816)
-    btn_device.start()
-
-    ui = _ui.UI(gpio_backlight)
-    ui.add_screen(WatchFaceScreen()) \
-        .add_screen(_ui.PopupScreen()) \
-        .add_screen(_ui.PhoneScreen()) \
-        .add_screen(_ui.TilemenuScreen()) \
-        .add_screen(_ui.HeartrateScreen()) \
-        .add_screen(_ui.SettingScreen()) \
-        .add_screen(_ui.ToolboxScreen()) \
-        .add_screen(_ui.StepScreen()) \
-        .add_screen(_ui.AlarmScreen()) \
-        .add_screen(_ui.CountdownScreen()) \
-        .add_screen(_ui.StopwatchScreen()) \
-        .add_screen(_ui.WeatherScreen()) \
-        .add_screen(_ui.Spo2Screen()) \
-        .add_screen(_ui.TemperatureScreen()) \
-        .add_screen(_ui.ContactsScreen()) \
-        .add_screen(_ui.CountdownScreen()) \
-        .add_screen(_ui.LanguageScreen()) \
-        .add_screen(_ui.DialswitchScreen()) \
-        .add_screen(_ui.ThemeswitchScreen()) \
-        .add_screen(_ui.ImeiScreen()) \
-        .add_screen(_ui.AppScreen()) \
-        .add_screen(_ui.BrightnessScreen()) \
-        .add_screen(_ui.VolumeScreen()) \
-        .add_screen(_ui.RestoreScreen()) \
-        .add_screen(_ui.PoweroffScreen()) \
-        .add_screen(_ui.VersionScreen()) \
-        .add_screen(_ui.UpdateScreen()) \
-        .add_screen(_ui.AlarmvolumeScreen()) \
-        .add_screen(_ui.MsgvolumeScreen()) \
-        .add_screen(_ui.PhoneringScreen()) \
-        .add_screen(_ui.DialingScreen()) \
-        .add_screen(_ui.AlipayinviteScreen()) \
-        .add_screen(_ui.AlipayinvitedefaultScreen()) \
-        .add_screen(_ui.AlipayinvitewaitScreen()) \
-        .add_screen(_ui.AlipayinvitesuccessScreen()) \
-        .add_screen(_ui.AlipayMenuScreen()) \
-        .add_screen(_ui.AlipaySettingScreen()) \
-        .add_screen(_ui.AlipayPaycodeScreen()) \
-        .add_screen(_ui.AlipayCollectScreen()) \
-        .add_screen(_ui.PaymentSuccessScreen()) \
-        .add_screen(_ui.RedbagdetailScreen()) \
-        
-                
-    app = watchApp()
-    app.set_ui(ui)
-    app.append_manager(mgr.AlarmVolumeLevelManager()) \
-        .append_manager(mgr.MsgVolumeLevelManager()) \
-        .append_manager(mgr.PhoneVolumeLevelManager()) \
-        .append_manager(mgr.DeviceInfoManager()) \
-        .append_manager(mgr.BatteryManager()) \
-           
-        # .append_manager(mgr.StopwatchManager()) \
-        # .append_manager(mgr.CountdownManager()) \
-
-    app.append_manager(Alipay()) 
-    app.append_manager(ConfigStoreManager())
-    app.append_manager(NetManager())
-    app.append_manager(LocationManager())
-        
-    pcr = ProtoColResolver()
-    pcr.add_support(LK_ProtoCol())
-    pcr.add_support(PING_ProtoCol())
-    pcr.add_support(KA_ProtoCol())
-    pcr.add_support(UD_ProtoCol())
-    pcr.add_support(CR_ProtoCol())
-    pcr.add_support(FIND_ProtoCol())
-    pcr.add_support(POWEROFF_ProtoCol())
-    sm = SockManager()
-    sm.add_support_resolver(pcr)
-    app.append_manager(sm)
-    app.start()
-
-    EventMesh.publish("load_screen", {"screen": "main_menu"})
-
diff --git a/3.code/1.watch/2.code/mgr.py b/3.code/1.watch/2.code/mgr.py
deleted file mode 100644 (file)
index 98bf563..0000000
+++ /dev/null
@@ -1,2224 +0,0 @@
-from common import Abstract, LogAdapter
-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
-import constants
-import sms
-from common import Lock, Abstract, LogAdapter
-from location import GPS, GPSMatch,CellLocator
-from misc import USB, Power, ADC
-from machine import ExtInt, Pin,Timer,RTC,UART
-import EventMesh
-import audio
-from machine import I2C
-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:
-        get_UI_high_priority = EventMesh.publish("get_UI_high_priority")#如果在拨出去或者通话中屏蔽来电
-        if get_UI_high_priority == 1:
-            EventMesh.publish("set_interrup_incall",1)
-            return
-        print('voicecall incoming call, PhoneNO.: ', args[6])
-        size_len = len(str(args[6]))
-        tmp = []
-        tmp = args[6]
-        find_num = tmp[0]
-        b = tmp[0].isdigit()#判断是否不是数字开头 暂时不用 因为截取了+判断不了 判断号码是否大于11位数,如果大于11位数 并且第一个字符是数字就按照最后11位做存储
-
-        if b == True and size_len > 11:
-            tmp = tmp[size_len-11:]
-        EventMesh.publish("load_screen", {"screen": "incoming_call","meta":str(tmp)})
-
-   elif args[0] == 11:
-        EventMesh.publish("set_UI_high_priority",0)
-        sos_flag = EventMesh.publish("get_sos_flag")
-        if sos_flag == 1:
-            sos_flag = 0
-            EventMesh.publish("set_sos_flag",0)
-
-        print('voicecall connected, PhoneNO.: ', args[6])
-        size_len = len(str(args[6]))
-        tmp = []
-        tmp = args[6]
-        find_num = tmp[0]
-        b = tmp[0].isdigit()#判断是否不是数字开头 暂时不用 因为截取了+判断不了
-        if b == True and size_len > 11:
-            tmp = tmp[size_len-11:]
-        EventMesh.publish("load_screen", {"screen": "on_call","meta":str(tmp)})
-
-   elif args[0] == 12:
-        set_interrup_call = EventMesh.publish("get_interrup_incall")#打断这次不需要来电的ui事件 以免通话中退出当前界面进不去了
-        if set_interrup_call == 1:
-            EventMesh.publish("set_interrup_incall",0)
-            return
-    
-        EventMesh.publish("set_interrup_incall",0)
-        EventMesh.publish("set_UI_high_priority",0)
-        print('voicecall disconnect')
-        EventMesh.publish("load_screen", {"screen": "main_menu"})  
-        sos_flag = EventMesh.publish("get_sos_flag")
-        if sos_flag == 0:
-            EventMesh.publish("set_sos_num",0)
-        else:
-            num = EventMesh.publish("get_sos_num")
-            number = EventMesh.publish("get_dial_sos_number")
-            if len(number) > 0:
-                if num == None:
-                    num = 0
-                num+=1
-                num_len = 0
-
-                if len(number) == 1:
-                    num_len = len(number)
-                elif len(number) == 2:
-                    num_len = len(number)+1
-                elif len(number) == 3:
-                    num_len = len(number)+2  
-                # print("number:{} number_len :{} num:{} num_len:{}".format(number,len(number),num,num_len))
-                if num > num_len :
-                    EventMesh.publish("set_sos_flag",0)
-                    EventMesh.publish("set_sos_num",0)
-                else:
-                    # print("number:{} number_len :{}".format(number,len(number)))
-                    EventMesh.publish("set_sos_num",num)
-                    if len(number) == 1:
-                        EventMesh.publish("set_callnumer_cb",number[0])
-                        print("phone 1")
-                    elif len(number) == 2:
-                        if num == 1 or num == 3:
-                            print("phone 2")
-                            EventMesh.publish("set_callnumer_cb",number[1])
-                        elif num == 2:
-                            print("phone 3")
-                            EventMesh.publish("set_callnumer_cb",number[0])
-                    elif len(number) == 3:
-                        if num == 1 or num == 4:
-                            EventMesh.publish("set_callnumer_cb",number[1])
-                            print("phone 4")
-                        elif num == 2 or num == 5:
-                            print("phone 5")
-                            EventMesh.publish("set_callnumer_cb",number[2])
-                        elif num == 3:
-                            print("phone 6")
-                            EventMesh.publish("set_callnumer_cb",number[0])
-        print('voicecall disconnect end')
-        
-
-   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.sms_full_flag = 0
-        self.clear_step = 0
-
-        self.old_time = 0
-        self.UD_time = 0
-        self.upload_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.')
-
-        self.i2c0 = I2C(I2C.I2C0, I2C.STANDARD_MODE)
-        self.stop_temp( None, None)
-        
-    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)
-
-        EventMesh.subscribe(constants.EVENT.START_TEMP, self.start_temp)
-        EventMesh.subscribe(constants.EVENT.STOP_TEMP, self.stop_temp)
-        EventMesh.subscribe(constants.EVENT.GET_TEMP, self.get_temp)
-
-        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)
-        print("date_tmp......01....{} time_tmp:{}\r\n".format(date_tmp,time_tmp))
-
-        if  math.fabs(time_tmp - self.KA_time) > 7*60: #7分钟一次心跳
-            self.KA_time = time_tmp
-            EventMesh.publish(constants.PROTOCOL.KA_SEND)
-        self.upload_time = EventMesh.publish("get_upload_data")
-        #print("self.upload_time:{} math.fabs(time_tmp - self.UD_time):{}".format(self.upload_time,math.fabs(time_tmp - self.UD_time)))
-        if self.upload_time != None:
-            if  math.fabs(time_tmp - self.UD_time) > self.upload_time: #7分钟一次定位
-                self.UD_time = time_tmp
-                if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1:
-                    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")
-        
-        hour = 0
-        min = 0
-        hour = date_tmp[3]
-        min = date_tmp[4]
-
-        if hour == 0:#清步数
-            if min <= 1:
-                if self.clear_step == 0:
-                    step = EventMesh.publish("get_old_step_value")
-                    if step > 0:
-                        EventMesh.publish("set_old_step_value",0)
-                        self.gsensor.reset_step()
-                    self.clear_step = 1
-            else:
-                if self.clear_step == 1:
-                    self.clear_step = 0
-        else:
-            if self.clear_step == 1:
-                self.clear_step = 0
-        
-        #电量小于20% 5分钟提醒一次
-        battery = EventMesh.publish("screen_get_battery")
-        self.bat_time+=10
-        # print("date_tmp:{} self.bat_time:{}".format(date_tmp,self.bat_time))
-
-        if self.bat_time > 5*60:
-            self.bat_time = 0
-            if battery[1] == 20:
-                EventMesh.publish("load_screen", {"screen": "LOW_POWER"})
-        
-        #消息已满
-        msg_nums = sms.getMsgNums() #获取短信条数
-        self.sms_full_flag+=10
-        if self.sms_full_flag >= 120:
-            self.sms_full_flag=0
-            if msg_nums >= 50:
-                EventMesh.publish("load_screen", {"screen": "message_full"})
-        
-        
-        if EventMesh.publish(constants.EVENT.GET_CONNECT) == 1 or battery[1] != 1:
-            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.get_hr_state == 0 and self.get_spo2_state == 0:
-                            if self.HR_state == 0 or self.HR_state == 3:
-                                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("set_old_hr_data",heart_value)
-                                    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("set_old_spo2_data",spo2_value)
-                                    EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
-                                EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
-                        self.old_time = hr_time
-
-                        if self.HR_state == 3 or self.HR_state == 0:#
-                            if (time_tmp - self.SENSOR_time) >= hr_time:
-                                if self.get_spo2_state == 3 or self.get_hr_state == 3:#单次测量没有完毕优先测量间隔时间测量的
-                                    if self.get_hr_state == 3:
-                                        EventMesh.publish(constants.EVENT.STOP_HEART)
-                                        heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
-                                        if heart_value > 50 and heart_value != None:
-                                            EventMesh.publish("set_old_hr_data",heart_value)
-                                            EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)
-                                        
-                                    elif self.get_spo2_state == 3:
-                                        EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
-                                        spo2_value = EventMesh.publish(constants.EVENT.GET_BLOOD_OXYGEN)
-                                        if spo2_value > 85 and spo2_value != None:
-                                            EventMesh.publish("set_old_spo2_data",spo2_value)
-                                            EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
-
-                                    self.HR_state = 0
-                                    self.SENSOR_time = time_tmp
-                                self.SENSOR_time = time_tmp
-                                self.HR_state = 0
-                            
-                        #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 (time_tmp - self.SENSOR_time) == 0 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
-                            self.HR_Onestate = 0
-                            self.HR_OneTime = 0
-                        elif (time_tmp - self.SENSOR_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)
-                            print("heart_value:{}".format(heart_value))
-                            if heart_value > 50 and heart_value != None:
-                                EventMesh.publish("set_old_hr_data",heart_value)
-                                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 (time_tmp - self.SENSOR_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("set_old_spo2_data",spo2_value)
-                                EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
-                            self.HR_state = 3
-                    else:
-                        self.HR_state = 0
-                        self.old_time = hr_time
-
-                    if self.HR_state == 3 or 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)#上传心率数据
-                                        EventMesh.publish("set_old_hr_data",heart_value)
-                            
-                                    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开血氧
-                                        
-                                        self.HR_Onestate = 2
-                                        self.set_hsenor_crt = 2#血氧关闭
-                                    else:
-                                        self.HR_Onestate = 0
-                                        self.HR_OneTime = 0
-                                        self.set_hsenor_crt = 0#
-                                    
-                                        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)
-                                    
-                                        if spo2_value > 85 and spo2_value != None:
-                                            EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
-                                            EventMesh.publish("set_old_spo2_data",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#血氧关闭
-                                        
-                                        
-                            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)
-                                    if spo2_value > 85 and spo2_value != None:
-                                        EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND,spo2_value)
-                                        EventMesh.publish("set_old_spo2_data",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("set_old_hr_data",heart_value)
-                                        EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
-                                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#进入最后一次的时间戳
-
-                    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:
-                                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
-                        
-                            elif self.HR_OneTime > 6 and self.HR_Onestate == 1:
-                                print("stop_heart Onec ")
-                                if self.Hr_Need_Open == 1:#需要关闭心率测量
-                                    EventMesh.publish(constants.EVENT.STOP_HEART)
-                                    heart_value = EventMesh.publish(constants.EVENT.GET_HEART)
-                                    print("stop_heart heart_value:{}".format(heart_value))
-                                    if heart_value > 50 and heart_value != None:
-                                        EventMesh.publish("set_old_hr_data",heart_value)
-                                        EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
-                                    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开血氧
-                                        self.HR_Onestate = 2
-                                        self.set_hsenor_crt = 2#血氧关闭
-                                    else:
-                                        self.HR_Onestate = 0
-                                        self.HR_OneTime = 0
-                                        self.set_hsenor_crt = 0#
-                                        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("set_old_spo2_data",spo2_value)
-                                            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:
-                                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)
-                                    if spo2_value > 85 and spo2_value != None:
-                                        EventMesh.publish("set_old_spo2_data",spo2_value)
-                                        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("set_old_hr_data",heart_value)
-                                        EventMesh.publish(constants.PROTOCOL.HEART_SEND,heart_value)#上传心率数据
-                                self.HR_Onestate = 0
-                        else:
-                            self.HR_Onestate = 0
-                            self.HR_OneTime = 0
-        else:
-            if self.get_hr_state != 0 or self.get_spo2_state != 0:#3单次测量
-                if self.get_hr_state != 0:
-                    EventMesh.publish("set_hr_state",0)#2代表后台进入测试,定时测心率 1ui界面测试洗心率 
-                    EventMesh.publish(constants.EVENT.STOP_HEART) 
-                elif self.get_spo2_state != 0:
-                    EventMesh.publish("set_spo2_state",0)#2代表后台进入测试
-                    EventMesh.publish(constants.EVENT.STOP_BLOOD_OXYGEN)
-            self.SENSOR_time = time_tmp
-            self.HR_Onestate = 0
-            self.HR_OneTime = 0
-            self.HR_state = 0
-            self.old_time = 0    
-            self.set_hsenor_crt = 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 start_temp(self, topic, msg):
-        WHO_AM_I = bytearray([0x01, 0])
-        I2C_SLAVE_ADDR = 0x49
-        r_data = bytearray(2)
-        data = bytearray([0x61A0, 0])   # 唤醒
-        return self.i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)
-    def stop_temp(self, topic, msg):
-        WHO_AM_I = bytearray([0x01, 0])
-        I2C_SLAVE_ADDR = 0x49
-        r_data = bytearray(2)
-        data = bytearray([0x60A0, 0])   #休眠
-        return self.i2c0.write(I2C_SLAVE_ADDR, WHO_AM_I, 1, data, 2)
-        
-    def get_temp(self, topic, msg):
-        WHO_AM_I = bytearray([0x00, 0])
-        I2C_SLAVE_ADDR = 0x49
-        r_data = bytearray(2)
-        self.i2c0.read(I2C_SLAVE_ADDR, WHO_AM_I, 1, r_data, 2, 0)
-        #print("temp_data:{}".format(r_data))
-        temp_s = ((r_data[0]<<8) | (r_data[1]))>>4
-        #print("temp_s:{}".format(temp_s))
-        temp_data = temp_s * 0.0625
-        #print("temp_data:{}".format(temp_data))
-        return temp_data
- 
-            
-
-    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("TCP:send data:{}".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)<20*1024: #']':
-                continue
-            self.connect_tmp = 1 #有数据,就认为是连接状态
-            print("TCP:recv: data:{}".format(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
-
-        match_gga_data = []
-        match_gsv_data = []
-
-        if self.location_check_data_timer_count > 2 :#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 : #有数据
-                    match_gga_data = self.match.GxGGA(data[1]).split(",")
-                    match_gsv_data = self.match.GxGSV(data[1]).split(",")
-                    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 > 40: #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 len(match_gsv_data) >= 3:
-                #print("match_gsv_data[3]:{}".format(match_gsv_data[3]))  
-                if (int(match_gsv_data[3]) < 3 and self.wifi_data != [] and self.cell_data != [] and self.location_timer_count > 10): #超过10秒且卫星个数少于3
-                    #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)#关闭定位    
-        
-            
-
-# 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 gethistoryDataManager(Abstract):
-    def __init__(self):
-        self.oldHr = 0
-        self.oldspo2 = 0
-        self.oldstep = 0
-        self.old_step = 0
-        self.read_data = {}
-        check_json= ql_fs.path_exists("/ext/static/storage_file/config.json")
-        if check_json == True :
-            with open("/ext/static/storage_file/config.json","r") as fd:#音频文件编号
-                self.read_data = ujson.load(fd)
-                if self.read_data != {}:
-                    b = str("old_hr") in self.read_data.keys()
-                    if b == True:
-                        self.oldHr = self.read_data["old_hr"]  
-                    else:
-                        self.oldHr = 0
-                    old_spo2 = str("old_spo2") in self.read_data.keys()
-                    if old_spo2 == True:
-                        self.oldspo2 = self.read_data["old_spo2"]  
-                    else:
-                        self.oldspo2 = 0
-                    old_step = str("old_step") in self.read_data.keys()
-                    if old_step == True:
-                        self.oldstep = self.read_data["old_step"]  
-                    else:
-                        self.oldstep = 0
-                else:
-                    self.oldHr = 0
-                    self.oldspo2 = 0
-                    self.oldstep = 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)
-
-        EventMesh.subscribe("get_old_step_value", self.get_old_step_value)
-        EventMesh.subscribe("set_old_step_value", self.set_old_step_value)
-
-    def save_hr_value(self, event, msg): 
-        if msg >= 50:
-            self.read_data = EventMesh.publish("get_storage_data")
-            self.read_data["old_hr"] = msg
-
-            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)
-            self.oldHr = msg
-
-    def get_hr_value(self, event, msg): 
-        return self.oldHr
-
-    def save_spo2_value(self, event, msg): 
-        if msg >= 85:
-            self.read_data = EventMesh.publish("get_storage_data")
-            self.read_data["old_spo2"] = msg
-
-            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)
-            self.oldspo2 = msg
-
-    def get_spo2_value(self, event, msg): 
-        return self.oldspo2
-    
-    def set_old_step_value(self, event, msg): 
-        self.oldstep = msg
-        
-        
-    def get_old_step_value(self, event, msg): 
-        step = EventMesh.publish(constants.EVENT.GET_STEP)
-        self.old_step = self.oldstep + step[0]
-        return self.old_step
-    
-    
-    
-
-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 = 6#默认值6
-        self.read_data = {}
-        self.time = 5
-        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)
-
-        EventMesh.subscribe("set_brightness_time", self.set_brightness_time)
-        EventMesh.subscribe("get_brightness_time", self.get_brightness_time)
-
-    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 set_brightness_time(self, event, msg): 
-        self.time = msg
-    
-    def get_brightness_time(self, event, msg): 
-        # print("get_brightness_time self.read_data:{} self.time:{}".format(self.read_data,self.time))
-        if self.read_data != {}:
-            b = str("brightness_time") in self.read_data.keys()
-            if b == True:
-                self.time = self.read_data["brightness_time"]
-        return self.time
-    
-
-
-    def add(self, event, msg):
-        if self.level < 10:
-            self.level = self.level + 2
-        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 - 2
-        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 getUpLoadDataManager(Abstract):#
-    def __init__(self):
-        self.upload_time = 1800
-        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("upload_time") in self.read_data.keys()
-                    if b == True:
-                        self.upload_time = self.read_data["upload_time"]   
-
-    def post_processor_after_instantiation(self):
-        EventMesh.subscribe("set_upload_data", self.set_upload_data)
-        EventMesh.subscribe("get_upload_data", self.get_upload_data)
-
-    def set_upload_data(self, event, msg): 
-        self.upload_time = msg
-
-    def get_upload_data(self, event, msg): 
-        return self.upload_time 
-    
-class getVolumSizeManager(Abstract):#设置或获取音量大小数据
-    def __init__(self):
-        self.volume_size = 8
-        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)
-                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
-        # print("self.volume_size:{}".format(self.volume_size))
-    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
-
-class getSosFlagManager(Abstract):#设置或获取音量大小数据
-    def __init__(self):
-        self.sos_flag = 0
-        self.sos_num = 0
-        self.call_timer = osTimer()
-        self.sos_numer1 = []
-        self.callnumer =""
-        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)
-                if self.read_data != {}:
-                    b1 = str("SOS_NUMBER1") in self.read_data.keys()
-                    if b1 == True:
-                        self.sos_numer1 = [self.read_data["SOS_NUMBER1"]]
-                    b2 = str("SOS_NUMBER2") in self.read_data.keys()
-                    if b2 == True:
-                        self.sos_numer1 = [self.read_data["SOS_NUMBER1"], self.read_data["SOS_NUMBER2"]]
-
-                    b3 = str("SOS_NUMBER3") in self.read_data.keys()
-                    if b3 == True:
-                        self.sos_numer1 = [self.read_data["SOS_NUMBER1"], self.read_data["SOS_NUMBER2"],self.read_data["SOS_NUMBER3"]]
-                        
-        # print("self.sos_numer1:{} self.read_data:{}".format(self.sos_numer1,self.read_data))
-
-    def post_processor_after_instantiation(self):
-        EventMesh.subscribe("set_sos_flag", self.set_sos_flag)#设置sos拨打标识
-        EventMesh.subscribe("get_sos_flag", self.get_sos_flag)
-
-        EventMesh.subscribe("set_sos_num", self.set_sos_num)#设置拨打循环次数
-        EventMesh.subscribe("get_sos_num", self.get_sos_num)
-
-        EventMesh.subscribe("set_dial_sos_number", self.set_dial_sos_number)
-
-        EventMesh.subscribe("set_callnumer_cb", self.set_callnumer_cb)#延时回调
-
-        EventMesh.subscribe("get_dial_sos_number", self.get_dial_sos_number)#设置家庭号码三个
-
-    def set_sos_flag(self, event, msg): 
-        self.sos_flag = msg
-        if self.sos_flag == 1:
-            number = EventMesh.publish("get_dial_sos_number")
-            if len(number) > 0 and number != None:
-                EventMesh.publish("save_phonename",number[0])
-                EventMesh.publish("save_phonenum",number[0])
-                voiceCall.callStart(str(number[0]))
-
-
-    def set_callnumer_cb(self, event, msg):
-        self.callnumer = msg
-        self.call_timer.start(5000, 0, self.call_timer_cb)#延迟1S 继续拨打
-
-    def call_timer_cb(self, *args, **kwargs):
-        # print("call_timer_cb:{}".format(self.callnumer))
-        EventMesh.publish("save_phonename",str(self.callnumer))
-        EventMesh.publish("save_phonenum",str(self.callnumer))
-        voiceCall.callStart(str(self.callnumer))
-
-    def get_sos_flag(self, event, msg): 
-        return self.sos_flag
-    
-    def set_sos_num(self, event, msg): 
-        self.sos_num = msg
-
-    def get_sos_num(self, event, msg): 
-        return self.sos_num
-    
-    def set_dial_sos_number(self, event, msg): 
-        self.sos_numer1 = msg
-        # print("self.sos_numer1:{}".format(self.sos_numer1))
-
-    def get_dial_sos_number(self, event, msg): 
-        return self.sos_numer1
-
-
-class getBootOffManager(Abstract):#开关机时间
-    def __init__(self):
-        self.read_data = {}
-        self.off_msg = []
-        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 != {}:
-                    b1 = str("off_on") in self.read_data.keys()
-                    if b1 == True:
-                        self.off_on = self.read_data["off_on"]
-                    b2 = str("off_start") in self.read_data.keys()
-                    if b2 == True:
-                        self.off_start= self.read_data["off_start"]
-
-                    b3 = str("off_end") in self.read_data.keys()
-                    if b3 == True:
-                        self.off_end = self.read_data["off_end"]
-                        
-        # print("self.sos_numer1:{} self.read_data:{}".format(self.sos_numer1,self.read_data))
-
-    def post_processor_after_instantiation(self):
-        EventMesh.subscribe("set_boot_off_time", self.set_boot_off_time)#设置关机时间
-        EventMesh.subscribe("get_boot_off_time", self.get_boot_off_time)
-
-    # def _rtc_callback(self,args):
-    #     print("---!!!!!!alarm_ring!!!!!!!---,idx:",args)
-
-    # def set_boot_off_time(self, event, msg): 
-
-    #     self.off_msg = msg
-    #     if msg[0] == 0:
-    #         return
-      
-    #     rtc_now_time = self.rtc.datetime()
-
-    #     # data = RTC().datetime()
-    #     # hour = data[4]
-    #     # min = data[5]
-
-
-       
-    #     current_minute = rtc_now_time[4]*60 + rtc_now_time[5] #当前的分钟数不包含年月日
-    #     off_msg1 = msg[1]
-    #     off_msg2 = msg[2]
-    #     msg_tmp1 = off_msg1.split(':')
-    #     msg_tmp2 = off_msg2.split(':')
-    #     start_min = msg_tmp1[0]*60+msg_tmp1[1]
-    #     end_min = msg_tmp2[0]*60+msg_tmp2[1]
-    #     #9:00 6:00 
-    #     if current_minute >  start_min:#如果当前的分钟数 大于开始的关机时间分钟数 则认为是第二天6:00需要开机 23:00需要关机
-    #         next_alarm_time = utime.localtime(next_alarm_mktime)
-    #         pass
-
-
-    #     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)
-       
-    #     #设置rtc闹钟时间
-    #     self.rtc.register_callback(self._rtc_callback)
-
-    #     FLAG = self.rtc.set_alarm(data_e)
-    #     if FLAG == 0:
-    #         print("成功设置rtc的到期时间:", data_e)
-    #     else:
-    #         print("设置rtc的到期时间失败:", data_e)
-        
-    #     self.rtc.enable_alarm(1)
-
-    # def get_boot_off_time(self, event, msg):
-    #     return self.off_msg
-
-    
\ No newline at end of file
diff --git a/3.code/1.watch/2.code/protocol.py b/3.code/1.watch/2.code/protocol.py
deleted file mode 100644 (file)
index f4106e2..0000000
+++ /dev/null
@@ -1,952 +0,0 @@
-import ujson
-import utime
-import EventMesh
-import constants
-from common import Abstract
-import uhashlib
-import ubinascii
-from misc import Power
-import audio
-from machine import Pin
-import ujson
-import ql_fs
-def unicode_to_utf8(src):
-    ref = 0xe08080
-    result = ref
-    
-    #取最后六位
-    a = src & 0x3f
-    
-    #将最后六位放在ref最后六位的空位置
-    result = result | a
-    src = src >> 6
-    
-    #取接下来的六位
-    a = src & 0x3f
-    
-    #放在ref对应的六个位置
-    result = result | (a << 8)
-
-    #保留最后四位
-    src = src >> 6
-
-    #放在ref对应的四个位置    
-    result = result | (src << 16)
-    return result
-
-def UnicodeHexStr_To_Utf8Str(str):
-    odata = 0
-
-    result = bytes() 
-    su =str.upper()
-
-    i = 0
-    for c in su:
-        tmp=ord(c)
-        if tmp <= ord('9') :
-            odata = odata << 4
-            odata += tmp - ord('0')
-
-        elif ord('A') <= tmp <= ord('F'):
-            odata = odata << 4
-            odata += tmp - ord('A') + 10
-        if(i%4==3): #每2字节获取一个int,拿到转换后的unicode int
-            #print(odata.to_bytes(2, 'big'))
-            #result.append(odata)
-            if odata > 255:
-                tmp = unicode_to_utf8(odata)#拿到转换后的utf8 int
-                tmp2 = tmp.to_bytes(3, 'big') #转bytes
-            else :
-                tmp2 = odata.to_bytes(1, 'big') 
-            #print("tmp2:{}".format(tmp2))
-            result = result + tmp2
-            odata = 0 
-        i+=1
-    return result.decode('utf-8') #返回utf8的str
-
-class ProtoCol(Abstract):
-    TYPE = ""
-    HEADER = "#@{}@#;"
-    SEPARATOR = ";"
-    END = ";" + chr(0x01)
-
-    def __init__(self):
-        self.content = None
-        self.check_sum = None
-        self.location_old_data = None
-        self.password = EventMesh.publish(constants.EVENT.GET_PASSWORD)
-        self.imei = EventMesh.publish(constants.EVENT.GET_IMEI)
-        self.cid = EventMesh.publish(constants.EVENT.GET_CID)
-        self.imsi = EventMesh.publish(constants.EVENT.GET_IMSI)
-        self.key = EventMesh.publish(constants.EVENT.GET_KEY)
-        self.HEADER = self.HEADER.format(self.TYPE)
-
-    def initialization(self, *args, **kwargs):
-        EventMesh.subscribe(self.TYPE + "_SEND", self.handler)
-        EventMesh.subscribe(self.TYPE + "_RECV", self.handler)
-
-    def handler(self, event, msg):
-        self.password = EventMesh.publish(constants.EVENT.GET_PASSWORD)
-        self.imei = EventMesh.publish(constants.EVENT.GET_IMEI)#"867387060319166"#EventMesh.publish(constants.EVENT.GET_IMEI)#"867387060319166" #EventMesh.publish(constants.EVENT.GET_IMEI)#"867387060319166"#EventMesh.publish(constants.EVENT.GET_IMEI) #"867387060319166"#EventMesh.publish(constants.EVENT.GET_IMEI) #"867387060319166"#"867387060319188"#"867387060319177"#"867387060319166"#"860132060004322"#"867387060319166"#"860132060004322"#EventMesh.publish(constants.EVENT.GET_IMEI)
-        self.cid = EventMesh.publish(constants.EVENT.GET_CID)
-        self.imsi = EventMesh.publish(constants.EVENT.GET_IMSI)
-        self.key = EventMesh.publish(constants.EVENT.GET_KEY)
-        if event.endswith("_SEND"):
-            self.send(event, msg)
-        else:
-            self.recv(event, msg)
-
-    def send(self, event, msg):
-        pass
-
-    def recv(self, event, msg):
-        pass
-
-    @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 calc_crc(self):
-        data = self.content
-        if not isinstance(data, bytes):
-            data = data.encode()
-        count = 0
-        for x in data:
-            count += x
-        self.check_sum = 100 - count % 100
-
-    def pack(self):
-        self.calc_crc()
-        return self.HEADER.encode() + self.content.encode() + self.SEPARATOR.encode() + int(self.check_sum).to_bytes(1,'little') + self.END.encode()
-    
-    def pack_MD5_head(self,data):                                                                                                                 
-        key = "bZld0ALsZTt15tKEZhOlLPgbsO75BLTP"
-        
-        MD5_head = ""
-        hash_obj = uhashlib.md5(data+key)
-        res = hash_obj.digest()
-
-        # 转成十六进制表示
-        MD5_head = ubinascii.hexlify(res)
-        MD5_head = MD5_head.decode('ascii')
-        #print("pack_MD5_head:")
-        #print(res)
-        #print(MD5_head)
-        return MD5_head
-
-class LK_ProtoCol(ProtoCol):
-    """链路保持"""
-    TYPE = "LK"
-
-    def send(self, event, msg):
-        #[SZKW*334588000000156*0002*LK]
-        #print('self.imei:%s'%(self.imei))
-        send_data = "SZKW*%s*0002*LK"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        # print("LK_ProtoCol:send:%s"%(data))
-
-        
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
-
-    def recv(self, event, msg):
-        """
-
-        @param event: LK成功
-        @param msg: 接收到的下行数据
-        """
-        print("LK_ProtoCol:recv:%s"%(msg))
-        EventMesh.publish(constants.PROTOCOL.PING_SEND)
-        EventMesh.publish(constants.PROTOCOL.KA_SEND)
-        EventMesh.publish(constants.EVENT.START_LOCATION) #开始定位
-
-class PING_ProtoCol(ProtoCol):
-    """获取绑定状态"""
-    TYPE = "PING"
-
-    def send(self, event, msg):
-        #[SZKWT*YYYYYYYYYYYYYYY*LEN*PING]
-        send_data = "SZKW*%s*0004*PING"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        #print("PING_ProtoCol:send:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
-
-    def recv(self, event, msg):
-        """
-
-        @param event: PING
-        @param msg: 接收到的下行数据
-        """
-        #print("PING_ProtoCol:recv:%s"%(msg))   
-        data_tmp =  msg.decode('ascii')   
-        data_tmp = data_tmp.split(']')[0] #去掉]    
-        EventMesh.publish(constants.EVENT.SET_PING, data_tmp.split(',')[1])
-
-class KA_ProtoCol(ProtoCol):
-    """心跳"""
-    TYPE = "KA"
-
-    def send(self, event, msg):
-        #"{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])
-        #[XT*YYYYYYYYYYYYYYY*LEN*KA,日期,步数,翻滚次数,电量百分数,车载里程数(km)] 实例:[XT*334588000000156*0014*KA,120414,50,100,100,100.12]
-        date = "{:04d}{:02d}{:02d}".format(*utime.localtime()[0:3])
-        date = date[2:]
-        #print("date:",date)
-        #步数
-        old_step = 0
-        step = 0
-        step = EventMesh.publish("get_old_step_value")
-        if step != 0:
-            read_data = EventMesh.publish("get_storage_data")
-            b = str("old_step_new") in read_data.keys()
-            if b == True:
-                old_step = read_data["old_step_new"]
-            else:
-                old_step = 0
-            if old_step !=  step:
-                # print("old_step:send:%d %d"%(old_step,step))
-                read_data["old_step"] = step
-                read_data["old_step_new"] = step+10
-                EventMesh.publish("set_storage_data", read_data)
-                with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
-                    ujson.dump(read_data,fd)
-
-        old_step = step
-        # step = EventMesh.publish(constants.EVENT.GET_STEP)[0]
-        # 电池电量百分比 
-        bat_tmp = EventMesh.publish("screen_get_battery")
-        battery_caption =  bat_tmp[1]
-        send_data = "KA,%s,%d,%d,%d"%(date,step,0,battery_caption)
-        send_len = len(send_data)
-
-        send_data = "SZKW*%s*%04X*%s"%(self.imei,send_len,send_data)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        #print("KA_ProtoCol:send:%s"%(data))
-
-        
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
-
-    def recv(self, event, msg):
-        """
-
-        @param event: PING
-        @param msg: 接收到的下行数据
-        """
-        #print("KA_ProtoCol:recv:%s"%(msg))   
-        
-class UD_ProtoCol(ProtoCol):
-    """位置信息"""
-    TYPE = "UD"
-    def send(self, event, msg):
-        #"{:04d}-{:02d}-{:02d}".format(*utime.localtime()[0:3])
-        #[6f62cfc40fc50173f9a7b21e87be3424IS*861217001020120*00f6*UD,220726,211210,A,22.649529,N,114.119165,E,0.28,137.4,100.0,8,24,63,119,0,00000000,2,1,460,11,30472,125667122,24,30472,218944048,19,4,
-        # wifi0,34:93:44:01:28:b9,-74,wifi1,34:20:03:96:35:ad,-78,wifi2,ea:b5:7b:e8:56:54,-80,wifi3,c4:49:bb:d4:d9:78,-88]
-        date = "{:04d}{:02d}{:02d},{:02d}{:02d}{:02d}".format(*utime.localtime()[0:6])
-        date = date[2:]
-        GPS_type = "V"
-        latitude = "0.000000,N"
-        longitude = "0.000000,E"
-        speed = "0.00"
-        direction = "0.0"
-        high = "100.0"
-        number = "0"
-        if msg[0] != [] :#有GPS数据
-            GPS_type = "A"
-            # 纬度
-            latitude = msg[0]["latitude"]
-            # 经度
-            longitude = msg[0]["longitude"]
-            # 速度
-            speed = msg[0]["speed"]
-            # 方向
-            direction = "0"
-            if msg[0]["direction"] :
-                direction = msg[0]["direction"]
-            # 高度
-            high = msg[0]["high"]
-            high_tmp = high.split(".")
-            if len(high_tmp) >= 2 :
-                high = "%s"%(high_tmp[0])
-            # 讯号质量:搜索到的卫星数目
-            number = msg[0]["number"]
-        #gsm 信号强度
-        gsm_sig =  str((100//31)*EventMesh.publish("screen_get_sig"))
-        # 电池电量百分比 
-        bat_tmp = EventMesh.publish("screen_get_battery")
-        battery_caption =  str(bat_tmp[1])
-        #步数
-        old_step = 0
-        step = 0
-        step = EventMesh.publish("get_old_step_value")
-        if step != 0:
-            read_data = EventMesh.publish("get_storage_data")
-            b = str("old_step_new") in read_data.keys()
-            if b == True:
-                old_step = read_data["old_step_new"]
-            else:
-                old_step = 0
-            if old_step !=  step:
-                read_data["old_step"] = step
-                read_data["old_step_new"] = step
-                EventMesh.publish("set_storage_data", read_data)
-                with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
-                    ujson.dump(read_data,fd)
-        old_step = step
-        # step = str(EventMesh.publish(constants.EVENT.GET_STEP)[0])
-        #翻转次数
-        turn_count = "0"
-        #终端状态
-        state = "00000000"
-        #基站数据
-        CELL_num = len(msg[2])
-        CELL_data = "1," #时延
-        if msg[2] != []:
-            for CELL in msg[2] :
-                if CELL[0] == 0 :
-                    CELL_data += "%X,"%(int(CELL[2])) #MCC
-                    CELL_data += str(CELL[3]) +","#MNC
-                    CELL_data += str(CELL[5]) +","#tac,区域码
-                    CELL_data += str(CELL[1]) +","#基站编号 CID
-                    CELL_data += str(int(CELL[7]+140)) +","#信号强度 rssi
-                else :
-                    CELL_data += str(CELL[5]) +","#tac,区域码
-                    CELL_data += str(CELL[1]) +","#基站编号 CID
-                    CELL_data += str(int(CELL[7]+140)) +","#信号强度 rssi
-            CELL_data = CELL_data[:(len(CELL_data)-1)]
-        #WIFI数据
-        WIFI_num = 0 
-        WIFI_data = ""
-        if msg[1] :
-            WIFI_num = msg[1][0]
-            i = 0
-            for MAC in msg[1][1] :
-                WIFI_data += "wifi%d,%s,%d,"%(i,str(MAC[0]),MAC[1])
-                i += 1
-            WIFI_data = WIFI_data[:(len(WIFI_data)-1)]
-        WIFI_data = WIFI_data.lower()
-        #send_data = "UD ,%s ,%s     ,%s       ,%s       ,%s   ,%s       ,%s  ,%s    ,%s     ,%s             ,%s  ,%s        ,%s   ,%d     ,%s       ,%d      ,%s"\
-        #              %(date,GPS_type,latitude,longitude,speed,direction,high,number,gsm_sig,battery_caption,step,turn_count,state,CELL_num,CELL_data,WIFI_num,WIFI_data)
-        send_data = "UD,%s,%s,%s"%(date,GPS_type,latitude)
-        send_data += ",%s,%s,%s"%(longitude,speed,direction)
-        send_data += ",%s,%s,%s"%(high,number,gsm_sig,)
-        send_data += ",%s,%s,%s"%(battery_caption,step,turn_count)
-        send_data += ",%s,%d,%s"%(state,CELL_num,CELL_data)
-        send_data += ",%d,%s"%(WIFI_num,WIFI_data)
-
-        send_len = len(send_data)
-        wt_data = "%s"%(send_data)
-        send_data = "SZKW*%s*%04X*%s"%(self.imei,send_len,send_data)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-
-
-    
-        #这个是发送WT位置数据到手机端
-        msg_tmp = wt_data.split('UD,')
-        msg_tmp = msg_tmp[1]
-        # print("WT_ProtoCol:msg_tmp:%s"%(msg_tmp))
-        send_data_1 = "SZKW*%s*%04x*WT"%(self.imei,len(msg_tmp))
-        MD5_SIGN_1 = self.pack_MD5_head(send_data_1)
-        data_1 = "[%s%s,%s]"%(str(MD5_SIGN_1),send_data_1,msg_tmp)
-        # print("WT_ProtoCol:send:%s"%(data_1))
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data_1)
-        # 通过socket发送到服务器端
-        
-
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
-
-    def recv(self, event, msg):
-        """
-
-        @param event: PING
-        @param msg: 接收到的下行数据
-        """
-        # print("UD_ProtoCol:recv:%s"%(msg))  
-
-class CR_ProtoCol(ProtoCol):
-    """立即定位"""
-    TYPE = "CR"
-
-    def send(self, event, msg):
-        #[SZKWT*YYYYYYYYYYYYYYY*LEN*PING]
-        send_data = "SZKW*%s*0002*CR"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        #print("CR_ProtoCol:send:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
-
-    def recv(self, event, msg):
-        """
-
-        @param event: PING
-        @param msg: 接收到的下行数据
-        """
-        EventMesh.publish(constants.PROTOCOL.CR_SEND)
-        EventMesh.publish(constants.EVENT.START_LOCATION) #开始定位
-        #print("CR_ProtoCol:recv:%s"%(msg))   
-        
-class FIND_ProtoCol(ProtoCol):
-    """查找设备"""
-    TYPE = "FIND"
-
-    def send(self, event, msg):
-        #[SZKWT*YYYYYYYYYYYYYYY*LEN*PING]
-        send_data = "SZKW*%s*0004*FIND"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        #print("FIND_ProtoCol:send:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
-
-    def recv(self, event, msg):
-        """
-
-        @param event: FIND,播放铃声
-        @param msg: 接收到的下行数据
-        """
-        EventMesh.publish(constants.PROTOCOL.FIND_SEND)
-        # a = audio.Audio(0)
-        # a.set_pa(Pin.GPIO29)
-        # a.setVolume(10)
-        # a.play(1, 1, 'E:/audio_audio_haixiu.mp3')  #文件名前面要加上路径
-        
-        EventMesh.publish("load_screen", {"screen": "FIND"})
-        #print("FIND_ProtoCol:recv:%s"%(msg)) 
-
-class POWEROFF_ProtoCol(ProtoCol):
-    """关机"""
-    TYPE = "POWEROFF"
-
-    def send(self, event, msg):
-        # [SZKW*867387060319491*0008*POWEROFF]
-        send_data = "SZKW*%s*0008*POWEROFF"%(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: POWEROFF关机
-        @param msg: 接收到的下行数据
-        """
-        EventMesh.publish(constants.PROTOCOL.POWEROFF_SEND)
-        #print("POWEROFF_ProtoCol:recv:%s"%(msg))
-        EventMesh.publish("load_screen", {"screen": "poweroff_comfirm"})
-         
-class PHL_ProtoCol(ProtoCol):
-    """电话本同步"""
-    TYPE = "PHL"
-
-
-    def send(self, event, msg):
-        # [SZKW*867387060319491*0008*PHL]
-        send_data = "SZKW*%s*0003*PHL"%(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]
-        # print("phonebook:msg:%s\r\n"%msg)
-        msg_tmp = msg.decode('ascii')
-        msg_tmp = msg_tmp.split(',')
-        # print("phonebook:len:{}\r\n data:{}".format(len(msg_tmp),msg_tmp))
-
-        phonebook = {}
-        msg_tmp = msg_tmp[1:]
-        # print("msg_tmp1:{}".format(msg_tmp))
-        j = 0
-        i = 0
-        phonebook_oldtmp = {}
-        # 0 1 2 3
-        for phonebook_tmp in msg_tmp: 
-            j+=1
-            # print("phonebook_tmp:{}".format(phonebook_tmp))
-
-            if (j%2) == 0:
-                i+=1
-                phonebook_name = UnicodeHexStr_To_Utf8Str(phonebook_tmp)
-                phonebook_name = "{}:{}".format("%03d"%i,phonebook_name)                                      
-                phonebook[phonebook_name] = phonebook_oldtmp
-                
-            phonebook_oldtmp = phonebook_tmp
-            # print("phonebook_oldtmp!!!:{}".format(str(phonebook_oldtmp)))
-        # print("phonebook!!!:{}".format(str(phonebook)))
-        with open("/ext/static/storage_file/phonebook.json","w",encoding="utf-8") as fd:
-            ujson.dump(phonebook,fd)
-            print("创建电话簿")
-        
-        EventMesh.publish(constants.PROTOCOL.PHL_SEND)
-        EventMesh.publish("set_phonebook_list",[1,phonebook])
-        EventMesh.publish("contact_updata_list_show")
-
-         
-class WT_ProtoCol(ProtoCol):
-    """天气数据"""
-    TYPE = "WT"
-
-
-    def send(self, event, msg):
-        # [SZKW*867387060319491*0008*WT]
-        send_data = "SZKW*%s*003*WT"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        # print("WT_ProtoCol:send:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
-
-    def recv(self, event, msg):
-        """
-
-        @param event: T天气温度数据下发
-        @param msg: 接收到的下行数据
-        """
-        # b'SZKW*860132060004322*0035*WT,23-04-06,14:41:06,b6e0d4c6,1,27,-1,40,6DF157335E02'
-        msg = msg[1:-1]
-        msg_tmp = msg.decode('ascii')
-        msg_tmp = msg_tmp.split('WT,')
-        # print("phonebook:len:{}\r\n data:{}".format(len(msg_tmp),msg_tmp))
-        msg_tmp = msg_tmp[1]
-
-        # print("msg_tmp :%s"%(msg_tmp))
-
-        msg_date = msg_tmp.split(',')[0]
-
-        msg_time = msg_tmp.split(',')[1]
-        msg_weather_content = msg_tmp.split(',')[2]
-        msg_type = msg_tmp.split(',')[3]
-        msg_temp = msg_tmp.split(',')[4]
-        msg_min_temp = msg_tmp.split(',')[5]
-        msg_max_temp = msg_tmp.split(',')[6]
-        msg_city = msg_tmp.split(',')[7]
-
-        msg_city = UnicodeHexStr_To_Utf8Str(msg_city)
-        msg_weather_content = UnicodeHexStr_To_Utf8Str(msg_weather_content)
-        # print("msg_date:{} msg_time:{} msg_weather_content:{} msg_type:{} msg_temp:{} msg_min_temp:{} msg_max_temp:{} msg_city:{}".format(msg_date,msg_time,\
-        #     msg_weather_content,msg_type,msg_temp,msg_min_temp,msg_max_temp,msg_city))
-        print("WT_ProtoCol RECV msg:%s"%(msg))
-
-        EventMesh.publish("set_weather_data",[msg_date,msg_time,msg_weather_content,msg_type,msg_temp,msg_min_temp,msg_max_temp,msg_city,1])
-        EventMesh.publish("updata_weather_show")
-        EventMesh.publish(constants.PROTOCOL.WT_SEND)
-
-class REMIND_ProtoCol(ProtoCol):
-    """闹钟数据"""
-    TYPE = "REMIND"
-
-
-    def send(self, event, msg):
-        # [SZKW*867387060319491*0008*REMIND]
-        send_data = "SZKW*%s*006*REMIND"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        # print("REMIND_ProtoCol:send:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND, data)
-
-    def recv(self, event, msg):
-        """
-        @param event: 闹钟数据下发
-        @param msg: 接收到的下行数据
-        """
-        # b'SZKW*860132060004322*0035*REMIND,23-04-06,14:41:06,b6e0d4c6,1,27,-1,40,6DF157335E02'
-        # print("REMIND_ProtoCol RECV msg:%s"%(msg))
-        self.alarm_list = []
-
-        msg = msg[1:-1]
-        msg_tmp = msg.decode('ascii')
-        msg_tmp = msg_tmp.split('REMIND,')
-        msg_tmp = msg_tmp[1]
-        num = 0
-        j=0
-        for j in range(0,3):
-            self.alarm_day = []
-            self.alarm_week = []
-            self.alarm_total_data = []
-            self.alarm_total_data = msg_tmp.split(',')[j]
-
-            b = self.alarm_total_data.find('-')
-            if b != -1:
-                alarm_data = self.alarm_total_data.split('-')#-作为分隔符
-                alarm_switch = int(alarm_data[1])#开关
-                alarm_day_num = int(alarm_data[2])#天
-                alarm_time = alarm_data[0]#时间
-                alarm_time_tmp = alarm_time.split(':')#冒号分隔时间 时 分
-                alarm_time_hour = int(alarm_time_tmp[0])
-                alarm_time_min = int(alarm_time_tmp[1])
-                if alarm_day_num == 3:
-                    self.alarm_week = alarm_data[3]#星期
-
-                if alarm_day_num == 2:#每一天
-                    self.alarm_day = [1,2,3,4,5,6,0]
-                elif alarm_day_num == 3:#自定义
-                    for i in range(0,7):
-                        if self.alarm_week[i] != '0':
-                            self.alarm_day.append(i)
-                self.alarm_list.append({"idx": num, "hour": alarm_time_hour, "minute": alarm_time_min, "days": self.alarm_day, "enabled": alarm_switch,"repeart":alarm_day_num})
-                with open("/ext/static/storage_file/alarm_msg.json", 'w',encoding='utf-8') as fd:
-                    ujson.dump(self.alarm_list,fd) 
-                num+=1
-                if num >= 2:
-                    num = 2
-        EventMesh.publish("push_update_alarm_show")
-        EventMesh.publish(constants.PROTOCOL.REMIND_SEND)
-
-class HRSTART_ProtoCol(ProtoCol):
-    """心率频率数据"""
-    TYPE = "hrtstart"
-
-
-    def send(self, event, msg):
-        # [SZKW*867387060319491*0008*hrtstart]
-        send_data = "SZKW*%s*008*hrtstart"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        # print("HRSTART_ProtoCol:send:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-    def recv(self, event, msg):
-        """
-        @param event: 心率数据下发
-        @param msg: 接收到的下行数据
-        """
-        # b'SZKW*860132060004322*0035*REMIND,23-04-06,14:41:06,b6e0d4c6,1,27,-1,40,6DF157335E02'
-        # print("REMIND_ProtoCol RECV msg:%s"%(msg))
-        # HRSTART_ProtoCol RECV msg:b'SZKW*860132060004322*000D*hrtstart,7200' msg_:7200
-        msg = msg[1:-1]
-        msg_tmp = msg.decode('ascii')
-        msg_tmp = msg_tmp.split(',')
-        msg_tmp = msg_tmp[1]
-        # print("HRSTART_ProtoCol RECV msg:{} msg_:{}".format(msg,msg_tmp))
-        hrTotal = int(msg_tmp)
-        if hrTotal == 1:#单次测量
-            get_hr_state = EventMesh.publish("get_hr_state")
-            get_spo2_state = EventMesh.publish("get_spo2_state")
-            if (get_spo2_state == 3) or (get_spo2_state == 0 and get_hr_state == 0):#只要两个不在测量 单次优先级最低
-                EventMesh.publish("set_hr_state",3)#3代表单次测量
-        elif hrTotal > 1:
-            if hrTotal <= 300:
-                hrTotal = 300
-            storage_tmp = EventMesh.publish("get_storage_data")
-            storage_tmp["measure_time"] = hrTotal
-            EventMesh.publish("set_storage_data", storage_tmp)
-            with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
-                ujson.dump(storage_tmp,fd)
-                
-            EventMesh.publish("set_time_hr_spo2",hrTotal)
-       
-        EventMesh.publish(constants.PROTOCOL.HRTSTART_SEND)
-
-class HEART_ProtoCol(ProtoCol):
-    """心率数据"""
-    TYPE = "heart"
-
-
-    def send(self, event, msg):
-        # [SZKW*334588000000156*len*heart,x]
-        # print("HEART:send:{}".format(msg))
-        len_size = len(str(msg))+6
-        send_data = "SZKW*%s*%04X*heart"%(self.imei,len_size)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
-        # print("HEART_ProtoCol:data:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-    def recv(self, event, msg):
-        """
-        @param event: 心率数据下发
-        @param msg: 接收到的下行数据
-        """
-        # print("HRSTART_ProtoCol RECV msg:")
-        #EventMesh.publish(constants.PROTOCOL.HEART_SEND)
-class OXYGEN_ProtoCol(ProtoCol):
-    """上传血氧测试数据"""
-    TYPE = "oxygen"
-    def send(self, event, msg):
-        # [SZKW*334588000000156*len*heart,x]
-        # print("oxstart:send:{}".format(msg))
-        len_size = len(str(msg))+6
-        send_data = "SZKW*%s*%04X*oxygen"%(self.imei,len_size)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
-        # print("HEART_ProtoCol:data:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-    def recv(self, event, msg):
-        """
-        @param event: 心率数据下发
-        @param msg: 接收到的下行数据
-        """
-        # print("HRSTART_ProtoCol RECV msg:")
-        #EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND)
-
-class OXYGEN_One_ProtoCol(ProtoCol):#单次测量
-    """上传单次测量测试数据"""
-    TYPE = "oxstart"
-
-# 终端发送[XT*YYYYYYYYYYYYYYY*LEN*oxygen,x]
-# x 表示血氧饱和度
-# 示例[XT*334588000000156*0009*oxygen,15]
-# 平台回复:handler -> b'[SZKW*860132060004322*0009*oxstart,1]'
-# [XT*334588000000156*0006*oxygen]
-    def send(self, event, msg):
-        # [SZKW*334588000000156*len*heart,x]
-        print("oxstart:")
-        send_data = "SZKW*%s*0007*oxstart"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        # print("HEART_ProtoCol:data:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-    def recv(self, event, msg):
-        """
-        @param event: 血氧单次测量下发
-        @param msg: 接收到的下行数据
-        """
-        print("oxstart:{}".format(msg))
-        msg = msg[1:-1]
-        msg_tmp = msg.decode('ascii')
-        msg_tmp = msg_tmp.split(',')
-        msg_tmp = msg_tmp[1]
-        state = int(msg_tmp)
-        get_hr_state = EventMesh.publish("get_hr_state")
-        get_spo2_state = EventMesh.publish("get_spo2_state")
-        if state == 1:
-            if (get_hr_state == 3 ) or (get_spo2_state == 0 and get_hr_state == 0):#只要两个不在测量 单次优先级最低
-                EventMesh.publish("set_spo2_state",3)#3代表单次测量
-        EventMesh.publish(constants.PROTOCOL.OXSTART_SEND)
-
-class TEMP_ProtoCol(ProtoCol):
-    """上传体温测试数据"""
-    TYPE = "temp"
-    def send(self, event, msg):
-        # [SZKW*334588000000156*len*heart,x]
-        # print("temp:send:{}".format(msg))
-        len_size = len(str(msg))+5
-        #  实例:[XT*334588000000156*0009*temp,36.2]
-        # 代表终端的温度为:36.2
-        # 平台回复:
-        # [XT*334588000000156*0004*temp]
-        send_data = "SZKW*%s*%04X*temp"%(self.imei,len_size)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s,%d.%d]"%(str(MD5_SIGN),send_data,msg[0],msg[1])
-        # print("temp:data:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-    def recv(self, event, msg):
-        """
-        @param event: 心率数据下发
-        @param msg: 接收到的下行数据
-        """
-        # print("HRSTART_ProtoCol RECV msg:")
-        #EventMesh.publish(constants.PROTOCOL.TEMP_SEND)
-
-#解绑
-# [XT*334588000000156*0003*DLT]
-def reset_factory(msg):
-    if msg == 1:
-        Power.powerRestart()
-class DLT_ProtoCol(ProtoCol):
-    """解绑数据"""
-    TYPE = "DLT"
-    def send(self, event, msg):
-        # [XT*334588000000156*0004*temp]
-        send_data = "SZKW*%s*0003*DLT"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        print("temp:data:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-    def recv(self, event, msg):
-        """
-        @param event:
-        @param msg: 接收到的下行数据
-        """
-        # print("DLT_ProtoCol RECV msg:")
-        reset_factory(1)
-
-#定位频率
-class UPLOAD_ProtoCol(ProtoCol):
-    """定位频率数据"""
-    TYPE = "UPLOAD"
-    def send(self, event, msg):
-        # [XT*334588000000156*0004*temp]
-        send_data = "SZKW*%s*0006*UPLOAD"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-    def recv(self, event, msg):
-        """
-        @param event:
-        @param msg: 接收到的下行数据
-        """
-        # b'[SZKW*867387060319166*000A*UPLOAD,600]'
-        # print("DLT_ProtoCol RECV msg:".format(msg))
-        msg = msg[1:-1]
-        msg_tmp = msg.decode('ascii')
-        msg_tmp = msg_tmp.split(',')
-        msg_tmp = msg_tmp[1]
-        upload_time = int(msg_tmp)
-        storage_tmp = EventMesh.publish("get_storage_data")
-        storage_tmp["upload_time"] = upload_time
-        EventMesh.publish("set_storage_data", storage_tmp)
-        EventMesh.publish("set_upload_data", upload_time)
-        with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
-            ujson.dump(storage_tmp,fd)
-        EventMesh.publish(constants.PROTOCOL.UPLOAD_SEND)
-
-#设置快捷号码
-class CENTER_ProtoCol(ProtoCol):
-    """设置快捷号码"""
-    TYPE = "CENTER"
-    def send(self, event, msg):
-        # [XT*334588000000156*0004*temp]
-        send_data = "SZKW*%s*0006*CENTER"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        print("UPLOAD:data:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-    def recv(self, event, msg):
-        """
-        @param event:
-        @param msg: 接收到的下行数据
-        """
-        # b'[SZKW*867387060319166*000A*UPLOAD,600]'
-        # print("DLT_ProtoCol RECV msg:".format(msg))
-        msg = msg[1:-1]
-        msg_tmp = msg.decode('ascii')
-        msg_tmp = msg_tmp.split(',')
-        msg_tmp = msg_tmp[1]
-        print("CENTER_ProtoCol RECV msg:{} msg_:{}".format(msg,msg_tmp))
-        center_dial = str(msg_tmp)
-        storage_tmp = EventMesh.publish("get_storage_data")
-        storage_tmp["center_dial"] = center_dial
-        EventMesh.publish("set_storage_data", storage_tmp)
-        with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
-            ujson.dump(storage_tmp,fd)
-        EventMesh.publish(constants.PROTOCOL.CENTER_SEND)  
-
-#呼叫快捷电话号码
-import voiceCall
-class MONITOR_ProtoCol(ProtoCol):
-    """呼叫快捷号码"""
-    TYPE = "MONITOR"
-    def send(self, event, msg):
-        # [XT*334588000000156*0004*MONITOR]
-        send_data = "SZKW*%s*0007*MONITOR"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        print("MONITOR:data:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-    def recv(self, event, msg):
-        """
-        @param event:
-        @param msg: 接收到的下行数据
-        """
-        # b'[SZKW*867387060319166*000A*MONITOR]'
-        self.read_data = {}
-        self.read_data = EventMesh.publish("get_storage_data")
-        if self.read_data != {}:
-            b = str("center_dial") in self.read_data.keys()
-            if b == True:
-                contact = self.read_data["center_dial"]
-                if len(contact) > 0:
-                    print("MONITOR RECV msg:{} {}".format(contact,type(contact)))
-                    EventMesh.publish("save_phonename", contact)  
-                    EventMesh.publish("save_phonenum", contact)  
-                    voiceCall.callStart(contact)
-        EventMesh.publish(constants.PROTOCOL.MONITOR_SEND)  
-  
-#SOS紧急电话
-class SOS_ProtoCol(ProtoCol):
-    """紧急呼叫"""
-    TYPE = "SOS"
-    def send(self, event, msg):
-        # [XT*334588000000156*0004*MONITOR]
-        send_data = "SZKW*%s*0003*SOS"%(self.imei)
-        MD5_SIGN = self.pack_MD5_head(send_data)
-        data = "[%s%s]"%(str(MD5_SIGN),send_data)
-        print("SOS:data:%s"%(data))
-        # 通过socket发送到服务器端
-        EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-    def recv(self, event, msg):
-        """
-        @param event:
-        @param msg: 接收到的下行数据
-        """
-        # b'[SZKW*867387060319166*000A*SOS_SEND]'
-        self.read_data = {}
-        self.read_data = EventMesh.publish("get_storage_data")
-        if self.read_data != {}:
-            b = str("center_dial") in self.read_data.keys()
-            if b == True:
-                sos_dial = self.read_data["center_dial"]
-                if len(sos_dial) > 0:
-                    pass
-                    # print("SOS RECV msg:{} {}".format(sos_dial,type(sos_dial)))
-                    # EventMesh.publish("save_phonename", sos_dial)  
-                    # voiceCall.callStart(sos_dial)
-        EventMesh.publish(constants.PROTOCOL.SOS_SEND)  
-  
-
-class ProtoColResolver(object):
-    def __init__(self):
-        self.protocol_list = []
-
-    def add_support(self, prot):
-        self.protocol_list.append(prot)
-        prot.initialization()
-
-    def handler(self, data):
-        # 这里接收数据
-        
-        # print("handler -> {}".format(data))
-        # if data.startswith('Init;'):
-        #     data = data[5:]
-        #     EventMesh.publish(constants.EVENT.SET_KEY, {"value": ujson.loads(data)['KEY']})
-            
-        # elif data.startswith("Update;"):
-        #     data = data[7:]
-        #     EventMesh.publish(constants.PROTOCOL.H04_RECV, data)
-        print("handler:{}".format(type(data)))
-        data_tmp = data.decode('ascii')
-        data_tmp = data_tmp.split(']')[0] #去掉]
-        ProtoCol_type = data_tmp.split('*')[3] #拿到协议标识
-        ProtoCol_type = ProtoCol_type.split(',')[0]
-        ProtoCol_type = "%s_RECV"%(ProtoCol_type)
-        # print("ProtoColResolver:ProtoCol_type:%s\r\ndata:%s"%(ProtoCol_type,data))
-        EventMesh.publish(ProtoCol_type, data) #返回协议read
diff --git a/3.code/1.watch/2.code/static/alarm_play.mp3 b/3.code/1.watch/2.code/static/alarm_play.mp3
deleted file mode 100644 (file)
index 59ede9f..0000000
Binary files a/3.code/1.watch/2.code/static/alarm_play.mp3 and /dev/null differ
diff --git a/3.code/1.watch/2.code/static/audio_audio_haixiu.mp3 b/3.code/1.watch/2.code/static/audio_audio_haixiu.mp3
deleted file mode 100644 (file)
index 97d5db5..0000000
Binary files a/3.code/1.watch/2.code/static/audio_audio_haixiu.mp3 and /dev/null differ
diff --git a/3.code/1.watch/2.code/static/watch_plate/style_1/bg.png b/3.code/1.watch/2.code/static/watch_plate/style_1/bg.png
deleted file mode 100644 (file)
index cedcfba..0000000
Binary files a/3.code/1.watch/2.code/static/watch_plate/style_1/bg.png and /dev/null differ
diff --git a/3.code/1.watch/2.code/test_sms.py b/3.code/1.watch/2.code/test_sms.py
deleted file mode 100644 (file)
index 0955ecc..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-
-
-
-import lvgl as lv
-import EventMesh
-import sms
-from ui import style_screen,style_font_youyuan_20_black,style_font_youyuan_20,Screen,style_contact_btn,style_img,style_line
-from common import Abstract
-import voiceCall
-import ql_fs
-import ujson
-from protocol import ProtoCol,UnicodeHexStr_To_Utf8Str
-import constants
-import osTimer
-import utime
-from machine import RTC
-from misc import PWM
-
-#心率定时测量
-# class hrTimeHandlerManager(Abstract):
-#     def __init__(self):
-#         super().__init__()
-#         self.rtc = RTC()
-#         self.timer = osTimer()
-#         self.second = 0
-
-#     def post_processor_after_instantiation(self):
-       
-#         date_tmp = utime.localtime()
-#         time_tmp = utime.mktime(date_tmp)
-#         self.second = time_tmp
-#         # self.timer.start(1*1000,1,self._min_callback)
-
-
-#     def _min_callback(self,args):
-#         self.second+=1
-#         date_tmp = utime.localtime()
-#         time_tmp = utime.mktime(date_tmp)
-#         rtc_now_time = self.rtc.datetime()
-#         if  (self.second % 60) == 0:
-#             rtc_now_time = self.rtc.datetime()
-#             print("hrTimeHandlerManager 当前的rtc时间:{}".format(rtc_now_time))  
-
-#         print("---!self.second!!!!---:{} time_tmp:{} rtc_now_time:{}".format(self.second,time_tmp,rtc_now_time))
-        
-# class HRSTART_ProtoCol(ProtoCol):
-#     """心率频率数据"""
-#     TYPE = "hrtstart"
-
-
-#     def send(self, event, msg):
-#         # [SZKW*867387060319491*0008*hrtstart]
-#         send_data = "SZKW*%s*008*hrtstart"%(self.imei)
-#         MD5_SIGN = self.pack_MD5_head(send_data)
-#         data = "[%s%s]"%(str(MD5_SIGN),send_data)
-#         # print("HRSTART_ProtoCol:send:%s"%(data))
-#         # 通过socket发送到服务器端
-#         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-#     def recv(self, event, msg):
-#         """
-#         @param event: 心率数据下发
-#         @param msg: 接收到的下行数据
-#         """
-#         # b'SZKW*860132060004322*0035*REMIND,23-04-06,14:41:06,b6e0d4c6,1,27,-1,40,6DF157335E02'
-#         # print("REMIND_ProtoCol RECV msg:%s"%(msg))
-#         # HRSTART_ProtoCol RECV msg:b'SZKW*860132060004322*000D*hrtstart,7200' msg_:7200
-#         msg = msg[1:-1]
-#         msg_tmp = msg.decode('ascii')
-#         msg_tmp = msg_tmp.split(',')
-#         msg_tmp = msg_tmp[1]
-#         # print("HRSTART_ProtoCol RECV msg:{} msg_:{}".format(msg,msg_tmp))
-#         hrTotal = int(msg_tmp)
-#         if hrTotal == 1:#单次测量
-#             get_hr_state = EventMesh.publish("get_hr_state")
-#             get_spo2_state = EventMesh.publish("get_spo2_state")
-#             if get_hr_state == 0 or get_spo2_state == 3:#只要两个不在测量 单次优先级最低
-#                 EventMesh.publish("set_hr_state",3)#3代表单次测量
-#         elif hrTotal > 1:
-#             if hrTotal <= 300:
-#                 hrTotal = 300
-#             storage_tmp = EventMesh.publish("get_storage_data")
-#             storage_tmp["measure_time"] = hrTotal
-#             EventMesh.publish("set_storage_data", storage_tmp)
-#             with open("/ext/static/storage_file/config.json","w",encoding="utf-8") as fd:
-#                 ujson.dump(storage_tmp,fd)
-                
-#             EventMesh.publish("set_time_hr_spo2",hrTotal)
-       
-#         EventMesh.publish(constants.PROTOCOL.HRTSTART_SEND)
-
-# class HEART_ProtoCol(ProtoCol):
-#     """心率数据"""
-#     TYPE = "heart"
-
-
-#     def send(self, event, msg):
-#         # [SZKW*334588000000156*len*heart,x]
-#         # print("HEART:send:{}".format(msg))
-#         len_size = len(str(msg))+6
-#         send_data = "SZKW*%s*%04X*heart"%(self.imei,len_size)
-#         MD5_SIGN = self.pack_MD5_head(send_data)
-#         data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
-#         # print("HEART_ProtoCol:data:%s"%(data))
-#         # 通过socket发送到服务器端
-#         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-#     def recv(self, event, msg):
-#         """
-#         @param event: 心率数据下发
-#         @param msg: 接收到的下行数据
-#         """
-#         # print("HRSTART_ProtoCol RECV msg:")
-#         #EventMesh.publish(constants.PROTOCOL.HEART_SEND)
-# class OXYGEN_ProtoCol(ProtoCol):
-#     """上传血氧测试数据"""
-#     TYPE = "oxygen"
-#     def send(self, event, msg):
-#         # [SZKW*334588000000156*len*heart,x]
-#         # print("oxstart:send:{}".format(msg))
-#         len_size = len(str(msg))+6
-#         send_data = "SZKW*%s*%04X*oxygen"%(self.imei,len_size)
-#         MD5_SIGN = self.pack_MD5_head(send_data)
-#         data = "[%s%s,%d]"%(str(MD5_SIGN),send_data,msg)
-#         # print("HEART_ProtoCol:data:%s"%(data))
-#         # 通过socket发送到服务器端
-#         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-#     def recv(self, event, msg):
-#         """
-#         @param event: 心率数据下发
-#         @param msg: 接收到的下行数据
-#         """
-#         # print("HRSTART_ProtoCol RECV msg:")
-#         #EventMesh.publish(constants.PROTOCOL.OXYGEN_SEND)
-
-# class OXYGEN_One_ProtoCol(ProtoCol):#单次测量
-#     """上传血氧测试数据"""
-#     TYPE = "oxstart"
-
-# # 终端发送[XT*YYYYYYYYYYYYYYY*LEN*oxygen,x]
-# # x 表示血氧饱和度
-# # 示例[XT*334588000000156*0009*oxygen,15]
-# # 平台回复:handler -> b'[SZKW*860132060004322*0009*oxstart,1]'
-# # [XT*334588000000156*0006*oxygen]
-#     def send(self, event, msg):
-#         # [SZKW*334588000000156*len*heart,x]
-#         print("oxstart:")
-#         send_data = "SZKW*%s*0007*oxstart"%(self.imei)
-#         MD5_SIGN = self.pack_MD5_head(send_data)
-#         data = "[%s%s]"%(str(MD5_SIGN),send_data)
-#         # print("HEART_ProtoCol:data:%s"%(data))
-#         # 通过socket发送到服务器端
-#         EventMesh.publish(constants.EVENT.CHANNEL_SOCKET_SEND,data)
-
-#     def recv(self, event, msg):
-#         """
-#         @param event: 血氧单次测量下发
-#         @param msg: 接收到的下行数据
-#         """
-#         print("oxstart:{}".format(msg))
-#         msg = msg[1:-1]
-#         msg_tmp = msg.decode('ascii')
-#         msg_tmp = msg_tmp.split(',')
-#         msg_tmp = msg_tmp[1]
-#         state = int(msg_tmp)
-#         get_hr_state = EventMesh.publish("get_hr_state")
-#         get_spo2_state = EventMesh.publish("get_spo2_state")
-#         if state == 1:
-#             if get_hr_state == 3 or get_spo2_state == 0:#只要两个不在测量 单次优先级最低
-#                 EventMesh.publish("set_spo2_state",3)#3代表单次测量
-#         EventMesh.publish(constants.PROTOCOL.OXSTART_SEND)
-
-# #设置和获取心率上传频率时间
-
-# 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 = {}
-
-#         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)
-
-#     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 
-    
\ No newline at end of file
diff --git a/3.code/1.watch/2.code/ui.py b/3.code/1.watch/2.code/ui.py
deleted file mode 100644 (file)
index 8cdf7b5..0000000
+++ /dev/null
@@ -1,3584 +0,0 @@
-import utime
-import osTimer
-import lvgl as lv
-import EventMesh
-from machine import Timer
-import voiceCall
-import osTimer
-import constants
-from misc import Power
-import pm
-import ujson
-import audio
-import ql_fs
-import audio
-import sms
-from machine import Pin
-from 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_24.bin",24,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_24.bin",24,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 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
-
-phone_line_points = [{"x":0,"y":0},{"x":0,"y":40}]
-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(phone_line_points,2)
-            phone_line.set_pos(235,8)
-            phone_line.set_size(2,40)
-            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, 14)
-            phone_label.set_size(0, 48)
-            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, 60)
-            phone_one.set_size(76, 50)
-
-            phone_two = lv.img(phone_screen)
-            phone_two.set_size(76, 50)
-            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, 60)
-
-            phone_three = lv.img(phone_screen)
-            phone_three.set_size(76, 50)
-            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, 60)
-
-            phone_four = lv.img(phone_screen)
-            phone_four.set_size(76, 50)
-            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, 112)
-
-            phone_five = lv.img(phone_screen)
-            phone_five.set_size(76, 50)
-            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, 112)
-
-            phone_six = lv.img(phone_screen)
-            phone_six.set_size(76, 50)
-            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, 112)
-
-            phone_seven = lv.img(phone_screen)
-            phone_seven.set_size(76, 50)
-            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, 164)
-
-            phone_eight = lv.img(phone_screen)
-            phone_eight.set_size(76, 50)
-            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, 164)
-
-            phone_nine = lv.img(phone_screen)
-            phone_nine.set_size(76, 50)
-            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, 164)
-
-            phone_start = lv.img(phone_screen)
-            phone_start.set_size(76, 50)
-            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, 216)
-
-            phone_zero = lv.img(phone_screen)
-            phone_zero.set_size(76, 50)
-            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, 216)
-
-            phone_hash = lv.img(phone_screen)
-            phone_hash.set_size(76, 50)
-            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, 216)
-
-            phone_call = lv.img(phone_screen)
-            phone_call.set_size(76, 50)
-            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, 270)
-
-            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, 50)
-            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, 270)
-
-            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, 50)
-            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, 270)
-
-            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,48)
-        phone_label.set_pos(230-len_t,14)
-        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("watch_top_show")
-        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 call_log_screen != None:
-            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):
-        pass
-        #EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-    def btn1_release(self):
-        pass
-        #EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-    def btn8_press(self):
-        flag = EventMesh.publish("get_lcd_state")
-        if flag == 1:
-            EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
-        else:
-            EventMesh.publish(constants.EVENT.SYSTEM_UP)
-
-
-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.png")
-            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.LEFT, 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("watch_top_show")
-        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("watch_top_show")
-        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_text(" ")
-            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):
-        flag = EventMesh.publish("get_lcd_state")
-        if flag == 1:
-            EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
-        else:
-            EventMesh.publish(constants.EVENT.SYSTEM_UP)
-        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
-        
-
-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):
-        pass
-        #EventMesh.publish("load_screen", {"screen": "main_menu"})
-        
-    def btn8_press(self):
-        flag = EventMesh.publish("get_lcd_state")
-        if flag == 1:
-            EventMesh.publish(constants.EVENT.SYSTEM_SLEEP)
-        else:
-            EventMesh.publish(constants.EVENT.SYSTEM_UP)
-        #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": "toolbox"})
-        
-    def btn8_press(self):
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-# -------------------------------------------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 weather_screen != None:
-            if connect != 0 and self.weather_data != None:
-                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": "toolbox"})
-        
-    def btn8_press(self):
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-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("watch_top_show")
-        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
-        self.temp_timer = osTimer()
-    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
-        EventMesh.publish(constants.EVENT.START_TEMP)
-        self.temp_timer.start(1*1000, 1, self.temp_timerout)
-    def temp_timerout(self,*args):
-        temp = EventMesh.publish(constants.EVENT.GET_TEMP) 
-        print("temp:{}".format(temp))   
-        temperature_value_label.set_text("{}".format(temp))
-    def Close(self):
-        EventMesh.publish(constants.EVENT.STOP_TEMP)
-        self.temp_timer.stop()
-    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("watch_top_show")
-        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("watch_top_show")
-        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 = osTimer()
-        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(1000,1,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": "toolbox"})
-        
-    def btn8_press(self):
-        if self.g_state == 0:
-            self.timer.stop()
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-#结束倒计时显示图标
-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_left_to_right(self):
-        EventMesh.publish("load_screen", {"screen": "countdown"})
-
-    def done_right_to_left(self):
-        EventMesh.publish("load_screen", {"screen": "countdown"})
-
-    def done_bottom_to_top(self):
-        EventMesh.publish("load_screen", {"screen": "countdown"})
-
-    def done_top_to_bottom(self):
-        EventMesh.publish("load_screen", {"screen": "countdown"})
-
-    def done_return(self):
-        EventMesh.publish("load_screen", {"screen": "countdown"})
-    def done_click(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 = osTimer()
-        
-    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(100,1,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": "toolbox"})
-        
-    def btn8_press(self):
-        if self.s_state == 0:
-            self.timer.stop()
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-       
-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 = 6
-        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))
-        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 #默认是6级别
-        
-        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("btn8_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()
-        # self.__lcd_on()
-        if event == "btn8_press":
-            self.screen.btn8_press()
-        if event == "btn8_long_press":
-            EventMesh.publish("load_screen", {"screen": "poweroff_comfirm"})
-        if event == "btn1_press":           
-            self.screen.btn1_release()
-        
-
-    def btn_release(self, event, msg):
-        print("btn_release: {}".format(event))
-        # if self.main_flag != 1 and self.sleep_flag == 0:
-        #     self.__lcd_on()
-        #     return 
-        # 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):
-        time = EventMesh.publish("get_brightness_time")
-        if time == None:
-            time = 10
-        self.system_sleep_timer_count += 1
-        if self.system_sleep_timer_count >= time :
-            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))
-
-                
-
-
-
diff --git a/3.code/1.watch/2.code/ui_WatchFaceScreen.py b/3.code/1.watch/2.code/ui_WatchFaceScreen.py
deleted file mode 100644 (file)
index 40588b8..0000000
+++ /dev/null
@@ -1,602 +0,0 @@
-#表盘
-import osTimer
-import lvgl as lv
-import EventMesh
-import osTimer
-import constants
-from ui import Screen,style_screen
-import ql_fs
-import ujson
-from machine import RTC
-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_style_default = lv.style_t()
-watchface_style_default.init()
-watchface_style_default.set_text_color(lv.color_make(0xff, 0xff, 0xff))
-watchface_style_default.set_text_font_v2("font_24.bin",24,0)
-
-
-style_font_youyuan_28 = lv.style_t()
-style_font_youyuan_28.init()
-style_font_youyuan_28.set_text_color(lv.color_make(0xFF, 0xFF, 0xFF))
-style_font_youyuan_28.set_text_font(lv.font_28_dial)
-
-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)
-#init3:(2106, 2, 7, 6, 29, 38, 6, 38)
-data = RTC().datetime()
-hour = data[4]
-min = data[5]
-
-week = data[3]
-
-date1 = data[1]
-date2 = data[2]
-print("hour:{} min:{} week:{} date1:{} date2:{} data:{}".format(hour,min,week,date1,date2,data))
-
-def get_week(msg):
-    if msg == 1:
-        return '一'
-    elif msg == 2:
-        return '二'
-    elif msg == 3:
-        return '三'
-    elif msg == 4:
-        return '四'
-    elif msg == 5:
-        return '五'
-    elif msg == 6:
-        return '六'
-    elif msg == 7 or msg == 0:
-        return '日'
-
-
-watchface1_time1_text = lv.label(Watchface1)
-watchface1_time1_text.set_pos(20, 50)
-watchface1_time1_text.set_size(190, 71)
-watchface1_time1_text.set_align(lv.TEXT_ALIGN.LEFT)
-watchface1_time1_text.set_text("{}:{}".format("%02d"%(hour),"%02d"%(min)))
-# watchface1_time1_text.set_text("%02d:%02d"%(hour,min))
-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, 118)
-watchface1_date_span.set_size(140, 30)
-watchface1_date_span.set_align(lv.TEXT_ALIGN.LEFT)
-watchface1_date_span.set_text("%d月%d日"%(date1,date2))
-watchface1_date_span.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
-#星期
-watchface1_week_span = lv.label(Watchface1)
-watchface1_week_span.set_pos(24, 153)
-watchface1_week_span.set_size(100, 30)
-watchface1_week_span.set_align(lv.TEXT_ALIGN.LEFT)
-watchface1_week_span.set_text("星期%s"%(get_week(week)))
-watchface1_week_span.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
-
-
-
-watchface1_step_span = lv.label(Watchface1)
-watchface1_step_span.set_pos(158, 154)
-watchface1_step_span.set_size(78, 30)
-watchface1_step_span.set_align(lv.TEXT_ALIGN.LEFT)
-watchface1_step_span.set_text("0")
-watchface1_step_span.add_style(style_font_youyuan_28, 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_28, 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_28, 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)
-        step = EventMesh.publish("get_old_step_value")
-        self.__stepValue(None, step)
-
-        
-    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)
-        step = EventMesh.publish("get_old_step_value")
-        self.__stepValue(None, step)
-
-    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):
-        if msg == None:    
-            watchface1_step_span.set_text("0")
-        else:
-            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(0xff, 0xff, 0xff))
-style_font_youyuan_70_red.set_text_font(lv.font_70_bold)
-#时间
-x = 30
-y = 80
-watchface2_time1_hour_text = lv.label(Watchface2)
-watchface2_time1_hour_text.set_pos(20, 80)
-watchface2_time1_hour_text.set_size(88, 70)
-watchface2_time1_hour_text.set_align(lv.TEXT_ALIGN.LEFT)
-watchface2_time1_hour_text.set_text("{}".format("%02d"%(hour)))
-watchface2_time1_hour_text.add_style(style_font_youyuan_70_red, lv.PART.MAIN|lv.STATE.DEFAULT)
-
-watchface2_time1_mao_text = lv.label(Watchface2)
-watchface2_time1_mao_text.set_pos(108, 76)
-watchface2_time1_mao_text.set_size(44, 70)
-watchface2_time1_mao_text.set_align(lv.TEXT_ALIGN.LEFT)
-watchface2_time1_mao_text.set_text(":")
-watchface2_time1_mao_text.add_style(style_font_youyuan_70_red, lv.PART.MAIN|lv.STATE.DEFAULT)
-
-watchface2_time1_hour1_text = lv.label(Watchface2)
-watchface2_time1_hour1_text.set_pos(152, 80)
-watchface2_time1_hour1_text.set_size(88, 70)
-watchface2_time1_hour1_text.set_align(lv.TEXT_ALIGN.LEFT)
-watchface2_time1_hour1_text.set_text("{}".format("%02d"%(min)))
-watchface2_time1_hour1_text.add_style(style_font_youyuan_70_red, lv.PART.MAIN|lv.STATE.DEFAULT)
-
-
-
-
-#日期
-watchface2_date_span = lv.label(Watchface2)
-watchface2_date_span.set_pos(18, 170)
-watchface2_date_span.set_size(120, 35)
-watchface2_date_span.set_align(lv.TEXT_ALIGN.LEFT)
-watchface2_date_span.set_text("%d月%d日"%(date1,date2))
-watchface2_date_span.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
-
-#日期
-watchface2_week = lv.label(Watchface2)
-watchface2_week.set_pos(146, 170)
-watchface2_week.set_size(110, 35)
-watchface2_week.set_align(lv.TEXT_ALIGN.LEFT)
-watchface2_week.set_text("星期%s"%(get_week(week)))
-watchface2_week.add_style(style_font_youyuan_28, lv.PART.MAIN|lv.STATE.DEFAULT)
-#星期
-
-
-# watchface2_week = lv.img(Watchface2)
-# watchface2_week.set_pos(int(30+56+20+25),int(y+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_step_img = lv.img(Watchface2)
-watchface2_step_img.set_pos(int(95),int(260))
-watchface2_step_img.set_size(26,21)
-watchface2_step_img.set_scrollbar_mode(lv.SCROLLBAR_MODE.OFF)
-watchface2_step_img.set_src("E:/static/watch_plate/style_2/step.png")
-watchface2_step_img.add_style(style_watchface_img_default, lv.PART.MAIN|lv.STATE.DEFAULT)
-
-watchface2_step_txt = lv.label(Watchface2)
-watchface2_step_txt.set_pos(125, 260)
-watchface2_step_txt.set_size(80, 35)
-watchface2_step_txt.set_align(lv.TEXT_ALIGN.LEFT)
-watchface2_step_txt.set_text("0")
-watchface2_step_txt.add_style(style_font_youyuan_28, 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)
-
-        step = EventMesh.publish("get_old_step_value")
-        self.__stepValue(None, step)
-
-
-    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)
-        
-        step = EventMesh.publish("get_old_step_value")
-        self.__stepValue(None, step)
-
-    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_hour_text.set_text("{}".format("%02d"%(msg[0][0])))
-        watchface2_time1_hour1_text.set_text("{}".format("%02d"%(msg[0][1])))
-        # watchface2_time1_hour_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_text(msg[3])#星期
-        # 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 __stepValue(self, event, msg):
-        if msg == None:    
-            watchface2_step_txt.set_text("0")
-        else:
-            watchface2_step_txt.set_text(str(msg))
-
-
-    # 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
-    
-
-
- 
diff --git a/3.code/1.watch/2.code/ui_main_menu.py b/3.code/1.watch/2.code/ui_main_menu.py
deleted file mode 100644 (file)
index a817394..0000000
+++ /dev/null
@@ -1,405 +0,0 @@
-#主菜单
-import utime
-import osTimer
-import lvgl as lv
-import EventMesh
-from machine import Timer
-import voiceCall
-import osTimer
-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_24.bin",24,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_24.bin",24,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)
-        EventMesh.subscribe("watch_top_show", self.watch_top_show)
-        #MainMenu2_img_alipay.add_event_cb(lambda e: img_cb(e, "Watchface_set"), lv.EVENT.CLICKED, None)
-        
-    def initialization(self):
-        self.watchface.initialization(MainMenu2_Watchface)
-        
-        if self.menu_id =="0":
-            MainMenu2_til.set_tile_id(0,1,lv.ANIM.OFF) 
-        # 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,1,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,1,lv.ANIM.OFF)
-                else:
-                    EventMesh.publish(constants.EVENT.SYSTEM_UP)
-        else:
-            if flag == 1:
-                MainMenu2_til.set_tile_id(0,1,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"})
-        self.menu_id = id
-
-    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"})
-        self.menu_id = id
-    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
-
diff --git a/3.code/1.watch/2.code/ui_setting.py b/3.code/1.watch/2.code/ui_setting.py
deleted file mode 100644 (file)
index caefb12..0000000
+++ /dev/null
@@ -1,1607 +0,0 @@
-
-import lvgl as lv
-import ql_fs
-import EventMesh
-from misc import Power
-from ui import style_screen,style_font_youyuan_20,ContStyle,style_btn,style_img,Screen,style_contact_btn
-import constants
-import osTimer
-import audio
-from machine import Pin
-import ujson
-from 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("watch_top_show")
-        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, 30)
-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, 55)
-version_label3.set_size(240, 30)
-version_label3.set_long_mode(lv.label.LONG.WRAP)
-version_label3.set_text("Version:")
-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_label3 = lv.label(version_screen)
-version_label3.set_pos(0, 80)
-version_label3.set_size(240, 30)
-version_label3.set_long_mode(lv.label.LONG.WRAP)
-version_label3.set_text("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, 105)
-version_label4.set_size(240, 30)
-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, 130)
-version_label5.set_size(240, 30)
-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, 155)
-version_label6.set_size(240, 30)
-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, 180)
-version_label7.set_size(240, 30)
-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, 205)
-version_label8.set_size(240, 30)
-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, 230)
-version_label9.set_size(220, 30)
-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")
-        EventMesh.publish("alipay_unbind")
-        EventMesh.publish(constants.PROTOCOL.DLT_SEND)
-
-    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": "setting"})
-        
-    def btn8_press(self):
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-
-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": "setting"})
-        
-    def btn8_press(self):
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-
-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": "setting"})
-        
-    def btn8_press(self):
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-# -------------------------------------------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
-        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": "setting"})
-        
-    def btn8_press(self):
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-
-
-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()
-        self.read_data = {}
-    def initialization(self):
-        step = EventMesh.publish("get_old_step_value")
-        if step != 0:
-            self.read_data = EventMesh.publish("get_storage_data")
-            self.read_data["old_step"] = step
-            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)
-        self.timer.start(3*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 = EventMesh.publish("get_storage_data")
-        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 = EventMesh.publish("get_storage_data")
-        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": "setting"})
-        
-    def btn8_press(self):
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-
-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": "setting"})
-        
-    def btn8_press(self):
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-
-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": "setting"})
-        
-    def btn8_press(self):
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-# -------------------------------------------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, 100)
-brightness_bar.set_size(200, 25)
-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, 195)
-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, 195)
-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)
-
-brightness_label_time = lv.label(brightness_screen)
-brightness_label_time.set_pos(10, 150)
-brightness_label_time.set_size(80, 30)
-brightness_label_time.set_text("时间:")
-brightness_label_time.set_long_mode(lv.label.LONG.WRAP)
-brightness_label_time.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
-brightness_label_time.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-brightness_time_reduce_img = lv.img(brightness_screen)
-brightness_time_reduce_img.set_pos(90, 145)
-brightness_time_reduce_img.set_size(30, 34)
-brightness_time_reduce_img.set_src("E:/static/time_up2.png")
-brightness_time_reduce_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-brightness_time_reduce_imgbtn= lv.img(brightness_screen)
-brightness_time_reduce_imgbtn.set_size(80, 45)
-brightness_time_reduce_imgbtn.set_pos(90, 140)
-brightness_time_reduce_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
-
-
-brightness_label_time_text = lv.label(brightness_screen)
-brightness_label_time_text.set_pos(130, 152)
-brightness_label_time_text.set_size(60, 30)
-brightness_label_time_text.set_text("5秒")
-brightness_label_time_text.set_long_mode(lv.label.LONG.WRAP)
-brightness_label_time_text.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0)
-brightness_label_time_text.add_style(style_font_youyuan_20, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-brightness_time_add_img = lv.img(brightness_screen)
-brightness_time_add_img.set_pos(190, 145)
-brightness_time_add_img.set_size(30, 34)
-brightness_time_add_img.set_src("E:/static/time_up1.png")
-brightness_time_add_img.add_style(style_img, lv.PART.MAIN | lv.STATE.DEFAULT)
-
-brightness_time_add_imgbtn= lv.img(brightness_screen)
-brightness_time_add_imgbtn.set_size(70, 45)
-brightness_time_add_imgbtn.set_pos(170, 140)
-brightness_time_add_imgbtn.add_flag(lv.obj.FLAG.CLICKABLE)
-
-
-
-class BrightnessScreen(Screen):
-    NAME = "brightness"
-
-    def __init__(self):
-        super().__init__()
-        self.level = 6
-        self.time = 10
-        self.read_data = {}
-        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)
-        
-        brightness_time_reduce_imgbtn.add_event_cb(lambda e: self.reduce_time_level(e),
-                                     lv.EVENT.CLICKED, None)
-
-        brightness_time_add_imgbtn.add_event_cb(lambda e: self.add_time_level(e),
-                                     lv.EVENT.CLICKED, None)
-    def initialization(self):
-        self.level = EventMesh.publish("get_brightness_level")
-        self.time = EventMesh.publish("get_brightness_time")
-        print("self.time:{}".format(self.time))
-        brightness_label_time_text.set_text("{}秒".format(self.time))
-        self.show_bar()
-    def add_level(self, e):
-        EventMesh.publish("push_add_brightness_level")
-        self.level = EventMesh.publish("get_brightness_level")
-        print("self.level:{}".format(self.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 reduce_time_level(self, e):
-        if self.time > 5:
-            self.time-=5
-        EventMesh.publish("set_brightness_time",self.time)
-        self.read_data = EventMesh.publish("get_storage_data")
-        self.read_data["brightness_time"] = self.time
-
-        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)
-        brightness_label_time_text.set_text("{}秒".format(self.time))
-        print("reduce_time_level:{}".format(self.read_data))
-
-    def add_time_level(self, e):
-        self.time+=5
-        if self.time >= 30:
-            self.time = 30
-        EventMesh.publish("set_brightness_time",self.time)
-        self.read_data = EventMesh.publish("get_storage_data")
-        self.read_data["brightness_time"] = self.time
-
-        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)
-        brightness_label_time_text.set_text("{}秒".format(self.time))
-        print("add_time_level:{}".format(self.read_data))
-    
-
-
-    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": "setting"})
-        
-    def btn8_press(self):
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
-
-
-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, 100)
-totalvolume_bar.set_size(200, 25)
-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, 145)
-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, 145)
-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": "setting"})
-        
-    def btn8_press(self):
-        EventMesh.publish("watch_top_show")
-        EventMesh.publish("load_screen", {"screen": "main_menu"})
diff --git a/3.code/1.watch/3.font/font_24.c b/3.code/1.watch/3.font/font_24.c
deleted file mode 100644 (file)
index 169dc0d..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
-*---------------------------------------------------------------
-*                        Lvgl Font Tool                         
-*                                                               
-* 注:使用unicode编码                                              
-* 注:本字体文件由Lvgl Font Tool V0.4 生成                          
-* 作者:阿里(qq:617622104)                                         
-*---------------------------------------------------------------
-*/
-
-
-#include "lvgl.h"
-
-
-typedef struct{
-    uint16_t min;
-    uint16_t max;
-    uint8_t  bpp;
-    uint8_t  reserved[3];
-}x_header_t;
-typedef struct{
-    uint32_t pos;
-}x_table_t;
-typedef struct{
-    uint8_t adv_w;
-    uint8_t box_w;
-    uint8_t box_h;
-    int8_t  ofs_x;
-    int8_t  ofs_y;
-    uint8_t r;
-}glyph_dsc_t;
-
-
-static x_header_t __g_xbf_hd = {
-    .min = 0x0020,
-    .max = 0x9fa0,
-    .bpp = 4,
-};
-
-
-//static uint8_t __g_font_buf[416];//如bin文件存在SPI FLASH可使用此buff
-
-
-static uint8_t *__user_font_getdata(int offset, int size){
-    //如字模保存在SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size);
-    //如字模已加载到SDRAM,直接返回偏移地址即可如:return (uint8_t*)(sdram_fontddr+offset);
-    return __g_font_buf;
-}
-
-
-static const uint8_t * __user_font_get_bitmap(const lv_font_t * font, uint32_t unicode_letter) {
-    if( unicode_letter>__g_xbf_hd.max || unicode_letter<__g_xbf_hd.min ) {
-        return NULL;
-    }
-    uint32_t unicode_offset = sizeof(x_header_t)+(unicode_letter-__g_xbf_hd.min)*4;
-    uint32_t *p_pos = (uint32_t *)__user_font_getdata(unicode_offset, 4);
-    if( p_pos[0] != 0 ) {
-        uint32_t pos = p_pos[0];
-        glyph_dsc_t * gdsc = (glyph_dsc_t*)__user_font_getdata(pos, sizeof(glyph_dsc_t));
-        return __user_font_getdata(pos+sizeof(glyph_dsc_t), gdsc->box_w*gdsc->box_h*__g_xbf_hd.bpp/8);
-    }
-    return NULL;
-}
-
-
-static bool __user_font_get_glyph_dsc(const lv_font_t * font, lv_font_glyph_dsc_t * dsc_out, uint32_t unicode_letter, uint32_t unicode_letter_next) {
-    if( unicode_letter>__g_xbf_hd.max || unicode_letter<__g_xbf_hd.min ) {
-        return NULL;
-    }
-    uint32_t unicode_offset = sizeof(x_header_t)+(unicode_letter-__g_xbf_hd.min)*4;
-    uint32_t *p_pos = (uint32_t *)__user_font_getdata(unicode_offset, 4);
-    if( p_pos[0] != 0 ) {
-        glyph_dsc_t * gdsc = (glyph_dsc_t*)__user_font_getdata(p_pos[0], sizeof(glyph_dsc_t));
-        dsc_out->adv_w = gdsc->adv_w;
-        dsc_out->box_h = gdsc->box_h;
-        dsc_out->box_w = gdsc->box_w;
-        dsc_out->ofs_x = gdsc->ofs_x;
-        dsc_out->ofs_y = gdsc->ofs_y;
-        dsc_out->bpp   = __g_xbf_hd.bpp;
-        return true;
-    }
-    return false;
-}
-
-
-//Microsoft YaHei,,-1
-//字模高度:32
-//XBF字体,外部bin文件
-lv_font_t font_24 = {
-    .get_glyph_bitmap = __user_font_get_bitmap,
-    .get_glyph_dsc = __user_font_get_glyph_dsc,
-    .line_height = 32,
-    .base_line = 0,
-};
-
diff --git a/3.code/1.watch/3.font/font_40.bin b/3.code/1.watch/3.font/font_40.bin
deleted file mode 100644 (file)
index d32ad78..0000000
Binary files a/3.code/1.watch/3.font/font_40.bin and /dev/null differ
diff --git a/3.code/1.watch/3.font/font_40.c b/3.code/1.watch/3.font/font_40.c
deleted file mode 100644 (file)
index a5deab4..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
-*---------------------------------------------------------------
-*                        Lvgl Font Tool                         
-*                                                               
-* 注:使用unicode编码                                              
-* 注:本字体文件由Lvgl Font Tool V0.4 生成                          
-* 作者:阿里(qq:617622104)                                         
-*---------------------------------------------------------------
-*/
-
-
-#include "lvgl.h"
-
-
-typedef struct{
-    uint16_t min;
-    uint16_t max;
-    uint8_t  bpp;
-    uint8_t  reserved[3];
-}x_header_t;
-typedef struct{
-    uint32_t pos;
-}x_table_t;
-typedef struct{
-    uint8_t adv_w;
-    uint8_t box_w;
-    uint8_t box_h;
-    int8_t  ofs_x;
-    int8_t  ofs_y;
-    uint8_t r;
-}glyph_dsc_t;
-
-
-static x_header_t __g_xbf_hd = {
-    .min = 0x0021,
-    .max = 0x007a,
-    .bpp = 4,
-};
-
-
-//static uint8_t __g_font_buf[1113];//如bin文件存在SPI FLASH可使用此buff
-
-
-static uint8_t *__user_font_getdata(int offset, int size){
-    //如字模保存在SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size);
-    //如字模已加载到SDRAM,直接返回偏移地址即可如:return (uint8_t*)(sdram_fontddr+offset);
-    return __g_font_buf;
-}
-
-
-static const uint8_t * __user_font_get_bitmap(const lv_font_t * font, uint32_t unicode_letter) {
-    if( unicode_letter>__g_xbf_hd.max || unicode_letter<__g_xbf_hd.min ) {
-        return NULL;
-    }
-    uint32_t unicode_offset = sizeof(x_header_t)+(unicode_letter-__g_xbf_hd.min)*4;
-    uint32_t *p_pos = (uint32_t *)__user_font_getdata(unicode_offset, 4);
-    if( p_pos[0] != 0 ) {
-        uint32_t pos = p_pos[0];
-        glyph_dsc_t * gdsc = (glyph_dsc_t*)__user_font_getdata(pos, sizeof(glyph_dsc_t));
-        return __user_font_getdata(pos+sizeof(glyph_dsc_t), gdsc->box_w*gdsc->box_h*__g_xbf_hd.bpp/8);
-    }
-    return NULL;
-}
-
-
-static bool __user_font_get_glyph_dsc(const lv_font_t * font, lv_font_glyph_dsc_t * dsc_out, uint32_t unicode_letter, uint32_t unicode_letter_next) {
-    if( unicode_letter>__g_xbf_hd.max || unicode_letter<__g_xbf_hd.min ) {
-        return NULL;
-    }
-    uint32_t unicode_offset = sizeof(x_header_t)+(unicode_letter-__g_xbf_hd.min)*4;
-    uint32_t *p_pos = (uint32_t *)__user_font_getdata(unicode_offset, 4);
-    if( p_pos[0] != 0 ) {
-        glyph_dsc_t * gdsc = (glyph_dsc_t*)__user_font_getdata(p_pos[0], sizeof(glyph_dsc_t));
-        dsc_out->adv_w = gdsc->adv_w;
-        dsc_out->box_h = gdsc->box_h;
-        dsc_out->box_w = gdsc->box_w;
-        dsc_out->ofs_x = gdsc->ofs_x;
-        dsc_out->ofs_y = gdsc->ofs_y;
-        dsc_out->bpp   = __g_xbf_hd.bpp;
-        return true;
-    }
-    return false;
-}
-
-
-//Microsoft YaHei,,-1
-//字模高度:53
-//XBF字体,外部bin文件
-lv_font_t font_40 = {
-    .get_glyph_bitmap = __user_font_get_bitmap,
-    .get_glyph_dsc = __user_font_get_glyph_dsc,
-    .line_height = 53,
-    .base_line = 0,
-};
-
diff --git a/3.code/1.watch/3.font/font_bin_merge.py b/3.code/1.watch/3.font/font_bin_merge.py
deleted file mode 100644 (file)
index 05db77b..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-from struct import *
-
-
-def bin_create(*args):
-    if len(args) < 1:
-        print("wrong params number!")
-        return -1
-    # bin header :one byte for font_num, font_num bytes for bin_size
-    # 大端1,小端2
-    # endian = input("输入大小端:")
-    with open("ext_font.bin","wb") as dest_file:
-        # start
-        start = "s"
-        end = "e"
-
-        font_num = len(args)
-        bin_data = []
-        bin_size = []
-        font_name = ""
-
-        for i in range(font_num):
-            with open(args[i], "rb") as bin_file:
-                data = bin_file.read()
-            padding = "\0" * (128 - len(args[i]))
-            string_padded = args[i] + padding
-            font_name += string_padded
-            bin_size.append(len(data))
-            bin_data.append(data)
-
-        # # 大端
-        # if endian == "1":
-        #     write_data = pack(">B%ds%dI"% (font_num*128, font_num), font_num, font_name.encode(), *bin_size)
-        # # 小端
-        # else:
-        write_data = pack("<B%ds%dI"% (font_num*128, font_num), font_num, font_name.encode(), *bin_size)
-
-        dest_file.write(start.encode())
-        dest_file.write(write_data)
-        for i in range(font_num):
-            dest_file.write(bin_data[i])
-        dest_file.write(end.encode())
-
-
-if __name__ == "__main__":
-    bin_create("font_20.bin","font_18.bin","font_40.bin")
-    # bin_create("1.bin")
\ No newline at end of file