From a1db9fca136493eef38e536abaa660dd6ce23e57 Mon Sep 17 00:00:00 2001 From: minacode Date: Wed, 16 Feb 2022 13:34:14 +0100 Subject: remove unused reference diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index 00a394f..c7ceed3 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -34,7 +34,6 @@ NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask, : systemTask {systemTask}, bleController {bleController}, dateTimeController {dateTimeController}, - notificationManager {notificationManager}, spiNorFlash {spiNorFlash}, fs {fs}, dfuService {systemTask, bleController, spiNorFlash}, diff --git a/src/components/ble/NimbleController.h b/src/components/ble/NimbleController.h index 2b300e6..6c40974 100644 --- a/src/components/ble/NimbleController.h +++ b/src/components/ble/NimbleController.h @@ -93,7 +93,6 @@ namespace Pinetime { Pinetime::System::SystemTask& systemTask; Pinetime::Controllers::Ble& bleController; DateTime& dateTimeController; - Pinetime::Controllers::NotificationManager& notificationManager; Pinetime::Drivers::SpiNorFlash& spiNorFlash; Pinetime::Controllers::FS& fs; Pinetime::Controllers::DfuService dfuService; -- cgit v0.10.2 From ea14c580ca6296cb93facf526d65a2db0e3ff1b0 Mon Sep 17 00:00:00 2001 From: mabuch Date: Sat, 12 Mar 2022 17:55:54 +0100 Subject: Rename PineTimeStyle to WatchFacePineTimeStyle diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ff0c9b0..2f7df3a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -456,7 +456,7 @@ list(APPEND SOURCE_FILES displayapp/screens/WatchFaceAnalog.cpp displayapp/screens/WatchFaceDigital.cpp displayapp/screens/WatchFaceTerminal.cpp - displayapp/screens/PineTimeStyle.cpp + displayapp/screens/WatchFacePineTimeStyle.cpp ## diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index fd74683..693e42a 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -11,7 +11,7 @@ #include "displayapp/screens/WatchFaceDigital.h" #include "displayapp/screens/WatchFaceTerminal.h" #include "displayapp/screens/WatchFaceAnalog.h" -#include "displayapp/screens/PineTimeStyle.h" +#include "displayapp/screens/WatchFacePineTimeStyle.h" using namespace Pinetime::Applications::Screens; @@ -40,7 +40,7 @@ Clock::Clock(DisplayApp* app, return WatchFaceAnalogScreen(); break; case 2: - return PineTimeStyleScreen(); + return WatchFacePineTimeStyleScreen(); break; case 3: return WatchFaceTerminalScreen(); @@ -79,8 +79,8 @@ std::unique_ptr Clock::WatchFaceAnalogScreen() { app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); } -std::unique_ptr Clock::PineTimeStyleScreen() { - return std::make_unique( +std::unique_ptr Clock::WatchFacePineTimeStyleScreen() { + return std::make_unique( app, dateTimeController, batteryController, bleController, notificatioManager, settingsController, motionController); } diff --git a/src/displayapp/screens/Clock.h b/src/displayapp/screens/Clock.h index 50996a7..1ba752c 100644 --- a/src/displayapp/screens/Clock.h +++ b/src/displayapp/screens/Clock.h @@ -46,7 +46,7 @@ namespace Pinetime { std::unique_ptr screen; std::unique_ptr WatchFaceDigitalScreen(); std::unique_ptr WatchFaceAnalogScreen(); - std::unique_ptr PineTimeStyleScreen(); + std::unique_ptr WatchFacePineTimeStyleScreen(); std::unique_ptr WatchFaceTerminalScreen(); }; } diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp deleted file mode 100644 index 44bf47a..0000000 --- a/src/displayapp/screens/PineTimeStyle.cpp +++ /dev/null @@ -1,601 +0,0 @@ -/* - * This file is part of the Infinitime distribution (https://github.com/InfiniTimeOrg/Infinitime). - * Copyright (c) 2021 Kieran Cawthray. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * PineTimeStyle watchface for Infinitime created by Kieran Cawthray - * Based on WatchFaceDigital - * Style/layout copied from TimeStyle for Pebble by Dan Tilden (github.com/tilden) - */ - -#include "displayapp/screens/PineTimeStyle.h" -#include -#include -#include -#include -#include "displayapp/screens/BatteryIcon.h" -#include "displayapp/screens/BleIcon.h" -#include "displayapp/screens/NotificationIcon.h" -#include "displayapp/screens/Symbols.h" -#include "components/battery/BatteryController.h" -#include "components/ble/BleController.h" -#include "components/ble/NotificationManager.h" -#include "components/motion/MotionController.h" -#include "components/settings/Settings.h" -#include "displayapp/DisplayApp.h" - -using namespace Pinetime::Applications::Screens; - -namespace { - void event_handler(lv_obj_t* obj, lv_event_t event) { - auto* screen = static_cast(obj->user_data); - screen->UpdateSelected(obj, event); - } - - bool IsBleIconVisible(bool isRadioEnabled, bool isConnected) { - if(!isRadioEnabled) { - return true; - } - return isConnected; - } -} - -PineTimeStyle::PineTimeStyle(DisplayApp* app, - Controllers::DateTime& dateTimeController, - Controllers::Battery& batteryController, - Controllers::Ble& bleController, - Controllers::NotificationManager& notificatioManager, - Controllers::Settings& settingsController, - Controllers::MotionController& motionController) - : Screen(app), - currentDateTime {{}}, - dateTimeController {dateTimeController}, - batteryController {batteryController}, - bleController {bleController}, - notificatioManager {notificatioManager}, - settingsController {settingsController}, - motionController {motionController} { - - // Create a 200px wide background rectangle - timebar = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorBG())); - lv_obj_set_style_local_radius(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); - lv_obj_set_size(timebar, 200, 240); - lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 0); - - // Display the time - timeDD1 = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorTime())); - lv_label_set_text_static(timeDD1, "00"); - lv_obj_align(timeDD1, timebar, LV_ALIGN_IN_TOP_MID, 5, 5); - - timeDD2 = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_font(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorTime())); - lv_label_set_text_static(timeDD2, "00"); - lv_obj_align(timeDD2, timebar, LV_ALIGN_IN_BOTTOM_MID, 5, -5); - - timeAMPM = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorTime())); - lv_obj_set_style_local_text_line_space(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, -3); - lv_label_set_text_static(timeAMPM, ""); - lv_obj_align(timeAMPM, timebar, LV_ALIGN_IN_BOTTOM_LEFT, 2, -20); - - // Create a 40px wide bar down the right side of the screen - sidebar = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorBar())); - lv_obj_set_style_local_radius(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); - lv_obj_set_size(sidebar, 40, 240); - lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); - - // Display icons - batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_label_set_text_static(batteryIcon, Symbols::batteryFull); - lv_obj_align(batteryIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 2); - lv_obj_set_auto_realign(batteryIcon, true); - - bleIcon = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(bleIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); - lv_label_set_text_static(bleIcon, ""); - - notificationIcon = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(notificationIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); - lv_label_set_text_static(notificationIcon, ""); - - // Calendar icon - calendarOuter = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(calendarOuter, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_obj_set_style_local_radius(calendarOuter, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); - lv_obj_set_size(calendarOuter, 34, 34); - lv_obj_align(calendarOuter, sidebar, LV_ALIGN_CENTER, 0, 0); - - calendarInner = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(calendarInner, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); - lv_obj_set_style_local_radius(calendarInner, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); - lv_obj_set_size(calendarInner, 27, 27); - lv_obj_align(calendarInner, calendarOuter, LV_ALIGN_CENTER, 0, 0); - - calendarBar1 = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(calendarBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_obj_set_style_local_radius(calendarBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); - lv_obj_set_size(calendarBar1, 3, 12); - lv_obj_align(calendarBar1, calendarOuter, LV_ALIGN_IN_TOP_MID, -6, -3); - - calendarBar2 = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(calendarBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_obj_set_style_local_radius(calendarBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); - lv_obj_set_size(calendarBar2, 3, 12); - lv_obj_align(calendarBar2, calendarOuter, LV_ALIGN_IN_TOP_MID, 6, -3); - - calendarCrossBar1 = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(calendarCrossBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_obj_set_style_local_radius(calendarCrossBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); - lv_obj_set_size(calendarCrossBar1, 8, 3); - lv_obj_align(calendarCrossBar1, calendarBar1, LV_ALIGN_IN_BOTTOM_MID, 0, 0); - - calendarCrossBar2 = lv_obj_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_bg_color(calendarCrossBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_obj_set_style_local_radius(calendarCrossBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); - lv_obj_set_size(calendarCrossBar2, 8, 3); - lv_obj_align(calendarCrossBar2, calendarBar2, LV_ALIGN_IN_BOTTOM_MID, 0, 0); - - // Display date - dateDayOfWeek = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(dateDayOfWeek, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_label_set_text_static(dateDayOfWeek, "THU"); - lv_obj_align(dateDayOfWeek, sidebar, LV_ALIGN_CENTER, 0, -34); - - dateDay = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_label_set_text_static(dateDay, "25"); - lv_obj_align(dateDay, sidebar, LV_ALIGN_CENTER, 0, 3); - - dateMonth = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(dateMonth, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_label_set_text_static(dateMonth, "MAR"); - lv_obj_align(dateMonth, sidebar, LV_ALIGN_CENTER, 0, 32); - - // Step count gauge - if (settingsController.GetPTSColorBar() == Pinetime::Controllers::Settings::Colors::White) { - needle_colors[0] = LV_COLOR_BLACK; - } else { - needle_colors[0] = LV_COLOR_WHITE; - } - stepGauge = lv_gauge_create(lv_scr_act(), nullptr); - lv_gauge_set_needle_count(stepGauge, 1, needle_colors); - lv_obj_set_size(stepGauge, 40, 40); - lv_obj_align(stepGauge, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, 0); - lv_gauge_set_scale(stepGauge, 360, 11, 0); - lv_gauge_set_angle_offset(stepGauge, 180); - lv_gauge_set_critical_value(stepGauge, 100); - lv_gauge_set_range(stepGauge, 0, 100); - lv_gauge_set_value(stepGauge, 0, 0); - - lv_obj_set_style_local_pad_right(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); - lv_obj_set_style_local_pad_left(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); - lv_obj_set_style_local_pad_bottom(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); - lv_obj_set_style_local_line_opa(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_COVER); - lv_obj_set_style_local_scale_width(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 4); - lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 4); - lv_obj_set_style_local_line_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_obj_set_style_local_line_opa(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, LV_OPA_COVER); - lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 3); - lv_obj_set_style_local_pad_inner(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); - - backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_click(backgroundLabel, true); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - - btnNextTime = lv_btn_create(lv_scr_act(), nullptr); - btnNextTime->user_data = this; - lv_obj_set_size(btnNextTime, 60, 60); - lv_obj_align(btnNextTime, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -15, -80); - lv_obj_set_style_local_bg_opa(btnNextTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); - lv_obj_set_style_local_value_str(btnNextTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, ">"); - lv_obj_set_event_cb(btnNextTime, event_handler); - lv_obj_set_hidden(btnNextTime, true); - - btnPrevTime = lv_btn_create(lv_scr_act(), nullptr); - btnPrevTime->user_data = this; - lv_obj_set_size(btnPrevTime, 60, 60); - lv_obj_align(btnPrevTime, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 15, -80); - lv_obj_set_style_local_bg_opa(btnPrevTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); - lv_obj_set_style_local_value_str(btnPrevTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); - lv_obj_set_event_cb(btnPrevTime, event_handler); - lv_obj_set_hidden(btnPrevTime, true); - - btnNextBar = lv_btn_create(lv_scr_act(), nullptr); - btnNextBar->user_data = this; - lv_obj_set_size(btnNextBar, 60, 60); - lv_obj_align(btnNextBar, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -15, 0); - lv_obj_set_style_local_bg_opa(btnNextBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); - lv_obj_set_style_local_value_str(btnNextBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, ">"); - lv_obj_set_event_cb(btnNextBar, event_handler); - lv_obj_set_hidden(btnNextBar, true); - - btnPrevBar = lv_btn_create(lv_scr_act(), nullptr); - btnPrevBar->user_data = this; - lv_obj_set_size(btnPrevBar, 60, 60); - lv_obj_align(btnPrevBar, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 15, 0); - lv_obj_set_style_local_bg_opa(btnPrevBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); - lv_obj_set_style_local_value_str(btnPrevBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); - lv_obj_set_event_cb(btnPrevBar, event_handler); - lv_obj_set_hidden(btnPrevBar, true); - - btnNextBG = lv_btn_create(lv_scr_act(), nullptr); - btnNextBG->user_data = this; - lv_obj_set_size(btnNextBG, 60, 60); - lv_obj_align(btnNextBG, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -15, 80); - lv_obj_set_style_local_bg_opa(btnNextBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); - lv_obj_set_style_local_value_str(btnNextBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, ">"); - lv_obj_set_event_cb(btnNextBG, event_handler); - lv_obj_set_hidden(btnNextBG, true); - - btnPrevBG = lv_btn_create(lv_scr_act(), nullptr); - btnPrevBG->user_data = this; - lv_obj_set_size(btnPrevBG, 60, 60); - lv_obj_align(btnPrevBG, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 15, 80); - lv_obj_set_style_local_bg_opa(btnPrevBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); - lv_obj_set_style_local_value_str(btnPrevBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); - lv_obj_set_event_cb(btnPrevBG, event_handler); - lv_obj_set_hidden(btnPrevBG, true); - - btnReset = lv_btn_create(lv_scr_act(), nullptr); - btnReset->user_data = this; - lv_obj_set_size(btnReset, 60, 60); - lv_obj_align(btnReset, lv_scr_act(), LV_ALIGN_CENTER, 0, 80); - lv_obj_set_style_local_bg_opa(btnReset, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); - lv_obj_set_style_local_value_str(btnReset, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "Rst"); - lv_obj_set_event_cb(btnReset, event_handler); - lv_obj_set_hidden(btnReset, true); - - btnRandom = lv_btn_create(lv_scr_act(), nullptr); - btnRandom->user_data = this; - lv_obj_set_size(btnRandom, 60, 60); - lv_obj_align(btnRandom, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); - lv_obj_set_style_local_bg_opa(btnRandom, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); - lv_obj_set_style_local_value_str(btnRandom, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "Rnd"); - lv_obj_set_event_cb(btnRandom, event_handler); - lv_obj_set_hidden(btnRandom, true); - - btnClose = lv_btn_create(lv_scr_act(), nullptr); - btnClose->user_data = this; - lv_obj_set_size(btnClose, 60, 60); - lv_obj_align(btnClose, lv_scr_act(), LV_ALIGN_CENTER, 0, -80); - lv_obj_set_style_local_bg_opa(btnClose, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); - lv_obj_set_style_local_value_str(btnClose, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "X"); - lv_obj_set_event_cb(btnClose, event_handler); - lv_obj_set_hidden(btnClose, true); - - btnSet = lv_btn_create(lv_scr_act(), nullptr); - btnSet->user_data = this; - lv_obj_set_height(btnSet, 150); - lv_obj_set_width(btnSet, 150); - lv_obj_align(btnSet, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); - lv_obj_set_style_local_radius(btnSet, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30); - lv_obj_set_style_local_bg_opa(btnSet, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); - lv_obj_set_event_cb(btnSet, event_handler); - lbl_btnSet = lv_label_create(btnSet, nullptr); - lv_obj_set_style_local_text_font(lbl_btnSet, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); - lv_label_set_text_static(lbl_btnSet, Symbols::settings); - lv_obj_set_hidden(btnSet, true); - - taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); - Refresh(); -} - -PineTimeStyle::~PineTimeStyle() { - lv_task_del(taskRefresh); - lv_obj_clean(lv_scr_act()); -} - -bool PineTimeStyle::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - if ((event == Pinetime::Applications::TouchEvents::LongTap) && lv_obj_get_hidden(btnRandom)) { - lv_obj_set_hidden(btnSet, false); - savedTick = lv_tick_get(); - return true; - } - if ((event == Pinetime::Applications::TouchEvents::DoubleTap) && (lv_obj_get_hidden(btnRandom) == false)) { - return true; - } - return false; -} - -void PineTimeStyle::CloseMenu() { - settingsController.SaveSettings(); - lv_obj_set_hidden(btnNextTime, true); - lv_obj_set_hidden(btnPrevTime, true); - lv_obj_set_hidden(btnNextBar, true); - lv_obj_set_hidden(btnPrevBar, true); - lv_obj_set_hidden(btnNextBG, true); - lv_obj_set_hidden(btnPrevBG, true); - lv_obj_set_hidden(btnReset, true); - lv_obj_set_hidden(btnRandom, true); - lv_obj_set_hidden(btnClose, true); -} - -bool PineTimeStyle::OnButtonPushed() { - if (!lv_obj_get_hidden(btnClose)) { - CloseMenu(); - return true; - } - return false; -} - -void PineTimeStyle::SetBatteryIcon() { - auto batteryPercent = batteryPercentRemaining.Get(); - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); -} - - -void PineTimeStyle::AlignIcons() { - bool isBleIconVisible = IsBleIconVisible(bleRadioEnabled.Get(), bleState.Get()); - if (notificationState.Get() && isBleIconVisible) { - lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 8, 25); - lv_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, -8, 25); - } else if (notificationState.Get() && !isBleIconVisible) { - lv_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25); - } else { - lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25); - } -} - -void PineTimeStyle::Refresh() { - isCharging = batteryController.IsCharging(); - if (isCharging.IsUpdated()) { - if (isCharging.Get()) { - lv_label_set_text_static(batteryIcon, Symbols::plug); - } else { - SetBatteryIcon(); - } - } - if (!isCharging.Get()) { - batteryPercentRemaining = batteryController.PercentRemaining(); - if (batteryPercentRemaining.IsUpdated()) { - SetBatteryIcon(); - } - } - - bleState = bleController.IsConnected(); - bleRadioEnabled = bleController.IsRadioEnabled(); - if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) { - lv_label_set_text(bleIcon, BleIcon::GetIcon(bleRadioEnabled.Get(), bleState.Get())); - AlignIcons(); - } - - notificationState = notificatioManager.AreNewNotificationsAvailable(); - if (notificationState.IsUpdated()) { - lv_label_set_text_static(notificationIcon, NotificationIcon::GetIcon(notificationState.Get())); - AlignIcons(); - } - - currentDateTime = dateTimeController.CurrentDateTime(); - if (currentDateTime.IsUpdated()) { - auto newDateTime = currentDateTime.Get(); - - auto dp = date::floor(newDateTime); - auto time = date::make_time(newDateTime - dp); - auto yearMonthDay = date::year_month_day(dp); - - auto year = static_cast(yearMonthDay.year()); - auto month = static_cast(static_cast(yearMonthDay.month())); - auto day = static_cast(yearMonthDay.day()); - auto dayOfWeek = static_cast(date::weekday(yearMonthDay).iso_encoding()); - - uint8_t hour = time.hours().count(); - uint8_t minute = time.minutes().count(); - - if (displayedHour != hour || displayedMinute != minute) { - displayedHour = hour; - displayedMinute = minute; - - if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { - char ampmChar[4] = "A\nM"; - if (hour == 0) { - hour = 12; - } else if (hour == 12) { - ampmChar[0] = 'P'; - } else if (hour > 12) { - hour = hour - 12; - ampmChar[0] = 'P'; - } - lv_label_set_text(timeAMPM, ampmChar); - // Should be padded with blank spaces, but the space character doesn't exist in the font - lv_label_set_text_fmt(timeDD1, "%02d", hour); - lv_label_set_text_fmt(timeDD2, "%02d", minute); - } else { - lv_label_set_text_fmt(timeDD1, "%02d", hour); - lv_label_set_text_fmt(timeDD2, "%02d", minute); - } - } - - if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { - lv_label_set_text_fmt(dateDayOfWeek, "%s", dateTimeController.DayOfWeekShortToString()); - lv_label_set_text_fmt(dateDay, "%d", day); - lv_obj_realign(dateDay); - lv_label_set_text_fmt(dateMonth, "%s", dateTimeController.MonthShortToString()); - - currentYear = year; - currentMonth = month; - currentDayOfWeek = dayOfWeek; - currentDay = day; - } - } - - stepCount = motionController.NbSteps(); - motionSensorOk = motionController.IsSensorOk(); - if (stepCount.IsUpdated() || motionSensorOk.IsUpdated()) { - lv_gauge_set_value(stepGauge, 0, (stepCount.Get() / (settingsController.GetStepsGoal() / 100))); - lv_obj_realign(stepGauge); - if (stepCount.Get() > settingsController.GetStepsGoal()) { - lv_obj_set_style_local_line_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); - lv_obj_set_style_local_scale_grad_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); - } - } - if (!lv_obj_get_hidden(btnSet)) { - if ((savedTick > 0) && (lv_tick_get() - savedTick > 3000)) { - lv_obj_set_hidden(btnSet, true); - savedTick = 0; - } - } -} - -void PineTimeStyle::UpdateSelected(lv_obj_t* object, lv_event_t event) { - auto valueTime = settingsController.GetPTSColorTime(); - auto valueBar = settingsController.GetPTSColorBar(); - auto valueBG = settingsController.GetPTSColorBG(); - - if (event == LV_EVENT_CLICKED) { - if (object == btnNextTime) { - valueTime = GetNext(valueTime); - if (valueTime == valueBG) { - valueTime = GetNext(valueTime); - } - settingsController.SetPTSColorTime(valueTime); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); - } - if (object == btnPrevTime) { - valueTime = GetPrevious(valueTime); - if (valueTime == valueBG) { - valueTime = GetPrevious(valueTime); - } - settingsController.SetPTSColorTime(valueTime); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); - } - if (object == btnNextBar) { - valueBar = GetNext(valueBar); - if (valueBar == Controllers::Settings::Colors::Black) { - valueBar = GetNext(valueBar); - } - if (valueBar == Controllers::Settings::Colors::White) { - needle_colors[0] = LV_COLOR_BLACK; - } else { - needle_colors[0] = LV_COLOR_WHITE; - } - settingsController.SetPTSColorBar(valueBar); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBar)); - } - if (object == btnPrevBar) { - valueBar = GetPrevious(valueBar); - if (valueBar == Controllers::Settings::Colors::Black) { - valueBar = GetPrevious(valueBar); - } - if (valueBar == Controllers::Settings::Colors::White) { - needle_colors[0] = LV_COLOR_BLACK; - } else { - needle_colors[0] = LV_COLOR_WHITE; - } - settingsController.SetPTSColorBar(valueBar); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBar)); - } - if (object == btnNextBG) { - valueBG = GetNext(valueBG); - if (valueBG == valueTime) { - valueBG = GetNext(valueBG); - } - settingsController.SetPTSColorBG(valueBG); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBG)); - } - if (object == btnPrevBG) { - valueBG = GetPrevious(valueBG); - if (valueBG == valueTime) { - valueBG = GetPrevious(valueBG); - } - settingsController.SetPTSColorBG(valueBG); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBG)); - } - if (object == btnReset) { - needle_colors[0] = LV_COLOR_WHITE; - settingsController.SetPTSColorTime(Controllers::Settings::Colors::Teal); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Teal)); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Teal)); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Teal)); - settingsController.SetPTSColorBar(Controllers::Settings::Colors::Teal); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Teal)); - settingsController.SetPTSColorBG(Controllers::Settings::Colors::Black); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Black)); - } - if (object == btnRandom) { - valueTime = static_cast(rand() % 17); - valueBar = static_cast(rand() % 17); - valueBG = static_cast(rand() % 17); - if (valueTime == valueBG) { - valueBG = GetNext(valueBG); - } - if (valueBar == Controllers::Settings::Colors::Black) { - valueBar = GetPrevious(valueBar); - } - if (valueBar == Controllers::Settings::Colors::White) { - needle_colors[0] = LV_COLOR_BLACK; - } else { - needle_colors[0] = LV_COLOR_WHITE; - } - settingsController.SetPTSColorTime(static_cast(valueTime)); - lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); - lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); - lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); - settingsController.SetPTSColorBar(static_cast(valueBar)); - lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBar)); - settingsController.SetPTSColorBG(static_cast(valueBG)); - lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBG)); - } - if (object == btnClose) { - CloseMenu(); - } - if (object == btnSet) { - lv_obj_set_hidden(btnSet, true); - lv_obj_set_hidden(btnNextTime, false); - lv_obj_set_hidden(btnPrevTime, false); - lv_obj_set_hidden(btnNextBar, false); - lv_obj_set_hidden(btnPrevBar, false); - lv_obj_set_hidden(btnNextBG, false); - lv_obj_set_hidden(btnPrevBG, false); - lv_obj_set_hidden(btnReset, false); - lv_obj_set_hidden(btnRandom, false); - lv_obj_set_hidden(btnClose, false); - } - } -} - -Pinetime::Controllers::Settings::Colors PineTimeStyle::GetNext(Pinetime::Controllers::Settings::Colors color) { - auto colorAsInt = static_cast(color); - Pinetime::Controllers::Settings::Colors nextColor; - if (colorAsInt < 16) { - nextColor = static_cast(colorAsInt + 1); - } else { - nextColor = static_cast(0); - } - return nextColor; -} - -Pinetime::Controllers::Settings::Colors PineTimeStyle::GetPrevious(Pinetime::Controllers::Settings::Colors color) { - auto colorAsInt = static_cast(color); - Pinetime::Controllers::Settings::Colors prevColor; - - if (colorAsInt > 0) { - prevColor = static_cast(colorAsInt - 1); - } else { - prevColor = static_cast(16); - } - return prevColor; -} diff --git a/src/displayapp/screens/PineTimeStyle.h b/src/displayapp/screens/PineTimeStyle.h deleted file mode 100644 index 5de9a5f..0000000 --- a/src/displayapp/screens/PineTimeStyle.h +++ /dev/null @@ -1,111 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include "displayapp/screens/Screen.h" -#include "displayapp/Colors.h" -#include "components/datetime/DateTimeController.h" -#include "components/ble/BleController.h" - -namespace Pinetime { - namespace Controllers { - class Settings; - class Battery; - class Ble; - class NotificationManager; - class HeartRateController; - class MotionController; - } - - namespace Applications { - namespace Screens { - class PineTimeStyle : public Screen { - public: - PineTimeStyle(DisplayApp* app, - Controllers::DateTime& dateTimeController, - Controllers::Battery& batteryController, - Controllers::Ble& bleController, - Controllers::NotificationManager& notificatioManager, - Controllers::Settings& settingsController, - Controllers::MotionController& motionController); - ~PineTimeStyle() override; - - bool OnTouchEvent(TouchEvents event) override; - bool OnButtonPushed() override; - - void Refresh() override; - - void UpdateSelected(lv_obj_t *object, lv_event_t event); - - private: - uint8_t displayedHour = -1; - uint8_t displayedMinute = -1; - - uint16_t currentYear = 1970; - Controllers::DateTime::Months currentMonth = Pinetime::Controllers::DateTime::Months::Unknown; - Controllers::DateTime::Days currentDayOfWeek = Pinetime::Controllers::DateTime::Days::Unknown; - uint8_t currentDay = 0; - uint32_t savedTick = 0; - - DirtyValue batteryPercentRemaining {}; - DirtyValue isCharging {}; - DirtyValue bleState {}; - DirtyValue bleRadioEnabled {}; - DirtyValue> currentDateTime {}; - DirtyValue motionSensorOk {}; - DirtyValue stepCount {}; - DirtyValue notificationState {}; - - static Pinetime::Controllers::Settings::Colors GetNext(Controllers::Settings::Colors color); - static Pinetime::Controllers::Settings::Colors GetPrevious(Controllers::Settings::Colors color); - - lv_obj_t* btnNextTime; - lv_obj_t* btnPrevTime; - lv_obj_t* btnNextBar; - lv_obj_t* btnPrevBar; - lv_obj_t* btnNextBG; - lv_obj_t* btnPrevBG; - lv_obj_t* btnReset; - lv_obj_t* btnRandom; - lv_obj_t* btnClose; - lv_obj_t* timebar; - lv_obj_t* sidebar; - lv_obj_t* timeDD1; - lv_obj_t* timeDD2; - lv_obj_t* timeAMPM; - lv_obj_t* dateDayOfWeek; - lv_obj_t* dateDay; - lv_obj_t* dateMonth; - lv_obj_t* backgroundLabel; - lv_obj_t* batteryIcon; - lv_obj_t* bleIcon; - lv_obj_t* calendarOuter; - lv_obj_t* calendarInner; - lv_obj_t* calendarBar1; - lv_obj_t* calendarBar2; - lv_obj_t* calendarCrossBar1; - lv_obj_t* calendarCrossBar2; - lv_obj_t* notificationIcon; - lv_obj_t* stepGauge; - lv_obj_t* btnSet; - lv_obj_t* lbl_btnSet; - lv_color_t needle_colors[1]; - - Controllers::DateTime& dateTimeController; - Controllers::Battery& batteryController; - Controllers::Ble& bleController; - Controllers::NotificationManager& notificatioManager; - Controllers::Settings& settingsController; - Controllers::MotionController& motionController; - - void SetBatteryIcon(); - void CloseMenu(); - void AlignIcons(); - - lv_task_t* taskRefresh; - }; - } - } -} diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.cpp b/src/displayapp/screens/WatchFacePineTimeStyle.cpp new file mode 100644 index 0000000..e032ac2 --- /dev/null +++ b/src/displayapp/screens/WatchFacePineTimeStyle.cpp @@ -0,0 +1,601 @@ +/* + * This file is part of the Infinitime distribution (https://github.com/InfiniTimeOrg/Infinitime). + * Copyright (c) 2021 Kieran Cawthray. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * PineTimeStyle watchface for Infinitime created by Kieran Cawthray + * Based on WatchFaceDigital + * Style/layout copied from TimeStyle for Pebble by Dan Tilden (github.com/tilden) + */ + +#include "displayapp/screens/WatchFacePineTimeStyle.h" +#include +#include +#include +#include +#include "displayapp/screens/BatteryIcon.h" +#include "displayapp/screens/BleIcon.h" +#include "displayapp/screens/NotificationIcon.h" +#include "displayapp/screens/Symbols.h" +#include "components/battery/BatteryController.h" +#include "components/ble/BleController.h" +#include "components/ble/NotificationManager.h" +#include "components/motion/MotionController.h" +#include "components/settings/Settings.h" +#include "displayapp/DisplayApp.h" + +using namespace Pinetime::Applications::Screens; + +namespace { + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); + screen->UpdateSelected(obj, event); + } + + bool IsBleIconVisible(bool isRadioEnabled, bool isConnected) { + if(!isRadioEnabled) { + return true; + } + return isConnected; + } +} + +WatchFacePineTimeStyle::WatchFacePineTimeStyle(DisplayApp* app, + Controllers::DateTime& dateTimeController, + Controllers::Battery& batteryController, + Controllers::Ble& bleController, + Controllers::NotificationManager& notificatioManager, + Controllers::Settings& settingsController, + Controllers::MotionController& motionController) + : Screen(app), + currentDateTime {{}}, + dateTimeController {dateTimeController}, + batteryController {batteryController}, + bleController {bleController}, + notificatioManager {notificatioManager}, + settingsController {settingsController}, + motionController {motionController} { + + // Create a 200px wide background rectangle + timebar = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorBG())); + lv_obj_set_style_local_radius(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(timebar, 200, 240); + lv_obj_align(timebar, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 0); + + // Display the time + timeDD1 = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorTime())); + lv_label_set_text_static(timeDD1, "00"); + lv_obj_align(timeDD1, timebar, LV_ALIGN_IN_TOP_MID, 5, 5); + + timeDD2 = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_font(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &open_sans_light); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorTime())); + lv_label_set_text_static(timeDD2, "00"); + lv_obj_align(timeDD2, timebar, LV_ALIGN_IN_BOTTOM_MID, 5, -5); + + timeAMPM = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorTime())); + lv_obj_set_style_local_text_line_space(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, -3); + lv_label_set_text_static(timeAMPM, ""); + lv_obj_align(timeAMPM, timebar, LV_ALIGN_IN_BOTTOM_LEFT, 2, -20); + + // Create a 40px wide bar down the right side of the screen + sidebar = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(settingsController.GetPTSColorBar())); + lv_obj_set_style_local_radius(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(sidebar, 40, 240); + lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); + + // Display icons + batteryIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_label_set_text_static(batteryIcon, Symbols::batteryFull); + lv_obj_align(batteryIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 2); + lv_obj_set_auto_realign(batteryIcon, true); + + bleIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(bleIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_label_set_text_static(bleIcon, ""); + + notificationIcon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(notificationIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); + lv_label_set_text_static(notificationIcon, ""); + + // Calendar icon + calendarOuter = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarOuter, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_obj_set_style_local_radius(calendarOuter, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarOuter, 34, 34); + lv_obj_align(calendarOuter, sidebar, LV_ALIGN_CENTER, 0, 0); + + calendarInner = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarInner, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); + lv_obj_set_style_local_radius(calendarInner, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarInner, 27, 27); + lv_obj_align(calendarInner, calendarOuter, LV_ALIGN_CENTER, 0, 0); + + calendarBar1 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_obj_set_style_local_radius(calendarBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarBar1, 3, 12); + lv_obj_align(calendarBar1, calendarOuter, LV_ALIGN_IN_TOP_MID, -6, -3); + + calendarBar2 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_obj_set_style_local_radius(calendarBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarBar2, 3, 12); + lv_obj_align(calendarBar2, calendarOuter, LV_ALIGN_IN_TOP_MID, 6, -3); + + calendarCrossBar1 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarCrossBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_obj_set_style_local_radius(calendarCrossBar1, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarCrossBar1, 8, 3); + lv_obj_align(calendarCrossBar1, calendarBar1, LV_ALIGN_IN_BOTTOM_MID, 0, 0); + + calendarCrossBar2 = lv_obj_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_bg_color(calendarCrossBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_obj_set_style_local_radius(calendarCrossBar2, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 0); + lv_obj_set_size(calendarCrossBar2, 8, 3); + lv_obj_align(calendarCrossBar2, calendarBar2, LV_ALIGN_IN_BOTTOM_MID, 0, 0); + + // Display date + dateDayOfWeek = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(dateDayOfWeek, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_label_set_text_static(dateDayOfWeek, "THU"); + lv_obj_align(dateDayOfWeek, sidebar, LV_ALIGN_CENTER, 0, -34); + + dateDay = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(dateDay, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_label_set_text_static(dateDay, "25"); + lv_obj_align(dateDay, sidebar, LV_ALIGN_CENTER, 0, 3); + + dateMonth = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_style_local_text_color(dateMonth, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_label_set_text_static(dateMonth, "MAR"); + lv_obj_align(dateMonth, sidebar, LV_ALIGN_CENTER, 0, 32); + + // Step count gauge + if (settingsController.GetPTSColorBar() == Pinetime::Controllers::Settings::Colors::White) { + needle_colors[0] = LV_COLOR_BLACK; + } else { + needle_colors[0] = LV_COLOR_WHITE; + } + stepGauge = lv_gauge_create(lv_scr_act(), nullptr); + lv_gauge_set_needle_count(stepGauge, 1, needle_colors); + lv_obj_set_size(stepGauge, 40, 40); + lv_obj_align(stepGauge, sidebar, LV_ALIGN_IN_BOTTOM_MID, 0, 0); + lv_gauge_set_scale(stepGauge, 360, 11, 0); + lv_gauge_set_angle_offset(stepGauge, 180); + lv_gauge_set_critical_value(stepGauge, 100); + lv_gauge_set_range(stepGauge, 0, 100); + lv_gauge_set_value(stepGauge, 0, 0); + + lv_obj_set_style_local_pad_right(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_pad_left(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_pad_bottom(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_line_opa(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_COVER); + lv_obj_set_style_local_scale_width(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 4); + lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, 4); + lv_obj_set_style_local_line_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_obj_set_style_local_line_opa(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, LV_OPA_COVER); + lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 3); + lv_obj_set_style_local_pad_inner(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); + + backgroundLabel = lv_label_create(lv_scr_act(), nullptr); + lv_obj_set_click(backgroundLabel, true); + lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); + lv_obj_set_size(backgroundLabel, 240, 240); + lv_obj_set_pos(backgroundLabel, 0, 0); + lv_label_set_text_static(backgroundLabel, ""); + + btnNextTime = lv_btn_create(lv_scr_act(), nullptr); + btnNextTime->user_data = this; + lv_obj_set_size(btnNextTime, 60, 60); + lv_obj_align(btnNextTime, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -15, -80); + lv_obj_set_style_local_bg_opa(btnNextTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); + lv_obj_set_style_local_value_str(btnNextTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, ">"); + lv_obj_set_event_cb(btnNextTime, event_handler); + lv_obj_set_hidden(btnNextTime, true); + + btnPrevTime = lv_btn_create(lv_scr_act(), nullptr); + btnPrevTime->user_data = this; + lv_obj_set_size(btnPrevTime, 60, 60); + lv_obj_align(btnPrevTime, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 15, -80); + lv_obj_set_style_local_bg_opa(btnPrevTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); + lv_obj_set_style_local_value_str(btnPrevTime, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); + lv_obj_set_event_cb(btnPrevTime, event_handler); + lv_obj_set_hidden(btnPrevTime, true); + + btnNextBar = lv_btn_create(lv_scr_act(), nullptr); + btnNextBar->user_data = this; + lv_obj_set_size(btnNextBar, 60, 60); + lv_obj_align(btnNextBar, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -15, 0); + lv_obj_set_style_local_bg_opa(btnNextBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); + lv_obj_set_style_local_value_str(btnNextBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, ">"); + lv_obj_set_event_cb(btnNextBar, event_handler); + lv_obj_set_hidden(btnNextBar, true); + + btnPrevBar = lv_btn_create(lv_scr_act(), nullptr); + btnPrevBar->user_data = this; + lv_obj_set_size(btnPrevBar, 60, 60); + lv_obj_align(btnPrevBar, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 15, 0); + lv_obj_set_style_local_bg_opa(btnPrevBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); + lv_obj_set_style_local_value_str(btnPrevBar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); + lv_obj_set_event_cb(btnPrevBar, event_handler); + lv_obj_set_hidden(btnPrevBar, true); + + btnNextBG = lv_btn_create(lv_scr_act(), nullptr); + btnNextBG->user_data = this; + lv_obj_set_size(btnNextBG, 60, 60); + lv_obj_align(btnNextBG, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -15, 80); + lv_obj_set_style_local_bg_opa(btnNextBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); + lv_obj_set_style_local_value_str(btnNextBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, ">"); + lv_obj_set_event_cb(btnNextBG, event_handler); + lv_obj_set_hidden(btnNextBG, true); + + btnPrevBG = lv_btn_create(lv_scr_act(), nullptr); + btnPrevBG->user_data = this; + lv_obj_set_size(btnPrevBG, 60, 60); + lv_obj_align(btnPrevBG, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 15, 80); + lv_obj_set_style_local_bg_opa(btnPrevBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); + lv_obj_set_style_local_value_str(btnPrevBG, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "<"); + lv_obj_set_event_cb(btnPrevBG, event_handler); + lv_obj_set_hidden(btnPrevBG, true); + + btnReset = lv_btn_create(lv_scr_act(), nullptr); + btnReset->user_data = this; + lv_obj_set_size(btnReset, 60, 60); + lv_obj_align(btnReset, lv_scr_act(), LV_ALIGN_CENTER, 0, 80); + lv_obj_set_style_local_bg_opa(btnReset, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); + lv_obj_set_style_local_value_str(btnReset, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "Rst"); + lv_obj_set_event_cb(btnReset, event_handler); + lv_obj_set_hidden(btnReset, true); + + btnRandom = lv_btn_create(lv_scr_act(), nullptr); + btnRandom->user_data = this; + lv_obj_set_size(btnRandom, 60, 60); + lv_obj_align(btnRandom, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); + lv_obj_set_style_local_bg_opa(btnRandom, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); + lv_obj_set_style_local_value_str(btnRandom, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "Rnd"); + lv_obj_set_event_cb(btnRandom, event_handler); + lv_obj_set_hidden(btnRandom, true); + + btnClose = lv_btn_create(lv_scr_act(), nullptr); + btnClose->user_data = this; + lv_obj_set_size(btnClose, 60, 60); + lv_obj_align(btnClose, lv_scr_act(), LV_ALIGN_CENTER, 0, -80); + lv_obj_set_style_local_bg_opa(btnClose, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); + lv_obj_set_style_local_value_str(btnClose, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "X"); + lv_obj_set_event_cb(btnClose, event_handler); + lv_obj_set_hidden(btnClose, true); + + btnSet = lv_btn_create(lv_scr_act(), nullptr); + btnSet->user_data = this; + lv_obj_set_height(btnSet, 150); + lv_obj_set_width(btnSet, 150); + lv_obj_align(btnSet, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); + lv_obj_set_style_local_radius(btnSet, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 30); + lv_obj_set_style_local_bg_opa(btnSet, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); + lv_obj_set_event_cb(btnSet, event_handler); + lbl_btnSet = lv_label_create(btnSet, nullptr); + lv_obj_set_style_local_text_font(lbl_btnSet, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); + lv_label_set_text_static(lbl_btnSet, Symbols::settings); + lv_obj_set_hidden(btnSet, true); + + taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); + Refresh(); +} + +WatchFacePineTimeStyle::~WatchFacePineTimeStyle() { + lv_task_del(taskRefresh); + lv_obj_clean(lv_scr_act()); +} + +bool WatchFacePineTimeStyle::OnTouchEvent(Pinetime::Applications::TouchEvents event) { + if ((event == Pinetime::Applications::TouchEvents::LongTap) && lv_obj_get_hidden(btnRandom)) { + lv_obj_set_hidden(btnSet, false); + savedTick = lv_tick_get(); + return true; + } + if ((event == Pinetime::Applications::TouchEvents::DoubleTap) && (lv_obj_get_hidden(btnRandom) == false)) { + return true; + } + return false; +} + +void WatchFacePineTimeStyle::CloseMenu() { + settingsController.SaveSettings(); + lv_obj_set_hidden(btnNextTime, true); + lv_obj_set_hidden(btnPrevTime, true); + lv_obj_set_hidden(btnNextBar, true); + lv_obj_set_hidden(btnPrevBar, true); + lv_obj_set_hidden(btnNextBG, true); + lv_obj_set_hidden(btnPrevBG, true); + lv_obj_set_hidden(btnReset, true); + lv_obj_set_hidden(btnRandom, true); + lv_obj_set_hidden(btnClose, true); +} + +bool WatchFacePineTimeStyle::OnButtonPushed() { + if (!lv_obj_get_hidden(btnClose)) { + CloseMenu(); + return true; + } + return false; +} + +void WatchFacePineTimeStyle::SetBatteryIcon() { + auto batteryPercent = batteryPercentRemaining.Get(); + lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); +} + + +void WatchFacePineTimeStyle::AlignIcons() { + bool isBleIconVisible = IsBleIconVisible(bleRadioEnabled.Get(), bleState.Get()); + if (notificationState.Get() && isBleIconVisible) { + lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 8, 25); + lv_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, -8, 25); + } else if (notificationState.Get() && !isBleIconVisible) { + lv_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25); + } else { + lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25); + } +} + +void WatchFacePineTimeStyle::Refresh() { + isCharging = batteryController.IsCharging(); + if (isCharging.IsUpdated()) { + if (isCharging.Get()) { + lv_label_set_text_static(batteryIcon, Symbols::plug); + } else { + SetBatteryIcon(); + } + } + if (!isCharging.Get()) { + batteryPercentRemaining = batteryController.PercentRemaining(); + if (batteryPercentRemaining.IsUpdated()) { + SetBatteryIcon(); + } + } + + bleState = bleController.IsConnected(); + bleRadioEnabled = bleController.IsRadioEnabled(); + if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) { + lv_label_set_text(bleIcon, BleIcon::GetIcon(bleRadioEnabled.Get(), bleState.Get())); + AlignIcons(); + } + + notificationState = notificatioManager.AreNewNotificationsAvailable(); + if (notificationState.IsUpdated()) { + lv_label_set_text_static(notificationIcon, NotificationIcon::GetIcon(notificationState.Get())); + AlignIcons(); + } + + currentDateTime = dateTimeController.CurrentDateTime(); + if (currentDateTime.IsUpdated()) { + auto newDateTime = currentDateTime.Get(); + + auto dp = date::floor(newDateTime); + auto time = date::make_time(newDateTime - dp); + auto yearMonthDay = date::year_month_day(dp); + + auto year = static_cast(yearMonthDay.year()); + auto month = static_cast(static_cast(yearMonthDay.month())); + auto day = static_cast(yearMonthDay.day()); + auto dayOfWeek = static_cast(date::weekday(yearMonthDay).iso_encoding()); + + uint8_t hour = time.hours().count(); + uint8_t minute = time.minutes().count(); + + if (displayedHour != hour || displayedMinute != minute) { + displayedHour = hour; + displayedMinute = minute; + + if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { + char ampmChar[4] = "A\nM"; + if (hour == 0) { + hour = 12; + } else if (hour == 12) { + ampmChar[0] = 'P'; + } else if (hour > 12) { + hour = hour - 12; + ampmChar[0] = 'P'; + } + lv_label_set_text(timeAMPM, ampmChar); + // Should be padded with blank spaces, but the space character doesn't exist in the font + lv_label_set_text_fmt(timeDD1, "%02d", hour); + lv_label_set_text_fmt(timeDD2, "%02d", minute); + } else { + lv_label_set_text_fmt(timeDD1, "%02d", hour); + lv_label_set_text_fmt(timeDD2, "%02d", minute); + } + } + + if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { + lv_label_set_text_fmt(dateDayOfWeek, "%s", dateTimeController.DayOfWeekShortToString()); + lv_label_set_text_fmt(dateDay, "%d", day); + lv_obj_realign(dateDay); + lv_label_set_text_fmt(dateMonth, "%s", dateTimeController.MonthShortToString()); + + currentYear = year; + currentMonth = month; + currentDayOfWeek = dayOfWeek; + currentDay = day; + } + } + + stepCount = motionController.NbSteps(); + motionSensorOk = motionController.IsSensorOk(); + if (stepCount.IsUpdated() || motionSensorOk.IsUpdated()) { + lv_gauge_set_value(stepGauge, 0, (stepCount.Get() / (settingsController.GetStepsGoal() / 100))); + lv_obj_realign(stepGauge); + if (stepCount.Get() > settingsController.GetStepsGoal()) { + lv_obj_set_style_local_line_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); + lv_obj_set_style_local_scale_grad_color(stepGauge, LV_GAUGE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); + } + } + if (!lv_obj_get_hidden(btnSet)) { + if ((savedTick > 0) && (lv_tick_get() - savedTick > 3000)) { + lv_obj_set_hidden(btnSet, true); + savedTick = 0; + } + } +} + +void WatchFacePineTimeStyle::UpdateSelected(lv_obj_t* object, lv_event_t event) { + auto valueTime = settingsController.GetPTSColorTime(); + auto valueBar = settingsController.GetPTSColorBar(); + auto valueBG = settingsController.GetPTSColorBG(); + + if (event == LV_EVENT_CLICKED) { + if (object == btnNextTime) { + valueTime = GetNext(valueTime); + if (valueTime == valueBG) { + valueTime = GetNext(valueTime); + } + settingsController.SetPTSColorTime(valueTime); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); + } + if (object == btnPrevTime) { + valueTime = GetPrevious(valueTime); + if (valueTime == valueBG) { + valueTime = GetPrevious(valueTime); + } + settingsController.SetPTSColorTime(valueTime); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); + } + if (object == btnNextBar) { + valueBar = GetNext(valueBar); + if (valueBar == Controllers::Settings::Colors::Black) { + valueBar = GetNext(valueBar); + } + if (valueBar == Controllers::Settings::Colors::White) { + needle_colors[0] = LV_COLOR_BLACK; + } else { + needle_colors[0] = LV_COLOR_WHITE; + } + settingsController.SetPTSColorBar(valueBar); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBar)); + } + if (object == btnPrevBar) { + valueBar = GetPrevious(valueBar); + if (valueBar == Controllers::Settings::Colors::Black) { + valueBar = GetPrevious(valueBar); + } + if (valueBar == Controllers::Settings::Colors::White) { + needle_colors[0] = LV_COLOR_BLACK; + } else { + needle_colors[0] = LV_COLOR_WHITE; + } + settingsController.SetPTSColorBar(valueBar); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBar)); + } + if (object == btnNextBG) { + valueBG = GetNext(valueBG); + if (valueBG == valueTime) { + valueBG = GetNext(valueBG); + } + settingsController.SetPTSColorBG(valueBG); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBG)); + } + if (object == btnPrevBG) { + valueBG = GetPrevious(valueBG); + if (valueBG == valueTime) { + valueBG = GetPrevious(valueBG); + } + settingsController.SetPTSColorBG(valueBG); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBG)); + } + if (object == btnReset) { + needle_colors[0] = LV_COLOR_WHITE; + settingsController.SetPTSColorTime(Controllers::Settings::Colors::Teal); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Teal)); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Teal)); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Teal)); + settingsController.SetPTSColorBar(Controllers::Settings::Colors::Teal); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Teal)); + settingsController.SetPTSColorBG(Controllers::Settings::Colors::Black); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(Controllers::Settings::Colors::Black)); + } + if (object == btnRandom) { + valueTime = static_cast(rand() % 17); + valueBar = static_cast(rand() % 17); + valueBG = static_cast(rand() % 17); + if (valueTime == valueBG) { + valueBG = GetNext(valueBG); + } + if (valueBar == Controllers::Settings::Colors::Black) { + valueBar = GetPrevious(valueBar); + } + if (valueBar == Controllers::Settings::Colors::White) { + needle_colors[0] = LV_COLOR_BLACK; + } else { + needle_colors[0] = LV_COLOR_WHITE; + } + settingsController.SetPTSColorTime(static_cast(valueTime)); + lv_obj_set_style_local_text_color(timeDD1, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); + lv_obj_set_style_local_text_color(timeDD2, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); + lv_obj_set_style_local_text_color(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, Convert(valueTime)); + settingsController.SetPTSColorBar(static_cast(valueBar)); + lv_obj_set_style_local_bg_color(sidebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBar)); + settingsController.SetPTSColorBG(static_cast(valueBG)); + lv_obj_set_style_local_bg_color(timebar, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, Convert(valueBG)); + } + if (object == btnClose) { + CloseMenu(); + } + if (object == btnSet) { + lv_obj_set_hidden(btnSet, true); + lv_obj_set_hidden(btnNextTime, false); + lv_obj_set_hidden(btnPrevTime, false); + lv_obj_set_hidden(btnNextBar, false); + lv_obj_set_hidden(btnPrevBar, false); + lv_obj_set_hidden(btnNextBG, false); + lv_obj_set_hidden(btnPrevBG, false); + lv_obj_set_hidden(btnReset, false); + lv_obj_set_hidden(btnRandom, false); + lv_obj_set_hidden(btnClose, false); + } + } +} + +Pinetime::Controllers::Settings::Colors WatchFacePineTimeStyle::GetNext(Pinetime::Controllers::Settings::Colors color) { + auto colorAsInt = static_cast(color); + Pinetime::Controllers::Settings::Colors nextColor; + if (colorAsInt < 16) { + nextColor = static_cast(colorAsInt + 1); + } else { + nextColor = static_cast(0); + } + return nextColor; +} + +Pinetime::Controllers::Settings::Colors WatchFacePineTimeStyle::GetPrevious(Pinetime::Controllers::Settings::Colors color) { + auto colorAsInt = static_cast(color); + Pinetime::Controllers::Settings::Colors prevColor; + + if (colorAsInt > 0) { + prevColor = static_cast(colorAsInt - 1); + } else { + prevColor = static_cast(16); + } + return prevColor; +} diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.h b/src/displayapp/screens/WatchFacePineTimeStyle.h new file mode 100644 index 0000000..465aa70 --- /dev/null +++ b/src/displayapp/screens/WatchFacePineTimeStyle.h @@ -0,0 +1,111 @@ +#pragma once + +#include +#include +#include +#include +#include "displayapp/screens/Screen.h" +#include "displayapp/Colors.h" +#include "components/datetime/DateTimeController.h" +#include "components/ble/BleController.h" + +namespace Pinetime { + namespace Controllers { + class Settings; + class Battery; + class Ble; + class NotificationManager; + class HeartRateController; + class MotionController; + } + + namespace Applications { + namespace Screens { + class WatchFacePineTimeStyle : public Screen { + public: + WatchFacePineTimeStyle(DisplayApp* app, + Controllers::DateTime& dateTimeController, + Controllers::Battery& batteryController, + Controllers::Ble& bleController, + Controllers::NotificationManager& notificatioManager, + Controllers::Settings& settingsController, + Controllers::MotionController& motionController); + ~WatchFacePineTimeStyle() override; + + bool OnTouchEvent(TouchEvents event) override; + bool OnButtonPushed() override; + + void Refresh() override; + + void UpdateSelected(lv_obj_t *object, lv_event_t event); + + private: + uint8_t displayedHour = -1; + uint8_t displayedMinute = -1; + + uint16_t currentYear = 1970; + Controllers::DateTime::Months currentMonth = Pinetime::Controllers::DateTime::Months::Unknown; + Controllers::DateTime::Days currentDayOfWeek = Pinetime::Controllers::DateTime::Days::Unknown; + uint8_t currentDay = 0; + uint32_t savedTick = 0; + + DirtyValue batteryPercentRemaining {}; + DirtyValue isCharging {}; + DirtyValue bleState {}; + DirtyValue bleRadioEnabled {}; + DirtyValue> currentDateTime {}; + DirtyValue motionSensorOk {}; + DirtyValue stepCount {}; + DirtyValue notificationState {}; + + static Pinetime::Controllers::Settings::Colors GetNext(Controllers::Settings::Colors color); + static Pinetime::Controllers::Settings::Colors GetPrevious(Controllers::Settings::Colors color); + + lv_obj_t* btnNextTime; + lv_obj_t* btnPrevTime; + lv_obj_t* btnNextBar; + lv_obj_t* btnPrevBar; + lv_obj_t* btnNextBG; + lv_obj_t* btnPrevBG; + lv_obj_t* btnReset; + lv_obj_t* btnRandom; + lv_obj_t* btnClose; + lv_obj_t* timebar; + lv_obj_t* sidebar; + lv_obj_t* timeDD1; + lv_obj_t* timeDD2; + lv_obj_t* timeAMPM; + lv_obj_t* dateDayOfWeek; + lv_obj_t* dateDay; + lv_obj_t* dateMonth; + lv_obj_t* backgroundLabel; + lv_obj_t* batteryIcon; + lv_obj_t* bleIcon; + lv_obj_t* calendarOuter; + lv_obj_t* calendarInner; + lv_obj_t* calendarBar1; + lv_obj_t* calendarBar2; + lv_obj_t* calendarCrossBar1; + lv_obj_t* calendarCrossBar2; + lv_obj_t* notificationIcon; + lv_obj_t* stepGauge; + lv_obj_t* btnSet; + lv_obj_t* lbl_btnSet; + lv_color_t needle_colors[1]; + + Controllers::DateTime& dateTimeController; + Controllers::Battery& batteryController; + Controllers::Ble& bleController; + Controllers::NotificationManager& notificatioManager; + Controllers::Settings& settingsController; + Controllers::MotionController& motionController; + + void SetBatteryIcon(); + void CloseMenu(); + void AlignIcons(); + + lv_task_t* taskRefresh; + }; + } + } +} -- cgit v0.10.2 From 78cab3604d307d48db5d2b38b54a00bbaaaf67ec Mon Sep 17 00:00:00 2001 From: Reinhold Gschweicher Date: Mon, 21 Feb 2022 23:45:59 +0100 Subject: AlarmController: allow loss of precision for alarmTime cast Allow a loss of precision if the system clock has a lower resolution than nanoseconds. This is the case for web assembly. diff --git a/src/components/alarm/AlarmController.cpp b/src/components/alarm/AlarmController.cpp index 28b328d..11d96e7 100644 --- a/src/components/alarm/AlarmController.cpp +++ b/src/components/alarm/AlarmController.cpp @@ -54,7 +54,8 @@ void AlarmController::ScheduleAlarm() { auto now = dateTimeController.CurrentDateTime(); alarmTime = now; - time_t ttAlarmTime = std::chrono::system_clock::to_time_t(alarmTime); + time_t ttAlarmTime = std::chrono::system_clock::to_time_t( + std::chrono::time_point_cast(alarmTime)); tm* tmAlarmTime = std::localtime(&ttAlarmTime); // If the time being set has already passed today,the alarm should be set for tomorrow -- cgit v0.10.2 From 68a7016080115dd7a7eae1041eb2a75457aae0cd Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 20 Mar 2022 16:47:25 +0200 Subject: Replace lv_label_set_text where possible diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp index 879e50d..d5fc2c0 100644 --- a/src/displayapp/screens/Alarm.cpp +++ b/src/displayapp/screens/Alarm.cpp @@ -303,7 +303,7 @@ void Alarm::ShowInfo() { lv_label_set_text_fmt( txtMessage, "Time to\nalarm:\n%2lu Days\n%2lu Hours\n%2lu Minutes\n%2lu Seconds", daysToAlarm, hrsToAlarm, minToAlarm, secToAlarm); } else { - lv_label_set_text(txtMessage, "Alarm\nis not\nset."); + lv_label_set_text_static(txtMessage, "Alarm\nis not\nset."); } } @@ -317,13 +317,13 @@ void Alarm::SetRecurButtonState() { using Pinetime::Controllers::AlarmController; switch (alarmController.Recurrence()) { case AlarmController::RecurType::None: - lv_label_set_text(txtRecur, "ONCE"); + lv_label_set_text_static(txtRecur, "ONCE"); break; case AlarmController::RecurType::Daily: - lv_label_set_text(txtRecur, "DAILY"); + lv_label_set_text_static(txtRecur, "DAILY"); break; case AlarmController::RecurType::Weekdays: - lv_label_set_text(txtRecur, "MON-FRI"); + lv_label_set_text_static(txtRecur, "MON-FRI"); } } diff --git a/src/displayapp/screens/FirmwareUpdate.cpp b/src/displayapp/screens/FirmwareUpdate.cpp index 373fcae..0a8544b 100644 --- a/src/displayapp/screens/FirmwareUpdate.cpp +++ b/src/displayapp/screens/FirmwareUpdate.cpp @@ -15,7 +15,7 @@ FirmwareUpdate::FirmwareUpdate(Pinetime::Applications::DisplayApp* app, Pinetime lv_label_set_text_static(backgroundLabel, ""); titleLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(titleLabel, "Firmware update"); + lv_label_set_text_static(titleLabel, "Firmware update"); lv_obj_set_auto_realign(titleLabel, true); lv_obj_align(titleLabel, nullptr, LV_ALIGN_IN_TOP_MID, 0, 50); @@ -27,7 +27,7 @@ FirmwareUpdate::FirmwareUpdate(Pinetime::Applications::DisplayApp* app, Pinetime lv_bar_set_value(bar1, 0, LV_ANIM_OFF); percentLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(percentLabel, "Waiting..."); + lv_label_set_text_static(percentLabel, "Waiting..."); lv_obj_set_auto_realign(percentLabel, true); lv_obj_align(percentLabel, bar1, LV_ALIGN_OUT_TOP_MID, 0, 60); taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); @@ -81,20 +81,19 @@ void FirmwareUpdate::DisplayProgression() const { float current = bleController.FirmwareUpdateCurrentBytes() / 1024.0f; float total = bleController.FirmwareUpdateTotalBytes() / 1024.0f; int16_t pc = (current / total) * 100.0f; - sprintf(percentStr, "%d %%", pc); - lv_label_set_text(percentLabel, percentStr); + lv_label_set_text_fmt(percentLabel, "%d %%", pc); lv_bar_set_value(bar1, pc, LV_ANIM_OFF); } void FirmwareUpdate::UpdateValidated() { lv_label_set_recolor(percentLabel, true); - lv_label_set_text(percentLabel, "#00ff00 Image Ok!#"); + lv_label_set_text_static(percentLabel, "#00ff00 Image Ok!#"); } void FirmwareUpdate::UpdateError() { lv_label_set_recolor(percentLabel, true); - lv_label_set_text(percentLabel, "#ff0000 Error!#"); + lv_label_set_text_static(percentLabel, "#ff0000 Error!#"); startTime = xTaskGetTickCount(); } diff --git a/src/displayapp/screens/FirmwareUpdate.h b/src/displayapp/screens/FirmwareUpdate.h index a61178c..5156b7e 100644 --- a/src/displayapp/screens/FirmwareUpdate.h +++ b/src/displayapp/screens/FirmwareUpdate.h @@ -24,7 +24,6 @@ namespace Pinetime { lv_obj_t* bar1; lv_obj_t* percentLabel; lv_obj_t* titleLabel; - mutable char percentStr[10]; States state = States::Idle; diff --git a/src/displayapp/screens/FirmwareValidation.cpp b/src/displayapp/screens/FirmwareValidation.cpp index c7a5b27..16244ad 100644 --- a/src/displayapp/screens/FirmwareValidation.cpp +++ b/src/displayapp/screens/FirmwareValidation.cpp @@ -33,9 +33,9 @@ FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, lv_obj_set_width(labelIsValidated, 240); if (validator.IsValidated()) - lv_label_set_text(labelIsValidated, "You have already\n#00ff00 validated# this firmware#"); + lv_label_set_text_static(labelIsValidated, "You have already\n#00ff00 validated# this firmware#"); else { - lv_label_set_text(labelIsValidated, "Please #00ff00 Validate# this version or\n#ff0000 Reset# to rollback to the previous version."); + lv_label_set_text_static(labelIsValidated, "Please #00ff00 Validate# this version or\n#ff0000 Reset# to rollback to the previous version."); buttonValidate = lv_btn_create(lv_scr_act(), nullptr); buttonValidate->user_data = this; diff --git a/src/displayapp/screens/FlashLight.cpp b/src/displayapp/screens/FlashLight.cpp index c4d0264..0634187 100644 --- a/src/displayapp/screens/FlashLight.cpp +++ b/src/displayapp/screens/FlashLight.cpp @@ -45,7 +45,7 @@ FlashLight::FlashLight(Pinetime::Applications::DisplayApp* app, lv_label_set_long_mode(backgroundAction, LV_LABEL_LONG_CROP); lv_obj_set_size(backgroundAction, 240, 240); lv_obj_set_pos(backgroundAction, 0, 0); - lv_label_set_text(backgroundAction, ""); + lv_label_set_text_static(backgroundAction, ""); lv_obj_set_click(backgroundAction, true); backgroundAction->user_data = this; lv_obj_set_event_cb(backgroundAction, event_handler); diff --git a/src/displayapp/screens/HeartRate.cpp b/src/displayapp/screens/HeartRate.cpp index 513c40b..89b43bb 100644 --- a/src/displayapp/screens/HeartRate.cpp +++ b/src/displayapp/screens/HeartRate.cpp @@ -41,16 +41,16 @@ HeartRate::HeartRate(Pinetime::Applications::DisplayApp* app, else lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); - lv_label_set_text(label_hr, "000"); + lv_label_set_text_static(label_hr, "000"); lv_obj_align(label_hr, nullptr, LV_ALIGN_CENTER, 0, -40); label_bpm = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(label_bpm, "Heart rate BPM"); + lv_label_set_text_static(label_bpm, "Heart rate BPM"); lv_obj_align(label_bpm, label_hr, LV_ALIGN_OUT_TOP_MID, 0, -20); label_status = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(label_status, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222222)); - lv_label_set_text(label_status, ToString(Pinetime::Controllers::HeartRateController::States::NotEnoughData)); + lv_label_set_text_static(label_status, ToString(Pinetime::Controllers::HeartRateController::States::NotEnoughData)); lv_obj_align(label_status, label_hr, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); @@ -81,13 +81,13 @@ void HeartRate::Refresh() { case Controllers::HeartRateController::States::NoTouch: case Controllers::HeartRateController::States::NotEnoughData: // case Controllers::HeartRateController::States::Stopped: - lv_label_set_text(label_hr, "000"); + lv_label_set_text_static(label_hr, "000"); break; default: lv_label_set_text_fmt(label_hr, "%03d", heartRateController.HeartRate()); } - lv_label_set_text(label_status, ToString(state)); + lv_label_set_text_static(label_status, ToString(state)); lv_obj_align(label_status, label_hr, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); } @@ -109,7 +109,7 @@ void HeartRate::OnStartStopEvent(lv_event_t event) { void HeartRate::UpdateStartStopButton(bool isRunning) { if (isRunning) - lv_label_set_text(label_startStop, "Stop"); + lv_label_set_text_static(label_startStop, "Stop"); else - lv_label_set_text(label_startStop, "Start"); + lv_label_set_text_static(label_startStop, "Start"); } diff --git a/src/displayapp/screens/Motion.cpp b/src/displayapp/screens/Motion.cpp index 23eb276..799dcb3 100644 --- a/src/displayapp/screens/Motion.cpp +++ b/src/displayapp/screens/Motion.cpp @@ -35,7 +35,7 @@ Motion::Motion(Pinetime::Applications::DisplayApp* app, Controllers::MotionContr labelStep = lv_label_create(lv_scr_act(), NULL); lv_obj_align(labelStep, chart, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); - lv_label_set_text(labelStep, "Steps ---"); + lv_label_set_text_static(labelStep, "Steps ---"); taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index 9f17b95..dd4609c 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -62,7 +62,7 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus lv_obj_align(btnVolDown, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_obj_add_style(btnVolDown, LV_STATE_DEFAULT, &btn_style); label = lv_label_create(btnVolDown, nullptr); - lv_label_set_text(label, Symbols::volumDown); + lv_label_set_text_static(label, Symbols::volumDown); lv_obj_set_hidden(btnVolDown, true); btnVolUp = lv_btn_create(lv_scr_act(), nullptr); @@ -72,7 +72,7 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus lv_obj_align(btnVolUp, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); lv_obj_add_style(btnVolUp, LV_STATE_DEFAULT, &btn_style); label = lv_label_create(btnVolUp, nullptr); - lv_label_set_text(label, Symbols::volumUp); + lv_label_set_text_static(label, Symbols::volumUp); lv_obj_set_hidden(btnVolUp, true); btnPrev = lv_btn_create(lv_scr_act(), nullptr); @@ -82,7 +82,7 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus lv_obj_align(btnPrev, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_obj_add_style(btnPrev, LV_STATE_DEFAULT, &btn_style); label = lv_label_create(btnPrev, nullptr); - lv_label_set_text(label, Symbols::stepBackward); + lv_label_set_text_static(label, Symbols::stepBackward); btnNext = lv_btn_create(lv_scr_act(), nullptr); btnNext->user_data = this; @@ -91,7 +91,7 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus lv_obj_align(btnNext, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); lv_obj_add_style(btnNext, LV_STATE_DEFAULT, &btn_style); label = lv_label_create(btnNext, nullptr); - lv_label_set_text(label, Symbols::stepForward); + lv_label_set_text_static(label, Symbols::stepForward); btnPlayPause = lv_btn_create(lv_scr_act(), nullptr); btnPlayPause->user_data = this; @@ -100,12 +100,12 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus lv_obj_align(btnPlayPause, nullptr, LV_ALIGN_IN_BOTTOM_MID, 0, 0); lv_obj_add_style(btnPlayPause, LV_STATE_DEFAULT, &btn_style); txtPlayPause = lv_label_create(btnPlayPause, nullptr); - lv_label_set_text(txtPlayPause, Symbols::play); + lv_label_set_text_static(txtPlayPause, Symbols::play); txtTrackDuration = lv_label_create(lv_scr_act(), nullptr); lv_label_set_long_mode(txtTrackDuration, LV_LABEL_LONG_SROLL); lv_obj_align(txtTrackDuration, nullptr, LV_ALIGN_IN_TOP_LEFT, 12, 20); - lv_label_set_text(txtTrackDuration, "--:--/--:--"); + lv_label_set_text_static(txtTrackDuration, "--:--/--:--"); lv_label_set_align(txtTrackDuration, LV_ALIGN_IN_LEFT_MID); lv_obj_set_width(txtTrackDuration, LV_HOR_RES); @@ -117,7 +117,7 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus lv_obj_align(txtArtist, nullptr, LV_ALIGN_IN_LEFT_MID, 12, MIDDLE_OFFSET + 1 * FONT_HEIGHT); lv_label_set_align(txtArtist, LV_ALIGN_IN_LEFT_MID); lv_obj_set_width(txtArtist, LV_HOR_RES - 12); - lv_label_set_text(txtArtist, "Artist Name"); + lv_label_set_text_static(txtArtist, "Artist Name"); txtTrack = lv_label_create(lv_scr_act(), nullptr); lv_label_set_long_mode(txtTrack, LV_LABEL_LONG_SROLL_CIRC); @@ -125,7 +125,7 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus lv_label_set_align(txtTrack, LV_ALIGN_IN_LEFT_MID); lv_obj_set_width(txtTrack, LV_HOR_RES - 12); - lv_label_set_text(txtTrack, "This is a very long getTrack name"); + lv_label_set_text_static(txtTrack, "This is a very long getTrack name"); /** Init animation */ imgDisc = lv_img_create(lv_scr_act(), nullptr); @@ -187,7 +187,7 @@ void Music::Refresh() { } if (playing == Pinetime::Controllers::MusicService::MusicStatus::Playing) { - lv_label_set_text(txtPlayPause, Symbols::pause); + lv_label_set_text_static(txtPlayPause, Symbols::pause); if (xTaskGetTickCount() - 1024 >= lastIncrement) { if (frameB) { @@ -211,31 +211,27 @@ void Music::Refresh() { UpdateLength(); } } else { - lv_label_set_text(txtPlayPause, Symbols::play); + lv_label_set_text_static(txtPlayPause, Symbols::play); } } void Music::UpdateLength() { if (totalLength > (99 * 60 * 60)) { - lv_label_set_text(txtTrackDuration, "Inf/Inf"); + lv_label_set_text_static(txtTrackDuration, "Inf/Inf"); } else if (totalLength > (99 * 60)) { - char timer[12]; - sprintf(timer, - "%02d:%02d/%02d:%02d", - (currentLength / (60 * 60)) % 100, - ((currentLength % (60 * 60)) / 60) % 100, - (totalLength / (60 * 60)) % 100, - ((totalLength % (60 * 60)) / 60) % 100); - lv_label_set_text(txtTrackDuration, timer); + lv_label_set_text_fmt(txtTrackDuration, + "%02d:%02d/%02d:%02d", + (currentLength / (60 * 60)) % 100, + ((currentLength % (60 * 60)) / 60) % 100, + (totalLength / (60 * 60)) % 100, + ((totalLength % (60 * 60)) / 60) % 100); } else { - char timer[12]; - sprintf(timer, - "%02d:%02d/%02d:%02d", - (currentLength / 60) % 100, - (currentLength % 60) % 100, - (totalLength / 60) % 100, - (totalLength % 60) % 100); - lv_label_set_text(txtTrackDuration, timer); + lv_label_set_text_fmt(txtTrackDuration, + "%02d:%02d/%02d:%02d", + (currentLength / 60) % 100, + (currentLength % 60) % 100, + (totalLength / 60) % 100, + (totalLength % 60) % 100); } } diff --git a/src/displayapp/screens/Navigation.cpp b/src/displayapp/screens/Navigation.cpp index 674362a..0dd0d30 100644 --- a/src/displayapp/screens/Navigation.cpp +++ b/src/displayapp/screens/Navigation.cpp @@ -134,13 +134,13 @@ Navigation::Navigation(Pinetime::Applications::DisplayApp* app, Pinetime::Contro imgFlag = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(imgFlag, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_navi_80); lv_obj_set_style_local_text_color(imgFlag, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_CYAN); - lv_label_set_text(imgFlag, iconForName("flag")); + lv_label_set_text_static(imgFlag, iconForName("flag")); lv_obj_align(imgFlag, nullptr, LV_ALIGN_CENTER, 0, -60); txtNarrative = lv_label_create(lv_scr_act(), nullptr); lv_label_set_long_mode(txtNarrative, LV_LABEL_LONG_BREAK); lv_obj_set_width(txtNarrative, LV_HOR_RES); - lv_label_set_text(txtNarrative, "Navigation"); + lv_label_set_text_static(txtNarrative, "Navigation"); lv_label_set_align(txtNarrative, LV_LABEL_ALIGN_CENTER); lv_obj_align(txtNarrative, nullptr, LV_ALIGN_CENTER, 0, 10); @@ -148,7 +148,7 @@ Navigation::Navigation(Pinetime::Applications::DisplayApp* app, Pinetime::Contro lv_label_set_long_mode(txtManDist, LV_LABEL_LONG_BREAK); lv_obj_set_style_local_text_color(txtManDist, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); lv_obj_set_width(txtManDist, LV_HOR_RES); - lv_label_set_text(txtManDist, "--M"); + lv_label_set_text_static(txtManDist, "--M"); lv_label_set_align(txtManDist, LV_LABEL_ALIGN_CENTER); lv_obj_align(txtManDist, nullptr, LV_ALIGN_CENTER, 0, 60); @@ -173,7 +173,7 @@ Navigation::~Navigation() { void Navigation::Refresh() { if (flag != navService.getFlag()) { flag = navService.getFlag(); - lv_label_set_text(imgFlag, iconForName(flag)); + lv_label_set_text_static(imgFlag, iconForName(flag)); } if (narrative != navService.getNarrative()) { diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index f9afd8c..600f748 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -229,7 +229,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_set_style_local_text_color(alert_subject, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); lv_label_set_long_mode(alert_subject, LV_LABEL_LONG_BREAK); lv_obj_set_width(alert_subject, LV_HOR_RES - 20); - lv_label_set_text(alert_subject, "Incoming call from"); + lv_label_set_text_static(alert_subject, "Incoming call from"); lv_obj_t* alert_caller = lv_label_create(container1, nullptr); lv_obj_align(alert_caller, alert_subject, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0); @@ -243,7 +243,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_set_size(bt_accept, 76, 76); lv_obj_align(bt_accept, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); label_accept = lv_label_create(bt_accept, nullptr); - lv_label_set_text(label_accept, Symbols::phone); + lv_label_set_text_static(label_accept, Symbols::phone); lv_obj_set_style_local_bg_color(bt_accept, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); bt_reject = lv_btn_create(lv_scr_act(), nullptr); @@ -252,7 +252,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_set_size(bt_reject, 76, 76); lv_obj_align(bt_reject, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0); label_reject = lv_label_create(bt_reject, nullptr); - lv_label_set_text(label_reject, Symbols::phoneSlash); + lv_label_set_text_static(label_reject, Symbols::phoneSlash); lv_obj_set_style_local_bg_color(bt_reject, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED); bt_mute = lv_btn_create(lv_scr_act(), nullptr); @@ -261,7 +261,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_set_size(bt_mute, 76, 76); lv_obj_align(bt_mute, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); label_mute = lv_label_create(bt_mute, nullptr); - lv_label_set_text(label_mute, Symbols::volumMute); + lv_label_set_text_static(label_mute, Symbols::volumMute); lv_obj_set_style_local_bg_color(bt_mute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); } break; } @@ -270,7 +270,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); lv_obj_set_size(backgroundLabel, 240, 240); lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text(backgroundLabel, ""); + lv_label_set_text_static(backgroundLabel, ""); } void Notifications::NotificationItem::OnCallButtonEvent(lv_obj_t* obj, lv_event_t event) { diff --git a/src/displayapp/screens/Paddle.cpp b/src/displayapp/screens/Paddle.cpp index 608eb64..79401ff 100644 --- a/src/displayapp/screens/Paddle.cpp +++ b/src/displayapp/screens/Paddle.cpp @@ -17,7 +17,7 @@ Paddle::Paddle(Pinetime::Applications::DisplayApp* app, Pinetime::Components::Li points = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(points, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); - lv_label_set_text(points, "0000"); + lv_label_set_text_static(points, "0000"); lv_obj_align(points, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 0, 10); paddle = lv_obj_create(lv_scr_act(), nullptr); diff --git a/src/displayapp/screens/PassKey.cpp b/src/displayapp/screens/PassKey.cpp index 9e43a54..e9715cd 100644 --- a/src/displayapp/screens/PassKey.cpp +++ b/src/displayapp/screens/PassKey.cpp @@ -15,7 +15,7 @@ PassKey::PassKey(Pinetime::Applications::DisplayApp* app, uint32_t key) : Screen lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); lv_obj_set_size(backgroundLabel, 240, 240); lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text(backgroundLabel, ""); + lv_label_set_text_static(backgroundLabel, ""); } PassKey::~PassKey() { diff --git a/src/displayapp/screens/Steps.cpp b/src/displayapp/screens/Steps.cpp index 3e7f820..df13758 100644 --- a/src/displayapp/screens/Steps.cpp +++ b/src/displayapp/screens/Steps.cpp @@ -61,7 +61,7 @@ Steps::Steps(Pinetime::Applications::DisplayApp* app, lv_obj_set_width(resetBtn, 115); lv_obj_align(resetBtn, lv_scr_act(), LV_ALIGN_IN_BOTTOM_MID, 0, 0); resetButtonLabel = lv_label_create(resetBtn, nullptr); - lv_label_set_text(resetButtonLabel, "Reset"); + lv_label_set_text_static(resetButtonLabel, "Reset"); currentTripSteps = motionController.GetTripSteps(); diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index 8749839..fcff5f1 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -55,13 +55,13 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) time = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); - lv_label_set_text(time, "00:00"); + lv_label_set_text_static(time, "00:00"); lv_obj_align(time, lv_scr_act(), LV_ALIGN_CENTER, 0, -45); msecTime = lv_label_create(lv_scr_act(), nullptr); // lv_obj_set_style_local_text_font(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_bold_20); lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); - lv_label_set_text(msecTime, "00"); + lv_label_set_text_static(msecTime, "00"); lv_obj_align(msecTime, lv_scr_act(), LV_ALIGN_CENTER, 0, 3); btnPlayPause = lv_btn_create(lv_scr_act(), nullptr); @@ -71,7 +71,7 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) lv_obj_set_width(btnPlayPause, 115); lv_obj_align(btnPlayPause, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); txtPlayPause = lv_label_create(btnPlayPause, nullptr); - lv_label_set_text(txtPlayPause, Symbols::play); + lv_label_set_text_static(txtPlayPause, Symbols::play); btnStopLap = lv_btn_create(lv_scr_act(), nullptr); btnStopLap->user_data = this; @@ -82,7 +82,7 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) lv_obj_set_style_local_bg_color(btnStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, lv_color_hex(0x080808)); txtStopLap = lv_label_create(btnStopLap, nullptr); lv_obj_set_style_local_text_color(txtStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, lv_color_hex(0x888888)); - lv_label_set_text(txtStopLap, Symbols::stop); + lv_label_set_text_static(txtStopLap, Symbols::stop); lv_obj_set_state(btnStopLap, LV_STATE_DISABLED); lv_obj_set_state(txtStopLap, LV_STATE_DISABLED); @@ -90,13 +90,13 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) // lv_obj_set_style_local_text_font(lapOneText, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_bold_20); lv_obj_set_style_local_text_color(lapOneText, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_YELLOW); lv_obj_align(lapOneText, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 50, 30); - lv_label_set_text(lapOneText, ""); + lv_label_set_text_static(lapOneText, ""); lapTwoText = lv_label_create(lv_scr_act(), nullptr); // lv_obj_set_style_local_text_font(lapTwoText, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_bold_20); lv_obj_set_style_local_text_color(lapTwoText, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_YELLOW); lv_obj_align(lapTwoText, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 50, 55); - lv_label_set_text(lapTwoText, ""); + lv_label_set_text_static(lapTwoText, ""); taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } @@ -113,11 +113,11 @@ void StopWatch::reset() { lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); - lv_label_set_text(time, "00:00"); - lv_label_set_text(msecTime, "00"); + lv_label_set_text_static(time, "00:00"); + lv_label_set_text_static(msecTime, "00"); - lv_label_set_text(lapOneText, ""); - lv_label_set_text(lapTwoText, ""); + lv_label_set_text_static(lapOneText, ""); + lv_label_set_text_static(lapTwoText, ""); lapBuffer.clearBuffer(); lapNr = 0; lv_obj_set_state(btnStopLap, LV_STATE_DISABLED); @@ -129,8 +129,8 @@ void StopWatch::start() { lv_obj_set_state(txtStopLap, LV_STATE_DEFAULT); lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); - lv_label_set_text(txtPlayPause, Symbols::pause); - lv_label_set_text(txtStopLap, Symbols::lapsFlag); + lv_label_set_text_static(txtPlayPause, Symbols::pause); + lv_label_set_text_static(txtStopLap, Symbols::lapsFlag); startTime = xTaskGetTickCount(); currentState = States::Running; systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping); @@ -141,8 +141,8 @@ void StopWatch::pause() { // Store the current time elapsed in cache oldTimeElapsed += timeElapsed; currentState = States::Halted; - lv_label_set_text(txtPlayPause, Symbols::play); - lv_label_set_text(txtStopLap, Symbols::stop); + lv_label_set_text_static(txtPlayPause, Symbols::play); + lv_label_set_text_static(txtStopLap, Symbols::stop); lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_YELLOW); lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_YELLOW); systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping); diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 23d9bca..4df69fe 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -39,7 +39,7 @@ Tile::Tile(uint8_t screenID, // Battery batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); + lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); lv_obj_align(batteryIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, -8, 0); if (numScreens > 1) { @@ -120,7 +120,7 @@ Tile::~Tile() { void Tile::UpdateScreen() { lv_label_set_text(label_time, dateTimeController.FormattedTime().c_str()); - lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); + lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); } void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId) { diff --git a/src/displayapp/screens/Timer.cpp b/src/displayapp/screens/Timer.cpp index 5cd496c..167b7b1 100644 --- a/src/displayapp/screens/Timer.cpp +++ b/src/displayapp/screens/Timer.cpp @@ -18,7 +18,7 @@ void Timer::CreateButtons() { lv_obj_set_height(btnMinutesUp, 40); lv_obj_set_width(btnMinutesUp, 60); txtMUp = lv_label_create(btnMinutesUp, nullptr); - lv_label_set_text(txtMUp, "+"); + lv_label_set_text_static(txtMUp, "+"); btnMinutesDown = lv_btn_create(lv_scr_act(), nullptr); btnMinutesDown->user_data = this; @@ -27,7 +27,7 @@ void Timer::CreateButtons() { lv_obj_set_height(btnMinutesDown, 40); lv_obj_set_width(btnMinutesDown, 60); txtMDown = lv_label_create(btnMinutesDown, nullptr); - lv_label_set_text(txtMDown, "-"); + lv_label_set_text_static(txtMDown, "-"); btnSecondsUp = lv_btn_create(lv_scr_act(), nullptr); btnSecondsUp->user_data = this; @@ -36,7 +36,7 @@ void Timer::CreateButtons() { lv_obj_set_height(btnSecondsUp, 40); lv_obj_set_width(btnSecondsUp, 60); txtSUp = lv_label_create(btnSecondsUp, nullptr); - lv_label_set_text(txtSUp, "+"); + lv_label_set_text_static(txtSUp, "+"); btnSecondsDown = lv_btn_create(lv_scr_act(), nullptr); btnSecondsDown->user_data = this; @@ -45,7 +45,7 @@ void Timer::CreateButtons() { lv_obj_set_height(btnSecondsDown, 40); lv_obj_set_width(btnSecondsDown, 60); txtSDown = lv_label_create(btnSecondsDown, nullptr); - lv_label_set_text(txtSDown, "-"); + lv_label_set_text_static(txtSDown, "-"); } Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController) @@ -55,7 +55,7 @@ Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController) lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); lv_obj_set_size(backgroundLabel, 240, 240); lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text(backgroundLabel, ""); + lv_label_set_text_static(backgroundLabel, ""); time = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); @@ -73,9 +73,9 @@ Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController) lv_obj_set_height(btnPlayPause, 40); txtPlayPause = lv_label_create(btnPlayPause, nullptr); if (timerController.IsRunning()) { - lv_label_set_text(txtPlayPause, Symbols::pause); + lv_label_set_text_static(txtPlayPause, Symbols::pause); } else { - lv_label_set_text(txtPlayPause, Symbols::play); + lv_label_set_text_static(txtPlayPause, Symbols::play); CreateButtons(); } @@ -98,7 +98,7 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { if (event == LV_EVENT_CLICKED) { if (obj == btnPlayPause) { if (timerController.IsRunning()) { - lv_label_set_text(txtPlayPause, Symbols::play); + lv_label_set_text_static(txtPlayPause, Symbols::play); uint32_t seconds = timerController.GetTimeRemaining() / 1000; minutesToSet = seconds / 60; secondsToSet = seconds % 60; @@ -106,7 +106,7 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { CreateButtons(); } else if (secondsToSet + minutesToSet > 0) { - lv_label_set_text(txtPlayPause, Symbols::pause); + lv_label_set_text_static(txtPlayPause, Symbols::pause); timerController.StartTimer((secondsToSet + minutesToSet * 60) * 1000); lv_obj_del(btnSecondsDown); @@ -158,8 +158,8 @@ void Timer::OnButtonEvent(lv_obj_t* obj, lv_event_t event) { } void Timer::SetDone() { - lv_label_set_text(time, "00:00"); - lv_label_set_text(txtPlayPause, Symbols::play); + lv_label_set_text_static(time, "00:00"); + lv_label_set_text_static(txtPlayPause, Symbols::play); secondsToSet = 0; minutesToSet = 0; CreateButtons(); diff --git a/src/displayapp/screens/Twos.cpp b/src/displayapp/screens/Twos.cpp index 6d67585..ca9295d 100644 --- a/src/displayapp/screens/Twos.cpp +++ b/src/displayapp/screens/Twos.cpp @@ -90,7 +90,7 @@ Twos::Twos(Pinetime::Applications::DisplayApp* app) : Screen(app) { lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); lv_obj_set_size(backgroundLabel, 240, 240); lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text(backgroundLabel, ""); + lv_label_set_text_static(backgroundLabel, ""); } Twos::~Twos() { diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index 6104281..4cfc969 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -67,13 +67,13 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, lv_obj_align(bg_clock_img, NULL, LV_ALIGN_CENTER, 0, 0); batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(batteryIcon, Symbols::batteryHalf); + lv_label_set_text_static(batteryIcon, Symbols::batteryHalf); lv_obj_align(batteryIcon, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 0); lv_obj_set_auto_realign(batteryIcon, true); notificationIcon = lv_label_create(lv_scr_act(), NULL); lv_obj_set_style_local_text_color(notificationIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FF00)); - lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); + lv_label_set_text_static(notificationIcon, NotificationIcon::GetIcon(false)); lv_obj_align(notificationIcon, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 0); // Date - Day / Week day @@ -185,7 +185,7 @@ void WatchFaceAnalog::SetBatteryIcon() { } else { lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); } - lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); + lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); } void WatchFaceAnalog::Refresh() { @@ -193,7 +193,7 @@ void WatchFaceAnalog::Refresh() { if (isCharging.IsUpdated()) { if (isCharging.Get()) { lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED); - lv_label_set_text(batteryIcon, Symbols::plug); + lv_label_set_text_static(batteryIcon, Symbols::plug); } else { SetBatteryIcon(); } @@ -208,7 +208,7 @@ void WatchFaceAnalog::Refresh() { notificationState = notificationManager.AreNewNotificationsAvailable(); if (notificationState.IsUpdated()) { - lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(notificationState.Get())); + lv_label_set_text_static(notificationIcon, NotificationIcon::GetIcon(notificationState.Get())); } currentDateTime = dateTimeController.CurrentDateTime(); diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index 6a91488..ad328e1 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -121,7 +121,7 @@ void WatchFaceDigital::Refresh() { bleState = bleController.IsConnected(); bleRadioEnabled = bleController.IsRadioEnabled(); if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) { - lv_label_set_text(bleIcon, BleIcon::GetIcon(bleState.Get())); + lv_label_set_text_static(bleIcon, BleIcon::GetIcon(bleState.Get())); } lv_obj_realign(batteryIcon); lv_obj_realign(batteryPlug); diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.cpp b/src/displayapp/screens/WatchFacePineTimeStyle.cpp index d0fbf05..28e7a6a 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.cpp +++ b/src/displayapp/screens/WatchFacePineTimeStyle.cpp @@ -373,7 +373,7 @@ void WatchFacePineTimeStyle::Refresh() { bleState = bleController.IsConnected(); bleRadioEnabled = bleController.IsRadioEnabled(); if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) { - lv_label_set_text(bleIcon, BleIcon::GetIcon(bleState.Get())); + lv_label_set_text_static(bleIcon, BleIcon::GetIcon(bleState.Get())); AlignIcons(); } @@ -424,10 +424,10 @@ void WatchFacePineTimeStyle::Refresh() { } if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { - lv_label_set_text_fmt(dateDayOfWeek, "%s", dateTimeController.DayOfWeekShortToString()); + lv_label_set_text_static(dateDayOfWeek, dateTimeController.DayOfWeekShortToString()); lv_label_set_text_fmt(dateDay, "%d", day); lv_obj_realign(dateDay); - lv_label_set_text_fmt(dateMonth, "%s", dateTimeController.MonthShortToString()); + lv_label_set_text_static(dateMonth, dateTimeController.MonthShortToString()); currentYear = year; currentMonth = month; diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index cd56c14..97faaa7 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -40,7 +40,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_obj_align(label_time, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 0); batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); + lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); lv_obj_align(batteryIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); static constexpr uint8_t barHeight = 20 + innerDistance; @@ -124,7 +124,7 @@ QuickSettings::~QuickSettings() { void QuickSettings::UpdateScreen() { lv_label_set_text(label_time, dateTimeController.FormattedTime().c_str()); - lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); + lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); } void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { diff --git a/src/displayapp/screens/settings/SettingShakeThreshold.cpp b/src/displayapp/screens/settings/SettingShakeThreshold.cpp index 9d40fcf..c354bdc 100644 --- a/src/displayapp/screens/settings/SettingShakeThreshold.cpp +++ b/src/displayapp/screens/settings/SettingShakeThreshold.cpp @@ -57,7 +57,7 @@ SettingShakeThreshold::SettingShakeThreshold(DisplayApp* app, lv_obj_align(calButton, lv_scr_act(), LV_ALIGN_IN_BOTTOM_MID, 0, 0); lv_btn_set_checkable(calButton, true); calLabel = lv_label_create(calButton, NULL); - lv_label_set_text(calLabel, "Calibrate"); + lv_label_set_text_static(calLabel, "Calibrate"); lv_arc_set_value(positionArc, settingsController.GetShakeThreshold()); @@ -91,7 +91,7 @@ void SettingShakeThreshold::Refresh() { calibrating = 2; lv_obj_set_style_local_bg_color(calButton, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_RED); lv_obj_set_style_local_bg_color(calButton, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_RED); - lv_label_set_text(calLabel, "Shake!!"); + lv_label_set_text_static(calLabel, "Shake!"); } } if (calibrating == 2) { @@ -121,14 +121,14 @@ void SettingShakeThreshold::UpdateSelected(lv_obj_t* object, lv_event_t event) { lv_arc_set_value(positionArc, 0); calibrating = 1; vCalTime = xTaskGetTickCount(); - lv_label_set_text(calLabel, "Ready!"); + lv_label_set_text_static(calLabel, "Ready!"); lv_obj_set_click(positionArc, false); lv_obj_set_style_local_bg_color(calButton, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_GREEN); lv_obj_set_style_local_bg_color(calButton, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_GREEN); } else if (lv_btn_get_state(calButton) == LV_BTN_STATE_RELEASED) { calibrating = 0; lv_obj_set_click(positionArc, true); - lv_label_set_text(calLabel, "Calibrate"); + lv_label_set_text_static(calLabel, "Calibrate"); } break; } -- cgit v0.10.2 From 129dd97b513e077ba15d6c3f5d7afce06664e0b4 Mon Sep 17 00:00:00 2001 From: Reinhold Gschweicher Date: Sun, 20 Mar 2022 22:45:24 +0100 Subject: SpiNorFlash: use C++ style struct in C++ only header `SpiNorFlash.h` is a C++ header, but the `Identification` struct is created in a C style using `typedef struct`. Clang issues a warining about this discrepancy: ``` In file included from /home/nero/repos/pinetime/InfiniSim/InfiniTime/src/systemtask/SystemTask.cpp:13: /home/nero/repos/pinetime/InfiniSim/sim/drivers/SpiNorFlash.h:16:21: warning: anonymous non-C-compatible type given name for linkage purposes by typedef declaration; add a tag name here [-Wnon-c-typedef-for-linkage] typedef struct __attribute__((packed)) { ^ Identification /home/nero/repos/pinetime/InfiniSim/sim/drivers/SpiNorFlash.h:17:9: note: type is not C-compatible due to this default member initializer uint8_t manufacturer = 0; ^~~~~~~~~~~~~~~~~~~~ /home/nero/repos/pinetime/InfiniSim/sim/drivers/SpiNorFlash.h:20:9: note: type is given name 'Identification' for linkage purposes by this typedef declaration } Identification; ^ 1 warning generated. ``` The easy fix is to use a C++ style struct. Also includes code style fix from Riksu9000 Co-authored-by: Riku Isokoski diff --git a/src/drivers/SpiNorFlash.h b/src/drivers/SpiNorFlash.h index ed6ab31..ad4d090 100644 --- a/src/drivers/SpiNorFlash.h +++ b/src/drivers/SpiNorFlash.h @@ -13,11 +13,11 @@ namespace Pinetime { SpiNorFlash(SpiNorFlash&&) = delete; SpiNorFlash& operator=(SpiNorFlash&&) = delete; - typedef struct __attribute__((packed)) { + struct __attribute__((packed)) Identification { uint8_t manufacturer = 0; uint8_t type = 0; uint8_t density = 0; - } Identification; + }; Identification ReadIdentificaion(); uint8_t ReadStatusRegister(); -- cgit v0.10.2 From d7441d18be75051751d4a43118ce5885596b0a2c Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sat, 9 Apr 2022 14:47:43 +0300 Subject: Firmware update screen fixes diff --git a/src/displayapp/screens/FirmwareUpdate.cpp b/src/displayapp/screens/FirmwareUpdate.cpp index 0a8544b..0e04309 100644 --- a/src/displayapp/screens/FirmwareUpdate.cpp +++ b/src/displayapp/screens/FirmwareUpdate.cpp @@ -16,18 +16,17 @@ FirmwareUpdate::FirmwareUpdate(Pinetime::Applications::DisplayApp* app, Pinetime titleLabel = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_static(titleLabel, "Firmware update"); - lv_obj_set_auto_realign(titleLabel, true); lv_obj_align(titleLabel, nullptr, LV_ALIGN_IN_TOP_MID, 0, 50); bar1 = lv_bar_create(lv_scr_act(), nullptr); lv_obj_set_size(bar1, 200, 30); lv_obj_align(bar1, nullptr, LV_ALIGN_CENTER, 0, 0); - lv_bar_set_anim_time(bar1, 10); - lv_bar_set_range(bar1, 0, 100); + lv_bar_set_range(bar1, 0, 1000); lv_bar_set_value(bar1, 0, LV_ANIM_OFF); percentLabel = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_static(percentLabel, "Waiting..."); + lv_label_set_recolor(percentLabel, true); lv_obj_set_auto_realign(percentLabel, true); lv_obj_align(percentLabel, bar1, LV_ALIGN_OUT_TOP_MID, 0, 60); taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); @@ -55,8 +54,9 @@ void FirmwareUpdate::Refresh() { } break; case Pinetime::Controllers::Ble::FirmwareUpdateStates::Running: - if (state != States::Running) + if (state != States::Running) { state = States::Running; + } DisplayProgression(); break; case Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated: @@ -78,21 +78,20 @@ void FirmwareUpdate::Refresh() { } void FirmwareUpdate::DisplayProgression() const { - float current = bleController.FirmwareUpdateCurrentBytes() / 1024.0f; - float total = bleController.FirmwareUpdateTotalBytes() / 1024.0f; - int16_t pc = (current / total) * 100.0f; - lv_label_set_text_fmt(percentLabel, "%d %%", pc); + const uint32_t current = bleController.FirmwareUpdateCurrentBytes(); + const uint32_t total = bleController.FirmwareUpdateTotalBytes(); + const int16_t permille = current / (total / 1000); + + lv_label_set_text_fmt(percentLabel, "%d %%", permille / 10); - lv_bar_set_value(bar1, pc, LV_ANIM_OFF); + lv_bar_set_value(bar1, permille, LV_ANIM_OFF); } void FirmwareUpdate::UpdateValidated() { - lv_label_set_recolor(percentLabel, true); lv_label_set_text_static(percentLabel, "#00ff00 Image Ok!#"); } void FirmwareUpdate::UpdateError() { - lv_label_set_recolor(percentLabel, true); lv_label_set_text_static(percentLabel, "#ff0000 Error!#"); startTime = xTaskGetTickCount(); } -- cgit v0.10.2 From 3bf6b1cb16e81d564d5846936b41875e469bcd1e Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sat, 9 Apr 2022 12:55:01 +0300 Subject: Fix timer layout diff --git a/src/displayapp/screens/Timer.cpp b/src/displayapp/screens/Timer.cpp index 167b7b1..295f097 100644 --- a/src/displayapp/screens/Timer.cpp +++ b/src/displayapp/screens/Timer.cpp @@ -14,36 +14,32 @@ void Timer::CreateButtons() { btnMinutesUp = lv_btn_create(lv_scr_act(), nullptr); btnMinutesUp->user_data = this; lv_obj_set_event_cb(btnMinutesUp, btnEventHandler); - lv_obj_align(btnMinutesUp, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, -80); - lv_obj_set_height(btnMinutesUp, 40); - lv_obj_set_width(btnMinutesUp, 60); + lv_obj_set_size(btnMinutesUp, 60, 40); + lv_obj_align(btnMinutesUp, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, -85); txtMUp = lv_label_create(btnMinutesUp, nullptr); lv_label_set_text_static(txtMUp, "+"); btnMinutesDown = lv_btn_create(lv_scr_act(), nullptr); btnMinutesDown->user_data = this; lv_obj_set_event_cb(btnMinutesDown, btnEventHandler); - lv_obj_align(btnMinutesDown, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, +40); - lv_obj_set_height(btnMinutesDown, 40); - lv_obj_set_width(btnMinutesDown, 60); + lv_obj_set_size(btnMinutesDown, 60, 40); + lv_obj_align(btnMinutesDown, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 20, 35); txtMDown = lv_label_create(btnMinutesDown, nullptr); lv_label_set_text_static(txtMDown, "-"); btnSecondsUp = lv_btn_create(lv_scr_act(), nullptr); btnSecondsUp->user_data = this; lv_obj_set_event_cb(btnSecondsUp, btnEventHandler); - lv_obj_align(btnSecondsUp, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, 10, -80); - lv_obj_set_height(btnSecondsUp, 40); - lv_obj_set_width(btnSecondsUp, 60); + lv_obj_set_size(btnSecondsUp, 60, 40); + lv_obj_align(btnSecondsUp, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -20, -85); txtSUp = lv_label_create(btnSecondsUp, nullptr); lv_label_set_text_static(txtSUp, "+"); btnSecondsDown = lv_btn_create(lv_scr_act(), nullptr); btnSecondsDown->user_data = this; lv_obj_set_event_cb(btnSecondsDown, btnEventHandler); - lv_obj_align(btnSecondsDown, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, 10, +40); - lv_obj_set_height(btnSecondsDown, 40); - lv_obj_set_width(btnSecondsDown, 60); + lv_obj_set_size(btnSecondsDown, 60, 40); + lv_obj_align(btnSecondsDown, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -20, 35); txtSDown = lv_label_create(btnSecondsDown, nullptr); lv_label_set_text_static(txtSDown, "-"); } @@ -63,14 +59,13 @@ Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController) uint32_t seconds = timerController.GetTimeRemaining() / 1000; lv_label_set_text_fmt(time, "%02lu:%02lu", seconds / 60, seconds % 60); - - lv_obj_align(time, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 0, -20); + lv_obj_align(time, lv_scr_act(), LV_ALIGN_CENTER, 0, -25); btnPlayPause = lv_btn_create(lv_scr_act(), nullptr); btnPlayPause->user_data = this; lv_obj_set_event_cb(btnPlayPause, btnEventHandler); - lv_obj_align(btnPlayPause, lv_scr_act(), LV_ALIGN_IN_BOTTOM_MID, 0, -10); - lv_obj_set_height(btnPlayPause, 40); + lv_obj_set_size(btnPlayPause, 120, 50); + lv_obj_align(btnPlayPause, lv_scr_act(), LV_ALIGN_IN_BOTTOM_MID, 0, 0); txtPlayPause = lv_label_create(btnPlayPause, nullptr); if (timerController.IsRunning()) { lv_label_set_text_static(txtPlayPause, Symbols::pause); -- cgit v0.10.2 From 28ccf15e13c07247d7398fdf806691a4202eb1de Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sat, 9 Apr 2022 13:57:58 +0300 Subject: Stopwatch fixes diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index fcff5f1..ce8d4a5 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -8,10 +8,9 @@ using namespace Pinetime::Applications::Screens; -// Anonymous namespace for local functions namespace { TimeSeparated_t convertTicksToTimeSegments(const TickType_t timeElapsed) { - const int timeElapsedMillis = (static_cast(timeElapsed) / static_cast(configTICK_RATE_HZ)) * 1000; + const int timeElapsedMillis = timeElapsed * 1000 / configTICK_RATE_HZ; const int hundredths = (timeElapsedMillis % 1000) / 10; // Get only the first two digits and ignore the last const int secs = (timeElapsedMillis / 1000) % 60; @@ -19,27 +18,15 @@ namespace { return TimeSeparated_t {mins, secs, hundredths}; } - TickType_t calculateDelta(const TickType_t startTime, const TickType_t currentTime) { - TickType_t delta = 0; - // Take care of overflow - if (startTime > currentTime) { - delta = 0xffffffff - startTime; - delta += (currentTime + 1); - } else { - delta = currentTime - startTime; - } - return delta; + void play_pause_event_handler(lv_obj_t* obj, lv_event_t event) { + auto* stopWatch = static_cast(obj->user_data); + stopWatch->playPauseBtnEventHandler(event); } -} -static void play_pause_event_handler(lv_obj_t* obj, lv_event_t event) { - auto stopWatch = static_cast(obj->user_data); - stopWatch->playPauseBtnEventHandler(event); -} - -static void stop_lap_event_handler(lv_obj_t* obj, lv_event_t event) { - auto stopWatch = static_cast(obj->user_data); - stopWatch->stopLapBtnEventHandler(event); + void stop_lap_event_handler(lv_obj_t* obj, lv_event_t event) { + auto* stopWatch = static_cast(obj->user_data); + stopWatch->stopLapBtnEventHandler(event); + } } StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) @@ -67,8 +54,7 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) btnPlayPause = lv_btn_create(lv_scr_act(), nullptr); btnPlayPause->user_data = this; lv_obj_set_event_cb(btnPlayPause, play_pause_event_handler); - lv_obj_set_height(btnPlayPause, 50); - lv_obj_set_width(btnPlayPause, 115); + lv_obj_set_size(btnPlayPause, 115, 50); lv_obj_align(btnPlayPause, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); txtPlayPause = lv_label_create(btnPlayPause, nullptr); lv_label_set_text_static(txtPlayPause, Symbols::play); @@ -76,8 +62,7 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) btnStopLap = lv_btn_create(lv_scr_act(), nullptr); btnStopLap->user_data = this; lv_obj_set_event_cb(btnStopLap, stop_lap_event_handler); - lv_obj_set_height(btnStopLap, 50); - lv_obj_set_width(btnStopLap, 115); + lv_obj_set_size(btnStopLap, 115, 50); lv_obj_align(btnStopLap, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_obj_set_style_local_bg_color(btnStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, lv_color_hex(0x080808)); txtStopLap = lv_label_create(btnStopLap, nullptr); @@ -107,7 +92,7 @@ StopWatch::~StopWatch() { lv_obj_clean(lv_scr_act()); } -void StopWatch::reset() { +void StopWatch::Reset() { currentState = States::Init; oldTimeElapsed = 0; lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); @@ -124,7 +109,7 @@ void StopWatch::reset() { lv_obj_set_state(txtStopLap, LV_STATE_DISABLED); } -void StopWatch::start() { +void StopWatch::Start() { lv_obj_set_state(btnStopLap, LV_STATE_DEFAULT); lv_obj_set_state(txtStopLap, LV_STATE_DEFAULT); lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); @@ -136,7 +121,7 @@ void StopWatch::start() { systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping); } -void StopWatch::pause() { +void StopWatch::Pause() { startTime = 0; // Store the current time elapsed in cache oldTimeElapsed += timeElapsed; @@ -150,7 +135,7 @@ void StopWatch::pause() { void StopWatch::Refresh() { if (currentState == States::Running) { - timeElapsed = calculateDelta(startTime, xTaskGetTickCount()); + timeElapsed = xTaskGetTickCount() - startTime; currentTimeSeparated = convertTicksToTimeSegments((oldTimeElapsed + timeElapsed)); lv_label_set_text_fmt(time, "%02d:%02d", currentTimeSeparated.mins, currentTimeSeparated.secs); @@ -163,11 +148,11 @@ void StopWatch::playPauseBtnEventHandler(lv_event_t event) { return; } if (currentState == States::Init) { - start(); + Start(); } else if (currentState == States::Running) { - pause(); + Pause(); } else if (currentState == States::Halted) { - start(); + Start(); } } @@ -187,13 +172,13 @@ void StopWatch::stopLapBtnEventHandler(lv_event_t event) { lv_label_set_text_fmt(lapTwoText, "#%2d %2d:%02d.%02d", lapNr, lapBuffer[0]->mins, lapBuffer[0]->secs, lapBuffer[0]->hundredths); } } else if (currentState == States::Halted) { - reset(); + Reset(); } } bool StopWatch::OnButtonPushed() { if (currentState == States::Running) { - pause(); + Pause(); return true; } return false; diff --git a/src/displayapp/screens/StopWatch.h b/src/displayapp/screens/StopWatch.h index 06193f6..ef55e2d 100644 --- a/src/displayapp/screens/StopWatch.h +++ b/src/displayapp/screens/StopWatch.h @@ -70,9 +70,9 @@ namespace Pinetime::Applications::Screens { void stopLapBtnEventHandler(lv_event_t event); bool OnButtonPushed() override; - void reset(); - void start(); - void pause(); + void Reset(); + void Start(); + void Pause(); private: Pinetime::System::SystemTask& systemTask; -- cgit v0.10.2 From 5e83a862dba2c850a10fea11e814d593b2381f76 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sat, 9 Apr 2022 14:03:17 +0300 Subject: Use centiseconds diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index ce8d4a5..cc54806 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -10,11 +10,12 @@ using namespace Pinetime::Applications::Screens; namespace { TimeSeparated_t convertTicksToTimeSegments(const TickType_t timeElapsed) { - const int timeElapsedMillis = timeElapsed * 1000 / configTICK_RATE_HZ; + // Centiseconds + const int timeElapsedCentis = timeElapsed * 100 / configTICK_RATE_HZ; - const int hundredths = (timeElapsedMillis % 1000) / 10; // Get only the first two digits and ignore the last - const int secs = (timeElapsedMillis / 1000) % 60; - const int mins = (timeElapsedMillis / 1000) / 60; + const int hundredths = (timeElapsedCentis % 100); + const int secs = (timeElapsedCentis / 100) % 60; + const int mins = (timeElapsedCentis / 100) / 60; return TimeSeparated_t {mins, secs, hundredths}; } -- cgit v0.10.2 From aa32159c005cf44fbda9fa42818c7deab7c41297 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 22 Apr 2022 23:26:38 +0300 Subject: Tweak gamma on ST7789 and match UI colors This change will increase the color accuracy of the PineTime and make UI development with the simulator easier. diff --git a/src/displayapp/Colors.cpp b/src/displayapp/Colors.cpp index 93b1aa0..be92306 100644 --- a/src/displayapp/Colors.cpp +++ b/src/displayapp/Colors.cpp @@ -10,17 +10,17 @@ lv_color_t Pinetime::Applications::Convert(Pinetime::Controllers::Settings::Colo case Pinetime::Controllers::Settings::Colors::Gray: return LV_COLOR_GRAY; case Pinetime::Controllers::Settings::Colors::Black: return LV_COLOR_BLACK; case Pinetime::Controllers::Settings::Colors::Red: return LV_COLOR_RED; - case Pinetime::Controllers::Settings::Colors::Maroon: return LV_COLOR_MAROON; + case Pinetime::Controllers::Settings::Colors::Maroon: return lv_color_lighten(LV_COLOR_MAROON, LV_OPA_20); case Pinetime::Controllers::Settings::Colors::Yellow: return LV_COLOR_YELLOW; - case Pinetime::Controllers::Settings::Colors::Olive: return LV_COLOR_OLIVE; + case Pinetime::Controllers::Settings::Colors::Olive: return lv_color_lighten(LV_COLOR_OLIVE, LV_OPA_20); case Pinetime::Controllers::Settings::Colors::Lime: return LV_COLOR_LIME; - case Pinetime::Controllers::Settings::Colors::Green: return LV_COLOR_GREEN; + case Pinetime::Controllers::Settings::Colors::Green: return lv_color_lighten(LV_COLOR_GREEN, LV_OPA_20); case Pinetime::Controllers::Settings::Colors::Cyan: return LV_COLOR_CYAN; - case Pinetime::Controllers::Settings::Colors::Teal: return LV_COLOR_TEAL; + case Pinetime::Controllers::Settings::Colors::Teal: return lv_color_lighten(LV_COLOR_TEAL, LV_OPA_20); case Pinetime::Controllers::Settings::Colors::Blue: return LV_COLOR_BLUE; - case Pinetime::Controllers::Settings::Colors::Navy: return LV_COLOR_NAVY; + case Pinetime::Controllers::Settings::Colors::Navy: return lv_color_lighten(LV_COLOR_NAVY, LV_OPA_20); case Pinetime::Controllers::Settings::Colors::Magenta: return LV_COLOR_MAGENTA; - case Pinetime::Controllers::Settings::Colors::Purple: return LV_COLOR_PURPLE; + case Pinetime::Controllers::Settings::Colors::Purple: return lv_color_lighten(LV_COLOR_PURPLE, LV_OPA_20); case Pinetime::Controllers::Settings::Colors::Orange: return LV_COLOR_ORANGE; default: return LV_COLOR_WHITE; } diff --git a/src/displayapp/lv_pinetime_theme.c b/src/displayapp/lv_pinetime_theme.c index 4fce5d6..37eb040 100644 --- a/src/displayapp/lv_pinetime_theme.c +++ b/src/displayapp/lv_pinetime_theme.c @@ -113,9 +113,9 @@ static void basic_init(void) { style_init_reset(&style_btn); lv_style_set_radius(&style_btn, LV_STATE_DEFAULT, 10); lv_style_set_bg_opa(&style_btn, LV_STATE_DEFAULT, LV_OPA_COVER); - lv_style_set_bg_color(&style_btn, LV_STATE_DEFAULT, lv_color_hex(0x2F3540)); - lv_style_set_bg_color(&style_btn, LV_STATE_CHECKED, LV_COLOR_GREEN); - lv_style_set_bg_color(&style_btn, LV_STATE_DISABLED, lv_color_hex(0x2F3540)); + lv_style_set_bg_color(&style_btn, LV_STATE_DEFAULT, LV_PINETIME_BLUE); + lv_style_set_bg_color(&style_btn, LV_STATE_CHECKED, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); + lv_style_set_bg_color(&style_btn, LV_STATE_DISABLED, LV_PINETIME_BLUE); lv_style_set_bg_color(&style_btn, LV_STATE_DISABLED | LV_STATE_CHECKED, lv_color_hex3(0x888)); lv_style_set_border_color(&style_btn, LV_STATE_DEFAULT, theme.color_primary); lv_style_set_border_width(&style_btn, LV_STATE_DEFAULT, 0); @@ -166,7 +166,7 @@ static void basic_init(void) { style_init_reset(&style_scrollbar); lv_style_set_bg_opa(&style_scrollbar, LV_STATE_DEFAULT, LV_OPA_COVER); lv_style_set_radius(&style_scrollbar, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); - lv_style_set_bg_color(&style_scrollbar, LV_STATE_DEFAULT, LV_PINETIME_LIGHT_GRAY); + lv_style_set_bg_color(&style_scrollbar, LV_STATE_DEFAULT, LV_COLOR_WHITE); lv_style_set_size(&style_scrollbar, LV_STATE_DEFAULT, LV_HOR_RES / 80); lv_style_set_pad_right(&style_scrollbar, LV_STATE_DEFAULT, LV_HOR_RES / 60); @@ -190,8 +190,8 @@ static void basic_init(void) { style_init_reset(&style_ddlist_list); lv_style_set_text_line_space(&style_ddlist_list, LV_STATE_DEFAULT, LV_VER_RES / 25); lv_style_set_shadow_width(&style_ddlist_list, LV_STATE_DEFAULT, LV_VER_RES / 20); - lv_style_set_shadow_color(&style_ddlist_list, LV_STATE_DEFAULT, LV_PINETIME_GRAY); - lv_style_set_bg_color(&style_ddlist_list, LV_STATE_DEFAULT, LV_PINETIME_GRAY); + lv_style_set_shadow_color(&style_ddlist_list, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); + lv_style_set_bg_color(&style_ddlist_list, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); style_init_reset(&style_ddlist_selected); lv_style_set_bg_opa(&style_ddlist_selected, LV_STATE_DEFAULT, LV_OPA_COVER); @@ -204,7 +204,7 @@ static void basic_init(void) { style_init_reset(&style_sw_indic); lv_style_set_bg_opa(&style_sw_indic, LV_STATE_DEFAULT, LV_OPA_COVER); - lv_style_set_bg_color(&style_sw_indic, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_style_set_bg_color(&style_sw_indic, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); style_init_reset(&style_sw_knob); lv_style_set_bg_opa(&style_sw_knob, LV_STATE_DEFAULT, LV_OPA_COVER); @@ -237,7 +237,7 @@ static void basic_init(void) { lv_style_set_line_rounded(&style_arc_indic, LV_STATE_DEFAULT, true); style_init_reset(&style_arc_bg); - lv_style_set_line_color(&style_arc_bg, LV_STATE_DEFAULT, LV_PINETIME_GRAY); + lv_style_set_line_color(&style_arc_bg, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_style_set_line_width(&style_arc_bg, LV_STATE_DEFAULT, LV_DPX(25)); lv_style_set_line_rounded(&style_arc_bg, LV_STATE_DEFAULT, true); lv_style_set_pad_all(&style_arc_bg, LV_STATE_DEFAULT, LV_DPX(5)); @@ -245,7 +245,7 @@ static void basic_init(void) { lv_style_reset(&style_arc_knob); lv_style_set_radius(&style_arc_knob, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); lv_style_set_bg_opa(&style_arc_knob, LV_STATE_DEFAULT, LV_OPA_COVER); - lv_style_set_bg_color(&style_arc_knob, LV_STATE_DEFAULT, LV_PINETIME_LIGHT_GRAY); + lv_style_set_bg_color(&style_arc_knob, LV_STATE_DEFAULT, LV_COLOR_WHITE); lv_style_set_pad_all(&style_arc_knob, LV_STATE_DEFAULT, LV_DPX(5)); style_init_reset(&style_table_cell); diff --git a/src/displayapp/lv_pinetime_theme.h b/src/displayapp/lv_pinetime_theme.h index 714c424..67cee0f 100644 --- a/src/displayapp/lv_pinetime_theme.h +++ b/src/displayapp/lv_pinetime_theme.h @@ -23,7 +23,7 @@ extern "C" { #define LV_PINETIME_LIGHT lv_color_hex(0xf3f8fe) #define LV_PINETIME_GRAY lv_color_hex(0x8a8a8a) #define LV_PINETIME_LIGHT_GRAY lv_color_hex(0xc4c4c4) -#define LV_PINETIME_BLUE lv_color_hex(0x2f3540) +#define LV_PINETIME_BLUE lv_color_hex(0x5d697e) #define LV_PINETIME_GREEN lv_color_hex(0x4cb242) #define LV_PINETIME_RED lv_color_hex(0xd51732) diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp index d5fc2c0..3959205 100644 --- a/src/displayapp/screens/Alarm.cpp +++ b/src/displayapp/screens/Alarm.cpp @@ -40,7 +40,7 @@ Alarm::Alarm(DisplayApp* app, time = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); - lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); alarmHours = alarmController.Hours(); alarmMinutes = alarmController.Minutes(); @@ -50,7 +50,7 @@ Alarm::Alarm(DisplayApp* app, lblampm = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(lblampm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_bold_20); - lv_obj_set_style_local_text_color(lblampm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(lblampm, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text_static(lblampm, " "); lv_label_set_align(lblampm, LV_LABEL_ALIGN_CENTER); lv_obj_align(lblampm, lv_scr_act(), LV_ALIGN_CENTER, 0, 30); diff --git a/src/displayapp/screens/BatteryInfo.cpp b/src/displayapp/screens/BatteryInfo.cpp index e17de9a..2d9154f 100644 --- a/src/displayapp/screens/BatteryInfo.cpp +++ b/src/displayapp/screens/BatteryInfo.cpp @@ -33,7 +33,7 @@ BatteryInfo::BatteryInfo(Pinetime::Applications::DisplayApp* app, Pinetime::Cont lv_obj_align(percent, nullptr, LV_ALIGN_CENTER, 0, -60); voltage = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(voltage, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xC6A600)); + lv_obj_set_style_local_text_color(voltage, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xff, 0xb0, 0x0)); lv_label_set_text_fmt(voltage, "%1i.%02i volts", batteryVoltage / 1000, batteryVoltage % 1000 / 10); lv_label_set_align(voltage, LV_LABEL_ALIGN_CENTER); lv_obj_align(voltage, nullptr, LV_ALIGN_CENTER, 0, 95); @@ -68,7 +68,7 @@ void BatteryInfo::Refresh() { lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_YELLOW); lv_label_set_text_static(status, "Battery low"); } else { - lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_obj_set_style_local_bg_color(charging_bar, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); lv_label_set_text_static(status, "Discharging"); } diff --git a/src/displayapp/screens/FirmwareValidation.cpp b/src/displayapp/screens/FirmwareValidation.cpp index 16244ad..2403b58 100644 --- a/src/displayapp/screens/FirmwareValidation.cpp +++ b/src/displayapp/screens/FirmwareValidation.cpp @@ -42,7 +42,7 @@ FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, lv_obj_set_size(buttonValidate, 115, 50); lv_obj_align(buttonValidate, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_obj_set_event_cb(buttonValidate, ButtonEventHandler); - lv_obj_set_style_local_bg_color(buttonValidate, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x009900)); + lv_obj_set_style_local_bg_color(buttonValidate, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); labelButtonValidate = lv_label_create(buttonValidate, nullptr); lv_label_set_text_static(labelButtonValidate, "Validate"); @@ -51,7 +51,7 @@ FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, buttonReset->user_data = this; lv_obj_set_size(buttonReset, 115, 50); lv_obj_align(buttonReset, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); - lv_obj_set_style_local_bg_color(buttonReset, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x990000)); + lv_obj_set_style_local_bg_color(buttonReset, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0x0, 0x0)); lv_obj_set_event_cb(buttonReset, ButtonEventHandler); labelButtonReset = lv_label_create(buttonReset, nullptr); diff --git a/src/displayapp/screens/FlashLight.cpp b/src/displayapp/screens/FlashLight.cpp index 0634187..bef15d0 100644 --- a/src/displayapp/screens/FlashLight.cpp +++ b/src/displayapp/screens/FlashLight.cpp @@ -63,11 +63,11 @@ FlashLight::~FlashLight() { void FlashLight::SetColors() { if (isOn) { lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); - lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); for (auto & i : indicators) { - lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_WHITE); - lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); } } else { lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); diff --git a/src/displayapp/screens/HeartRate.cpp b/src/displayapp/screens/HeartRate.cpp index 89b43bb..77d9121 100644 --- a/src/displayapp/screens/HeartRate.cpp +++ b/src/displayapp/screens/HeartRate.cpp @@ -37,9 +37,9 @@ HeartRate::HeartRate(Pinetime::Applications::DisplayApp* app, lv_obj_set_style_local_text_font(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); if (isHrRunning) - lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); else - lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text_static(label_hr, "000"); lv_obj_align(label_hr, nullptr, LV_ALIGN_CENTER, 0, -40); @@ -97,12 +97,12 @@ void HeartRate::OnStartStopEvent(lv_event_t event) { heartRateController.Start(); UpdateStartStopButton(heartRateController.State() != Controllers::HeartRateController::States::Stopped); systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping); - lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); } else { heartRateController.Stop(); UpdateStartStopButton(heartRateController.State() != Controllers::HeartRateController::States::Stopped); systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping); - lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(label_hr, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); } } } diff --git a/src/displayapp/screens/InfiniPaint.cpp b/src/displayapp/screens/InfiniPaint.cpp index d279faf..733b4e2 100644 --- a/src/displayapp/screens/InfiniPaint.cpp +++ b/src/displayapp/screens/InfiniPaint.cpp @@ -26,7 +26,7 @@ bool InfiniPaint::OnTouchEvent(Pinetime::Applications::TouchEvents event) { selectColor = LV_COLOR_MAGENTA; break; case 1: - selectColor = LV_COLOR_GREEN; + selectColor = LV_COLOR_MAKE(0x0, 0xb0, 0x0); break; case 2: selectColor = LV_COLOR_WHITE; diff --git a/src/displayapp/screens/Label.cpp b/src/displayapp/screens/Label.cpp index 62ec1f0..4486d6f 100644 --- a/src/displayapp/screens/Label.cpp +++ b/src/displayapp/screens/Label.cpp @@ -27,7 +27,7 @@ Label::Label(uint8_t screenID, uint8_t numScreens, Pinetime::Applications::Displ pageIndicator = lv_line_create(lv_scr_act(), NULL); lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); - lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_obj_set_style_local_line_rounded(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, true); lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); } diff --git a/src/displayapp/screens/List.cpp b/src/displayapp/screens/List.cpp index af3f30f..7d8a141 100644 --- a/src/displayapp/screens/List.cpp +++ b/src/displayapp/screens/List.cpp @@ -45,7 +45,7 @@ List::List(uint8_t screenID, pageIndicator = lv_line_create(lv_scr_act(), NULL); lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); - lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); } @@ -68,7 +68,7 @@ List::List(uint8_t screenID, if (applications[i].application != Apps::None) { itemApps[i] = lv_btn_create(container1, nullptr); - lv_obj_set_style_local_bg_opa(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_20); + lv_obj_set_style_local_bg_opa(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_40); lv_obj_set_style_local_radius(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 57); lv_obj_set_style_local_bg_color(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); diff --git a/src/displayapp/screens/Meter.cpp b/src/displayapp/screens/Meter.cpp index 9c85310..91dd142 100644 --- a/src/displayapp/screens/Meter.cpp +++ b/src/displayapp/screens/Meter.cpp @@ -16,7 +16,7 @@ Meter::Meter(Pinetime::Applications::DisplayApp* app) : Screen(app) { lv_obj_set_style_local_scale_end_color(lmeter, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(255, 0, 0)); lv_obj_set_style_local_scale_grad_color(lmeter, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(160, 0, 0)); lv_obj_set_style_local_line_width(lmeter, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, 2); - lv_obj_set_style_local_line_color(lmeter, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_SILVER); + lv_obj_set_style_local_line_color(lmeter, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_obj_set_size(lmeter, 200, 200); lv_obj_align(lmeter, nullptr, LV_ALIGN_CENTER, 0, 0); diff --git a/src/displayapp/screens/Metronome.cpp b/src/displayapp/screens/Metronome.cpp index f6f269d..0671e2c 100644 --- a/src/displayapp/screens/Metronome.cpp +++ b/src/displayapp/screens/Metronome.cpp @@ -12,7 +12,7 @@ namespace { lv_obj_t* createLabel(const char* name, lv_obj_t* reference, lv_align_t align, lv_font_t* font, uint8_t x, uint8_t y) { lv_obj_t* label = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(label, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, font); - lv_obj_set_style_local_text_color(label, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(label, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text(label, name); lv_obj_align(label, reference, align, x, y); diff --git a/src/displayapp/screens/Motion.cpp b/src/displayapp/screens/Motion.cpp index 799dcb3..f7ffcc7 100644 --- a/src/displayapp/screens/Motion.cpp +++ b/src/displayapp/screens/Motion.cpp @@ -19,7 +19,7 @@ Motion::Motion(Pinetime::Applications::DisplayApp* app, Controllers::MotionContr /*Add 3 data series*/ ser1 = lv_chart_add_series(chart, LV_COLOR_RED); - ser2 = lv_chart_add_series(chart, LV_COLOR_GREEN); + ser2 = lv_chart_add_series(chart, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); ser3 = lv_chart_add_series(chart, LV_COLOR_YELLOW); lv_chart_init_points(chart, ser1, 0); @@ -28,7 +28,7 @@ Motion::Motion(Pinetime::Applications::DisplayApp* app, Controllers::MotionContr lv_chart_refresh(chart); /*Required after direct set*/ label = lv_label_create(lv_scr_act(), NULL); - lv_label_set_text_fmt(label, "X #FF0000 %d# Y #008000 %d# Z #FFFF00 %d#", 0, 0, 0); + lv_label_set_text_fmt(label, "X #FF0000 %d# Y #00B000 %d# Z #FFFF00 %d#", 0, 0, 0); lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 10); lv_label_set_recolor(label, true); @@ -53,7 +53,7 @@ void Motion::Refresh() { lv_label_set_text_fmt(labelStep, "Steps %lu", motionController.NbSteps()); lv_label_set_text_fmt(label, - "X #FF0000 %d# Y #008000 %d# Z #FFFF00 %d#", + "X #FF0000 %d# Y #00B000 %d# Z #FFFF00 %d#", motionController.X() / 0x10, motionController.Y() / 0x10, motionController.Z() / 0x10); diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index dd4609c..6c91c1e 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -53,7 +53,7 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus lv_style_init(&btn_style); lv_style_set_radius(&btn_style, LV_STATE_DEFAULT, 20); lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_style_set_bg_opa(&btn_style, LV_STATE_DEFAULT, LV_OPA_20); + lv_style_set_bg_opa(&btn_style, LV_STATE_DEFAULT, LV_OPA_40); btnVolDown = lv_btn_create(lv_scr_act(), nullptr); btnVolDown->user_data = this; diff --git a/src/displayapp/screens/Navigation.cpp b/src/displayapp/screens/Navigation.cpp index 0dd0d30..5779df3 100644 --- a/src/displayapp/screens/Navigation.cpp +++ b/src/displayapp/screens/Navigation.cpp @@ -192,7 +192,7 @@ void Navigation::Refresh() { if (progress > 90) { lv_obj_set_style_local_bg_color(barProgress, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_RED); } else { - lv_obj_set_style_local_bg_color(barProgress, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_ORANGE); + lv_obj_set_style_local_bg_color(barProgress, LV_BAR_PART_INDIC, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xff, 0xb0, 0x0)); } } } diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 600f748..9123921 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -181,7 +181,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, : mode {mode}, alertNotificationService {alertNotificationService}, motorController {motorController} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), NULL); - lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222222)); + lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x30, 0x30, 0x30)); lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); @@ -197,7 +197,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_align(alert_count, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 16); lv_obj_t* alert_type = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(alert_type, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x888888)); + lv_obj_set_style_local_text_color(alert_type, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); if(title == nullptr) { lv_label_set_text_static(alert_type, "Notification"); } else { @@ -218,7 +218,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, switch (category) { default: { lv_obj_t* alert_subject = lv_label_create(container1, nullptr); - lv_obj_set_style_local_text_color(alert_subject, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); + lv_obj_set_style_local_text_color(alert_subject, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xff, 0xb0, 0x0)); lv_label_set_long_mode(alert_subject, LV_LABEL_LONG_BREAK); lv_obj_set_width(alert_subject, LV_HOR_RES - 20); lv_label_set_text(alert_subject, msg); @@ -226,7 +226,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, case Controllers::NotificationManager::Categories::IncomingCall: { lv_obj_set_height(container1, 108); lv_obj_t* alert_subject = lv_label_create(container1, nullptr); - lv_obj_set_style_local_text_color(alert_subject, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); + lv_obj_set_style_local_text_color(alert_subject, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xff, 0xb0, 0x0)); lv_label_set_long_mode(alert_subject, LV_LABEL_LONG_BREAK); lv_obj_set_width(alert_subject, LV_HOR_RES - 20); lv_label_set_text_static(alert_subject, "Incoming call from"); @@ -244,7 +244,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_align(bt_accept, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); label_accept = lv_label_create(bt_accept, nullptr); lv_label_set_text_static(label_accept, Symbols::phone); - lv_obj_set_style_local_bg_color(bt_accept, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_obj_set_style_local_bg_color(bt_accept, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); bt_reject = lv_btn_create(lv_scr_act(), nullptr); bt_reject->user_data = this; @@ -262,7 +262,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_align(bt_mute, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); label_mute = lv_label_create(bt_mute, nullptr); lv_label_set_text_static(label_mute, Symbols::volumMute); - lv_obj_set_style_local_bg_color(bt_mute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_bg_color(bt_mute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); } break; } diff --git a/src/displayapp/screens/Steps.cpp b/src/displayapp/screens/Steps.cpp index df13758..8b5d3e4 100644 --- a/src/displayapp/screens/Steps.cpp +++ b/src/displayapp/screens/Steps.cpp @@ -38,7 +38,7 @@ Steps::Steps(Pinetime::Applications::DisplayApp* app, lv_obj_align(lSteps, nullptr, LV_ALIGN_CENTER, 0, -40); lv_obj_t* lstepsL = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(lstepsL, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); + lv_obj_set_style_local_text_color(lstepsL, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); lv_label_set_text_static(lstepsL, "Steps"); lv_obj_align(lstepsL, lSteps, LV_ALIGN_OUT_BOTTOM_MID, 0, 5); diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index cc54806..6de1986 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -42,13 +42,13 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) time = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); - lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text_static(time, "00:00"); lv_obj_align(time, lv_scr_act(), LV_ALIGN_CENTER, 0, -45); msecTime = lv_label_create(lv_scr_act(), nullptr); // lv_obj_set_style_local_text_font(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_bold_20); - lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text_static(msecTime, "00"); lv_obj_align(msecTime, lv_scr_act(), LV_ALIGN_CENTER, 0, 3); @@ -65,9 +65,9 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) lv_obj_set_event_cb(btnStopLap, stop_lap_event_handler); lv_obj_set_size(btnStopLap, 115, 50); lv_obj_align(btnStopLap, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); - lv_obj_set_style_local_bg_color(btnStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, lv_color_hex(0x080808)); + lv_obj_set_style_local_bg_color(btnStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, lv_color_hex(0x0b0b0b)); txtStopLap = lv_label_create(btnStopLap, nullptr); - lv_obj_set_style_local_text_color(txtStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, lv_color_hex(0x888888)); + lv_obj_set_style_local_text_color(txtStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text_static(txtStopLap, Symbols::stop); lv_obj_set_state(btnStopLap, LV_STATE_DISABLED); lv_obj_set_state(txtStopLap, LV_STATE_DISABLED); @@ -96,8 +96,8 @@ StopWatch::~StopWatch() { void StopWatch::Reset() { currentState = States::Init; oldTimeElapsed = 0; - lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); - lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); + lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text_static(time, "00:00"); lv_label_set_text_static(msecTime, "00"); @@ -113,8 +113,8 @@ void StopWatch::Reset() { void StopWatch::Start() { lv_obj_set_state(btnStopLap, LV_STATE_DEFAULT); lv_obj_set_state(txtStopLap, LV_STATE_DEFAULT); - lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); - lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); + lv_obj_set_style_local_text_color(msecTime, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); lv_label_set_text_static(txtPlayPause, Symbols::pause); lv_label_set_text_static(txtStopLap, Symbols::lapsFlag); startTime = xTaskGetTickCount(); diff --git a/src/displayapp/screens/Styles.cpp b/src/displayapp/screens/Styles.cpp index 7f43fb9..bcfd584 100644 --- a/src/displayapp/screens/Styles.cpp +++ b/src/displayapp/screens/Styles.cpp @@ -3,6 +3,6 @@ void Pinetime::Applications::Screens::SetRadioButtonStyle(lv_obj_t* checkbox) { lv_obj_set_style_local_radius(checkbox, LV_CHECKBOX_PART_BULLET, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); lv_obj_set_style_local_border_width(checkbox, LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, 9); - lv_obj_set_style_local_border_color(checkbox, LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, LV_COLOR_GREEN); + lv_obj_set_style_local_border_color(checkbox, LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); lv_obj_set_style_local_bg_color(checkbox, LV_CHECKBOX_PART_BULLET, LV_STATE_CHECKED, LV_COLOR_WHITE); } diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index e0138f8..e3983d7 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -78,12 +78,12 @@ std::unique_ptr SystemInfo::CreateScreen1() { lv_label_set_recolor(label, true); lv_label_set_text_fmt(label, "#FFFF00 InfiniTime#\n\n" - "#444444 Version# %ld.%ld.%ld\n" - "#444444 Short Ref# %s\n" - "#444444 Build date#\n" + "#808080 Version# %ld.%ld.%ld\n" + "#808080 Short Ref# %s\n" + "#808080 Build date#\n" "%s\n" "%s\n\n" - "#444444 Bootloader# %s", + "#808080 Bootloader# %s", Version::Major(), Version::Minor(), Version::Patch(), @@ -139,14 +139,14 @@ std::unique_ptr SystemInfo::CreateScreen2() { lv_obj_t* label = lv_label_create(lv_scr_act(), nullptr); lv_label_set_recolor(label, true); lv_label_set_text_fmt(label, - "#444444 Date# %02d/%02d/%04d\n" - "#444444 Time# %02d:%02d:%02d\n" - "#444444 Uptime#\n %02lud %02lu:%02lu:%02lu\n" - "#444444 Battery# %d%%/%03imV\n" - "#444444 Backlight# %s\n" - "#444444 Last reset# %s\n" - "#444444 Accel.# %s\n" - "#444444 Touch.# %x.%x.%x\n", + "#808080 Date# %02d/%02d/%04d\n" + "#808080 Time# %02d:%02d:%02d\n" + "#808080 Uptime#\n %02lud %02lu:%02lu:%02lu\n" + "#808080 Battery# %d%%/%03imV\n" + "#808080 Backlight# %s\n" + "#808080 Last reset# %s\n" + "#808080 Accel.# %s\n" + "#808080 Touch.# %x.%x.%x\n", dateTimeController.Day(), static_cast(dateTimeController.Month()), dateTimeController.Year(), @@ -177,14 +177,14 @@ std::unique_ptr SystemInfo::CreateScreen3() { lv_label_set_recolor(label, true); auto& bleAddr = bleController.Address(); lv_label_set_text_fmt(label, - "#444444 BLE MAC#\n" + "#808080 BLE MAC#\n" " %02x:%02x:%02x:%02x:%02x:%02x" "\n" - "#444444 LVGL Memory#\n" - " #444444 used# %d (%d%%)\n" - " #444444 max used# %lu\n" - " #444444 frag# %d%%\n" - " #444444 free# %d", + "#808080 LVGL Memory#\n" + " #808080 used# %d (%d%%)\n" + " #808080 max used# %lu\n" + " #808080 frag# %d%%\n" + " #808080 free# %d", bleAddr[5], bleAddr[4], bleAddr[3], @@ -212,7 +212,7 @@ std::unique_ptr SystemInfo::CreateScreen4() { lv_table_set_col_cnt(infoTask, 4); lv_table_set_row_cnt(infoTask, maxTaskCount + 1); lv_obj_set_style_local_pad_all(infoTask, LV_TABLE_PART_CELL1, LV_STATE_DEFAULT, 0); - lv_obj_set_style_local_border_color(infoTask, LV_TABLE_PART_CELL1, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_border_color(infoTask, LV_TABLE_PART_CELL1, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_table_set_cell_value(infoTask, 0, 0, "#"); lv_table_set_col_width(infoTask, 0, 30); @@ -269,11 +269,11 @@ std::unique_ptr SystemInfo::CreateScreen5() { "under the terms of\n" "the GNU General\n" "Public License v3\n" - "#444444 Source code#\n" + "#808080 Source code#\n" "#FFFF00 https://github.com/#\n" "#FFFF00 InfiniTimeOrg/#\n" "#FFFF00 InfiniTime#"); lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); lv_obj_align(label, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); return std::make_unique(4, 5, app, label); -} \ No newline at end of file +} diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 4df69fe..4838bb3 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -63,7 +63,7 @@ Tile::Tile(uint8_t screenID, pageIndicator = lv_line_create(lv_scr_act(), nullptr); lv_obj_set_style_local_line_width(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, 3); - lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_line_color(pageIndicator, LV_LINE_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_line_set_points(pageIndicator, pageIndicatorPoints, 2); } @@ -87,9 +87,9 @@ Tile::Tile(uint8_t screenID, lv_obj_align(btnm1, NULL, LV_ALIGN_CENTER, 0, 10); lv_obj_set_style_local_radius(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, LV_OPA_20); + lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, LV_OPA_40); lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, LV_OPA_20); + lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, LV_OPA_40); lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, lv_color_hex(0x111111)); lv_obj_set_style_local_pad_all(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 0); lv_obj_set_style_local_pad_inner(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 10); diff --git a/src/displayapp/screens/Timer.cpp b/src/displayapp/screens/Timer.cpp index 295f097..bf630b6 100644 --- a/src/displayapp/screens/Timer.cpp +++ b/src/displayapp/screens/Timer.cpp @@ -55,7 +55,7 @@ Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController) time = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); - lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); + lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); uint32_t seconds = timerController.GetTimeRemaining() / 1000; lv_label_set_text_fmt(time, "%02lu:%02lu", seconds / 60, seconds % 60); diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index 4cfc969..6f9dd1b 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -79,7 +79,7 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, // Date - Day / Week day label_date_day = lv_label_create(lv_scr_act(), NULL); - lv_obj_set_style_local_text_color(label_date_day, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xf0a500)); + lv_obj_set_style_local_text_color(label_date_day, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xff, 0xb0, 0x0)); lv_label_set_text_fmt(label_date_day, "%s\n%02i", dateTimeController.DayOfWeekShortToString(), dateTimeController.Day()); lv_label_set_align(label_date_day, LV_LABEL_ALIGN_CENTER); lv_obj_align(label_date_day, NULL, LV_ALIGN_CENTER, 50, 0); @@ -181,7 +181,7 @@ void WatchFaceAnalog::UpdateClock() { void WatchFaceAnalog::SetBatteryIcon() { auto batteryPercent = batteryPercentRemaining.Get(); if (batteryPercent == 100) { - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); } else { lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); } diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index ad328e1..866e169 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -111,7 +111,7 @@ void WatchFaceDigital::Refresh() { if (batteryPercentRemaining.IsUpdated()) { auto batteryPercent = batteryPercentRemaining.Get(); if (batteryPercent == 100) { - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GREEN); + lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); } else { lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); } diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 97faaa7..44d1aa2 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -51,7 +51,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_style_init(&btn_style); lv_style_set_radius(&btn_style, LV_STATE_DEFAULT, buttonHeight / 4); - lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, lv_color_hex(0x111111)); + lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x1c, 0x1c, 0x1c)); btn1 = lv_btn_create(lv_scr_act(), nullptr); btn1->user_data = this; @@ -81,7 +81,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_obj_set_event_cb(btn3, ButtonEventHandler); lv_btn_set_checkable(btn3, true); lv_obj_add_style(btn3, LV_BTN_PART_MAIN, &btn_style); - lv_obj_set_style_local_bg_color(btn3, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_GREEN); + lv_obj_set_style_local_bg_color(btn3, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); lv_obj_set_size(btn3, buttonWidth, buttonHeight); lv_obj_align(btn3, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, buttonXOffset, 0); diff --git a/src/displayapp/screens/settings/SettingShakeThreshold.cpp b/src/displayapp/screens/settings/SettingShakeThreshold.cpp index c354bdc..0cf5821 100644 --- a/src/displayapp/screens/settings/SettingShakeThreshold.cpp +++ b/src/displayapp/screens/settings/SettingShakeThreshold.cpp @@ -123,8 +123,8 @@ void SettingShakeThreshold::UpdateSelected(lv_obj_t* object, lv_event_t event) { vCalTime = xTaskGetTickCount(); lv_label_set_text_static(calLabel, "Ready!"); lv_obj_set_click(positionArc, false); - lv_obj_set_style_local_bg_color(calButton, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_GREEN); - lv_obj_set_style_local_bg_color(calButton, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_GREEN); + lv_obj_set_style_local_bg_color(calButton, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); + lv_obj_set_style_local_bg_color(calButton, LV_BTN_PART_MAIN, LV_STATE_CHECKED, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); } else if (lv_btn_get_state(calButton) == LV_BTN_STATE_RELEASED) { calibrating = 0; lv_obj_set_click(positionArc, true); diff --git a/src/drivers/St7789.cpp b/src/drivers/St7789.cpp index fd1366f..d520199 100644 --- a/src/drivers/St7789.cpp +++ b/src/drivers/St7789.cpp @@ -23,6 +23,7 @@ void St7789::Init() { RowAddressSet(); DisplayInversionOn(); NormalModeOn(); + SetGamma(); DisplayOn(); } @@ -114,6 +115,11 @@ void St7789::WriteToRam() { WriteCommand(static_cast(Commands::WriteToRam)); } +void St7789::SetGamma() { + WriteCommand(static_cast(Commands::GammaSet)); + WriteData(0x04); +} + void St7789::DisplayOff() { WriteCommand(static_cast(Commands::DisplayOff)); nrf_delay_ms(500); diff --git a/src/drivers/St7789.h b/src/drivers/St7789.h index 4fbccbe..1317abe 100644 --- a/src/drivers/St7789.h +++ b/src/drivers/St7789.h @@ -43,6 +43,7 @@ namespace Pinetime { void NormalModeOn(); void WriteToRam(); void SetAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1); + void SetGamma(); void WriteCommand(uint8_t cmd); void WriteSpi(const uint8_t* data, size_t size); @@ -52,6 +53,7 @@ namespace Pinetime { SleepOut = 0x11, NormalModeOn = 0x13, DisplayInversionOn = 0x21, + GammaSet = 0x26, DisplayOff = 0x28, DisplayOn = 0x29, ColumnAddressSet = 0x2a, -- cgit v0.10.2 From f82aa71eb0dbf4f026a4e7ff0cc848dbf307b98e Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 22 Apr 2022 23:52:18 +0300 Subject: Improve PTS color matching after gamma change diff --git a/src/displayapp/Colors.cpp b/src/displayapp/Colors.cpp index be92306..2ac5fca 100644 --- a/src/displayapp/Colors.cpp +++ b/src/displayapp/Colors.cpp @@ -10,17 +10,17 @@ lv_color_t Pinetime::Applications::Convert(Pinetime::Controllers::Settings::Colo case Pinetime::Controllers::Settings::Colors::Gray: return LV_COLOR_GRAY; case Pinetime::Controllers::Settings::Colors::Black: return LV_COLOR_BLACK; case Pinetime::Controllers::Settings::Colors::Red: return LV_COLOR_RED; - case Pinetime::Controllers::Settings::Colors::Maroon: return lv_color_lighten(LV_COLOR_MAROON, LV_OPA_20); + case Pinetime::Controllers::Settings::Colors::Maroon: return LV_COLOR_MAKE(0xb0, 0x0, 0x0); case Pinetime::Controllers::Settings::Colors::Yellow: return LV_COLOR_YELLOW; - case Pinetime::Controllers::Settings::Colors::Olive: return lv_color_lighten(LV_COLOR_OLIVE, LV_OPA_20); + case Pinetime::Controllers::Settings::Colors::Olive: return LV_COLOR_MAKE(0xb0, 0xb0, 0x0); case Pinetime::Controllers::Settings::Colors::Lime: return LV_COLOR_LIME; - case Pinetime::Controllers::Settings::Colors::Green: return lv_color_lighten(LV_COLOR_GREEN, LV_OPA_20); + case Pinetime::Controllers::Settings::Colors::Green: return LV_COLOR_MAKE(0x0, 0xb0, 0x0); case Pinetime::Controllers::Settings::Colors::Cyan: return LV_COLOR_CYAN; - case Pinetime::Controllers::Settings::Colors::Teal: return lv_color_lighten(LV_COLOR_TEAL, LV_OPA_20); + case Pinetime::Controllers::Settings::Colors::Teal: return LV_COLOR_MAKE(0x0, 0xb0, 0xb0); case Pinetime::Controllers::Settings::Colors::Blue: return LV_COLOR_BLUE; - case Pinetime::Controllers::Settings::Colors::Navy: return lv_color_lighten(LV_COLOR_NAVY, LV_OPA_20); + case Pinetime::Controllers::Settings::Colors::Navy: return LV_COLOR_MAKE(0x0, 0x0, 0xb0); case Pinetime::Controllers::Settings::Colors::Magenta: return LV_COLOR_MAGENTA; - case Pinetime::Controllers::Settings::Colors::Purple: return lv_color_lighten(LV_COLOR_PURPLE, LV_OPA_20); + case Pinetime::Controllers::Settings::Colors::Purple: return LV_COLOR_MAKE(0xb0, 0x0, 0xb0); case Pinetime::Controllers::Settings::Colors::Orange: return LV_COLOR_ORANGE; default: return LV_COLOR_WHITE; } -- cgit v0.10.2 From 34858d0a6cf750ec53bc160e75fcc29dbeed5e83 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 28 Mar 2022 17:00:23 +0300 Subject: Update track progress in MusicService. Fix #127 diff --git a/src/components/ble/MusicService.cpp b/src/components/ble/MusicService.cpp index c99aa1e..83b26a7 100644 --- a/src/components/ble/MusicService.cpp +++ b/src/components/ble/MusicService.cpp @@ -152,12 +152,20 @@ int Pinetime::Controllers::MusicService::OnCommand(uint16_t conn_handle, uint16_ albumName = s; } else if (ble_uuid_cmp(ctxt->chr->uuid, &msStatusCharUuid.u) == 0) { playing = s[0]; + // These variables need to be updated, because the progress may not be updated immediately, + // leading to getProgress() returning an incorrect position. + if (playing) { + trackProgressUpdateTime = xTaskGetTickCount(); + } else { + trackProgress += static_cast((static_cast(xTaskGetTickCount() - trackProgressUpdateTime) / 1024.0f) * getPlaybackSpeed()); + } } else if (ble_uuid_cmp(ctxt->chr->uuid, &msRepeatCharUuid.u) == 0) { repeat = s[0]; } else if (ble_uuid_cmp(ctxt->chr->uuid, &msShuffleCharUuid.u) == 0) { shuffle = s[0]; } else if (ble_uuid_cmp(ctxt->chr->uuid, &msPositionCharUuid.u) == 0) { trackProgress = (s[0] << 24) | (s[1] << 16) | (s[2] << 8) | s[3]; + trackProgressUpdateTime = xTaskGetTickCount(); } else if (ble_uuid_cmp(ctxt->chr->uuid, &msTotalLengthCharUuid.u) == 0) { trackLength = (s[0] << 24) | (s[1] << 16) | (s[2] << 8) | s[3]; } else if (ble_uuid_cmp(ctxt->chr->uuid, &msTrackNumberCharUuid.u) == 0) { @@ -191,7 +199,10 @@ float Pinetime::Controllers::MusicService::getPlaybackSpeed() const { return playbackSpeed; } -int Pinetime::Controllers::MusicService::getProgress() const { +int Pinetime::Controllers::MusicService::getProgress() { + if (isPlaying()) { + return trackProgress + static_cast((static_cast(xTaskGetTickCount() - trackProgressUpdateTime) / 1024.0f) * getPlaybackSpeed()); + } return trackProgress; } diff --git a/src/components/ble/MusicService.h b/src/components/ble/MusicService.h index 1ad9a42..6c1a6ed 100644 --- a/src/components/ble/MusicService.h +++ b/src/components/ble/MusicService.h @@ -47,7 +47,7 @@ namespace Pinetime { std::string getAlbum() const; - int getProgress() const; + int getProgress(); int getTrackLength() const; @@ -81,6 +81,7 @@ namespace Pinetime { int trackLength {0}; int trackNumber {}; int tracksTotal {}; + TickType_t trackProgressUpdateTime {0}; float playbackSpeed {1.0f}; diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index 6c91c1e..b789224 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -152,32 +152,27 @@ Music::~Music() { void Music::Refresh() { if (artist != musicService.getArtist()) { artist = musicService.getArtist(); - currentLength = 0; + currentPosition = 0; lv_label_set_text(txtArtist, artist.data()); } if (track != musicService.getTrack()) { track = musicService.getTrack(); - currentLength = 0; + currentPosition = 0; lv_label_set_text(txtTrack, track.data()); } if (album != musicService.getAlbum()) { album = musicService.getAlbum(); - currentLength = 0; + currentPosition = 0; } if (playing != musicService.isPlaying()) { playing = musicService.isPlaying(); } - // Because we increment this ourselves, - // we can't compare with the old data directly - // have to update it when there's actually new data - // just to avoid unnecessary draws that make UI choppy - if (lastLength != musicService.getProgress()) { - currentLength = musicService.getProgress(); - lastLength = currentLength; + if (currentPosition != musicService.getProgress()) { + currentPosition = musicService.getProgress(); UpdateLength(); } @@ -186,7 +181,7 @@ void Music::Refresh() { UpdateLength(); } - if (playing == Pinetime::Controllers::MusicService::MusicStatus::Playing) { + if (playing) { lv_label_set_text_static(txtPlayPause, Symbols::pause); if (xTaskGetTickCount() - 1024 >= lastIncrement) { @@ -197,18 +192,12 @@ void Music::Refresh() { } frameB = !frameB; - if (currentLength < totalLength) { - currentLength += - static_cast((static_cast(xTaskGetTickCount() - lastIncrement) / 1024.0f) * musicService.getPlaybackSpeed()); - } else { + if (currentPosition >= totalLength) { // Let's assume the getTrack finished, paused when the timer ends // and there's no new getTrack being sent to us - // TODO: ideally this would be configurable playing = false; } lastIncrement = xTaskGetTickCount(); - - UpdateLength(); } } else { lv_label_set_text_static(txtPlayPause, Symbols::play); @@ -221,15 +210,15 @@ void Music::UpdateLength() { } else if (totalLength > (99 * 60)) { lv_label_set_text_fmt(txtTrackDuration, "%02d:%02d/%02d:%02d", - (currentLength / (60 * 60)) % 100, - ((currentLength % (60 * 60)) / 60) % 100, + (currentPosition / (60 * 60)) % 100, + ((currentPosition % (60 * 60)) / 60) % 100, (totalLength / (60 * 60)) % 100, ((totalLength % (60 * 60)) / 60) % 100); } else { lv_label_set_text_fmt(txtTrackDuration, "%02d:%02d/%02d:%02d", - (currentLength / 60) % 100, - (currentLength % 60) % 100, + (currentPosition / 60) % 100, + (currentPosition % 60) % 100, (totalLength / 60) % 100, (totalLength % 60) % 100); } diff --git a/src/displayapp/screens/Music.h b/src/displayapp/screens/Music.h index 27b2d3d..258a402 100644 --- a/src/displayapp/screens/Music.h +++ b/src/displayapp/screens/Music.h @@ -70,10 +70,8 @@ namespace Pinetime { /** Total length in seconds */ int totalLength = 0; - /** Current length in seconds */ - int currentLength; - /** Last length */ - int lastLength; + /** Current position in seconds */ + int currentPosition; /** Last time an animation update or timer was incremented */ TickType_t lastIncrement = 0; -- cgit v0.10.2 From 36cb7c82f3638a068f7affdd0a8d7380fdace8e3 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 29 Mar 2022 23:06:48 +0300 Subject: Remove now unused position override It gets overridden later anyway diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index b789224..194aeed 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -152,19 +152,16 @@ Music::~Music() { void Music::Refresh() { if (artist != musicService.getArtist()) { artist = musicService.getArtist(); - currentPosition = 0; lv_label_set_text(txtArtist, artist.data()); } if (track != musicService.getTrack()) { track = musicService.getTrack(); - currentPosition = 0; lv_label_set_text(txtTrack, track.data()); } if (album != musicService.getAlbum()) { album = musicService.getAlbum(); - currentPosition = 0; } if (playing != musicService.isPlaying()) { -- cgit v0.10.2 From b6807ee3ca40b19f89369cf159d1794153268b0c Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 24 Apr 2022 12:38:09 +0300 Subject: Make functions const again diff --git a/src/components/ble/MusicService.cpp b/src/components/ble/MusicService.cpp index 83b26a7..60747e9 100644 --- a/src/components/ble/MusicService.cpp +++ b/src/components/ble/MusicService.cpp @@ -199,7 +199,7 @@ float Pinetime::Controllers::MusicService::getPlaybackSpeed() const { return playbackSpeed; } -int Pinetime::Controllers::MusicService::getProgress() { +int Pinetime::Controllers::MusicService::getProgress() const { if (isPlaying()) { return trackProgress + static_cast((static_cast(xTaskGetTickCount() - trackProgressUpdateTime) / 1024.0f) * getPlaybackSpeed()); } diff --git a/src/components/ble/MusicService.h b/src/components/ble/MusicService.h index 6c1a6ed..047d0d2 100644 --- a/src/components/ble/MusicService.h +++ b/src/components/ble/MusicService.h @@ -47,7 +47,7 @@ namespace Pinetime { std::string getAlbum() const; - int getProgress(); + int getProgress() const; int getTrackLength() const; -- cgit v0.10.2 From 2e42b9000904fe56e2f8cff238a4d911f7648520 Mon Sep 17 00:00:00 2001 From: Reinhold Gschweicher Date: Sun, 3 Apr 2022 20:51:53 +0200 Subject: Keep the paddle on screen in whole As suggested in https://github.com/InfiniTimeOrg/InfiniTime/issues/1062 in point 3. The paddle should be kept on screen and not travel out of the screen boundaries. Co-authored-by: Riku Isokoski diff --git a/src/displayapp/screens/Paddle.cpp b/src/displayapp/screens/Paddle.cpp index 79401ff..2865db0 100644 --- a/src/displayapp/screens/Paddle.cpp +++ b/src/displayapp/screens/Paddle.cpp @@ -85,7 +85,14 @@ bool Paddle::OnTouchEvent(Pinetime::Applications::TouchEvents event) { bool Paddle::OnTouchEvent(uint16_t x, uint16_t y) { // sets the center paddle pos. (30px offset) with the the y_coordinate of the finger - lv_obj_set_pos(paddle, 0, y - 30); + // but clamp it such that the paddle never clips off screen + if (y < 31) { + lv_obj_set_pos(paddle, 0, 1); + } else if (y > LV_VER_RES - 31) { + lv_obj_set_pos(paddle, 0, LV_VER_RES - 61); + } else { + lv_obj_set_pos(paddle, 0, y - 30); + } paddlePos = y; return true; } -- cgit v0.10.2 From b7b1af1c4c3c21f62bf9627d39a37924be541c16 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sat, 17 Jul 2021 11:59:19 +0300 Subject: Replace app_timer with FreeRTOS timers diff --git a/src/components/timer/TimerController.cpp b/src/components/timer/TimerController.cpp index 79e44d6..92f4e69 100644 --- a/src/components/timer/TimerController.cpp +++ b/src/components/timer/TimerController.cpp @@ -1,69 +1,39 @@ -// -// Created by florian on 16.05.21. -// - #include "components/timer/TimerController.h" #include "systemtask/SystemTask.h" -#include "app_timer.h" -#include "task.h" using namespace Pinetime::Controllers; - -APP_TIMER_DEF(timerAppTimer); - -namespace { - void TimerEnd(void* p_context) { - auto* controller = static_cast (p_context); - if(controller != nullptr) - controller->OnTimerEnd(); - } +void TimerCallback(TimerHandle_t xTimer) { + auto* controller = static_cast(pvTimerGetTimerID(xTimer)); + controller->OnTimerEnd(); } - -void TimerController::Init() { - app_timer_create(&timerAppTimer, APP_TIMER_MODE_SINGLE_SHOT, TimerEnd); +void TimerController::Init(Pinetime::System::SystemTask* systemTask) { + this->systemTask = systemTask; + timer = xTimerCreate("Timer", 0, pdFALSE, this, TimerCallback); } void TimerController::StartTimer(uint32_t duration) { - app_timer_stop(timerAppTimer); - auto currentTicks = xTaskGetTickCount(); - app_timer_start(timerAppTimer, APP_TIMER_TICKS(duration), this); - endTicks = currentTicks + APP_TIMER_TICKS(duration); - timerRunning = true; + xTimerChangePeriod(timer, pdMS_TO_TICKS(duration), 0); + xTimerStart(timer, 0); } uint32_t TimerController::GetTimeRemaining() { - if (!timerRunning) { - return 0; + if (IsRunning()) { + TickType_t remainingTime = xTimerGetExpiryTime(timer) - xTaskGetTickCount(); + return (remainingTime * 1000 / configTICK_RATE_HZ); } - auto currentTicks = xTaskGetTickCount(); - - TickType_t deltaTicks = 0; - if (currentTicks > endTicks) { - deltaTicks = 0xffffffff - currentTicks; - deltaTicks += (endTicks + 1); - } else { - deltaTicks = endTicks - currentTicks; - } - - return (static_cast(deltaTicks) / static_cast(configTICK_RATE_HZ)) * 1000; + return 0; } void TimerController::StopTimer() { - app_timer_stop(timerAppTimer); - timerRunning = false; + xTimerStop(timer, 0); } bool TimerController::IsRunning() { - return timerRunning; -} -void TimerController::OnTimerEnd() { - timerRunning = false; - if(systemTask != nullptr) - systemTask->PushMessage(System::Messages::OnTimerDone); + return (xTimerIsTimerActive(timer) == pdTRUE); } -void TimerController::Register(Pinetime::System::SystemTask* systemTask) { - this->systemTask = systemTask; +void TimerController::OnTimerEnd() { + systemTask->PushMessage(System::Messages::OnTimerDone); } diff --git a/src/components/timer/TimerController.h b/src/components/timer/TimerController.h index fa7bc90..93d8afc 100644 --- a/src/components/timer/TimerController.h +++ b/src/components/timer/TimerController.h @@ -1,37 +1,33 @@ #pragma once -#include -#include "app_timer.h" -#include "portmacro_cmsis.h" +#include +#include namespace Pinetime { namespace System { class SystemTask; } namespace Controllers { - + class TimerController { public: TimerController() = default; - - void Init(); - + + void Init(System::SystemTask* systemTask); + void StartTimer(uint32_t duration); - + void StopTimer(); - + uint32_t GetTimeRemaining(); - + bool IsRunning(); void OnTimerEnd(); - void Register(System::SystemTask* systemTask); - private: System::SystemTask* systemTask = nullptr; - TickType_t endTicks; - bool timerRunning = false; + TimerHandle_t timer; }; } -} \ No newline at end of file +} diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 38c728f..f4eeffc 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -2,7 +2,7 @@ #include #include #include - +#include #include "BootloaderVersion.h" #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" @@ -152,8 +152,7 @@ void SystemTask::Work() { batteryController.Register(this); motorController.Init(); motionSensor.SoftReset(); - timerController.Register(this); - timerController.Init(); + timerController.Init(this); alarmController.Init(this); // Reset the TWI device because the motion sensor chip most probably crashed it... -- cgit v0.10.2 From 54df828665b135aa5e49a2e182bad59d2d705039 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sat, 9 Apr 2022 13:37:31 +0300 Subject: Fix warnings diff --git a/src/displayapp/screens/FirmwareValidation.cpp b/src/displayapp/screens/FirmwareValidation.cpp index 2403b58..52ff954 100644 --- a/src/displayapp/screens/FirmwareValidation.cpp +++ b/src/displayapp/screens/FirmwareValidation.cpp @@ -7,11 +7,10 @@ using namespace Pinetime::Applications::Screens; namespace { - static void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { - FirmwareValidation* screen = static_cast(obj->user_data); + void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); screen->OnButtonEvent(obj, event); } - } FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::FirmwareValidator& validator) diff --git a/src/displayapp/screens/HeartRate.cpp b/src/displayapp/screens/HeartRate.cpp index 77d9121..ac061b4 100644 --- a/src/displayapp/screens/HeartRate.cpp +++ b/src/displayapp/screens/HeartRate.cpp @@ -21,8 +21,8 @@ namespace { return ""; } - static void btnStartStopEventHandler(lv_obj_t* obj, lv_event_t event) { - HeartRate* screen = static_cast(obj->user_data); + void btnStartStopEventHandler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); screen->OnStartStopEvent(event); } } diff --git a/src/displayapp/screens/List.cpp b/src/displayapp/screens/List.cpp index 7d8a141..ffc6215 100644 --- a/src/displayapp/screens/List.cpp +++ b/src/displayapp/screens/List.cpp @@ -5,11 +5,10 @@ using namespace Pinetime::Applications::Screens; namespace { - static void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { - List* screen = static_cast(obj->user_data); + void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); screen->OnButtonEvent(obj, event); } - } List::List(uint8_t screenID, diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 4838bb3..cfbe44d 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -5,13 +5,15 @@ using namespace Pinetime::Applications::Screens; namespace { - static void lv_update_task(struct _lv_task_t* task) { + void lv_update_task(struct _lv_task_t* task) { auto* user_data = static_cast(task->user_data); user_data->UpdateScreen(); } - static void event_handler(lv_obj_t* obj, lv_event_t event) { - if (event != LV_EVENT_VALUE_CHANGED) return; + void event_handler(lv_obj_t* obj, lv_event_t event) { + if (event != LV_EVENT_VALUE_CHANGED) { + return; + } Tile* screen = static_cast(obj->user_data); auto* eventDataPtr = (uint32_t*) lv_event_get_data(); diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 44d1aa2..aa7f17a 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -6,12 +6,12 @@ using namespace Pinetime::Applications::Screens; namespace { - static void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { + void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { auto* screen = static_cast(obj->user_data); screen->OnButtonEvent(obj, event); } - static void lv_update_task(struct _lv_task_t* task) { + void lv_update_task(struct _lv_task_t* task) { auto* user_data = static_cast(task->user_data); user_data->UpdateScreen(); } diff --git a/src/displayapp/screens/settings/SettingBluetooth.cpp b/src/displayapp/screens/settings/SettingBluetooth.cpp index ab1af22..2fc5d95 100644 --- a/src/displayapp/screens/settings/SettingBluetooth.cpp +++ b/src/displayapp/screens/settings/SettingBluetooth.cpp @@ -9,12 +9,12 @@ using namespace Pinetime::Applications::Screens; namespace { - static void OnBluetoothDisabledEvent(lv_obj_t* obj, lv_event_t event) { + void OnBluetoothDisabledEvent(lv_obj_t* obj, lv_event_t event) { auto* screen = static_cast(obj->user_data); screen->OnBluetoothDisabled(obj, event); } - static void OnBluetoothEnabledEvent(lv_obj_t* obj, lv_event_t event) { + void OnBluetoothEnabledEvent(lv_obj_t* obj, lv_event_t event) { auto* screen = static_cast(obj->user_data); screen->OnBluetoothEnabled(obj, event); } diff --git a/src/displayapp/screens/settings/SettingChimes.cpp b/src/displayapp/screens/settings/SettingChimes.cpp index 543b5e0..d53d4da 100644 --- a/src/displayapp/screens/settings/SettingChimes.cpp +++ b/src/displayapp/screens/settings/SettingChimes.cpp @@ -8,8 +8,8 @@ using namespace Pinetime::Applications::Screens; namespace { - static void event_handler(lv_obj_t* obj, lv_event_t event) { - SettingChimes* screen = static_cast(obj->user_data); + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); screen->UpdateSelected(obj, event); } } diff --git a/src/displayapp/screens/settings/SettingDisplay.cpp b/src/displayapp/screens/settings/SettingDisplay.cpp index 9e972af..229143f 100644 --- a/src/displayapp/screens/settings/SettingDisplay.cpp +++ b/src/displayapp/screens/settings/SettingDisplay.cpp @@ -9,8 +9,8 @@ using namespace Pinetime::Applications::Screens; namespace { - static void event_handler(lv_obj_t* obj, lv_event_t event) { - SettingDisplay* screen = static_cast(obj->user_data); + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); screen->UpdateSelected(obj, event); } } diff --git a/src/displayapp/screens/settings/SettingTimeFormat.cpp b/src/displayapp/screens/settings/SettingTimeFormat.cpp index bd9af15..5502794 100644 --- a/src/displayapp/screens/settings/SettingTimeFormat.cpp +++ b/src/displayapp/screens/settings/SettingTimeFormat.cpp @@ -8,8 +8,8 @@ using namespace Pinetime::Applications::Screens; namespace { - static void event_handler(lv_obj_t* obj, lv_event_t event) { - SettingTimeFormat* screen = static_cast(obj->user_data); + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); screen->UpdateSelected(obj, event); } } diff --git a/src/displayapp/screens/settings/SettingWakeUp.cpp b/src/displayapp/screens/settings/SettingWakeUp.cpp index e1b6e36..4a4b60f 100644 --- a/src/displayapp/screens/settings/SettingWakeUp.cpp +++ b/src/displayapp/screens/settings/SettingWakeUp.cpp @@ -8,8 +8,8 @@ using namespace Pinetime::Applications::Screens; namespace { - static void event_handler(lv_obj_t* obj, lv_event_t event) { - SettingWakeUp* screen = static_cast(obj->user_data); + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); screen->UpdateSelected(obj, event); } } diff --git a/src/displayapp/screens/settings/SettingWatchFace.cpp b/src/displayapp/screens/settings/SettingWatchFace.cpp index 5008592..3cb2a36 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.cpp +++ b/src/displayapp/screens/settings/SettingWatchFace.cpp @@ -8,8 +8,8 @@ using namespace Pinetime::Applications::Screens; namespace { - static void event_handler(lv_obj_t* obj, lv_event_t event) { - SettingWatchFace* screen = static_cast(obj->user_data); + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); screen->UpdateSelected(obj, event); } } -- cgit v0.10.2 From b31fbb4adb0f895ff32b93fff492070e44716d54 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Thu, 7 Apr 2022 17:28:04 +0300 Subject: New sharper batteryicon. Remove old unused batteryicons diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b233f92..ba2d561 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -367,30 +367,7 @@ set(QCBOR_SRC ) list(APPEND IMAGE_FILES - displayapp/icons/battery/os_battery_error.c - displayapp/icons/battery/os_battery_100.c - displayapp/icons/battery/os_battery_090.c - displayapp/icons/battery/os_battery_080.c - displayapp/icons/battery/os_battery_070.c - displayapp/icons/battery/os_battery_060.c - displayapp/icons/battery/os_battery_050.c - displayapp/icons/battery/os_battery_040.c - displayapp/icons/battery/os_battery_030.c - displayapp/icons/battery/os_battery_020.c - displayapp/icons/battery/os_battery_010.c - displayapp/icons/battery/os_battery_005.c - - displayapp/icons/battery/os_batterycharging_100.c - displayapp/icons/battery/os_batterycharging_090.c - displayapp/icons/battery/os_batterycharging_080.c - displayapp/icons/battery/os_batterycharging_070.c - displayapp/icons/battery/os_batterycharging_060.c - displayapp/icons/battery/os_batterycharging_050.c - displayapp/icons/battery/os_batterycharging_040.c - displayapp/icons/battery/os_batterycharging_030.c - displayapp/icons/battery/os_batterycharging_020.c - displayapp/icons/battery/os_batterycharging_010.c - displayapp/icons/battery/os_batterycharging_005.c + displayapp/icons/battery/batteryicon.c displayapp/icons/bluetooth/os_bt_connected.c displayapp/icons/bluetooth/os_bt_disconnected.c diff --git a/src/displayapp/icons/battery/battery.png b/src/displayapp/icons/battery/battery.png new file mode 100644 index 0000000..0fca804 Binary files /dev/null and b/src/displayapp/icons/battery/battery.png differ diff --git a/src/displayapp/icons/battery/batteryicon.c b/src/displayapp/icons/battery/batteryicon.c new file mode 100644 index 0000000..05ddf16 --- /dev/null +++ b/src/displayapp/icons/battery/batteryicon.c @@ -0,0 +1,52 @@ +#if defined(LV_LVGL_H_INCLUDE_SIMPLE) +#include "lvgl.h" +#else +#include "lvgl/lvgl.h" +#endif + + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_BATTERYICON +#define LV_ATTRIBUTE_IMG_BATTERYICON +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_BATTERYICON uint8_t batteryicon_map[] = { + 0xff, 0xff, 0xff, 0xff, /*Color of index 0*/ + 0x6a, 0xfc, 0x6c, 0xff, /*Color of index 1*/ + + 0xe0, 0x70, + 0xe0, 0x70, + 0x00, 0x00, + 0x00, 0x00, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x3f, 0xc0, + 0x00, 0x00, + 0x00, 0x00, +}; + +const lv_img_dsc_t batteryicon = { + { + LV_IMG_CF_INDEXED_1BIT, + 0, + 0, + 12, + 20, + }, + 48, + batteryicon_map, +}; diff --git a/src/displayapp/icons/battery/os_battery_005.c b/src/displayapp/icons/battery/os_battery_005.c deleted file mode 100644 index 64832b5..0000000 --- a/src/displayapp/icons/battery/os_battery_005.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_005 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_005 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_005 uint8_t ck_os_battery_005_map[] = { - 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - - 0xfc, 0x00, 0x3f, - 0xf8, 0x00, 0x1f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0x00, 0xff, 0x00, - 0x00, 0xff, 0x00, - 0x00, 0xff, 0x00, - 0x00, 0xff, 0x00, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, -}; - -const lv_img_dsc_t ck_os_battery_005 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_005_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_005.png b/src/displayapp/icons/battery/os_battery_005.png deleted file mode 100644 index 963767b..0000000 Binary files a/src/displayapp/icons/battery/os_battery_005.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_battery_010.c b/src/displayapp/icons/battery/os_battery_010.c deleted file mode 100644 index f36b684..0000000 --- a/src/displayapp/icons/battery/os_battery_010.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_010 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_010 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_010 uint8_t ck_os_battery_010_map[] = { - 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - 0x04, 0x7a, 0xf4, 0xff, /*Color of index 2*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 3*/ - - 0x55, 0x5f, 0xff, 0xff, 0xf5, 0x55, 0x55, - 0x55, 0x7f, 0xff, 0xff, 0xfd, 0x55, 0x55, - 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, - 0x55, 0xff, 0xff, 0xff, 0xff, 0x55, 0x55, - 0xff, 0xff, 0x55, 0x55, 0xff, 0xff, 0x55, - 0xff, 0xff, 0x55, 0x55, 0xff, 0xff, 0x55, - 0xff, 0xff, 0x55, 0x55, 0xff, 0xff, 0x55, - 0xff, 0xff, 0x55, 0x55, 0xff, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0xff, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xff, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xff, 0x55, 0x55, 0x6a, 0xaa, 0xaa, 0xa9, - 0xff, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x50, 0x05, 0xaa, 0xaa, 0xaa, 0xaa, - 0xff, 0x50, 0x05, 0xaa, 0xaa, 0xaa, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0x55, 0x55, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0xff, 0xf5, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0xff, 0xf5, 0xaa, 0xa5, 0x5a, 0xaa, - 0xff, 0xff, 0xf5, 0xaa, 0xaa, 0xaa, 0xaa, - 0xff, 0xff, 0xf5, 0x6a, 0xaa, 0xaa, 0xa9, -}; - -const lv_img_dsc_t ck_os_battery_010 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 240, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_battery_010_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_010.png b/src/displayapp/icons/battery/os_battery_010.png deleted file mode 100644 index 68a9f40..0000000 Binary files a/src/displayapp/icons/battery/os_battery_010.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_battery_020.c b/src/displayapp/icons/battery/os_battery_020.c deleted file mode 100644 index 3f648fb..0000000 --- a/src/displayapp/icons/battery/os_battery_020.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_020 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_020 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_020 uint8_t ck_os_battery_020_map[] = { - 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55, - 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa, - 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, -}; - -const lv_img_dsc_t ck_os_battery_020 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 208, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_battery_020_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_020.png b/src/displayapp/icons/battery/os_battery_020.png deleted file mode 100644 index 32eca65..0000000 Binary files a/src/displayapp/icons/battery/os_battery_020.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_battery_030.c b/src/displayapp/icons/battery/os_battery_030.c deleted file mode 100644 index 4d5719b..0000000 --- a/src/displayapp/icons/battery/os_battery_030.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_030 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_030 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_030 uint8_t ck_os_battery_030_map[] = { - 0x04, 0x7a, 0xf4, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55, - 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa, - 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa, - 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa, - 0xaa, 0x50, 0x00, 0x00, 0x05, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, - 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, -}; - -const lv_img_dsc_t ck_os_battery_030 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 208, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_battery_030_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_030.png b/src/displayapp/icons/battery/os_battery_030.png deleted file mode 100644 index aeb5eb1..0000000 Binary files a/src/displayapp/icons/battery/os_battery_030.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_battery_040.c b/src/displayapp/icons/battery/os_battery_040.c deleted file mode 100644 index 0606fc3..0000000 --- a/src/displayapp/icons/battery/os_battery_040.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_040 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_040 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_040 uint8_t ck_os_battery_040_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_battery_040 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_040_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_040.png b/src/displayapp/icons/battery/os_battery_040.png deleted file mode 100644 index d84fda4..0000000 Binary files a/src/displayapp/icons/battery/os_battery_040.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_battery_050.c b/src/displayapp/icons/battery/os_battery_050.c deleted file mode 100644 index 8732dc7..0000000 --- a/src/displayapp/icons/battery/os_battery_050.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_050 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_050 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_050 uint8_t ck_os_battery_050_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_battery_050 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_050_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_050.png b/src/displayapp/icons/battery/os_battery_050.png deleted file mode 100644 index 224d38d..0000000 Binary files a/src/displayapp/icons/battery/os_battery_050.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_battery_060.c b/src/displayapp/icons/battery/os_battery_060.c deleted file mode 100644 index a65936b..0000000 --- a/src/displayapp/icons/battery/os_battery_060.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_060 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_060 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_060 uint8_t ck_os_battery_060_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_battery_060 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_060_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_060.png b/src/displayapp/icons/battery/os_battery_060.png deleted file mode 100644 index e5e00ed..0000000 Binary files a/src/displayapp/icons/battery/os_battery_060.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_battery_070.c b/src/displayapp/icons/battery/os_battery_070.c deleted file mode 100644 index 949c0b8..0000000 --- a/src/displayapp/icons/battery/os_battery_070.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_070 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_070 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_070 uint8_t ck_os_battery_070_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_battery_070 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_070_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_070.png b/src/displayapp/icons/battery/os_battery_070.png deleted file mode 100644 index dee969b..0000000 Binary files a/src/displayapp/icons/battery/os_battery_070.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_battery_080.c b/src/displayapp/icons/battery/os_battery_080.c deleted file mode 100644 index f447370..0000000 --- a/src/displayapp/icons/battery/os_battery_080.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_080 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_080 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_080 uint8_t ck_os_battery_080_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_battery_080 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_080_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_080.png b/src/displayapp/icons/battery/os_battery_080.png deleted file mode 100644 index 3b13fbb..0000000 Binary files a/src/displayapp/icons/battery/os_battery_080.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_battery_090.c b/src/displayapp/icons/battery/os_battery_090.c deleted file mode 100644 index 6fa41b2..0000000 --- a/src/displayapp/icons/battery/os_battery_090.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_090 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_090 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_090 uint8_t ck_os_battery_090_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_battery_090 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_battery_090_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_090.png b/src/displayapp/icons/battery/os_battery_090.png deleted file mode 100644 index d79f396..0000000 Binary files a/src/displayapp/icons/battery/os_battery_090.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_battery_100.c b/src/displayapp/icons/battery/os_battery_100.c deleted file mode 100644 index 92cf9a4..0000000 --- a/src/displayapp/icons/battery/os_battery_100.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_100 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_100 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_100 uint8_t ck_os_battery_100_map[] = { - 0x7c, 0xd2, 0x34, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0xaa, 0xa5, 0x55, 0x55, 0x5a, 0xaa, - 0xaa, 0x95, 0x55, 0x55, 0x56, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, -}; - -const lv_img_dsc_t ck_os_battery_100 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 208, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_battery_100_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_100.png b/src/displayapp/icons/battery/os_battery_100.png deleted file mode 100644 index dd0d306..0000000 Binary files a/src/displayapp/icons/battery/os_battery_100.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_battery_error.c b/src/displayapp/icons/battery/os_battery_error.c deleted file mode 100644 index af6aba5..0000000 --- a/src/displayapp/icons/battery/os_battery_error.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERY_ERROR -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERY_ERROR -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERY_ERROR uint8_t ck_os_battery_error_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xc4, 0xc2, 0xc4, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x00, 0x05, 0x55, 0x55, 0x50, 0x00, - 0x00, 0x15, 0x55, 0x55, 0x54, 0x00, - 0x00, 0x55, 0x55, 0x55, 0x55, 0x00, - 0x00, 0x55, 0x55, 0x55, 0x55, 0x00, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, - 0x55, 0x55, 0x00, 0x00, 0x55, 0x55, - 0x55, 0x54, 0x00, 0x00, 0x15, 0x55, - 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55, - 0x55, 0x00, 0xaa, 0xaa, 0x00, 0x55, - 0x55, 0x02, 0xaa, 0xaa, 0x80, 0x55, - 0x55, 0x02, 0xaa, 0xaa, 0x80, 0x55, - 0x55, 0x0a, 0xa8, 0x2a, 0xa0, 0x55, - 0x55, 0x0a, 0xa0, 0x0a, 0xa0, 0x55, - 0x55, 0x00, 0x00, 0x0a, 0xa0, 0x55, - 0x55, 0x00, 0x00, 0x2a, 0xa0, 0x55, - 0x55, 0x00, 0x02, 0xaa, 0x80, 0x55, - 0x55, 0x00, 0x0a, 0xaa, 0x80, 0x55, - 0x55, 0x00, 0x0a, 0xaa, 0x00, 0x55, - 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55, - 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55, - 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55, - 0x55, 0x00, 0x00, 0x00, 0x00, 0x55, - 0x55, 0x00, 0x00, 0x00, 0x00, 0x55, - 0x55, 0x00, 0x02, 0x80, 0x00, 0x55, - 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55, - 0x55, 0x00, 0x0a, 0xa0, 0x00, 0x55, - 0x55, 0x00, 0x02, 0x80, 0x00, 0x55, - 0x55, 0x55, 0x40, 0x01, 0x55, 0x55, - 0x55, 0x55, 0x50, 0x05, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, -}; - -const lv_img_dsc_t ck_os_battery_error = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 208, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_battery_error_map, -}; diff --git a/src/displayapp/icons/battery/os_battery_error.png b/src/displayapp/icons/battery/os_battery_error.png deleted file mode 100644 index 4c7632f..0000000 Binary files a/src/displayapp/icons/battery/os_battery_error.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_batterycharging_005.c b/src/displayapp/icons/battery/os_batterycharging_005.c deleted file mode 100644 index 1b0c71d..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_005.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_005 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_005 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_005 uint8_t ck_os_batterycharging_005_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, 0x00, - 0x07, 0xff, 0xe0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x07, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x1f, 0x00, - 0xf0, 0x00, 0x3e, 0x00, - 0xf0, 0x00, 0x7e, 0x00, - 0xf0, 0x00, 0xfc, 0x00, - 0xf0, 0x01, 0xff, 0xf0, - 0xf0, 0x03, 0xff, 0xf0, - 0xf0, 0x03, 0xff, 0xf0, - 0xf0, 0x03, 0xff, 0xe0, - 0xf0, 0x00, 0x0f, 0xc0, - 0xf0, 0x00, 0x1f, 0x80, - 0xff, 0xff, 0x3f, 0x00, - 0xff, 0xff, 0x3e, 0x00, - 0xff, 0xff, 0x3c, 0x00, - 0xff, 0xff, 0x38, 0x00, -}; - -const lv_img_dsc_t ck_os_batterycharging_005 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 136, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_batterycharging_005_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_005.png b/src/displayapp/icons/battery/os_batterycharging_005.png deleted file mode 100644 index f9545bc..0000000 Binary files a/src/displayapp/icons/battery/os_batterycharging_005.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_batterycharging_010.c b/src/displayapp/icons/battery/os_batterycharging_010.c deleted file mode 100644 index 304c018..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_010.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_010 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_010 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_010 uint8_t ck_os_batterycharging_010_map[] = { - 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55, 0x55, - 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x6a, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x5a, 0xa9, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x6a, 0xa9, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0xaa, 0xa5, 0x55, - 0xaa, 0x55, 0x55, 0x56, 0xaa, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x5a, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xa9, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xa5, - 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x95, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xaa, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa9, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa5, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0x95, 0x55, -}; - -const lv_img_dsc_t ck_os_batterycharging_010 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 240, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_batterycharging_010_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_010.png b/src/displayapp/icons/battery/os_batterycharging_010.png deleted file mode 100644 index 04d5f82..0000000 Binary files a/src/displayapp/icons/battery/os_batterycharging_010.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_batterycharging_020.c b/src/displayapp/icons/battery/os_batterycharging_020.c deleted file mode 100644 index 1721be1..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_020.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_020 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_020 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_020 uint8_t ck_os_batterycharging_020_map[] = { - 0x04, 0x02, 0xcc, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55, 0x55, - 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x6a, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x5a, 0xa9, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x6a, 0xa9, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0xaa, 0xa5, 0x55, - 0xaa, 0x55, 0x55, 0x56, 0xaa, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x5a, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xa9, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xa5, - 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x95, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xaa, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa9, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa5, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0x95, 0x55, -}; - -const lv_img_dsc_t ck_os_batterycharging_020 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 240, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_batterycharging_020_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_020.png b/src/displayapp/icons/battery/os_batterycharging_020.png deleted file mode 100644 index 6416e1e..0000000 Binary files a/src/displayapp/icons/battery/os_batterycharging_020.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_batterycharging_030.c b/src/displayapp/icons/battery/os_batterycharging_030.c deleted file mode 100644 index 83101fd..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_030.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_030 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_030 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_030 uint8_t ck_os_batterycharging_030_map[] = { - 0x04, 0x7a, 0xf4, 0xff, /*Color of index 0*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x55, 0x5a, 0xaa, 0xaa, 0xa5, 0x55, 0x55, - 0x55, 0x6a, 0xaa, 0xaa, 0xa9, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0x6a, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x5a, 0xa9, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0x6a, 0xa9, 0x55, - 0xaa, 0x55, 0x55, 0x55, 0xaa, 0xa5, 0x55, - 0xaa, 0x50, 0x00, 0x56, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xaa, - 0xaa, 0x50, 0x00, 0x5a, 0xaa, 0xaa, 0xa9, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xa5, - 0xaa, 0x55, 0x55, 0x55, 0x56, 0xaa, 0x95, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xaa, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa9, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0xa5, 0x55, - 0xaa, 0xaa, 0xaa, 0xaa, 0x5a, 0x95, 0x55, -}; - -const lv_img_dsc_t ck_os_batterycharging_030 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 240, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_batterycharging_030_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_030.png b/src/displayapp/icons/battery/os_batterycharging_030.png deleted file mode 100644 index 96b44d2..0000000 Binary files a/src/displayapp/icons/battery/os_batterycharging_030.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_batterycharging_040.c b/src/displayapp/icons/battery/os_batterycharging_040.c deleted file mode 100644 index 02af00e..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_040.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_040 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_040 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_040 uint8_t ck_os_batterycharging_040_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, 0x00, - 0x07, 0xff, 0xe0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x07, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x1f, 0x00, - 0xf0, 0x00, 0x3e, 0x00, - 0xf3, 0xf8, 0x7e, 0x00, - 0xf3, 0xf0, 0xfc, 0x00, - 0xf3, 0xf1, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xe0, - 0xf0, 0x00, 0x0f, 0xc0, - 0xf0, 0x00, 0x1f, 0x80, - 0xff, 0xff, 0x3f, 0x00, - 0xff, 0xff, 0x3e, 0x00, - 0xff, 0xff, 0x3c, 0x00, - 0xff, 0xff, 0x38, 0x00, -}; - -const lv_img_dsc_t ck_os_batterycharging_040 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 136, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_batterycharging_040_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_040.png b/src/displayapp/icons/battery/os_batterycharging_040.png deleted file mode 100644 index 5a42caf..0000000 Binary files a/src/displayapp/icons/battery/os_batterycharging_040.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_batterycharging_050.c b/src/displayapp/icons/battery/os_batterycharging_050.c deleted file mode 100644 index d2eea82..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_050.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_050 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_050 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_050 uint8_t ck_os_batterycharging_050_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, 0x00, - 0x07, 0xff, 0xe0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x07, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf3, 0xfe, 0x1f, 0x00, - 0xf3, 0xfc, 0x3e, 0x00, - 0xf3, 0xf8, 0x7e, 0x00, - 0xf3, 0xf0, 0xfc, 0x00, - 0xf3, 0xf1, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xe0, - 0xf0, 0x00, 0x0f, 0xc0, - 0xf0, 0x00, 0x1f, 0x80, - 0xff, 0xff, 0x3f, 0x00, - 0xff, 0xff, 0x3e, 0x00, - 0xff, 0xff, 0x3c, 0x00, - 0xff, 0xff, 0x38, 0x00, -}; - -const lv_img_dsc_t ck_os_batterycharging_050 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 136, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_batterycharging_050_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_050.png b/src/displayapp/icons/battery/os_batterycharging_050.png deleted file mode 100644 index ca0e04d..0000000 Binary files a/src/displayapp/icons/battery/os_batterycharging_050.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_batterycharging_060.c b/src/displayapp/icons/battery/os_batterycharging_060.c deleted file mode 100644 index 05f8b97..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_060.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_060 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_060 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_060 uint8_t ck_os_batterycharging_060_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, 0x00, - 0x07, 0xff, 0xe0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf0, 0x00, 0x00, 0x00, - 0xf3, 0xff, 0x87, 0x00, - 0xf3, 0xff, 0x0f, 0x00, - 0xf3, 0xfe, 0x1f, 0x00, - 0xf3, 0xfc, 0x3e, 0x00, - 0xf3, 0xf8, 0x7e, 0x00, - 0xf3, 0xf0, 0xfc, 0x00, - 0xf3, 0xf1, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xe0, - 0xf0, 0x00, 0x0f, 0xc0, - 0xf0, 0x00, 0x1f, 0x80, - 0xff, 0xff, 0x3f, 0x00, - 0xff, 0xff, 0x3e, 0x00, - 0xff, 0xff, 0x3c, 0x00, - 0xff, 0xff, 0x38, 0x00, -}; - -const lv_img_dsc_t ck_os_batterycharging_060 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 136, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_batterycharging_060_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_060.png b/src/displayapp/icons/battery/os_batterycharging_060.png deleted file mode 100644 index 2930068..0000000 Binary files a/src/displayapp/icons/battery/os_batterycharging_060.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_batterycharging_070.c b/src/displayapp/icons/battery/os_batterycharging_070.c deleted file mode 100644 index ac3e319..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_070.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_070 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_070 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_070 uint8_t ck_os_batterycharging_070_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, 0x00, - 0x07, 0xff, 0xe0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0x0f, 0xff, 0xf0, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xff, 0x00, 0xff, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf0, 0x00, 0x0f, 0x00, - 0xf3, 0xff, 0xc0, 0x00, - 0xf3, 0xff, 0xc0, 0x00, - 0xf3, 0xff, 0x87, 0x00, - 0xf3, 0xff, 0x0f, 0x00, - 0xf3, 0xfe, 0x1f, 0x00, - 0xf3, 0xfc, 0x3e, 0x00, - 0xf3, 0xf8, 0x7e, 0x00, - 0xf3, 0xf0, 0xfc, 0x00, - 0xf3, 0xf1, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xf0, - 0xf3, 0xf3, 0xff, 0xe0, - 0xf0, 0x00, 0x0f, 0xc0, - 0xf0, 0x00, 0x1f, 0x80, - 0xff, 0xff, 0x3f, 0x00, - 0xff, 0xff, 0x3e, 0x00, - 0xff, 0xff, 0x3c, 0x00, - 0xff, 0xff, 0x38, 0x00, -}; - -const lv_img_dsc_t ck_os_batterycharging_070 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 136, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_batterycharging_070_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_070.png b/src/displayapp/icons/battery/os_batterycharging_070.png deleted file mode 100644 index 7d5f55d..0000000 Binary files a/src/displayapp/icons/battery/os_batterycharging_070.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_batterycharging_080.c b/src/displayapp/icons/battery/os_batterycharging_080.c deleted file mode 100644 index cc1c1d2..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_080.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_080 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_080 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_080 uint8_t ck_os_batterycharging_080_map[] = { - 0x7c, 0xd2, 0x34, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0xaa, 0xa5, 0x55, 0x55, 0x5a, 0xaa, 0xaa, - 0xaa, 0x95, 0x55, 0x55, 0x56, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0xaa, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0xaa, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x2a, 0x95, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0xaa, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x02, 0xa9, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x0a, 0xa5, 0x56, 0xaa, - 0x55, 0xa0, 0x00, 0x2a, 0x95, 0x56, 0xaa, - 0x55, 0xa0, 0x00, 0xaa, 0x55, 0x5a, 0xaa, - 0x55, 0xa0, 0x00, 0xa9, 0x55, 0x55, 0x55, - 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x55, - 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x55, - 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x56, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x5a, - 0x55, 0xaa, 0xaa, 0xaa, 0xa9, 0x55, 0x6a, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x55, 0xaa, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x56, 0xaa, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x5a, 0xaa, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x6a, 0xaa, -}; - -const lv_img_dsc_t ck_os_batterycharging_080 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 240, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_batterycharging_080_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_080.png b/src/displayapp/icons/battery/os_batterycharging_080.png deleted file mode 100644 index cce5052..0000000 Binary files a/src/displayapp/icons/battery/os_batterycharging_080.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_batterycharging_090.c b/src/displayapp/icons/battery/os_batterycharging_090.c deleted file mode 100644 index 85e1c26..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_090.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_090 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_090 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_090 uint8_t ck_os_batterycharging_090_map[] = { - 0x7c, 0xd2, 0x34, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0xaa, 0xa5, 0x55, 0x55, 0x5a, 0xaa, 0xaa, - 0xaa, 0x95, 0x55, 0x55, 0x56, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, - 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0xaa, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x0a, 0xaa, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0x2a, 0x95, 0xaa, - 0x55, 0xa0, 0x00, 0x00, 0xaa, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x02, 0xa9, 0x55, 0xaa, - 0x55, 0xa0, 0x00, 0x0a, 0xa5, 0x56, 0xaa, - 0x55, 0xa0, 0x00, 0x2a, 0x95, 0x56, 0xaa, - 0x55, 0xa0, 0x00, 0xaa, 0x55, 0x5a, 0xaa, - 0x55, 0xa0, 0x00, 0xa9, 0x55, 0x55, 0x55, - 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x55, - 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x55, - 0x55, 0xa0, 0x00, 0xa5, 0x55, 0x55, 0x56, - 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x5a, - 0x55, 0xaa, 0xaa, 0xaa, 0xa9, 0x55, 0x6a, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x55, 0xaa, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x56, 0xaa, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x5a, 0xaa, - 0x55, 0x55, 0x55, 0x55, 0xa5, 0x6a, 0xaa, -}; - -const lv_img_dsc_t ck_os_batterycharging_090 = { - .header.always_zero = 0, - .header.w = 28, - .header.h = 32, - .data_size = 240, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_batterycharging_090_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_090.png b/src/displayapp/icons/battery/os_batterycharging_090.png deleted file mode 100644 index fc7b443..0000000 Binary files a/src/displayapp/icons/battery/os_batterycharging_090.png and /dev/null differ diff --git a/src/displayapp/icons/battery/os_batterycharging_100.c b/src/displayapp/icons/battery/os_batterycharging_100.c deleted file mode 100644 index 8dec0cb..0000000 --- a/src/displayapp/icons/battery/os_batterycharging_100.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_100 -#define LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_100 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BATTERYCHARGING_100 uint8_t ck_os_batterycharging_100_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x03, 0xff, 0xc0, - 0x07, 0xff, 0xe0, - 0x0f, 0xff, 0xf0, - 0x0f, 0xff, 0xf0, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xff, 0x00, 0xff, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x07, 0x0f, - 0xf0, 0x0f, 0x0f, - 0xf0, 0x1f, 0x0f, - 0xf0, 0x3e, 0x0f, - 0xf0, 0x7e, 0x0f, - 0xf0, 0xfc, 0x0f, - 0xf1, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0xcf, - 0xf3, 0xff, 0x8f, - 0xf0, 0x3f, 0x0f, - 0xf0, 0x7e, 0x0f, - 0xf0, 0x7c, 0x0f, - 0xf0, 0xf8, 0x0f, - 0xf0, 0xf0, 0x0f, - 0xf0, 0xe0, 0x0f, - 0xf0, 0x00, 0x0f, - 0xf0, 0x00, 0x0f, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t ck_os_batterycharging_100 = { - .header.always_zero = 0, - .header.w = 24, - .header.h = 32, - .data_size = 104, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_batterycharging_100_map, -}; diff --git a/src/displayapp/icons/battery/os_batterycharging_100.png b/src/displayapp/icons/battery/os_batterycharging_100.png deleted file mode 100644 index 7c8ce0c..0000000 Binary files a/src/displayapp/icons/battery/os_batterycharging_100.png and /dev/null differ diff --git a/src/displayapp/screens/BatteryIcon.cpp b/src/displayapp/screens/BatteryIcon.cpp index 08aaab7..2fe7c25 100644 --- a/src/displayapp/screens/BatteryIcon.cpp +++ b/src/displayapp/screens/BatteryIcon.cpp @@ -1,23 +1,34 @@ #include "displayapp/screens/BatteryIcon.h" #include #include "displayapp/screens/Symbols.h" +#include "displayapp/icons/battery/batteryicon.c" using namespace Pinetime::Applications::Screens; -const char* BatteryIcon::GetBatteryIcon(uint8_t batteryPercent) { - if (batteryPercent > 87) - return Symbols::batteryFull; - if (batteryPercent > 62) - return Symbols::batteryThreeQuarter; - if (batteryPercent > 37) - return Symbols::batteryHalf; - if (batteryPercent > 12) - return Symbols::batteryOneQuarter; - return Symbols::batteryEmpty; +void BatteryIcon::Create(lv_obj_t* parent) { + batteryImg = lv_img_create(parent, nullptr); + lv_img_set_src(batteryImg, &batteryicon); + lv_obj_set_style_local_image_recolor(batteryImg, LV_IMG_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + + batteryJuice = lv_obj_create(batteryImg, nullptr); + lv_obj_set_width(batteryJuice, 8); + lv_obj_align(batteryJuice, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, -2, -2); + lv_obj_set_style_local_radius(batteryJuice, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, 0); +} + +lv_obj_t* BatteryIcon::GetObject() { + return batteryImg; +} + +void BatteryIcon::SetBatteryPercentage(uint8_t percentage) { + lv_obj_set_height(batteryJuice, percentage * 14 / 100); + lv_obj_realign(batteryJuice); } -const char* BatteryIcon::GetUnknownIcon() { - return Symbols::batteryEmpty; +void BatteryIcon::SetColor(lv_color_t color) { + lv_obj_set_style_local_image_recolor(batteryImg, LV_IMG_PART_MAIN, LV_STATE_DEFAULT, color); + lv_obj_set_style_local_image_recolor_opa(batteryImg, LV_IMG_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_COVER); + lv_obj_set_style_local_bg_color(batteryJuice, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, color); } const char* BatteryIcon::GetPlugIcon(bool isCharging) { diff --git a/src/displayapp/screens/BatteryIcon.h b/src/displayapp/screens/BatteryIcon.h index bec2e4e..81f94ac 100644 --- a/src/displayapp/screens/BatteryIcon.h +++ b/src/displayapp/screens/BatteryIcon.h @@ -1,15 +1,24 @@ #pragma once #include +#include namespace Pinetime { namespace Applications { namespace Screens { class BatteryIcon { public: + void Create(lv_obj_t* parent); + + void SetColor(lv_color_t); + void SetBatteryPercentage(uint8_t percentage); + lv_obj_t* GetObject(); + static const char* GetUnknownIcon(); - static const char* GetBatteryIcon(uint8_t batteryPercent); static const char* GetPlugIcon(bool isCharging); + private: + lv_obj_t* batteryImg; + lv_obj_t* batteryJuice; }; } } -} \ No newline at end of file +} diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index cfbe44d..0a113e3 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -35,14 +35,12 @@ Tile::Tile(uint8_t screenID, // Time label_time = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(label_time, dateTimeController.FormattedTime().c_str()); lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER); lv_obj_align(label_time, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 0); // Battery - batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); - lv_obj_align(batteryIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, -8, 0); + batteryIcon.Create(lv_scr_act()); + lv_obj_align(batteryIcon.GetObject(), nullptr, LV_ALIGN_IN_TOP_RIGHT, -8, 0); if (numScreens > 1) { pageIndicatorBasePoints[0].x = LV_HOR_RES - 1; @@ -113,6 +111,8 @@ Tile::Tile(uint8_t screenID, lv_label_set_text_static(backgroundLabel, ""); taskUpdate = lv_task_create(lv_update_task, 5000, LV_TASK_PRIO_MID, this); + + UpdateScreen(); } Tile::~Tile() { @@ -122,7 +122,7 @@ Tile::~Tile() { void Tile::UpdateScreen() { lv_label_set_text(label_time, dateTimeController.FormattedTime().c_str()); - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); + batteryIcon.SetBatteryPercentage(batteryController.PercentRemaining()); } void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId) { diff --git a/src/displayapp/screens/Tile.h b/src/displayapp/screens/Tile.h index 4869fef..4874714 100644 --- a/src/displayapp/screens/Tile.h +++ b/src/displayapp/screens/Tile.h @@ -9,6 +9,7 @@ #include "components/settings/Settings.h" #include "components/datetime/DateTimeController.h" #include "components/battery/BatteryController.h" +#include namespace Pinetime { namespace Applications { @@ -40,13 +41,14 @@ namespace Pinetime { lv_task_t* taskUpdate; lv_obj_t* label_time; - lv_obj_t* batteryIcon; lv_point_t pageIndicatorBasePoints[2]; lv_point_t pageIndicatorPoints[2]; lv_obj_t* pageIndicatorBase; lv_obj_t* pageIndicator; lv_obj_t* btnm1; + BatteryIcon batteryIcon; + const char* btnmMap[8]; Pinetime::Applications::Apps apps[6]; }; diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index 6f9dd1b..dd5b292 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -66,10 +66,13 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, lv_img_set_src(bg_clock_img, &bg_clock); lv_obj_align(bg_clock_img, NULL, LV_ALIGN_CENTER, 0, 0); - batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(batteryIcon, Symbols::batteryHalf); - lv_obj_align(batteryIcon, NULL, LV_ALIGN_IN_TOP_RIGHT, 0, 0); - lv_obj_set_auto_realign(batteryIcon, true); + batteryIcon.Create(lv_scr_act()); + lv_obj_align(batteryIcon.GetObject(), nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); + + plugIcon = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(plugIcon, Symbols::plug); + lv_obj_set_style_local_text_color(plugIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED); + lv_obj_align(plugIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); notificationIcon = lv_label_create(lv_scr_act(), NULL); lv_obj_set_style_local_text_color(notificationIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FF00)); @@ -121,7 +124,8 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, lv_obj_add_style(hour_body_trace, LV_LINE_PART_MAIN, &hour_line_style_trace); taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); - UpdateClock(); + + Refresh(); } WatchFaceAnalog::~WatchFaceAnalog() { @@ -180,21 +184,18 @@ void WatchFaceAnalog::UpdateClock() { void WatchFaceAnalog::SetBatteryIcon() { auto batteryPercent = batteryPercentRemaining.Get(); - if (batteryPercent == 100) { - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); - } else { - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); - } - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); + batteryIcon.SetBatteryPercentage(batteryPercent); } void WatchFaceAnalog::Refresh() { isCharging = batteryController.IsCharging(); if (isCharging.IsUpdated()) { if (isCharging.Get()) { - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_RED); - lv_label_set_text_static(batteryIcon, Symbols::plug); + lv_obj_set_hidden(batteryIcon.GetObject(), true); + lv_obj_set_hidden(plugIcon, false); } else { + lv_obj_set_hidden(batteryIcon.GetObject(), false); + lv_obj_set_hidden(plugIcon, true); SetBatteryIcon(); } } diff --git a/src/displayapp/screens/WatchFaceAnalog.h b/src/displayapp/screens/WatchFaceAnalog.h index 4d76298..04d9e71 100644 --- a/src/displayapp/screens/WatchFaceAnalog.h +++ b/src/displayapp/screens/WatchFaceAnalog.h @@ -9,6 +9,7 @@ #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" #include "components/ble/NotificationManager.h" +#include namespace Pinetime { namespace Controllers { @@ -64,9 +65,11 @@ namespace Pinetime { lv_style_t second_line_style; lv_obj_t* label_date_day; - lv_obj_t* batteryIcon; + lv_obj_t* plugIcon; lv_obj_t* notificationIcon; + BatteryIcon batteryIcon; + const Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; Controllers::Ble& bleController; diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index 866e169..8a620bd 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -33,14 +33,13 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, heartRateController {heartRateController}, motionController {motionController} { - batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(batteryIcon, Symbols::batteryFull); - lv_obj_align(batteryIcon, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); + batteryIcon.Create(lv_scr_act()); + lv_obj_align(batteryIcon.GetObject(), lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); batteryPlug = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(batteryPlug, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xFF0000)); lv_label_set_text_static(batteryPlug, Symbols::plug); - lv_obj_align(batteryPlug, batteryIcon, LV_ALIGN_OUT_LEFT_MID, -5, 0); + lv_obj_align(batteryPlug, batteryIcon.GetObject(), LV_ALIGN_OUT_LEFT_MID, -5, 0); bleIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(bleIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x0082FC)); @@ -110,12 +109,7 @@ void WatchFaceDigital::Refresh() { batteryPercentRemaining = batteryController.PercentRemaining(); if (batteryPercentRemaining.IsUpdated()) { auto batteryPercent = batteryPercentRemaining.Get(); - if (batteryPercent == 100) { - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x0, 0xb0, 0x0)); - } else { - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); - } - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); + batteryIcon.SetBatteryPercentage(batteryPercent); } bleState = bleController.IsConnected(); @@ -123,7 +117,6 @@ void WatchFaceDigital::Refresh() { if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) { lv_label_set_text_static(bleIcon, BleIcon::GetIcon(bleState.Get())); } - lv_obj_realign(batteryIcon); lv_obj_realign(batteryPlug); lv_obj_realign(bleIcon); diff --git a/src/displayapp/screens/WatchFaceDigital.h b/src/displayapp/screens/WatchFaceDigital.h index d33434c..cd83689 100644 --- a/src/displayapp/screens/WatchFaceDigital.h +++ b/src/displayapp/screens/WatchFaceDigital.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include @@ -59,7 +60,6 @@ namespace Pinetime { lv_obj_t* label_time_ampm; lv_obj_t* label_date; lv_obj_t* backgroundLabel; - lv_obj_t* batteryIcon; lv_obj_t* bleIcon; lv_obj_t* batteryPlug; lv_obj_t* heartbeatIcon; @@ -68,6 +68,8 @@ namespace Pinetime { lv_obj_t* stepValue; lv_obj_t* notificationIcon; + BatteryIcon batteryIcon; + Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; Controllers::Ble& bleController; diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.cpp b/src/displayapp/screens/WatchFacePineTimeStyle.cpp index 28e7a6a..ae9f581 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.cpp +++ b/src/displayapp/screens/WatchFacePineTimeStyle.cpp @@ -101,11 +101,14 @@ WatchFacePineTimeStyle::WatchFacePineTimeStyle(DisplayApp* app, lv_obj_align(sidebar, lv_scr_act(), LV_ALIGN_IN_TOP_RIGHT, 0, 0); // Display icons - batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(batteryIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); - lv_label_set_text_static(batteryIcon, Symbols::batteryFull); - lv_obj_align(batteryIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 2); - lv_obj_set_auto_realign(batteryIcon, true); + batteryIcon.Create(sidebar); + batteryIcon.SetColor(LV_COLOR_BLACK); + lv_obj_align(batteryIcon.GetObject(), nullptr, LV_ALIGN_IN_TOP_MID, 0, 2); + + plugIcon = lv_label_create(lv_scr_act(), nullptr); + lv_label_set_text_static(plugIcon, Symbols::plug); + lv_obj_set_style_local_text_color(plugIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); + lv_obj_align(plugIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 2); bleIcon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(bleIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); @@ -340,7 +343,7 @@ bool WatchFacePineTimeStyle::OnButtonPushed() { void WatchFacePineTimeStyle::SetBatteryIcon() { auto batteryPercent = batteryPercentRemaining.Get(); - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); + batteryIcon.SetBatteryPercentage(batteryPercent); } void WatchFacePineTimeStyle::AlignIcons() { @@ -358,8 +361,11 @@ void WatchFacePineTimeStyle::Refresh() { isCharging = batteryController.IsCharging(); if (isCharging.IsUpdated()) { if (isCharging.Get()) { - lv_label_set_text_static(batteryIcon, Symbols::plug); + lv_obj_set_hidden(batteryIcon.GetObject(), true); + lv_obj_set_hidden(plugIcon, false); } else { + lv_obj_set_hidden(batteryIcon.GetObject(), false); + lv_obj_set_hidden(plugIcon, true); SetBatteryIcon(); } } diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.h b/src/displayapp/screens/WatchFacePineTimeStyle.h index 465aa70..e703d89 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.h +++ b/src/displayapp/screens/WatchFacePineTimeStyle.h @@ -8,6 +8,7 @@ #include "displayapp/Colors.h" #include "components/datetime/DateTimeController.h" #include "components/ble/BleController.h" +#include namespace Pinetime { namespace Controllers { @@ -79,7 +80,7 @@ namespace Pinetime { lv_obj_t* dateDay; lv_obj_t* dateMonth; lv_obj_t* backgroundLabel; - lv_obj_t* batteryIcon; + lv_obj_t* plugIcon; lv_obj_t* bleIcon; lv_obj_t* calendarOuter; lv_obj_t* calendarInner; @@ -93,6 +94,8 @@ namespace Pinetime { lv_obj_t* lbl_btnSet; lv_color_t needle_colors[1]; + BatteryIcon batteryIcon; + Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; Controllers::Ble& bleController; diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index aa7f17a..6268531 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -35,13 +35,11 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, // Time label_time = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(label_time, dateTimeController.FormattedTime().c_str()); lv_label_set_align(label_time, LV_LABEL_ALIGN_CENTER); lv_obj_align(label_time, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 0); - batteryIcon = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); - lv_obj_align(batteryIcon, nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); + batteryIcon.Create(lv_scr_act()); + lv_obj_align(batteryIcon.GetObject(), nullptr, LV_ALIGN_IN_TOP_RIGHT, 0, 0); static constexpr uint8_t barHeight = 20 + innerDistance; static constexpr uint8_t buttonHeight = (LV_VER_RES_MAX - barHeight - innerDistance) / 2; @@ -113,6 +111,8 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_label_set_text_static(backgroundLabel, ""); taskUpdate = lv_task_create(lv_update_task, 5000, LV_TASK_PRIO_MID, this); + + UpdateScreen(); } QuickSettings::~QuickSettings() { @@ -124,7 +124,7 @@ QuickSettings::~QuickSettings() { void QuickSettings::UpdateScreen() { lv_label_set_text(label_time, dateTimeController.FormattedTime().c_str()); - lv_label_set_text_static(batteryIcon, BatteryIcon::GetBatteryIcon(batteryController.PercentRemaining())); + batteryIcon.SetBatteryPercentage(batteryController.PercentRemaining()); } void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { diff --git a/src/displayapp/screens/settings/QuickSettings.h b/src/displayapp/screens/settings/QuickSettings.h index 7913898..40a2a2e 100644 --- a/src/displayapp/screens/settings/QuickSettings.h +++ b/src/displayapp/screens/settings/QuickSettings.h @@ -8,6 +8,7 @@ #include "components/motor/MotorController.h" #include "components/settings/Settings.h" #include "components/battery/BatteryController.h" +#include namespace Pinetime { @@ -37,7 +38,6 @@ namespace Pinetime { Controllers::Settings& settingsController; lv_task_t* taskUpdate; - lv_obj_t* batteryIcon; lv_obj_t* label_time; lv_style_t btn_style; @@ -48,6 +48,8 @@ namespace Pinetime { lv_obj_t* btn3; lv_obj_t* btn3_lvl; lv_obj_t* btn4; + + BatteryIcon batteryIcon; }; } } -- cgit v0.10.2 From 8061822f0cba9caa9d957b85a8284ab3120aaf3e Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 26 Apr 2022 13:09:30 +0300 Subject: Fix large blacklevel step. Lower 25% of shades are now accessible. There is a large step in brightness from level zero to level one. After experimenting with various ST7789 options, I found that decreasing VDV to 0x10 (-0.4V) fixes this issue. The gamma change reduced the average error in brightness, but with the underlying issue fixed, the gamma change has been reverted. diff --git a/src/displayapp/screens/HeartRate.cpp b/src/displayapp/screens/HeartRate.cpp index ac061b4..35e06bb 100644 --- a/src/displayapp/screens/HeartRate.cpp +++ b/src/displayapp/screens/HeartRate.cpp @@ -49,7 +49,7 @@ HeartRate::HeartRate(Pinetime::Applications::DisplayApp* app, lv_obj_align(label_bpm, label_hr, LV_ALIGN_OUT_TOP_MID, 0, -20); label_status = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_style_local_text_color(label_status, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x222222)); + lv_obj_set_style_local_text_color(label_status, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); lv_label_set_text_static(label_status, ToString(Pinetime::Controllers::HeartRateController::States::NotEnoughData)); lv_obj_align(label_status, label_hr, LV_ALIGN_OUT_BOTTOM_MID, 0, 10); diff --git a/src/displayapp/screens/List.cpp b/src/displayapp/screens/List.cpp index ffc6215..9e21a8b 100644 --- a/src/displayapp/screens/List.cpp +++ b/src/displayapp/screens/List.cpp @@ -67,7 +67,7 @@ List::List(uint8_t screenID, if (applications[i].application != Apps::None) { itemApps[i] = lv_btn_create(container1, nullptr); - lv_obj_set_style_local_bg_opa(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_40); + lv_obj_set_style_local_bg_opa(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_50); lv_obj_set_style_local_radius(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, 57); lv_obj_set_style_local_bg_color(itemApps[i], LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_AQUA); diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index 194aeed..9211236 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -53,7 +53,7 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus lv_style_init(&btn_style); lv_style_set_radius(&btn_style, LV_STATE_DEFAULT, 20); lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_style_set_bg_opa(&btn_style, LV_STATE_DEFAULT, LV_OPA_40); + lv_style_set_bg_opa(&btn_style, LV_STATE_DEFAULT, LV_OPA_50); btnVolDown = lv_btn_create(lv_scr_act(), nullptr); btnVolDown->user_data = this; diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 9123921..2184308 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -181,7 +181,7 @@ Notifications::NotificationItem::NotificationItem(const char* title, : mode {mode}, alertNotificationService {alertNotificationService}, motorController {motorController} { lv_obj_t* container1 = lv_cont_create(lv_scr_act(), NULL); - lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x30, 0x30, 0x30)); + lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x38, 0x38, 0x38)); lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); lv_obj_set_style_local_border_width(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 0); diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index 6de1986..6899567 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -65,7 +65,7 @@ StopWatch::StopWatch(DisplayApp* app, System::SystemTask& systemTask) lv_obj_set_event_cb(btnStopLap, stop_lap_event_handler); lv_obj_set_size(btnStopLap, 115, 50); lv_obj_align(btnStopLap, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); - lv_obj_set_style_local_bg_color(btnStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, lv_color_hex(0x0b0b0b)); + lv_obj_set_style_local_bg_color(btnStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_MAKE(0x18, 0x18, 0x18)); txtStopLap = lv_label_create(btnStopLap, nullptr); lv_obj_set_style_local_text_color(txtStopLap, LV_BTN_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_label_set_text_static(txtStopLap, Symbols::stop); diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 0a113e3..2d61b1d 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -87,9 +87,9 @@ Tile::Tile(uint8_t screenID, lv_obj_align(btnm1, NULL, LV_ALIGN_CENTER, 0, 10); lv_obj_set_style_local_radius(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, LV_OPA_40); + lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, LV_OPA_50); lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DEFAULT, LV_COLOR_AQUA); - lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, LV_OPA_40); + lv_obj_set_style_local_bg_opa(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, LV_OPA_50); lv_obj_set_style_local_bg_color(btnm1, LV_BTNMATRIX_PART_BTN, LV_STATE_DISABLED, lv_color_hex(0x111111)); lv_obj_set_style_local_pad_all(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 0); lv_obj_set_style_local_pad_inner(btnm1, LV_BTNMATRIX_PART_BG, LV_STATE_DEFAULT, 10); diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 6268531..1ae6aa9 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -49,7 +49,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_style_init(&btn_style); lv_style_set_radius(&btn_style, LV_STATE_DEFAULT, buttonHeight / 4); - lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x1c, 0x1c, 0x1c)); + lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, LV_COLOR_MAKE(0x38, 0x38, 0x38)); btn1 = lv_btn_create(lv_scr_act(), nullptr); btn1->user_data = this; diff --git a/src/drivers/St7789.cpp b/src/drivers/St7789.cpp index d520199..3ed1beb 100644 --- a/src/drivers/St7789.cpp +++ b/src/drivers/St7789.cpp @@ -23,7 +23,7 @@ void St7789::Init() { RowAddressSet(); DisplayInversionOn(); NormalModeOn(); - SetGamma(); + SetVdv(); DisplayOn(); } @@ -115,9 +115,11 @@ void St7789::WriteToRam() { WriteCommand(static_cast(Commands::WriteToRam)); } -void St7789::SetGamma() { - WriteCommand(static_cast(Commands::GammaSet)); - WriteData(0x04); +void St7789::SetVdv() { + // By default there is a large step from pixel brightness zero to one. + // After experimenting with VCOMS, VRH and VDV, this was found to produce good results. + WriteCommand(static_cast(Commands::VdvSet)); + WriteData(0x10); } void St7789::DisplayOff() { diff --git a/src/drivers/St7789.h b/src/drivers/St7789.h index 1317abe..a2f1044 100644 --- a/src/drivers/St7789.h +++ b/src/drivers/St7789.h @@ -43,7 +43,7 @@ namespace Pinetime { void NormalModeOn(); void WriteToRam(); void SetAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1); - void SetGamma(); + void SetVdv(); void WriteCommand(uint8_t cmd); void WriteSpi(const uint8_t* data, size_t size); @@ -53,7 +53,6 @@ namespace Pinetime { SleepOut = 0x11, NormalModeOn = 0x13, DisplayInversionOn = 0x21, - GammaSet = 0x26, DisplayOff = 0x28, DisplayOn = 0x29, ColumnAddressSet = 0x2a, @@ -63,6 +62,7 @@ namespace Pinetime { VerticalScrollDefinition = 0x33, VerticalScrollStartAddress = 0x37, ColMod = 0x3a, + VdvSet = 0xc4, }; void WriteData(uint8_t data); void ColumnAddressSet(); -- cgit v0.10.2 From 8b470d33a18c9d7ad63ccade138aeba244ae12a7 Mon Sep 17 00:00:00 2001 From: FintasticMan <52415484+FintasticMan@users.noreply.github.com> Date: Sat, 30 Apr 2022 12:08:44 +0200 Subject: Update link to InfiniLink and mention that it is unmaintained diff --git a/README.md b/README.md index 8443e43..f2e76d6 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Fast open-source firmware for the [PineTime smartwatch](https://www.pine64.org/p - [Gadgetbridge](https://gadgetbridge.org/) (Android) - [AmazFish](https://openrepos.net/content/piggz/amazfish/) (SailfishOS) - [Siglo](https://github.com/alexr4535/siglo) (Linux) - - [InfiniLink](https://github.com/xan-m/InfiniLink) **[Experimental]** (iOS) + - [InfiniLink](https://github.com/InfiniTimeOrg/InfiniLink) **[Experimental]** **[Unmaintained]** (iOS) - [ITD](https://gitea.arsenm.dev/Arsen6331/itd) (Linux) ## Development -- cgit v0.10.2 From 09a50dcc15144815ec23a7bc7b09b705a1c1eaf7 Mon Sep 17 00:00:00 2001 From: FintasticMan <52415484+FintasticMan@users.noreply.github.com> Date: Sat, 30 Apr 2022 22:14:27 +0200 Subject: Mention that InfiniLink is searching for devs diff --git a/README.md b/README.md index f2e76d6..b9100a6 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Fast open-source firmware for the [PineTime smartwatch](https://www.pine64.org/p - [Gadgetbridge](https://gadgetbridge.org/) (Android) - [AmazFish](https://openrepos.net/content/piggz/amazfish/) (SailfishOS) - [Siglo](https://github.com/alexr4535/siglo) (Linux) - - [InfiniLink](https://github.com/InfiniTimeOrg/InfiniLink) **[Experimental]** **[Unmaintained]** (iOS) + - [InfiniLink](https://github.com/InfiniTimeOrg/InfiniLink) **[Experimental]** **[Unmaintained, looking for developers/maintainers]** (iOS) - [ITD](https://gitea.arsenm.dev/Arsen6331/itd) (Linux) ## Development -- cgit v0.10.2 From 4229386501a87344d1099f8290dc565d1a4441c7 Mon Sep 17 00:00:00 2001 From: Reinhold Gschweicher Date: Sun, 24 Apr 2022 23:32:07 +0200 Subject: List: add missing array include List.h uses `std::array` as container, but is missing the `` include. Add it to make the header self contained. The `memory` include is unused and can be removed. diff --git a/src/displayapp/screens/List.h b/src/displayapp/screens/List.h index 023de3a..88ef28e 100644 --- a/src/displayapp/screens/List.h +++ b/src/displayapp/screens/List.h @@ -2,7 +2,7 @@ #include #include -#include +#include #include "displayapp/screens/Screen.h" #include "displayapp/Apps.h" #include "components/settings/Settings.h" -- cgit v0.10.2 From 6dac0a62f4dfdb4b8b480aa03a3eb4ac08feebaa Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 6 Sep 2021 11:59:54 +0300 Subject: Remove lcd from DisplayApp diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 3228061..bd5412e 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -163,12 +163,10 @@ void DisplayApp::Refresh() { brightnessController.Lower(); vTaskDelay(100); } - lcd.DisplayOff(); PushMessageToSystemTask(Pinetime::System::Messages::OnDisplayTaskSleeping); state = States::Idle; break; case Messages::GoToRunning: - lcd.DisplayOn(); brightnessController.Restore(); state = States::Running; break; diff --git a/src/drivers/St7789.h b/src/drivers/St7789.h index a2f1044..8c2ac09 100644 --- a/src/drivers/St7789.h +++ b/src/drivers/St7789.h @@ -22,9 +22,6 @@ namespace Pinetime { void DrawBuffer(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint8_t* data, size_t size); - void DisplayOn(); - void DisplayOff(); - void Sleep(); void Wakeup(); @@ -42,6 +39,9 @@ namespace Pinetime { void DisplayInversionOn(); void NormalModeOn(); void WriteToRam(); + void DisplayOn(); + void DisplayOff(); + void SetAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1); void SetVdv(); void WriteCommand(uint8_t cmd); -- cgit v0.10.2 From 81607487335c8e90197f64af119d6d4ed50af6b6 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Wed, 20 Apr 2022 12:21:35 +0300 Subject: Force full screen refresh with a rounder function When the screen switches, the full screen needs to be refreshed for the hardware scrolling to work. This was enforced with backgroundLabels, but is simpler to do with a rounder function. diff --git a/src/displayapp/LittleVgl.cpp b/src/displayapp/LittleVgl.cpp index e7b58c1..25f3591 100644 --- a/src/displayapp/LittleVgl.cpp +++ b/src/displayapp/LittleVgl.cpp @@ -16,14 +16,22 @@ static void disp_flush(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_ lvgl->FlushDisplay(area, color_p); } +static void rounder(lv_disp_drv_t* disp_drv, lv_area_t* area) { + auto* lvgl = static_cast(disp_drv->user_data); + if (lvgl->GetFullRefresh()) { + area->x1 = 0; + area->x2 = LV_HOR_RES - 1; + area->y1 = 0; + area->y2 = LV_VER_RES - 1; + } +} + bool touchpad_read(lv_indev_drv_t* indev_drv, lv_indev_data_t* data) { auto* lvgl = static_cast(indev_drv->user_data); return lvgl->GetTouchPadInfo(data); } -LittleVgl::LittleVgl(Pinetime::Drivers::St7789& lcd, Pinetime::Drivers::Cst816S& touchPanel) - : lcd {lcd}, touchPanel {touchPanel}, previousClick {0, 0} { - +LittleVgl::LittleVgl(Pinetime::Drivers::St7789& lcd, Pinetime::Drivers::Cst816S& touchPanel) : lcd {lcd}, touchPanel {touchPanel} { } void LittleVgl::Init() { @@ -48,6 +56,7 @@ void LittleVgl::InitDisplay() { /*Set a display buffer*/ disp_drv.buffer = &disp_buf_2; disp_drv.user_data = this; + disp_drv.rounder_cb = rounder; /*Finally register the driver*/ lv_disp_drv_register(&disp_drv); @@ -78,6 +87,7 @@ void LittleVgl::SetFullRefresh(FullRefreshDirections direction) { lv_disp_set_direction(lv_disp_get_default(), 4); } } + fullRefresh = true; } void LittleVgl::FlushDisplay(const lv_area_t* area, lv_color_t* color_p) { diff --git a/src/displayapp/LittleVgl.h b/src/displayapp/LittleVgl.h index 1f8a3d7..4582616 100644 --- a/src/displayapp/LittleVgl.h +++ b/src/displayapp/LittleVgl.h @@ -26,6 +26,14 @@ namespace Pinetime { void SetFullRefresh(FullRefreshDirections direction); void SetNewTouchPoint(uint16_t x, uint16_t y, bool contact); + bool GetFullRefresh() { + bool returnValue = fullRefresh; + if (fullRefresh) { + fullRefresh = false; + } + return returnValue; + } + private: void InitDisplay(); void InitTouchpad(); @@ -39,9 +47,8 @@ namespace Pinetime { lv_color_t buf2_2[LV_HOR_RES_MAX * 4]; lv_disp_drv_t disp_drv; - lv_point_t previousClick; - bool firstTouch = true; + bool fullRefresh = false; static constexpr uint8_t nbWriteLines = 4; static constexpr uint16_t totalNbLines = 320; static constexpr uint16_t visibleNbLines = 240; diff --git a/src/displayapp/screens/BatteryInfo.cpp b/src/displayapp/screens/BatteryInfo.cpp index 2d9154f..d9d479f 100644 --- a/src/displayapp/screens/BatteryInfo.cpp +++ b/src/displayapp/screens/BatteryInfo.cpp @@ -38,12 +38,6 @@ BatteryInfo::BatteryInfo(Pinetime::Applications::DisplayApp* app, Pinetime::Cont lv_label_set_align(voltage, LV_LABEL_ALIGN_CENTER); lv_obj_align(voltage, nullptr, LV_ALIGN_CENTER, 0, 95); - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - taskRefresh = lv_task_create(RefreshTaskCallback, 5000, LV_TASK_PRIO_MID, this); Refresh(); } diff --git a/src/displayapp/screens/FirmwareUpdate.cpp b/src/displayapp/screens/FirmwareUpdate.cpp index 0e04309..01530e1 100644 --- a/src/displayapp/screens/FirmwareUpdate.cpp +++ b/src/displayapp/screens/FirmwareUpdate.cpp @@ -8,12 +8,6 @@ using namespace Pinetime::Applications::Screens; FirmwareUpdate::FirmwareUpdate(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Ble& bleController) : Screen(app), bleController {bleController} { - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - titleLabel = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_static(titleLabel, "Firmware update"); lv_obj_align(titleLabel, nullptr, LV_ALIGN_IN_TOP_MID, 0, 50); diff --git a/src/displayapp/screens/List.cpp b/src/displayapp/screens/List.cpp index 9e21a8b..0bc7da8 100644 --- a/src/displayapp/screens/List.cpp +++ b/src/displayapp/screens/List.cpp @@ -85,12 +85,6 @@ List::List(uint8_t screenID, lv_label_set_text_fmt(labelBt, " %s", applications[i].name); } } - - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, LV_HOR_RES, LV_VER_RES); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); } List::~List() { diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 2184308..8bba8ce 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -265,12 +265,6 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_set_style_local_bg_color(bt_mute, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); } break; } - - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); } void Notifications::NotificationItem::OnCallButtonEvent(lv_obj_t* obj, lv_event_t event) { diff --git a/src/displayapp/screens/PassKey.cpp b/src/displayapp/screens/PassKey.cpp index e9715cd..13cdcc2 100644 --- a/src/displayapp/screens/PassKey.cpp +++ b/src/displayapp/screens/PassKey.cpp @@ -9,13 +9,6 @@ PassKey::PassKey(Pinetime::Applications::DisplayApp* app, uint32_t key) : Screen lv_obj_set_style_local_text_font(passkeyLabel, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); lv_label_set_text_fmt(passkeyLabel, "%06u", key); lv_obj_align(passkeyLabel, nullptr, LV_ALIGN_CENTER, 0, -20); - - backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_click(backgroundLabel, true); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); } PassKey::~PassKey() { diff --git a/src/displayapp/screens/PassKey.h b/src/displayapp/screens/PassKey.h index 16e72a3..82735b5 100644 --- a/src/displayapp/screens/PassKey.h +++ b/src/displayapp/screens/PassKey.h @@ -14,7 +14,6 @@ namespace Pinetime { private: lv_obj_t* passkeyLabel; - lv_obj_t* backgroundLabel; }; } } diff --git a/src/displayapp/screens/Steps.cpp b/src/displayapp/screens/Steps.cpp index 8b5d3e4..0dcdcf5 100644 --- a/src/displayapp/screens/Steps.cpp +++ b/src/displayapp/screens/Steps.cpp @@ -48,12 +48,6 @@ Steps::Steps(Pinetime::Applications::DisplayApp* app, lv_label_set_align(lstepsGoal, LV_LABEL_ALIGN_CENTER); lv_obj_align(lstepsGoal, lSteps, LV_ALIGN_OUT_BOTTOM_MID, 0, 40); - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - resetBtn = lv_btn_create(lv_scr_act(), nullptr); resetBtn->user_data = this; lv_obj_set_event_cb(resetBtn, lap_event_handler); diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index 2d61b1d..e90c753 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -104,12 +104,6 @@ Tile::Tile(uint8_t screenID, btnm1->user_data = this; lv_obj_set_event_cb(btnm1, event_handler); - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - taskUpdate = lv_task_create(lv_update_task, 5000, LV_TASK_PRIO_MID, this); UpdateScreen(); diff --git a/src/displayapp/screens/Timer.cpp b/src/displayapp/screens/Timer.cpp index bf630b6..285502c 100644 --- a/src/displayapp/screens/Timer.cpp +++ b/src/displayapp/screens/Timer.cpp @@ -46,12 +46,6 @@ void Timer::CreateButtons() { Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController) : Screen(app), running {true}, timerController {timerController} { - backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_click(backgroundLabel, true); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); time = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_font(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_76); diff --git a/src/displayapp/screens/Timer.h b/src/displayapp/screens/Timer.h index 93e84c8..c1f7f9e 100644 --- a/src/displayapp/screens/Timer.h +++ b/src/displayapp/screens/Timer.h @@ -24,7 +24,6 @@ namespace Pinetime::Applications::Screens { uint8_t secondsToSet = 0; uint8_t minutesToSet = 0; Controllers::TimerController& timerController; - lv_obj_t* backgroundLabel; lv_obj_t* time; lv_obj_t* msecTime; lv_obj_t* btnPlayPause; diff --git a/src/displayapp/screens/Twos.cpp b/src/displayapp/screens/Twos.cpp index ca9295d..7e465fc 100644 --- a/src/displayapp/screens/Twos.cpp +++ b/src/displayapp/screens/Twos.cpp @@ -85,12 +85,6 @@ Twos::Twos(Pinetime::Applications::DisplayApp* app) : Screen(app) { lv_obj_align(scoreText, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 10); lv_label_set_recolor(scoreText, true); lv_label_set_text_fmt(scoreText, "Score #FFFF00 %i#", score); - - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); } Twos::~Twos() { diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index 8a620bd..1df3825 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -64,13 +64,6 @@ WatchFaceDigital::WatchFaceDigital(DisplayApp* app, lv_label_set_text_static(label_time_ampm, ""); lv_obj_align(label_time_ampm, lv_scr_act(), LV_ALIGN_IN_RIGHT_MID, -30, -55); - backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_click(backgroundLabel, true); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - heartbeatIcon = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_static(heartbeatIcon, Symbols::heartBeat); lv_obj_set_style_local_text_color(heartbeatIcon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0xCE1B1B)); diff --git a/src/displayapp/screens/WatchFaceDigital.h b/src/displayapp/screens/WatchFaceDigital.h index cd83689..bd27806 100644 --- a/src/displayapp/screens/WatchFaceDigital.h +++ b/src/displayapp/screens/WatchFaceDigital.h @@ -59,7 +59,6 @@ namespace Pinetime { lv_obj_t* label_time; lv_obj_t* label_time_ampm; lv_obj_t* label_date; - lv_obj_t* backgroundLabel; lv_obj_t* bleIcon; lv_obj_t* batteryPlug; lv_obj_t* heartbeatIcon; diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.cpp b/src/displayapp/screens/WatchFacePineTimeStyle.cpp index ae9f581..a777241 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.cpp +++ b/src/displayapp/screens/WatchFacePineTimeStyle.cpp @@ -198,13 +198,6 @@ WatchFacePineTimeStyle::WatchFacePineTimeStyle(DisplayApp* app, lv_obj_set_style_local_line_width(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 3); lv_obj_set_style_local_pad_inner(stepGauge, LV_GAUGE_PART_NEEDLE, LV_STATE_DEFAULT, 4); - backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_click(backgroundLabel, true); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - btnNextTime = lv_btn_create(lv_scr_act(), nullptr); btnNextTime->user_data = this; lv_obj_set_size(btnNextTime, 60, 60); diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.h b/src/displayapp/screens/WatchFacePineTimeStyle.h index e703d89..cfabc2c 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.h +++ b/src/displayapp/screens/WatchFacePineTimeStyle.h @@ -79,7 +79,6 @@ namespace Pinetime { lv_obj_t* dateDayOfWeek; lv_obj_t* dateDay; lv_obj_t* dateMonth; - lv_obj_t* backgroundLabel; lv_obj_t* plugIcon; lv_obj_t* bleIcon; lv_obj_t* calendarOuter; diff --git a/src/displayapp/screens/WatchFaceTerminal.cpp b/src/displayapp/screens/WatchFaceTerminal.cpp index 3a47fc5..80d736c 100644 --- a/src/displayapp/screens/WatchFaceTerminal.cpp +++ b/src/displayapp/screens/WatchFaceTerminal.cpp @@ -59,13 +59,6 @@ WatchFaceTerminal::WatchFaceTerminal(DisplayApp* app, lv_label_set_recolor(label_time, true); lv_obj_align(label_time, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 0, -60); - backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_obj_set_click(backgroundLabel, true); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - heartbeatValue = lv_label_create(lv_scr_act(), nullptr); lv_label_set_recolor(heartbeatValue, true); lv_obj_align(heartbeatValue, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 0, 20); diff --git a/src/displayapp/screens/WatchFaceTerminal.h b/src/displayapp/screens/WatchFaceTerminal.h index d236da3..828dbdb 100644 --- a/src/displayapp/screens/WatchFaceTerminal.h +++ b/src/displayapp/screens/WatchFaceTerminal.h @@ -59,7 +59,6 @@ namespace Pinetime { lv_obj_t* label_date; lv_obj_t* label_prompt_1; lv_obj_t* label_prompt_2; - lv_obj_t* backgroundLabel; lv_obj_t* batteryValue; lv_obj_t* heartbeatValue; lv_obj_t* stepValue; diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 1ae6aa9..fe8f3cb 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -104,12 +104,6 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_obj_set_style_local_text_font(lbl_btn, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); lv_label_set_text_static(lbl_btn, Symbols::settings); - lv_obj_t* backgroundLabel = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_long_mode(backgroundLabel, LV_LABEL_LONG_CROP); - lv_obj_set_size(backgroundLabel, 240, 240); - lv_obj_set_pos(backgroundLabel, 0, 0); - lv_label_set_text_static(backgroundLabel, ""); - taskUpdate = lv_task_create(lv_update_task, 5000, LV_TASK_PRIO_MID, this); UpdateScreen(); -- cgit v0.10.2 From 2b9418c7f807f4d5fb3ab412e03ecc40690ad1d1 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Thu, 21 Apr 2022 22:31:46 +0300 Subject: Fix dropdown graphical issues. The scrollbar would go out of bounds if DROPDOWN_PART_LIST had uneven padding. Also enable clip_corner feature to stop the selected item from overflowing. diff --git a/src/displayapp/lv_pinetime_theme.c b/src/displayapp/lv_pinetime_theme.c index 37eb040..b357081 100644 --- a/src/displayapp/lv_pinetime_theme.c +++ b/src/displayapp/lv_pinetime_theme.c @@ -26,7 +26,6 @@ static void theme_apply(lv_obj_t* obj, lv_theme_style_t name); **********************/ static lv_theme_t theme; -static lv_style_t style_pad; static lv_style_t style_circle; static lv_style_t style_bg; @@ -77,12 +76,6 @@ static void style_init_reset(lv_style_t* style) { static void basic_init(void) { - style_init_reset(&style_pad); - lv_style_set_pad_top(&style_pad, LV_STATE_DEFAULT, LV_VER_RES / 30); - lv_style_set_pad_bottom(&style_pad, LV_STATE_DEFAULT, LV_VER_RES / 30); - lv_style_set_pad_left(&style_pad, LV_STATE_DEFAULT, LV_VER_RES / 40); - lv_style_set_pad_right(&style_pad, LV_STATE_DEFAULT, LV_VER_RES / 40); - style_init_reset(&style_circle); lv_style_set_radius(&style_circle, LV_STATE_DEFAULT, LV_RADIUS_CIRCLE); @@ -188,10 +181,12 @@ static void basic_init(void) { lv_style_set_pad_inner(&style_list_btn, LV_STATE_DEFAULT, LV_HOR_RES / 50); style_init_reset(&style_ddlist_list); + lv_style_set_clip_corner(&style_ddlist_list, LV_STATE_DEFAULT, true); lv_style_set_text_line_space(&style_ddlist_list, LV_STATE_DEFAULT, LV_VER_RES / 25); lv_style_set_shadow_width(&style_ddlist_list, LV_STATE_DEFAULT, LV_VER_RES / 20); lv_style_set_shadow_color(&style_ddlist_list, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_style_set_bg_color(&style_ddlist_list, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); + lv_style_set_pad_all(&style_ddlist_list, LV_STATE_DEFAULT, 20); style_init_reset(&style_ddlist_selected); lv_style_set_bg_opa(&style_ddlist_selected, LV_STATE_DEFAULT, LV_OPA_COVER); @@ -479,13 +474,11 @@ static void theme_apply(lv_obj_t* obj, lv_theme_style_t name) { lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_MAIN); list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_MAIN); _lv_style_list_add_style(list, &style_btn); - _lv_style_list_add_style(list, &style_pad); lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_LIST); list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_LIST); _lv_style_list_add_style(list, &style_box); _lv_style_list_add_style(list, &style_ddlist_list); - _lv_style_list_add_style(list, &style_pad); lv_obj_clean_style_list(obj, LV_DROPDOWN_PART_SELECTED); list = lv_obj_get_style_list(obj, LV_DROPDOWN_PART_SELECTED); diff --git a/src/displayapp/screens/Metronome.cpp b/src/displayapp/screens/Metronome.cpp index 0671e2c..2ffc52d 100644 --- a/src/displayapp/screens/Metronome.cpp +++ b/src/displayapp/screens/Metronome.cpp @@ -47,8 +47,6 @@ Metronome::Metronome(DisplayApp* app, Controllers::MotorController& motorControl bpbDropdown = lv_dropdown_create(lv_scr_act(), nullptr); bpbDropdown->user_data = this; lv_obj_set_event_cb(bpbDropdown, eventHandler); - lv_obj_set_style_local_pad_left(bpbDropdown, LV_DROPDOWN_PART_MAIN, LV_STATE_DEFAULT, 20); - lv_obj_set_style_local_pad_left(bpbDropdown, LV_DROPDOWN_PART_LIST, LV_STATE_DEFAULT, 20); lv_obj_set_size(bpbDropdown, 115, 50); lv_obj_align(bpbDropdown, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); lv_dropdown_set_options(bpbDropdown, "1\n2\n3\n4\n5\n6\n7\n8\n9"); -- cgit v0.10.2 From beddfc346ddd98256017053518d86100f9538250 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Thu, 21 Apr 2022 23:14:09 +0300 Subject: Disable clip_corner, because it is slow. diff --git a/src/displayapp/lv_pinetime_theme.c b/src/displayapp/lv_pinetime_theme.c index b357081..e18742c 100644 --- a/src/displayapp/lv_pinetime_theme.c +++ b/src/displayapp/lv_pinetime_theme.c @@ -181,7 +181,8 @@ static void basic_init(void) { lv_style_set_pad_inner(&style_list_btn, LV_STATE_DEFAULT, LV_HOR_RES / 50); style_init_reset(&style_ddlist_list); - lv_style_set_clip_corner(&style_ddlist_list, LV_STATE_DEFAULT, true); + // Causes lag unfortunately, so we'll have to live with the selected item overflowing the corner + //lv_style_set_clip_corner(&style_ddlist_list, LV_STATE_DEFAULT, true); lv_style_set_text_line_space(&style_ddlist_list, LV_STATE_DEFAULT, LV_VER_RES / 25); lv_style_set_shadow_width(&style_ddlist_list, LV_STATE_DEFAULT, LV_VER_RES / 20); lv_style_set_shadow_color(&style_ddlist_list, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); -- cgit v0.10.2 From ae2b9d30d625dfc67ece652d12b7781b7bbeb5ee Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 30 Jul 2021 21:43:44 +0300 Subject: Simplify systemtask states diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index f4eeffc..ebd93f9 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -258,8 +258,7 @@ void SystemTask::Work() { nimbleController.RestartFastAdv(); } - isSleeping = false; - isWakingUp = false; + state = Running; isDimmed = false; break; case Messages::TouchWakeUp: { @@ -278,7 +277,7 @@ void SystemTask::Work() { if (doNotGoToSleep) { break; } - isGoingToSleep = true; + state = GoingToSleep; // Already set in PushMessage() NRF_LOG_INFO("[systemtask] Going to sleep"); xTimerStop(idleTimer, 0); xTimerStop(dimTimer, 0); @@ -294,7 +293,7 @@ void SystemTask::Work() { break; case Messages::OnNewNotification: if (settingsController.GetNotificationStatus() == Pinetime::Controllers::Settings::Notification::ON) { - if (isSleeping && !isWakingUp) { + if (state == Sleeping) { GoToRunning(); } else { ReloadIdleTimer(); @@ -303,14 +302,14 @@ void SystemTask::Work() { } break; case Messages::OnTimerDone: - if (isSleeping && !isWakingUp) { + if (state == Sleeping) { GoToRunning(); } motorController.RunForDuration(35); displayApp.PushMessage(Pinetime::Applications::Display::Messages::TimerDone); break; case Messages::SetOffAlarm: - if (isSleeping && !isWakingUp) { + if (state == Sleeping) { GoToRunning(); } motorController.StartRinging(); @@ -326,7 +325,7 @@ void SystemTask::Work() { break; case Messages::BleFirmwareUpdateStarted: doNotGoToSleep = true; - if (isSleeping && !isWakingUp) { + if (state == Sleeping) { GoToRunning(); } displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted); @@ -341,8 +340,9 @@ void SystemTask::Work() { case Messages::StartFileTransfer: NRF_LOG_INFO("[systemtask] FS Started"); doNotGoToSleep = true; - if (isSleeping && !isWakingUp) + if (state == Sleeping) { GoToRunning(); + } // TODO add intent of fs access icon or something break; case Messages::StopFileTransfer: @@ -391,8 +391,7 @@ void SystemTask::Work() { touchPanel.Sleep(); } - isSleeping = true; - isGoingToSleep = false; + state = Sleeping; break; case Messages::OnNewDay: // We might be sleeping (with TWI device disabled. @@ -401,8 +400,9 @@ void SystemTask::Work() { break; case Messages::OnNewHour: using Pinetime::Controllers::AlarmController; - if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::Hours && alarmController.State() != AlarmController::AlarmState::Alerting) { - if (isSleeping && !isWakingUp) { + if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::Hours && + alarmController.State() != AlarmController::AlarmState::Alerting) { + if (state == Sleeping) { GoToRunning(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock); } @@ -411,8 +411,9 @@ void SystemTask::Work() { break; case Messages::OnNewHalfHour: using Pinetime::Controllers::AlarmController; - if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::HalfHours && alarmController.State() != AlarmController::AlarmState::Alerting) { - if (isSleeping && !isWakingUp) { + if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::HalfHours && + alarmController.State() != AlarmController::AlarmState::Alerting) { + if (state == Sleeping) { GoToRunning(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock); } @@ -423,7 +424,7 @@ void SystemTask::Work() { batteryController.ReadPowerState(); motorController.RunForDuration(15); ReloadIdleTimer(); - if (isSleeping && !isWakingUp) { + if (state == Sleeping) { GoToRunning(); } break; @@ -434,7 +435,7 @@ void SystemTask::Work() { nimbleController.NotifyBatteryLevel(batteryController.PercentRemaining()); break; case Messages::OnPairing: - if (isSleeping && !isWakingUp) { + if (state == Sleeping) { GoToRunning(); } motorController.RunForDuration(35); @@ -475,14 +476,15 @@ void SystemTask::Work() { } void SystemTask::UpdateMotion() { - if (isGoingToSleep or isWakingUp) { + if (state == GoingToSleep || state == WakingUp) { return; } - if (isSleeping && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) || - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake))) { + if (state == Sleeping && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) || + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake))) { return; } + if (stepCounterMustBeReset) { motionSensor.ResetStepCounter(); stepCounterMustBeReset = false; @@ -494,7 +496,7 @@ void SystemTask::UpdateMotion() { motionController.Update(motionValues.x, motionValues.y, motionValues.z, motionValues.steps); if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) && - motionController.Should_RaiseWake(isSleeping)) { + motionController.Should_RaiseWake(state == Sleeping)) { GoToRunning(); } if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake) && @@ -515,7 +517,7 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { switch (action) { case Actions::Click: // If the first action after fast wakeup is a click, it should be ignored. - if (!fastWakeUpDone && !isGoingToSleep) { + if (!fastWakeUpDone && state != GoingToSleep) { displayApp.PushMessage(Applications::Display::Messages::ButtonPushed); } break; @@ -536,20 +538,16 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { } void SystemTask::GoToRunning() { - if (isGoingToSleep or (not isSleeping) or isWakingUp) { - return; + if (state == Sleeping) { + state = WakingUp; + PushMessage(Messages::GoToRunning); } - isWakingUp = true; - PushMessage(Messages::GoToRunning); } void SystemTask::OnTouchEvent() { - if (isGoingToSleep) { - return; - } - if (!isSleeping) { + if (state == Running) { PushMessage(Messages::OnTouchEvent); - } else if (!isWakingUp) { + } else if (state == Sleeping) { if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap) or settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { PushMessage(Messages::TouchWakeUp); @@ -559,7 +557,7 @@ void SystemTask::OnTouchEvent() { void SystemTask::PushMessage(System::Messages msg) { if (msg == Messages::GoToSleep && !doNotGoToSleep) { - isGoingToSleep = true; + state = GoingToSleep; } if (in_isr()) { @@ -594,7 +592,7 @@ void SystemTask::OnIdle() { } void SystemTask::ReloadIdleTimer() { - if (isSleeping || isGoingToSleep) { + if (state != Running) { return; } if (isDimmed) { diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index c5b0379..1a50f09 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -53,6 +53,7 @@ namespace Pinetime { namespace System { class SystemTask { public: + enum SystemTaskState { Sleeping, Running, GoingToSleep, WakingUp }; SystemTask(Drivers::SpiMaster& spi, Drivers::St7789& lcd, Pinetime::Drivers::SpiNorFlash& spiNorFlash, @@ -91,7 +92,7 @@ namespace Pinetime { }; bool IsSleeping() const { - return isSleeping; + return state == Sleeping || state == WakingUp; } private: @@ -110,10 +111,6 @@ namespace Pinetime { Pinetime::Controllers::TimerController& timerController; Pinetime::Controllers::AlarmController& alarmController; QueueHandle_t systemTasksMsgQueue; - std::atomic isSleeping {false}; - std::atomic isGoingToSleep {false}; - std::atomic isWakingUp {false}; - std::atomic isDimmed {false}; Pinetime::Drivers::Watchdog& watchdog; Pinetime::Controllers::NotificationManager& notificationManager; Pinetime::Controllers::MotorController& motorController; @@ -139,6 +136,8 @@ namespace Pinetime { TimerHandle_t idleTimer; TimerHandle_t measureBatteryTimer; bool doNotGoToSleep = false; + bool isDimmed = false; + SystemTaskState state = Running; void HandleButtonAction(Controllers::ButtonActions action); bool fastWakeUpDone = false; -- cgit v0.10.2 From dedb397ae088ab57aa0940a9ac10d8f4cd61e69b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sun, 8 May 2022 13:29:02 +0200 Subject: Systemtask : replace enum SystemTaskState by an enum class. diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index ebd93f9..e54ebcc 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -258,7 +258,7 @@ void SystemTask::Work() { nimbleController.RestartFastAdv(); } - state = Running; + state = SystemTaskState::Running; isDimmed = false; break; case Messages::TouchWakeUp: { @@ -277,7 +277,7 @@ void SystemTask::Work() { if (doNotGoToSleep) { break; } - state = GoingToSleep; // Already set in PushMessage() + state = SystemTaskState::GoingToSleep; // Already set in PushMessage() NRF_LOG_INFO("[systemtask] Going to sleep"); xTimerStop(idleTimer, 0); xTimerStop(dimTimer, 0); @@ -293,7 +293,7 @@ void SystemTask::Work() { break; case Messages::OnNewNotification: if (settingsController.GetNotificationStatus() == Pinetime::Controllers::Settings::Notification::ON) { - if (state == Sleeping) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); } else { ReloadIdleTimer(); @@ -302,14 +302,14 @@ void SystemTask::Work() { } break; case Messages::OnTimerDone: - if (state == Sleeping) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); } motorController.RunForDuration(35); displayApp.PushMessage(Pinetime::Applications::Display::Messages::TimerDone); break; case Messages::SetOffAlarm: - if (state == Sleeping) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); } motorController.StartRinging(); @@ -325,7 +325,7 @@ void SystemTask::Work() { break; case Messages::BleFirmwareUpdateStarted: doNotGoToSleep = true; - if (state == Sleeping) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); } displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted); @@ -340,7 +340,7 @@ void SystemTask::Work() { case Messages::StartFileTransfer: NRF_LOG_INFO("[systemtask] FS Started"); doNotGoToSleep = true; - if (state == Sleeping) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); } // TODO add intent of fs access icon or something @@ -391,7 +391,7 @@ void SystemTask::Work() { touchPanel.Sleep(); } - state = Sleeping; + state = SystemTaskState::Sleeping; break; case Messages::OnNewDay: // We might be sleeping (with TWI device disabled. @@ -402,7 +402,7 @@ void SystemTask::Work() { using Pinetime::Controllers::AlarmController; if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::Hours && alarmController.State() != AlarmController::AlarmState::Alerting) { - if (state == Sleeping) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock); } @@ -413,7 +413,7 @@ void SystemTask::Work() { using Pinetime::Controllers::AlarmController; if (settingsController.GetChimeOption() == Controllers::Settings::ChimesOption::HalfHours && alarmController.State() != AlarmController::AlarmState::Alerting) { - if (state == Sleeping) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); displayApp.PushMessage(Pinetime::Applications::Display::Messages::Clock); } @@ -424,7 +424,7 @@ void SystemTask::Work() { batteryController.ReadPowerState(); motorController.RunForDuration(15); ReloadIdleTimer(); - if (state == Sleeping) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); } break; @@ -435,7 +435,7 @@ void SystemTask::Work() { nimbleController.NotifyBatteryLevel(batteryController.PercentRemaining()); break; case Messages::OnPairing: - if (state == Sleeping) { + if (state == SystemTaskState::Sleeping) { GoToRunning(); } motorController.RunForDuration(35); @@ -476,11 +476,11 @@ void SystemTask::Work() { } void SystemTask::UpdateMotion() { - if (state == GoingToSleep || state == WakingUp) { + if (state == SystemTaskState::GoingToSleep || state == SystemTaskState::WakingUp) { return; } - if (state == Sleeping && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) || + if (state == SystemTaskState::Sleeping && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) || settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake))) { return; } @@ -496,7 +496,7 @@ void SystemTask::UpdateMotion() { motionController.Update(motionValues.x, motionValues.y, motionValues.z, motionValues.steps); if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) && - motionController.Should_RaiseWake(state == Sleeping)) { + motionController.Should_RaiseWake(state == SystemTaskState::Sleeping)) { GoToRunning(); } if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake) && @@ -517,7 +517,7 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { switch (action) { case Actions::Click: // If the first action after fast wakeup is a click, it should be ignored. - if (!fastWakeUpDone && state != GoingToSleep) { + if (!fastWakeUpDone && state != SystemTaskState::GoingToSleep) { displayApp.PushMessage(Applications::Display::Messages::ButtonPushed); } break; @@ -538,16 +538,16 @@ void SystemTask::HandleButtonAction(Controllers::ButtonActions action) { } void SystemTask::GoToRunning() { - if (state == Sleeping) { - state = WakingUp; + if (state == SystemTaskState::Sleeping) { + state = SystemTaskState::WakingUp; PushMessage(Messages::GoToRunning); } } void SystemTask::OnTouchEvent() { - if (state == Running) { + if (state == SystemTaskState::Running) { PushMessage(Messages::OnTouchEvent); - } else if (state == Sleeping) { + } else if (state == SystemTaskState::Sleeping) { if (settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap) or settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) { PushMessage(Messages::TouchWakeUp); @@ -557,7 +557,7 @@ void SystemTask::OnTouchEvent() { void SystemTask::PushMessage(System::Messages msg) { if (msg == Messages::GoToSleep && !doNotGoToSleep) { - state = GoingToSleep; + state = SystemTaskState::GoingToSleep; } if (in_isr()) { @@ -592,7 +592,7 @@ void SystemTask::OnIdle() { } void SystemTask::ReloadIdleTimer() { - if (state != Running) { + if (state != SystemTaskState::Running) { return; } if (isDimmed) { diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 1a50f09..d1e4a00 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -53,7 +53,7 @@ namespace Pinetime { namespace System { class SystemTask { public: - enum SystemTaskState { Sleeping, Running, GoingToSleep, WakingUp }; + enum class SystemTaskState { Sleeping, Running, GoingToSleep, WakingUp }; SystemTask(Drivers::SpiMaster& spi, Drivers::St7789& lcd, Pinetime::Drivers::SpiNorFlash& spiNorFlash, @@ -92,7 +92,7 @@ namespace Pinetime { }; bool IsSleeping() const { - return state == Sleeping || state == WakingUp; + return state == SystemTaskState::Sleeping || state == SystemTaskState::WakingUp; } private: @@ -137,7 +137,7 @@ namespace Pinetime { TimerHandle_t measureBatteryTimer; bool doNotGoToSleep = false; bool isDimmed = false; - SystemTaskState state = Running; + SystemTaskState state = SystemTaskState::Running; void HandleButtonAction(Controllers::ButtonActions action); bool fastWakeUpDone = false; -- cgit v0.10.2 From 015f17cd258cc336fa509b190814f6319d19bbbc Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sat, 30 Apr 2022 22:53:34 +0300 Subject: Add formatting test workflow diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 0000000..97ab11e --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,34 @@ +name: Code formatting + +on: + pull_request: + branches: [ master, develop ] + +jobs: + test-format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 1000 + + - name: Configure git + run: | + git config --global user.email "-" + git config --global user.name "Autoformatter" + git fetch origin "$GITHUB_BASE_REF":"$GITHUB_BASE_REF" --depth=1000 + + - name: Install clang-format + run: | + sudo apt-get update + sudo apt-get -y install clang-format-12 + + - name: Check formatting + run: tests/test-format.sh "$GITHUB_BASE_REF" + + - name: Upload patches + uses: actions/upload-artifact@v3 + if: failure() + with: + name: Patches + path: ./*.patch diff --git a/tests/test-format.sh b/tests/test-format.sh new file mode 100755 index 0000000..9caf6de --- /dev/null +++ b/tests/test-format.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +set -e + +[ -z "$1" ] && exit + +basebranch=$1 + +CHANGED_FILES=$(git diff --name-only "$basebranch"...HEAD) + +CHANGED=0 + +for file in $CHANGED_FILES +do + case "$file" in + *.cpp|*.h) + echo Checking "$file" + clang-format -i "$file" + if ! git diff --quiet "$basebranch"...HEAD + then + printf "\033[31mError:\033[0m Formatting error in %s\n" "$file" + CHANGED=1 + git add "$file" + git commit -q -m "Apply clang-format to $(basename "$file")" + printf "Creating patch " + git format-patch HEAD~ + fi + esac +done + +if [ $CHANGED = 1 ] +then + printf "\033[31mError:\033[0m Issues found. You may use the patches provided as artifacts to format the code." + exit 1 +fi + +exit 0 -- cgit v0.10.2 From c94e0d53bbb0612b11d1d8d06ebcedc242ed45c0 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 1 May 2022 12:07:39 +0300 Subject: Ignore deleted files in format test Otherwise clang-format would fail with an error and exit the script prematurely. diff --git a/tests/test-format.sh b/tests/test-format.sh index 9caf6de..ed20a4f 100755 --- a/tests/test-format.sh +++ b/tests/test-format.sh @@ -12,6 +12,7 @@ CHANGED=0 for file in $CHANGED_FILES do + [ -e "$file" ] || continue case "$file" in *.cpp|*.h) echo Checking "$file" -- cgit v0.10.2 From 09b852d8f0c4d66327ca402ee50dc36c5453b748 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sun, 8 May 2022 22:21:10 +0300 Subject: Fix and test workflow diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index e54ebcc..a429c42 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -442,7 +442,7 @@ void SystemTask::Work() { displayApp.PushMessage(Pinetime::Applications::Display::Messages::ShowPairingKey); break; case Messages::BleRadioEnableToggle: - if(settingsController.GetBleRadioEnabled()) { + if (settingsController.GetBleRadioEnabled()) { nimbleController.EnableRadio(); } else { nimbleController.DisableRadio(); @@ -481,7 +481,7 @@ void SystemTask::UpdateMotion() { } if (state == SystemTaskState::Sleeping && !(settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) || - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake))) { + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake))) { return; } diff --git a/tests/test-format.sh b/tests/test-format.sh index ed20a4f..7196e26 100755 --- a/tests/test-format.sh +++ b/tests/test-format.sh @@ -17,7 +17,7 @@ do *.cpp|*.h) echo Checking "$file" clang-format -i "$file" - if ! git diff --quiet "$basebranch"...HEAD + if ! git diff --quiet then printf "\033[31mError:\033[0m Formatting error in %s\n" "$file" CHANGED=1 -- cgit v0.10.2 From 4116baf72e045fab2d0146ee82e35898131935cb Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Mon, 18 Apr 2022 19:29:52 +0300 Subject: Added font auto-generate script diff --git a/src/displayapp/fonts/fix_jetbrains_mono_bold_20_zero.py b/src/displayapp/fonts/fix_jetbrains_mono_bold_20_zero.py new file mode 100755 index 0000000..1617c36 --- /dev/null +++ b/src/displayapp/fonts/fix_jetbrains_mono_bold_20_zero.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +import sys + +with open('jetbrains_mono_bold_20.c', 'r') as fd: + src = fd.read() + +zero_area = src.find('U+0030 "0"') +zero_data_start = src[zero_area:].find('\n') + zero_area + 1 +zero_data_end = src[zero_data_start:].find('\n\n') + +curr = src[zero_data_start:zero_data_start+zero_data_end] + +OLD=""" 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7f, + 0xdf, 0xf7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, + 0x8f, 0xc0,""" +NEW=""" 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7e, + 0xdf, 0xb7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, + 0x8f, 0xc0,""" + +if curr != OLD: + if curr == NEW: + print('Already patched') + sys.exit() + sys.exit('Target differers from expected data') + + +with open('jetbrains_mono_bold_20.c', 'r+') as fd: + fd.seek(zero_data_start) #NOTE: since they are both the same size, this is allowed. Otherwise more editing needs to happen. + fd.write(NEW) diff --git a/src/displayapp/fonts/fonts.json b/src/displayapp/fonts/fonts.json new file mode 100644 index 0000000..c1ff959 --- /dev/null +++ b/src/displayapp/fonts/fonts.json @@ -0,0 +1,90 @@ +{ + "fonts": { + "jetbrains_mono_bold_20": { + "sources": [ + { + "font": "JetBrainsMono-Bold.ttf", + "range": "0x20-0x7e, 0x410-0x44f" + }, + { + "font": "FontAwesome5-Solid+Brands+Regular.woff", + "range": "0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf029, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015" + } + ], + "bpp": 1, + "size": 20, + "patches": ["./fix_jetbrains_mono_bold_20_zero.py"] + }, + "jetbrains_mono_42": { + "sources": [ + { + "font": "JetBrainsMono-Regular.ttf", + "range": "0x25, 0x30-0x3a" + } + ], + "bpp": 1, + "size": 42 + }, + "jetbrains_mono_76": { + "sources": [ + { + "font": "JetBrainsMono-Regular.ttf", + "range": "0x25, 0x2D, 0x2F, 0x30-0x3a" + } + ], + "bpp": 1, + "size": 76 + }, + "jetbrains_mono_extrabold_compressed": { + "sources": [ + { + "font": "JetBrainsMono-ExtraBold.ttf", + "range": "0x30-0x3a" + } + ], + "bpp": 1, + "size": 80 + }, + "open_sans_light": { + "sources": [ + { + "font": "open_sans_light.ttf", + "symbols": "0123456789" + } + ], + "bpp": 1, + "size": 150 + }, + "lv_font_sys_48": { + "sources": [ + { + "font": "icons_sys_48.ttf", + "range": "0xe902, 0xe904-0xe907, 0xe90b-0xe90c" + } + ], + "bpp": 1, + "size": 48 + }, + "lv_font_navi_80": { + "sources": [ + { + "font": "navigation.ttf", + "range": "0xe900-0xe929" + } + ], + "bpp": 2, + "size": 80, + "compress": true + } + }, + "features": { + "hebrew": { + "jetbrains_mono_bold_20": [ + { + "font": "SimpleCLM-Medium.ttf", + "range": "0x05D0-0x05EA,0x05F3,0x05F4" + } + ] + } + } +} diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py new file mode 100644 index 0000000..fea0123 --- /dev/null +++ b/src/displayapp/fonts/generate.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python + +import io +import sys +import json +import typing +import os.path +import argparse +import subprocess + +class FontArg(object): + def __init__(self, d): + self.font = d['font'] + self.range = d.get('range') + self.symbols = d.get('symbols') + + +def gen_lvconv_line(dest: str, size: int, bpp: int, fonts: typing.List[FontArg], compress:bool=False): + args = ['lv_font_conv', '--size', str(size), '--output', dest, '--bpp', str(bpp), '--format', 'lvgl'] + if not compress: + args.append('--no-compress') + for font in fonts: + args.extend(['--font', font.font]) + if font.range: + args.extend(['--range', font.range]) + if font.symbols: + args.extend(['--symbols', font.symbols]) + + return args + +def main(): + ap = argparse.ArgumentParser(description='auto generate lvGL font files from fonts') + ap.add_argument('config', type=str, help='config file to use') + ap.add_argument('-e', '--enable', type=str, action='append', help='optional feature to enable in font generation', default=[], metavar='features', dest='features') + ap.add_argument('-f', '--font', type=str, action='append', help='Choose specific fonts to generate (default: all)', default=[]) + args = ap.parse_args() + + if not os.path.exists(args.config): + sys.exit(f'Error: the config file {args.config} does not exist.') + if not os.access(args.config, os.R_OK): + sys.exit(f'Error: the config file {args.config} is not accessable (permissions?).') + with open(args.config, 'r') as fd: + data = json.load(fd) + + for enabled_feature in args.features: + if enabled_feature not in data['features']: + sys.exit(f'Error: the requested feature {enabled_feature} does not exist in {args.config}.') + + for (name,font) in data['fonts'].items(): + if args.font and name not in args.font: + continue + sources = font.pop('sources') + if 'patches' in font: + patches = font.pop('patches') + else: + patches = None + for enabled_feature in args.features: + if name in data['features'][enabled_feature]: + sources.extend(data['features'][enabled_feature][name]) + font['fonts'] = [FontArg(thing) for thing in sources] + line = gen_lvconv_line(f'{name}.c', **font) + subprocess.check_call(line) + if patches: + for patch in patches: + subprocess.check_call(patch) + + + +if __name__ == '__main__': + main() -- cgit v0.10.2 From 3005fe871089b83a599b12e6a0d91453fc1b1e88 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Mon, 18 Apr 2022 19:30:36 +0300 Subject: Added FontAwesome5-Solid+Brands+Regular.woff to git diff --git a/src/displayapp/fonts/FontAwesome5-Solid+Brands+Regular.woff b/src/displayapp/fonts/FontAwesome5-Solid+Brands+Regular.woff new file mode 100644 index 0000000..791b410 Binary files /dev/null and b/src/displayapp/fonts/FontAwesome5-Solid+Brands+Regular.woff differ -- cgit v0.10.2 From 875b9c4bc5c05ff5e850db7159814b46b467df18 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Mon, 18 Apr 2022 20:42:58 +0300 Subject: fontgen: Added ability to choose fonts with .c diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index fea0123..e142db4 100644 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -33,6 +33,7 @@ def main(): ap.add_argument('config', type=str, help='config file to use') ap.add_argument('-e', '--enable', type=str, action='append', help='optional feature to enable in font generation', default=[], metavar='features', dest='features') ap.add_argument('-f', '--font', type=str, action='append', help='Choose specific fonts to generate (default: all)', default=[]) + ap.add_argument('-c', '--removec', action='store_true', help='remove .c extension from font names (given in -f options)', default=False) args = ap.parse_args() if not os.path.exists(args.config): @@ -46,8 +47,17 @@ def main(): if enabled_feature not in data['features']: sys.exit(f'Error: the requested feature {enabled_feature} does not exist in {args.config}.') + fonts_to_run = args.font + if args.removec and args.font: + fonts_to_run = [] + for font in args.font: + if font.endswith('.c'): + fonts_to_run.append(font[:-2]) + else: + sys.exit(f'requested to remove .c extension, but {font} does not have it.') + for (name,font) in data['fonts'].items(): - if args.font and name not in args.font: + if fonts_to_run and name not in fonts_to_run: continue sources = font.pop('sources') if 'patches' in font: -- cgit v0.10.2 From ac0dc5ff4790f83c972387c3ef4d7e55611643ce Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Tue, 19 Apr 2022 14:41:17 +0300 Subject: fontgen: added missing requested font check diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index e142db4..380ff3d 100644 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -56,6 +56,12 @@ def main(): else: sys.exit(f'requested to remove .c extension, but {font} does not have it.') + if fonts_to_run: + d = set(fonts_to_run).difference(data['fonts'].keys()) + if d: + print(f'Warning: requested font{"s" if len(d)>1 else ""} missing: {" ".join(d)}') + fonts_to_run = list(set(fonts_to_run).intersection(data['fonts'].keys())) + for (name,font) in data['fonts'].items(): if fonts_to_run and name not in fonts_to_run: continue -- cgit v0.10.2 From 9535c1e651175ca9a3eeef35f463b212e536ded8 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Tue, 19 Apr 2022 14:53:57 +0300 Subject: fontgen: move features into fonts Also, removed feature existance cheking (since it now depends on a font, so may end up being inside (only) a font not being used currently - which is an allowed usage) diff --git a/src/displayapp/fonts/fonts.json b/src/displayapp/fonts/fonts.json index c1ff959..6873185 100644 --- a/src/displayapp/fonts/fonts.json +++ b/src/displayapp/fonts/fonts.json @@ -13,7 +13,15 @@ ], "bpp": 1, "size": 20, - "patches": ["./fix_jetbrains_mono_bold_20_zero.py"] + "patches": ["./fix_jetbrains_mono_bold_20_zero.py"], + "features": { + "hebrew": [ + { + "font": "SimpleCLM-Medium.ttf", + "range": "0x05D0-0x05EA,0x05F3,0x05F4" + } + ] + } }, "jetbrains_mono_42": { "sources": [ @@ -76,15 +84,5 @@ "size": 80, "compress": true } - }, - "features": { - "hebrew": { - "jetbrains_mono_bold_20": [ - { - "font": "SimpleCLM-Medium.ttf", - "range": "0x05D0-0x05EA,0x05F3,0x05F4" - } - ] - } } } diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index 380ff3d..d0ae8de 100644 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -43,10 +43,6 @@ def main(): with open(args.config, 'r') as fd: data = json.load(fd) - for enabled_feature in args.features: - if enabled_feature not in data['features']: - sys.exit(f'Error: the requested feature {enabled_feature} does not exist in {args.config}.') - fonts_to_run = args.font if args.removec and args.font: fonts_to_run = [] @@ -66,13 +62,11 @@ def main(): if fonts_to_run and name not in fonts_to_run: continue sources = font.pop('sources') - if 'patches' in font: - patches = font.pop('patches') - else: - patches = None + patches = font.pop('patches') if 'patches' in font else [] + features = font.pop('features') if 'features' in font else [] for enabled_feature in args.features: - if name in data['features'][enabled_feature]: - sources.extend(data['features'][enabled_feature][name]) + if enabled_feature in features: + sources.extend(features[enabled_feature]) font['fonts'] = [FontArg(thing) for thing in sources] line = gen_lvconv_line(f'{name}.c', **font) subprocess.check_call(line) -- cgit v0.10.2 From 451d755e3d8329cbb5a6de766468e712239c4f02 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Tue, 19 Apr 2022 14:57:26 +0300 Subject: fontgen: removed ability of removing .c ext diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index d0ae8de..c9768a7 100644 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -33,7 +33,6 @@ def main(): ap.add_argument('config', type=str, help='config file to use') ap.add_argument('-e', '--enable', type=str, action='append', help='optional feature to enable in font generation', default=[], metavar='features', dest='features') ap.add_argument('-f', '--font', type=str, action='append', help='Choose specific fonts to generate (default: all)', default=[]) - ap.add_argument('-c', '--removec', action='store_true', help='remove .c extension from font names (given in -f options)', default=False) args = ap.parse_args() if not os.path.exists(args.config): @@ -44,13 +43,6 @@ def main(): data = json.load(fd) fonts_to_run = args.font - if args.removec and args.font: - fonts_to_run = [] - for font in args.font: - if font.endswith('.c'): - fonts_to_run.append(font[:-2]) - else: - sys.exit(f'requested to remove .c extension, but {font} does not have it.') if fonts_to_run: d = set(fonts_to_run).difference(data['fonts'].keys()) -- cgit v0.10.2 From 77645b20b2567eceb1553d1ae04ebd5434951562 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Tue, 19 Apr 2022 17:56:06 +0300 Subject: fontgen: use patch file for jetbrains 0 fix diff --git a/src/displayapp/fonts/fix_jetbrains_mono_bold_20_zero.py b/src/displayapp/fonts/fix_jetbrains_mono_bold_20_zero.py deleted file mode 100755 index 1617c36..0000000 --- a/src/displayapp/fonts/fix_jetbrains_mono_bold_20_zero.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python - -import sys - -with open('jetbrains_mono_bold_20.c', 'r') as fd: - src = fd.read() - -zero_area = src.find('U+0030 "0"') -zero_data_start = src[zero_area:].find('\n') + zero_area + 1 -zero_data_end = src[zero_data_start:].find('\n\n') - -curr = src[zero_data_start:zero_data_start+zero_data_end] - -OLD=""" 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7f, - 0xdf, 0xf7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0,""" -NEW=""" 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7e, - 0xdf, 0xb7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0,""" - -if curr != OLD: - if curr == NEW: - print('Already patched') - sys.exit() - sys.exit('Target differers from expected data') - - -with open('jetbrains_mono_bold_20.c', 'r+') as fd: - fd.seek(zero_data_start) #NOTE: since they are both the same size, this is allowed. Otherwise more editing needs to happen. - fd.write(NEW) diff --git a/src/displayapp/fonts/fonts.json b/src/displayapp/fonts/fonts.json index 6873185..c04bd21 100644 --- a/src/displayapp/fonts/fonts.json +++ b/src/displayapp/fonts/fonts.json @@ -13,7 +13,7 @@ ], "bpp": 1, "size": 20, - "patches": ["./fix_jetbrains_mono_bold_20_zero.py"], + "patches": [["patch", "jetbrains_mono_bold_20.c", "jetbrains_mono_bold_20.c_zero.patch"]], "features": { "hebrew": [ { diff --git a/src/displayapp/fonts/jetbrains_mono_bold_20.c_zero.patch b/src/displayapp/fonts/jetbrains_mono_bold_20.c_zero.patch new file mode 100644 index 0000000..ecb9966 --- /dev/null +++ b/src/displayapp/fonts/jetbrains_mono_bold_20.c_zero.patch @@ -0,0 +1,6 @@ +91,92c91,92 +< 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7f, +< 0xdf, 0xf7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, +--- +> 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7e, +> 0xdf, 0xb7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, -- cgit v0.10.2 From 1d4fd9c27fdb87f27acdea8d61b8d841f4339b5c Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Tue, 19 Apr 2022 18:01:12 +0300 Subject: fontgen: simplify enabled fonts diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index c9768a7..994464f 100644 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -42,17 +42,16 @@ def main(): with open(args.config, 'r') as fd: data = json.load(fd) - fonts_to_run = args.font + fonts_to_run = set(data['fonts'].keys()) - if fonts_to_run: - d = set(fonts_to_run).difference(data['fonts'].keys()) + if args.font: + d = set(args.font).difference(fonts_to_run) if d: print(f'Warning: requested font{"s" if len(d)>1 else ""} missing: {" ".join(d)}') - fonts_to_run = list(set(fonts_to_run).intersection(data['fonts'].keys())) + fonts_to_run = fonts_to_run.intersection(set(args.font)) - for (name,font) in data['fonts'].items(): - if fonts_to_run and name not in fonts_to_run: - continue + for name in fonts_to_run: + font = data['fonts'][name] sources = font.pop('sources') patches = font.pop('patches') if 'patches' in font else [] features = font.pop('features') if 'features' in font else [] -- cgit v0.10.2 From a75912dd978e7ed7d35f49b59b97d3c2e5e0e5e4 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Tue, 19 Apr 2022 18:05:03 +0300 Subject: fontgen: remove .c from requested font if there diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index 994464f..a685369 100644 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -45,10 +45,13 @@ def main(): fonts_to_run = set(data['fonts'].keys()) if args.font: - d = set(args.font).difference(fonts_to_run) + enabled_fonts = set() + for font in args.font: + enabled_fonts.add(font[:-2] if font.endswith('.c') else font) + d = enabled_fonts.difference(fonts_to_run) if d: print(f'Warning: requested font{"s" if len(d)>1 else ""} missing: {" ".join(d)}') - fonts_to_run = fonts_to_run.intersection(set(args.font)) + fonts_to_run = fonts_to_run.intersection(enabled_fonts) for name in fonts_to_run: font = data['fonts'][name] -- cgit v0.10.2 From 9d3671561f277a6f8493c59a0ab2d16ba2de429b Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Tue, 19 Apr 2022 19:51:29 +0300 Subject: fontgen: minor changes diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py old mode 100644 new mode 100755 index a685369..7c9c81a --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -29,9 +29,9 @@ def gen_lvconv_line(dest: str, size: int, bpp: int, fonts: typing.List[FontArg], return args def main(): - ap = argparse.ArgumentParser(description='auto generate lvGL font files from fonts') + ap = argparse.ArgumentParser(description='auto generate LVGL font files from fonts') ap.add_argument('config', type=str, help='config file to use') - ap.add_argument('-e', '--enable', type=str, action='append', help='optional feature to enable in font generation', default=[], metavar='features', dest='features') + ap.add_argument('-e', '--enable', type=str, action='append', help='optional feature to enable in font generation', default=[], metavar='FEATURE', dest='features') ap.add_argument('-f', '--font', type=str, action='append', help='Choose specific fonts to generate (default: all)', default=[]) args = ap.parse_args() -- cgit v0.10.2 From c006f05c9966f786d5d3855350b91b0379e5b1f7 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Wed, 20 Apr 2022 17:15:30 +0300 Subject: fontgen: simplfy json after removed external features key diff --git a/src/displayapp/fonts/fonts.json b/src/displayapp/fonts/fonts.json index c04bd21..fb9e1ac 100644 --- a/src/displayapp/fonts/fonts.json +++ b/src/displayapp/fonts/fonts.json @@ -1,88 +1,86 @@ { - "fonts": { - "jetbrains_mono_bold_20": { - "sources": [ - { - "font": "JetBrainsMono-Bold.ttf", - "range": "0x20-0x7e, 0x410-0x44f" - }, - { - "font": "FontAwesome5-Solid+Brands+Regular.woff", - "range": "0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf029, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015" - } - ], - "bpp": 1, - "size": 20, - "patches": [["patch", "jetbrains_mono_bold_20.c", "jetbrains_mono_bold_20.c_zero.patch"]], - "features": { - "hebrew": [ - { - "font": "SimpleCLM-Medium.ttf", - "range": "0x05D0-0x05EA,0x05F3,0x05F4" - } - ] + "jetbrains_mono_bold_20": { + "sources": [ + { + "file": "JetBrainsMono-Bold.ttf", + "range": "0x20-0x7e, 0x410-0x44f" + }, + { + "file": "FontAwesome5-Solid+Brands+Regular.woff", + "range": "0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf029, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015" } - }, - "jetbrains_mono_42": { - "sources": [ - { - "font": "JetBrainsMono-Regular.ttf", - "range": "0x25, 0x30-0x3a" - } - ], - "bpp": 1, - "size": 42 - }, - "jetbrains_mono_76": { - "sources": [ + ], + "bpp": 1, + "size": 20, + "patches": [["patch", "{file}", "{file}_zero.patch"]], + "features": { + "hebrew": [ { - "font": "JetBrainsMono-Regular.ttf", - "range": "0x25, 0x2D, 0x2F, 0x30-0x3a" + "file": "SimpleCLM-Medium.ttf", + "range": "0x05D0-0x05EA,0x05F3,0x05F4" } - ], - "bpp": 1, - "size": 76 - }, - "jetbrains_mono_extrabold_compressed": { - "sources": [ - { - "font": "JetBrainsMono-ExtraBold.ttf", - "range": "0x30-0x3a" - } - ], - "bpp": 1, - "size": 80 - }, - "open_sans_light": { - "sources": [ - { - "font": "open_sans_light.ttf", - "symbols": "0123456789" - } - ], - "bpp": 1, - "size": 150 - }, - "lv_font_sys_48": { - "sources": [ - { - "font": "icons_sys_48.ttf", - "range": "0xe902, 0xe904-0xe907, 0xe90b-0xe90c" - } - ], - "bpp": 1, - "size": 48 - }, - "lv_font_navi_80": { - "sources": [ - { - "font": "navigation.ttf", - "range": "0xe900-0xe929" - } - ], - "bpp": 2, - "size": 80, - "compress": true + ] } + }, + "jetbrains_mono_42": { + "sources": [ + { + "file": "JetBrainsMono-Regular.ttf", + "range": "0x25, 0x30-0x3a" + } + ], + "bpp": 1, + "size": 42 + }, + "jetbrains_mono_76": { + "sources": [ + { + "file": "JetBrainsMono-Regular.ttf", + "range": "0x25, 0x2D, 0x2F, 0x30-0x3a" + } + ], + "bpp": 1, + "size": 76 + }, + "jetbrains_mono_extrabold_compressed": { + "sources": [ + { + "file": "JetBrainsMono-ExtraBold.ttf", + "range": "0x30-0x3a" + } + ], + "bpp": 1, + "size": 80 + }, + "open_sans_light": { + "sources": [ + { + "file": "open_sans_light.ttf", + "symbols": "0123456789" + } + ], + "bpp": 1, + "size": 150 + }, + "lv_font_sys_48": { + "sources": [ + { + "file": "icons_sys_48.ttf", + "range": "0xe902, 0xe904-0xe907, 0xe90b-0xe90c" + } + ], + "bpp": 1, + "size": 48 + }, + "lv_font_navi_80": { + "sources": [ + { + "file": "navigation.ttf", + "range": "0xe900-0xe929" + } + ], + "bpp": 2, + "size": 80, + "compress": true } } diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index 7c9c81a..d1756a7 100755 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -8,23 +8,23 @@ import os.path import argparse import subprocess -class FontArg(object): +class Source(object): def __init__(self, d): - self.font = d['font'] + self.file = d['file'] self.range = d.get('range') self.symbols = d.get('symbols') -def gen_lvconv_line(dest: str, size: int, bpp: int, fonts: typing.List[FontArg], compress:bool=False): +def gen_lvconv_line(dest: str, size: int, bpp: int, sources: typing.List[Source], compress:bool=False): args = ['lv_font_conv', '--size', str(size), '--output', dest, '--bpp', str(bpp), '--format', 'lvgl'] if not compress: args.append('--no-compress') - for font in fonts: - args.extend(['--font', font.font]) - if font.range: - args.extend(['--range', font.range]) - if font.symbols: - args.extend(['--symbols', font.symbols]) + for source in sources: + args.extend(['--font', source.file]) + if source.range: + args.extend(['--range', source.range]) + if source.symbols: + args.extend(['--symbols', source.symbols]) return args @@ -42,7 +42,7 @@ def main(): with open(args.config, 'r') as fd: data = json.load(fd) - fonts_to_run = set(data['fonts'].keys()) + fonts_to_run = set(data.keys()) if args.font: enabled_fonts = set() @@ -54,18 +54,22 @@ def main(): fonts_to_run = fonts_to_run.intersection(enabled_fonts) for name in fonts_to_run: - font = data['fonts'][name] + font = data[name] sources = font.pop('sources') patches = font.pop('patches') if 'patches' in font else [] features = font.pop('features') if 'features' in font else [] for enabled_feature in args.features: if enabled_feature in features: sources.extend(features[enabled_feature]) - font['fonts'] = [FontArg(thing) for thing in sources] + font['sources'] = [Source(thing) for thing in sources] line = gen_lvconv_line(f'{name}.c', **font) subprocess.check_call(line) if patches: for patch in patches: + try: patch = patch.format(name=name, file=name+'.c') + except: pass + try: patch = [arg.format(name=name, file=name+'.c') for arg in patch] + except: pass subprocess.check_call(patch) -- cgit v0.10.2 From 1c0d9ef383f2ee533eee3f914968649904fc8ca2 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Wed, 20 Apr 2022 17:15:55 +0300 Subject: fonts: update README.md to match new method diff --git a/src/displayapp/fonts/README.md b/src/displayapp/fonts/README.md index c7a8e2b..18fa618 100644 --- a/src/displayapp/fonts/README.md +++ b/src/displayapp/fonts/README.md @@ -6,16 +6,21 @@ ## Generate the fonts: -* Open the [LVGL font converter](https://lvgl.io/tools/fontconverter) -* Enter the settings for the font that you wish to convert -* Click on Convert, download the file and place it in `src/DisplayApp/Fonts` +* Make sure you have installed lv_font_conv, and it's in the PATH + * `npm i lv_font_conv` + * `export PATH="$PATH:$PWD/node_modules/.bin"` + * *OR* globally: + * `npm i -g lv_font_conv` + * `export PATH="$PATH:$HOME/.local/bin"` (if not already in the path) + * or in any other path you choose. +* run the `generate.py` script, while in the folder. + * it has a `-h` flag to show usage, nontheless: `python generate.py fonts.json` ### How to add new symbols: * Browse [this cheatsheet](https://fontawesome.com/cheatsheet/free/solid) and pick symbols -* For each symbol, add its hex code (0xf641 for the 'Ad' icon, for example) to the *Range* list (Remember to keep this - readme updated with newest range list) -* Convert this hex value into a UTF-8 code +* For each symbol, add its hex code (0xf641 for the 'Ad' icon, for example) to the *Range* list (or the symbol list when its simple enough) in the `fonts.json` file +* * Convert this hex value into a UTF-8 code using [this site](http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=f185&mode=hex) * Define the new symbols in `src/displayapp/screens/Symbols.h`: @@ -23,77 +28,18 @@ static constexpr const char* newSymbol = "\xEF\x86\x85"; ``` -### Small font +### the config file format: -* Name: jetbrains_mono_bold_20 -* Size: 20 -* Bpp: 1 bit-per-pixel -* Do not enable font compression or horizontal subpixel rendering -* Load the file `JetBrainsMono-Bold.tff` (use the file in this repo to ensure the version matches) and specify the following range: `0x20-0x7e, 0x410-0x44f` -* Add a 2nd font, load the file `FontAwesome5-Solid+Brands+Regular.woff` and specify the following - range: `0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf029, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015` -* Fix an error in the font conversion. - -Replace the following: - - /* U+0030 "0" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7f, - 0xdf, 0xf7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - -with - - /* U+0030 "0" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7e, - 0xdf, 0xb7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - -(there are two changes: 7f -> 7e and f7 -> b7) - -### Medium font - -* Name: jetbrains_mono_42 -* Size: 42 -* Bpp: 1 bit-per-pixel -* Do not enable font compression or horizontal subpixel rendering -* Load the file `JetBrainsMono-Regular.tff` (use the file in this repo to ensure the version matches) and specify the following range: `0x25, 0x30-0x3a` - -### Large font - -* Name: jetbrains_mono_76 -* Size: 76 -* Bpp: 1 bit-per-pixel -* Do not enable font compression or horizontal subpixel rendering -* Load the file `JetBrainsMono-Regular.tff` (use the file in this repo to ensure the version matches) and specify the following range: `0x25, 0x2D, 0x2F, 0x30-0x3a` - -### Digital watchface font - -* Name: jetbrains_mono_extrabold_compressed -* Size: 80 -* Bpp: 1 bit-per-pixel -* Do not enable font compression or horizontal subpixel rendering -* Load the file `JetBrainsMono-ExtraBold.tff` (use the file in this repo to ensure the version matches) and specify the following range: `0x30-0x3a` - -### PineTimeStyle font - -* Name: open_sans_light -* Size: 150 -* Bpp: 1 bit-per-pixel -* Do not enable font compression or horizontal subpixel rendering -* Load the file `open_sans_light.tff` (use the file in this repo to ensure the version matches) and specify the following symbols: `0123456789` - -### Symbols font (Used in QuickSettings for example) - -* Name: lv_font_sys_48 -* Size: 48 -* Bpp: 1 bit-per-pixel -* Do not enable font compression or horizontal subpixel rendering -* Load the file `icons_sys_48.tff` and specify the following range: `0xe902, 0xe904-0xe907, 0xe90b-0xe90c` +inside `fonts`, there is a dictionary of fonts, +and for each font there is: +* sources - list of file,range(,symbols) wanted (as a dictionary of those) +* bpp - bits per pixel. +* size - size. +* patches - list of extra "patches" to run, either string to file which should be run, or list of arguments (with first one being the command being run) +* features - optional. dictionary of extra file,range fonts to be included when the feature is enabled. (for example: a extra language) +* compress - optional. default disabled. add `"compress": true` to enable ### Navigation font `navigtion.ttf` is created with the web app [icomoon](https://icomoon.io/app) by importing the svg files from `src/displayapp/icons/navigation/unique` and generating the font. `lv_font_navi_80.json` is a project file for the site, which you can import to add or remove icons. -This font must be generated with the `lv_font_conv` tool, which has additional options not available in the online converter. - -`lv_font_conv --font navigation.ttf -r '0xe900-0xe929' --size 80 --format lvgl --bpp 2 -o lv_font_navi_80.c` -- cgit v0.10.2 From 43443eda74f39adc90cfb77f3945586a9481679d Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Wed, 20 Apr 2022 20:41:30 +0300 Subject: fontgen: generate fonts at runtime with CMake diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ba2d561..bacd67c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -373,7 +373,7 @@ list(APPEND IMAGE_FILES displayapp/icons/bluetooth/os_bt_disconnected.c ) - +include(displayapp/fonts/CMakeLists.txt) list(APPEND SOURCE_FILES BootloaderVersion.cpp logging/NrfLogger.cpp @@ -897,7 +897,6 @@ add_custom_command(TARGET ${EXECUTABLE_NAME} COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE_FILE_NAME}.out "${EXECUTABLE_FILE_NAME}.hex" COMMENT "post build steps for ${EXECUTABLE_FILE_NAME}") - # Build binary intended to be used by bootloader set(EXECUTABLE_MCUBOOT_NAME "pinetime-mcuboot-app") set(EXECUTABLE_MCUBOOT_FILE_NAME ${EXECUTABLE_MCUBOOT_NAME}-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}) diff --git a/src/displayapp/fonts/CMakeLists.txt b/src/displayapp/fonts/CMakeLists.txt new file mode 100644 index 0000000..1dfe041 --- /dev/null +++ b/src/displayapp/fonts/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.10) + +set(FONTS jetbrains_mono_42 jetbrains_mono_76 jetbrains_mono_bold_20 + jetbrains_mono_extrabold_compressed lv_font_navi_80 lv_font_sys_48 + open_sans_light) + +foreach(FONT ${FONTS}) + set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/displayapp/fonts/${FONT}.c + PROPERTIES GENERATED TRUE) + + add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/displayapp/fonts/${FONT}.c + COMMAND python generate.py -f ${FONT} fonts.json + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/displayapp/fonts/fonts.json + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/displayapp/fonts + ) +endforeach() diff --git a/src/displayapp/fonts/jetbrains_mono_42.c b/src/displayapp/fonts/jetbrains_mono_42.c deleted file mode 100644 index b5218b9..0000000 --- a/src/displayapp/fonts/jetbrains_mono_42.c +++ /dev/null @@ -1,258 +0,0 @@ -/******************************************************************************* - * Size: 42 px - * Bpp: 1 - * Opts: - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef JETBRAINS_MONO_42 -#define JETBRAINS_MONO_42 1 -#endif - -#if JETBRAINS_MONO_42 - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+0025 "%" */ - 0x1f, 0x80, 0x7, 0x3f, 0xc0, 0xe, 0x7f, 0xe0, - 0x1c, 0xf0, 0xf0, 0x1c, 0xe0, 0x70, 0x38, 0xe0, - 0x70, 0x70, 0xe0, 0x70, 0x70, 0xe0, 0x70, 0xe0, - 0xe0, 0x71, 0xc0, 0xe0, 0x71, 0xc0, 0xf0, 0xf3, - 0x80, 0x7f, 0xe7, 0x0, 0x3f, 0xc7, 0x0, 0x1f, - 0x8e, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x3c, 0x0, - 0x0, 0x38, 0x0, 0x0, 0x71, 0xf8, 0x0, 0xe3, - 0xfc, 0x0, 0xe7, 0xfe, 0x1, 0xcf, 0xf, 0x3, - 0x8e, 0x7, 0x3, 0x8e, 0x7, 0x7, 0xe, 0x7, - 0xe, 0xe, 0x7, 0xe, 0xe, 0x7, 0x1c, 0xe, - 0x7, 0x38, 0xf, 0xf, 0x38, 0x7, 0xfe, 0x70, - 0x3, 0xfc, 0xe0, 0x1, 0xf8, - - /* U+0030 "0" */ - 0x3, 0xf8, 0x1, 0xff, 0xc0, 0xff, 0xfe, 0x1f, - 0x7, 0xc7, 0xc0, 0x7c, 0xf0, 0x7, 0xbc, 0x0, - 0x7f, 0x80, 0xf, 0xf0, 0x1, 0xfe, 0x0, 0x3f, - 0xc0, 0x7, 0xf8, 0x0, 0xff, 0xe, 0x1f, 0xe3, - 0xe3, 0xfc, 0x7c, 0x7f, 0x8f, 0x8f, 0xf0, 0xe1, - 0xfe, 0x0, 0x3f, 0xc0, 0x7, 0xf8, 0x0, 0xff, - 0x0, 0x1f, 0xe0, 0x3, 0xfc, 0x0, 0x7f, 0x80, - 0xf, 0xf0, 0x1, 0xef, 0x0, 0x79, 0xf0, 0x1f, - 0x1f, 0x7, 0xc3, 0xff, 0xf8, 0x1f, 0xfc, 0x0, - 0xfe, 0x0, - - /* U+0031 "1" */ - 0x3, 0xf0, 0x0, 0xfe, 0x0, 0x3f, 0xc0, 0x1f, - 0xf8, 0x7, 0xcf, 0x1, 0xf1, 0xe0, 0x3c, 0x3c, - 0x7, 0x7, 0x80, 0x80, 0xf0, 0x0, 0x1e, 0x0, - 0x3, 0xc0, 0x0, 0x78, 0x0, 0xf, 0x0, 0x1, - 0xe0, 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0xf0, - 0x0, 0x1e, 0x0, 0x3, 0xc0, 0x0, 0x78, 0x0, - 0xf, 0x0, 0x1, 0xe0, 0x0, 0x3c, 0x0, 0x7, - 0x80, 0x0, 0xf0, 0x0, 0x1e, 0x0, 0x3, 0xc0, - 0x0, 0x78, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xf8, - - /* U+0032 "2" */ - 0x3, 0xf8, 0x1, 0xff, 0xc0, 0xff, 0xfc, 0x1f, - 0x7, 0xc7, 0xc0, 0x7c, 0xf0, 0x7, 0xbc, 0x0, - 0x7f, 0x80, 0xf, 0xf0, 0x1, 0xe0, 0x0, 0x3c, - 0x0, 0x7, 0x80, 0x1, 0xf0, 0x0, 0x3c, 0x0, - 0xf, 0x80, 0x1, 0xe0, 0x0, 0x7c, 0x0, 0x1f, - 0x0, 0x7, 0xc0, 0x1, 0xf0, 0x0, 0x7c, 0x0, - 0x1f, 0x0, 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3e, - 0x0, 0xf, 0x80, 0x3, 0xe0, 0x0, 0xf8, 0x0, - 0x3e, 0x0, 0x7, 0xff, 0xfe, 0xff, 0xff, 0xdf, - 0xff, 0xf8, - - /* U+0033 "3" */ - 0x7f, 0xff, 0x8f, 0xff, 0xf1, 0xff, 0xfe, 0x0, - 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, - 0x0, 0x3, 0xe0, 0x0, 0x78, 0x0, 0x1e, 0x0, - 0x7, 0x80, 0x1, 0xfc, 0x0, 0x3f, 0xe0, 0x7, - 0xfe, 0x0, 0xff, 0xe0, 0x0, 0x3e, 0x0, 0x3, - 0xc0, 0x0, 0x7c, 0x0, 0x7, 0x80, 0x0, 0xf0, - 0x0, 0x1e, 0x0, 0x3, 0xfc, 0x0, 0x7f, 0x80, - 0xf, 0xf0, 0x1, 0xff, 0x0, 0x79, 0xe0, 0x1f, - 0x1f, 0x7, 0xc3, 0xff, 0xf0, 0x1f, 0xfc, 0x0, - 0xfe, 0x0, - - /* U+0034 "4" */ - 0x0, 0x1e, 0x0, 0xf, 0x80, 0x3, 0xc0, 0x1, - 0xe0, 0x0, 0x78, 0x0, 0x3c, 0x0, 0x1f, 0x0, - 0x7, 0x80, 0x3, 0xc0, 0x1, 0xf0, 0x0, 0x78, - 0x0, 0x3e, 0x0, 0xf, 0x0, 0x7, 0x80, 0xf3, - 0xe0, 0x3c, 0xf0, 0xf, 0x7c, 0x3, 0xde, 0x0, - 0xff, 0x0, 0x3f, 0xc0, 0xf, 0xf0, 0x3, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x3, - 0xc0, 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, 0x0, - 0x3, 0xc0, 0x0, 0xf0, 0x0, 0x3c, - - /* U+0035 "5" */ - 0x7f, 0xff, 0x9f, 0xff, 0xe7, 0xff, 0xf9, 0xe0, - 0x0, 0x78, 0x0, 0x1e, 0x0, 0x7, 0x80, 0x1, - 0xe0, 0x0, 0x78, 0x0, 0x1e, 0x0, 0x7, 0x8f, - 0x81, 0xef, 0xf8, 0x7f, 0xff, 0x1f, 0x87, 0xe7, - 0xc0, 0x79, 0xe0, 0x1f, 0x0, 0x3, 0xc0, 0x0, - 0xf0, 0x0, 0x3c, 0x0, 0xf, 0x0, 0x3, 0xc0, - 0x0, 0xf0, 0x0, 0x3c, 0x0, 0xf, 0xf0, 0x3, - 0xde, 0x1, 0xe7, 0x80, 0x78, 0xf8, 0x7e, 0x3f, - 0xff, 0x3, 0xff, 0x80, 0x3f, 0x0, - - /* U+0036 "6" */ - 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0x78, 0x0, - 0xf, 0x0, 0x1, 0xe0, 0x0, 0x1e, 0x0, 0x3, - 0xc0, 0x0, 0x3c, 0x0, 0x7, 0x80, 0x0, 0x70, - 0x0, 0xf, 0x0, 0x1, 0xe7, 0xc0, 0x1f, 0xff, - 0x3, 0xff, 0xfc, 0x3f, 0xf, 0xc7, 0xc0, 0x3e, - 0x78, 0x1, 0xe7, 0x80, 0x1f, 0xf0, 0x0, 0xff, - 0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf0, - 0x0, 0xff, 0x0, 0xf, 0xf8, 0x1, 0xe7, 0x80, - 0x1e, 0x7c, 0x3, 0xe3, 0xf0, 0xfc, 0x1f, 0xff, - 0x80, 0xff, 0xf0, 0x1, 0xf8, 0x0, - - /* U+0037 "7" */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x0, 0x1e, 0xf0, 0x1, 0xef, 0x0, 0x1e, 0xf0, - 0x3, 0xcf, 0x0, 0x3c, 0x0, 0x3, 0x80, 0x0, - 0x78, 0x0, 0x7, 0x80, 0x0, 0xf0, 0x0, 0xf, - 0x0, 0x0, 0xf0, 0x0, 0x1e, 0x0, 0x1, 0xe0, - 0x0, 0x3c, 0x0, 0x3, 0xc0, 0x0, 0x3c, 0x0, - 0x7, 0x80, 0x0, 0x78, 0x0, 0x7, 0x80, 0x0, - 0xf0, 0x0, 0xf, 0x0, 0x1, 0xe0, 0x0, 0x1e, - 0x0, 0x1, 0xe0, 0x0, 0x3c, 0x0, 0x3, 0xc0, - 0x0, 0x7c, 0x0, 0x7, 0x80, 0x0, - - /* U+0038 "8" */ - 0x1, 0xf8, 0x0, 0xff, 0xf0, 0x1f, 0xff, 0x83, - 0xf0, 0xfc, 0x3c, 0x3, 0xc7, 0xc0, 0x3e, 0x78, - 0x1, 0xe7, 0x80, 0x1e, 0x78, 0x1, 0xe7, 0x80, - 0x1e, 0x3c, 0x3, 0xc3, 0xe0, 0x7c, 0x1f, 0xf, - 0x80, 0xff, 0xf0, 0x3, 0xfc, 0x0, 0x7f, 0xe0, - 0xf, 0xff, 0x3, 0xe0, 0x7c, 0x3c, 0x3, 0xc7, - 0x80, 0x1e, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf0, - 0x0, 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, 0x80, - 0x1f, 0x7c, 0x3, 0xe7, 0xe0, 0x7e, 0x3f, 0xff, - 0xc0, 0xff, 0xf0, 0x3, 0xfc, 0x0, - - /* U+0039 "9" */ - 0x3, 0xf8, 0x0, 0xff, 0xf0, 0x1f, 0xff, 0x83, - 0xe0, 0xfc, 0x7c, 0x3, 0xe7, 0x80, 0x1e, 0xf8, - 0x1, 0xff, 0x0, 0xf, 0xf0, 0x0, 0xff, 0x0, - 0xf, 0xf0, 0x0, 0xff, 0x0, 0xf, 0xf8, 0x1, - 0xf7, 0x80, 0x1e, 0x7c, 0x3, 0xe3, 0xe0, 0x7e, - 0x3f, 0xff, 0xc1, 0xff, 0xfc, 0x7, 0xe7, 0x80, - 0x0, 0xf8, 0x0, 0xf, 0x0, 0x1, 0xe0, 0x0, - 0x1e, 0x0, 0x3, 0xc0, 0x0, 0x3c, 0x0, 0x7, - 0x80, 0x0, 0xf8, 0x0, 0xf, 0x0, 0x1, 0xe0, - 0x0, 0x1e, 0x0, 0x3, 0xc0, 0x0, - - /* U+003A ":" */ - 0x7d, 0xff, 0xff, 0xff, 0xef, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xf7, 0xff, 0xff, 0xff, 0xbe -}; - - -/*--------------------- - * 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 = 403, .box_w = 24, .box_h = 31, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 93, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 167, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 241, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 315, .adv_w = 403, .box_w = 19, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 389, .adv_w = 403, .box_w = 18, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 459, .adv_w = 403, .box_w = 18, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 529, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 607, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 685, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 763, .adv_w = 403, .box_w = 20, .box_h = 31, .ofs_x = 3, .ofs_y = 0}, - {.bitmap_index = 841, .adv_w = 403, .box_w = 7, .box_h = 24, .ofs_x = 9, .ofs_y = 0} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - - - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 37, .range_length = 1, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - }, - { - .range_start = 48, .range_length = 11, .glyph_id_start = 2, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_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 = 2, - .bpp = 1, - .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 jetbrains_mono_42 = { -#else -lv_font_t jetbrains_mono_42 = { -#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 = 31, /*The maximum line height required by the font*/ - .base_line = 0, /*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 = -7, - .underline_thickness = 2, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if JETBRAINS_MONO_42*/ - diff --git a/src/displayapp/fonts/jetbrains_mono_76.c b/src/displayapp/fonts/jetbrains_mono_76.c deleted file mode 100644 index 2200e39..0000000 --- a/src/displayapp/fonts/jetbrains_mono_76.c +++ /dev/null @@ -1,554 +0,0 @@ -/******************************************************************************* - * Size: 76 px - * Bpp: 1 - * Opts: - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef JETBRAINS_MONO_76 -#define JETBRAINS_MONO_76 1 -#endif - -#if JETBRAINS_MONO_76 - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+0025 "%" */ - 0x1, 0xfc, 0x0, 0x0, 0x7, 0xe1, 0xff, 0xf0, - 0x0, 0x1, 0xf8, 0x7f, 0xff, 0x0, 0x0, 0x3f, - 0x1f, 0xff, 0xf0, 0x0, 0xf, 0xc7, 0xff, 0xff, - 0x0, 0x3, 0xf0, 0xfe, 0xf, 0xe0, 0x0, 0x7e, - 0x3f, 0x80, 0xfc, 0x0, 0x1f, 0x87, 0xe0, 0xf, - 0xc0, 0x7, 0xe0, 0xfc, 0x1, 0xf8, 0x0, 0xfc, - 0x1f, 0x80, 0x3f, 0x0, 0x3f, 0x3, 0xf0, 0x7, - 0xe0, 0xf, 0xc0, 0x7e, 0x0, 0xfc, 0x1, 0xf8, - 0xf, 0xc0, 0x1f, 0x80, 0x7e, 0x1, 0xf8, 0x3, - 0xf0, 0x1f, 0x80, 0x3f, 0x0, 0x7e, 0x3, 0xf0, - 0x7, 0xe0, 0xf, 0xc0, 0xfc, 0x0, 0xfc, 0x1, - 0xf8, 0x3f, 0x0, 0x1f, 0x80, 0x3f, 0x7, 0xe0, - 0x3, 0xf8, 0xf, 0xe1, 0xf8, 0x0, 0x3f, 0x83, - 0xf8, 0x7e, 0x0, 0x7, 0xff, 0xff, 0xf, 0xc0, - 0x0, 0x7f, 0xff, 0xc3, 0xf0, 0x0, 0x7, 0xff, - 0xf0, 0xfc, 0x0, 0x0, 0x7f, 0xfc, 0x1f, 0x80, - 0x0, 0x1, 0xfc, 0x7, 0xe0, 0x0, 0x0, 0x0, - 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, - 0x3, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x7e, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x0, - 0x7, 0xe0, 0x3f, 0x80, 0x0, 0x0, 0xfc, 0x3f, - 0xfe, 0x0, 0x0, 0x3f, 0xf, 0xff, 0xe0, 0x0, - 0xf, 0xc3, 0xff, 0xfe, 0x0, 0x1, 0xf8, 0xff, - 0xff, 0xe0, 0x0, 0x7e, 0x1f, 0xc1, 0xfc, 0x0, - 0x1f, 0x83, 0xf0, 0x1f, 0x80, 0x3, 0xf0, 0xfc, - 0x1, 0xf8, 0x0, 0xfc, 0x1f, 0x80, 0x3f, 0x0, - 0x3f, 0x3, 0xf0, 0x7, 0xe0, 0x7, 0xe0, 0x7e, - 0x0, 0xfc, 0x1, 0xf8, 0xf, 0xc0, 0x1f, 0x80, - 0x7e, 0x1, 0xf8, 0x3, 0xf0, 0xf, 0xc0, 0x3f, - 0x0, 0x7e, 0x3, 0xf0, 0x7, 0xe0, 0xf, 0xc0, - 0xfc, 0x0, 0xfc, 0x1, 0xf8, 0x1f, 0x80, 0x1f, - 0x80, 0x3f, 0x7, 0xe0, 0x3, 0xf8, 0xf, 0xe1, - 0xf8, 0x0, 0x7f, 0x1, 0xfc, 0x3f, 0x0, 0x7, - 0xff, 0xff, 0xf, 0xc0, 0x0, 0xff, 0xff, 0xe3, - 0xf0, 0x0, 0xf, 0xff, 0xf8, 0xfe, 0x0, 0x0, - 0xff, 0xfe, 0x1f, 0x80, 0x0, 0xf, 0xff, 0x87, - 0xe0, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x80, 0x0, - - /* U+002D "-" */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, - - /* U+002F "/" */ - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0xf, - 0xe0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x1, - 0xfe, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x1f, 0xc0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x3, 0xf8, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x7f, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x7f, 0x0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0xf, 0xf0, - 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0xfe, - 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x1f, - 0xc0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x3, - 0xf8, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, - 0x7f, 0x80, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, - 0x7, 0xf0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, - 0x0, 0xfe, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, - 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0xfe, 0x0, - 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x1, 0xfc, - 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x3f, - 0x80, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, - 0xf, 0xe0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, - 0x0, 0x3f, 0x80, 0x0, 0x0, 0xf, 0xe0, 0x0, - 0x0, 0x7, 0xf8, 0x0, 0x0, 0x1, 0xfc, 0x0, - 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x3f, 0x80, - 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0xf, - 0xe0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x1, - 0xfc, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x3f, 0xc0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x3, 0xf8, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x7f, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, - 0x0, 0xf, 0xe0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, - - /* U+0030 "0" */ - 0x0, 0xf, 0xfc, 0x0, 0x0, 0x1f, 0xff, 0xe0, - 0x0, 0x1f, 0xff, 0xfe, 0x0, 0xf, 0xff, 0xff, - 0xc0, 0x7, 0xff, 0xff, 0xf8, 0x3, 0xff, 0xff, - 0xff, 0x1, 0xff, 0xc0, 0xff, 0xe0, 0xff, 0x80, - 0x7, 0xfc, 0x3f, 0xc0, 0x0, 0xff, 0x1f, 0xe0, - 0x0, 0x1f, 0xe7, 0xf8, 0x0, 0x7, 0xf9, 0xfc, - 0x0, 0x0, 0xfe, 0xff, 0x0, 0x0, 0x3f, 0xff, - 0x80, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x1, 0xff, - 0xf8, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x1f, - 0xff, 0x80, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x1, - 0xff, 0xf8, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, - 0x1f, 0xff, 0x80, 0x0, 0x7, 0xff, 0xe0, 0x0, - 0x1, 0xff, 0xf8, 0x0, 0x0, 0x7f, 0xfe, 0x3, - 0xe0, 0x1f, 0xff, 0x81, 0xfc, 0x7, 0xff, 0xe0, - 0xff, 0x81, 0xff, 0xf8, 0x3f, 0xe0, 0x7f, 0xfe, - 0xf, 0xf8, 0x1f, 0xff, 0x83, 0xfe, 0x7, 0xff, - 0xe0, 0xff, 0x81, 0xff, 0xf8, 0x1f, 0xc0, 0x7f, - 0xfe, 0x3, 0xe0, 0x1f, 0xff, 0x80, 0x0, 0x7, - 0xff, 0xe0, 0x0, 0x1, 0xff, 0xf8, 0x0, 0x0, - 0x7f, 0xfe, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x0, - 0x7, 0xff, 0xe0, 0x0, 0x1, 0xff, 0xf8, 0x0, - 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x1f, 0xff, 0x80, - 0x0, 0x7, 0xff, 0xe0, 0x0, 0x1, 0xff, 0xf8, - 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x1f, 0xff, - 0xc0, 0x0, 0xf, 0xf7, 0xf0, 0x0, 0x3, 0xf9, - 0xfe, 0x0, 0x1, 0xfe, 0x7f, 0xc0, 0x0, 0xff, - 0x8f, 0xf8, 0x0, 0x7f, 0xc1, 0xff, 0x0, 0x3f, - 0xe0, 0x7f, 0xff, 0xff, 0xf8, 0xf, 0xff, 0xff, - 0xfc, 0x1, 0xff, 0xff, 0xfe, 0x0, 0x3f, 0xff, - 0xff, 0x0, 0x3, 0xff, 0xff, 0x0, 0x0, 0x3f, - 0xff, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, - - /* U+0031 "1" */ - 0x0, 0xf, 0xfc, 0x0, 0x0, 0x7, 0xff, 0x0, - 0x0, 0x7, 0xff, 0xc0, 0x0, 0x3, 0xff, 0xf0, - 0x0, 0x1, 0xff, 0xfc, 0x0, 0x1, 0xff, 0xff, - 0x0, 0x0, 0xff, 0xdf, 0xc0, 0x0, 0x7f, 0xe7, - 0xf0, 0x0, 0x7f, 0xe1, 0xfc, 0x0, 0x3f, 0xf0, - 0x7f, 0x0, 0xf, 0xf8, 0x1f, 0xc0, 0x3, 0xfc, - 0x7, 0xf0, 0x0, 0xfc, 0x1, 0xfc, 0x0, 0x3e, - 0x0, 0x7f, 0x0, 0xf, 0x0, 0x1f, 0xc0, 0x3, - 0x0, 0x7, 0xf0, 0x0, 0x80, 0x1, 0xfc, 0x0, - 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x1f, 0xc0, - 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x1, 0xfc, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x1f, - 0xc0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x1, - 0xfc, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x1f, 0xc0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, - 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x7f, 0x0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x7, 0xf0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, - 0x7, 0xf0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0x7f, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, - 0x0, 0x7, 0xf0, 0x0, 0x0, 0x1, 0xfc, 0x0, - 0x0, 0x0, 0x7f, 0x0, 0xf, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - - /* U+0032 "2" */ - 0x0, 0xf, 0xfc, 0x0, 0x0, 0x1f, 0xff, 0xe0, - 0x0, 0x1f, 0xff, 0xfe, 0x0, 0xf, 0xff, 0xff, - 0xc0, 0x7, 0xff, 0xff, 0xf8, 0x3, 0xff, 0xff, - 0xff, 0x1, 0xff, 0xc0, 0x7f, 0xe0, 0xff, 0x80, - 0x7, 0xfc, 0x3f, 0xc0, 0x0, 0xff, 0x1f, 0xe0, - 0x0, 0x1f, 0xe7, 0xf0, 0x0, 0x3, 0xf9, 0xfc, - 0x0, 0x0, 0xfe, 0xff, 0x0, 0x0, 0x3f, 0xff, - 0x80, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x1, 0xff, - 0xf8, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x1f, - 0xc0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x1, - 0xfc, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x3f, 0x80, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x7, 0xf8, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x7, 0xf8, 0x0, 0x0, 0x3, 0xfe, 0x0, - 0x0, 0x1, 0xff, 0x0, 0x0, 0x0, 0xff, 0x80, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x7, 0xfc, - 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x1, 0xff, - 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x7f, - 0xc0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x1f, - 0xf0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x7, - 0xfc, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, - 0xff, 0x80, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, - 0x3f, 0xe0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, - 0xf, 0xf8, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, - 0x1, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, - 0xff, 0xdf, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, - 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, - 0xff, 0xff, 0xc0, - - /* U+0033 "3" */ - 0x3f, 0xff, 0xff, 0xfe, 0xf, 0xff, 0xff, 0xff, - 0x83, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, - 0xf8, 0x3f, 0xff, 0xff, 0xfe, 0xf, 0xff, 0xff, - 0xff, 0x80, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x7, 0xf0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0x7f, 0x80, 0x0, 0x0, 0x3f, 0xc0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x3, 0xf8, 0x0, 0x0, 0x1, 0xfc, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x1, 0xff, - 0xfc, 0x0, 0x0, 0x7f, 0xff, 0xc0, 0x0, 0x1f, - 0xff, 0xf8, 0x0, 0x7, 0xff, 0xff, 0x0, 0x1, - 0xff, 0xff, 0xe0, 0x0, 0x0, 0xf, 0xfc, 0x0, - 0x0, 0x1, 0xff, 0x0, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0xfe, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, - 0x7, 0xf0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x1f, 0xff, 0x80, - 0x0, 0x7, 0xff, 0xe0, 0x0, 0x1, 0xff, 0xf8, - 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x3f, 0xdf, - 0xc0, 0x0, 0xf, 0xe7, 0xf8, 0x0, 0x7, 0xf9, - 0xfe, 0x0, 0x1, 0xfe, 0x3f, 0xc0, 0x0, 0xff, - 0xf, 0xfc, 0x0, 0xff, 0x81, 0xff, 0xff, 0xff, - 0xe0, 0x3f, 0xff, 0xff, 0xf0, 0x7, 0xff, 0xff, - 0xf8, 0x0, 0xff, 0xff, 0xf8, 0x0, 0xf, 0xff, - 0xfc, 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, - 0xc0, 0x0, 0x0, - - /* U+0034 "4" */ - 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3f, 0xc0, - 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x7f, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xfe, 0x0, - 0x0, 0x1, 0xfe, 0x0, 0x0, 0x3, 0xfc, 0x0, - 0x0, 0x3, 0xf8, 0x0, 0x0, 0x7, 0xf8, 0x0, - 0x0, 0x7, 0xf0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x1f, 0xe0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x3f, 0x80, 0x0, - 0x0, 0x7f, 0x80, 0x0, 0x0, 0xff, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, - 0x7, 0xf8, 0x0, 0x7f, 0x7, 0xf8, 0x0, 0x7f, - 0xf, 0xf0, 0x0, 0x7f, 0xf, 0xe0, 0x0, 0x7f, - 0x1f, 0xe0, 0x0, 0x7f, 0x3f, 0xc0, 0x0, 0x7f, - 0x3f, 0xc0, 0x0, 0x7f, 0x7f, 0x80, 0x0, 0x7f, - 0x7f, 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0x7f, - 0xfe, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x7f, - 0xfe, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x7f, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - - /* U+0035 "5" */ - 0x7f, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xfc, - 0x7f, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xfc, - 0x7f, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xfc, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x7f, 0x3, 0xfc, 0x0, - 0x7f, 0xf, 0xff, 0x80, 0x7f, 0x3f, 0xff, 0xc0, - 0x7f, 0x7f, 0xff, 0xf0, 0x7f, 0x7f, 0xff, 0xf8, - 0x7f, 0xff, 0xff, 0xf8, 0x7f, 0xf8, 0x1f, 0xfc, - 0x7f, 0xe0, 0x7, 0xfc, 0x7f, 0xc0, 0x1, 0xfe, - 0x7f, 0x80, 0x1, 0xfe, 0x7f, 0x80, 0x0, 0xfe, - 0x7f, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7f, - 0xfe, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0xfe, - 0xff, 0x0, 0x0, 0xfe, 0x7f, 0x0, 0x1, 0xfe, - 0x7f, 0x80, 0x3, 0xfc, 0x3f, 0xe0, 0x7, 0xfc, - 0x3f, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xf0, - 0xf, 0xff, 0xff, 0xe0, 0x7, 0xff, 0xff, 0xc0, - 0x1, 0xff, 0xff, 0x80, 0x0, 0x7f, 0xfc, 0x0, - 0x0, 0x1, 0x0, 0x0, - - /* U+0036 "6" */ - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x3, 0xf8, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7, 0xf0, - 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, - 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0x3f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, - 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x7f, 0x80, 0x0, - 0x7f, 0x9f, 0xff, 0x0, 0x7, 0xf7, 0xff, 0xf8, - 0x0, 0xfe, 0xff, 0xff, 0xe0, 0xf, 0xff, 0xff, - 0xff, 0x1, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xfe, - 0x7, 0xff, 0x83, 0xff, 0x0, 0xf, 0xfc, 0x3f, - 0xe0, 0x0, 0x7f, 0xc7, 0xfc, 0x0, 0x3, 0xfe, - 0x7f, 0x80, 0x0, 0x1f, 0xe7, 0xf0, 0x0, 0x0, - 0xfe, 0x7f, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, - 0x0, 0xff, 0xfe, 0x0, 0x0, 0x7, 0xff, 0xe0, - 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x7, 0xff, - 0xe0, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x7, - 0xff, 0xe0, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, - 0x7, 0xff, 0xe0, 0x0, 0x0, 0x7f, 0x7f, 0x0, - 0x0, 0xf, 0xe7, 0xf0, 0x0, 0x0, 0xfe, 0x7f, - 0x80, 0x0, 0x1f, 0xe3, 0xf8, 0x0, 0x1, 0xfc, - 0x3f, 0xc0, 0x0, 0x3f, 0xc1, 0xfe, 0x0, 0x7, - 0xf8, 0x1f, 0xf8, 0x1, 0xff, 0x80, 0xff, 0xff, - 0xff, 0xf0, 0x7, 0xff, 0xff, 0xfe, 0x0, 0x3f, - 0xff, 0xff, 0xc0, 0x1, 0xff, 0xff, 0xf8, 0x0, - 0x7, 0xff, 0xfe, 0x0, 0x0, 0x1f, 0xff, 0x80, - 0x0, 0x0, 0x6, 0x0, 0x0, - - /* U+0037 "7" */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfe, 0x0, 0x0, 0xf, 0xef, - 0xe0, 0x0, 0x0, 0xfe, 0xfe, 0x0, 0x0, 0x1f, - 0xef, 0xe0, 0x0, 0x1, 0xfc, 0xfe, 0x0, 0x0, - 0x1f, 0xcf, 0xe0, 0x0, 0x3, 0xf8, 0xfe, 0x0, - 0x0, 0x3f, 0x8f, 0xe0, 0x0, 0x7, 0xf8, 0xfe, - 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7, 0xf0, - 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0xf, - 0xe0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, - 0x1f, 0xc0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x7, 0xf0, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xfc, 0x0, - 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x3, 0xf8, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, - 0xf, 0xe0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x3, 0xf8, - 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7, - 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfe, 0x0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xfc, - 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x3, - 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, - 0x7, 0xf0, 0x0, 0x0, - - /* U+0038 "8" */ - 0x0, 0x7, 0xfe, 0x0, 0x0, 0x3, 0xff, 0xfc, - 0x0, 0x0, 0xff, 0xff, 0xf0, 0x0, 0x3f, 0xff, - 0xff, 0xc0, 0x7, 0xff, 0xff, 0xfe, 0x0, 0xff, - 0xff, 0xff, 0xf0, 0x1f, 0xfc, 0x3, 0xff, 0x81, - 0xff, 0x0, 0xf, 0xf8, 0x3f, 0xe0, 0x0, 0x7f, - 0xc3, 0xfc, 0x0, 0x3, 0xfc, 0x7f, 0x80, 0x0, - 0x1f, 0xc7, 0xf8, 0x0, 0x1, 0xfe, 0x7f, 0x0, - 0x0, 0xf, 0xe7, 0xf0, 0x0, 0x0, 0xfe, 0x7f, - 0x0, 0x0, 0xf, 0xe7, 0xf0, 0x0, 0x0, 0xfe, - 0x7f, 0x0, 0x0, 0xf, 0xe7, 0xf8, 0x0, 0x1, - 0xfe, 0x3f, 0x80, 0x0, 0x1f, 0xc3, 0xfc, 0x0, - 0x3, 0xfc, 0x1f, 0xc0, 0x0, 0x7f, 0x81, 0xff, - 0x0, 0xf, 0xf8, 0xf, 0xf8, 0x1, 0xff, 0x0, - 0x7f, 0xe0, 0x7f, 0xe0, 0x3, 0xff, 0x9f, 0xfc, - 0x0, 0xf, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, - 0xe0, 0x0, 0x1, 0xff, 0xf8, 0x0, 0x0, 0x7f, - 0xff, 0xe0, 0x0, 0xf, 0xff, 0xff, 0x0, 0x3, - 0xff, 0x9f, 0xfc, 0x0, 0x7f, 0xe0, 0x7f, 0xe0, - 0xf, 0xf8, 0x1, 0xff, 0x1, 0xfe, 0x0, 0x7, - 0xf8, 0x1f, 0xc0, 0x0, 0x3f, 0x83, 0xf8, 0x0, - 0x1, 0xfc, 0x7f, 0x80, 0x0, 0x1f, 0xe7, 0xf0, - 0x0, 0x0, 0xfe, 0x7f, 0x0, 0x0, 0xf, 0xef, - 0xe0, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x7, - 0xff, 0xe0, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, - 0x7, 0xff, 0xe0, 0x0, 0x0, 0x7f, 0xfe, 0x0, - 0x0, 0x7, 0xff, 0xf0, 0x0, 0x0, 0xff, 0xff, - 0x0, 0x0, 0xf, 0xf7, 0xf8, 0x0, 0x1, 0xfe, - 0x7f, 0xc0, 0x0, 0x3f, 0xe3, 0xfe, 0x0, 0x7, - 0xfc, 0x3f, 0xf8, 0x1, 0xff, 0xc1, 0xff, 0xff, - 0xff, 0xf8, 0xf, 0xff, 0xff, 0xff, 0x0, 0x7f, - 0xff, 0xff, 0xe0, 0x3, 0xff, 0xff, 0xfc, 0x0, - 0xf, 0xff, 0xff, 0x0, 0x0, 0x1f, 0xff, 0x80, - 0x0, 0x0, 0x6, 0x0, 0x0, - - /* U+0039 "9" */ - 0x0, 0x7, 0xfe, 0x0, 0x0, 0x3, 0xff, 0xfc, - 0x0, 0x0, 0xff, 0xff, 0xf0, 0x0, 0x1f, 0xff, - 0xff, 0x80, 0x3, 0xff, 0xff, 0xfe, 0x0, 0x7f, - 0xff, 0xff, 0xf0, 0xf, 0xfc, 0x7, 0xff, 0x1, - 0xff, 0x0, 0xf, 0xf8, 0x3f, 0xe0, 0x0, 0x7f, - 0xc3, 0xfc, 0x0, 0x3, 0xfc, 0x7f, 0x80, 0x0, - 0x1f, 0xe7, 0xf0, 0x0, 0x1, 0xfe, 0x7f, 0x0, - 0x0, 0xf, 0xe7, 0xf0, 0x0, 0x0, 0xff, 0xfe, - 0x0, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x0, 0x7f, - 0xfe, 0x0, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x0, - 0x7f, 0xfe, 0x0, 0x0, 0x7, 0xff, 0xe0, 0x0, - 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x7, 0xff, 0xe0, - 0x0, 0x0, 0x7f, 0xff, 0x0, 0x0, 0xf, 0xef, - 0xf0, 0x0, 0x0, 0xfe, 0x7f, 0x0, 0x0, 0x1f, - 0xe7, 0xf8, 0x0, 0x1, 0xfe, 0x7f, 0xc0, 0x0, - 0x3f, 0xc3, 0xfe, 0x0, 0x7, 0xfc, 0x3f, 0xf0, - 0x0, 0xff, 0x81, 0xff, 0xe0, 0x3f, 0xf8, 0xf, - 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xf0, - 0x3, 0xff, 0xff, 0xff, 0x0, 0x1f, 0xff, 0xef, - 0xe0, 0x0, 0xff, 0xf9, 0xfc, 0x0, 0x1, 0xfe, - 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, - 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, 0xe0, - 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x1f, - 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, - 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, - 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, - 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x3f, - 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x1, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, - 0x0, - - /* U+003A ":" */ - 0xf, 0x81, 0xff, 0x1f, 0xfd, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf1, 0xff, - 0x7, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0xff, 0x1f, - 0xfc, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x7f, 0xf3, 0xff, 0x8f, 0xf8, 0x4, 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 = 730, .box_w = 43, .box_h = 57, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 307, .adv_w = 730, .box_w = 24, .box_h = 6, .ofs_x = 11, .ofs_y = 22}, - {.bitmap_index = 325, .adv_w = 730, .box_w = 34, .box_h = 72, .ofs_x = 6, .ofs_y = -8}, - {.bitmap_index = 631, .adv_w = 730, .box_w = 34, .box_h = 58, .ofs_x = 6, .ofs_y = -1}, - {.bitmap_index = 878, .adv_w = 730, .box_w = 34, .box_h = 56, .ofs_x = 7, .ofs_y = 0}, - {.bitmap_index = 1116, .adv_w = 730, .box_w = 34, .box_h = 57, .ofs_x = 6, .ofs_y = 0}, - {.bitmap_index = 1359, .adv_w = 730, .box_w = 34, .box_h = 57, .ofs_x = 5, .ofs_y = -1}, - {.bitmap_index = 1602, .adv_w = 730, .box_w = 32, .box_h = 56, .ofs_x = 5, .ofs_y = 0}, - {.bitmap_index = 1826, .adv_w = 730, .box_w = 32, .box_h = 57, .ofs_x = 7, .ofs_y = -1}, - {.bitmap_index = 2054, .adv_w = 730, .box_w = 36, .box_h = 58, .ofs_x = 5, .ofs_y = -1}, - {.bitmap_index = 2315, .adv_w = 730, .box_w = 36, .box_h = 56, .ofs_x = 6, .ofs_y = 0}, - {.bitmap_index = 2567, .adv_w = 730, .box_w = 36, .box_h = 58, .ofs_x = 5, .ofs_y = -1}, - {.bitmap_index = 2828, .adv_w = 730, .box_w = 36, .box_h = 57, .ofs_x = 5, .ofs_y = 0}, - {.bitmap_index = 3085, .adv_w = 730, .box_w = 13, .box_h = 44, .ofs_x = 16, .ofs_y = -1} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - -static const uint16_t unicode_list_0[] = { - 0x0, 0x8 -}; - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 37, .range_length = 9, .glyph_id_start = 1, - .unicode_list = unicode_list_0, .glyph_id_ofs_list = NULL, .list_length = 2, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY - }, - { - .range_start = 47, .range_length = 12, .glyph_id_start = 3, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_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 = 2, - .bpp = 1, - .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 jetbrains_mono_76 = { -#else -lv_font_t jetbrains_mono_76 = { -#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 = 72, /*The maximum line height required by the font*/ - .base_line = 8, /*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 = -12, - .underline_thickness = 4, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if JETBRAINS_MONO_76*/ - diff --git a/src/displayapp/fonts/jetbrains_mono_bold_20.c b/src/displayapp/fonts/jetbrains_mono_bold_20.c deleted file mode 100644 index 5c40d49..0000000 --- a/src/displayapp/fonts/jetbrains_mono_bold_20.c +++ /dev/null @@ -1,1334 +0,0 @@ -/******************************************************************************* - * Size: 20 px - * Bpp: 1 - * Opts: - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef JETBRAINS_MONO_BOLD_20 -#define JETBRAINS_MONO_BOLD_20 1 -#endif - -#if JETBRAINS_MONO_BOLD_20 - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+0020 " " */ - 0x0, - - /* U+0021 "!" */ - 0xff, 0xff, 0xff, 0xfc, 0xf, 0xc0, - - /* U+0022 "\"" */ - 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xc0, - - /* U+0023 "#" */ - 0x8, 0xc3, 0x18, 0x62, 0x3f, 0xf7, 0xfe, 0x23, - 0xc, 0x61, 0x88, 0xff, 0xdf, 0xf8, 0x8c, 0x11, - 0x86, 0x30, 0xc4, 0x0, - - /* U+0024 "$" */ - 0x8, 0x2, 0x0, 0x81, 0xfc, 0x7f, 0xba, 0x7e, - 0x9f, 0xa0, 0xf8, 0x1f, 0x83, 0xf8, 0x3f, 0x9, - 0xfa, 0x7e, 0x9d, 0xfe, 0x7f, 0x2, 0x0, 0x80, - 0x20, - - /* U+0025 "%" */ - 0x78, 0x3f, 0xc6, 0xcc, 0xcc, 0xcc, 0xfd, 0x87, - 0xb0, 0x6, 0x0, 0x7e, 0xf, 0xf1, 0xb3, 0x33, - 0x33, 0x33, 0x63, 0xfc, 0x1e, - - /* U+0026 "&" */ - 0x1e, 0xf, 0xe1, 0x8e, 0x30, 0x6, 0x0, 0x60, - 0x1e, 0x7, 0xe6, 0xed, 0xdc, 0xf3, 0x9e, 0x73, - 0xcf, 0xfc, 0xf9, 0x80, - - /* U+0027 "'" */ - 0xff, 0xff, 0xc0, - - /* U+0028 "(" */ - 0x2, 0x1c, 0x79, 0xc7, 0x1e, 0x38, 0x70, 0xe1, - 0xc3, 0x87, 0xe, 0x1c, 0x3c, 0x38, 0x3c, 0x3c, - 0x38, - - /* U+0029 ")" */ - 0x1, 0xc3, 0xc3, 0xc1, 0xc3, 0xc3, 0x87, 0xe, - 0x1c, 0x38, 0x70, 0xe1, 0xc7, 0xe, 0x79, 0xe3, - 0x0, - - /* U+002A "*" */ - 0xc, 0x3, 0x8, 0xc7, 0xb7, 0x7f, 0x83, 0x1, - 0xe0, 0xcc, 0x73, 0x80, 0x0, - - /* U+002B "+" */ - 0x1c, 0x7, 0x1, 0xc3, 0xff, 0xff, 0xc7, 0x1, - 0xc0, 0x70, 0x1c, 0x0, - - /* U+002C "," */ - 0x7b, 0x9c, 0xce, 0x60, - - /* U+002D "-" */ - 0xff, 0xf0, - - /* U+002E "." */ - 0xff, 0xf0, - - /* U+002F "/" */ - 0x1, 0xc0, 0x60, 0x38, 0xe, 0x3, 0x1, 0xc0, - 0x70, 0x18, 0xe, 0x3, 0x1, 0xc0, 0x70, 0x18, - 0xe, 0x3, 0x80, 0xc0, 0x70, 0x18, 0xe, 0x0, - - /* U+0030 "0" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7e, - 0xdf, 0xb7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0031 "1" */ - 0x1e, 0x3f, 0x3f, 0x99, 0xc8, 0xe0, 0x70, 0x38, - 0x1c, 0xe, 0x7, 0x3, 0x81, 0xcf, 0xff, 0xfc, - - /* U+0032 "2" */ - 0x3e, 0x3f, 0xbd, 0xfc, 0x70, 0x38, 0x1c, 0x1c, - 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0xf, 0xff, 0xfc, - - /* U+0033 "3" */ - 0x7f, 0x9f, 0xe0, 0x30, 0x18, 0xc, 0x7, 0xc1, - 0xf8, 0xf, 0x1, 0xc0, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0034 "4" */ - 0x7, 0x7, 0x3, 0x83, 0x83, 0x83, 0xc1, 0xcf, - 0xe7, 0xe3, 0xff, 0xff, 0xe0, 0x70, 0x38, 0x1c, - - /* U+0035 "5" */ - 0x7f, 0x9f, 0xe7, 0x1, 0xc0, 0x77, 0x1f, 0xe7, - 0x3c, 0x7, 0x1, 0xc0, 0x77, 0x1d, 0xcf, 0x7f, - 0x87, 0xc0, - - /* U+0036 "6" */ - 0xe, 0x3, 0x1, 0xc0, 0x60, 0x38, 0x1d, 0xc7, - 0xfb, 0xcf, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0x80, - - /* U+0037 "7" */ - 0xff, 0xff, 0xfe, 0x1f, 0x86, 0x3, 0x80, 0xe0, - 0x30, 0x1c, 0x6, 0x3, 0x80, 0xc0, 0x70, 0x1c, - 0xe, 0x0, - - /* U+0038 "8" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xdc, 0xe3, - 0xf0, 0xfc, 0x73, 0xb8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0039 "9" */ - 0x1e, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7f, - 0x3d, 0xfe, 0x3b, 0x81, 0xc0, 0x60, 0x38, 0xc, - 0x7, 0x0, - - /* U+003A ":" */ - 0xff, 0x80, 0x0, 0xff, 0x80, - - /* U+003B ";" */ - 0x7b, 0xde, 0x0, 0x0, 0x0, 0x3, 0xdc, 0xe6, - 0x73, 0x0, - - /* U+003C "<" */ - 0x0, 0x81, 0xc3, 0xe7, 0xcf, 0x6, 0x3, 0xc0, - 0x7c, 0xf, 0x81, 0xc0, 0x20, - - /* U+003D "=" */ - 0xff, 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, 0xfe, - - /* U+003E ">" */ - 0x80, 0x70, 0x3e, 0x7, 0xc0, 0xf8, 0xc, 0x1e, - 0x3c, 0xf8, 0x70, 0x20, 0x0, - - /* U+003F "?" */ - 0xfc, 0xfe, 0xf, 0x7, 0x7, 0xf, 0x3e, 0x3c, - 0x30, 0x30, 0x0, 0x0, 0x70, 0x70, - - /* U+0040 "@" */ - 0x1f, 0x7, 0xf9, 0xc3, 0x70, 0x3c, 0x7, 0x8e, - 0xf3, 0xfe, 0x63, 0xcc, 0x79, 0x8f, 0x31, 0xe6, - 0x3c, 0xff, 0x8e, 0xf8, 0x3, 0x80, 0x3e, 0x3, - 0xc0, - - /* U+0041 "A" */ - 0x1e, 0x7, 0x81, 0xe0, 0xfc, 0x3f, 0xc, 0xc3, - 0x31, 0xce, 0x73, 0x9f, 0xe7, 0xfb, 0x87, 0xe1, - 0xf0, 0x30, - - /* U+0042 "B" */ - 0xfe, 0x3f, 0xce, 0x3b, 0x8e, 0xe3, 0xb8, 0xef, - 0xe3, 0xfc, 0xe3, 0xf8, 0x7e, 0x1f, 0x8f, 0xff, - 0xbf, 0xc0, - - /* U+0043 "C" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe0, 0x38, 0xe, - 0x3, 0x80, 0xe0, 0x38, 0xe, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0044 "D" */ - 0xfe, 0x7f, 0xb9, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0xff, 0xf7, 0xf0, - - /* U+0045 "E" */ - 0xff, 0xff, 0xf8, 0x1c, 0xe, 0x7, 0x3, 0xfd, - 0xfe, 0xe0, 0x70, 0x38, 0x1c, 0xf, 0xff, 0xfc, - - /* U+0046 "F" */ - 0xff, 0xff, 0xf8, 0x1c, 0xe, 0x7, 0x3, 0xff, - 0xff, 0xe0, 0x70, 0x38, 0x1c, 0xe, 0x7, 0x0, - - /* U+0047 "G" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe0, 0x38, 0xe, - 0x7f, 0x9f, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0048 "H" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0xff, - 0xff, 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1c, - - /* U+0049 "I" */ - 0xff, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, - 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xff, - - /* U+004A "J" */ - 0x1f, 0xc7, 0xf0, 0x1c, 0x7, 0x1, 0xc0, 0x70, - 0x1c, 0x7, 0x1, 0xc0, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+004B "K" */ - 0xe1, 0xf8, 0x7e, 0x3b, 0x8e, 0xe7, 0x39, 0xcf, - 0xe3, 0xf8, 0xe7, 0x39, 0xce, 0x3b, 0x8e, 0xe1, - 0xf8, 0x70, - - /* U+004C "L" */ - 0xe0, 0x70, 0x38, 0x1c, 0xe, 0x7, 0x3, 0x81, - 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0xf, 0xff, 0xfc, - - /* U+004D "M" */ - 0xf3, 0xfc, 0xfd, 0x3f, 0xcf, 0xff, 0xff, 0xfe, - 0xdf, 0xb7, 0xe1, 0xf8, 0x7e, 0x1f, 0x87, 0xe1, - 0xf8, 0x70, - - /* U+004E "N" */ - 0xe1, 0xf0, 0xfc, 0x7e, 0x3f, 0x9e, 0xcf, 0x67, - 0x9b, 0xcd, 0xe6, 0xf1, 0xf8, 0xfc, 0x7e, 0x1c, - - /* U+004F "O" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x77, 0xf1, 0xf0, - - /* U+0050 "P" */ - 0xff, 0x3f, 0xee, 0x3f, 0x87, 0xe1, 0xf8, 0xff, - 0xfb, 0xfc, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, - 0x38, 0x0, - - /* U+0051 "Q" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7e, - 0x1f, 0x87, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0x80, 0x70, 0xe, 0x3, 0x80, 0x70, - - /* U+0052 "R" */ - 0xff, 0x3f, 0xee, 0x3f, 0x87, 0xe1, 0xf8, 0xff, - 0xfb, 0xf8, 0xe6, 0x39, 0xce, 0x33, 0x8e, 0xe3, - 0xb8, 0x70, - - /* U+0053 "S" */ - 0x3f, 0x1f, 0xee, 0x3f, 0x87, 0xe0, 0x3e, 0x7, - 0xf0, 0xfe, 0x3, 0xc0, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0054 "T" */ - 0xff, 0xff, 0xf0, 0xe0, 0x38, 0xe, 0x3, 0x80, - 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x38, 0xe, - 0x3, 0x80, - - /* U+0055 "U" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x77, 0xf1, 0xf0, - - /* U+0056 "V" */ - 0xc0, 0xf8, 0x7e, 0x1d, 0x86, 0x61, 0x9c, 0xe7, - 0x38, 0xcc, 0x33, 0xe, 0xc3, 0xf0, 0x78, 0x1e, - 0x7, 0x80, - - /* U+0057 "W" */ - 0xce, 0x79, 0xcf, 0x29, 0xe5, 0x3c, 0xa7, 0xd5, - 0xda, 0xb3, 0x56, 0x7b, 0xcf, 0x79, 0xef, 0x38, - 0xe7, 0x1c, 0xe3, 0x80, - - /* U+0058 "X" */ - 0xe1, 0xd8, 0x67, 0x38, 0xcc, 0x3f, 0x7, 0x81, - 0xe0, 0x78, 0x1e, 0xf, 0xc3, 0x31, 0xce, 0xe1, - 0xf8, 0x70, - - /* U+0059 "Y" */ - 0xe0, 0xfc, 0x1d, 0xc7, 0x38, 0xe3, 0xb8, 0x77, - 0x6, 0xc0, 0xf8, 0xe, 0x1, 0xc0, 0x38, 0x7, - 0x0, 0xe0, 0x1c, 0x0, - - /* U+005A "Z" */ - 0xff, 0xff, 0xc0, 0xe0, 0xe0, 0x70, 0x70, 0x70, - 0x38, 0x38, 0x38, 0x1c, 0x1c, 0xf, 0xff, 0xfc, - - /* U+005B "[" */ - 0xff, 0xfe, 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, - 0x38, 0xe3, 0x8e, 0x38, 0xff, 0xf0, - - /* U+005C "\\" */ - 0xe0, 0x18, 0x7, 0x1, 0xc0, 0x30, 0xe, 0x3, - 0x80, 0x60, 0x1c, 0x3, 0x0, 0xe0, 0x38, 0x6, - 0x1, 0xc0, 0x70, 0xc, 0x3, 0x80, 0x60, 0x1c, - - /* U+005D "]" */ - 0xff, 0xf1, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, - 0xc7, 0x1c, 0x71, 0xc7, 0xff, 0xf0, - - /* U+005E "^" */ - 0xc, 0x7, 0x81, 0xe0, 0xfc, 0x33, 0x1c, 0xe6, - 0x19, 0x86, - - /* U+005F "_" */ - 0xff, 0xff, 0xf0, - - /* U+0060 "`" */ - 0xe3, 0x8c, - - /* U+0061 "a" */ - 0x1f, 0x1f, 0xe7, 0x1c, 0x7, 0x3f, 0xdf, 0xfe, - 0x1f, 0x87, 0xe3, 0xff, 0xf3, 0xdc, - - /* U+0062 "b" */ - 0xe0, 0x70, 0x38, 0x1d, 0xcf, 0xf7, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x7f, 0xf7, 0x70, - - /* U+0063 "c" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe0, 0x38, 0xe, - 0x3, 0x87, 0xf3, 0xdf, 0xe3, 0xf0, - - /* U+0064 "d" */ - 0x3, 0x81, 0xc0, 0xe7, 0x77, 0xff, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x77, 0xf9, 0xdc, - - /* U+0065 "e" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x7f, 0xff, 0xff, 0x81, - 0xc0, 0xe3, 0xbf, 0x8f, 0x80, - - /* U+0066 "f" */ - 0xf, 0xc7, 0xf1, 0xc0, 0x70, 0xff, 0xff, 0xf1, - 0xc0, 0x70, 0x1c, 0x7, 0x1, 0xc0, 0x70, 0x1c, - 0x7, 0x0, - - /* U+0067 "g" */ - 0x3b, 0xbf, 0xfd, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xf7, 0xbf, 0xce, 0xe0, 0x70, 0x39, 0xf8, - 0xf8, - - /* U+0068 "h" */ - 0xe0, 0x70, 0x38, 0x1d, 0xcf, 0xf7, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1c, - - /* U+0069 "i" */ - 0x1c, 0x7, 0x1, 0xc0, 0x0, 0x0, 0x3f, 0xf, - 0xc0, 0x70, 0x1c, 0x7, 0x1, 0xc0, 0x70, 0x1c, - 0x7, 0xf, 0xff, 0xff, - - /* U+006A "j" */ - 0x7, 0x7, 0x7, 0x0, 0xff, 0xff, 0x7, 0x7, - 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, - 0xf, 0xfe, 0xfc, - - /* U+006B "k" */ - 0xe0, 0x38, 0xe, 0x3, 0x87, 0xe3, 0xb8, 0xee, - 0x73, 0xf8, 0xfe, 0x39, 0xce, 0x33, 0x8e, 0xe1, - 0xb8, 0x70, - - /* U+006C "l" */ - 0xfe, 0x1f, 0xc0, 0x38, 0x7, 0x0, 0xe0, 0x1c, - 0x3, 0x80, 0x70, 0xe, 0x1, 0xc0, 0x38, 0x7, - 0x0, 0x7e, 0x7, 0xc0, - - /* U+006D "m" */ - 0xd9, 0xbf, 0xfc, 0xcf, 0x33, 0xcc, 0xf3, 0x3c, - 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcc, - - /* U+006E "n" */ - 0xee, 0x7f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xe0, - - /* U+006F "o" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xbf, 0x8f, 0x80, - - /* U+0070 "p" */ - 0xee, 0x7f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xff, 0xbb, 0x9c, 0xe, 0x7, 0x3, - 0x80, - - /* U+0071 "q" */ - 0x3b, 0xbf, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xbf, 0xce, 0xe0, 0x70, 0x38, 0x1c, - 0xe, - - /* U+0072 "r" */ - 0xee, 0x7f, 0xb8, 0xfc, 0x7e, 0x3f, 0x3, 0x81, - 0xc0, 0xe0, 0x70, 0x38, 0x0, - - /* U+0073 "s" */ - 0x1f, 0x1f, 0xf7, 0x1d, 0xc0, 0x7c, 0xf, 0xe0, - 0x3c, 0x7, 0x71, 0xdf, 0xf3, 0xf0, - - /* U+0074 "t" */ - 0x1c, 0x7, 0x1, 0xc3, 0xff, 0xff, 0xc7, 0x1, - 0xc0, 0x70, 0x1c, 0x7, 0x1, 0xc0, 0x70, 0x1f, - 0xc3, 0xf0, - - /* U+0075 "u" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xbf, 0x8f, 0x80, - - /* U+0076 "v" */ - 0xc0, 0xf8, 0x7e, 0x1d, 0x86, 0x73, 0x8c, 0xc3, - 0x30, 0xfc, 0x1e, 0x7, 0x81, 0xe0, - - /* U+0077 "w" */ - 0xc6, 0x36, 0x66, 0x66, 0x66, 0xf6, 0x6f, 0x66, - 0x96, 0x69, 0x62, 0x94, 0x29, 0x43, 0x9c, 0x39, - 0xc0, - - /* U+0078 "x" */ - 0xe1, 0xdc, 0xe3, 0x30, 0xfc, 0x1e, 0x7, 0x81, - 0xe0, 0xfc, 0x73, 0x9c, 0xee, 0x1c, - - /* U+0079 "y" */ - 0xe0, 0xf8, 0x76, 0x19, 0xce, 0x73, 0x8c, 0xc3, - 0xf0, 0x7c, 0x1e, 0x7, 0x80, 0xe0, 0x30, 0x1c, - 0x6, 0x3, 0x80, - - /* U+007A "z" */ - 0xff, 0xff, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0xe0, 0xe0, 0x7f, 0xff, 0xe0, - - /* U+007B "{" */ - 0x7, 0x87, 0xc3, 0x81, 0xc0, 0xe0, 0x70, 0x38, - 0x1c, 0xfc, 0x7e, 0x3, 0x81, 0xc0, 0xe0, 0x70, - 0x30, 0x1c, 0xf, 0x83, 0xc0, - - /* U+007C "|" */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, - - /* U+007D "}" */ - 0xf0, 0x7c, 0xe, 0x7, 0x3, 0x81, 0xc0, 0xe0, - 0x70, 0x1f, 0x8f, 0xce, 0x7, 0x3, 0x81, 0xc0, - 0x60, 0x70, 0xf8, 0x78, 0x0, - - /* U+007E "~" */ - 0x78, 0xff, 0x3c, 0xcf, 0x3f, 0xc7, 0x80, - - /* U+0410 "А" */ - 0x1e, 0x7, 0x81, 0xe0, 0xfc, 0x3f, 0xc, 0xc3, - 0x31, 0xce, 0x73, 0x9f, 0xe7, 0xfb, 0x87, 0xe1, - 0xf0, 0x30, - - /* U+0411 "Б" */ - 0xff, 0xbf, 0xee, 0x3, 0x80, 0xe0, 0x3f, 0xcf, - 0xfb, 0x8f, 0xe1, 0xf8, 0x7e, 0x1f, 0x8f, 0xff, - 0xbf, 0xc0, - - /* U+0412 "В" */ - 0xfe, 0x3f, 0xce, 0x3b, 0x8e, 0xe3, 0xb8, 0xef, - 0xe3, 0xfc, 0xe3, 0xf8, 0x7e, 0x1f, 0x8f, 0xff, - 0xbf, 0xc0, - - /* U+0413 "Г" */ - 0xff, 0xff, 0xf8, 0x1c, 0xe, 0x7, 0x3, 0x81, - 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0xe, 0x7, 0x0, - - /* U+0414 "Д" */ - 0x3f, 0xc7, 0xf8, 0xe7, 0x1c, 0xe3, 0x9c, 0x73, - 0x8e, 0x71, 0xce, 0x39, 0xc7, 0x38, 0xe7, 0x38, - 0xef, 0xff, 0xff, 0xf8, 0x3f, 0x7, 0xe0, 0xe0, - - /* U+0415 "Е" */ - 0xff, 0xff, 0xf8, 0x1c, 0xe, 0x7, 0x3, 0xfd, - 0xfe, 0xe0, 0x70, 0x38, 0x1c, 0xf, 0xff, 0xfc, - - /* U+0416 "Ж" */ - 0xe6, 0x76, 0x66, 0x66, 0x67, 0x66, 0x36, 0xc3, - 0x6c, 0x3f, 0xc3, 0x6c, 0x36, 0xc7, 0x6e, 0x66, - 0x66, 0x66, 0x66, 0x6c, 0x63, - - /* U+0417 "З" */ - 0x3f, 0x1f, 0xef, 0x1f, 0x87, 0x1, 0xc7, 0xc1, - 0xf8, 0xf, 0x1, 0xc0, 0x7e, 0x1f, 0xcf, 0x7f, - 0x8f, 0x80, - - /* U+0418 "И" */ - 0xc3, 0xe3, 0xf1, 0xf8, 0xfc, 0xde, 0x6f, 0x37, - 0xb3, 0xd9, 0xfc, 0xfc, 0x7e, 0x3e, 0x1f, 0xc, - - /* U+0419 "Й" */ - 0x63, 0x31, 0x8f, 0x83, 0x80, 0x6, 0x1f, 0x1f, - 0x8f, 0xc7, 0xe7, 0xf3, 0x79, 0xbd, 0x9e, 0xcf, - 0xe7, 0xe3, 0xf1, 0xf8, 0xf8, 0x60, - - /* U+041A "К" */ - 0xe1, 0xf8, 0x7e, 0x3b, 0x8e, 0xe7, 0x39, 0xcf, - 0xe3, 0xf8, 0xe7, 0x39, 0xce, 0x3b, 0x8e, 0xe1, - 0xf8, 0x70, - - /* U+041B "Л" */ - 0x3f, 0xcf, 0xf3, 0x9c, 0xe7, 0x39, 0xce, 0x73, - 0x9c, 0xe7, 0x39, 0xce, 0x73, 0x9d, 0xe7, 0xf1, - 0xf8, 0x70, - - /* U+041C "М" */ - 0xf3, 0xfc, 0xfd, 0x3f, 0xcf, 0xff, 0xff, 0xfe, - 0xdf, 0xb7, 0xe1, 0xf8, 0x7e, 0x1f, 0x87, 0xe1, - 0xf8, 0x70, - - /* U+041D "Н" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0xff, - 0xff, 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1c, - - /* U+041E "О" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x77, 0xf1, 0xf0, - - /* U+041F "П" */ - 0xff, 0xff, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1c, - - /* U+0420 "Р" */ - 0xff, 0x3f, 0xee, 0x3f, 0x87, 0xe1, 0xf8, 0xff, - 0xfb, 0xfc, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, - 0x38, 0x0, - - /* U+0421 "С" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe0, 0x38, 0xe, - 0x3, 0x80, 0xe0, 0x38, 0xe, 0x1f, 0xcf, 0x7f, - 0x8f, 0xc0, - - /* U+0422 "Т" */ - 0xff, 0xff, 0xf0, 0xe0, 0x38, 0xe, 0x3, 0x80, - 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x38, 0xe, - 0x3, 0x80, - - /* U+0423 "У" */ - 0xe1, 0xf8, 0x76, 0x19, 0xce, 0x33, 0x8c, 0xc3, - 0xb0, 0x7c, 0x1e, 0x3, 0x80, 0xc0, 0x70, 0x1c, - 0x6, 0x0, - - /* U+0424 "Ф" */ - 0xc, 0xf, 0xc7, 0xfb, 0xb7, 0xcc, 0xf3, 0x3c, - 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0xb7, 0x7f, - 0x8f, 0xc0, 0xc0, 0x30, - - /* U+0425 "Х" */ - 0xe1, 0xd8, 0x67, 0x38, 0xcc, 0x3f, 0x7, 0x81, - 0xe0, 0x78, 0x1e, 0xf, 0xc3, 0x31, 0xce, 0xe1, - 0xf8, 0x70, - - /* U+0426 "Ц" */ - 0xe3, 0xb8, 0xee, 0x3b, 0x8e, 0xe3, 0xb8, 0xee, - 0x3b, 0x8e, 0xe3, 0xb8, 0xee, 0x3b, 0x8e, 0xff, - 0xff, 0xf0, 0x1c, 0x7, 0x1, 0xc0, - - /* U+0427 "Ч" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xff, 0x3f, 0x81, 0xc0, 0xe0, 0x70, 0x38, 0x1c, - - /* U+0428 "Ш" */ - 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xcc, 0xf3, 0x3c, - 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xff, - 0xff, 0xf0, - - /* U+0429 "Щ" */ - 0xcc, 0xd9, 0x9b, 0x33, 0x66, 0x6c, 0xcd, 0x99, - 0xb3, 0x36, 0x66, 0xcc, 0xd9, 0x9b, 0x33, 0x66, - 0x6f, 0xff, 0xff, 0xc0, 0x18, 0x3, - - /* U+042A "Ъ" */ - 0xfc, 0xf, 0xc0, 0x1c, 0x1, 0xc0, 0x1c, 0x1, - 0xfc, 0x1f, 0xe1, 0xcf, 0x1c, 0x71, 0xc7, 0x1c, - 0x71, 0xcf, 0x1f, 0xe1, 0xfc, - - /* U+042B "Ы" */ - 0xc0, 0xf0, 0x3c, 0xf, 0x3, 0xc0, 0xfe, 0x3f, - 0xcf, 0x3b, 0xc6, 0xf1, 0xbc, 0x6f, 0x3b, 0xfc, - 0xfe, 0x30, - - /* U+042C "Ь" */ - 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x3f, 0xcf, - 0xfb, 0x8f, 0xe1, 0xf8, 0x7e, 0x1f, 0x8f, 0xff, - 0xbf, 0x80, - - /* U+042D "Э" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x70, 0x38, 0x1c, 0x7e, - 0x3f, 0x3, 0x81, 0xf8, 0xfc, 0x77, 0xf1, 0xf0, - - /* U+042E "Ю" */ - 0xc7, 0xb3, 0xfc, 0xcf, 0x33, 0xcc, 0xff, 0x3f, - 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xcf, - 0xf1, 0xe0, - - /* U+042F "Я" */ - 0x3f, 0xdf, 0xff, 0x1f, 0x87, 0xe1, 0xfc, 0x77, - 0xfc, 0x7f, 0x19, 0xce, 0x73, 0x1d, 0xc7, 0x71, - 0xf8, 0x70, - - /* U+0430 "а" */ - 0x1f, 0x1f, 0xe7, 0x1c, 0x7, 0x3f, 0xdf, 0xfe, - 0x1f, 0x87, 0xe3, 0xff, 0xf3, 0xdc, - - /* U+0431 "б" */ - 0x1f, 0x3f, 0x9c, 0x1c, 0xe, 0xe7, 0xfb, 0x9f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xfe, 0xf7, 0xf1, 0xf0, - - /* U+0432 "в" */ - 0xff, 0x3f, 0xee, 0x3b, 0x8e, 0xfe, 0x3f, 0xee, - 0x1f, 0x87, 0xe1, 0xff, 0xef, 0xf0, - - /* U+0433 "г" */ - 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - 0xe0, 0xe0, 0xe0, - - /* U+0434 "д" */ - 0x3f, 0xc7, 0xf8, 0xe7, 0x1c, 0xe3, 0x9c, 0x73, - 0x8e, 0x71, 0xce, 0x71, 0xdf, 0xff, 0xff, 0xf0, - 0x7e, 0xf, 0xc1, 0xc0, - - /* U+0435 "е" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x7f, 0xff, 0xff, 0x81, - 0xc0, 0xe3, 0xbf, 0x8f, 0x80, - - /* U+0436 "ж" */ - 0xe6, 0x76, 0x66, 0x66, 0x63, 0x6c, 0x36, 0xc3, - 0xfc, 0x36, 0xc3, 0x6e, 0x66, 0x66, 0x66, 0xe6, - 0x70, - - /* U+0437 "з" */ - 0x3f, 0x1f, 0xfe, 0x1c, 0x7, 0x1f, 0x7, 0xe0, - 0x1c, 0x7, 0xe1, 0xdf, 0xe3, 0xf0, - - /* U+0438 "и" */ - 0xc3, 0xe3, 0xf1, 0xf9, 0xfc, 0xde, 0xef, 0x67, - 0xb3, 0xf1, 0xf8, 0xf8, 0x60, - - /* U+0439 "й" */ - 0x63, 0x31, 0x8f, 0x83, 0x80, 0x6, 0x1f, 0x1f, - 0x8f, 0xcf, 0xe6, 0xf7, 0x7b, 0x3f, 0x9f, 0x8f, - 0xc7, 0xc3, - - /* U+043A "к" */ - 0xe1, 0xf8, 0xee, 0x3b, 0x9c, 0xfe, 0x3f, 0x8e, - 0x73, 0x8c, 0xe3, 0xb8, 0x6e, 0x1c, - - /* U+043B "л" */ - 0x3f, 0xcf, 0xf3, 0x9c, 0xe7, 0x39, 0xce, 0x73, - 0x9c, 0xe7, 0x39, 0xfc, 0x7e, 0x1c, - - /* U+043C "м" */ - 0xe1, 0xf8, 0x7f, 0x3f, 0xcf, 0xda, 0xf7, 0xbd, - 0xef, 0x33, 0xc0, 0xf0, 0x3c, 0xc, - - /* U+043D "н" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7f, 0xff, 0xff, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xe0, - - /* U+043E "о" */ - 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xbf, 0x8f, 0x80, - - /* U+043F "п" */ - 0xff, 0xff, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xf1, 0xf8, 0xe0, - - /* U+0440 "р" */ - 0xee, 0x7f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, - 0xc7, 0xe3, 0xff, 0xbb, 0x9c, 0xe, 0x7, 0x3, - 0x80, - - /* U+0441 "с" */ - 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe0, 0x38, 0xe, - 0x3, 0x87, 0xf3, 0xdf, 0xe3, 0xf0, - - /* U+0442 "т" */ - 0xff, 0xff, 0xf0, 0xe0, 0x38, 0xe, 0x3, 0x80, - 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, - - /* U+0443 "у" */ - 0xe0, 0xf8, 0x76, 0x19, 0xce, 0x73, 0x8c, 0xc3, - 0xf0, 0x7c, 0x1e, 0x7, 0x80, 0xe0, 0x30, 0x1c, - 0x6, 0x3, 0x80, - - /* U+0444 "ф" */ - 0xc, 0x3, 0x0, 0xc0, 0xfc, 0x7f, 0xbb, 0x7c, - 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0xb7, 0x7f, - 0x8f, 0xc0, 0xc0, 0x30, 0xc, 0x3, 0x0, - - /* U+0445 "х" */ - 0xe1, 0xdc, 0xe3, 0x30, 0xfc, 0x1e, 0x7, 0x81, - 0xe0, 0xfc, 0x73, 0x9c, 0xee, 0x1c, - - /* U+0446 "ц" */ - 0xe3, 0xb8, 0xee, 0x3b, 0x8e, 0xe3, 0xb8, 0xee, - 0x3b, 0x8e, 0xe3, 0xbf, 0xff, 0xfc, 0x7, 0x1, - 0xc0, 0x70, - - /* U+0447 "ч" */ - 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0xfd, 0xfe, - 0x7, 0x3, 0x81, 0xc0, 0xe0, - - /* U+0448 "ш" */ - 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xcc, 0xf3, 0x3c, - 0xcf, 0x33, 0xcc, 0xff, 0xff, 0xfc, - - /* U+0449 "щ" */ - 0xcc, 0xd9, 0x9b, 0x33, 0x66, 0x6c, 0xcd, 0x99, - 0xb3, 0x36, 0x66, 0xcc, 0xdf, 0xff, 0xff, 0x80, - 0x30, 0x6, - - /* U+044A "ъ" */ - 0xfc, 0xf, 0xc0, 0x1c, 0x1, 0xc0, 0x1f, 0xc1, - 0xfe, 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xfe, 0x1f, - 0xc0, - - /* U+044B "ы" */ - 0xc0, 0xf0, 0x3c, 0xf, 0x3, 0xf8, 0xff, 0x3c, - 0xef, 0x1b, 0xc6, 0xff, 0x3f, 0x8c, - - /* U+044C "ь" */ - 0xe0, 0x38, 0xe, 0x3, 0x80, 0xff, 0x3f, 0xee, - 0x1f, 0x87, 0xe1, 0xff, 0xef, 0xf0, - - /* U+044D "э" */ - 0x1f, 0x1f, 0xe6, 0x3c, 0x7, 0xf, 0xc3, 0xf0, - 0x1d, 0x87, 0x73, 0xdf, 0xe1, 0xf0, - - /* U+044E "ю" */ - 0xc7, 0xb3, 0xfc, 0xcf, 0x33, 0xfc, 0xff, 0x3c, - 0xcf, 0x33, 0xcc, 0xf3, 0xfc, 0x78, - - /* U+044F "я" */ - 0x3f, 0xbf, 0xf8, 0xfc, 0x7e, 0x3b, 0xfc, 0xfe, - 0x77, 0x33, 0xb9, 0xf8, 0xe0, - - /* U+F001 "" */ - 0x0, 0x0, 0x70, 0x0, 0x7f, 0x0, 0x3f, 0xf0, - 0x1f, 0xff, 0x7, 0xff, 0xf0, 0x7f, 0xff, 0x7, - 0xfc, 0x70, 0x7e, 0x7, 0x7, 0x0, 0x70, 0x70, - 0x7, 0x7, 0x0, 0x70, 0x70, 0x7, 0x7, 0x0, - 0x70, 0x70, 0x7f, 0x7, 0xf, 0xf7, 0xf0, 0xff, - 0xff, 0x7, 0xef, 0xf0, 0x10, 0xff, 0x0, 0x3, - 0xc0, 0x0, - - /* U+F015 "" */ - 0x0, 0x38, 0xe0, 0x0, 0xf9, 0xc0, 0x3, 0xfb, - 0x80, 0x1e, 0x3f, 0x0, 0x79, 0x3e, 0x1, 0xe7, - 0x3c, 0xf, 0x9f, 0xbc, 0x3c, 0xff, 0x9e, 0xf3, - 0xff, 0x9e, 0xcf, 0xff, 0x98, 0x3f, 0xff, 0x80, - 0x7f, 0xff, 0x0, 0xfc, 0x7e, 0x1, 0xf8, 0xfc, - 0x3, 0xf1, 0xf8, 0x7, 0xe3, 0xf0, 0xf, 0xc7, - 0xe0, - - /* U+F017 "" */ - 0x3, 0xf8, 0x1, 0xff, 0xc0, 0x7f, 0xfc, 0x1f, - 0xff, 0xc7, 0xf1, 0xfc, 0xfe, 0x3f, 0x9f, 0xc7, - 0xf7, 0xf8, 0xff, 0xff, 0x1f, 0xff, 0xe3, 0xff, - 0xfc, 0x3f, 0xff, 0x83, 0xff, 0xfc, 0x7e, 0xff, - 0xcf, 0x9f, 0xff, 0xf1, 0xff, 0xfc, 0x1f, 0xff, - 0x1, 0xff, 0xc0, 0x1f, 0xf0, 0x0, 0x70, 0x0, - - /* U+F024 "" */ - 0x70, 0x0, 0xf, 0x80, 0x0, 0xf9, 0x0, 0xf, - 0xff, 0xf, 0x7f, 0xff, 0xf7, 0xff, 0xff, 0x7f, - 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xf7, 0xff, - 0xff, 0x7f, 0xff, 0xf7, 0xff, 0xff, 0x7f, 0xff, - 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xe7, 0x0, 0xf8, - 0x70, 0x0, 0x7, 0x0, 0x0, 0x70, 0x0, 0x7, - 0x0, 0x0, - - /* U+F027 "" */ - 0x0, 0xc0, 0x3, 0x80, 0xf, 0x0, 0x3e, 0xf, - 0xfc, 0x9f, 0xf9, 0xbf, 0xf1, 0xff, 0xe3, 0xff, - 0xc7, 0xff, 0x9b, 0xff, 0x20, 0x3e, 0x0, 0x3c, - 0x0, 0x38, 0x0, 0x30, 0x0, - - /* U+F028 "" */ - 0x0, 0x0, 0x40, 0x0, 0x0, 0xc0, 0x3, 0x0, - 0xc0, 0xe, 0x18, 0xc0, 0x3c, 0x39, 0xc0, 0xf8, - 0x39, 0xbf, 0xf2, 0x33, 0xff, 0xe6, 0x33, 0xff, - 0xc6, 0x67, 0xff, 0x8c, 0xcf, 0xff, 0x19, 0x9f, - 0xfe, 0x63, 0x3f, 0xfc, 0x8c, 0xe0, 0xf8, 0x39, - 0x80, 0xf0, 0xe7, 0x0, 0xe1, 0x8c, 0x0, 0xc0, - 0x30, 0x0, 0x0, 0xc0, 0x0, 0x1, 0x0, - - /* U+F029 "" */ - 0xff, 0x3f, 0xff, 0xcf, 0xfe, 0x73, 0x9f, 0x9c, - 0xe7, 0xe7, 0x39, 0xff, 0xcf, 0xff, 0xf3, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf3, - 0xcf, 0xfc, 0xff, 0xff, 0x3f, 0xf9, 0xcf, 0xfe, - 0x73, 0xbf, 0xfc, 0xe0, 0xff, 0x3a, 0xc0, - - /* U+F03A "" */ - 0xf0, 0x0, 0xf, 0x3f, 0xff, 0xf3, 0xff, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0x0, 0x0, 0xf3, 0xff, 0xff, 0x3f, - 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0x0, 0x0, 0xf3, 0xff, 0xff, 0x3f, 0xff, - 0xf0, 0x0, 0x0, - - /* U+F048 "" */ - 0xe0, 0x3f, 0x3, 0xf8, 0x3f, 0xc3, 0xfe, 0x3f, - 0xf3, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xfb, 0xff, 0xcf, 0xfe, 0x3f, 0xf0, 0xff, 0x83, - 0xfc, 0xf, 0xe0, 0x38, - - /* U+F04B "" */ - 0x0, 0x0, 0x3c, 0x0, 0xf, 0xc0, 0x3, 0xfc, - 0x0, 0xff, 0x80, 0x3f, 0xf8, 0xf, 0xff, 0x83, - 0xff, 0xf8, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0x8f, - 0xff, 0x83, 0xff, 0x80, 0xff, 0x80, 0x3f, 0xc0, - 0xf, 0xc0, 0x3, 0xc0, 0x0, 0x0, 0x0, 0x0, - - /* U+F04C "" */ - 0x7e, 0x1f, 0xbf, 0xcf, 0xff, 0xf3, 0xff, 0xfc, - 0xff, 0xff, 0x3f, 0xff, 0xcf, 0xff, 0xf3, 0xff, - 0xfc, 0xff, 0xff, 0x3f, 0xff, 0xcf, 0xff, 0xf3, - 0xff, 0xfc, 0xff, 0xff, 0x3f, 0xff, 0xcf, 0xff, - 0xf3, 0xff, 0xfc, 0xff, 0x7e, 0x1f, 0x80, - - /* U+F04D "" */ - 0x7f, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x80, - - /* U+F051 "" */ - 0xe0, 0x3f, 0x81, 0xfe, 0xf, 0xf8, 0x7f, 0xe3, - 0xff, 0x9f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xef, 0xfe, 0x7f, 0xe3, 0xfe, 0x1f, 0xe0, - 0xfe, 0x7, 0xe0, 0x38, - - /* U+F069 "" */ - 0x0, 0xe0, 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, - 0x70, 0x6, 0xe, 0xc, 0xf1, 0xc7, 0x9f, 0xbb, - 0xf1, 0xff, 0xfc, 0xf, 0xfe, 0x0, 0x7f, 0x0, - 0xf, 0xe0, 0x7, 0xff, 0x3, 0xff, 0xf8, 0xfd, - 0xdf, 0x9e, 0x38, 0xf3, 0x7, 0x6, 0x0, 0xe0, - 0x0, 0x1c, 0x0, 0x3, 0x80, 0x0, 0x70, 0x0, - - /* U+F06E "" */ - 0x0, 0xfe, 0x0, 0xf, 0xff, 0x80, 0x3e, 0xf, - 0x80, 0xf8, 0xf, 0x83, 0xe3, 0x8f, 0x8f, 0x87, - 0x8f, 0xbf, 0x1f, 0x9f, 0xfe, 0xff, 0x3f, 0xfd, - 0xfe, 0x7e, 0xf9, 0xf8, 0xf8, 0xf9, 0xe3, 0xe0, - 0xf8, 0xf, 0x80, 0xf8, 0x3e, 0x0, 0xff, 0xf0, - 0x0, 0x3f, 0x80, 0x0, - - /* U+F095 "" */ - 0x0, 0x0, 0x0, 0x0, 0x3e, 0x0, 0x7, 0xf0, - 0x0, 0x7f, 0x0, 0x7, 0xf0, 0x0, 0xff, 0x0, - 0x7, 0xf0, 0x0, 0x3e, 0x0, 0x1, 0xe0, 0x0, - 0x3e, 0x0, 0x3, 0xc0, 0x0, 0x7c, 0x0, 0xf, - 0x81, 0xc1, 0xf0, 0x7e, 0x3e, 0xf, 0xff, 0xc0, - 0xff, 0xf8, 0xf, 0xff, 0x0, 0x7f, 0xc0, 0x7, - 0xf0, 0x0, 0x0, 0x0, 0x0, - - /* U+F129 "" */ - 0x3c, 0x7e, 0x7e, 0x7e, 0x3c, 0x0, 0x0, 0xfc, - 0xfc, 0xfc, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, - 0xff, 0xff, 0xff, - - /* U+F185 "" */ - 0x0, 0x60, 0x0, 0x6, 0x0, 0x0, 0xf0, 0x1, - 0xcf, 0x38, 0x1f, 0xff, 0x81, 0xf0, 0xf8, 0xc, - 0xf3, 0x1, 0xdf, 0xb8, 0x7b, 0xfd, 0xef, 0xbf, - 0xdf, 0x7b, 0xfd, 0xe1, 0x9f, 0x98, 0xc, 0xf3, - 0x0, 0xc0, 0x30, 0x1f, 0xf, 0x81, 0xff, 0xf8, - 0x1c, 0xf3, 0x80, 0xf, 0x0, 0x0, 0x60, 0x0, - 0x6, 0x0, - - /* U+F1E6 "" */ - 0x18, 0x30, 0x70, 0x70, 0xe0, 0xe1, 0xc1, 0xc3, - 0x83, 0x80, 0x0, 0x3f, 0xff, 0xff, 0xff, 0x7f, - 0xfc, 0xff, 0xf9, 0xff, 0xf1, 0xff, 0xc3, 0xff, - 0x83, 0xfe, 0x3, 0xf8, 0x1, 0xc0, 0x3, 0x80, - 0x7, 0x0, 0xe, 0x0, - - /* U+F1FC "" */ - 0x0, 0x0, 0xf0, 0x0, 0x1f, 0x0, 0x3, 0xf0, - 0x0, 0x7e, 0x0, 0xf, 0xe0, 0x3, 0xfc, 0x0, - 0x7f, 0xc0, 0xf, 0xf8, 0x0, 0xff, 0x80, 0x1f, - 0xf0, 0x0, 0xfe, 0x0, 0xf, 0xe0, 0xe, 0x7c, - 0x1, 0xf8, 0x0, 0x9f, 0xc0, 0xf, 0xfc, 0x0, - 0x7f, 0xc0, 0x7, 0xf8, 0x0, 0x1f, 0x0, 0x0, - - /* U+F201 "" */ - 0x40, 0x0, 0x7, 0x0, 0x0, 0x38, 0x1, 0xf9, - 0xc0, 0x7, 0xce, 0x18, 0x1e, 0x71, 0xe1, 0xf3, - 0x9f, 0x9d, 0x9d, 0xff, 0xc4, 0xe6, 0x7c, 0x7, - 0x1, 0xc0, 0x38, 0x0, 0x1, 0xc0, 0x0, 0xe, - 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xe0, - - /* U+F21E "" */ - 0x1e, 0x7, 0x83, 0xf9, 0xfe, 0x7f, 0xff, 0xef, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xfc, - 0xf7, 0xf7, 0xd6, 0x3e, 0x79, 0x6b, 0xe0, 0x34, - 0x80, 0x1f, 0x9f, 0x80, 0xf9, 0xf0, 0x7, 0xfe, - 0x0, 0x3f, 0xc0, 0x1, 0xf8, 0x0, 0xf, 0x0, - 0x0, 0x60, 0x0, - - /* U+F240 "" */ - 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xb8, 0x0, - 0x1, 0xfd, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0x7f, - 0x7f, 0xff, 0x9f, 0xbf, 0xff, 0xcf, 0xdf, 0xff, - 0xef, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, - 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe0, - - /* U+F241 "" */ - 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xb8, 0x0, - 0x1, 0xfd, 0xff, 0xe0, 0xfe, 0xff, 0xf0, 0x7f, - 0x7f, 0xf8, 0x1f, 0xbf, 0xfc, 0xf, 0xdf, 0xfe, - 0xf, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, - 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe0, - - /* U+F242 "" */ - 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xb8, 0x0, - 0x1, 0xfd, 0xfe, 0x0, 0xfe, 0xff, 0x0, 0x7f, - 0x7f, 0x80, 0x1f, 0xbf, 0xc0, 0xf, 0xdf, 0xe0, - 0xf, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, - 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe0, - - /* U+F243 "" */ - 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xb8, 0x0, - 0x1, 0xfd, 0xf0, 0x0, 0xfe, 0xf8, 0x0, 0x7f, - 0x7c, 0x0, 0x1f, 0xbe, 0x0, 0xf, 0xdf, 0x0, - 0xf, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, - 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe0, - - /* U+F244 "" */ - 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xb8, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x1f, 0x80, 0x0, 0xf, 0xc0, 0x0, - 0xf, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, - 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe0, - - /* U+F252 "" */ - 0xff, 0xff, 0xff, 0xfd, 0x80, 0x33, 0x80, 0xe7, - 0xff, 0xc7, 0xff, 0xf, 0xfe, 0xf, 0xf8, 0xf, - 0xe0, 0xf, 0x80, 0x7f, 0xc0, 0xe3, 0x83, 0x83, - 0x86, 0x3, 0x1f, 0xff, 0x3f, 0xfe, 0x7f, 0xfd, - 0xff, 0xff, 0xff, 0xf8, - - /* U+F293 "" */ - 0x7, 0xe0, 0x3f, 0xe0, 0xfb, 0xe3, 0xf3, 0xe7, - 0xe3, 0xdf, 0xd3, 0xf9, 0xb3, 0xf9, 0x4f, 0xf8, - 0x3f, 0xf8, 0xff, 0xf1, 0xff, 0xc1, 0xff, 0x29, - 0xfc, 0xd9, 0xff, 0xa7, 0xbf, 0x1e, 0x7e, 0x7c, - 0x7d, 0xf0, 0x7f, 0xe0, 0x7f, 0x0, - - /* U+F294 "" */ - 0x0, 0x0, 0x80, 0x18, 0x3, 0x80, 0x78, 0x8d, - 0xb9, 0x9b, 0xb6, 0x3f, 0x83, 0xe0, 0x38, 0x7, - 0x81, 0xf8, 0x6d, 0x99, 0x9a, 0x36, 0x7, 0x80, - 0xe0, 0x18, 0x2, 0x0, 0x0, - - /* U+F2F2 "" */ - 0x7, 0xe0, 0x7, 0xe0, 0x1, 0x80, 0x3, 0xc0, - 0xf, 0xf2, 0x1f, 0xff, 0x3e, 0x7e, 0x7e, 0x7e, - 0xfe, 0x7e, 0xfe, 0x7f, 0xfe, 0x7f, 0xfe, 0x7f, - 0xfe, 0x7f, 0xff, 0xff, 0x7f, 0xfe, 0x7f, 0xfe, - 0x3f, 0xfc, 0x1f, 0xf8, 0x7, 0xe0, - - /* U+F3DD "" */ - 0x40, 0x0, 0x40, 0x70, 0x0, 0x7e, 0x3c, 0x0, - 0x3f, 0x8f, 0x80, 0x1f, 0x81, 0xe0, 0x1f, 0xc0, - 0x78, 0xf, 0xe0, 0x1e, 0x7, 0xf0, 0x3, 0xc1, - 0xf8, 0x0, 0xf0, 0x78, 0x0, 0x3c, 0x3c, 0x0, - 0xf, 0xbe, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x7e, - 0x0, 0x1c, 0x1f, 0x0, 0x7f, 0x3, 0xc0, 0x3f, - 0xf0, 0xf0, 0x1f, 0xfc, 0x3c, 0xf, 0xfe, 0x7, - 0x87, 0xfe, 0x1, 0xe3, 0xf8, 0x0, 0x70, 0x80, - 0x0, 0x10, - - /* U+F3FD "" */ - 0x0, 0xfe, 0x0, 0x7, 0xff, 0x0, 0x3f, 0xbf, - 0x80, 0xfe, 0x2f, 0x83, 0xfe, 0xcf, 0x8f, 0x3f, - 0x27, 0x9e, 0x7e, 0x4f, 0x3f, 0xfc, 0xfe, 0xff, - 0xf3, 0xff, 0xff, 0xe7, 0xff, 0xff, 0xcf, 0xff, - 0xfe, 0x3f, 0xfe, 0x78, 0x3c, 0xff, 0xf0, 0x7f, - 0xdf, 0xe0, 0xff, 0x3f, 0xff, 0xfe, 0x3f, 0xff, - 0xf8, - - /* U+F45D "" */ - 0x0, 0x10, 0x0, 0xf, 0xe0, 0x3, 0xff, 0x80, - 0x7f, 0xfc, 0xf, 0xff, 0xe0, 0xff, 0xfe, 0x7, - 0xff, 0xe2, 0x3f, 0xff, 0x31, 0xff, 0xf3, 0x8f, - 0xff, 0x3e, 0x7f, 0xf3, 0xf3, 0xc2, 0x1f, 0x90, - 0x0, 0xfc, 0x3c, 0x1f, 0xe7, 0xe3, 0xfe, 0xff, - 0x7e, 0xef, 0xff, 0xc6, 0xff, 0x78, 0x7, 0xe3, - 0x0, 0x3c, - - /* U+F54B "" */ - 0x0, 0xf, 0xf8, 0x1, 0xdf, 0xff, 0x1, 0xef, - 0xff, 0xc0, 0xf7, 0xff, 0xf0, 0x7b, 0xff, 0xf8, - 0x1d, 0xff, 0xfc, 0x0, 0x1f, 0xfc, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0xf, 0xfe, - 0x3, 0xbf, 0xff, 0x83, 0xdf, 0xff, 0xc1, 0xef, - 0xff, 0xe0, 0xf7, 0xff, 0xe0, 0x3b, 0xff, 0xe0, - 0x0, 0x7f, 0xc0, 0x0, - - /* U+F560 "" */ - 0x0, 0x0, 0x0, 0x0, 0x60, 0x0, 0xf, 0x0, - 0x1, 0xf0, 0x8, 0x3e, 0x1, 0xc7, 0xc4, 0x1e, - 0xf8, 0xe1, 0xff, 0x1f, 0xf, 0xe3, 0xf0, 0x7c, - 0x7e, 0x23, 0x8f, 0xc7, 0x11, 0xf8, 0xf8, 0x3f, - 0xf, 0xc7, 0xe0, 0x7e, 0xfc, 0x3, 0xff, 0x80, - 0x1f, 0xf0, 0x0, 0xfe, 0x0, 0x7, 0xc0, 0x0, - 0x38, 0x0, 0x1, 0x0, 0x0, - - /* U+F569 "" */ - 0x0, 0x0, 0x4, 0x0, 0x0, 0x3c, 0x0, 0x0, - 0xf0, 0x0, 0x7, 0xc0, 0x1f, 0xfe, 0x3, 0xff, - 0xfe, 0xf, 0x87, 0xfe, 0x38, 0x3e, 0xe, 0xc0, - 0xf8, 0x7, 0x81, 0xc0, 0xf, 0x0, 0x0, 0x1f, - 0x80, 0x0, 0xff, 0xe0, 0xf, 0xff, 0xff, 0xff, - 0xf9, 0xff, 0xf3, 0xf3, 0xe3, 0xe7, 0xe7, 0xc7, - 0xce, 0xcf, 0x8f, 0x98, 0x9f, 0x1f, 0x20, 0x3e, - 0x3e, 0x0, 0x4, 0x60, 0x0, - - /* U+F59F "" */ - 0x0, 0x78, 0x0, 0x7, 0xf8, 0x0, 0x1f, 0xe0, - 0x0, 0xff, 0xc0, 0x3, 0xff, 0x0, 0xf, 0xfc, - 0x0, 0x3f, 0xf0, 0x47, 0x7f, 0x87, 0x7d, 0xfe, - 0x7f, 0xf3, 0xf3, 0xff, 0xc7, 0x8f, 0xff, 0x5c, - 0xbf, 0xfd, 0xb6, 0xff, 0xf6, 0x1b, 0xff, 0xdf, - 0xef, 0xff, 0x7f, 0xbf, 0xfd, 0xfe, 0xff, 0xf7, - 0xfb, 0xff, 0x3, 0xef, 0x30, 0x1, 0xb0, - - /* U+F5A0 "" */ - 0x0, 0x78, 0x0, 0x7, 0xf8, 0x0, 0x1f, 0xe0, - 0x0, 0xf3, 0xc0, 0x3, 0x87, 0x0, 0xf, 0x3c, - 0x0, 0x9f, 0xe1, 0xcf, 0x7f, 0x9f, 0xfc, 0xfc, - 0xff, 0xf1, 0xe3, 0xff, 0xd7, 0xaf, 0xff, 0x4d, - 0xbf, 0xfd, 0x86, 0xff, 0xf7, 0xfb, 0xff, 0xdf, - 0xef, 0xff, 0x7f, 0xbf, 0xfd, 0xfe, 0xff, 0xc0, - 0xfb, 0xcc, 0x0, 0x6c, 0x0, - - /* U+F6A9 "" */ - 0x0, 0xc0, 0x0, 0x1c, 0x0, 0x3, 0xc0, 0x0, - 0x7c, 0x0, 0xff, 0xc6, 0x2f, 0xfc, 0x77, 0xff, - 0xc7, 0xef, 0xfc, 0x3c, 0xff, 0xc7, 0xef, 0xfc, - 0x77, 0xff, 0xc6, 0x20, 0x7c, 0x0, 0x3, 0xc0, - 0x0, 0x1c, 0x0, 0x0, 0xc0, 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 = 192, .box_w = 1, .box_h = 1, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1, .adv_w = 192, .box_w = 3, .box_h = 14, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 7, .adv_w = 192, .box_w = 7, .box_h = 6, .ofs_x = 3, .ofs_y = 8}, - {.bitmap_index = 13, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 33, .adv_w = 192, .box_w = 10, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 58, .adv_w = 192, .box_w = 12, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 79, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 99, .adv_w = 192, .box_w = 3, .box_h = 6, .ofs_x = 5, .ofs_y = 8}, - {.bitmap_index = 102, .adv_w = 192, .box_w = 7, .box_h = 19, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 119, .adv_w = 192, .box_w = 7, .box_h = 19, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 136, .adv_w = 192, .box_w = 10, .box_h = 10, .ofs_x = 1, .ofs_y = 1}, - {.bitmap_index = 149, .adv_w = 192, .box_w = 10, .box_h = 9, .ofs_x = 1, .ofs_y = 2}, - {.bitmap_index = 161, .adv_w = 192, .box_w = 5, .box_h = 6, .ofs_x = 3, .ofs_y = -4}, - {.bitmap_index = 165, .adv_w = 192, .box_w = 6, .box_h = 2, .ofs_x = 3, .ofs_y = 5}, - {.bitmap_index = 167, .adv_w = 192, .box_w = 4, .box_h = 3, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 169, .adv_w = 192, .box_w = 10, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 193, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 211, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 227, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 243, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 261, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 277, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 295, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 313, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 331, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 349, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 367, .adv_w = 192, .box_w = 3, .box_h = 11, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 372, .adv_w = 192, .box_w = 5, .box_h = 15, .ofs_x = 3, .ofs_y = -4}, - {.bitmap_index = 382, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 1}, - {.bitmap_index = 395, .adv_w = 192, .box_w = 9, .box_h = 7, .ofs_x = 2, .ofs_y = 3}, - {.bitmap_index = 403, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 1}, - {.bitmap_index = 416, .adv_w = 192, .box_w = 8, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 430, .adv_w = 192, .box_w = 11, .box_h = 18, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 455, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 473, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 491, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 509, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 525, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 541, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 557, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 575, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 591, .adv_w = 192, .box_w = 8, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 605, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 623, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 641, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 657, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 675, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 691, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 707, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 725, .adv_w = 192, .box_w = 10, .box_h = 18, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 748, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 766, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 784, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 802, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 818, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 836, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 856, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 874, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 894, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 910, .adv_w = 192, .box_w = 6, .box_h = 18, .ofs_x = 4, .ofs_y = -2}, - {.bitmap_index = 924, .adv_w = 192, .box_w = 10, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 948, .adv_w = 192, .box_w = 6, .box_h = 18, .ofs_x = 3, .ofs_y = -2}, - {.bitmap_index = 962, .adv_w = 192, .box_w = 10, .box_h = 8, .ofs_x = 1, .ofs_y = 7}, - {.bitmap_index = 972, .adv_w = 192, .box_w = 10, .box_h = 2, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 975, .adv_w = 192, .box_w = 5, .box_h = 3, .ofs_x = 3, .ofs_y = 13}, - {.bitmap_index = 977, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 991, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1007, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1021, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1037, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1050, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1068, .adv_w = 192, .box_w = 9, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 1085, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1101, .adv_w = 192, .box_w = 10, .box_h = 16, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1121, .adv_w = 192, .box_w = 8, .box_h = 19, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 1140, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1158, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1178, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1192, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1205, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1218, .adv_w = 192, .box_w = 9, .box_h = 15, .ofs_x = 2, .ofs_y = -4}, - {.bitmap_index = 1235, .adv_w = 192, .box_w = 9, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 1252, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1265, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1279, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1297, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1310, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1324, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1341, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1355, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 1374, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1387, .adv_w = 192, .box_w = 9, .box_h = 18, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 1408, .adv_w = 192, .box_w = 3, .box_h = 18, .ofs_x = 5, .ofs_y = -2}, - {.bitmap_index = 1415, .adv_w = 192, .box_w = 9, .box_h = 18, .ofs_x = 2, .ofs_y = -2}, - {.bitmap_index = 1436, .adv_w = 192, .box_w = 10, .box_h = 5, .ofs_x = 1, .ofs_y = 5}, - {.bitmap_index = 1443, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1461, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1479, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1497, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1513, .adv_w = 192, .box_w = 11, .box_h = 17, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 1537, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1553, .adv_w = 192, .box_w = 12, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1574, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1592, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1608, .adv_w = 192, .box_w = 9, .box_h = 19, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1630, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1648, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1666, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1684, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1700, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1716, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1732, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1750, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1768, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1786, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1804, .adv_w = 192, .box_w = 10, .box_h = 16, .ofs_x = 1, .ofs_y = -1}, - {.bitmap_index = 1824, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1842, .adv_w = 192, .box_w = 10, .box_h = 17, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 1864, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1880, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1898, .adv_w = 192, .box_w = 11, .box_h = 16, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 1920, .adv_w = 192, .box_w = 12, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1941, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1959, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1977, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1993, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2011, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2029, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2043, .adv_w = 192, .box_w = 9, .box_h = 14, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2059, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2073, .adv_w = 192, .box_w = 8, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2084, .adv_w = 192, .box_w = 11, .box_h = 14, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 2104, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2117, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2134, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2148, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2161, .adv_w = 192, .box_w = 9, .box_h = 16, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2179, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2193, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2207, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2221, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2234, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2247, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2260, .adv_w = 192, .box_w = 9, .box_h = 15, .ofs_x = 2, .ofs_y = -4}, - {.bitmap_index = 2277, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2291, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2305, .adv_w = 192, .box_w = 10, .box_h = 15, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 2324, .adv_w = 192, .box_w = 10, .box_h = 18, .ofs_x = 1, .ofs_y = -4}, - {.bitmap_index = 2347, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2361, .adv_w = 192, .box_w = 10, .box_h = 14, .ofs_x = 2, .ofs_y = -3}, - {.bitmap_index = 2379, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2392, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2406, .adv_w = 192, .box_w = 11, .box_h = 13, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 2424, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2441, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2455, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 2469, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2483, .adv_w = 192, .box_w = 10, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2497, .adv_w = 192, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 2510, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 2560, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 2609, .adv_w = 320, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 2657, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 2707, .adv_w = 240, .box_w = 15, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 2736, .adv_w = 360, .box_w = 23, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 2791, .adv_w = 280, .box_w = 18, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 2830, .adv_w = 320, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 2873, .adv_w = 280, .box_w = 13, .box_h = 17, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 2901, .adv_w = 280, .box_w = 18, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 2949, .adv_w = 280, .box_w = 18, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 2988, .adv_w = 280, .box_w = 18, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3027, .adv_w = 280, .box_w = 13, .box_h = 17, .ofs_x = 2, .ofs_y = -1}, - {.bitmap_index = 3055, .adv_w = 320, .box_w = 19, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3103, .adv_w = 360, .box_w = 23, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 3147, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3200, .adv_w = 120, .box_w = 8, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3219, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3269, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3305, .adv_w = 320, .box_w = 20, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3353, .adv_w = 320, .box_w = 21, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 3393, .adv_w = 320, .box_w = 20, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3436, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3474, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3512, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3550, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3588, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3626, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3662, .adv_w = 280, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 3700, .adv_w = 200, .box_w = 11, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3729, .adv_w = 280, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 3767, .adv_w = 400, .box_w = 25, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3833, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3882, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3932, .adv_w = 400, .box_w = 25, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3992, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 4045, .adv_w = 360, .box_w = 23, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 4106, .adv_w = 360, .box_w = 22, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 4161, .adv_w = 360, .box_w = 22, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 4214, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - -static const uint16_t unicode_list_2[] = { - 0x0, 0x14, 0x16, 0x23, 0x26, 0x27, 0x28, 0x39, - 0x47, 0x4a, 0x4b, 0x4c, 0x50, 0x68, 0x6d, 0x94, - 0x128, 0x184, 0x1e5, 0x1fb, 0x200, 0x21d, 0x23f, 0x240, - 0x241, 0x242, 0x243, 0x251, 0x292, 0x293, 0x2f1, 0x3dc, - 0x3fc, 0x45c, 0x54a, 0x55f, 0x568, 0x59e, 0x59f, 0x6a8 -}; - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 32, .range_length = 95, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - }, - { - .range_start = 1040, .range_length = 64, .glyph_id_start = 96, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - }, - { - .range_start = 61441, .range_length = 1705, .glyph_id_start = 160, - .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 40, .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 = 3, - .bpp = 1, - .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 jetbrains_mono_bold_20 = { -#else -lv_font_t jetbrains_mono_bold_20 = { -#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 = 23, /*The maximum line height required by the font*/ - .base_line = 4, /*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 = -3, - .underline_thickness = 1, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if JETBRAINS_MONO_BOLD_20*/ - diff --git a/src/displayapp/fonts/jetbrains_mono_extrabold_compressed.c b/src/displayapp/fonts/jetbrains_mono_extrabold_compressed.c deleted file mode 100644 index ab0a5c4..0000000 --- a/src/displayapp/fonts/jetbrains_mono_extrabold_compressed.c +++ /dev/null @@ -1,523 +0,0 @@ -/******************************************************************************* - * Size: 80 px - * Bpp: 1 - * Opts: - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef JETBRAINS_MONO_EXTRABOLD_COMPRESSED -#define JETBRAINS_MONO_EXTRABOLD_COMPRESSED 1 -#endif - -#if JETBRAINS_MONO_EXTRABOLD_COMPRESSED - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+0030 "0" */ - 0x0, 0x3, 0xff, 0x80, 0x0, 0x0, 0x3f, 0xff, - 0xe0, 0x0, 0x1, 0xff, 0xff, 0xf0, 0x0, 0xf, - 0xff, 0xff, 0xf8, 0x0, 0x3f, 0xff, 0xff, 0xf8, - 0x0, 0xff, 0xff, 0xff, 0xf8, 0x3, 0xff, 0xff, - 0xff, 0xf8, 0xf, 0xff, 0xff, 0xff, 0xf8, 0x3f, - 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, - 0xf1, 0xff, 0xfc, 0x7, 0xff, 0xf3, 0xff, 0xe0, - 0x3, 0xff, 0xe7, 0xff, 0x80, 0x3, 0xff, 0xdf, - 0xfe, 0x0, 0x3, 0xff, 0xff, 0xfc, 0x0, 0x3, - 0xff, 0xff, 0xf0, 0x0, 0x7, 0xff, 0xff, 0xe0, - 0x0, 0xf, 0xff, 0xff, 0xc0, 0x0, 0x1f, 0xff, - 0xff, 0x80, 0x0, 0x3f, 0xff, 0xff, 0x0, 0x0, - 0x7f, 0xff, 0xfe, 0x0, 0x0, 0xff, 0xff, 0xfc, - 0x0, 0x1, 0xff, 0xff, 0xf8, 0x0, 0x3, 0xff, - 0xff, 0xf0, 0x0, 0x7, 0xff, 0xff, 0xe0, 0x7c, - 0xf, 0xff, 0xff, 0xc1, 0xfe, 0x1f, 0xff, 0xff, - 0x87, 0xfc, 0x3f, 0xff, 0xff, 0x1f, 0xfc, 0x7f, - 0xff, 0xfe, 0x3f, 0xf8, 0xff, 0xff, 0xfc, 0x7f, - 0xf1, 0xff, 0xff, 0xf8, 0xff, 0xe3, 0xff, 0xff, - 0xf1, 0xff, 0xc7, 0xff, 0xff, 0xe1, 0xff, 0xf, - 0xff, 0xff, 0xc1, 0xfc, 0x1f, 0xff, 0xff, 0x81, - 0xf0, 0x3f, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, - 0xfe, 0x0, 0x0, 0xff, 0xff, 0xfc, 0x0, 0x1, - 0xff, 0xff, 0xf8, 0x0, 0x3, 0xff, 0xff, 0xf0, - 0x0, 0x7, 0xff, 0xff, 0xe0, 0x0, 0xf, 0xff, - 0xff, 0xc0, 0x0, 0x1f, 0xff, 0xff, 0x80, 0x0, - 0x3f, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, 0xfe, - 0x0, 0x0, 0xff, 0xff, 0xfe, 0x0, 0x1, 0xff, - 0xff, 0xfc, 0x0, 0x7, 0xff, 0xbf, 0xfc, 0x0, - 0x1f, 0xfe, 0x7f, 0xfc, 0x0, 0x7f, 0xfc, 0xff, - 0xfe, 0x3, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, - 0xe1, 0xff, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, - 0xff, 0xff, 0x1, 0xff, 0xff, 0xff, 0xfc, 0x1, - 0xff, 0xff, 0xff, 0xf0, 0x1, 0xff, 0xff, 0xff, - 0xc0, 0x1, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, - 0xff, 0xf8, 0x0, 0x0, 0x7f, 0xff, 0xc0, 0x0, - 0x0, 0x1f, 0xfc, 0x0, 0x0, - - /* U+0031 "1" */ - 0x0, 0x3, 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xff, - 0x80, 0x0, 0x1, 0xff, 0xfe, 0x0, 0x0, 0x1f, - 0xff, 0xf8, 0x0, 0x0, 0xff, 0xff, 0xe0, 0x0, - 0x7, 0xff, 0xff, 0x80, 0x0, 0x7f, 0xff, 0xfe, - 0x0, 0x3, 0xff, 0xff, 0xf8, 0x0, 0x3f, 0xff, - 0xff, 0xe0, 0x1, 0xff, 0xff, 0xff, 0x80, 0xf, - 0xff, 0xff, 0xfe, 0x0, 0x3f, 0xff, 0xff, 0xf8, - 0x0, 0xff, 0xfd, 0xff, 0xe0, 0x3, 0xff, 0xc7, - 0xff, 0x80, 0xf, 0xfe, 0x1f, 0xfe, 0x0, 0x3f, - 0xe0, 0x7f, 0xf8, 0x0, 0xff, 0x1, 0xff, 0xe0, - 0x3, 0xf8, 0x7, 0xff, 0x80, 0xf, 0x80, 0x1f, - 0xfe, 0x0, 0x3c, 0x0, 0x7f, 0xf8, 0x0, 0xe0, - 0x1, 0xff, 0xe0, 0x2, 0x0, 0x7, 0xff, 0x80, - 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x7f, - 0xf8, 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, - 0x7, 0xff, 0x80, 0x0, 0x0, 0x1f, 0xfe, 0x0, - 0x0, 0x0, 0x7f, 0xf8, 0x0, 0x0, 0x1, 0xff, - 0xe0, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, - 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x7f, 0xf8, 0x0, - 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, 0x7, 0xff, - 0x80, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, - 0x7f, 0xf8, 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, - 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, 0x1f, 0xfe, - 0x0, 0x0, 0x0, 0x7f, 0xf8, 0x0, 0x0, 0x1, - 0xff, 0xe0, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, - 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x7f, 0xf8, - 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, 0x7, - 0xff, 0x80, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, - 0x0, 0x7f, 0xf8, 0x0, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xc0, - - /* U+0032 "2" */ - 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x3f, 0xff, - 0xe0, 0x0, 0x1, 0xff, 0xff, 0xf8, 0x0, 0xf, - 0xff, 0xff, 0xf8, 0x0, 0x3f, 0xff, 0xff, 0xf8, - 0x0, 0xff, 0xff, 0xff, 0xfc, 0x3, 0xff, 0xff, - 0xff, 0xf8, 0xf, 0xff, 0xff, 0xff, 0xf8, 0x1f, - 0xff, 0xff, 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, - 0xf0, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xfc, - 0xf, 0xff, 0xe7, 0xff, 0xe0, 0xf, 0xff, 0xcf, - 0xff, 0x80, 0xf, 0xff, 0xff, 0xfe, 0x0, 0xf, - 0xff, 0xff, 0xfc, 0x0, 0x1f, 0xff, 0xff, 0xf0, - 0x0, 0x1f, 0xff, 0xff, 0xe0, 0x0, 0x3f, 0xff, - 0xff, 0xc0, 0x0, 0x7f, 0xf8, 0x0, 0x0, 0x0, - 0xff, 0xf0, 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, - 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0xf, 0xff, - 0x0, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, - 0x7f, 0xfc, 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, - 0x0, 0x3, 0xff, 0xe0, 0x0, 0x0, 0xf, 0xff, - 0xc0, 0x0, 0x0, 0x3f, 0xff, 0x0, 0x0, 0x0, - 0xff, 0xfc, 0x0, 0x0, 0x3, 0xff, 0xf8, 0x0, - 0x0, 0xf, 0xff, 0xe0, 0x0, 0x0, 0x3f, 0xff, - 0x80, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x3, - 0xff, 0xfc, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, - 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, 0xff, 0xff, - 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, 0xf, - 0xff, 0xf0, 0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, - 0x0, 0xff, 0xff, 0x0, 0x0, 0x3, 0xff, 0xf8, - 0x0, 0x0, 0xf, 0xff, 0xe0, 0x0, 0x0, 0x3f, - 0xff, 0x80, 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, - 0x3, 0xff, 0xf8, 0x0, 0x0, 0xf, 0xff, 0xe0, - 0x0, 0x0, 0x3f, 0xff, 0x80, 0x0, 0x0, 0xff, - 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, - 0xfb, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, - 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xdf, - 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, - 0xff, 0x7f, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, - 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xfb, - 0xff, 0xff, 0xff, 0xff, 0xf0, - - /* U+0033 "3" */ - 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, - 0xff, 0xf0, 0x7f, 0xff, 0xff, 0xff, 0xe0, 0xff, - 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff, - 0x83, 0xff, 0xff, 0xff, 0xff, 0x7, 0xff, 0xff, - 0xff, 0xfe, 0xf, 0xff, 0xff, 0xff, 0xfc, 0x1f, - 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, - 0xf0, 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, - 0xf, 0xff, 0x0, 0x0, 0x0, 0x3f, 0xfc, 0x0, - 0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, 0x3, 0xff, - 0xc0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, - 0x7f, 0xf8, 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, - 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, 0x1f, 0xfe, - 0x0, 0x0, 0x0, 0x7f, 0xf8, 0x0, 0x0, 0x1, - 0xff, 0xf8, 0x0, 0x0, 0x3, 0xff, 0xfe, 0x0, - 0x0, 0x7, 0xff, 0xff, 0x0, 0x0, 0xf, 0xff, - 0xff, 0x80, 0x0, 0x1f, 0xff, 0xff, 0x80, 0x0, - 0x3f, 0xff, 0xff, 0x80, 0x0, 0x7f, 0xff, 0xff, - 0x80, 0x0, 0xff, 0xff, 0xff, 0x80, 0x1, 0xff, - 0xff, 0xff, 0x0, 0x3, 0xff, 0xff, 0xff, 0x0, - 0x0, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x7f, - 0xfc, 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, - 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff, 0xf0, - 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, 0x3, - 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, - 0x0, 0xf, 0xff, 0x0, 0x0, 0x0, 0x1f, 0xfe, - 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xc0, 0x0, - 0x7f, 0xff, 0xff, 0x80, 0x0, 0xff, 0xff, 0xff, - 0x0, 0x1, 0xff, 0xff, 0xff, 0x0, 0x7, 0xff, - 0xff, 0xfe, 0x0, 0xf, 0xff, 0xbf, 0xfe, 0x0, - 0x3f, 0xfe, 0x7f, 0xff, 0x1, 0xff, 0xfc, 0xff, - 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, - 0xff, 0xff, 0x1, 0xff, 0xff, 0xff, 0xfc, 0x1, - 0xff, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, 0xff, - 0x80, 0x0, 0xff, 0xff, 0xfe, 0x0, 0x0, 0x7f, - 0xff, 0xf0, 0x0, 0x0, 0xf, 0xfe, 0x0, 0x0, - - /* U+0034 "4" */ - 0x0, 0x0, 0x3, 0xff, 0xf0, 0x0, 0x0, 0x1f, - 0xff, 0x80, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, - 0x3, 0xff, 0xe0, 0x0, 0x0, 0x1f, 0xff, 0x80, - 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, 0x3, 0xff, - 0xe0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x0, 0x0, - 0xff, 0xfc, 0x0, 0x0, 0x3, 0xff, 0xe0, 0x0, - 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, 0xff, 0xfc, - 0x0, 0x0, 0x3, 0xff, 0xe0, 0x0, 0x0, 0x1f, - 0xff, 0x0, 0x0, 0x0, 0xff, 0xfc, 0x0, 0x0, - 0x7, 0xff, 0xe0, 0x0, 0x0, 0x1f, 0xff, 0x0, - 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, 0x7, 0xff, - 0xe0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, - 0xff, 0xf8, 0x0, 0x0, 0x7, 0xff, 0xe0, 0x0, - 0x0, 0x3f, 0xff, 0x0, 0x0, 0x0, 0xff, 0xf8, - 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x0, 0x3f, - 0xff, 0x0, 0xff, 0xf0, 0xff, 0xf8, 0x3, 0xff, - 0xc7, 0xff, 0xc0, 0xf, 0xff, 0x3f, 0xff, 0x0, - 0x3f, 0xfd, 0xff, 0xf8, 0x0, 0xff, 0xf7, 0xff, - 0xc0, 0x3, 0xff, 0xff, 0xfe, 0x0, 0xf, 0xff, - 0xff, 0xf8, 0x0, 0x3f, 0xff, 0xff, 0xc0, 0x0, - 0xff, 0xff, 0xfe, 0x0, 0x3, 0xff, 0xff, 0xf8, - 0x0, 0xf, 0xff, 0xff, 0xe0, 0x0, 0x3f, 0xff, - 0xff, 0x80, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x3f, - 0xfc, 0x0, 0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, - 0x3, 0xff, 0xc0, 0x0, 0x0, 0xf, 0xff, 0x0, - 0x0, 0x0, 0x3f, 0xfc, 0x0, 0x0, 0x0, 0xff, - 0xf0, 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, - 0xf, 0xff, 0x0, 0x0, 0x0, 0x3f, 0xfc, 0x0, - 0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, 0x3, 0xff, - 0xc0, - - /* U+0035 "5" */ - 0x7f, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, - 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, - 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xf1, - 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, 0xff, - 0xff, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, - 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xc7, - 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfe, 0x0, 0x0, - 0x0, 0x7f, 0xf8, 0x0, 0x0, 0x1, 0xff, 0xe0, - 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, 0x1f, - 0xfe, 0x0, 0x0, 0x0, 0x7f, 0xf8, 0x0, 0x0, - 0x1, 0xff, 0xe0, 0x0, 0x0, 0x7, 0xff, 0x80, - 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x7f, - 0xf8, 0x1f, 0xf0, 0x1, 0xff, 0xe1, 0xff, 0xf0, - 0x7, 0xff, 0x9f, 0xff, 0xf0, 0x1f, 0xfe, 0xff, - 0xff, 0xe0, 0x7f, 0xfb, 0xff, 0xff, 0xc1, 0xff, - 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xff, - 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, - 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, - 0xf0, 0x3f, 0xff, 0x9f, 0xff, 0x0, 0x3f, 0xfe, - 0x7f, 0xf8, 0x0, 0x7f, 0xfc, 0x0, 0x0, 0x1, - 0xff, 0xf0, 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, - 0x0, 0xf, 0xff, 0x0, 0x0, 0x0, 0x3f, 0xfc, - 0x0, 0x0, 0x0, 0xff, 0xf0, 0x0, 0x0, 0x3, - 0xff, 0xc0, 0x0, 0x0, 0xf, 0xff, 0x0, 0x0, - 0x0, 0x3f, 0xfc, 0x0, 0x0, 0x0, 0xff, 0xf0, - 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0xf, - 0xff, 0xff, 0xf0, 0x0, 0x3f, 0xff, 0xff, 0xc0, - 0x0, 0xff, 0xff, 0xff, 0x0, 0x7, 0xff, 0xff, - 0xfe, 0x0, 0x1f, 0xfe, 0xff, 0xfc, 0x0, 0xff, - 0xf9, 0xff, 0xfc, 0xf, 0xff, 0xe7, 0xff, 0xff, - 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0xfc, 0x3f, - 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, - 0x80, 0xff, 0xff, 0xff, 0xfc, 0x1, 0xff, 0xff, - 0xff, 0xe0, 0x3, 0xff, 0xff, 0xfe, 0x0, 0x3, - 0xff, 0xff, 0xf0, 0x0, 0x3, 0xff, 0xff, 0x0, - 0x0, 0x1, 0xff, 0xc0, 0x0, - - /* U+0036 "6" */ - 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0x0, 0x1f, - 0xff, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, - 0x0, 0xf, 0xff, 0x80, 0x0, 0x0, 0xf, 0xff, - 0x80, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, - 0x7, 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, 0xc0, - 0x0, 0x0, 0x3, 0xff, 0xe0, 0x0, 0x0, 0x3, - 0xff, 0xe0, 0x0, 0x0, 0x1, 0xff, 0xf0, 0x0, - 0x0, 0x1, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xff, - 0xf0, 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, - 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0xfc, - 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, 0x0, - 0x3f, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0xfe, 0x0, - 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0x0, 0x1f, - 0xff, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, - 0x0, 0xf, 0xff, 0x80, 0x0, 0x0, 0xf, 0xff, - 0x87, 0xf8, 0x0, 0x7, 0xff, 0x8f, 0xff, 0x0, - 0x7, 0xff, 0xcf, 0xff, 0xe0, 0x3, 0xff, 0xdf, - 0xff, 0xf8, 0x3, 0xff, 0xef, 0xff, 0xfe, 0x1, - 0xff, 0xff, 0xff, 0xff, 0x81, 0xff, 0xff, 0xff, - 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f, - 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0x81, 0xff, - 0xff, 0x3f, 0xff, 0x0, 0x3f, 0xff, 0x9f, 0xff, - 0x0, 0x7, 0xff, 0xdf, 0xff, 0x80, 0x3, 0xff, - 0xef, 0xff, 0x80, 0x0, 0xff, 0xff, 0xff, 0xc0, - 0x0, 0x7f, 0xff, 0xff, 0xc0, 0x0, 0x1f, 0xff, - 0xff, 0xe0, 0x0, 0xf, 0xff, 0xff, 0xf0, 0x0, - 0x7, 0xff, 0xff, 0xf8, 0x0, 0x3, 0xff, 0xff, - 0xfc, 0x0, 0x1, 0xff, 0xff, 0xfe, 0x0, 0x0, - 0xff, 0xff, 0xff, 0x80, 0x0, 0xff, 0xfb, 0xff, - 0xc0, 0x0, 0x7f, 0xfd, 0xff, 0xf0, 0x0, 0x7f, - 0xfc, 0xff, 0xf8, 0x0, 0x3f, 0xfe, 0x3f, 0xfe, - 0x0, 0x3f, 0xff, 0x1f, 0xff, 0xc0, 0x7f, 0xff, - 0x7, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0xff, - 0xff, 0xff, 0x80, 0xff, 0xff, 0xff, 0xff, 0x80, - 0x3f, 0xff, 0xff, 0xff, 0xc0, 0xf, 0xff, 0xff, - 0xff, 0xc0, 0x3, 0xff, 0xff, 0xff, 0x80, 0x0, - 0xff, 0xff, 0xff, 0x80, 0x0, 0x1f, 0xff, 0xff, - 0x0, 0x0, 0x3, 0xff, 0xfe, 0x0, 0x0, 0x0, - 0x3f, 0xf8, 0x0, 0x0, - - /* U+0037 "7" */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0x3, 0xff, - 0xff, 0xfe, 0x0, 0x1, 0xff, 0xef, 0xff, 0x0, - 0x1, 0xff, 0xf7, 0xff, 0x80, 0x0, 0xff, 0xf3, - 0xff, 0xc0, 0x0, 0xff, 0xf9, 0xff, 0xe0, 0x0, - 0x7f, 0xfc, 0xff, 0xf0, 0x0, 0x7f, 0xfc, 0x7f, - 0xf8, 0x0, 0x3f, 0xfe, 0x3f, 0xfc, 0x0, 0x3f, - 0xfe, 0x1f, 0xfe, 0x0, 0x1f, 0xff, 0x0, 0x0, - 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, - 0x80, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, - 0x7, 0xff, 0xc0, 0x0, 0x0, 0x3, 0xff, 0xe0, - 0x0, 0x0, 0x3, 0xff, 0xe0, 0x0, 0x0, 0x1, - 0xff, 0xf0, 0x0, 0x0, 0x1, 0xff, 0xf0, 0x0, - 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff, - 0xf8, 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, - 0x0, 0x3f, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0xfe, - 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, - 0x1f, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0x80, - 0x0, 0x0, 0xf, 0xff, 0x80, 0x0, 0x0, 0x7, - 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, - 0x0, 0x3, 0xff, 0xe0, 0x0, 0x0, 0x3, 0xff, - 0xe0, 0x0, 0x0, 0x1, 0xff, 0xf0, 0x0, 0x0, - 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff, 0xf8, - 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, 0x0, - 0x7f, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0xfe, 0x0, - 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0x0, 0x1f, - 0xff, 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, - 0x0, 0xf, 0xff, 0x80, 0x0, 0x0, 0xf, 0xff, - 0xc0, 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x0, - 0x3, 0xff, 0xe0, 0x0, 0x0, 0x3, 0xff, 0xe0, - 0x0, 0x0, 0x1, 0xff, 0xf0, 0x0, 0x0, 0x1, - 0xff, 0xf0, 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, - 0x0, 0x0, - - /* U+0038 "8" */ - 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0xf, 0xff, - 0xfc, 0x0, 0x0, 0x1f, 0xff, 0xff, 0x80, 0x0, - 0x1f, 0xff, 0xff, 0xf0, 0x0, 0x3f, 0xff, 0xff, - 0xfc, 0x0, 0x3f, 0xff, 0xff, 0xff, 0x0, 0x3f, - 0xff, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xff, 0xff, - 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, - 0xff, 0xff, 0xfe, 0xf, 0xff, 0xe0, 0x7f, 0xff, - 0x7, 0xff, 0xc0, 0xf, 0xff, 0x87, 0xff, 0xc0, - 0x3, 0xff, 0xe3, 0xff, 0xe0, 0x1, 0xff, 0xf1, - 0xff, 0xe0, 0x0, 0x7f, 0xf8, 0xff, 0xf0, 0x0, - 0x3f, 0xfc, 0x7f, 0xf8, 0x0, 0x1f, 0xfe, 0x3f, - 0xfc, 0x0, 0xf, 0xff, 0x1f, 0xfe, 0x0, 0x7, - 0xff, 0x8f, 0xff, 0x80, 0x7, 0xff, 0xc3, 0xff, - 0xc0, 0x3, 0xff, 0xc1, 0xff, 0xf0, 0x3, 0xff, - 0xe0, 0x7f, 0xfc, 0x3, 0xff, 0xe0, 0x3f, 0xff, - 0x3, 0xff, 0xf0, 0xf, 0xff, 0xe7, 0xff, 0xf0, - 0x3, 0xff, 0xff, 0xff, 0xf0, 0x0, 0xff, 0xff, - 0xff, 0xf0, 0x0, 0x1f, 0xff, 0xff, 0xf0, 0x0, - 0x7, 0xff, 0xff, 0xf0, 0x0, 0x1, 0xff, 0xff, - 0xf0, 0x0, 0x3, 0xff, 0xff, 0xfc, 0x0, 0x3, - 0xff, 0xff, 0xff, 0x80, 0x3, 0xff, 0xff, 0xff, - 0xe0, 0x3, 0xff, 0xff, 0xff, 0xf8, 0x3, 0xff, - 0xf0, 0xff, 0xfe, 0x3, 0xff, 0xf0, 0x1f, 0xff, - 0x83, 0xff, 0xe0, 0x7, 0xff, 0xe3, 0xff, 0xe0, - 0x1, 0xff, 0xf1, 0xff, 0xe0, 0x0, 0x7f, 0xfc, - 0xff, 0xf0, 0x0, 0x1f, 0xfe, 0xff, 0xf0, 0x0, - 0x7, 0xff, 0xff, 0xf8, 0x0, 0x3, 0xff, 0xff, - 0xfc, 0x0, 0x1, 0xff, 0xff, 0xfe, 0x0, 0x0, - 0xff, 0xff, 0xff, 0x0, 0x0, 0x7f, 0xff, 0xff, - 0xc0, 0x0, 0x7f, 0xff, 0xff, 0xe0, 0x0, 0x3f, - 0xff, 0xff, 0xf8, 0x0, 0x3f, 0xff, 0x7f, 0xfe, - 0x0, 0x3f, 0xff, 0x3f, 0xff, 0xc0, 0x7f, 0xff, - 0x9f, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff, - 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xc0, - 0x7f, 0xff, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0xff, - 0xff, 0xe0, 0x7, 0xff, 0xff, 0xff, 0xe0, 0x1, - 0xff, 0xff, 0xff, 0xc0, 0x0, 0x3f, 0xff, 0xff, - 0x80, 0x0, 0x7, 0xff, 0xff, 0x0, 0x0, 0x0, - 0x3f, 0xf8, 0x0, 0x0, - - /* U+0039 "9" */ - 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x7, 0xff, - 0xfc, 0x0, 0x0, 0xf, 0xff, 0xff, 0x80, 0x0, - 0x1f, 0xff, 0xff, 0xf0, 0x0, 0x1f, 0xff, 0xff, - 0xfc, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x0, 0x1f, - 0xff, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xff, - 0xf0, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, - 0xff, 0xff, 0xfe, 0xf, 0xff, 0xf0, 0x7f, 0xff, - 0x8f, 0xff, 0xe0, 0xf, 0xff, 0xc7, 0xff, 0xc0, - 0x1, 0xff, 0xf3, 0xff, 0xe0, 0x0, 0xff, 0xfb, - 0xff, 0xe0, 0x0, 0x3f, 0xfd, 0xff, 0xf0, 0x0, - 0x1f, 0xff, 0xff, 0xf0, 0x0, 0x7, 0xff, 0xff, - 0xf8, 0x0, 0x3, 0xff, 0xff, 0xfc, 0x0, 0x1, - 0xff, 0xff, 0xfe, 0x0, 0x0, 0xff, 0xff, 0xff, - 0x0, 0x0, 0x7f, 0xff, 0xff, 0x80, 0x0, 0x3f, - 0xff, 0xff, 0xe0, 0x0, 0x3f, 0xff, 0xff, 0xf0, - 0x0, 0x1f, 0xff, 0x7f, 0xfc, 0x0, 0x1f, 0xff, - 0x3f, 0xfe, 0x0, 0xf, 0xff, 0x9f, 0xff, 0xc0, - 0x1f, 0xff, 0xc7, 0xff, 0xf8, 0x3f, 0xff, 0xe3, - 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, - 0xff, 0xf0, 0x7f, 0xff, 0xff, 0xff, 0xf8, 0x1f, - 0xff, 0xff, 0xff, 0xf8, 0x7, 0xff, 0xff, 0xbf, - 0xfc, 0x1, 0xff, 0xff, 0xbf, 0xfc, 0x0, 0x7f, - 0xff, 0xbf, 0xfe, 0x0, 0xf, 0xff, 0x1f, 0xfe, - 0x0, 0x1, 0xfe, 0x1f, 0xff, 0x0, 0x0, 0x0, - 0xf, 0xff, 0x0, 0x0, 0x0, 0xf, 0xff, 0x80, - 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, 0x0, 0x7, - 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, - 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x3, 0xff, - 0xe0, 0x0, 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, - 0x1, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xff, 0xf0, - 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, 0x0, - 0xff, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, - 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, 0x0, 0x3f, - 0xfe, 0x0, 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, - 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xff, - 0x0, 0x0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, - 0xf, 0xff, 0x80, 0x0, 0x0, 0xf, 0xff, 0x80, - 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x0, 0x7, - 0xff, 0xc0, 0x0, 0x0, - - /* U+003A ":" */ - 0x7, 0xe0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0x3f, 0xfc, - 0x1f, 0xf8, 0x7, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xe0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0x7f, 0xfe, 0x3f, 0xfc, - 0x1f, 0xf8, 0x7, 0xe0 -}; - - -/*--------------------- - * 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 = 768, .box_w = 39, .box_h = 60, .ofs_x = 5, .ofs_y = -1}, - {.bitmap_index = 293, .adv_w = 768, .box_w = 38, .box_h = 59, .ofs_x = 6, .ofs_y = 0}, - {.bitmap_index = 574, .adv_w = 768, .box_w = 39, .box_h = 60, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 867, .adv_w = 768, .box_w = 39, .box_h = 59, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 1155, .adv_w = 768, .box_w = 38, .box_h = 59, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 1436, .adv_w = 768, .box_w = 38, .box_h = 60, .ofs_x = 5, .ofs_y = -1}, - {.bitmap_index = 1721, .adv_w = 768, .box_w = 41, .box_h = 60, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 2029, .adv_w = 768, .box_w = 41, .box_h = 58, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 2327, .adv_w = 768, .box_w = 41, .box_h = 60, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 2635, .adv_w = 768, .box_w = 41, .box_h = 60, .ofs_x = 4, .ofs_y = -1}, - {.bitmap_index = 2943, .adv_w = 768, .box_w = 16, .box_h = 46, .ofs_x = 16, .ofs_y = -1} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - - - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 48, .range_length = 11, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_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 = 1, - .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 jetbrains_mono_extrabold_compressed = { -#else -lv_font_t jetbrains_mono_extrabold_compressed = { -#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 = 61, /*The maximum line height required by the font*/ - .base_line = 1, /*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 = -12, - .underline_thickness = 4, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if JETBRAINS_MONO_EXTRABOLD_COMPRESSED*/ - diff --git a/src/displayapp/fonts/lv_font_navi_80.c b/src/displayapp/fonts/lv_font_navi_80.c deleted file mode 100644 index 8fd3979..0000000 --- a/src/displayapp/fonts/lv_font_navi_80.c +++ /dev/null @@ -1,2636 +0,0 @@ -/******************************************************************************* - * Size: 80 px - * Bpp: 2 - * Opts: --font navigation.ttf -r 0xe900-0xe929 --size 80 --format lvgl --bpp 2 -o lv_font_navi_80.c - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef LV_FONT_NAVI_80 -#define LV_FONT_NAVI_80 1 -#endif - -#if LV_FONT_NAVI_80 - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+E900 "" */ - 0xf, 0xfe, 0x2d, 0xfa, 0xf, 0xfe, 0xa3, 0xa1, - 0x9d, 0xf, 0xfe, 0x8d, 0x3, 0xf4, 0x87, 0xff, - 0x3d, 0x41, 0xfe, 0x90, 0xff, 0xe7, 0x41, 0xff, - 0xc0, 0x83, 0xff, 0x9a, 0x87, 0xff, 0x9, 0xf, - 0xfe, 0x66, 0x1f, 0xfc, 0x2c, 0x3f, 0xf9, 0x88, - 0x7f, 0xf0, 0x90, 0xff, 0xff, 0x87, 0xff, 0xe5, - 0xf, 0xfe, 0x12, 0x1f, 0xfc, 0xcc, 0x3f, 0xf8, - 0x58, 0x7f, 0xf3, 0x10, 0xff, 0xe1, 0x21, 0xff, - 0xcd, 0xc3, 0xff, 0x81, 0x87, 0xff, 0x3e, 0xf, - 0xf4, 0x1f, 0xfd, 0x6, 0xf, 0xda, 0x1f, 0xfd, - 0x17, 0x90, 0x36, 0x1f, 0xfd, 0x56, 0xf4, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xfb, 0x28, 0x1f, 0xfd, 0xa5, - 0x7, 0xff, 0x67, 0x6, 0x1f, 0xfd, 0x78, 0x34, - 0x1f, 0xfd, 0x55, 0x6, 0x50, 0x7f, 0xf5, 0x20, - 0xf4, 0x1f, 0xfd, 0x38, 0x3f, 0x41, 0xff, 0xd1, - 0x50, 0x7e, 0x50, 0x7f, 0xf4, 0x20, 0xff, 0x41, - 0xff, 0xcf, 0xc3, 0xff, 0x81, 0x87, 0xff, 0x35, - 0xf, 0xfe, 0x12, 0x1f, 0xfc, 0xc8, 0x3f, 0xf8, - 0x50, 0x7f, 0xf2, 0xf0, 0xff, 0xe2, 0x61, 0xff, - 0xc9, 0x83, 0xff, 0x8d, 0x7, 0xff, 0x1d, 0x41, - 0xff, 0xc6, 0x50, 0x7f, 0xf1, 0xa0, 0xff, 0xe4, - 0x41, 0xff, 0xc5, 0x83, 0xff, 0x95, 0x7, 0xff, - 0xd, 0x41, 0xff, 0xca, 0x50, 0x7f, 0xf0, 0xa0, - 0xff, 0xe6, 0x41, 0xff, 0xc1, 0x83, 0xff, 0x9d, - 0x7, 0xfc, 0xa0, 0xff, 0xe7, 0x28, 0x3f, 0xd0, - 0x7f, 0xf4, 0x20, 0xfe, 0xc3, 0xff, 0xa5, 0x87, - 0xd0, 0x7f, 0xf5, 0x20, 0xf2, 0x1f, 0xe8, 0x3f, - 0xd0, 0x7f, 0x90, 0xec, 0x3f, 0xad, 0xc3, 0xf6, - 0xf0, 0x7f, 0x61, 0x41, 0xfa, 0xd0, 0xff, 0xe1, - 0x3c, 0x1f, 0xa1, 0x41, 0xeb, 0x43, 0xff, 0x8c, - 0xf0, 0x79, 0x50, 0x75, 0xa1, 0xff, 0xca, 0x78, - 0x3a, 0xd, 0x68, 0x7f, 0xf3, 0x9e, 0xd, 0xb6, - 0x87, 0xff, 0x49, 0xe7, 0x24, 0x3f, 0xfa, 0xcc, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xde, 0xf, 0x61, 0xff, - 0xc4, - - /* U+E901 "" */ - 0xf, 0xff, 0x35, 0xc1, 0xff, 0xff, 0x34, 0x43, - 0xff, 0xfc, 0xe1, 0xff, 0xff, 0x3, 0x6, 0x43, - 0xff, 0xf9, 0x40, 0xe8, 0x3f, 0xff, 0x7a, 0x1c, - 0x87, 0xff, 0xe9, 0xc3, 0xec, 0x3f, 0xff, 0x34, - 0xf, 0xc8, 0x7f, 0xfe, 0x34, 0x3f, 0x41, 0xff, - 0xf7, 0x70, 0xff, 0x21, 0xff, 0xf6, 0xa0, 0x7f, - 0xa0, 0xff, 0xfb, 0x48, 0x7f, 0xc8, 0x7f, 0xfd, - 0x74, 0x3f, 0xe4, 0x3f, 0xfb, 0x2d, 0xe9, 0xf, - 0xfe, 0x4b, 0x87, 0xff, 0x6, 0xf, 0xfe, 0xbd, - 0xc8, 0x1b, 0x83, 0xff, 0x8d, 0x40, 0xff, 0xe0, - 0xa1, 0xff, 0xd7, 0xd0, 0xfc, 0xe1, 0xff, 0xc4, - 0xd0, 0xff, 0xe1, 0x41, 0xff, 0xd6, 0xc3, 0xff, - 0x81, 0x87, 0xff, 0x5, 0xc3, 0xff, 0xcd, 0x7, - 0xff, 0xa, 0xf, 0xfa, 0x81, 0xff, 0xc5, 0x83, - 0xff, 0xaa, 0x87, 0xff, 0x9, 0xf, 0xf6, 0x87, - 0xff, 0x19, 0xff, 0xf4, 0x87, 0xff, 0x22, 0xf, - 0xfe, 0x22, 0x1f, 0x38, 0x7f, 0xf4, 0xdb, 0xc8, - 0x7f, 0xf1, 0x50, 0xff, 0xe2, 0x61, 0xe6, 0xf, - 0xfe, 0xc5, 0xc1, 0xff, 0xd4, 0x43, 0xa8, 0x1f, - 0xfd, 0xb7, 0x83, 0xff, 0xae, 0xa0, 0xff, 0xef, - 0x3a, 0x1f, 0xfd, 0x4, 0x33, 0x7, 0xff, 0x82, - 0x81, 0xfe, 0x43, 0xff, 0x89, 0x87, 0x38, 0x7f, - 0xf8, 0x18, 0x3f, 0xb0, 0xff, 0xe2, 0x21, 0xf6, - 0x87, 0xff, 0x7d, 0xc3, 0xf2, 0x1f, 0xfc, 0x34, - 0x3f, 0xa8, 0x1f, 0xfc, 0x84, 0x32, 0x1f, 0xfc, - 0x6c, 0x3f, 0x61, 0xff, 0xc2, 0x83, 0xfc, 0xe1, - 0xff, 0xc6, 0xef, 0xd7, 0xd2, 0x1f, 0xfc, 0x28, - 0x3f, 0x41, 0xff, 0xc0, 0xc3, 0xff, 0x83, 0xa1, - 0xff, 0xce, 0x6e, 0xf, 0xfe, 0x2, 0x83, 0xe7, - 0xf, 0xe7, 0xf, 0xfe, 0x1c, 0x87, 0xff, 0xd, - 0xf, 0xfe, 0x3, 0xc1, 0xff, 0x41, 0xfd, 0xc8, - 0x67, 0x83, 0xff, 0x8b, 0x40, 0xff, 0xe1, 0x41, - 0xff, 0xc2, 0x70, 0xff, 0xb0, 0xfe, 0x6f, 0xd0, - 0x7f, 0xf2, 0x1c, 0x3f, 0xf8, 0x48, 0x7f, 0xf0, - 0xf4, 0x3f, 0xc8, 0x7f, 0xf6, 0x74, 0x3f, 0xf8, - 0x18, 0x7f, 0xf1, 0x20, 0xff, 0x41, 0xff, 0xda, - 0xa0, 0x7f, 0xc8, 0x7f, 0xf1, 0x70, 0xff, 0x21, - 0xff, 0xda, 0x70, 0xff, 0xa0, 0xff, 0xe2, 0xe1, - 0xfd, 0x7, 0xff, 0x73, 0x43, 0xf9, 0xf, 0xfe, - 0x32, 0x1f, 0xc8, 0x7f, 0xf7, 0x28, 0x1f, 0xd0, - 0x7f, 0xf1, 0x60, 0xfe, 0xc3, 0xff, 0xba, 0xc1, - 0xf9, 0xf, 0xfe, 0x34, 0x1f, 0x90, 0xff, 0xef, - 0x38, 0x7e, 0x43, 0xff, 0x8a, 0x87, 0xff, 0xa7, - 0x43, 0xd0, 0x7f, 0xf1, 0x90, 0xfc, 0x87, 0xff, - 0x82, 0x81, 0xe4, 0x3f, 0xf8, 0xb8, 0x7e, 0xc3, - 0xff, 0xc2, 0xe1, 0xd0, 0x7f, 0xf1, 0x50, 0xff, - 0xf6, 0x68, 0x7f, 0xf4, 0x90, 0xff, 0xf2, 0x50, - 0x3f, 0xff, 0xe1, 0x9e, 0xc3, 0xff, 0xfe, 0x12, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xd5, 0x87, 0xd0, 0x7f, - 0xff, 0x3f, 0xe4, - - /* U+E902 "" */ - 0xf, 0xfe, 0x7d, 0xc1, 0xff, 0xff, 0x2, 0x38, - 0x7f, 0xff, 0xc3, 0xb4, 0x3f, 0xff, 0xc8, 0x69, - 0xf, 0xff, 0xec, 0x1d, 0x40, 0xff, 0xfe, 0xa1, - 0xce, 0x1f, 0xff, 0xcc, 0x3e, 0xd0, 0xff, 0xfd, - 0x21, 0xfa, 0x81, 0xff, 0xfa, 0x83, 0xf3, 0x87, - 0xff, 0xe5, 0xf, 0xf6, 0x87, 0xff, 0xe2, 0xf, - 0xf5, 0x3, 0xff, 0xee, 0x87, 0xfc, 0xc1, 0xff, - 0xf7, 0x43, 0xfe, 0x70, 0xff, 0xfb, 0x41, 0xff, - 0xc1, 0xd0, 0xff, 0xe4, 0xb7, 0xa4, 0x3f, 0xfb, - 0x48, 0x7f, 0xf0, 0x68, 0x1f, 0xfc, 0x6b, 0x90, - 0x37, 0x7, 0xff, 0x62, 0xf, 0xfe, 0x13, 0x87, - 0xff, 0x13, 0x43, 0xf3, 0x87, 0xff, 0xa3, 0x43, - 0xff, 0x83, 0x87, 0xff, 0x3, 0xf, 0xfe, 0xb4, - 0x1f, 0xfc, 0x5a, 0x7, 0xfd, 0x7, 0xff, 0xa, - 0xf, 0xfe, 0x4b, 0x7f, 0xf9, 0xf, 0xfe, 0x33, - 0x87, 0xf9, 0xf, 0xfe, 0x12, 0x1f, 0xfc, 0x67, - 0xd2, 0x1f, 0xfd, 0x3d, 0xf, 0x90, 0xff, 0xe2, - 0x41, 0xff, 0xc3, 0xb8, 0x3f, 0xfb, 0x12, 0x1e, - 0xc3, 0xff, 0x88, 0x87, 0xff, 0x6, 0xd0, 0xff, - 0xed, 0xd0, 0x39, 0xf, 0xfe, 0x83, 0xa1, 0xff, - 0xde, 0x50, 0x7f, 0xf5, 0x28, 0x1f, 0xfe, 0x9, - 0xc, 0x87, 0xff, 0x3a, 0x43, 0xff, 0xc1, 0xa1, - 0xd8, 0x7f, 0xf1, 0x10, 0xfd, 0xa1, 0xff, 0xdf, - 0x70, 0xf9, 0xf, 0xfe, 0x26, 0x1f, 0x61, 0xff, - 0xc6, 0x43, 0x21, 0xff, 0xc8, 0xa0, 0x7f, 0x21, - 0xff, 0xc3, 0x43, 0xd0, 0x7f, 0xf0, 0x9b, 0xeb, - 0xf5, 0x87, 0xff, 0x1b, 0x43, 0xfd, 0x7, 0xff, - 0xb, 0xf, 0x28, 0x3f, 0xf8, 0x17, 0x21, 0xff, - 0xce, 0x70, 0xff, 0xe0, 0xe1, 0xff, 0xc0, 0x83, - 0xe8, 0x3f, 0xeb, 0x43, 0xff, 0x80, 0x87, 0xff, - 0xd, 0x83, 0xff, 0x87, 0xa1, 0xfd, 0xa1, 0xec, - 0x3f, 0xed, 0xf, 0xfe, 0x14, 0x1f, 0xfc, 0x2a, - 0x7, 0xff, 0x16, 0xd0, 0xcd, 0x87, 0xc8, 0x7f, - 0x9c, 0x3f, 0xf8, 0x68, 0x7f, 0xf0, 0xb4, 0x3f, - 0xf9, 0x17, 0xe9, 0xf, 0xd0, 0x7f, 0x30, 0x7f, - 0xf1, 0x30, 0xff, 0xe0, 0x38, 0x7f, 0xf6, 0x10, - 0xff, 0x41, 0xff, 0xc5, 0x43, 0xfe, 0xa0, 0x7f, - 0xf6, 0x60, 0xfe, 0xc3, 0xff, 0x8b, 0x7, 0xfd, - 0xa1, 0xff, 0xd9, 0x43, 0xf9, 0xf, 0xfe, 0x32, - 0x1f, 0xce, 0x1f, 0xfd, 0xbc, 0x3f, 0xa0, 0xff, - 0xe2, 0xc1, 0xfd, 0x40, 0xff, 0xee, 0x21, 0xfa, - 0xf, 0xfe, 0x32, 0x1f, 0xa4, 0x3f, 0xfc, 0xc8, - 0x7f, 0xf1, 0x50, 0xfd, 0xa1, 0xff, 0xdd, 0x43, - 0xf2, 0x1f, 0xfc, 0x68, 0x3c, 0xe1, 0xff, 0xdf, - 0xc3, 0xf6, 0x1f, 0xfc, 0x54, 0x3d, 0x40, 0xff, - 0xf4, 0xa1, 0xff, 0xc5, 0x83, 0xb4, 0x3f, 0xfc, - 0x28, 0x7f, 0xf4, 0x9c, 0x3f, 0xff, 0xe0, 0xa0, - 0x7f, 0xff, 0xfb, 0x43, 0xff, 0xfe, 0x4, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xa0, 0xfb, 0xf, 0xff, 0xdb, 0xff, - 0x7, 0xff, 0xf0, - - /* U+E903 "" */ - 0xe, 0xf4, 0x1f, 0xff, 0x4b, 0xc1, 0xfd, 0x81, - 0xc3, 0xff, 0xe5, 0xa0, 0xc3, 0xec, 0x3b, 0xf, - 0xff, 0x86, 0x1d, 0x87, 0x61, 0xf6, 0x1f, 0xfe, - 0xec, 0x3e, 0xc2, 0xc3, 0xfb, 0xf, 0xff, 0x66, - 0x1f, 0xd9, 0x87, 0xfd, 0x87, 0xff, 0xab, 0xf, - 0xfb, 0xf, 0xfe, 0xe, 0x1f, 0xfe, 0x8c, 0x3f, - 0xf8, 0x28, 0x7f, 0xf0, 0x70, 0xff, 0xf3, 0x61, - 0xff, 0xc1, 0x60, 0xff, 0xe1, 0x61, 0xff, 0xe4, - 0xc3, 0xff, 0x85, 0x18, 0x7f, 0xf0, 0xb0, 0xff, - 0xf1, 0x61, 0xff, 0xc2, 0xc2, 0xc3, 0xff, 0x85, - 0x87, 0xff, 0x83, 0xf, 0xfe, 0x16, 0x1d, 0x87, - 0xff, 0xb, 0xf, 0xfe, 0xf6, 0x1f, 0xfc, 0x2c, - 0x3e, 0xc3, 0xff, 0x85, 0x87, 0xff, 0x73, 0xf, - 0xfe, 0x16, 0x1f, 0xd8, 0x7f, 0xf0, 0xb0, 0xff, - 0xed, 0x61, 0xff, 0xc2, 0xc3, 0xfe, 0xc3, 0xff, - 0x85, 0x87, 0xff, 0x63, 0xf, 0xfe, 0x16, 0x1f, - 0xfc, 0x1c, 0x3f, 0xf8, 0x58, 0x7f, 0xf5, 0xb0, - 0xff, 0xe1, 0x61, 0xff, 0xc3, 0xc3, 0xff, 0x85, - 0x87, 0xff, 0x53, 0xf, 0xfe, 0x16, 0x1f, 0xfc, - 0x5c, 0x3f, 0xf8, 0x58, 0x7f, 0xf4, 0xb0, 0xff, - 0xe1, 0x61, 0xff, 0xc7, 0xc3, 0xff, 0x85, 0x87, - 0xff, 0x43, 0xf, 0xfe, 0x16, 0x1f, 0xfc, 0x9c, - 0x3f, 0xf8, 0x58, 0x7f, 0xf3, 0xb0, 0xff, 0xe1, - 0x61, 0xff, 0xcb, 0xc3, 0xff, 0x85, 0x87, 0xff, - 0x33, 0xf, 0xfe, 0x16, 0x1f, 0xfc, 0xdc, 0x3f, - 0xf8, 0x58, 0x7f, 0xf2, 0xb0, 0xff, 0xe1, 0x61, - 0xff, 0xcf, 0xc3, 0xff, 0x85, 0x87, 0xff, 0x23, - 0xf, 0xfe, 0x16, 0x1f, 0xfd, 0x1c, 0x3f, 0xf8, - 0x58, 0x7f, 0xf1, 0xb0, 0xff, 0xe1, 0x61, 0xff, - 0xd3, 0xc3, 0xff, 0x85, 0x87, 0xff, 0x13, 0xf, - 0xfe, 0x16, 0x1f, 0xfd, 0x5c, 0x3f, 0xf8, 0x58, - 0x7f, 0xf0, 0xb0, 0xff, 0xe1, 0x61, 0xff, 0xd7, - 0xc3, 0xff, 0x85, 0x87, 0xff, 0x3, 0xf, 0xfe, - 0x16, 0x1f, 0xfd, 0x9c, 0x3f, 0xf8, 0x58, 0x7f, - 0xb0, 0xff, 0xe1, 0x61, 0xff, 0xdb, 0xc3, 0xff, - 0x85, 0x87, 0xec, 0x3f, 0xf8, 0x58, 0x7f, 0xf7, - 0x70, 0xff, 0xe1, 0x61, 0xec, 0x3f, 0xf8, 0x58, - 0x7f, 0xf7, 0xf0, 0xff, 0xe1, 0x61, 0xb0, 0xff, - 0xe1, 0x61, 0xff, 0xe1, 0xc3, 0xff, 0x85, 0xf8, - 0x3f, 0xf8, 0x58, 0x7f, 0xf8, 0xf0, 0xff, 0xe9, - 0x61, 0xff, 0xe5, 0xc3, 0xff, 0xa1, 0x87, 0xff, - 0x9f, 0xf, 0xfe, 0x76, 0x1f, 0xfe, 0x9c, 0x3f, - 0xf9, 0x98, 0x7f, 0xfa, 0xf0, 0xff, 0xe5, 0x61, - 0xff, 0xed, 0xc3, 0xff, 0x91, 0x87, 0xff, 0xbf, - 0xf, 0xfe, 0x36, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xf8, 0x7f, 0xf1, - 0xb0, 0xff, 0xf7, 0xe1, 0xff, 0xc8, 0xc3, 0xff, - 0xdb, 0x87, 0xff, 0x2b, 0xf, 0xff, 0x5e, 0x1f, - 0xfc, 0xcc, 0x3f, 0xfd, 0x38, 0x7f, 0xf3, 0xb0, - 0xff, 0xf3, 0xe1, 0xff, 0xd0, 0xc3, 0xff, 0xcb, - 0x87, 0xff, 0x4b, 0xf, 0xff, 0x1e, 0x1f, 0xfc, - 0x2f, 0xc1, 0xff, 0xc2, 0xc3, 0xff, 0xc3, 0x87, - 0xff, 0xb, 0xd, 0x87, 0xff, 0xb, 0xf, 0xfe, - 0xfe, 0x1f, 0xfc, 0x2c, 0x3d, 0x87, 0xff, 0xb, - 0xf, 0xfe, 0xee, 0x1f, 0xfc, 0x2c, 0x3f, 0x61, - 0xff, 0xc2, 0xc3, 0xff, 0xb7, 0x87, 0xff, 0xb, - 0xf, 0xf6, 0x1f, 0xfc, 0x2c, 0x3f, 0xfb, 0x38, - 0x7f, 0xf0, 0xb0, 0xff, 0xe0, 0x61, 0xff, 0xc2, - 0xc3, 0xff, 0xaf, 0x87, 0xff, 0xb, 0xf, 0xfe, - 0x16, 0x1f, 0xfc, 0x2c, 0x3f, 0xfa, 0xb8, 0x7f, - 0xf0, 0xb0, 0xff, 0xe2, 0x61, 0xff, 0xc2, 0xc3, - 0xff, 0xa7, 0x87, 0xff, 0xb, 0xf, 0xfe, 0x36, - 0x1f, 0xfc, 0x2c, 0x3f, 0xfa, 0x38, 0x7f, 0xf0, - 0xb0, 0xff, 0xe4, 0x61, 0xff, 0xc2, 0xc3, 0xff, - 0x9f, 0x87, 0xff, 0xb, 0xf, 0xfe, 0x56, 0x1f, - 0xfc, 0x2c, 0x3f, 0xf9, 0xb8, 0x7f, 0xf0, 0xb0, - 0xff, 0xe6, 0x61, 0xff, 0xc2, 0xc3, 0xff, 0x97, - 0x87, 0xff, 0xb, 0xf, 0xfe, 0x76, 0x1f, 0xfc, - 0x2c, 0x3f, 0xf9, 0x38, 0x7f, 0xf0, 0xb0, 0xff, - 0xe8, 0x61, 0xff, 0xc2, 0xc3, 0xff, 0x8f, 0x87, - 0xff, 0xb, 0xf, 0xfe, 0x96, 0x1f, 0xfc, 0x2c, - 0x3f, 0xf8, 0xb8, 0x7f, 0xf0, 0xb0, 0xff, 0xea, - 0x61, 0xff, 0xc2, 0xc3, 0xff, 0x87, 0x87, 0xff, - 0xb, 0xf, 0xfe, 0xb6, 0x1f, 0xfc, 0x2c, 0x3f, - 0xf8, 0x38, 0x7f, 0xf0, 0xb0, 0xff, 0xec, 0x61, - 0xff, 0xc2, 0xc3, 0xfe, 0xc3, 0xff, 0x85, 0x87, - 0xff, 0x6b, 0xf, 0xfe, 0x16, 0x1f, 0xd8, 0x7f, - 0xf0, 0xb0, 0xff, 0xee, 0x61, 0xff, 0xc2, 0xc3, - 0xec, 0x3f, 0xf8, 0x58, 0x7f, 0xf7, 0xb0, 0xff, - 0xe1, 0x61, 0xd8, 0x7f, 0xf0, 0xb0, 0xff, 0xf0, - 0x61, 0xff, 0xc2, 0xc2, 0xc3, 0xff, 0x85, 0x87, - 0xff, 0x8b, 0xf, 0xfe, 0x16, 0x41, 0xff, 0xc2, - 0xc3, 0xff, 0xc9, 0x87, 0xff, 0xa, 0x43, 0xff, - 0x83, 0x87, 0xff, 0x9b, 0xf, 0xfe, 0xa, 0x1f, - 0xfc, 0x1c, 0x3f, 0xfd, 0x18, 0x7f, 0xf0, 0x70, - 0xff, 0xb0, 0xff, 0xf5, 0x61, 0xff, 0x66, 0x1f, - 0xd8, 0x7f, 0xfb, 0x30, 0xfe, 0xc2, 0xc3, 0xec, - 0x3f, 0xfd, 0xd8, 0x7d, 0x87, 0x61, 0xd8, 0x7f, - 0xfc, 0x30, 0xec, 0x3e, 0xc0, 0xe1, 0xff, 0xf2, - 0xd0, 0x61, 0x80, - - /* U+E904 "" */ - 0xf, 0xfe, 0x62, 0x83, 0xff, 0xc9, 0x40, 0xff, - 0xf1, 0xe0, 0xc3, 0xff, 0xc3, 0x6, 0x83, 0xff, - 0xbe, 0xa0, 0xca, 0xf, 0xfe, 0xeb, 0x7, 0xa4, - 0x3f, 0xfb, 0x90, 0x7e, 0x83, 0xff, 0xb7, 0x87, - 0xfb, 0xf, 0xfe, 0xcc, 0x1f, 0xfc, 0x8, 0x3f, - 0xfa, 0xea, 0xf, 0xfe, 0x2, 0x83, 0xff, 0xad, - 0x7, 0xff, 0xa, 0xf, 0xfe, 0xae, 0x1f, 0xfc, - 0x4c, 0x3f, 0xfa, 0x70, 0x7f, 0xf1, 0xa0, 0xff, - 0xe8, 0xa8, 0x3f, 0xf8, 0xca, 0xf, 0xfe, 0x84, - 0x1f, 0xfc, 0x88, 0x3f, 0xf9, 0xf8, 0x7f, 0xf2, - 0xb0, 0xff, 0xe6, 0xc1, 0xff, 0xcc, 0x83, 0xff, - 0x97, 0x21, 0xff, 0xcc, 0x60, 0xff, 0xe4, 0xa8, - 0x3f, 0xf9, 0xca, 0xf, 0xfe, 0x44, 0x1f, 0xfd, - 0x8, 0x3f, 0xf8, 0xf8, 0x7f, 0xf4, 0xb0, 0xff, - 0xe2, 0xc1, 0xff, 0xd4, 0x83, 0xff, 0x86, 0xa0, - 0xff, 0xea, 0x28, 0x3f, 0xf8, 0x50, 0x7f, 0xf5, - 0xa0, 0xff, 0xe0, 0xe1, 0xff, 0xd8, 0xc3, 0xfe, - 0x83, 0xff, 0xb5, 0x7, 0xf2, 0x83, 0xff, 0xb4, - 0xa0, 0xf9, 0x83, 0xff, 0xb9, 0x21, 0xe8, 0x3f, - 0xf8, 0x17, 0xa0, 0xff, 0x5e, 0x83, 0xff, 0x81, - 0x7, 0x61, 0xff, 0x5a, 0x4, 0x3f, 0xc8, 0x1e, - 0xf, 0xfb, 0xa, 0xf, 0xf5, 0xa1, 0xff, 0xc8, - 0x78, 0x3f, 0xd0, 0xa0, 0xf9, 0xf2, 0x1f, 0xfc, - 0xc7, 0xc8, 0x7c, 0xa8, 0x3c, 0xf0, 0x7f, 0xf4, - 0xad, 0xf, 0x41, 0xd7, 0x7, 0xff, 0x5a, 0xe0, - 0xe8, 0x16, 0x87, 0xff, 0x69, 0xe0, 0x4f, 0x90, - 0xff, 0xef, 0x3e, 0x43, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xf9, 0x8, - 0x7e, 0x43, 0xff, 0xb9, 0x21, 0xe6, 0xf, 0xfe, - 0x40, - - /* U+E905 "" */ - 0xf, 0xfe, 0x9b, 0xe4, 0x3f, 0xfe, 0xb4, 0x4, - 0x1f, 0xff, 0x4d, 0xf, 0xff, 0xb3, 0x87, 0x41, - 0xff, 0xf1, 0x60, 0xf2, 0x1f, 0xff, 0xa, 0x7, - 0xa0, 0xff, 0xf8, 0x68, 0x7c, 0x87, 0xff, 0xb9, - 0xc3, 0xf2, 0x1f, 0xfe, 0xea, 0x7, 0xf4, 0x1f, - 0xfe, 0xdd, 0xf, 0xe4, 0x3f, 0xfd, 0x8e, 0x1f, - 0xf4, 0x1f, 0xfe, 0xb6, 0xf, 0xf9, 0xf, 0xff, - 0x5d, 0x3, 0xff, 0x81, 0x87, 0xff, 0xab, 0x43, - 0xff, 0x82, 0x87, 0xff, 0xa1, 0xc3, 0xff, 0x85, - 0x7, 0xff, 0xa2, 0x81, 0xff, 0xc3, 0x43, 0xff, - 0xcf, 0xa1, 0xff, 0xc3, 0x83, 0xff, 0xcc, 0xe1, - 0xff, 0xc5, 0x43, 0xff, 0xcb, 0x40, 0xff, 0xfb, - 0xc8, 0x7f, 0xf1, 0xd0, 0xff, 0xf1, 0xe8, 0x7f, - 0xf2, 0x2f, 0xff, 0xe1, 0x51, 0xf, 0xfe, 0x83, - 0x87, 0xff, 0x65, 0x57, 0xa4, 0x3f, 0xf9, 0x74, - 0xf, 0xfe, 0xfb, 0x70, 0x7f, 0xf2, 0x34, 0x3f, - 0xfc, 0x6f, 0x7, 0xff, 0x11, 0xc3, 0xff, 0xce, - 0xf0, 0x7f, 0xfe, 0x5c, 0x3f, 0xf8, 0x2e, 0x1f, - 0xfe, 0xbd, 0xf, 0xfe, 0xe, 0x1f, 0xfe, 0xba, - 0x7, 0xff, 0x7, 0x43, 0xff, 0xd4, 0xc1, 0xff, - 0xc1, 0xa0, 0x7f, 0xfa, 0x98, 0x3f, 0xf8, 0x2e, - 0x1f, 0xfc, 0x9b, 0xff, 0xf8, 0x52, 0x1f, 0xfc, - 0x46, 0xf, 0xfe, 0x16, 0x87, 0xff, 0x1d, 0xf, - 0xfe, 0x13, 0x79, 0xf, 0xfe, 0x12, 0x83, 0xff, - 0x85, 0x40, 0xff, 0xec, 0xda, 0x1f, 0xfc, 0x18, - 0x3f, 0xf8, 0x6e, 0x1f, 0xfc, 0x58, 0x3f, 0xf9, - 0x16, 0x1f, 0xfc, 0x1c, 0x3f, 0xf8, 0x9a, 0x1f, - 0xfc, 0x34, 0x3f, 0xf9, 0x5a, 0x1f, 0xfc, 0x4, - 0x3f, 0xf8, 0x94, 0xf, 0xfe, 0x1a, 0x1f, 0xfc, - 0xaa, 0x7, 0xfd, 0x7, 0xff, 0x15, 0xc3, 0xff, - 0x85, 0x7, 0xff, 0x2d, 0x83, 0xfe, 0x83, 0xff, - 0x8d, 0xa1, 0xff, 0xc1, 0x43, 0xff, 0x96, 0xa0, - 0xff, 0x21, 0xff, 0xc7, 0x90, 0xff, 0xe0, 0x41, - 0xff, 0xcc, 0x83, 0xfe, 0x43, 0xff, 0x8f, 0x40, - 0xff, 0xec, 0xe1, 0xfe, 0x83, 0xff, 0x90, 0xe1, - 0xff, 0x41, 0xff, 0xcd, 0x43, 0xff, 0xa9, 0xa1, - 0xfc, 0x87, 0xff, 0x36, 0xf, 0xf4, 0x1f, 0xfc, - 0xaa, 0x7, 0xf4, 0x1f, 0xfc, 0xd4, 0x3f, 0x90, - 0xff, 0xe5, 0xb8, 0x7e, 0x43, 0xff, 0x9b, 0x7, - 0xff, 0x5f, 0x43, 0xe8, 0x3f, 0xfa, 0xe8, 0x7f, - 0xf3, 0x68, 0x1e, 0x43, 0xff, 0x9a, 0x87, 0xff, - 0x61, 0xc3, 0xc8, 0x7f, 0xf3, 0x30, 0xfe, 0xc3, - 0xff, 0xa1, 0xa1, 0xa0, 0xff, 0xfa, 0x48, 0x7f, - 0xf4, 0x10, 0xfe, 0x43, 0xff, 0xa5, 0x40, 0x61, - 0xff, 0xf6, 0x7c, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0x85, 0xf, 0xff, 0x86, 0x1f, 0x30, - - /* U+E906 "" */ - 0xf, 0xfe, 0xbb, 0xe4, 0x3f, 0xfe, 0xd0, 0x28, - 0x1f, 0xff, 0x96, 0xf, 0xff, 0xa4, 0x19, 0xc3, - 0xff, 0xe6, 0x87, 0xb4, 0x3f, 0xfe, 0x48, 0x7a, - 0x81, 0xff, 0xf1, 0x83, 0xe7, 0xf, 0xff, 0x8a, - 0x1f, 0xb4, 0x3f, 0xfd, 0xf0, 0x7f, 0x50, 0x3f, - 0xfd, 0xe8, 0x7f, 0x30, 0x7f, 0xfb, 0xb0, 0xff, - 0x38, 0x7f, 0xfb, 0x50, 0xff, 0xe0, 0x68, 0x7f, - 0xfb, 0x20, 0xff, 0xe0, 0x50, 0x3f, 0xfd, 0x68, - 0x7f, 0xf0, 0x5c, 0x3f, 0xfd, 0x70, 0x7f, 0xf0, - 0xb4, 0x3f, 0xfd, 0x28, 0x7f, 0xf0, 0xe8, 0x1f, - 0xfe, 0x94, 0x3f, 0xf8, 0x6c, 0x1f, 0xfe, 0x88, - 0x3f, 0xf8, 0x8e, 0x1f, 0xff, 0xad, 0xf, 0xff, - 0x2c, 0x1f, 0xfc, 0x7a, 0x7, 0xff, 0x49, 0x57, - 0xff, 0xf0, 0xd0, 0xff, 0xe4, 0x38, 0x7f, 0xf3, - 0x9b, 0xa2, 0x1f, 0xfd, 0xad, 0xf, 0xfe, 0x55, - 0xc8, 0x7f, 0xf7, 0xe8, 0x1f, 0xfc, 0x7b, 0x43, - 0xff, 0xc6, 0xc1, 0xff, 0xc4, 0xb4, 0x3f, 0xfc, - 0xce, 0x1f, 0xfc, 0x17, 0x43, 0xff, 0xd4, 0x87, - 0xfc, 0xc1, 0xff, 0xeb, 0xd0, 0xff, 0x50, 0x3f, - 0xfd, 0x4e, 0x1f, 0xf4, 0x87, 0xff, 0xaa, 0x81, - 0xff, 0x48, 0x7f, 0xfa, 0xb4, 0x3f, 0xe9, 0xf, - 0xfe, 0x23, 0x7f, 0xff, 0x9, 0xf, 0xfe, 0x43, - 0x87, 0xff, 0x1, 0x41, 0xff, 0xc2, 0xbd, 0x21, - 0xff, 0xc2, 0x83, 0xff, 0x8e, 0xc1, 0xff, 0xc1, - 0x83, 0xff, 0x83, 0x68, 0x7f, 0xf6, 0x68, 0x1f, - 0xfc, 0x1c, 0x3f, 0xf8, 0xe, 0x87, 0xff, 0x22, - 0xf, 0xfe, 0x2e, 0x87, 0xff, 0x6, 0xf, 0xfe, - 0x3, 0x7, 0xff, 0x29, 0xf, 0xfe, 0x1b, 0x87, - 0xff, 0xd, 0xf, 0xfa, 0x81, 0xff, 0xca, 0x83, - 0xff, 0x87, 0x40, 0xff, 0xe1, 0xc1, 0xff, 0x48, - 0x7f, 0xf2, 0xd0, 0xff, 0xe1, 0x68, 0x7f, 0xf1, - 0x10, 0xff, 0x28, 0x3f, 0xf9, 0x68, 0x7f, 0xf0, - 0x5c, 0x3f, 0xf8, 0xb0, 0x7f, 0xd0, 0x7f, 0xf3, - 0x20, 0xff, 0xe0, 0x50, 0x3f, 0xf8, 0xc8, 0x7f, - 0xb0, 0xff, 0xe6, 0x21, 0xff, 0xc0, 0xd0, 0xff, - 0xe3, 0x21, 0xfe, 0x43, 0xff, 0x9b, 0x7, 0xf9, - 0xc3, 0xff, 0x91, 0x87, 0xfa, 0xf, 0xfe, 0xbb, - 0x7, 0xff, 0x25, 0xf, 0xe4, 0x3f, 0xf9, 0xb0, - 0x7f, 0x50, 0x3f, 0xfa, 0x90, 0x7f, 0xf3, 0x50, - 0xfd, 0xa1, 0xff, 0xca, 0x43, 0xff, 0xaf, 0x7, - 0xce, 0x1f, 0xfc, 0xcc, 0x3f, 0x90, 0xff, 0xe6, - 0xa1, 0xea, 0x7, 0xff, 0x35, 0xf, 0xec, 0x3f, - 0xf9, 0x90, 0x7b, 0x43, 0xff, 0xb0, 0x87, 0xff, - 0x31, 0xc, 0xe1, 0xff, 0xf7, 0xa0, 0x7f, 0xfd, - 0x20, 0x68, 0x7f, 0xfd, 0x5f, 0x7, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xfc, 0x68, 0x7e, 0x43, 0xff, 0xe1, 0x21, 0xe6, - 0xf, 0xff, 0x80, - - /* U+E907 "" */ - 0xf, 0xff, 0x67, 0xfd, 0x5c, 0xb8, 0x3f, 0xfc, - 0x4b, 0xd5, 0xbf, 0xfa, 0xb2, 0xf0, 0x7f, 0xf2, - 0x50, 0xff, 0xe6, 0x2e, 0xae, 0xff, 0xd2, 0x1f, - 0xf6, 0x1f, 0xfd, 0xd6, 0x43, 0xff, 0xd5, 0x87, - 0xf9, 0xf, 0xfe, 0xfc, 0x1f, 0xfe, 0x87, 0xf, - 0xfe, 0x2, 0x1f, 0xfd, 0xab, 0x83, 0xff, 0x83, - 0x87, 0xff, 0x62, 0xd0, 0xff, 0xf3, 0x5a, 0x1f, - 0xfc, 0x54, 0x3f, 0xfa, 0x6f, 0x90, 0xff, 0xf2, - 0xbc, 0x1f, 0xfc, 0xb4, 0x3f, 0xf9, 0xcf, 0x7, - 0xff, 0x37, 0xf, 0xfe, 0x65, 0xc1, 0xff, 0xe7, - 0x50, 0x7f, 0xf4, 0x50, 0xff, 0xff, 0x84, 0x87, - 0xff, 0x4d, 0xf, 0xfe, 0x5e, 0x87, 0xff, 0x47, - 0xf, 0xfe, 0x64, 0x87, 0xff, 0x41, 0xf, 0xfe, - 0x6d, 0x3, 0xff, 0xd4, 0xe1, 0xff, 0xeb, 0xc3, - 0xff, 0x9c, 0x87, 0xff, 0x43, 0x43, 0xff, 0x99, - 0x87, 0xff, 0x46, 0x43, 0xff, 0x96, 0x87, 0xff, - 0x1, 0xf0, 0x7f, 0xf0, 0xe8, 0x1f, 0xfd, 0x78, - 0x1a, 0x1f, 0xfc, 0x27, 0xf, 0xfe, 0xd4, 0x87, - 0xff, 0xf, 0xf, 0xfe, 0x4a, 0x1f, 0xe4, 0x3a, - 0x81, 0xff, 0xc3, 0xd0, 0xff, 0xe3, 0xe1, 0xfe, - 0x83, 0xce, 0x1f, 0xfc, 0x39, 0xf, 0xfe, 0x32, - 0x1f, 0xfc, 0x7c, 0x3f, 0xf8, 0x72, 0x1f, 0xfc, - 0xf4, 0x3f, 0xda, 0x1f, 0xfc, 0x29, 0xf, 0xfe, - 0x76, 0x1f, 0xf4, 0x87, 0xff, 0xa, 0xf, 0xfe, - 0x2a, 0x1f, 0x90, 0xff, 0xe0, 0x50, 0x3f, 0xf8, - 0x58, 0x7f, 0xf1, 0x30, 0xf9, 0xf, 0xfe, 0x13, - 0x7, 0xff, 0xa, 0xf, 0xfe, 0x1a, 0x1f, 0x61, - 0xff, 0xc3, 0x70, 0xff, 0xe0, 0xa8, 0x3f, 0xf9, - 0x48, 0x7f, 0xf1, 0x70, 0xff, 0xe0, 0xc1, 0xff, - 0xdd, 0xc3, 0xff, 0x83, 0x7, 0xff, 0x9, 0xe, - 0x43, 0xff, 0x91, 0x87, 0xff, 0x1, 0xf, 0xfe, - 0x16, 0x1d, 0x87, 0xff, 0x27, 0xf, 0xfe, 0x4, - 0x1f, 0xfc, 0x14, 0x39, 0xf, 0xfe, 0x56, 0x1f, - 0xf2, 0x1f, 0xfc, 0x64, 0x3f, 0xf9, 0x90, 0x7f, - 0xd0, 0x7f, 0xf1, 0x70, 0xff, 0xe6, 0x21, 0xff, - 0x21, 0xff, 0xc1, 0x82, 0x43, 0xff, 0x9b, 0x87, - 0xfd, 0x7, 0xff, 0x1, 0xa6, 0x1f, 0xfc, 0xf4, - 0x3f, 0xc8, 0x7f, 0xf0, 0x54, 0x1f, 0xfd, 0x8, - 0x3f, 0xfd, 0x68, 0x7f, 0xa0, 0xff, 0xef, 0xe1, - 0xfe, 0x43, 0xff, 0xbe, 0x87, 0xff, 0xad, 0xf, - 0xf2, 0x1f, 0xfd, 0xfc, 0x3f, 0xfd, 0x48, 0x7f, - 0xb0, 0xff, 0xf5, 0x21, 0xff, 0xff, 0xf, 0xfe, - 0x62, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0x32, 0xf, 0xe4, 0x3f, 0xfc, 0x32, - 0x1e, 0x60, - - /* U+E908 "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xf1, 0x17, 0xab, 0x7f, - 0xc1, 0xff, 0xc8, 0x5e, 0xad, 0xff, 0xd5, 0xcb, - 0x83, 0xff, 0x8a, 0xdf, 0xfa, 0xb9, 0x70, 0x7f, - 0xf5, 0xe4, 0x3f, 0xfb, 0xa8, 0x7f, 0x21, 0xff, - 0xdf, 0xc3, 0xf9, 0xf, 0xfe, 0xfa, 0x1f, 0xed, - 0xf, 0xff, 0x4d, 0xc1, 0xff, 0xe9, 0x78, 0x3f, - 0xfb, 0x8, 0x7f, 0xf1, 0x1e, 0x43, 0xff, 0xab, - 0x87, 0xff, 0x19, 0xb4, 0x3f, 0xfa, 0x68, 0x7f, - 0xf2, 0x6d, 0xf, 0xff, 0x4d, 0xc1, 0xff, 0xe9, - 0x78, 0x3f, 0xf9, 0x88, 0x7f, 0xf4, 0x18, 0x3f, - 0xf9, 0x78, 0x7f, 0xfa, 0x50, 0xff, 0xe8, 0xc1, - 0xff, 0xe7, 0x70, 0xff, 0xf3, 0xb0, 0x7f, 0xf3, - 0x10, 0xff, 0xe7, 0x50, 0x3f, 0xf9, 0xb8, 0x7f, - 0xf3, 0x64, 0x3f, 0xf9, 0xc8, 0x7f, 0xf3, 0x34, - 0x3f, 0xfc, 0xf8, 0x7f, 0xf9, 0xdc, 0x3f, 0xfa, - 0x28, 0x7f, 0xf2, 0x68, 0x1f, 0xfc, 0x3f, 0x21, - 0xff, 0xc0, 0xc3, 0xff, 0x91, 0x21, 0xff, 0xc3, - 0xc1, 0x7, 0xff, 0x1, 0xf, 0xfe, 0x3e, 0x87, - 0xff, 0x9, 0xc3, 0x21, 0xff, 0xd2, 0xc3, 0xff, - 0x87, 0x40, 0xec, 0x3f, 0xfa, 0x38, 0x7f, 0xf0, - 0xe4, 0x3c, 0x87, 0xf9, 0xf, 0xfe, 0x2e, 0x1f, - 0xfc, 0x3d, 0xf, 0xfe, 0x36, 0x1f, 0xfc, 0x4c, - 0x3f, 0xf8, 0x78, 0x7f, 0x90, 0xfe, 0x43, 0xff, - 0x87, 0x87, 0xff, 0x9, 0xc3, 0xfe, 0x83, 0xff, - 0x99, 0x7, 0xff, 0x9, 0x83, 0xff, 0xb1, 0x21, - 0xff, 0xc1, 0xa0, 0x7f, 0xf0, 0x90, 0xf9, 0xf, - 0xfe, 0x12, 0x1f, 0xfc, 0x19, 0xf, 0xfe, 0x1e, - 0x1f, 0x61, 0xff, 0xc1, 0xc3, 0xff, 0x83, 0xa1, - 0xff, 0xc4, 0x43, 0xe4, 0x3f, 0xf8, 0x10, 0x7f, - 0xf0, 0x70, 0xff, 0xe3, 0xa1, 0xff, 0xc7, 0x43, - 0xff, 0x81, 0x87, 0xff, 0x23, 0xf, 0xfe, 0x34, - 0x1f, 0xfc, 0xc, 0x3f, 0xf9, 0x28, 0x72, 0x1f, - 0xfc, 0x4, 0x3f, 0xe8, 0x3f, 0xfa, 0x18, 0x7f, - 0xd0, 0x7f, 0xca, 0xf, 0xfe, 0x5a, 0x19, 0xf, - 0xf9, 0xf, 0xfa, 0xf, 0xfe, 0x66, 0x1f, 0xfc, - 0x34, 0x3f, 0xe8, 0x3f, 0xf9, 0xa8, 0x48, 0x7f, - 0xd0, 0x7f, 0xc8, 0x7f, 0xf3, 0xba, 0x83, 0xff, - 0x95, 0x7, 0xff, 0x41, 0x41, 0xff, 0x21, 0xff, - 0x21, 0xff, 0xdd, 0xc3, 0xfd, 0x7, 0xff, 0x79, - 0xf, 0xf2, 0x1f, 0xfe, 0x84, 0x3f, 0xfb, 0xc8, - 0x7f, 0xb0, 0xff, 0xef, 0x61, 0xfe, 0x43, 0xff, - 0xfe, 0x1f, 0xfc, 0x94, 0x3f, 0xff, 0xe1, 0xff, - 0xde, 0x43, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, - 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xe4, - 0x3f, 0xb0, 0xff, 0xef, 0xd0, 0x3e, 0x90, 0xff, - 0xef, 0x80, - - /* U+E909 "" */ - 0xf, 0xfe, 0xfb, 0x7f, 0xe9, 0xf, 0xff, 0x93, - 0x7a, 0x43, 0xf3, 0x7a, 0x43, 0xff, 0xd8, 0xf2, - 0x1f, 0xfc, 0x46, 0xe0, 0xff, 0xf4, 0x3c, 0x1f, - 0xfc, 0xa7, 0x83, 0xff, 0xc8, 0xf0, 0x7f, 0xf3, - 0x9d, 0xf, 0xff, 0xd, 0x3, 0xff, 0xa5, 0x40, - 0xff, 0xef, 0xe8, 0x7f, 0xf5, 0x1c, 0x3f, 0xfb, - 0xb8, 0x7f, 0xf6, 0x34, 0x3f, 0xfb, 0x58, 0x7f, - 0xf6, 0xa4, 0x3f, 0xfb, 0x18, 0x7f, 0xf7, 0x20, - 0xff, 0xeb, 0xe1, 0xff, 0xc5, 0x55, 0x72, 0x1f, - 0xfc, 0x5c, 0x3f, 0xfa, 0xb0, 0x7f, 0xf0, 0xdf, - 0x51, 0x7a, 0xf2, 0x1f, 0xfc, 0x3c, 0x3f, 0xfa, - 0x6a, 0xf, 0xfe, 0xb, 0xc1, 0xff, 0xc0, 0xb4, - 0x3f, 0xf8, 0x50, 0x7f, 0xf4, 0xa0, 0xff, 0xe0, - 0xf0, 0x7f, 0xf1, 0x2d, 0xf, 0xfe, 0x2, 0x1f, - 0xfd, 0x18, 0x3f, 0xf8, 0xe, 0x1f, 0xfc, 0x89, - 0xf, 0xfe, 0x6, 0x1f, 0xfd, 0x4, 0x3f, 0xea, - 0x7, 0xff, 0x2a, 0x81, 0xff, 0xc0, 0x43, 0xff, - 0x9d, 0x7, 0xfd, 0x21, 0xff, 0xcc, 0x60, 0xff, - 0xa0, 0xff, 0xe7, 0x21, 0xfe, 0x50, 0x7f, 0xf3, - 0x94, 0x1f, 0xf2, 0x1f, 0xfc, 0xc8, 0x3f, 0xe8, - 0x3f, 0xfa, 0x10, 0x7f, 0xd8, 0x7f, 0xf3, 0x10, - 0xff, 0x41, 0xff, 0xd2, 0x83, 0xfc, 0x87, 0xff, - 0x5d, 0xf, 0xfe, 0x92, 0x83, 0xfc, 0x87, 0xff, - 0x29, 0xf, 0xf4, 0x1f, 0xfd, 0x4c, 0x3f, 0xd8, - 0x7f, 0xf2, 0xb0, 0xff, 0x21, 0xff, 0xd4, 0x43, - 0xfc, 0x87, 0xff, 0x29, 0xf, 0xe4, 0x3f, 0xfa, - 0xc8, 0x7f, 0xf7, 0xb0, 0xff, 0xeb, 0x61, 0xff, - 0xff, 0x2, 0x1f, 0xe4, 0x3f, 0xfa, 0x68, 0x7f, - 0xfd, 0x90, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, - 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, - 0x49, 0xf4, 0x1f, 0xfd, 0xf6, 0xf0, 0x7f, 0xf3, - 0xe0, 0x3c, 0x1f, 0xfd, 0xb7, 0x90, 0x41, 0xff, - 0xd3, 0x78, 0x3f, 0xfa, 0xef, 0x7, 0x61, 0xff, - 0xce, 0x83, 0xcf, 0x90, 0xff, 0xe9, 0x5c, 0x1f, - 0x21, 0xff, 0xce, 0x50, 0x7e, 0xb4, 0x3f, 0xf9, - 0xd6, 0x87, 0xec, 0x3f, 0xfa, 0x10, 0x7f, 0xad, - 0xf, 0xfe, 0x55, 0xa1, 0xfd, 0x7, 0xff, 0x4b, - 0xf, 0xfa, 0xe0, 0xb0, 0xff, 0x20, 0x7c, 0x87, - 0xf9, 0x41, 0xff, 0xd3, 0x83, 0xff, 0x80, 0xfc, - 0x87, 0xfa, 0xf4, 0x1f, 0xfc, 0x18, 0x3f, 0xfa, - 0x8c, 0x1f, 0xfd, 0xec, 0x3f, 0xfa, 0xca, 0xf, - 0xfe, 0xe4, 0x1f, 0xfd, 0x88, 0x3f, 0xfb, 0x72, - 0x1f, 0xfd, 0x9c, 0x3f, 0xfb, 0x2a, 0xf, 0xfe, - 0xdc, 0x1f, 0xfd, 0x88, 0x3f, 0xfb, 0x8a, 0xf, - 0xfe, 0xb6, 0x1f, 0xfd, 0xe8, 0x3f, 0xfa, 0xb0, - 0x7f, 0xf8, 0x30, 0xff, 0xe9, 0xa8, 0x3f, 0xfc, - 0x30, 0x7f, 0xf4, 0xa0, 0xff, 0xf1, 0x28, 0x3f, - 0xfa, 0x18, 0x7f, 0xf9, 0x24, 0x3f, 0xf9, 0xd0, - 0x7f, 0xf9, 0xa0, 0xff, 0xe6, 0xa8, 0x3f, 0xfc, - 0xf8, 0x7f, 0xf3, 0x20, 0xff, 0xf4, 0xc1, 0xff, - 0xca, 0xc3, 0xff, 0xd4, 0xa0, 0xff, 0xe4, 0x61, - 0xff, 0xec, 0x83, 0xff, 0x8f, 0x7, 0xff, 0xbb, - 0xf, 0xfe, 0x2a, 0x83, 0xff, 0xdf, 0x7, 0xff, - 0x12, 0xf, 0xff, 0x82, 0x83, 0xff, 0x85, 0x87, - 0xff, 0xca, 0xf, 0xfe, 0xc, 0x1f, 0xff, 0x4c, - 0x3f, 0xe5, 0x7, 0xff, 0xd6, 0xf, 0xf4, 0x1f, - 0xff, 0x66, 0xf, 0xd8, 0x7f, 0xfe, 0x14, 0x1e, - 0x83, 0xff, 0xf5, 0x7, 0x48, 0x7f, 0xfe, 0xf0, - 0x94, 0x1f, 0xff, 0xd8, 0x10, 0x7f, 0xf6, 0xd0, - 0xfe, 0x43, 0xff, 0x98, 0xac, 0x3f, 0xfb, 0x92, - 0x1f, 0x40, - - /* U+E90A "" */ - 0xf, 0xfe, 0x54, 0x1f, 0xfd, 0xfd, 0x83, 0xff, - 0xbb, 0x1, 0x41, 0xff, 0xdb, 0x50, 0x50, 0x7f, - 0xf6, 0xe0, 0xec, 0x3f, 0xfb, 0x38, 0x7d, 0x7, - 0xff, 0x5e, 0xf, 0xca, 0xf, 0xfe, 0xaa, 0x83, - 0xfa, 0xf, 0xfe, 0xac, 0x1f, 0xf6, 0x1f, 0xfd, - 0x3c, 0x3f, 0xf8, 0x30, 0x7f, 0xf4, 0x60, 0xff, - 0xe1, 0x28, 0x3f, 0xf9, 0xea, 0xf, 0xfe, 0x1c, - 0x87, 0xff, 0x35, 0x83, 0xff, 0x8b, 0x7, 0xff, - 0x36, 0xf, 0xfe, 0x3e, 0x1f, 0xfc, 0xbc, 0x3f, - 0xf9, 0x30, 0x7f, 0xf2, 0x60, 0xff, 0xe5, 0x28, - 0x3f, 0xf8, 0xea, 0xf, 0xfe, 0x5c, 0x1f, 0xfc, - 0x78, 0x3f, 0xf9, 0xb8, 0x7f, 0xf1, 0x70, 0xff, - 0xe7, 0xc1, 0xff, 0xc3, 0x83, 0xff, 0xa0, 0xa0, - 0xff, 0xe0, 0xa8, 0x3f, 0xfa, 0x30, 0x7f, 0xf0, - 0x60, 0xff, 0xe9, 0xe1, 0xff, 0x61, 0xff, 0xd5, - 0x83, 0xfa, 0xf, 0xfe, 0xb3, 0x7, 0xca, 0xf, - 0xfe, 0xba, 0x83, 0x98, 0x3f, 0xd7, 0xa0, 0xfe, - 0xf9, 0xf, 0xf4, 0x1d, 0x7, 0xf5, 0xa0, 0x43, - 0xff, 0x81, 0x70, 0x7f, 0x61, 0x61, 0xf3, 0x68, - 0x7f, 0xf1, 0xde, 0xf, 0xd1, 0x7, 0x9e, 0x43, - 0xff, 0x96, 0xf2, 0x1c, 0xb0, 0x67, 0x83, 0xff, - 0xa0, 0xda, 0x1b, 0x81, 0x70, 0x7f, 0xf5, 0x6d, - 0x4, 0xf9, 0xf, 0xfe, 0xcd, 0xe0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xed, 0x43, 0xff, 0xb1, - 0x7, 0xd8, 0x7f, 0xf6, 0x1e, 0xbb, 0x43, 0xff, - 0xb4, 0xbc, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xea, 0x69, - 0xd0, 0x3f, 0xfb, 0x2f, 0x28, 0x57, 0x83, 0xff, - 0xad, 0x40, 0xfe, 0xd0, 0xff, 0xe9, 0xa8, 0x3f, - 0xe9, 0xf, 0xfe, 0x94, 0x1f, 0xfc, 0x18, 0x3f, - 0xfa, 0x38, 0x7f, 0xf0, 0xe0, 0xff, 0xf0, 0x21, - 0xff, 0xcf, 0x43, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xe8, 0xa1, 0xff, 0xf1, 0x43, 0xff, 0xa1, - 0x7, 0xff, 0xe, 0xf, 0xfe, 0x82, 0x83, 0xff, - 0x83, 0x7, 0xff, 0x4a, 0x43, 0xfe, 0x50, 0x7f, - 0xf4, 0xe4, 0x3f, 0xa8, 0x1f, 0xfd, 0x5b, 0x43, - 0x36, 0x87, 0xff, 0x14, - - /* U+E90B "" */ - 0xf, 0xfe, 0x97, 0x90, 0xff, 0xf9, 0x38, 0x20, - 0xff, 0xf8, 0xd0, 0x3f, 0xfe, 0x9a, 0x1a, 0xf, - 0xff, 0x73, 0x87, 0x90, 0xff, 0xf6, 0xd0, 0x3d, - 0x7, 0xff, 0xb7, 0x43, 0xe4, 0x3f, 0xfd, 0x6e, - 0x1f, 0x90, 0xff, 0xf5, 0xb0, 0x7f, 0x41, 0xff, - 0xea, 0xa0, 0x7f, 0x21, 0xff, 0xea, 0xd0, 0xff, - 0x41, 0xff, 0xe8, 0x70, 0xff, 0xfa, 0x50, 0x3f, - 0xf8, 0x10, 0x7f, 0xf9, 0xf4, 0x3f, 0xf8, 0x28, - 0x7f, 0xf9, 0x5c, 0x3f, 0xf8, 0x50, 0x7f, 0xf9, - 0x68, 0x1f, 0xfc, 0x34, 0x3f, 0xfc, 0x92, 0x1f, - 0xfc, 0x38, 0x3f, 0xfc, 0x9a, 0x1f, 0xff, 0x37, - 0xf, 0xfe, 0x34, 0x1f, 0xfe, 0x1a, 0x7, 0xff, - 0x23, 0xff, 0xd4, 0x43, 0xff, 0xa7, 0xa1, 0xff, - 0xd3, 0x55, 0xe4, 0x3f, 0xf9, 0xce, 0x1f, 0xfd, - 0xab, 0x83, 0xff, 0x97, 0x40, 0xff, 0xee, 0xbc, - 0x1f, 0xfc, 0x89, 0xf, 0xff, 0x3, 0xa1, 0xff, - 0xc6, 0x90, 0xff, 0xf1, 0x50, 0x3f, 0xf8, 0xd2, - 0x1f, 0xfe, 0x27, 0xf, 0xfe, 0x35, 0x3, 0xff, - 0xc7, 0x87, 0xff, 0x19, 0xc3, 0xff, 0xc7, 0x87, - 0xff, 0x1f, 0x43, 0xff, 0x91, 0x5f, 0xc8, 0x7f, - 0xf1, 0x30, 0xff, 0xe3, 0xd0, 0x3f, 0xf8, 0xd2, - 0xff, 0x5e, 0x43, 0xff, 0x85, 0x87, 0xff, 0x1d, - 0xc3, 0xff, 0xa5, 0x70, 0x7f, 0xf0, 0x60, 0xff, - 0xe4, 0x68, 0x7f, 0xf0, 0xe0, 0xff, 0xe1, 0x3a, - 0x1f, 0xf2, 0x83, 0xff, 0x91, 0x40, 0xff, 0xe1, - 0xa1, 0xff, 0xc3, 0xa0, 0x7f, 0xd0, 0x7f, 0xf2, - 0x58, 0x3f, 0xf8, 0x50, 0x7f, 0xf1, 0x1c, 0x3f, - 0xe8, 0x3f, 0xf9, 0x2e, 0x1f, 0xfd, 0x4c, 0x3f, - 0xc8, 0x7f, 0xf2, 0xf4, 0x3f, 0xf8, 0x10, 0x7f, - 0xf1, 0xa0, 0xff, 0x41, 0xff, 0xcb, 0xa0, 0x7f, - 0xc8, 0x7f, 0xf1, 0x94, 0x1f, 0xc8, 0x7f, 0xf3, - 0x1c, 0x3f, 0xe8, 0x3f, 0xf8, 0xd0, 0x7f, 0x90, - 0xff, 0xe6, 0xe8, 0x7f, 0x21, 0xff, 0xc7, 0x83, - 0xfa, 0xf, 0xfe, 0x75, 0x3, 0xf9, 0xf, 0xfe, - 0x32, 0x1f, 0xfd, 0x97, 0xf, 0xd0, 0x7f, 0xf1, - 0xe0, 0xfe, 0x43, 0xff, 0xa1, 0xa1, 0xf2, 0x1f, - 0xfc, 0x64, 0x3f, 0xb0, 0xff, 0xe8, 0xc8, 0x7a, - 0xf, 0xfe, 0x82, 0x1f, 0xfd, 0x2a, 0x7, 0x90, - 0xff, 0xe3, 0x21, 0xff, 0xdc, 0x70, 0xe8, 0x3f, - 0xf8, 0xd8, 0x7f, 0xf7, 0xb4, 0x3f, 0xf9, 0x48, - 0x7f, 0xf7, 0xe8, 0x8, 0x3f, 0xfe, 0x6f, 0x90, - 0xff, 0xe8, 0x21, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0x19, 0xf, 0xff, 0x6a, - 0x1f, 0x21, 0xff, 0xee, 0xba, 0xf8, 0x3f, 0xfe, - 0xb, 0xe0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xd8, 0x6f, 0xa4, 0x3f, 0xfd, - 0xcf, 0x21, 0x37, 0x7, 0xff, 0xae, 0x81, 0xfc, - 0xe1, 0xff, 0xe9, 0x90, 0xff, 0xe0, 0x61, 0xff, - 0xe7, 0x50, 0x7f, 0xf0, 0xa0, 0xff, 0xf3, 0x41, - 0xff, 0xc3, 0x43, 0xff, 0xca, 0x87, 0xff, 0x16, - 0xf, 0xff, 0x26, 0x1f, 0xfc, 0x54, 0x3f, 0xff, - 0xe1, 0xff, 0xdc, 0x43, 0xff, 0xec, 0x87, 0xff, - 0xfc, 0x3f, 0xfd, 0xd8, 0x7f, 0xf1, 0x50, 0xff, - 0xf2, 0x21, 0xff, 0xc5, 0x83, 0xff, 0xcb, 0x7, - 0xff, 0xd, 0xf, 0xff, 0x32, 0x83, 0xff, 0x85, - 0x7, 0xff, 0x9e, 0x43, 0xff, 0x81, 0x87, 0xff, - 0xa6, 0x81, 0xfc, 0xe1, 0xff, 0xeb, 0x79, 0xc, - 0xf0, 0x70, - - /* U+E90C "" */ - 0xf, 0xfe, 0xab, 0xe0, 0xff, 0xfa, 0x40, 0xd0, - 0xff, 0xf9, 0x21, 0x50, 0x3f, 0xfe, 0x38, 0x67, - 0xf, 0xff, 0x82, 0x1e, 0xd0, 0xff, 0xf7, 0xc1, - 0xea, 0x7, 0xff, 0xb9, 0xf, 0x9c, 0x3f, 0xfd, - 0xd0, 0x7e, 0xd0, 0xff, 0xf6, 0x21, 0xfd, 0x40, - 0xff, 0xf6, 0x21, 0xfc, 0xc1, 0xff, 0xeb, 0x83, - 0xfc, 0xe1, 0xff, 0xeb, 0x43, 0xfe, 0xd0, 0xff, - 0xf4, 0xc1, 0xff, 0xc0, 0xa0, 0x7f, 0xfd, 0x9c, - 0x3f, 0xfd, 0x10, 0x7f, 0xf0, 0xb4, 0x3f, 0xfc, - 0xc8, 0x7f, 0xf0, 0xe8, 0x1f, 0xfe, 0x68, 0x3f, - 0xf8, 0x6e, 0x1f, 0xff, 0x7d, 0xf, 0xff, 0x1c, - 0x1f, 0xfc, 0x69, 0xf, 0xfe, 0xab, 0x4f, 0xff, - 0x7, 0xff, 0x22, 0x81, 0xff, 0xd1, 0x6e, 0x50, - 0x7f, 0xf4, 0xdc, 0x3f, 0xf9, 0xd7, 0x21, 0xff, - 0xd9, 0xd0, 0xff, 0xe5, 0x5a, 0x1f, 0xfd, 0xda, - 0x7, 0xff, 0x1d, 0xd0, 0xff, 0xf0, 0x38, 0x7f, - 0xf1, 0x68, 0x1f, 0xfe, 0x3c, 0x3f, 0xf8, 0x9a, - 0x1f, 0xfe, 0x27, 0xf, 0xfe, 0x26, 0x1f, 0xfe, - 0x3a, 0x7, 0xff, 0x13, 0xf, 0xff, 0x1e, 0x87, - 0xff, 0x13, 0xf, 0xfe, 0x23, 0x5f, 0xc1, 0xff, - 0xc8, 0x70, 0xff, 0xe2, 0xe1, 0xff, 0xc2, 0x7d, - 0x2f, 0xf4, 0x1f, 0xfc, 0x6a, 0x7, 0xff, 0x16, - 0xf, 0xfe, 0xd, 0xc1, 0xff, 0xd2, 0xd0, 0xff, - 0xe2, 0xa8, 0x3f, 0xe7, 0x43, 0xff, 0x85, 0x7, - 0xff, 0xd, 0xc3, 0xff, 0x8f, 0x7, 0xfd, 0x40, - 0xff, 0xe9, 0xb0, 0x7f, 0xf1, 0xe0, 0xff, 0xa4, - 0x3f, 0xf8, 0x90, 0x7f, 0xf0, 0xa8, 0x1f, 0xfc, - 0x84, 0x3f, 0xda, 0x1f, 0xfc, 0x54, 0x3f, 0xf8, - 0x3a, 0x1f, 0xfc, 0x88, 0x3f, 0xd0, 0x7f, 0xf1, - 0xa0, 0xff, 0xe0, 0x38, 0x7f, 0xf2, 0x90, 0xfe, - 0x50, 0x7f, 0xf1, 0x90, 0xff, 0xa8, 0x1f, 0xfc, - 0xa4, 0x3f, 0xd0, 0x7f, 0xf1, 0x90, 0xff, 0xb4, - 0x3f, 0xf9, 0x70, 0x7f, 0x41, 0xff, 0xc7, 0x83, - 0xf9, 0xc3, 0xff, 0xae, 0x87, 0xff, 0x19, 0xf, - 0xea, 0x7, 0xff, 0x35, 0xf, 0xe4, 0x3f, 0xf8, - 0xf0, 0x7e, 0x90, 0xff, 0xe7, 0x61, 0xfd, 0x7, - 0xff, 0x19, 0xf, 0xda, 0x1f, 0xfc, 0xf4, 0x3f, - 0xfa, 0x10, 0x79, 0xc3, 0xff, 0xb4, 0x87, 0xff, - 0x36, 0x81, 0xff, 0xdb, 0xc3, 0xff, 0x8d, 0x7, - 0x68, 0x7f, 0xfb, 0xd0, 0x9c, 0x3f, 0xfe, 0x30, - 0x28, 0x1f, 0xfd, 0x54, 0x3f, 0x90, 0xff, 0xe3, - 0x3e, 0x43, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xf1, 0x43, 0xff, 0xee, 0x87, 0xc8, 0x7f, 0xfb, - 0xab, 0xee, 0xf, 0xff, 0x7a, 0xf8, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xf6, - 0x5b, 0xe9, 0xf, 0xff, 0x73, 0xc8, 0x4d, 0xa1, - 0xff, 0xeb, 0xa0, 0x7f, 0x50, 0x3f, 0xfd, 0x32, - 0x1f, 0xf3, 0x7, 0xff, 0x9e, 0x43, 0xff, 0x82, - 0xa0, 0xff, 0xf3, 0x21, 0xff, 0xc3, 0x83, 0xff, - 0xca, 0x87, 0xff, 0x15, 0xf, 0xff, 0x24, 0x1f, - 0xfc, 0x5c, 0x3f, 0xfe, 0xc8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xfe, 0x64, 0x3f, 0xfc, 0x88, - 0x7f, 0xf1, 0x70, 0xff, 0xf2, 0x41, 0xff, 0xc5, - 0x43, 0xff, 0xca, 0x87, 0xff, 0xe, 0xf, 0xff, - 0x34, 0x1f, 0xfc, 0x25, 0x7, 0xff, 0x9f, 0xf, - 0xfe, 0x3, 0x7, 0xff, 0xa7, 0x43, 0xf9, 0x83, - 0xff, 0xd7, 0x68, 0x75, 0xc1, 0xff, 0xe8, - - /* U+E90D "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xf4, 0xdf, 0x21, 0xff, - 0xfa, 0xa0, 0x20, 0xff, 0xfc, 0xe8, 0x7f, 0xfe, - 0xdc, 0x3a, 0xf, 0xff, 0xb5, 0x3, 0xc8, 0x7f, - 0xfd, 0x64, 0x3d, 0x7, 0xff, 0xd7, 0x43, 0xe4, - 0x3f, 0xfe, 0x6e, 0x1f, 0x90, 0xff, 0xf9, 0xd0, - 0x3f, 0xa0, 0xff, 0xf9, 0x68, 0x7f, 0x21, 0xff, - 0xf1, 0x70, 0xff, 0xa0, 0xff, 0xf8, 0x50, 0x3f, - 0xe4, 0x3f, 0xfe, 0x12, 0x1f, 0xfc, 0xc, 0x3f, - 0xfd, 0xfa, 0x1f, 0xfc, 0x14, 0x3f, 0xfd, 0xae, - 0x1f, 0xfc, 0x28, 0x3f, 0xfd, 0xb4, 0xf, 0xfe, - 0x1a, 0x1f, 0xfe, 0xcd, 0xf, 0xfe, 0x1c, 0x1f, - 0xfe, 0xb7, 0xf, 0xfe, 0x2a, 0x1f, 0xfe, 0xaa, - 0x7, 0xff, 0xf3, 0x43, 0xff, 0x8e, 0x87, 0xff, - 0xa3, 0xf, 0xfe, 0x4d, 0xff, 0xfe, 0x8, 0x39, - 0xc3, 0xff, 0xbf, 0x7f, 0xff, 0x2c, 0x82, 0xa0, - 0x7f, 0xf8, 0x2e, 0xf, 0xfe, 0x4c, 0x83, 0x43, - 0xff, 0xc6, 0xf0, 0x7f, 0xf2, 0x5c, 0x3f, 0xfc, - 0xef, 0x7, 0xff, 0xf9, 0xc3, 0xff, 0x8c, 0xe1, - 0xff, 0xeb, 0xd0, 0xff, 0xe3, 0x68, 0x7f, 0xfa, - 0xa8, 0x1f, 0xfc, 0x69, 0xf, 0xff, 0x53, 0x7, - 0xff, 0x2, 0x43, 0x50, 0x3f, 0xfd, 0x4f, 0xff, - 0xf0, 0x8, 0x39, 0xc3, 0xff, 0x93, 0x7f, 0xff, - 0x6, 0x88, 0x7f, 0xf1, 0x5f, 0xff, 0x41, 0xfb, - 0x43, 0xff, 0x8e, 0x87, 0xff, 0x5, 0x57, 0x90, - 0xff, 0xe1, 0x28, 0x3f, 0xf8, 0xf4, 0xf, 0xfe, - 0xcd, 0xa1, 0xff, 0xc1, 0x83, 0xff, 0x90, 0xe1, - 0xff, 0xc5, 0x83, 0xff, 0x91, 0x61, 0xff, 0xc1, - 0xc3, 0xff, 0x93, 0xa1, 0xff, 0xc3, 0x43, 0xff, - 0x95, 0xa1, 0xff, 0xc0, 0x43, 0xff, 0x93, 0x40, - 0xff, 0xe1, 0xa1, 0xff, 0xca, 0xa0, 0x7f, 0xd0, - 0x7f, 0xf2, 0x9c, 0x3f, 0xf8, 0x50, 0x7f, 0xf2, - 0xd8, 0x3f, 0xe8, 0x3f, 0xf9, 0x7a, 0x1f, 0xfc, - 0x14, 0x3f, 0xf9, 0x6a, 0xf, 0xf2, 0x1f, 0xfc, - 0xc9, 0xf, 0xfe, 0x4, 0x1f, 0xfc, 0xc8, 0x3f, - 0xe4, 0x3f, 0xf9, 0x94, 0xf, 0xfe, 0xce, 0x1f, - 0xe8, 0x3f, 0xf9, 0xae, 0x1f, 0xf4, 0x1f, 0xfc, - 0xd4, 0x3f, 0xfb, 0x3a, 0x1f, 0xc8, 0x7f, 0xf3, - 0x60, 0xff, 0x41, 0xff, 0xcf, 0xa0, 0x7f, 0x41, - 0xff, 0xcd, 0x43, 0xf9, 0xf, 0xfe, 0x83, 0x87, - 0xe4, 0x3f, 0xf9, 0xb0, 0x7f, 0xf7, 0x34, 0x3e, - 0x83, 0xff, 0xae, 0x87, 0xff, 0x4a, 0x81, 0xe4, - 0x3f, 0xf9, 0xa8, 0x7f, 0xf7, 0x5c, 0x3c, 0x87, - 0xff, 0x33, 0xf, 0xec, 0x3f, 0xfa, 0xba, 0x1a, - 0xf, 0xff, 0xcc, 0x87, 0xff, 0x41, 0xf, 0xe4, - 0x3f, 0xfa, 0xf4, 0x6, 0x1f, 0xff, 0xb7, 0xc1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, - 0xfe, 0x1f, 0xfd, 0x74, 0x3f, 0xfe, 0xb8, 0x7c, - 0xc1, 0xc0, - - /* U+E90E "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xf9, 0x9f, 0x21, 0xff, - 0xff, 0x20, 0x50, 0x3f, 0xff, 0xe1, 0x9c, 0x3f, - 0xff, 0xd0, 0x76, 0x1f, 0xff, 0xd4, 0x3d, 0xa1, - 0xff, 0xfc, 0x43, 0xd4, 0xf, 0xff, 0xdc, 0x1f, - 0x38, 0x7f, 0xfe, 0xd0, 0xfd, 0xa1, 0xff, 0xf9, - 0x83, 0xfa, 0x81, 0xff, 0xf9, 0x43, 0xf9, 0xc3, - 0xff, 0xf1, 0x87, 0xfd, 0x87, 0xff, 0xdd, 0xf, - 0xfe, 0x6, 0x87, 0xff, 0xda, 0xf, 0xfe, 0x5, - 0x3, 0xff, 0xea, 0x87, 0xff, 0x5, 0xc3, 0xff, - 0xeb, 0x7, 0xff, 0xb, 0x43, 0xff, 0xe6, 0x87, - 0xff, 0xe, 0x81, 0xff, 0xf3, 0x43, 0xff, 0x86, - 0xe1, 0xff, 0xf2, 0x83, 0xff, 0x8b, 0x87, 0xff, - 0xfc, 0x3b, 0x43, 0xff, 0xdf, 0x7, 0xff, 0x1e, - 0x81, 0xfa, 0xff, 0xff, 0x2a, 0x1f, 0xfc, 0x87, - 0xf, 0x47, 0xff, 0xf4, 0x10, 0xff, 0xef, 0xe8, - 0x66, 0xf, 0xfe, 0x6b, 0x68, 0x7f, 0xf8, 0x28, - 0x1f, 0xfd, 0x1e, 0x43, 0xff, 0xc6, 0xe1, 0xff, - 0xce, 0xb0, 0xff, 0xf4, 0x61, 0xff, 0xcb, 0x74, - 0x3f, 0xfd, 0x48, 0x7f, 0xf2, 0x68, 0x1f, 0xfe, - 0xbd, 0xf, 0xfe, 0x44, 0x87, 0xff, 0xa9, 0xc2, - 0x43, 0xff, 0x8b, 0x21, 0xff, 0xea, 0xa0, 0x5d, - 0xff, 0xfc, 0x54, 0x3f, 0xfd, 0x5a, 0x1d, 0xff, - 0xfc, 0x44, 0x3f, 0xf8, 0xad, 0xff, 0xfc, 0x24, - 0x3f, 0xf9, 0xe, 0x1f, 0xfc, 0xa9, 0xf, 0xfe, - 0x15, 0xe9, 0xf, 0xfe, 0x14, 0x1f, 0xfc, 0x7a, - 0x7, 0xff, 0x29, 0x41, 0xff, 0xc1, 0xb4, 0x3f, - 0xfb, 0x32, 0x1f, 0xfc, 0xb8, 0x3f, 0xf8, 0xe, - 0x87, 0xff, 0x22, 0xf, 0xfe, 0x2e, 0x87, 0xff, - 0x2e, 0xf, 0xfe, 0x5, 0x3, 0xff, 0x94, 0x87, - 0xff, 0xd, 0xc3, 0xff, 0x9a, 0x87, 0xfd, 0x21, - 0xff, 0xca, 0x83, 0xff, 0x87, 0x40, 0xff, 0xe6, - 0xc1, 0xff, 0x48, 0x7f, 0xf2, 0xd0, 0xff, 0xe1, - 0x68, 0x7f, 0xf3, 0x90, 0xff, 0x48, 0x7f, 0xf2, - 0xd0, 0xff, 0xe0, 0xb8, 0x7f, 0xf3, 0xe0, 0xff, - 0x28, 0x3f, 0xf9, 0x90, 0x7f, 0xf0, 0x28, 0x1f, - 0xfd, 0x4, 0x3f, 0xd0, 0x7f, 0xf3, 0x10, 0xff, - 0xe0, 0x68, 0x7f, 0xf4, 0x10, 0xff, 0x41, 0xff, - 0xcd, 0x83, 0xfc, 0xe1, 0xff, 0xd2, 0xc3, 0xfc, - 0x87, 0xff, 0x5d, 0x83, 0xff, 0xa6, 0x87, 0xf2, - 0x1f, 0xfc, 0xd8, 0x3f, 0xa8, 0x1f, 0xfd, 0x34, - 0x3f, 0xd0, 0x7f, 0xf3, 0x50, 0xfd, 0xa1, 0xff, - 0xf8, 0x83, 0xe7, 0xf, 0xfe, 0xb6, 0x1f, 0xc8, - 0x7f, 0xf3, 0x50, 0xf5, 0x3, 0xff, 0xae, 0x87, - 0xf6, 0x1f, 0xfc, 0xc8, 0x3d, 0xa1, 0xff, 0xe2, - 0x43, 0xff, 0x98, 0x86, 0x70, 0xff, 0xff, 0x82, - 0x81, 0xff, 0xfe, 0x81, 0xa1, 0xff, 0xff, 0x7c, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xfe, 0x7a, 0x1f, - 0x90, 0xff, 0xfd, 0x48, 0x79, 0x83, 0xff, 0xe0, - - /* U+E90F "" */ - 0xf, 0xfe, 0x63, 0x7f, 0xff, 0x16, 0x81, 0xff, - 0xe4, 0xe4, 0x3f, 0xf8, 0xaa, 0xd0, 0xff, 0xf0, - 0xe1, 0xff, 0xcb, 0x83, 0xff, 0xc0, 0x87, 0xff, - 0x36, 0xf, 0xfe, 0xfe, 0x1f, 0xfc, 0xd4, 0x3f, - 0xfb, 0x6b, 0xc1, 0xff, 0xce, 0x5c, 0x1f, 0xfd, - 0x5b, 0xac, 0x1f, 0xfc, 0xfa, 0xde, 0x43, 0xff, - 0xa0, 0xe8, 0x7f, 0xf6, 0xa8, 0x1f, 0xfc, 0xe6, - 0xf, 0xfe, 0xeb, 0x7, 0xff, 0x36, 0xf, 0xfe, - 0xfa, 0x1f, 0xfc, 0xc8, 0x3f, 0xfc, 0x38, 0x7f, - 0xf2, 0xd0, 0xef, 0xff, 0xeb, 0x87, 0xff, 0x41, - 0xe, 0xc3, 0xff, 0xaf, 0x87, 0x21, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0x9, - 0xe0, 0xff, 0xfa, 0xbc, 0x3a, 0x1f, 0xff, 0x17, - 0x83, 0xad, 0xf, 0xff, 0x75, 0x3, 0xfa, 0x81, - 0xff, 0xeb, 0xb4, 0x3f, 0xe7, 0x83, 0xff, 0xce, - 0xe8, 0x7f, 0xf0, 0xdd, 0xf, 0xff, 0x1b, 0xc1, - 0xff, 0xc7, 0xb4, 0x3f, 0xfc, 0x1c, 0x1f, 0xfc, - 0xba, 0x7, 0xff, 0x76, 0xc3, 0xff, 0x9c, 0xf0, - 0x7f, 0xf6, 0x6d, 0xf, 0xfe, 0x8b, 0xa1, 0xff, - 0xd6, 0xd0, 0xff, 0xea, 0xd8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xfc, 0x58, 0x3f, 0xfc, 0x70, - 0x7f, 0xf1, 0xdc, 0x3f, 0xfc, 0xba, 0x1f, 0xfc, - 0x4a, 0x7, 0xff, 0x9e, 0x81, 0xff, 0xc1, 0x74, - 0x3f, 0xfd, 0x2e, 0x87, 0xfa, 0x81, 0xff, 0xed, - 0xa0, 0x7e, 0xd0, 0xff, 0xf7, 0xb8, 0x7f, 0xff, - 0xc1, 0x7, 0xff, 0xc6, 0xf, 0x90, 0xff, 0xf8, - 0xa1, 0xfa, 0xf, 0xff, 0x7c, 0x1f, 0xc8, 0x7f, - 0xfb, 0xd0, 0xff, 0x41, 0xff, 0xed, 0x83, 0xfe, - 0x43, 0xff, 0xda, 0x87, 0xff, 0x2, 0xf, 0xff, - 0x5c, 0x1f, 0xfc, 0x14, 0x3f, 0xfd, 0x68, 0x7f, - 0xf0, 0xa0, 0xff, 0xf4, 0xc1, 0xff, 0xc3, 0x43, - 0xff, 0xd2, 0x87, 0xff, 0x12, 0xf, 0xff, 0x3c, - 0x1f, 0xfc, 0x54, 0x3f, 0xfc, 0xca, 0xf, 0xfe, - 0x34, 0x1f, 0xfe, 0x58, 0x3f, 0xf8, 0xe8, 0x7f, - 0xf9, 0x10, 0xff, 0xe4, 0xc1, 0xff, 0xe3, 0x83, - 0xff, 0x92, 0x87, 0xff, 0x89, 0xf, 0xfe, 0x5c, - 0x1f, 0xfe, 0x18, 0x3f, 0xf9, 0x68, 0x7f, 0xf8, - 0x10, 0xff, 0xe6, 0xc1, 0xff, 0xdf, 0x83, 0xff, - 0x9a, 0x87, 0xff, 0x4d, 0x70, 0x7c, 0x87, 0xff, - 0x3e, 0xc, 0xdf, 0xe9, 0xf, 0xfe, 0x3, 0x7a, - 0xb7, 0xa4, 0x28, 0x3f, 0xf9, 0xe8, 0x1e, 0x43, - 0xcd, 0xc1, 0xf9, 0xe4, 0x3f, 0x36, 0xa0, 0xff, - 0xe8, 0xdc, 0x1f, 0xfc, 0x7, 0x83, 0xb8, 0x3f, - 0xf8, 0x54, 0xf, 0xfe, 0x8a, 0x1f, 0xfc, 0x47, - 0x3, 0x87, 0xff, 0xdb, 0xa0, 0x7f, 0xfe, 0x10, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xfe, 0x1d, 0x10, 0xff, 0xe2, - 0xb5, 0x90, 0xff, 0xe3, 0x35, 0x21, 0xff, 0xc6, - 0x61, 0x56, 0x87, 0xff, 0x6, 0xe5, 0xd7, 0x7, - 0xff, 0x5, 0xf4, 0xb5, 0xe4, 0x3f, 0xf8, 0xf, - 0xa4, 0x3a, 0x81, 0xfe, 0x74, 0x3f, 0x3a, 0x1f, - 0xee, 0xf, 0xea, 0x7, 0xfa, 0x81, 0xfe, 0x74, - 0x3e, 0x60, 0xff, 0xe0, 0x48, 0x7e, 0xc3, 0xff, - 0x80, 0xc1, 0xfb, 0x43, 0xff, 0x83, 0x21, 0xd4, - 0xf, 0xfe, 0x15, 0x3, 0x9c, 0x3f, 0xf8, 0x4e, - 0x1e, 0xc3, 0xff, 0x89, 0x45, 0xb4, 0x3e, 0x43, - 0xf3, 0xa0, 0xa0, 0x7f, 0xf1, 0x79, 0x56, 0x1f, - 0xdc, 0x1f, 0x35, 0x7, 0xd7, 0x78, 0x3f, 0x5e, - 0x43, 0xd7, 0xe0, 0xfc, 0xd1, 0xf, 0x3e, 0x3, - 0x87, 0xff, 0x13, 0x43, 0x68, 0x7f, 0xf0, 0xe4, - 0x36, 0x87, 0xff, 0xd, 0x83, 0xd8, 0x7f, 0xf0, - 0xb0, 0xfa, 0x43, 0xff, 0x83, 0xa1, 0xe9, 0xf, - 0xfe, 0xd, 0x3, 0xf6, 0x87, 0xf9, 0xc3, 0xfa, - 0x81, 0xfe, 0x70, 0xfe, 0xa0, 0x7f, 0xda, 0x1f, - 0xeb, 0x43, 0xcf, 0x7, 0xfc, 0xf0, 0x79, 0xe0, - 0xff, 0x9d, 0xf, 0x36, 0x1f, 0xfc, 0x2b, 0xfd, - 0x7, 0xff, 0xd, 0xff, 0x41, 0xff, 0xc3, 0xbf, - 0xd2, 0x1f, 0x80, - - /* U+E910 "" */ - 0x2f, 0x7, 0xff, 0x3, 0xff, 0xfd, 0xcc, 0x83, - 0xf, 0xff, 0xc4, 0xa0, 0xc8, 0x7f, 0xfd, 0xa4, - 0x3f, 0xff, 0x92, 0x1f, 0xff, 0xc5, 0x7, 0xff, - 0xf1, 0x83, 0xff, 0xf8, 0xc1, 0xff, 0xfd, 0x83, - 0xff, 0xfb, 0x87, 0xff, 0xf7, 0xf, 0xff, 0xee, - 0x1f, 0xff, 0xdc, 0x3f, 0xff, 0xb8, 0x7f, 0xff, - 0x60, 0xff, 0xfe, 0xc8, 0x7f, 0xff, 0x24, 0x3f, - 0xff, 0x8a, 0xf, 0xff, 0xe3, 0x7, 0xff, 0xf1, - 0x83, 0xff, 0xf8, 0xc1, 0xff, 0xfd, 0x83, 0xff, - 0xfb, 0x7, 0xff, 0xfa, 0xf, 0xff, 0xfe, 0x1f, - 0xff, 0xfc, 0x3f, 0xff, 0xf8, 0x7f, 0xff, 0xf0, - 0xff, 0xff, 0xc1, 0xff, 0xfe, 0x60, 0xff, 0xff, - 0x30, 0x7f, 0xff, 0x98, 0x3f, 0xff, 0xca, 0xf, - 0xff, 0xf4, 0x87, 0xff, 0xfa, 0x43, 0xff, 0xfd, - 0x7, 0xff, 0xff, 0xf, 0xff, 0xfe, 0x1f, 0xff, - 0xfc, 0x3f, 0xff, 0xf8, 0x7f, 0xff, 0xf0, 0xff, - 0xff, 0xc1, 0xff, 0xfe, 0x60, 0xff, 0xe2, 0xaf, - 0xff, 0xb4, 0x43, 0xff, 0x89, 0x5f, 0xfe, 0xe4, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0x43, 0x21, 0xff, 0xf9, 0x90, 0x61, 0xff, - 0xfa, - - /* U+E911 "" */ - 0x3f, 0x57, 0x2e, 0xf, 0xff, 0x4a, 0xf5, 0x77, - 0xd0, 0x72, 0xf5, 0x6f, 0xfe, 0xae, 0x5c, 0x1f, - 0xfc, 0x55, 0xea, 0xdf, 0xfd, 0x5c, 0xbc, 0x16, - 0x21, 0xff, 0xc9, 0x5e, 0xad, 0xfd, 0x7, 0xbf, - 0xab, 0x97, 0x7, 0xff, 0xc1, 0xe, 0x83, 0xff, - 0xb0, 0x98, 0x7f, 0xf7, 0x70, 0xff, 0xed, 0x21, - 0xff, 0xd6, 0x70, 0xe7, 0x43, 0xff, 0xaa, 0x87, - 0xff, 0x5e, 0xe0, 0xfd, 0x68, 0x7f, 0xf4, 0xf0, - 0x90, 0xff, 0xe8, 0xda, 0x1f, 0xfc, 0xb, 0x43, - 0xff, 0xe0, 0xda, 0x1f, 0xfc, 0x4b, 0x83, 0xff, - 0x9e, 0x85, 0x87, 0xff, 0x31, 0xe4, 0x3f, 0xf9, - 0xf, 0x7, 0xff, 0x45, 0xf, 0xfe, 0x53, 0xc1, - 0xff, 0xcd, 0x78, 0x3f, 0xf9, 0x48, 0x7f, 0xf3, - 0x5e, 0xf, 0xfe, 0x8b, 0xe0, 0xff, 0xe4, 0x61, - 0xc8, 0x7f, 0xf1, 0xe0, 0xff, 0xeb, 0x21, 0xff, - 0xe1, 0x43, 0xff, 0xac, 0x87, 0xff, 0x1d, 0xe, - 0xc3, 0xff, 0x8f, 0x21, 0xff, 0xd4, 0x83, 0xff, - 0x9c, 0x87, 0xff, 0x22, 0x81, 0xff, 0xd2, 0xd0, - 0xff, 0xe3, 0xa1, 0xff, 0xd0, 0x60, 0xff, 0xe8, - 0x61, 0xff, 0xc9, 0xc3, 0xe4, 0x3f, 0xf9, 0x2e, - 0x1f, 0xfc, 0xd7, 0xf, 0xff, 0x56, 0x1f, 0xfc, - 0xba, 0x7, 0xff, 0x2d, 0xf, 0xb0, 0xff, 0xe6, - 0x68, 0x7f, 0xf2, 0x24, 0x3f, 0xfa, 0x88, 0x7f, - 0xdc, 0x1f, 0xfc, 0x9, 0xf, 0xfe, 0x36, 0x87, - 0xff, 0x2, 0x81, 0xfe, 0x43, 0xff, 0x8f, 0x8e, - 0x1f, 0xfc, 0xa, 0x7, 0xff, 0x13, 0xf, 0xfe, - 0x3, 0xac, 0x1f, 0xd8, 0x7f, 0x21, 0xff, 0xc1, - 0xc3, 0xff, 0x80, 0xc1, 0xff, 0xc1, 0x70, 0xff, - 0xe0, 0x30, 0x58, 0x7f, 0xf1, 0xf0, 0xfc, 0x87, - 0x68, 0x7f, 0xce, 0x1f, 0xf3, 0x7, 0xff, 0x2, - 0x81, 0x90, 0xfe, 0x43, 0xff, 0x8d, 0x87, 0xa4, - 0x3f, 0xf8, 0x18, 0x7f, 0x30, 0x7f, 0xf0, 0x34, - 0x3c, 0x87, 0xff, 0x19, 0xf, 0xc8, 0x7d, 0x40, - 0xff, 0xe0, 0x61, 0xf3, 0x7, 0xff, 0x3, 0xf, - 0xd8, 0x7c, 0x87, 0xff, 0x19, 0xf, 0xe6, 0xf, - 0xfe, 0x6, 0x1c, 0xc1, 0xff, 0x38, 0x7f, 0x21, - 0xf6, 0x1f, 0xf2, 0x1e, 0xc3, 0xfc, 0xe1, 0xff, - 0xc0, 0x83, 0x41, 0xff, 0x30, 0x7f, 0xf1, 0x90, - 0xff, 0xb0, 0xf2, 0x1f, 0xfc, 0xc, 0x3f, 0xe5, - 0x3, 0xf, 0xfa, 0x81, 0xff, 0xc0, 0x43, 0xff, - 0xb7, 0xa1, 0xfe, 0x84, 0x3f, 0xe9, 0xf, 0xfe, - 0xe, 0x1f, 0xfc, 0x64, 0x39, 0xf, 0xfe, 0x1c, - 0x87, 0xfb, 0x83, 0xfd, 0xa1, 0xff, 0xc2, 0x43, - 0x90, 0xff, 0xe3, 0x41, 0xff, 0xc4, 0x90, 0xff, - 0xe4, 0x41, 0xff, 0xc5, 0x43, 0x61, 0xff, 0xc1, - 0x43, 0xff, 0x95, 0x7, 0xff, 0x1e, 0x43, 0xff, - 0x8b, 0x86, 0x43, 0xff, 0x83, 0x84, 0x87, 0xff, - 0x1f, 0xf, 0xfe, 0x2a, 0x83, 0xff, 0x8c, 0x87, - 0xff, 0x2b, 0xf, 0xfe, 0x44, 0x1f, 0xfc, 0x48, - 0x3f, 0xfb, 0x48, 0x48, 0x7f, 0xf2, 0x10, 0xff, - 0xe1, 0xc1, 0xff, 0xc9, 0x80, 0x87, 0xff, 0xf, - 0xb0, 0xff, 0xe5, 0x61, 0xff, 0xc2, 0x43, 0xff, - 0x92, 0xd4, 0x1f, 0xfc, 0x44, 0x3f, 0xf9, 0x88, - 0x7f, 0xf0, 0x20, 0xff, 0xe5, 0xa8, 0x3f, 0xfb, - 0xd8, 0x7f, 0xf0, 0x10, 0xff, 0xfb, 0xa1, 0xff, - 0x41, 0xff, 0xf9, 0x43, 0xfc, 0x87, 0xff, 0xe7, - 0xf, 0xff, 0xf8, 0x72, 0x1f, 0xc8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xf6, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x81, 0xf, 0xff, 0xf8, 0x7f, 0xf0, - 0x90, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xf4, - 0x50, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xfe, 0x30, 0xfc, 0x87, - 0xff, 0xed, 0x97, 0xd8, 0x7f, 0xf6, 0x0, - - /* U+E912 "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xf5, 0x9f, 0x7, 0xff, - 0xfc, 0x14, 0x2, 0x1f, 0xff, 0xfd, 0xf, 0xff, - 0xf8, 0x1c, 0x39, 0xf, 0xff, 0xe5, 0x3, 0xa0, - 0xff, 0xfe, 0x68, 0x79, 0xf, 0xff, 0xd3, 0x87, - 0xd0, 0x7f, 0xfe, 0x98, 0x3f, 0x21, 0xff, 0xf9, - 0xa0, 0x7e, 0x43, 0xff, 0xf3, 0xa1, 0xfd, 0x7, - 0xff, 0xdd, 0xc3, 0xfc, 0x87, 0xff, 0xde, 0x81, - 0xff, 0x41, 0xff, 0xf6, 0xd0, 0xff, 0x90, 0xff, - 0xfa, 0xb8, 0x7f, 0xf0, 0x70, 0xff, 0xfa, 0x50, - 0x3f, 0xf8, 0x48, 0x7f, 0xfc, 0xe4, 0x3f, 0xf8, - 0x50, 0x7f, 0xfc, 0xf4, 0x3f, 0xf8, 0x68, 0x7f, - 0xfc, 0x5c, 0x3f, 0xf8, 0xb0, 0x7f, 0xfc, 0x28, - 0x1f, 0xfc, 0x67, 0xff, 0xf8, 0x52, 0x1f, 0xfd, - 0xfd, 0xf, 0xfe, 0xb3, 0x7a, 0xf, 0xfe, 0xd3, - 0x87, 0xff, 0x71, 0xf2, 0x1f, 0xfc, 0xdb, 0xe0, - 0xea, 0x7, 0xff, 0x82, 0xd0, 0xff, 0xe5, 0x67, - 0x98, 0x25, 0x7, 0xff, 0x8e, 0x81, 0xff, 0xc8, - 0xe8, 0x8, 0x80, 0xc1, 0xff, 0xe4, 0x74, 0x3f, - 0xf8, 0x8f, 0x21, 0xa5, 0x1, 0x83, 0xff, 0xcb, - 0x40, 0xff, 0xe1, 0x36, 0x87, 0xb8, 0x27, 0xf, - 0xff, 0x2b, 0x7, 0xff, 0x2, 0x98, 0x7f, 0x21, - 0xda, 0x1f, 0xfe, 0x46, 0xf, 0xf6, 0x61, 0xfc, - 0xa0, 0xf5, 0x3, 0xff, 0x8d, 0x7f, 0xff, 0x6, - 0x43, 0xff, 0x84, 0xa0, 0xfd, 0xb0, 0x7f, 0x36, - 0x1f, 0x38, 0x7f, 0xf1, 0x50, 0xff, 0xe0, 0xb7, - 0x90, 0xff, 0xe0, 0x48, 0x7b, 0xa0, 0x7f, 0x5e, - 0xf, 0xf6, 0x87, 0xff, 0xd, 0xf, 0xfe, 0x2d, - 0x87, 0xff, 0x2, 0xe, 0xe4, 0x3f, 0xa2, 0xf, - 0xfe, 0x5, 0x3, 0xff, 0x85, 0x7, 0xff, 0x1f, - 0x83, 0xfe, 0x82, 0xe4, 0x3f, 0xbd, 0x7, 0xff, - 0x9, 0xc3, 0xff, 0x84, 0x87, 0xff, 0x1d, 0x83, - 0xfc, 0x83, 0x90, 0xfe, 0xf2, 0x1f, 0xfc, 0x5d, - 0xf, 0xfe, 0x4, 0x1f, 0xfc, 0x87, 0xf, 0xf7, - 0x28, 0x3f, 0x3e, 0xf, 0xfe, 0x45, 0x3, 0xff, - 0x80, 0x87, 0xff, 0x26, 0xf, 0xf3, 0x7, 0xe7, - 0xc1, 0xff, 0xca, 0x70, 0xff, 0xa0, 0xff, 0xe4, - 0xa8, 0x3f, 0xf8, 0xd7, 0x7, 0xff, 0x37, 0xf, - 0xfe, 0xac, 0x1f, 0xfc, 0x58, 0x83, 0xff, 0x9f, - 0xa1, 0xfd, 0x7, 0xff, 0x2a, 0xf, 0xe4, 0x39, - 0x20, 0xff, 0xe8, 0xd0, 0x3f, 0x21, 0xff, 0xca, - 0x43, 0xfa, 0xc, 0xd0, 0x3f, 0xfa, 0x6e, 0x1f, - 0xa0, 0xff, 0xe5, 0x41, 0xff, 0xc1, 0xb0, 0xff, - 0xeb, 0x68, 0x79, 0xf, 0xfe, 0x52, 0x1f, 0xc8, - 0x28, 0x1f, 0xfd, 0x8a, 0x7, 0x90, 0xff, 0xe5, - 0x21, 0xff, 0x28, 0x3f, 0xfb, 0x2e, 0x1d, 0x7, - 0xff, 0x2b, 0xf, 0xd9, 0x40, 0xff, 0xee, 0x68, - 0x64, 0x3f, 0xfa, 0x8a, 0xf, 0xfe, 0xed, 0x3, - 0xff, 0x9a, 0x87, 0xe6, 0x81, 0xff, 0xdf, 0x75, - 0x83, 0xff, 0xa6, 0xa0, 0xff, 0xf0, 0xd0, 0x3f, - 0xfa, 0x88, 0x7f, 0xff, 0xc3, 0xb0, 0xff, 0xff, - 0x87, 0x21, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xfc, 0x14, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, - 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xb4, 0x87, 0xff, - 0xfc, 0x3d, 0x7, 0xd8, 0x7f, 0xf1, 0x80, - - /* U+E913 "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xfb, 0x3c, 0x87, 0xff, - 0xfc, 0x10, 0x28, 0x1f, 0xff, 0xf3, 0x9, 0xc3, - 0xff, 0xfe, 0x87, 0x68, 0x7f, 0xff, 0xa0, 0xe9, - 0xf, 0xff, 0xea, 0x1e, 0xa0, 0x7f, 0xff, 0x50, - 0xf3, 0x87, 0xff, 0xf2, 0xf, 0xda, 0x1f, 0xff, - 0xb4, 0x3f, 0x50, 0x3f, 0xff, 0x50, 0x7f, 0x38, - 0x7f, 0xfe, 0x90, 0xff, 0x68, 0x7f, 0xfe, 0x30, - 0xff, 0xa4, 0x3f, 0xfe, 0xe8, 0x7f, 0xf0, 0x28, - 0x1f, 0xff, 0x78, 0x3f, 0xf8, 0xe, 0x1f, 0xff, - 0x64, 0x3f, 0xf8, 0x5a, 0x1f, 0xff, 0x58, 0x3f, - 0xf8, 0x54, 0xf, 0xff, 0xf8, 0x73, 0x87, 0xff, - 0xce, 0xf, 0xfe, 0x2e, 0x87, 0xff, 0x86, 0x9f, - 0xff, 0xc2, 0xf, 0xfe, 0x3d, 0x3, 0xff, 0xb8, - 0xde, 0x50, 0x7f, 0xf5, 0x98, 0x3f, 0x5e, 0x83, - 0xff, 0x9a, 0xf2, 0x1f, 0xfd, 0xb7, 0xf, 0x47, - 0x8c, 0x3f, 0xf9, 0x4f, 0x7, 0xff, 0x83, 0x42, - 0x88, 0x14, 0xc3, 0xff, 0x91, 0x40, 0xff, 0xf1, - 0xc8, 0xa8, 0x33, 0x68, 0x7f, 0xf1, 0x1d, 0xf, - 0xff, 0x24, 0x96, 0x1e, 0x79, 0xf, 0xfe, 0x13, - 0x7, 0xff, 0x97, 0x40, 0x87, 0xf7, 0x40, 0xff, - 0xe0, 0x50, 0x3f, 0xfc, 0x8e, 0x19, 0x41, 0xfd, - 0x90, 0x7f, 0xa4, 0x3f, 0xfc, 0x94, 0xe, 0xe4, - 0x3f, 0xaf, 0x7, 0xe5, 0x7, 0xff, 0x5, 0xbf, - 0xff, 0x84, 0x87, 0xff, 0x1b, 0x43, 0xef, 0x41, - 0xfc, 0xd8, 0x7d, 0x7, 0xff, 0x1, 0xe4, 0x3f, - 0xf8, 0x58, 0x7f, 0xf1, 0x1c, 0x3f, 0xd1, 0x87, - 0xf3, 0x61, 0xd8, 0x7f, 0xcf, 0x7, 0xff, 0x17, - 0xf, 0xfe, 0x1b, 0x7, 0xff, 0x2, 0x98, 0x7f, - 0x36, 0x14, 0x1f, 0xf5, 0x3, 0xff, 0x8e, 0x87, - 0xff, 0xa, 0x81, 0xff, 0xc2, 0x7c, 0x87, 0xe6, - 0xc0, 0x87, 0xfb, 0x43, 0xff, 0x8e, 0x87, 0xff, - 0xb, 0x43, 0xff, 0x8b, 0xc8, 0x7e, 0x55, 0x3, - 0xfd, 0x87, 0xff, 0x26, 0xf, 0xfe, 0x3, 0x87, - 0xff, 0x23, 0xd0, 0x7e, 0x94, 0x1f, 0xd8, 0x7f, - 0xf2, 0x50, 0xff, 0xe0, 0x50, 0x3f, 0xf9, 0x51, - 0x7, 0xff, 0x1a, 0xf, 0xfe, 0x54, 0x1f, 0xf6, - 0x87, 0xff, 0x32, 0x20, 0xff, 0xe2, 0x28, 0x3f, - 0xf9, 0x28, 0x7f, 0x9c, 0x3f, 0xf9, 0xf1, 0x7, - 0x21, 0xfd, 0x7, 0xff, 0x2a, 0xf, 0xea, 0x7, - 0xff, 0x46, 0x50, 0x6c, 0x3f, 0x21, 0xff, 0xd4, - 0xd0, 0xff, 0xe9, 0xf0, 0x64, 0x3f, 0x41, 0xff, - 0xca, 0x83, 0xe7, 0xf, 0xfe, 0xb5, 0x3, 0xff, - 0xae, 0x87, 0x98, 0x3f, 0xfa, 0xea, 0x2, 0x1f, - 0x90, 0xff, 0xe5, 0x41, 0xea, 0x7, 0xff, 0x67, - 0x8c, 0x3f, 0x61, 0xff, 0xca, 0x43, 0xb4, 0x3f, - 0xfc, 0xc8, 0x7f, 0xf2, 0x50, 0xce, 0x1f, 0xfd, - 0xde, 0xf, 0xfe, 0xbd, 0x3, 0xff, 0xbc, 0xb0, - 0x7f, 0xf4, 0x96, 0xd0, 0xff, 0xf0, 0x21, 0xff, - 0xd4, 0xa0, 0x7f, 0xf8, 0xb0, 0xff, 0xff, 0x87, - 0x21, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xce, 0x1f, 0x61, 0xff, - 0xea, - - /* U+E914 "" */ - 0xf, 0xff, 0xfd, 0xff, 0x56, 0x5c, 0x1f, 0xfe, - 0xfc, 0x3e, 0x5d, 0x5b, 0xff, 0xab, 0x97, 0x7, - 0xff, 0xd9, 0x7a, 0xb7, 0xff, 0x41, 0xff, 0xd3, - 0x43, 0xff, 0xbc, 0xc1, 0xff, 0xfe, 0x43, 0xff, - 0xa6, 0x87, 0xff, 0x7a, 0xf, 0xfe, 0x9e, 0x1f, - 0xfd, 0xc6, 0x43, 0xff, 0xf4, 0xf2, 0x1f, 0xfd, - 0x44, 0x3f, 0xfb, 0xf, 0x7, 0xff, 0xea, 0xe0, - 0xff, 0xed, 0x21, 0xff, 0xd3, 0xb4, 0x3f, 0xfb, - 0x98, 0x7f, 0xf4, 0x6d, 0xf, 0xff, 0xcb, 0xe4, - 0x3f, 0xfc, 0x8, 0x7f, 0xf3, 0x1e, 0xf, 0xff, - 0xe4, 0x1f, 0xfe, 0x64, 0x3f, 0xff, 0xd8, 0x7f, - 0xf2, 0xd0, 0xff, 0xff, 0x50, 0x3f, 0xfc, 0xa8, - 0x7f, 0xf3, 0x18, 0x3f, 0xfb, 0x17, 0xa0, 0xff, - 0xeb, 0x38, 0x7f, 0xf5, 0xb7, 0xcc, 0x1f, 0x90, - 0xff, 0xe7, 0x61, 0xff, 0xd4, 0xdc, 0x1b, 0x7, - 0xd8, 0x7f, 0xf3, 0xf4, 0x3f, 0xfa, 0xf, 0x40, - 0xda, 0x83, 0xff, 0xaf, 0x40, 0xff, 0xe7, 0x34, - 0x43, 0xd4, 0xf, 0x21, 0xff, 0xd1, 0x60, 0xff, - 0xe6, 0x53, 0x43, 0xe6, 0xc3, 0xff, 0x8f, 0x68, - 0x7f, 0xf0, 0x9c, 0x3f, 0xf9, 0x53, 0x87, 0xf9, - 0xf, 0x90, 0xff, 0xa4, 0xa0, 0x7f, 0xf0, 0xf0, - 0xff, 0xe4, 0x66, 0x1f, 0xfc, 0x7c, 0x3f, 0xe4, - 0x27, 0xf, 0xfe, 0x1e, 0x87, 0xff, 0x17, 0x60, - 0xff, 0xe0, 0x78, 0x3f, 0xf9, 0x98, 0x7f, 0xf0, - 0xe4, 0x3f, 0xf8, 0x4f, 0x40, 0xff, 0x9f, 0x7, - 0xc8, 0x7f, 0x90, 0xfb, 0x43, 0xff, 0x85, 0x21, - 0xff, 0xc0, 0x68, 0x87, 0xfd, 0x4c, 0x3f, 0xf8, - 0xf8, 0x7e, 0x90, 0xff, 0xe1, 0x48, 0x7f, 0x9b, - 0x43, 0xfe, 0x8c, 0x3f, 0xc8, 0x7f, 0x21, 0xfd, - 0x40, 0xff, 0xe1, 0x48, 0x7e, 0x6c, 0x3f, 0xf8, - 0x19, 0x7, 0xfd, 0x87, 0xe4, 0x3f, 0xe6, 0xf, - 0xfe, 0x14, 0x1f, 0xac, 0x3f, 0xf8, 0x1d, 0x3, - 0xff, 0x93, 0x87, 0xff, 0x1, 0xc3, 0xff, 0x85, - 0x87, 0xb8, 0x3f, 0xe7, 0x90, 0xff, 0xe0, 0xa1, - 0xf9, 0xf, 0xfe, 0x16, 0x1f, 0xfc, 0x2c, 0x34, - 0xa0, 0xff, 0x36, 0x87, 0xff, 0x6f, 0x43, 0xff, - 0x83, 0x1, 0x50, 0x7f, 0xa9, 0x87, 0xff, 0x15, - 0xf, 0x21, 0xff, 0xc5, 0x90, 0xff, 0xe0, 0x20, - 0xb0, 0xff, 0x46, 0x1f, 0xfc, 0x6c, 0x3d, 0x7, - 0xff, 0x1a, 0x81, 0xff, 0xc0, 0xe4, 0x3f, 0xd1, - 0x7, 0xff, 0x89, 0x41, 0xff, 0xc0, 0x60, 0xfe, - 0x88, 0x3f, 0xf9, 0x8, 0x72, 0x1f, 0xfc, 0x99, - 0xf, 0xfe, 0x4a, 0xa0, 0xff, 0xe7, 0xe1, 0xff, - 0xca, 0x83, 0xff, 0x80, 0x87, 0xcd, 0x87, 0xff, - 0x2d, 0xc, 0x87, 0xff, 0x2f, 0xf, 0xfa, 0xf, - 0xa8, 0x1f, 0xfc, 0xcc, 0x24, 0x3f, 0xf9, 0xb0, - 0x7f, 0xc8, 0x74, 0xa0, 0xff, 0xe6, 0x21, 0x61, - 0xff, 0xcd, 0x43, 0xfe, 0xc3, 0x98, 0x3f, 0xf9, - 0xdd, 0x10, 0xff, 0xe7, 0x41, 0xfe, 0x43, 0x50, - 0x3f, 0xfa, 0xa, 0xf, 0xfe, 0x7a, 0x1f, 0xf2, - 0x12, 0x83, 0xff, 0xdd, 0x7, 0xfb, 0x4, 0x87, - 0xff, 0xbd, 0xf, 0xf2, 0x6, 0xf, 0xff, 0x82, - 0x1f, 0xf2, 0x83, 0xff, 0xe3, 0x87, 0xf9, 0xf0, - 0x7f, 0xfc, 0x50, 0xff, 0x6a, 0xf, 0xff, 0xe2, - 0x1f, 0xff, 0x44, 0x3f, 0xff, 0xd8, 0x7f, 0x90, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xcd, 0xf, 0xf4, 0x1f, 0xff, - 0x48, 0x3f, 0x41, 0xff, 0xca, - - /* U+E915 "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xfb, 0x57, 0x57, 0x7f, - 0xc1, 0xff, 0xdc, 0x5d, 0x5d, 0xff, 0xd5, 0x97, - 0x83, 0xc8, 0x7f, 0xf4, 0xaf, 0xfe, 0xac, 0xbc, - 0x1f, 0xfc, 0xcc, 0x3f, 0xfa, 0x32, 0x1f, 0xfd, - 0xe4, 0x3f, 0xfa, 0x28, 0x7f, 0xff, 0x60, 0xff, - 0xef, 0x21, 0xff, 0xd2, 0x74, 0x3f, 0xff, 0xb6, - 0x87, 0xff, 0x6b, 0xf, 0xfe, 0xb5, 0xa1, 0xff, - 0xd8, 0x43, 0xff, 0xb1, 0x70, 0x7f, 0xff, 0x5e, - 0xf, 0xfe, 0x9a, 0x1f, 0xfd, 0xd7, 0x90, 0xff, - 0xfe, 0x36, 0x87, 0xff, 0x3b, 0xf, 0xff, 0x15, - 0xa1, 0xff, 0xcc, 0x43, 0xff, 0xc9, 0x7, 0xff, - 0xfc, 0x3f, 0xf9, 0x48, 0x7f, 0xf9, 0x50, 0xff, - 0xfe, 0x50, 0x3f, 0xf9, 0x78, 0x7d, 0x7a, 0xf, - 0xfe, 0xc4, 0x87, 0xff, 0x31, 0xf, 0x2a, 0xcc, - 0x3f, 0xfa, 0xda, 0x1f, 0xfd, 0x36, 0xd2, 0x74, - 0x3f, 0xfa, 0x78, 0x7f, 0xf3, 0x90, 0xf5, 0x3, - 0x54, 0x87, 0xff, 0x41, 0xc3, 0xff, 0xab, 0xc8, - 0x73, 0xd0, 0x3f, 0xf9, 0xcc, 0x1f, 0xfd, 0xc, - 0x34, 0xa0, 0xfd, 0xb0, 0x7f, 0xf3, 0x28, 0x1f, - 0xfd, 0x14, 0x33, 0x7, 0xfb, 0x30, 0xff, 0xe5, - 0x68, 0x7f, 0xf0, 0x9e, 0xf, 0xfe, 0x32, 0x83, - 0xfe, 0x9c, 0x3f, 0xf9, 0x18, 0x7f, 0xf0, 0xe8, - 0x30, 0x7f, 0xc8, 0x75, 0x10, 0xff, 0xa9, 0xa1, - 0xff, 0xc4, 0x70, 0xff, 0xe1, 0xc8, 0x48, 0x7f, - 0xf1, 0xba, 0x7, 0xfc, 0xd4, 0x1f, 0xfc, 0x26, - 0xf, 0xfe, 0x1e, 0x87, 0xff, 0x13, 0xf, 0xb2, - 0xf, 0xf9, 0xd4, 0x1f, 0xfc, 0x6, 0xf, 0xfe, - 0x1e, 0x1f, 0x21, 0xfe, 0x43, 0xf4, 0x61, 0xff, - 0xc0, 0xe4, 0x3f, 0xcc, 0x1f, 0xfc, 0x27, 0xf, - 0xd0, 0x7f, 0xf2, 0x29, 0x87, 0xff, 0x3, 0x90, - 0xfc, 0xc1, 0xff, 0xc2, 0xa0, 0x7f, 0xf1, 0xd0, - 0xff, 0x9b, 0x43, 0xfe, 0xe4, 0x3e, 0x83, 0xff, - 0x85, 0x21, 0xff, 0x21, 0xff, 0xc9, 0x79, 0xf, - 0xfb, 0x83, 0xd8, 0x7f, 0xf0, 0xb4, 0x3f, 0xf8, - 0x18, 0x7e, 0xc3, 0xff, 0x85, 0xd0, 0x3f, 0xeb, - 0xd, 0x87, 0xff, 0xb, 0xf, 0xfe, 0x12, 0x1f, - 0x90, 0xff, 0xe1, 0xe6, 0x1f, 0xe5, 0x40, 0x43, - 0xff, 0x82, 0xe1, 0xff, 0xdd, 0xa6, 0x1f, 0xe9, - 0x4, 0x1f, 0xfc, 0x6, 0xf, 0xfe, 0x2c, 0x1e, - 0x43, 0xff, 0x8c, 0xd8, 0x7f, 0xaf, 0x7, 0xff, - 0x1, 0x83, 0xff, 0x8c, 0x87, 0xff, 0x39, 0xb0, - 0xfe, 0x43, 0xff, 0x82, 0xc1, 0xff, 0xce, 0xc3, - 0xff, 0x90, 0xa8, 0x3f, 0xf9, 0x2c, 0x1f, 0xfc, - 0x94, 0x39, 0xf, 0xfe, 0x4c, 0xa0, 0xf9, 0xf, - 0xfe, 0x4, 0x1f, 0xfc, 0xac, 0x3f, 0xfa, 0x1c, - 0x1f, 0x41, 0xff, 0x61, 0xff, 0xcb, 0x43, 0x21, - 0xff, 0xcc, 0xb0, 0xff, 0xe2, 0xa1, 0xff, 0xcd, - 0x43, 0xff, 0xa0, 0x88, 0x68, 0x3f, 0xe8, 0x3f, - 0xf9, 0xb8, 0x50, 0x7f, 0xf3, 0x68, 0x19, 0xf, - 0xf4, 0x1f, 0xfc, 0xe6, 0x98, 0x7f, 0xf3, 0x91, - 0x2, 0x1f, 0xf2, 0x1f, 0xfc, 0xf5, 0x7, 0xff, - 0x42, 0x80, 0xc3, 0xfd, 0x7, 0xff, 0xb9, 0x9, - 0xf, 0xf2, 0x1f, 0xfe, 0xf6, 0xf, 0xf9, 0xf, - 0xff, 0x84, 0xa0, 0xff, 0x61, 0xff, 0xf2, 0xc3, - 0xfc, 0x87, 0xff, 0xc5, 0x41, 0xff, 0xff, 0xf, - 0xc8, 0x7f, 0xfc, 0xb0, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0x61, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xfe, 0xd8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0x3c, 0x3f, - 0xfe, 0x48, 0x7f, 0x90, 0xff, 0xf9, 0xc1, 0xfa, - 0xf, 0xfe, 0xf8, - - /* U+E916 "" */ - 0xf, 0xff, 0xf8, 0x7f, 0xf8, 0x14, 0x1f, 0xff, - 0xf0, 0xa8, 0x87, 0xff, 0xfc, 0xc1, 0x7, 0xff, - 0xfe, 0xd, 0x87, 0xff, 0xf5, 0x41, 0xd0, 0x7f, - 0xff, 0x20, 0xf2, 0x83, 0xff, 0xf5, 0x87, 0xe8, - 0x3f, 0xff, 0x30, 0x7f, 0xb0, 0xff, 0xfb, 0xc8, - 0x7f, 0xd0, 0x7f, 0xfd, 0x54, 0x1f, 0xfc, 0x5, - 0x7, 0xff, 0xd2, 0xf, 0xfe, 0x14, 0x1f, 0xff, - 0x3c, 0x3f, 0xf8, 0x98, 0x7f, 0xfc, 0x60, 0xff, - 0xe3, 0x41, 0xff, 0xef, 0x50, 0x7f, 0xf1, 0x94, - 0x1f, 0xfe, 0xe8, 0x3f, 0xf9, 0x12, 0x1f, 0xfe, - 0xcc, 0x3f, 0xf9, 0x50, 0x7f, 0xfa, 0xe0, 0xff, - 0xe6, 0x61, 0xff, 0xe9, 0x50, 0x7f, 0xf3, 0x60, - 0xff, 0xf4, 0x41, 0xff, 0xce, 0x50, 0x7f, 0xf4, - 0x90, 0xff, 0xe3, 0xe1, 0xff, 0xd0, 0x83, 0xff, - 0xa1, 0x7c, 0x1f, 0xfc, 0x5c, 0x3f, 0xfa, 0x58, - 0x7f, 0xf1, 0x7b, 0x43, 0x93, 0xbc, 0x1f, 0xfc, - 0x38, 0x3f, 0xfa, 0x90, 0x7f, 0xf0, 0xfa, 0x72, - 0x13, 0x40, 0xbc, 0x87, 0xff, 0x1, 0x41, 0xff, - 0xd4, 0x50, 0x7f, 0xf0, 0x1f, 0x20, 0xe4, 0x16, - 0x1d, 0xe8, 0x3f, 0xe8, 0x3f, 0xfa, 0xd0, 0x7f, - 0xcd, 0x87, 0x71, 0xe0, 0xfa, 0x20, 0xfe, 0xc3, - 0xff, 0xb1, 0x87, 0xf5, 0xe0, 0xfb, 0xc1, 0xfe, - 0xbc, 0x1f, 0x41, 0xff, 0x3e, 0xf, 0xf7, 0xa0, - 0xff, 0xa0, 0xfb, 0x20, 0xff, 0x30, 0x7f, 0x36, - 0x1c, 0xa0, 0xfe, 0xb8, 0x10, 0x7e, 0x40, 0xf0, - 0x7f, 0x28, 0x3b, 0xa0, 0x7f, 0x4c, 0x41, 0xfc, - 0xf9, 0xa, 0xf, 0xd6, 0x87, 0xff, 0x19, 0xe0, - 0xfd, 0x20, 0x7c, 0x87, 0xf4, 0x45, 0xe0, 0xff, - 0x72, 0x61, 0xe6, 0xd0, 0xff, 0xe5, 0x3e, 0x43, - 0xd0, 0xd8, 0x7f, 0xb2, 0x9, 0xb0, 0xff, 0x76, - 0x1c, 0xf2, 0x1f, 0xfc, 0xfb, 0x43, 0xbb, 0xf, - 0xf7, 0x40, 0xe7, 0xc8, 0x7f, 0x61, 0x9e, 0xf, - 0xfe, 0xa5, 0xa1, 0xb0, 0xfe, 0x7c, 0x87, 0xee, - 0x81, 0xfd, 0x8f, 0x7, 0xff, 0x62, 0xe3, 0xf, - 0xe6, 0xc3, 0xfe, 0xc8, 0x3f, 0xb4, 0x3f, 0xfb, - 0x96, 0x1f, 0xd7, 0x83, 0xff, 0x83, 0x18, 0x7f, - 0x50, 0x3f, 0xfb, 0x54, 0xf, 0xe8, 0x83, 0xff, - 0x87, 0x4c, 0x3f, 0x22, 0x1f, 0xfd, 0x84, 0x43, - 0xf7, 0xa0, 0xff, 0xe2, 0xb6, 0x1f, 0xa8, 0x1f, - 0xfd, 0x8a, 0x7, 0xee, 0x43, 0xff, 0x8e, 0xd8, - 0x7e, 0xa0, 0x7f, 0xf5, 0xa8, 0x1f, 0xa8, 0x87, - 0xff, 0x25, 0x50, 0x7c, 0xa0, 0xff, 0xeb, 0x28, - 0x3e, 0x84, 0x3f, 0xf9, 0x70, 0x87, 0xd4, 0xf, - 0xfe, 0xa5, 0x3, 0xe5, 0x41, 0xff, 0xcd, 0xa0, - 0x7c, 0xa0, 0xff, 0xea, 0x28, 0x3e, 0xb0, 0xff, - 0xe7, 0xd0, 0x3e, 0x50, 0x7f, 0xf4, 0x94, 0x1f, - 0x28, 0x3f, 0xfa, 0xa, 0xf, 0xa8, 0x1f, 0xfd, - 0x2e, 0xf, 0xa8, 0x1f, 0xfd, 0x19, 0xf, 0xfe, - 0xd2, 0x1f, 0x30, 0x7f, 0xf4, 0x98, 0x3e, 0x50, - 0x7f, 0xf4, 0x14, 0x1f, 0x48, 0x7f, 0xf4, 0xd4, - 0x1e, 0xf0, 0x7f, 0xf4, 0x3c, 0x1f, 0x21, 0xff, - 0xd4, 0xf0, 0x79, 0x41, 0xff, 0xd0, 0x50, 0x7a, - 0xc3, 0xff, 0xa8, 0xa0, 0xff, 0xf0, 0x28, 0x3f, - 0xfb, 0xa8, 0x7f, 0xf4, 0x10, 0xff, 0xef, 0x21, - 0xf9, 0xf, 0xfe, 0x72, 0x1f, 0x90, 0xff, 0xeb, - 0xa1, 0xff, 0xde, 0x43, 0xff, 0xbf, 0x87, 0xff, - 0x43, 0xf, 0xb0, 0xff, 0xeb, 0x61, 0xfb, 0xf, - 0xfe, 0x76, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xcb, 0xf, 0xfe, 0x76, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xfe, 0x8, 0x3d, 0x21, 0xf9, 0xf, 0xd8, 0x7f, - 0x41, 0xec, 0x3f, 0xfa, 0xed, 0xfe, 0x83, 0xfd, - 0x7, 0xa4, 0x3f, 0x37, 0xfc, 0x87, 0xff, 0x14, - - /* U+E917 "" */ - 0xf, 0xfe, 0x62, 0x83, 0xff, 0xfe, 0x1a, 0x81, - 0xff, 0xff, 0xb, 0x6, 0x1f, 0xff, 0xf2, 0xd, - 0x87, 0xff, 0xf9, 0x41, 0xd0, 0x7f, 0xff, 0x60, - 0xf2, 0x83, 0xff, 0xf7, 0x87, 0xe8, 0x3f, 0xff, - 0x50, 0x7f, 0xb0, 0xff, 0xfc, 0x48, 0x7f, 0xd0, - 0x7f, 0xfd, 0x94, 0x1f, 0xfc, 0x5, 0x7, 0xff, - 0xd6, 0xf, 0xfe, 0x14, 0x1f, 0xff, 0x4c, 0x3f, - 0xf8, 0x98, 0x7f, 0xfc, 0xa0, 0xff, 0xe3, 0x41, - 0xff, 0xf0, 0x50, 0x7f, 0xf1, 0x94, 0x1f, 0xfe, - 0xf8, 0x3f, 0xf9, 0x12, 0x1f, 0xfe, 0xdc, 0x3f, - 0xf9, 0x50, 0x7f, 0xfb, 0x20, 0xff, 0xe6, 0x61, - 0xff, 0xea, 0x90, 0xff, 0xe6, 0xc1, 0xff, 0xe8, - 0x50, 0x7f, 0xf3, 0x94, 0x1f, 0xfe, 0x78, 0x3f, - 0xfa, 0x10, 0x7f, 0xf9, 0xb0, 0xff, 0xe9, 0x61, - 0xff, 0xe4, 0x83, 0xff, 0xa9, 0x7, 0xff, 0x89, - 0x41, 0xff, 0xd4, 0x50, 0x7f, 0xf8, 0x60, 0xff, - 0xeb, 0x41, 0xff, 0xe0, 0xc3, 0xff, 0xb1, 0x87, - 0xff, 0x7a, 0xf, 0xfe, 0xd4, 0x1f, 0xfd, 0xc5, - 0x7, 0xff, 0x69, 0x83, 0xff, 0xb4, 0xc1, 0xff, - 0xdc, 0x50, 0x7f, 0xf6, 0x60, 0xff, 0xe0, 0x5e, - 0x83, 0xfc, 0xfa, 0xf, 0xfe, 0x4, 0x1f, 0xfd, - 0x8c, 0x3f, 0xeb, 0x40, 0x87, 0xfa, 0x3, 0xc1, - 0xff, 0x61, 0xff, 0xd6, 0x83, 0xf9, 0xb4, 0x3f, - 0xf9, 0xf, 0x7, 0xfa, 0xf, 0xfe, 0xa2, 0x83, - 0xe7, 0x90, 0xff, 0xe6, 0x3e, 0x43, 0xe5, 0x7, - 0xff, 0x4e, 0xf, 0x3c, 0x1f, 0xfd, 0x2b, 0x43, - 0xd0, 0x7f, 0xf6, 0x2e, 0xf, 0xfe, 0xb5, 0xc1, - 0xff, 0xd8, 0x81, 0x68, 0x7f, 0xf6, 0x9e, 0x4, - 0x1f, 0xfd, 0x37, 0xc8, 0x7f, 0xf7, 0x9f, 0x21, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xf9, 0x48, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xf6, 0x1f, 0xff, 0xf0, 0xe4, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xfe, 0x4, - 0x1f, 0xff, 0xf0, 0xe4, 0x3f, 0xff, 0x50, 0x7f, - 0xa0, 0xff, 0xfc, 0xa1, 0xfe, 0x43, 0xff, 0xf4, - 0x87, 0xfb, 0xf, 0xff, 0xcc, 0x1f, 0xf4, 0x1f, - 0xff, 0x94, 0x3f, 0xca, 0xf, 0xff, 0xc4, 0x1f, - 0xf4, 0x87, 0xff, 0xe2, 0xf, 0xfa, 0x81, 0xff, - 0xf7, 0x43, 0xff, 0x80, 0xe1, 0xff, 0xf7, 0xc3, - 0xff, 0x83, 0xc1, 0xff, 0xf6, 0x83, 0xff, 0x82, - 0xf0, 0x7f, 0xfd, 0x14, 0x1f, 0xfc, 0x27, 0xd2, - 0x1f, 0xff, 0x19, 0xf, 0xfe, 0x23, 0x7f, 0xff, - 0x50, 0x3f, 0xfa, 0x50, 0x7f, 0xf9, 0xb0, 0xff, - 0xe9, 0xa1, 0xff, 0xff, 0xe, 0xa0, 0x7f, 0xff, - 0xc3, 0x9c, 0x3f, 0xff, 0xe1, 0xed, 0xf, 0xff, - 0xf8, 0x75, 0xa1, 0xff, 0xff, 0xe, 0xb4, 0x3f, - 0xff, 0xe1, 0xd7, 0x21, 0xff, 0xff, 0xc, 0xde, - 0x94, 0x1f, 0xfd, 0x4c, 0x3f, 0xfc, 0x2d, 0x3f, - 0xff, 0xa8, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xe8, 0xc1, - 0xe4, 0x3f, 0xff, 0x91, 0xfe, 0xb0, 0xff, 0xf3, - 0x80, - - /* U+E918 "" */ - 0xf, 0xff, 0x52, 0x83, 0xff, 0xfe, 0x1a, 0x81, - 0xff, 0xff, 0xb, 0x6, 0x1f, 0xff, 0xf2, 0xd, - 0x7, 0xff, 0xf9, 0x41, 0x98, 0x3f, 0xff, 0xb0, - 0x79, 0x41, 0xff, 0xfb, 0xc3, 0xf4, 0x1f, 0xff, - 0xac, 0x3f, 0xd8, 0x7f, 0xfe, 0x20, 0xff, 0xe0, - 0x41, 0xff, 0xf6, 0x50, 0x7f, 0xf0, 0x14, 0x1f, - 0xff, 0x58, 0x3f, 0xf8, 0x50, 0x7f, 0xfd, 0x30, - 0xff, 0xe2, 0x61, 0xff, 0xf2, 0x83, 0xff, 0x8d, - 0x7, 0xff, 0xc1, 0x41, 0xff, 0xc6, 0x60, 0xff, - 0xf7, 0xc1, 0xff, 0xc8, 0x50, 0x7f, 0xfb, 0x70, - 0xff, 0xe5, 0x41, 0xff, 0xec, 0x83, 0xff, 0x99, - 0x87, 0xff, 0xa9, 0x41, 0xff, 0xcd, 0x83, 0xff, - 0xd3, 0x7, 0xff, 0x39, 0x41, 0xff, 0xe7, 0xc3, - 0xff, 0xa1, 0x7, 0xff, 0x9a, 0xf, 0xfe, 0x96, - 0x1f, 0xfe, 0x49, 0xf, 0xfe, 0x9c, 0x1f, 0xfe, - 0x25, 0x7, 0xff, 0x51, 0x83, 0xff, 0xc3, 0x7, - 0xff, 0x59, 0x41, 0xff, 0xdf, 0xc3, 0xff, 0xb1, - 0x7, 0xff, 0x7a, 0xf, 0xfe, 0xd6, 0x1f, 0xfd, - 0xc5, 0x7, 0xff, 0x6e, 0xf, 0xfe, 0xdc, 0x1f, - 0xfd, 0xc5, 0x7, 0xff, 0x67, 0xf, 0xfe, 0x3, - 0xe8, 0x3f, 0xcf, 0xa0, 0xff, 0xe0, 0x41, 0xff, - 0xd8, 0x83, 0xfe, 0xb8, 0x8, 0x7f, 0xa0, 0x3c, - 0x1f, 0xf6, 0x1f, 0xfd, 0x65, 0x7, 0xf5, 0xa1, - 0xff, 0xc8, 0x79, 0xf, 0xe8, 0x3f, 0xfa, 0xb0, - 0x7c, 0xda, 0x1f, 0xfc, 0xc6, 0xd0, 0xf9, 0x83, - 0xff, 0xa7, 0x87, 0x9e, 0x43, 0xff, 0xa3, 0x68, - 0x79, 0xf, 0xfe, 0xc3, 0xc1, 0xff, 0xd6, 0xb8, - 0x3f, 0xfb, 0x18, 0x2e, 0xf, 0xfe, 0xd3, 0xc0, - 0x83, 0xff, 0xa9, 0xe4, 0x3f, 0xfb, 0xcf, 0x90, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0x2d, 0xf, 0xff, 0xf8, 0x76, 0x1f, 0xff, - 0xf0, 0xe4, 0x3f, 0xff, 0xe1, 0x90, 0xff, 0xff, - 0x87, 0x41, 0xff, 0xff, 0xc, 0x87, 0xf9, 0xf, - 0xff, 0xcc, 0x1f, 0xe8, 0x3f, 0xff, 0x10, 0x7f, - 0x90, 0xff, 0xfc, 0x28, 0x3f, 0xd8, 0x7f, 0xfd, - 0xd8, 0x3f, 0xe4, 0x3f, 0xfe, 0xcc, 0x1f, 0xf4, - 0x1f, 0xff, 0x66, 0xf, 0xf9, 0x41, 0xff, 0xf5, - 0xa0, 0x7f, 0xf0, 0x20, 0xff, 0xfa, 0x3a, 0x1f, - 0xfc, 0x8, 0x3f, 0xfe, 0x77, 0x7, 0xff, 0x5, - 0x41, 0xff, 0xef, 0x6f, 0x21, 0xff, 0xc2, 0x60, - 0xff, 0xe8, 0x5f, 0xff, 0xd3, 0x90, 0xff, 0xe2, - 0xc1, 0xff, 0xd0, 0xd0, 0xff, 0xf2, 0xe1, 0xff, - 0xff, 0x9, 0xf, 0xff, 0xf8, 0x66, 0xf, 0xff, - 0xf8, 0x54, 0xf, 0xff, 0xf8, 0x1d, 0xf, 0xff, - 0xf8, 0xf0, 0x7f, 0xff, 0xc7, 0x83, 0xff, 0xb2, - 0x87, 0xff, 0x65, 0xb8, 0x3f, 0xfb, 0x72, 0x1f, - 0xfd, 0x46, 0x9c, 0x87, 0xff, 0x7a, 0xff, 0xfe, - 0xa4, 0xa0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xf8, 0xa8, 0x3c, 0xa0, 0xff, 0xfd, 0xdf, 0xfa, - 0xf, 0xfe, 0x48, - - /* U+E919 "" */ - 0xf, 0xfe, 0x5a, 0x1f, 0xfe, 0xfa, 0x21, 0xff, - 0xed, 0x51, 0x7, 0xff, 0xb6, 0xb, 0xf, 0xff, - 0x5e, 0x1d, 0x7, 0xff, 0xa6, 0xf, 0x28, 0x3f, - 0xfc, 0xea, 0xf, 0xa4, 0x3f, 0xfc, 0xd0, 0x7f, - 0x41, 0xff, 0xe5, 0xc3, 0xfe, 0xc3, 0xff, 0xc7, - 0x7, 0xff, 0x6, 0xf, 0xff, 0xa, 0x83, 0xff, - 0x82, 0xa0, 0xff, 0xef, 0xb0, 0x7f, 0xf0, 0xe0, - 0xff, 0xef, 0xc1, 0xff, 0xc5, 0xc3, 0xff, 0xbb, - 0x87, 0xff, 0x1e, 0xf, 0xfe, 0xdc, 0x1f, 0xfc, - 0x85, 0x7, 0xff, 0x65, 0x41, 0xff, 0xc9, 0x83, - 0xff, 0xb3, 0x7, 0xff, 0x2f, 0xf, 0xfe, 0xbe, - 0x1f, 0xfc, 0xd8, 0x3f, 0xfa, 0xb0, 0x7f, 0xf3, - 0x94, 0x1f, 0xfd, 0x35, 0x7, 0xff, 0x3e, 0x43, - 0xff, 0xa5, 0x7, 0xff, 0x46, 0xf, 0xfe, 0x8e, - 0x1f, 0xfd, 0x3c, 0x3f, 0xf9, 0xf0, 0x7f, 0xf5, - 0x60, 0xff, 0xe6, 0xa8, 0x3f, 0xfa, 0xaa, 0xf, - 0xfe, 0x5b, 0x7, 0xff, 0x5e, 0xf, 0xfe, 0x5c, - 0x1f, 0xfd, 0x9c, 0x3f, 0xf9, 0x38, 0x7f, 0xf0, - 0x18, 0x3f, 0xe9, 0xf, 0xfe, 0x4, 0x1f, 0xfc, - 0x78, 0x3f, 0xeb, 0x98, 0x3f, 0xb6, 0xd0, 0xff, - 0x28, 0x3f, 0xf8, 0xaa, 0xf, 0xeb, 0x42, 0x43, - 0xff, 0x83, 0x70, 0x7f, 0x41, 0xff, 0xc5, 0x83, - 0xe6, 0xd0, 0xff, 0xe4, 0xbc, 0x1f, 0xb0, 0xff, - 0xe1, 0xe1, 0xe7, 0x90, 0xff, 0xe6, 0xbc, 0x87, - 0xa0, 0xff, 0xe3, 0xbc, 0x1f, 0xfd, 0x26, 0xd0, - 0xc8, 0x7f, 0xf0, 0xa0, 0x5c, 0x1f, 0xfd, 0x7b, - 0x41, 0x7, 0xff, 0x9, 0xf2, 0x1f, 0xfd, 0xbb, - 0xc8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xfa, - 0xa8, 0x7f, 0xfc, 0x30, 0xff, 0xff, 0x87, 0xff, - 0x89, 0xf, 0xff, 0x8a, 0x1f, 0xff, 0xc, 0x3f, - 0xfe, 0x8, 0x7f, 0xf9, 0xe0, 0xfe, 0x83, 0xff, - 0xcc, 0x87, 0xf2, 0x1f, 0xfe, 0x74, 0x3f, 0xb0, - 0xff, 0xf3, 0x41, 0xfe, 0x83, 0xff, 0xcc, 0x87, - 0xf2, 0x83, 0xff, 0xcb, 0x7, 0xfa, 0x43, 0xff, - 0xca, 0x87, 0xfa, 0x43, 0xff, 0xc9, 0x7, 0xfd, - 0x40, 0xff, 0xf2, 0x41, 0xff, 0x38, 0x7f, 0xf8, - 0xd4, 0x1f, 0xfc, 0xe, 0xf, 0xff, 0x14, 0x87, - 0xff, 0x1, 0xd0, 0xff, 0xf0, 0xc1, 0xff, 0xc2, - 0xa0, 0x7f, 0xfc, 0x1d, 0xf, 0xff, 0x6, 0x87, - 0xff, 0xa, 0xc3, 0xff, 0xc1, 0x21, 0xff, 0xc3, - 0xe0, 0xff, 0xef, 0xd0, 0x3f, 0xf8, 0x6e, 0x87, - 0xff, 0x79, 0xd0, 0xff, 0xe1, 0xd0, 0x3f, 0xfb, - 0xf4, 0xf, 0xfe, 0x1b, 0xa1, 0xff, 0xde, 0x74, - 0x3f, 0xf8, 0x76, 0x1f, 0xfd, 0xfb, 0xf, 0xfe, - 0x27, 0x7, 0xff, 0x7f, 0x83, 0xff, 0x86, 0xe8, - 0x7f, 0xf7, 0x9d, 0xf, 0xfe, 0x1d, 0x3, 0xff, - 0xbf, 0x40, 0xff, 0xe1, 0xb8, 0x7f, 0xf7, 0xdd, - 0xf, 0xfe, 0x1e, 0x1f, 0xfe, 0xb, 0xf, 0xff, - 0x8f, 0x7, 0xff, 0x2, 0xf, 0xff, 0x1b, 0xa1, - 0xfe, 0x43, 0xff, 0xcb, 0x40, 0xfd, 0x87, 0xff, - 0x9d, 0xd0, 0xe4, 0x3f, 0xfd, 0x56, 0x1a, 0xf, - 0xff, 0x67, 0x4c, 0x3f, 0xfa, 0x28, 0x7f, 0xf4, - 0x14, 0x1f, 0xfc, 0xbf, 0xfa, 0xc3, 0xff, 0xaa, - - /* U+E91A "" */ - 0xf, 0xfe, 0xca, 0x1f, 0xfe, 0xf6, 0x81, 0xff, - 0xee, 0x85, 0x7, 0xff, 0xb3, 0xa, 0xf, 0xff, - 0x5c, 0x1d, 0x87, 0xff, 0xa6, 0x43, 0xd0, 0x7f, - 0xf9, 0xd4, 0x1f, 0x28, 0x3f, 0xfc, 0xd0, 0x7f, - 0x41, 0xff, 0xe5, 0xc3, 0xfe, 0xc3, 0xff, 0xc7, - 0x7, 0xff, 0x6, 0xf, 0xff, 0xa, 0x83, 0xff, - 0x82, 0xa0, 0xff, 0xf0, 0x41, 0xff, 0xc3, 0x90, - 0xff, 0xef, 0x61, 0xff, 0xc5, 0x83, 0xff, 0xbb, - 0x7, 0xff, 0x1f, 0xf, 0xfe, 0xdc, 0x87, 0xff, - 0x22, 0xf, 0xfe, 0xca, 0x83, 0xff, 0x92, 0xa0, - 0xff, 0xec, 0x41, 0xff, 0xcb, 0x83, 0xff, 0xaf, - 0x87, 0xff, 0x37, 0xf, 0xfe, 0xac, 0x1f, 0xfc, - 0xf8, 0x3f, 0xfa, 0x6a, 0xf, 0xfe, 0x7a, 0x83, - 0xff, 0xa5, 0x7, 0xff, 0x46, 0xf, 0xfe, 0x8e, - 0x1f, 0xfd, 0x3c, 0x3f, 0xf9, 0xf0, 0x7f, 0xf5, - 0x60, 0xff, 0xe6, 0xa8, 0x3f, 0xfa, 0xaa, 0xf, - 0xfe, 0x5b, 0x7, 0xff, 0x5e, 0x43, 0xff, 0x95, - 0x7, 0xff, 0x66, 0xf, 0xfe, 0x4e, 0x1f, 0xfc, - 0x6, 0xf, 0xfa, 0x43, 0xff, 0x81, 0x87, 0xff, - 0x1e, 0xf, 0xf9, 0xe7, 0xf, 0xe9, 0xb8, 0x3f, - 0xe8, 0x3f, 0xf8, 0xaa, 0xf, 0xeb, 0x83, 0xff, - 0x82, 0x84, 0xf0, 0x7f, 0x28, 0x3f, 0xf8, 0x90, - 0x7e, 0xb4, 0x3f, 0xf9, 0x2f, 0x21, 0xf4, 0x1f, - 0xfc, 0x3c, 0x3c, 0xf9, 0xf, 0xfe, 0x6b, 0x68, - 0x7b, 0xf, 0xfe, 0x3b, 0xc1, 0xff, 0xd3, 0xb4, - 0x3f, 0xf8, 0xf0, 0x2e, 0xf, 0xfe, 0xbd, 0xc0, - 0x83, 0xff, 0x84, 0xf9, 0xf, 0xfe, 0xdb, 0xe4, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xfc, 0xb4, - 0x3f, 0xfe, 0x18, 0x7f, 0xfc, 0x10, 0xff, 0xff, - 0x87, 0xff, 0x85, 0xf, 0xff, 0x86, 0x1f, 0xff, - 0x4, 0x3f, 0xfd, 0xf0, 0x7f, 0x41, 0xff, 0xe6, - 0x43, 0xf9, 0xf, 0xff, 0x2e, 0x1f, 0xc8, 0x7f, - 0xf9, 0x60, 0xff, 0x41, 0xff, 0xe4, 0x50, 0x7f, - 0x21, 0xff, 0xe4, 0x60, 0xff, 0x41, 0xff, 0xe3, - 0x60, 0xff, 0x21, 0xff, 0xe3, 0x60, 0xff, 0xa0, - 0xff, 0xf1, 0x70, 0x7f, 0xd0, 0x7f, 0xf8, 0x6c, - 0x3f, 0xf8, 0xa, 0xf, 0xfe, 0xfb, 0xa1, 0xff, - 0xc0, 0x60, 0xff, 0xef, 0xd0, 0x3f, 0xf8, 0x50, - 0x7f, 0xf7, 0x9d, 0xf, 0xff, 0x6f, 0x7, 0xff, - 0x9, 0xc3, 0xff, 0xbb, 0x61, 0xff, 0xc3, 0x60, - 0xff, 0xee, 0x3a, 0x1f, 0xfc, 0x3a, 0x7, 0xff, - 0x72, 0x81, 0xff, 0xc3, 0x74, 0x3f, 0xfb, 0x6e, - 0x87, 0xff, 0xe, 0x81, 0xff, 0xdc, 0xe0, 0xff, - 0xe1, 0xba, 0x1f, 0xfd, 0xbb, 0xf, 0xfe, 0x27, - 0x7, 0xff, 0x6d, 0xd0, 0xff, 0xe1, 0xd8, 0x7f, - 0xf7, 0x28, 0x1f, 0xfc, 0x37, 0x43, 0xff, 0xb9, - 0xa1, 0xff, 0xc3, 0xa0, 0x7f, 0xf7, 0x70, 0xff, - 0xe1, 0xba, 0x1f, 0xfe, 0xde, 0xf, 0xff, 0x4, - 0x1f, 0xfc, 0xb, 0xf, 0xff, 0x12, 0x1f, 0xe7, - 0x43, 0xff, 0xc9, 0x87, 0xea, 0x7, 0xff, 0x9d, - 0xe, 0x74, 0x3f, 0xfd, 0x10, 0x6e, 0xf, 0xff, - 0x5f, 0x4c, 0x3f, 0xfd, 0xca, 0xf, 0xff, 0xf8, - 0x7f, 0xf0, 0x7f, 0xf8, 0x3f, 0xf8, 0xe0, - - /* U+E91B "" */ - 0xf, 0xff, 0x8b, 0x7f, 0xe9, 0xf, 0xff, 0xa3, - 0x7a, 0x43, 0xf3, 0x70, 0x7f, 0xfc, 0x1e, 0x43, - 0xff, 0x86, 0xe8, 0x7f, 0xfb, 0x78, 0x3f, 0xf9, - 0x12, 0x1f, 0xfe, 0xab, 0xf, 0xfe, 0x5c, 0x1f, - 0xfe, 0x9d, 0xf, 0xfe, 0x6c, 0x1f, 0xfe, 0x7c, - 0x3f, 0xf9, 0xe8, 0x7f, 0xf9, 0xb0, 0xff, 0xe8, - 0xa1, 0xff, 0xe3, 0x70, 0xff, 0xe9, 0x61, 0xff, - 0xe2, 0x60, 0xff, 0xe9, 0xa1, 0xff, 0xe1, 0xa0, - 0x7f, 0xf1, 0x97, 0x7, 0xff, 0xaf, 0x43, 0xff, - 0x86, 0xde, 0xac, 0x87, 0xff, 0x21, 0x83, 0xff, - 0xa7, 0x87, 0xff, 0xd, 0xe4, 0x3f, 0xf9, 0xd4, - 0x70, 0xff, 0xe8, 0xe1, 0xff, 0xc3, 0xa0, 0x7f, - 0xf4, 0x50, 0x90, 0xff, 0xe7, 0x38, 0x7f, 0xf0, - 0xf4, 0x3f, 0xfa, 0xd8, 0x7f, 0xf3, 0x68, 0x1f, - 0xfc, 0x3c, 0x3f, 0xfa, 0x68, 0x64, 0x3f, 0xf9, - 0x92, 0x1f, 0xfc, 0x27, 0xf, 0xfe, 0xa6, 0x1f, - 0xfd, 0xd, 0xf, 0xfe, 0x13, 0x7, 0xff, 0x55, - 0xe, 0x43, 0xff, 0x93, 0x87, 0xff, 0xe, 0x81, - 0xff, 0xdc, 0xc3, 0xff, 0x91, 0x87, 0xff, 0xe, - 0x43, 0xff, 0xba, 0x87, 0xff, 0x19, 0xc3, 0xff, - 0x87, 0xa1, 0xff, 0xd7, 0x43, 0xe4, 0x3f, 0xf8, - 0x94, 0xf, 0xfe, 0x1e, 0x1f, 0xfd, 0x9c, 0x3e, - 0xc3, 0xff, 0x87, 0x21, 0xff, 0xc2, 0x70, 0xff, - 0xed, 0x21, 0xf2, 0x1f, 0xfc, 0x2d, 0xf, 0xfe, - 0x13, 0x7, 0xff, 0xc7, 0xf, 0xfe, 0x1d, 0x3, - 0xff, 0xb6, 0x87, 0xf2, 0x1f, 0xe7, 0xf, 0xfe, - 0x1c, 0x87, 0xff, 0x73, 0xf, 0xec, 0x3f, 0x98, - 0x3f, 0xf8, 0x7a, 0x1f, 0xfd, 0xd4, 0x3f, 0x90, - 0xfd, 0x40, 0xff, 0xe1, 0xe1, 0xff, 0xf1, 0x90, - 0xff, 0xe1, 0x38, 0x7f, 0xfa, 0xe0, 0xed, 0xf, - 0xfe, 0x13, 0x7, 0xff, 0x81, 0xf, 0xf9, 0xd, - 0x87, 0xff, 0xe, 0x81, 0xff, 0xe1, 0xc3, 0xff, - 0x80, 0x8e, 0x1f, 0xfc, 0x39, 0xf, 0xff, 0x12, - 0x1f, 0xfc, 0xb, 0x83, 0xff, 0x87, 0xa1, 0xff, - 0xff, 0x6, 0x1f, 0xfe, 0x44, 0x3f, 0xfa, 0xe, - 0x1f, 0xfe, 0x5c, 0x3f, 0xf9, 0xec, 0x1f, 0xff, - 0xf0, 0x50, 0x3f, 0xfc, 0xe8, 0x7f, 0xf3, 0x64, - 0x3f, 0xff, 0xe0, 0xd0, 0xff, 0xf4, 0x21, 0xff, - 0xcc, 0xc3, 0xff, 0xd5, 0x87, 0xff, 0x2f, 0xf, - 0xff, 0x5a, 0x1f, 0xff, 0xf0, 0xff, 0xe8, 0x41, - 0xff, 0xff, 0xc, 0xf0, 0x7f, 0xfa, 0x10, 0xff, - 0xe7, 0x3c, 0x1f, 0xfe, 0x6c, 0x3f, 0xfa, 0xf, - 0x7, 0xff, 0x91, 0xf, 0xfe, 0x93, 0xc1, 0xff, - 0xff, 0xc, 0xf2, 0x1f, 0xfd, 0xe4, 0x3f, 0xfa, - 0xed, 0xa1, 0xff, 0xdc, 0xc3, 0xff, 0xb5, 0x68, - 0x7f, 0xf6, 0x90, 0xff, 0xee, 0x58, 0x7f, 0xff, - 0xc3, 0xa0, 0xff, 0xff, 0x87, 0xff, 0x71, 0xf, - 0xfe, 0xfc, 0x1f, 0xfd, 0x7c, 0x3f, 0xf9, 0xab, - 0xea, 0xf7, 0xf8, 0x3f, 0xfb, 0x6b, 0xea, 0xf7, - 0xff, 0xd5, 0xe5, 0xf0, 0x7f, 0xf7, 0xaf, 0x57, - 0x97, 0xc1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, - 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xc2, 0xc3, 0xf9, 0xf, 0xff, 0xca, - 0x83, 0xe6, - - /* U+E91C "" */ - 0xf, 0x9b, 0xff, 0x48, 0x7f, 0xfd, 0xae, 0x43, - 0xf3, 0x7a, 0x43, 0xff, 0xe0, 0xe8, 0x7f, 0xf0, - 0xdb, 0x43, 0xff, 0xda, 0xc1, 0xff, 0xc8, 0xb0, - 0xff, 0xf6, 0x41, 0xff, 0xcb, 0xe0, 0xff, 0xf4, - 0xc1, 0xff, 0xcd, 0x70, 0xff, 0xf4, 0x21, 0xff, - 0xcf, 0xc3, 0xff, 0xcc, 0x87, 0xff, 0x47, 0xf, - 0xff, 0x2e, 0x1f, 0xfd, 0x2d, 0xf, 0xff, 0x1a, - 0x1f, 0xfd, 0x39, 0xf, 0xff, 0x6a, 0xe0, 0xff, - 0xe3, 0x50, 0x3f, 0xfd, 0x6d, 0x6f, 0x48, 0x7f, - 0xf0, 0xdc, 0x3f, 0xfe, 0x2d, 0xa1, 0xff, 0xc3, - 0xc3, 0xff, 0xa7, 0x21, 0xff, 0xd2, 0xa0, 0x7f, - 0xf0, 0xf0, 0xff, 0xe8, 0xed, 0x3, 0xff, 0xa4, - 0xe1, 0xff, 0xc3, 0xd0, 0xff, 0xe7, 0x21, 0x21, - 0xff, 0xd4, 0xc3, 0xff, 0x87, 0x40, 0xff, 0xe6, - 0xe1, 0xff, 0xd9, 0xd0, 0xff, 0xe1, 0x30, 0x7f, - 0xf3, 0x10, 0xc8, 0x7f, 0xf5, 0x64, 0x3f, 0xf8, - 0x4e, 0x1f, 0xfd, 0xc, 0x3f, 0xfa, 0xd4, 0xf, - 0xfe, 0x1e, 0x1f, 0xfc, 0x94, 0x39, 0xf, 0xfe, - 0xbb, 0x7, 0xff, 0xf, 0xf, 0xfe, 0x46, 0x1f, - 0xfd, 0xe7, 0xf, 0xfe, 0x1e, 0x87, 0xff, 0x19, - 0xf, 0xff, 0x6, 0x1f, 0xfc, 0x3a, 0x7, 0xff, - 0x11, 0xf, 0x90, 0xff, 0xed, 0x68, 0x7f, 0xf0, - 0x98, 0x3f, 0xf8, 0x78, 0x7d, 0x87, 0xff, 0x6e, - 0x43, 0xff, 0x84, 0xe1, 0xff, 0xc2, 0x43, 0xe4, - 0x3f, 0xfb, 0x94, 0xf, 0xfe, 0x1e, 0x1f, 0xff, - 0x36, 0xf, 0xfe, 0x1e, 0x87, 0xf9, 0xf, 0xe4, - 0x3f, 0xfb, 0xae, 0x1f, 0xfc, 0x39, 0xf, 0xec, - 0x3f, 0xb0, 0xff, 0xef, 0xe1, 0xff, 0xc3, 0xa0, - 0x7e, 0x43, 0xf9, 0xf, 0xff, 0x6, 0x87, 0xff, - 0x9, 0x83, 0xff, 0xe7, 0x21, 0xff, 0xc2, 0x70, - 0xe8, 0x3f, 0xfd, 0xb4, 0xf, 0xfe, 0x1e, 0x19, - 0xf, 0xf9, 0xf, 0xff, 0x13, 0x7, 0xff, 0xf, - 0x44, 0x3f, 0xf8, 0x18, 0x7f, 0xf8, 0xdc, 0x3f, - 0xf8, 0x77, 0x7, 0xff, 0x1, 0xf, 0xff, 0x2e, - 0x1f, 0xff, 0xf0, 0xed, 0xf, 0xfe, 0x82, 0x1f, - 0xfe, 0x69, 0xf, 0xff, 0xf8, 0x6a, 0x7, 0xff, - 0x3b, 0xf, 0xff, 0x43, 0x7, 0xff, 0x35, 0xf, - 0xff, 0x4b, 0x87, 0xff, 0xfc, 0x3b, 0xf, 0xfe, - 0x62, 0x1f, 0xfe, 0xbc, 0x3f, 0xf9, 0x78, 0x7f, - 0xff, 0xc3, 0x21, 0xff, 0xeb, 0x83, 0xff, 0xfe, - 0xb, 0x43, 0xff, 0xff, 0x68, 0x7f, 0xf3, 0x90, - 0xff, 0xf2, 0x5a, 0x1f, 0xfd, 0xc, 0x3f, 0xfc, - 0x56, 0x87, 0xff, 0x49, 0xf, 0xfe, 0xfb, 0x68, - 0x7f, 0xff, 0x9e, 0x43, 0xff, 0xae, 0x87, 0xff, - 0x69, 0xe0, 0xff, 0xed, 0x61, 0xff, 0xd9, 0xe0, - 0xff, 0xee, 0x21, 0xff, 0xd8, 0x83, 0xff, 0xfe, - 0x19, 0xf, 0xff, 0xf8, 0x6c, 0x3f, 0xfb, 0xe8, - 0x7f, 0xf6, 0x3f, 0xd5, 0xe5, 0xf0, 0x7f, 0xf3, - 0x70, 0xff, 0xef, 0x2f, 0xab, 0xdf, 0xff, 0x57, - 0x97, 0xc1, 0xff, 0xf8, 0x5f, 0x57, 0xbd, 0x7, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, - 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, - 0xfe, 0x1f, 0xfd, 0x24, 0x3f, 0xb0, 0xff, 0xfc, - 0xc8, 0x7c, 0xa0, 0xff, 0xfc, 0x80, - - /* U+E91D "" */ - 0xf, 0xfe, 0x9b, 0xe4, 0x3f, 0xf9, 0xd7, 0xfa, - 0xf, 0xfe, 0x9d, 0x1, 0x7, 0xff, 0x37, 0xff, - 0x10, 0x7f, 0xf4, 0x74, 0x3f, 0xfa, 0x48, 0x7a, - 0x43, 0xff, 0x9e, 0xe1, 0xd0, 0x7f, 0xfc, 0x58, - 0x3c, 0x87, 0xff, 0xc2, 0x81, 0xe8, 0x3f, 0xfe, - 0x1a, 0x1f, 0x21, 0xff, 0xee, 0x70, 0xfc, 0x87, - 0xff, 0xba, 0x81, 0xfd, 0x7, 0xff, 0xb7, 0x43, - 0xf9, 0xf, 0xff, 0x63, 0x87, 0xfd, 0x7, 0xff, - 0xad, 0x83, 0xfe, 0x43, 0xff, 0xd7, 0x40, 0xff, - 0xe0, 0x61, 0xff, 0xea, 0xd0, 0xff, 0xe0, 0xa1, - 0xff, 0xe8, 0x70, 0xff, 0xe1, 0x41, 0xff, 0xe8, - 0xa0, 0x7f, 0xf0, 0xd0, 0xff, 0xf3, 0xe8, 0x7f, - 0xf0, 0xe0, 0xff, 0xf3, 0x38, 0x7f, 0xf1, 0x50, - 0xff, 0xf2, 0xd0, 0x3f, 0xfe, 0xf2, 0x1f, 0xfc, - 0x74, 0x3f, 0xfc, 0x7a, 0x1f, 0xfc, 0x8b, 0xff, - 0xf8, 0x54, 0x43, 0xff, 0xa0, 0xe1, 0xff, 0xd9, - 0x55, 0xe9, 0xf, 0xfe, 0x5d, 0x3, 0xff, 0xbe, - 0xdc, 0x1f, 0xfc, 0x8d, 0xf, 0xff, 0x1b, 0xc1, - 0xff, 0xc4, 0x70, 0xff, 0xf3, 0xbc, 0x1f, 0xff, - 0x97, 0xf, 0xfe, 0xb, 0x87, 0xff, 0xaf, 0x43, - 0xff, 0x83, 0x87, 0xff, 0xae, 0x81, 0xff, 0xc1, - 0xd0, 0xff, 0xf5, 0x21, 0xff, 0xc2, 0xa0, 0x7f, - 0xfa, 0xe0, 0xff, 0xe0, 0xb8, 0x7f, 0xf2, 0x6f, - 0xff, 0xe1, 0x48, 0x7f, 0xf1, 0x18, 0x3f, 0xf8, - 0x5a, 0x1f, 0xfc, 0x74, 0x3f, 0xf8, 0x4d, 0xe4, - 0x3f, 0xf8, 0x4a, 0xf, 0xfe, 0x15, 0x3, 0xff, - 0xb3, 0x68, 0x7f, 0xf0, 0x60, 0xff, 0xe1, 0xb8, - 0x7f, 0xf1, 0x60, 0xff, 0xe4, 0x58, 0x7f, 0xf0, - 0x70, 0xff, 0xe2, 0x68, 0x7f, 0xf0, 0xd0, 0xff, - 0xe5, 0x68, 0x7f, 0xf0, 0x10, 0xff, 0xe2, 0x50, - 0x3f, 0xf8, 0x68, 0x7f, 0xf2, 0xa8, 0x1f, 0xf4, - 0x1f, 0xfc, 0x57, 0xf, 0xfe, 0x14, 0x1f, 0xfc, - 0xb6, 0xf, 0xfa, 0xf, 0xfe, 0x36, 0x87, 0xff, - 0x5, 0xf, 0xfe, 0x5a, 0x83, 0xfc, 0x87, 0xff, - 0x1e, 0x43, 0xff, 0x81, 0x7, 0xff, 0x32, 0xf, - 0xf9, 0xf, 0xfe, 0x3d, 0x3, 0xff, 0xb3, 0x87, - 0xfa, 0xf, 0xfe, 0x43, 0x87, 0xfd, 0x7, 0xff, - 0x35, 0xf, 0xf2, 0x1f, 0xfc, 0x9d, 0xf, 0xe4, - 0x3f, 0xf9, 0xb0, 0x7f, 0xb0, 0xff, 0xe5, 0x50, - 0x3f, 0xa0, 0xff, 0xe6, 0xa1, 0xfc, 0x87, 0xff, - 0x2d, 0xc3, 0xf2, 0x1f, 0xfc, 0xd8, 0x3f, 0xfa, - 0xfa, 0x1f, 0x41, 0xff, 0xf1, 0xa0, 0x79, 0xf, - 0xfe, 0x6a, 0x1f, 0xfd, 0x87, 0xf, 0x21, 0xff, - 0xf3, 0xd0, 0xd0, 0x7f, 0xf3, 0x30, 0xff, 0xed, - 0xc8, 0x7f, 0xf4, 0x10, 0xff, 0xee, 0x50, 0x18, - 0x7f, 0xfd, 0x9f, 0x7, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xfe, 0x9c, 0x1f, 0xb0, - - /* U+E91E "" */ - 0x2f, 0xf4, 0x1f, 0xfc, 0xe7, 0xc8, 0x7f, 0xf4, - 0xe3, 0xfc, 0x41, 0xff, 0xcd, 0x81, 0x40, 0xff, - 0xe9, 0x30, 0x7a, 0x43, 0xff, 0xa2, 0xc1, 0xff, - 0xf4, 0x83, 0x38, 0x7f, 0xfc, 0xd0, 0xf6, 0x87, - 0xff, 0xc9, 0xf, 0x50, 0x3f, 0xfe, 0x30, 0x7c, - 0xe1, 0xff, 0xf1, 0x43, 0xf6, 0x87, 0xff, 0xbe, - 0xf, 0xea, 0x7, 0xff, 0xbd, 0xf, 0xe7, 0xf, - 0xff, 0x76, 0x1f, 0xf6, 0x1f, 0xfe, 0xd4, 0x3f, - 0xf8, 0x1a, 0x1f, 0xfe, 0xc8, 0x3f, 0xf8, 0x14, - 0xf, 0xff, 0x5a, 0x1f, 0xfc, 0x17, 0xf, 0xff, - 0x5c, 0x1f, 0xfc, 0x2d, 0xf, 0xff, 0x4a, 0x1f, - 0xfc, 0x3a, 0x7, 0xff, 0xa5, 0xf, 0xfe, 0x1b, - 0x87, 0xff, 0xa2, 0xf, 0xfe, 0x2e, 0x87, 0xff, - 0xe6, 0x43, 0xff, 0xcb, 0x7, 0xff, 0x1e, 0x81, - 0xff, 0xd2, 0x55, 0xff, 0xfc, 0x34, 0x3f, 0xf9, - 0xe, 0x1f, 0xfc, 0xe7, 0xd4, 0x43, 0xff, 0xb5, - 0xa1, 0xff, 0xca, 0xb8, 0x3f, 0xfc, 0x14, 0xf, - 0xfe, 0x3d, 0xa1, 0xff, 0xe3, 0x70, 0xff, 0xe2, - 0x5a, 0x1f, 0xfe, 0x7d, 0xf, 0xfe, 0x3, 0xa1, - 0xff, 0xf6, 0x60, 0xff, 0xf5, 0xe8, 0x7f, 0xa8, - 0x1f, 0xfe, 0xa7, 0xf, 0xfe, 0x2, 0x1f, 0xfe, - 0xaa, 0x7, 0xfd, 0x7, 0xff, 0xaf, 0x43, 0xfe, - 0x90, 0xff, 0xe2, 0x37, 0xff, 0xf0, 0xa0, 0xff, - 0xe4, 0x38, 0x7f, 0xf0, 0x14, 0x1f, 0xfc, 0x2b, - 0xd2, 0x1f, 0xfc, 0x24, 0x3f, 0xf8, 0xec, 0x1f, - 0xfc, 0x18, 0x3f, 0xf8, 0x36, 0x87, 0xff, 0x66, - 0x81, 0xff, 0xc1, 0xc3, 0xff, 0x80, 0xe8, 0x7f, - 0xf2, 0x20, 0xff, 0xe2, 0xe8, 0x7f, 0xf0, 0x60, - 0xff, 0xe0, 0x50, 0x3f, 0xf9, 0x48, 0x7f, 0xf0, - 0xdc, 0x3f, 0xf8, 0x68, 0x7f, 0xd2, 0x1f, 0xfc, - 0xa8, 0x3f, 0xf8, 0x74, 0xf, 0xfe, 0x1c, 0x1f, - 0xf4, 0x87, 0xff, 0x2d, 0xf, 0xfe, 0x16, 0x87, - 0xff, 0x11, 0xf, 0xf4, 0x87, 0xff, 0x2d, 0xf, - 0xfe, 0xb, 0x87, 0xff, 0x16, 0xf, 0xf2, 0x83, - 0xff, 0x99, 0x7, 0xff, 0x2, 0x81, 0xff, 0xc6, - 0x43, 0xfd, 0x7, 0xff, 0x31, 0xf, 0xfe, 0x6, - 0x87, 0xff, 0x19, 0xf, 0xf4, 0x1f, 0xfc, 0xd8, - 0x3f, 0xce, 0x1f, 0xfc, 0x8c, 0x3f, 0xc8, 0x7f, - 0xf5, 0xd8, 0x3f, 0xf9, 0x28, 0x7f, 0x21, 0xff, - 0xcd, 0x83, 0xfa, 0x81, 0xff, 0xd4, 0x83, 0xff, - 0x9a, 0x87, 0xed, 0xf, 0xff, 0x74, 0x1f, 0x38, - 0x7f, 0xf5, 0x90, 0xff, 0xe6, 0xa1, 0xea, 0x7, - 0xff, 0x5f, 0xf, 0xfe, 0x64, 0x1e, 0xd0, 0xff, - 0xec, 0x21, 0xff, 0xcc, 0x43, 0x38, 0x7f, 0xfd, - 0xe8, 0x1f, 0xff, 0x4c, 0x1a, 0x1f, 0xff, 0x6f, - 0x7, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xde, 0xc3, - 0xf6, 0x1f, 0xff, 0x0, - - /* U+E91F "" */ - 0xf, 0xfe, 0xed, 0xfe, 0x83, 0xff, 0xbb, 0x7f, - 0xe8, 0x3f, 0xfb, 0x8a, 0xf, 0x28, 0x3f, 0xff, - 0xe1, 0xff, 0xcd, 0xff, 0xab, 0x2e, 0xf, 0xfe, - 0xba, 0x1e, 0x5d, 0x5b, 0xff, 0xab, 0x97, 0x7, - 0xff, 0x17, 0xf, 0xfe, 0x5a, 0xf5, 0x6f, 0xf8, - 0x3f, 0xfc, 0xf8, 0x7e, 0x43, 0xff, 0xfe, 0x1f, - 0xfc, 0x38, 0x3f, 0x90, 0xff, 0xec, 0xc2, 0x1f, - 0xd8, 0x7f, 0xf5, 0xed, 0xf, 0xff, 0x3, 0x68, - 0x7f, 0xf0, 0x50, 0xff, 0xe9, 0x3c, 0x87, 0xff, - 0x81, 0xe0, 0xff, 0xe3, 0xa1, 0xff, 0xcd, 0xb8, - 0x3f, 0xf9, 0x38, 0x7f, 0xf2, 0xed, 0xf, 0xff, - 0x16, 0x87, 0xff, 0x35, 0xf, 0xff, 0xe4, 0x1f, - 0xfc, 0xf4, 0x3f, 0xf9, 0x2c, 0x1f, 0xfc, 0xec, - 0x3f, 0xf9, 0x4e, 0x1f, 0xfe, 0x6c, 0x3f, 0xf9, - 0x88, 0x7f, 0xf3, 0x74, 0x3f, 0xfc, 0xb4, 0xf, - 0xfe, 0x52, 0x1f, 0xfc, 0xe6, 0xf, 0xfe, 0x4e, - 0x1f, 0xfc, 0x4, 0x3f, 0xf8, 0x4e, 0x1f, 0xfd, - 0x4a, 0x70, 0x7f, 0xf0, 0xb0, 0xff, 0xe3, 0xa1, - 0xff, 0x20, 0x60, 0xff, 0xe1, 0x68, 0x7f, 0xf5, - 0x5c, 0x3f, 0xf8, 0x52, 0x1f, 0xfc, 0x54, 0x3f, - 0xa0, 0xf6, 0x1f, 0xfc, 0x2a, 0x7, 0xff, 0x13, - 0xf, 0xe4, 0x3e, 0xd0, 0xff, 0xe0, 0xb0, 0x7f, - 0xf5, 0xa8, 0x1f, 0xfc, 0x14, 0x3f, 0xf8, 0x68, - 0x7e, 0x43, 0xfc, 0xc1, 0xff, 0xc2, 0x43, 0xff, - 0x95, 0x87, 0xfc, 0xe1, 0xff, 0xc1, 0x83, 0xff, - 0x84, 0x87, 0xc8, 0x7f, 0xf0, 0x70, 0xff, 0xe0, - 0xe1, 0xff, 0xc1, 0xc3, 0xc8, 0x7f, 0xf0, 0xf4, - 0x3f, 0xf8, 0x10, 0x7f, 0xf0, 0x10, 0xf6, 0x1f, - 0xfc, 0x49, 0xf, 0xf9, 0x41, 0xff, 0xc6, 0x43, - 0xff, 0x8b, 0x21, 0xff, 0x41, 0xff, 0xd9, 0x90, - 0xff, 0xa0, 0xff, 0x90, 0xd0, 0x7f, 0xf2, 0x20, - 0xff, 0x90, 0xff, 0xb0, 0xc8, 0x7f, 0xf2, 0x70, - 0xff, 0xa0, 0xff, 0x21, 0xff, 0xcf, 0x83, 0xfc, - 0x87, 0xff, 0x9, 0xf, 0xfe, 0x5a, 0x83, 0xfc, - 0x87, 0xfa, 0x18, 0x3f, 0xf9, 0x90, 0x7f, 0xa0, - 0xff, 0x3c, 0x1f, 0xfc, 0xe4, 0x3f, 0xfc, 0xb0, - 0x7f, 0x90, 0xff, 0xf2, 0xe1, 0xff, 0xdb, 0x83, - 0xf9, 0xf, 0xfe, 0xda, 0x1f, 0xff, 0xf0, 0xff, - 0xe6, 0xa1, 0xff, 0xe5, 0xc3, 0xff, 0xca, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, - 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, - 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, - 0xff, 0x87, 0xff, 0x9a, 0xf, 0xd8, - - /* U+E920 "" */ - 0x2f, 0xf4, 0x1f, 0xfd, 0xdb, 0xff, 0x41, 0xff, - 0xdc, 0x50, 0x79, 0x41, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xf3, 0x57, 0x56, 0xff, 0x83, 0xff, - 0x8a, 0xba, 0xbb, 0xff, 0xab, 0x2e, 0xf, 0x21, - 0xfe, 0xff, 0xab, 0x2f, 0x7, 0xff, 0x2f, 0xf, - 0xd8, 0x7f, 0xff, 0xc3, 0xff, 0x86, 0x87, 0xe8, - 0x3f, 0xfc, 0xa9, 0x7, 0xff, 0x65, 0xf, 0xf9, - 0xe0, 0xff, 0xeb, 0xe1, 0xff, 0xc1, 0x79, 0xf, - 0xff, 0x23, 0x68, 0x7f, 0xf4, 0x90, 0xff, 0xe3, - 0x5a, 0x1f, 0xfe, 0x5b, 0x83, 0xff, 0x9a, 0x87, - 0xff, 0x2d, 0xe0, 0xff, 0xe5, 0xe1, 0xff, 0xcd, - 0x70, 0xff, 0xfe, 0x21, 0xff, 0xce, 0x83, 0xff, - 0xc9, 0xa1, 0xff, 0xc9, 0x43, 0xff, 0x9b, 0x87, - 0xff, 0x2f, 0xf, 0xfe, 0x66, 0x1f, 0xfe, 0x37, - 0xf, 0xfe, 0x6a, 0x1f, 0xfc, 0x9a, 0x7, 0xff, - 0x8e, 0x43, 0xff, 0x9c, 0x87, 0xff, 0x23, 0x43, - 0xff, 0x84, 0x87, 0xff, 0x3, 0xf, 0xfe, 0x3e, - 0x1f, 0xfc, 0x2b, 0xa0, 0x7f, 0xf4, 0x5c, 0x3f, - 0xf8, 0x52, 0x4, 0x3f, 0xe4, 0x3f, 0xf8, 0x8c, - 0x1f, 0xfc, 0x2d, 0xf, 0xfe, 0x9d, 0x3, 0xff, - 0x85, 0x87, 0xa0, 0xfe, 0x43, 0xff, 0x87, 0x21, - 0xff, 0xc1, 0x70, 0xf9, 0xf, 0xec, 0x3f, 0xf8, - 0x68, 0x7f, 0xf0, 0x68, 0x1f, 0xfc, 0x64, 0x3f, - 0xf8, 0x28, 0x7f, 0xf0, 0xa4, 0x3f, 0xc8, 0x7f, - 0xf2, 0xa0, 0xff, 0xe0, 0xe8, 0x7f, 0xd8, 0x7f, - 0xf2, 0x70, 0xff, 0xe0, 0xe1, 0xff, 0xc1, 0x43, - 0xe4, 0x3f, 0xf8, 0x10, 0x7f, 0xf0, 0x1c, 0x3f, - 0xf8, 0x68, 0x7b, 0xf, 0xf9, 0x41, 0xff, 0x30, - 0x7f, 0xf1, 0x30, 0xf2, 0x1f, 0xf4, 0x1f, 0xf3, - 0x7, 0xff, 0x15, 0xf, 0xfe, 0x2c, 0x1f, 0xf3, - 0x7, 0xff, 0x61, 0xf, 0xfa, 0xf, 0xfe, 0x44, - 0x19, 0xf, 0xf4, 0x1f, 0xf6, 0x1f, 0xfc, 0x94, - 0x36, 0x1f, 0xe4, 0x3f, 0xd0, 0x7f, 0xf3, 0xd0, - 0xfe, 0x43, 0xfc, 0xa0, 0xff, 0xe5, 0xa1, 0xff, - 0xc1, 0x83, 0xfd, 0x7, 0xff, 0x32, 0x48, 0x3f, - 0xf9, 0x8, 0x7f, 0xf3, 0xad, 0xf, 0xe4, 0x3f, - 0xd0, 0x7f, 0xf6, 0xb0, 0xff, 0xf2, 0xa1, 0xfd, - 0x7, 0xff, 0x95, 0xf, 0xff, 0xf8, 0x7f, 0xf2, - 0xd0, 0xff, 0xf2, 0xe1, 0xff, 0xe5, 0x43, 0xff, - 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xb7, 0x87, 0xec, 0x3f, 0xfb, 0x80, - - /* U+E921 "" */ - 0xf, 0xff, 0xaa, 0xaf, 0x83, 0xff, 0xee, 0xd3, - 0xf5, 0x10, 0xff, 0xf9, 0x2a, 0x9f, 0xa5, 0x7, - 0xf4, 0x1f, 0xfe, 0xbb, 0xea, 0x28, 0x3f, 0xf8, - 0x7a, 0x1f, 0xfe, 0xb4, 0x3f, 0xf9, 0xe, 0x1f, - 0xfe, 0xd4, 0x3f, 0xf8, 0xfc, 0x1f, 0xfe, 0xe8, - 0x3f, 0xf8, 0xae, 0x1f, 0xff, 0xf0, 0x50, 0x3f, - 0xfe, 0x50, 0x7f, 0xf0, 0xa4, 0x3f, 0xfe, 0x68, - 0x7f, 0xf0, 0xb0, 0xff, 0xf0, 0xd0, 0x3f, 0xf8, - 0xc8, 0x7f, 0xf0, 0x5c, 0x3f, 0xfb, 0xce, 0xa0, - 0xff, 0xe3, 0x41, 0xff, 0xc3, 0xd0, 0xff, 0xed, - 0xd0, 0x2c, 0x3f, 0xf8, 0xc8, 0x7f, 0xf0, 0xe8, - 0x1f, 0xfd, 0x99, 0xe, 0x43, 0xff, 0x8b, 0x87, - 0xff, 0x11, 0xc3, 0xff, 0xaf, 0xa1, 0xe8, 0x3f, - 0xf8, 0xa8, 0x7f, 0xf1, 0xb0, 0xff, 0xea, 0xe1, - 0xff, 0xcf, 0x43, 0xeb, 0x43, 0xf6, 0x1f, 0xfd, - 0x3c, 0x3f, 0x58, 0x7f, 0xf1, 0xa0, 0xf9, 0x28, - 0x1f, 0xb0, 0xff, 0xe8, 0xc1, 0xfb, 0x43, 0xff, - 0x90, 0x87, 0xf3, 0xa1, 0xf6, 0x1f, 0xfc, 0xf9, - 0xf, 0xb0, 0xff, 0xe5, 0x61, 0xff, 0x48, 0x7d, - 0x87, 0xff, 0x39, 0xf, 0xb0, 0xff, 0xe5, 0xa1, - 0xff, 0xc0, 0xa0, 0x7c, 0x87, 0xff, 0x33, 0xf, - 0xb0, 0xff, 0xe6, 0xc1, 0x90, 0xf9, 0x41, 0xe8, - 0x3f, 0xf9, 0x70, 0x7d, 0x87, 0xff, 0x39, 0xf, - 0xfe, 0xc, 0x87, 0xb0, 0xff, 0xe5, 0x21, 0xec, - 0x3f, 0xfa, 0x8, 0x58, 0x7f, 0x41, 0xf2, 0x1f, - 0xfc, 0x88, 0x3d, 0x7, 0xff, 0x46, 0xf, 0xfe, - 0x16, 0x1e, 0x83, 0xff, 0x90, 0x87, 0x90, 0xff, - 0xf0, 0xa1, 0xe4, 0x3f, 0xf8, 0xd0, 0x7b, 0xf, - 0xfe, 0x9c, 0x4, 0x3f, 0xe8, 0x3d, 0x7, 0xff, - 0x19, 0xe, 0x43, 0xff, 0xa8, 0xb0, 0x7f, 0xf0, - 0x60, 0xf2, 0x1f, 0xfc, 0x44, 0x3d, 0x7, 0xff, - 0x56, 0x81, 0xff, 0xc1, 0x43, 0xd8, 0x7f, 0xf1, - 0x20, 0xe4, 0x3f, 0xfc, 0xd0, 0x72, 0x1f, 0xfc, - 0xac, 0x3f, 0xfc, 0xc8, 0x79, 0xf, 0xfe, 0x12, - 0x1e, 0x43, 0xff, 0xce, 0x87, 0x41, 0xff, 0xc2, - 0xc3, 0x90, 0xff, 0xf4, 0x61, 0xff, 0xc8, 0x43, - 0xb0, 0xff, 0xf4, 0x21, 0xff, 0xce, 0x43, 0xff, - 0xde, 0x87, 0xff, 0x1, 0xf, 0xff, 0x82, 0x1d, - 0x87, 0xff, 0xf7, 0xf, 0x3a, 0x1f, 0xfc, 0x34, - 0x3f, 0xad, 0xf, 0xff, 0x2c, 0x5c, 0x1f, 0x61, - 0xff, 0xc1, 0xb4, 0xc3, 0xff, 0xc8, 0xe1, 0x3c, - 0x1f, 0xfc, 0x5b, 0x42, 0x83, 0xff, 0xcd, 0x6, - 0x79, 0xf, 0xf9, 0xf2, 0x1a, 0xf, 0xfe, 0xfb, - 0xfe, 0x14, 0x1c, 0xdc, 0x87, 0x37, 0x7, 0x94, - 0x1f, 0xfe, 0x88, 0x3f, 0x21, 0xf2, 0x1f, 0xa0, - 0xff, 0xf5, 0x61, 0xff, 0xcb, 0xc3, 0xff, 0xd9, - 0x7, 0xff, 0x26, 0xf, 0xff, 0x6a, 0x83, 0xff, - 0x8e, 0xa0, 0xff, 0xf7, 0x41, 0xff, 0xc6, 0x60, - 0xff, 0xf8, 0x61, 0xff, 0xc5, 0x83, 0xff, 0xe5, - 0x7, 0xff, 0xf, 0xf, 0xff, 0x9a, 0x83, 0xff, - 0x83, 0x7, 0xff, 0xd6, 0x43, 0xfe, 0x50, 0x7f, - 0xfd, 0xa0, 0xff, 0xa0, 0xff, 0xfc, 0x61, 0xfd, - 0x87, 0xff, 0xea, 0xf, 0xa0, 0xff, 0xfd, 0xa8, - 0x39, 0x41, 0xff, 0xd4, 0xb9, 0x41, 0xff, 0xd7, - 0x83, 0xa0, 0xff, 0xea, 0x28, 0x69, 0xfa, 0x88, - 0x7f, 0xf4, 0x70, 0xb0, 0xff, 0xea, 0xa8, 0x3f, - 0x2a, 0xfd, 0x45, 0x7, 0xff, 0x2a, 0x20, 0xff, - 0xeb, 0xd0, 0x3f, 0xf8, 0x4a, 0xa7, 0xd4, 0xf, - 0xfe, 0x2b, 0xa1, 0xff, 0xd8, 0x74, 0x3f, 0xf8, - 0xea, 0xf, 0xff, 0x75, 0x3, 0xff, 0x8e, 0x87, - 0xff, 0xbd, 0xc3, 0xff, 0x8d, 0x7, 0xff, 0xc7, - 0x43, 0xff, 0x86, 0x87, 0xff, 0xce, 0x43, 0xff, - 0x85, 0x87, 0xff, 0xfc, 0x32, 0x1f, 0xfd, 0x8d, - 0xf, 0xfe, 0x63, 0xa1, 0xff, 0xc1, 0x83, 0xff, - 0xb1, 0x16, 0x87, 0xff, 0x21, 0xe0, 0xff, 0xe1, - 0xa1, 0xff, 0xd8, 0x42, 0xb9, 0xf, 0xfe, 0x13, - 0x70, 0x7f, 0xf1, 0x10, 0xff, 0xec, 0x41, 0xe6, - 0xf5, 0x17, 0xd4, 0xf4, 0x87, 0xff, 0x1b, 0xf, - 0xfe, 0xba, 0x83, 0xfc, 0xaa, 0xf2, 0x83, 0xff, - 0x94, 0x87, 0xff, 0xe1, 0xd0, 0xfa, 0xf, 0xfe, - 0xc3, 0xc1, 0xff, 0xd0, 0x78, 0x83, 0xe4, 0x3f, - 0xfb, 0x4f, 0x21, 0xff, 0xcb, 0xb8, 0x3f, 0xc8, - 0x7f, 0xf7, 0x5b, 0x90, 0xff, 0xe2, 0xbe, 0x43, - 0xff, 0x81, 0x7, 0xff, 0x81, 0xbd, 0x28, 0x3c, - 0xaa, 0x7a, 0xf, 0xff, 0xa3, 0x4f, 0xf5, 0x14, - 0x1f, 0xfc, 0x4, 0x34, 0x1f, 0xff, 0xf0, 0xc8, - 0x7f, 0xff, 0xc2, 0x43, 0xff, 0xff, 0x85, 0x7, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xfa, 0xf, 0xff, - 0xf8, 0x81, 0xf, 0xff, 0xf8, 0x3c, 0x1f, 0xfc, - 0x0, - - /* U+E922 "" */ - 0xf, 0xff, 0x55, 0xff, 0xd0, 0x7f, 0xfd, 0xef, - 0x21, 0xfc, 0xfa, 0xf, 0xff, 0x97, 0x90, 0xff, - 0xe1, 0xbe, 0xf, 0xff, 0x73, 0x87, 0xff, 0x27, - 0x83, 0xff, 0xd7, 0xc1, 0xff, 0xcb, 0x70, 0xff, - 0xf4, 0xe1, 0xff, 0x34, 0x50, 0x7f, 0xd8, 0x7f, - 0xf9, 0xf0, 0xfc, 0xfd, 0x2a, 0x9f, 0x21, 0xfb, - 0xf, 0xff, 0x2e, 0x1f, 0xb8, 0x3f, 0xeb, 0x43, - 0xec, 0x3f, 0xf9, 0x56, 0x87, 0xff, 0x2b, 0xf, - 0xbc, 0x1f, 0xfc, 0x3b, 0xf, 0xb0, 0xff, 0xe4, - 0x68, 0x7f, 0xf2, 0xd0, 0xfb, 0xf, 0xfe, 0x3e, - 0x1f, 0x41, 0xff, 0xc6, 0xc2, 0x43, 0xff, 0x93, - 0x7, 0xb0, 0xff, 0xe4, 0xe1, 0xe4, 0x3f, 0xf8, - 0x8e, 0x14, 0x1f, 0xfc, 0x98, 0x3d, 0x87, 0xff, - 0x2f, 0xf, 0x61, 0xff, 0xc2, 0xa0, 0x64, 0x3f, - 0xf9, 0x28, 0x76, 0x1f, 0xfc, 0xdc, 0x3f, 0xf8, - 0xfa, 0x19, 0xf, 0xfe, 0x4c, 0x1f, 0xfd, 0x54, - 0x3a, 0xf, 0xf3, 0x87, 0xa0, 0xff, 0xe4, 0xa1, - 0xd8, 0x7f, 0xf3, 0xe0, 0xe4, 0x3f, 0xa8, 0x1e, - 0x43, 0xff, 0xda, 0x87, 0xff, 0x7, 0x43, 0xe8, - 0x3f, 0xf9, 0x28, 0x76, 0x1f, 0xfd, 0x18, 0x3a, - 0xe, 0x70, 0xff, 0xe9, 0xc1, 0xff, 0xdd, 0x43, - 0x30, 0x7f, 0x97, 0xff, 0x94, 0x1f, 0xfe, 0x2a, - 0x7, 0xfd, 0x5f, 0xfc, 0xa0, 0xff, 0xec, 0xa1, - 0xf6, 0x87, 0xff, 0x6d, 0xf, 0xfe, 0xd4, 0x1f, - 0xff, 0xf0, 0xe9, 0xf, 0xff, 0xf8, 0x75, 0x3, - 0xff, 0xb6, 0x87, 0xff, 0x4d, 0xf, 0xce, 0x1f, - 0xf7, 0xff, 0xf2, 0x95, 0xe9, 0xf, 0xfe, 0xf6, - 0x87, 0xff, 0x4f, 0x9, 0x41, 0xff, 0xdf, 0xa0, - 0x7e, 0x43, 0xff, 0x92, 0xa0, 0xc8, 0x7f, 0xf4, - 0x50, 0xe4, 0x3e, 0x70, 0xfa, 0xf, 0xfe, 0x75, - 0x87, 0xff, 0x46, 0xe, 0x83, 0xfb, 0x43, 0xc8, - 0x7f, 0xf2, 0x58, 0xa, 0xf, 0xfe, 0x82, 0x1f, - 0xfc, 0x5a, 0x7, 0x41, 0xff, 0xc9, 0x90, 0xac, - 0x3f, 0xf9, 0xf0, 0x72, 0x1f, 0xfc, 0x7, 0xf, - 0xfe, 0x82, 0x4, 0x43, 0xff, 0x9b, 0x7, 0xa0, - 0xff, 0xe1, 0x68, 0x50, 0x7f, 0xf2, 0x68, 0x17, - 0x21, 0xff, 0xcb, 0x50, 0x7f, 0xf2, 0xa8, 0x4, - 0x3f, 0xf9, 0x2a, 0x82, 0xa0, 0x7f, 0xf2, 0x98, - 0x3d, 0x87, 0xff, 0x15, 0xc0, 0x87, 0xff, 0x26, - 0x50, 0x1b, 0x43, 0xff, 0x8f, 0x40, 0xf4, 0x1f, - 0xfc, 0x8e, 0x43, 0xff, 0x95, 0x40, 0x9e, 0x81, - 0xff, 0xc5, 0xd0, 0xf9, 0xf, 0xfe, 0x4a, 0x1f, - 0xfc, 0xb6, 0xc3, 0x66, 0x87, 0xff, 0x7, 0xc1, - 0xfb, 0xf, 0xff, 0x1a, 0xb0, 0xd7, 0xd2, 0x1e, - 0x6f, 0x7, 0xf6, 0x1f, 0xfe, 0x59, 0xc3, 0xaf, - 0xfe, 0x90, 0xff, 0x61, 0xff, 0xe7, 0xa7, 0x7, - 0x36, 0x1f, 0xfc, 0x4c, 0x3f, 0xfd, 0x2e, 0x68, - 0x7f, 0xf2, 0x2c, 0x3f, 0xfd, 0x95, 0x70, 0x7f, - 0xf1, 0x74, 0x3f, 0xfd, 0xcf, 0x1e, 0xa0, 0x7f, - 0x9f, 0x7, 0xff, 0xc9, 0xbb, 0xf, 0xcf, 0xa0, - 0xff, 0xfb, 0xaa, 0xe, 0xf4, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, - 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, - 0xfd, 0x30, - - /* U+E923 "" */ - 0xf, 0xfe, 0x23, 0x7f, 0xa8, 0x87, 0xff, 0xdd, - 0xfd, 0x7f, 0x8f, 0x48, 0x7f, 0xfc, 0xaf, 0x5c, - 0xa0, 0xe6, 0x9e, 0xb4, 0x3f, 0xfd, 0xce, 0x72, - 0x1f, 0xfc, 0x17, 0xd6, 0x1f, 0xfe, 0xca, 0x70, - 0x73, 0x7e, 0xa2, 0x1d, 0xda, 0x1f, 0xfe, 0x9c, - 0xc3, 0x3f, 0xaf, 0xfa, 0xc, 0xf4, 0xf, 0xff, - 0x3e, 0xc1, 0x3f, 0xa5, 0x4, 0xab, 0xe8, 0x36, - 0xc1, 0xff, 0xe5, 0xd8, 0x2e, 0xe0, 0xff, 0xe0, - 0x39, 0xa1, 0x6c, 0x1f, 0xfe, 0x39, 0x82, 0xdc, - 0x3f, 0xf8, 0x97, 0x40, 0xb5, 0x7, 0xff, 0x29, - 0xe0, 0xff, 0xe4, 0x2a, 0xb, 0xa0, 0x7f, 0xf1, - 0xf6, 0xb, 0x83, 0xff, 0x98, 0xe1, 0xff, 0xc7, - 0xa0, 0x5c, 0x87, 0xff, 0x27, 0x50, 0x4c, 0x1f, - 0xfc, 0x94, 0x2d, 0xf, 0xfe, 0x24, 0xa0, 0x6a, - 0xf, 0xfe, 0x5f, 0x20, 0x94, 0x1f, 0xfc, 0x98, - 0x29, 0xf, 0xfe, 0x1b, 0x1, 0x20, 0xff, 0xe6, - 0xd0, 0x2a, 0x7, 0xff, 0x25, 0xd, 0x40, 0xff, - 0xe0, 0xc8, 0x54, 0xf, 0xfe, 0x72, 0x20, 0x43, - 0xff, 0x96, 0x86, 0x70, 0xff, 0xe0, 0x38, 0x16, - 0xf, 0xfe, 0x7d, 0x2, 0x60, 0xff, 0xe4, 0xc1, - 0xed, 0xf, 0xf9, 0x5, 0x87, 0xff, 0x41, 0x10, - 0x48, 0x7f, 0xf2, 0x90, 0xf5, 0x3, 0xf2, 0x83, - 0x21, 0xff, 0xd1, 0x70, 0xff, 0xe7, 0x41, 0xf3, - 0x87, 0xde, 0x2, 0x83, 0xff, 0xa5, 0x21, 0x28, - 0x3f, 0xfa, 0x7a, 0x1c, 0x85, 0xe0, 0xff, 0xea, - 0x2e, 0x97, 0xff, 0x94, 0x1f, 0xe9, 0xe, 0x43, - 0xff, 0xb1, 0x50, 0x2b, 0xff, 0x94, 0x1f, 0xf5, - 0x3, 0xff, 0xfe, 0x1c, 0xe1, 0xff, 0xff, 0xf, - 0x41, 0xff, 0xff, 0xc, 0xc1, 0xff, 0xff, 0xa, - 0x81, 0x20, 0xf0, 0x7f, 0xf4, 0x90, 0xf7, 0xff, - 0xf2, 0x83, 0xfe, 0xd0, 0x90, 0x94, 0x1f, 0xfd, - 0x28, 0x39, 0xf, 0xfe, 0x9b, 0x87, 0x78, 0x3f, - 0xfb, 0x98, 0x7f, 0xf2, 0x50, 0xfd, 0x40, 0xf2, - 0x82, 0x60, 0xff, 0xe8, 0x21, 0xe4, 0x3f, 0xf9, - 0x30, 0x7d, 0xa1, 0xfc, 0x82, 0x43, 0xff, 0xa1, - 0x7, 0xff, 0x3d, 0xf, 0x38, 0x7f, 0xac, 0x26, - 0xf, 0xfe, 0x72, 0x1e, 0x83, 0xff, 0x93, 0x7, - 0x50, 0x3f, 0xe5, 0x5, 0x28, 0x3f, 0xf9, 0xb0, - 0x79, 0xf, 0xfe, 0x42, 0x1d, 0xa1, 0xff, 0xc1, - 0xa0, 0x5c, 0x1f, 0xfc, 0xcc, 0x3d, 0x7, 0xff, - 0x27, 0x9, 0xc3, 0xff, 0x86, 0xb0, 0x56, 0x1f, - 0xfc, 0xac, 0x3e, 0x43, 0xff, 0x92, 0x81, 0x83, - 0xff, 0x8b, 0x40, 0x9b, 0x43, 0xff, 0x8f, 0x87, - 0xd8, 0x7f, 0xf2, 0x50, 0x50, 0x3f, 0xf8, 0xca, - 0xc2, 0x6a, 0xf, 0xfe, 0x25, 0x87, 0xc8, 0x7f, - 0xf2, 0x9b, 0x43, 0xff, 0x91, 0x30, 0x4e, 0x68, - 0x7f, 0xf0, 0x1d, 0xf, 0xd0, 0x7f, 0xf2, 0xd0, - 0xff, 0xe5, 0xcc, 0x1a, 0xee, 0x43, 0xcf, 0xa0, - 0xfe, 0xc3, 0xff, 0xcb, 0x98, 0x77, 0xff, 0xa0, - 0xff, 0xb0, 0xff, 0xf3, 0xd3, 0x43, 0x9a, 0x7, - 0xff, 0xd, 0xc3, 0xff, 0xd2, 0xf6, 0x87, 0xff, - 0x23, 0x83, 0xff, 0xd9, 0xd3, 0x43, 0xff, 0x89, - 0x61, 0xff, 0xef, 0x7b, 0xea, 0x7, 0xfa, 0xd0, - 0xff, 0xf9, 0x37, 0x61, 0xfa, 0xf2, 0x1f, 0xff, - 0x75, 0x41, 0xde, 0x43, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xff, - 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xf2, - - /* U+E924 "" */ - 0xf, 0xff, 0x1d, 0xff, 0xf2, 0x1f, 0xff, 0x4f, - 0x90, 0xff, 0xaf, 0x41, 0xff, 0xee, 0x7c, 0x1f, - 0xfc, 0x67, 0xc1, 0xff, 0xeb, 0xe0, 0xff, 0xe5, - 0xf8, 0x3f, 0xfc, 0xfe, 0xf, 0xfe, 0x7f, 0x7, - 0xff, 0x93, 0xf, 0xfe, 0x93, 0x87, 0xff, 0x85, - 0xc3, 0xff, 0xab, 0x87, 0xff, 0x7e, 0x81, 0xff, - 0xc0, 0xbf, 0xf9, 0xf, 0xfe, 0x6, 0x1f, 0xfd, - 0xd5, 0x7, 0xfa, 0xf2, 0x1f, 0xd7, 0x90, 0xff, - 0x61, 0xff, 0xdb, 0x60, 0xfe, 0xb4, 0x3f, 0xf8, - 0x76, 0x87, 0xf6, 0x1f, 0xfd, 0xa8, 0x3f, 0xb4, - 0x3f, 0xf8, 0xf6, 0x1f, 0xd8, 0x7f, 0xf6, 0x30, - 0xfd, 0x61, 0xff, 0xcb, 0xc3, 0xf9, 0xf, 0xfe, - 0xb2, 0x1f, 0xa4, 0x3f, 0xf9, 0xba, 0x1f, 0x41, - 0xff, 0xd6, 0x83, 0xe9, 0xf, 0xfe, 0x7c, 0x1f, - 0xb0, 0xff, 0xea, 0x61, 0xf2, 0x83, 0xff, 0xa3, - 0x87, 0xff, 0x92, 0xf, 0xfe, 0x9e, 0x1f, 0x61, - 0xff, 0xd2, 0x83, 0xec, 0x3f, 0xfa, 0xa8, 0x7f, - 0xf6, 0x50, 0xff, 0xee, 0xc1, 0xf4, 0x1f, 0xfd, - 0x8c, 0x3f, 0xfa, 0xe8, 0x79, 0xf, 0xfe, 0x84, - 0x1f, 0xfd, 0xf8, 0x3f, 0xfa, 0xe8, 0x7a, 0xf, - 0xff, 0x4, 0x1f, 0xfd, 0x64, 0x3f, 0xfb, 0x28, - 0x79, 0xf, 0xff, 0xe4, 0x1f, 0xfd, 0x54, 0x3f, - 0xff, 0xe1, 0xb0, 0xff, 0xff, 0x87, 0xfc, 0x87, - 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, - 0xff, 0xf8, 0x7f, 0xf0, 0x30, 0xf2, 0x1f, 0xff, - 0xc4, 0x3f, 0xff, 0xe1, 0xff, 0xe6, 0x43, 0xff, - 0xba, 0x87, 0xff, 0x66, 0xf, 0x21, 0xff, 0xd6, - 0x83, 0xff, 0xc1, 0x7, 0xff, 0x3e, 0xf, 0xfe, - 0xfa, 0x1f, 0xfd, 0x74, 0x3e, 0xc3, 0xff, 0xaf, - 0x7, 0xff, 0xfc, 0x24, 0x3e, 0xc3, 0xff, 0xa3, - 0x87, 0xd8, 0x7f, 0xf5, 0x60, 0xff, 0xf1, 0x21, - 0xff, 0xd3, 0xc3, 0xe8, 0x3f, 0xfa, 0x78, 0x7d, - 0x7, 0xff, 0x4a, 0xf, 0xc8, 0x7f, 0xf7, 0x30, - 0xff, 0xe8, 0x28, 0x3e, 0x83, 0xff, 0xab, 0x87, - 0xec, 0x3f, 0xf9, 0xd4, 0xf, 0xc8, 0x7f, 0xf5, - 0xa0, 0xfd, 0xa1, 0xff, 0xcb, 0xd0, 0xfd, 0x87, - 0xff, 0x5d, 0xf, 0xea, 0x7, 0xff, 0x21, 0xc3, - 0xfb, 0xf, 0xfe, 0xc6, 0x1f, 0xb9, 0xd0, 0xff, - 0xe2, 0xf0, 0x7f, 0x41, 0xff, 0xd8, 0xc3, 0xf6, - 0x3b, 0x68, 0x7f, 0xf0, 0x2f, 0x7, 0xfa, 0x43, - 0xff, 0xaf, 0x87, 0xec, 0x35, 0xb7, 0xae, 0xb7, - 0xe4, 0x3f, 0xe9, 0xf, 0xfe, 0xbe, 0x1f, 0xd8, - 0x7a, 0xf4, 0x5, 0xc1, 0xff, 0xc3, 0x90, 0xff, - 0xeb, 0xe1, 0xfb, 0xc6, 0x87, 0xcc, 0x1f, 0xfc, - 0x7d, 0xf, 0xfe, 0xbe, 0x1f, 0xb0, 0x74, 0xd0, - 0xff, 0xe6, 0x58, 0x7f, 0xf6, 0x30, 0xfd, 0x86, - 0x76, 0xe0, 0xff, 0xe4, 0xe8, 0x7f, 0xf6, 0x30, - 0xfd, 0x87, 0xd7, 0x3e, 0x94, 0x1f, 0xfc, 0x17, - 0xc1, 0xff, 0xc6, 0x90, 0xff, 0xe2, 0xe1, 0xfb, - 0xf, 0xf3, 0xe8, 0xa0, 0x7f, 0x9f, 0x41, 0xff, - 0xc7, 0x98, 0x3f, 0xf8, 0x98, 0x7e, 0xc3, 0xff, - 0x84, 0xde, 0xf, 0xbe, 0x83, 0xff, 0x94, 0x81, - 0xf, 0xfe, 0x16, 0x1f, 0xb0, 0xff, 0xe6, 0xa1, - 0xff, 0xd1, 0x83, 0xff, 0x83, 0x87, 0xec, 0x3f, - 0xff, 0x38, 0x7e, 0xc3, 0xff, 0xdd, 0x7, 0xfb, - 0xf, 0xd8, 0x7f, 0xfa, 0x90, 0xc8, 0x7f, 0x61, - 0xfb, 0xf, 0xff, 0x8a, 0x1f, 0x61, 0xfb, 0xf, - 0xff, 0x66, 0x1d, 0x87, 0xb0, 0xfd, 0x87, 0xff, - 0xcd, 0xe, 0xc3, 0xf6, 0x1f, 0xfe, 0xe4, 0x3c, - 0x85, 0x87, 0xec, 0x3f, 0xfe, 0xd0, 0xe1, 0xfb, - 0xf, 0xff, 0xc7, 0x7, 0xec, 0x3f, 0xff, 0xe1, - 0x61, 0xff, 0xf1, 0x43, 0xff, 0x89, 0x87, 0xff, - 0xfc, 0x2c, 0x3f, 0xfe, 0x78, 0x7f, 0xf0, 0xa0, - 0xff, 0xff, 0x86, 0x43, 0xff, 0xe8, 0x87, 0xff, - 0xb, 0x43, 0xff, 0xfe, 0x1a, 0xe4, 0x3f, 0xff, - 0xe1, 0x37, 0x7, 0xff, 0xfc, 0x33, 0xe4, 0x3f, - 0xf9, 0x95, 0xf0, 0x7f, 0xf2, 0xd0, 0xff, 0xe6, - 0x5a, 0x1f, 0xfc, 0xa5, 0xf0, 0x7f, 0xf9, 0xf0, - 0xff, 0xf4, 0x61, 0xff, 0xcd, 0x60, 0xff, 0xfd, - 0x2a, 0x9f, 0xa0, 0xff, 0xf4, 0xa1, 0xfc, 0xaa, - 0x7e, 0xa2, 0x83, 0xff, 0xe0, 0xaa, 0x7e, 0xa2, - 0x83, 0xff, 0xec, - - /* U+E925 "" */ - 0xf, 0xfe, 0x42, 0xaf, 0xfa, 0x88, 0x7f, 0xfd, - 0x1b, 0xa0, 0xd7, 0x23, 0x79, 0xf, 0xff, 0x7d, - 0xc5, 0xea, 0x2f, 0x53, 0xd3, 0x70, 0x7f, 0xfa, - 0xdd, 0x5c, 0x87, 0xff, 0x5, 0xb9, 0xe0, 0xff, - 0xf3, 0xbd, 0x38, 0x3f, 0xf8, 0xef, 0x3a, 0x1f, - 0xfe, 0x46, 0x74, 0x3e, 0x69, 0xfa, 0x50, 0x79, - 0xea, 0xf, 0xff, 0x15, 0x60, 0xf5, 0xe8, 0xc, - 0xa2, 0x9c, 0x87, 0x3b, 0x87, 0xff, 0x83, 0x74, - 0x33, 0xe6, 0xf5, 0x4d, 0x5e, 0x8b, 0x43, 0xb7, - 0xf, 0xfe, 0xf6, 0x61, 0xd4, 0x7c, 0x87, 0xfc, - 0xdb, 0x61, 0xd3, 0x87, 0xff, 0x72, 0x30, 0xce, - 0xd0, 0x3f, 0xf8, 0xb6, 0xe8, 0x69, 0xc3, 0xff, - 0xb5, 0x38, 0x66, 0x74, 0x3f, 0xf9, 0x15, 0x83, - 0x46, 0x1f, 0xfd, 0x85, 0x41, 0xab, 0x7, 0xff, - 0x2d, 0xd8, 0x36, 0x41, 0xff, 0xd7, 0x94, 0x12, - 0xa4, 0x3f, 0xf9, 0xdb, 0x6, 0x90, 0xff, 0xeb, - 0x24, 0x13, 0x44, 0x3f, 0xfa, 0x1b, 0x4, 0xac, - 0x3f, 0xfa, 0xb4, 0xd, 0x28, 0x3f, 0xfa, 0x52, - 0x82, 0x84, 0x3f, 0xfa, 0x70, 0x85, 0x10, 0x7f, - 0xf4, 0xd5, 0x6, 0x60, 0xff, 0xe9, 0xa8, 0x33, - 0x7, 0xff, 0x56, 0x10, 0xa1, 0xf, 0xfe, 0x8a, - 0x41, 0x42, 0x1f, 0xfd, 0x66, 0xc, 0xe1, 0xff, - 0xd1, 0xd0, 0xcc, 0x1f, 0xfd, 0x78, 0x42, 0xd0, - 0xff, 0xe8, 0xb8, 0x50, 0x87, 0xff, 0x61, 0x82, - 0x44, 0x3f, 0xf9, 0xe8, 0x84, 0xc1, 0xff, 0xd9, - 0xc3, 0xd8, 0x7f, 0xf5, 0x90, 0xff, 0xec, 0xa2, - 0x12, 0x83, 0xff, 0x9f, 0xa1, 0x21, 0xff, 0xdd, - 0xc2, 0xc3, 0xff, 0xa0, 0x86, 0xc3, 0xff, 0xb8, - 0x86, 0x43, 0xff, 0xa3, 0x86, 0x43, 0xff, 0xb7, - 0xa1, 0xc8, 0x7f, 0xff, 0xc3, 0xff, 0xb0, 0x87, - 0xff, 0xfc, 0x32, 0x1f, 0xff, 0xf0, 0xff, 0xff, - 0x87, 0xf9, 0xf, 0xfe, 0xde, 0x1e, 0x43, 0xff, - 0x9c, 0xe1, 0x61, 0xff, 0xdd, 0x42, 0x43, 0xff, - 0xa2, 0x84, 0x87, 0xff, 0x71, 0xc3, 0xff, 0xa9, - 0x87, 0x90, 0xff, 0xed, 0xa1, 0x68, 0x7f, 0xf3, - 0xd1, 0x9, 0x83, 0xff, 0xb3, 0x7, 0x38, 0x7f, - 0xf4, 0x70, 0xa0, 0xff, 0xed, 0x30, 0x72, 0x1f, - 0xfd, 0x9, 0xe, 0x83, 0xff, 0xae, 0x88, 0x50, - 0x7f, 0xf4, 0x91, 0xa, 0x43, 0xff, 0xaf, 0x21, - 0x98, 0x3f, 0xfa, 0x4c, 0x12, 0xb0, 0xff, 0xea, - 0xc4, 0x12, 0x21, 0xff, 0xd2, 0x84, 0x28, 0x83, - 0xff, 0xa6, 0xa8, 0x34, 0x87, 0xff, 0x51, 0x83, - 0x4a, 0xf, 0xfe, 0x94, 0x1c, 0x90, 0x7f, 0xf5, - 0x21, 0x9, 0x50, 0x7f, 0xf4, 0x70, 0x48, 0x28, - 0x1f, 0xfd, 0x6a, 0x6, 0x9d, 0xf, 0xfe, 0x6b, - 0x86, 0x9c, 0x43, 0xff, 0xac, 0xac, 0x34, 0xc8, - 0x7f, 0xf2, 0xe8, 0x1e, 0x8c, 0x3f, 0xfb, 0x11, - 0x6, 0xac, 0x1f, 0xfc, 0x9d, 0xf, 0xe4, 0x3f, - 0xfb, 0x3b, 0x6, 0x77, 0x83, 0xff, 0x8b, 0xe0, - 0xff, 0xa4, 0x3f, 0xfb, 0x3b, 0x7, 0x73, 0xc8, - 0x7f, 0xcf, 0x83, 0xff, 0x85, 0x21, 0xff, 0xd9, - 0xdc, 0x39, 0xe6, 0xfe, 0xbf, 0xa0, 0xff, 0xe2, - 0xc8, 0x7f, 0xf6, 0x73, 0x43, 0x9f, 0x48, 0x48, - 0x7f, 0xf3, 0x24, 0x3f, 0xfb, 0x3b, 0x40, 0xf9, - 0x90, 0xff, 0xe3, 0x78, 0x3f, 0x48, 0x7f, 0xf6, - 0x6d, 0xe0, 0xff, 0xe6, 0xe0, 0xc3, 0xf4, 0x87, - 0xff, 0x6b, 0x9e, 0x43, 0xff, 0x91, 0xe0, 0xd8, - 0x7e, 0x90, 0xff, 0xed, 0x3c, 0x5e, 0x94, 0x1f, - 0xfc, 0x1f, 0x7, 0xd8, 0x7e, 0x90, 0xff, 0xed, - 0xb7, 0x2a, 0xf, 0xfa, 0xf0, 0x7f, 0xb0, 0xfd, - 0x21, 0xff, 0xc4, 0x60, 0xff, 0xe5, 0xb7, 0x83, - 0xef, 0xc8, 0x7f, 0xf0, 0x70, 0xfd, 0x21, 0xff, - 0xc3, 0x98, 0x3f, 0xf9, 0xc8, 0x7f, 0xf3, 0x70, - 0xfd, 0x21, 0xff, 0xc1, 0x40, 0x87, 0xff, 0xa7, - 0xf, 0xd2, 0x1f, 0xfc, 0x8, 0x3f, 0xfd, 0xb8, - 0x7e, 0x90, 0xff, 0xfd, 0x61, 0xfa, 0x43, 0xfa, - 0xf, 0xff, 0x86, 0x1f, 0xa0, 0xfe, 0x43, 0x21, - 0xff, 0xec, 0xc3, 0xf6, 0x1f, 0x21, 0xff, 0xf3, - 0xc3, 0xf6, 0x1e, 0xc3, 0xb0, 0xff, 0xf7, 0x61, - 0xfb, 0xe, 0x43, 0xff, 0xeb, 0x87, 0xec, 0x24, - 0x3c, 0x87, 0xff, 0xc3, 0xf, 0xda, 0x41, 0xff, - 0xf8, 0xc3, 0xf5, 0x87, 0xff, 0xeb, 0xf, 0xff, - 0xf8, 0x76, 0x1f, 0xfc, 0x44, 0x3f, 0xfe, 0x78, - 0x7f, 0xff, 0xc3, 0xa0, 0xff, 0xe1, 0x61, 0xff, - 0xf4, 0x43, 0xff, 0xfe, 0x13, 0x87, 0xff, 0x9, - 0xf, 0xff, 0x83, 0x70, 0x7f, 0xff, 0xae, 0x43, - 0xff, 0xbd, 0x5f, 0x7, 0xff, 0x31, 0xf2, 0x1f, - 0xfe, 0x25, 0xf0, 0x7f, 0xf2, 0x9e, 0xf, 0xfe, - 0x62, 0x1f, 0xfe, 0x8c, 0x3f, 0xff, 0xe1, 0xa4, - 0x3f, 0xf9, 0xb8, 0x7f, 0xfa, 0x6f, 0xd4, 0x50, - 0x7f, 0xff, 0xc5, 0x53, 0xf5, 0x14, 0x1f, 0xc8, - 0x7f, 0xfd, 0x95, 0x4f, 0xd4, 0x50, 0x0, - - /* U+E926 "" */ - 0xf, 0xff, 0xb7, 0xd4, 0x50, 0x7f, 0xfc, 0x55, - 0x4f, 0xd2, 0x83, 0xff, 0xce, 0x87, 0xf9, 0xa7, - 0xea, 0x28, 0x3f, 0xfe, 0x2a, 0xa0, 0x7f, 0xf7, - 0xf0, 0xff, 0xe4, 0x21, 0xff, 0xf1, 0x6e, 0xf, - 0xfe, 0xfa, 0x1f, 0xfc, 0x3b, 0x90, 0xff, 0xf7, - 0x3e, 0x43, 0xff, 0xe3, 0x7, 0xff, 0xd1, 0xf, - 0xff, 0x42, 0x1f, 0xf4, 0x87, 0xff, 0xd2, 0x43, - 0xff, 0xcd, 0x87, 0xff, 0x6, 0x43, 0xff, 0xd6, - 0xf8, 0x3d, 0x21, 0xff, 0xe4, 0x43, 0xb0, 0x61, - 0xe9, 0xf, 0xff, 0x4a, 0x16, 0x1e, 0x90, 0xff, - 0xf3, 0xa1, 0xd8, 0x7a, 0x43, 0xff, 0xcd, 0x7, - 0xb0, 0xf4, 0x87, 0xff, 0x85, 0xf, 0xfa, 0xf, - 0x48, 0x7f, 0xf8, 0x30, 0x41, 0xf9, 0x83, 0xd2, - 0x1f, 0xfe, 0x24, 0x3f, 0x98, 0x3d, 0x21, 0xff, - 0xde, 0x44, 0x3f, 0xe6, 0xf, 0x48, 0x7f, 0xcf, - 0xff, 0x21, 0xff, 0xc8, 0xe0, 0xff, 0xe0, 0x30, - 0x7a, 0x43, 0xe7, 0xd0, 0x7f, 0x5e, 0x83, 0xff, - 0xa8, 0xc1, 0xe9, 0xc, 0xf0, 0x7f, 0xf0, 0xdf, - 0x7, 0xff, 0x4d, 0x83, 0xd2, 0xe, 0xf, 0xfe, - 0x46, 0x87, 0xff, 0x49, 0x83, 0xd4, 0xc3, 0xff, - 0x97, 0x61, 0xff, 0xd2, 0x60, 0xf2, 0x1f, 0xfc, - 0xec, 0x3f, 0xfa, 0x4c, 0x1f, 0xfc, 0x3b, 0xfc, - 0x87, 0xfb, 0xf, 0xfe, 0x93, 0x7, 0xfd, 0x79, - 0xf, 0x5e, 0x43, 0xf6, 0x1f, 0xfd, 0x25, 0x7, - 0xeb, 0x43, 0xff, 0x81, 0x61, 0xfb, 0xf, 0xfe, - 0x92, 0x83, 0xda, 0x1f, 0xfc, 0x4e, 0xf, 0xa0, - 0xff, 0xe8, 0x4d, 0x3, 0x61, 0xff, 0xc7, 0x70, - 0xf2, 0x1f, 0xfc, 0xf5, 0x43, 0x3, 0xf, 0xfe, - 0x54, 0x1e, 0xc3, 0xff, 0x9d, 0x40, 0xb3, 0xf, - 0xfe, 0x5a, 0x83, 0xff, 0xaa, 0x84, 0xe1, 0xff, - 0xcd, 0x83, 0xd0, 0x7f, 0xf3, 0x24, 0x29, 0xf, - 0xfe, 0x7c, 0x1c, 0x87, 0xff, 0x31, 0x82, 0x60, - 0xff, 0xe7, 0xa1, 0xff, 0xd6, 0x50, 0x7f, 0xf4, - 0x60, 0xe8, 0x3f, 0xf9, 0x4a, 0xb, 0xc1, 0xff, - 0xd1, 0x43, 0x90, 0xff, 0xe5, 0x61, 0x94, 0x1f, - 0xfe, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xcd, 0x43, - 0xff, 0x9e, 0x87, 0xff, 0xd1, 0xf, 0xff, 0xf8, - 0x7f, 0xfa, 0xf0, 0xff, 0xeb, 0xa1, 0xff, 0xcf, - 0xc3, 0xff, 0xe8, 0xa0, 0x94, 0x1f, 0xff, 0x3e, - 0xf, 0xfe, 0x8c, 0x1d, 0x7, 0xff, 0x2d, 0x80, - 0x88, 0x7f, 0xf4, 0x10, 0xe4, 0x3f, 0xf9, 0x7a, - 0x15, 0x3, 0xff, 0x9f, 0x7, 0xff, 0x49, 0x10, - 0x22, 0x1f, 0xfc, 0xe4, 0x3b, 0xf, 0xfe, 0x6d, - 0x2, 0xe0, 0xff, 0xe6, 0xe1, 0xff, 0xd4, 0x44, - 0x2b, 0xf, 0xfe, 0x5e, 0x1e, 0xc3, 0xff, 0x9f, - 0xc1, 0x2b, 0xf, 0xfe, 0x4e, 0x1e, 0x43, 0xff, - 0xa3, 0x61, 0x4e, 0x1f, 0xfc, 0x7c, 0x3e, 0x83, - 0xff, 0xa2, 0xac, 0x2a, 0x70, 0x7f, 0xf0, 0xec, - 0x3e, 0xc3, 0xff, 0xa7, 0x38, 0x4e, 0x70, 0x7f, - 0xd6, 0x87, 0xd8, 0x7f, 0xf5, 0x67, 0xd, 0x67, - 0xaa, 0x69, 0xf2, 0x1f, 0xb0, 0xff, 0xeb, 0xd3, - 0x43, 0x5c, 0x2a, 0x50, 0x7f, 0xd8, 0x7f, 0xf6, - 0x5e, 0xd0, 0xcc, 0x1f, 0xfc, 0x27, 0xf, 0xfe, - 0xe7, 0x4d, 0xf, 0xfe, 0x2f, 0x7, 0xff, 0x79, - 0xef, 0xa4, 0x3f, 0xef, 0x7, 0xff, 0x89, 0xb8, - 0x83, 0xf5, 0xe0, 0xff, 0xf3, 0xb6, 0x1d, 0x79, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, - 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, 0xf0, - 0xff, 0xff, 0x87, 0xff, 0xc, - - /* U+E927 "" */ - 0xf, 0xff, 0x82, 0xa8, 0x1f, 0xfe, 0x95, 0x53, - 0xf5, 0x14, 0x1f, 0xfe, 0x15, 0x53, 0xf5, 0x14, - 0x1f, 0xfe, 0x7b, 0xa2, 0x83, 0xff, 0xfe, 0x1f, - 0xfe, 0x5b, 0x43, 0xff, 0x8c, 0x87, 0xff, 0x86, - 0xe4, 0x3f, 0xfe, 0x6d, 0xc8, 0x7f, 0xf0, 0x30, - 0xff, 0xf3, 0x32, 0x1f, 0xf2, 0x1f, 0xfe, 0x84, - 0x3f, 0xfe, 0x78, 0x7f, 0xfc, 0xf0, 0xff, 0xf9, - 0xe1, 0xff, 0xc1, 0x43, 0xff, 0xcb, 0x87, 0x9e, - 0xf, 0xff, 0x56, 0x1e, 0x61, 0xe, 0xc3, 0xff, - 0xc7, 0x87, 0x98, 0x24, 0x3f, 0xfc, 0xf8, 0x79, - 0x83, 0x61, 0x90, 0xff, 0xf0, 0xe1, 0xe6, 0xe, - 0x43, 0xff, 0xcb, 0x87, 0x98, 0x3e, 0x43, 0xff, - 0xc7, 0x87, 0x98, 0x3f, 0x41, 0xff, 0xe2, 0xc3, - 0xcc, 0x1f, 0xe4, 0x43, 0xff, 0xbd, 0x87, 0x98, - 0x3f, 0xec, 0xc3, 0xff, 0x8c, 0xdf, 0xfd, 0x21, - 0xfe, 0xc3, 0xcc, 0x1f, 0xfc, 0x7, 0x43, 0xff, - 0x86, 0xdf, 0xff, 0x45, 0xc1, 0xf6, 0x1e, 0x60, - 0xff, 0xe9, 0x77, 0xa4, 0x3f, 0x37, 0x8e, 0xd, - 0x87, 0x98, 0x3f, 0xfa, 0x37, 0x68, 0x7f, 0xf0, - 0xec, 0xd3, 0xf, 0x30, 0x7f, 0xf4, 0x73, 0x43, - 0x37, 0xfd, 0x21, 0xae, 0xc3, 0xd4, 0xf, 0xfe, - 0x8f, 0x40, 0xd7, 0xff, 0xd6, 0x87, 0xfd, 0x21, - 0xff, 0xd1, 0xe4, 0x2b, 0xe9, 0xf, 0x9f, 0xc9, - 0x87, 0xa4, 0x3f, 0xfa, 0x3c, 0x85, 0x9a, 0x1f, - 0xfc, 0x1a, 0xb0, 0xf4, 0x87, 0xff, 0x47, 0x90, - 0x3d, 0x3, 0xff, 0x88, 0xe1, 0xf4, 0x1f, 0xfd, - 0x19, 0x40, 0x6d, 0xf, 0xfe, 0x3e, 0x1f, 0x41, - 0xff, 0xd0, 0x60, 0xa8, 0x1f, 0xfc, 0xac, 0x3c, - 0x87, 0xff, 0x3e, 0x81, 0x72, 0x1f, 0xfc, 0xbc, - 0x3d, 0x87, 0xff, 0x39, 0x40, 0x58, 0x3f, 0xf9, - 0xb0, 0x7f, 0xf4, 0xe4, 0x2a, 0x7, 0xff, 0x39, - 0xf, 0x41, 0xff, 0xcc, 0x60, 0x28, 0x3f, 0xfa, - 0x18, 0x72, 0x1f, 0xfc, 0xb4, 0x35, 0x3, 0xff, - 0xdd, 0xa1, 0xff, 0xd6, 0x43, 0xa0, 0xff, 0xe5, - 0xe0, 0x50, 0x7f, 0xf4, 0xa0, 0xe4, 0x3f, 0xf9, - 0x48, 0x5e, 0xf, 0xff, 0x82, 0x1f, 0xff, 0x74, - 0x3f, 0xfe, 0x88, 0x7f, 0xff, 0xc3, 0xff, 0xce, - 0x85, 0x87, 0xff, 0xbd, 0xb, 0xf, 0xfe, 0x9a, - 0x1f, 0xfd, 0x1c, 0xa, 0xf, 0xfe, 0x94, 0x1c, - 0x87, 0xff, 0x2b, 0x42, 0x50, 0x7f, 0xf5, 0xe0, - 0xff, 0xe5, 0x21, 0xb8, 0x3f, 0xfa, 0x10, 0x7f, - 0xf4, 0x98, 0x8, 0x87, 0xff, 0x3d, 0xe, 0x43, - 0xff, 0x99, 0x21, 0x50, 0x3f, 0xf9, 0xd0, 0x7a, - 0xf, 0xfe, 0x6a, 0x80, 0xa8, 0x3f, 0xf9, 0x8a, - 0xf, 0xfe, 0xa5, 0x2, 0x94, 0x1f, 0xfc, 0xb8, - 0x3d, 0x87, 0xff, 0x3d, 0x82, 0xe4, 0x3f, 0xf9, - 0x38, 0x7a, 0xf, 0xfe, 0x84, 0xa0, 0xba, 0x7, - 0xff, 0x19, 0xc3, 0xe4, 0x3f, 0xfa, 0x3c, 0x85, - 0x9a, 0x1f, 0xfc, 0x3e, 0xf, 0xb0, 0xff, 0xe9, - 0xf2, 0x15, 0x64, 0x3f, 0xef, 0x7, 0xec, 0x3f, - 0xfa, 0xbc, 0x84, 0xfa, 0xe5, 0xeb, 0xe0, 0xfe, - 0xc3, 0xff, 0xaf, 0xd0, 0x33, 0xf5, 0x72, 0x1f, - 0xf6, 0x1f, 0xfd, 0x9c, 0xd0, 0xe6, 0xf, 0xfe, - 0x13, 0x87, 0xff, 0x6e, 0xee, 0xf, 0xfe, 0x37, - 0x7, 0xff, 0x7b, 0x8f, 0x4e, 0x1f, 0xf7, 0x83, - 0xff, 0xc2, 0xdc, 0x48, 0x7e, 0xbc, 0x1f, 0xfe, - 0x66, 0xe0, 0xef, 0x90, 0xff, 0xff, 0x87, 0xff, - 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, 0xf, 0xff, - 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xff, 0xf, 0xff, 0xf8, 0x7f, 0xf6, - 0x40, - - /* U+E928 "" */ - 0xf, 0xfe, 0x3c, 0x1f, 0xfd, 0xa5, 0x61, 0xff, - 0xd9, 0x81, 0x7, 0xff, 0x5f, 0x9, 0x41, 0xff, - 0xd5, 0x83, 0xa4, 0x3f, 0xfa, 0x6a, 0xf, 0x41, - 0xff, 0xd2, 0x60, 0xfd, 0x87, 0xff, 0x46, 0xf, - 0xf4, 0x1f, 0xfc, 0xfc, 0x3f, 0xe5, 0x7, 0xff, - 0x36, 0xf, 0xfe, 0xc, 0x1f, 0xfc, 0xc5, 0x7, - 0xff, 0xb, 0xf, 0xfe, 0x5c, 0x1f, 0xfc, 0x48, - 0x3f, 0xf9, 0x38, 0x7f, 0xf1, 0x54, 0x1f, 0xfc, - 0x78, 0x3f, 0xf8, 0xf0, 0x7f, 0xf1, 0x94, 0x19, - 0xb0, 0xeb, 0x83, 0xb0, 0xff, 0xe2, 0xc1, 0x3c, - 0x88, 0x79, 0xe0, 0xd8, 0x7f, 0xf0, 0xe0, 0x3c, - 0x1f, 0xfc, 0x17, 0x90, 0xff, 0xe2, 0xd3, 0x83, - 0xff, 0x8a, 0xdc, 0x1f, 0xfc, 0x44, 0x3f, 0xf9, - 0x48, 0x7f, 0xff, 0xc3, 0xff, 0xfe, 0x1f, 0xff, - 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, 0x3f, 0xff, - 0xe1, 0xff, 0xc1, 0x64, 0x35, 0xe4, 0x3f, 0xf9, - 0xd7, 0xe0, 0xfd, 0x78, 0x3f, 0xf9, 0x56, 0x7a, - 0x50, 0x7f, 0xbc, 0x1f, 0xfc, 0x67, 0x38, 0x3f, - 0xf8, 0xbc, 0x1f, 0xfc, 0x3a, 0x70, 0x66, 0x43, - 0xff, 0x82, 0xe1, 0xff, 0xc1, 0x8c, 0x35, 0xff, - 0xa0, 0xff, 0x61, 0xff, 0x44, 0x15, 0xf4, 0x87, - 0x3f, 0x7, 0xec, 0x3f, 0xa2, 0xb, 0x34, 0x3f, - 0xf8, 0x1e, 0xf, 0xb0, 0xf9, 0x50, 0x5d, 0x3, - 0xff, 0x89, 0x87, 0xd0, 0x7a, 0xc2, 0xe4, 0x3f, - 0xf8, 0xda, 0x1c, 0x87, 0x48, 0x5c, 0x87, 0xff, - 0x22, 0xf, 0x61, 0x98, 0x12, 0x83, 0xff, 0x95, - 0x87, 0xf4, 0x84, 0xc1, 0xff, 0xcc, 0xc3, 0xb0, - 0x30, 0x28, 0x1f, 0xfd, 0xa5, 0x7, 0xff, 0x3b, - 0xe, 0x58, 0xa, 0xf, 0xfe, 0xad, 0xe0, 0x78, - 0x3f, 0xfa, 0xca, 0x2, 0x83, 0xff, 0xa1, 0x7, - 0xff, 0x6d, 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, - 0xf9, 0xe, 0x50, 0x14, 0x1f, 0xfd, 0x8, 0x3b, - 0xc0, 0xf0, 0x7f, 0xf5, 0x94, 0x5, 0x7, 0xff, - 0x56, 0xe, 0x50, 0x7f, 0xf3, 0xb0, 0xe4, 0x60, - 0x50, 0x3f, 0xfa, 0xd2, 0x13, 0x7, 0xff, 0x33, - 0xe, 0xc2, 0x60, 0x4a, 0xf, 0xfe, 0x56, 0x1f, - 0xe9, 0xb, 0x90, 0xff, 0xe4, 0x41, 0xec, 0x3a, - 0xc2, 0xe4, 0x3f, 0xf8, 0xda, 0x1c, 0x87, 0x95, - 0x5, 0xd0, 0x3f, 0xf8, 0x98, 0x7d, 0x7, 0xd1, - 0x5, 0xf2, 0x1f, 0xfc, 0xf, 0x7, 0xd8, 0x7f, - 0x44, 0x13, 0xf4, 0x87, 0x3f, 0x7, 0xec, 0x3f, - 0xe8, 0xc3, 0x5f, 0xfa, 0xf, 0xf6, 0x1f, 0xfc, - 0x1a, 0x70, 0x66, 0x43, 0xff, 0x82, 0xe1, 0xff, - 0xc3, 0x73, 0x83, 0xff, 0x8b, 0xc1, 0xff, 0xc6, - 0xb3, 0xd2, 0x83, 0xfd, 0xe0, 0xff, 0xe5, 0x5f, - 0x83, 0xf5, 0xe0, 0xff, 0xe7, 0xb2, 0x1a, 0xf2, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xff, 0xe1, 0xff, 0xfe, - - /* U+E929 "" */ - 0xf, 0xfe, 0x54, 0x1f, 0xfd, 0xfd, 0x83, 0xff, - 0xbb, 0x1, 0x41, 0xff, 0xdb, 0x50, 0x50, 0x7f, - 0xf6, 0xe0, 0xec, 0x3f, 0xfb, 0x38, 0x7d, 0x7, - 0xff, 0x5e, 0xf, 0xca, 0xf, 0xfe, 0xaa, 0x83, - 0xfa, 0xf, 0xfe, 0xac, 0x1f, 0xf6, 0x1f, 0xfd, - 0x3c, 0x3f, 0xf8, 0x30, 0x7f, 0xf4, 0x60, 0xff, - 0xe1, 0x28, 0x3f, 0xf9, 0xf2, 0x1f, 0xfc, 0x39, - 0xf, 0xfe, 0x6a, 0x83, 0xff, 0x8b, 0x7, 0xff, - 0x36, 0xf, 0xfe, 0x3e, 0x1f, 0xfc, 0xbc, 0x3f, - 0xf9, 0x30, 0x7f, 0xf2, 0x60, 0xff, 0xe5, 0x28, - 0x3f, 0xf8, 0xea, 0xf, 0xfe, 0x5c, 0x1f, 0xfc, - 0x78, 0x3f, 0xf9, 0xb8, 0x7f, 0xf1, 0x70, 0xff, - 0xe7, 0xc1, 0xff, 0xc3, 0x83, 0xff, 0xa0, 0xa0, - 0xff, 0xe0, 0xa8, 0x3f, 0xfa, 0x30, 0x7f, 0xf0, - 0x18, 0x3f, 0xfa, 0x78, 0x7f, 0xd0, 0x7f, 0xf5, - 0x60, 0xfe, 0xc3, 0xff, 0xac, 0xc1, 0xf4, 0x1f, - 0xfd, 0x85, 0x7, 0x28, 0x3f, 0xd7, 0xa0, 0xfe, - 0xf9, 0xf, 0xf4, 0x1d, 0x7, 0xf5, 0xa0, 0x43, - 0xff, 0x81, 0x68, 0x7f, 0x61, 0x61, 0xf3, 0x68, - 0x7f, 0xf1, 0xee, 0xf, 0xd1, 0x7, 0x9e, 0x43, - 0xff, 0x96, 0xf0, 0x79, 0x60, 0xcf, 0x7, 0xff, - 0x41, 0xf2, 0x1b, 0x81, 0x70, 0x7f, 0xf5, 0x6d, - 0x4, 0xf9, 0xf, 0xfe, 0xcd, 0xe0, 0xff, 0xff, - 0x87, 0xff, 0xfc, 0x3f, 0xff, 0xe1, 0xff, 0xff, - 0xf, 0xff, 0xf8, 0x7f, 0xff, 0xc3, 0xff, 0xfe, - 0x1f, 0xff, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xfc, - 0x3f, 0xf8, 0x8f, 0x90, 0xff, 0xec, 0xde, 0x20, - 0x5c, 0x1f, 0xfd, 0x5b, 0x41, 0x21, 0x9e, 0xf, - 0xfe, 0x83, 0xe4, 0x37, 0x7, 0x9e, 0x43, 0xff, - 0x96, 0xf0, 0x79, 0x46, 0x1f, 0x36, 0x87, 0xff, - 0x1e, 0xe0, 0xfd, 0x5, 0x7, 0xf5, 0xa0, 0x43, - 0xff, 0x81, 0x68, 0x7f, 0x61, 0x94, 0x1f, 0xeb, - 0xd0, 0x7f, 0x7c, 0x87, 0xfa, 0xf, 0x41, 0xff, - 0xd8, 0x50, 0x7d, 0x87, 0xff, 0x59, 0x83, 0xfa, - 0xf, 0xfe, 0xac, 0x1f, 0xe6, 0xf, 0xfe, 0x9e, - 0x1f, 0xfc, 0x5, 0x7, 0xff, 0x46, 0xf, 0xfe, - 0x14, 0x1f, 0xfd, 0x5, 0x7, 0xff, 0xf, 0xf, - 0xfe, 0x7c, 0x1f, 0xfc, 0x58, 0x3f, 0xf9, 0xb8, - 0x7f, 0xf1, 0x94, 0x1f, 0xfc, 0xb8, 0x3f, 0xf9, - 0x10, 0x7f, 0xf2, 0x94, 0x1f, 0xfc, 0x9c, 0x3f, - 0xf9, 0x30, 0x7f, 0xf2, 0xe0, 0xff, 0xe3, 0xe1, - 0xff, 0xcc, 0x50, 0x7f, 0xf1, 0x60, 0xff, 0xe7, - 0x48, 0x7f, 0xf0, 0xe4, 0x3f, 0xf9, 0xf0, 0x7f, - 0xf0, 0x94, 0x1f, 0xfd, 0x1c, 0x3f, 0xf8, 0x30, - 0x7f, 0xf4, 0xe0, 0xff, 0xb0, 0xff, 0xea, 0x28, - 0x3f, 0xa0, 0xff, 0xeb, 0x41, 0xf9, 0x41, 0xff, - 0xd7, 0xc3, 0xe8, 0x3f, 0xfb, 0x30, 0x76, 0x1f, - 0xfd, 0xa5, 0x5, 0x7, 0xff, 0x72, 0x2, 0x83, - 0xff, 0xbb, 0xb0, 0x7f, 0xf2, 0x40 -}; - - -/*--------------------- - * 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 = 640, .box_w = 40, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 305, .adv_w = 1280, .box_w = 80, .box_h = 54, .ofs_x = 0, .ofs_y = 7}, - {.bitmap_index = 716, .adv_w = 1280, .box_w = 80, .box_h = 54, .ofs_x = 0, .ofs_y = 7}, - {.bitmap_index = 1127, .adv_w = 1280, .box_w = 80, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 1842, .adv_w = 800, .box_w = 50, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 2139, .adv_w = 1118, .box_w = 70, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 2570, .adv_w = 1118, .box_w = 70, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 3005, .adv_w = 854, .box_w = 55, .box_h = 81, .ofs_x = -1, .ofs_y = -5}, - {.bitmap_index = 3399, .adv_w = 854, .box_w = 54, .box_h = 81, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 3793, .adv_w = 1240, .box_w = 78, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 4307, .adv_w = 711, .box_w = 45, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 4623, .adv_w = 1058, .box_w = 67, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 5089, .adv_w = 1058, .box_w = 67, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 5552, .adv_w = 1198, .box_w = 75, .box_h = 81, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 5994, .adv_w = 1278, .box_w = 80, .box_h = 81, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 6450, .adv_w = 1108, .box_w = 70, .box_h = 81, .ofs_x = 0, .ofs_y = -6}, - {.bitmap_index = 6997, .adv_w = 1195, .box_w = 75, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 7238, .adv_w = 1280, .box_w = 81, .box_h = 67, .ofs_x = -1, .ofs_y = 2}, - {.bitmap_index = 7773, .adv_w = 1280, .box_w = 81, .box_h = 73, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 8252, .adv_w = 1280, .box_w = 81, .box_h = 73, .ofs_x = -1, .ofs_y = -1}, - {.bitmap_index = 8717, .adv_w = 1188, .box_w = 75, .box_h = 81, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 9234, .adv_w = 1185, .box_w = 74, .box_h = 81, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 9757, .adv_w = 1280, .box_w = 80, .box_h = 73, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 10293, .adv_w = 1283, .box_w = 81, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 10718, .adv_w = 1283, .box_w = 81, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 11145, .adv_w = 978, .box_w = 61, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 11577, .adv_w = 978, .box_w = 61, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 12008, .adv_w = 1280, .box_w = 80, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 12482, .adv_w = 1280, .box_w = 80, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 12952, .adv_w = 1118, .box_w = 70, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 13391, .adv_w = 1119, .box_w = 70, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 13827, .adv_w = 800, .box_w = 50, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 14185, .adv_w = 800, .box_w = 50, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 14545, .adv_w = 1280, .box_w = 80, .box_h = 81, .ofs_x = 0, .ofs_y = -6}, - {.bitmap_index = 15178, .adv_w = 1280, .box_w = 81, .box_h = 59, .ofs_x = -1, .ofs_y = 6}, - {.bitmap_index = 15628, .adv_w = 1280, .box_w = 81, .box_h = 59, .ofs_x = 0, .ofs_y = 6}, - {.bitmap_index = 16108, .adv_w = 1280, .box_w = 80, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 16679, .adv_w = 1280, .box_w = 80, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 17334, .adv_w = 1024, .box_w = 65, .box_h = 81, .ofs_x = -1, .ofs_y = -5}, - {.bitmap_index = 17819, .adv_w = 1026, .box_w = 65, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 18308, .adv_w = 640, .box_w = 40, .box_h = 80, .ofs_x = 0, .ofs_y = -5}, - {.bitmap_index = 18689, .adv_w = 711, .box_w = 45, .box_h = 80, .ofs_x = 0, .ofs_y = -5} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - - - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 59648, .range_length = 42, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_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 = 2, - .kern_classes = 0, - .bitmap_format = 1, -#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 lv_font_navi_80 = { -#else -lv_font_t lv_font_navi_80 = { -#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 = 82, /*The maximum line height required by the font*/ - .base_line = 6, /*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 LV_FONT_NAVI_80*/ - diff --git a/src/displayapp/fonts/lv_font_sys_48.c b/src/displayapp/fonts/lv_font_sys_48.c deleted file mode 100644 index ca007e3..0000000 --- a/src/displayapp/fonts/lv_font_sys_48.c +++ /dev/null @@ -1,324 +0,0 @@ -/******************************************************************************* - * Size: 48 px - * Bpp: 1 - * Opts: - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef LV_FONT_SYS_48 -#define LV_FONT_SYS_48 1 -#endif - -#if LV_FONT_SYS_48 - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+E902 "" */ - 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x1, 0xff, - 0x80, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, - 0x1, 0xff, 0x80, 0x0, 0x0, 0x1, 0xff, 0x80, - 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x6, 0x7, - 0xff, 0xe0, 0x60, 0xf, 0x8f, 0xff, 0xf1, 0xf0, - 0xf, 0xff, 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, - 0xff, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x3f, - 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, - 0xfe, 0x7f, 0xff, 0x81, 0xff, 0xfe, 0x7f, 0xff, - 0x0, 0xff, 0xfe, 0x3f, 0xfe, 0x0, 0x7f, 0xfc, - 0x1f, 0xfc, 0x0, 0x3f, 0xf8, 0xf, 0xf8, 0x0, - 0x1f, 0xf0, 0x7, 0xf8, 0x0, 0x1f, 0xe0, 0x7, - 0xf8, 0x0, 0x1f, 0xe0, 0x7, 0xf8, 0x0, 0x1f, - 0xe0, 0x7, 0xf8, 0x0, 0x1f, 0xe0, 0xf, 0xf8, - 0x0, 0x1f, 0xf0, 0x1f, 0xfc, 0x0, 0x3f, 0xf8, - 0x3f, 0xfe, 0x0, 0x7f, 0xfc, 0x7f, 0xff, 0x0, - 0xff, 0xfe, 0x7f, 0xff, 0x81, 0xff, 0xfe, 0x7f, - 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff, - 0xfc, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, - 0xff, 0xff, 0xf8, 0xf, 0xff, 0xff, 0xff, 0xf0, - 0xf, 0x8f, 0xff, 0xf1, 0xf0, 0x6, 0x7, 0xff, - 0xe0, 0x60, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, - 0x1, 0xff, 0x80, 0x0, 0x0, 0x1, 0xff, 0x80, - 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x1, - 0xff, 0x80, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, - - /* U+E904 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x78, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, - 0x0, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x1, 0xff, - 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, 0xff, 0xff, - 0xf8, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, 0x0, - 0x7f, 0xf8, 0xf, 0xff, 0x80, 0x1, 0xff, 0x80, - 0x7, 0xfe, 0x0, 0x7, 0xfc, 0x0, 0xf, 0xf8, - 0x0, 0x1f, 0xe0, 0x0, 0x1f, 0xe0, 0x0, 0x7f, - 0x3, 0xf0, 0x3f, 0x80, 0x1, 0xf8, 0x3f, 0xf0, - 0x7e, 0x0, 0xf, 0xc1, 0xff, 0xe0, 0xfc, 0x0, - 0x7f, 0xf, 0xff, 0xc3, 0xf8, 0x3, 0xfc, 0x3f, - 0xff, 0xf, 0xf0, 0x1f, 0xe1, 0xff, 0xfe, 0x1f, - 0xe0, 0xff, 0x87, 0xff, 0xf8, 0x7f, 0xc7, 0xfe, - 0x1f, 0xff, 0xe1, 0xff, 0x9f, 0xf8, 0x7f, 0xff, - 0x87, 0xfe, 0x3f, 0xe1, 0xff, 0xfe, 0x1f, 0xf0, - 0x7f, 0x87, 0xff, 0xf8, 0x7f, 0x80, 0xff, 0xf, - 0xff, 0xc3, 0xfc, 0x1, 0xfc, 0x3f, 0xff, 0xf, - 0xe0, 0x3, 0xf0, 0x7f, 0xf8, 0x3f, 0x0, 0x7, - 0xe0, 0xff, 0xc1, 0xf8, 0x0, 0x1f, 0xc0, 0xfc, - 0xf, 0xe0, 0x0, 0x7f, 0x80, 0x0, 0x7f, 0x80, - 0x1, 0xff, 0x0, 0x3, 0xfe, 0x0, 0x7, 0xfe, - 0x0, 0x1f, 0xf8, 0x0, 0x1f, 0xff, 0x3, 0xff, - 0xe0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x1, - 0xff, 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, 0xff, - 0xff, 0xf8, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, - 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, - - /* U+E905 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x78, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, - 0x0, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x1, 0xff, - 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, 0xff, 0xff, - 0xf8, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, 0x0, - 0x7f, 0xf8, 0xf, 0xff, 0x80, 0x1, 0xff, 0x80, - 0x7, 0xfe, 0x0, 0x7, 0xfc, 0x0, 0xf, 0xf8, - 0x0, 0x1f, 0xe0, 0x0, 0x1f, 0xe0, 0x0, 0x7f, - 0x0, 0x0, 0x3f, 0x80, 0x1, 0xf8, 0x0, 0x0, - 0x7e, 0x0, 0xf, 0xc0, 0x0, 0x0, 0xfc, 0x0, - 0x7f, 0x0, 0x0, 0x3, 0xf8, 0x3, 0xfc, 0x0, - 0x0, 0xf, 0xf0, 0x1f, 0xe0, 0x0, 0x0, 0x1f, - 0xe0, 0xff, 0x80, 0x0, 0x0, 0x7f, 0xc7, 0xfe, - 0x0, 0x0, 0x1, 0xff, 0x9f, 0xf8, 0x0, 0x0, - 0x7, 0xfe, 0x3f, 0xe0, 0x0, 0x0, 0x1f, 0xf0, - 0x7f, 0x80, 0x0, 0x0, 0x7f, 0x80, 0xff, 0x0, - 0x0, 0x3, 0xfc, 0x1, 0xfc, 0x0, 0x0, 0xf, - 0xe0, 0x3, 0xf0, 0x0, 0x0, 0x3f, 0x0, 0x7, - 0xe0, 0x0, 0x1, 0xf8, 0x0, 0x1f, 0xc0, 0x0, - 0xf, 0xe0, 0x0, 0x7f, 0x80, 0x0, 0x7f, 0x80, - 0x1, 0xff, 0x0, 0x3, 0xfe, 0x0, 0x7, 0xfe, - 0x0, 0x1f, 0xf8, 0x0, 0x1f, 0xff, 0x3, 0xff, - 0xe0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x1, - 0xff, 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, 0xff, - 0xff, 0xf8, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, - 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, - - /* U+E906 "" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x78, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x80, 0x0, - 0x0, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x1, 0xff, - 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, 0xff, 0xff, - 0xf8, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, 0x0, - 0x7f, 0xff, 0x8f, 0xff, 0x80, 0x1, 0xff, 0xfe, - 0x7, 0xfe, 0x0, 0x7, 0xff, 0xf8, 0xf, 0xf8, - 0x0, 0x1f, 0xff, 0xe0, 0x1f, 0xe0, 0x0, 0x7f, - 0xff, 0x80, 0x3f, 0x80, 0x1, 0xff, 0xfe, 0x0, - 0x7e, 0x0, 0xf, 0xff, 0xf8, 0x0, 0xfc, 0x0, - 0x7f, 0xff, 0xe0, 0x3, 0xf8, 0x3, 0xff, 0xff, - 0x80, 0xf, 0xf0, 0x1f, 0xff, 0xfe, 0x0, 0x1f, - 0xe0, 0xff, 0xff, 0xf8, 0x0, 0x7f, 0xc7, 0xff, - 0xff, 0xe0, 0x1, 0xff, 0x9f, 0xff, 0xff, 0x80, - 0x7, 0xfe, 0x3f, 0xff, 0xfe, 0x0, 0x1f, 0xf0, - 0x7f, 0xff, 0xf8, 0x0, 0x7f, 0x80, 0xff, 0xff, - 0xe0, 0x3, 0xfc, 0x1, 0xff, 0xff, 0x80, 0xf, - 0xe0, 0x3, 0xff, 0xfe, 0x0, 0x3f, 0x0, 0x7, - 0xff, 0xf8, 0x1, 0xf8, 0x0, 0x1f, 0xff, 0xe0, - 0xf, 0xe0, 0x0, 0x7f, 0xff, 0x80, 0x7f, 0x80, - 0x1, 0xff, 0xfe, 0x3, 0xfe, 0x0, 0x7, 0xff, - 0xf8, 0x1f, 0xf8, 0x0, 0x1f, 0xff, 0xe3, 0xff, - 0xe0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x1, - 0xff, 0xff, 0xff, 0xfe, 0x0, 0x7, 0xff, 0xff, - 0xff, 0xf8, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, - 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, - - /* U+E907 "" */ - 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x78, 0x0, - 0x0, 0x0, 0x1e, 0x0, 0x0, 0x0, 0x7, 0x80, - 0x0, 0x0, 0x1, 0xe0, 0x0, 0x8, 0x0, 0x78, - 0x0, 0x47, 0x0, 0x0, 0x0, 0x3b, 0xe0, 0x0, - 0x0, 0x1f, 0x7c, 0x0, 0x0, 0xf, 0x8f, 0x80, - 0x0, 0x7, 0xc1, 0xc0, 0x0, 0x0, 0xe0, 0x20, - 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0x80, - 0x1f, 0xff, 0xff, 0xe0, 0x7, 0xff, 0xff, 0xf8, - 0x1, 0xff, 0xff, 0xfe, 0x0, 0x7f, 0xff, 0xff, - 0x80, 0x1f, 0xff, 0xff, 0xe0, 0x7, 0xff, 0xff, - 0xf8, 0x1, 0xff, 0xff, 0xfe, 0x0, 0x7f, 0xff, - 0xff, 0x80, 0x1f, 0xff, 0xff, 0xe0, 0x7, 0xff, - 0xff, 0xf8, 0x0, 0xff, 0xff, 0xfc, 0x0, 0x1f, - 0xff, 0xfe, 0x0, 0x3, 0xff, 0xff, 0x0, 0x0, - 0x7f, 0xff, 0x80, 0x0, 0xf, 0xff, 0xc0, 0x0, - 0x1, 0xff, 0xe0, 0x0, 0x0, 0x7f, 0xf8, 0x0, - 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x7, 0xff, 0x80, - 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, 0x7f, 0xf8, - 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x7, 0xff, - 0x80, 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, 0x7f, - 0xf8, 0x0, - - /* U+E90B "" */ - 0x0, 0x3, 0xc0, 0x0, 0x0, 0x1, 0xf8, 0x0, - 0x2, 0x0, 0x7e, 0x0, 0x1, 0xc0, 0x1f, 0x80, - 0x0, 0xf8, 0x7, 0xe0, 0x0, 0x1f, 0xf, 0xff, - 0x0, 0x3, 0xe1, 0xff, 0xe0, 0x0, 0x7c, 0x3f, - 0xfc, 0x0, 0xf, 0x87, 0xff, 0x80, 0x1, 0xf0, - 0xff, 0xf0, 0x0, 0x7e, 0x1f, 0xfe, 0x0, 0x1f, - 0xc3, 0xff, 0x80, 0x7, 0xf8, 0x7f, 0xe0, 0x3, - 0xff, 0xf, 0xfc, 0x0, 0xff, 0xe1, 0xff, 0x0, - 0x3f, 0xfc, 0x3f, 0xc0, 0xf, 0xff, 0x87, 0xf0, - 0x3, 0xff, 0xf1, 0xfc, 0x0, 0xff, 0xfe, 0x3f, - 0x0, 0x3f, 0xff, 0xc7, 0xc0, 0xf, 0xff, 0xf8, - 0xf0, 0x3, 0xff, 0xfe, 0x1c, 0x0, 0xff, 0xff, - 0xc3, 0x0, 0x3f, 0xff, 0xf8, 0x40, 0xf, 0xff, - 0xff, 0x0, 0x3, 0xff, 0xff, 0xe0, 0x0, 0xff, - 0xff, 0xfc, 0x0, 0x7f, 0xff, 0xff, 0x80, 0x3f, - 0xff, 0xff, 0xf0, 0x1f, 0xff, 0xff, 0xfe, 0xf, - 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xf8, - 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x3, - 0xe0, 0x0, 0x0, 0x0, 0x7c, 0x0, 0x3f, 0xc0, - 0xe, 0x0, 0xf, 0xf0, 0x1, 0x0, 0x1, 0xf8, - 0x0, 0x0, 0x0, 0x3c, 0x0, 0x0, - - /* U+E90C "" */ - 0x0, 0x0, 0x3c, 0x0, 0x0, 0x1, 0x80, 0x7e, - 0x1, 0x80, 0x3, 0xc0, 0x7e, 0x3, 0xc0, 0x7, - 0xe0, 0x7e, 0x7, 0xe0, 0xf, 0xc0, 0x7e, 0x3, - 0xf0, 0x1f, 0x83, 0xff, 0xc1, 0xf8, 0x3f, 0x7, - 0xff, 0xe0, 0xf8, 0x3e, 0xf, 0xff, 0xf0, 0x7c, - 0x7e, 0x1f, 0xff, 0xf8, 0x3c, 0x7c, 0x3f, 0xff, - 0xfc, 0x3e, 0x78, 0x7f, 0xff, 0xfe, 0x1e, 0xf8, - 0x7f, 0xff, 0xfe, 0x1e, 0xf8, 0x7f, 0xff, 0xfe, - 0x1f, 0xf0, 0xff, 0xff, 0xff, 0xf, 0xf0, 0xff, - 0xff, 0xff, 0xf, 0xf0, 0xff, 0xff, 0xff, 0xf, - 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, - 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, - 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, - 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, - 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, - 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, - 0xff, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x1, - 0xff, 0xff, 0xff, 0x80, 0x3, 0xff, 0xff, 0xff, - 0xc0, 0x7, 0xff, 0xff, 0xff, 0xe0, 0xf, 0xff, - 0xff, 0xff, 0xf0, 0xf, 0xff, 0xff, 0xff, 0xf0, - 0xf, 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x0, - 0x3c, 0x0, 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 = 768, .box_w = 40, .box_h = 40, .ofs_x = 4, .ofs_y = 0}, - {.bitmap_index = 200, .adv_w = 768, .box_w = 46, .box_h = 46, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 465, .adv_w = 768, .box_w = 46, .box_h = 46, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 730, .adv_w = 768, .box_w = 46, .box_h = 46, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 995, .adv_w = 768, .box_w = 34, .box_h = 40, .ofs_x = 7, .ofs_y = 0}, - {.bitmap_index = 1165, .adv_w = 768, .box_w = 34, .box_h = 39, .ofs_x = 8, .ofs_y = 0}, - {.bitmap_index = 1331, .adv_w = 768, .box_w = 40, .box_h = 39, .ofs_x = 4, .ofs_y = 0} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - -static const uint8_t glyph_id_ofs_list_0[] = { - 0, 0, 1, 2, 3, 4, 0, 0, - 0, 5, 6 -}; - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 59650, .range_length = 11, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = glyph_id_ofs_list_0, .list_length = 11, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_FULL - } -}; - - - -/*-------------------- - * 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 = 1, - .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 lv_font_sys_48 = { -#else -lv_font_t lv_font_sys_48 = { -#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 = 46, /*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 LV_FONT_SYS_48*/ - diff --git a/src/displayapp/fonts/open_sans_light.c b/src/displayapp/fonts/open_sans_light.c deleted file mode 100644 index 84b7869..0000000 --- a/src/displayapp/fonts/open_sans_light.c +++ /dev/null @@ -1,1261 +0,0 @@ -/******************************************************************************* - * Size: 150 px - * Bpp: 1 - * Opts: - ******************************************************************************/ - -#ifdef LV_LVGL_H_INCLUDE_SIMPLE -#include "lvgl.h" -#else -#include "lvgl/lvgl.h" -#endif - -#ifndef OPEN_SANS_LIGHT -#define OPEN_SANS_LIGHT 1 -#endif - -#if OPEN_SANS_LIGHT - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { - /* U+0030 "0" */ - 0x0, 0x0, 0x0, 0xf, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, - 0xff, 0xf8, 0x0, 0x0, 0x0, 0xf, 0xff, 0xe0, - 0x3, 0xff, 0xf0, 0x0, 0x0, 0x0, 0xff, 0xf8, - 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0xf, 0xfe, - 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0xff, - 0xe0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x7, - 0xfe, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, - 0x7f, 0xc0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, - 0x7, 0xfc, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, - 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0xf, 0xf8, - 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xfc, 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe0, 0x0, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x80, 0xf, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x0, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xe0, 0x3, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x3f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0xf, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, - 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x81, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xfc, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xe0, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x87, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x3f, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x1f, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x3f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf9, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xcf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xfe, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0xbf, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfd, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xff, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfe, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf9, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xcf, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xfe, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xf3, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x9f, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x7f, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x87, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xfc, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe0, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xfe, 0x7, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xf0, 0x3f, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x80, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xfc, 0x7, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x3f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x7, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, - 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0x80, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xe0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfe, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xf0, 0x0, 0x1f, 0xf0, 0x0, 0x0, - 0x0, 0x1, 0xff, 0x0, 0x0, 0x7f, 0xc0, 0x0, - 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x1, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0xf, 0xf8, - 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x3f, - 0xf0, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, - 0xff, 0xc0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, - 0x3, 0xff, 0x80, 0x0, 0x3, 0xff, 0x80, 0x0, - 0x0, 0xf, 0xff, 0x0, 0x0, 0x7f, 0xf8, 0x0, - 0x0, 0x0, 0x3f, 0xff, 0x0, 0x1f, 0xff, 0x80, - 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xf8, - 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, - 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xff, 0xc0, 0x0, 0x0, 0x0, - - /* U+0031 "1" */ - 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, - 0x7f, 0xf0, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, - 0xf, 0xff, 0xc0, 0x0, 0x3, 0xff, 0xf8, 0x0, - 0x0, 0xff, 0xbf, 0x0, 0x0, 0x7f, 0xe7, 0xe0, - 0x0, 0x1f, 0xf8, 0xfc, 0x0, 0x7, 0xfe, 0x1f, - 0x80, 0x3, 0xff, 0x83, 0xf0, 0x0, 0xff, 0xc0, - 0xfe, 0x0, 0x3f, 0xf0, 0x1f, 0xc0, 0x1f, 0xfc, - 0x3, 0xf8, 0x7, 0xff, 0x0, 0x7f, 0x1, 0xff, - 0x80, 0xf, 0xe0, 0xff, 0xe0, 0x1, 0xfc, 0x3f, - 0xf8, 0x0, 0x3f, 0x8f, 0xfc, 0x0, 0x7, 0xf7, - 0xff, 0x0, 0x0, 0xff, 0xff, 0xc0, 0x0, 0x1f, - 0xff, 0xf0, 0x0, 0x3, 0xfb, 0xf8, 0x0, 0x0, - 0x7f, 0x3e, 0x0, 0x0, 0xf, 0xe3, 0x80, 0x0, - 0x1, 0xfc, 0x20, 0x0, 0x0, 0x3f, 0x80, 0x0, - 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, - 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, - 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, - 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfc, - 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, - 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, - 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, - 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0x80, - 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, 0xfe, - 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, - 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, - 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, - 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, - 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, - 0xfc, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, - 0x7, 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, 0xe0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x3f, - 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, - 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, - 0x3, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, - 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, - 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, - 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, - 0xc0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, - 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, 0xfe, 0x0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x3, 0xf8, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0xf, - 0xe0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0x3f, 0x80, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x0, 0xfe, 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, - 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x7f, 0x0, - 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x1, 0xfc, - 0x0, 0x0, 0x0, 0x3f, 0x80, - - /* U+0032 "2" */ - 0x0, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xff, 0xff, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xf0, 0x0, - 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, - 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xfc, - 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x0, 0x0, 0x1f, 0xff, 0xf0, 0x1, 0xff, - 0xfe, 0x0, 0x0, 0xf, 0xff, 0xc0, 0x0, 0x3, - 0xff, 0xe0, 0x0, 0x7, 0xff, 0xe0, 0x0, 0x0, - 0x1f, 0xfe, 0x0, 0x1, 0xff, 0xe0, 0x0, 0x0, - 0x0, 0xff, 0xe0, 0x0, 0x7f, 0xf0, 0x0, 0x0, - 0x0, 0xf, 0xfe, 0x0, 0xf, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0xff, 0xc0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xfc, 0x0, 0xf, 0x80, 0x0, - 0x0, 0x0, 0x0, 0xff, 0xc0, 0x1, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x10, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf0, - - /* U+0033 "3" */ - 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, - 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, - 0xf8, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xe0, 0x0, 0x0, 0xff, 0xff, 0xe0, 0x0, - 0xff, 0xff, 0x0, 0x0, 0x3f, 0xff, 0xc0, 0x0, - 0x0, 0xff, 0xf8, 0x0, 0x7, 0xff, 0xe0, 0x0, - 0x0, 0x3, 0xff, 0xc0, 0x1, 0xff, 0xf0, 0x0, - 0x0, 0x0, 0xf, 0xfe, 0x0, 0x3f, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xf0, 0x7, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, 0x3f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x1, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, 0xe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, - 0xff, 0xc0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, - 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfe, - 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xc0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xf8, 0xf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xff, 0xe0, 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0xfc, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x0, - 0x7f, 0xff, 0x80, 0xf, 0xff, 0xff, 0x80, 0x0, - 0xff, 0xff, 0xe0, 0x0, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfc, 0x0, 0x1, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0x0, 0x0, 0x7, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0xf, 0xff, - 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x7, - 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, - - /* U+0034 "4" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfb, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfd, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfc, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xfe, 0x3f, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x1f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, - 0xf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0x7, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x3, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x1, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0x80, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0x80, 0x7e, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x3f, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x1f, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xc0, 0xf, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xc0, 0x7, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x3, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x1, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xe0, 0x0, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x7e, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x3f, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xf8, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xf8, 0x0, 0x7, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x3, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfc, 0x0, 0x0, 0x7e, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x3f, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, - 0x0, 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xfe, 0x0, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xfe, 0x0, 0x0, 0x7, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x3, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, - 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x7e, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, - 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0x80, 0x0, 0x0, 0xf, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x7, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, - 0x3, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xc0, - 0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x7e, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x3f, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, - 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0xf, 0xc0, 0x0, - 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x7, - 0xe0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x0, 0x3, 0xf0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, 0x0, - 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x0, - 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x7e, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0x3, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, - 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xf, 0xc0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xe0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xf8, 0x0, 0x0, - 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfc, - 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7e, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, - 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xc0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xe0, 0x0, 0x0, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x3f, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, 0xf8, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xfc, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7e, 0x0, 0x0, 0x1f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, - - /* U+0035 "5" */ - 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, - 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, - 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0x80, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xf8, 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xfe, 0x0, 0x7f, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x3f, 0x8f, 0xff, 0xff, 0xff, - 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0xff, - 0xfc, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xc0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xfc, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xc0, 0x0, 0xf, 0xff, 0xf0, 0x0, - 0x3f, 0xff, 0xfc, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x7f, 0xff, 0x80, 0x0, 0x18, 0x0, 0x0, - 0x0, 0x3, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0x3, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xc0, - 0x3f, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xe0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf0, - 0x3, 0xff, 0x80, 0x0, 0x0, 0x1, 0xff, 0xf8, - 0x0, 0xff, 0xfc, 0x0, 0x0, 0x3, 0xff, 0xfc, - 0x0, 0x3f, 0xff, 0xfc, 0x0, 0xf, 0xff, 0xfc, - 0x0, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xff, 0xfe, - 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xc0, - 0x0, 0x0, 0x0, - - /* U+0036 "6" */ - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, - 0xff, 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, - 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xff, - 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x7, 0xff, - 0xfc, 0x0, 0xf, 0xc0, 0x0, 0x0, 0x0, 0xff, - 0xfe, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0xf, - 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x3, 0xff, - 0xe0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x1, 0xff, - 0xff, 0xf0, 0x0, 0x0, 0x1f, 0xc0, 0x0, 0x7f, - 0xff, 0xff, 0xf0, 0x0, 0x0, 0xfe, 0x0, 0xf, - 0xff, 0xff, 0xff, 0xf0, 0x0, 0xf, 0xf0, 0x1, - 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0, 0x7f, 0x0, - 0x3f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3, 0xf8, - 0x3, 0xff, 0xf0, 0x1, 0xff, 0xfe, 0x0, 0x1f, - 0xc0, 0x7f, 0xf8, 0x0, 0x0, 0xff, 0xf8, 0x0, - 0xfe, 0x7, 0xfe, 0x0, 0x0, 0x1, 0xff, 0xe0, - 0x7, 0xf0, 0x7f, 0xc0, 0x0, 0x0, 0x3, 0xff, - 0x80, 0x3f, 0x87, 0xf8, 0x0, 0x0, 0x0, 0x7, - 0xfe, 0x1, 0xfc, 0x7f, 0x80, 0x0, 0x0, 0x0, - 0x1f, 0xf8, 0xf, 0xe7, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0xe0, 0x7f, 0x7f, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xff, 0x3, 0xff, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xfc, 0x1f, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xf0, 0xff, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x8f, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x7f, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf3, 0xff, - 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x9f, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, - 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xf3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x9f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3, 0xfc, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xe7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0xbf, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfd, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xef, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xfb, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xdf, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf7, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0x9f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe7, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xf8, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xc7, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x3f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x7, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x3f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x7, - 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, - 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xf0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0x80, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xfc, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x3f, 0xc0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x3, 0xfe, 0x0, 0x1f, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x7f, 0xc0, 0x0, - 0x0, 0x0, 0x3, 0xfe, 0x0, 0x1, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x7, 0xfc, - 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, 0x3f, - 0xf8, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, - 0xff, 0xe0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, - 0x3, 0xff, 0xc0, 0x0, 0x0, 0x7f, 0xf0, 0x0, - 0x0, 0xf, 0xff, 0x80, 0x0, 0x1f, 0xff, 0x0, - 0x0, 0x0, 0x1f, 0xff, 0xc0, 0xf, 0xff, 0xf0, - 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, 0xff, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, - 0xe0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, - 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, - 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xff, 0xe0, 0x0, 0x0, 0x0, - - /* U+0037 "7" */ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, - - /* U+0038 "8" */ - 0x0, 0x0, 0x0, 0x1f, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xff, 0xfc, - 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, - 0xf0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, - 0xff, 0xc0, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x1, - 0xff, 0xfe, 0x0, 0x0, 0x1, 0xff, 0xf0, 0x0, - 0x1, 0xff, 0xf0, 0x0, 0x0, 0x3f, 0xf8, 0x0, - 0x0, 0x3, 0xff, 0x80, 0x0, 0x7, 0xfe, 0x0, - 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0xff, 0xc0, - 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x1f, 0xf8, - 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x1, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf8, 0x0, 0x3f, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x7, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, - 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xc0, - 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xe0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xfe, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xff, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x1f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x1, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xf0, 0x1f, 0xe0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xff, 0x1, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xf0, 0x1f, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x1, 0xfe, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x1f, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x1f, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, - 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xe0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0xc0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xf8, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x80, 0x1, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xf0, 0x0, 0x1f, 0xf8, 0x0, 0x0, - 0x0, 0x3, 0xfe, 0x0, 0x0, 0xff, 0xe0, 0x0, - 0x0, 0x0, 0x7f, 0xc0, 0x0, 0x7, 0xff, 0x0, - 0x0, 0x0, 0xf, 0xf8, 0x0, 0x0, 0x3f, 0xf8, - 0x0, 0x0, 0x1, 0xff, 0x80, 0x0, 0x1, 0xff, - 0xe0, 0x0, 0x0, 0x7f, 0xe0, 0x0, 0x0, 0xf, - 0xff, 0x80, 0x0, 0x1f, 0xfc, 0x0, 0x0, 0x0, - 0x7f, 0xfe, 0x0, 0x3, 0xff, 0x80, 0x0, 0x0, - 0x1, 0xff, 0xf8, 0x0, 0xff, 0xe0, 0x0, 0x0, - 0x0, 0xf, 0xff, 0xe0, 0x3f, 0xfc, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xff, 0x9f, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xc0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, 0xe7, - 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xff, 0xf8, - 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x3f, 0xfe, - 0x0, 0x3f, 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, - 0x80, 0x0, 0xff, 0xfe, 0x0, 0x0, 0x1, 0xff, - 0xe0, 0x0, 0x3, 0xff, 0xf8, 0x0, 0x0, 0x3f, - 0xf8, 0x0, 0x0, 0x7, 0xff, 0xc0, 0x0, 0x7, - 0xfe, 0x0, 0x0, 0x0, 0x3f, 0xfe, 0x0, 0x0, - 0xff, 0xc0, 0x0, 0x0, 0x0, 0xff, 0xf0, 0x0, - 0x1f, 0xf8, 0x0, 0x0, 0x0, 0x3, 0xff, 0x80, - 0x3, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xfc, - 0x0, 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xe0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xff, 0x0, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xf0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0x81, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf8, 0x3f, 0xe0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0xc3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x7f, 0xc0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xe7, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xfe, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe7, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xff, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1, 0xfe, 0x7f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1f, 0xe7, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x1, 0xfe, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe7, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xfc, 0x3f, 0xc0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xc3, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x1f, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x81, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, - 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, - 0x0, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0xe0, 0x7, 0xfe, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xfc, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x1, - 0xff, 0x80, 0x3, 0xff, 0xc0, 0x0, 0x0, 0x0, - 0x7f, 0xf0, 0x0, 0x1f, 0xff, 0x0, 0x0, 0x0, - 0x1f, 0xfe, 0x0, 0x0, 0x7f, 0xfe, 0x0, 0x0, - 0xf, 0xff, 0xc0, 0x0, 0x3, 0xff, 0xfe, 0x0, - 0xf, 0xff, 0xf8, 0x0, 0x0, 0x1f, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0x0, 0x0, 0x0, 0x7f, 0xff, - 0xff, 0xff, 0xff, 0xc0, 0x0, 0x0, 0x1, 0xff, - 0xff, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x0, 0x7, - 0xff, 0xff, 0xff, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xff, 0xff, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7, 0xff, 0xf8, 0x0, 0x0, 0x0, - - /* U+0039 "9" */ - 0x0, 0x0, 0x0, 0x1f, 0xfe, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xff, 0xfe, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xff, 0xff, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x3f, 0xff, 0xff, 0xff, - 0xfe, 0x0, 0x0, 0x0, 0x7, 0xff, 0xf0, 0x3, - 0xff, 0xf8, 0x0, 0x0, 0x0, 0xff, 0xf0, 0x0, - 0x3, 0xff, 0xc0, 0x0, 0x0, 0x1f, 0xfc, 0x0, - 0x0, 0xf, 0xfe, 0x0, 0x0, 0x3, 0xff, 0x0, - 0x0, 0x0, 0x3f, 0xf0, 0x0, 0x0, 0x7f, 0xc0, - 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0xf, 0xf8, - 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x1, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x3f, - 0xe0, 0x0, 0x0, 0x0, 0x1, 0xfe, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x7f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, - 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, - 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, - 0xc0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xfc, 0x1, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1f, 0xe0, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xfe, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7f, 0x3, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x7, 0xf0, 0x7f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0x87, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf8, 0x7f, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3f, 0x87, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xcf, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfc, 0xff, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xcf, - 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xef, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xfe, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0xf, 0xef, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xfe, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xef, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xfe, 0xff, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0xf, 0xff, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x80, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0xf8, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x7f, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf7, 0xf8, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x7f, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0xff, - 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, - 0xf3, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, - 0xff, 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x1, - 0xff, 0xf1, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xff, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xf7, 0xf0, 0xff, 0x80, 0x0, 0x0, 0x0, - 0x0, 0xfe, 0x7f, 0x7, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xc7, 0xf0, 0x7f, 0xe0, 0x0, 0x0, - 0x0, 0x3, 0xf8, 0x7f, 0x3, 0xff, 0x80, 0x0, - 0x0, 0x0, 0xff, 0xf, 0xf0, 0x1f, 0xfc, 0x0, - 0x0, 0x0, 0x1f, 0xe0, 0xff, 0x0, 0xff, 0xf0, - 0x0, 0x0, 0x7, 0xfc, 0xf, 0xf0, 0x7, 0xff, - 0xc0, 0x0, 0x3, 0xff, 0x80, 0xfe, 0x0, 0x3f, - 0xff, 0xc0, 0x3, 0xff, 0xf0, 0xf, 0xe0, 0x1, - 0xff, 0xff, 0xff, 0xff, 0xfc, 0x0, 0xfe, 0x0, - 0x7, 0xff, 0xff, 0xff, 0xff, 0x0, 0xf, 0xe0, - 0x0, 0x1f, 0xff, 0xff, 0xff, 0xe0, 0x0, 0xfe, - 0x0, 0x0, 0x7f, 0xff, 0xff, 0xf0, 0x0, 0xf, - 0xe0, 0x0, 0x0, 0xff, 0xff, 0xf8, 0x0, 0x1, - 0xfe, 0x0, 0x0, 0x0, 0xff, 0xf8, 0x0, 0x0, - 0x1f, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x1, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0x80, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3, 0xf8, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xe0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1f, - 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, - 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x3f, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x7f, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0xf, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x7, 0xfc, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0xff, 0x80, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xe0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0x80, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xf0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfe, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, - 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, - 0xf8, 0x0, 0x0, 0x1, 0x80, 0x0, 0x0, 0xff, - 0xff, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0xff, - 0xff, 0xc0, 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, - 0xff, 0xf0, 0x0, 0x0, 0x0, 0x1f, 0xff, 0xff, - 0xff, 0xfc, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, - 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xff, - 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xff, - 0xff, 0xff, 0xc0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 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 = 1370, .box_w = 69, .box_h = 110, .ofs_x = 8, .ofs_y = -1}, - {.bitmap_index = 949, .adv_w = 1370, .box_w = 35, .box_h = 107, .ofs_x = 15, .ofs_y = 0}, - {.bitmap_index = 1418, .adv_w = 1370, .box_w = 67, .box_h = 108, .ofs_x = 8, .ofs_y = 0}, - {.bitmap_index = 2323, .adv_w = 1370, .box_w = 68, .box_h = 110, .ofs_x = 7, .ofs_y = -1}, - {.bitmap_index = 3258, .adv_w = 1370, .box_w = 81, .box_h = 108, .ofs_x = 3, .ofs_y = -1}, - {.bitmap_index = 4352, .adv_w = 1370, .box_w = 66, .box_h = 108, .ofs_x = 10, .ofs_y = -1}, - {.bitmap_index = 5243, .adv_w = 1370, .box_w = 69, .box_h = 110, .ofs_x = 9, .ofs_y = -1}, - {.bitmap_index = 6192, .adv_w = 1370, .box_w = 69, .box_h = 106, .ofs_x = 8, .ofs_y = 0}, - {.bitmap_index = 7107, .adv_w = 1370, .box_w = 68, .box_h = 110, .ofs_x = 9, .ofs_y = -1}, - {.bitmap_index = 8042, .adv_w = 1370, .box_w = 68, .box_h = 110, .ofs_x = 8, .ofs_y = -1} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - - - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 48, .range_length = 10, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_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 = 1, - .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 open_sans_light = { -#else -lv_font_t open_sans_light = { -#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 = 110, /*The maximum line height required by the font*/ - .base_line = 1, /*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 = -11, - .underline_thickness = 7, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - - - -#endif /*#if OPEN_SANS_LIGHT*/ - -- cgit v0.10.2 From b9fbee1007b121fd3f2d00c75335ede057751728 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Wed, 20 Apr 2022 20:45:12 +0300 Subject: Added lv_font_conv to workflow main diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 58a6393..7bfe959 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -95,6 +95,10 @@ jobs: pip3 install --user setuptools pip3 install --user adafruit-nrfutil + - name: Install lv_font_conv + run: + npm i -g lv_font_conv + ######################################################################################### # Checkout -- cgit v0.10.2 From e39f183efeaa81d4122758e28050194327514ae6 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Wed, 20 Apr 2022 20:53:10 +0300 Subject: fontgen: make simulator build fonts too diff --git a/.github/workflows/lv_sim.yml b/.github/workflows/lv_sim.yml index 59ee7b3..82e4c3d 100644 --- a/.github/workflows/lv_sim.yml +++ b/.github/workflows/lv_sim.yml @@ -34,6 +34,10 @@ jobs: sudo apt-get update sudo apt-get -y install libsdl2-dev + - name: Install lv_font_conv + run: + npm i -g lv_font_conv + ######################################################################################### # Checkout @@ -42,6 +46,11 @@ jobs: with: submodules: recursive + - name: build fonts + run: | + cd src/displayapp/fonts/ + python generate.py fonts.json + ######################################################################################### # get InfiniSim repo -- cgit v0.10.2 From ef17f2f9818162bfeae09b979193b1b9f03204d0 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Wed, 20 Apr 2022 21:38:42 +0300 Subject: fontgen: generate font .c files in build dir diff --git a/src/displayapp/fonts/CMakeLists.txt b/src/displayapp/fonts/CMakeLists.txt index 1dfe041..718afaf 100644 --- a/src/displayapp/fonts/CMakeLists.txt +++ b/src/displayapp/fonts/CMakeLists.txt @@ -4,13 +4,16 @@ set(FONTS jetbrains_mono_42 jetbrains_mono_76 jetbrains_mono_bold_20 jetbrains_mono_extrabold_compressed lv_font_navi_80 lv_font_sys_48 open_sans_light) +configure_file(displayapp/fonts/jetbrains_mono_bold_20.c_zero.patch + displayapp/fonts/jetbrains_mono_bold_20.c_zero.patch COPYONLY) foreach(FONT ${FONTS}) - set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/displayapp/fonts/${FONT}.c + set_source_files_properties(displayapp/fonts/${FONT}.c PROPERTIES GENERATED TRUE) - add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/displayapp/fonts/${FONT}.c - COMMAND python generate.py -f ${FONT} fonts.json + add_custom_command(OUTPUT displayapp/fonts/${FONT}.c + COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/displayapp/fonts/generate.py + -f ${FONT} ${CMAKE_CURRENT_SOURCE_DIR}/displayapp/fonts/fonts.json DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/displayapp/fonts/fonts.json - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/displayapp/fonts + WORKING_DIRECTORY displayapp/fonts ) endforeach() diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index d1756a7..d778595 100755 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -11,6 +11,8 @@ import subprocess class Source(object): def __init__(self, d): self.file = d['file'] + if not os.path.exists(self.file): + self.file = os.path.join(os.path.dirname(sys.argv[0]), self.file) self.range = d.get('range') self.symbols = d.get('symbols') -- cgit v0.10.2 From d967ed7d9087900869c686f07e257c3836178eaf Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Sun, 24 Apr 2022 17:36:11 +0300 Subject: fontgen: move lv_font_conv doc diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index feef9f6..42c98df 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -12,6 +12,11 @@ To build this project, you'll need: python -m pip install -r tools/mcuboot/requirements.txt ``` - A reasonably recent version of CMake (I use 3.16.5) + - lv_font_conv, to generate the font .c files + - see [lv_font_conv](https://github.com/lvgl/lv_font_conv#install-the-script) + - install npm (commonly done via the package manager) + - install lv_font_conv: `npm i lv_font_conv -g` + - if installed non-globally, make sure `lv_font_conv` is in the PATH ## Build steps ### Clone the repo diff --git a/src/displayapp/fonts/README.md b/src/displayapp/fonts/README.md index 18fa618..3b998e2 100644 --- a/src/displayapp/fonts/README.md +++ b/src/displayapp/fonts/README.md @@ -7,12 +7,7 @@ ## Generate the fonts: * Make sure you have installed lv_font_conv, and it's in the PATH - * `npm i lv_font_conv` - * `export PATH="$PATH:$PWD/node_modules/.bin"` - * *OR* globally: - * `npm i -g lv_font_conv` - * `export PATH="$PATH:$HOME/.local/bin"` (if not already in the path) - * or in any other path you choose. + * See `doc/buildAndProgram.md` * run the `generate.py` script, while in the folder. * it has a `-h` flag to show usage, nontheless: `python generate.py fonts.json` -- cgit v0.10.2 From 4e2b0b1f10a30403820302eadb489c31bc9d5804 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Sun, 24 Apr 2022 18:41:07 +0300 Subject: fontgen: remove "generating the fonts" section diff --git a/src/displayapp/fonts/README.md b/src/displayapp/fonts/README.md index 3b998e2..7313794 100644 --- a/src/displayapp/fonts/README.md +++ b/src/displayapp/fonts/README.md @@ -4,13 +4,6 @@ * [Awesome font from LVGL](https://lvgl.io/assets/others/FontAwesome5-Solid+Brands+Regular.woff) * [Open Sans Light from Google](https://fonts.google.com/specimen/Open+Sans) -## Generate the fonts: - -* Make sure you have installed lv_font_conv, and it's in the PATH - * See `doc/buildAndProgram.md` -* run the `generate.py` script, while in the folder. - * it has a `-h` flag to show usage, nontheless: `python generate.py fonts.json` - ### How to add new symbols: * Browse [this cheatsheet](https://fontawesome.com/cheatsheet/free/solid) and pick symbols -- cgit v0.10.2 From 331de8ce8e39b710647cd5dc651539da06c8587a Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Sun, 24 Apr 2022 18:46:44 +0300 Subject: fontgen: remove "feature" feature diff --git a/src/displayapp/fonts/README.md b/src/displayapp/fonts/README.md index 7313794..92270f2 100644 --- a/src/displayapp/fonts/README.md +++ b/src/displayapp/fonts/README.md @@ -24,7 +24,6 @@ and for each font there is: * bpp - bits per pixel. * size - size. * patches - list of extra "patches" to run, either string to file which should be run, or list of arguments (with first one being the command being run) -* features - optional. dictionary of extra file,range fonts to be included when the feature is enabled. (for example: a extra language) * compress - optional. default disabled. add `"compress": true` to enable ### Navigation font diff --git a/src/displayapp/fonts/fonts.json b/src/displayapp/fonts/fonts.json index fb9e1ac..48f9865 100644 --- a/src/displayapp/fonts/fonts.json +++ b/src/displayapp/fonts/fonts.json @@ -12,15 +12,7 @@ ], "bpp": 1, "size": 20, - "patches": [["patch", "{file}", "{file}_zero.patch"]], - "features": { - "hebrew": [ - { - "file": "SimpleCLM-Medium.ttf", - "range": "0x05D0-0x05EA,0x05F3,0x05F4" - } - ] - } + "patches": [["patch", "{file}", "{file}_zero.patch"]] }, "jetbrains_mono_42": { "sources": [ diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index d778595..5cd9fe5 100755 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -33,7 +33,6 @@ def gen_lvconv_line(dest: str, size: int, bpp: int, sources: typing.List[Source] def main(): ap = argparse.ArgumentParser(description='auto generate LVGL font files from fonts') ap.add_argument('config', type=str, help='config file to use') - ap.add_argument('-e', '--enable', type=str, action='append', help='optional feature to enable in font generation', default=[], metavar='FEATURE', dest='features') ap.add_argument('-f', '--font', type=str, action='append', help='Choose specific fonts to generate (default: all)', default=[]) args = ap.parse_args() @@ -59,10 +58,6 @@ def main(): font = data[name] sources = font.pop('sources') patches = font.pop('patches') if 'patches' in font else [] - features = font.pop('features') if 'features' in font else [] - for enabled_feature in args.features: - if enabled_feature in features: - sources.extend(features[enabled_feature]) font['sources'] = [Source(thing) for thing in sources] line = gen_lvconv_line(f'{name}.c', **font) subprocess.check_call(line) -- cgit v0.10.2 From 2ccf88c03cc82168894a4a5b184e64a034d86b60 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Sun, 24 Apr 2022 18:49:15 +0300 Subject: fontgen: lock version at current diff --git a/.github/workflows/lv_sim.yml b/.github/workflows/lv_sim.yml index 82e4c3d..2d30b83 100644 --- a/.github/workflows/lv_sim.yml +++ b/.github/workflows/lv_sim.yml @@ -36,7 +36,7 @@ jobs: - name: Install lv_font_conv run: - npm i -g lv_font_conv + npm i -g lv_font_conv@1.5.2 ######################################################################################### # Checkout diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7bfe959..09425a0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -97,7 +97,7 @@ jobs: - name: Install lv_font_conv run: - npm i -g lv_font_conv + npm i -g lv_font_conv@1.5.2 ######################################################################################### # Checkout -- cgit v0.10.2 From 95a970a75db1221fac32a1c1f8441d41c4d3ddc7 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Sun, 24 Apr 2022 19:53:38 +0300 Subject: fontgen: install npm, lv_font_conv in Dockerfile diff --git a/docker/Dockerfile b/docker/Dockerfile index 0a4f69f..a1f4884 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -13,19 +13,23 @@ RUN apt-get update -qq \ python3-pip \ tar \ unzip \ - wget \ + wget \ + curl \ # aarch64 packages libffi-dev \ libssl-dev \ python3-dev \ python \ git \ + && curl -sL https://deb.nodesource.com/setup_12.x | bash - \ + && apt-get install -y nodejs \ && rm -rf /var/cache/apt/* /var/lib/apt/lists/*; # Git needed for PROJECT_GIT_COMMIT_HASH variable setting RUN pip3 install adafruit-nrfutil RUN pip3 install -Iv cryptography==3.3 +RUN npm i lv_font_conv@1.5.2 -g # build.sh knows how to compile COPY build.sh /opt/ -- cgit v0.10.2 From 8b2e1c69f2056eaeaf11d3795bf865b6b4c21ff1 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Wed, 27 Apr 2022 18:18:02 +0300 Subject: fotngen: check for lv_font_conv diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index 5cd9fe5..4509ecc 100755 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -3,6 +3,7 @@ import io import sys import json +import shutil import typing import os.path import argparse @@ -36,6 +37,8 @@ def main(): ap.add_argument('-f', '--font', type=str, action='append', help='Choose specific fonts to generate (default: all)', default=[]) args = ap.parse_args() + if not shutil.which('lv_font_conv'): + sys.exit(f'Missing lv_font_conv. (make sure it is installed and in PATH)') if not os.path.exists(args.config): sys.exit(f'Error: the config file {args.config} does not exist.') if not os.access(args.config, os.R_OK): -- cgit v0.10.2 From 27e598f3fa2748c81a2d6b14e765d8a96c4e2459 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Wed, 27 Apr 2022 18:25:03 +0300 Subject: fontgen: assume plain .patch for single string patch diff --git a/src/displayapp/fonts/fonts.json b/src/displayapp/fonts/fonts.json index 48f9865..1216472 100644 --- a/src/displayapp/fonts/fonts.json +++ b/src/displayapp/fonts/fonts.json @@ -12,7 +12,7 @@ ], "bpp": 1, "size": 20, - "patches": [["patch", "{file}", "{file}_zero.patch"]] + "patches": ["{file}_zero.patch"] }, "jetbrains_mono_42": { "sources": [ diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index 4509ecc..801566b 100755 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -66,11 +66,18 @@ def main(): subprocess.check_call(line) if patches: for patch in patches: - try: patch = patch.format(name=name, file=name+'.c') + try: + # Try and patch, if given a string + patch = patch.format(name=name, file=name+'.c') + subprocess.check_call(['/usr/bin/patch', name+'.c', patch]) + continue except: pass - try: patch = [arg.format(name=name, file=name+'.c') for arg in patch] - except: pass - subprocess.check_call(patch) + try: + # otherwise, assume a "advanced" patch, which is a list of strings. + patch = [arg.format(name=name, file=name+'.c') for arg in patch] + subprocess.check_call(patch) + except Exception as e: + sys.exit('Failed to patch using "{patch}"\n{err}'.format(patch=patch,err=e)) -- cgit v0.10.2 From 4fba1ac5ce9c60e8e55d35faaf041ef9ee159ce5 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Wed, 27 Apr 2022 18:26:47 +0300 Subject: fontgen: remove double-asterisk in readme diff --git a/src/displayapp/fonts/README.md b/src/displayapp/fonts/README.md index 92270f2..0a39f5a 100644 --- a/src/displayapp/fonts/README.md +++ b/src/displayapp/fonts/README.md @@ -8,7 +8,7 @@ * Browse [this cheatsheet](https://fontawesome.com/cheatsheet/free/solid) and pick symbols * For each symbol, add its hex code (0xf641 for the 'Ad' icon, for example) to the *Range* list (or the symbol list when its simple enough) in the `fonts.json` file -* * Convert this hex value into a UTF-8 code +* Convert this hex value into a UTF-8 code using [this site](http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=f185&mode=hex) * Define the new symbols in `src/displayapp/screens/Symbols.h`: -- cgit v0.10.2 From f7e8caa04ad7c29955e07e08af750a9453b67c61 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Wed, 27 Apr 2022 18:36:06 +0300 Subject: fontgen: verify lv_font_conv at cmake diff --git a/src/displayapp/fonts/CMakeLists.txt b/src/displayapp/fonts/CMakeLists.txt index 718afaf..3add233 100644 --- a/src/displayapp/fonts/CMakeLists.txt +++ b/src/displayapp/fonts/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.10) set(FONTS jetbrains_mono_42 jetbrains_mono_76 jetbrains_mono_bold_20 jetbrains_mono_extrabold_compressed lv_font_navi_80 lv_font_sys_48 open_sans_light) - +find_program(LV_FONT_CONV "lv_font_conv" NO_CACHE REQUIRED) configure_file(displayapp/fonts/jetbrains_mono_bold_20.c_zero.patch displayapp/fonts/jetbrains_mono_bold_20.c_zero.patch COPYONLY) foreach(FONT ${FONTS}) -- cgit v0.10.2 From b6b322efddc3a2f952419a054256ed3354c5625c Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Wed, 27 Apr 2022 19:29:28 +0300 Subject: fontgen: remove advanced (format string, process as list) from patching diff --git a/src/displayapp/fonts/fonts.json b/src/displayapp/fonts/fonts.json index 1216472..dfc10ad 100644 --- a/src/displayapp/fonts/fonts.json +++ b/src/displayapp/fonts/fonts.json @@ -12,7 +12,7 @@ ], "bpp": 1, "size": 20, - "patches": ["{file}_zero.patch"] + "patches": ["jetbrains_mono_bold_20.c_zero.patch"] }, "jetbrains_mono_42": { "sources": [ diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index 801566b..401d47a 100755 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -66,18 +66,7 @@ def main(): subprocess.check_call(line) if patches: for patch in patches: - try: - # Try and patch, if given a string - patch = patch.format(name=name, file=name+'.c') - subprocess.check_call(['/usr/bin/patch', name+'.c', patch]) - continue - except: pass - try: - # otherwise, assume a "advanced" patch, which is a list of strings. - patch = [arg.format(name=name, file=name+'.c') for arg in patch] - subprocess.check_call(patch) - except Exception as e: - sys.exit('Failed to patch using "{patch}"\n{err}'.format(patch=patch,err=e)) + subprocess.check_call(['/usr/bin/patch', name+'.c', patch]) -- cgit v0.10.2 From a2057ebc6f7a6f2bfb1d861b395e7c0f3e775564 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Thu, 28 Apr 2022 23:04:45 +0300 Subject: fontgen: changes to allow CMake to work from other project diff --git a/src/displayapp/fonts/CMakeLists.txt b/src/displayapp/fonts/CMakeLists.txt index 3add233..ea61c3a 100644 --- a/src/displayapp/fonts/CMakeLists.txt +++ b/src/displayapp/fonts/CMakeLists.txt @@ -4,16 +4,16 @@ set(FONTS jetbrains_mono_42 jetbrains_mono_76 jetbrains_mono_bold_20 jetbrains_mono_extrabold_compressed lv_font_navi_80 lv_font_sys_48 open_sans_light) find_program(LV_FONT_CONV "lv_font_conv" NO_CACHE REQUIRED) -configure_file(displayapp/fonts/jetbrains_mono_bold_20.c_zero.patch +configure_file(${CMAKE_CURRENT_LIST_DIR}/jetbrains_mono_bold_20.c_zero.patch displayapp/fonts/jetbrains_mono_bold_20.c_zero.patch COPYONLY) foreach(FONT ${FONTS}) set_source_files_properties(displayapp/fonts/${FONT}.c PROPERTIES GENERATED TRUE) add_custom_command(OUTPUT displayapp/fonts/${FONT}.c - COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/displayapp/fonts/generate.py - -f ${FONT} ${CMAKE_CURRENT_SOURCE_DIR}/displayapp/fonts/fonts.json - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/displayapp/fonts/fonts.json + COMMAND python ${CMAKE_CURRENT_LIST_DIR}/generate.py + -f ${FONT} ${CMAKE_CURRENT_LIST_DIR}/fonts.json + DEPENDS ${CMAKE_CURRENT_LIST_DIR}/fonts.json WORKING_DIRECTORY displayapp/fonts ) endforeach() -- cgit v0.10.2 From 78267eec400859221cd00ed432024b0e223e2948 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Thu, 28 Apr 2022 23:14:09 +0300 Subject: fongen: don't pre-build fonts diff --git a/.github/workflows/lv_sim.yml b/.github/workflows/lv_sim.yml index 2d30b83..f054fc0 100644 --- a/.github/workflows/lv_sim.yml +++ b/.github/workflows/lv_sim.yml @@ -46,11 +46,6 @@ jobs: with: submodules: recursive - - name: build fonts - run: | - cd src/displayapp/fonts/ - python generate.py fonts.json - ######################################################################################### # get InfiniSim repo -- cgit v0.10.2 From f56788465d9fae5753213543f5383d9b1747844c Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Sun, 8 May 2022 23:53:22 +0300 Subject: docker: bump ubuntu to 20.04 and node to 18 diff --git a/docker/Dockerfile b/docker/Dockerfile index a1f4884..1943177 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:18.04 +FROM ubuntu:20.04 ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update -qq \ @@ -21,7 +21,8 @@ RUN apt-get update -qq \ python3-dev \ python \ git \ - && curl -sL https://deb.nodesource.com/setup_12.x | bash - \ + apt-utils \ + && curl -sL https://deb.nodesource.com/setup_18.x | bash - \ && apt-get install -y nodejs \ && rm -rf /var/cache/apt/* /var/lib/apt/lists/*; -- cgit v0.10.2 From c9f23c11b314c5ada5ccac288594e600d799743d Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Tue, 10 May 2022 14:55:27 +0300 Subject: update docker to 22, and use python3 by default diff --git a/docker/Dockerfile b/docker/Dockerfile index 1943177..10bed55 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 +FROM ubuntu:22.04 ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update -qq \ @@ -11,15 +11,15 @@ RUN apt-get update -qq \ make \ python3 \ python3-pip \ + python-is-python3 \ tar \ unzip \ wget \ curl \ -# aarch64 packages + # aarch64 packages libffi-dev \ libssl-dev \ python3-dev \ - python \ git \ apt-utils \ && curl -sL https://deb.nodesource.com/setup_18.x | bash - \ @@ -30,6 +30,7 @@ RUN apt-get update -qq \ RUN pip3 install adafruit-nrfutil RUN pip3 install -Iv cryptography==3.3 +RUN pip3 install cbor RUN npm i lv_font_conv@1.5.2 -g # build.sh knows how to compile -- cgit v0.10.2 From 4cb07bac5342fd583e23e1643c2e95f649dc9c59 Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Tue, 10 May 2022 22:50:58 +0300 Subject: fontgen: update README.md to remove patch advanced options diff --git a/src/displayapp/fonts/README.md b/src/displayapp/fonts/README.md index 0a39f5a..cfb6079 100644 --- a/src/displayapp/fonts/README.md +++ b/src/displayapp/fonts/README.md @@ -23,7 +23,7 @@ and for each font there is: * sources - list of file,range(,symbols) wanted (as a dictionary of those) * bpp - bits per pixel. * size - size. -* patches - list of extra "patches" to run, either string to file which should be run, or list of arguments (with first one being the command being run) +* patches - list of extra "patches" to run: a path to a .patch file. (may be relative) * compress - optional. default disabled. add `"compress": true` to enable ### Navigation font -- cgit v0.10.2 From 8485cdb54deaf5b24827330c8dc4d3e6675c7d72 Mon Sep 17 00:00:00 2001 From: FintasticMan <52415484+FintasticMan@users.noreply.github.com> Date: Tue, 10 May 2022 21:19:36 +0200 Subject: Only run lv_sim GH Actions on push to develop and master diff --git a/.github/workflows/lv_sim.yml b/.github/workflows/lv_sim.yml index f054fc0..21b0ceb 100644 --- a/.github/workflows/lv_sim.yml +++ b/.github/workflows/lv_sim.yml @@ -6,9 +6,9 @@ name: Build PineTime LVGL Simulator # When to run this Workflow... on: - # Run on all branches + # Run this Workflow when files are updated (Pushed) in the "master" and "develop" Branch push: - branches: [] + branches: [ master, develop ] # Also run this Workflow when a Pull Request is created or updated in the "master" and "develop" Branch pull_request: -- cgit v0.10.2 From db0f909b461a6f2b706262cb4c2bae72007dc3f9 Mon Sep 17 00:00:00 2001 From: Reinhold Gschweicher Date: Tue, 10 May 2022 23:48:41 +0200 Subject: generalize lv-font creation In https://github.com/InfiniTimeOrg/InfiniTime/pull/1097 new font generation capabilites were added. Generalize the font creation to make it possible to reuse the `displayapp/fonts/CMakeLists.txt` file for `InfiniSim` and just add the new cmake file to the project and link against the new `infinitime_fonts` target. In the following a list of changes. Allow non-global installed `lv_font_conv` executable installed with ```sh npm install lv_font_conv@1.5.2 ``` In CMake we search for `lv_font_conv` executable. Add the found executable to the python script `generate.py`, to remove the need for `lv_font_conv` to be in the path. Search for `python3` executable, if CMake version 3.12 is available. Otherwise use `python` as hard coded executable. Instead of adding the generated fonts to `SOURCE_FILES` variable, create a static library `infinitime_fonts`. Link this library to the executables instead. Use `add_custom_target()` together with `add_custom_command()` to generate the font.c files once (like the original PR does). diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bacd67c..bcf4092 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -373,7 +373,6 @@ list(APPEND IMAGE_FILES displayapp/icons/bluetooth/os_bt_disconnected.c ) -include(displayapp/fonts/CMakeLists.txt) list(APPEND SOURCE_FILES BootloaderVersion.cpp logging/NrfLogger.cpp @@ -465,7 +464,6 @@ list(APPEND SOURCE_FILES components/ble/MusicService.cpp components/ble/weather/WeatherService.cpp components/ble/NavigationService.cpp - displayapp/fonts/lv_font_navi_80.c components/ble/BatteryInformationService.cpp components/ble/FSService.cpp components/ble/ImmediateAlertService.cpp @@ -484,12 +482,6 @@ list(APPEND SOURCE_FILES FreeRTOS/port_cmsis.c displayapp/LittleVgl.cpp - displayapp/fonts/jetbrains_mono_extrabold_compressed.c - displayapp/fonts/jetbrains_mono_bold_20.c - displayapp/fonts/jetbrains_mono_76.c - displayapp/fonts/jetbrains_mono_42.c - displayapp/fonts/lv_font_sys_48.c - displayapp/fonts/open_sans_light.c displayapp/lv_pinetime_theme.c systemtask/SystemTask.cpp @@ -803,6 +795,15 @@ if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") endif () +add_subdirectory(displayapp/fonts) +target_compile_options(infinitime_fonts PUBLIC + $<$,$>: ${COMMON_FLAGS} -Og -g3> + $<$,$>: ${COMMON_FLAGS} -Os> + $<$,$>: ${COMMON_FLAGS} -Og -g3 -fno-rtti> + $<$,$>: ${COMMON_FLAGS} -Os -fno-rtti> + $<$: -MP -MD -x assembler-with-cpp> + ) + # NRF SDK add_library(nrf-sdk STATIC ${SDK_SOURCE_FILES}) target_include_directories(nrf-sdk SYSTEM PUBLIC . ../) @@ -876,7 +877,7 @@ set(EXECUTABLE_FILE_NAME ${EXECUTABLE_NAME}-${pinetime_VERSION_MAJOR}.${pinetime set(NRF5_LINKER_SCRIPT "${CMAKE_SOURCE_DIR}/gcc_nrf52.ld") add_executable(${EXECUTABLE_NAME} ${SOURCE_FILES}) set_target_properties(${EXECUTABLE_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_FILE_NAME}) -target_link_libraries(${EXECUTABLE_NAME} nimble nrf-sdk lvgl littlefs QCBOR) +target_link_libraries(${EXECUTABLE_NAME} nimble nrf-sdk lvgl littlefs QCBOR infinitime_fonts) target_compile_options(${EXECUTABLE_NAME} PUBLIC $<$,$>: ${COMMON_FLAGS} -Wextra -Wformat -Wno-missing-field-initializers -Wno-unused-parameter -Og -g3> $<$,$>: ${COMMON_FLAGS} -Wextra -Wformat -Wno-missing-field-initializers -Wno-unused-parameter -Os> @@ -904,7 +905,7 @@ set(IMAGE_MCUBOOT_FILE_NAME ${EXECUTABLE_MCUBOOT_NAME}-image-${pinetime_VERSION_ set(DFU_MCUBOOT_FILE_NAME ${EXECUTABLE_MCUBOOT_NAME}-dfu-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}.zip) set(NRF5_LINKER_SCRIPT_MCUBOOT "${CMAKE_SOURCE_DIR}/gcc_nrf52-mcuboot.ld") add_executable(${EXECUTABLE_MCUBOOT_NAME} ${SOURCE_FILES}) -target_link_libraries(${EXECUTABLE_MCUBOOT_NAME} nimble nrf-sdk lvgl littlefs QCBOR) +target_link_libraries(${EXECUTABLE_MCUBOOT_NAME} nimble nrf-sdk lvgl littlefs QCBOR infinitime_fonts) set_target_properties(${EXECUTABLE_MCUBOOT_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_MCUBOOT_FILE_NAME}) target_compile_options(${EXECUTABLE_MCUBOOT_NAME} PUBLIC $<$,$>: ${COMMON_FLAGS} -Og -g3> @@ -940,7 +941,7 @@ endif() set(EXECUTABLE_RECOVERY_NAME "pinetime-recovery") set(EXECUTABLE_RECOVERY_FILE_NAME ${EXECUTABLE_RECOVERY_NAME}-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}) add_executable(${EXECUTABLE_RECOVERY_NAME} ${RECOVERY_SOURCE_FILES}) -target_link_libraries(${EXECUTABLE_RECOVERY_NAME} nimble nrf-sdk littlefs QCBOR) +target_link_libraries(${EXECUTABLE_RECOVERY_NAME} nimble nrf-sdk littlefs QCBOR infinitime_fonts) set_target_properties(${EXECUTABLE_RECOVERY_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_RECOVERY_FILE_NAME}) target_compile_definitions(${EXECUTABLE_RECOVERY_NAME} PUBLIC "PINETIME_IS_RECOVERY") target_compile_options(${EXECUTABLE_RECOVERY_NAME} PUBLIC @@ -970,7 +971,7 @@ set(EXECUTABLE_RECOVERY_MCUBOOT_FILE_NAME ${EXECUTABLE_RECOVERY_MCUBOOT_NAME}-${ set(IMAGE_RECOVERY_MCUBOOT_FILE_NAME ${EXECUTABLE_RECOVERY_MCUBOOT_NAME}-image-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}.bin) set(DFU_RECOVERY_MCUBOOT_FILE_NAME ${EXECUTABLE_RECOVERY_MCUBOOT_NAME}-dfu-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}.zip) add_executable(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} ${RECOVERY_SOURCE_FILES}) -target_link_libraries(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} nimble nrf-sdk littlefs QCBOR) +target_link_libraries(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} nimble nrf-sdk littlefs QCBOR infinitime_fonts) set_target_properties(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_RECOVERY_MCUBOOT_FILE_NAME}) target_compile_definitions(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} PUBLIC "PINETIME_IS_RECOVERY") target_compile_options(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} PUBLIC @@ -1008,7 +1009,7 @@ endif() set(EXECUTABLE_RECOVERYLOADER_NAME "pinetime-recovery-loader") set(EXECUTABLE_RECOVERYLOADER_FILE_NAME ${EXECUTABLE_RECOVERYLOADER_NAME}-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}) add_executable(${EXECUTABLE_RECOVERYLOADER_NAME} ${RECOVERYLOADER_SOURCE_FILES}) -target_link_libraries(${EXECUTABLE_RECOVERYLOADER_NAME} nrf-sdk QCBOR) +target_link_libraries(${EXECUTABLE_RECOVERYLOADER_NAME} nrf-sdk QCBOR infinitime_fonts) set_target_properties(${EXECUTABLE_RECOVERYLOADER_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_RECOVERYLOADER_FILE_NAME}) target_compile_options(${EXECUTABLE_RECOVERYLOADER_NAME} PUBLIC $<$,$>: ${COMMON_FLAGS} -Og -g3> @@ -1041,7 +1042,7 @@ set(EXECUTABLE_MCUBOOT_RECOVERYLOADER_FILE_NAME ${EXECUTABLE_MCUBOOT_RECOVERYLOA set(IMAGE_MCUBOOT_RECOVERYLOADER_FILE_NAME ${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME}-image-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}.bin) set(DFU_MCUBOOT_RECOVERYLOADER_FILE_NAME ${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME}-dfu-${pinetime_VERSION_MAJOR}.${pinetime_VERSION_MINOR}.${pinetime_VERSION_PATCH}.zip) add_executable(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} ${RECOVERYLOADER_SOURCE_FILES}) -target_link_libraries(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} nrf-sdk QCBOR) +target_link_libraries(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} nrf-sdk QCBOR infinitime_fonts) set_target_properties(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_MCUBOOT_RECOVERYLOADER_FILE_NAME}) target_compile_options(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} PUBLIC $<$,$>: ${COMMON_FLAGS} -Og -g3> diff --git a/src/displayapp/fonts/CMakeLists.txt b/src/displayapp/fonts/CMakeLists.txt index ea61c3a..d00c802 100644 --- a/src/displayapp/fonts/CMakeLists.txt +++ b/src/displayapp/fonts/CMakeLists.txt @@ -1,19 +1,35 @@ -cmake_minimum_required(VERSION 3.10) - set(FONTS jetbrains_mono_42 jetbrains_mono_76 jetbrains_mono_bold_20 jetbrains_mono_extrabold_compressed lv_font_navi_80 lv_font_sys_48 open_sans_light) -find_program(LV_FONT_CONV "lv_font_conv" NO_CACHE REQUIRED) +find_program(LV_FONT_CONV "lv_font_conv" NO_CACHE REQUIRED + HINTS "${CMAKE_SOURCE_DIR}/node_modules/.bin") +message(STATUS "Using ${LV_FONT_CONV} to generate font files") configure_file(${CMAKE_CURRENT_LIST_DIR}/jetbrains_mono_bold_20.c_zero.patch - displayapp/fonts/jetbrains_mono_bold_20.c_zero.patch COPYONLY) -foreach(FONT ${FONTS}) - set_source_files_properties(displayapp/fonts/${FONT}.c - PROPERTIES GENERATED TRUE) + ${CMAKE_CURRENT_BINARY_DIR}/jetbrains_mono_bold_20.c_zero.patch COPYONLY) +if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12) + # FindPython3 module introduces with CMake 3.12 + # https://cmake.org/cmake/help/latest/module/FindPython3.html + find_package(Python3 REQUIRED) +else() + set(Python3_EXECUTABLE "python") +endif() - add_custom_command(OUTPUT displayapp/fonts/${FONT}.c - COMMAND python ${CMAKE_CURRENT_LIST_DIR}/generate.py - -f ${FONT} ${CMAKE_CURRENT_LIST_DIR}/fonts.json - DEPENDS ${CMAKE_CURRENT_LIST_DIR}/fonts.json - WORKING_DIRECTORY displayapp/fonts - ) +# create static library building fonts +add_library(infinitime_fonts STATIC) +# add include directory to lvgl headers needed to compile the font files on its own +target_include_directories(infinitime_fonts PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/../../libs") +foreach(FONT ${FONTS}) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FONT}.c + COMMAND "${Python3_EXECUTABLE}" ${CMAKE_CURRENT_SOURCE_DIR}/generate.py + --lv-font-conv "${LV_FONT_CONV}" + --font ${FONT} ${CMAKE_CURRENT_SOURCE_DIR}/fonts.json + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/fonts.json + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + add_custom_target(infinitime_fonts_${FONT} + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${FONT}.c + ) + target_sources(infinitime_fonts PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/${FONT}.c") + add_dependencies(infinitime_fonts infinitime_fonts_${FONT}) endforeach() diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index 401d47a..8981061 100755 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -18,8 +18,8 @@ class Source(object): self.symbols = d.get('symbols') -def gen_lvconv_line(dest: str, size: int, bpp: int, sources: typing.List[Source], compress:bool=False): - args = ['lv_font_conv', '--size', str(size), '--output', dest, '--bpp', str(bpp), '--format', 'lvgl'] +def gen_lvconv_line(lv_font_conv: str, dest: str, size: int, bpp: int, sources: typing.List[Source], compress:bool=False): + args = [lv_font_conv, '--size', str(size), '--output', dest, '--bpp', str(bpp), '--format', 'lvgl'] if not compress: args.append('--no-compress') for source in sources: @@ -35,9 +35,10 @@ def main(): ap = argparse.ArgumentParser(description='auto generate LVGL font files from fonts') ap.add_argument('config', type=str, help='config file to use') ap.add_argument('-f', '--font', type=str, action='append', help='Choose specific fonts to generate (default: all)', default=[]) + ap.add_argument('--lv-font-conv', type=str, help='Path to "lv_font_conf" executable', default="lv_font_conv") args = ap.parse_args() - if not shutil.which('lv_font_conv'): + if not shutil.which(args.lv_font_conv): sys.exit(f'Missing lv_font_conv. (make sure it is installed and in PATH)') if not os.path.exists(args.config): sys.exit(f'Error: the config file {args.config} does not exist.') @@ -62,7 +63,7 @@ def main(): sources = font.pop('sources') patches = font.pop('patches') if 'patches' in font else [] font['sources'] = [Source(thing) for thing in sources] - line = gen_lvconv_line(f'{name}.c', **font) + line = gen_lvconv_line(args.lv_font_conv, f'{name}.c', **font) subprocess.check_call(line) if patches: for patch in patches: -- cgit v0.10.2 From 324927f2b7bfa67415d0dddbc6bd0a36a7147b80 Mon Sep 17 00:00:00 2001 From: Reinhold Gschweicher Date: Sat, 14 May 2022 20:39:31 +0200 Subject: update build stop, lv_font_conv not required globally installed diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index 42c98df..4d102f2 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -15,8 +15,7 @@ To build this project, you'll need: - lv_font_conv, to generate the font .c files - see [lv_font_conv](https://github.com/lvgl/lv_font_conv#install-the-script) - install npm (commonly done via the package manager) - - install lv_font_conv: `npm i lv_font_conv -g` - - if installed non-globally, make sure `lv_font_conv` is in the PATH + - install lv_font_conv: `npm install lv_font_conv` ## Build steps ### Clone the repo -- cgit v0.10.2 From 443408312a0fd6e22bef6ffc878155479ba9eb53 Mon Sep 17 00:00:00 2001 From: Reinhold Gschweicher Date: Sat, 14 May 2022 22:12:06 +0200 Subject: fonts: gen.py: clearify missing exe message diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index 8981061..f0af506 100755 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -39,7 +39,7 @@ def main(): args = ap.parse_args() if not shutil.which(args.lv_font_conv): - sys.exit(f'Missing lv_font_conv. (make sure it is installed and in PATH)') + sys.exit(f"Missing lv_font_conv. Make sure it's findable (in PATH) or specify it manually") if not os.path.exists(args.config): sys.exit(f'Error: the config file {args.config} does not exist.') if not os.access(args.config, os.R_OK): -- cgit v0.10.2 From a6fcdec0f8157fb65e52712255295ebe78c455af Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 10 May 2022 22:29:20 +0300 Subject: Don't allow test-format.sh to be run locally diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 97ab11e..8962d9d 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -24,7 +24,7 @@ jobs: sudo apt-get -y install clang-format-12 - name: Check formatting - run: tests/test-format.sh "$GITHUB_BASE_REF" + run: tests/test-format.sh - name: Upload patches uses: actions/upload-artifact@v3 diff --git a/tests/test-format.sh b/tests/test-format.sh index 7196e26..1dd9cdb 100755 --- a/tests/test-format.sh +++ b/tests/test-format.sh @@ -2,11 +2,13 @@ set -e -[ -z "$1" ] && exit - -basebranch=$1 +if [ -z "$GITHUB_BASE_REF" ] +then + echo "This script is only meant to be run in a GitHub Workflow" + exit 1 +fi -CHANGED_FILES=$(git diff --name-only "$basebranch"...HEAD) +CHANGED_FILES=$(git diff --name-only "$GITHUB_BASE_REF"...HEAD) CHANGED=0 -- cgit v0.10.2 From 6171c9d45d61fa2cc12d5f3ec929c50b0c26fb0e Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Tue, 10 May 2022 22:30:03 +0300 Subject: Only test format when it is wanted diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 8962d9d..9ebacc0 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -3,6 +3,10 @@ name: Code formatting on: pull_request: branches: [ master, develop ] + paths: + - '**.cpp' + - '**.h' + - '!src/libs/**' jobs: test-format: diff --git a/tests/test-format.sh b/tests/test-format.sh index 1dd9cdb..86667c7 100755 --- a/tests/test-format.sh +++ b/tests/test-format.sh @@ -16,6 +16,7 @@ for file in $CHANGED_FILES do [ -e "$file" ] || continue case "$file" in + src/libs/*) continue ;; *.cpp|*.h) echo Checking "$file" clang-format -i "$file" -- cgit v0.10.2 From 34506be06e66d2996afb7cd432535c15d0d3561f Mon Sep 17 00:00:00 2001 From: Yehoshua Pesach Wallach Date: Wed, 18 May 2022 17:14:58 +0300 Subject: comment about common error "glyphs.map" in old nodejs (#1142) diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index 4d102f2..683f539 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -14,7 +14,7 @@ To build this project, you'll need: - A reasonably recent version of CMake (I use 3.16.5) - lv_font_conv, to generate the font .c files - see [lv_font_conv](https://github.com/lvgl/lv_font_conv#install-the-script) - - install npm (commonly done via the package manager) + - install npm (commonly done via the package manager, ensure node's version is at least 12) - install lv_font_conv: `npm install lv_font_conv` ## Build steps -- cgit v0.10.2 From 831f93cd92e91a974f03cf0a739982103246e275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sun, 15 May 2022 10:50:12 +0200 Subject: The main build workflow for GitHub Actions now uses the infinitime-build docker image to build the firmware. This allows to avoid the duplication of the build logic in Docker and Github workflow format. The Dockerfile has been slightly adapted (remove the USER instructions). Docker images are now published in DockerHub (jf002/infinitime-build). diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 09425a0..c043439 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -20,155 +20,31 @@ on: # Steps to run for the Workflow jobs: build: - - # Run these steps on Ubuntu runs-on: ubuntu-latest - + container: + image: jf002/infinitime-build steps: - - ######################################################################################### - # Download and Cache Dependencies - - - name: Install cmake - uses: lukka/get-cmake@v3.18.3 - - - name: Check cache for Embedded Arm Toolchain arm-none-eabi-gcc - id: cache-toolchain - uses: actions/cache@v2 - env: - cache-name: cache-toolchain-9-2020-q2 - with: - path: ${{ runner.temp }}/arm-none-eabi - key: ${{ runner.os }}-build-${{ env.cache-name }} - restore-keys: ${{ runner.os }}-build-${{ env.cache-name }} - - - name: Install Embedded Arm Toolchain arm-none-eabi-gcc - if: steps.cache-toolchain.outputs.cache-hit != 'true' # Install toolchain if not found in cache - uses: fiam/arm-none-eabi-gcc@v1.0.4 - with: - # GNU Embedded Toolchain for Arm release name, in the V-YYYY-qZ format (e.g. "9-2019-q4") - release: 9-2020-q2 - # Directory to unpack GCC to. Defaults to a temporary directory. - directory: ${{ runner.temp }}/arm-none-eabi - - - name: Check cache for nRF5 SDK - id: cache-nrf5sdk - uses: actions/cache@v2 - env: - cache-name: cache-nrf5sdk - with: - path: ${{ runner.temp }}/nrf5_sdk - key: ${{ runner.os }}-build-${{ env.cache-name }} - restore-keys: ${{ runner.os }}-build-${{ env.cache-name }} - - - name: Install nRF5 SDK - if: steps.cache-nrf5sdk.outputs.cache-hit != 'true' # Install SDK if not found in cache - run: | - cd ${{ runner.temp }} - curl https://developer.nordicsemi.com/nRF5_SDK/nRF5_SDK_v15.x.x/nRF5_SDK_15.3.0_59ac345.zip -o nrf5_sdk.zip - unzip nrf5_sdk.zip - mv nRF5_SDK_15.3.0_59ac345 nrf5_sdk - - - name: Check cache for MCUBoot - id: cache-mcuboot - uses: actions/cache@v2 - env: - cache-name: cache-mcuboot - with: - path: ${{ runner.temp }}/mcuboot - key: ${{ runner.os }}-build-${{ env.cache-name }} - restore-keys: ${{ runner.os }}-build-${{ env.cache-name }} - - - name: Install MCUBoot - if: steps.cache-mcuboot.outputs.cache-hit != 'true' # Install MCUBoot if not found in cache - run: | - cd ${{ runner.temp }} - git clone --branch v1.7.2 https://github.com/mcu-tools/mcuboot - - - name: Install imgtool dependencies - run: | - pip3 install --user -r ${{ runner.temp }}/mcuboot/scripts/requirements.txt - - - name: Install adafruit-nrfutil - run: | - pip3 install --user wheel - pip3 install --user setuptools - pip3 install --user adafruit-nrfutil - - - name: Install lv_font_conv - run: - npm i -g lv_font_conv@1.5.2 - - ######################################################################################### - # Checkout - + - name: Workaround permission issues + run: git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Checkout source files uses: actions/checkout@v2 with: submodules: recursive - - - name: Show files - run: set ; pwd ; ls -l - - ######################################################################################### - # CMake - - - name: CMake - run: | - mkdir -p build - cd build - cmake -G Ninja -DARM_NONE_EABI_TOOLCHAIN_PATH=${{ runner.temp }}/arm-none-eabi -DNRF5_SDK_PATH=${{ runner.temp }}/nrf5_sdk -DUSE_OPENOCD=1 -DBUILD_DFU=1 ../ - - ######################################################################################### - # Make and Upload DFU Package - # pinetime-mcuboot-app.img must be flashed at address 0x8000 in the internal flash memory with OpenOCD: - # program image.bin 0x8000 - - # For Debugging Builds: Remove "make" option "-j" for clearer output. Add "--trace" to see details. - # For Faster Builds: Add "make" option "-j" - - - name: Make pinetime-mcuboot-app - run: | - cmake --build build --target pinetime-mcuboot-app - - - name: Unzip DFU package - run: | - # Unzip the package because Upload Artifact will zip up the files - unzip build/src/pinetime-mcuboot-app-dfu*.zip -d build/src/pinetime-mcuboot-app-dfu - - - name: Upload DFU package + - name: Build + shell: bash + env: + SOURCES_DIR: . + run: | + /opt/build.sh all + - name: Upload DFU artifacts uses: actions/upload-artifact@v2 with: - name: pinetime-mcuboot-app-dfu - path: build/src/pinetime-mcuboot-app-dfu/* - - ######################################################################################### - # Make and Upload Standalone Firmware - - - name: Make pinetime-app - run: | - cmake --build build --target pinetime-app - - - name: Upload standalone firmware + name: InfiniTime DFU file + path: | + ./build/output/pinetime-mcuboot-app-dfu-*.zip + - name: Upload MCUBoot image artifacts uses: actions/upload-artifact@v2 with: - name: pinetime-app.out - path: build/src/pinetime-app*.out - - ######################################################################################### - # Make but don't Upload the Recovery Firmware to be sure it builds correctly - - - name: Make pinetime-recovery - run: | - cmake --build build --target pinetime-recovery - - ######################################################################################### - # Finish - - - name: Find output - run: | - find . -name "pinetime-app.*" -ls - find . -name "pinetime-mcuboot-app.*" -ls - -# Embedded Arm Toolchain and nRF5 SDK will only be cached if the build succeeds. -# So make sure that the first build always succeeds, e.g. comment out the "Make" step. + name: InfiniTime MCUBoot image file + path: | + ./build/output/pinetime-mcuboot-app-image-*.bin diff --git a/doc/buildWithDocker.md b/doc/buildWithDocker.md index a57893c..cfd054f 100644 --- a/doc/buildWithDocker.md +++ b/doc/buildWithDocker.md @@ -44,19 +44,19 @@ docker run --rm -it -v $(pwd):/sources --user 1234:1234 infinitime-build ## Using the image from Docker Hub -The image is available via Docker Hub for both the amd64 and arm64v8 architectures at [pfeerick/infinitime-build](https://hub.docker.com/r/pfeerick/infinitime-build). +The image is available via Docker Hub for both the amd64 and arm64v8 architectures at [jf002/infinitime-build](https://hub.docker.com/repository/docker/jf002/infinitime-build). It can be pulled (downloaded) using the following command: ```bash -docker pull pfeerick/infinitime-build +docker pull jf002/infinitime-build ``` The default `latest` tag *should* automatically identify the correct image architecture, but if for some reason Docker does not, you can specify it manually: -* For AMD64 (x86_64) systems: `docker pull pfeerick/infinitime-build:amd64` +* For AMD64 (x86_64) systems: `docker pull jf002/infinitime-build:amd64` -* For ARM64v8 (ARM64/aarch64) systems: `docker pull pfeerick/infinitime-build:arm64v8` +* For ARM64v8 (ARM64/aarch64) systems: `docker pull jf002/infinitime-build:arm64v8` ## Build the image diff --git a/docker/Dockerfile b/docker/Dockerfile index 10bed55..f2d187d 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -44,10 +44,5 @@ RUN bash -c "source /opt/build.sh; GetNrfSdk;" # McuBoot RUN bash -c "source /opt/build.sh; GetMcuBoot;" -ARG PUID=1000 -ARG PGID=1000 -RUN groupadd --system --gid $PGID infinitime && useradd --system --uid $PUID --gid $PGID infinitime - -USER infinitime:infinitime ENV SOURCES_DIR /sources CMD ["/opt/build.sh"] diff --git a/docker/build.sh b/docker/build.sh index d86e7c2..878d9ec 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -9,7 +9,7 @@ set -e export TOOLS_DIR="${TOOLS_DIR:=/opt}" export SOURCES_DIR="${SOURCES_DIR:=/sources}" export BUILD_DIR="${BUILD_DIR:=$SOURCES_DIR/build}" -export OUTPUT_DIR="${OUTPUT_DIR:=$BUILD_DIR/output}" +export OUTPUT_DIR="${OUTPUT_DIR:=$SOURCES_DIR/build/output}" export BUILD_TYPE=${BUILD_TYPE:=Release} export GCC_ARM_VER=${GCC_ARM_VER:="gcc-arm-none-eabi-9-2020-q2-update"} @@ -22,7 +22,7 @@ main() { local target="$1" mkdir -p "$TOOLS_DIR" - + [[ ! -d "$TOOLS_DIR/$GCC_ARM_VER" ]] && GetGcc [[ ! -d "$TOOLS_DIR/$NRF_SDK_VER" ]] && GetNrfSdk [[ ! -d "$TOOLS_DIR/mcuboot" ]] && GetMcuBoot @@ -31,7 +31,7 @@ main() { CmakeGenerate CmakeBuild $target - BUILD_RESULT=$? + BUILD_RESULT=$? if [ "$DISABLE_POSTBUILD" != "true" -a "$BUILD_RESULT" == 0 ]; then source "$BUILD_DIR/post_build.sh" fi @@ -54,18 +54,14 @@ GetNrfSdk() { } CmakeGenerate() { - # We can swap the CD and trailing SOURCES_DIR for -B and -S respectively - # once we go to newer CMake (Ubuntu 18.10 gives us CMake 3.10) - cd "$BUILD_DIR" - cmake -G "Unix Makefiles" \ + -S "$SOURCES_DIR" \ + -B "$BUILD_DIR" \ -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ -DUSE_OPENOCD=1 \ -DARM_NONE_EABI_TOOLCHAIN_PATH="$TOOLS_DIR/$GCC_ARM_VER" \ -DNRF5_SDK_PATH="$TOOLS_DIR/$NRF_SDK_VER" \ - -DBUILD_DFU=1 \ - "$SOURCES_DIR" - cmake -L -N . + -DBUILD_DFU=1 } CmakeBuild() { diff --git a/docker/post_build.sh.in b/docker/post_build.sh.in index db6e7a9..8c94471 100755 --- a/docker/post_build.sh.in +++ b/docker/post_build.sh.in @@ -15,12 +15,10 @@ cp "$BUILD_DIR/src/pinetime-mcuboot-app-dfu-$PROJECT_VERSION.zip" "$OUTPUT_DIR/p cp "$BUILD_DIR/src/pinetime-mcuboot-recovery-loader-image-$PROJECT_VERSION.bin" "$OUTPUT_DIR/pinetime-mcuboot-recovery-loader-image-$PROJECT_VERSION.bin" cp "$BUILD_DIR/src/pinetime-mcuboot-recovery-loader-dfu-$PROJECT_VERSION.zip" "$OUTPUT_DIR/pinetime-mcuboot-recovery-loader-dfu-$PROJECT_VERSION.zip" - mkdir -p "$OUTPUT_DIR/src" -cd "$BUILD_DIR" -cp src/*.bin "$OUTPUT_DIR/src" -cp src/*.hex "$OUTPUT_DIR/src" -cp src/*.out "$OUTPUT_DIR/src" -cp src/*.map "$OUTPUT_DIR/src" +cp $BUILD_DIR/src/*.bin "$OUTPUT_DIR/src/" +cp $BUILD_DIR/src/*.hex "$OUTPUT_DIR/src/" +cp $BUILD_DIR/src/*.out "$OUTPUT_DIR/src/" +cp $BUILD_DIR/src/*.map "$OUTPUT_DIR/src/" ls -RUv1 "$OUTPUT_DIR" | sed 's;^\([^/]\); \1;g' \ No newline at end of file -- cgit v0.10.2 From 123c801f173771afcebe5febc037f9ef2b12484e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sun, 15 May 2022 11:05:10 +0200 Subject: Add comment about the workaround that was needed in the github workflow. diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c043439..269f3eb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,6 +24,10 @@ jobs: container: image: jf002/infinitime-build steps: + # This workaround fixes the error "unsafe repository (REPO is owned by someone else)". + # See https://github.com/actions/checkout/issues/760 and https://github.com/actions/checkout/issues/766 + # The fix in "actions/checkout@v2" was not sufficient as the build process also uses git (to get the current + # commit hash, for example). - name: Workaround permission issues run: git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Checkout source files -- cgit v0.10.2 From 83b3a2a4698caaed02f814990516638a50e3a369 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Wed, 18 May 2022 21:33:05 +0200 Subject: Small modernization with --platform parameter in docker readme diff --git a/doc/buildWithDocker.md b/doc/buildWithDocker.md index cfd054f..1a85b90 100644 --- a/doc/buildWithDocker.md +++ b/doc/buildWithDocker.md @@ -54,9 +54,9 @@ docker pull jf002/infinitime-build The default `latest` tag *should* automatically identify the correct image architecture, but if for some reason Docker does not, you can specify it manually: -* For AMD64 (x86_64) systems: `docker pull jf002/infinitime-build:amd64` +* For AMD64 (x86_64) systems: `docker pull --platform linux/amd64 jf002/infinitime-build` -* For ARM64v8 (ARM64/aarch64) systems: `docker pull jf002/infinitime-build:arm64v8` +* For ARM64v8 (ARM64/aarch64) systems: `docker pull --platform linux/arm64 jf002/infinitime-build` ## Build the image -- cgit v0.10.2 From c77f923a33a11fd5eaba63709f87c4bc09efb78d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Wed, 18 May 2022 21:52:07 +0200 Subject: Update links to the docker image with the new account : infinitime/infinitime-build. diff --git a/doc/buildWithDocker.md b/doc/buildWithDocker.md index 1a85b90..1165b41 100644 --- a/doc/buildWithDocker.md +++ b/doc/buildWithDocker.md @@ -44,19 +44,19 @@ docker run --rm -it -v $(pwd):/sources --user 1234:1234 infinitime-build ## Using the image from Docker Hub -The image is available via Docker Hub for both the amd64 and arm64v8 architectures at [jf002/infinitime-build](https://hub.docker.com/repository/docker/jf002/infinitime-build). +The image is available via Docker Hub for both the amd64 and arm64v8 architectures at [infinitime/infinitime-build](https://hub.docker.com/repository/docker/infinitime/infinitime-build). It can be pulled (downloaded) using the following command: ```bash -docker pull jf002/infinitime-build +docker pull infinitime/infinitime-build ``` The default `latest` tag *should* automatically identify the correct image architecture, but if for some reason Docker does not, you can specify it manually: -* For AMD64 (x86_64) systems: `docker pull --platform linux/amd64 jf002/infinitime-build` +* For AMD64 (x86_64) systems: `docker pull --platform linux/amd64 infinitime/infinitime-build` -* For ARM64v8 (ARM64/aarch64) systems: `docker pull --platform linux/arm64 jf002/infinitime-build` +* For ARM64v8 (ARM64/aarch64) systems: `docker pull --platform linux/arm64 infinitime/infinitime-build` ## Build the image -- cgit v0.10.2 From 1ffca527159f25822a94017a2b784d181fcb4cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Wed, 18 May 2022 21:53:06 +0200 Subject: Edit workflow to use the new docker image : infinitime/infinitime-build. diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 269f3eb..e4ef85a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -22,7 +22,7 @@ jobs: build: runs-on: ubuntu-latest container: - image: jf002/infinitime-build + image: infinitime/infinitime-build steps: # This workaround fixes the error "unsafe repository (REPO is owned by someone else)". # See https://github.com/actions/checkout/issues/760 and https://github.com/actions/checkout/issues/766 -- cgit v0.10.2 From 9b216bb16fab22d0f38abca07bed721e784c268e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Mon, 23 May 2022 19:39:10 +0200 Subject: Docker container documentation : Adapt the `--user` documentation according to the new behavior. diff --git a/doc/buildWithDocker.md b/doc/buildWithDocker.md index 1165b41..9b2c0b5 100644 --- a/doc/buildWithDocker.md +++ b/doc/buildWithDocker.md @@ -2,12 +2,13 @@ A [Docker image (Dockerfile)](../docker) containing all the build environment is available for X86_64 and AMD64 architectures. These images make the build of the firmware and the generation of the DFU file for OTA quite easy, as well as preventing clashes with any other toolchains or development environments you may have installed. -Based on Ubuntu 18.04 with the following build dependencies: +Based on Ubuntu 22.04 with the following build dependencies: * ARM GCC Toolchain * nRF SDK * MCUBoot * adafruit-nrfutil +* lv_font_conv ## Run a container to build the project @@ -19,27 +20,15 @@ This example will build the firmware, generate the MCUBoot image and generate th ```bash cd # e.g. cd ./work/Pinetime -docker run --rm -it -v $(pwd):/sources infinitime-build -``` - -If you only want to build a single CMake target, you can pass it in as the first parameter to the build script. This means calling the script explicitly as it will override the `CMD`. Here's an example For `pinetime-app`: - -```bash -docker run --rm -it -v $(pwd):/sources infinitime-build /opt/build.sh pinetime-app -``` - -The image is built using 1000:1000 for the user id and group id. If this is different to your user or group ids (run `id -u` and `id -g` to find out what your id values are if you are unsure), you will need to override them via the `--user` parameter in order to prevent permission errors with the output files (and the cmake build cache). - -Running with this image is the same as above, you just specify the ids to `docker run`: - -```bash docker run --rm -it -v $(pwd):/sources --user $(id -u):$(id -g) infinitime-build ``` -Or you can specify your user id and group id (by number, not by name) directly: +By default, the container runs as `root`, which is not convenient as all the file generated by the build will also belong to `root`. The parameter `--user` overrides that default behavior. The command above will run as your current user. + +If you only want to build a single CMake target, you can pass it in as the first parameter to the build script. This means calling the script explicitly as it will override the `CMD`. Here's an example For `pinetime-app`: ```bash -docker run --rm -it -v $(pwd):/sources --user 1234:1234 infinitime-build +docker run --rm -it -v $(pwd):/sources --user $(id -u):$(id -g) infinitime-build /opt/build.sh pinetime-app ``` ## Using the image from Docker Hub @@ -52,6 +41,12 @@ It can be pulled (downloaded) using the following command: docker pull infinitime/infinitime-build ``` +The command line to build the project is the same as above. You just need to change the image name to `infinitime/infinitime-build`: + +``` +docker run --rm -it -v $(pwd):/sources --user $(id -u):$(id -g) infinitime/infinitime-build +``` + The default `latest` tag *should* automatically identify the correct image architecture, but if for some reason Docker does not, you can specify it manually: * For AMD64 (x86_64) systems: `docker pull --platform linux/amd64 infinitime/infinitime-build` @@ -66,10 +61,4 @@ The following commands must be run from the root of the project. This operation ```bash docker image build -t infinitime-build ./docker -``` - -The `PUID` and `PGID` build arguments are used to set the user and group ids used in the container, meaning you will not need to specify it later unless they change for some reason. Specifying them is not mandatory, as this can be over-ridden at build time via the `--user` flag, but doing so will make the command you need to run later a bit shorter. In the below examples, they are set to your current user id and group id automatically. You can specify them manually, but they must be specified by number, not by name. - -```bash -docker image build -t infinitime-build --build-arg PUID=$(id -u) --build-arg PGID=$(id -g) ./docker -``` +``` \ No newline at end of file -- cgit v0.10.2 From dd313eb419a51e67af3a891ba58cb2d74951508c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Wed, 25 May 2022 15:12:16 +0200 Subject: Docker container documentation : Fix typos, 1 line per sentence, remove obsolete paragraph, remove redundant 'image' parameter in the command to build the docker image, use ${PWD} instead of $(pwd). diff --git a/doc/buildWithDocker.md b/doc/buildWithDocker.md index 9b2c0b5..1bea838 100644 --- a/doc/buildWithDocker.md +++ b/doc/buildWithDocker.md @@ -1,6 +1,7 @@ # Build the project using Docker -A [Docker image (Dockerfile)](../docker) containing all the build environment is available for X86_64 and AMD64 architectures. These images make the build of the firmware and the generation of the DFU file for OTA quite easy, as well as preventing clashes with any other toolchains or development environments you may have installed. +A [Docker image (Dockerfile)](../docker) containing all the build environment is available for X86_64 and AMD64 architectures. +These images make the build of the firmware and the generation of the DFU file for OTA quite easy, as well as preventing clashes with any other toolchains or development environments you may have installed. Based on Ubuntu 22.04 with the following build dependencies: @@ -12,39 +13,39 @@ Based on Ubuntu 22.04 with the following build dependencies: ## Run a container to build the project -The `infinitime-build` image contains all the dependencies you need. The default `CMD` will compile sources found in `/sources`, so you need only mount your code. +The `infinitime-build` image contains all the dependencies you need. +The default `CMD` will compile sources found in `/sources`, so you need only mount your code. Before continuing, make sure you first build the image as indicated in the [Build the image](#build-the-image) section, or check the [Using the image from Docker Hub](#using-the-image-from-docker-hub) section if you prefer to use a pre-made image. -This example will build the firmware, generate the MCUBoot image and generate the DFU file. For cloning the repo, see [these instructions](../doc/buildAndProgram.md#clone-the-repo). Outputs will be written to **/build/output**: +This example will build the firmware, generate the MCUBoot image and generate the DFU file. +For cloning the repo, see [these instructions](../doc/buildAndProgram.md#clone-the-repo). Outputs will be written to **/build/output**: ```bash cd # e.g. cd ./work/Pinetime -docker run --rm -it -v $(pwd):/sources --user $(id -u):$(id -g) infinitime-build +docker run --rm -it -v ${PWD}:/sources --user $(id -u):$(id -g) infinitime-build ``` -By default, the container runs as `root`, which is not convenient as all the file generated by the build will also belong to `root`. The parameter `--user` overrides that default behavior. The command above will run as your current user. +By default, the container runs as `root`, which is not convenient as all the files generated by the build will also belong to `root`. +The parameter `--user` overrides that default behavior. +The command above will run as your current user. -If you only want to build a single CMake target, you can pass it in as the first parameter to the build script. This means calling the script explicitly as it will override the `CMD`. Here's an example For `pinetime-app`: +If you only want to build a single CMake target, you can pass it in as the first parameter to the build script. +This means calling the script explicitly as it will override the `CMD`. +Here's an example for `pinetime-app`: ```bash -docker run --rm -it -v $(pwd):/sources --user $(id -u):$(id -g) infinitime-build /opt/build.sh pinetime-app +docker run --rm -it -v ${PWD}:/sources --user $(id -u):$(id -g) infinitime-build /opt/build.sh pinetime-app ``` ## Using the image from Docker Hub The image is available via Docker Hub for both the amd64 and arm64v8 architectures at [infinitime/infinitime-build](https://hub.docker.com/repository/docker/infinitime/infinitime-build). -It can be pulled (downloaded) using the following command: +You can run it using the following command: ```bash -docker pull infinitime/infinitime-build -``` - -The command line to build the project is the same as above. You just need to change the image name to `infinitime/infinitime-build`: - -``` -docker run --rm -it -v $(pwd):/sources --user $(id -u):$(id -g) infinitime/infinitime-build +docker run --rm -it -v ${PWD}:/sources --user $(id -u):$(id -g) infinitime/infinitime-build ``` The default `latest` tag *should* automatically identify the correct image architecture, but if for some reason Docker does not, you can specify it manually: @@ -60,5 +61,5 @@ You can build the image yourself if you like! The following commands must be run from the root of the project. This operation will take some time but, when done, a new image named *infinitime-build* is available. ```bash -docker image build -t infinitime-build ./docker +docker build -t infinitime-build ./docker ``` \ No newline at end of file -- cgit v0.10.2 From cc2d5c39ceeba8a18c78fbd08534f13655f91f73 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 2 May 2022 12:26:30 +0300 Subject: Cleanup workflows diff --git a/.github/workflows/lv_sim.yml b/.github/workflows/lv_sim.yml index 21b0ceb..45408bd 100644 --- a/.github/workflows/lv_sim.yml +++ b/.github/workflows/lv_sim.yml @@ -1,24 +1,15 @@ # GitHub Actions Workflow to build Simulator for PineTime Smart Watch LVGL Interface -# Name of this Workflow name: Build PineTime LVGL Simulator -# When to run this Workflow... on: - - # Run this Workflow when files are updated (Pushed) in the "master" and "develop" Branch push: branches: [ master, develop ] - - # Also run this Workflow when a Pull Request is created or updated in the "master" and "develop" Branch pull_request: branches: [ master, develop ] -# Steps to run for the Workflow jobs: build: - - # Run these steps on Ubuntu runs-on: ubuntu-latest steps: @@ -64,9 +55,6 @@ jobs: ######################################################################################### # Build and Upload simulator - # For Debugging Builds: Remove "make" option "-j" for clearer output. Add "--trace" to see details. - # For Faster Builds: Add "make" option "-j" - - name: Build simulator executable run: | cmake --build build_lv_sim diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e4ef85a..94d829a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -3,21 +3,14 @@ # Based on https://github.com/JF002/InfiniTime/blob/master/doc/buildAndProgram.md # and https://github.com/JF002/InfiniTime/blob/master/bootloader/README.md -# Name of this Workflow name: Build PineTime Firmware -# When to run this Workflow... on: - - # Run this Workflow when files are updated (Pushed) in the "master" and "develop" Branch push: branches: [ master, develop ] - - # Also run this Workflow when a Pull Request is created or updated in the "master" and "develop" Branch pull_request: branches: [ master, develop ] -# Steps to run for the Workflow jobs: build: runs-on: ubuntu-latest -- cgit v0.10.2 From 619477cbd172645ce7b9398af62d4521f320ef65 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Mon, 2 May 2022 12:26:45 +0300 Subject: Rename uploaded files with source branch in workflows diff --git a/.github/workflows/lv_sim.yml b/.github/workflows/lv_sim.yml index 45408bd..aa71260 100644 --- a/.github/workflows/lv_sim.yml +++ b/.github/workflows/lv_sim.yml @@ -60,7 +60,7 @@ jobs: cmake --build build_lv_sim - name: Upload simulator executable - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: - name: infinisim + name: infinisim-${{ github.head_ref }} path: build_lv_sim/infinisim diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 94d829a..151d2d8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -34,14 +34,14 @@ jobs: run: | /opt/build.sh all - name: Upload DFU artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: - name: InfiniTime DFU file + name: InfiniTime DFU ${{ github.head_ref }} path: | ./build/output/pinetime-mcuboot-app-dfu-*.zip - name: Upload MCUBoot image artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: - name: InfiniTime MCUBoot image file + name: InfiniTime MCUBoot image ${{ github.head_ref }} path: | ./build/output/pinetime-mcuboot-app-image-*.bin -- cgit v0.10.2 From a2218dd4adaed4257b6a4727f9f2d01f2b15363f Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 27 May 2022 11:31:17 +0300 Subject: Unzip DFU, so the artifact doesn't need to be unzipped by the user. diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 151d2d8..d498ae6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -33,12 +33,14 @@ jobs: SOURCES_DIR: . run: | /opt/build.sh all + # Unzip the package because Upload Artifact will zip up the files + - name: Unzip DFU package + run: unzip ./build/output/pinetime-mcuboot-app-dfu-*.zip -d ./build/output/pinetime-mcuboot-app-dfu - name: Upload DFU artifacts uses: actions/upload-artifact@v3 with: name: InfiniTime DFU ${{ github.head_ref }} - path: | - ./build/output/pinetime-mcuboot-app-dfu-*.zip + path: ./build/output/pinetime-mcuboot-app-dfu/* - name: Upload MCUBoot image artifacts uses: actions/upload-artifact@v3 with: -- cgit v0.10.2 From 0fabba1c9aa9d054c3cb846c31a58a179bb1d584 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 27 May 2022 11:36:55 +0300 Subject: Remove extra linebreaks diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d498ae6..8d12972 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -31,8 +31,7 @@ jobs: shell: bash env: SOURCES_DIR: . - run: | - /opt/build.sh all + run: /opt/build.sh all # Unzip the package because Upload Artifact will zip up the files - name: Unzip DFU package run: unzip ./build/output/pinetime-mcuboot-app-dfu-*.zip -d ./build/output/pinetime-mcuboot-app-dfu @@ -45,5 +44,4 @@ jobs: uses: actions/upload-artifact@v3 with: name: InfiniTime MCUBoot image ${{ github.head_ref }} - path: | - ./build/output/pinetime-mcuboot-app-image-*.bin + path: ./build/output/pinetime-mcuboot-app-image-*.bin -- cgit v0.10.2 From 87a69fe52d0c7bd1309c352eeaa21f3d22cb765e Mon Sep 17 00:00:00 2001 From: Ludovic J Date: Fri, 27 May 2022 17:31:44 +0200 Subject: Fix assertion failure in TimerController 0 is not valid for xTimerPeriodInTicks, changing it to 1 to pass the assertion diff --git a/src/components/timer/TimerController.cpp b/src/components/timer/TimerController.cpp index 92f4e69..ea94521 100644 --- a/src/components/timer/TimerController.cpp +++ b/src/components/timer/TimerController.cpp @@ -10,7 +10,7 @@ void TimerCallback(TimerHandle_t xTimer) { void TimerController::Init(Pinetime::System::SystemTask* systemTask) { this->systemTask = systemTask; - timer = xTimerCreate("Timer", 0, pdFALSE, this, TimerCallback); + timer = xTimerCreate("Timer", 1, pdFALSE, this, TimerCallback); } void TimerController::StartTimer(uint32_t duration) { -- cgit v0.10.2 From 0ce418364024efbe0f28a93f206d3122e5dbfe44 Mon Sep 17 00:00:00 2001 From: Finlay Davidson Date: Mon, 9 May 2022 16:56:01 +0200 Subject: Rename lvgl image files to .c diff --git a/src/displayapp/icons/music/disc.c b/src/displayapp/icons/music/disc.c new file mode 100644 index 0000000..0957873 --- /dev/null +++ b/src/displayapp/icons/music/disc.c @@ -0,0 +1,110 @@ +/* Copyright (C) 2020 Avamander + + This file is part of InfiniTime. + + InfiniTime is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + InfiniTime is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +#pragma once + +#include "lvgl/lvgl.h" + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_DISC +#define LV_ATTRIBUTE_IMG_DISC +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_DISC uint8_t disc_map[] = { + 0xbd, 0xc1, 0xbe, 0xff, /* Color of index 0: foreground */ + 0x00, 0x00, 0x00, 0x00, /* Color of index 1: background */ + + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x00, 0x00, 0x1f, 0xff, 0xff, + 0xff, 0xff, 0xf0, 0x0f, 0xf8, 0x07, 0xff, 0xff, + 0xff, 0xff, 0xc0, 0xff, 0xff, 0x81, 0xff, 0xff, + 0xff, 0xff, 0x07, 0xff, 0xff, 0xf0, 0x7f, 0xff, + 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xfc, 0x1f, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0x0f, 0xff, + 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, + 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, + 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, + 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, + 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, + 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, + 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, + 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, + 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, + 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, + 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, + 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, + 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, + 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, + 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, + 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, + 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, + 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, + 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0x8f, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xf8, + 0x9f, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xfc, + 0x9f, 0xff, 0xff, 0xe3, 0xe3, 0xff, 0xff, 0xfc, + 0x9f, 0xff, 0xff, 0xe7, 0xf3, 0xff, 0xff, 0xfc, + 0x9f, 0xff, 0xff, 0xe7, 0xf3, 0xff, 0xff, 0xfc, + 0x9f, 0xff, 0xff, 0xe7, 0xf3, 0xff, 0xff, 0xfc, + 0x9f, 0xff, 0xff, 0xe7, 0xf3, 0xff, 0xff, 0xfc, + 0x9f, 0xff, 0xff, 0xe7, 0xf3, 0xff, 0xff, 0xfc, + 0x9f, 0xff, 0xff, 0xe3, 0xe3, 0xff, 0xff, 0xfc, + 0x9f, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xfc, + 0x8f, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xf8, + 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, + 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, + 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, + 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, + 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, + 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, + 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, + 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, + 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, + 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, + 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, + 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, + 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, + 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, + 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, + 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, + 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, + 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, + 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0x0f, 0xff, + 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xfc, 0x1f, 0xff, + 0xff, 0xff, 0x07, 0xff, 0xff, 0xf0, 0x7f, 0xff, + 0xff, 0xff, 0xc0, 0xff, 0xff, 0x81, 0xff, 0xff, + 0xff, 0xff, 0xf0, 0x0f, 0xf8, 0x07, 0xff, 0xff, + 0xff, 0xff, 0xfc, 0x00, 0x00, 0x1f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, +}; + +const lv_img_dsc_t disc = { + { + LV_IMG_CF_INDEXED_1BIT, + 0, + 0, + 64, + 64 + }, + 520, + disc_map +}; \ No newline at end of file diff --git a/src/displayapp/icons/music/disc.cpp b/src/displayapp/icons/music/disc.cpp deleted file mode 100644 index 0957873..0000000 --- a/src/displayapp/icons/music/disc.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 2020 Avamander - - This file is part of InfiniTime. - - InfiniTime is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - InfiniTime is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ -#pragma once - -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_DISC -#define LV_ATTRIBUTE_IMG_DISC -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_DISC uint8_t disc_map[] = { - 0xbd, 0xc1, 0xbe, 0xff, /* Color of index 0: foreground */ - 0x00, 0x00, 0x00, 0x00, /* Color of index 1: background */ - - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xfc, 0x00, 0x00, 0x1f, 0xff, 0xff, - 0xff, 0xff, 0xf0, 0x0f, 0xf8, 0x07, 0xff, 0xff, - 0xff, 0xff, 0xc0, 0xff, 0xff, 0x81, 0xff, 0xff, - 0xff, 0xff, 0x07, 0xff, 0xff, 0xf0, 0x7f, 0xff, - 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xfc, 0x1f, 0xff, - 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0x0f, 0xff, - 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, - 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, - 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, - 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, - 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, - 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, - 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, - 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, - 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, - 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, - 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, - 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, - 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, - 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, - 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, - 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, - 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, - 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, - 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, - 0x8f, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xf8, - 0x9f, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xfc, - 0x9f, 0xff, 0xff, 0xe3, 0xe3, 0xff, 0xff, 0xfc, - 0x9f, 0xff, 0xff, 0xe7, 0xf3, 0xff, 0xff, 0xfc, - 0x9f, 0xff, 0xff, 0xe7, 0xf3, 0xff, 0xff, 0xfc, - 0x9f, 0xff, 0xff, 0xe7, 0xf3, 0xff, 0xff, 0xfc, - 0x9f, 0xff, 0xff, 0xe7, 0xf3, 0xff, 0xff, 0xfc, - 0x9f, 0xff, 0xff, 0xe7, 0xf3, 0xff, 0xff, 0xfc, - 0x9f, 0xff, 0xff, 0xe3, 0xe3, 0xff, 0xff, 0xfc, - 0x9f, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xfc, - 0x8f, 0xff, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0xf8, - 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, - 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, - 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, - 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, - 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, - 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, - 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, - 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, - 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, - 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, - 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, - 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, - 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, - 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x3f, - 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, - 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, - 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, - 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff, - 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, - 0xff, 0xf8, 0x7f, 0xff, 0xff, 0xff, 0x0f, 0xff, - 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xfc, 0x1f, 0xff, - 0xff, 0xff, 0x07, 0xff, 0xff, 0xf0, 0x7f, 0xff, - 0xff, 0xff, 0xc0, 0xff, 0xff, 0x81, 0xff, 0xff, - 0xff, 0xff, 0xf0, 0x0f, 0xf8, 0x07, 0xff, 0xff, - 0xff, 0xff, 0xfc, 0x00, 0x00, 0x1f, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0xff, -}; - -const lv_img_dsc_t disc = { - { - LV_IMG_CF_INDEXED_1BIT, - 0, - 0, - 64, - 64 - }, - 520, - disc_map -}; \ No newline at end of file diff --git a/src/displayapp/icons/music/disc_f_1.c b/src/displayapp/icons/music/disc_f_1.c new file mode 100644 index 0000000..9b6b741 --- /dev/null +++ b/src/displayapp/icons/music/disc_f_1.c @@ -0,0 +1,79 @@ +/* Copyright (C) 2020 Avamander + + This file is part of InfiniTime. + + InfiniTime is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + InfiniTime is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +#pragma once + +#include "lvgl/lvgl.h" + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_DISC_F_1 +#define LV_ATTRIBUTE_IMG_DISC_F_1 +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_DISC_F_1 uint8_t disc_f_1_map[] = { + 0xbd, 0xc1, 0xbe, 0xff, /* Color of index 0: foreground */ + 0x00, 0x00, 0x00, 0x00, /* Color of index 1: background */ + + 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc0, + 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xf0, 0x0f, + 0xff, 0xff, 0xc0, 0xff, + 0xff, 0xff, 0x07, 0xff, + 0xff, 0xfc, 0x1f, 0xff, + 0xff, 0xf8, 0x7f, 0xff, + 0xff, 0xf0, 0xff, 0xff, + 0xff, 0xe3, 0xff, 0xff, + 0xff, 0xc7, 0xf3, 0xff, + 0xff, 0x8f, 0xc3, 0xff, + 0xff, 0x1f, 0x87, 0xff, + 0xfe, 0x3f, 0x0f, 0xff, + 0xfc, 0x7e, 0x1f, 0xff, + 0xfc, 0x7c, 0x3f, 0xff, + 0xf8, 0xfc, 0x7f, 0xff, + 0xf9, 0xfc, 0xff, 0xff, + 0xf1, 0xff, 0xff, 0xff, + 0xf3, 0xff, 0xff, 0xff, + 0xe3, 0xff, 0xff, 0xff, + 0xe7, 0xff, 0xff, 0xff, + 0xc7, 0xff, 0xff, 0xff, + 0xc7, 0xff, 0xff, 0xff, + 0xcf, 0xff, 0xff, 0xff, + 0xcf, 0xff, 0xff, 0xff, + 0x8f, 0xff, 0xff, 0xff, + 0x8f, 0xff, 0xff, 0xf8, + 0x9f, 0xff, 0xff, 0xf0, + 0x9f, 0xff, 0xff, 0xe3, + 0x9f, 0xff, 0xff, 0xe7, + 0x9f, 0xff, 0xff, 0xe7, +}; + +const lv_img_dsc_t disc_f_1 = { + { + LV_IMG_CF_INDEXED_1BIT, + 0, + 0, + 32, + 32 + }, + 136, + disc_f_1_map +}; + diff --git a/src/displayapp/icons/music/disc_f_1.cpp b/src/displayapp/icons/music/disc_f_1.cpp deleted file mode 100644 index 9b6b741..0000000 --- a/src/displayapp/icons/music/disc_f_1.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 2020 Avamander - - This file is part of InfiniTime. - - InfiniTime is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - InfiniTime is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ -#pragma once - -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_DISC_F_1 -#define LV_ATTRIBUTE_IMG_DISC_F_1 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_DISC_F_1 uint8_t disc_f_1_map[] = { - 0xbd, 0xc1, 0xbe, 0xff, /* Color of index 0: foreground */ - 0x00, 0x00, 0x00, 0x00, /* Color of index 1: background */ - - 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xc0, - 0xff, 0xff, 0xfc, 0x00, - 0xff, 0xff, 0xf0, 0x0f, - 0xff, 0xff, 0xc0, 0xff, - 0xff, 0xff, 0x07, 0xff, - 0xff, 0xfc, 0x1f, 0xff, - 0xff, 0xf8, 0x7f, 0xff, - 0xff, 0xf0, 0xff, 0xff, - 0xff, 0xe3, 0xff, 0xff, - 0xff, 0xc7, 0xf3, 0xff, - 0xff, 0x8f, 0xc3, 0xff, - 0xff, 0x1f, 0x87, 0xff, - 0xfe, 0x3f, 0x0f, 0xff, - 0xfc, 0x7e, 0x1f, 0xff, - 0xfc, 0x7c, 0x3f, 0xff, - 0xf8, 0xfc, 0x7f, 0xff, - 0xf9, 0xfc, 0xff, 0xff, - 0xf1, 0xff, 0xff, 0xff, - 0xf3, 0xff, 0xff, 0xff, - 0xe3, 0xff, 0xff, 0xff, - 0xe7, 0xff, 0xff, 0xff, - 0xc7, 0xff, 0xff, 0xff, - 0xc7, 0xff, 0xff, 0xff, - 0xcf, 0xff, 0xff, 0xff, - 0xcf, 0xff, 0xff, 0xff, - 0x8f, 0xff, 0xff, 0xff, - 0x8f, 0xff, 0xff, 0xf8, - 0x9f, 0xff, 0xff, 0xf0, - 0x9f, 0xff, 0xff, 0xe3, - 0x9f, 0xff, 0xff, 0xe7, - 0x9f, 0xff, 0xff, 0xe7, -}; - -const lv_img_dsc_t disc_f_1 = { - { - LV_IMG_CF_INDEXED_1BIT, - 0, - 0, - 32, - 32 - }, - 136, - disc_f_1_map -}; - diff --git a/src/displayapp/icons/music/disc_f_2.c b/src/displayapp/icons/music/disc_f_2.c new file mode 100644 index 0000000..3d2331d --- /dev/null +++ b/src/displayapp/icons/music/disc_f_2.c @@ -0,0 +1,79 @@ +/* Copyright (C) 2020 Avamander + + This file is part of InfiniTime. + + InfiniTime is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + InfiniTime is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +#pragma once + +#include "lvgl/lvgl.h" + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_DISC_F_2 +#define LV_ATTRIBUTE_IMG_DISC_F_2 +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_DISC_F_2 uint8_t disc_f_2_map[] = { + 0xbd, 0xc1, 0xbe, 0xff, /* Color of index 0: foreground */ + 0x00, 0x00, 0x00, 0x00, /* Color of index 1: background */ + + 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xc0, + 0xff, 0xff, 0xfc, 0x00, + 0xff, 0xff, 0xf0, 0x0f, + 0xff, 0xff, 0xc0, 0xff, + 0xff, 0xff, 0x07, 0xff, + 0xff, 0xfc, 0x1f, 0xff, + 0xff, 0xf8, 0x7f, 0xf1, + 0xff, 0xf0, 0xff, 0x00, + 0xff, 0xe3, 0xfc, 0x03, + 0xff, 0xc7, 0xf0, 0x3f, + 0xff, 0x8f, 0xf0, 0xff, + 0xff, 0x1f, 0xf3, 0xff, + 0xfe, 0x3f, 0xff, 0xff, + 0xfc, 0x7f, 0xff, 0xff, + 0xfc, 0x7f, 0xff, 0xff, + 0xf8, 0xff, 0xff, 0xff, + 0xf9, 0xff, 0xff, 0xff, + 0xf1, 0xff, 0xff, 0xff, + 0xf3, 0xff, 0xff, 0xff, + 0xe3, 0xff, 0xff, 0xff, + 0xe7, 0xff, 0xff, 0xff, + 0xc7, 0xff, 0xff, 0xff, + 0xc7, 0xff, 0xff, 0xff, + 0xcf, 0xff, 0xff, 0xff, + 0xcf, 0xff, 0xff, 0xff, + 0x8f, 0xff, 0xff, 0xff, + 0x8f, 0xff, 0xff, 0xf8, + 0x9f, 0xff, 0xff, 0xf0, + 0x9f, 0xff, 0xff, 0xe3, + 0x9f, 0xff, 0xff, 0xe7, + 0x9f, 0xff, 0xff, 0xe7, +}; + +const lv_img_dsc_t disc_f_2 = { + { + LV_IMG_CF_INDEXED_1BIT, + 0, + 0, + 32, + 32 + }, + 136, + disc_f_2_map +}; + diff --git a/src/displayapp/icons/music/disc_f_2.cpp b/src/displayapp/icons/music/disc_f_2.cpp deleted file mode 100644 index 3d2331d..0000000 --- a/src/displayapp/icons/music/disc_f_2.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright (C) 2020 Avamander - - This file is part of InfiniTime. - - InfiniTime is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - InfiniTime is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ -#pragma once - -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_DISC_F_2 -#define LV_ATTRIBUTE_IMG_DISC_F_2 -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_DISC_F_2 uint8_t disc_f_2_map[] = { - 0xbd, 0xc1, 0xbe, 0xff, /* Color of index 0: foreground */ - 0x00, 0x00, 0x00, 0x00, /* Color of index 1: background */ - - 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xc0, - 0xff, 0xff, 0xfc, 0x00, - 0xff, 0xff, 0xf0, 0x0f, - 0xff, 0xff, 0xc0, 0xff, - 0xff, 0xff, 0x07, 0xff, - 0xff, 0xfc, 0x1f, 0xff, - 0xff, 0xf8, 0x7f, 0xf1, - 0xff, 0xf0, 0xff, 0x00, - 0xff, 0xe3, 0xfc, 0x03, - 0xff, 0xc7, 0xf0, 0x3f, - 0xff, 0x8f, 0xf0, 0xff, - 0xff, 0x1f, 0xf3, 0xff, - 0xfe, 0x3f, 0xff, 0xff, - 0xfc, 0x7f, 0xff, 0xff, - 0xfc, 0x7f, 0xff, 0xff, - 0xf8, 0xff, 0xff, 0xff, - 0xf9, 0xff, 0xff, 0xff, - 0xf1, 0xff, 0xff, 0xff, - 0xf3, 0xff, 0xff, 0xff, - 0xe3, 0xff, 0xff, 0xff, - 0xe7, 0xff, 0xff, 0xff, - 0xc7, 0xff, 0xff, 0xff, - 0xc7, 0xff, 0xff, 0xff, - 0xcf, 0xff, 0xff, 0xff, - 0xcf, 0xff, 0xff, 0xff, - 0x8f, 0xff, 0xff, 0xff, - 0x8f, 0xff, 0xff, 0xf8, - 0x9f, 0xff, 0xff, 0xf0, - 0x9f, 0xff, 0xff, 0xe3, - 0x9f, 0xff, 0xff, 0xe7, - 0x9f, 0xff, 0xff, 0xe7, -}; - -const lv_img_dsc_t disc_f_2 = { - { - LV_IMG_CF_INDEXED_1BIT, - 0, - 0, - 32, - 32 - }, - 136, - disc_f_2_map -}; - diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index 9211236..1abb16a 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -20,9 +20,9 @@ #include #include "displayapp/DisplayApp.h" #include "components/ble/MusicService.h" -#include "displayapp/icons/music/disc.cpp" -#include "displayapp/icons/music/disc_f_1.cpp" -#include "displayapp/icons/music/disc_f_2.cpp" +#include "displayapp/icons/music/disc.c" +#include "displayapp/icons/music/disc_f_1.c" +#include "displayapp/icons/music/disc_f_2.c" using namespace Pinetime::Applications::Screens; -- cgit v0.10.2 From 718fbdab98ae80923a548ac03b7843f5d618a4f6 Mon Sep 17 00:00:00 2001 From: Finlay Davidson Date: Mon, 9 May 2022 17:14:42 +0200 Subject: Replace C-style casts with static_cast diff --git a/src/components/ble/DfuService.cpp b/src/components/ble/DfuService.cpp index cf99f01..77dbe2e 100644 --- a/src/components/ble/DfuService.cpp +++ b/src/components/ble/DfuService.cpp @@ -119,8 +119,10 @@ int DfuService::WritePacketHandler(uint16_t connectionHandle, os_mbuf* om) { bootloaderSize = om->om_data[4] + (om->om_data[5] << 8) + (om->om_data[6] << 16) + (om->om_data[7] << 24); applicationSize = om->om_data[8] + (om->om_data[9] << 8) + (om->om_data[10] << 16) + (om->om_data[11] << 24); bleController.FirmwareUpdateTotalBytes(applicationSize); - NRF_LOG_INFO( - "[DFU] -> Start data received : SD size : %d, BT size : %d, app size : %d", softdeviceSize, bootloaderSize, applicationSize); + NRF_LOG_INFO("[DFU] -> Start data received : SD size : %d, BT size : %d, app size : %d", + softdeviceSize, + bootloaderSize, + applicationSize); // wait until SystemTask has finished waking up all devices while (systemTask.IsSleeping()) { @@ -165,10 +167,10 @@ int DfuService::WritePacketHandler(uint16_t connectionHandle, os_mbuf* om) { if ((nbPacketReceived % nbPacketsToNotify) == 0 && bytesReceived != applicationSize) { uint8_t data[5] {static_cast(Opcodes::PacketReceiptNotification), - (uint8_t)(bytesReceived & 0x000000FFu), - (uint8_t)(bytesReceived >> 8u), - (uint8_t)(bytesReceived >> 16u), - (uint8_t)(bytesReceived >> 24u)}; + static_cast(bytesReceived & 0x000000FFu), + static_cast(bytesReceived >> 8u), + static_cast(bytesReceived >> 16u), + static_cast(bytesReceived >> 24u)}; NRF_LOG_INFO("[DFU] -> Send packet notification: %d bytes received", bytesReceived); notificationManager.Send(connectionHandle, controlPointCharacteristicHandle, data, 5); } @@ -423,9 +425,9 @@ uint16_t DfuService::DfuImage::ComputeCrc(uint8_t const* p_data, uint32_t size, uint16_t crc = (p_crc == NULL) ? 0xFFFF : *p_crc; for (uint32_t i = 0; i < size; i++) { - crc = (uint8_t)(crc >> 8) | (crc << 8); + crc = static_cast(crc >> 8) | (crc << 8); crc ^= p_data[i]; - crc ^= (uint8_t)(crc & 0xFF) >> 4; + crc ^= static_cast(crc & 0xFF) >> 4; crc ^= (crc << 8) << 4; crc ^= ((crc & 0xFF) << 4) << 1; } diff --git a/src/drivers/DebugPins.cpp b/src/drivers/DebugPins.cpp index 9209128..4b2f0f1 100644 --- a/src/drivers/DebugPins.cpp +++ b/src/drivers/DebugPins.cpp @@ -19,16 +19,16 @@ void debugpins_init() { nrf_gpio_pin_clear(DebugPin4); } void debugpins_set(debugpins_pins pin) { - nrf_gpio_pin_set((uint32_t) (pin)); + nrf_gpio_pin_set(static_cast(pin)); } void debugpins_clear(debugpins_pins pin) { - nrf_gpio_pin_clear((uint32_t) (pin)); + nrf_gpio_pin_clear(static_cast(pin)); } void debugpins_pulse(debugpins_pins pin) { - nrf_gpio_pin_set((uint32_t) (pin)); - nrf_gpio_pin_clear((uint32_t) (pin)); + nrf_gpio_pin_set(static_cast(pin)); + nrf_gpio_pin_clear(static_cast(pin)); } #else void debugpins_init() { @@ -42,4 +42,4 @@ void debugpins_clear(debugpins_pins pin) { void debugpins_pulse(debugpins_pins pin) { } -#endif \ No newline at end of file +#endif diff --git a/src/drivers/SpiNorFlash.cpp b/src/drivers/SpiNorFlash.cpp index ebe3174..28f82fe 100644 --- a/src/drivers/SpiNorFlash.cpp +++ b/src/drivers/SpiNorFlash.cpp @@ -11,8 +11,10 @@ SpiNorFlash::SpiNorFlash(Spi& spi) : spi {spi} { void SpiNorFlash::Init() { device_id = ReadIdentificaion(); - NRF_LOG_INFO( - "[SpiNorFlash] Manufacturer : %d, Memory type : %d, memory density : %d", device_id.manufacturer, device_id.type, device_id.density); + NRF_LOG_INFO("[SpiNorFlash] Manufacturer : %d, Memory type : %d, memory density : %d", + device_id.manufacturer, + device_id.type, + device_id.density); } void SpiNorFlash::Uninit() { @@ -70,7 +72,10 @@ uint8_t SpiNorFlash::ReadConfigurationRegister() { void SpiNorFlash::Read(uint32_t address, uint8_t* buffer, size_t size) { static constexpr uint8_t cmdSize = 4; - uint8_t cmd[cmdSize] = {static_cast(Commands::Read), (uint8_t) (address >> 16U), (uint8_t) (address >> 8U), (uint8_t) address}; + uint8_t cmd[cmdSize] = {static_cast(Commands::Read), + static_cast(address >> 16U), + static_cast(address >> 8U), + static_cast(address)}; spi.Read(reinterpret_cast(&cmd), cmdSize, buffer, size); } @@ -82,9 +87,9 @@ void SpiNorFlash::WriteEnable() { void SpiNorFlash::SectorErase(uint32_t sectorAddress) { static constexpr uint8_t cmdSize = 4; uint8_t cmd[cmdSize] = {static_cast(Commands::SectorErase), - (uint8_t) (sectorAddress >> 16U), - (uint8_t) (sectorAddress >> 8U), - (uint8_t) sectorAddress}; + static_cast(sectorAddress >> 16U), + static_cast(sectorAddress >> 8U), + static_cast(sectorAddress)}; WriteEnable(); while (!WriteEnabled()) @@ -121,7 +126,10 @@ void SpiNorFlash::Write(uint32_t address, const uint8_t* buffer, size_t size) { uint32_t pageLimit = (addr & ~(pageSize - 1u)) + pageSize; uint32_t toWrite = pageLimit - addr > len ? len : pageLimit - addr; - uint8_t cmd[cmdSize] = {static_cast(Commands::PageProgram), (uint8_t) (addr >> 16U), (uint8_t) (addr >> 8U), (uint8_t) addr}; + uint8_t cmd[cmdSize] = {static_cast(Commands::PageProgram), + static_cast(addr >> 16U), + static_cast(addr >> 8U), + static_cast(addr)}; WriteEnable(); while (!WriteEnabled()) -- cgit v0.10.2 From 7f45538eb53235ab4015fcf13533796c8759c7bc Mon Sep 17 00:00:00 2001 From: Finlay Davidson Date: Mon, 9 May 2022 17:16:08 +0200 Subject: Apply clang-format to all C++ files diff --git a/.clang-format b/.clang-format index 7430d4d..dec5818 100644 --- a/.clang-format +++ b/.clang-format @@ -8,9 +8,9 @@ AlignConsecutiveDeclarations: false AlignEscapedNewlines: Right AlignOperands: Align AlignTrailingComments: true -AllowAllArgumentsOnNextLine: true +AllowAllArgumentsOnNextLine: false AllowAllConstructorInitializersOnNextLine: true -AllowAllParametersOfDeclarationOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: false AllowShortBlocksOnASingleLine: Never AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: None @@ -83,6 +83,8 @@ IndentGotoLabels: true IndentPPDirectives: BeforeHash IndentWidth: 2 IndentWrappedFunctionNames: false +# Requires Clang >= 15, could also cause incorrect code formatting: +# InsertBraces: true JavaScriptQuotes: Leave JavaScriptWrapImports: true KeepEmptyLinesAtTheStartOfBlocks: true diff --git a/src/BootloaderVersion.cpp b/src/BootloaderVersion.cpp index 07a1da4..7f7f5c8 100644 --- a/src/BootloaderVersion.cpp +++ b/src/BootloaderVersion.cpp @@ -31,6 +31,10 @@ const bool BootloaderVersion::IsValid() { void BootloaderVersion::SetVersion(uint32_t v) { BootloaderVersion::version = v; - snprintf(BootloaderVersion::versionString, BootloaderVersion::VERSION_STR_LEN, "%ld.%ld.%ld", - BootloaderVersion::Major(), BootloaderVersion::Minor(), BootloaderVersion::Patch()); + snprintf(BootloaderVersion::versionString, + BootloaderVersion::VERSION_STR_LEN, + "%ld.%ld.%ld", + BootloaderVersion::Major(), + BootloaderVersion::Minor(), + BootloaderVersion::Patch()); } diff --git a/src/BootloaderVersion.h b/src/BootloaderVersion.h index 309c23c..7ed90fa 100644 --- a/src/BootloaderVersion.h +++ b/src/BootloaderVersion.h @@ -12,6 +12,7 @@ namespace Pinetime { static const char* VersionString(); static const bool IsValid(); static void SetVersion(uint32_t v); + private: static uint32_t version; static constexpr size_t VERSION_STR_LEN = 12; diff --git a/src/components/alarm/AlarmController.cpp b/src/components/alarm/AlarmController.cpp index 11d96e7..d412273 100644 --- a/src/components/alarm/AlarmController.cpp +++ b/src/components/alarm/AlarmController.cpp @@ -54,8 +54,7 @@ void AlarmController::ScheduleAlarm() { auto now = dateTimeController.CurrentDateTime(); alarmTime = now; - time_t ttAlarmTime = std::chrono::system_clock::to_time_t( - std::chrono::time_point_cast(alarmTime)); + time_t ttAlarmTime = std::chrono::system_clock::to_time_t(std::chrono::time_point_cast(alarmTime)); tm* tmAlarmTime = std::localtime(&ttAlarmTime); // If the time being set has already passed today,the alarm should be set for tomorrow diff --git a/src/components/ble/AlertNotificationClient.cpp b/src/components/ble/AlertNotificationClient.cpp index 335845e..095fdef 100644 --- a/src/components/ble/AlertNotificationClient.cpp +++ b/src/components/ble/AlertNotificationClient.cpp @@ -26,8 +26,11 @@ namespace { return client->OnCharacteristicsDiscoveryEvent(conn_handle, error, chr); } - int OnAlertNotificationDescriptorDiscoveryEventCallback( - uint16_t conn_handle, const struct ble_gatt_error* error, uint16_t chr_val_handle, const struct ble_gatt_dsc* dsc, void* arg) { + int OnAlertNotificationDescriptorDiscoveryEventCallback(uint16_t conn_handle, + const struct ble_gatt_error* error, + uint16_t chr_val_handle, + const struct ble_gatt_dsc* dsc, + void* arg) { auto client = static_cast(arg); return client->OnDescriptorDiscoveryEventCallback(conn_handle, error, chr_val_handle, dsc); } diff --git a/src/components/ble/BatteryInformationService.h b/src/components/ble/BatteryInformationService.h index 1303fd6..c6fc52e 100644 --- a/src/components/ble/BatteryInformationService.h +++ b/src/components/ble/BatteryInformationService.h @@ -18,6 +18,7 @@ namespace Pinetime { int OnBatteryServiceRequested(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context); void NotifyBatteryLevel(uint16_t connectionHandle, uint8_t level); + private: Controllers::Battery& batteryController; static constexpr uint16_t batteryInformationServiceId {0x180F}; diff --git a/src/components/ble/CurrentTimeClient.cpp b/src/components/ble/CurrentTimeClient.cpp index dd8171b..53e98cb 100644 --- a/src/components/ble/CurrentTimeClient.cpp +++ b/src/components/ble/CurrentTimeClient.cpp @@ -85,10 +85,21 @@ int CurrentTimeClient::OnCurrentTimeReadResult(uint16_t conn_handle, const ble_g // TODO check that attribute->handle equals the handle discovered in OnCharacteristicDiscoveryEvent CtsData result; os_mbuf_copydata(attribute->om, 0, sizeof(CtsData), &result); - NRF_LOG_INFO( - "Received data: %d-%d-%d %d:%d:%d", result.year, result.month, result.dayofmonth, result.hour, result.minute, result.second); - dateTimeController.SetTime( - result.year, result.month, result.dayofmonth, 0, result.hour, result.minute, result.second, nrf_rtc_counter_get(portNRF_RTC_REG)); + NRF_LOG_INFO("Received data: %d-%d-%d %d:%d:%d", + result.year, + result.month, + result.dayofmonth, + result.hour, + result.minute, + result.second); + dateTimeController.SetTime(result.year, + result.month, + result.dayofmonth, + 0, + result.hour, + result.minute, + result.second, + nrf_rtc_counter_get(portNRF_RTC_REG)); } else { NRF_LOG_INFO("Error retrieving current time: %d", error->status); } diff --git a/src/components/ble/CurrentTimeService.cpp b/src/components/ble/CurrentTimeService.cpp index e509aea..8430d1b 100644 --- a/src/components/ble/CurrentTimeService.cpp +++ b/src/components/ble/CurrentTimeService.cpp @@ -29,11 +29,22 @@ int CurrentTimeService::OnTimeAccessed(uint16_t conn_handle, uint16_t attr_handl CtsData result; os_mbuf_copydata(ctxt->om, 0, sizeof(CtsData), &result); - NRF_LOG_INFO( - "Received data: %d-%d-%d %d:%d:%d", result.year, result.month, result.dayofmonth, result.hour, result.minute, result.second); + NRF_LOG_INFO("Received data: %d-%d-%d %d:%d:%d", + result.year, + result.month, + result.dayofmonth, + result.hour, + result.minute, + result.second); - m_dateTimeController.SetTime( - result.year, result.month, result.dayofmonth, 0, result.hour, result.minute, result.second, nrf_rtc_counter_get(portNRF_RTC_REG)); + m_dateTimeController.SetTime(result.year, + result.month, + result.dayofmonth, + 0, + result.hour, + result.minute, + result.second, + nrf_rtc_counter_get(portNRF_RTC_REG)); } else if (ctxt->op == BLE_GATT_ACCESS_OP_READ_CHR) { CtsData currentDateTime; diff --git a/src/components/ble/HeartRateService.cpp b/src/components/ble/HeartRateService.cpp index 4824a6b..d49a02c 100644 --- a/src/components/ble/HeartRateService.cpp +++ b/src/components/ble/HeartRateService.cpp @@ -57,7 +57,8 @@ int HeartRateService::OnHeartRateRequested(uint16_t connectionHandle, uint16_t a } void HeartRateService::OnNewHeartRateValue(uint8_t heartRateValue) { - if(!heartRateMeasurementNotificationEnable) return; + if (!heartRateMeasurementNotificationEnable) + return; uint8_t buffer[2] = {0, heartRateController.HeartRate()}; // [0] = flags, [1] = hr value auto* om = ble_hs_mbuf_from_flat(buffer, 2); @@ -72,11 +73,11 @@ void HeartRateService::OnNewHeartRateValue(uint8_t heartRateValue) { } void HeartRateService::SubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle) { - if(attributeHandle == heartRateMeasurementHandle) + if (attributeHandle == heartRateMeasurementHandle) heartRateMeasurementNotificationEnable = true; } void HeartRateService::UnsubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle) { - if(attributeHandle == heartRateMeasurementHandle) + if (attributeHandle == heartRateMeasurementHandle) heartRateMeasurementNotificationEnable = false; } \ No newline at end of file diff --git a/src/components/ble/MotionService.cpp b/src/components/ble/MotionService.cpp index 87923c2..121ad3b 100644 --- a/src/components/ble/MotionService.cpp +++ b/src/components/ble/MotionService.cpp @@ -8,10 +8,8 @@ using namespace Pinetime::Controllers; namespace { // 0003yyxx-78fc-48fe-8e23-433b3a1942d0 constexpr ble_uuid128_t CharUuid(uint8_t x, uint8_t y) { - return ble_uuid128_t{ - .u = {.type = BLE_UUID_TYPE_128}, - .value = { 0xd0, 0x42, 0x19, 0x3a, 0x3b, 0x43, 0x23, 0x8e, 0xfe, 0x48, 0xfc, 0x78, x, y, 0x03, 0x00 } - }; + return ble_uuid128_t {.u = {.type = BLE_UUID_TYPE_128}, + .value = {0xd0, 0x42, 0x19, 0x3a, 0x3b, 0x43, 0x23, 0x8e, 0xfe, 0x48, 0xfc, 0x78, x, y, 0x03, 0x00}}; } // 00030000-78fc-48fe-8e23-433b3a1942d0 @@ -45,11 +43,7 @@ MotionService::MotionService(Pinetime::System::SystemTask& system, Controllers:: .val_handle = &motionValuesHandle}, {0}}, serviceDefinition { - { - .type = BLE_GATT_SVC_TYPE_PRIMARY, - .uuid = &motionServiceUuid.u, - .characteristics = characteristicDefinition - }, + {.type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = &motionServiceUuid.u, .characteristics = characteristicDefinition}, {0}, } { // TODO refactor to prevent this loop dependency (service depends on controller and controller depends on service) @@ -72,8 +66,8 @@ int MotionService::OnStepCountRequested(uint16_t connectionHandle, uint16_t attr int res = os_mbuf_append(context->om, &buffer, 4); return (res == 0) ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES; - } else if(attributeHandle == motionValuesHandle) { - int16_t buffer[3] = { motionController.X(), motionController.Y(), motionController.Z() }; + } else if (attributeHandle == motionValuesHandle) { + int16_t buffer[3] = {motionController.X(), motionController.Y(), motionController.Z()}; int res = os_mbuf_append(context->om, buffer, 3 * sizeof(int16_t)); return (res == 0) ? 0 : BLE_ATT_ERR_INSUFFICIENT_RES; @@ -82,7 +76,8 @@ int MotionService::OnStepCountRequested(uint16_t connectionHandle, uint16_t attr } void MotionService::OnNewStepCountValue(uint32_t stepCount) { - if(!stepCountNoficationEnabled) return; + if (!stepCountNoficationEnabled) + return; uint32_t buffer = stepCount; auto* om = ble_hs_mbuf_from_flat(&buffer, 4); @@ -96,9 +91,10 @@ void MotionService::OnNewStepCountValue(uint32_t stepCount) { ble_gattc_notify_custom(connectionHandle, stepCountHandle, om); } void MotionService::OnNewMotionValues(int16_t x, int16_t y, int16_t z) { - if(!motionValuesNoficationEnabled) return; + if (!motionValuesNoficationEnabled) + return; - int16_t buffer[3] = { motionController.X(), motionController.Y(), motionController.Z() }; + int16_t buffer[3] = {motionController.X(), motionController.Y(), motionController.Z()}; auto* om = ble_hs_mbuf_from_flat(buffer, 3 * sizeof(int16_t)); uint16_t connectionHandle = system.nimble().connHandle(); @@ -111,15 +107,15 @@ void MotionService::OnNewMotionValues(int16_t x, int16_t y, int16_t z) { } void MotionService::SubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle) { - if(attributeHandle == stepCountHandle) + if (attributeHandle == stepCountHandle) stepCountNoficationEnabled = true; - else if(attributeHandle == motionValuesHandle) + else if (attributeHandle == motionValuesHandle) motionValuesNoficationEnabled = true; } void MotionService::UnsubscribeNotification(uint16_t connectionHandle, uint16_t attributeHandle) { - if(attributeHandle == stepCountHandle) + if (attributeHandle == stepCountHandle) stepCountNoficationEnabled = false; - else if(attributeHandle == motionValuesHandle) + else if (attributeHandle == motionValuesHandle) motionValuesNoficationEnabled = false; } diff --git a/src/components/ble/MusicService.cpp b/src/components/ble/MusicService.cpp index 60747e9..fc7cef0 100644 --- a/src/components/ble/MusicService.cpp +++ b/src/components/ble/MusicService.cpp @@ -22,10 +22,8 @@ namespace { // 0000yyxx-78fc-48fe-8e23-433b3a1942d0 constexpr ble_uuid128_t CharUuid(uint8_t x, uint8_t y) { - return ble_uuid128_t{ - .u = {.type = BLE_UUID_TYPE_128}, - .value = { 0xd0, 0x42, 0x19, 0x3a, 0x3b, 0x43, 0x23, 0x8e, 0xfe, 0x48, 0xfc, 0x78, x, y, 0x00, 0x00 } - }; + return ble_uuid128_t {.u = {.type = BLE_UUID_TYPE_128}, + .value = {0xd0, 0x42, 0x19, 0x3a, 0x3b, 0x43, 0x23, 0x8e, 0xfe, 0x48, 0xfc, 0x78, x, y, 0x00, 0x00}}; } // 00000000-78fc-48fe-8e23-433b3a1942d0 @@ -111,8 +109,7 @@ Pinetime::Controllers::MusicService::MusicService(Pinetime::System::SystemTask& .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; characteristicDefinition[13] = {0}; - serviceDefinition[0] = { - .type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = &msUuid.u, .characteristics = characteristicDefinition}; + serviceDefinition[0] = {.type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = &msUuid.u, .characteristics = characteristicDefinition}; serviceDefinition[1] = {0}; } @@ -137,9 +134,9 @@ int Pinetime::Controllers::MusicService::OnCommand(uint16_t conn_handle, uint16_ os_mbuf_copydata(ctxt->om, 0, bufferSize, data); if (notifSize > bufferSize) { - data[bufferSize-1] = '.'; - data[bufferSize-2] = '.'; - data[bufferSize-3] = '.'; + data[bufferSize - 1] = '.'; + data[bufferSize - 2] = '.'; + data[bufferSize - 3] = '.'; } data[bufferSize] = '\0'; @@ -157,7 +154,8 @@ int Pinetime::Controllers::MusicService::OnCommand(uint16_t conn_handle, uint16_ if (playing) { trackProgressUpdateTime = xTaskGetTickCount(); } else { - trackProgress += static_cast((static_cast(xTaskGetTickCount() - trackProgressUpdateTime) / 1024.0f) * getPlaybackSpeed()); + trackProgress += + static_cast((static_cast(xTaskGetTickCount() - trackProgressUpdateTime) / 1024.0f) * getPlaybackSpeed()); } } else if (ble_uuid_cmp(ctxt->chr->uuid, &msRepeatCharUuid.u) == 0) { repeat = s[0]; @@ -201,7 +199,8 @@ float Pinetime::Controllers::MusicService::getPlaybackSpeed() const { int Pinetime::Controllers::MusicService::getProgress() const { if (isPlaying()) { - return trackProgress + static_cast((static_cast(xTaskGetTickCount() - trackProgressUpdateTime) / 1024.0f) * getPlaybackSpeed()); + return trackProgress + + static_cast((static_cast(xTaskGetTickCount() - trackProgressUpdateTime) / 1024.0f) * getPlaybackSpeed()); } return trackProgress; } diff --git a/src/components/ble/NavigationService.cpp b/src/components/ble/NavigationService.cpp index 5418b9e..7614368 100644 --- a/src/components/ble/NavigationService.cpp +++ b/src/components/ble/NavigationService.cpp @@ -46,15 +46,23 @@ namespace { } // namespace Pinetime::Controllers::NavigationService::NavigationService(Pinetime::System::SystemTask& system) : m_system(system) { - characteristicDefinition[0] = { - .uuid = &navFlagCharUuid.u, .access_cb = NAVCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - - characteristicDefinition[1] = { - .uuid = &navNarrativeCharUuid.u, .access_cb = NAVCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[2] = { - .uuid = &navManDistCharUuid.u, .access_cb = NAVCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[3] = { - .uuid = &navProgressCharUuid.u, .access_cb = NAVCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + characteristicDefinition[0] = {.uuid = &navFlagCharUuid.u, + .access_cb = NAVCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + + characteristicDefinition[1] = {.uuid = &navNarrativeCharUuid.u, + .access_cb = NAVCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + characteristicDefinition[2] = {.uuid = &navManDistCharUuid.u, + .access_cb = NAVCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + characteristicDefinition[3] = {.uuid = &navProgressCharUuid.u, + .access_cb = NAVCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; characteristicDefinition[4] = {0}; diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index d2d6dc0..52f4e4c 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -223,7 +223,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { currentTimeClient.Reset(); alertNotificationClient.Reset(); connectionHandle = BLE_HS_CONN_HANDLE_NONE; - if(bleController.IsConnected()) { + if (bleController.IsConnected()) { bleController.Disconnect(); fastAdvCount = 0; StartAdvertising(); diff --git a/src/components/ble/weather/WeatherService.h b/src/components/ble/weather/WeatherService.h index eca70cb..e37417d 100644 --- a/src/components/ble/weather/WeatherService.h +++ b/src/components/ble/weather/WeatherService.h @@ -127,7 +127,8 @@ namespace Pinetime { {.uuid = &weatherControlCharUuid.u, .access_cb = WeatherCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}, {nullptr}}; const struct ble_gatt_svc_def serviceDefinition[2] = { - {.type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = &weatherUuid.u, .characteristics = characteristicDefinition}, {0}}; + {.type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = &weatherUuid.u, .characteristics = characteristicDefinition}, + {0}}; uint16_t eventHandle {}; diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index 3bfbdc7..ba04705 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -19,8 +19,14 @@ void DateTime::SetCurrentTime(std::chrono::time_point(&bufferSettings), sizeof(settings)); fs.FileClose(&settingsFile); - if ( bufferSettings.version == settingsVersion ) { + if (bufferSettings.version == settingsVersion) { settings = bufferSettings; } } @@ -39,7 +39,7 @@ void Settings::LoadSettingsFromFile() { void Settings::SaveSettingsToFile() { lfs_file_t settingsFile; - if ( fs.FileOpen(&settingsFile, "/settings.dat", LFS_O_WRONLY | LFS_O_CREAT) != LFS_ERR_OK) { + if (fs.FileOpen(&settingsFile, "/settings.dat", LFS_O_WRONLY | LFS_O_CREAT) != LFS_ERR_OK) { return; } fs.FileWrite(&settingsFile, reinterpret_cast(&settings), sizeof(settings)); diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 44a1a85..3b113ea 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -140,15 +140,14 @@ namespace Pinetime { return settings.screenTimeOut; }; - void SetShakeThreshold(uint16_t thresh){ - if(settings.shakeWakeThreshold != thresh){ - settings.shakeWakeThreshold = thresh; - settingsChanged = true; + void SetShakeThreshold(uint16_t thresh) { + if (settings.shakeWakeThreshold != thresh) { + settings.shakeWakeThreshold = thresh; + settingsChanged = true; } - } - int16_t GetShakeThreshold() const{ + int16_t GetShakeThreshold() const { return settings.shakeWakeThreshold; } @@ -195,20 +194,20 @@ namespace Pinetime { if (goal != settings.stepsGoal) { settingsChanged = true; } - settings.stepsGoal = goal; + settings.stepsGoal = goal; }; - + uint32_t GetStepsGoal() const { return settings.stepsGoal; }; - void SetBleRadioEnabled(bool enabled) { - bleRadioEnabled = enabled; - }; + void SetBleRadioEnabled(bool enabled) { + bleRadioEnabled = enabled; + }; - bool GetBleRadioEnabled() const { - return bleRadioEnabled; - }; + bool GetBleRadioEnabled() const { + return bleRadioEnabled; + }; private: Pinetime::Controllers::FS& fs; diff --git a/src/displayapp/Colors.cpp b/src/displayapp/Colors.cpp index 2ac5fca..106c516 100644 --- a/src/displayapp/Colors.cpp +++ b/src/displayapp/Colors.cpp @@ -5,23 +5,41 @@ using namespace Pinetime::Controllers; lv_color_t Pinetime::Applications::Convert(Pinetime::Controllers::Settings::Colors color) { switch (color) { - case Pinetime::Controllers::Settings::Colors::White: return LV_COLOR_WHITE; - case Pinetime::Controllers::Settings::Colors::Silver: return LV_COLOR_SILVER; - case Pinetime::Controllers::Settings::Colors::Gray: return LV_COLOR_GRAY; - case Pinetime::Controllers::Settings::Colors::Black: return LV_COLOR_BLACK; - case Pinetime::Controllers::Settings::Colors::Red: return LV_COLOR_RED; - case Pinetime::Controllers::Settings::Colors::Maroon: return LV_COLOR_MAKE(0xb0, 0x0, 0x0); - case Pinetime::Controllers::Settings::Colors::Yellow: return LV_COLOR_YELLOW; - case Pinetime::Controllers::Settings::Colors::Olive: return LV_COLOR_MAKE(0xb0, 0xb0, 0x0); - case Pinetime::Controllers::Settings::Colors::Lime: return LV_COLOR_LIME; - case Pinetime::Controllers::Settings::Colors::Green: return LV_COLOR_MAKE(0x0, 0xb0, 0x0); - case Pinetime::Controllers::Settings::Colors::Cyan: return LV_COLOR_CYAN; - case Pinetime::Controllers::Settings::Colors::Teal: return LV_COLOR_MAKE(0x0, 0xb0, 0xb0); - case Pinetime::Controllers::Settings::Colors::Blue: return LV_COLOR_BLUE; - case Pinetime::Controllers::Settings::Colors::Navy: return LV_COLOR_MAKE(0x0, 0x0, 0xb0); - case Pinetime::Controllers::Settings::Colors::Magenta: return LV_COLOR_MAGENTA; - case Pinetime::Controllers::Settings::Colors::Purple: return LV_COLOR_MAKE(0xb0, 0x0, 0xb0); - case Pinetime::Controllers::Settings::Colors::Orange: return LV_COLOR_ORANGE; - default: return LV_COLOR_WHITE; + case Pinetime::Controllers::Settings::Colors::White: + return LV_COLOR_WHITE; + case Pinetime::Controllers::Settings::Colors::Silver: + return LV_COLOR_SILVER; + case Pinetime::Controllers::Settings::Colors::Gray: + return LV_COLOR_GRAY; + case Pinetime::Controllers::Settings::Colors::Black: + return LV_COLOR_BLACK; + case Pinetime::Controllers::Settings::Colors::Red: + return LV_COLOR_RED; + case Pinetime::Controllers::Settings::Colors::Maroon: + return LV_COLOR_MAKE(0xb0, 0x0, 0x0); + case Pinetime::Controllers::Settings::Colors::Yellow: + return LV_COLOR_YELLOW; + case Pinetime::Controllers::Settings::Colors::Olive: + return LV_COLOR_MAKE(0xb0, 0xb0, 0x0); + case Pinetime::Controllers::Settings::Colors::Lime: + return LV_COLOR_LIME; + case Pinetime::Controllers::Settings::Colors::Green: + return LV_COLOR_MAKE(0x0, 0xb0, 0x0); + case Pinetime::Controllers::Settings::Colors::Cyan: + return LV_COLOR_CYAN; + case Pinetime::Controllers::Settings::Colors::Teal: + return LV_COLOR_MAKE(0x0, 0xb0, 0xb0); + case Pinetime::Controllers::Settings::Colors::Blue: + return LV_COLOR_BLUE; + case Pinetime::Controllers::Settings::Colors::Navy: + return LV_COLOR_MAKE(0x0, 0x0, 0xb0); + case Pinetime::Controllers::Settings::Colors::Magenta: + return LV_COLOR_MAGENTA; + case Pinetime::Controllers::Settings::Colors::Purple: + return LV_COLOR_MAKE(0xb0, 0x0, 0xb0); + case Pinetime::Controllers::Settings::Colors::Orange: + return LV_COLOR_ORANGE; + default: + return LV_COLOR_WHITE; } } diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index bd5412e..a50f676 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -348,13 +348,21 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) break; case Apps::Notifications: - currentScreen = std::make_unique( - this, notificationManager, systemTask->nimble().alertService(), motorController, *systemTask, Screens::Notifications::Modes::Normal); + currentScreen = std::make_unique(this, + notificationManager, + systemTask->nimble().alertService(), + motorController, + *systemTask, + Screens::Notifications::Modes::Normal); ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::NotificationsPreview: - currentScreen = std::make_unique( - this, notificationManager, systemTask->nimble().alertService(), motorController, *systemTask, Screens::Notifications::Modes::Preview); + currentScreen = std::make_unique(this, + notificationManager, + systemTask->nimble().alertService(), + motorController, + *systemTask, + Screens::Notifications::Modes::Preview); ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::Timer: @@ -366,8 +374,12 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) // Settings case Apps::QuickSettings: - currentScreen = std::make_unique( - this, batteryController, dateTimeController, brightnessController, motorController, settingsController); + currentScreen = std::make_unique(this, + batteryController, + dateTimeController, + brightnessController, + motorController, + settingsController); ReturnApp(Apps::Clock, FullRefreshDirections::LeftAnim, TouchEvents::SwipeLeft); break; case Apps::Settings: @@ -419,8 +431,14 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::SysInfo: - currentScreen = std::make_unique( - this, dateTimeController, batteryController, brightnessController, bleController, watchdog, motionController, touchPanel); + currentScreen = std::make_unique(this, + dateTimeController, + batteryController, + brightnessController, + bleController, + watchdog, + motionController, + touchPanel); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::FlashLight: diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 1eaefaa..4397223 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -88,7 +88,7 @@ namespace Pinetime { Pinetime::Controllers::MotionController& motionController; Pinetime::Controllers::TimerController& timerController; Pinetime::Controllers::AlarmController& alarmController; - Pinetime::Controllers::BrightnessController &brightnessController; + Pinetime::Controllers::BrightnessController& brightnessController; Pinetime::Controllers::TouchHandler& touchHandler; Pinetime::Controllers::FirmwareValidator validator; diff --git a/src/displayapp/DisplayAppRecovery.cpp b/src/displayapp/DisplayAppRecovery.cpp index 9d6eb22..ca15dba 100644 --- a/src/displayapp/DisplayAppRecovery.cpp +++ b/src/displayapp/DisplayAppRecovery.cpp @@ -26,7 +26,6 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, Pinetime::Controllers::BrightnessController& brightnessController, Pinetime::Controllers::TouchHandler& touchHandler) : lcd {lcd}, bleController {bleController} { - } void DisplayApp::Start() { @@ -121,5 +120,4 @@ void DisplayApp::PushMessage(Display::Messages msg) { } void DisplayApp::Register(Pinetime::System::SystemTask* systemTask) { - } diff --git a/src/displayapp/DisplayAppRecovery.h b/src/displayapp/DisplayAppRecovery.h index 61f1c9b..0e80122 100644 --- a/src/displayapp/DisplayAppRecovery.h +++ b/src/displayapp/DisplayAppRecovery.h @@ -61,7 +61,9 @@ namespace Pinetime { Pinetime::Controllers::BrightnessController& brightnessController, Pinetime::Controllers::TouchHandler& touchHandler); void Start(); - void Start(Pinetime::System::BootErrors){ Start(); }; + void Start(Pinetime::System::BootErrors) { + Start(); + }; void PushMessage(Pinetime::Applications::Display::Messages msg); void Register(Pinetime::System::SystemTask* systemTask); diff --git a/src/displayapp/DummyLittleVgl.h b/src/displayapp/DummyLittleVgl.h index 47c9e02..05355a9 100644 --- a/src/displayapp/DummyLittleVgl.h +++ b/src/displayapp/DummyLittleVgl.h @@ -20,7 +20,6 @@ namespace Pinetime { LittleVgl& operator=(LittleVgl&&) = delete; void Init() { - } void FlushDisplay(const lv_area_t* area, lv_color_t* color_p) { @@ -33,7 +32,6 @@ namespace Pinetime { void SetNewTapEvent(uint16_t x, uint16_t y) { } void SetNewTouchPoint(uint16_t x, uint16_t y, bool contact) { - } }; } diff --git a/src/displayapp/LittleVgl.cpp b/src/displayapp/LittleVgl.cpp index 25f3591..f401f52 100644 --- a/src/displayapp/LittleVgl.cpp +++ b/src/displayapp/LittleVgl.cpp @@ -195,8 +195,13 @@ bool LittleVgl::GetTouchPadInfo(lv_indev_data_t* ptr) { void LittleVgl::InitTheme() { - lv_theme_t* th = lv_pinetime_theme_init( - LV_COLOR_WHITE, LV_COLOR_SILVER, 0, &jetbrains_mono_bold_20, &jetbrains_mono_bold_20, &jetbrains_mono_bold_20, &jetbrains_mono_bold_20); + lv_theme_t* th = lv_pinetime_theme_init(LV_COLOR_WHITE, + LV_COLOR_SILVER, + 0, + &jetbrains_mono_bold_20, + &jetbrains_mono_bold_20, + &jetbrains_mono_bold_20, + &jetbrains_mono_bold_20); lv_theme_set_act(th); } diff --git a/src/displayapp/screens/Alarm.cpp b/src/displayapp/screens/Alarm.cpp index 3959205..c1ee646 100644 --- a/src/displayapp/screens/Alarm.cpp +++ b/src/displayapp/screens/Alarm.cpp @@ -300,8 +300,12 @@ void Alarm::ShowInfo() { auto minToAlarm = (timeToAlarm % 3600) / 60; auto secToAlarm = timeToAlarm % 60; - lv_label_set_text_fmt( - txtMessage, "Time to\nalarm:\n%2lu Days\n%2lu Hours\n%2lu Minutes\n%2lu Seconds", daysToAlarm, hrsToAlarm, minToAlarm, secToAlarm); + lv_label_set_text_fmt(txtMessage, + "Time to\nalarm:\n%2lu Days\n%2lu Hours\n%2lu Minutes\n%2lu Seconds", + daysToAlarm, + hrsToAlarm, + minToAlarm, + secToAlarm); } else { lv_label_set_text_static(txtMessage, "Alarm\nis not\nset."); } diff --git a/src/displayapp/screens/Alarm.h b/src/displayapp/screens/Alarm.h index f74dd68..80e446f 100644 --- a/src/displayapp/screens/Alarm.h +++ b/src/displayapp/screens/Alarm.h @@ -45,8 +45,8 @@ namespace Pinetime { Controllers::Settings& settingsController; System::SystemTask& systemTask; - lv_obj_t *time, *lblampm, *btnStop, *txtStop, *btnMinutesUp, *btnMinutesDown, *btnHoursUp, *btnHoursDown, *txtMinUp, - *txtMinDown, *txtHrUp, *txtHrDown, *btnRecur, *txtRecur, *btnInfo, *txtInfo, *enableSwitch; + lv_obj_t *time, *lblampm, *btnStop, *txtStop, *btnMinutesUp, *btnMinutesDown, *btnHoursUp, *btnHoursDown, *txtMinUp, *txtMinDown, + *txtHrUp, *txtHrDown, *btnRecur, *txtRecur, *btnInfo, *txtInfo, *enableSwitch; lv_obj_t* txtMessage = nullptr; lv_obj_t* btnMessage = nullptr; lv_task_t* taskStopAlarm = nullptr; diff --git a/src/displayapp/screens/BatteryIcon.h b/src/displayapp/screens/BatteryIcon.h index 81f94ac..45d8f0e 100644 --- a/src/displayapp/screens/BatteryIcon.h +++ b/src/displayapp/screens/BatteryIcon.h @@ -15,6 +15,7 @@ namespace Pinetime { static const char* GetUnknownIcon(); static const char* GetPlugIcon(bool isCharging); + private: lv_obj_t* batteryImg; lv_obj_t* batteryJuice; diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index 693e42a..1687dcc 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -75,13 +75,22 @@ std::unique_ptr Clock::WatchFaceDigitalScreen() { } std::unique_ptr Clock::WatchFaceAnalogScreen() { - return std::make_unique( - app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); + return std::make_unique(app, + dateTimeController, + batteryController, + bleController, + notificatioManager, + settingsController); } std::unique_ptr Clock::WatchFacePineTimeStyleScreen() { - return std::make_unique( - app, dateTimeController, batteryController, bleController, notificatioManager, settingsController, motionController); + return std::make_unique(app, + dateTimeController, + batteryController, + bleController, + notificatioManager, + settingsController, + motionController); } std::unique_ptr Clock::WatchFaceTerminalScreen() { diff --git a/src/displayapp/screens/Error.cpp b/src/displayapp/screens/Error.cpp index 1dbc344..1f2c61d 100644 --- a/src/displayapp/screens/Error.cpp +++ b/src/displayapp/screens/Error.cpp @@ -9,8 +9,7 @@ namespace { } } -Error::Error(Pinetime::Applications::DisplayApp* app, System::BootErrors error) - : Screen(app) { +Error::Error(Pinetime::Applications::DisplayApp* app, System::BootErrors error) : Screen(app) { lv_obj_t* warningLabel = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(warningLabel, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); diff --git a/src/displayapp/screens/Error.h b/src/displayapp/screens/Error.h index 2316754..6dbcc38 100644 --- a/src/displayapp/screens/Error.h +++ b/src/displayapp/screens/Error.h @@ -13,6 +13,7 @@ namespace Pinetime { ~Error() override; void ButtonEventHandler(); + private: lv_obj_t* btnOk; }; diff --git a/src/displayapp/screens/FirmwareValidation.cpp b/src/displayapp/screens/FirmwareValidation.cpp index 52ff954..a3c9761 100644 --- a/src/displayapp/screens/FirmwareValidation.cpp +++ b/src/displayapp/screens/FirmwareValidation.cpp @@ -34,7 +34,8 @@ FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, if (validator.IsValidated()) lv_label_set_text_static(labelIsValidated, "You have already\n#00ff00 validated# this firmware#"); else { - lv_label_set_text_static(labelIsValidated, "Please #00ff00 Validate# this version or\n#ff0000 Reset# to rollback to the previous version."); + lv_label_set_text_static(labelIsValidated, + "Please #00ff00 Validate# this version or\n#ff0000 Reset# to rollback to the previous version."); buttonValidate = lv_btn_create(lv_scr_act(), nullptr); buttonValidate->user_data = this; diff --git a/src/displayapp/screens/FlashLight.cpp b/src/displayapp/screens/FlashLight.cpp index bef15d0..2a1884f 100644 --- a/src/displayapp/screens/FlashLight.cpp +++ b/src/displayapp/screens/FlashLight.cpp @@ -28,7 +28,7 @@ FlashLight::FlashLight(Pinetime::Applications::DisplayApp* app, lv_label_set_text_static(flashLight, Symbols::highlight); lv_obj_align(flashLight, nullptr, LV_ALIGN_CENTER, 0, 0); - for (auto & i : indicators) { + for (auto& i : indicators) { i = lv_obj_create(lv_scr_act(), nullptr); lv_obj_set_size(i, 15, 10); lv_obj_set_style_local_border_width(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, 2); @@ -64,7 +64,7 @@ void FlashLight::SetColors() { if (isOn) { lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); - for (auto & i : indicators) { + for (auto& i : indicators) { lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_WHITE); lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); @@ -72,7 +72,7 @@ void FlashLight::SetColors() { } else { lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_BLACK); lv_obj_set_style_local_text_color(flashLight, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); - for (auto & i : indicators) { + for (auto& i : indicators) { lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); lv_obj_set_style_local_bg_color(i, LV_OBJ_PART_MAIN, LV_STATE_DISABLED, LV_COLOR_BLACK); lv_obj_set_style_local_border_color(i, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE); diff --git a/src/displayapp/screens/Metronome.h b/src/displayapp/screens/Metronome.h index 6e6589f..8933b17 100644 --- a/src/displayapp/screens/Metronome.h +++ b/src/displayapp/screens/Metronome.h @@ -30,7 +30,7 @@ namespace Pinetime { lv_obj_t *bpmArc, *bpmTap, *bpmValue; lv_obj_t *bpbDropdown, *currentBpbText; - lv_obj_t *playPause; + lv_obj_t* playPause; lv_task_t* taskRefresh; }; diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 8bba8ce..d7fe93a 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -198,12 +198,12 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_t* alert_type = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(alert_type, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); - if(title == nullptr) { + if (title == nullptr) { lv_label_set_text_static(alert_type, "Notification"); } else { // copy title to label and replace newlines with spaces lv_label_set_text(alert_type, title); - char *pchar = strchr(lv_label_get_text(alert_type), '\n'); + char* pchar = strchr(lv_label_get_text(alert_type), '\n'); while (pchar != nullptr) { *pchar = ' '; pchar = strchr(pchar + 1, '\n'); diff --git a/src/displayapp/screens/Paddle.cpp b/src/displayapp/screens/Paddle.cpp index 2865db0..1fb2508 100644 --- a/src/displayapp/screens/Paddle.cpp +++ b/src/displayapp/screens/Paddle.cpp @@ -53,7 +53,7 @@ void Paddle::Refresh() { if (ballX >= LV_HOR_RES - ballSize - 1) { dx *= -1; dy += rand() % 3 - 1; // add a little randomization in wall bounce direction, one of [-1, 0, 1] - if (dy > 5) { // limit dy to be in range [-5 to 5] + if (dy > 5) { // limit dy to be in range [-5 to 5] dy = 5; } if (dy < -5) { diff --git a/src/displayapp/screens/PassKey.cpp b/src/displayapp/screens/PassKey.cpp index 13cdcc2..4057a7e 100644 --- a/src/displayapp/screens/PassKey.cpp +++ b/src/displayapp/screens/PassKey.cpp @@ -14,4 +14,3 @@ PassKey::PassKey(Pinetime::Applications::DisplayApp* app, uint32_t key) : Screen PassKey::~PassKey() { lv_obj_clean(lv_scr_act()); } - diff --git a/src/displayapp/screens/ScreenList.h b/src/displayapp/screens/ScreenList.h index e316e36..ad88294 100644 --- a/src/displayapp/screens/ScreenList.h +++ b/src/displayapp/screens/ScreenList.h @@ -17,8 +17,12 @@ namespace Pinetime { uint8_t initScreen, const std::array()>, N>&& screens, ScreenListModes mode) - : Screen(app), initScreen {initScreen}, screens {std::move(screens)}, mode {mode}, screenIndex{initScreen}, current {this->screens[initScreen]()} { - + : Screen(app), + initScreen {initScreen}, + screens {std::move(screens)}, + mode {mode}, + screenIndex {initScreen}, + current {this->screens[initScreen]()} { } ScreenList(const ScreenList&) = delete; diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index 6899567..d0db59c 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -166,8 +166,12 @@ void StopWatch::stopLapBtnEventHandler(lv_event_t event) { lapBuffer.addLaps(currentTimeSeparated); lapNr++; if (lapBuffer[1]) { - lv_label_set_text_fmt( - lapOneText, "#%2d %2d:%02d.%02d", (lapNr - 1), lapBuffer[1]->mins, lapBuffer[1]->secs, lapBuffer[1]->hundredths); + lv_label_set_text_fmt(lapOneText, + "#%2d %2d:%02d.%02d", + (lapNr - 1), + lapBuffer[1]->mins, + lapBuffer[1]->secs, + lapBuffer[1]->hundredths); } if (lapBuffer[0]) { lv_label_set_text_fmt(lapTwoText, "#%2d %2d:%02d.%02d", lapNr, lapBuffer[0]->mins, lapBuffer[0]->secs, lapBuffer[0]->hundredths); diff --git a/src/displayapp/screens/Tile.cpp b/src/displayapp/screens/Tile.cpp index e90c753..cce1d2e 100644 --- a/src/displayapp/screens/Tile.cpp +++ b/src/displayapp/screens/Tile.cpp @@ -120,7 +120,8 @@ void Tile::UpdateScreen() { } void Tile::OnValueChangedEvent(lv_obj_t* obj, uint32_t buttonId) { - if(obj != btnm1) return; + if (obj != btnm1) + return; app->StartApp(apps[buttonId], DisplayApp::FullRefreshDirections::Up); running = false; diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index dd5b292..251a560 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -12,35 +12,33 @@ LV_IMG_DECLARE(bg_clock); using namespace Pinetime::Applications::Screens; namespace { -constexpr int16_t HourLength = 70; -constexpr int16_t MinuteLength = 90; -constexpr int16_t SecondLength = 110; + constexpr int16_t HourLength = 70; + constexpr int16_t MinuteLength = 90; + constexpr int16_t SecondLength = 110; -// sin(90) = 1 so the value of _lv_trigo_sin(90) is the scaling factor -const auto LV_TRIG_SCALE = _lv_trigo_sin(90); + // sin(90) = 1 so the value of _lv_trigo_sin(90) is the scaling factor + const auto LV_TRIG_SCALE = _lv_trigo_sin(90); -int16_t Cosine(int16_t angle) { - return _lv_trigo_sin(angle + 90); -} + int16_t Cosine(int16_t angle) { + return _lv_trigo_sin(angle + 90); + } -int16_t Sine(int16_t angle) { - return _lv_trigo_sin(angle); -} + int16_t Sine(int16_t angle) { + return _lv_trigo_sin(angle); + } -int16_t CoordinateXRelocate(int16_t x) { - return (x + LV_HOR_RES / 2); -} + int16_t CoordinateXRelocate(int16_t x) { + return (x + LV_HOR_RES / 2); + } -int16_t CoordinateYRelocate(int16_t y) { - return std::abs(y - LV_HOR_RES / 2); -} + int16_t CoordinateYRelocate(int16_t y) { + return std::abs(y - LV_HOR_RES / 2); + } -lv_point_t CoordinateRelocate(int16_t radius, int16_t angle) { - return lv_point_t{ - .x = CoordinateXRelocate(radius * static_cast(Sine(angle)) / LV_TRIG_SCALE), - .y = CoordinateYRelocate(radius * static_cast(Cosine(angle)) / LV_TRIG_SCALE) - }; -} + lv_point_t CoordinateRelocate(int16_t radius, int16_t angle) { + return lv_point_t {.x = CoordinateXRelocate(radius * static_cast(Sine(angle)) / LV_TRIG_SCALE), + .y = CoordinateYRelocate(radius * static_cast(Cosine(angle)) / LV_TRIG_SCALE)}; + } } diff --git a/src/displayapp/screens/WatchFaceDigital.cpp b/src/displayapp/screens/WatchFaceDigital.cpp index 1df3825..d10f853 100644 --- a/src/displayapp/screens/WatchFaceDigital.cpp +++ b/src/displayapp/screens/WatchFaceDigital.cpp @@ -160,11 +160,19 @@ void WatchFaceDigital::Refresh() { if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { if (settingsController.GetClockType() == Controllers::Settings::ClockType::H24) { - lv_label_set_text_fmt( - label_date, "%s %d %s %d", dateTimeController.DayOfWeekShortToString(), day, dateTimeController.MonthShortToString(), year); + lv_label_set_text_fmt(label_date, + "%s %d %s %d", + dateTimeController.DayOfWeekShortToString(), + day, + dateTimeController.MonthShortToString(), + year); } else { - lv_label_set_text_fmt( - label_date, "%s %s %d %d", dateTimeController.DayOfWeekShortToString(), dateTimeController.MonthShortToString(), day, year); + lv_label_set_text_fmt(label_date, + "%s %s %d %d", + dateTimeController.DayOfWeekShortToString(), + dateTimeController.MonthShortToString(), + day, + year); } lv_obj_realign(label_date); diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.cpp b/src/displayapp/screens/WatchFacePineTimeStyle.cpp index a777241..dad2f4c 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.cpp +++ b/src/displayapp/screens/WatchFacePineTimeStyle.cpp @@ -44,7 +44,7 @@ namespace { } bool IsBleIconVisible(bool isRadioEnabled, bool isConnected) { - if(!isRadioEnabled) { + if (!isRadioEnabled) { return true; } return isConnected; @@ -52,12 +52,12 @@ namespace { } WatchFacePineTimeStyle::WatchFacePineTimeStyle(DisplayApp* app, - Controllers::DateTime& dateTimeController, - Controllers::Battery& batteryController, - Controllers::Ble& bleController, - Controllers::NotificationManager& notificatioManager, - Controllers::Settings& settingsController, - Controllers::MotionController& motionController) + Controllers::DateTime& dateTimeController, + Controllers::Battery& batteryController, + Controllers::Ble& bleController, + Controllers::NotificationManager& notificatioManager, + Controllers::Settings& settingsController, + Controllers::MotionController& motionController) : Screen(app), currentDateTime {{}}, dateTimeController {dateTimeController}, diff --git a/src/displayapp/screens/WatchFacePineTimeStyle.h b/src/displayapp/screens/WatchFacePineTimeStyle.h index cfabc2c..6f44f94 100644 --- a/src/displayapp/screens/WatchFacePineTimeStyle.h +++ b/src/displayapp/screens/WatchFacePineTimeStyle.h @@ -25,12 +25,12 @@ namespace Pinetime { class WatchFacePineTimeStyle : public Screen { public: WatchFacePineTimeStyle(DisplayApp* app, - Controllers::DateTime& dateTimeController, - Controllers::Battery& batteryController, - Controllers::Ble& bleController, - Controllers::NotificationManager& notificatioManager, - Controllers::Settings& settingsController, - Controllers::MotionController& motionController); + Controllers::DateTime& dateTimeController, + Controllers::Battery& batteryController, + Controllers::Ble& bleController, + Controllers::NotificationManager& notificatioManager, + Controllers::Settings& settingsController, + Controllers::MotionController& motionController); ~WatchFacePineTimeStyle() override; bool OnTouchEvent(TouchEvents event) override; @@ -38,7 +38,7 @@ namespace Pinetime { void Refresh() override; - void UpdateSelected(lv_obj_t *object, lv_event_t event); + void UpdateSelected(lv_obj_t* object, lv_event_t event); private: uint8_t displayedHour = -1; diff --git a/src/displayapp/screens/WatchFaceTerminal.cpp b/src/displayapp/screens/WatchFaceTerminal.cpp index 80d736c..c899648 100644 --- a/src/displayapp/screens/WatchFaceTerminal.cpp +++ b/src/displayapp/screens/WatchFaceTerminal.cpp @@ -89,7 +89,7 @@ void WatchFaceTerminal::Refresh() { bleState = bleController.IsConnected(); bleRadioEnabled = bleController.IsRadioEnabled(); if (bleState.IsUpdated() || bleRadioEnabled.IsUpdated()) { - if(!bleRadioEnabled.Get()) { + if (!bleRadioEnabled.Get()) { lv_label_set_text_static(connectState, "[STAT]#0082fc Disabled#"); } else { if (bleState.Get()) { diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index fe8f3cb..708d510 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -44,7 +44,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, static constexpr uint8_t barHeight = 20 + innerDistance; static constexpr uint8_t buttonHeight = (LV_VER_RES_MAX - barHeight - innerDistance) / 2; static constexpr uint8_t buttonWidth = (LV_HOR_RES_MAX - innerDistance) / 2; // wide buttons - //static constexpr uint8_t buttonWidth = buttonHeight; // square buttons + // static constexpr uint8_t buttonWidth = buttonHeight; // square buttons static constexpr uint8_t buttonXOffset = (LV_HOR_RES_MAX - buttonWidth * 2 - innerDistance) / 2; lv_style_init(&btn_style); @@ -67,7 +67,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_obj_set_event_cb(btn2, ButtonEventHandler); lv_obj_add_style(btn2, LV_BTN_PART_MAIN, &btn_style); lv_obj_set_size(btn2, buttonWidth, buttonHeight); - lv_obj_align(btn2, nullptr, LV_ALIGN_IN_TOP_RIGHT, - buttonXOffset, barHeight); + lv_obj_align(btn2, nullptr, LV_ALIGN_IN_TOP_RIGHT, -buttonXOffset, barHeight); lv_obj_t* lbl_btn; lbl_btn = lv_label_create(btn2, nullptr); @@ -98,7 +98,7 @@ QuickSettings::QuickSettings(Pinetime::Applications::DisplayApp* app, lv_obj_set_event_cb(btn4, ButtonEventHandler); lv_obj_add_style(btn4, LV_BTN_PART_MAIN, &btn_style); lv_obj_set_size(btn4, buttonWidth, buttonHeight); - lv_obj_align(btn4, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, - buttonXOffset, 0); + lv_obj_align(btn4, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, -buttonXOffset, 0); lbl_btn = lv_label_create(btn4, nullptr); lv_obj_set_style_local_text_font(lbl_btn, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_48); diff --git a/src/displayapp/screens/settings/SettingBluetooth.cpp b/src/displayapp/screens/settings/SettingBluetooth.cpp index 2fc5d95..c66be3e 100644 --- a/src/displayapp/screens/settings/SettingBluetooth.cpp +++ b/src/displayapp/screens/settings/SettingBluetooth.cpp @@ -90,4 +90,3 @@ void SettingBluetooth::OnBluetoothEnabled(lv_obj_t* object, lv_event_t event) { settingsController.SetBleRadioEnabled(true); } } - diff --git a/src/displayapp/screens/settings/SettingDisplay.cpp b/src/displayapp/screens/settings/SettingDisplay.cpp index 229143f..bf2087a 100644 --- a/src/displayapp/screens/settings/SettingDisplay.cpp +++ b/src/displayapp/screens/settings/SettingDisplay.cpp @@ -46,7 +46,7 @@ SettingDisplay::SettingDisplay(Pinetime::Applications::DisplayApp* app, Pinetime char buffer[12]; for (unsigned int i = 0; i < options.size(); i++) { cbOption[i] = lv_checkbox_create(container1, nullptr); - sprintf(buffer, "%3d seconds", options[i] / 1000); + sprintf(buffer, "%3d seconds", options[i] / 1000); lv_checkbox_set_text(cbOption[i], buffer); cbOption[i]->user_data = this; lv_obj_set_event_cb(cbOption[i], event_handler); diff --git a/src/displayapp/screens/settings/SettingSetDate.cpp b/src/displayapp/screens/settings/SettingSetDate.cpp index 8bfded3..7acf0c1 100644 --- a/src/displayapp/screens/settings/SettingSetDate.cpp +++ b/src/displayapp/screens/settings/SettingSetDate.cpp @@ -15,23 +15,22 @@ namespace { constexpr int16_t POS_Y_TEXT = -6; constexpr int16_t POS_Y_MINUS = 40; - void event_handler(lv_obj_t * obj, lv_event_t event) { - auto* screen = static_cast(obj->user_data); + void event_handler(lv_obj_t* obj, lv_event_t event) { + auto* screen = static_cast(obj->user_data); screen->HandleButtonPress(obj, event); } } -SettingSetDate::SettingSetDate(Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::DateTime &dateTimeController) : - Screen(app), - dateTimeController {dateTimeController} { - lv_obj_t * title = lv_label_create(lv_scr_act(), nullptr); +SettingSetDate::SettingSetDate(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::DateTime& dateTimeController) + : Screen(app), dateTimeController {dateTimeController} { + lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr); lv_label_set_text_static(title, "Set current date"); lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 15, 15); - lv_obj_t * icon = lv_label_create(lv_scr_act(), nullptr); + lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); - + lv_label_set_text_static(icon, Symbols::clock); lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); @@ -113,7 +112,7 @@ SettingSetDate::~SettingSetDate() { lv_obj_clean(lv_scr_act()); } -void SettingSetDate::HandleButtonPress(lv_obj_t *object, lv_event_t event) { +void SettingSetDate::HandleButtonPress(lv_obj_t* object, lv_event_t event) { if (event != LV_EVENT_CLICKED) return; @@ -194,5 +193,6 @@ void SettingSetDate::CheckDay() { void SettingSetDate::UpdateMonthLabel() { lv_label_set_text_static( - lblMonth, Pinetime::Controllers::DateTime::MonthShortToStringLow(static_cast(monthValue))); + lblMonth, + Pinetime::Controllers::DateTime::MonthShortToStringLow(static_cast(monthValue))); } diff --git a/src/displayapp/screens/settings/SettingSetDate.h b/src/displayapp/screens/settings/SettingSetDate.h index 477337f..a179594 100644 --- a/src/displayapp/screens/settings/SettingSetDate.h +++ b/src/displayapp/screens/settings/SettingSetDate.h @@ -8,33 +8,33 @@ namespace Pinetime { namespace Applications { namespace Screens { - class SettingSetDate : public Screen{ - public: - SettingSetDate(DisplayApp* app, Pinetime::Controllers::DateTime &dateTimeController); - ~SettingSetDate() override; + class SettingSetDate : public Screen { + public: + SettingSetDate(DisplayApp* app, Pinetime::Controllers::DateTime& dateTimeController); + ~SettingSetDate() override; - void HandleButtonPress(lv_obj_t *object, lv_event_t event); - - private: - Controllers::DateTime& dateTimeController; + void HandleButtonPress(lv_obj_t* object, lv_event_t event); - int dayValue; - int monthValue; - int yearValue; - lv_obj_t * lblDay; - lv_obj_t * lblMonth; - lv_obj_t * lblYear; - lv_obj_t * btnDayPlus; - lv_obj_t * btnDayMinus; - lv_obj_t * btnMonthPlus; - lv_obj_t * btnMonthMinus; - lv_obj_t * btnYearPlus; - lv_obj_t * btnYearMinus; - lv_obj_t * btnSetTime; + private: + Controllers::DateTime& dateTimeController; - int MaximumDayOfMonth() const; - void CheckDay(); - void UpdateMonthLabel(); + int dayValue; + int monthValue; + int yearValue; + lv_obj_t* lblDay; + lv_obj_t* lblMonth; + lv_obj_t* lblYear; + lv_obj_t* btnDayPlus; + lv_obj_t* btnDayMinus; + lv_obj_t* btnMonthPlus; + lv_obj_t* btnMonthMinus; + lv_obj_t* btnYearPlus; + lv_obj_t* btnYearMinus; + lv_obj_t* btnSetTime; + + int MaximumDayOfMonth() const; + void CheckDay(); + void UpdateMonthLabel(); }; } } diff --git a/src/displayapp/screens/settings/SettingShakeThreshold.cpp b/src/displayapp/screens/settings/SettingShakeThreshold.cpp index 0cf5821..aac1eaf 100644 --- a/src/displayapp/screens/settings/SettingShakeThreshold.cpp +++ b/src/displayapp/screens/settings/SettingShakeThreshold.cpp @@ -64,9 +64,9 @@ SettingShakeThreshold::SettingShakeThreshold(DisplayApp* app, vDecay = xTaskGetTickCount(); calibrating = false; EnableForCal = false; - if(!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake)){ + if (!settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::Shake)) { EnableForCal = true; - settingsController.setWakeUpMode(Pinetime::Controllers::Settings::WakeUpMode::Shake,true); + settingsController.setWakeUpMode(Pinetime::Controllers::Settings::WakeUpMode::Shake, true); } refreshTask = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); } @@ -74,8 +74,8 @@ SettingShakeThreshold::SettingShakeThreshold(DisplayApp* app, SettingShakeThreshold::~SettingShakeThreshold() { settingsController.SetShakeThreshold(lv_arc_get_value(positionArc)); - if(EnableForCal){ - settingsController.setWakeUpMode(Pinetime::Controllers::Settings::WakeUpMode::Shake,false); + if (EnableForCal) { + settingsController.setWakeUpMode(Pinetime::Controllers::Settings::WakeUpMode::Shake, false); EnableForCal = false; } lv_task_del(refreshTask); diff --git a/src/displayapp/screens/settings/SettingShakeThreshold.h b/src/displayapp/screens/settings/SettingShakeThreshold.h index 37f4a65..4331946 100644 --- a/src/displayapp/screens/settings/SettingShakeThreshold.h +++ b/src/displayapp/screens/settings/SettingShakeThreshold.h @@ -28,8 +28,8 @@ namespace Pinetime { System::SystemTask& systemTask; uint8_t calibrating; bool EnableForCal; - uint32_t vDecay,vCalTime; - lv_obj_t *positionArc, *animArc,*calButton, *calLabel; + uint32_t vDecay, vCalTime; + lv_obj_t *positionArc, *animArc, *calButton, *calLabel; lv_task_t* refreshTask; }; } diff --git a/src/displayapp/screens/settings/SettingSteps.cpp b/src/displayapp/screens/settings/SettingSteps.cpp index 5ca3eec..e92600c 100644 --- a/src/displayapp/screens/settings/SettingSteps.cpp +++ b/src/displayapp/screens/settings/SettingSteps.cpp @@ -12,15 +12,12 @@ namespace { } } -SettingSteps::SettingSteps( - Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::Settings &settingsController) : - Screen(app), - settingsController{settingsController} -{ +SettingSteps::SettingSteps(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Settings& settingsController) + : Screen(app), settingsController {settingsController} { - lv_obj_t * container1 = lv_cont_create(lv_scr_act(), nullptr); + lv_obj_t* container1 = lv_cont_create(lv_scr_act(), nullptr); - //lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); + // lv_obj_set_style_local_bg_color(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x111111)); lv_obj_set_style_local_bg_opa(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); lv_obj_set_style_local_pad_all(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 10); lv_obj_set_style_local_pad_inner(container1, LV_CONT_PART_MAIN, LV_STATE_DEFAULT, 5); @@ -31,13 +28,13 @@ SettingSteps::SettingSteps( lv_cont_set_layout(container1, LV_LAYOUT_COLUMN_LEFT); lv_obj_t* title = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text_static(title,"Daily steps goal"); + lv_label_set_text_static(title, "Daily steps goal"); lv_label_set_align(title, LV_LABEL_ALIGN_CENTER); lv_obj_align(title, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 15, 15); lv_obj_t* icon = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(icon, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_ORANGE); - + lv_label_set_text_static(icon, Symbols::shoe); lv_label_set_align(icon, LV_LABEL_ALIGN_CENTER); lv_obj_align(icon, title, LV_ALIGN_OUT_LEFT_MID, -10, 0); @@ -61,7 +58,6 @@ SettingSteps::SettingSteps( lv_obj_set_event_cb(btnMinus, event_handler); lv_obj_align(btnMinus, lv_scr_act(), LV_ALIGN_CENTER, -55, 80); lv_obj_set_style_local_value_str(btnMinus, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, "-"); - } SettingSteps::~SettingSteps() { @@ -69,24 +65,23 @@ SettingSteps::~SettingSteps() { settingsController.SaveSettings(); } -void SettingSteps::UpdateSelected(lv_obj_t *object, lv_event_t event) { +void SettingSteps::UpdateSelected(lv_obj_t* object, lv_event_t event) { uint32_t value = settingsController.GetStepsGoal(); - if(object == btnPlus && (event == LV_EVENT_PRESSED)) { + if (object == btnPlus && (event == LV_EVENT_PRESSED)) { value += 1000; - if ( value <= 500000 ) { + if (value <= 500000) { settingsController.SetStepsGoal(value); lv_label_set_text_fmt(stepValue, "%lu", settingsController.GetStepsGoal()); lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); } } - if(object == btnMinus && (event == LV_EVENT_PRESSED)) { + if (object == btnMinus && (event == LV_EVENT_PRESSED)) { value -= 1000; - if ( value >= 1000 ) { + if (value >= 1000) { settingsController.SetStepsGoal(value); lv_label_set_text_fmt(stepValue, "%lu", settingsController.GetStepsGoal()); lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); } } - } diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index bc7efcc..a91b8f7 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -13,18 +13,19 @@ Settings::Settings(Pinetime::Applications::DisplayApp* app, Pinetime::Controller settingsController {settingsController}, screens {app, settingsController.GetSettingsMenu(), - {[this]() -> std::unique_ptr { - return CreateScreen1(); - }, - [this]() -> std::unique_ptr { - return CreateScreen2(); - }, - [this]() -> std::unique_ptr { - return CreateScreen3(); - }, - [this]() -> std::unique_ptr { - return CreateScreen4(); - }, + { + [this]() -> std::unique_ptr { + return CreateScreen1(); + }, + [this]() -> std::unique_ptr { + return CreateScreen2(); + }, + [this]() -> std::unique_ptr { + return CreateScreen3(); + }, + [this]() -> std::unique_ptr { + return CreateScreen4(); + }, }, Screens::ScreenListModes::UpDown} { } @@ -53,7 +54,8 @@ std::unique_ptr Settings::CreateScreen2() { {Symbols::shoe, "Steps", Apps::SettingSteps}, {Symbols::clock, "Set date", Apps::SettingSetDate}, {Symbols::clock, "Set time", Apps::SettingSetTime}, - {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}}}; + {Symbols::batteryHalf, "Battery", Apps::BatteryInfo}, + }}; return std::make_unique(1, 4, app, settingsController, applications); } @@ -64,7 +66,7 @@ std::unique_ptr Settings::CreateScreen3() { {Symbols::clock, "Chimes", Apps::SettingChimes}, {Symbols::tachometer, "Shake Calib.", Apps::SettingShakeThreshold}, {Symbols::check, "Firmware", Apps::FirmwareValidation}, - {Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth} + {Symbols::bluetooth, "Bluetooth", Apps::SettingBluetooth}, }}; return std::make_unique(2, 4, app, settingsController, applications); @@ -76,7 +78,7 @@ std::unique_ptr Settings::CreateScreen4() { {Symbols::list, "About", Apps::SysInfo}, {Symbols::none, "None", Apps::None}, {Symbols::none, "None", Apps::None}, - {Symbols::none, "None", Apps::None} + {Symbols::none, "None", Apps::None}, }}; return std::make_unique(3, 4, app, settingsController, applications); diff --git a/src/drivers/Bma421.cpp b/src/drivers/Bma421.cpp index 2f60f42..539cc8d 100644 --- a/src/drivers/Bma421.cpp +++ b/src/drivers/Bma421.cpp @@ -42,10 +42,16 @@ void Bma421::Init() { if (ret != BMA4_OK) return; - switch(bma.chip_id) { - case BMA423_CHIP_ID: deviceType = DeviceTypes::BMA421; break; - case BMA425_CHIP_ID: deviceType = DeviceTypes::BMA425; break; - default: deviceType = DeviceTypes::Unknown; break; + switch (bma.chip_id) { + case BMA423_CHIP_ID: + deviceType = DeviceTypes::BMA421; + break; + case BMA425_CHIP_ID: + deviceType = DeviceTypes::BMA425; + break; + default: + deviceType = DeviceTypes::Unknown; + break; } ret = bma423_write_config_file(&bma); diff --git a/src/drivers/Bma421.h b/src/drivers/Bma421.h index ace644b..ac5c707 100644 --- a/src/drivers/Bma421.h +++ b/src/drivers/Bma421.h @@ -6,11 +6,7 @@ namespace Pinetime { class TwiMaster; class Bma421 { public: - enum class DeviceTypes : uint8_t { - Unknown, - BMA421, - BMA425 - }; + enum class DeviceTypes : uint8_t { Unknown, BMA421, BMA425 }; struct Values { uint32_t steps; int16_t x; diff --git a/src/drivers/Cst816s.cpp b/src/drivers/Cst816s.cpp index e9573df..cf10c89 100644 --- a/src/drivers/Cst816s.cpp +++ b/src/drivers/Cst816s.cpp @@ -80,14 +80,9 @@ Cst816S::TouchInfos Cst816S::GetTouchInfo() { Gestures gesture = static_cast(touchData[gestureIndex]); // Validity check - if(x >= maxX || y >= maxY || - (gesture != Gestures::None && - gesture != Gestures::SlideDown && - gesture != Gestures::SlideUp && - gesture != Gestures::SlideLeft && - gesture != Gestures::SlideRight && - gesture != Gestures::SingleTap && - gesture != Gestures::DoubleTap && + if (x >= maxX || y >= maxY || + (gesture != Gestures::None && gesture != Gestures::SlideDown && gesture != Gestures::SlideUp && gesture != Gestures::SlideLeft && + gesture != Gestures::SlideRight && gesture != Gestures::SingleTap && gesture != Gestures::DoubleTap && gesture != Gestures::LongPress)) { info.isValid = false; return info; diff --git a/src/drivers/Cst816s.h b/src/drivers/Cst816s.h index 4a548d4..9d426c9 100644 --- a/src/drivers/Cst816s.h +++ b/src/drivers/Cst816s.h @@ -44,21 +44,22 @@ namespace Pinetime { uint8_t GetFwVersion() const { return fwVersion; } + private: bool CheckDeviceIds(); // Unused/Unavailable commented out static constexpr uint8_t gestureIndex = 1; static constexpr uint8_t touchPointNumIndex = 2; - //static constexpr uint8_t touchEventIndex = 3; + // static constexpr uint8_t touchEventIndex = 3; static constexpr uint8_t touchXHighIndex = 3; static constexpr uint8_t touchXLowIndex = 4; - //static constexpr uint8_t touchIdIndex = 5; + // static constexpr uint8_t touchIdIndex = 5; static constexpr uint8_t touchYHighIndex = 5; static constexpr uint8_t touchYLowIndex = 6; - //static constexpr uint8_t touchStep = 6; - //static constexpr uint8_t touchXYIndex = 7; - //static constexpr uint8_t touchMiscIndex = 8; + // static constexpr uint8_t touchStep = 6; + // static constexpr uint8_t touchXYIndex = 7; + // static constexpr uint8_t touchMiscIndex = 8; static constexpr uint8_t maxX = 240; static constexpr uint8_t maxY = 240; diff --git a/src/drivers/PinMap.h b/src/drivers/PinMap.h index 579bf38..167a877 100644 --- a/src/drivers/PinMap.h +++ b/src/drivers/PinMap.h @@ -3,18 +3,18 @@ namespace Pinetime { namespace PinMap { - - #ifdef WATCH_P8 - // COLMI P8 - static constexpr uint8_t Charging = 19; - static constexpr uint8_t Cst816sReset = 13; - static constexpr uint8_t Button = 17; - #else - // Pinetime - static constexpr uint8_t Charging = 12; - static constexpr uint8_t Cst816sReset = 10; - static constexpr uint8_t Button = 13; - #endif + +#ifdef WATCH_P8 + // COLMI P8 + static constexpr uint8_t Charging = 19; + static constexpr uint8_t Cst816sReset = 13; + static constexpr uint8_t Button = 17; +#else + // Pinetime + static constexpr uint8_t Charging = 12; + static constexpr uint8_t Cst816sReset = 10; + static constexpr uint8_t Button = 13; +#endif static constexpr uint8_t Cst816sIrq = 28; static constexpr uint8_t PowerPresent = 19; diff --git a/src/drivers/SpiMaster.cpp b/src/drivers/SpiMaster.cpp index 747dbc8..38f72fe 100644 --- a/src/drivers/SpiMaster.cpp +++ b/src/drivers/SpiMaster.cpp @@ -10,7 +10,7 @@ SpiMaster::SpiMaster(const SpiMaster::SpiModule spi, const SpiMaster::Parameters } bool SpiMaster::Init() { - if(mutex == nullptr) { + if (mutex == nullptr) { mutex = xSemaphoreCreateBinary(); ASSERT(mutex != nullptr); } diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp index 9b456d5..25d23c2 100644 --- a/src/drivers/TwiMaster.cpp +++ b/src/drivers/TwiMaster.cpp @@ -13,19 +13,13 @@ TwiMaster::TwiMaster(NRF_TWIM_Type* module, uint32_t frequency, uint8_t pinSda, } void TwiMaster::ConfigurePins() const { - NRF_GPIO->PIN_CNF[pinScl] = - (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | - (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | - (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | - (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | - (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); - - NRF_GPIO->PIN_CNF[pinSda] = - (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | - (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | - (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | - (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | - (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); + NRF_GPIO->PIN_CNF[pinScl] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | + (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | + (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); + + NRF_GPIO->PIN_CNF[pinSda] = (GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | + (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos) | (GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | + (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos); } void TwiMaster::Init() { diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 2f689b9..bc22762 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -6,7 +6,7 @@ using namespace Pinetime::Applications; HeartRateTask::HeartRateTask(Drivers::Hrs3300& heartRateSensor, Controllers::HeartRateController& controller) - : heartRateSensor {heartRateSensor}, controller {controller}, ppg{} { + : heartRateSensor {heartRateSensor}, controller {controller}, ppg {} { } void HeartRateTask::Start() { diff --git a/src/main.cpp b/src/main.cpp index fa492d0..4f34276 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -159,7 +159,7 @@ Pinetime::System::SystemTask systemTask(spi, touchHandler, buttonHandler); -/* Variable Declarations for variables in noinit SRAM +/* Variable Declarations for variables in noinit SRAM Increment NoInit_MagicValue upon adding variables to this area */ extern uint32_t __start_noinit_data; @@ -168,7 +168,6 @@ static constexpr uint32_t NoInit_MagicValue = 0xDEAD0000; uint32_t NoInit_MagicWord __attribute__((section(".noinit"))); std::chrono::time_point NoInit_BackUpTime __attribute__((section(".noinit"))); - void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { if (pin == Pinetime::PinMap::Cst816sIrq) { systemTask.OnTouchEvent(); @@ -327,12 +326,11 @@ int main(void) { // retrieve version stored by bootloader Pinetime::BootloaderVersion::SetVersion(NRF_TIMER2->CC[0]); - if (NoInit_MagicWord == NoInit_MagicValue) { dateTimeController.SetCurrentTime(NoInit_BackUpTime); } else { - //Clear Memory to known state - memset(&__start_noinit_data,0,(uintptr_t)&__stop_noinit_data-(uintptr_t)&__start_noinit_data); + // Clear Memory to known state + memset(&__start_noinit_data, 0, (uintptr_t) &__stop_noinit_data - (uintptr_t) &__start_noinit_data); NoInit_MagicWord = NoInit_MagicValue; } diff --git a/src/recoveryLoader.cpp b/src/recoveryLoader.cpp index acec14c..27a79d9 100644 --- a/src/recoveryLoader.cpp +++ b/src/recoveryLoader.cpp @@ -28,7 +28,6 @@ Pinetime::Logging::NrfLogger logger; Pinetime::Logging::DummyLogger logger; #endif - static constexpr uint8_t displayWidth = 240; static constexpr uint8_t displayHeight = 240; static constexpr uint8_t bytesPerPixel = 2; diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h index 2e3456a..7a46e06 100644 --- a/src/systemtask/Messages.h +++ b/src/systemtask/Messages.h @@ -2,36 +2,36 @@ namespace Pinetime { namespace System { - enum class Messages { - GoToSleep, - GoToRunning, - TouchWakeUp, - OnNewTime, - OnNewNotification, - OnTimerDone, - OnNewCall, - BleConnected, - UpdateTimeOut, - BleFirmwareUpdateStarted, - BleFirmwareUpdateFinished, - OnTouchEvent, - HandleButtonEvent, - HandleButtonTimerEvent, - OnDisplayTaskSleeping, - EnableSleeping, - DisableSleeping, - OnNewDay, - OnNewHour, - OnNewHalfHour, - OnChargingEvent, - OnPairing, - SetOffAlarm, - StopRinging, - MeasureBatteryTimerExpired, - BatteryPercentageUpdated, - StartFileTransfer, - StopFileTransfer, - BleRadioEnableToggle - }; - } + enum class Messages { + GoToSleep, + GoToRunning, + TouchWakeUp, + OnNewTime, + OnNewNotification, + OnTimerDone, + OnNewCall, + BleConnected, + UpdateTimeOut, + BleFirmwareUpdateStarted, + BleFirmwareUpdateFinished, + OnTouchEvent, + HandleButtonEvent, + HandleButtonTimerEvent, + OnDisplayTaskSleeping, + EnableSleeping, + DisableSleeping, + OnNewDay, + OnNewHour, + OnNewHalfHour, + OnChargingEvent, + OnPairing, + SetOffAlarm, + StopRinging, + MeasureBatteryTimerExpired, + BatteryPercentageUpdated, + StartFileTransfer, + StopFileTransfer, + BleRadioEnableToggle + }; + } } diff --git a/src/systemtask/SystemMonitor.cpp b/src/systemtask/SystemMonitor.cpp index 90765e3..2edee7b 100644 --- a/src/systemtask/SystemMonitor.cpp +++ b/src/systemtask/SystemMonitor.cpp @@ -1,9 +1,9 @@ #include "systemtask/SystemTask.h" #if configUSE_TRACE_FACILITY == 1 -// FreeRtosMonitor -#include -#include -#include + // FreeRtosMonitor + #include + #include + #include void Pinetime::System::SystemMonitor::Process() { if (xTaskGetTickCount() - lastTick > 10000) { @@ -14,13 +14,14 @@ void Pinetime::System::SystemMonitor::Process() { NRF_LOG_INFO("Task [%s] - %d", tasksStatus[i].pcTaskName, tasksStatus[i].usStackHighWaterMark); if (tasksStatus[i].usStackHighWaterMark < 20) NRF_LOG_INFO("WARNING!!! Task %s task is nearly full, only %dB available", - tasksStatus[i].pcTaskName, - tasksStatus[i].usStackHighWaterMark * 4); + tasksStatus[i].pcTaskName, + tasksStatus[i].usStackHighWaterMark * 4); } lastTick = xTaskGetTickCount(); } } #else // DummyMonitor -void Pinetime::System::SystemMonitor::Process() {} +void Pinetime::System::SystemMonitor::Process() { +} #endif diff --git a/src/touchhandler/TouchHandler.h b/src/touchhandler/TouchHandler.h index fb3d265..332041e 100644 --- a/src/touchhandler/TouchHandler.h +++ b/src/touchhandler/TouchHandler.h @@ -11,30 +11,30 @@ namespace Pinetime { } namespace Controllers { class TouchHandler { - public: - explicit TouchHandler(Drivers::Cst816S&, Components::LittleVgl&); - void CancelTap(); - bool GetNewTouchInfo(); - void UpdateLvglTouchPoint(); + public: + explicit TouchHandler(Drivers::Cst816S&, Components::LittleVgl&); + void CancelTap(); + bool GetNewTouchInfo(); + void UpdateLvglTouchPoint(); - bool IsTouching() const { - return info.touching; - } - uint8_t GetX() const { - return info.x; - } - uint8_t GetY() const { - return info.y; - } - Pinetime::Applications::TouchEvents GestureGet(); - private: + bool IsTouching() const { + return info.touching; + } + uint8_t GetX() const { + return info.x; + } + uint8_t GetY() const { + return info.y; + } + Pinetime::Applications::TouchEvents GestureGet(); - Pinetime::Drivers::Cst816S::TouchInfos info; - Pinetime::Drivers::Cst816S& touchPanel; - Pinetime::Components::LittleVgl& lvgl; - Pinetime::Applications::TouchEvents gesture; - bool isCancelled = false; - bool gestureReleased = true; + private: + Pinetime::Drivers::Cst816S::TouchInfos info; + Pinetime::Drivers::Cst816S& touchPanel; + Pinetime::Components::LittleVgl& lvgl; + Pinetime::Applications::TouchEvents gesture; + bool isCancelled = false; + bool gestureReleased = true; }; } } -- cgit v0.10.2 From 03a510bd182cdb89005d75e0f8dacf734efce315 Mon Sep 17 00:00:00 2001 From: luz paz Date: Tue, 31 May 2022 15:17:36 -0400 Subject: Fix various typos Found via `codespell -q 3 -S ./src/libs -L ans,doubleclick,trough` diff --git a/bootloader/README.md b/bootloader/README.md index 1a02ebd..2cb6b8b 100644 --- a/bootloader/README.md +++ b/bootloader/README.md @@ -9,14 +9,14 @@ Integrating a BLE stack for the OTA functionality would have used to much memory When it is run, this bootloader looks in the SPI flash memory if a new firmware is available. It there is one, it *swaps* the current firmware with the new one (the new one is copied in the main flash memory, and the current one is copied in the SPI flash memory) and run the new one. If the new one fails to run properly, the bootloader is able to revert to the old one and mark the new one as not working. -As this bootloader does not provide any OTA capability, it is not able to actually download a new version of the application. Providing OTA functionality is thus the responsability of the application firmware. +As this bootloader does not provide any OTA capability, it is not able to actually download a new version of the application. Providing OTA functionality is thus the responsibility of the application firmware. # About MCUBoot MCUBoot is run at boot time. In normal operation, it just jumps to the reset handler of the application firmware to run it. Once the application firmware is running, MCUBoot does not run at all. ![MCUBoot boot sequence diagram](../doc/bootloader/boot.png "MCUBoot boot sequence diagram") -But MCUBoot does much more than that : it can upgrade the firmware that is currently running by a new one, and it is also able to revert to the previous version of the firmware in case the new one does not run propertly. +But MCUBoot does much more than that : it can upgrade the firmware that is currently running by a new one, and it is also able to revert to the previous version of the firmware in case the new one does not run properly. To do this, it uses 2 memory 'slots' : - **The primary slot** : it contains the current firmware, the one that will be executed by MCUBoot @@ -40,7 +40,7 @@ This chapter describes degraded cases that are handled by our bootloader and tho Case | Current bootloader | Solution -----|--------------------|---------------------------------------------- Data got corrupted during file transfer | [OK] Application firmware does a CRC check before applying the update, and does not proceed if it fails. | N/A -New firmware does not run at all (bad file) (1) | [NOK] MCU executes unknown instructions and will most likely end up in an infinite loop or freeze in an error handler. The bootloader does not run, it can do nothing, the MCU is stucked until next reset | [OK] The bootloader starts the watchdog just before running the new firmware. This way, the watchdog will reset the MCU after ~7s because the firmware does not refresh it. Bootloader reverts to the previous version of the firmware during the reset. +New firmware does not run at all (bad file) (1) | [NOK] MCU executes unknown instructions and will most likely end up in an infinite loop or freeze in an error handler. The bootloader does not run, it can do nothing, the MCU is stuck until next reset | [OK] The bootloader starts the watchdog just before running the new firmware. This way, the watchdog will reset the MCU after ~7s because the firmware does not refresh it. Bootloader reverts to the previous version of the firmware during the reset. New firmware runs, does not set the valid bit and does not refresh the watchdog | [NOK] The new firmware runs until the next reset. The bootloader will be able to revert to the previous firmware only during the next reset. If the new firmware does not run properly and does not reset, the bootloader can do nothing until the next reset | [OK] The bootloader starts the watchdog just before running the new firmware. This way, the watchdog will reset the MCU after ~7s because the firmware does not refresh it. Bootloader reverts to the previous version of the firmware during the reset. New firmware does not run properly, does not set the valid bit but refreshes the watchdog | [NOK] The bootloader will be able to revert to the previous firmware only during the next reset. If the new firmware does not run properly and does not reset, the bootloader can do nothing until the next reset | [~] Wait for the battery to drain. The CPU will reset the next time the device is charged and will be able to rollback to the previous version. New firmware does not run properly but sets the valid bit and refreshes the watchdog | [NOK] The bootloader won't revert to the previous version because the valid flag is set | [~] Wait for the battery to drain. The CPU will reset the next time the device is charged. Then, the bootloader must provide a way for the user to force the rollback to the previous version diff --git a/bootloader/ota-dfu-python/ble_secure_dfu_controller.py b/bootloader/ota-dfu-python/ble_secure_dfu_controller.py index 7065458..c2038eb 100644 --- a/bootloader/ota-dfu-python/ble_secure_dfu_controller.py +++ b/bootloader/ota-dfu-python/ble_secure_dfu_controller.py @@ -236,7 +236,7 @@ class BleDfuControllerSecure(NrfBleDfuController): self._dfu_send_command(Procedures.EXECUTE) self._wait_and_parse_notify() - print("Init packet successfully transfered") + print("Init packet successfully transferred") # -------------------------------------------------------------------------- # Send the Firmware image to peripheral device. @@ -319,5 +319,5 @@ class BleDfuControllerSecure(NrfBleDfuController): self._dfu_send_command(Procedures.EXECUTE) self._wait_and_parse_notify() - # If everything executed correctly, return amount of bytes transfered + # If everything executed correctly, return amount of bytes transferred return obj_max_size diff --git a/cmake-nRF5x/readme.md b/cmake-nRF5x/readme.md index 0127a2e..1a556b1 100755 --- a/cmake-nRF5x/readme.md +++ b/cmake-nRF5x/readme.md @@ -7,7 +7,7 @@ Cmake script for projects targeting Nordic Semiconductor nRF5x series devices us The script makes use of the following tools: - nRF5x SDK by Nordic Semiconductor - SoC specific drivers and libraries (also includes a lot of examples) -- JLink by Segger - interface software for the JLink familiy of programmers +- JLink by Segger - interface software for the JLink family of programmers - nrfjprog by Nordic Semiconductor - Wrapper utility around JLink - arm-non-eabi-gcc by ARM and the GCC Team - compiler toolchain for embedded (= bare metal) ARM chips @@ -15,11 +15,11 @@ The script makes use of the following tools: 1. Download this repo (or add as submodule) to the directory `cmake-nRF5x` in your project -1. Search the SDK `example` directory for a `sdk_config.h`, `main.c` and a linker script (normally named `_gcc_.ld`) that fits your chip and project needs. +1. Search the SDK `example` directory for a `sdk_config.h`, `main.c` and a linker script (normally named `_gcc_.ld`) that fits your chip and project needs. 1. Copy the `sdk_config.h` and the project `main.c` into a new directory `src`. Modify them as required for your project. -1. Copy the linker script into the root of your project. Rename it to just `gcc_.ld` For example: +1. Copy the linker script into the root of your project. Rename it to just `gcc_.ld` For example: ``` gcc_nrf51.ld diff --git a/doc/MemoryAnalysis.md b/doc/MemoryAnalysis.md index 376f98f..9afca4e 100644 --- a/doc/MemoryAnalysis.md +++ b/doc/MemoryAnalysis.md @@ -60,7 +60,7 @@ Puncover is really easy to install: - Launch a browser at http://localhost:5000/ ### Analysis -Using the MAP file and tools, we can easily see what symbols are using most of the flash memory. In this case, unsuprisingly, fonts and graphics are the largest use of flash memory. +Using the MAP file and tools, we can easily see what symbols are using most of the flash memory. In this case, unsurprisingly, fonts and graphics are the largest use of flash memory. ![Puncover](./memoryAnalysis/puncover-all-symbols.png) @@ -150,7 +150,7 @@ You can then display the file using objdump: hexdump ram.bin -v | less ``` -The stack is positionned at the end of the RAM -> 0xFFFF. Its size is 8192 bytes, so the end of the stack is at 0xE000. +The stack is positioned at the end of the RAM -> 0xFFFF. Its size is 8192 bytes, so the end of the stack is at 0xE000. On the following dump, the maximum stack usage is 520 bytes (0xFFFF - 0xFDF8): ``` diff --git a/doc/NavigationService.md b/doc/NavigationService.md index 5a4f69e..d890cb2 100644 --- a/doc/NavigationService.md +++ b/doc/NavigationService.md @@ -13,7 +13,7 @@ The service UUID is 00010000-78fc-48fe-8e23-433b3a1942d0 ## Characteristics ## Flags (UUID 00010001-78fc-48fe-8e23-433b3a1942d0) -All included icons are from pure-maps, which provides the actual routing from the client. The icon names ultimately come from the mapbox project "direction-icons", See https://github.com/rinigus/pure-maps/tree/master/qml/icons/navigation See the end of this document for the full lsit of supported icon names. +All included icons are from pure-maps, which provides the actual routing from the client. The icon names ultimately come from the mapbox project "direction-icons", See https://github.com/rinigus/pure-maps/tree/master/qml/icons/navigation See the end of this document for the full list of supported icon names. ## Narrative (UUID 00010002-78fc-48fe-8e23-433b3a1942d0) This is a client supplied string describing the upcoming instruction such as "At the roundabout take the first exit". diff --git a/doc/PinetimeStubWithNrf52DK.md b/doc/PinetimeStubWithNrf52DK.md index dcaad69..afa8a74 100644 --- a/doc/PinetimeStubWithNrf52DK.md +++ b/doc/PinetimeStubWithNrf52DK.md @@ -1,5 +1,5 @@ # Build a stub for PineTime using NRF52-DK -[NRF52-DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52-DK) is the official developpment kit for the NRF52832 SoC from Nordic Semiconductor used in the PineTime. +[NRF52-DK](https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52-DK) is the official development kit for the NRF52832 SoC from Nordic Semiconductor used in the PineTime. This development kit can be very useful for PineTime development: * You can use its embedded JLink SWD programmer/debugger to program and debug your code on the PineTime diff --git a/doc/ble.md b/doc/ble.md index d250263..8d59c2e 100644 --- a/doc/ble.md +++ b/doc/ble.md @@ -44,7 +44,7 @@ When starting, the firmware starts BLE advertising. It sends small messages that A companion application (running on a PC, Raspberry Pi, smartphone, etc.) which receives this advertising packet can request a connection to the device. This connection procedure allows the 2 devices to negotiate communication parameters, security keys, etc. -When the connection is established, the PineTime will try to discover services running on the companion application. For now **CTS** (**C**urrent **T**ime **S**ervice) and **ANS** (**A**lert **N**otification **S**ervice) are supported. +When the connection is established, the PineTime will try to discover services running on the companion application. For now **CTS** (**C**urrent **T**ime **S**ervice) and **ANS** (**A**lert **N**notification **S**ervice) are supported. If **CTS** is detected, it'll request the current time to the companion application. If **ANS** is detected, it will listen to new notifications coming from the companion application. @@ -146,14 +146,14 @@ The new alert characteristic allows sending new notifications to InfiniTime. It For example, here is what a normal notification looks like in Golang (language of `itd`): ```go -// \x00 is the category for simple alert, and there is one new notifcation, hence \x01. +// \x00 is the category for simple alert, and there is one new notification, hence \x01. "\x00\x01\x00Test Title\x00Test Body" ``` A call notification looks like so: ```go -// \x03 is the category for calls, and there is one new call notifcation, hence \x01. +// \x03 is the category for calls, and there is one new call notification, hence \x01. "\x03\x01\x00Mary" ``` diff --git a/doc/ble/connection_sequence.puml b/doc/ble/connection_sequence.puml index 5553182..b71a341 100644 --- a/doc/ble/connection_sequence.puml +++ b/doc/ble/connection_sequence.puml @@ -3,7 +3,7 @@ Pinetime --> CompanionApp: Start advertising group BLE Connection CompanionApp -> Pinetime: Connection request -CompanionApp <-> Pinetime: Connection parameters negociation, security procedure,... +CompanionApp <-> Pinetime: Connection parameters negotiation, security procedure,... end group Service Discovery diff --git a/doc/branches.md b/doc/branches.md index 3c86375..c12c764 100644 --- a/doc/branches.md +++ b/doc/branches.md @@ -5,7 +5,7 @@ The project is based on 2 main branches: - **master** : this branch is always ready to be deployed. It means that at any time, we should be able to build the branch and release a new version of the application. - **develop** : this branch contains the latest development that will be integrated in the next release once it's considered as stable. -New features should be implemented in **feature branches** created from **develop**. When the feature is ready, a pull-request is created and it'll be merge into **develop** when it is succesfully reviewed and accepted. +New features should be implemented in **feature branches** created from **develop**. When the feature is ready, a pull-request is created and it'll be merge into **develop** when it is successfully reviewed and accepted. To release a new version of the application, when develop is considered stable, a **release** branch is created from **develop**. This can be considered as a *release candidate* branch. When everything is OK, this release branch is merged into **master** and the release is generated (a tag is applied to git, the release note is finalized, binaries are built,...) from **master**. diff --git a/doc/buildAndProgram.md b/doc/buildAndProgram.md index 683f539..6362235 100644 --- a/doc/buildAndProgram.md +++ b/doc/buildAndProgram.md @@ -47,7 +47,7 @@ By default, this variable is set to *Release*. It compiles the code with size an The *Debug* mode disables all optimizations, which makes the code easier to debug. However, the binary size will likely be too big to fit in the internal flash memory. If you want to build and debug a *Debug* binary, you'll need to disable some parts of the code. For example, the icons for the **Navigation** app use a lot of memory space. You can comment the content of `m_iconMap` in the [Navigation](https://github.com/InfiniTimeOrg/InfiniTime/blob/develop/src/displayapp/screens/Navigation.h#L148) application to free some memory. ####(**) Note about **BUILD_DFU**: -DFU files are the files you'll need to install your build of InfiniTime using OTA (over-the-air) mecanism. To generate the DFU file, the Python tool [adafruit-nrfutil](https://github.com/adafruit/Adafruit_nRF52_nrfutil) is needed on your system. Check that this tool is properly installed before enabling this option. +DFU files are the files you'll need to install your build of InfiniTime using OTA (over-the-air) mechanism. To generate the DFU file, the Python tool [adafruit-nrfutil](https://github.com/adafruit/Adafruit_nRF52_nrfutil) is needed on your system. Check that this tool is properly installed before enabling this option. #### CMake command line for JLink ``` diff --git a/nrf52.svd b/nrf52.svd index da84887..240f5d6 100644 --- a/nrf52.svd +++ b/nrf52.svd @@ -13659,12 +13659,12 @@ POSSIBILITY OF SUCH DAMAGE.\n read NotPresent - Read: no overrun occured + Read: no overrun occurred 0 Present - Read: overrun occured + Read: overrun occurred 1 diff --git a/src/components/ble/DfuService.cpp b/src/components/ble/DfuService.cpp index 77dbe2e..1f06b69 100644 --- a/src/components/ble/DfuService.cpp +++ b/src/components/ble/DfuService.cpp @@ -246,7 +246,7 @@ int DfuService::ControlPointHandler(uint16_t connectionHandle, os_mbuf* om) { NRF_LOG_INFO("[DFU] -> Receive firmware image requested, but we are not in Start Init"); return 0; } - // TODO the chunk size is dependant of the implementation of the host application... + // TODO the chunk size is dependent of the implementation of the host application... dfuImage.Init(20, applicationSize, expectedCrc); NRF_LOG_INFO("[DFU] -> Starting receive firmware"); state = States::Data; diff --git a/src/components/ble/FSService.cpp b/src/components/ble/FSService.cpp index 8dc9ed6..fda6b39 100644 --- a/src/components/ble/FSService.cpp +++ b/src/components/ble/FSService.cpp @@ -81,7 +81,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { return -1; } memcpy(filepath, header->pathstr, plen); - filepath[plen] = 0; // Copy and null teminate string + filepath[plen] = 0; // Copy and null terminate string ReadResponse resp; os_mbuf* om; resp.command = commands::READ_DATA; @@ -148,7 +148,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { return -1; // TODO make this actually return a BLE notif } memcpy(filepath, header->pathstr, plen); - filepath[plen] = 0; // Copy and null teminate string + filepath[plen] = 0; // Copy and null terminate string fileSize = header->totalSize; WriteResponse resp; resp.command = commands::WRITE_PACING; @@ -193,7 +193,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { uint16_t plen = header->pathlen; char path[plen + 1] = {0}; memcpy(path, header->pathstr, plen); - path[plen] = 0; // Copy and null teminate string + path[plen] = 0; // Copy and null terminate string DelResponse resp {}; resp.command = commands::DELETE_STATUS; int res = fs.FileDelete(path); @@ -208,7 +208,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { uint16_t plen = header->pathlen; char path[plen + 1] = {0}; memcpy(path, header->pathstr, plen); - path[plen] = 0; // Copy and null teminate string + path[plen] = 0; // Copy and null terminate string MKDirResponse resp {}; resp.command = commands::MKDIR_STATUS; resp.modification_time = 0; @@ -223,7 +223,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { ListDirHeader* header = (ListDirHeader*) om->om_data; uint16_t plen = header->pathlen; char path[plen + 1] = {0}; - path[plen] = 0; // Copy and null teminate string + path[plen] = 0; // Copy and null terminate string memcpy(path, header->pathstr, plen); ListDirResponse resp {}; @@ -290,7 +290,7 @@ int FSService::FSCommandHandler(uint16_t connectionHandle, os_mbuf* om) { header->pathstr[plen] = 0; char path[header->NewPathLength + 1] = {0}; memcpy(path, &header->pathstr[plen + 1], header->NewPathLength); - path[header->NewPathLength] = 0; // Copy and null teminate string + path[header->NewPathLength] = 0; // Copy and null terminate string MoveResponse resp {}; resp.command = commands::MOVE_STATUS; int8_t res = (int8_t) fs.Rename(header->pathstr, path); diff --git a/src/displayapp/LittleVgl.cpp b/src/displayapp/LittleVgl.cpp index f401f52..64c9926 100644 --- a/src/displayapp/LittleVgl.cpp +++ b/src/displayapp/LittleVgl.cpp @@ -94,8 +94,8 @@ void LittleVgl::FlushDisplay(const lv_area_t* area, lv_color_t* color_p) { uint16_t y1, y2, width, height = 0; ulTaskNotifyTake(pdTRUE, 200); - // NOtification is still needed (even if there is a mutex on SPI) because of the DataCommand pin - // which cannot be set/clear during a transfert. + // Notification is still needed (even if there is a mutex on SPI) because of the DataCommand pin + // which cannot be set/clear during a transfer. if ((scrollDirection == LittleVgl::FullRefreshDirections::Down) && (area->y2 == visibleNbLines - 1)) { writeOffset = ((writeOffset + totalNbLines) - visibleNbLines) % totalNbLines; diff --git a/src/displayapp/fonts/generate.py b/src/displayapp/fonts/generate.py index f0af506..c172df0 100755 --- a/src/displayapp/fonts/generate.py +++ b/src/displayapp/fonts/generate.py @@ -43,7 +43,7 @@ def main(): if not os.path.exists(args.config): sys.exit(f'Error: the config file {args.config} does not exist.') if not os.access(args.config, os.R_OK): - sys.exit(f'Error: the config file {args.config} is not accessable (permissions?).') + sys.exit(f'Error: the config file {args.config} is not accessible (permissions?).') with open(args.config, 'r') as fd: data = json.load(fd) diff --git a/src/displayapp/screens/Screen.h b/src/displayapp/screens/Screen.h index 04bb152..e72a236 100644 --- a/src/displayapp/screens/Screen.h +++ b/src/displayapp/screens/Screen.h @@ -35,7 +35,7 @@ namespace Pinetime { private: T value {}; // NSDMI - default initialise type - bool isUpdated {true}; // NSDMI - use brace initilisation + bool isUpdated {true}; // NSDMI - use brace initialisation }; class Screen { diff --git a/src/drivers/Bma421_C/bma4.c b/src/drivers/Bma421_C/bma4.c index 59e2a72..8472147 100644 --- a/src/drivers/Bma421_C/bma4.c +++ b/src/drivers/Bma421_C/bma4.c @@ -621,7 +621,7 @@ static int8_t get_average_of_sensor_data(uint8_t accel_en, * * @param[in] accel_en : Variable to store status of accel * @param[in] accel_g_axis : Accel axis to FOC - * @param[in] avg_foc_data : Average value of sensor sample datas + * @param[in] avg_foc_data : Average value of sensor sample data * @param[in] dev : Structure instance of bma4_dev. * * @return Result of API execution status @@ -637,7 +637,7 @@ static int8_t validate_foc_position(uint8_t accel_en, /*! * @brief This internal API validates accel FOC axis given as input * - * @param[in] avg_foc_data : Average value of sensor sample datas + * @param[in] avg_foc_data : Average value of sensor sample data * @param[in] dev : Structure instance of bma4_dev. * * @return Result of API execution status diff --git a/src/drivers/Bma421_C/bma4_defs.h b/src/drivers/Bma421_C/bma4_defs.h index 2db99c0..45e4920 100644 --- a/src/drivers/Bma421_C/bma4_defs.h +++ b/src/drivers/Bma421_C/bma4_defs.h @@ -259,7 +259,7 @@ #define BMA4_ACCEL_RANGE_8G UINT8_C(2) #define BMA4_ACCEL_RANGE_16G UINT8_C(3) -/**\name CONDITION CHECK FOR READING AND WRTING DATA*/ +/**\name CONDITION CHECK FOR READING AND WRITING DATA*/ #define BMA4_MAX_VALUE_FIFO_FILTER UINT8_C(1) #define BMA4_MAX_VALUE_SPI3 UINT8_C(1) #define BMA4_MAX_VALUE_SELFTEST_AMP UINT8_C(1) diff --git a/src/sdk_config.h b/src/sdk_config.h index 7634dca..27c3852 100644 --- a/src/sdk_config.h +++ b/src/sdk_config.h @@ -1224,7 +1224,7 @@ // PM_SERVICE_CHANGED_ENABLED - Enable/disable the service changed management for GATT server in Peer Manager. -// If not using a GATT server, or using a server wihout a service changed characteristic, +// If not using a GATT server, or using a server without a service changed characteristic, // disable this to save code space. #ifndef PM_SERVICE_CHANGED_ENABLED @@ -7667,7 +7667,7 @@ #endif // USE_COMP - Use the comparator to implement the capacitive sensor driver. -// Due to Anomaly 84, COMP I_SOURCE is not functional. It has too high a varation. +// Due to Anomaly 84, COMP I_SOURCE is not functional. It has too high a variation. //========================================================== #ifndef USE_COMP #define USE_COMP 0 @@ -8200,7 +8200,7 @@ #define NRF_LOG_DEFAULT_LEVEL 3 #endif -// NRF_LOG_DEFERRED - Enable deffered logger. +// NRF_LOG_DEFERRED - Enable deferred logger. // Log data is buffered and can be processed in idle. @@ -11620,7 +11620,7 @@ #define NRF_SDH_ANT_OBSERVER_PRIO_LEVELS 2 #endif -// ANT Observers priorities - Invididual priorities +// ANT Observers priorities - Individual priorities //========================================================== // ANT_BPWR_ANT_OBSERVER_PRIO @@ -11696,7 +11696,7 @@ // BLE Stack configuration - Stack configuration parameters // The SoftDevice handler will configure the stack with these parameters when calling @ref nrf_sdh_ble_default_cfg_set. -// Other libraries might depend on these values; keep them up-to-date even if you are not explicitely calling @ref +// Other libraries might depend on these values; keep them up-to-date even if you are not explicitly calling @ref // nrf_sdh_ble_default_cfg_set. //========================================================== // NRF_SDH_BLE_GAP_DATA_LENGTH <27-251> @@ -11766,7 +11766,7 @@ #define NRF_SDH_BLE_OBSERVER_PRIO_LEVELS 4 #endif -// BLE Observers priorities - Invididual priorities +// BLE Observers priorities - Individual priorities //========================================================== // BLE_ADV_BLE_OBSERVER_PRIO @@ -12302,7 +12302,7 @@ #define NRF_SDH_STACK_OBSERVER_PRIO_LEVELS 2 #endif -// State Observers priorities - Invididual priorities +// State Observers priorities - Individual priorities //========================================================== // CLOCK_CONFIG_STATE_OBSERVER_PRIO @@ -12329,7 +12329,7 @@ // //========================================================== -// Stack Event Observers priorities - Invididual priorities +// Stack Event Observers priorities - Individual priorities //========================================================== // NRF_SDH_ANT_STACK_OBSERVER_PRIO @@ -12383,7 +12383,7 @@ #define NRF_SDH_SOC_OBSERVER_PRIO_LEVELS 2 #endif -// SoC Observers priorities - Invididual priorities +// SoC Observers priorities - Individual priorities //========================================================== // BLE_ADV_SOC_OBSERVER_PRIO diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index a429c42..c55288c 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -456,7 +456,7 @@ void SystemTask::Work() { if (isBleDiscoveryTimerRunning) { if (bleDiscoveryTimer == 0) { isBleDiscoveryTimerRunning = false; - // Services discovery is deffered from 3 seconds to avoid the conflicts between the host communicating with the + // Services discovery is deferred from 3 seconds to avoid the conflicts between the host communicating with the // target and vice-versa. I'm not sure if this is the right way to handle this... nimbleController.StartDiscovery(); } else { diff --git a/tools/rle_encode.py b/tools/rle_encode.py index 80a0926..58c45b7 100644 --- a/tools/rle_encode.py +++ b/tools/rle_encode.py @@ -101,7 +101,7 @@ class ReverseCLUT: rd = r - (candidate >> 16) gd = g - ((candidate >> 8) & 0xff) bd = b - (candidate & 0xff) - # This is the Euclidian distance (squared) + # This is the Euclidean distance (squared) distance = rd * rd + gd * gd + bd * bd if distance < best: best = distance -- cgit v0.10.2 From 20ac1cd3741808c1dfdbe27bac22536075eb19b3 Mon Sep 17 00:00:00 2001 From: luz paz Date: Wed, 1 Jun 2022 09:38:40 -0400 Subject: revert portion of previous commit diff --git a/doc/ble.md b/doc/ble.md index 8d59c2e..7e3c873 100644 --- a/doc/ble.md +++ b/doc/ble.md @@ -44,7 +44,7 @@ When starting, the firmware starts BLE advertising. It sends small messages that A companion application (running on a PC, Raspberry Pi, smartphone, etc.) which receives this advertising packet can request a connection to the device. This connection procedure allows the 2 devices to negotiate communication parameters, security keys, etc. -When the connection is established, the PineTime will try to discover services running on the companion application. For now **CTS** (**C**urrent **T**ime **S**ervice) and **ANS** (**A**lert **N**notification **S**ervice) are supported. +When the connection is established, the PineTime will try to discover services running on the companion application. For now **CTS** (**C**urrent **T**ime **S**ervice) and **ANS** (**A**lert **N**otification **S**ervice) are supported. If **CTS** is detected, it'll request the current time to the companion application. If **ANS** is detected, it will listen to new notifications coming from the companion application. -- cgit v0.10.2 From 702f65d3ee1d7d769e153c4bb2637d3598d03e16 Mon Sep 17 00:00:00 2001 From: Christoph Honal Date: Tue, 10 May 2022 21:02:52 +0200 Subject: Bootloader: Ignore __pycache__ in Git diff --git a/bootloader/ota-dfu-python/.gitignore b/bootloader/ota-dfu-python/.gitignore new file mode 100644 index 0000000..ed8ebf5 --- /dev/null +++ b/bootloader/ota-dfu-python/.gitignore @@ -0,0 +1 @@ +__pycache__ \ No newline at end of file -- cgit v0.10.2 From 03a2059e875bc03919520c4c4febdf80e23f8164 Mon Sep 17 00:00:00 2001 From: Christoph Honal Date: Tue, 10 May 2022 21:10:10 +0200 Subject: SystemTask: Use "&&" instead of "and" for operators As per the coding style, only primary spelling should be used for operators. diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index c55288c..c7e0fc8 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -264,15 +264,16 @@ void SystemTask::Work() { case Messages::TouchWakeUp: { if (touchHandler.GetNewTouchInfo()) { auto gesture = touchHandler.GestureGet(); - if (gesture != Pinetime::Applications::TouchEvents::None and - ((gesture == Pinetime::Applications::TouchEvents::DoubleTap and - settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) or - (gesture == Pinetime::Applications::TouchEvents::Tap and + if (gesture != Pinetime::Applications::TouchEvents::None && + ((gesture == Pinetime::Applications::TouchEvents::DoubleTap && + settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::DoubleTap)) || + (gesture == Pinetime::Applications::TouchEvents::Tap && settingsController.isWakeUpModeOn(Pinetime::Controllers::Settings::WakeUpMode::SingleTap)))) { GoToRunning(); } } - } break; + break; + } case Messages::GoToSleep: if (doNotGoToSleep) { break; -- cgit v0.10.2 From 977936e8e256eacb0c1b66e9601143e3f4dec280 Mon Sep 17 00:00:00 2001 From: Christoph Honal Date: Tue, 10 May 2022 21:10:28 +0200 Subject: System: Refactor pin and interrupt setup This should ensure better readability of the pin setup procedure, as well as allow the configuration of the hardware button enable pin and the accelerometer interrupt pin via the pin mapping header. diff --git a/src/drivers/PinMap.h b/src/drivers/PinMap.h index 167a877..833c647 100644 --- a/src/drivers/PinMap.h +++ b/src/drivers/PinMap.h @@ -16,8 +16,10 @@ namespace Pinetime { static constexpr uint8_t Button = 13; #endif + static constexpr uint8_t ButtonEnable = 15; static constexpr uint8_t Cst816sIrq = 28; static constexpr uint8_t PowerPresent = 19; + static constexpr uint8_t Bma421Irq = 8; static constexpr uint8_t Motor = 16; diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index c7e0fc8..200cf3b 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -172,39 +172,29 @@ void SystemTask::Work() { buttonHandler.Init(this); - // Button - nrf_gpio_cfg_output(15); - nrf_gpio_pin_set(15); - + // Setup Interrupts nrfx_gpiote_in_config_t pinConfig; pinConfig.skip_gpio_setup = false; pinConfig.hi_accuracy = false; pinConfig.is_watcher = false; - pinConfig.sense = static_cast(NRF_GPIOTE_POLARITY_TOGGLE); - pinConfig.pull = static_cast(GPIO_PIN_CNF_PULL_Pulldown); + // Button + nrf_gpio_cfg_output(PinMap::ButtonEnable); + nrf_gpio_pin_set(PinMap::ButtonEnable); + pinConfig.sense = NRF_GPIOTE_POLARITY_TOGGLE; + pinConfig.pull = NRF_GPIO_PIN_PULLDOWN; nrfx_gpiote_in_init(PinMap::Button, &pinConfig, nrfx_gpiote_evt_handler); nrfx_gpiote_in_event_enable(PinMap::Button, true); // Touchscreen - nrf_gpio_cfg_sense_input(PinMap::Cst816sIrq, - static_cast(GPIO_PIN_CNF_PULL_Pullup), - static_cast(GPIO_PIN_CNF_SENSE_Low)); - - pinConfig.skip_gpio_setup = true; - pinConfig.hi_accuracy = false; - pinConfig.is_watcher = false; - pinConfig.sense = static_cast(NRF_GPIOTE_POLARITY_HITOLO); - pinConfig.pull = static_cast(GPIO_PIN_CNF_PULL_Pullup); - + pinConfig.sense = NRF_GPIOTE_POLARITY_HITOLO; + pinConfig.pull = NRF_GPIO_PIN_PULLUP; nrfx_gpiote_in_init(PinMap::Cst816sIrq, &pinConfig, nrfx_gpiote_evt_handler); + nrfx_gpiote_in_event_enable(PinMap::Cst816sIrq, true); // Power present pinConfig.sense = NRF_GPIOTE_POLARITY_TOGGLE; pinConfig.pull = NRF_GPIO_PIN_NOPULL; - pinConfig.is_watcher = false; - pinConfig.hi_accuracy = false; - pinConfig.skip_gpio_setup = false; nrfx_gpiote_in_init(PinMap::PowerPresent, &pinConfig, nrfx_gpiote_evt_handler); nrfx_gpiote_in_event_enable(PinMap::PowerPresent, true); -- cgit v0.10.2 From 8999158528eea2c3a338dd1870e0a1f37894abb9 Mon Sep 17 00:00:00 2001 From: mabuch Date: Sun, 5 Jun 2022 18:50:36 +0200 Subject: remove old unused bluetooth icons (#1172) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bcf4092..44d47dd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -368,10 +368,6 @@ set(QCBOR_SRC list(APPEND IMAGE_FILES displayapp/icons/battery/batteryicon.c - - displayapp/icons/bluetooth/os_bt_connected.c - displayapp/icons/bluetooth/os_bt_disconnected.c - ) list(APPEND SOURCE_FILES BootloaderVersion.cpp diff --git a/src/displayapp/icons/bluetooth/ck_os_bt_connected.png b/src/displayapp/icons/bluetooth/ck_os_bt_connected.png deleted file mode 100644 index 5371611..0000000 Binary files a/src/displayapp/icons/bluetooth/ck_os_bt_connected.png and /dev/null differ diff --git a/src/displayapp/icons/bluetooth/ck_os_bt_disconnected.png b/src/displayapp/icons/bluetooth/ck_os_bt_disconnected.png deleted file mode 100644 index 3275895..0000000 Binary files a/src/displayapp/icons/bluetooth/ck_os_bt_disconnected.png and /dev/null differ diff --git a/src/displayapp/icons/bluetooth/os_bt_connected.c b/src/displayapp/icons/bluetooth/os_bt_connected.c deleted file mode 100644 index d30dc9d..0000000 --- a/src/displayapp/icons/bluetooth/os_bt_connected.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BT_CONNECTED -#define LV_ATTRIBUTE_IMG_CK_OS_BT_CONNECTED -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BT_CONNECTED uint8_t ck_os_bt_connected_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 1*/ - - 0x00, 0x0e, 0x00, 0x00, - 0x00, 0x0f, 0x00, 0x00, - 0x00, 0x0f, 0x80, 0x00, - 0x00, 0x0f, 0xc0, 0x00, - 0x00, 0x0f, 0xe0, 0x00, - 0x00, 0x0f, 0xf0, 0x00, - 0x03, 0x8f, 0xf8, 0x00, - 0x03, 0xcf, 0x7c, 0x00, - 0x03, 0xef, 0x3e, 0x00, - 0x01, 0xff, 0x1f, 0x00, - 0x00, 0xff, 0x1f, 0x00, - 0x00, 0x7f, 0x3e, 0x00, - 0x00, 0x3f, 0x7c, 0x00, - 0x00, 0x1f, 0xf8, 0x00, - 0x00, 0x0f, 0xf0, 0x00, - 0x00, 0x0f, 0xe0, 0x00, - 0x00, 0x0f, 0xe0, 0x00, - 0x00, 0x0f, 0xf0, 0x00, - 0x00, 0x1f, 0xf8, 0x00, - 0x00, 0x3f, 0x7c, 0x00, - 0x00, 0x7f, 0x3e, 0x00, - 0x00, 0xff, 0x1f, 0x00, - 0x01, 0xff, 0x1f, 0x00, - 0x03, 0xef, 0x3e, 0x00, - 0x03, 0xcf, 0x7c, 0x00, - 0x03, 0x8f, 0xf8, 0x00, - 0x00, 0x0f, 0xf0, 0x00, - 0x00, 0x0f, 0xe0, 0x00, - 0x00, 0x0f, 0xc0, 0x00, - 0x00, 0x0f, 0x80, 0x00, - 0x00, 0x0f, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x00, -}; - -const lv_img_dsc_t ck_os_bt_connected = { - .header.always_zero = 0, - .header.w = 32, - .header.h = 32, - .data_size = 136, - .header.cf = LV_IMG_CF_INDEXED_1BIT, - .data = ck_os_bt_connected_map, -}; diff --git a/src/displayapp/icons/bluetooth/os_bt_connected.png b/src/displayapp/icons/bluetooth/os_bt_connected.png deleted file mode 100644 index 5371611..0000000 Binary files a/src/displayapp/icons/bluetooth/os_bt_connected.png and /dev/null differ diff --git a/src/displayapp/icons/bluetooth/os_bt_disconnected.c b/src/displayapp/icons/bluetooth/os_bt_disconnected.c deleted file mode 100644 index 930179b..0000000 --- a/src/displayapp/icons/bluetooth/os_bt_disconnected.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "lvgl/lvgl.h" - -#ifndef LV_ATTRIBUTE_MEM_ALIGN -#define LV_ATTRIBUTE_MEM_ALIGN -#endif - -#ifndef LV_ATTRIBUTE_IMG_CK_OS_BT_DISCONNECTED -#define LV_ATTRIBUTE_IMG_CK_OS_BT_DISCONNECTED -#endif - -const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_IMG_CK_OS_BT_DISCONNECTED uint8_t ck_os_bt_disconnected_map[] = { - 0x6c, 0xfe, 0x6c, 0xff, /*Color of index 0*/ - 0xc4, 0xc2, 0xc4, 0xff, /*Color of index 1*/ - 0xe4, 0xe6, 0xe4, 0xff, /*Color of index 2*/ - 0xff, 0xff, 0xff, 0xff, /*Color of index 3*/ - - 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, - 0x2a, 0x80, 0x00, 0x55, 0x40, 0x00, 0x00, 0x00, - 0x2a, 0xa0, 0x00, 0x55, 0x50, 0x00, 0x00, 0x00, - 0x0a, 0xa8, 0x00, 0x55, 0x54, 0x00, 0x00, 0x00, - 0x02, 0xaa, 0x00, 0x55, 0x55, 0x00, 0x00, 0x00, - 0x00, 0xaa, 0x80, 0x55, 0x55, 0x40, 0x00, 0x00, - 0x00, 0x2a, 0xa0, 0x55, 0x15, 0x50, 0x00, 0x00, - 0x00, 0x0a, 0xa8, 0x15, 0x05, 0x54, 0x00, 0x00, - 0x00, 0x02, 0xaa, 0x05, 0x01, 0x55, 0x00, 0x00, - 0x00, 0x00, 0xaa, 0x81, 0x01, 0x55, 0x00, 0x00, - 0x00, 0x00, 0x2a, 0xa0, 0x05, 0x54, 0x00, 0x00, - 0x00, 0x00, 0x0a, 0xa8, 0x15, 0x50, 0x00, 0x00, - 0x00, 0x00, 0x02, 0xaa, 0x05, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0xaa, 0x81, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x2a, 0xa0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0a, 0xa8, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x42, 0xaa, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0x50, 0xaa, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x05, 0x54, 0x2a, 0xa0, 0x00, 0x00, - 0x00, 0x00, 0x15, 0x55, 0x0a, 0xa8, 0x00, 0x00, - 0x00, 0x00, 0x55, 0x55, 0x02, 0xaa, 0x00, 0x00, - 0x00, 0x01, 0x55, 0x55, 0x00, 0xaa, 0x80, 0x00, - 0x00, 0x05, 0x54, 0x55, 0x04, 0x2a, 0xa0, 0x00, - 0x00, 0x05, 0x50, 0x55, 0x15, 0x0a, 0xa8, 0x00, - 0x00, 0x05, 0x40, 0x55, 0x55, 0x42, 0xaa, 0x00, - 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0xaa, 0x80, - 0x00, 0x00, 0x00, 0x55, 0x54, 0x00, 0x2a, 0xa0, - 0x00, 0x00, 0x00, 0x55, 0x50, 0x00, 0x0a, 0xa8, - 0x00, 0x00, 0x00, 0x55, 0x40, 0x00, 0x02, 0xa8, - 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0xa0, - 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, -}; - -const lv_img_dsc_t ck_os_bt_disconnected = { - .header.always_zero = 0, - .header.w = 32, - .header.h = 32, - .data_size = 272, - .header.cf = LV_IMG_CF_INDEXED_2BIT, - .data = ck_os_bt_disconnected_map, -}; diff --git a/src/displayapp/icons/bluetooth/os_bt_disconnected.png b/src/displayapp/icons/bluetooth/os_bt_disconnected.png deleted file mode 100644 index 3275895..0000000 Binary files a/src/displayapp/icons/bluetooth/os_bt_disconnected.png and /dev/null differ -- cgit v0.10.2 From 8a71f2b9e00718b16f860af9f24f3d1c77613b7f Mon Sep 17 00:00:00 2001 From: mabuch Date: Sun, 5 Jun 2022 19:34:37 +0200 Subject: remove unused Brightness App (#1170) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 44d47dd..443e2de 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -383,7 +383,6 @@ list(APPEND SOURCE_FILES displayapp/screens/BatteryIcon.cpp displayapp/screens/BleIcon.cpp displayapp/screens/NotificationIcon.cpp - displayapp/screens/Brightness.cpp displayapp/screens/SystemInfo.cpp displayapp/screens/Label.cpp displayapp/screens/FirmwareUpdate.cpp @@ -598,7 +597,6 @@ set(INCLUDE_FILES displayapp/screens/BatteryIcon.h displayapp/screens/BleIcon.h displayapp/screens/NotificationIcon.h - displayapp/screens/Brightness.h displayapp/screens/SystemInfo.h displayapp/screens/ScreenList.h displayapp/screens/Label.h diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index a50f676..07170d9 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -11,7 +11,6 @@ #include "components/motion/MotionController.h" #include "components/motor/MotorController.h" #include "displayapp/screens/ApplicationList.h" -#include "displayapp/screens/Brightness.h" #include "displayapp/screens/Clock.h" #include "displayapp/screens/FirmwareUpdate.h" #include "displayapp/screens/FirmwareValidation.h" diff --git a/src/displayapp/screens/Brightness.cpp b/src/displayapp/screens/Brightness.cpp deleted file mode 100644 index d9901ae..0000000 --- a/src/displayapp/screens/Brightness.cpp +++ /dev/null @@ -1,103 +0,0 @@ -#include "displayapp/screens/Brightness.h" -#include - -using namespace Pinetime::Applications::Screens; - -void slider_event_cb(lv_obj_t* slider, lv_event_t event) { - if (event == LV_EVENT_VALUE_CHANGED) { - auto* brightnessSlider = static_cast(slider->user_data); - brightnessSlider->OnValueChanged(); - } -} - -Brightness::Brightness(Pinetime::Applications::DisplayApp* app, Controllers::BrightnessController& brightness) - : Screen(app), brightness {brightness} { - slider = lv_slider_create(lv_scr_act(), nullptr); - lv_obj_set_user_data(slider, this); - lv_obj_set_width(slider, LV_DPI * 2); - lv_obj_align(slider, nullptr, LV_ALIGN_CENTER, 0, 0); - lv_obj_set_event_cb(slider, slider_event_cb); - lv_slider_set_range(slider, 0, 2); - lv_slider_set_value(slider, LevelToInt(brightness.Level()), LV_ANIM_OFF); - - slider_label = lv_label_create(lv_scr_act(), nullptr); - lv_label_set_text(slider_label, LevelToString(brightness.Level())); - lv_obj_set_auto_realign(slider_label, true); - lv_obj_align(slider_label, slider, LV_ALIGN_OUT_BOTTOM_MID, 0, 30); -} - -Brightness::~Brightness() { - lv_obj_clean(lv_scr_act()); -} - -const char* Brightness::LevelToString(Pinetime::Controllers::BrightnessController::Levels level) { - switch (level) { - case Pinetime::Controllers::BrightnessController::Levels::Off: - return "Off"; - case Pinetime::Controllers::BrightnessController::Levels::Low: - return "Low"; - case Pinetime::Controllers::BrightnessController::Levels::Medium: - return "Medium"; - case Pinetime::Controllers::BrightnessController::Levels::High: - return "High"; - default: - return "???"; - } -} - -void Brightness::OnValueChanged() { - SetValue(lv_slider_get_value(slider)); -} - -void Brightness::SetValue(uint8_t value) { - switch (value) { - case 0: - brightness.Set(Controllers::BrightnessController::Levels::Low); - break; - case 1: - brightness.Set(Controllers::BrightnessController::Levels::Medium); - break; - case 2: - brightness.Set(Controllers::BrightnessController::Levels::High); - break; - } - lv_label_set_text(slider_label, LevelToString(brightness.Level())); -} - -uint8_t Brightness::LevelToInt(Pinetime::Controllers::BrightnessController::Levels level) { - switch (level) { - case Pinetime::Controllers::BrightnessController::Levels::Off: - return 0; - case Pinetime::Controllers::BrightnessController::Levels::Low: - return 0; - case Pinetime::Controllers::BrightnessController::Levels::Medium: - return 1; - case Pinetime::Controllers::BrightnessController::Levels::High: - return 2; - default: - return 0; - } -} - -bool Brightness::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - switch (event) { - case TouchEvents::SwipeLeft: - brightness.Lower(); - if (brightness.Level() == Pinetime::Controllers::BrightnessController::Levels::Off) { - brightness.Set(Controllers::BrightnessController::Levels::Low); - } - SetValue(); - return true; - case TouchEvents::SwipeRight: - brightness.Higher(); - SetValue(); - return true; - default: - return false; - } -} - -void Brightness::SetValue() { - lv_slider_set_value(slider, LevelToInt(brightness.Level()), LV_ANIM_OFF); - lv_label_set_text(slider_label, LevelToString(brightness.Level())); -} diff --git a/src/displayapp/screens/Brightness.h b/src/displayapp/screens/Brightness.h deleted file mode 100644 index 693570c..0000000 --- a/src/displayapp/screens/Brightness.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include -#include -#include "displayapp/screens/Screen.h" -#include "components/brightness/BrightnessController.h" - -namespace Pinetime { - namespace Applications { - namespace Screens { - class Brightness : public Screen { - public: - Brightness(DisplayApp* app, Controllers::BrightnessController& brightness); - ~Brightness() override; - - bool OnTouchEvent(TouchEvents event) override; - - void OnValueChanged(); - - private: - Controllers::BrightnessController& brightness; - - lv_obj_t* slider_label; - lv_obj_t* slider; - - const char* LevelToString(Controllers::BrightnessController::Levels level); - uint8_t LevelToInt(Controllers::BrightnessController::Levels level); - void SetValue(uint8_t value); - void SetValue(); - }; - } - } -} -- cgit v0.10.2 From 91a3e98276aaef3d9545e82ba1daa342636ed244 Mon Sep 17 00:00:00 2001 From: mabuch Date: Sun, 5 Jun 2022 19:35:33 +0200 Subject: remove unused Meter.cpp and Meter.h (#1171) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 443e2de..d5b5544 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -376,7 +376,6 @@ list(APPEND SOURCE_FILES displayapp/screens/Screen.cpp displayapp/screens/Clock.cpp displayapp/screens/Tile.cpp - displayapp/screens/Meter.cpp displayapp/screens/InfiniPaint.cpp displayapp/screens/Paddle.cpp displayapp/screens/StopWatch.cpp @@ -590,7 +589,6 @@ set(INCLUDE_FILES displayapp/screens/Screen.h displayapp/screens/Clock.h displayapp/screens/Tile.h - displayapp/screens/Meter.h displayapp/screens/InfiniPaint.h displayapp/screens/StopWatch.h displayapp/screens/Paddle.h diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 07170d9..411497e 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -17,7 +17,6 @@ #include "displayapp/screens/InfiniPaint.h" #include "displayapp/screens/Paddle.h" #include "displayapp/screens/StopWatch.h" -#include "displayapp/screens/Meter.h" #include "displayapp/screens/Metronome.h" #include "displayapp/screens/Music.h" #include "displayapp/screens/Navigation.h" diff --git a/src/displayapp/screens/Meter.cpp b/src/displayapp/screens/Meter.cpp deleted file mode 100644 index 91dd142..0000000 --- a/src/displayapp/screens/Meter.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "displayapp/screens/Meter.h" -#include -#include "displayapp/DisplayApp.h" - -using namespace Pinetime::Applications::Screens; - -Meter::Meter(Pinetime::Applications::DisplayApp* app) : Screen(app) { - - /*Create a line meter */ - lmeter = lv_linemeter_create(lv_scr_act(), nullptr); - lv_linemeter_set_range(lmeter, 0, 60); /*Set the range*/ - lv_linemeter_set_value(lmeter, value); /*Set the current value*/ - lv_linemeter_set_angle_offset(lmeter, 180); - lv_linemeter_set_scale(lmeter, 360, 60); /*Set the angle and number of lines*/ - - lv_obj_set_style_local_scale_end_color(lmeter, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(255, 0, 0)); - lv_obj_set_style_local_scale_grad_color(lmeter, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, lv_color_make(160, 0, 0)); - lv_obj_set_style_local_line_width(lmeter, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, 2); - lv_obj_set_style_local_line_color(lmeter, LV_LINEMETER_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_MAKE(0xb0, 0xb0, 0xb0)); - - lv_obj_set_size(lmeter, 200, 200); - lv_obj_align(lmeter, nullptr, LV_ALIGN_CENTER, 0, 0); - - taskRefresh = lv_task_create(RefreshTaskCallback, LV_DISP_DEF_REFR_PERIOD, LV_TASK_PRIO_MID, this); -} - -Meter::~Meter() { - lv_task_del(taskRefresh); - lv_obj_clean(lv_scr_act()); -} - -void Meter::Refresh() { - lv_linemeter_set_value(lmeter, value++); /*Set the current value*/ - if (value >= 60) - value = 0; -} diff --git a/src/displayapp/screens/Meter.h b/src/displayapp/screens/Meter.h deleted file mode 100644 index 50d9f83..0000000 --- a/src/displayapp/screens/Meter.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include -#include "displayapp/screens/Screen.h" -#include -#include - -namespace Pinetime { - namespace Applications { - namespace Screens { - - class Meter : public Screen { - public: - Meter(DisplayApp* app); - ~Meter() override; - - void Refresh() override; - - private: - lv_style_t style_lmeter; - lv_obj_t* lmeter; - - uint32_t value = 0; - - lv_task_t* taskRefresh; - }; - } - } -} -- cgit v0.10.2 From f95147cf0ed759a6ae30ac8d7cfdf7eba23a3ee9 Mon Sep 17 00:00:00 2001 From: mabuch Date: Sun, 5 Jun 2022 19:43:49 +0200 Subject: remove unused symbols, free a little bit of space (#1167) diff --git a/src/displayapp/fonts/fonts.json b/src/displayapp/fonts/fonts.json index dfc10ad..5e91127 100644 --- a/src/displayapp/fonts/fonts.json +++ b/src/displayapp/fonts/fonts.json @@ -7,7 +7,7 @@ }, { "file": "FontAwesome5-Solid+Brands+Regular.woff", - "range": "0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf029, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015" + "range": "0xf294, 0xf242, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015" } ], "bpp": 1, diff --git a/src/displayapp/screens/Symbols.h b/src/displayapp/screens/Symbols.h index e68a7af..f973181 100644 --- a/src/displayapp/screens/Symbols.h +++ b/src/displayapp/screens/Symbols.h @@ -5,13 +5,8 @@ namespace Pinetime { namespace Screens { namespace Symbols { static constexpr const char* none = ""; - static constexpr const char* batteryFull = "\xEF\x89\x80"; - static constexpr const char* batteryEmpty = "\xEF\x89\x84"; - static constexpr const char* batteryThreeQuarter = "\xEF\x89\x81"; static constexpr const char* batteryHalf = "\xEF\x89\x82"; - static constexpr const char* batteryOneQuarter = "\xEF\x89\x83"; static constexpr const char* heartBeat = "\xEF\x88\x9E"; - static constexpr const char* bluetoothFull = "\xEF\x8A\x93"; static constexpr const char* bluetooth = "\xEF\x8A\x94"; static constexpr const char* plug = "\xEF\x87\xA6"; static constexpr const char* shoe = "\xEF\x95\x8B"; @@ -22,11 +17,9 @@ namespace Pinetime { static constexpr const char* check = "\xEF\x95\xA0"; static constexpr const char* music = "\xEF\x80\x81"; static constexpr const char* tachometer = "\xEF\x8F\xBD"; - static constexpr const char* asterisk = "\xEF\x81\xA9"; static constexpr const char* paintbrush = "\xEF\x87\xBC"; static constexpr const char* paddle = "\xEF\x91\x9D"; static constexpr const char* map = "\xEF\x96\xa0"; - static constexpr const char* qrcode = "\xEF\x80\xa9"; static constexpr const char* phone = "\xEF\x82\x95"; static constexpr const char* phoneSlash = "\xEF\x8F\x9D"; static constexpr const char* volumMute = "\xEF\x9A\xA9"; -- cgit v0.10.2 From 35dcf8c8607483c104711c9398d47d57147f4389 Mon Sep 17 00:00:00 2001 From: Michele Bini Date: Mon, 6 Jun 2022 17:47:43 +0200 Subject: Switch to freertos timers (#1095) * Use FreeRTOS timer for AlarmController * Use FreeRTOS timer for MotorController * Remove app_timer component from compilation as we now solely use FreeROTS timer * Simplify variable and text names for AlarmController and MotorController timers * Call ScheduleAlarm directly from StopAlerting, for recurring timers Co-authored-by: Riku Isokoski Co-authored-by: NeroBurner diff --git a/cmake-nRF5x/CMake_nRF5x.cmake b/cmake-nRF5x/CMake_nRF5x.cmake index c7d0a68..9bf63f2 100755 --- a/cmake-nRF5x/CMake_nRF5x.cmake +++ b/cmake-nRF5x/CMake_nRF5x.cmake @@ -106,7 +106,6 @@ macro(nRF5x_setup) ${NRF5_SDK_PATH}/external/freertos/source/stream_buffer.c ${NRF5_SDK_PATH}/external/freertos/source/tasks.c ${NRF5_SDK_PATH}/external/freertos/source/timers.c - ${NRF5_SDK_PATH}/components/libraries/timer/app_timer_freertos.c ) # freertos include @@ -335,7 +334,6 @@ endmacro(nRF5x_addAppFIFO) # adds app-level Timer libraries macro(nRF5x_addAppTimer) list(APPEND SDK_SOURCE_FILES - "${NRF5_SDK_PATH}/components/libraries/timer/app_timer.c" ) endmacro(nRF5x_addAppTimer) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d5b5544..940a3fd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -42,7 +42,6 @@ set(SDK_SOURCE_FILES "${NRF5_SDK_PATH}/modules/nrfx/drivers/src/nrfx_gpiote.c" "${NRF5_SDK_PATH}/modules/nrfx/soc/nrfx_atomic.c" "${NRF5_SDK_PATH}/modules/nrfx/drivers/src/nrfx_saadc.c" - "${NRF5_SDK_PATH}/components/libraries/timer/app_timer.h" # FreeRTOS ${NRF5_SDK_PATH}/external/freertos/source/croutine.c @@ -53,7 +52,6 @@ set(SDK_SOURCE_FILES ${NRF5_SDK_PATH}/external/freertos/source/stream_buffer.c ${NRF5_SDK_PATH}/external/freertos/source/tasks.c ${NRF5_SDK_PATH}/external/freertos/source/timers.c - ${NRF5_SDK_PATH}/components/libraries/timer/app_timer_freertos.c # Libs "${NRF5_SDK_PATH}/components/libraries/atomic/nrf_atomic.c" diff --git a/src/components/alarm/AlarmController.cpp b/src/components/alarm/AlarmController.cpp index d412273..9f4e910 100644 --- a/src/components/alarm/AlarmController.cpp +++ b/src/components/alarm/AlarmController.cpp @@ -17,7 +17,6 @@ */ #include "components/alarm/AlarmController.h" #include "systemtask/SystemTask.h" -#include "app_timer.h" #include "task.h" #include @@ -27,20 +26,16 @@ using namespace std::chrono_literals; AlarmController::AlarmController(Controllers::DateTime& dateTimeController) : dateTimeController {dateTimeController} { } -APP_TIMER_DEF(alarmAppTimer); - namespace { - void SetOffAlarm(void* p_context) { - auto* controller = static_cast(p_context); - if (controller != nullptr) { - controller->SetOffAlarmNow(); - } + void SetOffAlarm(TimerHandle_t xTimer) { + auto controller = static_cast(pvTimerGetTimerID(xTimer)); + controller->SetOffAlarmNow(); } } void AlarmController::Init(System::SystemTask* systemTask) { - app_timer_create(&alarmAppTimer, APP_TIMER_MODE_SINGLE_SHOT, SetOffAlarm); this->systemTask = systemTask; + alarmTimer = xTimerCreate("Alarm", 1, pdFALSE, this, SetOffAlarm); } void AlarmController::SetAlarmTime(uint8_t alarmHr, uint8_t alarmMin) { @@ -49,8 +44,8 @@ void AlarmController::SetAlarmTime(uint8_t alarmHr, uint8_t alarmMin) { } void AlarmController::ScheduleAlarm() { - // Determine the next time the alarm needs to go off and set the app_timer - app_timer_stop(alarmAppTimer); + // Determine the next time the alarm needs to go off and set the timer + xTimerStop(alarmTimer, 0); auto now = dateTimeController.CurrentDateTime(); alarmTime = now; @@ -80,8 +75,9 @@ void AlarmController::ScheduleAlarm() { // now can convert back to a time_point alarmTime = std::chrono::system_clock::from_time_t(std::mktime(tmAlarmTime)); - auto mSecToAlarm = std::chrono::duration_cast(alarmTime - now).count(); - app_timer_start(alarmAppTimer, APP_TIMER_TICKS(mSecToAlarm), this); + auto secondsToAlarm = std::chrono::duration_cast(alarmTime - now).count(); + xTimerChangePeriod(alarmTimer, secondsToAlarm * configTICK_RATE_HZ, 0); + xTimerStart(alarmTimer, 0); state = AlarmState::Set; } @@ -91,7 +87,7 @@ uint32_t AlarmController::SecondsToAlarm() { } void AlarmController::DisableAlarm() { - app_timer_stop(alarmAppTimer); + xTimerStop(alarmTimer, 0); state = AlarmState::Not_Set; } @@ -101,14 +97,12 @@ void AlarmController::SetOffAlarmNow() { } void AlarmController::StopAlerting() { - systemTask->PushMessage(System::Messages::StopRinging); - // Alarm state is off unless this is a recurring alarm if (recurrence == RecurType::None) { state = AlarmState::Not_Set; } else { - state = AlarmState::Set; // set next instance ScheduleAlarm(); } + systemTask->PushMessage(System::Messages::StopRinging); } diff --git a/src/components/alarm/AlarmController.h b/src/components/alarm/AlarmController.h index f39fbde..d630a12 100644 --- a/src/components/alarm/AlarmController.h +++ b/src/components/alarm/AlarmController.h @@ -17,6 +17,8 @@ */ #pragma once +#include +#include #include #include "components/datetime/DateTimeController.h" @@ -57,6 +59,7 @@ namespace Pinetime { private: Controllers::DateTime& dateTimeController; System::SystemTask* systemTask = nullptr; + TimerHandle_t alarmTimer; uint8_t hours = 7; uint8_t minutes = 0; std::chrono::time_point alarmTime; diff --git a/src/components/motor/MotorController.cpp b/src/components/motor/MotorController.cpp index c794a02..90e41d2 100644 --- a/src/components/motor/MotorController.cpp +++ b/src/components/motor/MotorController.cpp @@ -1,43 +1,39 @@ #include "components/motor/MotorController.h" #include #include "systemtask/SystemTask.h" -#include "app_timer.h" #include "drivers/PinMap.h" -APP_TIMER_DEF(shortVibTimer); -APP_TIMER_DEF(longVibTimer); - using namespace Pinetime::Controllers; void MotorController::Init() { nrf_gpio_cfg_output(PinMap::Motor); nrf_gpio_pin_set(PinMap::Motor); - app_timer_init(); - app_timer_create(&shortVibTimer, APP_TIMER_MODE_SINGLE_SHOT, StopMotor); - app_timer_create(&longVibTimer, APP_TIMER_MODE_REPEATED, Ring); + shortVib = xTimerCreate("shortVib", 1, pdFALSE, nullptr, StopMotor); + longVib = xTimerCreate("longVib", pdMS_TO_TICKS(1000), pdTRUE, this, Ring); } -void MotorController::Ring(void* p_context) { - auto* motorController = static_cast(p_context); +void MotorController::Ring(TimerHandle_t xTimer) { + auto* motorController = static_cast(pvTimerGetTimerID(xTimer)); motorController->RunForDuration(50); } void MotorController::RunForDuration(uint8_t motorDuration) { - nrf_gpio_pin_clear(PinMap::Motor); - app_timer_start(shortVibTimer, APP_TIMER_TICKS(motorDuration), nullptr); + if (xTimerChangePeriod(shortVib, pdMS_TO_TICKS(motorDuration), 0) == pdPASS && xTimerStart(shortVib, 0) == pdPASS) { + nrf_gpio_pin_clear(PinMap::Motor); + } } void MotorController::StartRinging() { - Ring(this); - app_timer_start(longVibTimer, APP_TIMER_TICKS(1000), this); + RunForDuration(50); + xTimerStart(longVib, 0); } void MotorController::StopRinging() { - app_timer_stop(longVibTimer); + xTimerStop(longVib, 0); nrf_gpio_pin_set(PinMap::Motor); } -void MotorController::StopMotor(void* p_context) { +void MotorController::StopMotor(TimerHandle_t xTimer) { nrf_gpio_pin_set(PinMap::Motor); } diff --git a/src/components/motor/MotorController.h b/src/components/motor/MotorController.h index b5a592b..6dea6d1 100644 --- a/src/components/motor/MotorController.h +++ b/src/components/motor/MotorController.h @@ -1,5 +1,7 @@ #pragma once +#include +#include #include namespace Pinetime { @@ -15,8 +17,10 @@ namespace Pinetime { void StopRinging(); private: - static void Ring(void* p_context); - static void StopMotor(void* p_context); + static void Ring(TimerHandle_t xTimer); + static void StopMotor(TimerHandle_t xTimer); + TimerHandle_t shortVib; + TimerHandle_t longVib; }; } } diff --git a/src/main.cpp b/src/main.cpp index 4f34276..3d70af4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include diff --git a/src/sdk_config.h b/src/sdk_config.h index 27c3852..b42b392 100644 --- a/src/sdk_config.h +++ b/src/sdk_config.h @@ -6781,7 +6781,7 @@ // APP_TIMER_ENABLED - app_timer - Application timer functionality //========================================================== #ifndef APP_TIMER_ENABLED - #define APP_TIMER_ENABLED 1 + #define APP_TIMER_ENABLED 0 #endif // APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 200cf3b..d3f1278 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include "BootloaderVersion.h" #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" @@ -127,8 +126,6 @@ void SystemTask::Work() { NRF_LOG_INFO("Last reset reason : %s", Pinetime::Drivers::Watchdog::ResetReasonToString(watchdog.ResetReason())); APP_GPIOTE_INIT(2); - app_timer_init(); - spi.Init(); spiNorFlash.Init(); spiNorFlash.Wakeup(); -- cgit v0.10.2