diff --git a/app/src/applications/battery/battery_ui.c b/app/src/applications/battery/battery_ui.c index 67071806..e0817621 100644 --- a/app/src/applications/battery/battery_ui.c +++ b/app/src/applications/battery/battery_ui.c @@ -1,5 +1,6 @@ #include #include "battery_ui.h" +#include "ui/utils/zsw_ui_utils.h" #include // Common @@ -129,27 +130,18 @@ void battery_ui_add_measurement(int percent, int voltage) } } -static void seconds_to_day_hour_min(int seconds, int *days, int *hours, int *minutes) -{ - *days = seconds / (24 * 3600); - seconds = seconds % (24 * 3600); - *hours = seconds / 3600; - seconds = seconds % 3600; - *minutes = seconds / 60; -} - void battery_ui_update(int ttf, int tte, int status, int error, int charging) { int days, hours, minutes; if (root_page && pmic_ui_enabled) { - seconds_to_day_hour_min(ttf, &days, &hours, &minutes); + zsw_ui_utils_seconds_to_day_hour_min(ttf, &days, &hours, &minutes); if (ttf == 0) { lv_label_set_text(ui_charging_label_ttf, "-"); } else { lv_label_set_text_fmt(ui_charging_label_ttf, "%dd %dh %dm", days, hours, minutes); } - seconds_to_day_hour_min(tte, &days, &hours, &minutes); + zsw_ui_utils_seconds_to_day_hour_min(tte, &days, &hours, &minutes); if (tte == 0) { lv_label_set_text(ui_charging_label_tte, "-"); } else { diff --git a/app/src/applications/flashlight/flashlight_ui.c b/app/src/applications/flashlight/flashlight_ui.c index 1597cacb..e5784ef4 100644 --- a/app/src/applications/flashlight/flashlight_ui.c +++ b/app/src/applications/flashlight/flashlight_ui.c @@ -25,7 +25,6 @@ void flashlight_ui_show(lv_obj_t *root) lv_obj_set_width(root_page, lv_pct(100)); lv_obj_set_height(root_page, lv_pct(100)); lv_obj_set_align(root_page, LV_ALIGN_CENTER); - //lv_obj_clear_flag(root_page, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_SCROLLABLE); lv_obj_set_style_bg_color(root_page, lv_color_white(), LV_PART_MAIN); lv_obj_set_style_bg_opa(root_page, LV_OPA_COVER, LV_PART_MAIN | LV_STATE_DEFAULT); diff --git a/app/src/applications/watchface/watchface_app.c b/app/src/applications/watchface/watchface_app.c index 2755c1af..6a850d51 100644 --- a/app/src/applications/watchface/watchface_app.c +++ b/app/src/applications/watchface/watchface_app.c @@ -227,6 +227,8 @@ static void refresh_ui(void) uint32_t steps; watchfaces[watchface_settings.watchface_index]->set_ble_connected(is_connected); watchfaces[watchface_settings.watchface_index]->set_battery_percent(last_batt_evt.percent, last_batt_evt.mV); + zsw_watchface_dropdown_ui_set_battery_info(last_batt_evt.percent, last_batt_evt.is_charging, last_batt_evt.tte, + last_batt_evt.ttf); if (strlen(last_weather_data.report_text) > 0) { watchfaces[watchface_settings.watchface_index]->set_weather(last_weather_data.temperature_c, last_weather_data.weather_code); @@ -235,6 +237,9 @@ static void refresh_ui(void) // TODO: Add calculation for distance and kcal watchfaces[watchface_settings.watchface_index]->set_step(steps, 0, 0); } + if (strlen(last_music_info.track_name) > 0) { + zsw_watchface_dropdown_ui_set_music_info(last_music_info.track_name, last_music_info.artist); + } } static void general_work(struct k_work *item) @@ -250,11 +255,8 @@ static void general_work(struct k_work *item) is_suspended = false; // Dropdown watchfaces[watchface_settings.watchface_index]->show(watchface_root_screen, watchface_evt_cb, &watchface_settings); - refresh_ui(); zsw_watchface_dropdown_ui_add(watchface_root_screen, watchface_evt_cb); - if (strlen(last_music_info.track_name) > 0) { - zsw_watchface_dropdown_ui_set_music_info(last_music_info.track_name, last_music_info.artist); - } + refresh_ui(); __ASSERT(0 <= k_work_schedule(&clock_work.work, K_NO_WAIT), "FAIL clock_work"); __ASSERT(0 <= k_work_schedule(&update_work.work, K_SECONDS(1)), "FAIL update_work"); @@ -372,7 +374,6 @@ static void zbus_ble_comm_data_callback(const struct zbus_channel *chan) } if (event->data.type == BLE_COMM_DATA_TYPE_MUSIC_INFO) { memcpy(&last_music_info, &last_data_update.data.music_info, sizeof(last_data_update.data.music_info)); - printk("Got music info: %s %s\n", last_music_info.track_name, last_music_info.artist); } if (running && !is_suspended) { k_work_submit(&update_ui_work); @@ -397,6 +398,7 @@ static void zbus_battery_sample_data_callback(const struct zbus_channel *chan) if (running && !is_suspended) { watchfaces[watchface_settings.watchface_index]->set_battery_percent(event->percent, event->mV); + zsw_watchface_dropdown_ui_set_battery_info(last_batt_evt.percent, event->is_charging, event->tte, event->ttf); } } diff --git a/app/src/events/battery_event.h b/app/src/events/battery_event.h index de240657..5e71e05a 100644 --- a/app/src/events/battery_event.h +++ b/app/src/events/battery_event.h @@ -13,4 +13,5 @@ struct battery_sample_event { int status; int error; bool is_charging; + bool pmic_data_valid; }; diff --git a/app/src/fuel_gauge/zsw_pmic.c b/app/src/fuel_gauge/zsw_pmic.c index 14f7910f..339906ce 100755 --- a/app/src/fuel_gauge/zsw_pmic.c +++ b/app/src/fuel_gauge/zsw_pmic.c @@ -225,6 +225,7 @@ int zsw_pmic_get_full_state(struct battery_sample_event *sample) sample->status = status; sample->error = error; sample->is_charging = is_charging_from_status(status); + sample->pmic_data_valid = true; return ret; } diff --git a/app/src/images/fonts/ui_font_iconfont34.c b/app/src/images/fonts/ui_font_iconfont34.c deleted file mode 100644 index 55ad7d30..00000000 --- a/app/src/images/fonts/ui_font_iconfont34.c +++ /dev/null @@ -1,858 +0,0 @@ -/******************************************************************************* - * Size: 34 px - * Bpp: 4 - * Opts: --bpp 4 --size 34 --font D:\projects\SquareLine_Projects\OV_Watch\AllFont\assets\iconfont.ttf -o D:\projects\SquareLine_Projects\OV_Watch\AllFont\assets\ui_font_iconfont34.c --format lvgl -r 0xE65C -r 0xE65A -r 0xE619 -r 0xE633 -r 0xE762 -r 0xE652 -r 0xE706 -r 0xE788 -r 0xE603 -r 0xE986 -r 0xE607 -r 0xE62C -r 0xE600 -r 0xE67A -r 0xE7A0 --no-compress --no-prefilter - ******************************************************************************/ - -#ifndef UI_FONT_ICONFONT34 -#define UI_FONT_ICONFONT34 1 -#endif - -#if defined(LV_LVGL_H_INCLUDE_SIMPLE) -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#if UI_FONT_ICONFONT34 - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+E600 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, - 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x6e, 0xfb, 0x10, 0x0, 0x1, - 0xcf, 0xd6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3e, 0xff, 0xff, 0xe9, 0x66, 0x9f, 0xff, - 0xff, 0xd2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, - 0xff, 0xff, 0xaf, 0xff, 0xff, 0xff, 0xfa, 0xff, - 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, - 0x90, 0x3, 0xaf, 0xff, 0xfa, 0x20, 0x1a, 0xff, - 0xb0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xfc, 0x0, - 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0xdf, 0x80, - 0x0, 0x0, 0x0, 0x0, 0xa, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0x80, 0x0, - 0x0, 0x0, 0x0, 0xd, 0xfb, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xdf, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x4f, 0xf7, 0x0, 0x0, 0x5, 0x77, - 0x40, 0x0, 0x0, 0x9f, 0xf3, 0x0, 0x0, 0x0, - 0x2, 0xef, 0xf1, 0x0, 0x5, 0xef, 0xff, 0xfe, - 0x50, 0x0, 0x2f, 0xfd, 0x20, 0x0, 0x2, 0x8f, - 0xff, 0x50, 0x0, 0x7f, 0xfe, 0xbb, 0xff, 0xf6, - 0x0, 0x7, 0xff, 0xe7, 0x10, 0x3f, 0xff, 0xf6, - 0x0, 0x2, 0xff, 0x90, 0x0, 0x1b, 0xff, 0x10, - 0x0, 0x7f, 0xff, 0xf1, 0x6f, 0xfa, 0x20, 0x0, - 0x9, 0xfc, 0x0, 0x0, 0x0, 0xdf, 0x80, 0x0, - 0x2, 0xbf, 0xf5, 0x8f, 0xf3, 0x0, 0x0, 0xd, - 0xf6, 0x0, 0x0, 0x0, 0x8f, 0xc0, 0x0, 0x0, - 0x4f, 0xf6, 0x8f, 0xf2, 0x0, 0x0, 0xe, 0xf5, - 0x0, 0x0, 0x0, 0x6f, 0xd0, 0x0, 0x0, 0x4f, - 0xf6, 0x7f, 0xf4, 0x0, 0x0, 0xc, 0xf8, 0x0, - 0x0, 0x0, 0x5f, 0xa0, 0x0, 0x0, 0x5f, 0xf6, - 0x5f, 0xff, 0x80, 0x0, 0x7, 0xfe, 0x20, 0x0, - 0x0, 0x2, 0x0, 0x0, 0x8, 0xff, 0xf4, 0x1b, - 0xff, 0xfc, 0x0, 0x0, 0xdf, 0xe6, 0x21, 0x0, - 0x0, 0x0, 0x1, 0xdf, 0xff, 0xb0, 0x0, 0x2b, - 0xff, 0xa0, 0x0, 0x2e, 0xff, 0xff, 0xb0, 0x0, - 0x0, 0xb, 0xff, 0xb1, 0x0, 0x0, 0x0, 0xbf, - 0xf3, 0x0, 0x1, 0x8e, 0xff, 0xb0, 0x0, 0x0, - 0x4f, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf9, - 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0xaf, - 0xf1, 0x0, 0x0, 0x0, 0x0, 0xb, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xa0, - 0x0, 0x0, 0x0, 0x0, 0x9, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, 0x80, 0x0, - 0x0, 0x0, 0x0, 0xa, 0xfd, 0x10, 0x0, 0x15, - 0x88, 0x51, 0x0, 0x1, 0xef, 0x90, 0x0, 0x0, - 0x0, 0x0, 0xc, 0xff, 0xe6, 0x8, 0xff, 0xff, - 0xff, 0x80, 0x7f, 0xff, 0xb0, 0x0, 0x0, 0x0, - 0x0, 0x2, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x8, 0xff, 0xff, 0x93, 0x0, 0x3a, 0xff, - 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x17, 0xc5, 0x0, 0x0, 0x0, 0x6c, 0x70, - 0x0, 0x0, 0x0, 0x0, - - /* U+E603 "" */ - 0x0, 0x0, 0x0, 0x4, 0x77, 0x63, 0x0, 0x0, - 0x0, 0x0, 0x36, 0x77, 0x40, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x2a, 0xff, 0xff, 0xff, 0xe8, 0x0, - 0x0, 0x7e, 0xff, 0xff, 0xff, 0xa2, 0x0, 0x0, - 0x0, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, - 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x0, - 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, - 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, - 0xd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, - 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, - 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, - 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, - 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, - 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, - 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, - 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, - 0x9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, - 0x1, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x0, - 0x0, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1, 0x0, - 0x0, 0x1, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x10, 0x0, - 0x0, 0x0, 0xb, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xf7, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x8, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x40, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xd2, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfb, 0x10, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0xff, 0xff, - 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xdf, 0xff, - 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xff, - 0xfe, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x59, - 0x71, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - - /* U+E607 "" */ - 0x0, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xe2, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, - 0xe3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x2, 0xff, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x2f, 0xff, 0xf6, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x2, 0xfe, 0x9f, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xe0, 0x7f, - 0xf9, 0x0, 0x0, 0x7b, 0x0, 0x0, 0x2, 0xfe, - 0x0, 0x5f, 0xfb, 0x0, 0x1f, 0xfc, 0x10, 0x0, - 0x2f, 0xe0, 0x0, 0x5f, 0xfc, 0x0, 0x3e, 0xfd, - 0x10, 0x2, 0xfe, 0x0, 0x1d, 0xff, 0x40, 0x0, - 0x2d, 0xfe, 0x20, 0x2f, 0xe0, 0x2d, 0xfe, 0x30, - 0x0, 0x0, 0x1c, 0xff, 0x42, 0xfe, 0x3e, 0xfd, - 0x20, 0x0, 0x0, 0x0, 0xb, 0xff, 0x7f, 0xff, - 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0xa, 0xff, - 0xff, 0xfb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x8, 0xff, 0xfa, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0xff, 0xb0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xc1, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xaf, 0xf8, 0xff, 0xef, - 0xd2, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xf4, 0x2f, - 0xe2, 0xef, 0xe3, 0x0, 0x0, 0x1, 0xcf, 0xe3, - 0x2, 0xfe, 0x1, 0xdf, 0xf4, 0x0, 0x1, 0xdf, - 0xe2, 0x0, 0x2f, 0xe0, 0x0, 0xbf, 0xf5, 0x1, - 0xef, 0xd2, 0x0, 0x2, 0xfe, 0x0, 0x5, 0xff, - 0xb0, 0x8, 0xc1, 0x0, 0x0, 0x2f, 0xe0, 0x7, - 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x2, 0xfe, - 0x8, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x2f, 0xea, 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x2, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x2f, 0xff, 0x40, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x2, 0xfe, 0x20, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2d, 0x10, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x10, 0x0, 0x0, 0x0, 0x0, - - /* U+E619 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x55, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xc, 0xff, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, - 0x66, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xc, 0xf6, 0x0, 0x6f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xcf, 0x60, 0x0, 0x6, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xb, 0xf6, 0x0, 0x0, - 0x0, 0x6f, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xbf, 0x60, 0x0, 0x0, 0x0, 0x7, 0xfb, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0xf7, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0xb0, 0x0, 0x0, - 0x0, 0x0, 0xbf, 0x70, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xfb, 0x0, 0x0, 0x0, 0xb, 0xf7, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0xb0, 0x0, 0x0, 0xbf, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x8, 0xfb, 0x0, 0xb, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x8f, 0xb0, 0x5f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, - 0xf5, 0x6f, 0x63, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x36, 0xf6, 0x1e, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xff, 0xe1, 0x0, 0x6f, 0x90, 0x0, 0x1, - 0x89, 0x99, 0x97, 0x10, 0x0, 0x0, 0x55, 0x0, - 0x0, 0x1f, 0x80, 0x0, 0xc, 0xff, 0xff, 0xff, - 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, - 0x0, 0xe, 0xa0, 0x0, 0xc, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0xe, 0xa0, - 0x0, 0xc, 0xc0, 0x0, 0x6, 0xf0, 0x0, 0x0, - 0x1f, 0x80, 0x0, 0xe, 0xa0, 0x0, 0xc, 0xc0, - 0x0, 0x8, 0xf1, 0x0, 0x0, 0x1f, 0x80, 0x0, - 0xe, 0xa0, 0x0, 0xc, 0xc0, 0x0, 0x8, 0xf1, - 0x0, 0x0, 0x1f, 0x80, 0x0, 0xe, 0xa0, 0x0, - 0xc, 0xc0, 0x0, 0x8, 0xf1, 0x0, 0x0, 0x1f, - 0x80, 0x0, 0xe, 0xa0, 0x0, 0xc, 0xc0, 0x0, - 0x8, 0xf1, 0x0, 0x0, 0xf, 0xa0, 0x0, 0xe, - 0xa0, 0x0, 0xc, 0xc0, 0x0, 0xa, 0xf0, 0x0, - 0x0, 0x9, 0xfb, 0xaa, 0xaf, 0xa0, 0x0, 0xc, - 0xfa, 0xaa, 0xbf, 0x90, 0x0, 0x0, 0x0, 0x9e, - 0xff, 0xff, 0x30, 0x0, 0x3, 0xff, 0xff, 0xe9, - 0x0, 0x0, - - /* U+E62C "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x40, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xf7, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1a, - 0xb1, 0x0, 0x2f, 0xf9, 0x0, 0x3, 0x82, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x5, 0xff, 0xf6, 0x0, - 0x2f, 0xf9, 0x0, 0xd, 0xff, 0x60, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0xff, 0xd1, 0x0, 0x2f, 0xf9, - 0x0, 0xa, 0xff, 0xf7, 0x0, 0x0, 0x0, 0x6, - 0xff, 0xf8, 0x0, 0x0, 0x2f, 0xf9, 0x0, 0x0, - 0x8f, 0xff, 0x60, 0x0, 0x0, 0x2f, 0xff, 0x50, - 0x0, 0x0, 0x2f, 0xf9, 0x0, 0x0, 0x5, 0xff, - 0xf3, 0x0, 0x0, 0xcf, 0xf7, 0x0, 0x0, 0x0, - 0x2f, 0xf9, 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, - 0x4, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x2f, 0xf9, - 0x0, 0x0, 0x0, 0xc, 0xff, 0x40, 0xb, 0xff, - 0x30, 0x0, 0x0, 0x0, 0x2f, 0xf9, 0x0, 0x0, - 0x0, 0x3, 0xff, 0xb0, 0x1f, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x2f, 0xf9, 0x0, 0x0, 0x0, 0x0, - 0xcf, 0xf1, 0x4f, 0xf7, 0x0, 0x0, 0x0, 0x0, - 0x2f, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf4, - 0x7f, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf9, - 0x0, 0x0, 0x0, 0x0, 0x4f, 0xf7, 0x9f, 0xf2, - 0x0, 0x0, 0x0, 0x0, 0x2f, 0xf9, 0x0, 0x0, - 0x0, 0x0, 0x2f, 0xf8, 0x9f, 0xf2, 0x0, 0x0, - 0x0, 0x0, 0x2f, 0xf9, 0x0, 0x0, 0x0, 0x0, - 0x2f, 0xf9, 0x8f, 0xf3, 0x0, 0x0, 0x0, 0x0, - 0x2f, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, - 0x6f, 0xf5, 0x0, 0x0, 0x0, 0x0, 0xc, 0xe4, - 0x0, 0x0, 0x0, 0x0, 0x5f, 0xf6, 0x3f, 0xf9, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x9f, 0xf3, 0xe, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0xe0, 0x8, 0xff, 0x70, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x80, - 0x1, 0xff, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x2f, 0xff, 0x10, 0x0, 0x7f, - 0xfd, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xdf, 0xf7, 0x0, 0x0, 0xc, 0xff, 0xd1, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1d, 0xff, - 0xc0, 0x0, 0x0, 0x1, 0xdf, 0xfe, 0x60, 0x0, - 0x0, 0x0, 0x0, 0x6, 0xef, 0xfd, 0x10, 0x0, - 0x0, 0x0, 0x1c, 0xff, 0xfd, 0x72, 0x0, 0x0, - 0x27, 0xdf, 0xff, 0xc1, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x9f, 0xff, 0xff, 0xfe, 0xef, 0xff, 0xff, - 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xaf, 0xff, 0xff, 0xff, 0xff, 0xfa, 0x30, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x69, - 0xcd, 0xdc, 0x96, 0x10, 0x0, 0x0, 0x0, 0x0, - - /* U+E633 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xff, 0xff, 0xff, 0x90, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, - 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x4a, 0xff, 0xff, 0xff, 0xe7, - 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4d, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x9, 0xff, 0xfc, 0x63, 0x11, - 0x25, 0xaf, 0xff, 0xd2, 0x0, 0x0, 0x0, 0x0, - 0xaf, 0xfc, 0x30, 0x0, 0x0, 0x0, 0x1, 0xaf, - 0xfe, 0x20, 0x0, 0x0, 0xa, 0xff, 0x90, 0x0, - 0x0, 0x1, 0x0, 0x0, 0x6, 0xff, 0xe1, 0x0, - 0x0, 0x5f, 0xf8, 0x0, 0x0, 0x0, 0x6, 0x0, - 0x0, 0x0, 0x4f, 0xfa, 0x0, 0x1, 0xef, 0xb0, - 0x0, 0x0, 0x0, 0x28, 0x0, 0x0, 0x0, 0x7, - 0xff, 0x40, 0x8, 0xff, 0x10, 0x0, 0x0, 0x0, - 0x4a, 0x0, 0x0, 0x0, 0x0, 0xcf, 0xc0, 0xe, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7c, 0x0, 0x0, - 0x0, 0x0, 0x4f, 0xf2, 0x3f, 0xf3, 0x0, 0x0, - 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, 0x0, 0xe, - 0xf7, 0x6f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xcf, - 0x0, 0x0, 0x0, 0x0, 0xb, 0xfa, 0x8f, 0xd0, - 0x0, 0x0, 0x0, 0x0, 0xef, 0x20, 0x0, 0x0, - 0x0, 0x8, 0xfc, 0x8f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x30, 0x0, 0x0, 0x0, 0x8, 0xfc, - 0x7f, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x57, 0x0, - 0x0, 0x0, 0x0, 0x8, 0xfb, 0x6f, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xb, 0xfa, 0x2f, 0xf3, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xf6, 0xd, - 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x5f, 0xf2, 0x7, 0xff, 0x10, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcf, - 0xb0, 0x0, 0xef, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x8, 0xff, 0x40, 0x0, 0x5f, - 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x5f, 0xfa, 0x0, 0x0, 0xa, 0xff, 0xa0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xd1, 0x0, - 0x0, 0x0, 0xbf, 0xfd, 0x40, 0x0, 0x0, 0x0, - 0x2, 0xbf, 0xfd, 0x20, 0x0, 0x0, 0x0, 0x9, - 0xff, 0xfd, 0x84, 0x32, 0x47, 0xbf, 0xff, 0xb1, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xe6, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x39, 0xdf, 0xff, 0xfe, 0xa5, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, - - /* U+E652 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x78, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x5f, 0xff, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xff, 0xa9, - 0xff, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xd, 0xfd, 0x0, 0xdf, 0xd0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x9f, 0xf2, 0x0, 0x2f, 0xf9, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, - 0x60, 0x0, 0x6, 0xff, 0x30, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xd, 0xfa, 0x0, 0x0, - 0x0, 0xbf, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x8f, 0xf1, 0x0, 0x0, 0x0, 0x1f, - 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xff, 0x70, 0x0, 0x0, 0x0, 0x7, 0xff, 0x10, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xfd, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xdf, 0x90, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xf5, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x5f, 0xf1, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x8f, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xd, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, - 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x4, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x30, 0x0, - 0x0, 0x0, 0x9, 0xfb, 0x1, 0x50, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x58, 0x0, 0x0, 0x0, 0x0, - 0xc, 0xf6, 0xc, 0xf6, 0x0, 0x0, 0x1a, 0xff, - 0xf9, 0x10, 0x0, 0x6c, 0xda, 0x20, 0xf, 0xf3, - 0x2f, 0xf2, 0x0, 0x0, 0xdf, 0xc9, 0xcf, 0xd0, - 0x5, 0xfe, 0xcf, 0xc0, 0x1f, 0xf0, 0x6f, 0xc0, - 0x0, 0x7, 0xfa, 0x0, 0xb, 0xf7, 0xb, 0xf3, - 0xd, 0xf0, 0x2f, 0xf0, 0x7f, 0xb0, 0x0, 0xc, - 0xf2, 0x0, 0x3, 0xfc, 0xa, 0xe0, 0xd, 0xf0, - 0x1f, 0xf0, 0x6f, 0xd0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x4f, 0xa0, 0xf, 0xf3, - 0x3f, 0xf1, 0x0, 0xf, 0xe0, 0x0, 0x0, 0xff, - 0x0, 0x1, 0xef, 0x10, 0xc, 0xf8, 0xd, 0xf8, - 0x0, 0xd, 0xf0, 0x0, 0x1, 0xfd, 0x0, 0x1d, - 0xf4, 0x0, 0x6, 0xfe, 0x16, 0xfa, 0x0, 0x9, - 0xf6, 0x0, 0x6, 0xf9, 0x2, 0xdf, 0x50, 0x0, - 0x0, 0xef, 0xb0, 0x41, 0x0, 0x2, 0xff, 0x62, - 0x6f, 0xf2, 0xd, 0xfb, 0x77, 0x60, 0x0, 0x4f, - 0xf9, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0x50, - 0xe, 0xff, 0xff, 0xf2, 0x0, 0x8, 0xff, 0xc2, - 0x0, 0x0, 0x1, 0x69, 0x51, 0x0, 0x1, 0x33, - 0x33, 0x20, 0x0, 0x0, 0x7f, 0xff, 0xb7, 0x55, - 0x7b, 0xff, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xdf, 0xff, 0xff, 0xff, 0xfd, - 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x4, 0x9d, 0xee, 0xc9, 0x40, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, - - /* U+E65A "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x49, - 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28, 0xef, - 0xff, 0xfa, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xcf, 0xff, - 0xd8, 0xbf, 0xff, 0xe9, 0x30, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x4, 0xaf, 0xff, 0xfa, - 0x40, 0x0, 0x17, 0xdf, 0xff, 0xd7, 0x10, 0x0, - 0x0, 0x0, 0x0, 0x1, 0x7d, 0xff, 0xfc, 0x60, - 0x0, 0x0, 0x0, 0x0, 0x28, 0xef, 0xff, 0xb5, - 0x0, 0x0, 0x0, 0x5b, 0xff, 0xfe, 0x82, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0xff, - 0xff, 0xa4, 0x0, 0x9f, 0xff, 0xb4, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x6d, 0xff, 0xf6, 0x5, 0xff, 0xff, 0x93, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x4b, 0xff, 0xff, 0x30, 0x0, 0x6c, 0xff, 0xff, - 0x81, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x19, - 0xff, 0xff, 0xff, 0x20, 0x0, 0x0, 0x2, 0x9f, - 0xff, 0xfa, 0x30, 0x0, 0x0, 0x0, 0x4, 0xbf, - 0xff, 0xf8, 0x1e, 0xf1, 0x0, 0x0, 0x0, 0x0, - 0x4f, 0xff, 0xff, 0xd7, 0x10, 0x1, 0x7e, 0xff, - 0xff, 0xf3, 0x0, 0xef, 0x10, 0x0, 0x0, 0x0, - 0x4, 0xfc, 0x28, 0xef, 0xff, 0xab, 0xff, 0xfd, - 0x71, 0xdf, 0x30, 0xe, 0xf1, 0x0, 0x0, 0x0, - 0x0, 0x4f, 0xc0, 0x0, 0x5b, 0xff, 0xff, 0xa4, - 0x0, 0xd, 0xf3, 0x0, 0xef, 0x10, 0x0, 0x0, - 0x0, 0x4, 0xfc, 0x0, 0x0, 0x1, 0x77, 0x10, - 0x0, 0x0, 0xdf, 0x30, 0xe, 0xf1, 0x0, 0x0, - 0x0, 0x0, 0x4f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xd, 0xf3, 0x0, 0xef, 0x10, 0x0, - 0x0, 0x0, 0x4, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xdf, 0x30, 0xe, 0xf1, 0x0, - 0x0, 0x0, 0x0, 0x6f, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xf4, 0x6, 0xff, 0xc1, - 0x0, 0x0, 0x0, 0x6, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x47, 0xff, 0xff, - 0xd0, 0x0, 0x0, 0x0, 0xf, 0xf7, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x8f, 0xf0, 0xff, 0x52, - 0xdf, 0x60, 0x0, 0x0, 0x0, 0x5f, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x1, 0x9f, 0xf4, 0x1f, 0xe0, - 0x8, 0xf7, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, - 0x95, 0x21, 0x12, 0x59, 0xff, 0xf5, 0x0, 0xef, - 0x86, 0xef, 0x40, 0x0, 0x0, 0x0, 0x0, 0x3c, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xb3, 0x0, 0x5, - 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0x7b, 0xde, 0xed, 0xb7, 0x30, 0x0, 0x0, - 0x3, 0x9a, 0x60, 0x0, - - /* U+E65C "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, 0xef, - 0xff, 0xa3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0xf9, 0x66, 0x9e, 0xf7, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x6f, 0xa1, 0x0, 0x0, 0x9, 0xf7, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xb0, 0x0, 0x0, - 0x0, 0x9, 0xf3, 0x0, 0x0, 0x0, 0x8, 0xf1, - 0x0, 0x0, 0x0, 0x0, 0xe, 0xa0, 0x0, 0x0, - 0x0, 0xdb, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9e, - 0x0, 0x0, 0x0, 0xe, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x6, 0xf0, 0x0, 0x0, 0x0, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x17, 0x0, 0x0, 0x0, - 0xf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0x52, 0xfb, 0x88, 0x88, 0x88, - 0x88, 0x88, 0x88, 0x88, 0x88, 0xde, 0x2f, 0x40, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, - 0xe2, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x8e, 0x2f, 0x40, 0x0, 0x0, 0x6, - 0xfc, 0x0, 0x0, 0x0, 0x8, 0xe2, 0xf4, 0x0, - 0x0, 0x0, 0xcf, 0xf3, 0x0, 0x0, 0x0, 0x8e, - 0x2f, 0x40, 0x0, 0x0, 0x5, 0xfb, 0x0, 0x0, - 0x0, 0x8, 0xe2, 0xf4, 0x0, 0x0, 0x0, 0xf, - 0x60, 0x0, 0x0, 0x0, 0x8e, 0x2f, 0x40, 0x0, - 0x0, 0x0, 0xf6, 0x0, 0x0, 0x0, 0x8, 0xe2, - 0xf4, 0x0, 0x0, 0x0, 0xf, 0x60, 0x0, 0x0, - 0x0, 0x8e, 0x2f, 0x40, 0x0, 0x0, 0x0, 0x51, - 0x0, 0x0, 0x0, 0x8, 0xe2, 0xf4, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8e, 0x2f, - 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x9, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfb, 0x2, 0x77, 0x77, 0x77, - 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x10, - - /* U+E67A "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0xcc, - 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x50, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x6, 0xff, 0x50, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, - 0x0, 0x0, 0x0, 0x6, 0xff, 0x50, 0x0, 0x0, - 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x6f, 0x40, - 0x0, 0x0, 0x1, 0x33, 0x10, 0x0, 0x0, 0x5, - 0xf6, 0x0, 0x0, 0x0, 0x3, 0xff, 0xf4, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4f, 0xff, - 0x20, 0x0, 0x0, 0x0, 0x9f, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, 0xf9, 0x0, - 0x0, 0x0, 0x0, 0xa, 0x90, 0x0, 0x1, 0x7b, - 0xdd, 0xb6, 0x10, 0x0, 0xa, 0x90, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, 0xff, 0xff, - 0xff, 0xf6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, - 0x0, 0x0, 0x0, 0x11, 0x11, 0x0, 0xe, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0x0, - 0x11, 0x11, 0xef, 0xff, 0x10, 0x1f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1, 0xff, - 0xfe, 0xef, 0xff, 0x10, 0x1f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xf0, 0x1, 0xff, 0xfe, - 0x89, 0x99, 0x10, 0xf, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xf0, 0x1, 0x99, 0x98, 0x0, - 0x0, 0x0, 0xd, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xef, 0xff, 0xff, 0xff, 0xfd, 0x20, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x4, 0x30, 0x0, 0x19, - 0xef, 0xff, 0xfe, 0x80, 0x0, 0x3, 0x30, 0x0, - 0x0, 0x0, 0x0, 0x4f, 0xe3, 0x0, 0x0, 0x3, - 0x54, 0x20, 0x0, 0x0, 0x3f, 0xf3, 0x0, 0x0, - 0x0, 0x3, 0xff, 0xf9, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x9f, 0xff, 0x30, 0x0, 0x0, - 0x0, 0xbf, 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xa, 0xfb, 0x0, 0x0, 0x0, 0x0, - 0x6, 0x0, 0x0, 0x0, 0x6, 0xee, 0x40, 0x0, - 0x0, 0x0, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x6, 0xff, 0x50, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x6, 0xff, 0x50, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x6, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, - - /* U+E706 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0x0, 0x0, 0x9e, 0xea, 0x10, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, - 0xd, 0xff, 0xff, 0xe3, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x9f, - 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x8, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xdf, 0xff, - 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0xbf, 0xb0, - 0x0, 0x0, 0x0, 0x11, 0x0, 0xef, 0xff, 0xff, - 0xff, 0x10, 0x0, 0x0, 0x0, 0x2e, 0xfb, 0x0, - 0x0, 0x5a, 0xdf, 0x70, 0xff, 0xff, 0xff, 0xff, - 0x10, 0x0, 0x0, 0x0, 0x2, 0xef, 0x50, 0x4e, - 0xff, 0xff, 0x70, 0xff, 0xff, 0xff, 0xff, 0x10, - 0x0, 0x0, 0x0, 0x0, 0x26, 0x7, 0xff, 0xff, - 0xff, 0x70, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x5f, 0xff, 0xff, 0xff, - 0x70, 0xff, 0xff, 0xff, 0xff, 0x10, 0x0, 0x0, - 0x0, 0x0, 0x2, 0xff, 0xff, 0xff, 0xff, 0x70, - 0xff, 0xf4, 0x2e, 0xff, 0x10, 0x0, 0x0, 0x0, - 0x0, 0xa, 0xff, 0xff, 0xff, 0xff, 0x70, 0xff, - 0xf2, 0xe, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xff, 0xff, 0xff, 0xff, 0x70, 0xff, 0xf2, - 0xe, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, 0x4f, - 0xff, 0xff, 0xff, 0xff, 0x70, 0xff, 0xf2, 0xe, - 0xff, 0x10, 0x0, 0x1f, 0xff, 0xe0, 0x6f, 0xff, - 0xff, 0xff, 0xff, 0x70, 0xff, 0xf2, 0xe, 0xff, - 0x10, 0x0, 0x2f, 0xff, 0xe0, 0x6f, 0xff, 0xff, - 0xff, 0xff, 0x70, 0xff, 0xf2, 0xe, 0xff, 0x10, - 0x0, 0x1, 0x11, 0x10, 0x5f, 0xff, 0xff, 0xff, - 0xfc, 0x3, 0xff, 0xf2, 0xe, 0xff, 0x50, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xf1, - 0x3f, 0xff, 0xf2, 0xe, 0xff, 0xf5, 0x0, 0x0, - 0x0, 0x0, 0xc, 0xff, 0xff, 0xff, 0x70, 0xef, - 0xff, 0xf2, 0xe, 0xff, 0xff, 0x10, 0x0, 0x0, - 0x0, 0x4, 0xff, 0xff, 0xff, 0x16, 0xff, 0xff, - 0xa0, 0x8, 0xff, 0xff, 0x90, 0x0, 0x0, 0x0, - 0x0, 0xaf, 0xff, 0xfd, 0xb, 0xff, 0xfa, 0x0, - 0x0, 0x7f, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x2, - 0xb, 0xff, 0xfb, 0xe, 0xff, 0xf3, 0x0, 0x0, - 0xf, 0xff, 0xf1, 0x0, 0x0, 0x0, 0xcf, 0x30, - 0x9f, 0xfa, 0xe, 0xff, 0xf2, 0x0, 0x0, 0xf, - 0xff, 0xf1, 0x0, 0x0, 0xc, 0xfe, 0x20, 0x3, - 0xab, 0xc, 0xff, 0xf7, 0x0, 0x0, 0x4f, 0xff, - 0xf0, 0x0, 0x0, 0xbf, 0xe2, 0x0, 0x0, 0x0, - 0x8, 0xff, 0xff, 0x50, 0x3, 0xef, 0xff, 0xb0, - 0x0, 0x0, 0x3d, 0x20, 0x0, 0x0, 0x0, 0x1, - 0xff, 0xff, 0xfe, 0xdf, 0xff, 0xff, 0x40, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6f, - 0xff, 0xff, 0xff, 0xff, 0xf9, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, - 0xff, 0xff, 0xff, 0xa0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b, 0xff, - 0xff, 0xc5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x31, - 0x0, 0x0, 0x0, - - /* U+E762 "" */ - 0x0, 0x0, 0x0, 0x1, 0x21, 0x0, 0x0, 0x0, - 0x0, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x18, 0xef, 0xff, 0xe9, 0x30, 0x5, 0xbf, 0xff, - 0xfc, 0x60, 0x0, 0x0, 0x0, 0x5, 0xff, 0xea, - 0x89, 0xdf, 0xf8, 0xbf, 0xfc, 0x98, 0xbf, 0xfd, - 0x20, 0x0, 0x0, 0x7f, 0xe5, 0x0, 0x0, 0x3, - 0xdf, 0xfa, 0x10, 0x0, 0x1, 0x8f, 0xf2, 0x0, - 0x4, 0xfd, 0x10, 0x0, 0x0, 0x0, 0x9, 0x60, - 0x0, 0x0, 0x0, 0x4, 0xfd, 0x0, 0xd, 0xf2, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x70, 0x3f, 0xa0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xe, 0xd0, 0x7f, 0x40, 0x0, 0x0, 0x20, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0xf2, - 0x9f, 0x20, 0x0, 0x8, 0xf9, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xf4, 0x9f, 0x20, - 0x0, 0xe, 0xff, 0x30, 0x0, 0x3f, 0xb0, 0x0, - 0x0, 0x0, 0x7, 0xf4, 0x7f, 0x40, 0x0, 0x5f, - 0xaf, 0xb0, 0x0, 0xbf, 0xf8, 0x0, 0x0, 0x0, - 0x9, 0xf2, 0x3f, 0xfa, 0xaa, 0xef, 0x1a, 0xf4, - 0x1, 0xfc, 0xdf, 0xba, 0xa6, 0x0, 0xe, 0xd0, - 0xf, 0xff, 0xff, 0xfb, 0x2, 0xfc, 0x8, 0xf5, - 0x2e, 0xff, 0xfc, 0x0, 0x7f, 0x70, 0x4, 0xfe, - 0x10, 0x0, 0x0, 0x9f, 0x5e, 0xe0, 0x0, 0x0, - 0x0, 0x3, 0xfd, 0x0, 0x0, 0x8f, 0xc1, 0x0, - 0x0, 0x1f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x3f, - 0xf3, 0x0, 0x0, 0x8, 0xfc, 0x10, 0x0, 0x7, - 0xff, 0x20, 0x0, 0x0, 0x3, 0xff, 0x40, 0x0, - 0x0, 0x0, 0x8f, 0xc1, 0x0, 0x0, 0x85, 0x0, - 0x0, 0x0, 0x3f, 0xf4, 0x0, 0x0, 0x0, 0x0, - 0x8, 0xfc, 0x10, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8f, - 0xc1, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf4, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0xfc, 0x10, - 0x0, 0x0, 0x4, 0xff, 0x40, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x8f, 0xc1, 0x0, 0x0, - 0x4f, 0xf3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x8, 0xfd, 0x20, 0x6, 0xff, 0x30, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x8f, 0xfe, 0xef, 0xe3, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, - 0xad, 0xc8, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - - /* U+E788 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x6, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x18, 0xef, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x29, 0xff, 0xff, 0x50, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3b, 0xff, 0xff, 0xfd, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x5c, 0xff, 0xff, 0xff, 0xf6, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x6d, 0xff, 0xff, 0xff, - 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0x8e, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x8f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x10, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xfa, 0xbf, - 0xff, 0xff, 0xff, 0xff, 0xf2, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x2f, 0xf2, 0xb, 0xff, 0xff, 0xff, - 0xff, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, - 0xa0, 0x0, 0xbf, 0xff, 0xff, 0xff, 0x30, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xff, 0x20, 0x0, 0xb, - 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xfa, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xf5, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xf2, 0x0, - 0x0, 0x0, 0xb, 0xff, 0xd0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x6f, 0xa0, 0x0, 0x0, 0x0, 0x4, - 0xff, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdf, - 0x20, 0x0, 0x0, 0x4, 0xcf, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x4, 0xfa, 0x0, 0x0, 0x4, - 0xcf, 0xff, 0x92, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xb, 0xf2, 0x0, 0x4, 0xcf, 0xfe, 0x71, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x90, 0x4, - 0xcf, 0xfd, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xaf, 0x24, 0xcf, 0xfb, 0x40, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0xfd, - 0xcf, 0xfa, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x9, 0xff, 0xf9, 0x10, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe7, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x46, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, - - /* U+E7A0 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x47, 0x99, 0x84, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x8, 0xef, 0xfe, 0xef, 0xff, 0x81, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3e, 0xfa, 0x40, 0x0, - 0x3, 0x9f, 0xe4, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x4f, 0xd3, 0x0, 0x0, 0x0, 0x0, 0x2c, 0xf5, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc1, 0x0, 0x6, - 0xe9, 0x10, 0x0, 0xb, 0xf4, 0x0, 0x0, 0x0, - 0xd, 0xe1, 0x0, 0x4c, 0xff, 0xff, 0x70, 0x0, - 0xc, 0xe1, 0x0, 0x0, 0x7, 0xf4, 0x0, 0x6, - 0xef, 0xff, 0xfa, 0x20, 0x0, 0x2f, 0x90, 0x0, - 0x0, 0xea, 0x0, 0x9, 0x81, 0x9f, 0xc3, 0x5e, - 0x0, 0x0, 0x8f, 0x10, 0x0, 0x4f, 0x30, 0x0, - 0xaf, 0xe5, 0x14, 0xcf, 0xf0, 0x0, 0x1, 0xf6, - 0x0, 0x9, 0xe0, 0x0, 0xa, 0xff, 0xf2, 0xff, - 0xff, 0x0, 0x0, 0xc, 0xa0, 0x0, 0xca, 0x0, - 0x0, 0xaf, 0xff, 0x2f, 0xff, 0xf0, 0x0, 0x0, - 0x9d, 0x0, 0xd, 0x80, 0x0, 0x5, 0xff, 0xf2, - 0xff, 0xfa, 0x0, 0x0, 0x6, 0xf0, 0x0, 0xf8, - 0x0, 0x0, 0x1, 0x9f, 0x2f, 0xc3, 0x0, 0x0, - 0x0, 0x6f, 0x0, 0x5f, 0x40, 0x0, 0x0, 0x0, - 0x31, 0x40, 0x0, 0x0, 0x0, 0x6, 0xf0, 0xc, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x9e, 0x4, 0xf5, 0x0, 0x0, 0x0, - 0x0, 0xc, 0x50, 0x0, 0x0, 0x0, 0xc, 0xb0, - 0xaf, 0x40, 0x0, 0x0, 0x0, 0x0, 0xa4, 0x0, - 0x0, 0x0, 0x2, 0xf6, 0x2, 0xbf, 0xc4, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9f, - 0x10, 0x0, 0x3c, 0xe0, 0x0, 0x0, 0x0, 0xe6, - 0x0, 0x0, 0x0, 0x3f, 0x90, 0x0, 0x0, 0x7e, - 0x0, 0x0, 0x0, 0x4, 0x10, 0x0, 0x0, 0xd, - 0xf1, 0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, 0x4, - 0x96, 0x0, 0x0, 0x1c, 0xf5, 0x0, 0x0, 0x0, - 0x7e, 0x0, 0x0, 0x4, 0x91, 0x68, 0x0, 0x1d, - 0xf6, 0x0, 0x0, 0x0, 0x7, 0xe0, 0x0, 0x0, - 0xa0, 0x70, 0xb0, 0x5, 0xf5, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0xdd, 0xdc, 0xa, 0x1b, 0x2b, 0x0, - 0x5f, 0x10, 0x0, 0x0, 0x0, 0x3, 0xaa, 0xac, - 0xf2, 0x49, 0x5, 0x80, 0x5, 0xf1, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0x20, 0x5a, 0x70, - 0x0, 0x5f, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xf2, 0x0, 0x0, 0x0, 0x5, 0xf1, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x20, 0x0, - 0x0, 0x0, 0x5f, 0x10, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xf6, 0x44, 0x44, 0x44, 0x48, 0xf1, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x22, 0x22, 0x22, 0x22, 0x22, - 0x10, 0x0, 0x0, 0x0, - - /* U+E986 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x5, 0x91, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x24, 0x0, 0xd, 0xff, 0x10, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xef, - 0x70, 0x7, 0xff, 0x70, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xef, 0xd0, 0x1, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x70, - 0x0, 0x8f, 0xf4, 0x0, 0xcf, 0xf0, 0x5, 0x30, - 0x0, 0x0, 0x0, 0x8f, 0xf2, 0x0, 0x3f, 0xf9, - 0x0, 0x8f, 0xf4, 0x3f, 0xf8, 0x0, 0x0, 0x0, - 0x4f, 0xf8, 0x0, 0xf, 0xfc, 0x0, 0x4f, 0xf7, - 0x8f, 0xff, 0xc1, 0x0, 0x0, 0xf, 0xfe, 0x0, - 0xb, 0xff, 0x0, 0x2f, 0xf9, 0xaf, 0xff, 0xfe, - 0x30, 0x0, 0xb, 0xff, 0x20, 0xa, 0xff, 0x20, - 0xf, 0xfa, 0xbf, 0xff, 0xff, 0xf6, 0x0, 0x9, - 0xff, 0x40, 0x9, 0xff, 0x30, 0xf, 0xfb, 0xcf, - 0xf4, 0xdf, 0xff, 0x90, 0x9, 0xff, 0x30, 0x8, - 0xff, 0x30, 0xf, 0xfb, 0xaf, 0xf1, 0x9, 0xff, - 0xfb, 0x1a, 0xff, 0x20, 0x9, 0xff, 0x20, 0xf, - 0xfb, 0x8f, 0xf3, 0x0, 0x5f, 0xff, 0xef, 0xff, - 0x0, 0xb, 0xff, 0x10, 0x1f, 0xfa, 0x4f, 0xf4, - 0x0, 0x2, 0xdf, 0xff, 0xfd, 0x0, 0xd, 0xfe, - 0x0, 0x3f, 0xf8, 0xb, 0xf2, 0x0, 0x0, 0x9, - 0xff, 0xf8, 0x0, 0x1f, 0xfa, 0x0, 0x6f, 0xf5, - 0x0, 0x10, 0x0, 0x0, 0x0, 0x5f, 0xe1, 0x0, - 0x5f, 0xf7, 0x0, 0xaf, 0xf2, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0x0, 0x0, 0xbf, 0xf1, 0x0, - 0xef, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xff, 0xb0, 0x4, 0xff, 0x90, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbe, - 0x30, 0xa, 0xff, 0x40, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfd, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xc, 0xf5, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x10, 0x0 -}; - - -/*--------------------- - * GLYPH DESCRIPTION - *--------------------*/ - -static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { - {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, - {.bitmap_index = 0, .adv_w = 544, .box_w = 30, .box_h = 28, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 420, .adv_w = 544, .box_w = 32, .box_h = 27, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 852, .adv_w = 544, .box_w = 19, .box_h = 30, .ofs_x = 8, .ofs_y = -2}, - {.bitmap_index = 1137, .adv_w = 544, .box_w = 26, .box_h = 26, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 1475, .adv_w = 544, .box_w = 28, .box_h = 28, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 1867, .adv_w = 544, .box_w = 26, .box_h = 29, .ofs_x = 4, .ofs_y = -2}, - {.bitmap_index = 2244, .adv_w = 544, .box_w = 28, .box_h = 30, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2664, .adv_w = 544, .box_w = 33, .box_h = 23, .ofs_x = 1, .ofs_y = 2}, - {.bitmap_index = 3044, .adv_w = 544, .box_w = 21, .box_h = 25, .ofs_x = 6, .ofs_y = 1}, - {.bitmap_index = 3307, .adv_w = 544, .box_w = 30, .box_h = 31, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 3772, .adv_w = 544, .box_w = 30, .box_h = 29, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 4207, .adv_w = 544, .box_w = 28, .box_h = 25, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 4557, .adv_w = 544, .box_w = 26, .box_h = 26, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 4895, .adv_w = 544, .box_w = 25, .box_h = 31, .ofs_x = 5, .ofs_y = -3}, - {.bitmap_index = 5283, .adv_w = 544, .box_w = 26, .box_h = 23, .ofs_x = 4, .ofs_y = 1} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - -static const uint16_t unicode_list_0[] = { - 0x0, 0x3, 0x7, 0x19, 0x2c, 0x33, 0x52, 0x5a, - 0x5c, 0x7a, 0x106, 0x162, 0x188, 0x1a0, 0x386 -}; - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 58880, .range_length = 903, .glyph_id_start = 1, - .unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 15, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY - } -}; - - - -/*-------------------- - * ALL CUSTOM DATA - *--------------------*/ - -#if LV_VERSION_CHECK(8, 0, 0) -/*Store all the custom data of the font*/ -static lv_font_fmt_txt_glyph_cache_t cache; -static const lv_font_fmt_txt_dsc_t font_dsc = { -#else -static lv_font_fmt_txt_dsc_t font_dsc = { -#endif - .glyph_bitmap = glyph_bitmap, - .glyph_dsc = glyph_dsc, - .cmaps = cmaps, - .kern_dsc = NULL, - .kern_scale = 0, - .cmap_num = 1, - .bpp = 4, - .kern_classes = 0, - .bitmap_format = 0, -#if LV_VERSION_CHECK(8, 0, 0) - .cache = &cache -#endif -}; - - -/*----------------- - * PUBLIC FONT - *----------------*/ - -/*Initialize a public general font descriptor*/ -#if LV_VERSION_CHECK(8, 0, 0) -const lv_font_t ui_font_iconfont34 = { -#else -lv_font_t ui_font_iconfont34 = { -#endif - .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ - .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ - .line_height = 32, /*The maximum line height required by the font*/ - .base_line = 3, /*Baseline measured from the bottom of the line*/ -#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) - .subpx = LV_FONT_SUBPX_NONE, -#endif -#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 - .underline_position = 0, - .underline_thickness = 0, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if UI_FONT_ICONFONT34*/ - diff --git a/app/src/ui/utils/zsw_ui_utils.c b/app/src/ui/utils/zsw_ui_utils.c index 8a24753c..57f66f1e 100644 --- a/app/src/ui/utils/zsw_ui_utils.c +++ b/app/src/ui/utils/zsw_ui_utils.c @@ -165,4 +165,13 @@ const char *zsw_ui_utils_source_from_notification(zsw_notification_src_t src) default: return "Unknown"; } +} + +void zsw_ui_utils_seconds_to_day_hour_min(int seconds, int *days, int *hours, int *minutes) +{ + *days = seconds / (24 * 3600); + seconds = seconds % (24 * 3600); + *hours = seconds / 3600; + seconds = seconds % 3600; + *minutes = seconds / 60; } \ No newline at end of file diff --git a/app/src/ui/utils/zsw_ui_utils.h b/app/src/ui/utils/zsw_ui_utils.h index 9bf69d15..26eefba1 100644 --- a/app/src/ui/utils/zsw_ui_utils.h +++ b/app/src/ui/utils/zsw_ui_utils.h @@ -38,3 +38,5 @@ const lv_img_dsc_t *zsw_ui_utils_icon_from_weather_code(int code, lv_color_t *ic const void *zsw_ui_utils_icon_from_notification(zsw_notification_src_t src); const char *zsw_ui_utils_source_from_notification(zsw_notification_src_t src); + +void zsw_ui_utils_seconds_to_day_hour_min(int seconds, int *days, int *hours, int *minutes); diff --git a/app/src/ui/watchfaces/pixel/zsw_watchface_goog_ui.c b/app/src/ui/watchfaces/pixel/zsw_watchface_goog_ui.c index 77d86854..1582ad20 100644 --- a/app/src/ui/watchfaces/pixel/zsw_watchface_goog_ui.c +++ b/app/src/ui/watchfaces/pixel/zsw_watchface_goog_ui.c @@ -444,7 +444,7 @@ static void watchface_goog_set_battery_percent(int32_t percent, int32_t battery) } else { lv_obj_clear_flag(face_goog_18_59114, LV_OBJ_FLAG_HIDDEN); } - lv_img_set_src(face_goog_20_61728, face_goog_20_61728_group[(percent / (int)(100 / 7.0) % 7)]); + lv_img_set_src(face_goog_20_61728, face_goog_20_61728_group[lv_map(percent, 0, 100, 0, 6)]); } static void watchface_goog_set_num_notifcations(int32_t number) diff --git a/app/src/ui/watchfaces/zsw_watchface_dropdown_ui.c b/app/src/ui/watchfaces/zsw_watchface_dropdown_ui.c index babd3a78..6e49b9ea 100644 --- a/app/src/ui/watchfaces/zsw_watchface_dropdown_ui.c +++ b/app/src/ui/watchfaces/zsw_watchface_dropdown_ui.c @@ -3,16 +3,6 @@ #include "drivers/zsw_display_control.h" #include "applications/watchface/watchface_app.h" -/* -Settings -Restart -Power off (nPM ship or hibernate) (BLE) -Music (NFC) -Current playing? (zbus in watchface_app listener and then call func here) -Brightness - -*/ - static lv_obj_t *ui_down_bg_panel; static lv_obj_t *ui_up_bg_Panel; static lv_obj_t *ui_music_info_label; @@ -27,6 +17,9 @@ static lv_obj_t *ui_settings_label; static lv_obj_t *ui_bri_slider; static lv_obj_t *ui_LightLabel; static lv_obj_t *ui_dropdown_bg_panel; +static lv_obj_t *ui_battery_state; +static lv_obj_t *ui_battery_charge_state; +static lv_obj_t *ui_remaining_time_bat_label; static lv_obj_t *dropdown_root; @@ -35,9 +28,29 @@ static uint8_t ui_light_slider_value = 30; static bool is_shown; static watchface_app_evt_listener evt_cb; -LV_FONT_DECLARE(ui_font_iconfont34); LV_FONT_DECLARE(lv_font_montserrat_14_full); +ZSW_LV_IMG_DECLARE(light); +ZSW_LV_IMG_DECLARE(brightness_adjust_icon); + +ZSW_LV_IMG_DECLARE(face_goog_20_61728_0); +ZSW_LV_IMG_DECLARE(face_goog_20_61728_1); +ZSW_LV_IMG_DECLARE(face_goog_20_61728_2); +ZSW_LV_IMG_DECLARE(face_goog_20_61728_3); +ZSW_LV_IMG_DECLARE(face_goog_20_61728_4); +ZSW_LV_IMG_DECLARE(face_goog_20_61728_5); +ZSW_LV_IMG_DECLARE(face_goog_20_61728_6); + +static const void *face_goog_battery[] = { + ZSW_LV_IMG_USE(face_goog_20_61728_0), + ZSW_LV_IMG_USE(face_goog_20_61728_1), + ZSW_LV_IMG_USE(face_goog_20_61728_2), + ZSW_LV_IMG_USE(face_goog_20_61728_3), + ZSW_LV_IMG_USE(face_goog_20_61728_4), + ZSW_LV_IMG_USE(face_goog_20_61728_5), + ZSW_LV_IMG_USE(face_goog_20_61728_6), +}; + void ui_event_light_slider(lv_event_t *e) { lv_event_code_t event_code = lv_event_get_code(e); @@ -112,7 +125,7 @@ static void on_lvgl_screen_gesture_event_callback_drop(lv_event_t *e) void zsw_watchface_dropdown_ui_add(lv_obj_t *root_page, watchface_app_evt_listener callback /*, TODO input starting state of buttons and sliders */) { - __ASSERT(ui_down_bg_panel == NULL, "ui_down_bg_panel is not NULL"); + __ASSERT(dropdown_root == NULL, "dropdown_root is not NULL"); evt_cb = callback; dropdown_root = root_page; @@ -142,18 +155,18 @@ void zsw_watchface_dropdown_ui_add(lv_obj_t *root_page, lv_obj_set_y(ui_up_bg_Panel, -10); lv_obj_set_align(ui_up_bg_Panel, LV_ALIGN_TOP_MID); lv_obj_clear_flag(ui_up_bg_Panel, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_SCROLLABLE); /// Flags - lv_obj_set_style_bg_color(ui_up_bg_Panel, lv_color_hex(0x323232), LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_set_style_bg_color(ui_up_bg_Panel, lv_color_hex(0x30343F), LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_style_bg_opa(ui_up_bg_Panel, 200, LV_PART_MAIN | LV_STATE_DEFAULT); ui_music_info_label = lv_label_create(ui_down_bg_panel); lv_label_set_text(ui_music_info_label, ""); lv_obj_set_style_text_align(ui_music_info_label, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_align(ui_music_info_label, LV_ALIGN_TOP_MID); - lv_obj_set_y(ui_music_info_label, 10); + lv_obj_set_y(ui_music_info_label, 14); lv_obj_set_width(ui_music_info_label, 150); lv_obj_set_style_text_font(ui_music_info_label, &lv_font_montserrat_14_full, LV_PART_MAIN | LV_STATE_DEFAULT); lv_label_set_long_mode(ui_music_info_label, LV_LABEL_LONG_SCROLL_CIRCULAR); - lv_obj_set_style_anim_speed(ui_music_info_label, 10, 0); + lv_obj_set_style_anim_speed(ui_music_info_label, 15, 0); ui_music_button = lv_btn_create(ui_down_bg_panel); lv_obj_set_width(ui_music_button, 50); @@ -161,6 +174,7 @@ void zsw_watchface_dropdown_ui_add(lv_obj_t *root_page, lv_obj_set_x(ui_music_button, 20); lv_obj_set_y(ui_music_button, 35); lv_obj_clear_flag(ui_music_button, LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_set_style_radius(ui_music_button, LV_RADIUS_CIRCLE, LV_PART_MAIN | LV_STATE_DEFAULT); ui_music_label = lv_label_create(ui_music_button); lv_obj_set_width(ui_music_label, LV_SIZE_CONTENT); /// 1 @@ -177,6 +191,7 @@ void zsw_watchface_dropdown_ui_add(lv_obj_t *root_page, lv_obj_set_x(ui_flashlight_button, 20); lv_obj_set_y(ui_flashlight_button, 95); lv_obj_clear_flag(ui_flashlight_button, LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_set_style_radius(ui_flashlight_button, LV_RADIUS_CIRCLE, LV_PART_MAIN | LV_STATE_DEFAULT); ui_flashlight_label = lv_label_create(ui_flashlight_button); lv_obj_set_width(ui_flashlight_label, LV_SIZE_CONTENT); /// 1 @@ -194,6 +209,7 @@ void zsw_watchface_dropdown_ui_add(lv_obj_t *root_page, lv_obj_set_y(ui_shutdown_button, 95); lv_obj_set_align(ui_shutdown_button, LV_ALIGN_TOP_MID); lv_obj_clear_flag(ui_shutdown_button, LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_set_style_radius(ui_shutdown_button, LV_RADIUS_CIRCLE, LV_PART_MAIN | LV_STATE_DEFAULT); ui_shutdown_label = lv_label_create(ui_shutdown_button); lv_obj_set_width(ui_shutdown_label, LV_SIZE_CONTENT); /// 1 @@ -211,6 +227,7 @@ void zsw_watchface_dropdown_ui_add(lv_obj_t *root_page, lv_obj_set_y(ui_settings_button, 35); lv_obj_set_align(ui_settings_button, LV_ALIGN_TOP_MID); lv_obj_clear_flag(ui_settings_button, LV_OBJ_FLAG_SCROLLABLE); /// Flags + lv_obj_set_style_radius(ui_settings_button, LV_RADIUS_CIRCLE, LV_PART_MAIN | LV_STATE_DEFAULT); ui_settings_label = lv_label_create(ui_settings_button); lv_obj_set_width(ui_settings_label, LV_SIZE_CONTENT); /// 1 @@ -243,16 +260,13 @@ void zsw_watchface_dropdown_ui_add(lv_obj_t *root_page, lv_obj_set_style_bg_opa(ui_bri_slider, 0, LV_PART_KNOB | LV_STATE_DEFAULT); lv_obj_clear_flag(ui_bri_slider, LV_OBJ_FLAG_GESTURE_BUBBLE); /// Flags - ui_LightLabel = lv_label_create(ui_bri_slider); + ui_LightLabel = lv_img_create(ui_bri_slider); lv_obj_set_width(ui_LightLabel, LV_SIZE_CONTENT); /// 1 lv_obj_set_height(ui_LightLabel, LV_SIZE_CONTENT); /// 1 lv_obj_set_x(ui_LightLabel, 0); lv_obj_set_y(ui_LightLabel, 30); lv_obj_set_align(ui_LightLabel, LV_ALIGN_CENTER); - lv_label_set_text(ui_LightLabel, ""); - lv_obj_set_style_text_color(ui_LightLabel, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_text_opa(ui_LightLabel, 255, LV_PART_MAIN | LV_STATE_DEFAULT); - lv_obj_set_style_text_font(ui_LightLabel, &ui_font_iconfont34, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_img_set_src(ui_LightLabel, ZSW_LV_IMG_USE(brightness_adjust_icon)); ui_dropdown_bg_panel = lv_obj_create(ui_down_bg_panel); lv_obj_set_width(ui_dropdown_bg_panel, 240); @@ -266,6 +280,26 @@ void zsw_watchface_dropdown_ui_add(lv_obj_t *root_page, lv_obj_set_style_border_color(ui_dropdown_bg_panel, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT); lv_obj_set_style_border_opa(ui_dropdown_bg_panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT); + ui_battery_state = lv_img_create(ui_down_bg_panel); + lv_img_set_src(ui_battery_state, ZSW_LV_IMG_USE(face_goog_20_61728_5)); + lv_obj_set_width(ui_battery_state, LV_SIZE_CONTENT); + lv_obj_set_height(ui_battery_state, LV_SIZE_CONTENT); + lv_obj_align(ui_battery_state, LV_ALIGN_TOP_MID, -22, 0); + + ui_battery_charge_state = lv_img_create(ui_battery_state); + lv_img_set_src(ui_battery_charge_state, ZSW_LV_IMG_USE(light)); + lv_obj_set_width(ui_battery_charge_state, LV_SIZE_CONTENT); + lv_obj_set_height(ui_battery_charge_state, LV_SIZE_CONTENT); + lv_obj_align(ui_battery_charge_state, LV_ALIGN_CENTER, 0, 0); + lv_obj_add_flag(ui_battery_charge_state, LV_OBJ_FLAG_HIDDEN); + + ui_remaining_time_bat_label = lv_label_create(ui_down_bg_panel); + lv_obj_set_width(ui_remaining_time_bat_label, LV_SIZE_CONTENT); + lv_obj_set_height(ui_remaining_time_bat_label, LV_SIZE_CONTENT); + lv_obj_align(ui_remaining_time_bat_label, LV_ALIGN_TOP_MID, 22, 0); + lv_label_set_text(ui_remaining_time_bat_label, ""); + lv_obj_set_style_text_font(ui_remaining_time_bat_label, &lv_font_montserrat_14_full, LV_PART_MAIN | LV_STATE_DEFAULT); + lv_obj_add_event_cb(ui_music_button, ui_event_button, LV_EVENT_ALL, NULL); lv_obj_add_event_cb(ui_flashlight_button, ui_event_button, LV_EVENT_ALL, NULL); lv_obj_add_event_cb(ui_shutdown_button, ui_event_button, LV_EVENT_ALL, NULL); @@ -278,13 +312,72 @@ void zsw_watchface_dropdown_ui_add(lv_obj_t *root_page, void zsw_watchface_dropdown_ui_set_music_info(char *track_name, char *artist) { + if (!dropdown_root) { + return; + } lv_label_set_text_fmt(ui_music_info_label, "%s - %s", artist, track_name); } +void zsw_watchface_dropdown_ui_set_battery_info(uint8_t battery_percent, bool is_charging, int tte, int ttf) +{ + int days; + int hours; + int minutes; + + if (!dropdown_root) { + return; + } + int battery_index; + + // Can't just use lv_map as I want to have a different range for each battery icon to make it look better + if (battery_percent <= 10) { + battery_index = 0; + } else if (battery_percent <= 20) { + battery_index = 1; + } else if (battery_percent <= 40) { + battery_index = 2; + } else if (battery_percent <= 60) { + battery_index = 3; + } else if (battery_percent <= 80) { + battery_index = 4; + } else if (battery_percent <= 90) { + battery_index = 5; + } else { + battery_index = 6; + } + + lv_img_set_src(ui_battery_state, face_goog_battery[battery_index]); + + if (is_charging) { + lv_obj_clear_flag(ui_battery_charge_state, LV_OBJ_FLAG_HIDDEN); + } else { + lv_obj_add_flag(ui_battery_charge_state, LV_OBJ_FLAG_HIDDEN); + } + + if (tte > 0) { + zsw_ui_utils_seconds_to_day_hour_min(tte, &days, &hours, &minutes); + if (days == 0 && hours == 0) { + lv_label_set_text_fmt(ui_remaining_time_bat_label, "%dm", minutes); + } else { + lv_label_set_text_fmt(ui_remaining_time_bat_label, "%dd %dh", days, hours); + } + } else if (ttf > 0) { + zsw_ui_utils_seconds_to_day_hour_min(ttf, &days, &hours, &minutes); + if (days == 0 && hours == 0) { + lv_label_set_text_fmt(ui_remaining_time_bat_label, "%dm", minutes); + } else { + // Charging should never take more than 24 hours, hence hour min is enough + lv_label_set_text_fmt(ui_remaining_time_bat_label, "%dh %dm", hours, minutes); + } + } else { + lv_label_set_text_fmt(ui_remaining_time_bat_label, "%d%%", battery_percent); + } +} + void zsw_watchface_dropdown_ui_remove(void) { lv_obj_remove_event_cb(dropdown_root, on_lvgl_screen_gesture_event_callback); lv_obj_del(ui_down_bg_panel); - ui_down_bg_panel = NULL; + dropdown_root = NULL; is_shown = false; } \ No newline at end of file diff --git a/app/src/ui/watchfaces/zsw_watchface_dropdown_ui.h b/app/src/ui/watchfaces/zsw_watchface_dropdown_ui.h index 5f646f1f..5c5b9f32 100644 --- a/app/src/ui/watchfaces/zsw_watchface_dropdown_ui.h +++ b/app/src/ui/watchfaces/zsw_watchface_dropdown_ui.h @@ -2,4 +2,5 @@ void zsw_watchface_dropdown_ui_add(lv_obj_t *root_page, watchface_app_evt_listener evt_cb); void zsw_watchface_dropdown_ui_set_music_info(char *track_name, char *artist); +void zsw_watchface_dropdown_ui_set_battery_info(uint8_t battery_percent, bool is_charging, int tte, int ttf); void zsw_watchface_dropdown_ui_remove(void);