From: d15521469561 Date: Thu, 6 Apr 2023 09:20:28 +0000 (+0800) Subject: 添加闹钟文件遗漏 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=07f983407001fe76b2fc1776a8cee47f41896020;p=mirrors%2FASR1603_G5.git 添加闹钟文件遗漏 --- diff --git a/3.code/1.watch/2.code/alarm.py b/3.code/1.watch/2.code/alarm.py new file mode 100644 index 00000000..ced93edc --- /dev/null +++ b/3.code/1.watch/2.code/alarm.py @@ -0,0 +1,814 @@ +import modem +import osTimer +import utime +import lvgl as lv +from ext import EventMesh +from machine import Timer +from ext.ui import Screen +from ext.common import Abstract, LogAdapter +from machine import RTC +import ujson +import ql_fs +""" +可以添加/编辑闹钟时间、周期; +最多添加三个闹钟; +可以删除已有的闹钟; +可以启用/禁用已有的闹钟; +保存已添加/编辑的闹钟信息,并在下次运行时恢复。 +""" +#标题高度 +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(5) +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_20.bin",18,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_20.bin",18,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_screen1 = lv.obj(clk_list_screen) +clk_list_screen1.center() +clk_list_screen1.set_size(240, 320) +clk_list_screen1.add_style(style_alarm_screen_default, lv.PART.MAIN | lv.STATE.DEFAULT) + +clk_list_title = lv.label(clk_list_screen1) +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_white, lv.PART.MAIN | lv.STATE.DEFAULT) + +clk_list_add_btn = lv.btn(clk_list_screen1) +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_screen1) +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_white, 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) + +# -------------------------------------------clk_edit screen---------------------------------------------------------- + +clk_edit_screen = lv.obj() +clk_edit_screen.center() +clk_edit_screen.set_size(240, 320) +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_white, 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_white, 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_white, 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_white, lv.PART.MAIN | lv.STATE.DEFAULT) + +# -------------------------------------------clk_repeat screen---------------------------------------------------------- +clk_repeat_screen = lv.obj() +clk_repeat_screen.center() +clk_repeat_screen.set_scrollbar_mode(0) +clk_repeat_screen.set_size(240, 320) +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, 0) +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_white, 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, 0) +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_white, 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, 0) +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_white, 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, 0) +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_white, 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, 0) +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_white, 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, 0) +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_white, 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, 0) +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_white, 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.center() +clk_time_screen.set_scrollbar_mode(0) +clk_time_screen.set_size(240, 320) +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_white, 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() + + 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"] + + with open("/usr/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("/usr/alarm_msg.json") + global alarm_list + if IFEXIST == False: + with open("/usr/alarm_msg.json","w",encoding='utf-8') as fd: + ujson.dump(alarm_list,fd) + print("闹钟信息加载完成") + else: + with open("/usr/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}) + with open("/usr/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("/usr/alarm_msg.json", 'w+',encoding='utf-8') as fd: + ujson.dump(alarm_list,fd) + + def _rtc_callback(self,args): + print("---!!!!!!alarm_ring!!!!!!!---") + EventMesh.publish("set_rtc_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") + + print("00获取所有闹钟信息:{}".format(alarm_list)) + new_alarm_list = [(alarm['hour'], alarm['minute'], alarm['days']) 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 = alarm + for day in days: + minute_list.append(hour*60 + minute + (day-start_day)*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) + + #设置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) + + + +#闹钟列表 +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 = ["日","一","二","三","四","五","六"] + def initialization(self): + EventMesh.publish("read_alarminjson") + EventMesh.publish("set_rtc_alarm") + + print("n闹钟列表初始化!!") + self.alarm_draw_btn() + + def alarm_draw_btn(self): + global alarm_list + self.clock_list = alarm_list + if self.clock_list: + print("菜单的孩子个数:",clk_list_screen1.get_child_cnt()) + for i ,each in enumerate(self.clock_list): + print("------刷新闹钟列表噢:",each) + _btn = lv.btn(clk_list_screen1_1) + _btn.set_size(224,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.PRESSED, None) + + _btn_label1 = lv.label(_btn) + _btn_label1.set_pos(50, 0) + _btn_label1.set_long_mode(lv.label.LONG.DOT) + _btn_label1.set_size(0, 0) + _btn_label1.set_text(str(i)) + + _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_white, lv.PART.MAIN | lv.STATE.DEFAULT) + _btn_label2.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0) + + _new_list = sorted(each["days"]) + _output = [self.weekdays_list[x] for x in _new_list] + _btn_label3 = lv.label(_btn) + _btn_label3.set_pos(10, 40) + _btn_label3.set_size(200, 40) + _btn_label3.set_text(",".join(_output)) + _btn_label3.set_long_mode(lv.label.LONG.DOT) + _btn_label3.add_style(style_font_white, lv.PART.MAIN | lv.STATE.DEFAULT) + _btn_label3.set_style_text_align(lv.TEXT_ALIGN.LEFT, 0) + + _btn_switch = lv.switch(_btn) + _btn_switch.set_pos(174, 29) + _btn_switch.set_size(34, 17) + _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(20) + if each["enabled"]: + _btn_switch.add_state(lv.STATE.CHECKED) + else: + _btn_switch.clear_state(lv.STATE.CHECKED) + + def edit_alarm(self, e): + 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("load_screen", {"screen": "watchface"}) + + +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.PRESSED, None) + clk_edit_time.add_event_cb(lambda e: self.edit_time(e), lv.EVENT.PRESSED, None) + clk_delete_alarm.add_event_cb(lambda e: self.delete_alarm(e), lv.EVENT.PRESSED, None) + + def initialization(self): + print("hahahahh",self.meta_info["idx"]) + + def delete_alarm(self, e): + + clk_list_screen1_1.clean() + + EventMesh.publish("remove_alarm",self.meta_info) + + self.load_screen(e, {"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)) + 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/static/0_weather.jpg b/3.code/1.watch/2.code/static/0_weather.jpg new file mode 100644 index 00000000..7531acb8 Binary files /dev/null and b/3.code/1.watch/2.code/static/0_weather.jpg differ diff --git a/3.code/1.watch/2.code/static/1_weather.jpg b/3.code/1.watch/2.code/static/1_weather.jpg new file mode 100644 index 00000000..aac5b3c8 Binary files /dev/null and b/3.code/1.watch/2.code/static/1_weather.jpg differ diff --git a/3.code/1.watch/2.code/static/2_weather.jpg b/3.code/1.watch/2.code/static/2_weather.jpg new file mode 100644 index 00000000..b23ac858 Binary files /dev/null and b/3.code/1.watch/2.code/static/2_weather.jpg differ diff --git a/3.code/1.watch/2.code/static/3_weather.jpg b/3.code/1.watch/2.code/static/3_weather.jpg new file mode 100644 index 00000000..15ecdc97 Binary files /dev/null and b/3.code/1.watch/2.code/static/3_weather.jpg differ