From d82a1c52251a9924d71c6a2d0f6c749230f5d664 Mon Sep 17 00:00:00 2001 From: Stoian Minaiev Date: Fri, 14 May 2021 01:07:32 +0300 Subject: [PATCH 01/94] docker: add git system package to image --- docker/.gitpod.Dockerfile | 3 +++ docker/Dockerfile | 3 +++ 2 files changed, 6 insertions(+) diff --git a/docker/.gitpod.Dockerfile b/docker/.gitpod.Dockerfile index 2f7099a5..4fbc7be0 100644 --- a/docker/.gitpod.Dockerfile +++ b/docker/.gitpod.Dockerfile @@ -19,8 +19,11 @@ RUN apt-get update -qq \ libffi-dev \ libssl-dev \ python3-dev \ + git \ && rm -rf /var/cache/apt/* /var/lib/apt/lists/*; +# Git needed for PROJECT_GIT_COMMIT_HASH variable setting + # Needs to be installed as root RUN pip3 install adafruit-nrfutil RUN pip3 install -Iv cryptography==3.3 diff --git a/docker/Dockerfile b/docker/Dockerfile index a6caa24e..0a4f69f0 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -19,8 +19,11 @@ RUN apt-get update -qq \ libssl-dev \ python3-dev \ python \ + git \ && 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 From e04c8ee95ea9b5fe444b7a21c0d6557e815571e6 Mon Sep 17 00:00:00 2001 From: Stoian Minaiev Date: Fri, 14 May 2021 01:08:37 +0300 Subject: [PATCH 02/94] git: store git short ref hash on build stage to Version.h --- CMakeLists.txt | 12 ++++++++++++ src/Version.h.in | 2 ++ 2 files changed, 14 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index f7770136..6c529f39 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,10 +55,22 @@ if(BUILD_DFU) set(BUILD_DFU true) endif() +set(PROJECT_GIT_COMMIT_HASH "") + +execute_process(COMMAND git rev-parse --short HEAD + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE PROJECT_GIT_COMMIT_HASH + RESULT_VARIABLE PROJECT_GIT_COMMIT_HASH_SUCCESS) + +string(STRIP ${PROJECT_GIT_COMMIT_HASH} PROJECT_GIT_COMMIT_HASH) + +message("PROJECT_GIT_COMMIT_HASH_SUCCESS? " ${PROJECT_GIT_COMMIT_HASH_SUCCESS}) + message("BUILD CONFIGURATION") message("-------------------") message(" * Version : " ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) message(" * Toolchain : " ${ARM_NONE_EABI_TOOLCHAIN_PATH}) +message(" * GitRef(S) : " ${PROJECT_GIT_COMMIT_HASH}) message(" * NRF52 SDK : " ${NRF5_SDK_PATH}) set(PROGRAMMER "???") if(USE_JLINK) diff --git a/src/Version.h.in b/src/Version.h.in index 6ff5938e..8cd39c96 100644 --- a/src/Version.h.in +++ b/src/Version.h.in @@ -8,11 +8,13 @@ namespace Pinetime { static constexpr uint32_t Major() {return major;} static constexpr uint32_t Minor() {return minor;} static constexpr uint32_t Patch() {return patch;} + static constexpr const char* GitCommitHash() {return commitHash;} static constexpr const char* VersionString() {return versionString;} private: static constexpr uint32_t major = @PROJECT_VERSION_MAJOR@; static constexpr uint32_t minor = @PROJECT_VERSION_MINOR@; static constexpr uint32_t patch = @PROJECT_VERSION_PATCH@; + static constexpr const char* commitHash = "@PROJECT_GIT_COMMIT_HASH@"; static constexpr const char* versionString = "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@"; }; } \ No newline at end of file From a4de61e1f5c7842d25bac0cfb22e4a9f0bff671c Mon Sep 17 00:00:00 2001 From: Stoian Minaiev Date: Fri, 14 May 2021 01:09:40 +0300 Subject: [PATCH 03/94] git: show git short ref hash on SystemInfo(first screen) and FirmwareValidation screen alongside other information --- src/displayapp/screens/FirmwareValidation.cpp | 11 +++++++++++ src/displayapp/screens/FirmwareValidation.h | 3 +++ src/displayapp/screens/SystemInfo.cpp | 2 ++ 3 files changed, 16 insertions(+) diff --git a/src/displayapp/screens/FirmwareValidation.cpp b/src/displayapp/screens/FirmwareValidation.cpp index 873a22f5..ad37a3df 100644 --- a/src/displayapp/screens/FirmwareValidation.cpp +++ b/src/displayapp/screens/FirmwareValidation.cpp @@ -27,6 +27,17 @@ FirmwareValidation::FirmwareValidation(Pinetime::Applications::DisplayApp* app, sprintf(version, "%ld.%ld.%ld", Version::Major(), Version::Minor(), Version::Patch()); lv_label_set_text(labelVersionValue, version); + labelShortRefInfo = lv_label_create(lv_scr_act(), nullptr); + lv_obj_align(labelShortRefInfo, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 25); + lv_label_set_text(labelShortRefInfo, "ShortRef : "); + lv_label_set_align(labelShortRefInfo, LV_LABEL_ALIGN_LEFT); + + labelShortRefValue = lv_label_create(lv_scr_act(), nullptr); + lv_obj_align(labelShortRefValue, labelShortRefInfo, LV_ALIGN_OUT_RIGHT_MID, 0, 0); + lv_label_set_recolor(labelShortRefValue, true); + sprintf(shortref, "%s", Version::GitCommitHash()); + lv_label_set_text(labelShortRefValue, shortref); + labelIsValidated = lv_label_create(lv_scr_act(), nullptr); lv_obj_align(labelIsValidated, nullptr, LV_ALIGN_IN_TOP_LEFT, 0, 50); lv_label_set_recolor(labelIsValidated, true); diff --git a/src/displayapp/screens/FirmwareValidation.h b/src/displayapp/screens/FirmwareValidation.h index 67662fd9..303c2154 100644 --- a/src/displayapp/screens/FirmwareValidation.h +++ b/src/displayapp/screens/FirmwareValidation.h @@ -25,7 +25,10 @@ namespace Pinetime { lv_obj_t* labelVersionInfo; lv_obj_t* labelVersionValue; + lv_obj_t* labelShortRefInfo; + lv_obj_t* labelShortRefValue; char version[9]; + char shortref[9]; lv_obj_t* labelIsValidated; lv_obj_t* buttonValidate; lv_obj_t* labelButtonValidate; diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index ab349d7b..e4ef6911 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -69,12 +69,14 @@ std::unique_ptr SystemInfo::CreateScreen1() { lv_label_set_text_fmt(label, "#FFFF00 InfiniTime#\n\n" "#444444 Version# %ld.%ld.%ld\n\n" + "#444444 Short Ref# %s\n\n" "#444444 Build date#\n" "%s\n" "%s\n", Version::Major(), Version::Minor(), Version::Patch(), + Version::GitCommitHash(), __DATE__, __TIME__); lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); From 2627ef760e7e42ad0f9a1d2fe6299588b8fb631a Mon Sep 17 00:00:00 2001 From: Florian Kraupa Date: Fri, 14 May 2021 15:11:15 +0200 Subject: [PATCH 04/94] better handling of long notification titles --- src/displayapp/screens/Notifications.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index f0fd2f66..1f113750 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -176,7 +176,17 @@ Notifications::NotificationItem::NotificationItem(const char* title, lv_obj_set_style_local_text_color(alert_type, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x888888)); if (title == nullptr) title = "Notification"; + char* pchar; + pchar = strchr(title, '\n'); + while (pchar != nullptr) { + *pchar = ' '; + pchar = + pchar = strchr(pchar + 1, '\n'); + } lv_label_set_text(alert_type, title); + lv_label_set_long_mode(alert_type, LV_LABEL_LONG_SROLL_CIRC); + lv_label_set_anim_speed(alert_type, 3); + lv_obj_set_width(alert_type, 180); lv_obj_align(alert_type, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 16); ///////// From 9342d62a44830113241f0fdbc2951db93e474e26 Mon Sep 17 00:00:00 2001 From: David Ventura Date: Sun, 16 May 2021 21:13:22 +0200 Subject: [PATCH 05/94] Emit event on power-present toggle (#320) * Emit event on power-present toggle * clang-format on changes * also update battery status on any event * update comments; remove double battery update * Fix formatting * Vibrate shortly on charging event * debounce charge event --- src/components/battery/BatteryController.cpp | 1 - src/main.cpp | 15 +++++++++++++ src/systemtask/SystemTask.cpp | 22 +++++++++++++++----- src/systemtask/SystemTask.h | 4 +++- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/components/battery/BatteryController.cpp b/src/components/battery/BatteryController.cpp index b39efefb..bc146457 100644 --- a/src/components/battery/BatteryController.cpp +++ b/src/components/battery/BatteryController.cpp @@ -15,7 +15,6 @@ Battery::Battery() { void Battery::Init() { nrf_gpio_cfg_input(chargingPin, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup); - nrf_gpio_cfg_input(powerPresentPin, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup); } void Battery::Update() { diff --git a/src/main.cpp b/src/main.cpp index 04cef6b5..61194b95 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -101,11 +101,13 @@ Pinetime::Drivers::Bma421 motionSensor {twiMaster, motionSensorTwiAddress}; Pinetime::Drivers::Hrs3300 heartRateSensor {twiMaster, heartRateSensorTwiAddress}; TimerHandle_t debounceTimer; +TimerHandle_t debounceChargeTimer; Pinetime::Controllers::Battery batteryController; Pinetime::Controllers::Ble bleController; void ble_manager_set_ble_connection_callback(void (*connection)()); void ble_manager_set_ble_disconnection_callback(void (*disconnection)()); static constexpr uint8_t pinTouchIrq = 28; +static constexpr uint8_t pinPowerPresentIrq = 19; std::unique_ptr systemTask; Pinetime::Controllers::Settings settingsController {spiNorFlash}; @@ -119,6 +121,13 @@ void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action } BaseType_t xHigherPriorityTaskWoken = pdFALSE; + + if (pin == pinPowerPresentIrq and action == NRF_GPIOTE_POLARITY_TOGGLE) { + xTimerStartFromISR(debounceChargeTimer, &xHigherPriorityTaskWoken); + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + return; + } + xTimerStartFromISR(debounceTimer, &xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPriorityTaskWoken); } @@ -130,6 +139,11 @@ void vApplicationIdleHook(void) { } } +void DebounceTimerChargeCallback(TimerHandle_t xTimer) { + xTimerStop(xTimer, 0); + systemTask->PushMessage(Pinetime::System::SystemTask::Messages::OnChargingEvent); +} + void DebounceTimerCallback(TimerHandle_t xTimer) { xTimerStop(xTimer, 0); systemTask->OnButtonPushed(); @@ -248,6 +262,7 @@ int main(void) { nrf_drv_clock_init(); debounceTimer = xTimerCreate("debounceTimer", 200, pdFALSE, (void*) 0, DebounceTimerCallback); + debounceChargeTimer = xTimerCreate("debounceTimerCharge", 200, pdFALSE, (void*) 0, DebounceTimerChargeCallback); systemTask = std::make_unique(spi, lcd, diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 6d695e2c..59660623 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -149,6 +149,16 @@ void SystemTask::Work() { nrfx_gpiote_in_init(pinTouchIrq, &pinConfig, nrfx_gpiote_evt_handler); + nrf_gpio_cfg_sense_input(pinPowerPresentIrq, (nrf_gpio_pin_pull_t) NRF_GPIO_PIN_NOPULL, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_Low); + + pinConfig.sense = NRF_GPIOTE_POLARITY_TOGGLE; + pinConfig.pull = NRF_GPIO_PIN_NOPULL; + pinConfig.is_watcher = false; + pinConfig.hi_accuracy = false; + pinConfig.skip_gpio_setup = true; + + nrfx_gpiote_in_init(pinPowerPresentIrq, &pinConfig, nrfx_gpiote_evt_handler); + idleTimer = xTimerCreate("idleTimer", pdMS_TO_TICKS(settingsController.GetScreenTimeOut()), pdFALSE, this, IdleTimerCallback); xTimerStart(idleTimer, 0); @@ -161,12 +171,9 @@ void SystemTask::Work() { uint8_t msg; if (xQueueReceive(systemTasksMsgQueue, &msg, 100)) { - // call the battery controller or use the MSG in DisplayApp to get the battery status ??? - // it is necessary to validate which is the most efficient batteryController.Update(); - // displayApp->PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); - // analyze a more efficient way to do this refreshment - // this and the UpdateMotion(); can be called on a timer to be independent of the main process ??? + // the battery does not emit events when changing charge levels, so we piggyback + // on any system event to read and update the current values Messages message = static_cast(msg); switch (message) { @@ -274,6 +281,11 @@ void SystemTask::Work() { // Remember we'll have to reset the counter next time we're awake stepCounterMustBeReset = true; break; + case Messages::OnChargingEvent: + motorController.SetDuration(15); + // Battery level is updated on every message - there's no need to do anything + break; + default: break; } diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index e65fbea0..52e71b17 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -55,7 +55,8 @@ namespace Pinetime { OnDisplayTaskSleeping, EnableSleeping, DisableSleeping, - OnNewDay + OnNewDay, + OnChargingEvent }; SystemTask(Drivers::SpiMaster& spi, @@ -121,6 +122,7 @@ namespace Pinetime { static constexpr uint8_t pinLcdDataCommand = 18; static constexpr uint8_t pinButton = 13; static constexpr uint8_t pinTouchIrq = 28; + static constexpr uint8_t pinPowerPresentIrq = 19; static void Process(void* instance); void Work(); From f6f28a95f6405c6d99670a5bc25ad0b22d2cdd05 Mon Sep 17 00:00:00 2001 From: Avamander Date: Mon, 17 May 2021 02:08:12 +0300 Subject: [PATCH 06/94] Used a macro for UUID generation, switched from C-style casts to reinterpret_cast, renamed callback --- src/components/ble/MusicService.cpp | 194 +++++++++++----------------- src/components/ble/MusicService.h | 54 +++----- 2 files changed, 93 insertions(+), 155 deletions(-) diff --git a/src/components/ble/MusicService.cpp b/src/components/ble/MusicService.cpp index 36bf2709..30dd7274 100644 --- a/src/components/ble/MusicService.cpp +++ b/src/components/ble/MusicService.cpp @@ -18,117 +18,68 @@ #include "MusicService.h" #include "systemtask/SystemTask.h" -int MSCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) { - auto musicService = static_cast(arg); - return musicService->OnCommand(conn_handle, attr_handle, ctxt); +int MusicCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt, void* arg) { + return static_cast(arg)->OnCommand(conn_handle, attr_handle, ctxt); } Pinetime::Controllers::MusicService::MusicService(Pinetime::System::SystemTask& system) : m_system(system) { - msUuid.value[14] = msId[0]; - msUuid.value[15] = msId[1]; - - msEventCharUuid.value[12] = msEventCharId[0]; - msEventCharUuid.value[13] = msEventCharId[1]; - msEventCharUuid.value[14] = msId[0]; - msEventCharUuid.value[15] = msId[1]; - - msStatusCharUuid.value[12] = msStatusCharId[0]; - msStatusCharUuid.value[13] = msStatusCharId[1]; - msStatusCharUuid.value[14] = msId[0]; - msStatusCharUuid.value[15] = msId[1]; - - msTrackCharUuid.value[12] = msTrackCharId[0]; - msTrackCharUuid.value[13] = msTrackCharId[1]; - msTrackCharUuid.value[14] = msId[0]; - msTrackCharUuid.value[15] = msId[1]; - - msArtistCharUuid.value[12] = msArtistCharId[0]; - msArtistCharUuid.value[13] = msArtistCharId[1]; - msArtistCharUuid.value[14] = msId[0]; - msArtistCharUuid.value[15] = msId[1]; - - msAlbumCharUuid.value[12] = msAlbumCharId[0]; - msAlbumCharUuid.value[13] = msAlbumCharId[1]; - msAlbumCharUuid.value[14] = msId[0]; - msAlbumCharUuid.value[15] = msId[1]; - - msPositionCharUuid.value[12] = msPositionCharId[0]; - msPositionCharUuid.value[13] = msPositionCharId[1]; - msPositionCharUuid.value[14] = msId[0]; - msPositionCharUuid.value[15] = msId[1]; - - msTotalLengthCharUuid.value[12] = msTotalLengthCharId[0]; - msTotalLengthCharUuid.value[13] = msTotalLengthCharId[1]; - msTotalLengthCharUuid.value[14] = msId[0]; - msTotalLengthCharUuid.value[15] = msId[1]; - - msTrackNumberCharUuid.value[12] = msTrackNumberCharId[0]; - msTrackNumberCharUuid.value[13] = msTrackNumberCharId[1]; - msTrackNumberCharUuid.value[14] = msId[0]; - msTrackNumberCharUuid.value[15] = msId[1]; - - msTrackTotalCharUuid.value[12] = msTrackTotalCharId[0]; - msTrackTotalCharUuid.value[13] = msTrackTotalCharId[1]; - msTrackTotalCharUuid.value[14] = msId[0]; - msTrackTotalCharUuid.value[15] = msId[1]; - - msPlaybackSpeedCharUuid.value[12] = msPlaybackSpeedCharId[0]; - msPlaybackSpeedCharUuid.value[13] = msPlaybackSpeedCharId[1]; - msPlaybackSpeedCharUuid.value[14] = msId[0]; - msPlaybackSpeedCharUuid.value[15] = msId[1]; - - msRepeatCharUuid.value[12] = msRepeatCharId[0]; - msRepeatCharUuid.value[13] = msRepeatCharId[1]; - msRepeatCharUuid.value[14] = msId[0]; - msRepeatCharUuid.value[15] = msId[1]; - - msShuffleCharUuid.value[12] = msShuffleCharId[0]; - msShuffleCharUuid.value[13] = msShuffleCharId[1]; - msShuffleCharUuid.value[14] = msId[0]; - msShuffleCharUuid.value[15] = msId[1]; - - characteristicDefinition[0] = {.uuid = (ble_uuid_t*) (&msEventCharUuid), - .access_cb = MSCallback, + characteristicDefinition[0] = {.uuid = reinterpret_cast(&msEventCharUuid), + .access_cb = MusicCallback, .arg = this, .flags = BLE_GATT_CHR_F_NOTIFY, .val_handle = &eventHandle}; - characteristicDefinition[1] = { - .uuid = (ble_uuid_t*) (&msStatusCharUuid), .access_cb = MSCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[2] = { - .uuid = (ble_uuid_t*) (&msTrackCharUuid), .access_cb = MSCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[3] = { - .uuid = (ble_uuid_t*) (&msArtistCharUuid), .access_cb = MSCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[4] = { - .uuid = (ble_uuid_t*) (&msAlbumCharUuid), .access_cb = MSCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[5] = { - .uuid = (ble_uuid_t*) (&msPositionCharUuid), .access_cb = MSCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[6] = {.uuid = (ble_uuid_t*) (&msTotalLengthCharUuid), - .access_cb = MSCallback, + characteristicDefinition[1] = {.uuid = reinterpret_cast(&msStatusCharUuid), + .access_cb = MusicCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[7] = {.uuid = (ble_uuid_t*) (&msTotalLengthCharUuid), - .access_cb = MSCallback, + characteristicDefinition[2] = {.uuid = reinterpret_cast(&msTrackCharUuid), + .access_cb = MusicCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[8] = {.uuid = (ble_uuid_t*) (&msTrackNumberCharUuid), - .access_cb = MSCallback, + characteristicDefinition[3] = {.uuid = reinterpret_cast(&msArtistCharUuid), + .access_cb = MusicCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[9] = {.uuid = (ble_uuid_t*) (&msTrackTotalCharUuid), - .access_cb = MSCallback, + characteristicDefinition[4] = {.uuid = reinterpret_cast(&msAlbumCharUuid), + .access_cb = MusicCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[10] = {.uuid = (ble_uuid_t*) (&msPlaybackSpeedCharUuid), - .access_cb = MSCallback, + characteristicDefinition[5] = {.uuid = reinterpret_cast(&msPositionCharUuid), + .access_cb = MusicCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + characteristicDefinition[6] = {.uuid = reinterpret_cast(&msTotalLengthCharUuid), + .access_cb = MusicCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + characteristicDefinition[7] = {.uuid = reinterpret_cast(&msTotalLengthCharUuid), + .access_cb = MusicCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + characteristicDefinition[8] = {.uuid = reinterpret_cast(&msTrackNumberCharUuid), + .access_cb = MusicCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + characteristicDefinition[9] = {.uuid = reinterpret_cast(&msTrackTotalCharUuid), + .access_cb = MusicCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + characteristicDefinition[10] = {.uuid = reinterpret_cast(&msPlaybackSpeedCharUuid), + .access_cb = MusicCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + characteristicDefinition[11] = {.uuid = reinterpret_cast(&msRepeatCharUuid), + .access_cb = MusicCallback, + .arg = this, + .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; + characteristicDefinition[12] = {.uuid = reinterpret_cast(&msShuffleCharUuid), + .access_cb = MusicCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[11] = { - .uuid = (ble_uuid_t*) (&msRepeatCharUuid), .access_cb = MSCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; - characteristicDefinition[12] = { - .uuid = (ble_uuid_t*) (&msShuffleCharUuid), .access_cb = MSCallback, .arg = this, .flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_READ}; characteristicDefinition[13] = {0}; - serviceDefinition[0] = {.type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = (ble_uuid_t*) &msUuid, .characteristics = characteristicDefinition}; + serviceDefinition[0] = { + .type = BLE_GATT_SVC_TYPE_PRIMARY, .uuid = reinterpret_cast(&msUuid), .characteristics = characteristicDefinition}; serviceDefinition[1] = {0}; artistName = "Waiting for"; @@ -143,7 +94,7 @@ Pinetime::Controllers::MusicService::MusicService(Pinetime::System::SystemTask& } void Pinetime::Controllers::MusicService::Init() { - int res = 0; + uint8_t res = 0; res = ble_gatts_count_cfg(serviceDefinition); ASSERT(res == 0); @@ -152,60 +103,67 @@ void Pinetime::Controllers::MusicService::Init() { } int Pinetime::Controllers::MusicService::OnCommand(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt* ctxt) { - if (ctxt->op == BLE_GATT_ACCESS_OP_WRITE_CHR) { size_t notifSize = OS_MBUF_PKTLEN(ctxt->om); - uint8_t data[notifSize + 1]; + char data[notifSize + 1]; data[notifSize] = '\0'; os_mbuf_copydata(ctxt->om, 0, notifSize, data); - char* s = (char*) &data[0]; - if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t*) &msArtistCharUuid) == 0) { + char* s = &data[0]; + if (ble_uuid_cmp(ctxt->chr->uuid, reinterpret_cast(&msArtistCharUuid)) == 0) { artistName = s; - } else if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t*) &msTrackCharUuid) == 0) { + } else if (ble_uuid_cmp(ctxt->chr->uuid, reinterpret_cast(&msTrackCharUuid)) == 0) { trackName = s; - } else if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t*) &msAlbumCharUuid) == 0) { + } else if (ble_uuid_cmp(ctxt->chr->uuid, reinterpret_cast(&msAlbumCharUuid)) == 0) { albumName = s; - } else if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t*) &msStatusCharUuid) == 0) { + } else if (ble_uuid_cmp(ctxt->chr->uuid, reinterpret_cast(&msStatusCharUuid)) == 0) { playing = s[0]; - } else if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t*) &msRepeatCharUuid) == 0) { + } else if (ble_uuid_cmp(ctxt->chr->uuid, reinterpret_cast(&msRepeatCharUuid)) == 0) { repeat = s[0]; - } else if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t*) &msShuffleCharUuid) == 0) { + } else if (ble_uuid_cmp(ctxt->chr->uuid, reinterpret_cast(&msShuffleCharUuid)) == 0) { shuffle = s[0]; - } else if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t*) &msPositionCharUuid) == 0) { + } else if (ble_uuid_cmp(ctxt->chr->uuid, reinterpret_cast(&msPositionCharUuid)) == 0) { trackProgress = (s[0] << 24) | (s[1] << 16) | (s[2] << 8) | s[3]; - } else if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t*) &msTotalLengthCharUuid) == 0) { + } else if (ble_uuid_cmp(ctxt->chr->uuid, reinterpret_cast(&msTotalLengthCharUuid)) == 0) { trackLength = (s[0] << 24) | (s[1] << 16) | (s[2] << 8) | s[3]; - } else if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t*) &msTrackNumberCharUuid) == 0) { + } else if (ble_uuid_cmp(ctxt->chr->uuid, reinterpret_cast(&msTrackNumberCharUuid)) == 0) { trackNumber = (s[0] << 24) | (s[1] << 16) | (s[2] << 8) | s[3]; - } else if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t*) &msTrackTotalCharUuid) == 0) { + } else if (ble_uuid_cmp(ctxt->chr->uuid, reinterpret_cast(&msTrackTotalCharUuid)) == 0) { tracksTotal = (s[0] << 24) | (s[1] << 16) | (s[2] << 8) | s[3]; - } else if (ble_uuid_cmp(ctxt->chr->uuid, (ble_uuid_t*) &msPlaybackSpeedCharUuid) == 0) { + } else if (ble_uuid_cmp(ctxt->chr->uuid, reinterpret_cast(&msPlaybackSpeedCharUuid)) == 0) { playbackSpeed = static_cast(((s[0] << 24) | (s[1] << 16) | (s[2] << 8) | s[3])) / 100.0f; } } return 0; } -std::string Pinetime::Controllers::MusicService::getAlbum() { +std::string Pinetime::Controllers::MusicService::getAlbum() const { return albumName; } -std::string Pinetime::Controllers::MusicService::getArtist() { +std::string Pinetime::Controllers::MusicService::getArtist() const { return artistName; } -std::string Pinetime::Controllers::MusicService::getTrack() { +std::string Pinetime::Controllers::MusicService::getTrack() const { return trackName; } -bool Pinetime::Controllers::MusicService::isPlaying() { +bool Pinetime::Controllers::MusicService::isPlaying() const { return playing; } -float Pinetime::Controllers::MusicService::getPlaybackSpeed() { +float Pinetime::Controllers::MusicService::getPlaybackSpeed() const { return playbackSpeed; } +int Pinetime::Controllers::MusicService::getProgress() const { + return trackProgress; +} + +int Pinetime::Controllers::MusicService::getTrackLength() const { + return trackLength; +} + void Pinetime::Controllers::MusicService::event(char event) { auto* om = ble_hs_mbuf_from_flat(&event, 1); @@ -216,12 +174,4 @@ void Pinetime::Controllers::MusicService::event(char event) { } ble_gattc_notify_custom(connectionHandle, eventHandle, om); -} - -int Pinetime::Controllers::MusicService::getProgress() { - return trackProgress; -} - -int Pinetime::Controllers::MusicService::getTrackLength() { - return trackLength; -} +} \ No newline at end of file diff --git a/src/components/ble/MusicService.h b/src/components/ble/MusicService.h index 5f5343e4..4314db0f 100644 --- a/src/components/ble/MusicService.h +++ b/src/components/ble/MusicService.h @@ -29,6 +29,8 @@ // 00000000-78fc-48fe-8e23-433b3a1942d0 #define MUSIC_SERVICE_UUID_BASE \ { 0xd0, 0x42, 0x19, 0x3a, 0x3b, 0x43, 0x23, 0x8e, 0xfe, 0x48, 0xfc, 0x78, 0x00, 0x00, 0x00, 0x00 } +#define MUSIC_SERVICE_CHAR_UUID(x, y) \ + { 0xd0, 0x42, 0x19, 0x3a, 0x3b, 0x43, 0x23, 0x8e, 0xfe, 0x48, 0xfc, 0x78, x, y, 0x00, 0x00 } namespace Pinetime { namespace System { @@ -46,19 +48,19 @@ namespace Pinetime { void event(char event); - std::string getArtist(); + std::string getArtist() const; - std::string getTrack(); + std::string getTrack() const; - std::string getAlbum(); + std::string getAlbum() const; - int getProgress(); + int getProgress() const; - int getTrackLength(); + int getTrackLength() const; - float getPlaybackSpeed(); + float getPlaybackSpeed() const; - bool isPlaying(); + bool isPlaying() const; static const char EVENT_MUSIC_OPEN = 0xe0; static const char EVENT_MUSIC_PLAY = 0x00; @@ -71,34 +73,20 @@ namespace Pinetime { enum MusicStatus { NotPlaying = 0x00, Playing = 0x01 }; private: - static constexpr uint8_t msId[2] = {0x00, 0x00}; - static constexpr uint8_t msEventCharId[2] = {0x01, 0x00}; - static constexpr uint8_t msStatusCharId[2] = {0x02, 0x00}; - static constexpr uint8_t msArtistCharId[2] = {0x03, 0x00}; - static constexpr uint8_t msTrackCharId[2] = {0x04, 0x00}; - static constexpr uint8_t msAlbumCharId[2] = {0x05, 0x00}; - static constexpr uint8_t msPositionCharId[2] = {0x06, 0x00}; - static constexpr uint8_t msTotalLengthCharId[2] = {0x07, 0x00}; - static constexpr uint8_t msTrackNumberCharId[2] = {0x08, 0x00}; - static constexpr uint8_t msTrackTotalCharId[2] = {0x09, 0x00}; - static constexpr uint8_t msPlaybackSpeedCharId[2] = {0x0a, 0x00}; - static constexpr uint8_t msRepeatCharId[2] = {0x0b, 0x00}; - static constexpr uint8_t msShuffleCharId[2] = {0x0c, 0x00}; - ble_uuid128_t msUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_UUID_BASE}; - ble_uuid128_t msEventCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_UUID_BASE}; - ble_uuid128_t msStatusCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_UUID_BASE}; - ble_uuid128_t msArtistCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_UUID_BASE}; - ble_uuid128_t msTrackCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_UUID_BASE}; - ble_uuid128_t msAlbumCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_UUID_BASE}; - ble_uuid128_t msPositionCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_UUID_BASE}; - ble_uuid128_t msTotalLengthCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_UUID_BASE}; - ble_uuid128_t msTrackNumberCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_UUID_BASE}; - ble_uuid128_t msTrackTotalCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_UUID_BASE}; - ble_uuid128_t msPlaybackSpeedCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_UUID_BASE}; - ble_uuid128_t msRepeatCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_UUID_BASE}; - ble_uuid128_t msShuffleCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_UUID_BASE}; + ble_uuid128_t msEventCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_CHAR_UUID(0x01, 0x00)}; + ble_uuid128_t msStatusCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_CHAR_UUID(0x02, 0x00)}; + ble_uuid128_t msArtistCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_CHAR_UUID(0x03, 0x00)}; + ble_uuid128_t msTrackCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_CHAR_UUID(0x04, 0x00)}; + ble_uuid128_t msAlbumCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_CHAR_UUID(0x05, 0x00)}; + ble_uuid128_t msPositionCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_CHAR_UUID(0x06, 0x00)}; + ble_uuid128_t msTotalLengthCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_CHAR_UUID(0x07, 0x00)}; + ble_uuid128_t msTrackNumberCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_CHAR_UUID(0x08, 0x00)}; + ble_uuid128_t msTrackTotalCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_CHAR_UUID(0x09, 0x00)}; + ble_uuid128_t msPlaybackSpeedCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_CHAR_UUID(0x0a, 0x00)}; + ble_uuid128_t msRepeatCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_CHAR_UUID(0x0b, 0x00)}; + ble_uuid128_t msShuffleCharUuid {.u = {.type = BLE_UUID_TYPE_128}, .value = MUSIC_SERVICE_CHAR_UUID(0x0c, 0x00)}; struct ble_gatt_chr_def characteristicDefinition[14]; struct ble_gatt_svc_def serviceDefinition[2]; From 8568b5f31b1b3f6b5232ba0ce6e3e6a7064fe787 Mon Sep 17 00:00:00 2001 From: Avamander Date: Mon, 17 May 2021 02:16:50 +0300 Subject: [PATCH 07/94] Updated license header year --- src/components/ble/MusicService.cpp | 2 +- src/components/ble/MusicService.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/ble/MusicService.cpp b/src/components/ble/MusicService.cpp index 30dd7274..c420a576 100644 --- a/src/components/ble/MusicService.cpp +++ b/src/components/ble/MusicService.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2020 JF, Adam Pigg, Avamander +/* Copyright (C) 2020-2021 JF, Adam Pigg, Avamander This file is part of InfiniTime. diff --git a/src/components/ble/MusicService.h b/src/components/ble/MusicService.h index 4314db0f..0b5a7464 100644 --- a/src/components/ble/MusicService.h +++ b/src/components/ble/MusicService.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2020 JF, Adam Pigg, Avamander +/* Copyright (C) 2020-2021 JF, Adam Pigg, Avamander This file is part of InfiniTime. From 9ab298c09e273479822d10aad9f7bfe1d287ce75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Mon, 17 May 2021 09:52:31 +0200 Subject: [PATCH 08/94] Fix wrong initialization of 'pinPowerPresent' pin that would prevent the touchpanel from working correctly when the device boots while connected to the charger. --- src/systemtask/SystemTask.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 59660623..80f4d5db 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -149,16 +149,19 @@ void SystemTask::Work() { nrfx_gpiote_in_init(pinTouchIrq, &pinConfig, nrfx_gpiote_evt_handler); - nrf_gpio_cfg_sense_input(pinPowerPresentIrq, (nrf_gpio_pin_pull_t) NRF_GPIO_PIN_NOPULL, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_Low); - pinConfig.sense = NRF_GPIOTE_POLARITY_TOGGLE; pinConfig.pull = NRF_GPIO_PIN_NOPULL; pinConfig.is_watcher = false; pinConfig.hi_accuracy = false; pinConfig.skip_gpio_setup = true; - nrfx_gpiote_in_init(pinPowerPresentIrq, &pinConfig, nrfx_gpiote_evt_handler); + if (nrf_gpio_pin_read(pinPowerPresentIrq)) { + nrf_gpio_cfg_sense_input(pinPowerPresentIrq, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_LOW); + } else { + nrf_gpio_cfg_sense_input(pinPowerPresentIrq, NRF_GPIO_PIN_NOPULL, NRF_GPIO_PIN_SENSE_HIGH); + } + idleTimer = xTimerCreate("idleTimer", pdMS_TO_TICKS(settingsController.GetScreenTimeOut()), pdFALSE, this, IdleTimerCallback); xTimerStart(idleTimer, 0); From 8c3b250dbfe17be61462adc8f84760ce9a648e55 Mon Sep 17 00:00:00 2001 From: Florian Date: Thu, 20 May 2021 20:34:21 +0200 Subject: [PATCH 09/94] removed an empty assignment that caused a compiler warning (#372) --- src/displayapp/screens/Notifications.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/displayapp/screens/Notifications.cpp b/src/displayapp/screens/Notifications.cpp index 1f113750..1a1729ea 100644 --- a/src/displayapp/screens/Notifications.cpp +++ b/src/displayapp/screens/Notifications.cpp @@ -180,7 +180,6 @@ Notifications::NotificationItem::NotificationItem(const char* title, pchar = strchr(title, '\n'); while (pchar != nullptr) { *pchar = ' '; - pchar = pchar = strchr(pchar + 1, '\n'); } lv_label_set_text(alert_type, title); From 13e3463276114dff838fc8fe281754eecfbe9538 Mon Sep 17 00:00:00 2001 From: Florian Date: Thu, 20 May 2021 20:43:54 +0200 Subject: [PATCH 10/94] Timer App (#355) * built timer app * Style improvements * making sure buttons stay hidden when the app is reopened and reappear after the timer runs out * more sensible calculations of time deltas. eliminated that mysterious scaling factor * changing the timer icon --- src/CMakeLists.txt | 5 + src/components/motor/MotorController.cpp | 1 - src/components/timer/TimerController.cpp | 64 +++++++ src/components/timer/TimerController.h | 36 ++++ src/displayapp/Apps.h | 1 + src/displayapp/DisplayApp.cpp | 18 +- src/displayapp/DisplayApp.h | 5 +- src/displayapp/Messages.h | 1 + src/displayapp/fonts/README.md | 2 +- src/displayapp/fonts/jetbrains_mono_bold_20.c | 36 ++-- src/displayapp/screens/ApplicationList.cpp | 2 +- src/displayapp/screens/Symbols.h | 1 + src/displayapp/screens/Timer.cpp | 173 ++++++++++++++++++ src/displayapp/screens/Timer.h | 42 +++++ src/systemtask/SystemTask.cpp | 17 +- src/systemtask/SystemTask.h | 3 + 16 files changed, 385 insertions(+), 22 deletions(-) create mode 100644 src/components/timer/TimerController.cpp create mode 100644 src/components/timer/TimerController.h create mode 100644 src/displayapp/screens/Timer.cpp create mode 100644 src/displayapp/screens/Timer.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index acbfba18..7ccd4ce7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -407,6 +407,7 @@ list(APPEND SOURCE_FILES displayapp/screens/List.cpp displayapp/screens/BatteryInfo.cpp displayapp/screens/Steps.cpp + displayapp/screens/Timer.cpp ## Settings displayapp/screens/settings/QuickSettings.cpp @@ -459,6 +460,7 @@ list(APPEND SOURCE_FILES components/firmwarevalidator/FirmwareValidator.cpp components/motor/MotorController.cpp components/settings/Settings.cpp + components/timer/TimerController.cpp drivers/Cst816s.cpp FreeRTOS/port.c FreeRTOS/port_cmsis_systick.c @@ -520,6 +522,7 @@ list(APPEND RECOVERY_SOURCE_FILES components/ble/HeartRateService.cpp components/firmwarevalidator/FirmwareValidator.cpp components/settings/Settings.cpp + components/timer/TimerController.cpp drivers/Cst816s.cpp FreeRTOS/port.c FreeRTOS/port_cmsis_systick.c @@ -590,6 +593,7 @@ set(INCLUDE_FILES displayapp/screens/Notifications.h displayapp/screens/HeartRate.h displayapp/screens/Motion.h + displayapp/screens/Timer.h drivers/St7789.h drivers/SpiNorFlash.h drivers/SpiMaster.h @@ -619,6 +623,7 @@ set(INCLUDE_FILES components/ble/BleClient.h components/ble/HeartRateService.h components/settings/Settings.h + components/timer/TimerController.h drivers/Cst816s.h FreeRTOS/portmacro.h FreeRTOS/portmacro_cmsis.h diff --git a/src/components/motor/MotorController.cpp b/src/components/motor/MotorController.cpp index a834ab6b..3afa0ced 100644 --- a/src/components/motor/MotorController.cpp +++ b/src/components/motor/MotorController.cpp @@ -13,7 +13,6 @@ MotorController::MotorController(Controllers::Settings& settingsController) : se void MotorController::Init() { nrf_gpio_cfg_output(pinMotor); nrf_gpio_pin_set(pinMotor); - app_timer_init(); app_timer_create(&vibTimer, APP_TIMER_MODE_SINGLE_SHOT, vibrate); } diff --git a/src/components/timer/TimerController.cpp b/src/components/timer/TimerController.cpp new file mode 100644 index 00000000..3b25901c --- /dev/null +++ b/src/components/timer/TimerController.cpp @@ -0,0 +1,64 @@ +// +// Created by florian on 16.05.21. +// + +#include "TimerController.h" +#include "systemtask/SystemTask.h" +#include "app_timer.h" +#include "task.h" + +using namespace Pinetime::Controllers; + + +APP_TIMER_DEF(timerAppTimer); + + +TimerController::TimerController(System::SystemTask& systemTask) : systemTask{systemTask} { +} + + +void TimerController::Init() { + app_timer_create(&timerAppTimer, APP_TIMER_MODE_SINGLE_SHOT, timerEnd); + +} + +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; +} + +uint32_t TimerController::GetTimeRemaining() { + if (!timerRunning) { + return 0; + } + 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; +} + +void TimerController::timerEnd(void* p_context) { + + auto* controller = static_cast (p_context); + controller->timerRunning = false; + controller->systemTask.PushMessage(System::SystemTask::Messages::OnTimerDone); +} + +void TimerController::StopTimer() { + app_timer_stop(timerAppTimer); + timerRunning = false; +} + +bool TimerController::IsRunning() { + return timerRunning; +} \ No newline at end of file diff --git a/src/components/timer/TimerController.h b/src/components/timer/TimerController.h new file mode 100644 index 00000000..5a0b293e --- /dev/null +++ b/src/components/timer/TimerController.h @@ -0,0 +1,36 @@ +#pragma once + +#include +#include "app_timer.h" +#include "portmacro_cmsis.h" + +namespace Pinetime { + namespace System { + class SystemTask; + } + namespace Controllers { + + class TimerController { + public: + TimerController(Pinetime::System::SystemTask& systemTask); + + void Init(); + + void StartTimer(uint32_t duration); + + void StopTimer(); + + uint32_t GetTimeRemaining(); + + bool IsRunning(); + + private: + System::SystemTask& systemTask; + + static void timerEnd(void* p_context); + + TickType_t endTicks; + bool timerRunning = false; + }; + } +} \ No newline at end of file diff --git a/src/displayapp/Apps.h b/src/displayapp/Apps.h index 09a20181..2df517f8 100644 --- a/src/displayapp/Apps.h +++ b/src/displayapp/Apps.h @@ -11,6 +11,7 @@ namespace Pinetime { FirmwareValidation, NotificationsPreview, Notifications, + Timer, FlashLight, BatteryInfo, Music, diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index a6c4a3ec..419b9f6f 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" #include "components/datetime/DateTimeController.h" @@ -55,7 +56,8 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, Pinetime::Controllers::HeartRateController& heartRateController, Controllers::Settings& settingsController, Pinetime::Controllers::MotorController& motorController, - Pinetime::Controllers::MotionController& motionController) + Pinetime::Controllers::MotionController& motionController, + Pinetime::Controllers::TimerController& timerController) : lcd {lcd}, lvgl {lvgl}, touchPanel {touchPanel}, @@ -68,7 +70,8 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, heartRateController {heartRateController}, settingsController {settingsController}, motorController {motorController}, - motionController {motionController} { + motionController {motionController}, + timerController {timerController} { msgQueue = xQueueCreate(queueSize, itemSize); // Start clock when smartwatch boots LoadApp(Apps::Clock, DisplayApp::FullRefreshDirections::None); @@ -148,6 +151,14 @@ void DisplayApp::Refresh() { case Messages::NewNotification: LoadApp(Apps::NotificationsPreview, DisplayApp::FullRefreshDirections::Down); break; + case Messages::TimerDone: + if (currentApp == Apps::Timer) { + auto *timer = dynamic_cast(currentScreen.get()); + timer->setDone(); + } else { + LoadApp(Apps::Timer, DisplayApp::FullRefreshDirections::Down); + } + break; case Messages::TouchEvent: { if (state != States::Running) break; @@ -264,6 +275,9 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) this, notificationManager, systemTask.nimble().alertService(), Screens::Notifications::Modes::Preview); ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; + case Apps::Timer: + currentScreen = std::make_unique(this, timerController); + break; // Settings case Apps::QuickSettings: diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index ffe27cf1..0c7bd216 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -12,6 +12,7 @@ #include "components/firmwarevalidator/FirmwareValidator.h" #include "components/settings/Settings.h" #include "displayapp/screens/Screen.h" +#include "components/timer/TimerController.h" #include "Messages.h" namespace Pinetime { @@ -53,7 +54,8 @@ namespace Pinetime { Pinetime::Controllers::HeartRateController& heartRateController, Controllers::Settings& settingsController, Pinetime::Controllers::MotorController& motorController, - Pinetime::Controllers::MotionController& motionController); + Pinetime::Controllers::MotionController& motionController, + Pinetime::Controllers::TimerController& timerController); void Start(); void PushMessage(Display::Messages msg); @@ -76,6 +78,7 @@ namespace Pinetime { Pinetime::Controllers::Settings& settingsController; Pinetime::Controllers::MotorController& motorController; Pinetime::Controllers::MotionController& motionController; + Pinetime::Controllers::TimerController& timerController; Pinetime::Controllers::FirmwareValidator validator; Controllers::BrightnessController brightnessController; diff --git a/src/displayapp/Messages.h b/src/displayapp/Messages.h index 81871c54..ce65f846 100644 --- a/src/displayapp/Messages.h +++ b/src/displayapp/Messages.h @@ -11,6 +11,7 @@ namespace Pinetime { TouchEvent, ButtonPushed, NewNotification, + TimerDone, BleFirmwareUpdateStarted, UpdateTimeOut }; diff --git a/src/displayapp/fonts/README.md b/src/displayapp/fonts/README.md index f43e9c52..183ad7e4 100644 --- a/src/displayapp/fonts/README.md +++ b/src/displayapp/fonts/README.md @@ -12,7 +12,7 @@ * Do not enable font compression and horizontal subpixel hinting * Load the file `JetBrainsMono-Bold.tff` and specify the following range : `0x20-0x7f, 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` + 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` * Click on Convert, and download the file `jetbrains_mono_bold_20.c` and copy it in `src/DisplayApp/Fonts` Add new symbols: diff --git a/src/displayapp/fonts/jetbrains_mono_bold_20.c b/src/displayapp/fonts/jetbrains_mono_bold_20.c index f4050db8..9174ff48 100644 --- a/src/displayapp/fonts/jetbrains_mono_bold_20.c +++ b/src/displayapp/fonts/jetbrains_mono_bold_20.c @@ -900,6 +900,13 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { 0x7, 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, @@ -1184,17 +1191,18 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { {.bitmap_index = 3380, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 3418, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, {.bitmap_index = 3456, .adv_w = 400, .box_w = 25, .box_h = 12, .ofs_x = 0, .ofs_y = 1}, - {.bitmap_index = 3494, .adv_w = 280, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 3532, .adv_w = 200, .box_w = 11, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3561, .adv_w = 280, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, - {.bitmap_index = 3599, .adv_w = 400, .box_w = 25, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3665, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, - {.bitmap_index = 3714, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3764, .adv_w = 400, .box_w = 25, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3824, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 3877, .adv_w = 360, .box_w = 22, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3932, .adv_w = 360, .box_w = 22, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, - {.bitmap_index = 3985, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0} + {.bitmap_index = 3494, .adv_w = 240, .box_w = 15, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3530, .adv_w = 280, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 3568, .adv_w = 200, .box_w = 11, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3597, .adv_w = 280, .box_w = 16, .box_h = 19, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 3635, .adv_w = 400, .box_w = 25, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3701, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 3750, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3800, .adv_w = 400, .box_w = 25, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3860, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3913, .adv_w = 360, .box_w = 22, .box_h = 20, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3968, .adv_w = 360, .box_w = 22, .box_h = 19, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 4021, .adv_w = 320, .box_w = 20, .box_h = 15, .ofs_x = 0, .ofs_y = 0} }; /*--------------------- @@ -1205,8 +1213,8 @@ static const uint16_t unicode_list_2[] = { 0x0, 0x16, 0x23, 0x26, 0x27, 0x28, 0x39, 0x47, 0x4a, 0x4b, 0x4c, 0x50, 0x68, 0x94, 0x128, 0x184, 0x1e5, 0x1fb, 0x21d, 0x23f, 0x240, 0x241, 0x242, 0x243, - 0x292, 0x293, 0x2f1, 0x3dc, 0x3fc, 0x45c, 0x54a, 0x55f, - 0x59e, 0x59f, 0x6a8 + 0x251, 0x292, 0x293, 0x2f1, 0x3dc, 0x3fc, 0x45c, 0x54a, + 0x55f, 0x59e, 0x59f, 0x6a8 }; /*Collect the unicode lists and glyph_id offsets*/ @@ -1222,7 +1230,7 @@ static const lv_font_fmt_txt_cmap_t cmaps[] = }, { .range_start = 61441, .range_length = 1705, .glyph_id_start = 160, - .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 35, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 36, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY } }; diff --git a/src/displayapp/screens/ApplicationList.cpp b/src/displayapp/screens/ApplicationList.cpp index 1eb36999..d599f5cc 100644 --- a/src/displayapp/screens/ApplicationList.cpp +++ b/src/displayapp/screens/ApplicationList.cpp @@ -51,7 +51,7 @@ std::unique_ptr ApplicationList::CreateScreen1() { {Symbols::map, Apps::Navigation}, {Symbols::shoe, Apps::Steps}, {Symbols::heartBeat, Apps::HeartRate}, - {"", Apps::None}, + {Symbols::hourGlass, Apps::Timer}, }}; return std::make_unique(0, 2, app, settingsController, batteryController, dateTimeController, applications); diff --git a/src/displayapp/screens/Symbols.h b/src/displayapp/screens/Symbols.h index e60825c1..8d55f693 100644 --- a/src/displayapp/screens/Symbols.h +++ b/src/displayapp/screens/Symbols.h @@ -38,6 +38,7 @@ namespace Pinetime { static constexpr const char* pause = "\xEF\x81\x8C"; static constexpr const char* stop = "\xEF\x81\x8D"; static constexpr const char* stopWatch = "\xEF\x8B\xB2"; + static constexpr const char* hourGlass = "\xEF\x89\x92"; static constexpr const char* lapsFlag = "\xEF\x80\xA4"; // lv_font_sys_48.c diff --git a/src/displayapp/screens/Timer.cpp b/src/displayapp/screens/Timer.cpp new file mode 100644 index 00000000..260a17ef --- /dev/null +++ b/src/displayapp/screens/Timer.cpp @@ -0,0 +1,173 @@ +#include "Timer.h" + +#include "Screen.h" +#include "Symbols.h" +#include "lvgl/lvgl.h" + + +using namespace Pinetime::Applications::Screens; + + +static void btnEventHandler(lv_obj_t* obj, lv_event_t event) { + Timer* screen = static_cast(obj->user_data); + screen->OnButtonEvent(obj, event); +} + +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); + txtMUp = lv_label_create(btnMinutesUp, nullptr); + lv_label_set_text(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); + txtMDown = lv_label_create(btnMinutesDown, nullptr); + lv_label_set_text(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); + txtSUp = lv_label_create(btnSecondsUp, nullptr); + lv_label_set_text(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); + txtSDown = lv_label_create(btnSecondsDown, nullptr); + lv_label_set_text(txtSDown, "-"); + +} + + +Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController) + : Screen(app), + running{true}, + 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); + + uint32_t seconds = timerController.GetTimeRemaining() / 1000; + lv_label_set_text_fmt(time, "%02d:%02d", seconds / 60, seconds % 60); + + lv_obj_align(time, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 0, -20); + + 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); + txtPlayPause = lv_label_create(btnPlayPause, nullptr); + if (timerController.IsRunning()) { + lv_label_set_text(txtPlayPause, Symbols::pause); + } else { + lv_label_set_text(txtPlayPause, Symbols::play); + createButtons(); + } + +} + +Timer::~Timer() { + lv_obj_clean(lv_scr_act()); + +} + +bool Timer::Refresh() { + if (timerController.IsRunning()) { + uint32_t seconds = timerController.GetTimeRemaining() / 1000; + lv_label_set_text_fmt(time, "%02d:%02d", seconds / 60, seconds % 60); + } + return running; +} + +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); + uint32_t seconds = timerController.GetTimeRemaining() / 1000; + minutesToSet = seconds / 60; + secondsToSet = seconds % 60; + timerController.StopTimer(); + createButtons(); + + } else if (secondsToSet + minutesToSet > 0) { + lv_label_set_text(txtPlayPause, Symbols::pause); + timerController.StartTimer((secondsToSet + minutesToSet * 60) * 1000); + + lv_obj_del(btnSecondsDown); + btnSecondsDown = nullptr; + lv_obj_del(btnSecondsUp); + btnSecondsUp = nullptr; + lv_obj_del(btnMinutesDown); + btnMinutesDown = nullptr; + lv_obj_del(btnMinutesUp); + btnMinutesUp = nullptr; + + } + } else { + if (!timerController.IsRunning()) { + if (obj == btnMinutesUp) { + if (minutesToSet >= 59) { + minutesToSet = 0; + } else { + minutesToSet++; + } + lv_label_set_text_fmt(time, "%02d:%02d", minutesToSet, secondsToSet); + + } else if (obj == btnMinutesDown) { + if (minutesToSet == 0) { + minutesToSet = 59; + } else { + minutesToSet--; + } + lv_label_set_text_fmt(time, "%02d:%02d", minutesToSet, secondsToSet); + + } else if (obj == btnSecondsUp) { + if (secondsToSet >= 59) { + secondsToSet = 0; + } else { + secondsToSet++; + } + lv_label_set_text_fmt(time, "%02d:%02d", minutesToSet, secondsToSet); + + } else if (obj == btnSecondsDown) { + if (secondsToSet == 0) { + secondsToSet = 59; + } else { + secondsToSet--; + } + lv_label_set_text_fmt(time, "%02d:%02d", minutesToSet, secondsToSet); + + } + } + + } + + } + +} + + +void Timer::setDone() { + lv_label_set_text(time, "00:00"); + lv_label_set_text(txtPlayPause, Symbols::play); + secondsToSet = 0; + minutesToSet = 0; + createButtons(); +} \ No newline at end of file diff --git a/src/displayapp/screens/Timer.h b/src/displayapp/screens/Timer.h new file mode 100644 index 00000000..0d66f2d4 --- /dev/null +++ b/src/displayapp/screens/Timer.h @@ -0,0 +1,42 @@ +#pragma once + +#include "Screen.h" +#include "components/datetime/DateTimeController.h" +#include "systemtask/SystemTask.h" +#include "../LittleVgl.h" + +#include "components/timer/TimerController.h" + +namespace Pinetime::Applications::Screens { + + + class Timer : public Screen { + public: + + enum class Modes { + Normal, Done + }; + + Timer(DisplayApp* app, Controllers::TimerController& timerController); + + ~Timer() override; + + bool Refresh() override; + + void setDone(); + + void OnButtonEvent(lv_obj_t* obj, lv_event_t event); + + private: + + bool running; + uint8_t secondsToSet = 0; + uint8_t minutesToSet = 0; + Controllers::TimerController& timerController; + + void createButtons(); + + lv_obj_t* time, * msecTime, * btnPlayPause, * txtPlayPause, * btnMinutesUp, * btnMinutesDown, * btnSecondsUp, * btnSecondsDown, * txtMUp, + * txtMDown, * txtSUp, * txtSDown; + }; +} \ No newline at end of file diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 80f4d5db..58377764 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -56,6 +56,7 @@ SystemTask::SystemTask(Drivers::SpiMaster& spi, heartRateController {*this}, bleController {bleController}, dateTimeController {*this}, + timerController {*this}, watchdog {}, watchdogView {watchdog}, motorController {motorController}, @@ -83,6 +84,8 @@ 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(); @@ -96,6 +99,7 @@ void SystemTask::Work() { batteryController.Init(); motorController.Init(); motionSensor.SoftReset(); + timerController.Init(); // Reset the TWI device because the motion sensor chip most probably crashed it... twiMaster.Sleep(); @@ -116,7 +120,8 @@ void SystemTask::Work() { heartRateController, settingsController, motorController, - motionController); + motionController, + timerController); displayApp->Start(); displayApp->PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); @@ -233,11 +238,19 @@ void SystemTask::Work() { displayApp->PushMessage(Pinetime::Applications::Display::Messages::UpdateDateTime); break; case Messages::OnNewNotification: - if (isSleeping && !isWakingUp) + if (isSleeping && !isWakingUp) { GoToRunning(); + } motorController.SetDuration(35); displayApp->PushMessage(Pinetime::Applications::Display::Messages::NewNotification); break; + case Messages::OnTimerDone: + if (isSleeping && !isWakingUp) { + GoToRunning(); + } + motorController.SetDuration(35); + displayApp->PushMessage(Pinetime::Applications::Display::Messages::TimerDone); + break; case Messages::BleConnected: ReloadIdleTimer(); isBleDiscoveryTimerRunning = true; diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index 52e71b17..ea41a69d 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -16,6 +16,7 @@ #include "components/ble/NimbleController.h" #include "components/ble/NotificationManager.h" #include "components/motor/MotorController.h" +#include "components/timer/TimerController.h" #ifdef PINETIME_IS_RECOVERY #include "displayapp/DisplayAppRecovery.h" #include "displayapp/DummyLittleVgl.h" @@ -45,6 +46,7 @@ namespace Pinetime { TouchWakeUp, OnNewTime, OnNewNotification, + OnTimerDone, OnNewCall, BleConnected, UpdateTimeOut, @@ -100,6 +102,7 @@ namespace Pinetime { Pinetime::Controllers::Ble& bleController; Pinetime::Controllers::DateTime dateTimeController; + Pinetime::Controllers::TimerController timerController; QueueHandle_t systemTasksMsgQueue; std::atomic isSleeping {false}; std::atomic isGoingToSleep {false}; From 7c9513be8a3bf36fda5706cb0fb1bd6232d42ffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Fri, 21 May 2021 11:37:32 +0200 Subject: [PATCH 11/94] Set version to 1.1.0. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c529f39..1a488eaa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.10) -project(pinetime VERSION 1.0.0 LANGUAGES C CXX ASM) +project(pinetime VERSION 1.1.0 LANGUAGES C CXX ASM) set(CMAKE_C_STANDARD 99) set(CMAKE_CXX_STANDARD 14) From f88c0f41fac506cc55e026cc67d1d5bce4669d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Fri, 21 May 2021 11:56:50 +0200 Subject: [PATCH 12/94] Fix recovery DisplayApp. --- src/displayapp/DisplayAppRecovery.cpp | 5 +++-- src/displayapp/DisplayAppRecovery.h | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/displayapp/DisplayAppRecovery.cpp b/src/displayapp/DisplayAppRecovery.cpp index a132a47c..856eafd8 100644 --- a/src/displayapp/DisplayAppRecovery.cpp +++ b/src/displayapp/DisplayAppRecovery.cpp @@ -17,9 +17,10 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, System::SystemTask& systemTask, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::HeartRateController& heartRateController, - Pinetime::Controllers::Settings& settingsController, + Controllers::Settings& settingsController, Pinetime::Controllers::MotorController& motorController, - Pinetime::Controllers::MotionController& motionController) + Pinetime::Controllers::MotionController& motionController, + Pinetime::Controllers::TimerController& timerController) : lcd {lcd}, bleController {bleController} { msgQueue = xQueueCreate(queueSize, itemSize); } diff --git a/src/displayapp/DisplayAppRecovery.h b/src/displayapp/DisplayAppRecovery.h index 30b8e0a1..2c5a36fb 100644 --- a/src/displayapp/DisplayAppRecovery.h +++ b/src/displayapp/DisplayAppRecovery.h @@ -23,6 +23,7 @@ #include "Apps.h" #include "Messages.h" #include "DummyLittleVgl.h" +#include "components/timer/TimerController.h" namespace Pinetime { namespace System { @@ -41,9 +42,10 @@ namespace Pinetime { System::SystemTask& systemTask, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::HeartRateController& heartRateController, - Pinetime::Controllers::Settings& settingsController, + Controllers::Settings& settingsController, Pinetime::Controllers::MotorController& motorController, - Pinetime::Controllers::MotionController& motionController); + Pinetime::Controllers::MotionController& motionController, + Pinetime::Controllers::TimerController& timerController); void Start(); void PushMessage(Pinetime::Applications::Display::Messages msg); From b39310508292b6d5f0d235872fad6b0bf31efb75 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Wed, 26 May 2021 15:15:10 +0300 Subject: [PATCH 13/94] improve ui and optimize code --- src/displayapp/screens/StopWatch.cpp | 35 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index d7cd20c3..76c4bfa0 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -61,22 +61,32 @@ StopWatch::StopWatch(DisplayApp* app) 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_obj_align(time, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 0, -45); + 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_obj_align(msecTime, lv_scr_act(), LV_ALIGN_IN_LEFT_MID, 108, 3); + lv_obj_align(msecTime, lv_scr_act(), LV_ALIGN_CENTER, 0, 3); btnPlayPause = lv_btn_create(lv_scr_act(), nullptr); btnPlayPause->user_data = this; lv_obj_set_event_cb(btnPlayPause, play_pause_event_handler); - lv_obj_align(btnPlayPause, lv_scr_act(), LV_ALIGN_IN_BOTTOM_MID, 0, -10); - lv_obj_set_height(btnPlayPause, 40); + lv_obj_set_height(btnPlayPause, 50); + 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); + 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_align(btnStopLap, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); + txtStopLap = lv_label_create(btnStopLap, nullptr); + lv_obj_set_hidden(btnStopLap, true); + lapOneText = lv_label_create(lv_scr_act(), nullptr); // 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); @@ -88,9 +98,6 @@ StopWatch::StopWatch(DisplayApp* app) 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, ""); - - // We don't want this button in the init state - btnStopLap = nullptr; } StopWatch::~StopWatch() { @@ -115,10 +122,6 @@ bool StopWatch::Refresh() { // Init state when an user first opens the app // and when a stop/reset button is pressed case States::Init: { - if (btnStopLap != nullptr) { - lv_obj_del(btnStopLap); - btnStopLap = nullptr; - } // The initial default value lv_label_set_text(time, "00:00"); lv_label_set_text(msecTime, "00"); @@ -129,16 +132,12 @@ bool StopWatch::Refresh() { lapNr = 0; if (currentEvent == Events::Play) { - btnStopLap = lv_btn_create(lv_scr_act(), nullptr); - btnStopLap->user_data = this; - lv_obj_set_event_cb(btnStopLap, stop_lap_event_handler); - lv_obj_align(btnStopLap, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 0, 0); - lv_obj_set_height(btnStopLap, 40); - txtStopLap = lv_label_create(btnStopLap, nullptr); - lv_label_set_text(txtStopLap, Symbols::lapsFlag); + lv_obj_set_hidden(btnStopLap, false); startTime = xTaskGetTickCount(); currentState = States::Running; + } else { + lv_obj_set_hidden(btnStopLap, true); } break; } From c6969268fc162c41dbb37f7a2f061858563ba3c1 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Wed, 26 May 2021 16:13:40 +0300 Subject: [PATCH 14/94] Keep button visible, but disabled --- src/displayapp/screens/StopWatch.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/displayapp/screens/StopWatch.cpp b/src/displayapp/screens/StopWatch.cpp index 76c4bfa0..7c128d1b 100644 --- a/src/displayapp/screens/StopWatch.cpp +++ b/src/displayapp/screens/StopWatch.cpp @@ -84,8 +84,12 @@ StopWatch::StopWatch(DisplayApp* app) lv_obj_set_height(btnStopLap, 50); lv_obj_set_width(btnStopLap, 115); 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); - lv_obj_set_hidden(btnStopLap, true); + 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_obj_set_state(btnStopLap, LV_STATE_DISABLED); + lv_obj_set_state(txtStopLap, LV_STATE_DISABLED); lapOneText = lv_label_create(lv_scr_act(), nullptr); // lv_obj_set_style_local_text_font(lapOneText, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_bold_20); @@ -132,12 +136,14 @@ bool StopWatch::Refresh() { lapNr = 0; if (currentEvent == Events::Play) { - lv_obj_set_hidden(btnStopLap, false); + lv_obj_set_state(btnStopLap, LV_STATE_DEFAULT); + lv_obj_set_state(txtStopLap, LV_STATE_DEFAULT); startTime = xTaskGetTickCount(); currentState = States::Running; } else { - lv_obj_set_hidden(btnStopLap, true); + lv_obj_set_state(btnStopLap, LV_STATE_DISABLED); + lv_obj_set_state(txtStopLap, LV_STATE_DISABLED); } break; } From 287399f9932eb5562917c3fc4986cc65bec7fed2 Mon Sep 17 00:00:00 2001 From: JF002 Date: Tue, 1 Jun 2021 21:01:32 +0200 Subject: [PATCH 15/94] Navigation app: reduce memory usage (#362) * Navigation app: - Renaming and reformatting according to coding conventions - declare iconMap as constexpr and use char* instead of std::string This reduces the flash usage from 424644B to 419344B (-5300B)! --- src/displayapp/screens/Navigation.cpp | 137 +++++++++++++++++++++----- src/displayapp/screens/Navigation.h | 101 +------------------ 2 files changed, 118 insertions(+), 120 deletions(-) diff --git a/src/displayapp/screens/Navigation.cpp b/src/displayapp/screens/Navigation.cpp index b5ce8b83..79b04e21 100644 --- a/src/displayapp/screens/Navigation.cpp +++ b/src/displayapp/screens/Navigation.cpp @@ -24,6 +24,106 @@ using namespace Pinetime::Applications::Screens; LV_FONT_DECLARE(lv_font_navi_80) +namespace { + constexpr std::array, 86> m_iconMap = {{ + {"arrive-left", "\xEE\xA4\x81"}, + {"arrive-right", "\xEE\xA4\x82"}, + {"arrive-straight", "\xEE\xA4\x80"}, + {"arrive", "\xEE\xA4\x80"}, + {"close", "\xEE\xA4\x83"}, + {"continue-left", "\xEE\xA4\x85"}, + {"continue-right", "\xEE\xA4\x86"}, + {"continue-slight-left", "\xEE\xA4\x87"}, + {"continue-slight-right", "\xEE\xA4\x88"}, + {"continue-straight", "\xEE\xA4\x84"}, + {"continue-uturn", "\xEE\xA4\x89"}, + {"continue", "\xEE\xA4\x84"}, + {"depart-left", "\xEE\xA4\x8B"}, + {"depart-right", "\xEE\xA4\x8C"}, + {"depart-straight", "\xEE\xA4\x8A"}, + {"end-of-road-left", "\xEE\xA4\x8D"}, + {"end-of-road-right", "\xEE\xA4\x8E"}, + {"ferry", "\xEE\xA4\x8F"}, + {"flag", "\xEE\xA4\x90"}, + {"fork-left", "\xEE\xA4\x92"}, + {"fork-right", "\xEE\xA4\x93"}, + {"fork-slight-left", "\xEE\xA4\x94"}, + {"fork-slight-right", "\xEE\xA4\x95"}, + {"fork-straight", "\xEE\xA4\x96"}, + {"invalid", "\xEE\xA4\x84"}, + {"invalid-left", "\xEE\xA4\x85"}, + {"invalid-right", "\xEE\xA4\x86"}, + {"invalid-slight-left", "\xEE\xA4\x87"}, + {"invalid-slight-right", "\xEE\xA4\x88"}, + {"invalid-straight", "\xEE\xA4\x84"}, + {"invalid-uturn", "\xEE\xA4\x89"}, + {"merge-left", "\xEE\xA4\x97"}, + {"merge-right", "\xEE\xA4\x98"}, + {"merge-slight-left", "\xEE\xA4\x99"}, + {"merge-slight-right", "\xEE\xA4\x9A"}, + {"merge-straight", "\xEE\xA4\x84"}, + {"new-name-left", "\xEE\xA4\x85"}, + {"new-name-right", "\xEE\xA4\x86"}, + {"new-name-sharp-left", "\xEE\xA4\x9B"}, + {"new-name-sharp-right", "\xEE\xA4\x9C"}, + {"new-name-slight-left", "\xEE\xA4\x87"}, + {"new-name-slight-right", "\xEE\xA4\x88"}, + {"new-name-straight", "\xEE\xA4\x84"}, + {"notification-left", "\xEE\xA4\x85"}, + {"notification-right", "\xEE\xA4\x86"}, + {"notification-sharp-left", "\xEE\xA4\x9B"}, + {"notification-sharp-right", "\xEE\xA4\xA5"}, + {"notification-slight-left", "\xEE\xA4\x87"}, + {"notification-slight-right", "\xEE\xA4\x88"}, + {"notification-straight", "\xEE\xA4\x84"}, + {"off-ramp-left", "\xEE\xA4\x9D"}, + {"off-ramp-right", "\xEE\xA4\x9E"}, + {"off-ramp-slight-left", "\xEE\xA4\x9F"}, + {"off-ramp-slight-right", "\xEE\xA4\xA0"}, + {"on-ramp-left", "\xEE\xA4\x85"}, + {"on-ramp-right", "\xEE\xA4\x86"}, + {"on-ramp-sharp-left", "\xEE\xA4\x9B"}, + {"on-ramp-sharp-right", "\xEE\xA4\xA5"}, + {"on-ramp-slight-left", "\xEE\xA4\x87"}, + {"on-ramp-slight-right", "\xEE\xA4\x88"}, + {"on-ramp-straight", "\xEE\xA4\x84"}, + {"rotary", "\xEE\xA4\xA1"}, + {"rotary-left", "\xEE\xA4\xA2"}, + {"rotary-right", "\xEE\xA4\xA3"}, + {"rotary-sharp-left", "\xEE\xA4\xA4"}, + {"rotary-sharp-right", "\xEE\xA4\xA5"}, + {"rotary-slight-left", "\xEE\xA4\xA6"}, + {"rotary-slight-right", "\xEE\xA4\xA7"}, + {"rotary-straight", "\xEE\xA4\xA8"}, + {"roundabout", "\xEE\xA4\xA1"}, + {"roundabout-left", "\xEE\xA4\xA2"}, + {"roundabout-right", "\xEE\xA4\xA3"}, + {"roundabout-sharp-left", "\xEE\xA4\xA4"}, + {"roundabout-sharp-right", "\xEE\xA4\xA5"}, + {"roundabout-slight-left", "\xEE\xA4\xA6"}, + {"roundabout-slight-right", "\xEE\xA4\xA7"}, + {"roundabout-straight", "\xEE\xA4\xA8"}, + {"turn-left", "\xEE\xA4\x85"}, + {"turn-right", "\xEE\xA4\x86"}, + {"turn-sharp-left", "\xEE\xA4\x9B"}, + {"turn-sharp-right", "\xEE\xA4\xA5"}, + {"turn-slight-left", "\xEE\xA4\x87"}, + {"turn-slight-right", "\xEE\xA4\x88"}, + {"turn-straight", "\xEE\xA4\x84"}, + {"updown", "\xEE\xA4\xA9"}, + {"uturn", "\xEE\xA4\x89"}, + }}; + + const char* iconForName(const std::string& icon) { + for (auto iter : m_iconMap) { + if (iter.first == icon) { + return iter.second; + } + } + return "\xEE\xA4\x90"; + } +} + /** * Navigation watchapp * @@ -68,27 +168,25 @@ Navigation::~Navigation() { } bool Navigation::Refresh() { - - if (m_flag != navService.getFlag()) { - m_flag = navService.getFlag(); - lv_label_set_text(imgFlag, iconForName(m_flag)); - // lv_img_set_src_arr(imgFlag, iconForName(m_flag)); + if (flag != navService.getFlag()) { + flag = navService.getFlag(); + lv_label_set_text(imgFlag, iconForName(flag)); } - if (m_narrative != navService.getNarrative()) { - m_narrative = navService.getNarrative(); - lv_label_set_text(txtNarrative, m_narrative.data()); + if (narrative != navService.getNarrative()) { + narrative = navService.getNarrative(); + lv_label_set_text(txtNarrative, narrative.data()); } - if (m_manDist != navService.getManDist()) { - m_manDist = navService.getManDist(); - lv_label_set_text(txtManDist, m_manDist.data()); + if (manDist != navService.getManDist()) { + manDist = navService.getManDist(); + lv_label_set_text(txtManDist, manDist.data()); } - if (m_progress != navService.getProgress()) { - m_progress = navService.getProgress(); - lv_bar_set_value(barProgress, m_progress, LV_ANIM_OFF); - if (m_progress > 90) { + if (progress != navService.getProgress()) { + progress = navService.getProgress(); + lv_bar_set_value(barProgress, progress, LV_ANIM_OFF); + 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); @@ -98,11 +196,4 @@ bool Navigation::Refresh() { return running; } -const char* Navigation::iconForName(std::string icon) { - for (auto iter : m_iconMap) { - if (iter.first == icon) { - return iter.second; - } - } - return "\xEE\xA4\x90"; -} + diff --git a/src/displayapp/screens/Navigation.h b/src/displayapp/screens/Navigation.h index 46816c33..eb7e00c4 100644 --- a/src/displayapp/screens/Navigation.h +++ b/src/displayapp/screens/Navigation.h @@ -45,103 +45,10 @@ namespace Pinetime { Pinetime::Controllers::NavigationService& navService; - std::string m_flag; - std::string m_narrative; - std::string m_manDist; - int m_progress; - - /** Watchapp */ - - const char* iconForName(std::string icon); - - std::array, 89> m_iconMap = {{ - {"arrive-left", "\xEE\xA4\x81"}, - {"arrive-right", "\xEE\xA4\x82"}, - {"arrive-straight", "\xEE\xA4\x80"}, - {"arrive", "\xEE\xA4\x80"}, - {"close", "\xEE\xA4\x83"}, - {"continue-left", "\xEE\xA4\x85"}, - {"continue-right", "\xEE\xA4\x86"}, - {"continue-slight-left", "\xEE\xA4\x87"}, - {"continue-slight-right", "\xEE\xA4\x88"}, - {"continue-straight", "\xEE\xA4\x84"}, - {"continue-uturn", "\xEE\xA4\x89"}, - {"continue", "\xEE\xA4\x84"}, - {"depart-left", "\xEE\xA4\x8B"}, - {"depart-right", "\xEE\xA4\x8C"}, - {"depart-straight", "\xEE\xA4\x8A"}, - {"end-of-road-left", "\xEE\xA4\x8D"}, - {"end-of-road-right", "\xEE\xA4\x8E"}, - {"ferry", "\xEE\xA4\x8F"}, - {"flag", "\xEE\xA4\x90"}, - {"fork-left", "\xEE\xA4\x92"}, - {"fork-right", "\xEE\xA4\x93"}, - {"fork-slight-left", "\xEE\xA4\x94"}, - {"fork-slight-right", "\xEE\xA4\x95"}, - {"fork-straight", "\xEE\xA4\x96"}, - {"invalid", "\xEE\xA4\x84"}, - {"invalid-left", "\xEE\xA4\x85"}, - {"invalid-right", "\xEE\xA4\x86"}, - {"invalid-slight-left", "\xEE\xA4\x87"}, - {"invalid-slight-right", "\xEE\xA4\x88"}, - {"invalid-straight", "\xEE\xA4\x84"}, - {"invalid-uturn", "\xEE\xA4\x89"}, - {"merge-left", "\xEE\xA4\x97"}, - {"merge-right", "\xEE\xA4\x98"}, - {"merge-slight-left", "\xEE\xA4\x99"}, - {"merge-slight-right", "\xEE\xA4\x9A"}, - {"merge-straight", "\xEE\xA4\x84"}, - {"new-name-left", "\xEE\xA4\x85"}, - {"new-name-right", "\xEE\xA4\x86"}, - {"new-name-sharp-left", "\xEE\xA4\x9B"}, - {"new-name-sharp-right", "\xEE\xA4\x9C"}, - {"new-name-slight-left", "\xEE\xA4\x87"}, - {"new-name-slight-right", "\xEE\xA4\x88"}, - {"new-name-straight", "\xEE\xA4\x84"}, - {"notification-left", "\xEE\xA4\x85"}, - {"notification-right", "\xEE\xA4\x86"}, - {"notification-sharp-left", "\xEE\xA4\x9B"}, - {"notification-sharp-right", "\xEE\xA4\xA5"}, - {"notification-slight-left", "\xEE\xA4\x87"}, - {"notification-slight-right", "\xEE\xA4\x88"}, - {"notification-straight", "\xEE\xA4\x84"}, - {"off-ramp-left", "\xEE\xA4\x9D"}, - {"off-ramp-right", "\xEE\xA4\x9E"}, - {"off-ramp-slight-left", "\xEE\xA4\x9F"}, - {"off-ramp-slight-right", "\xEE\xA4\xA0"}, - {"on-ramp-left", "\xEE\xA4\x85"}, - {"on-ramp-right", "\xEE\xA4\x86"}, - {"on-ramp-sharp-left", "\xEE\xA4\x9B"}, - {"on-ramp-sharp-right", "\xEE\xA4\xA5"}, - {"on-ramp-slight-left", "\xEE\xA4\x87"}, - {"on-ramp-slight-right", "\xEE\xA4\x88"}, - {"on-ramp-straight", "\xEE\xA4\x84"}, - {"rotary", "\xEE\xA4\xA1"}, - {"rotary-left", "\xEE\xA4\xA2"}, - {"rotary-right", "\xEE\xA4\xA3"}, - {"rotary-sharp-left", "\xEE\xA4\xA4"}, - {"rotary-sharp-right", "\xEE\xA4\xA5"}, - {"rotary-slight-left", "\xEE\xA4\xA6"}, - {"rotary-slight-right", "\xEE\xA4\xA7"}, - {"rotary-straight", "\xEE\xA4\xA8"}, - {"roundabout", "\xEE\xA4\xA1"}, - {"roundabout-left", "\xEE\xA4\xA2"}, - {"roundabout-right", "\xEE\xA4\xA3"}, - {"roundabout-sharp-left", "\xEE\xA4\xA4"}, - {"roundabout-sharp-right", "\xEE\xA4\xA5"}, - {"roundabout-slight-left", "\xEE\xA4\xA6"}, - {"roundabout-slight-right", "\xEE\xA4\xA7"}, - {"roundabout-straight", "\xEE\xA4\xA8"}, - {"turn-left", "\xEE\xA4\x85"}, - {"turn-right", "\xEE\xA4\x86"}, - {"turn-sharp-left", "\xEE\xA4\x9B"}, - {"turn-sharp-right", "\xEE\xA4\xA5"}, - {"turn-slight-left", "\xEE\xA4\x87"}, - {"turn-slight-right", "\xEE\xA4\x88"}, - {"turn-straight", "\xEE\xA4\x84"}, - {"updown", "\xEE\xA4\xA9"}, - {"uturn", "\xEE\xA4\x89"}, - }}; + std::string flag; + std::string narrative; + std::string manDist; + int progress; }; } } From c0b0f8cb732f0cd8c6a519a97f41b0ef6275a24f Mon Sep 17 00:00:00 2001 From: JF002 Date: Tue, 1 Jun 2021 21:02:15 +0200 Subject: [PATCH 16/94] Remove debug defines (DEBUG & DEBUG_NRF_USER) from the build. These debug can be useful for debugging purposes but not in production (release). (#400) This reduces the size of the binary by about 6KB! This also removes filepath that were embedded into the binary (.bin) file. --- src/CMakeLists.txt | 6 ++++-- src/FreeRTOS/port_cmsis.c | 39 +++++++++++++++++++-------------------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7ccd4ce7..43608568 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -746,15 +746,17 @@ link_directories( set(COMMON_FLAGS -MP -MD -mthumb -mabi=aapcs -Wall -Wno-unknown-pragmas -g3 -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin --short-enums -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wreturn-type -Werror=return-type) add_definitions(-DCONFIG_GPIO_AS_PINRESET) -add_definitions(-DDEBUG) add_definitions(-DNIMBLE_CFG_CONTROLLER) add_definitions(-DOS_CPUTIME_FREQ) add_definitions(-DNRF52 -DNRF52832 -DNRF52832_XXAA -DNRF52_PAN_74 -DNRF52_PAN_64 -DNRF52_PAN_12 -DNRF52_PAN_58 -DNRF52_PAN_54 -DNRF52_PAN_31 -DNRF52_PAN_51 -DNRF52_PAN_36 -DNRF52_PAN_15 -DNRF52_PAN_20 -DNRF52_PAN_55 -DBOARD_PCA10040) add_definitions(-DFREERTOS) -add_definitions(-DDEBUG_NRF_USER) add_definitions(-D__STACK_SIZE=8192) add_definitions(-D__HEAP_SIZE=8192) +# NOTE : Add the following defines to enable debug mode of the NRF SDK: +#add_definitions(-DDEBUG) +#add_definitions(-DDEBUG_NRF_USER) + if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") endif () diff --git a/src/FreeRTOS/port_cmsis.c b/src/FreeRTOS/port_cmsis.c index d8850b52..0ccf2e27 100644 --- a/src/FreeRTOS/port_cmsis.c +++ b/src/FreeRTOS/port_cmsis.c @@ -294,6 +294,25 @@ static void vPortEnableVFP( void ) } /*-----------------------------------------------------------*/ +uint32_t ulSetInterruptMaskFromISR( void ) +{ + __asm volatile ( + " mrs r0, PRIMASK \n" + " cpsid i \n" + " bx lr " + ::: "memory" + ); +} + +void vClearInterruptMaskFromISR( __attribute__( ( unused ) ) uint32_t ulMask ) +{ + __asm volatile ( + " msr PRIMASK, r0 \n" + " bx lr " + ::: "memory" + ); +} + #if ( configASSERT_DEFINED == 1 ) void vPortValidateInterruptPriority( void ) @@ -354,24 +373,4 @@ static void vPortEnableVFP( void ) configASSERT( NVIC_GetPriorityGrouping() <= ulMaxPRIGROUPValue ); } -uint32_t ulSetInterruptMaskFromISR( void ) -{ - __asm volatile ( - " mrs r0, PRIMASK \n" - " cpsid i \n" - " bx lr " - ::: "memory" - ); -} -/*-----------------------------------------------------------*/ - -void vClearInterruptMaskFromISR( __attribute__( ( unused ) ) uint32_t ulMask ) -{ - __asm volatile ( - " msr PRIMASK, r0 \n" - " bx lr " - ::: "memory" - ); -} - #endif /* configASSERT_DEFINED */ From 1b6acdedc2ae892bece04479a64ad28120eced8c Mon Sep 17 00:00:00 2001 From: JF002 Date: Tue, 1 Jun 2021 21:03:01 +0200 Subject: [PATCH 17/94] Enable various compilation flags to reduce the binary size (#401) * Add the following compilation flags: * -fno-exceptions and -fno-non-call-exceptions : disable exception handling * -fno-rtti : disable run time type information (needed by dynamic_cast, for example) These flags reduce the binary size by about 100KB! Also, -fstack-usage generate debug info (not in final binary) to allow tools like Puncover to do a stack analysis. * Remove unused CMake variables in CMake_nRF5x.cmake (duplicated in src/CMakeLists.txt). Replace -O0 by -Og in DEBUG builds. This generates a smaller binary (small enough for the internal memory) that is debugger friendly. --- cmake-nRF5x/CMake_nRF5x.cmake | 15 ------- src/CMakeLists.txt | 74 +++++++++++++++++------------------ src/displayapp/DisplayApp.cpp | 2 +- 3 files changed, 38 insertions(+), 53 deletions(-) diff --git a/cmake-nRF5x/CMake_nRF5x.cmake b/cmake-nRF5x/CMake_nRF5x.cmake index ead7b9f6..c7d0a68b 100755 --- a/cmake-nRF5x/CMake_nRF5x.cmake +++ b/cmake-nRF5x/CMake_nRF5x.cmake @@ -74,21 +74,6 @@ macro(nRF5x_setup) ) endif () - set(COMMON_FLAGS "-MP -MD -mthumb -mabi=aapcs -Wall -g3 -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin --short-enums ${CPU_FLAGS} -Wreturn-type -Werror=return-type") - - # compiler/assambler/linker flags - set(CMAKE_C_FLAGS "${COMMON_FLAGS}") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0 -g3") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3") - set(CMAKE_CXX_FLAGS "${COMMON_FLAGS}") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 -g3") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") - set(CMAKE_ASM_FLAGS "-MP -MD -x assembler-with-cpp") - set(CMAKE_EXE_LINKER_FLAGS "-mthumb -mabi=aapcs -L ${NRF5_SDK_PATH}/modules/nrfx/mdk -T${NRF5_LINKER_SCRIPT} ${CPU_FLAGS} -Wl,--gc-sections --specs=nano.specs -lc -lnosys -lm") - # note: we must override the default cmake linker flags so that CMAKE_C_FLAGS are not added implicitly - set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_COMPILER} -o ") - set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_C_COMPILER} -lstdc++ -o ") - # basic board definitions and drivers include_directories( "${NRF5_SDK_PATH}/components" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 43608568..cd729921 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -744,7 +744,7 @@ link_directories( ) -set(COMMON_FLAGS -MP -MD -mthumb -mabi=aapcs -Wall -Wno-unknown-pragmas -g3 -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin --short-enums -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wreturn-type -Werror=return-type) +set(COMMON_FLAGS -MP -MD -mthumb -mabi=aapcs -Wall -Wno-unknown-pragmas -g3 -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin --short-enums -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -Wreturn-type -Werror=return-type -fstack-usage -fno-exceptions -fno-non-call-exceptions) add_definitions(-DCONFIG_GPIO_AS_PINRESET) add_definitions(-DNIMBLE_CFG_CONTROLLER) add_definitions(-DOS_CPUTIME_FREQ) @@ -766,10 +766,10 @@ add_library(nrf-sdk STATIC ${SDK_SOURCE_FILES}) target_include_directories(nrf-sdk SYSTEM PUBLIC . ../) target_include_directories(nrf-sdk SYSTEM PUBLIC ${INCLUDES_FROM_LIBS}) target_compile_options(nrf-sdk PRIVATE - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> - $<$,$>: ${COMMON_FLAGS} -O0> - $<$,$>: ${COMMON_FLAGS} -O3> + $<$,$>: ${COMMON_FLAGS} -Og -g3> + $<$,$>: ${COMMON_FLAGS} -Os> + $<$,$>: ${COMMON_FLAGS} -Og -fno-rtti> + $<$,$>: ${COMMON_FLAGS} -Os -fno-rtti> $<$: -MP -MD -x assembler-with-cpp> ) @@ -778,10 +778,10 @@ add_library(nimble STATIC ${NIMBLE_SRC} ${TINYCRYPT_SRC}) target_include_directories(nimble SYSTEM PUBLIC . ../) target_include_directories(nimble SYSTEM PUBLIC ${INCLUDES_FROM_LIBS}) target_compile_options(nimble PRIVATE - $<$,$>: ${COMMON_FLAGS} -O0 -g3 -Wno-unused-but-set-variable -Wno-maybe-uninitialized> - $<$,$>: ${COMMON_FLAGS} -O3 -Wno-unused-but-set-variable -Wno-maybe-uninitialized> - $<$,$>: ${COMMON_FLAGS} -O0 -g3 -Wno-unused-but-set-variable -Wno-maybe-uninitialized> - $<$,$>: ${COMMON_FLAGS} -O3 -Wno-unused-but-set-variable -Wno-maybe-uninitialized> + $<$,$>: ${COMMON_FLAGS} -Og -g3 -Wno-unused-but-set-variable -Wno-maybe-uninitialized> + $<$,$>: ${COMMON_FLAGS} -Os -Wno-unused-but-set-variable -Wno-maybe-uninitialized> + $<$,$>: ${COMMON_FLAGS} -Og -g3 -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-rtti> + $<$,$>: ${COMMON_FLAGS} -Os -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-rtti> $<$: -MP -MD -x assembler-with-cpp> ) @@ -790,10 +790,10 @@ add_library(lvgl STATIC ${LVGL_SRC}) target_include_directories(lvgl SYSTEM PUBLIC . ../) target_include_directories(lvgl SYSTEM PUBLIC ${INCLUDES_FROM_LIBS}) target_compile_options(lvgl PRIVATE - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> + $<$,$>: ${COMMON_FLAGS} -Og -g3> + $<$,$>: ${COMMON_FLAGS} -Os> + $<$,$>: ${COMMON_FLAGS} -Og -g3 -fno-rtti> + $<$,$>: ${COMMON_FLAGS} -Os -fno-rtti> $<$: -MP -MD -x assembler-with-cpp> ) @@ -805,10 +805,10 @@ 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) target_compile_options(${EXECUTABLE_NAME} PUBLIC - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> + $<$,$>: ${COMMON_FLAGS} -Og -g3> + $<$,$>: ${COMMON_FLAGS} -Os> + $<$,$>: ${COMMON_FLAGS} -Og -g3 -fno-rtti> + $<$,$>: ${COMMON_FLAGS} -Os -fno-rtti> $<$: -MP -MD -x assembler-with-cpp> ) @@ -835,10 +835,10 @@ add_executable(${EXECUTABLE_MCUBOOT_NAME} ${SOURCE_FILES}) target_link_libraries(${EXECUTABLE_MCUBOOT_NAME} nimble nrf-sdk lvgl) set_target_properties(${EXECUTABLE_MCUBOOT_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_MCUBOOT_FILE_NAME}) target_compile_options(${EXECUTABLE_MCUBOOT_NAME} PUBLIC - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> + $<$,$>: ${COMMON_FLAGS} -Og -g3> + $<$,$>: ${COMMON_FLAGS} -Os> + $<$,$>: ${COMMON_FLAGS} -Og -g3 -fno-rtti> + $<$,$>: ${COMMON_FLAGS} -Os -fno-rtti> $<$: -MP -MD -x assembler-with-cpp> ) @@ -872,10 +872,10 @@ target_link_libraries(${EXECUTABLE_RECOVERY_NAME} nimble nrf-sdk) 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 - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> + $<$,$>: ${COMMON_FLAGS} -Og -g3> + $<$,$>: ${COMMON_FLAGS} -Os> + $<$,$>: ${COMMON_FLAGS} -Og -g3 -fno-rtti> + $<$,$>: ${COMMON_FLAGS} -Os -fno-rtti> $<$: -MP -MD -x assembler-with-cpp> ) @@ -902,10 +902,10 @@ target_link_libraries(${EXECUTABLE_RECOVERY_MCUBOOT_NAME} nimble nrf-sdk) 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 - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> + $<$,$>: ${COMMON_FLAGS} -Og -g3> + $<$,$>: ${COMMON_FLAGS} -Os> + $<$,$>: ${COMMON_FLAGS} -Og -g3 -fno-rtti> + $<$,$>: ${COMMON_FLAGS} -Os -fno-rtti> $<$: -MP -MD -x assembler-with-cpp> ) @@ -939,10 +939,10 @@ add_executable(${EXECUTABLE_RECOVERYLOADER_NAME} ${RECOVERYLOADER_SOURCE_FILES}) target_link_libraries(${EXECUTABLE_RECOVERYLOADER_NAME} nrf-sdk) set_target_properties(${EXECUTABLE_RECOVERYLOADER_NAME} PROPERTIES OUTPUT_NAME ${EXECUTABLE_RECOVERYLOADER_FILE_NAME}) target_compile_options(${EXECUTABLE_RECOVERYLOADER_NAME} PUBLIC - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> + $<$,$>: ${COMMON_FLAGS} -Og -g3> + $<$,$>: ${COMMON_FLAGS} -Os> + $<$,$>: ${COMMON_FLAGS} -Og -g3 -fno-rtti> + $<$,$>: ${COMMON_FLAGS} -Os -fno-rtti> $<$: -MP -MD -x assembler-with-cpp> ) target_include_directories(${EXECUTABLE_RECOVERYLOADER_NAME} PUBLIC @@ -972,10 +972,10 @@ add_executable(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} ${RECOVERYLOADER_SOURCE target_link_libraries(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} nrf-sdk) 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} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> - $<$,$>: ${COMMON_FLAGS} -O0 -g3> - $<$,$>: ${COMMON_FLAGS} -O3> + $<$,$>: ${COMMON_FLAGS} -Og -g3> + $<$,$>: ${COMMON_FLAGS} -Os> + $<$,$>: ${COMMON_FLAGS} -Og -g3 -fno-rtti> + $<$,$>: ${COMMON_FLAGS} -Os -fno-rtti> $<$: -MP -MD -x assembler-with-cpp> ) target_include_directories(${EXECUTABLE_MCUBOOT_RECOVERYLOADER_NAME} PUBLIC diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 419b9f6f..7b03d569 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -153,7 +153,7 @@ void DisplayApp::Refresh() { break; case Messages::TimerDone: if (currentApp == Apps::Timer) { - auto *timer = dynamic_cast(currentScreen.get()); + auto *timer = static_cast(currentScreen.get()); timer->setDone(); } else { LoadApp(Apps::Timer, DisplayApp::FullRefreshDirections::Down); From 79f0fcb07aa80eb70385223272e29f2ba5657bc8 Mon Sep 17 00:00:00 2001 From: JF002 Date: Tue, 1 Jun 2021 21:03:29 +0200 Subject: [PATCH 18/94] Add the maximum memory used by LVGL in SystemInfo app. This will help the developers to size the memory buffer allocated to lvgl. (#408) --- src/displayapp/screens/SystemInfo.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index e4ef6911..f61d2ff1 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -175,8 +175,9 @@ std::unique_ptr SystemInfo::CreateScreen3() { "#444444 BLE MAC#\n" " %02x:%02x:%02x:%02x:%02x:%02x" "\n" - "#444444 Memory#\n" + "#444444 LVGL Memory#\n" " #444444 used# %d (%d%%)\n" + " #444444 max used# %d\n" " #444444 frag# %d%%\n" " #444444 free# %d" "\n" @@ -189,6 +190,7 @@ std::unique_ptr SystemInfo::CreateScreen3() { bleAddr[0], (int) mon.total_size - mon.free_size, mon.used_pct, + mon.max_used, mon.frag_pct, (int) mon.free_biggest_size, 0); From 7f9cc51b050e1034b573e37484f7afe29c370d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sun, 6 Jun 2021 15:56:03 +0200 Subject: [PATCH 19/94] Initialize SystemTask, DisplayApp and HeartRateTask as global static variable instead of variables on the heap. We don't need them on the heap as we know their size at build time, it'll reduce memory fragmentation and it'll make memory analysis easier. --- src/CMakeLists.txt | 4 +- src/FreeRTOSConfig.h | 2 +- .../ble/AlertNotificationClient.cpp | 2 +- .../ble/AlertNotificationService.cpp | 2 +- src/components/ble/DfuService.cpp | 6 +- src/components/ble/ImmediateAlertService.cpp | 2 +- src/components/ble/NimbleController.cpp | 2 +- .../datetime/DateTimeController.cpp | 10 ++- src/components/datetime/DateTimeController.h | 6 +- .../heartrate/HeartRateController.cpp | 3 - .../heartrate/HeartRateController.h | 4 +- src/components/heartrate/Ppg.cpp | 11 +-- src/components/heartrate/Ppg.h | 3 +- src/components/timer/TimerController.cpp | 29 +++++--- src/components/timer/TimerController.h | 13 ++-- src/displayapp/DisplayApp.cpp | 32 +++++--- src/displayapp/DisplayApp.h | 7 +- src/displayapp/screens/FlashLight.cpp | 4 +- src/displayapp/screens/HeartRate.cpp | 8 +- src/displayapp/screens/ScreenList.h | 13 +++- .../screens/settings/QuickSettings.cpp | 4 +- src/drivers/Bma421.cpp | 2 - src/drivers/SpiMaster.h | 1 - src/heartratetask/HeartRateTask.cpp | 2 +- src/main.cpp | 69 +++++++++++++----- src/systemtask/Messages.h | 26 +++++++ src/systemtask/SystemTask.cpp | 73 +++++++++---------- src/systemtask/SystemTask.h | 53 ++++++-------- 28 files changed, 223 insertions(+), 170 deletions(-) create mode 100644 src/systemtask/Messages.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cd729921..c72f7c9c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -750,8 +750,8 @@ add_definitions(-DNIMBLE_CFG_CONTROLLER) add_definitions(-DOS_CPUTIME_FREQ) add_definitions(-DNRF52 -DNRF52832 -DNRF52832_XXAA -DNRF52_PAN_74 -DNRF52_PAN_64 -DNRF52_PAN_12 -DNRF52_PAN_58 -DNRF52_PAN_54 -DNRF52_PAN_31 -DNRF52_PAN_51 -DNRF52_PAN_36 -DNRF52_PAN_15 -DNRF52_PAN_20 -DNRF52_PAN_55 -DBOARD_PCA10040) add_definitions(-DFREERTOS) -add_definitions(-D__STACK_SIZE=8192) -add_definitions(-D__HEAP_SIZE=8192) +add_definitions(-D__STACK_SIZE=1024) +add_definitions(-D__HEAP_SIZE=4096) # NOTE : Add the following defines to enable debug mode of the NRF SDK: #add_definitions(-DDEBUG) diff --git a/src/FreeRTOSConfig.h b/src/FreeRTOSConfig.h index 15185766..07c152dc 100644 --- a/src/FreeRTOSConfig.h +++ b/src/FreeRTOSConfig.h @@ -62,7 +62,7 @@ #define configTICK_RATE_HZ 1024 #define configMAX_PRIORITIES (3) #define configMINIMAL_STACK_SIZE (120) -#define configTOTAL_HEAP_SIZE (1024 * 16) +#define configTOTAL_HEAP_SIZE (1024 * 17) #define configMAX_TASK_NAME_LEN (4) #define configUSE_16_BIT_TICKS 0 #define configIDLE_SHOULD_YIELD 1 diff --git a/src/components/ble/AlertNotificationClient.cpp b/src/components/ble/AlertNotificationClient.cpp index 6043a129..c3d1d69a 100644 --- a/src/components/ble/AlertNotificationClient.cpp +++ b/src/components/ble/AlertNotificationClient.cpp @@ -159,7 +159,7 @@ void AlertNotificationClient::OnNotification(ble_gap_event* event) { notif.category = Pinetime::Controllers::NotificationManager::Categories::SimpleAlert; notificationManager.Push(std::move(notif)); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::OnNewNotification); + systemTask.PushMessage(Pinetime::System::Messages::OnNewNotification); } } diff --git a/src/components/ble/AlertNotificationService.cpp b/src/components/ble/AlertNotificationService.cpp index e9f5941e..d5fc7f65 100644 --- a/src/components/ble/AlertNotificationService.cpp +++ b/src/components/ble/AlertNotificationService.cpp @@ -79,7 +79,7 @@ int AlertNotificationService::OnAlert(uint16_t conn_handle, uint16_t attr_handle break; } - auto event = Pinetime::System::SystemTask::Messages::OnNewNotification; + auto event = Pinetime::System::Messages::OnNewNotification; notificationManager.Push(std::move(notif)); systemTask.PushMessage(event); } diff --git a/src/components/ble/DfuService.cpp b/src/components/ble/DfuService.cpp index 2031668e..cec194cc 100644 --- a/src/components/ble/DfuService.cpp +++ b/src/components/ble/DfuService.cpp @@ -205,7 +205,7 @@ int DfuService::ControlPointHandler(uint16_t connectionHandle, os_mbuf* om) { bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Running); bleController.FirmwareUpdateTotalBytes(0xffffffffu); bleController.FirmwareUpdateCurrentBytes(0); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::BleFirmwareUpdateStarted); + systemTask.PushMessage(Pinetime::System::Messages::BleFirmwareUpdateStarted); return 0; } else { NRF_LOG_INFO("[DFU] -> Start DFU, mode %d not supported!", imageType); @@ -279,7 +279,7 @@ int DfuService::ControlPointHandler(uint16_t connectionHandle, os_mbuf* om) { } NRF_LOG_INFO("[DFU] -> Activate image and reset!"); bleController.StopFirmwareUpdate(); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::BleFirmwareUpdateFinished); + systemTask.PushMessage(Pinetime::System::Messages::BleFirmwareUpdateFinished); Reset(); bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Validated); return 0; @@ -304,7 +304,7 @@ void DfuService::Reset() { notificationManager.Reset(); bleController.State(Pinetime::Controllers::Ble::FirmwareUpdateStates::Error); bleController.StopFirmwareUpdate(); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::BleFirmwareUpdateFinished); + systemTask.PushMessage(Pinetime::System::Messages::BleFirmwareUpdateFinished); } DfuService::NotificationManager::NotificationManager() { diff --git a/src/components/ble/ImmediateAlertService.cpp b/src/components/ble/ImmediateAlertService.cpp index fd6430af..820d3b6e 100644 --- a/src/components/ble/ImmediateAlertService.cpp +++ b/src/components/ble/ImmediateAlertService.cpp @@ -67,7 +67,7 @@ int ImmediateAlertService::OnAlertLevelChanged(uint16_t connectionHandle, uint16 notif.category = Pinetime::Controllers::NotificationManager::Categories::SimpleAlert; notificationManager.Push(std::move(notif)); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::OnNewNotification); + systemTask.PushMessage(Pinetime::System::Messages::OnNewNotification); } } diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index 67a6d691..2c1d0f99 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -149,7 +149,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { bleController.Disconnect(); } else { bleController.Connect(); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::BleConnected); + systemTask.PushMessage(Pinetime::System::Messages::BleConnected); connectionHandle = event->connect.conn_handle; // Service discovery is deffered via systemtask } diff --git a/src/components/datetime/DateTimeController.cpp b/src/components/datetime/DateTimeController.cpp index 4f9302eb..28a70abc 100644 --- a/src/components/datetime/DateTimeController.cpp +++ b/src/components/datetime/DateTimeController.cpp @@ -5,9 +5,6 @@ using namespace Pinetime::Controllers; -DateTime::DateTime(System::SystemTask& systemTask) : systemTask {systemTask} { -} - void DateTime::SetTime( uint16_t year, uint8_t month, uint8_t day, uint8_t dayOfWeek, uint8_t hour, uint8_t minute, uint8_t second, uint32_t systickCounter) { std::tm tm = { @@ -70,7 +67,8 @@ void DateTime::UpdateTime(uint32_t systickCounter) { // Notify new day to SystemTask if (hour == 0 and not isMidnightAlreadyNotified) { isMidnightAlreadyNotified = true; - systemTask.PushMessage(System::SystemTask::Messages::OnNewDay); + if(systemTask != nullptr) + systemTask->PushMessage(System::Messages::OnNewDay); } else if (hour != 0) { isMidnightAlreadyNotified = false; } @@ -104,6 +102,10 @@ const char* DateTime::DayOfWeekShortToStringLow() { return DateTime::DaysStringShortLow[(uint8_t) dayOfWeek]; } +void DateTime::Register(Pinetime::System::SystemTask* systemTask) { + this->systemTask = systemTask; +} + char const* DateTime::DaysStringLow[] = {"--", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; char const* DateTime::DaysStringShortLow[] = {"--", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; diff --git a/src/components/datetime/DateTimeController.h b/src/components/datetime/DateTimeController.h index d0ae727e..265d6e9d 100644 --- a/src/components/datetime/DateTimeController.h +++ b/src/components/datetime/DateTimeController.h @@ -27,8 +27,6 @@ namespace Pinetime { December }; - DateTime(System::SystemTask& systemTask); - void SetTime(uint16_t year, uint8_t month, uint8_t day, @@ -75,8 +73,9 @@ namespace Pinetime { return uptime; } + void Register(System::SystemTask* systemTask); + private: - System::SystemTask& systemTask; uint16_t year = 0; Months month = Months::Unknown; uint8_t day = 0; @@ -90,6 +89,7 @@ namespace Pinetime { std::chrono::seconds uptime {0}; bool isMidnightAlreadyNotified = false; + System::SystemTask* systemTask = nullptr; static char const* DaysString[]; static char const* DaysStringShort[]; diff --git a/src/components/heartrate/HeartRateController.cpp b/src/components/heartrate/HeartRateController.cpp index e84d665a..716813b3 100644 --- a/src/components/heartrate/HeartRateController.cpp +++ b/src/components/heartrate/HeartRateController.cpp @@ -4,9 +4,6 @@ using namespace Pinetime::Controllers; -HeartRateController::HeartRateController(Pinetime::System::SystemTask& systemTask) : systemTask {systemTask} { -} - void HeartRateController::Update(HeartRateController::States newState, uint8_t heartRate) { this->state = newState; if (this->heartRate != heartRate) { diff --git a/src/components/heartrate/HeartRateController.h b/src/components/heartrate/HeartRateController.h index d3a8460d..a63f1a70 100644 --- a/src/components/heartrate/HeartRateController.h +++ b/src/components/heartrate/HeartRateController.h @@ -15,8 +15,7 @@ namespace Pinetime { public: enum class States { Stopped, NotEnoughData, NoTouch, Running }; - explicit HeartRateController(System::SystemTask& systemTask); - + HeartRateController() = default; void Start(); void Stop(); void Update(States newState, uint8_t heartRate); @@ -32,7 +31,6 @@ namespace Pinetime { void SetService(Pinetime::Controllers::HeartRateService* service); private: - System::SystemTask& systemTask; Applications::HeartRateTask* task = nullptr; States state = States::Stopped; uint8_t heartRate = 0; diff --git a/src/components/heartrate/Ppg.cpp b/src/components/heartrate/Ppg.cpp index da0789e0..fcba3815 100644 --- a/src/components/heartrate/Ppg.cpp +++ b/src/components/heartrate/Ppg.cpp @@ -38,9 +38,8 @@ namespace { } } -Ppg::Ppg(float spl) - : offset {spl}, - hpf {0.87033078, -1.74066156, 0.87033078, -1.72377617, 0.75754694}, +Ppg::Ppg() + : hpf {0.87033078, -1.74066156, 0.87033078, -1.72377617, 0.75754694}, agc {20, 0.971, 2}, lpf {0.11595249, 0.23190498, 0.11595249, -0.72168143, 0.18549138} { } @@ -67,13 +66,7 @@ float Ppg::HeartRate() { dataIndex = 0; return hr; } - -int cccount = 0; float Ppg::ProcessHeartRate() { - - if (cccount > 2) - asm("nop"); - cccount++; auto t0 = Trough(data.data(), dataIndex, 7, 48); if (t0 < 0) return 0; diff --git a/src/components/heartrate/Ppg.h b/src/components/heartrate/Ppg.h index ee07dfcf..00014162 100644 --- a/src/components/heartrate/Ppg.h +++ b/src/components/heartrate/Ppg.h @@ -8,8 +8,7 @@ namespace Pinetime { namespace Controllers { class Ppg { public: - explicit Ppg(float spl); - + Ppg(); int8_t Preprocess(float spl); float HeartRate(); diff --git a/src/components/timer/TimerController.cpp b/src/components/timer/TimerController.cpp index 3b25901c..8d5f5c33 100644 --- a/src/components/timer/TimerController.cpp +++ b/src/components/timer/TimerController.cpp @@ -12,14 +12,17 @@ using namespace Pinetime::Controllers; APP_TIMER_DEF(timerAppTimer); - -TimerController::TimerController(System::SystemTask& systemTask) : systemTask{systemTask} { +namespace { + void TimerEnd(void* p_context) { + auto* controller = static_cast (p_context); + if(controller != nullptr) + controller->OnTimerEnd(); + } } void TimerController::Init() { - app_timer_create(&timerAppTimer, APP_TIMER_MODE_SINGLE_SHOT, timerEnd); - + app_timer_create(&timerAppTimer, APP_TIMER_MODE_SINGLE_SHOT, TimerEnd); } void TimerController::StartTimer(uint32_t duration) { @@ -47,13 +50,6 @@ uint32_t TimerController::GetTimeRemaining() { return (static_cast(deltaTicks) / static_cast(configTICK_RATE_HZ)) * 1000; } -void TimerController::timerEnd(void* p_context) { - - auto* controller = static_cast (p_context); - controller->timerRunning = false; - controller->systemTask.PushMessage(System::SystemTask::Messages::OnTimerDone); -} - void TimerController::StopTimer() { app_timer_stop(timerAppTimer); timerRunning = false; @@ -61,4 +57,13 @@ void TimerController::StopTimer() { bool TimerController::IsRunning() { return timerRunning; -} \ No newline at end of file +} +void TimerController::OnTimerEnd() { + timerRunning = false; + if(systemTask != nullptr) + systemTask->PushMessage(System::Messages::OnTimerDone); +} + +void TimerController::Register(Pinetime::System::SystemTask* systemTask) { + this->systemTask = systemTask; +} diff --git a/src/components/timer/TimerController.h b/src/components/timer/TimerController.h index 5a0b293e..fa7bc90d 100644 --- a/src/components/timer/TimerController.h +++ b/src/components/timer/TimerController.h @@ -12,7 +12,7 @@ namespace Pinetime { class TimerController { public: - TimerController(Pinetime::System::SystemTask& systemTask); + TimerController() = default; void Init(); @@ -23,12 +23,13 @@ namespace Pinetime { uint32_t GetTimeRemaining(); bool IsRunning(); - + + void OnTimerEnd(); + + void Register(System::SystemTask* systemTask); + private: - System::SystemTask& systemTask; - - static void timerEnd(void* p_context); - + System::SystemTask* systemTask = nullptr; TickType_t endTicks; bool timerRunning = false; }; diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 7b03d569..ba6dfbd2 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -32,6 +32,7 @@ #include "drivers/St7789.h" #include "drivers/Watchdog.h" #include "systemtask/SystemTask.h" +#include "systemtask/Messages.h" #include "displayapp/screens/settings/QuickSettings.h" #include "displayapp/screens/settings/Settings.h" @@ -51,7 +52,6 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, Controllers::Ble& bleController, Controllers::DateTime& dateTimeController, Drivers::WatchdogView& watchdog, - System::SystemTask& systemTask, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::HeartRateController& heartRateController, Controllers::Settings& settingsController, @@ -65,7 +65,6 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, bleController {bleController}, dateTimeController {dateTimeController}, watchdog {watchdog}, - systemTask {systemTask}, notificationManager {notificationManager}, heartRateController {heartRateController}, settingsController {settingsController}, @@ -130,7 +129,7 @@ void DisplayApp::Refresh() { vTaskDelay(100); } lcd.DisplayOff(); - systemTask.PushMessage(System::SystemTask::Messages::OnDisplayTaskSleeping); + PushMessageToSystemTask(Pinetime::System::Messages::OnDisplayTaskSleeping); state = States::Idle; break; case Messages::GoToRunning: @@ -139,7 +138,7 @@ void DisplayApp::Refresh() { state = States::Running; break; case Messages::UpdateTimeOut: - systemTask.PushMessage(System::SystemTask::Messages::UpdateTimeOut); + PushMessageToSystemTask(System::Messages::UpdateTimeOut); break; case Messages::UpdateBleConnection: // clockScreen.SetBleConnectionState(bleController.IsConnected() ? Screens::Clock::BleConnectionStates::Connected : @@ -176,7 +175,7 @@ void DisplayApp::Refresh() { LoadApp(Apps::QuickSettings, DisplayApp::FullRefreshDirections::RightAnim); break; case TouchEvents::DoubleTap: - systemTask.PushMessage(System::SystemTask::Messages::GoToSleep); + PushMessageToSystemTask(System::Messages::GoToSleep); break; default: break; @@ -188,7 +187,7 @@ void DisplayApp::Refresh() { } break; case Messages::ButtonPushed: if (currentApp == Apps::Clock) { - systemTask.PushMessage(System::SystemTask::Messages::GoToSleep); + PushMessageToSystemTask(System::Messages::GoToSleep); } else { if (!currentScreen->OnButtonPushed()) { LoadApp(returnToApp, returnDirection); @@ -267,12 +266,12 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) case Apps::Notifications: currentScreen = std::make_unique( - this, notificationManager, systemTask.nimble().alertService(), Screens::Notifications::Modes::Normal); + this, notificationManager, systemTask->nimble().alertService(), Screens::Notifications::Modes::Normal); ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::NotificationsPreview: currentScreen = std::make_unique( - this, notificationManager, systemTask.nimble().alertService(), Screens::Notifications::Modes::Preview); + this, notificationManager, systemTask->nimble().alertService(), Screens::Notifications::Modes::Preview); ReturnApp(Apps::Clock, FullRefreshDirections::Up, TouchEvents::SwipeUp); break; case Apps::Timer: @@ -321,7 +320,7 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) // case Apps::FlashLight: - currentScreen = std::make_unique(this, systemTask, brightnessController); + currentScreen = std::make_unique(this, *systemTask, brightnessController); ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::None); break; case Apps::StopWatch: @@ -337,13 +336,13 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) currentScreen = std::make_unique(this, lvgl); break; case Apps::Music: - currentScreen = std::make_unique(this, systemTask.nimble().music()); + currentScreen = std::make_unique(this, systemTask->nimble().music()); break; case Apps::Navigation: - currentScreen = std::make_unique(this, systemTask.nimble().navigation()); + currentScreen = std::make_unique(this, systemTask->nimble().navigation()); break; case Apps::HeartRate: - currentScreen = std::make_unique(this, heartRateController, systemTask); + currentScreen = std::make_unique(this, heartRateController, *systemTask); break; case Apps::Motion: currentScreen = std::make_unique(this, motionController); @@ -425,3 +424,12 @@ void DisplayApp::SetFullRefresh(DisplayApp::FullRefreshDirections direction) { void DisplayApp::SetTouchMode(DisplayApp::TouchModes mode) { touchMode = mode; } + +void DisplayApp::PushMessageToSystemTask(Pinetime::System::Messages message) { + if(systemTask != nullptr) + systemTask->PushMessage(message); +} + +void DisplayApp::Register(Pinetime::System::SystemTask* systemTask) { + this->systemTask = systemTask; +} diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 0c7bd216..65abd41a 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "Apps.h" #include "LittleVgl.h" #include "TouchEvents.h" @@ -49,7 +50,6 @@ namespace Pinetime { Controllers::Ble& bleController, Controllers::DateTime& dateTimeController, Drivers::WatchdogView& watchdog, - System::SystemTask& systemTask, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::HeartRateController& heartRateController, Controllers::Settings& settingsController, @@ -64,6 +64,8 @@ namespace Pinetime { void SetFullRefresh(FullRefreshDirections direction); void SetTouchMode(TouchModes mode); + void Register(Pinetime::System::SystemTask* systemTask); + private: Pinetime::Drivers::St7789& lcd; Pinetime::Components::LittleVgl& lvgl; @@ -72,7 +74,7 @@ namespace Pinetime { Pinetime::Controllers::Ble& bleController; Pinetime::Controllers::DateTime& dateTimeController; Pinetime::Drivers::WatchdogView& watchdog; - Pinetime::System::SystemTask& systemTask; + Pinetime::System::SystemTask* systemTask = nullptr; Pinetime::Controllers::NotificationManager& notificationManager; Pinetime::Controllers::HeartRateController& heartRateController; Pinetime::Controllers::Settings& settingsController; @@ -108,6 +110,7 @@ namespace Pinetime { void Refresh(); void ReturnApp(Apps app, DisplayApp::FullRefreshDirections direction, TouchEvents touchEvent); void LoadApp(Apps app, DisplayApp::FullRefreshDirections direction); + void PushMessageToSystemTask(Pinetime::System::Messages message); }; } } diff --git a/src/displayapp/screens/FlashLight.cpp b/src/displayapp/screens/FlashLight.cpp index 4568db40..7db2c6c8 100644 --- a/src/displayapp/screens/FlashLight.cpp +++ b/src/displayapp/screens/FlashLight.cpp @@ -39,14 +39,14 @@ FlashLight::FlashLight(Pinetime::Applications::DisplayApp* app, backgroundAction->user_data = this; lv_obj_set_event_cb(backgroundAction, event_handler); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::DisableSleeping); + systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping); } FlashLight::~FlashLight() { lv_obj_clean(lv_scr_act()); lv_obj_set_style_local_bg_color(lv_scr_act(), LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x000000)); brightness.Restore(); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::EnableSleeping); + systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping); } void FlashLight::OnClickEvent(lv_obj_t* obj, lv_event_t event) { diff --git a/src/displayapp/screens/HeartRate.cpp b/src/displayapp/screens/HeartRate.cpp index 90f6bc26..5689b63e 100644 --- a/src/displayapp/screens/HeartRate.cpp +++ b/src/displayapp/screens/HeartRate.cpp @@ -63,12 +63,12 @@ HeartRate::HeartRate(Pinetime::Applications::DisplayApp* app, label_startStop = lv_label_create(btn_startStop, nullptr); UpdateStartStopButton(isHrRunning); if (isHrRunning) - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::DisableSleeping); + systemTask.PushMessage(Pinetime::System::Messages::DisableSleeping); } HeartRate::~HeartRate() { lv_obj_clean(lv_scr_act()); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::EnableSleeping); + systemTask.PushMessage(Pinetime::System::Messages::EnableSleeping); } bool HeartRate::Refresh() { @@ -95,12 +95,12 @@ void HeartRate::OnStartStopEvent(lv_event_t event) { if (heartRateController.State() == Controllers::HeartRateController::States::Stopped) { heartRateController.Start(); UpdateStartStopButton(heartRateController.State() != Controllers::HeartRateController::States::Stopped); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::DisableSleeping); + 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); } else { heartRateController.Stop(); UpdateStartStopButton(heartRateController.State() != Controllers::HeartRateController::States::Stopped); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::EnableSleeping); + 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); } } diff --git a/src/displayapp/screens/ScreenList.h b/src/displayapp/screens/ScreenList.h index 73ea4610..ea66bfb2 100644 --- a/src/displayapp/screens/ScreenList.h +++ b/src/displayapp/screens/ScreenList.h @@ -15,12 +15,17 @@ namespace Pinetime { public: ScreenList(DisplayApp* app, uint8_t initScreen, - std::array()>, N>&& screens, + const std::array()>, N>&& screens, ScreenListModes mode) - : Screen(app), initScreen {initScreen}, screens {std::move(screens)}, mode {mode}, current {this->screens[initScreen]()} { - screenIndex = initScreen; + : Screen(app), initScreen {initScreen}, screens {std::move(screens)}, mode {mode}, screenIndex{initScreen}, current {this->screens[initScreen]()} { + } + ScreenList(const ScreenList&) = delete; + ScreenList& operator=(const ScreenList&) = delete; + ScreenList(ScreenList&&) = delete; + ScreenList& operator=(ScreenList&&) = delete; + ~ScreenList() override { lv_obj_clean(lv_scr_act()); } @@ -97,7 +102,7 @@ namespace Pinetime { private: uint8_t initScreen = 0; - std::array()>, N> screens; + const std::array()>, N> screens; ScreenListModes mode = ScreenListModes::UpDown; uint8_t screenIndex = 0; diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 3994794d..5db7468c 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -7,12 +7,12 @@ using namespace Pinetime::Applications::Screens; namespace { static void ButtonEventHandler(lv_obj_t* obj, lv_event_t event) { - QuickSettings* screen = static_cast(obj->user_data); + auto* screen = static_cast(obj->user_data); screen->OnButtonEvent(obj, event); } static void lv_update_task(struct _lv_task_t* task) { - auto user_data = static_cast(task->user_data); + auto* user_data = static_cast(task->user_data); user_data->UpdateScreen(); } } diff --git a/src/drivers/Bma421.cpp b/src/drivers/Bma421.cpp index 925b66c7..35b2c105 100644 --- a/src/drivers/Bma421.cpp +++ b/src/drivers/Bma421.cpp @@ -103,8 +103,6 @@ Bma421::Values Bma421::Process() { uint8_t activity = 0; bma423_activity_output(&activity, &bma); - NRF_LOG_INFO("MOTION : %d - %d/%d/%d", steps, data.x, data.y, data.z); - // X and Y axis are swapped because of the way the sensor is mounted in the PineTime return {steps, data.y, data.x, data.z}; } diff --git a/src/drivers/SpiMaster.h b/src/drivers/SpiMaster.h index dfc195b7..5045369a 100644 --- a/src/drivers/SpiMaster.h +++ b/src/drivers/SpiMaster.h @@ -10,7 +10,6 @@ namespace Pinetime { namespace Drivers { class SpiMaster { public: - ; enum class SpiModule : uint8_t { SPI0, SPI1 }; enum class BitOrder : uint8_t { Msb_Lsb, Lsb_Msb }; enum class Modes : uint8_t { Mode0, Mode1, Mode2, Mode3 }; diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 36c8cc18..1c21db71 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 {static_cast(heartRateSensor.ReadHrs())} { + : heartRateSensor {heartRateSensor}, controller {controller}, ppg{} { messageQueue = xQueueCreate(10, 1); controller.SetHeartRateTask(this); } diff --git a/src/main.cpp b/src/main.cpp index 61194b95..60ed058b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -34,6 +34,7 @@ #include "components/motor/MotorController.h" #include "components/datetime/DateTimeController.h" #include "components/settings/Settings.h" +#include "components/heartrate/HeartRateController.h" #include "drivers/Spi.h" #include "drivers/SpiMaster.h" #include "drivers/SpiNorFlash.h" @@ -50,8 +51,6 @@ Pinetime::Logging::NrfLogger logger; Pinetime::Logging::DummyLogger logger; #endif -#include - static constexpr uint8_t pinSpiSck = 2; static constexpr uint8_t pinSpiMosi = 3; static constexpr uint8_t pinSpiMiso = 4; @@ -108,15 +107,59 @@ void ble_manager_set_ble_connection_callback(void (*connection)()); void ble_manager_set_ble_disconnection_callback(void (*disconnection)()); static constexpr uint8_t pinTouchIrq = 28; static constexpr uint8_t pinPowerPresentIrq = 19; -std::unique_ptr systemTask; Pinetime::Controllers::Settings settingsController {spiNorFlash}; Pinetime::Controllers::MotorController motorController {settingsController}; +Pinetime::Controllers::HeartRateController heartRateController; +Pinetime::Applications::HeartRateTask heartRateApp(heartRateSensor, heartRateController); + +Pinetime::Controllers::DateTime dateTimeController; +Pinetime::Drivers::Watchdog watchdog; +Pinetime::Drivers::WatchdogView watchdogView(watchdog); +Pinetime::Controllers::NotificationManager notificationManager; +Pinetime::Controllers::MotionController motionController; +Pinetime::Controllers::TimerController timerController; + +Pinetime::Applications::DisplayApp displayApp(lcd, + lvgl, + touchPanel, + batteryController, + bleController, + dateTimeController, + watchdogView, + notificationManager, + heartRateController, + settingsController, + motorController, + motionController, + timerController); + +Pinetime::System::SystemTask systemTask(spi, + lcd, + spiNorFlash, + twiMaster, + touchPanel, + lvgl, + batteryController, + bleController, + dateTimeController, + timerController, + watchdog, + notificationManager, + motorController, + heartRateSensor, + motionController, + motionSensor, + settingsController, + heartRateController, + displayApp, + heartRateApp); + void nrfx_gpiote_evt_handler(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { if (pin == pinTouchIrq) { - systemTask->OnTouchEvent(); + systemTask.OnTouchEvent(); return; } @@ -141,12 +184,12 @@ void vApplicationIdleHook(void) { void DebounceTimerChargeCallback(TimerHandle_t xTimer) { xTimerStop(xTimer, 0); - systemTask->PushMessage(Pinetime::System::SystemTask::Messages::OnChargingEvent); + systemTask.PushMessage(Pinetime::System::Messages::OnChargingEvent); } void DebounceTimerCallback(TimerHandle_t xTimer) { xTimerStop(xTimer, 0); - systemTask->OnButtonPushed(); + systemTask.OnButtonPushed(); } void SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler(void) { @@ -264,19 +307,7 @@ int main(void) { debounceTimer = xTimerCreate("debounceTimer", 200, pdFALSE, (void*) 0, DebounceTimerCallback); debounceChargeTimer = xTimerCreate("debounceTimerCharge", 200, pdFALSE, (void*) 0, DebounceTimerChargeCallback); - systemTask = std::make_unique(spi, - lcd, - spiNorFlash, - twiMaster, - touchPanel, - lvgl, - batteryController, - bleController, - motorController, - heartRateSensor, - motionSensor, - settingsController); - systemTask->Start(); + systemTask.Start(); nimble_port_init(); vTaskStartScheduler(); diff --git a/src/systemtask/Messages.h b/src/systemtask/Messages.h new file mode 100644 index 00000000..3a195e2d --- /dev/null +++ b/src/systemtask/Messages.h @@ -0,0 +1,26 @@ +#pragma once + +namespace Pinetime { + namespace System { + enum class Messages { + GoToSleep, + GoToRunning, + TouchWakeUp, + OnNewTime, + OnNewNotification, + OnTimerDone, + OnNewCall, + BleConnected, + UpdateTimeOut, + BleFirmwareUpdateStarted, + BleFirmwareUpdateFinished, + OnTouchEvent, + OnButtonEvent, + OnDisplayTaskSleeping, + EnableSleeping, + DisableSleeping, + OnNewDay, + OnChargingEvent + }; + } +} diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 58377764..be484bb4 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -42,10 +42,18 @@ SystemTask::SystemTask(Drivers::SpiMaster& spi, Components::LittleVgl& lvgl, Controllers::Battery& batteryController, Controllers::Ble& bleController, + Controllers::DateTime& dateTimeController, + Controllers::TimerController& timerController, + Drivers::Watchdog& watchdog, + Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::MotorController& motorController, Pinetime::Drivers::Hrs3300& heartRateSensor, + Pinetime::Controllers::MotionController& motionController, Pinetime::Drivers::Bma421& motionSensor, - Controllers::Settings& settingsController) + Controllers::Settings& settingsController, + Pinetime::Controllers::HeartRateController& heartRateController, + Pinetime::Applications::DisplayApp& displayApp, + Pinetime::Applications::HeartRateTask& heartRateApp) : spi {spi}, lcd {lcd}, spiNorFlash {spiNorFlash}, @@ -53,17 +61,20 @@ SystemTask::SystemTask(Drivers::SpiMaster& spi, touchPanel {touchPanel}, lvgl {lvgl}, batteryController {batteryController}, - heartRateController {*this}, bleController {bleController}, - dateTimeController {*this}, - timerController {*this}, - watchdog {}, - watchdogView {watchdog}, + dateTimeController {dateTimeController}, + timerController {timerController}, + watchdog {watchdog}, + notificationManager{notificationManager}, motorController {motorController}, heartRateSensor {heartRateSensor}, motionSensor {motionSensor}, settingsController {settingsController}, - nimbleController(*this, bleController, dateTimeController, notificationManager, batteryController, spiNorFlash, heartRateController) { + heartRateController{heartRateController}, + nimbleController(*this, bleController, dateTimeController, notificationManager, batteryController, spiNorFlash, heartRateController), + motionController{motionController}, + displayApp{displayApp}, + heartRateApp(heartRateApp) { systemTasksMsgQueue = xQueueCreate(10, 1); } @@ -96,9 +107,11 @@ void SystemTask::Work() { twiMaster.Init(); touchPanel.Init(); + dateTimeController.Register(this); batteryController.Init(); motorController.Init(); motionSensor.SoftReset(); + timerController.Register(this); timerController.Init(); // Reset the TWI device because the motion sensor chip most probably crashed it... @@ -108,28 +121,14 @@ void SystemTask::Work() { motionSensor.Init(); settingsController.Init(); - displayApp = std::make_unique(lcd, - lvgl, - touchPanel, - batteryController, - bleController, - dateTimeController, - watchdogView, - *this, - notificationManager, - heartRateController, - settingsController, - motorController, - motionController, - timerController); - displayApp->Start(); + displayApp.Register(this); + displayApp.Start(); - displayApp->PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); heartRateSensor.Init(); heartRateSensor.Disable(); - heartRateApp = std::make_unique(heartRateSensor, heartRateController); - heartRateApp->Start(); + heartRateApp.Start(); nrf_gpio_cfg_sense_input(pinButton, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pulldown, (nrf_gpio_pin_sense_t) GPIO_PIN_CNF_SENSE_High); nrf_gpio_cfg_output(15); @@ -208,9 +207,9 @@ void SystemTask::Work() { spiNorFlash.Wakeup(); lcd.Wakeup(); - displayApp->PushMessage(Pinetime::Applications::Display::Messages::GoToRunning); - displayApp->PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); - heartRateApp->PushMessage(Pinetime::Applications::HeartRateTask::Messages::WakeUp); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToRunning); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateBatteryLevel); + heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::WakeUp); isSleeping = false; isWakingUp = false; @@ -230,26 +229,26 @@ void SystemTask::Work() { isGoingToSleep = true; NRF_LOG_INFO("[systemtask] Going to sleep"); xTimerStop(idleTimer, 0); - displayApp->PushMessage(Pinetime::Applications::Display::Messages::GoToSleep); - heartRateApp->PushMessage(Pinetime::Applications::HeartRateTask::Messages::GoToSleep); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::GoToSleep); + heartRateApp.PushMessage(Pinetime::Applications::HeartRateTask::Messages::GoToSleep); break; case Messages::OnNewTime: ReloadIdleTimer(); - displayApp->PushMessage(Pinetime::Applications::Display::Messages::UpdateDateTime); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::UpdateDateTime); break; case Messages::OnNewNotification: if (isSleeping && !isWakingUp) { GoToRunning(); } motorController.SetDuration(35); - displayApp->PushMessage(Pinetime::Applications::Display::Messages::NewNotification); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::NewNotification); break; case Messages::OnTimerDone: if (isSleeping && !isWakingUp) { GoToRunning(); } motorController.SetDuration(35); - displayApp->PushMessage(Pinetime::Applications::Display::Messages::TimerDone); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::TimerDone); break; case Messages::BleConnected: ReloadIdleTimer(); @@ -260,7 +259,7 @@ void SystemTask::Work() { doNotGoToSleep = true; if (isSleeping && !isWakingUp) GoToRunning(); - displayApp->PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::BleFirmwareUpdateStarted); break; case Messages::BleFirmwareUpdateFinished: doNotGoToSleep = false; @@ -359,7 +358,7 @@ void SystemTask::OnButtonPushed() { if (!isSleeping) { NRF_LOG_INFO("[systemtask] Button pushed"); PushMessage(Messages::OnButtonEvent); - displayApp->PushMessage(Pinetime::Applications::Display::Messages::ButtonPushed); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::ButtonPushed); } else { if (!isWakingUp) { NRF_LOG_INFO("[systemtask] Button pushed, waking up"); @@ -380,7 +379,7 @@ void SystemTask::OnTouchEvent() { return; if (!isSleeping) { PushMessage(Messages::OnTouchEvent); - displayApp->PushMessage(Pinetime::Applications::Display::Messages::TouchEvent); + displayApp.PushMessage(Pinetime::Applications::Display::Messages::TouchEvent); } else if (!isWakingUp) { if (settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::None or settingsController.getWakeUpMode() == Pinetime::Controllers::Settings::WakeUpMode::RaiseWrist) @@ -389,7 +388,7 @@ void SystemTask::OnTouchEvent() { } } -void SystemTask::PushMessage(SystemTask::Messages msg) { +void SystemTask::PushMessage(System::Messages msg) { if (msg == Messages::GoToSleep) { isGoingToSleep = true; } diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index ea41a69d..fa6a949c 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -27,6 +26,7 @@ #endif #include "drivers/Watchdog.h" +#include "Messages.h" namespace Pinetime { namespace Drivers { @@ -40,27 +40,6 @@ namespace Pinetime { namespace System { class SystemTask { public: - enum class Messages { - GoToSleep, - GoToRunning, - TouchWakeUp, - OnNewTime, - OnNewNotification, - OnTimerDone, - OnNewCall, - BleConnected, - UpdateTimeOut, - BleFirmwareUpdateStarted, - BleFirmwareUpdateFinished, - OnTouchEvent, - OnButtonEvent, - OnDisplayTaskSleeping, - EnableSleeping, - DisableSleeping, - OnNewDay, - OnChargingEvent - }; - SystemTask(Drivers::SpiMaster& spi, Drivers::St7789& lcd, Pinetime::Drivers::SpiNorFlash& spiNorFlash, @@ -69,10 +48,18 @@ namespace Pinetime { Components::LittleVgl& lvgl, Controllers::Battery& batteryController, Controllers::Ble& bleController, + Controllers::DateTime& dateTimeController, + Controllers::TimerController& timerController, + Drivers::Watchdog& watchdog, + Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::MotorController& motorController, Pinetime::Drivers::Hrs3300& heartRateSensor, + Pinetime::Controllers::MotionController& motionController, Pinetime::Drivers::Bma421& motionSensor, - Controllers::Settings& settingsController); + Controllers::Settings& settingsController, + Pinetime::Controllers::HeartRateController& heartRateController, + Pinetime::Applications::DisplayApp& displayApp, + Pinetime::Applications::HeartRateTask& heartRateApp); void Start(); void PushMessage(Messages msg); @@ -96,27 +83,29 @@ namespace Pinetime { Pinetime::Drivers::Cst816S& touchPanel; Pinetime::Components::LittleVgl& lvgl; Pinetime::Controllers::Battery& batteryController; - std::unique_ptr displayApp; - Pinetime::Controllers::HeartRateController heartRateController; - std::unique_ptr heartRateApp; + Pinetime::Controllers::Ble& bleController; - Pinetime::Controllers::DateTime dateTimeController; - Pinetime::Controllers::TimerController timerController; + Pinetime::Controllers::DateTime& dateTimeController; + Pinetime::Controllers::TimerController& timerController; QueueHandle_t systemTasksMsgQueue; std::atomic isSleeping {false}; std::atomic isGoingToSleep {false}; std::atomic isWakingUp {false}; - Pinetime::Drivers::Watchdog watchdog; - Pinetime::Drivers::WatchdogView watchdogView; - Pinetime::Controllers::NotificationManager notificationManager; + Pinetime::Drivers::Watchdog& watchdog; + Pinetime::Controllers::NotificationManager& notificationManager; Pinetime::Controllers::MotorController& motorController; Pinetime::Drivers::Hrs3300& heartRateSensor; Pinetime::Drivers::Bma421& motionSensor; Pinetime::Controllers::Settings& settingsController; + Pinetime::Controllers::HeartRateController& heartRateController; Pinetime::Controllers::NimbleController nimbleController; Controllers::BrightnessController brightnessController; - Pinetime::Controllers::MotionController motionController; + Pinetime::Controllers::MotionController& motionController; + + Pinetime::Applications::DisplayApp& displayApp; + Pinetime::Applications::HeartRateTask& heartRateApp; + static constexpr uint8_t pinSpiSck = 2; static constexpr uint8_t pinSpiMosi = 3; From ff00873f974cb1400acf7721251167634e60107a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sun, 6 Jun 2021 20:20:55 +0200 Subject: [PATCH 20/94] Fix build for recovery firmware. --- src/displayapp/DisplayAppRecovery.cpp | 7 +++++-- src/displayapp/DisplayAppRecovery.h | 2 +- src/main.cpp | 1 - 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/displayapp/DisplayAppRecovery.cpp b/src/displayapp/DisplayAppRecovery.cpp index 856eafd8..b73d0a85 100644 --- a/src/displayapp/DisplayAppRecovery.cpp +++ b/src/displayapp/DisplayAppRecovery.cpp @@ -14,7 +14,6 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, Controllers::Ble& bleController, Controllers::DateTime& dateTimeController, Drivers::WatchdogView& watchdog, - System::SystemTask& systemTask, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::HeartRateController& heartRateController, Controllers::Settings& settingsController, @@ -113,4 +112,8 @@ void DisplayApp::PushMessage(Display::Messages msg) { /* Actual macro used here is port specific. */ // TODO : should I do something here? } -} \ No newline at end of file +} + +void DisplayApp::Register(Pinetime::System::SystemTask* systemTask) { + +} diff --git a/src/displayapp/DisplayAppRecovery.h b/src/displayapp/DisplayAppRecovery.h index 2c5a36fb..638c0071 100644 --- a/src/displayapp/DisplayAppRecovery.h +++ b/src/displayapp/DisplayAppRecovery.h @@ -39,7 +39,6 @@ namespace Pinetime { Controllers::Ble& bleController, Controllers::DateTime& dateTimeController, Drivers::WatchdogView& watchdog, - System::SystemTask& systemTask, Pinetime::Controllers::NotificationManager& notificationManager, Pinetime::Controllers::HeartRateController& heartRateController, Controllers::Settings& settingsController, @@ -48,6 +47,7 @@ namespace Pinetime { Pinetime::Controllers::TimerController& timerController); void Start(); void PushMessage(Pinetime::Applications::Display::Messages msg); + void Register(Pinetime::System::SystemTask* systemTask); private: TaskHandle_t taskHandle; diff --git a/src/main.cpp b/src/main.cpp index 60ed058b..52ec9580 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -33,7 +33,6 @@ #include "components/ble/NotificationManager.h" #include "components/motor/MotorController.h" #include "components/datetime/DateTimeController.h" -#include "components/settings/Settings.h" #include "components/heartrate/HeartRateController.h" #include "drivers/Spi.h" #include "drivers/SpiMaster.h" From caca6a5cff0025df80241a09baab28e49720ddf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Thu, 10 Jun 2021 21:19:11 +0200 Subject: [PATCH 21/94] Fix stack corruption when exiting an app (the app was destroyed while it was executing the button handler). --- src/displayapp/DisplayApp.cpp | 8 +++++++- src/displayapp/DisplayApp.h | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index ba6dfbd2..99758c92 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -205,6 +205,11 @@ void DisplayApp::Refresh() { } } + if(nextApp != Apps::None) { + LoadApp(nextApp, nextDirection); + nextApp = Apps::None; + } + if (state != States::Idle && touchMode == TouchModes::Polling) { auto info = touchPanel.GetTouchInfo(); if (info.action == 2) { // 2 = contact @@ -223,7 +228,8 @@ void DisplayApp::RunningState() { } void DisplayApp::StartApp(Apps app, DisplayApp::FullRefreshDirections direction) { - LoadApp(app, direction); + nextApp = app; + nextDirection = direction; } void DisplayApp::ReturnApp(Apps app, DisplayApp::FullRefreshDirections direction, TouchEvents touchEvent) { diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 65abd41a..73a7cc36 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -111,6 +111,9 @@ namespace Pinetime { void ReturnApp(Apps app, DisplayApp::FullRefreshDirections direction, TouchEvents touchEvent); void LoadApp(Apps app, DisplayApp::FullRefreshDirections direction); void PushMessageToSystemTask(Pinetime::System::Messages message); + + Apps nextApp = Apps::None; + DisplayApp::FullRefreshDirections nextDirection; }; } } From b1925ff28638dd4b8400c4d0c49d796d8990b1af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Thu, 10 Jun 2021 21:20:27 +0200 Subject: [PATCH 22/94] Minor improvements: use std::make_unique when creating unique_ptr, check the code is running from an IRQ before calling xQueueSendFromISR or xQueueSend) --- src/displayapp/DisplayApp.cpp | 21 ++++++++++++----- src/displayapp/screens/SystemInfo.cpp | 10 ++++---- src/displayapp/screens/settings/Settings.cpp | 4 ++-- src/displayapp/screens/settings/Settings.h | 1 - src/drivers/SpiMaster.cpp | 8 +++---- src/systemtask/SystemTask.cpp | 24 +++++++++++++++----- 6 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 99758c92..3bfaf2a2 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -45,6 +45,12 @@ using namespace Pinetime::Applications; using namespace Pinetime::Applications::Display; +namespace { + static inline bool in_isr(void) { + return (SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) != 0; + } +} + DisplayApp::DisplayApp(Drivers::St7789& lcd, Components::LittleVgl& lvgl, Drivers::Cst816S& touchPanel, @@ -364,12 +370,15 @@ void DisplayApp::IdleState() { } void DisplayApp::PushMessage(Messages msg) { - BaseType_t xHigherPriorityTaskWoken; - xHigherPriorityTaskWoken = pdFALSE; - xQueueSendFromISR(msgQueue, &msg, &xHigherPriorityTaskWoken); - if (xHigherPriorityTaskWoken) { - /* Actual macro used here is port specific. */ - // TODO : should I do something here? + if(in_isr()) { + BaseType_t xHigherPriorityTaskWoken; + xHigherPriorityTaskWoken = pdFALSE; + xQueueSendFromISR(msgQueue, &msg, &xHigherPriorityTaskWoken); + if (xHigherPriorityTaskWoken) { + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + } + } else { + xQueueSend(msgQueue, &msg, portMAX_DELAY); } } diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index f61d2ff1..a7387dac 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -81,7 +81,7 @@ std::unique_ptr SystemInfo::CreateScreen1() { __TIME__); lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); lv_obj_align(label, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); - return std::unique_ptr(new Screens::Label(0, 5, app, label)); + return std::make_unique(0, 5, app, label); } std::unique_ptr SystemInfo::CreateScreen2() { @@ -161,7 +161,7 @@ std::unique_ptr SystemInfo::CreateScreen2() { brightnessController.ToString(), resetReason); lv_obj_align(label, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); - return std::unique_ptr(new Screens::Label(1, 4, app, label)); + return std::make_unique(1, 4, app, label); } std::unique_ptr SystemInfo::CreateScreen3() { @@ -195,7 +195,7 @@ std::unique_ptr SystemInfo::CreateScreen3() { (int) mon.free_biggest_size, 0); lv_obj_align(label, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); - return std::unique_ptr(new Screens::Label(2, 5, app, label)); + return std::make_unique(2, 5, app, label); } bool sortById(const TaskStatus_t& lhs, const TaskStatus_t& rhs) { @@ -229,7 +229,7 @@ std::unique_ptr SystemInfo::CreateScreen4() { lv_table_set_cell_value(infoTask, i + 1, 2, std::to_string(tasksStatus[i].usStackHighWaterMark).c_str()); } } - return std::unique_ptr(new Screens::Label(3, 5, app, infoTask)); + return std::make_unique(3, 5, app, infoTask); } std::unique_ptr SystemInfo::CreateScreen5() { @@ -245,5 +245,5 @@ std::unique_ptr SystemInfo::CreateScreen5() { "#FFFF00 JF002/InfiniTime#"); lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); lv_obj_align(label, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); - return std::unique_ptr(new Screens::Label(4, 5, app, label)); + return std::make_unique(4, 5, app, label); } diff --git a/src/displayapp/screens/settings/Settings.cpp b/src/displayapp/screens/settings/Settings.cpp index 2c72c832..e63a3584 100644 --- a/src/displayapp/screens/settings/Settings.cpp +++ b/src/displayapp/screens/settings/Settings.cpp @@ -46,7 +46,7 @@ std::unique_ptr Settings::CreateScreen1() { {Symbols::clock, "Watch face", Apps::SettingWatchFace}, }}; - return std::unique_ptr(new Screens::List(0, 2, app, settingsController, applications)); + return std::make_unique(0, 2, app, settingsController, applications); } std::unique_ptr Settings::CreateScreen2() { @@ -58,5 +58,5 @@ std::unique_ptr Settings::CreateScreen2() { {Symbols::list, "About", Apps::SysInfo}, }}; - return std::unique_ptr(new Screens::List(1, 2, app, settingsController, applications)); + return std::make_unique(1, 2, app, settingsController, applications); } diff --git a/src/displayapp/screens/settings/Settings.h b/src/displayapp/screens/settings/Settings.h index 7e332dfe..711a6be6 100644 --- a/src/displayapp/screens/settings/Settings.h +++ b/src/displayapp/screens/settings/Settings.h @@ -16,7 +16,6 @@ namespace Pinetime { bool Refresh() override; - void OnButtonEvent(lv_obj_t* object, lv_event_t event); bool OnTouchEvent(Pinetime::Applications::TouchEvents event) override; private: diff --git a/src/drivers/SpiMaster.cpp b/src/drivers/SpiMaster.cpp index 34fcc08a..e2be5027 100644 --- a/src/drivers/SpiMaster.cpp +++ b/src/drivers/SpiMaster.cpp @@ -132,17 +132,17 @@ void SpiMaster::OnEndEvent() { spiBaseAddress->TASKS_START = 1; } else { + BaseType_t xHigherPriorityTaskWoken = pdFALSE; if (taskToNotify != nullptr) { - BaseType_t xHigherPriorityTaskWoken = pdFALSE; vTaskNotifyGiveFromISR(taskToNotify, &xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPriorityTaskWoken); } nrf_gpio_pin_set(this->pinCsn); currentBufferAddr = 0; - BaseType_t xHigherPriorityTaskWoken = pdFALSE; - xSemaphoreGiveFromISR(mutex, &xHigherPriorityTaskWoken); - portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + BaseType_t xHigherPriorityTaskWoken2 = pdFALSE; + xSemaphoreGiveFromISR(mutex, &xHigherPriorityTaskWoken2); + portYIELD_FROM_ISR(xHigherPriorityTaskWoken | xHigherPriorityTaskWoken2); } } diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index be484bb4..4799624a 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -27,6 +27,12 @@ using namespace Pinetime::System; +namespace { + static inline bool in_isr(void) { + return (SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) != 0; + } +} + void IdleTimerCallback(TimerHandle_t xTimer) { NRF_LOG_INFO("IdleTimerCallback"); @@ -392,12 +398,18 @@ void SystemTask::PushMessage(System::Messages msg) { if (msg == Messages::GoToSleep) { isGoingToSleep = true; } - BaseType_t xHigherPriorityTaskWoken; - xHigherPriorityTaskWoken = pdFALSE; - xQueueSendFromISR(systemTasksMsgQueue, &msg, &xHigherPriorityTaskWoken); - if (xHigherPriorityTaskWoken) { - /* Actual macro used here is port specific. */ - // TODO: should I do something here? + + if(in_isr()) { + BaseType_t xHigherPriorityTaskWoken; + xHigherPriorityTaskWoken = pdFALSE; + xQueueSendFromISR(systemTasksMsgQueue, &msg, &xHigherPriorityTaskWoken); + if (xHigherPriorityTaskWoken) { + /* Actual macro used here is port specific. */ + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + + } + } else { + xQueueSend(systemTasksMsgQueue, &msg, portMAX_DELAY); } } From 049174bd3535d980a2744cbf035e1e33d33b5e39 Mon Sep 17 00:00:00 2001 From: Florian Date: Fri, 11 Jun 2021 01:15:32 +0200 Subject: [PATCH 23/94] replace ScreenList with a single screen in Clock. This removes the tap to switch feature --- src/displayapp/screens/Clock.cpp | 39 +++++++++++++++++--------------- src/displayapp/screens/Clock.h | 4 ++-- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index 14299840..9962a9f4 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -32,22 +32,25 @@ Clock::Clock(DisplayApp* app, notificatioManager {notificatioManager}, settingsController {settingsController}, heartRateController {heartRateController}, - motionController {motionController}, - screens {app, - settingsController.GetClockFace(), - { - [this]() -> std::unique_ptr { - return WatchFaceDigitalScreen(); - }, - [this]() -> std::unique_ptr { - return WatchFaceAnalogScreen(); - }, - // Examples for more watch faces - //[this]() -> std::unique_ptr { return WatchFaceMinimalScreen(); }, - //[this]() -> std::unique_ptr { return WatchFaceCustomScreen(); } - }, - Screens::ScreenListModes::LongPress} { - + motionController {motionController} { + + switch (settingsController.GetClockFace()) { + case 0: + screen = WatchFaceDigitalScreen(); + break; + case 1: + screen = WatchFaceAnalogScreen(); + break; + /* + // Examples for more watch faces + case 2: + screen = WatchFaceMinimalScreen(); + break; + case 3: + screen = WatchFaceCustomScreen(); + break; + */ + } settingsController.SetAppMenu(0); } @@ -56,12 +59,12 @@ Clock::~Clock() { } bool Clock::Refresh() { - screens.Refresh(); + screen->Refresh(); return running; } bool Clock::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - return screens.OnTouchEvent(event); + return screen->OnTouchEvent(event); } std::unique_ptr Clock::WatchFaceDigitalScreen() { diff --git a/src/displayapp/screens/Clock.h b/src/displayapp/screens/Clock.h index 9879985f..174c73b7 100644 --- a/src/displayapp/screens/Clock.h +++ b/src/displayapp/screens/Clock.h @@ -4,8 +4,8 @@ #include #include #include +#include #include "Screen.h" -#include "ScreenList.h" #include "components/datetime/DateTimeController.h" namespace Pinetime { @@ -47,7 +47,7 @@ namespace Pinetime { Controllers::HeartRateController& heartRateController; Controllers::MotionController& motionController; - ScreenList<2> screens; + std::unique_ptr screen; std::unique_ptr WatchFaceDigitalScreen(); std::unique_ptr WatchFaceAnalogScreen(); From 123c6f19176c5e86ff040eb4b059cbe1b4876ba5 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 11 Jun 2021 13:26:28 +0300 Subject: [PATCH 24/94] Fix touchevent tap --- src/displayapp/DisplayApp.cpp | 11 +++++------ src/displayapp/DisplayApp.h | 2 +- src/displayapp/screens/settings/QuickSettings.cpp | 9 +-------- 3 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 7b03d569..c8e5d2e8 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -162,7 +162,8 @@ void DisplayApp::Refresh() { case Messages::TouchEvent: { if (state != States::Running) break; - auto gesture = OnTouchEvent(); + auto info = touchPanel.GetTouchInfo(); + auto gesture = OnTouchEvent(info); if (!currentScreen->OnTouchEvent(gesture)) { if (currentApp == Apps::Clock) { switch (gesture) { @@ -183,6 +184,8 @@ void DisplayApp::Refresh() { } } else if (returnTouchEvent == gesture) { LoadApp(returnToApp, returnDirection); + } else if (touchMode == TouchModes::Gestures) { + lvgl.SetNewTapEvent(info.x, info.y); } } } break; @@ -368,14 +371,10 @@ void DisplayApp::PushMessage(Messages msg) { } } -TouchEvents DisplayApp::OnTouchEvent() { - auto info = touchPanel.GetTouchInfo(); +TouchEvents DisplayApp::OnTouchEvent(Pinetime::Drivers::Cst816S::TouchInfos info) { if (info.isTouch) { switch (info.gesture) { case Pinetime::Drivers::Cst816S::Gestures::SingleTap: - if (touchMode == TouchModes::Gestures) { - lvgl.SetNewTapEvent(info.x, info.y); - } return TouchEvents::Tap; case Pinetime::Drivers::Cst816S::Gestures::LongPress: return TouchEvents::LongTap; diff --git a/src/displayapp/DisplayApp.h b/src/displayapp/DisplayApp.h index 0c7bd216..14cd7ad5 100644 --- a/src/displayapp/DisplayApp.h +++ b/src/displayapp/DisplayApp.h @@ -100,7 +100,7 @@ namespace Pinetime { TouchModes touchMode = TouchModes::Gestures; - TouchEvents OnTouchEvent(); + TouchEvents OnTouchEvent(Pinetime::Drivers::Cst816S::TouchInfos); void RunningState(); void IdleState(); static void Process(void* instance); diff --git a/src/displayapp/screens/settings/QuickSettings.cpp b/src/displayapp/screens/settings/QuickSettings.cpp index 3994794d..20d2cd22 100644 --- a/src/displayapp/screens/settings/QuickSettings.cpp +++ b/src/displayapp/screens/settings/QuickSettings.cpp @@ -155,14 +155,7 @@ void QuickSettings::OnButtonEvent(lv_obj_t* object, lv_event_t event) { } bool QuickSettings::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - switch (event) { - case Pinetime::Applications::TouchEvents::SwipeLeft: - running = false; - return false; - - default: - return true; - } + return false; } bool QuickSettings::Refresh() { From 21b6f85140f0424b9e6c8371db7e190dd0303182 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 11 Jun 2021 14:46:03 +0300 Subject: [PATCH 25/94] Fix regression --- src/displayapp/DisplayApp.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index c8e5d2e8..b45822de 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -185,7 +185,9 @@ void DisplayApp::Refresh() { } else if (returnTouchEvent == gesture) { LoadApp(returnToApp, returnDirection); } else if (touchMode == TouchModes::Gestures) { - lvgl.SetNewTapEvent(info.x, info.y); + if (gesture == TouchEvents::Tap) { + lvgl.SetNewTapEvent(info.x, info.y); + } } } } break; From 239b5547eae64d05f5d7544f0e11bfb877a75a02 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Fri, 11 Jun 2021 14:55:37 +0300 Subject: [PATCH 26/94] Fix another regression --- src/displayapp/screens/FlashLight.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/screens/FlashLight.cpp b/src/displayapp/screens/FlashLight.cpp index 4568db40..8d647a36 100644 --- a/src/displayapp/screens/FlashLight.cpp +++ b/src/displayapp/screens/FlashLight.cpp @@ -70,5 +70,5 @@ bool FlashLight::Refresh() { } bool FlashLight::OnTouchEvent(Pinetime::Applications::TouchEvents event) { - return true; + return false; } From 6d524ebea2c97e309633d5e01c3a1e37c182f27d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sat, 12 Jun 2021 10:58:28 +0200 Subject: [PATCH 27/94] Move most of the code from the constructor of the objects statically initialized in main() into Start()/Init() functions to avoid Static Initialization Order Fiasco (https://en.cppreference.com/w/cpp/language/siof). See https://github.com/JF002/InfiniTime/pull/415#issuecomment-859004238. --- src/displayapp/DisplayApp.cpp | 8 +++++--- src/displayapp/DisplayAppRecovery.cpp | 3 ++- src/displayapp/LittleVgl.cpp | 4 ++++ src/displayapp/LittleVgl.h | 2 ++ src/drivers/SpiMaster.cpp | 7 +++++-- src/drivers/SpiMaster.h | 2 +- src/drivers/TwiMaster.cpp | 4 +++- src/drivers/TwiMaster.h | 2 +- src/heartratetask/HeartRateTask.cpp | 5 +++-- src/main.cpp | 2 ++ src/systemtask/SystemTask.cpp | 3 ++- 11 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 3bfaf2a2..05f171be 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -77,12 +77,14 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, motorController {motorController}, motionController {motionController}, timerController {timerController} { - msgQueue = xQueueCreate(queueSize, itemSize); - // Start clock when smartwatch boots - LoadApp(Apps::Clock, DisplayApp::FullRefreshDirections::None); } void DisplayApp::Start() { + msgQueue = xQueueCreate(queueSize, itemSize); + + // Start clock when smartwatch boots + LoadApp(Apps::Clock, DisplayApp::FullRefreshDirections::None); + if (pdPASS != xTaskCreate(DisplayApp::Process, "displayapp", 800, this, 0, &taskHandle)) { APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); } diff --git a/src/displayapp/DisplayAppRecovery.cpp b/src/displayapp/DisplayAppRecovery.cpp index b73d0a85..fd517b11 100644 --- a/src/displayapp/DisplayAppRecovery.cpp +++ b/src/displayapp/DisplayAppRecovery.cpp @@ -21,10 +21,11 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd, Pinetime::Controllers::MotionController& motionController, Pinetime::Controllers::TimerController& timerController) : lcd {lcd}, bleController {bleController} { - msgQueue = xQueueCreate(queueSize, itemSize); + } void DisplayApp::Start() { + msgQueue = xQueueCreate(queueSize, itemSize); if (pdPASS != xTaskCreate(DisplayApp::Process, "displayapp", 512, this, 0, &taskHandle)) APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); } diff --git a/src/displayapp/LittleVgl.cpp b/src/displayapp/LittleVgl.cpp index 36df51b4..c069afa2 100644 --- a/src/displayapp/LittleVgl.cpp +++ b/src/displayapp/LittleVgl.cpp @@ -23,6 +23,10 @@ bool touchpad_read(lv_indev_drv_t* indev_drv, lv_indev_data_t* data) { LittleVgl::LittleVgl(Pinetime::Drivers::St7789& lcd, Pinetime::Drivers::Cst816S& touchPanel) : lcd {lcd}, touchPanel {touchPanel}, previousClick {0, 0} { + +} + +void LittleVgl::Init() { lv_init(); InitTheme(); InitDisplay(); diff --git a/src/displayapp/LittleVgl.h b/src/displayapp/LittleVgl.h index 7f7b76e0..41f934a7 100644 --- a/src/displayapp/LittleVgl.h +++ b/src/displayapp/LittleVgl.h @@ -19,6 +19,8 @@ namespace Pinetime { LittleVgl(LittleVgl&&) = delete; LittleVgl& operator=(LittleVgl&&) = delete; + void Init(); + void FlushDisplay(const lv_area_t* area, lv_color_t* color_p); bool GetTouchPadInfo(lv_indev_data_t* ptr); void SetFullRefresh(FullRefreshDirections direction); diff --git a/src/drivers/SpiMaster.cpp b/src/drivers/SpiMaster.cpp index e2be5027..0d5bb83c 100644 --- a/src/drivers/SpiMaster.cpp +++ b/src/drivers/SpiMaster.cpp @@ -7,11 +7,14 @@ using namespace Pinetime::Drivers; SpiMaster::SpiMaster(const SpiMaster::SpiModule spi, const SpiMaster::Parameters& params) : spi {spi}, params {params} { - mutex = xSemaphoreCreateBinary(); - ASSERT(mutex != NULL); } bool SpiMaster::Init() { + if(mutex == nullptr) { + mutex = xSemaphoreCreateBinary(); + ASSERT(mutex != nullptr); + } + /* Configure GPIO pins used for pselsck, pselmosi, pselmiso and pselss for SPI0 */ nrf_gpio_pin_set(params.pinSCK); nrf_gpio_cfg_output(params.pinSCK); diff --git a/src/drivers/SpiMaster.h b/src/drivers/SpiMaster.h index 5045369a..5ea624f2 100644 --- a/src/drivers/SpiMaster.h +++ b/src/drivers/SpiMaster.h @@ -59,7 +59,7 @@ namespace Pinetime { volatile uint32_t currentBufferAddr = 0; volatile size_t currentBufferSize = 0; volatile TaskHandle_t taskToNotify; - SemaphoreHandle_t mutex; + SemaphoreHandle_t mutex = nullptr; }; } } diff --git a/src/drivers/TwiMaster.cpp b/src/drivers/TwiMaster.cpp index 7b6582dd..fc9edf81 100644 --- a/src/drivers/TwiMaster.cpp +++ b/src/drivers/TwiMaster.cpp @@ -9,10 +9,12 @@ using namespace Pinetime::Drivers; // TODO use DMA/IRQ TwiMaster::TwiMaster(const Modules module, const Parameters& params) : module {module}, params {params} { - mutex = xSemaphoreCreateBinary(); } void TwiMaster::Init() { + if(mutex == nullptr) + mutex = xSemaphoreCreateBinary(); + NRF_GPIO->PIN_CNF[params.pinScl] = ((uint32_t) GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos) | ((uint32_t) GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | ((uint32_t) GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos) | ((uint32_t) GPIO_PIN_CNF_DRIVE_S0D1 << GPIO_PIN_CNF_DRIVE_Pos) | diff --git a/src/drivers/TwiMaster.h b/src/drivers/TwiMaster.h index 1c0648a2..6175b99b 100644 --- a/src/drivers/TwiMaster.h +++ b/src/drivers/TwiMaster.h @@ -31,7 +31,7 @@ namespace Pinetime { ErrorCodes Write(uint8_t deviceAddress, const uint8_t* data, size_t size, bool stop); void FixHwFreezed(); NRF_TWIM_Type* twiBaseAddress; - SemaphoreHandle_t mutex; + SemaphoreHandle_t mutex = nullptr; const Modules module; const Parameters params; static constexpr uint8_t maxDataSize {16}; diff --git a/src/heartratetask/HeartRateTask.cpp b/src/heartratetask/HeartRateTask.cpp index 1c21db71..fddc05d7 100644 --- a/src/heartratetask/HeartRateTask.cpp +++ b/src/heartratetask/HeartRateTask.cpp @@ -7,11 +7,12 @@ using namespace Pinetime::Applications; HeartRateTask::HeartRateTask(Drivers::Hrs3300& heartRateSensor, Controllers::HeartRateController& controller) : heartRateSensor {heartRateSensor}, controller {controller}, ppg{} { - messageQueue = xQueueCreate(10, 1); - controller.SetHeartRateTask(this); } void HeartRateTask::Start() { + messageQueue = xQueueCreate(10, 1); + controller.SetHeartRateTask(this); + if (pdPASS != xTaskCreate(HeartRateTask::Process, "Heartrate", 500, this, 0, &taskHandle)) APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); } diff --git a/src/main.cpp b/src/main.cpp index 52ec9580..4c2c5de8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -306,6 +306,8 @@ int main(void) { debounceTimer = xTimerCreate("debounceTimer", 200, pdFALSE, (void*) 0, DebounceTimerCallback); debounceChargeTimer = xTimerCreate("debounceTimerCharge", 200, pdFALSE, (void*) 0, DebounceTimerChargeCallback); + lvgl.Init(); + systemTask.Start(); nimble_port_init(); diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 4799624a..38e9793c 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -81,10 +81,11 @@ SystemTask::SystemTask(Drivers::SpiMaster& spi, motionController{motionController}, displayApp{displayApp}, heartRateApp(heartRateApp) { - systemTasksMsgQueue = xQueueCreate(10, 1); + } void SystemTask::Start() { + systemTasksMsgQueue = xQueueCreate(10, 1); if (pdPASS != xTaskCreate(SystemTask::Process, "MAIN", 350, this, 0, &taskHandle)) APP_ERROR_HANDLER(NRF_ERROR_NO_MEM); } From 346d20db52823eeed01d81cee4f413b753fbec9e Mon Sep 17 00:00:00 2001 From: JF002 Date: Sat, 12 Jun 2021 11:02:54 +0200 Subject: [PATCH 28/94] Rewrite MemoryAnalysis.md with up to date information. (#411) Rewrite MemoryAnalysis.md with up to date information. --- doc/MemoryAnalysis.md | 325 ++++++++++++++++---- doc/memoryAnalysis/linkermapviz.png | Bin 0 -> 55661 bytes doc/memoryAnalysis/mapfile.png | Bin 0 -> 111302 bytes doc/memoryAnalysis/puncover-all-symbols.png | Bin 0 -> 78193 bytes doc/memoryAnalysis/puncover.png | Bin 0 -> 217193 bytes 5 files changed, 268 insertions(+), 57 deletions(-) create mode 100644 doc/memoryAnalysis/linkermapviz.png create mode 100644 doc/memoryAnalysis/mapfile.png create mode 100644 doc/memoryAnalysis/puncover-all-symbols.png create mode 100644 doc/memoryAnalysis/puncover.png diff --git a/doc/MemoryAnalysis.md b/doc/MemoryAnalysis.md index 95bd611c..3251c98d 100644 --- a/doc/MemoryAnalysis.md +++ b/doc/MemoryAnalysis.md @@ -1,7 +1,274 @@ # Memory analysis +The PineTime is equipped with the following memories: + - The internal RAM : **64KB** + - The internal Flash : **512KB** + - The external (SPI) Flash : **4MB** + +Note that the NRF52832 cannot execute code stored in the external flash : we need to store the whole firmware in the internal flash memory, and use the external one to store graphicals assets, fonts... + +This document describes how the RAM and Flash memories are used in InfiniTime and how to analyze and monitor their usage. It was written in the context of [this memory analysis effort](https://github.com/JF002/InfiniTime/issues/313). + +## Code sections +A binary is composed of multiple sections. Most of the time, these sections are : .text, .rodata, .data and .bss but more sections can be defined in the linker script. + +Here is a small description of these sections and where they end up in memory: + + - **TEXT** = code (FLASH) + - **RODATA** = constants (FLASH) + - **DATA** = initialized variables (FLASH + RAM) + - **BSS** = uninitialized variables (RAM) + + +## Internal FLASH +The internal flash memory stores the whole firmware: code, variable that are not default-initialized, constants... + +The content of the flash memory can be easily analyzed thanks to the MAP file generated by the compiler. This file lists all the symbols from the program along with their size and location (section and addresses) in RAM and FLASH. + +![Map file](./memoryAnalysis/mapfile.png) + +As you can see on the picture above, this file contains a lot of information and is not easily readable by a human being. Fortunately, you can easily find tools that parse and display the content of the MAP file in a more understandable way. + +In this analysis, I used [Linkermapviz](https://github.com/PromyLOPh/linkermapviz). + +### Linkermapviz + +[Linkermapviz](https://github.com/PromyLOPh/linkermapviz) parses the MAP file and displays its content in a graphical way into an HTML page: + +![linkermapviz](./memoryAnalysis/linkermapviz.png) + +Using this tool, you can easily see the size of each symbol relative to the other one, and check what is using most of the space,... + +Also, as Linkermapviz is written in Python, you can easily modify it to adapt it to your firmware, export data in another format,... For example, [I modified it to parse the contents of the MAP file and export it in a CSV file](https://github.com/JF002/InfiniTime/issues/313#issuecomment-842338620). I could later on open this file in LibreOffice Calc and use sort/filter functionality to search for specific symbols in specific files... + +### Puncover +[Puncover](https://github.com/HBehrens/puncover) is another useful tools that analyses the binary file generated by the compiler (the .out file that contains all debug information). It provides valuable information about the symbols (data and code): name, position, size, max stack of each functions, callers, callees... +![Puncover](./memoryAnalysis/puncover.png) + +Puncover is really easy to install: + + - clone the repo and cd into the cloned directory + - setup a venv + - `python -m virtualenv venv` + - `source venv/bin/activate` + - Install : `pip install .` + - Run : `puncover --gcc_tools_base=/path/to/gcc-arm-none-eabi-9-2020-q2-update/bin/arm-none-eabi- --elf_file /path/to/build/directory/src/pinetime-app-1.1.0.out --src_root /path/to/sources --build_dir /path/to/build/directory` + - Replace + * `/path/to/gcc-arm-none-eabi-9-2020-q2-update/bin` with the path to your gcc-arm-none-eabi toolchain + * `/path/to/build/directory/src/pinetime-app-1.1.0.out` with the path to the binary generated by GCC (.out file) + * `/path/to/sources` with the path to the root folder of the sources (checkout directory) + * `/path/to/build/directory` with the path to the build directory + - 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 space. In this case, with no surprise, fonts and graphics are the biggest flash space consumer. + +![Puncover](./memoryAnalysis/puncover-all-symbols.png) + +This way, you can easily check what needs to be optimized : we should find a way to store big static data (like fonts and graphics) in the external flash memory, for example. + +It's always a good idea to check the flash memory space when working on the project : this way, you can easily check that your developments are using a reasonable amount of space. + +### Links + - Analysis with linkermapviz : https://github.com/JF002/InfiniTime/issues/313#issuecomment-842338620 + - Analysis with Puncover : https://github.com/JF002/InfiniTime/issues/313#issuecomment-847311392 + +## RAM +RAM memory contains all the data that can be modified at run-time: variables, stack, heap... + +### Data +RAM memory can be *statically* allocated, meaning that the size and position of the data are known at compile-time: + +You can easily analyze the memory used by variables declared in the global scope using the MAP. You'll find them in the .BSS or .DATA sections. Linkermapviz and Puncover can be used to analyze their memory usage. + +Variables declared in the scope of a function will be allocated on the stack. It means that the stack usage will vary according to the state of the program, and cannot be easily analyzed at compile time. +``` +uint8_t buffer[1024] + +int main() { + int a; +} +``` + +#### Analysis +In Infinitime 1.1, the biggest buffers are the buffers allocated for LVGL (14KB) and the one for FreeRTOS (16KB). Nimble also allocated 9KB of RAM. + +### Stack +The stack will be used for everything except tasks, which have their own stack allocated by FreeRTOS. The stack is 8192B and is allocated in the [linker script](https://github.com/JF002/InfiniTime/blob/develop/nrf_common.ld#L148). +An easy way to monitor its usage is by filling the section with a known pattern at boot time, then use the firmware and dump the memory. You can then check the maximum stack usage by checking the address from the beginning of the stack that were overwritten. + +#### Fill the stack section by a known pattern: +Edit /modules/nrfx/mdk/gcc_startup_nrf52.S and add the following code after the copy of the data from read only memory to RAM at around line 243: + +``` +/* Loop to copy data from read only memory to RAM. + * The ranges of copy from/to are specified by following symbols: + * __etext: LMA of start of the section to copy from. Usually end of text + * __data_start__: VMA of start of the section to copy to. + * __bss_start__: VMA of end of the section to copy to. Normally __data_end__ is used, but by using __bss_start__ + * the user can add their own initialized data section before BSS section with the INTERT AFTER command. + * + * All addresses must be aligned to 4 bytes boundary. + */ + ldr r1, =__etext + ldr r2, =__data_start__ + ldr r3, =__bss_start__ + + subs r3, r3, r2 + ble .L_loop1_done + +.L_loop1: + subs r3, r3, #4 + ldr r0, [r1,r3] + str r0, [r2,r3] + bgt .L_loop1 + +.L_loop1_done: + + +/* Add this code to fill the stack section with 0xFFEEDDBB */ +ldr r0, =__StackLimit + ldr r1, =8192 +ldr r2, =0xFFEEDDBB +.L_fill: +str r2, [r0] +adds r0, 4 +subs r1, 4 +bne .L_fill +/* -- */ +``` + +#### Dump RAM memory and check usage +Dumping the content of the ram is easy using JLink debugger and `nrfjprog`: + +``` +nrfjprog --readram ram.bin +``` + +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. +On the following dump, the maximum stack usage is 520 bytes (0xFFFF - 0xFDF8): + +``` +000fdb0 ddbb ffee ddbb ffee ddbb ffee ddbb ffee +000fdc0 ddbb ffee ddbb ffee ddbb ffee ddbb ffee +000fdd0 ddbb ffee ddbb ffee ddbb ffee ddbb ffee +000fde0 ddbb ffee ddbb ffee ddbb ffee ddbb ffee +000fdf0 ddbb ffee ddbb ffee ffff ffff c24b 0003 +000fe00 ffff ffff ffff ffff ffff ffff 0000 0000 +000fe10 0018 0000 0000 0000 0000 0000 fe58 2000 +000fe20 0000 0000 0000 00ff ddbb 00ff 0018 0000 +000fe30 929c 2000 0000 0000 0018 0000 0000 0000 +000fe40 92c4 2000 0458 2000 0000 0000 80e7 0003 +000fe50 0000 0000 8cd9 0003 ddbb ffee ddbb ffee +000fe60 00dc 2000 92c4 2000 0005 0000 929c 2000 +000fe70 007f 0000 feb0 2000 92c4 2000 feb8 2000 +000fe80 ddbb ffee 0005 0000 929c 2000 0000 0000 +000fe90 aca0 2000 0000 0000 0028 0000 418b 0005 +000fea0 02f4 2000 001f 0000 0000 0000 0013 0000 +000feb0 b5a8 2000 2199 0005 b5a8 2000 2201 0005 +000fec0 b5a8 2000 001e 0000 0000 0000 0013 0000 +000fed0 b5b0 2000 0fe0 0006 b5a8 2000 0000 0000 +000fee0 0013 0000 2319 0005 0013 0000 0000 0000 +000fef0 0000 0000 3b1c 2000 3b1c 2000 d0e3 0000 +000ff00 4b70 2000 54ac 2000 4b70 2000 ffff ffff +000ff10 0000 0000 1379 0003 6578 2000 0d75 0003 +000ff20 6578 2000 ffff ffff 0000 0000 1379 0003 +000ff30 000c 0000 cfeb 0002 39a1 2000 a824 2000 +000ff40 0015 0000 cfeb 0002 39a1 2000 a824 2000 +000ff50 39a1 2000 0015 0000 001b 0000 b4b9 0002 +000ff60 0000 0000 a9f4 2000 4b70 2000 0d75 0003 +000ff70 4b70 2000 ffff ffff 0000 0000 1379 0003 +000ff80 ed00 e000 a820 2000 1000 4001 7fc0 2000 +000ff90 7f64 2000 75a7 0001 a884 2000 7b04 2000 +000ffa0 a8c0 2000 0000 0000 0000 0000 0000 0000 +000ffb0 7fc0 2000 7f64 2000 8024 2000 a5a5 a5a5 +000ffc0 ed00 e000 3fd5 0001 0000 0000 72c0 2000 +000ffd0 0000 0000 72e4 2000 3f65 0001 7f64 2000 +000ffe0 0000 2001 0000 0000 ef30 e000 0010 0000 +000fff0 7fc0 2000 4217 0001 3f0a 0001 0000 6100 +``` + +#### Analysis +According to my experimentations, we don't use the stack that much, and 8192 bytes is probably way too big for InfiniTime! + +#### Links + - https://github.com/JF002/InfiniTime/issues/313#issuecomment-851035070 + +### Heap +The heap is declared in the [linker script](https://github.com/JF002/InfiniTime/blob/develop/nrf_common.ld#L136) and its current size is 8192 bytes. The heap is used for dynamic memory allocation(`malloc()`, `new`...). + +Heap monitoring is not easy, but it seems that we can use the following code to know the current usage of the heap: + +``` +auto m = mallinfo(); +NRF_LOG_INFO("heap : %d", m.uordblks); +``` + +#### Analysis +According to my experimentation, InfiniTime uses ~6000bytes of heap most of the time. Except when the Navigation app is launched, where the heap usage increases to... more than 9500 bytes (meaning that the heap overflows and could potentially corrupt the stack!!!). This is a bug that should be fixed in #362. + +To know exactly what's consuming heap memory, you can `wrap` functions like `malloc()` into your own functions. In this wrapper, you can add logging code or put breakpoints: + +- Add ` -Wl,-wrap,malloc` to the cmake variable `LINK_FLAGS` of the target you want to debug (pinetime-app, most probably) +- Add the following code in `main.cpp` + +``` +extern "C" { +void *__real_malloc (size_t); +void* __wrap_malloc(size_t size) { + return __real_malloc(size); +} +} +``` +Now, your function `__wrap_malloc()` will be called instead of `malloc()`. You can call the actual malloc from the stdlib by calling `__real_malloc()`. + +Using this technique, I was able to trace all malloc calls at boot (boot -> digital watchface): + +- system task = 3464 bytes (SystemTask could potentially be declared as a global variable to avoid heap allocation here) +- string music = 31 (maybe we should not use std::string when not needed, as it does heap allocation) +- ble_att_svr_start = 1720 +- ble gatts start = 40 + 88 +- ble ll task = 24 +- display app = 104 +- digital clock = 96 + 152 +- hr task = 304 + +#### Links + - https://github.com/JF002/InfiniTime/issues/313#issuecomment-851035625 + - https://www.embedded.com/mastering-stack-and-heap-for-system-reliability-part-1-calculating-stack-size/ + - https://www.embedded.com/mastering-stack-and-heap-for-system-reliability-part-2-properly-allocating-stacks/ + - https://www.embedded.com/mastering-stack-and-heap-for-system-reliability-part-3-avoiding-heap-errors/ + +## LVGL +I did a deep analysis of the usage of the buffer dedicated for lvgl (managed by lv_mem). +This buffer is used by lvgl to allocated memory for drivers (display/touch), screens, themes, and all widgets created by the apps. + +The usage of this buffer can be monitored using this code : + +``` +lv_mem_monitor_t mon; +lv_mem_monitor(&mon); +NRF_LOG_INFO("\t Free %d / %d -- max %d", mon.free_size, mon.total_size, mon.max_used); +``` + +The most interesting metric is `mon.max_used` which specifies the maximum number of bytes that were used from this buffer since the initialization of lvgl. +According to my measurements, initializing the theme, display/touch driver and screens cost **4752** bytes! +Then, initializing the digital clock face costs **1541 bytes**. +For example a simple lv_label needs **~140 bytes** of memory. + +I tried to monitor this max value while going through all the apps of InfiniTime 1.1 : the max value I've seen is **5660 bytes**. It means that we could probably **reduce the size of the buffer from 14KB to 6 - 10 KB** (we have to take the fragmentation of the memory into account). +### Links + - https://github.com/JF002/InfiniTime/issues/313#issuecomment-850890064 + + ## FreeRTOS heap and task stack FreeRTOS statically allocate its own heap buffer in a global variable named `ucHeap`. This is an array of *uint8_t*. Its size is specified by the definition `configTOTAL_HEAP_SIZE` in *FreeRTOSConfig.h* -FreeRTOS uses this buffer to allocate memory for tasks stack and all the RTOS object created during runtime (timers, mutexes,...). +FreeRTOS uses this buffer to allocate memory for tasks stack and all the RTOS object created during runtime (timers, mutexes...). The function `xPortGetFreeHeapSize()` returns the amount of memory available in this *ucHeap* buffer. If this value reaches 0, FreeRTOS runs out of memory. @@ -20,59 +287,3 @@ for (int i = 0; i < nb; i++) { ``` -## Global heap -Heap is used for **dynamic memory allocation (malloc() / new)**. NRF SDK defaults the heap size to 8KB. The size of the heap can be specified by defining `__HEAP_SIZE=8192` in *src/CMakeLists.txt*: - -``` -add_definitions(-D__HEAP_SIZE=8192) -``` - -You can trace the dynamic memory allocation by using the flag `--wrap` of the linker. When this flag is enabled, the linker will replace the calls to a specific function by a call to __wrap_the_function(). For example, if you specify `-Wl,-wrap,malloc` in the linker flags, the linker will replace all calls to `void* malloc(size_t)` by calls to `void* __wrap_malloc(size_t)`. This is a function you'll have to define in your code. In this function, you can call `__real_malloc()` to call the actual `malloc()' function. - -This technic allows you to wrap all calls to malloc() with you own code. - -In *src/CMakeLists.txt*: - -``` -set_target_properties(${EXECUTABLE_NAME} PROPERTIES - ... - LINK_FLAGS "-Wl,-wrap,malloc ..." - ... - ) - -``` - -In *main.cpp*: - -``` -uint32_t totalMalloc = 0; -extern "C" { - extern void* __real_malloc(size_t s); - void *__wrap_malloc(size_t s) { - totalMalloc += s; - return __real_malloc(s); - } -} -``` -This function sums all the memory that is allocated during the runtime. You can monitor or log this value. You can also place breakpoints in this function to determine where the dynamic memory allocation occurs in your code. - - -# Global stack -The stack is used to allocate memory used by functions : **parameters and local variables**. NRF SDK defaults the heap size to 8KB. The size of the heap can be specified by defining `__STACK_SIZE=8192` in *src/CMakeLists.txt*: - -``` -add_definitions(-D__STACK_SIZE=8192) -``` - -*NOTE*: FreeRTOS uses its own stack buffer. Thus, the global stack is only used for main() and IRQ handlers. It should be possible to reduce its size to a much lower value. - -**NOTE**: [?] How to track the global stack usage? - -#LittleVGL buffer -*TODO* - -#NimBLE buffers -*TODO* - -#Tools - - https://github.com/eliotstock/memory : display the memory usage (FLASH/RAM) using the .map file from GCC. diff --git a/doc/memoryAnalysis/linkermapviz.png b/doc/memoryAnalysis/linkermapviz.png new file mode 100644 index 0000000000000000000000000000000000000000..8edfc8f9c9b6d4cebbb26319d0c58f527ac2d617 GIT binary patch literal 55661 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 D9n(Ev literal 0 HcmV?d00001 diff --git a/doc/memoryAnalysis/mapfile.png b/doc/memoryAnalysis/mapfile.png new file mode 100644 index 0000000000000000000000000000000000000000..0badd1045c873e976609ad6279500c9c80f4c1bb GIT binary patch literal 111302 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 z

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 !L-V=8p+~nY-wO|J$yQ5ahLp?Ps93wHg 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 R&RzaT;k7ET_?7XOe*x&=>bC#@ literal 0 HcmV?d00001 diff --git a/doc/memoryAnalysis/puncover.png b/doc/memoryAnalysis/puncover.png new file mode 100644 index 0000000000000000000000000000000000000000..b32e1784de6eb500c7700679211c7e7511598b1f GIT binary patch literal 217193 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 z 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 stVRkS0(-U%<8jNkq;avo&YkA;GOvx8q< Date: Sat, 12 Jun 2021 02:05:57 -0700 Subject: [PATCH 29/94] Add note about getting GadgetBridge from F-Droid (#358) * Add note about getting GadgetBridge from F-Droid Hopefully this is useful and will save folks some frustration * Add note that GadgetBridge should be downloaded via F-Droid There's an "unofficial" version on the Play Store that is outdated and doesn't have PineTime support * Fix typo * Add starting version, reword a bit Initial support version is a little fuzzy, 0.47 states it's "not yet usable" but changelog doesn't specify when we've crossed the "usable" threshold. --- README.md | 2 +- doc/companionapps/Gadgetbridge.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 396d7462..755f1905 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ As of now, here is the list of achievements of this project: * Firmware validation * System information - Supported by 3 companion apps (development is in progress): - * [Gadgetbridge](https://codeberg.org/Freeyourgadget/Gadgetbridge/) (on Android) + * [Gadgetbridge](https://codeberg.org/Freeyourgadget/Gadgetbridge/) (on Android via F-Droid) * [Amazfish](https://openrepos.net/content/piggz/amazfish) (on SailfishOS and Linux) * [Siglo](https://github.com/alexr4535/siglo) (on Linux) * **[Experimental]** [WebBLEWatch](https://hubmartin.github.io/WebBLEWatch/) Synchronize time directly from your web browser. [video](https://youtu.be/IakiuhVDdrY) diff --git a/doc/companionapps/Gadgetbridge.md b/doc/companionapps/Gadgetbridge.md index 1a25069c..974e2828 100644 --- a/doc/companionapps/Gadgetbridge.md +++ b/doc/companionapps/Gadgetbridge.md @@ -1,7 +1,7 @@ # Integration with Gadgetbridge [Gadgetbridge](https://gadgetbridge.org/) is an Android application that supports many smartwatches and fitness trackers. -The integration of InfiniTime (previously Pinetime-JF) is now merged into the master branch (https://codeberg.org/Freeyourgadget/Gadgetbridge/). +The integration of InfiniTime (previously Pinetime-JF) is now merged into the master branch (https://codeberg.org/Freeyourgadget/Gadgetbridge/) and initial support is available [starting with version 0.47](https://codeberg.org/Freeyourgadget/Gadgetbridge/src/branch/master/CHANGELOG.md). Note that the official version is only available on F-Droid (as of May 2021), and the unofficial fork available on the Play Store is outdated and does not support Infinitime. ## Features The following features are implemented: From 2c7ad783fc0d37c534050321a13759a28f9b83f0 Mon Sep 17 00:00:00 2001 From: Itai Nelken <70802936+Itai-Nelken@users.noreply.github.com> Date: Sat, 12 Jun 2021 12:06:46 +0300 Subject: [PATCH 30/94] Improvements to /doc/filesInReleaseNotes.md (#357) * Update filesInReleaseNotes.md --- doc/filesInReleaseNotes.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/filesInReleaseNotes.md b/doc/filesInReleaseNotes.md index f48a0c10..78c20b51 100644 --- a/doc/filesInReleaseNotes.md +++ b/doc/filesInReleaseNotes.md @@ -1,16 +1,16 @@ # Using the releases -For each new *stable* version of Pinetime, a [release note](https://github.com/JF002/InfiniTime/releases) is created. It contains a description of the main changes in the release and some files you can use to flash the firmware in your Pinetime. +For each new *stable* version of IniniTime, a [release note](https://github.com/JF002/InfiniTime/releases) is created. It contains a description of the main changes in the release and some files you can use to flash the firmware to your Pinetime. This page describes the files from the release notes and how to use them. -**NOTE :** the files included in different could be different. This page describes the release note of [version 0.7.1](https://github.com/JF002/InfiniTime/releases/tag/0.7.1), which is the version that'll probably be pre-programmed at the factory for the next batch of Pinetime devkits. +**NOTE :** the files included in different Releases could be different. This page describes the release notes of [version 0.7.1](https://github.com/JF002/InfiniTime/releases/tag/0.7.1), which is the version that is pre-programmed for the last batches of pinetimes but will be replaced with [1.0.0](https://github.com/jF002/infiniTime/releases/tag/1.0.0) around june 2021. -## Files included in the release note +## Files included in the release notes ### Standalone firmware -This firmware is standalone, meaning that it does not need a bootloader to actually run. It is intended to be flash at offset 0, meaning it will erase any bootloader that might be present in memory. +This firmware is standalone, meaning that it does not need a bootloader to actually run. It is intended to be flashed at offset 0, meaning it will erase any bootloader that might be present in memory. - - **pinetime-app.out** : Output file of GCC containing debug symbols, useful is you want to debug the firmware using GDB. + - **pinetime-app.out** : Output file of GCC containing debug symbols, useful if you want to debug the firmware using GDB. - **pinetime-app.hex** : Firmware in Intel HEX file format. Easier to use because it contains the offset in memory where it must be flashed, you don't need to specify it. - **pintime-app.bin** : Firmware in binary format. When programming it, you have to specify the offset (0x00) in memory where it must be flashed. - **pinetime-app.map** : Map file containing all the symbols, addresses in memory,... @@ -38,7 +38,7 @@ This firmware is a small utility firmware that writes the boot graphic in the ex ### Firmware with bootloader This firmware is intended to be used with our [MCUBoot-based bootloader](../bootloader/README.md). - - **pinetime-mcuboot-app-image.hex** : Firmware wrapped into an MCUBoot image. This is **the** file that must be flashed **@ 0x8000** into flash memory. If the [bootloader](../bootloader/README.md) has been successfully programmed, it should run this firmware after the next reset. + - **pinetime-mcuboot-app-image.hex**: Firmware wrapped into an MCUBoot image. This is **the** file that must be flashed at **0x8000** into the flash memory. If the [bootloader](../bootloader/README.md) has been successfully programmed, it should run this firmware after the next reset. The following files are not directly usable by the bootloader: From 4d1626e3b6133e1b07c67749ac5037905e72270b Mon Sep 17 00:00:00 2001 From: Jonathan Vander Mey Date: Sat, 12 Jun 2021 05:07:23 -0400 Subject: [PATCH 31/94] Fix fallthrough on case statement (#403) --- src/drivers/SpiMaster.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/drivers/SpiMaster.cpp b/src/drivers/SpiMaster.cpp index 0d5bb83c..c45e1294 100644 --- a/src/drivers/SpiMaster.cpp +++ b/src/drivers/SpiMaster.cpp @@ -56,6 +56,7 @@ bool SpiMaster::Init() { break; case BitOrder::Lsb_Msb: regConfig = 1; + break; default: return false; } From bf906bd573b37e0bb592221dae6b5f156836a6b6 Mon Sep 17 00:00:00 2001 From: Riku Isokoski Date: Sat, 12 Jun 2021 12:12:39 +0300 Subject: [PATCH 33/94] Fix scrollbar (#382) --- src/displayapp/screens/SystemInfo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index a7387dac..a0b626e9 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -161,7 +161,7 @@ std::unique_ptr SystemInfo::CreateScreen2() { brightnessController.ToString(), resetReason); lv_obj_align(label, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); - return std::make_unique(1, 4, app, label); + return std::make_unique(1, 5, app, label); } std::unique_ptr SystemInfo::CreateScreen3() { From 44d7c6d00f3ec919c6f70d32d084c26539aa58aa Mon Sep 17 00:00:00 2001 From: Roxxor91 Date: Sat, 12 Jun 2021 11:15:39 +0200 Subject: [PATCH 34/94] Update Amazfish.md (#386) Add Navigation feature. --- doc/companionapps/Amazfish.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/companionapps/Amazfish.md b/doc/companionapps/Amazfish.md index eb9daa04..90ad20c2 100644 --- a/doc/companionapps/Amazfish.md +++ b/doc/companionapps/Amazfish.md @@ -8,8 +8,9 @@ The following features are implemented: - Time synchronization - Notifications - Music control + - Navigation with Puremaps ## Demo [This video](https://seafile.codingfield.com/f/21c5d023452740279e36/) shows how to connect to the Pinetime and control the playback of the music on the phone. Amazfish and Sailfish OS are running on the [Pinephone](https://www.pine64.org/pinephone/), another awesome device from Pine64. - \ No newline at end of file + From d4f4ed014cecb600a5fb8541cff1f01bf2c46d54 Mon Sep 17 00:00:00 2001 From: Pekka <85409219+pekkakr@users.noreply.github.com> Date: Sat, 12 Jun 2021 12:16:54 +0300 Subject: [PATCH 35/94] Update buildWithDocker.md (#416) Added a link to instructions for cloning the repo. The purpose was mainly to remind of the git submodule update. --- doc/buildWithDocker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/buildWithDocker.md b/doc/buildWithDocker.md index 7a2f3727..17fb53d9 100644 --- a/doc/buildWithDocker.md +++ b/doc/buildWithDocker.md @@ -13,7 +13,7 @@ Based on Ubuntu 18.04 with the following build dependencies: 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. -This example will build the firmware, generate the MCUBoot image and generate the DFU file. 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 From 314a8ebba070bd935c795cea2955d494f002797f Mon Sep 17 00:00:00 2001 From: Avamander Date: Sat, 12 Jun 2021 12:18:19 +0300 Subject: [PATCH 36/94] Changed the namespace of SystemInfo::sortById to avoid a name conflict (#360) --- src/displayapp/DisplayApp.cpp | 2 -- src/displayapp/screens/SystemInfo.cpp | 2 +- src/displayapp/screens/SystemInfo.h | 3 +++ 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 05f171be..01e26e22 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -331,8 +331,6 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) std::make_unique(this, dateTimeController, batteryController, brightnessController, bleController, watchdog); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; - // - case Apps::FlashLight: currentScreen = std::make_unique(this, *systemTask, brightnessController); ReturnApp(Apps::Clock, FullRefreshDirections::Down, TouchEvents::None); diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index a0b626e9..9ff28288 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -198,7 +198,7 @@ std::unique_ptr SystemInfo::CreateScreen3() { return std::make_unique(2, 5, app, label); } -bool sortById(const TaskStatus_t& lhs, const TaskStatus_t& rhs) { +bool SystemInfo::sortById(const TaskStatus_t& lhs, const TaskStatus_t& rhs) { return lhs.xTaskNumber < rhs.xTaskNumber; } diff --git a/src/displayapp/screens/SystemInfo.h b/src/displayapp/screens/SystemInfo.h index c0c65554..c61a07a2 100644 --- a/src/displayapp/screens/SystemInfo.h +++ b/src/displayapp/screens/SystemInfo.h @@ -43,6 +43,9 @@ namespace Pinetime { Pinetime::Drivers::WatchdogView& watchdog; ScreenList<5> screens; + + static bool sortById(const TaskStatus_t& lhs, const TaskStatus_t& rhs); + std::unique_ptr CreateScreen1(); std::unique_ptr CreateScreen2(); std::unique_ptr CreateScreen3(); From d7962617e47c221b6274af53b9488e5280c8d2d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sat, 12 Jun 2021 14:21:29 +0200 Subject: [PATCH 37/94] Clock : initialize the actual clockface in initialization list instead of in the core of the ctro(). --- src/displayapp/screens/Clock.cpp | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/src/displayapp/screens/Clock.cpp b/src/displayapp/screens/Clock.cpp index 9962a9f4..05e47a39 100644 --- a/src/displayapp/screens/Clock.cpp +++ b/src/displayapp/screens/Clock.cpp @@ -32,25 +32,18 @@ Clock::Clock(DisplayApp* app, notificatioManager {notificatioManager}, settingsController {settingsController}, heartRateController {heartRateController}, - motionController {motionController} { - - switch (settingsController.GetClockFace()) { - case 0: - screen = WatchFaceDigitalScreen(); - break; - case 1: - screen = WatchFaceAnalogScreen(); - break; - /* - // Examples for more watch faces - case 2: - screen = WatchFaceMinimalScreen(); - break; - case 3: - screen = WatchFaceCustomScreen(); - break; - */ - } + motionController {motionController}, + screen {[this, &settingsController]() { + switch (settingsController.GetClockFace()) { + case 0: + return WatchFaceDigitalScreen(); + break; + case 1: + return WatchFaceAnalogScreen(); + break; + } + return WatchFaceDigitalScreen(); + }()} { settingsController.SetAppMenu(0); } From c575754b4283ab1e8a2b1320a97992db6712ac58 Mon Sep 17 00:00:00 2001 From: Bryton Hall Date: Sat, 12 Jun 2021 09:06:58 -0400 Subject: [PATCH 38/94] add basic metronome app (#409) * add basic metronome app * add bpb, tap to bpm, update widgets * use event pressed for bpm tap * move case statement break to the right place * narrow bpm selection range, override touch events * fix arc knob style * re-enable sleeping in destructor --- src/CMakeLists.txt | 2 + src/displayapp/Apps.h | 1 + src/displayapp/DisplayApp.cpp | 8 +- src/displayapp/lv_pinetime_theme.c | 13 ++ src/displayapp/screens/ApplicationList.cpp | 2 +- src/displayapp/screens/Metronome.cpp | 169 +++++++++++++++++++++ src/displayapp/screens/Metronome.h | 34 +++++ 7 files changed, 226 insertions(+), 3 deletions(-) create mode 100644 src/displayapp/screens/Metronome.cpp create mode 100644 src/displayapp/screens/Metronome.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c72f7c9c..71909d7d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -396,6 +396,7 @@ list(APPEND SOURCE_FILES displayapp/screens/FirmwareUpdate.cpp displayapp/screens/Music.cpp displayapp/screens/Navigation.cpp + displayapp/screens/Metronome.cpp displayapp/screens/Motion.cpp displayapp/screens/FirmwareValidation.cpp displayapp/screens/ApplicationList.cpp @@ -592,6 +593,7 @@ set(INCLUDE_FILES displayapp/Apps.h displayapp/screens/Notifications.h displayapp/screens/HeartRate.h + displayapp/screens/Metronome.h displayapp/screens/Motion.h displayapp/screens/Timer.h drivers/St7789.h diff --git a/src/displayapp/Apps.h b/src/displayapp/Apps.h index 2df517f8..684e3a46 100644 --- a/src/displayapp/Apps.h +++ b/src/displayapp/Apps.h @@ -21,6 +21,7 @@ namespace Pinetime { HeartRate, Navigation, StopWatch, + Metronome, Motion, Steps, QuickSettings, diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index 01e26e22..cd25c979 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -18,6 +18,7 @@ #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" #include "displayapp/screens/Notifications.h" @@ -318,7 +319,7 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) currentScreen = std::make_unique(this, settingsController); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; - case Apps::SettingSteps: + case Apps::SettingSteps: currentScreen = std::make_unique(this, settingsController); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; @@ -356,10 +357,13 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) case Apps::HeartRate: currentScreen = std::make_unique(this, heartRateController, *systemTask); break; + case Apps::Metronome: + currentScreen = std::make_unique(this, motorController, systemTask); + break; case Apps::Motion: currentScreen = std::make_unique(this, motionController); break; - case Apps::Steps: + case Apps::Steps: currentScreen = std::make_unique(this, motionController, settingsController); break; } diff --git a/src/displayapp/lv_pinetime_theme.c b/src/displayapp/lv_pinetime_theme.c index b003a411..1b8b1980 100644 --- a/src/displayapp/lv_pinetime_theme.c +++ b/src/displayapp/lv_pinetime_theme.c @@ -48,6 +48,7 @@ static lv_style_t style_sw_bg; static lv_style_t style_sw_indic; static lv_style_t style_sw_knob; static lv_style_t style_arc_bg; +static lv_style_t style_arc_knob; static lv_style_t style_arc_indic; static lv_style_t style_table_cell; static lv_style_t style_pad_small; @@ -191,6 +192,7 @@ static void basic_init(void) { 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); style_init_reset(&style_ddlist_selected); lv_style_set_bg_opa(&style_ddlist_selected, LV_STATE_DEFAULT, LV_OPA_COVER); @@ -239,6 +241,13 @@ static void basic_init(void) { lv_style_set_line_color(&style_arc_bg, LV_STATE_DEFAULT, LV_PINETIME_GRAY); 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)); + + 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_pad_all(&style_arc_knob, LV_STATE_DEFAULT, LV_DPX(5)); style_init_reset(&style_table_cell); lv_style_set_border_color(&style_table_cell, LV_STATE_DEFAULT, LV_PINETIME_GRAY); @@ -447,6 +456,10 @@ static void theme_apply(lv_obj_t* obj, lv_theme_style_t name) { lv_obj_clean_style_list(obj, LV_ARC_PART_INDIC); list = lv_obj_get_style_list(obj, LV_ARC_PART_INDIC); _lv_style_list_add_style(list, &style_arc_indic); + + lv_obj_clean_style_list(obj, LV_ARC_PART_KNOB); + list = lv_obj_get_style_list(obj, LV_ARC_PART_KNOB); + _lv_style_list_add_style(list, &style_arc_knob); break; case LV_THEME_SWITCH: diff --git a/src/displayapp/screens/ApplicationList.cpp b/src/displayapp/screens/ApplicationList.cpp index d599f5cc..d434c177 100644 --- a/src/displayapp/screens/ApplicationList.cpp +++ b/src/displayapp/screens/ApplicationList.cpp @@ -63,7 +63,7 @@ std::unique_ptr ApplicationList::CreateScreen2() { {Symbols::paddle, Apps::Paddle}, {"2", Apps::Twos}, {"M", Apps::Motion}, - {"", Apps::None}, + {"b", Apps::Metronome}, {"", Apps::None}, }}; diff --git a/src/displayapp/screens/Metronome.cpp b/src/displayapp/screens/Metronome.cpp new file mode 100644 index 00000000..c536e301 --- /dev/null +++ b/src/displayapp/screens/Metronome.cpp @@ -0,0 +1,169 @@ +#include "Metronome.h" + +#include "Screen.h" +#include "Symbols.h" +#include "lvgl/lvgl.h" +#include "FreeRTOSConfig.h" +#include "task.h" + +#include +#include + +using namespace Pinetime::Applications::Screens; + +namespace { + float 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 static_cast(delta) / static_cast(configTICK_RATE_HZ); + } + + static void eventHandler(lv_obj_t* obj, lv_event_t event) { + Metronome* screen = static_cast(obj->user_data); + screen->OnEvent(obj, event); + } + + lv_obj_t* createLabel(const char* name, lv_obj_t* reference, lv_align_t align, lv_font_t* font, uint8_t x = 0, uint8_t y = 0) { + 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_label_set_text(label, name); + lv_obj_align(label, reference, align, x, y); + + return label; + } +} + +Metronome::Metronome(DisplayApp* app, Controllers::MotorController& motorController, System::SystemTask& systemTask) + : Screen(app), running {true}, currentState {States::Stopped}, startTime {}, motorController {motorController}, systemTask {systemTask} { + + bpmArc = lv_arc_create(lv_scr_act(), nullptr); + bpmArc->user_data = this; + lv_obj_set_event_cb(bpmArc, eventHandler); + lv_arc_set_bg_angles(bpmArc, 0, 270); + lv_arc_set_rotation(bpmArc, 135); + lv_arc_set_range(bpmArc, 40, 220); + lv_arc_set_value(bpmArc, bpm); + lv_obj_set_size(bpmArc, 210, 210); + lv_arc_set_adjustable(bpmArc, true); + lv_obj_align(bpmArc, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 0, 7); + + bpmValue = createLabel(std::to_string(lv_arc_get_value(bpmArc)).c_str(), bpmArc, LV_ALIGN_IN_TOP_MID, &jetbrains_mono_76, 0, 55); + bpmLegend = createLabel("bpm", bpmValue, LV_ALIGN_OUT_BOTTOM_MID, &jetbrains_mono_bold_20, 0, 0); + + bpmTap = lv_btn_create(lv_scr_act(), nullptr); + bpmTap->user_data = this; + lv_obj_set_event_cb(bpmTap, eventHandler); + lv_obj_set_style_local_bg_opa(bpmTap, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_TRANSP); + lv_obj_set_height(bpmTap, 80); + lv_obj_align(bpmTap, bpmValue, LV_ALIGN_IN_TOP_MID, 0, 0); + + 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_align(bpbDropdown, lv_scr_act(), LV_ALIGN_IN_BOTTOM_LEFT, 15, -4); + lv_dropdown_set_options(bpbDropdown, "1\n2\n3\n4\n5\n6\n7\n8\n9"); + lv_dropdown_set_selected(bpbDropdown, bpb - 1); + bpbLegend = lv_label_create(bpbDropdown, nullptr); + lv_label_set_text(bpbLegend, "bpb"); + lv_obj_align(bpbLegend, bpbDropdown, LV_ALIGN_IN_RIGHT_MID, -15, 0); + + playPause = lv_btn_create(lv_scr_act(), nullptr); + playPause->user_data = this; + lv_obj_set_event_cb(playPause, eventHandler); + lv_obj_align(playPause, lv_scr_act(), LV_ALIGN_IN_BOTTOM_RIGHT, -15, -10); + lv_obj_set_height(playPause, 39); + playPauseLabel = lv_label_create(playPause, nullptr); + lv_label_set_text(playPauseLabel, Symbols::play); + + app->SetTouchMode(DisplayApp::TouchModes::Polling); +} + +Metronome::~Metronome() { + app->SetTouchMode(DisplayApp::TouchModes::Gestures); + systemTask.PushMessage(Pinetime::System::SystemTask::Messages::EnableSleeping); + lv_obj_clean(lv_scr_act()); +} + +bool Metronome::OnTouchEvent(Pinetime::Applications::TouchEvents event) { + return true; +} + +bool Metronome::Refresh() { + switch (currentState) { + case States::Stopped: { + break; + } + case States::Running: { + if (calculateDelta(startTime, xTaskGetTickCount()) >= (60.0 / bpm)) { + counter--; + startTime -= 60.0 / bpm; + startTime = xTaskGetTickCount(); + if (counter == 0) { + counter = bpb; + motorController.SetDuration(90); + } else { + motorController.SetDuration(30); + } + } + break; + } + } + return running; +} + +void Metronome::OnEvent(lv_obj_t* obj, lv_event_t event) { + switch (event) { + case LV_EVENT_VALUE_CHANGED: { + if (obj == bpmArc) { + bpm = lv_arc_get_value(bpmArc); + lv_label_set_text_fmt(bpmValue, "%03d", bpm); + } else if (obj == bpbDropdown) { + bpb = lv_dropdown_get_selected(obj) + 1; + } + break; + } + case LV_EVENT_PRESSED: { + if (obj == bpmTap) { + float timeDelta = calculateDelta(tappedTime, xTaskGetTickCount()); + if (tappedTime == 0 || timeDelta > 3) { + tappedTime = xTaskGetTickCount(); + } else { + bpm = ceil(60.0 / timeDelta); + lv_arc_set_value(bpmArc, bpm); + lv_label_set_text_fmt(bpmValue, "%03d", bpm); + tappedTime = xTaskGetTickCount(); + } + } + break; + } + case LV_EVENT_CLICKED: { + if (obj == playPause) { + currentState = (currentState == States::Stopped ? States::Running : States::Stopped); + switch (currentState) { + case States::Stopped: { + lv_label_set_text(playPauseLabel, Symbols::play); + systemTask.PushMessage(Pinetime::System::SystemTask::Messages::EnableSleeping); + break; + } + case States::Running: { + lv_label_set_text(playPauseLabel, Symbols::pause); + systemTask.PushMessage(Pinetime::System::SystemTask::Messages::DisableSleeping); + startTime = xTaskGetTickCount(); + counter = 1; + break; + } + } + } + break; + } + } +} diff --git a/src/displayapp/screens/Metronome.h b/src/displayapp/screens/Metronome.h new file mode 100644 index 00000000..3a1f1084 --- /dev/null +++ b/src/displayapp/screens/Metronome.h @@ -0,0 +1,34 @@ +#pragma once + +#include "systemtask/SystemTask.h" +#include "components/motor/MotorController.h" + +#include + +namespace Pinetime::Applications::Screens { + + class Metronome : public Screen { + public: + Metronome(DisplayApp* app, Controllers::MotorController& motorController, System::SystemTask& systemTask); + ~Metronome() override; + bool Refresh() override; + bool OnTouchEvent(TouchEvents event) override; + void OnEvent(lv_obj_t* obj, lv_event_t event); + enum class States { Running, Stopped }; + + private: + bool running; + States currentState; + TickType_t startTime; + TickType_t tappedTime = 0; + Controllers::MotorController& motorController; + System::SystemTask& systemTask; + uint16_t bpm = 120; + uint8_t bpb = 4; + uint8_t counter = 1; + + lv_obj_t *bpmArc, *bpmTap, *bpmValue, *bpmLegend; + lv_obj_t *bpbDropdown, *bpbLegend; + lv_obj_t *playPause, *playPauseLabel; + }; +} From d6fcbe960e595e53e3f24cbaae0cbb0505ad6dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sat, 12 Jun 2021 15:14:14 +0200 Subject: [PATCH 39/94] Fix build issues since Metronome app has been merged. --- src/displayapp/DisplayApp.cpp | 2 +- src/displayapp/screens/Metronome.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index cd25c979..ab73969d 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -358,7 +358,7 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) currentScreen = std::make_unique(this, heartRateController, *systemTask); break; case Apps::Metronome: - currentScreen = std::make_unique(this, motorController, systemTask); + currentScreen = std::make_unique(this, motorController, *systemTask); break; case Apps::Motion: currentScreen = std::make_unique(this, motionController); diff --git a/src/displayapp/screens/Metronome.cpp b/src/displayapp/screens/Metronome.cpp index c536e301..7bfbccb7 100644 --- a/src/displayapp/screens/Metronome.cpp +++ b/src/displayapp/screens/Metronome.cpp @@ -89,7 +89,7 @@ Metronome::Metronome(DisplayApp* app, Controllers::MotorController& motorControl Metronome::~Metronome() { app->SetTouchMode(DisplayApp::TouchModes::Gestures); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::EnableSleeping); + systemTask.PushMessage(System::Messages::EnableSleeping); lv_obj_clean(lv_scr_act()); } @@ -151,12 +151,12 @@ void Metronome::OnEvent(lv_obj_t* obj, lv_event_t event) { switch (currentState) { case States::Stopped: { lv_label_set_text(playPauseLabel, Symbols::play); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::EnableSleeping); + systemTask.PushMessage(System::Messages::EnableSleeping); break; } case States::Running: { lv_label_set_text(playPauseLabel, Symbols::pause); - systemTask.PushMessage(Pinetime::System::SystemTask::Messages::DisableSleeping); + systemTask.PushMessage(System::Messages::DisableSleeping); startTime = xTaskGetTickCount(); counter = 1; break; From dbc2d234058226c42b79e35cb8f6576ac3bf709f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sat, 12 Jun 2021 18:00:42 +0200 Subject: [PATCH 40/94] Add Init() in DummyuLittleVgl to fix recovery firmware --- src/displayapp/DummyLittleVgl.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/displayapp/DummyLittleVgl.h b/src/displayapp/DummyLittleVgl.h index 96cf153f..016165b8 100644 --- a/src/displayapp/DummyLittleVgl.h +++ b/src/displayapp/DummyLittleVgl.h @@ -19,6 +19,10 @@ namespace Pinetime { LittleVgl(LittleVgl&&) = delete; LittleVgl& operator=(LittleVgl&&) = delete; + void Init() { + + } + void FlushDisplay(const lv_area_t* area, lv_color_t* color_p) { } bool GetTouchPadInfo(lv_indev_data_t* ptr) { From 006771699fc5c1a0906920fd16998ec5295227ac Mon Sep 17 00:00:00 2001 From: Jonathan Vander Mey Date: Mon, 24 May 2021 18:16:30 -0400 Subject: [PATCH 41/94] Remove infinitime-nb.c from source list Was causing compiler warning for unused constant variable when being compiled. This feel is directly included where it's needed so it doesn't need to be separately compiled anyways. --- src/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 71909d7d..7721d6b8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -532,7 +532,6 @@ list(APPEND RECOVERY_SOURCE_FILES systemtask/SystemTask.cpp drivers/TwiMaster.cpp components/gfx/Gfx.cpp - displayapp/icons/infinitime/infinitime-nb.c components/rle/RleDecoder.cpp components/heartrate/HeartRateController.cpp heartratetask/HeartRateTask.cpp @@ -559,7 +558,6 @@ list(APPEND RECOVERYLOADER_SOURCE_FILES drivers/St7789.cpp components/brightness/BrightnessController.cpp - displayapp/icons/infinitime/infinitime-nb.c recoveryLoader.cpp ) From e90e8c7426f9a44e696b208a5b393a60476a3d43 Mon Sep 17 00:00:00 2001 From: Jonathan Vander Mey Date: Mon, 24 May 2021 18:17:56 -0400 Subject: [PATCH 42/94] Fix signed/unsigned comparison warning Changed type of encodedBufferIndex to size_t to eliminate warning. It is fine as a size_t as its only ever compared to another size_t and used as an array index. --- src/components/rle/RleDecoder.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/rle/RleDecoder.h b/src/components/rle/RleDecoder.h index 0f607fb8..31c1ed10 100644 --- a/src/components/rle/RleDecoder.h +++ b/src/components/rle/RleDecoder.h @@ -21,7 +21,7 @@ namespace Pinetime { const uint8_t* buffer; size_t size; - int encodedBufferIndex = 0; + size_t encodedBufferIndex = 0; int y = 0; uint16_t bp = 0; uint16_t foregroundColor = 0xffff; From c6dca25b9fa30af989baf748f6c32b38eaa95bac Mon Sep 17 00:00:00 2001 From: JF002 Date: Sat, 19 Jun 2021 20:27:59 +0200 Subject: [PATCH 43/94] Add support for BMA425 acceleration sensor. (#440) * Add support for BMA425 acceleration sensor. --- src/components/motion/MotionController.cpp | 7 + src/components/motion/MotionController.h | 14 + src/displayapp/DisplayApp.cpp | 2 +- src/displayapp/screens/SystemInfo.cpp | 27 +- src/displayapp/screens/SystemInfo.h | 4 +- src/drivers/Bma421.cpp | 9 + src/drivers/Bma421.h | 7 + src/drivers/Bma421_C/bma423.c | 560 ++++++++++++++++++++- src/drivers/Bma421_C/bma423.h | 1 + src/systemtask/SystemTask.cpp | 1 + 10 files changed, 603 insertions(+), 29 deletions(-) diff --git a/src/components/motion/MotionController.cpp b/src/components/motion/MotionController.cpp index e9ee314b..b0dbada4 100644 --- a/src/components/motion/MotionController.cpp +++ b/src/components/motion/MotionController.cpp @@ -34,3 +34,10 @@ bool MotionController::ShouldWakeUp(bool isSleeping) { void MotionController::IsSensorOk(bool isOk) { isSensorOk = isOk; } +void MotionController::Init(Pinetime::Drivers::Bma421::DeviceTypes types) { + switch(types){ + case Drivers::Bma421::DeviceTypes::BMA421: this->deviceType = DeviceTypes::BMA421; break; + case Drivers::Bma421::DeviceTypes::BMA425: this->deviceType = DeviceTypes::BMA425; break; + default: this->deviceType = DeviceTypes::Unknown; break; + } +} diff --git a/src/components/motion/MotionController.h b/src/components/motion/MotionController.h index 3a238262..ff715093 100644 --- a/src/components/motion/MotionController.h +++ b/src/components/motion/MotionController.h @@ -1,11 +1,18 @@ #pragma once #include +#include namespace Pinetime { namespace Controllers { class MotionController { public: + enum class DeviceTypes{ + Unknown, + BMA421, + BMA425, + }; + void Update(int16_t x, int16_t y, int16_t z, uint32_t nbSteps); int16_t X() const { @@ -27,6 +34,12 @@ namespace Pinetime { return isSensorOk; } + DeviceTypes DeviceType() const { + return deviceType; + } + + void Init(Pinetime::Drivers::Bma421::DeviceTypes types); + private: uint32_t nbSteps; int16_t x; @@ -34,6 +47,7 @@ namespace Pinetime { int16_t z; int16_t lastYForWakeUp = 0; bool isSensorOk = false; + DeviceTypes deviceType = DeviceTypes::Unknown; }; } } \ No newline at end of file diff --git a/src/displayapp/DisplayApp.cpp b/src/displayapp/DisplayApp.cpp index ab73969d..de93428c 100644 --- a/src/displayapp/DisplayApp.cpp +++ b/src/displayapp/DisplayApp.cpp @@ -329,7 +329,7 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction) break; case Apps::SysInfo: currentScreen = - std::make_unique(this, dateTimeController, batteryController, brightnessController, bleController, watchdog); + std::make_unique(this, dateTimeController, batteryController, brightnessController, bleController, watchdog, motionController); ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown); break; case Apps::FlashLight: diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index 9ff28288..0b16d633 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -7,22 +7,37 @@ #include "components/ble/BleController.h" #include "components/brightness/BrightnessController.h" #include "components/datetime/DateTimeController.h" +#include "components/motion/MotionController.h" #include "drivers/Watchdog.h" using namespace Pinetime::Applications::Screens; +namespace { + const char* ToString(const Pinetime::Controllers::MotionController::DeviceTypes deviceType) { + switch (deviceType) { + case Pinetime::Controllers::MotionController::DeviceTypes::BMA421: + return "BMA421"; + case Pinetime::Controllers::MotionController::DeviceTypes::BMA425: + return "BMA425"; + } + return "???"; + } +} + SystemInfo::SystemInfo(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::DateTime& dateTimeController, Pinetime::Controllers::Battery& batteryController, Pinetime::Controllers::BrightnessController& brightnessController, Pinetime::Controllers::Ble& bleController, - Pinetime::Drivers::WatchdogView& watchdog) + Pinetime::Drivers::WatchdogView& watchdog, + Pinetime::Controllers::MotionController& motionController) : Screen(app), dateTimeController {dateTimeController}, batteryController {batteryController}, brightnessController {brightnessController}, bleController {bleController}, watchdog {watchdog}, + motionController{motionController}, screens {app, 0, {[this]() -> std::unique_ptr { @@ -132,9 +147,7 @@ std::unique_ptr SystemInfo::CreateScreen2() { // hack to not use the flot functions from printf uint8_t batteryVoltageBytes[2]; batteryVoltageBytes[1] = static_cast(batteryVoltage); // truncate whole numbers - batteryVoltageBytes[0] = - static_cast((batteryVoltage - batteryVoltageBytes[1]) * 100); // remove whole part of flt and shift 2 places over - // + batteryVoltageBytes[0] = static_cast((batteryVoltage - batteryVoltageBytes[1]) * 100); // remove whole part of flt and shift 2 places over lv_obj_t* label = lv_label_create(lv_scr_act(), nullptr); lv_label_set_recolor(label, true); @@ -144,7 +157,8 @@ std::unique_ptr SystemInfo::CreateScreen2() { "#444444 Uptime#\n %02lud %02lu:%02lu:%02lu\n" "#444444 Battery# %d%%/%1i.%02iv\n" "#444444 Backlight# %s\n" - "#444444 Last reset# %s\n", + "#444444 Last reset# %s\n" + "#444444 Accel.# %s\n", dateTimeController.Day(), static_cast(dateTimeController.Month()), dateTimeController.Year(), @@ -159,7 +173,8 @@ std::unique_ptr SystemInfo::CreateScreen2() { batteryVoltageBytes[1], batteryVoltageBytes[0], brightnessController.ToString(), - resetReason); + resetReason, + ToString(motionController.DeviceType())); lv_obj_align(label, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); return std::make_unique(1, 5, app, label); } diff --git a/src/displayapp/screens/SystemInfo.h b/src/displayapp/screens/SystemInfo.h index c61a07a2..9d471f61 100644 --- a/src/displayapp/screens/SystemInfo.h +++ b/src/displayapp/screens/SystemInfo.h @@ -27,7 +27,8 @@ namespace Pinetime { Pinetime::Controllers::Battery& batteryController, Pinetime::Controllers::BrightnessController& brightnessController, Pinetime::Controllers::Ble& bleController, - Pinetime::Drivers::WatchdogView& watchdog); + Pinetime::Drivers::WatchdogView& watchdog, + Pinetime::Controllers::MotionController& motionController); ~SystemInfo() override; bool Refresh() override; bool OnButtonPushed() override; @@ -41,6 +42,7 @@ namespace Pinetime { Pinetime::Controllers::BrightnessController& brightnessController; Pinetime::Controllers::Ble& bleController; Pinetime::Drivers::WatchdogView& watchdog; + Pinetime::Controllers::MotionController& motionController; ScreenList<5> screens; diff --git a/src/drivers/Bma421.cpp b/src/drivers/Bma421.cpp index 35b2c105..dd284000 100644 --- a/src/drivers/Bma421.cpp +++ b/src/drivers/Bma421.cpp @@ -42,6 +42,12 @@ 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; + } + ret = bma423_write_config_file(&bma); if (ret != BMA4_OK) return; @@ -121,3 +127,6 @@ void Bma421::SoftReset() { nrf_delay_ms(1); } } +Bma421::DeviceTypes Bma421::DeviceType() const { + return deviceType; +} diff --git a/src/drivers/Bma421.h b/src/drivers/Bma421.h index e4d925f5..ace644bd 100644 --- a/src/drivers/Bma421.h +++ b/src/drivers/Bma421.h @@ -6,6 +6,11 @@ namespace Pinetime { class TwiMaster; class Bma421 { public: + enum class DeviceTypes : uint8_t { + Unknown, + BMA421, + BMA425 + }; struct Values { uint32_t steps; int16_t x; @@ -29,6 +34,7 @@ namespace Pinetime { void Write(uint8_t registerAddress, const uint8_t* data, size_t size); bool IsOk() const; + DeviceTypes DeviceType() const; private: void Reset(); @@ -38,6 +44,7 @@ namespace Pinetime { struct bma4_dev bma; bool isOk = false; bool isResetOk = false; + DeviceTypes deviceType = DeviceTypes::Unknown; }; } } \ No newline at end of file diff --git a/src/drivers/Bma421_C/bma423.c b/src/drivers/Bma421_C/bma423.c index 1d782705..7d6c2e0a 100644 --- a/src/drivers/Bma421_C/bma423.c +++ b/src/drivers/Bma421_C/bma423.c @@ -43,6 +43,521 @@ #include "bma423.h" /**\name Feature configuration file */ +const uint8_t bma425_config_file[] = { + 0x80, 0x2e, 0xfd, 0x00, 0x80, 0x2e, 0xff, 0x00, 0xc8, 0x2e, 0x00, 0x2e, + 0x80, 0x2e, 0xfb, 0x00, 0x80, 0x2e, 0xdd, 0xb0, 0x80, 0x2e, 0xfe, 0x00, + 0x80, 0x2e, 0xfc, 0x00, 0x80, 0x2e, 0x0d, 0xb1, 0x50, 0x39, 0x21, 0x2e, + 0xb0, 0xf0, 0x10, 0x30, 0x21, 0x2e, 0x16, 0xf0, 0x80, 0x2e, 0x34, 0xb1, + 0x65, 0x50, 0x4f, 0x52, 0x01, 0x42, 0x3b, 0x80, 0x41, 0x30, 0x01, 0x42, + 0x3c, 0x80, 0x00, 0x2e, 0x01, 0x40, 0x01, 0x42, 0x21, 0x2e, 0xff, 0xaf, + 0xb8, 0x2e, 0x1f, 0x7f, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0xfd, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2e, + 0x55, 0xf0, 0xc0, 0x2e, 0x21, 0x2e, 0x55, 0xf0, 0x30, 0x50, 0x00, 0x30, + 0x51, 0x56, 0x05, 0x30, 0x05, 0x2c, 0xfb, 0x7f, 0x3e, 0xbe, 0xd2, 0xba, + 0xb2, 0xb9, 0x6c, 0x0b, 0x53, 0x0e, 0xf9, 0x2f, 0x53, 0x1a, 0x01, 0x2f, + 0x4d, 0x0e, 0xf5, 0x2f, 0xd2, 0x7f, 0x04, 0x30, 0x1f, 0x2c, 0xe1, 0x7f, + 0xc5, 0x01, 0xa3, 0x03, 0x72, 0x0e, 0x03, 0x2f, 0x72, 0x1a, 0x0f, 0x2f, + 0x79, 0x0f, 0x0d, 0x2f, 0xe1, 0x6f, 0x4f, 0x04, 0x5f, 0xb9, 0xb1, 0xbf, + 0xfa, 0x0b, 0xd2, 0x6f, 0x96, 0x06, 0xb1, 0x25, 0x51, 0xbf, 0xeb, 0x7f, + 0x06, 0x00, 0xb2, 0x25, 0x27, 0x03, 0xdb, 0x7f, 0xcf, 0xbf, 0x3e, 0xbf, + 0x01, 0xb8, 0xd2, 0xba, 0x41, 0xba, 0xb2, 0xb9, 0x07, 0x0a, 0x6e, 0x0b, + 0xc0, 0x90, 0xdf, 0x2f, 0x40, 0x91, 0xdd, 0x2f, 0xfb, 0x6f, 0xd0, 0x5f, + 0xb8, 0x2e, 0x00, 0x31, 0xc0, 0x2e, 0x21, 0x2e, 0xba, 0xf0, 0xc8, 0x2e, + 0xc8, 0x2e, 0xc8, 0x2e, 0xc8, 0x2e, 0xc8, 0x2e, 0xaa, 0x00, 0x05, 0x00, + 0xaa, 0x00, 0x05, 0x00, 0x2d, 0x01, 0xd4, 0x7b, 0x3b, 0x01, 0xdb, 0x7a, + 0x04, 0x00, 0x3f, 0x7b, 0xcd, 0x6c, 0xc3, 0x04, 0x85, 0x09, 0xc3, 0x04, + 0xec, 0xe6, 0x0c, 0x46, 0x01, 0x00, 0x27, 0x00, 0x19, 0x00, 0x96, 0x00, + 0xa0, 0x00, 0x01, 0x00, 0x0c, 0x00, 0xf0, 0x3c, 0x00, 0x01, 0x01, 0x00, + 0x03, 0x00, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, + 0x00, 0x00, 0x47, 0x28, 0x88, 0x00, 0x54, 0x00, 0x51, 0x00, 0x97, 0x00, + 0xa0, 0x00, 0x80, 0x00, 0x00, 0x40, 0xff, 0x7f, 0x00, 0x80, 0xaf, 0x00, + 0xff, 0x00, 0xff, 0xb7, 0x00, 0x02, 0x00, 0xb0, 0x05, 0x80, 0xb1, 0xf0, + 0x5e, 0xf0, 0xc0, 0x00, 0x59, 0xf0, 0x39, 0xf0, 0x57, 0x00, 0x89, 0xf0, + 0x54, 0x00, 0x00, 0x20, 0x82, 0x00, 0x59, 0x00, 0x5d, 0x00, 0x81, 0x00, + 0xff, 0xfb, 0x52, 0xf0, 0x56, 0xf0, 0x33, 0x09, 0x33, 0x07, 0x00, 0x08, + 0x90, 0x01, 0x00, 0xf8, 0x00, 0x01, 0x02, 0x01, 0x60, 0x00, 0x6a, 0x00, + 0x4c, 0x04, 0xa0, 0x00, 0xe8, 0x03, 0x81, 0x00, 0x82, 0x00, 0xeb, 0x07, + 0xae, 0x07, 0xaa, 0x00, 0x75, 0x00, 0xff, 0x0f, 0xdb, 0x00, 0xb6, 0x01, + 0x70, 0x69, 0x26, 0xd3, 0x9c, 0x07, 0xbc, 0x02, 0x1f, 0x05, 0x9d, 0x00, + 0xa8, 0x05, 0xee, 0x06, 0x01, 0xf0, 0xbc, 0x05, 0x37, 0x08, 0xbb, 0x06, + 0x37, 0xfa, 0xb2, 0x00, 0xff, 0x03, 0x98, 0x2e, 0x15, 0xb0, 0x20, 0x26, + 0x98, 0x2e, 0xf7, 0x00, 0x98, 0x2e, 0xc4, 0xb0, 0x10, 0x30, 0x21, 0x2e, + 0x59, 0xf0, 0x98, 0x2e, 0xb9, 0x00, 0x98, 0x2e, 0x7a, 0xb4, 0x98, 0x2e, + 0x89, 0xb4, 0x00, 0x2e, 0x00, 0x2e, 0xd0, 0x2e, 0x98, 0x2e, 0xa7, 0xb0, + 0x01, 0x2e, 0x58, 0x00, 0x00, 0xb2, 0x1a, 0x2f, 0x00, 0x30, 0x21, 0x2e, + 0x58, 0x00, 0x47, 0x50, 0x98, 0x2e, 0x65, 0xb0, 0x03, 0x2e, 0x1e, 0x01, + 0x47, 0x50, 0x02, 0x30, 0x98, 0x2e, 0x28, 0xb5, 0x03, 0x2e, 0x1f, 0x01, + 0x47, 0x50, 0x12, 0x30, 0x98, 0x2e, 0x28, 0xb5, 0x01, 0x2e, 0x03, 0xf0, + 0x0d, 0xbc, 0x0f, 0xb8, 0x00, 0x90, 0x02, 0x2f, 0x4f, 0x50, 0x21, 0x2e, + 0xbc, 0xf0, 0x01, 0x2e, 0x57, 0x00, 0x00, 0xb2, 0x25, 0x2f, 0x00, 0x30, + 0x21, 0x2e, 0x57, 0x00, 0x49, 0x50, 0x98, 0x2e, 0x65, 0xb0, 0x49, 0x50, + 0x98, 0x2e, 0xc1, 0xb1, 0x49, 0x50, 0x98, 0x2e, 0x34, 0xb6, 0x49, 0x50, + 0x4b, 0x52, 0x98, 0x2e, 0xa4, 0xb4, 0x49, 0x50, 0x4d, 0x52, 0x98, 0x2e, + 0xa4, 0xb4, 0x01, 0x2e, 0x1e, 0x01, 0x0f, 0xbc, 0x0f, 0xb8, 0x00, 0x90, + 0x4f, 0x50, 0x08, 0x2f, 0x03, 0x2e, 0x1f, 0x01, 0x9f, 0xbc, 0x9f, 0xb8, + 0x40, 0x90, 0x02, 0x2f, 0x21, 0x2e, 0xbc, 0xf0, 0x02, 0x2d, 0x21, 0x2e, + 0xba, 0xf0, 0x98, 0x2e, 0xb9, 0x00, 0xaf, 0x2d, 0x10, 0x50, 0xfb, 0x7f, + 0x21, 0x25, 0x98, 0x2e, 0xf4, 0x01, 0xfb, 0x6f, 0x21, 0x25, 0xf0, 0x5f, + 0x10, 0x25, 0x80, 0x2e, 0xbe, 0x00, 0x94, 0x01, 0xdd, 0x03, 0xc0, 0xad, + 0x0b, 0x2f, 0xc0, 0xa8, 0x03, 0x2f, 0xc0, 0x90, 0x07, 0x2f, 0x80, 0xa6, + 0x05, 0x2f, 0x40, 0xa9, 0x12, 0x2f, 0x40, 0x91, 0x01, 0x2f, 0x00, 0xab, + 0x0e, 0x2f, 0xc0, 0xac, 0x00, 0x30, 0x55, 0x52, 0x07, 0x2f, 0xc0, 0xa9, + 0x03, 0x2f, 0xc0, 0x91, 0x03, 0x2f, 0x80, 0xa7, 0x01, 0x2f, 0x40, 0xa1, + 0x05, 0x2f, 0xc0, 0x2e, 0x17, 0x25, 0x06, 0x25, 0xc0, 0x2e, 0xf0, 0x3f, + 0x53, 0x52, 0xb8, 0x2e, 0x83, 0x86, 0x01, 0x30, 0x00, 0x30, 0x94, 0x40, + 0x24, 0x18, 0x06, 0x00, 0x53, 0x0e, 0x4f, 0x02, 0xf9, 0x2f, 0xb8, 0x2e, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0xa8, 0x03, 0x25, 0x10, 0x2f, 0x80, 0x90, + 0x01, 0x2f, 0x41, 0x0e, 0x0c, 0x2f, 0xf3, 0x3f, 0x18, 0x05, 0x05, 0x30, + 0x5d, 0x07, 0x15, 0x0e, 0x03, 0x2f, 0x55, 0x1a, 0x02, 0x2f, 0xcc, 0x0f, + 0x00, 0x2f, 0x58, 0x04, 0x01, 0x25, 0xb8, 0x2e, 0xb8, 0x2e, 0x63, 0x50, + 0x41, 0x30, 0x02, 0x40, 0x51, 0x0a, 0x01, 0x42, 0x18, 0x82, 0x57, 0x50, + 0x60, 0x42, 0x70, 0x3c, 0x59, 0x54, 0x42, 0x42, 0x69, 0x82, 0x82, 0x32, + 0x43, 0x40, 0x18, 0x08, 0x02, 0x0a, 0x40, 0x42, 0x42, 0x80, 0x02, 0x3f, + 0x01, 0x40, 0x10, 0x50, 0x4a, 0x08, 0xfb, 0x7f, 0x11, 0x42, 0x0b, 0x31, + 0x0b, 0x42, 0x3e, 0x80, 0x31, 0x32, 0x01, 0x42, 0x00, 0x2e, 0x01, 0x2e, + 0x40, 0xf0, 0x13, 0x90, 0x20, 0x2f, 0x03, 0x30, 0x5d, 0x50, 0x5b, 0x54, + 0x14, 0x35, 0x06, 0x30, 0x61, 0x52, 0x55, 0x32, 0x1d, 0x1a, 0xe3, 0x22, + 0x18, 0x1a, 0x5f, 0x58, 0xe3, 0x22, 0x04, 0x30, 0xd5, 0x40, 0xb5, 0x0d, + 0xe1, 0xbe, 0x6f, 0xbb, 0x80, 0x91, 0xa9, 0x0d, 0x01, 0x89, 0xb5, 0x23, + 0x10, 0xa1, 0xf7, 0x2f, 0xda, 0x0e, 0x14, 0x35, 0xeb, 0x2f, 0x01, 0x2e, + 0x25, 0x00, 0x70, 0x1a, 0x00, 0x30, 0x21, 0x30, 0x02, 0x2c, 0x08, 0x22, + 0x30, 0x30, 0x00, 0xb2, 0x06, 0x2f, 0x21, 0x2e, 0x59, 0xf0, 0x98, 0x2e, + 0xb9, 0x00, 0x00, 0x2e, 0x00, 0x2e, 0xd0, 0x2e, 0xfb, 0x6f, 0xf0, 0x5f, + 0xb8, 0x2e, 0x70, 0x50, 0x03, 0x2e, 0x22, 0x01, 0xf1, 0x7f, 0x2a, 0x25, + 0xb9, 0x82, 0xe0, 0x7f, 0xdb, 0x7f, 0x00, 0x30, 0x45, 0x30, 0x32, 0x30, + 0x03, 0x30, 0x04, 0x30, 0xf6, 0x6f, 0xf2, 0x09, 0xfc, 0x13, 0xc2, 0xab, + 0xb5, 0x09, 0xc7, 0x23, 0x80, 0xb3, 0xe6, 0x6f, 0xb7, 0x01, 0x00, 0x2e, + 0x8b, 0x41, 0x4b, 0x42, 0x05, 0x2f, 0xc5, 0x7f, 0x05, 0x30, 0x46, 0x40, + 0xae, 0x05, 0xc5, 0x6f, 0x46, 0x42, 0x01, 0x80, 0x23, 0xbd, 0xd3, 0xbe, + 0x03, 0x89, 0x41, 0x82, 0xdf, 0x0c, 0x03, 0xa2, 0xe4, 0x2f, 0xe0, 0x6f, + 0x91, 0x6f, 0x11, 0x42, 0xc3, 0xb2, 0xa1, 0x6f, 0x11, 0x42, 0x00, 0x2e, + 0xb1, 0x6f, 0x01, 0x42, 0x06, 0x2f, 0x00, 0x32, 0x03, 0x2e, 0x59, 0xf0, + 0x08, 0x0a, 0x21, 0x2e, 0x59, 0xf0, 0x06, 0x2d, 0xf1, 0x3d, 0x01, 0x2e, + 0x59, 0xf0, 0x01, 0x08, 0x21, 0x2e, 0x59, 0xf0, 0xdb, 0x6f, 0x90, 0x5f, + 0xb8, 0x2e, 0x69, 0x50, 0x05, 0x2e, 0x00, 0xf0, 0x4f, 0x56, 0xd3, 0x0f, + 0x01, 0x40, 0xf4, 0x33, 0xcc, 0x08, 0x0d, 0x2f, 0xf4, 0x30, 0x94, 0x08, + 0xb9, 0x88, 0x02, 0xa3, 0x04, 0x2f, 0x67, 0x58, 0x4c, 0x0a, 0x87, 0xa2, + 0x05, 0x2c, 0xcb, 0x22, 0x4f, 0x54, 0x4a, 0x0a, 0xf2, 0x3b, 0xca, 0x08, + 0x3c, 0x80, 0x27, 0x2e, 0x59, 0xf0, 0x01, 0x40, 0x01, 0x42, 0xb8, 0x2e, + 0x01, 0x2e, 0xb1, 0xf0, 0x67, 0x52, 0x01, 0x0a, 0x21, 0x2e, 0xb1, 0xf0, + 0x01, 0x2e, 0x1e, 0x01, 0x0f, 0xbc, 0x0f, 0xb8, 0x00, 0x90, 0x4f, 0x50, + 0x08, 0x2f, 0x03, 0x2e, 0x1f, 0x01, 0x9f, 0xbc, 0x9f, 0xb8, 0x40, 0x90, + 0x02, 0x2f, 0xc0, 0x2e, 0x21, 0x2e, 0xbc, 0xf0, 0xc0, 0x2e, 0x21, 0x2e, + 0xba, 0xf0, 0x70, 0x50, 0xf7, 0x7f, 0x00, 0x2e, 0x0f, 0x2e, 0xb8, 0xf0, + 0xf8, 0xbf, 0xff, 0xbb, 0xc0, 0xb3, 0x23, 0x2f, 0xb2, 0x7f, 0x94, 0x7f, + 0xc6, 0x7f, 0xe5, 0x7f, 0xd3, 0x7f, 0xa1, 0x7f, 0x35, 0x30, 0x05, 0x2e, + 0x01, 0xf0, 0x2e, 0xbd, 0x2e, 0xbb, 0x6b, 0x58, 0x6e, 0x05, 0x47, 0x56, + 0x6d, 0x54, 0x11, 0x30, 0x27, 0x41, 0x06, 0x41, 0xf8, 0xbf, 0xbe, 0x0b, + 0xb5, 0x11, 0xd6, 0x42, 0x03, 0x89, 0x5a, 0x0e, 0xf6, 0x2f, 0x23, 0x2e, + 0x58, 0x00, 0x4f, 0x52, 0x23, 0x2e, 0xb8, 0xf0, 0xb2, 0x6f, 0xe5, 0x6f, + 0xd3, 0x6f, 0xa1, 0x6f, 0x94, 0x6f, 0xc6, 0x6f, 0xf7, 0x6f, 0x90, 0x5f, + 0xc8, 0x2e, 0x60, 0x50, 0xc3, 0x7f, 0xd4, 0x7f, 0xe7, 0x7f, 0xf6, 0x7f, + 0xb2, 0x7f, 0xa5, 0x7f, 0x36, 0x30, 0x07, 0x2e, 0x01, 0xf0, 0xbe, 0xbd, + 0xbe, 0xbb, 0x6f, 0x58, 0x77, 0x05, 0x49, 0x56, 0x71, 0x54, 0x27, 0x41, + 0x06, 0x41, 0xf8, 0xbf, 0xbe, 0x0b, 0xb5, 0x11, 0xd6, 0x42, 0x03, 0x89, + 0x5a, 0x0e, 0xf6, 0x2f, 0x12, 0x30, 0x25, 0x2e, 0x57, 0x00, 0x02, 0x31, + 0x25, 0x2e, 0xb8, 0xf0, 0xd4, 0x6f, 0xc3, 0x6f, 0xe7, 0x6f, 0xb2, 0x6f, + 0xa5, 0x6f, 0xf6, 0x6f, 0xa0, 0x5f, 0xc8, 0x2e, 0x1a, 0x24, 0x26, 0x00, + 0x80, 0x2e, 0x65, 0x01, 0x70, 0x50, 0x42, 0x8e, 0xd4, 0x7f, 0xf6, 0x7f, + 0x47, 0x25, 0x1a, 0x18, 0x73, 0x52, 0xf1, 0x00, 0x64, 0x25, 0x01, 0x30, + 0x39, 0x02, 0x94, 0x41, 0x81, 0x41, 0xe2, 0x7f, 0xbe, 0xbb, 0xbd, 0x8d, + 0x02, 0xbd, 0xb5, 0x7f, 0x8e, 0xb5, 0xba, 0x0a, 0xc6, 0x7f, 0xab, 0x7f, + 0x51, 0x25, 0x98, 0x2e, 0xd1, 0x01, 0xd5, 0x6f, 0xe2, 0x6f, 0x2a, 0x18, + 0x73, 0x54, 0xb2, 0x01, 0x02, 0x30, 0xc4, 0x6f, 0x7a, 0x03, 0x12, 0x41, + 0x74, 0x25, 0xd0, 0x7f, 0x52, 0xbc, 0xd3, 0x41, 0x6e, 0xba, 0xde, 0xb6, + 0x20, 0x0b, 0xc7, 0x7f, 0x91, 0x7f, 0x98, 0x2e, 0xd1, 0x01, 0xf2, 0x6f, + 0xd5, 0x6f, 0xca, 0x16, 0x55, 0x18, 0xdd, 0x18, 0x95, 0x6f, 0xea, 0x18, + 0x73, 0x5a, 0x31, 0x25, 0x75, 0x01, 0x01, 0x30, 0x20, 0x25, 0x39, 0x02, + 0x5e, 0xba, 0x82, 0xbc, 0x8e, 0xb6, 0x21, 0x0b, 0x98, 0x2e, 0xd1, 0x01, + 0xe2, 0x6f, 0xb5, 0x6f, 0x2a, 0x18, 0xe0, 0x7f, 0xf1, 0x7f, 0x04, 0x30, + 0x73, 0x54, 0xf2, 0x00, 0x7c, 0x02, 0x85, 0x6f, 0xd0, 0x6f, 0x0d, 0x17, + 0x68, 0x18, 0xe0, 0x18, 0x90, 0x6f, 0xc4, 0x6f, 0xc5, 0x18, 0xeb, 0x6f, + 0xb2, 0x01, 0x1b, 0x43, 0x02, 0x30, 0x7a, 0x03, 0xfb, 0x6f, 0x3d, 0x8f, + 0x0b, 0x43, 0x3e, 0xba, 0x12, 0xbd, 0x52, 0xbc, 0x6e, 0xbb, 0xa2, 0x0a, + 0x9e, 0xb5, 0xde, 0xb6, 0x30, 0x0b, 0xf7, 0x7f, 0x98, 0x2e, 0xd1, 0x01, + 0xf5, 0x6f, 0x31, 0x25, 0xd1, 0x6f, 0x92, 0x6f, 0xab, 0x6f, 0x50, 0x43, + 0x43, 0x43, 0x90, 0x5f, 0x53, 0x56, 0x80, 0x2e, 0x00, 0xb0, 0x10, 0x50, + 0x03, 0x40, 0x19, 0x18, 0x55, 0x56, 0x19, 0x05, 0x36, 0x25, 0xf7, 0x7f, + 0x4a, 0x17, 0x54, 0x18, 0xec, 0x18, 0x09, 0x17, 0x01, 0x30, 0x0c, 0x07, + 0xe2, 0x18, 0xde, 0x00, 0xf2, 0x6f, 0x97, 0x02, 0x51, 0x58, 0xdc, 0x00, + 0x91, 0x02, 0xbf, 0xb8, 0x21, 0xbd, 0x8a, 0x0a, 0xc0, 0x2e, 0x02, 0x42, + 0xf0, 0x5f, 0x09, 0x2e, 0x1d, 0x01, 0x05, 0x2e, 0x1d, 0x01, 0xa3, 0xbc, + 0x44, 0xbe, 0x90, 0x50, 0x4f, 0xb9, 0x07, 0x2e, 0x1d, 0x01, 0x4a, 0x25, + 0x9f, 0xb8, 0x39, 0x8f, 0xb2, 0xbd, 0xf2, 0x7f, 0xbf, 0xb9, 0xeb, 0x7f, + 0x8a, 0x0a, 0x37, 0x89, 0x0b, 0x30, 0x93, 0x0a, 0x8b, 0x7f, 0xcb, 0x43, + 0x0b, 0x43, 0x80, 0xb2, 0xd3, 0x7f, 0xc1, 0x7f, 0x90, 0x2e, 0x6c, 0xb2, + 0x20, 0x25, 0x01, 0x2e, 0x5f, 0x00, 0x01, 0x90, 0x0e, 0x2f, 0x75, 0x52, + 0x01, 0x2e, 0x5c, 0x00, 0xb4, 0x7f, 0xa2, 0x7f, 0x98, 0x2e, 0x72, 0xb2, + 0x00, 0x30, 0x21, 0x2e, 0x5f, 0x00, 0xc1, 0x6f, 0xd3, 0x6f, 0xa2, 0x6f, + 0xb4, 0x6f, 0x0b, 0x30, 0x01, 0x2e, 0x1d, 0x01, 0x06, 0xbc, 0x06, 0xbb, + 0x57, 0x25, 0x01, 0x2e, 0x1d, 0x01, 0x94, 0xb1, 0x05, 0xbc, 0xb6, 0x7f, + 0x0f, 0xbb, 0x79, 0x50, 0x80, 0xb3, 0x0f, 0x2f, 0x0d, 0x2e, 0x1d, 0x01, + 0x7d, 0x5e, 0xb7, 0x09, 0x2d, 0x2e, 0x1d, 0x01, 0x7f, 0x5c, 0x77, 0x5e, + 0x9b, 0x43, 0x9b, 0x43, 0xdb, 0x43, 0x9b, 0x43, 0x1b, 0x42, 0xcb, 0x43, + 0x0b, 0x42, 0x8b, 0x43, 0x40, 0xb2, 0x05, 0x2f, 0x77, 0x50, 0x00, 0x2e, + 0x16, 0x40, 0x0b, 0x40, 0x76, 0x7f, 0x8b, 0x7f, 0xcb, 0x0a, 0x01, 0x2e, + 0x5c, 0x00, 0x75, 0x52, 0x7b, 0x5c, 0x98, 0x2e, 0xbe, 0xb2, 0x90, 0x6f, + 0x00, 0xb2, 0x0b, 0x2f, 0xf0, 0x6f, 0x00, 0xb2, 0x08, 0x2f, 0x77, 0x58, + 0x79, 0x50, 0x12, 0x41, 0x12, 0x42, 0x21, 0x30, 0x04, 0x41, 0x04, 0x42, + 0x23, 0x2e, 0x5e, 0xf0, 0xc0, 0x6f, 0x00, 0xb2, 0x26, 0x2f, 0x74, 0x6f, + 0x80, 0x6f, 0x7f, 0x54, 0x88, 0xbd, 0xc8, 0xb8, 0x4b, 0x0a, 0x94, 0x42, + 0x91, 0x42, 0x90, 0x42, 0x88, 0xba, 0x77, 0x52, 0xf3, 0x6f, 0x54, 0x42, + 0x85, 0x42, 0xc0, 0x90, 0x40, 0x42, 0x15, 0x2f, 0x79, 0x52, 0x00, 0x2e, + 0x52, 0x40, 0x41, 0x40, 0xa2, 0x04, 0x41, 0x06, 0x40, 0xaa, 0x04, 0x2f, + 0x40, 0x90, 0x0b, 0x2f, 0xb1, 0x6f, 0x4a, 0x0f, 0x08, 0x2f, 0xb2, 0x6f, + 0x80, 0xb2, 0x05, 0x2f, 0x79, 0x54, 0x21, 0x30, 0x94, 0x42, 0x80, 0x42, + 0x23, 0x2e, 0x5e, 0xf0, 0xd0, 0x6f, 0x00, 0xb2, 0x13, 0x2f, 0x01, 0x2e, + 0x5b, 0x00, 0x09, 0x2e, 0x81, 0x00, 0x04, 0x1a, 0x0d, 0x2f, 0x81, 0x50, + 0x29, 0x2e, 0x5b, 0x00, 0x24, 0x42, 0x44, 0x30, 0x02, 0x40, 0x02, 0x42, + 0x09, 0x80, 0x00, 0x2e, 0x04, 0x42, 0x03, 0x2d, 0x10, 0x30, 0x21, 0x2e, + 0x5f, 0x00, 0xeb, 0x6f, 0x70, 0x5f, 0xb8, 0x2e, 0x09, 0x86, 0x51, 0x54, + 0xe4, 0x40, 0xc3, 0x80, 0x94, 0x04, 0xc3, 0x40, 0x13, 0x05, 0x05, 0x40, + 0x25, 0x05, 0x8a, 0x17, 0x73, 0x30, 0x73, 0x09, 0x8c, 0x17, 0xf3, 0x08, + 0xe3, 0x00, 0x4c, 0x82, 0x15, 0x01, 0xb3, 0xb5, 0x53, 0x42, 0x8b, 0x16, + 0x43, 0xb6, 0x52, 0x42, 0x4c, 0x17, 0x54, 0x42, 0x55, 0x42, 0x53, 0x42, + 0x52, 0x42, 0x54, 0x42, 0x45, 0x42, 0x6d, 0x82, 0x83, 0x54, 0x52, 0x42, + 0x10, 0x50, 0x85, 0x54, 0x52, 0x42, 0xfb, 0x7f, 0x22, 0x30, 0x87, 0x56, + 0x43, 0x42, 0x44, 0x82, 0x0b, 0x30, 0x52, 0x42, 0x5b, 0x42, 0x7c, 0x84, + 0x4b, 0x42, 0x35, 0x82, 0x90, 0x80, 0x8b, 0x42, 0x0b, 0x42, 0x35, 0x80, + 0x04, 0x30, 0x0b, 0x42, 0x37, 0x80, 0x15, 0x30, 0x60, 0x25, 0x98, 0x2e, + 0xb1, 0xb2, 0x8b, 0x83, 0xfb, 0x6f, 0x65, 0x42, 0xc0, 0x2e, 0x44, 0x42, + 0xf0, 0x5f, 0x05, 0x80, 0x02, 0x30, 0x51, 0x82, 0x02, 0x42, 0x13, 0x30, + 0x41, 0x40, 0x4b, 0x08, 0x89, 0x54, 0x3e, 0x80, 0x51, 0x14, 0xc0, 0x2e, + 0x01, 0x42, 0x00, 0x2e, 0x40, 0x51, 0xd1, 0x7f, 0x12, 0x25, 0x02, 0x30, + 0x42, 0x43, 0x32, 0x30, 0x82, 0x43, 0xc6, 0x7f, 0xe5, 0x7f, 0xb4, 0x7f, + 0xa3, 0x7f, 0x90, 0x7f, 0x8b, 0x7f, 0x98, 0x2e, 0xc6, 0x01, 0xc0, 0x7e, + 0x00, 0xac, 0x01, 0x2f, 0x53, 0x50, 0xc0, 0x7e, 0x00, 0x2e, 0x90, 0x6f, + 0x09, 0x8a, 0xd1, 0x6f, 0x75, 0x7f, 0x4c, 0x82, 0x63, 0x41, 0x65, 0x7f, + 0x11, 0x7f, 0x00, 0x2e, 0x64, 0x41, 0x44, 0x85, 0x52, 0x7f, 0x45, 0x7f, + 0x00, 0x2e, 0xa6, 0x40, 0x80, 0x40, 0x32, 0x7f, 0x82, 0x8e, 0xc2, 0x6e, + 0x45, 0x41, 0xf0, 0x7f, 0x27, 0x7f, 0x02, 0x7f, 0x98, 0x2e, 0x38, 0xb1, + 0x23, 0x6f, 0xd1, 0x6f, 0xc2, 0x40, 0xf9, 0x86, 0x23, 0x7f, 0x80, 0xb2, + 0xe0, 0x7e, 0x0f, 0x2f, 0x32, 0x6f, 0x64, 0x6f, 0x82, 0x40, 0xf2, 0x7f, + 0x50, 0x82, 0x42, 0x6f, 0x50, 0x6f, 0x73, 0x6f, 0x85, 0x40, 0xc3, 0x40, + 0x04, 0x41, 0x06, 0x40, 0xe2, 0x6e, 0x98, 0x2e, 0x38, 0xb1, 0xe0, 0x7e, + 0xf3, 0x31, 0x10, 0x6f, 0x36, 0x80, 0xe1, 0x6e, 0x02, 0x40, 0x71, 0x7f, + 0x51, 0x04, 0x02, 0x30, 0x40, 0xa8, 0x91, 0x04, 0x4a, 0x22, 0x89, 0x16, + 0x93, 0x08, 0x4a, 0x00, 0x95, 0xb4, 0x09, 0x18, 0x8e, 0x16, 0x13, 0x30, + 0x93, 0x08, 0x21, 0x6f, 0x60, 0x7f, 0x4d, 0x86, 0x02, 0x80, 0xb2, 0x00, + 0x41, 0x40, 0x21, 0xb5, 0x50, 0x7f, 0x43, 0x7f, 0x98, 0x2e, 0xa7, 0xb1, + 0x40, 0x6f, 0x62, 0x6f, 0x55, 0x6f, 0x13, 0x40, 0x84, 0x40, 0x01, 0x40, + 0x45, 0x41, 0x42, 0xbe, 0x1d, 0x18, 0x4c, 0x04, 0x31, 0x0f, 0x04, 0x8a, + 0xc0, 0x6f, 0x11, 0x30, 0x02, 0x2f, 0x00, 0x2e, 0x03, 0x2c, 0x01, 0x42, + 0x23, 0x30, 0x03, 0x42, 0x00, 0x2e, 0xd6, 0x6f, 0x44, 0x41, 0x8a, 0x87, + 0x76, 0x8b, 0x00, 0xb3, 0x53, 0x7f, 0x15, 0x2f, 0x04, 0x6f, 0x8b, 0x5e, + 0x8b, 0x8d, 0xe7, 0x01, 0xc0, 0xa5, 0x84, 0x41, 0x01, 0x2f, 0x00, 0xa1, + 0x03, 0x2f, 0xc0, 0xad, 0x08, 0x2f, 0x00, 0xa5, 0x06, 0x2f, 0xc6, 0x40, + 0x81, 0x8d, 0x07, 0x30, 0x3c, 0x05, 0xd6, 0x42, 0x04, 0x2c, 0xc4, 0x42, + 0x02, 0x2c, 0x07, 0x30, 0x07, 0x30, 0x86, 0x86, 0x94, 0x6f, 0xd7, 0x7e, + 0x0e, 0x8d, 0x00, 0x40, 0x74, 0x89, 0xc7, 0x40, 0x02, 0xb2, 0xf9, 0x29, + 0x45, 0x41, 0x86, 0x41, 0xbe, 0x80, 0x21, 0x41, 0x75, 0x23, 0x82, 0x40, + 0xc7, 0x42, 0x45, 0x7f, 0x34, 0x7f, 0x20, 0x7f, 0x98, 0x2e, 0xa7, 0xb1, + 0x31, 0x6f, 0x60, 0x6f, 0x24, 0x6f, 0x22, 0x40, 0x05, 0x41, 0x43, 0x40, + 0x13, 0x01, 0x43, 0x86, 0xac, 0x0f, 0xd1, 0x6f, 0x30, 0x7f, 0x00, 0x2f, + 0x44, 0x42, 0x48, 0x8a, 0x41, 0x88, 0xe1, 0x40, 0x13, 0x7f, 0x04, 0x7f, + 0xf5, 0x7e, 0x98, 0x2e, 0xa7, 0xb1, 0x11, 0x6f, 0x60, 0x6f, 0x34, 0x6f, + 0x42, 0x40, 0x03, 0x40, 0x9a, 0x04, 0x04, 0x41, 0x43, 0x82, 0xa2, 0x0e, + 0x03, 0x6f, 0x00, 0x2f, 0xc2, 0x42, 0x00, 0x2e, 0x41, 0x40, 0x72, 0x6f, + 0x98, 0x2e, 0xa7, 0xb1, 0x25, 0x6f, 0x72, 0x6f, 0x53, 0x41, 0x93, 0x0e, + 0xd1, 0x6f, 0x46, 0x80, 0x1b, 0x30, 0x03, 0x30, 0x0c, 0x2f, 0x04, 0x40, + 0x00, 0x91, 0x42, 0x42, 0x08, 0x2f, 0xf6, 0x6e, 0x44, 0x6f, 0x86, 0x41, + 0xb4, 0x0e, 0x03, 0x2f, 0x02, 0x88, 0xdb, 0x7e, 0x03, 0x43, 0x0b, 0x42, + 0x46, 0x8d, 0x44, 0x41, 0x47, 0x80, 0x05, 0x6f, 0x94, 0x0f, 0x76, 0x7f, + 0x60, 0x7f, 0x02, 0x2f, 0x45, 0x89, 0x42, 0x43, 0x03, 0x43, 0x49, 0x88, + 0xa5, 0x6f, 0x40, 0x91, 0xa4, 0x7f, 0x15, 0x30, 0xe2, 0x6f, 0xd3, 0x6e, + 0x03, 0x2f, 0x04, 0x30, 0x83, 0x42, 0x80, 0x2e, 0x62, 0xb4, 0x04, 0x40, + 0x25, 0x29, 0x04, 0x42, 0x83, 0x42, 0x45, 0x82, 0x94, 0x6f, 0x04, 0x85, + 0xc0, 0xb2, 0x90, 0x2e, 0x4e, 0xb4, 0x15, 0x87, 0x3c, 0x8c, 0xc4, 0x40, + 0x46, 0x7f, 0xc2, 0x86, 0x07, 0x40, 0x86, 0x41, 0xf4, 0xbf, 0x00, 0xb3, + 0x0c, 0x2f, 0x90, 0x6f, 0x16, 0x80, 0x46, 0x25, 0x00, 0x40, 0x57, 0x25, + 0x04, 0x18, 0xae, 0x0e, 0x10, 0x30, 0x06, 0x30, 0x75, 0x25, 0x46, 0x23, + 0x60, 0x6f, 0x64, 0x25, 0xc4, 0x40, 0xfa, 0x86, 0x00, 0xb3, 0x33, 0x7f, + 0x09, 0x2f, 0x93, 0x6f, 0xd8, 0x88, 0x53, 0x6f, 0x04, 0x41, 0xc3, 0x40, + 0xdc, 0x0e, 0x13, 0x30, 0x04, 0x30, 0xdc, 0x22, 0xb3, 0x25, 0x40, 0xb3, + 0x02, 0x2f, 0x3b, 0x25, 0xc0, 0x90, 0x05, 0x2f, 0x91, 0x6f, 0xd0, 0x6f, + 0x98, 0x2e, 0xb1, 0xb2, 0x4d, 0x2c, 0x04, 0x30, 0x8d, 0x88, 0x43, 0x40, + 0x82, 0x40, 0x54, 0x7f, 0xda, 0x0f, 0x04, 0x30, 0x08, 0x2f, 0xc1, 0x80, + 0x40, 0x42, 0xc2, 0x0f, 0x02, 0x2f, 0x00, 0x30, 0xc0, 0x7e, 0x1b, 0x2d, + 0xc0, 0x7e, 0x19, 0x2d, 0xe1, 0xbc, 0x92, 0x6f, 0x4f, 0x04, 0x90, 0x84, + 0x40, 0xa8, 0x21, 0x05, 0x83, 0x40, 0x4c, 0x22, 0x4b, 0x0e, 0xb6, 0x84, + 0x21, 0x30, 0x02, 0x2f, 0x11, 0x30, 0x04, 0x2c, 0xc1, 0x7e, 0xe3, 0x6f, + 0xc1, 0x7e, 0xc1, 0x42, 0x00, 0x2e, 0x00, 0x40, 0x81, 0x40, 0x04, 0xbd, + 0x40, 0x6f, 0x98, 0x2e, 0xa7, 0xb1, 0x50, 0x6f, 0x11, 0x30, 0x02, 0x40, + 0x51, 0x08, 0xc3, 0x6e, 0x03, 0x80, 0x99, 0x15, 0x0b, 0x40, 0xb1, 0x6f, + 0xd0, 0x6f, 0xb6, 0x7f, 0x5b, 0x7f, 0x04, 0x30, 0x59, 0x54, 0x03, 0x30, + 0x11, 0x2c, 0x14, 0x80, 0x55, 0x6f, 0x06, 0x40, 0x75, 0x01, 0x58, 0xbb, + 0x6a, 0x09, 0x05, 0x42, 0xc1, 0x86, 0x47, 0x40, 0x51, 0x25, 0xbe, 0x01, + 0x56, 0x43, 0x00, 0x2e, 0x46, 0x41, 0xf4, 0x03, 0xb6, 0x6f, 0x47, 0x43, + 0x5e, 0x0e, 0xed, 0x2f, 0x31, 0x6f, 0x60, 0x6f, 0x42, 0x40, 0x15, 0x30, + 0x02, 0x82, 0x95, 0x08, 0x04, 0x42, 0x52, 0x42, 0x02, 0x2c, 0x44, 0x42, + 0x04, 0x30, 0x3e, 0x8e, 0x91, 0x6f, 0x4f, 0x8c, 0x02, 0x40, 0x83, 0x41, + 0xb5, 0x8d, 0x93, 0x0e, 0xd0, 0x6f, 0x01, 0x2f, 0x98, 0x2e, 0xb1, 0xb2, + 0x00, 0x2e, 0xc0, 0x41, 0x81, 0x41, 0xc1, 0x0f, 0xc0, 0x6f, 0x01, 0x2f, + 0x04, 0x42, 0x00, 0x2e, 0x70, 0x6f, 0x3c, 0x82, 0x00, 0x40, 0x41, 0x40, + 0x89, 0x16, 0x95, 0x08, 0x4a, 0x00, 0x04, 0xbc, 0x91, 0xb4, 0x01, 0x0e, + 0xe0, 0x6f, 0x07, 0x2f, 0xa1, 0x6f, 0x00, 0x2e, 0x41, 0x40, 0x40, 0xb2, + 0x02, 0x2f, 0xa1, 0x6f, 0x05, 0x42, 0x44, 0x42, 0x00, 0x2e, 0x8b, 0x6f, + 0xc0, 0x5e, 0xb8, 0x2e, 0x10, 0x50, 0x8d, 0x52, 0x4b, 0x50, 0xfb, 0x7f, + 0x98, 0x2e, 0x98, 0xb4, 0x4b, 0x52, 0x45, 0x82, 0x10, 0x30, 0x50, 0x42, + 0x60, 0x30, 0xfb, 0x6f, 0xc0, 0x2e, 0x40, 0x42, 0xf0, 0x5f, 0x10, 0x50, + 0x8f, 0x52, 0x4d, 0x50, 0xfb, 0x7f, 0x98, 0x2e, 0x98, 0xb4, 0x4d, 0x52, + 0x45, 0x82, 0x00, 0x30, 0x50, 0x42, 0x70, 0x30, 0xfb, 0x6f, 0xc0, 0x2e, + 0x40, 0x42, 0xf0, 0x5f, 0x12, 0x30, 0x12, 0x42, 0x02, 0x30, 0x12, 0x42, + 0x12, 0x42, 0x12, 0x42, 0x02, 0x42, 0x03, 0x80, 0x41, 0x84, 0x11, 0x42, + 0x02, 0x42, 0xb8, 0x2e, 0x48, 0x86, 0x90, 0x50, 0xc4, 0x40, 0x42, 0x84, + 0xf2, 0x7f, 0x5a, 0x25, 0x02, 0x41, 0xa2, 0xbf, 0x77, 0x85, 0x06, 0x41, + 0xff, 0xbb, 0x87, 0x42, 0x61, 0xbf, 0x07, 0x41, 0x6f, 0xbb, 0x86, 0x7f, + 0x7f, 0xbb, 0x96, 0x7f, 0xfe, 0x86, 0x86, 0x40, 0x80, 0x91, 0xc3, 0x40, + 0xd3, 0x7f, 0xe0, 0x7f, 0x13, 0x30, 0x05, 0x2f, 0x86, 0x6f, 0x80, 0x91, + 0x02, 0x2f, 0x96, 0x6f, 0x80, 0xb3, 0x60, 0x2f, 0x61, 0x25, 0x57, 0x40, + 0xc1, 0x91, 0xc1, 0x7f, 0x0f, 0x2f, 0x01, 0x30, 0x81, 0x43, 0x00, 0x2e, + 0xf2, 0x6f, 0x13, 0x40, 0x93, 0x42, 0x00, 0x2e, 0x13, 0x40, 0x93, 0x42, + 0x00, 0x2e, 0x00, 0x40, 0x80, 0x42, 0xbd, 0x80, 0xc0, 0x2e, 0x01, 0x42, + 0x70, 0x5f, 0x87, 0x83, 0x7a, 0x8d, 0x45, 0x40, 0x7b, 0x82, 0x45, 0x41, + 0x04, 0x41, 0xd5, 0xbf, 0x43, 0xbe, 0xc3, 0xba, 0xa5, 0x7f, 0x75, 0xba, + 0xb6, 0x7f, 0x05, 0x30, 0x97, 0x40, 0xc0, 0xb3, 0x09, 0x2f, 0x06, 0x40, + 0x47, 0x40, 0xb7, 0x05, 0x07, 0x30, 0x80, 0xa9, 0xfe, 0x05, 0xb7, 0x23, + 0x74, 0x0f, 0x5d, 0x23, 0xb6, 0x6f, 0x41, 0x82, 0x01, 0x80, 0x56, 0x0e, + 0xee, 0x2f, 0x40, 0x40, 0x28, 0x1a, 0xc4, 0x6f, 0xe0, 0x6f, 0xf2, 0x6f, + 0x02, 0x2f, 0x03, 0x30, 0x19, 0x2c, 0x03, 0x43, 0x05, 0x41, 0x6b, 0x29, + 0xa6, 0x6f, 0x05, 0x43, 0x6e, 0x0e, 0x11, 0x2f, 0xd4, 0x6f, 0x00, 0xb3, + 0x03, 0x2f, 0x3f, 0x89, 0xdc, 0x14, 0x27, 0x2e, 0x5e, 0xf0, 0x40, 0x25, + 0x32, 0x25, 0x15, 0x41, 0xd5, 0x42, 0x00, 0x2e, 0x15, 0x41, 0xd5, 0x42, + 0x00, 0x2e, 0x04, 0x41, 0xc4, 0x42, 0x00, 0x2e, 0x00, 0x2e, 0x41, 0x40, + 0x40, 0x90, 0x09, 0x2f, 0x11, 0x40, 0x91, 0x42, 0x00, 0x2e, 0x11, 0x40, + 0x91, 0x42, 0x00, 0x2e, 0x00, 0x40, 0x02, 0x2c, 0x80, 0x42, 0x43, 0x42, + 0x70, 0x5f, 0xb8, 0x2e, 0xb0, 0x50, 0x3a, 0x25, 0xf5, 0x86, 0x91, 0x58, + 0xc4, 0x42, 0x15, 0x30, 0x93, 0x58, 0x4d, 0x09, 0x81, 0x90, 0x64, 0x7f, + 0xf2, 0x7f, 0xeb, 0x7f, 0x02, 0x2f, 0x40, 0xb3, 0x90, 0x2e, 0x05, 0xb6, + 0x15, 0x0b, 0x00, 0xb3, 0x90, 0x2e, 0x05, 0xb6, 0x9a, 0x00, 0xe3, 0x30, + 0xcb, 0x08, 0x81, 0x40, 0x44, 0x84, 0xb1, 0xba, 0x46, 0x86, 0x49, 0x8e, + 0x97, 0x5c, 0xc2, 0x7f, 0x02, 0x84, 0x07, 0x25, 0xd3, 0x7f, 0x2b, 0x2e, + 0xa9, 0x00, 0x84, 0x40, 0xe3, 0x41, 0xe3, 0x04, 0xc4, 0x41, 0xc3, 0x43, + 0x2e, 0x18, 0x95, 0x5a, 0x8b, 0x40, 0x0b, 0x42, 0xb5, 0x00, 0x99, 0x5a, + 0xb2, 0x7f, 0x3a, 0x80, 0x95, 0x00, 0x05, 0x40, 0x41, 0x8b, 0x05, 0x42, + 0x03, 0x8a, 0xa2, 0x7f, 0x43, 0x84, 0x40, 0x41, 0x7b, 0x8b, 0x85, 0x7f, + 0x00, 0xb2, 0xdc, 0x05, 0x91, 0x7f, 0x04, 0x2f, 0xc3, 0x6f, 0x00, 0x2e, + 0xc4, 0x40, 0x01, 0x89, 0xc4, 0x42, 0x47, 0x86, 0x66, 0x41, 0x75, 0x7f, + 0x45, 0x88, 0x42, 0x82, 0x3e, 0x0f, 0x45, 0x41, 0x34, 0x2f, 0x46, 0x40, + 0x3e, 0x0e, 0x26, 0x2f, 0x85, 0x40, 0xc1, 0x33, 0xa9, 0x0e, 0x01, 0x30, + 0x02, 0x2f, 0xc3, 0x40, 0xc0, 0xb2, 0x1b, 0x2f, 0x82, 0x34, 0xaa, 0x0e, + 0x31, 0x2f, 0x01, 0x41, 0x7f, 0x82, 0x43, 0xa2, 0x02, 0x30, 0x02, 0x2f, + 0x00, 0x2e, 0x0c, 0x2c, 0x01, 0x30, 0x00, 0xb2, 0xd0, 0x6f, 0x11, 0x30, + 0x01, 0x2f, 0x02, 0x42, 0x02, 0x2d, 0x01, 0x42, 0x01, 0x30, 0xc0, 0x6f, + 0x00, 0x2e, 0x02, 0x42, 0x3e, 0x81, 0x04, 0x86, 0x02, 0x42, 0x02, 0x43, + 0xc2, 0x42, 0x19, 0x2d, 0xc0, 0x33, 0x80, 0x42, 0x16, 0x2d, 0xa0, 0x6f, + 0x28, 0x04, 0x38, 0x1e, 0x40, 0x42, 0x11, 0x30, 0x90, 0x6f, 0x22, 0x30, + 0x98, 0x2e, 0x08, 0xb6, 0x0c, 0x2c, 0x01, 0x30, 0xa1, 0x6f, 0xa9, 0x00, + 0x90, 0x6f, 0x01, 0x82, 0xba, 0x1c, 0x42, 0x42, 0x21, 0x30, 0x12, 0x30, + 0x98, 0x2e, 0x08, 0xb6, 0x01, 0x30, 0x72, 0x6f, 0xd4, 0xb1, 0xf5, 0xbd, + 0x6b, 0xba, 0x9f, 0x5a, 0x80, 0x40, 0x05, 0x18, 0xf5, 0xbe, 0xe3, 0x0a, + 0xeb, 0xbb, 0x3d, 0x0b, 0x80, 0x6f, 0xe3, 0x00, 0x04, 0x40, 0x63, 0x05, + 0xa1, 0x58, 0x2c, 0x18, 0xf5, 0xbe, 0x83, 0x42, 0xeb, 0xbb, 0xfd, 0x0b, + 0xb2, 0x6f, 0x5a, 0x01, 0xdf, 0x01, 0x7d, 0x1f, 0x15, 0x42, 0x9a, 0x04, + 0x05, 0x40, 0x5d, 0x05, 0x2c, 0x18, 0x75, 0xbe, 0xeb, 0xba, 0x2c, 0x0b, + 0xdc, 0x04, 0x9a, 0x1c, 0x02, 0x42, 0x04, 0x80, 0x00, 0x2e, 0x00, 0x40, + 0x00, 0xb2, 0x10, 0x2f, 0xc2, 0x6f, 0xc0, 0x33, 0x82, 0x40, 0x90, 0x0e, + 0x0b, 0x2f, 0xd1, 0x6f, 0x7e, 0x88, 0x03, 0x81, 0x3c, 0x84, 0x0b, 0x30, + 0x82, 0x86, 0x4b, 0x42, 0x0b, 0x42, 0x0b, 0x43, 0x8b, 0x42, 0xcb, 0x42, + 0x21, 0x30, 0x42, 0xb2, 0x02, 0x30, 0x9d, 0x50, 0x02, 0x22, 0x41, 0xb2, + 0x9b, 0x52, 0x08, 0x22, 0xf1, 0x6f, 0x40, 0x90, 0x11, 0x30, 0x06, 0x2f, + 0x22, 0x30, 0x02, 0x08, 0x00, 0xb2, 0x08, 0x2f, 0x23, 0x2e, 0x5e, 0xf0, + 0x06, 0x2d, 0x01, 0x08, 0x00, 0xb2, 0x02, 0x2f, 0x00, 0x31, 0x21, 0x2e, + 0x5e, 0xf0, 0xeb, 0x6f, 0x50, 0x5f, 0xb8, 0x2e, 0x07, 0x86, 0xfc, 0x88, + 0xc6, 0x40, 0x05, 0x41, 0x31, 0x1a, 0x12, 0x2f, 0x80, 0x91, 0x22, 0x2f, + 0xc1, 0x33, 0x29, 0x0f, 0x0a, 0x2f, 0x06, 0x80, 0x00, 0x2e, 0x00, 0x40, + 0x00, 0xb2, 0x01, 0x2f, 0x44, 0xa9, 0x03, 0x2f, 0x00, 0x30, 0xc0, 0x42, + 0x00, 0x43, 0xb8, 0x2e, 0xc2, 0x42, 0x01, 0x43, 0xb8, 0x2e, 0xc1, 0x33, + 0xa9, 0x0e, 0x0e, 0x2f, 0x43, 0x3c, 0xeb, 0x00, 0xcc, 0xa8, 0x0a, 0x2f, + 0x05, 0x86, 0xc2, 0x80, 0xc3, 0x40, 0x02, 0x42, 0x3c, 0x84, 0xc1, 0x80, + 0x81, 0x42, 0x82, 0x84, 0xc0, 0x2e, 0x80, 0x42, 0x00, 0x2e, 0xb8, 0x2e, + 0x05, 0x2e, 0x20, 0x01, 0x11, 0x30, 0x20, 0x50, 0x91, 0x08, 0xf0, 0x7f, + 0x80, 0xb2, 0xeb, 0x7f, 0x13, 0x2f, 0x01, 0x2e, 0x74, 0x00, 0x01, 0x90, + 0x02, 0x30, 0xa3, 0x50, 0x03, 0x2f, 0x25, 0x2e, 0x74, 0x00, 0x98, 0x2e, + 0xad, 0xb7, 0xf2, 0x6f, 0xa3, 0x52, 0x98, 0x2e, 0x57, 0xb6, 0x00, 0xb2, + 0x06, 0x2f, 0x80, 0x30, 0x21, 0x2e, 0x5e, 0xf0, 0x03, 0x2d, 0x10, 0x30, + 0x21, 0x2e, 0x74, 0x00, 0xeb, 0x6f, 0xe0, 0x5f, 0xb8, 0x2e, 0x30, 0x51, + 0x42, 0x8a, 0xe1, 0x7f, 0x83, 0x88, 0xdb, 0x7f, 0xc5, 0x7f, 0x1a, 0x25, + 0x05, 0x25, 0x93, 0x40, 0x06, 0x40, 0xb3, 0x01, 0x16, 0x42, 0xcb, 0x16, + 0x06, 0x40, 0xf3, 0x02, 0x13, 0x42, 0x54, 0x0e, 0xf5, 0x2f, 0x04, 0x40, + 0x12, 0x30, 0xa2, 0x28, 0x02, 0x42, 0x88, 0xa0, 0x00, 0x30, 0x90, 0x2e, + 0xa9, 0xb7, 0x6d, 0x84, 0x73, 0x88, 0x92, 0x7f, 0x70, 0x7f, 0x84, 0x7f, + 0xa2, 0x7f, 0x70, 0x86, 0xb5, 0x7f, 0x63, 0x7f, 0x75, 0x30, 0xa5, 0x52, + 0xa7, 0x54, 0xbd, 0x50, 0xaf, 0x58, 0xb7, 0x6f, 0xf4, 0x7f, 0x51, 0x7f, + 0x00, 0x2e, 0xd6, 0x41, 0xd4, 0x41, 0xb7, 0x7f, 0xcc, 0x17, 0x7d, 0x09, + 0x75, 0x01, 0x06, 0x30, 0x26, 0x03, 0x4d, 0xbe, 0xd3, 0xba, 0x6c, 0x0b, + 0x28, 0x0e, 0x05, 0x22, 0x2a, 0x0f, 0x90, 0x22, 0xd2, 0x42, 0x43, 0x7f, + 0x32, 0x7f, 0x00, 0x2e, 0xa9, 0x5a, 0xab, 0x58, 0xad, 0x5c, 0xa9, 0x56, + 0x98, 0x2e, 0x38, 0xb1, 0x91, 0x6f, 0x32, 0x6f, 0x50, 0x42, 0x91, 0x7f, + 0xb3, 0x30, 0x10, 0x25, 0x98, 0x2e, 0xdb, 0xb7, 0x71, 0x6f, 0x88, 0x28, + 0x43, 0x6f, 0x80, 0x6f, 0x72, 0x7f, 0x58, 0x0e, 0x51, 0x6f, 0x44, 0x82, + 0xa7, 0x54, 0xbd, 0x50, 0x75, 0x30, 0xaf, 0x58, 0xcd, 0x2f, 0xb1, 0x6f, + 0x46, 0x84, 0xe1, 0x6f, 0x4e, 0x80, 0x81, 0x40, 0xb2, 0x7f, 0x90, 0x7f, + 0x12, 0x30, 0x98, 0x2e, 0xcc, 0xb7, 0xb1, 0x6f, 0x7c, 0x8a, 0xa2, 0x6f, + 0xb5, 0x7f, 0x40, 0x42, 0x98, 0x2e, 0xf4, 0x01, 0x95, 0xbc, 0x0b, 0xb9, + 0x51, 0x0a, 0x62, 0x6f, 0xa1, 0x7f, 0x98, 0x2e, 0xf4, 0x01, 0x95, 0xbc, + 0x0b, 0xb9, 0x11, 0x0a, 0xa1, 0x6f, 0x49, 0x17, 0x48, 0x18, 0x88, 0x16, + 0xe8, 0x18, 0xd1, 0x18, 0x27, 0x25, 0x16, 0x25, 0x80, 0x7f, 0x98, 0x2e, + 0xbe, 0x00, 0xb5, 0x6f, 0xe1, 0x6f, 0x43, 0x41, 0x4b, 0x84, 0x4c, 0x8c, + 0xb0, 0x7f, 0x62, 0x7f, 0x4a, 0x88, 0x7e, 0x8b, 0xc0, 0x90, 0x56, 0x7f, + 0x13, 0x2f, 0x45, 0x7f, 0x34, 0x7f, 0xb3, 0x30, 0xb1, 0x52, 0xb2, 0x6f, + 0x98, 0x2e, 0xdb, 0xb7, 0x71, 0x6f, 0x88, 0x0e, 0x34, 0x6f, 0x45, 0x6f, + 0xe1, 0x6f, 0x06, 0x2f, 0x34, 0x25, 0x1b, 0x30, 0x10, 0x6f, 0x22, 0x6f, + 0xdb, 0x42, 0xd0, 0x42, 0xc2, 0x42, 0x02, 0x30, 0x00, 0x6f, 0x00, 0xa8, + 0x90, 0x05, 0x13, 0x6f, 0x86, 0x23, 0xc0, 0xa8, 0xd3, 0x05, 0xdf, 0x23, + 0xb7, 0x05, 0xb3, 0x5e, 0x37, 0x0f, 0x4d, 0x8c, 0x07, 0x30, 0x19, 0x2f, + 0x44, 0x7f, 0x00, 0x2e, 0x24, 0x6f, 0xb3, 0x5e, 0xa7, 0x0e, 0x44, 0x6f, + 0x07, 0x30, 0x11, 0x2f, 0xc7, 0x5e, 0xdf, 0x00, 0xc1, 0x5e, 0x5f, 0x0e, + 0x02, 0x2f, 0x00, 0x2e, 0x0b, 0x2c, 0x07, 0x30, 0xc9, 0x56, 0x03, 0x00, + 0xc3, 0x56, 0x43, 0x0e, 0x02, 0x2f, 0x00, 0x2e, 0x03, 0x2c, 0x07, 0x30, + 0x82, 0x43, 0x17, 0x30, 0x41, 0x86, 0xc0, 0x91, 0x0e, 0x2f, 0xc0, 0x40, + 0x01, 0x90, 0x09, 0x2f, 0x80, 0x41, 0x14, 0x30, 0x04, 0x28, 0x80, 0x43, + 0x06, 0xa0, 0x03, 0x2f, 0xc8, 0x80, 0xbb, 0x58, 0xc2, 0x42, 0x04, 0x42, + 0x66, 0x2c, 0x00, 0x30, 0x90, 0x6f, 0x00, 0x2e, 0x00, 0x40, 0x00, 0xa8, + 0x00, 0x30, 0x5e, 0x2f, 0x00, 0x41, 0x00, 0xb2, 0x00, 0x30, 0x5a, 0x2f, + 0x49, 0x82, 0xb2, 0x6f, 0x43, 0x7f, 0xb5, 0x7f, 0x94, 0x7f, 0xb3, 0x30, + 0x41, 0x40, 0x98, 0x2e, 0xdb, 0xb7, 0x71, 0x6f, 0x88, 0x0f, 0xb5, 0x6f, + 0xe1, 0x6f, 0x02, 0x30, 0x00, 0x30, 0x4a, 0x2f, 0x80, 0x6f, 0xc5, 0x58, + 0x04, 0x00, 0xbf, 0x58, 0x44, 0x0e, 0x02, 0x2f, 0x00, 0x2e, 0x43, 0x2c, + 0x00, 0x30, 0xa0, 0x6f, 0xb5, 0x58, 0x84, 0x0e, 0x00, 0x30, 0x3c, 0x2f, + 0xb7, 0x54, 0x21, 0x6f, 0xb5, 0x7f, 0x98, 0x2e, 0xcc, 0xb7, 0x10, 0x25, + 0xb3, 0x30, 0x21, 0x25, 0x98, 0x2e, 0xdb, 0xb7, 0x02, 0x6f, 0xa0, 0x7f, + 0xb3, 0x30, 0x12, 0x25, 0x98, 0x2e, 0xdb, 0xb7, 0x12, 0x6f, 0x80, 0x7f, + 0xb3, 0x30, 0x12, 0x25, 0x98, 0x2e, 0xdb, 0xb7, 0x81, 0x6f, 0x88, 0x28, + 0x87, 0x52, 0x98, 0x2e, 0xcc, 0xb7, 0xa1, 0x6f, 0x88, 0x0f, 0xb5, 0x6f, + 0xe1, 0x6f, 0x02, 0x30, 0x00, 0x30, 0x1a, 0x2f, 0x44, 0x6f, 0x00, 0x2e, + 0x00, 0x41, 0x00, 0xb2, 0x0f, 0x2f, 0x64, 0x6f, 0x10, 0x6f, 0x04, 0x41, + 0x84, 0x0e, 0x00, 0x30, 0x0f, 0x2f, 0x54, 0x6f, 0x20, 0x6f, 0x04, 0x41, + 0x84, 0x0f, 0x00, 0x30, 0x09, 0x2f, 0x94, 0x6f, 0x10, 0x30, 0x07, 0x2c, + 0x02, 0x43, 0x08, 0x87, 0xb9, 0x50, 0xd0, 0x42, 0x10, 0x30, 0x00, 0x43, + 0xc2, 0x42, 0x0b, 0x30, 0x4b, 0x43, 0x7a, 0x8b, 0xc4, 0x6f, 0x06, 0x89, + 0x52, 0x43, 0x52, 0x43, 0x6c, 0x0e, 0xfb, 0x2f, 0x78, 0x85, 0x00, 0x2e, + 0x82, 0x40, 0x02, 0x1a, 0x02, 0x2f, 0x00, 0x2e, 0x02, 0x2c, 0x40, 0x42, + 0x00, 0x30, 0x00, 0x2e, 0xdb, 0x6f, 0xd0, 0x5e, 0xb8, 0x2e, 0x08, 0x82, + 0x02, 0x30, 0x12, 0x42, 0x08, 0x86, 0xc2, 0x88, 0x87, 0x5a, 0x12, 0x43, + 0x05, 0x43, 0x02, 0x8b, 0x7c, 0x8d, 0x42, 0x43, 0x14, 0x30, 0xbe, 0x8b, + 0x04, 0x42, 0x45, 0x81, 0x42, 0x43, 0x02, 0x42, 0x35, 0x80, 0xb9, 0x5e, + 0xa5, 0x5a, 0xc7, 0x42, 0x84, 0x43, 0x52, 0x43, 0x12, 0x42, 0x52, 0x43, + 0x12, 0x42, 0x52, 0x43, 0x52, 0x43, 0x41, 0x0e, 0xf7, 0x2f, 0xb8, 0x2e, + 0x0a, 0x0c, 0x55, 0x56, 0x03, 0x09, 0x0a, 0x04, 0x00, 0xb3, 0x07, 0x2f, + 0x88, 0x0c, 0x93, 0x08, 0x80, 0xb2, 0x03, 0x2f, 0x53, 0x50, 0xc0, 0x2e, + 0x40, 0xac, 0x03, 0x22, 0xb8, 0x2e, 0xff, 0x88, 0x10, 0x30, 0x4a, 0x0d, + 0x0a, 0x18, 0x04, 0x15, 0x4c, 0x16, 0x5f, 0xb9, 0x79, 0x08, 0x53, 0x5a, + 0x95, 0x00, 0x34, 0x09, 0x40, 0x90, 0x02, 0x2f, 0x00, 0x91, 0x00, 0x2f, + 0x00, 0x30, 0xd8, 0x00, 0xc0, 0xb2, 0x0b, 0x2f, 0xd0, 0xa0, 0x03, 0x2f, + 0xf0, 0x86, 0xbb, 0x11, 0x07, 0x2c, 0xce, 0x17, 0x01, 0x31, 0x4b, 0x04, + 0x79, 0x14, 0x33, 0x12, 0xfb, 0x11, 0x81, 0x0b, 0xce, 0x16, 0xc0, 0x2e, + 0x7b, 0x1a, 0x16, 0x22, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, + 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00, 0x80, 0x2e, 0x18, 0x00 +}; + const uint8_t bma423_config_file[] = { 0x80, 0x2e, 0xfe, 0x00, 0x80, 0x2e, 0xf1, 0x01, 0xc8, 0x2e, 0x00, 0x2e, 0x80, 0x2e, 0xfc, 0x00, 0x80, 0x2e, 0xfb, 0x00, 0x80, 0x2e, 0xff, 0x00, 0x80, 0x2e, 0xfd, 0x00, 0x80, 0x2e, 0x42, 0xb0, 0x50, 0x39, 0x21, 0x2e, 0xb0, 0xf0, @@ -450,7 +965,7 @@ int8_t bma423_init(struct bma4_dev *dev) rslt = bma4_init(dev); if (rslt == BMA4_OK) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { /* Resolution of BMA423 sensor is 12 bit */ dev->resolution = 12; @@ -478,7 +993,7 @@ int8_t bma423_write_config_file(struct bma4_dev *dev) if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { /* Configuration stream read/write length boundary * check @@ -492,7 +1007,10 @@ int8_t bma423_write_config_file(struct bma4_dev *dev) } /*Assign stream data */ - dev->config_file_ptr = bma423_config_file; + if(dev->chip_id == BMA423_CHIP_ID) + dev->config_file_ptr = bma423_config_file; + else if(dev->chip_id == BMA425_CHIP_ID) + dev->config_file_ptr = bma425_config_file; rslt = bma4_write_config_file(dev); } else @@ -526,7 +1044,7 @@ int8_t bma423_get_config_id(uint16_t *config_id, struct bma4_dev *dev) if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, BMA423_FEATURE_SIZE, dev); if (rslt == BMA4_OK) @@ -559,7 +1077,7 @@ int8_t bma423_map_interrupt(uint8_t int_line, uint16_t int_map, uint8_t enable, if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { if (int_line <= 1) { @@ -593,7 +1111,7 @@ int8_t bma423_read_int_status(uint16_t *int_status, struct bma4_dev *dev) if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { /* Read the interrupt status */ rslt = bma4_read_int_status(int_status, dev); @@ -622,7 +1140,7 @@ int8_t bma423_feature_enable(uint8_t feature, uint8_t enable, struct bma4_dev *d if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { /* Read feature configuration data */ rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, len, dev); @@ -669,7 +1187,7 @@ int8_t bma423_set_remap_axes(const struct bma423_axes_remap *remap_data, struct if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, BMA423_FEATURE_SIZE, dev); if (rslt == BMA4_OK) @@ -708,7 +1226,7 @@ int8_t bma423_get_remap_axes(struct bma423_axes_remap *remap_data, struct bma4_d if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, BMA423_FEATURE_SIZE, dev); if (rslt == BMA4_OK) @@ -997,7 +1515,7 @@ int8_t bma423_step_detector_enable(uint8_t enable, struct bma4_dev *dev) if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, BMA423_FEATURE_SIZE, dev); if (rslt == BMA4_OK) @@ -1034,7 +1552,7 @@ int8_t bma423_step_counter_set_watermark(uint16_t step_counter_wm, struct bma4_d if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, BMA423_FEATURE_SIZE, dev); if (rslt == BMA4_OK) @@ -1088,7 +1606,7 @@ int8_t bma423_step_counter_get_watermark(uint16_t *step_counter_wm, struct bma4_ if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, BMA423_FEATURE_SIZE, dev); if (rslt == BMA4_OK) @@ -1125,7 +1643,7 @@ int8_t bma423_reset_step_counter(struct bma4_dev *dev) if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, BMA423_FEATURE_SIZE, dev); if (rslt == BMA4_OK) @@ -1162,7 +1680,7 @@ int8_t bma423_step_counter_output(uint32_t *step_count, struct bma4_dev *dev) if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { /* Reads the step counter output data from the * gpio register @@ -1200,7 +1718,7 @@ int8_t bma423_activity_output(uint8_t *activity, struct bma4_dev *dev) if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { /* Reads the activity output from the gpio register */ rslt = bma4_read_regs(BMA4_ACTIVITY_OUT_ADDR, &data, 1, dev); @@ -1234,7 +1752,7 @@ int8_t bma423_stepcounter_get_parameter(struct bma423_stepcounter_settings *sett if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, BMA423_FEATURE_SIZE, dev); if (rslt == BMA4_OK) @@ -1269,7 +1787,7 @@ int8_t bma423_stepcounter_set_parameter(const struct bma423_stepcounter_settings if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, BMA423_FEATURE_SIZE, dev); if (rslt == BMA4_OK) @@ -1306,7 +1824,7 @@ int8_t bma423_single_tap_set_sensitivity(uint8_t sensitivity, struct bma4_dev *d if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, BMA423_FEATURE_SIZE, dev); if (rslt == BMA4_OK) @@ -1341,7 +1859,7 @@ int8_t bma423_double_tap_set_sensitivity(uint8_t sensitivity, struct bma4_dev *d if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, BMA423_FEATURE_SIZE, dev); if (rslt == BMA4_OK) @@ -1376,7 +1894,7 @@ int8_t bma423_single_tap_get_sensitivity(uint8_t *sensitivity, struct bma4_dev * if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, BMA423_FEATURE_SIZE, dev); if (rslt == BMA4_OK) @@ -1409,7 +1927,7 @@ int8_t bma423_double_tap_get_sensitivity(uint8_t *sensitivity, struct bma4_dev * if (dev != NULL) { - if (dev->chip_id == BMA423_CHIP_ID) + if (dev->chip_id == BMA423_CHIP_ID || dev->chip_id == BMA425_CHIP_ID) { rslt = bma4_read_regs(BMA4_FEATURE_CONFIG_ADDR, feature_config, BMA423_FEATURE_SIZE, dev); if (rslt == BMA4_OK) diff --git a/src/drivers/Bma421_C/bma423.h b/src/drivers/Bma421_C/bma423.h index 96e5d8e3..b58e0d21 100644 --- a/src/drivers/Bma421_C/bma423.h +++ b/src/drivers/Bma421_C/bma423.h @@ -52,6 +52,7 @@ extern "C" { /**\name Chip ID of BMA423 sensor */ #define BMA423_CHIP_ID UINT8_C(0x11) +#define BMA425_CHIP_ID UINT8_C(0x13) /**\ Configuration ID start position of BMA423 sensor */ #define BMA423_CONFIG_ID_START_ADDR UINT8_C(66) diff --git a/src/systemtask/SystemTask.cpp b/src/systemtask/SystemTask.cpp index 38e9793c..13755f71 100644 --- a/src/systemtask/SystemTask.cpp +++ b/src/systemtask/SystemTask.cpp @@ -126,6 +126,7 @@ void SystemTask::Work() { twiMaster.Init(); motionSensor.Init(); + motionController.Init(motionSensor.DeviceType()); settingsController.Init(); displayApp.Register(this); From 20a24f8cf56551eae1202f8dc5733bd0cf61adbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20Milants?= Date: Sat, 19 Jun 2021 20:59:18 +0200 Subject: [PATCH 44/94] Set version to 1.2.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a488eaa..f2e467e9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.10) -project(pinetime VERSION 1.1.0 LANGUAGES C CXX ASM) +project(pinetime VERSION 1.2.0 LANGUAGES C CXX ASM) set(CMAKE_C_STANDARD 99) set(CMAKE_CXX_STANDARD 14) From 572be3e857f86047926f7ccae5a4197958580f98 Mon Sep 17 00:00:00 2001 From: Avamander Date: Tue, 22 Jun 2021 21:31:31 +0300 Subject: [PATCH 45/94] Removed an illogical comparison from SystemInfo and St7789 driver (#449) * Removed an illogical comparison --- src/displayapp/screens/SystemInfo.cpp | 3 --- src/drivers/St7789.cpp | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index 0b16d633..1cf895c7 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -141,9 +141,6 @@ std::unique_ptr SystemInfo::CreateScreen2() { uptimeSeconds = uptimeSeconds % secondsInAMinute; // TODO handle more than 100 days of uptime - if (batteryPercent == -1) - batteryPercent = 0; - // hack to not use the flot functions from printf uint8_t batteryVoltageBytes[2]; batteryVoltageBytes[1] = static_cast(batteryVoltage); // truncate whole numbers diff --git a/src/drivers/St7789.cpp b/src/drivers/St7789.cpp index 39218e77..0f1dc02e 100644 --- a/src/drivers/St7789.cpp +++ b/src/drivers/St7789.cpp @@ -140,8 +140,9 @@ void St7789::Uninit() { } void St7789::DrawPixel(uint16_t x, uint16_t y, uint32_t color) { - if ((x < 0) || (x >= Width) || (y < 0) || (y >= Height)) + if (x >= Width || y >= Height) { return; + } SetAddrWindow(x, y, x + 1, y + 1); From ef999e8dd397ea2680e724ea0bd9987a1793a9c1 Mon Sep 17 00:00:00 2001 From: Jonathan Vander Mey Date: Tue, 22 Jun 2021 14:34:46 -0400 Subject: [PATCH 46/94] Fix typo in variable names (#430) --- src/displayapp/screens/WatchFaceAnalog.cpp | 8 ++++---- src/displayapp/screens/WatchFaceAnalog.h | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/displayapp/screens/WatchFaceAnalog.cpp b/src/displayapp/screens/WatchFaceAnalog.cpp index 02f1fc2a..0051408c 100644 --- a/src/displayapp/screens/WatchFaceAnalog.cpp +++ b/src/displayapp/screens/WatchFaceAnalog.cpp @@ -30,14 +30,14 @@ WatchFaceAnalog::WatchFaceAnalog(Pinetime::Applications::DisplayApp* app, Controllers::DateTime& dateTimeController, Controllers::Battery& batteryController, Controllers::Ble& bleController, - Controllers::NotificationManager& notificatioManager, + Controllers::NotificationManager& notificationManager, Controllers::Settings& settingsController) : Screen(app), currentDateTime {{}}, dateTimeController {dateTimeController}, batteryController {batteryController}, bleController {bleController}, - notificatioManager {notificatioManager}, + notificationManager {notificationManager}, settingsController {settingsController} { settingsController.SetClockFace(1); @@ -172,7 +172,7 @@ bool WatchFaceAnalog::Refresh() { lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); } - notificationState = notificatioManager.AreNewNotificationsAvailable(); + notificationState = notificationManager.AreNewNotificationsAvailable(); if (notificationState.IsUpdated()) { if (notificationState.Get() == true) @@ -202,4 +202,4 @@ bool WatchFaceAnalog::Refresh() { } return true; -} \ No newline at end of file +} diff --git a/src/displayapp/screens/WatchFaceAnalog.h b/src/displayapp/screens/WatchFaceAnalog.h index 667f6241..96225558 100644 --- a/src/displayapp/screens/WatchFaceAnalog.h +++ b/src/displayapp/screens/WatchFaceAnalog.h @@ -27,7 +27,7 @@ namespace Pinetime { Controllers::DateTime& dateTimeController, Controllers::Battery& batteryController, Controllers::Ble& bleController, - Controllers::NotificationManager& notificatioManager, + Controllers::NotificationManager& notificationManager, Controllers::Settings& settingsController); ~WatchFaceAnalog() override; @@ -79,11 +79,11 @@ namespace Pinetime { Controllers::DateTime& dateTimeController; Controllers::Battery& batteryController; Controllers::Ble& bleController; - Controllers::NotificationManager& notificatioManager; + Controllers::NotificationManager& notificationManager; Controllers::Settings& settingsController; void UpdateClock(); }; } } -} \ No newline at end of file +} From 883700fca13a45b6cb0af4d74e3ef276a2d69283 Mon Sep 17 00:00:00 2001 From: Florian Date: Tue, 22 Jun 2021 20:56:49 +0200 Subject: [PATCH 47/94] update main font to keep diffs for future changes small (#420) * update font with jetbrains mono v2.225 and the current converter * added the tff file for JetBrains Mono to ensure everybody is using the same version Co-authored-by: Florian --- src/displayapp/fonts/JetBrainsMono-Bold.ttf | Bin 0 -> 173264 bytes src/displayapp/fonts/README.md | 2 +- src/displayapp/fonts/jetbrains_mono_bold_20.c | 390 +++++++++--------- 3 files changed, 204 insertions(+), 188 deletions(-) create mode 100644 src/displayapp/fonts/JetBrainsMono-Bold.ttf diff --git a/src/displayapp/fonts/JetBrainsMono-Bold.ttf b/src/displayapp/fonts/JetBrainsMono-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0cd1cb66bd193f2b178d0a69a7b0658d76b3a670 GIT binary patch literal 173264 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%0Abi#}=?x9#AzJ05!8Z#!udP+ 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 OwHaMwcmReuwf+ZCw$sx9 literal 0 HcmV?d00001 diff --git a/src/displayapp/fonts/README.md b/src/displayapp/fonts/README.md index 183ad7e4..08427d51 100644 --- a/src/displayapp/fonts/README.md +++ b/src/displayapp/fonts/README.md @@ -10,7 +10,7 @@ * Size : 20 * Bpp : 1 bit-per-pixel * Do not enable font compression and horizontal subpixel hinting -* Load the file `JetBrainsMono-Bold.tff` and specify the following range : `0x20-0x7f, 0x410-0x44f` +* Load the file `JetBrainsMono-Bold.tff` (use the file in this repo to ensure the version matches) and specify the following range : `0x20-0x7f, 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` * Click on Convert, and download the file `jetbrains_mono_bold_20.c` and copy it in `src/DisplayApp/Fonts` diff --git a/src/displayapp/fonts/jetbrains_mono_bold_20.c b/src/displayapp/fonts/jetbrains_mono_bold_20.c index 9174ff48..b001bb7e 100644 --- a/src/displayapp/fonts/jetbrains_mono_bold_20.c +++ b/src/displayapp/fonts/jetbrains_mono_bold_20.c @@ -1,11 +1,15 @@ -#include "lvgl/lvgl.h" - /******************************************************************************* * 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 @@ -17,707 +21,707 @@ *----------------*/ /*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { - /* U+20 " " */ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0020 " " */ 0x0, - /* U+21 "!" */ + /* U+0021 "!" */ 0xff, 0xff, 0xff, 0xfc, 0xf, 0xc0, - /* U+22 "\"" */ + /* U+0022 "\"" */ 0xef, 0xdf, 0xbf, 0x7e, 0xfd, 0xc0, - /* U+23 "#" */ + /* U+0023 "#" */ 0x8, 0xc3, 0x10, 0x66, 0x3f, 0xf7, 0xfe, 0x23, 0x4, 0x61, 0x88, 0x31, 0x1f, 0xfb, 0xff, 0x19, 0x82, 0x30, 0xc4, 0x0, - /* U+24 "$" */ - 0x8, 0x2, 0x0, 0x80, 0xfc, 0x7f, 0xba, 0x7e, + /* 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+25 "%" */ + /* U+0025 "%" */ 0x78, 0x3f, 0xc6, 0xcc, 0xcc, 0xcc, 0xfd, 0x87, 0xb0, 0x6, 0x0, 0x7e, 0xf, 0xf1, 0xb3, 0x33, 0x33, 0x33, 0x63, 0xfc, 0x1e, - /* U+26 "&" */ + /* U+0026 "&" */ 0x1e, 0xf, 0xe1, 0x8e, 0x30, 0x6, 0x0, 0x60, 0x1e, 0x7, 0xe6, 0xed, 0xdc, 0xf3, 0x9e, 0x73, - 0xcf, 0xfc, 0x79, 0x80, + 0xcf, 0xfc, 0xf9, 0x80, - /* U+27 "'" */ + /* U+0027 "'" */ 0xff, 0xff, 0xc0, - /* U+28 "(" */ + /* U+0028 "(" */ 0x2, 0x1c, 0x79, 0xc7, 0x1e, 0x38, 0x70, 0xe1, 0xc3, 0x87, 0xe, 0x1c, 0x3c, 0x38, 0x3c, 0x3c, 0x38, - /* U+29 ")" */ + /* U+0029 ")" */ 0x1, 0xc3, 0xc3, 0xc1, 0xc3, 0xc3, 0x87, 0xe, 0x1c, 0x38, 0x70, 0xe1, 0xc7, 0xe, 0x79, 0xe3, 0x0, - /* U+2A "*" */ + /* U+002A "*" */ 0xc, 0x3, 0x8, 0xc7, 0xb7, 0x7f, 0x83, 0x1, 0xe0, 0xcc, 0x73, 0x80, 0x0, - /* U+2B "+" */ + /* U+002B "+" */ 0x1c, 0x7, 0x1, 0xc3, 0xff, 0xff, 0xc7, 0x1, 0xc0, 0x70, 0x1c, 0x0, - /* U+2C "," */ + /* U+002C "," */ 0x7b, 0x9c, 0xce, 0x60, - /* U+2D "-" */ + /* U+002D "-" */ 0xff, 0xf0, - /* U+2E "." */ + /* U+002E "." */ 0xff, 0xf0, - /* U+2F "/" */ + /* 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+30 "0" */ + /* U+0030 "0" */ 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7f, 0xdf, 0xf7, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, 0x8f, 0xc0, - /* U+31 "1" */ + /* U+0031 "1" */ 0x1e, 0x3f, 0x3b, 0x99, 0xc8, 0xe0, 0x70, 0x38, 0x1c, 0xe, 0x7, 0x3, 0x81, 0xcf, 0xff, 0xfc, - /* U+32 "2" */ + /* U+0032 "2" */ 0x3e, 0x3f, 0xbc, 0xfc, 0x70, 0x38, 0x1c, 0x1c, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0xf, 0xff, 0xfc, - /* U+33 "3" */ + /* U+0033 "3" */ 0x7f, 0x9f, 0xe0, 0x30, 0x18, 0xc, 0x7, 0xc1, 0xf8, 0xf, 0x1, 0xc0, 0x7e, 0x1f, 0xcf, 0x7f, 0x8f, 0xc0, - /* U+34 "4" */ + /* U+0034 "4" */ 0x7, 0x7, 0x3, 0x83, 0x83, 0x83, 0xc1, 0xcf, 0xe7, 0xe3, 0xff, 0xff, 0xe0, 0x70, 0x38, 0x1c, - /* U+35 "5" */ + /* U+0035 "5" */ 0x7f, 0x9f, 0xe7, 0x1, 0xc0, 0x77, 0x1f, 0xe7, 0x3c, 0x7, 0x1, 0xc0, 0x77, 0x1d, 0xcf, 0x7f, 0x87, 0xc0, - /* U+36 "6" */ + /* U+0036 "6" */ 0xe, 0x3, 0x1, 0xc0, 0x60, 0x38, 0x1d, 0xc7, 0xfb, 0xcf, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, - 0x87, 0x80, + 0x8f, 0x80, - /* U+37 "7" */ + /* U+0037 "7" */ 0xff, 0xff, 0xfe, 0x1f, 0x86, 0x3, 0x80, 0xe0, 0x30, 0x1c, 0x6, 0x3, 0x80, 0xc0, 0x70, 0x1c, 0x6, 0x0, - /* U+38 "8" */ + /* U+0038 "8" */ 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xdc, 0xe3, 0xf0, 0xfc, 0x73, 0xb8, 0x7e, 0x1f, 0xcf, 0x7f, 0x8f, 0xc0, - /* U+39 "9" */ + /* U+0039 "9" */ 0x1e, 0x1f, 0xef, 0x3f, 0x87, 0xe1, 0xf8, 0x7f, 0x3d, 0xfe, 0x3b, 0x81, 0xc0, 0x60, 0x38, 0xc, 0x7, 0x0, - /* U+3A ":" */ + /* U+003A ":" */ 0xff, 0x80, 0x0, 0xff, 0x80, - /* U+3B ";" */ + /* U+003B ";" */ 0x7b, 0xde, 0x0, 0x0, 0x0, 0x3, 0xdc, 0xe6, 0x73, 0x0, - /* U+3C "<" */ + /* U+003C "<" */ 0x0, 0x81, 0xc3, 0xe7, 0xcf, 0x6, 0x3, 0xc0, 0x7c, 0xf, 0x81, 0xc0, 0x20, - /* U+3D "=" */ + /* U+003D "=" */ 0xff, 0xff, 0xc0, 0x0, 0x0, 0x7, 0xff, 0xfe, - /* U+3E ">" */ + /* U+003E ">" */ 0x80, 0x70, 0x3e, 0x7, 0xc0, 0xf8, 0xc, 0x1e, 0x3c, 0xf8, 0x70, 0x20, 0x0, - /* U+3F "?" */ + /* U+003F "?" */ 0xfc, 0xfe, 0xf, 0x7, 0x7, 0xf, 0x3e, 0x3c, 0x30, 0x30, 0x0, 0x0, 0x70, 0x70, - /* U+40 "@" */ + /* U+0040 "@" */ 0x1f, 0x7, 0xf9, 0xc3, 0x70, 0x3c, 0x7, 0x8f, 0xf3, 0xfe, 0x63, 0xcc, 0x79, 0x8f, 0x31, 0xe6, 0x3c, 0xff, 0x8e, 0xf8, 0x3, 0x80, 0x3e, 0x3, 0xc0, - /* U+41 "A" */ + /* U+0041 "A" */ 0x1e, 0x7, 0x81, 0xe0, 0xfc, 0x3f, 0xc, 0xc3, 0x31, 0xce, 0x73, 0x9f, 0xe7, 0xfb, 0x87, 0xe1, 0xf0, 0x30, - /* U+42 "B" */ + /* U+0042 "B" */ 0xfe, 0x3f, 0xce, 0x3b, 0x8e, 0xe3, 0xb8, 0xcf, 0xe3, 0xfc, 0xe3, 0xb8, 0x7e, 0x1f, 0x8f, 0xff, 0xbf, 0xc0, - /* U+43 "C" */ + /* U+0043 "C" */ 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x38, 0xe, 0x1f, 0xcf, 0x7f, 0x8f, 0xc0, - /* U+44 "D" */ + /* U+0044 "D" */ 0xfe, 0x7f, 0xb9, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0xff, 0xf7, 0xf0, - /* U+45 "E" */ + /* U+0045 "E" */ 0xff, 0xff, 0xf8, 0x1c, 0xe, 0x7, 0x3, 0xfd, 0xfe, 0xe0, 0x70, 0x38, 0x1c, 0xf, 0xff, 0xfc, - /* U+46 "F" */ + /* U+0046 "F" */ 0xff, 0xff, 0xf8, 0x1c, 0xe, 0x7, 0x3, 0xff, 0xff, 0xe0, 0x70, 0x38, 0x1c, 0xe, 0x7, 0x0, - /* U+47 "G" */ - 0x3f, 0x1f, 0xef, 0x1f, 0x87, 0xe0, 0x38, 0xe, + /* U+0047 "G" */ + 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe0, 0x38, 0xe, 0x7f, 0x9f, 0xe1, 0xf8, 0x7e, 0x1f, 0xcf, 0x7f, 0x8f, 0xc0, - /* U+48 "H" */ + /* U+0048 "H" */ 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0xff, 0xff, 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1c, - /* U+49 "I" */ + /* U+0049 "I" */ 0xff, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xff, - /* U+4A "J" */ + /* U+004A "J" */ 0x1f, 0xc7, 0xf0, 0x1c, 0x7, 0x1, 0xc0, 0x70, 0x1c, 0x7, 0x1, 0xc0, 0x7e, 0x1f, 0xcf, 0x7f, 0x8f, 0xc0, - /* U+4B "K" */ + /* U+004B "K" */ 0xe1, 0xf8, 0x7e, 0x3b, 0x8e, 0xe7, 0x39, 0xcf, 0xe3, 0xf8, 0xe7, 0x39, 0xce, 0x3b, 0x8e, 0xe1, 0xf8, 0x70, - /* U+4C "L" */ + /* U+004C "L" */ 0xe0, 0x70, 0x38, 0x1c, 0xe, 0x7, 0x3, 0x81, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0xf, 0xff, 0xfc, - /* U+4D "M" */ + /* U+004D "M" */ 0xe1, 0xf8, 0x7f, 0x3f, 0xcf, 0xd2, 0xf7, 0xbd, 0xef, 0x33, 0xc0, 0xf0, 0x3c, 0xf, 0x3, 0xc0, 0xf0, 0x30, - /* U+4E "N" */ - 0xe1, 0xf0, 0xfc, 0x7e, 0x3d, 0x9e, 0xcf, 0x67, - 0x9b, 0xcd, 0xe6, 0xf1, 0xf8, 0xfc, 0x3e, 0x1c, + /* U+004E "N" */ + 0xe1, 0xf0, 0xfc, 0x7e, 0x3f, 0x9e, 0xcf, 0x67, + 0x9b, 0xcd, 0xe6, 0xf1, 0xf8, 0xfc, 0x7e, 0x1c, - /* U+4F "O" */ + /* U+004F "O" */ 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x77, 0xf1, 0xf0, - /* U+50 "P" */ + /* U+0050 "P" */ 0xff, 0x3f, 0xee, 0x3f, 0x87, 0xe1, 0xf8, 0xff, 0xfb, 0xfc, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x38, 0x0, - /* U+51 "Q" */ + /* 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+52 "R" */ + /* U+0052 "R" */ 0xff, 0x3f, 0xee, 0x3f, 0x87, 0xe1, 0xf8, 0xff, 0xfb, 0xf8, 0xe6, 0x39, 0xce, 0x33, 0x8e, 0xe3, 0xb8, 0x70, - /* U+53 "S" */ + /* U+0053 "S" */ 0x3f, 0x1f, 0xee, 0x3f, 0x87, 0xe0, 0x3c, 0x7, 0xf0, 0xfe, 0x3, 0xc0, 0x7e, 0x1f, 0xcf, 0x7f, 0x8f, 0xc0, - /* U+54 "T" */ + /* U+0054 "T" */ 0xff, 0xff, 0xf0, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x38, 0xe, 0x3, 0x80, - /* U+55 "U" */ + /* U+0055 "U" */ 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x77, 0xf1, 0xf0, - /* U+56 "V" */ + /* U+0056 "V" */ 0xc0, 0xf8, 0x7e, 0x1d, 0x86, 0x61, 0x9c, 0xe7, 0x38, 0xcc, 0x33, 0xf, 0xc3, 0xf0, 0x78, 0x1e, 0x7, 0x80, - /* U+57 "W" */ + /* U+0057 "W" */ 0xce, 0x79, 0xcf, 0x29, 0xe5, 0x3c, 0xa7, 0xd5, 0xda, 0xb3, 0x56, 0x7b, 0xcf, 0x79, 0xef, 0x38, 0xe7, 0x1c, 0xe3, 0x80, - /* U+58 "X" */ + /* U+0058 "X" */ 0xe1, 0xd8, 0x67, 0x38, 0xcc, 0x3f, 0x7, 0x81, 0xe0, 0x78, 0x1e, 0xf, 0xc3, 0x31, 0xce, 0xe1, 0xf8, 0x70, - /* U+59 "Y" */ + /* U+0059 "Y" */ 0xe0, 0xfc, 0x1d, 0xc7, 0x38, 0xe3, 0xb8, 0x77, 0x6, 0xc0, 0xf8, 0xe, 0x1, 0xc0, 0x38, 0x7, 0x0, 0xe0, 0x1c, 0x0, - /* U+5A "Z" */ + /* U+005A "Z" */ 0xff, 0xff, 0xc0, 0xe0, 0xe0, 0x70, 0x70, 0x70, 0x38, 0x38, 0x38, 0x1c, 0x1c, 0xf, 0xff, 0xfc, - /* U+5B "[" */ + /* U+005B "[" */ 0xff, 0xfe, 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, 0x38, 0xe3, 0x8e, 0x38, 0xff, 0xf0, - /* U+5C "\\" */ + /* 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+5D "]" */ + /* U+005D "]" */ 0xff, 0xf1, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xc7, 0xff, 0xf0, - /* U+5E "^" */ + /* U+005E "^" */ 0xc, 0x7, 0x81, 0xe0, 0xfc, 0x33, 0x1c, 0xe6, 0x19, 0x86, - /* U+5F "_" */ + /* U+005F "_" */ 0xff, 0xff, 0xf0, - /* U+60 "`" */ + /* U+0060 "`" */ 0xe3, 0x8c, - /* U+61 "a" */ + /* U+0061 "a" */ 0x1f, 0x1f, 0xe7, 0x1c, 0x7, 0x3f, 0xdf, 0xfe, 0x1f, 0x87, 0xe3, 0xff, 0xf3, 0xdc, - /* U+62 "b" */ + /* U+0062 "b" */ 0xe0, 0x70, 0x38, 0x1d, 0xcf, 0xf7, 0x1f, 0x8f, 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x7f, 0xf7, 0x70, - /* U+63 "c" */ + /* U+0063 "c" */ 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x7, 0x3, 0x81, 0xc7, 0xe3, 0xbf, 0x8f, 0x80, - /* U+64 "d" */ + /* U+0064 "d" */ 0x3, 0x81, 0xc0, 0xe7, 0x77, 0xff, 0x1f, 0x8f, 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x77, 0xf9, 0xdc, - /* U+65 "e" */ + /* U+0065 "e" */ 0x3e, 0x3f, 0xb8, 0xfc, 0x7f, 0xff, 0xff, 0x81, 0xc0, 0xe3, 0xbf, 0x8f, 0x80, - /* U+66 "f" */ + /* U+0066 "f" */ 0xf, 0xc7, 0xf1, 0xc0, 0x70, 0xff, 0xff, 0xf1, 0xc0, 0x70, 0x1c, 0x7, 0x1, 0xc0, 0x70, 0x1c, 0x7, 0x0, - /* U+67 "g" */ + /* U+0067 "g" */ 0x3b, 0xbf, 0xfd, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xf7, 0xbf, 0xce, 0xe0, 0x70, 0x39, 0xf8, 0xf8, - /* U+68 "h" */ + /* U+0068 "h" */ 0xe0, 0x70, 0x38, 0x1d, 0xcf, 0xf7, 0x1f, 0x8f, 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1c, - /* U+69 "i" */ + /* U+0069 "i" */ 0x1c, 0x7, 0x1, 0xc0, 0x0, 0x0, 0x3f, 0xf, 0xc0, 0x70, 0x1c, 0x7, 0x1, 0xc0, 0x70, 0x1c, 0x7, 0xf, 0xff, 0xff, - /* U+6A "j" */ + /* U+006A "j" */ 0x7, 0x7, 0x7, 0x0, 0xff, 0xff, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0x7, 0xf, 0xfe, 0xfc, - /* U+6B "k" */ + /* U+006B "k" */ 0xe0, 0x38, 0xe, 0x3, 0x87, 0xe3, 0xb8, 0xee, 0x73, 0xf8, 0xfe, 0x39, 0xce, 0x33, 0x8e, 0xe1, 0xb8, 0x70, - /* U+6C "l" */ + /* U+006C "l" */ 0xfe, 0x1f, 0xc0, 0x38, 0x7, 0x0, 0xe0, 0x1c, 0x3, 0x80, 0x70, 0xe, 0x1, 0xc0, 0x38, 0x7, 0x0, 0x7e, 0x7, 0xc0, - /* U+6D "m" */ + /* U+006D "m" */ 0xd9, 0xbf, 0xfc, 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcc, - /* U+6E "n" */ + /* U+006E "n" */ 0xee, 0x7f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xf1, 0xf8, 0xe0, - /* U+6F "o" */ + /* U+006F "o" */ 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xbf, 0x8f, 0x80, - /* U+70 "p" */ + /* U+0070 "p" */ 0xee, 0x7f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xff, 0xbb, 0x9c, 0xe, 0x7, 0x3, 0x80, - /* U+71 "q" */ + /* U+0071 "q" */ 0x3b, 0xbf, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xbf, 0xce, 0xe0, 0x70, 0x38, 0x1c, 0xe, - /* U+72 "r" */ - 0xee, 0x7f, 0xb8, 0xfc, 0x7e, 0x3f, 0x3, 0x81, + /* U+0072 "r" */ + 0xee, 0x7f, 0xb9, 0xfc, 0x7e, 0x3f, 0x3, 0x81, 0xc0, 0xe0, 0x70, 0x38, 0x0, - /* U+73 "s" */ + /* U+0073 "s" */ 0x1f, 0x1f, 0xf7, 0x1d, 0xc0, 0x7c, 0xf, 0xe0, 0x3c, 0x7, 0x71, 0xdf, 0xe3, 0xf0, - /* U+74 "t" */ + /* U+0074 "t" */ 0x1c, 0x7, 0x1, 0xc3, 0xff, 0xff, 0xc7, 0x1, 0xc0, 0x70, 0x1c, 0x7, 0x1, 0xc0, 0x70, 0x1f, 0xc3, 0xf0, - /* U+75 "u" */ + /* U+0075 "u" */ 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xbf, 0x8f, 0x80, - /* U+76 "v" */ + /* U+0076 "v" */ 0xe0, 0xf8, 0x76, 0x19, 0x86, 0x73, 0x8c, 0xc3, 0x30, 0xfc, 0x1e, 0x7, 0x81, 0xe0, - /* U+77 "w" */ + /* U+0077 "w" */ 0xe6, 0x36, 0x66, 0x66, 0x66, 0xf6, 0x6f, 0x66, 0x96, 0x69, 0x62, 0x94, 0x39, 0xc3, 0x9c, 0x39, 0xc0, - /* U+78 "x" */ + /* U+0078 "x" */ 0xe1, 0xdc, 0xe3, 0x30, 0xfc, 0x1e, 0x7, 0x81, - 0xe0, 0xfc, 0x73, 0x9c, 0x6e, 0x1c, + 0xe0, 0xfc, 0x73, 0x9c, 0xee, 0x1c, - /* U+79 "y" */ + /* U+0079 "y" */ 0xe1, 0xf8, 0x76, 0x19, 0xce, 0x73, 0x8c, 0xc3, 0xf0, 0x7c, 0x1e, 0x7, 0x80, 0xe0, 0x30, 0x1c, 0x6, 0x3, 0x80, - /* U+7A "z" */ + /* U+007A "z" */ 0xff, 0xff, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0x7f, 0xff, 0xe0, - /* U+7B "{" */ + /* U+007B "{" */ 0x3, 0x87, 0xc3, 0x81, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0xfc, 0x7e, 0x3, 0x81, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0xf, 0x81, 0xc0, - /* U+7C "|" */ + /* U+007C "|" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, - /* U+7D "}" */ + /* U+007D "}" */ 0xf0, 0x3e, 0x1, 0xc0, 0x70, 0x1c, 0x7, 0x1, 0xc0, 0x70, 0xf, 0xc3, 0xf1, 0xc0, 0x70, 0x1c, 0x7, 0x1, 0xc0, 0x70, 0xf8, 0x3c, 0x0, - /* U+7E "~" */ + /* U+007E "~" */ 0x78, 0xff, 0x3c, 0xcf, 0x3f, 0xc7, 0x80, - /* U+410 "А" */ + /* U+0410 "А" */ 0x1e, 0x7, 0x81, 0xe0, 0xfc, 0x3f, 0xc, 0xc3, 0x31, 0xce, 0x73, 0x9f, 0xe7, 0xfb, 0x87, 0xe1, 0xf0, 0x30, - /* U+411 "Б" */ + /* U+0411 "Б" */ 0xff, 0xbf, 0xee, 0x3, 0x80, 0xe0, 0x3f, 0xcf, 0xfb, 0x8f, 0xe1, 0xf8, 0x7e, 0x1f, 0x8f, 0xff, - 0xbf, 0x80, + 0xbf, 0xc0, - /* U+412 "В" */ + /* U+0412 "В" */ 0xfe, 0x3f, 0xce, 0x3b, 0x8e, 0xe3, 0xb8, 0xcf, 0xe3, 0xfc, 0xe3, 0xb8, 0x7e, 0x1f, 0x8f, 0xff, 0xbf, 0xc0, - /* U+413 "Г" */ + /* U+0413 "Г" */ 0xff, 0xff, 0xf8, 0x1c, 0xe, 0x7, 0x3, 0x81, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0xe, 0x7, 0x0, - /* U+414 "Д" */ + /* 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+415 "Е" */ + /* U+0415 "Е" */ 0xff, 0xff, 0xf8, 0x1c, 0xe, 0x7, 0x3, 0xfd, 0xfe, 0xe0, 0x70, 0x38, 0x1c, 0xf, 0xff, 0xfc, - /* U+416 "Ж" */ + /* U+0416 "Ж" */ 0xe6, 0x76, 0x66, 0x66, 0x67, 0x66, 0x36, 0xc3, 0x6c, 0x3f, 0xc3, 0x6c, 0x36, 0xc7, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x63, - /* U+417 "З" */ + /* U+0417 "З" */ 0x1f, 0xf, 0xf3, 0xc7, 0x0, 0x60, 0x1c, 0x1e, 0x3, 0xf0, 0xe, 0x0, 0xe0, 0x1f, 0x83, 0xf8, 0xf7, 0xfc, 0x3e, 0x0, - /* U+418 "И" */ + /* U+0418 "И" */ 0xc3, 0xe3, 0xf1, 0xf8, 0xfc, 0xde, 0x6f, 0x37, 0xb3, 0xd9, 0xfc, 0xfc, 0x7e, 0x3e, 0x1f, 0xc, - /* U+419 "Й" */ + /* 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+41A "К" */ + /* U+041A "К" */ 0xe1, 0xf8, 0x7e, 0x3b, 0x8e, 0xe7, 0x39, 0xcf, 0xe3, 0xf8, 0xe7, 0x39, 0xce, 0x3b, 0x8e, 0xe1, 0xf8, 0x70, - /* U+41B "Л" */ + /* U+041B "Л" */ 0x3f, 0xcf, 0xf3, 0x9c, 0xe7, 0x39, 0xce, 0x73, 0x9c, 0xe7, 0x39, 0xce, 0x73, 0x9d, 0xe7, 0xf1, 0xf8, 0x70, - /* U+41C "М" */ + /* U+041C "М" */ 0xe1, 0xf8, 0x7f, 0x3f, 0xcf, 0xd2, 0xf7, 0xbd, 0xef, 0x33, 0xc0, 0xf0, 0x3c, 0xf, 0x3, 0xc0, 0xf0, 0x30, - /* U+41D "Н" */ + /* U+041D "Н" */ 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0xff, 0xff, 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1c, - /* U+41E "О" */ + /* U+041E "О" */ 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x77, 0xf1, 0xf0, - /* U+41F "П" */ + /* U+041F "П" */ 0xff, 0xff, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1c, - /* U+420 "Р" */ + /* U+0420 "Р" */ 0xff, 0x3f, 0xee, 0x3f, 0x87, 0xe1, 0xf8, 0xff, 0xfb, 0xfc, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x38, 0x0, - /* U+421 "С" */ + /* U+0421 "С" */ 0x3f, 0x1f, 0xef, 0x3f, 0x87, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x38, 0xe, 0x1f, 0xcf, 0x7f, 0x8f, 0xc0, - /* U+422 "Т" */ + /* U+0422 "Т" */ 0xff, 0xff, 0xf0, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x38, 0xe, 0x3, 0x80, - /* U+423 "У" */ + /* U+0423 "У" */ 0xe1, 0xf8, 0x76, 0x19, 0xce, 0x33, 0x8c, 0xc3, 0xb0, 0x7c, 0x1e, 0x3, 0x80, 0xc0, 0x70, 0x1c, 0x6, 0x0, - /* U+424 "Ф" */ + /* U+0424 "Ф" */ 0xc, 0xf, 0xc7, 0xfb, 0xb7, 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0xb7, 0x7f, 0x8f, 0xc0, 0xc0, 0x30, - /* U+425 "Х" */ + /* U+0425 "Х" */ 0xe1, 0xd8, 0x67, 0x38, 0xcc, 0x3f, 0x7, 0x81, 0xe0, 0x78, 0x1e, 0xf, 0xc3, 0x31, 0xce, 0xe1, 0xf8, 0x70, - /* U+426 "Ц" */ + /* 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+427 "Ч" */ + /* U+0427 "Ч" */ 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0xce, 0xff, 0x3f, 0x81, 0xc0, 0xe0, 0x70, 0x38, 0x1c, - /* U+428 "Ш" */ + /* U+0428 "Ш" */ 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xff, 0xff, 0xf0, - /* U+429 "Щ" */ + /* 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+42A "Ъ" */ + /* U+042A "Ъ" */ 0xfc, 0xf, 0xc0, 0x1c, 0x1, 0xc0, 0x1c, 0x1, 0xfc, 0x1f, 0xe1, 0xcf, 0x1c, 0x71, 0xc7, 0x1c, - 0x71, 0xcf, 0x1f, 0xe1, 0xf8, + 0x71, 0xcf, 0x1f, 0xe1, 0xfc, - /* U+42B "Ы" */ + /* U+042B "Ы" */ 0xc0, 0xf0, 0x3c, 0xf, 0x3, 0xc0, 0xfe, 0x3f, 0xcf, 0x3b, 0xc6, 0xf1, 0xbc, 0x6f, 0x3b, 0xfc, 0xfe, 0x30, - /* U+42C "Ь" */ + /* U+042C "Ь" */ 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x3f, 0xcf, 0xfb, 0x8f, 0xe1, 0xf8, 0x7e, 0x1f, 0x8f, 0xff, 0xbf, 0x80, - /* U+42D "Э" */ + /* U+042D "Э" */ 0x3e, 0x3f, 0xb8, 0xfc, 0x70, 0x38, 0x1c, 0x7e, 0x3f, 0x3, 0x81, 0xf8, 0xfc, 0x77, 0xf1, 0xf0, - /* U+42E "Ю" */ + /* U+042E "Ю" */ 0xc7, 0xb3, 0xfc, 0xcf, 0x33, 0xcc, 0xff, 0x3f, 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xcf, 0xf1, 0xe0, - /* U+42F "Я" */ + /* U+042F "Я" */ 0x3f, 0xdf, 0xff, 0x1f, 0x87, 0xe1, 0xfc, 0x77, 0xfc, 0x7f, 0x19, 0xce, 0x73, 0x1d, 0xc7, 0x71, 0xf8, 0x70, - /* U+430 "а" */ + /* U+0430 "а" */ 0x1f, 0x1f, 0xe7, 0x1c, 0x7, 0x3f, 0xdf, 0xfe, 0x1f, 0x87, 0xe3, 0xff, 0xf3, 0xdc, - /* U+431 "б" */ + /* U+0431 "б" */ 0x1f, 0x3f, 0x9c, 0x1c, 0xe, 0xe7, 0xfb, 0x8f, 0xc7, 0xe3, 0xf1, 0xf8, 0xfc, 0x77, 0xf1, 0xf0, - /* U+432 "в" */ + /* U+0432 "в" */ 0xff, 0x3f, 0xee, 0x3b, 0x8e, 0xfe, 0x3f, 0xee, 0x1f, 0x87, 0xe1, 0xff, 0xef, 0xf0, - /* U+433 "г" */ + /* U+0433 "г" */ 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, - /* U+434 "д" */ + /* U+0434 "д" */ 0x3f, 0xc7, 0xf8, 0xe7, 0x1c, 0xe3, 0x9c, 0x73, 0x8e, 0x71, 0xce, 0x71, 0xdf, 0xff, 0xff, 0xf0, 0x7e, 0xf, 0xc1, 0xc0, - /* U+435 "е" */ + /* U+0435 "е" */ 0x3e, 0x3f, 0xb8, 0xfc, 0x7f, 0xff, 0xff, 0x81, 0xc0, 0xe3, 0xbf, 0x8f, 0x80, - /* U+436 "ж" */ + /* U+0436 "ж" */ 0xe6, 0x76, 0x66, 0x66, 0x63, 0x6c, 0x36, 0xc3, - 0xfc, 0x36, 0xc3, 0x6c, 0x66, 0x66, 0x66, 0xe6, + 0xfc, 0x36, 0xc3, 0x6e, 0x66, 0x66, 0x66, 0xe6, 0x70, - /* U+437 "з" */ + /* U+0437 "з" */ 0x3f, 0x1f, 0xfe, 0x1c, 0x7, 0x1f, 0x87, 0xe0, 0x1c, 0x7, 0xe1, 0xdf, 0xe3, 0xf0, - /* U+438 "и" */ + /* U+0438 "и" */ 0xc3, 0xe3, 0xf1, 0xf9, 0xfc, 0xde, 0xef, 0x67, 0xb3, 0xf1, 0xf8, 0xf8, 0x60, - /* U+439 "й" */ + /* U+0439 "й" */ 0x63, 0x31, 0x8f, 0x83, 0x80, 0x6, 0x1f, 0x1f, 0x8f, 0xcf, 0xe6, 0xf7, 0x7b, 0x3f, 0x9f, 0x8f, 0xc7, 0xc3, - /* U+43A "к" */ + /* U+043A "к" */ 0xe1, 0xf8, 0xee, 0x33, 0x9c, 0xfe, 0x3f, 0x8e, 0x73, 0x9c, 0xe3, 0xb8, 0x6e, 0x1c, - /* U+43B "л" */ + /* U+043B "л" */ 0x3f, 0xcf, 0xf3, 0x9c, 0xe7, 0x39, 0xce, 0x73, 0x9c, 0xe7, 0x39, 0xfc, 0x7e, 0x1c, - /* U+43C "м" */ + /* U+043C "м" */ 0xe1, 0xf8, 0x7f, 0x3f, 0xcf, 0xda, 0xf7, 0xbd, 0xef, 0x33, 0xc0, 0xf0, 0x3c, 0xc, - /* U+43D "н" */ + /* U+043D "н" */ 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3f, 0xff, 0xff, 0xc7, 0xe3, 0xf1, 0xf8, 0xe0, - /* U+43E "о" */ + /* U+043E "о" */ 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xbf, 0x8f, 0x80, - /* U+43F "п" */ + /* U+043F "п" */ 0xff, 0xff, 0xf8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xf1, 0xf8, 0xe0, - /* U+440 "р" */ + /* U+0440 "р" */ 0xee, 0x7f, 0xb8, 0xfc, 0x7e, 0x3f, 0x1f, 0x8f, 0xc7, 0xe3, 0xff, 0xbb, 0x9c, 0xe, 0x7, 0x3, 0x80, - /* U+441 "с" */ + /* U+0441 "с" */ 0x3e, 0x3f, 0xb8, 0xfc, 0x7e, 0x7, 0x3, 0x81, 0xc7, 0xe3, 0xbf, 0x8f, 0x80, - /* U+442 "т" */ + /* U+0442 "т" */ 0xff, 0xff, 0xf0, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, 0x38, 0xe, 0x3, 0x80, 0xe0, - /* U+443 "у" */ + /* U+0443 "у" */ 0xe1, 0xf8, 0x76, 0x19, 0xce, 0x73, 0x8c, 0xc3, 0xf0, 0x7c, 0x1e, 0x7, 0x80, 0xe0, 0x30, 0x1c, 0x6, 0x3, 0x80, - /* U+444 "ф" */ + /* 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+445 "х" */ + /* U+0445 "х" */ 0xe1, 0xdc, 0xe3, 0x30, 0xfc, 0x1e, 0x7, 0x81, - 0xe0, 0xfc, 0x73, 0x9c, 0x6e, 0x1c, + 0xe0, 0xfc, 0x73, 0x9c, 0xee, 0x1c, - /* U+446 "ц" */ + /* U+0446 "ц" */ 0xe3, 0xb8, 0xee, 0x3b, 0x8e, 0xe3, 0xb8, 0xee, 0x3b, 0x8e, 0xe3, 0xbf, 0xff, 0xfc, 0x7, 0x1, 0xc0, 0x70, - /* U+447 "ч" */ + /* U+0447 "ч" */ 0xe3, 0xf1, 0xf8, 0xfc, 0x7e, 0x3b, 0xfc, 0xfe, 0x7, 0x3, 0x81, 0xc0, 0xe0, - /* U+448 "ш" */ + /* U+0448 "ш" */ 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xcc, 0xf3, 0x3c, 0xcf, 0x33, 0xcc, 0xff, 0xff, 0xfc, - /* U+449 "щ" */ + /* U+0449 "щ" */ 0xcc, 0xd9, 0x9b, 0x33, 0x66, 0x6c, 0xcd, 0x99, 0xb3, 0x36, 0x66, 0xcc, 0xdf, 0xff, 0xff, 0x80, 0x30, 0x6, - /* U+44A "ъ" */ + /* U+044A "ъ" */ 0xfc, 0xf, 0xc0, 0x1c, 0x1, 0xc0, 0x1f, 0xc1, 0xfe, 0x1c, 0x71, 0xc7, 0x1c, 0x71, 0xfe, 0x1f, 0xc0, - /* U+44B "ы" */ + /* U+044B "ы" */ 0xc0, 0xf0, 0x3c, 0xf, 0x3, 0xf8, 0xff, 0x3c, - 0x6f, 0x1b, 0xc6, 0xff, 0x3f, 0x8c, + 0xef, 0x1b, 0xc6, 0xff, 0x3f, 0x8c, - /* U+44C "ь" */ + /* U+044C "ь" */ 0xe0, 0x38, 0xe, 0x3, 0x80, 0xff, 0x3f, 0xee, 0x1f, 0x87, 0xe1, 0xff, 0xef, 0xf0, - /* U+44D "э" */ + /* U+044D "э" */ 0x3e, 0x3f, 0xb8, 0xe0, 0x70, 0xf8, 0x7c, 0xf, 0xc7, 0xe7, 0xbf, 0x8f, 0x80, - /* U+44E "ю" */ + /* U+044E "ю" */ 0xc7, 0xb3, 0xfc, 0xcf, 0x33, 0xfc, 0xff, 0x3c, 0xcf, 0x33, 0xcc, 0xf3, 0xfc, 0x78, - /* U+44F "я" */ + /* U+044F "я" */ 0x3f, 0xbf, 0xf8, 0xfc, 0x7e, 0x3b, 0xfc, 0xfe, 0x77, 0x33, 0xb9, 0xf8, 0xe0, @@ -727,7 +731,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { 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, 0x0, 0xff, 0x0, 0x3, + 0xff, 0x7, 0xef, 0xf0, 0x10, 0xff, 0x0, 0x3, 0xc0, 0x0, /* U+F017 "" */ @@ -739,11 +743,11 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { 0x1, 0xff, 0xc0, 0x1f, 0xf0, 0x0, 0x70, 0x0, /* U+F024 "" */ - 0x70, 0x0, 0xf, 0x80, 0x0, 0xf8, 0x0, 0xf, + 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, 0x7f, 0xe7, 0x0, 0x78, + 0xf7, 0xff, 0xff, 0x7f, 0xff, 0xe7, 0x0, 0xf8, 0x70, 0x0, 0x7, 0x0, 0x0, 0x70, 0x0, 0x7, 0x0, 0x0, @@ -869,35 +873,35 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { 0x7f, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xb8, 0x0, 0x1, 0xfd, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0x9f, 0xbf, 0xff, 0xcf, 0xdf, 0xff, - 0xe7, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 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, - 0x7, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, + 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, - 0x7, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, + 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, - 0x7, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, + 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, - 0x7, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, + 0xf, 0xe0, 0x0, 0x7, 0xf0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0xe0, /* U+F252 "" */ @@ -933,9 +937,9 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { 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, 0x7f, + 0x0, 0x1c, 0x1f, 0x0, 0x7f, 0x3, 0xc0, 0x3f, 0xf0, 0xf0, 0x1f, 0xfc, 0x3c, 0xf, 0xfe, 0x7, - 0x87, 0xfe, 0x1, 0xe3, 0xf8, 0x0, 0x70, 0x0, + 0x87, 0xfe, 0x1, 0xe3, 0xf8, 0x0, 0x70, 0x80, 0x0, 0x10, /* U+F3FD "" */ @@ -1240,9 +1244,14 @@ static const lv_font_fmt_txt_cmap_t cmaps[] = * 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 = { - .glyph_bitmap = gylph_bitmap, +#endif + .glyph_bitmap = glyph_bitmap, .glyph_dsc = glyph_dsc, .cmaps = cmaps, .kern_dsc = NULL, @@ -1250,7 +1259,10 @@ static lv_font_fmt_txt_dsc_t font_dsc = { .cmap_num = 3, .bpp = 1, .kern_classes = 0, - .bitmap_format = 0 + .bitmap_format = 0, +#if LV_VERSION_CHECK(8, 0, 0) + .cache = &cache +#endif }; @@ -1259,7 +1271,11 @@ static lv_font_fmt_txt_dsc_t font_dsc = { *----------------*/ /*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*/ From 0045fb16b66b008c13888312b92688dcb7535a0c Mon Sep 17 00:00:00 2001 From: Neil O'Fix <69880003+nlfx@users.noreply.github.com> Date: Sat, 26 Jun 2021 18:53:32 +0000 Subject: [PATCH 48/94] SPI flash sleep if bootloader >= 1.0.0 (#322) * Retrieve and display bootloader version - Display bootloader version on System Info screen - Enable SPI flash sleep mode if bootloader version >= 1.0.0 * Wait for SPI flash to wakeup before starting OTA DFU --- src/BootloaderVersion.cpp | 30 ++++++++++++++++++--------- src/BootloaderVersion.h | 15 +++++++++----- src/components/ble/DfuService.cpp | 5 +++++ src/displayapp/screens/SystemInfo.cpp | 11 ++++++---- src/main.cpp | 4 ++++ src/systemtask/SystemTask.h | 4 ++++ 6 files changed, 50 insertions(+), 19 deletions(-) diff --git a/src/BootloaderVersion.cpp b/src/BootloaderVersion.cpp index 5eba7a1d..07a1da4e 100644 --- a/src/BootloaderVersion.cpp +++ b/src/BootloaderVersion.cpp @@ -1,26 +1,36 @@ #include +#include #include "BootloaderVersion.h" using namespace Pinetime; -// NOTE : current bootloader does not export its version to the application firmware. +// NOTE : version < 1.0.0 of bootloader does not export its version to the application firmware. -uint32_t BootloaderVersion::Major() { - return 0; +uint32_t BootloaderVersion::version = 0; +char BootloaderVersion::versionString[BootloaderVersion::VERSION_STR_LEN] = "0.0.0"; + +const uint32_t BootloaderVersion::Major() { + return (BootloaderVersion::version >> 16u) & 0xff; } -uint32_t BootloaderVersion::Minor() { - return 0; +const uint32_t BootloaderVersion::Minor() { + return (BootloaderVersion::version >> 8u) & 0xff; } -uint32_t BootloaderVersion::Patch() { - return 0; +const uint32_t BootloaderVersion::Patch() { + return BootloaderVersion::version & 0xff; } const char* BootloaderVersion::VersionString() { - return "0.0.0"; + return BootloaderVersion::versionString; } -bool BootloaderVersion::IsValid() { - return false; +const bool BootloaderVersion::IsValid() { + return BootloaderVersion::version >= 0x00010000; +} + +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()); } diff --git a/src/BootloaderVersion.h b/src/BootloaderVersion.h index c1ede0f5..f8127414 100644 --- a/src/BootloaderVersion.h +++ b/src/BootloaderVersion.h @@ -3,10 +3,15 @@ namespace Pinetime { class BootloaderVersion { public: - static uint32_t Major(); - static uint32_t Minor(); - static uint32_t Patch(); + static const uint32_t Major(); + static const uint32_t Minor(); + static const uint32_t Patch(); static const char* VersionString(); - static bool IsValid(); + static const bool IsValid(); + static void SetVersion(uint32_t v); + private: + static uint32_t version; + static constexpr size_t VERSION_STR_LEN = 12; + static char versionString[VERSION_STR_LEN]; }; -} \ No newline at end of file +} diff --git a/src/components/ble/DfuService.cpp b/src/components/ble/DfuService.cpp index cec194cc..e6bcea81 100644 --- a/src/components/ble/DfuService.cpp +++ b/src/components/ble/DfuService.cpp @@ -121,6 +121,11 @@ int DfuService::WritePacketHandler(uint16_t connectionHandle, os_mbuf* om) { 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()) { + vTaskDelay(50); // 50ms + } + dfuImage.Erase(); uint8_t data[] {16, 1, 1}; diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index 1cf895c7..60e53ad6 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -3,6 +3,7 @@ #include "../DisplayApp.h" #include "Label.h" #include "Version.h" +#include "BootloaderVersion.h" #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" #include "components/brightness/BrightnessController.h" @@ -83,17 +84,19 @@ 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\n" - "#444444 Short Ref# %s\n\n" + "#444444 Version# %ld.%ld.%ld\n" + "#444444 Short Ref# %s\n" "#444444 Build date#\n" "%s\n" - "%s\n", + "%s\n\n" + "#444444 Bootloader# %s", Version::Major(), Version::Minor(), Version::Patch(), Version::GitCommitHash(), __DATE__, - __TIME__); + __TIME__, + BootloaderVersion::VersionString()); 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(0, 5, app, label); diff --git a/src/main.cpp b/src/main.cpp index 4c2c5de8..5832a78f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -28,6 +28,7 @@ #include #include +#include "BootloaderVersion.h" #include "components/battery/BatteryController.h" #include "components/ble/BleController.h" #include "components/ble/NotificationManager.h" @@ -306,6 +307,9 @@ int main(void) { debounceTimer = xTimerCreate("debounceTimer", 200, pdFALSE, (void*) 0, DebounceTimerCallback); debounceChargeTimer = xTimerCreate("debounceTimerCharge", 200, pdFALSE, (void*) 0, DebounceTimerChargeCallback); + // retrieve version stored by bootloader + Pinetime::BootloaderVersion::SetVersion(NRF_TIMER2->CC[0]); + lvgl.Init(); systemTask.Start(); diff --git a/src/systemtask/SystemTask.h b/src/systemtask/SystemTask.h index fa6a949c..f563640c 100644 --- a/src/systemtask/SystemTask.h +++ b/src/systemtask/SystemTask.h @@ -73,6 +73,10 @@ namespace Pinetime { return nimbleController; }; + bool IsSleeping() const { + return isSleeping; + } + private: TaskHandle_t taskHandle; From f317d54218659af437d840d00fd349e7919a243f Mon Sep 17 00:00:00 2001 From: kieranc Date: Tue, 29 Jun 2021 20:20:27 +0200 Subject: [PATCH 49/94] Add PineTimeStyle watchface (#334) * PineTimeStyle * Move GPL license header * Add step count gauge - replaces heartrate in sidebar * Enable 12/24h functionality * Set step gauge outer to be white when step goal is reached * Add font source file * Move static needle_colors array to member variable * Add documentation on generating a font * Replace .ttf with Google version, add link to font page Co-authored-by: JF002 --- src/CMakeLists.txt | 4 + src/displayapp/fonts/README.md | 18 + src/displayapp/fonts/open_sans_light.c | 1261 +++++++++++++++++ src/displayapp/fonts/open_sans_light.ttf | Bin 0 -> 101696 bytes src/displayapp/screens/Clock.cpp | 14 + src/displayapp/screens/Clock.h | 1 + src/displayapp/screens/PineTimeStyle.cpp | 340 +++++ src/displayapp/screens/PineTimeStyle.h | 86 ++ .../screens/settings/SettingWatchFace.cpp | 9 + src/libs/lv_conf.h | 1 + 10 files changed, 1734 insertions(+) create mode 100644 src/displayapp/fonts/open_sans_light.c create mode 100644 src/displayapp/fonts/open_sans_light.ttf create mode 100644 src/displayapp/screens/PineTimeStyle.cpp create mode 100644 src/displayapp/screens/PineTimeStyle.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7721d6b8..aca86543 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -235,6 +235,7 @@ set(LVGL_SRC libs/lvgl/src/lv_widgets/lv_cont.h libs/lvgl/src/lv_widgets/lv_cpicker.h libs/lvgl/src/lv_widgets/lv_dropdown.h + libs/lvgl/src/lv_widgets/lv_gauge.h libs/lvgl/src/lv_widgets/lv_img.h libs/lvgl/src/lv_widgets/lv_imgbtn.h libs/lvgl/src/lv_widgets/lv_keyboard.h @@ -321,6 +322,7 @@ set(LVGL_SRC libs/lvgl/src/lv_widgets/lv_cont.c libs/lvgl/src/lv_widgets/lv_cpicker.c libs/lvgl/src/lv_widgets/lv_dropdown.c + libs/lvgl/src/lv_widgets/lv_gauge.c libs/lvgl/src/lv_widgets/lv_img.c libs/lvgl/src/lv_widgets/lv_imgbtn.c libs/lvgl/src/lv_widgets/lv_keyboard.c @@ -423,6 +425,7 @@ list(APPEND SOURCE_FILES displayapp/icons/bg_clock.c displayapp/screens/WatchFaceAnalog.cpp displayapp/screens/WatchFaceDigital.cpp + displayapp/screens/PineTimeStyle.cpp ## @@ -473,6 +476,7 @@ list(APPEND SOURCE_FILES 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 diff --git a/src/displayapp/fonts/README.md b/src/displayapp/fonts/README.md index 08427d51..13b61b8e 100644 --- a/src/displayapp/fonts/README.md +++ b/src/displayapp/fonts/README.md @@ -2,6 +2,7 @@ * [Jetbrains Mono](https://www.jetbrains.com/fr-fr/lp/mono/) * [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: @@ -14,6 +15,8 @@ * 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` * Click on Convert, and download the file `jetbrains_mono_bold_20.c` and copy it in `src/DisplayApp/Fonts` +* Add the font .c file path to src/CMakeLists.txt +* Add an LV_FONT_DECLARE line in src/libs/lv_conf.h Add new symbols: @@ -28,6 +31,21 @@ Add new symbols: static constexpr const char* newSymbol = "\xEF\x86\x85"; ``` +## Simple method to generate a font + +If you want to generate a basic font containing only numbers and letters, you can use the above settings but instead of specifying a range, simply list the characters you need in the Symbols field and leave the range blank. This is the approach used for the PineTimeStyle watchface. +This works well for fonts which will only be used to display numbers, but will fail if you try to add a colon or other punctuation. + +* Open the [LVGL font converter](https://lvgl.io/tools/fontconverter) +* Name : open_sans_light +* Size : 150 +* Bpp : 1 bit-per-pixel +* Do not enable font compression and horizontal subpixel hinting +* Load the file `open_sans_light.tff` (use the file in this repo to ensure the version matches) and specify the following symbols : `0123456789` +* Click on Convert, and download the file `open_sans_light.c` and copy it in `src/DisplayApp/Fonts` +* Add the font .c file path to src/CMakeLists.txt (search for jetbrains to find the appropriate location/format) +* Add an LV_FONT_DECLARE line in src/libs/lv_conf.h (as above) + #### Navigation font To create the navigtion.ttf I use the web app [icomoon](https://icomoon.io/app) diff --git a/src/displayapp/fonts/open_sans_light.c b/src/displayapp/fonts/open_sans_light.c new file mode 100644 index 00000000..15f0ddf6 --- /dev/null +++ b/src/displayapp/fonts/open_sans_light.c @@ -0,0 +1,1261 @@ +/******************************************************************************* + * 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) + .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*/ + diff --git a/src/displayapp/fonts/open_sans_light.ttf b/src/displayapp/fonts/open_sans_light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6580d3a169e895d914f159c060b947e36746f275 GIT binary patch literal 101696 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 Clock::WatchFaceAnalogScreen() { app, dateTimeController, batteryController, bleController, notificatioManager, settingsController); } +std::unique_ptr Clock::PineTimeStyleScreen() { + return std::make_unique(app, + dateTimeController, + batteryController, + bleController, + notificatioManager, + settingsController, + motionController); +} + /* // Examples for more watch faces std::unique_ptr Clock::WatchFaceMinimalScreen() { diff --git a/src/displayapp/screens/Clock.h b/src/displayapp/screens/Clock.h index 174c73b7..a48feea1 100644 --- a/src/displayapp/screens/Clock.h +++ b/src/displayapp/screens/Clock.h @@ -50,6 +50,7 @@ namespace Pinetime { std::unique_ptr screen; std::unique_ptr WatchFaceDigitalScreen(); std::unique_ptr WatchFaceAnalogScreen(); + std::unique_ptr PineTimeStyleScreen(); // Examples for more watch faces // std::unique_ptr WatchFaceMinimalScreen(); diff --git a/src/displayapp/screens/PineTimeStyle.cpp b/src/displayapp/screens/PineTimeStyle.cpp new file mode 100644 index 00000000..678099c0 --- /dev/null +++ b/src/displayapp/screens/PineTimeStyle.cpp @@ -0,0 +1,340 @@ +/* + * This file is part of the Infinitime distribution (https://github.com/JF002/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 "PineTimeStyle.h" +#include +#include +#include +#include "BatteryIcon.h" +#include "BleIcon.h" +#include "NotificationIcon.h" +#include "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.h" + +using namespace Pinetime::Applications::Screens; + +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} { + + /* This sets the watchface number to return to after leaving the menu */ + settingsController.SetClockFace(2); + + displayedChar[0] = 0; + displayedChar[1] = 0; + displayedChar[2] = 0; + displayedChar[3] = 0; + displayedChar[4] = 0; + + /* 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, lv_color_hex(0x000000)); + 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, 5, 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, lv_color_hex(0x008080)); + lv_label_set_text(timeDD1, "12"); + 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, lv_color_hex(0x008080)); + lv_label_set_text(timeDD2, "34"); + 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, lv_color_hex(0x008080)); + lv_obj_set_style_local_text_line_space(timeAMPM, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, -3); + lv_label_set_text(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, lv_color_hex(0x008080)); + 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_hex(0x000000)); + lv_label_set_text(batteryIcon, Symbols::batteryFull); + lv_obj_align(batteryIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 2); + + 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(0x000000)); + lv_obj_align(batteryPlug, 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)); + lv_obj_align(bleIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 25); + + 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_obj_align(notificationIcon, sidebar, LV_ALIGN_IN_TOP_MID, 0, 40); + + /* 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_hex(0x000000)); + 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_hex(0xffffff)); + 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_hex(0x000000)); + 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_hex(0x000000)); + 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_hex(0x000000)); + 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_hex(0x000000)); + 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_hex(0x000000)); + lv_label_set_text(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_hex(0x000000)); + lv_label_set_text(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_hex(0x000000)); + lv_label_set_text(dateMonth, "MAR"); + lv_obj_align(dateMonth, sidebar, LV_ALIGN_CENTER, 0, 32); + + // Step count gauge + 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, (settingsController.GetStepsGoal() / 100)); + lv_gauge_set_range(stepGauge, 0, (settingsController.GetStepsGoal() / 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, 4); + 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(backgroundLabel, ""); +} + +PineTimeStyle::~PineTimeStyle() { + lv_obj_clean(lv_scr_act()); +} + +bool PineTimeStyle::Refresh() { + batteryPercentRemaining = batteryController.PercentRemaining(); + if (batteryPercentRemaining.IsUpdated()) { + auto batteryPercent = batteryPercentRemaining.Get(); + if (batteryController.IsCharging()) { + auto isCharging = batteryController.IsCharging() || batteryController.IsPowerPresent(); + lv_label_set_text(batteryPlug, BatteryIcon::GetPlugIcon(isCharging)); + lv_obj_realign(batteryPlug); + lv_label_set_text(batteryIcon, ""); + } else { + lv_label_set_text(batteryIcon, BatteryIcon::GetBatteryIcon(batteryPercent)); + lv_label_set_text(batteryPlug, ""); + } + } + + bleState = bleController.IsConnected(); + if (bleState.IsUpdated()) { + if (bleState.Get() == true) { + lv_label_set_text(bleIcon, BleIcon::GetIcon(true)); + lv_obj_realign(bleIcon); + } else { + lv_label_set_text(bleIcon, BleIcon::GetIcon(false)); + } + } + + notificationState = notificatioManager.AreNewNotificationsAvailable(); + if (notificationState.IsUpdated()) { + if (notificationState.Get() == true) { + lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(true)); + lv_obj_realign(notificationIcon); + } else { + lv_label_set_text(notificationIcon, NotificationIcon::GetIcon(false)); + } + } + + 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 = (int) yearMonthDay.year(); + auto month = static_cast((unsigned) yearMonthDay.month()); + auto day = (unsigned) yearMonthDay.day(); + auto dayOfWeek = static_cast(date::weekday(yearMonthDay).iso_encoding()); + + int hour = time.hours().count(); + auto minute = time.minutes().count(); + + char minutesChar[3]; + sprintf(minutesChar, "%02d", static_cast(minute)); + + char hoursChar[3]; + char ampmChar[5]; + + if (settingsController.GetClockType() == Controllers::Settings::ClockType::H24) { + sprintf(hoursChar, "%02d", hour); + } else { + if (hour == 0 && hour != 12) { + hour = 12; + sprintf(ampmChar, "A\nM"); + } else if (hour == 12 && hour != 0) { + hour = 12; + sprintf(ampmChar, "P\nM"); + } else if (hour < 12 && hour != 0) { + sprintf(ampmChar, "A\nM"); + } else if (hour > 12 && hour != 0) { + hour = hour - 12; + sprintf(ampmChar, "P\nM"); + } + sprintf(hoursChar, "%02d", hour); + } + + if (hoursChar[0] != displayedChar[0] || hoursChar[1] != displayedChar[1] || minutesChar[0] != displayedChar[2] || + minutesChar[1] != displayedChar[3]) { + displayedChar[0] = hoursChar[0]; + displayedChar[1] = hoursChar[1]; + displayedChar[2] = minutesChar[0]; + displayedChar[3] = minutesChar[1]; + + char hourStr[3]; + char minStr[3]; + + if (settingsController.GetClockType() == Controllers::Settings::ClockType::H12) { + lv_label_set_text(timeAMPM, ampmChar); + } + + /* Display the time as 2 pairs of digits */ + sprintf(hourStr, "%c%c", hoursChar[0], hoursChar[1]); + lv_label_set_text(timeDD1, hourStr); + + sprintf(minStr, "%c%c", minutesChar[0], minutesChar[1]); + lv_label_set_text(timeDD2, minStr); + } + + if ((year != currentYear) || (month != currentMonth) || (dayOfWeek != currentDayOfWeek) || (day != currentDay)) { + char dayOfWeekStr[4]; + char dayStr[3]; + char monthStr[4]; + + sprintf(dayOfWeekStr, "%s", dateTimeController.DayOfWeekShortToString()); + sprintf(dayStr, "%d", day); + sprintf(monthStr, "%s", dateTimeController.MonthShortToString()); + + lv_label_set_text(dateDayOfWeek, dayOfWeekStr); + lv_label_set_text(dateDay, dayStr); + lv_obj_realign(dateDay); + lv_label_set_text(dateMonth, monthStr); + + 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() / 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); + } + } + + return running; +} \ No newline at end of file diff --git a/src/displayapp/screens/PineTimeStyle.h b/src/displayapp/screens/PineTimeStyle.h new file mode 100644 index 00000000..70794cc5 --- /dev/null +++ b/src/displayapp/screens/PineTimeStyle.h @@ -0,0 +1,86 @@ +#pragma once + +#include +#include +#include +#include +#include "Screen.h" +#include "ScreenList.h" +#include "components/datetime/DateTimeController.h" + +namespace Pinetime { + namespace Controllers { + class Settings; + class Battery; + class Ble; + class NotificationManager; + class HeartRateController; + } + + 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 Refresh() override; + + void OnObjectEvent(lv_obj_t* pObj, lv_event_t i); + + private: + char displayedChar[5]; + + uint16_t currentYear = 1970; + Pinetime::Controllers::DateTime::Months currentMonth = Pinetime::Controllers::DateTime::Months::Unknown; + Pinetime::Controllers::DateTime::Days currentDayOfWeek = Pinetime::Controllers::DateTime::Days::Unknown; + uint8_t currentDay = 0; + + DirtyValue batteryPercentRemaining {}; + DirtyValue bleState {}; + DirtyValue> currentDateTime {}; + DirtyValue motionSensorOk {}; + DirtyValue stepCount {}; + DirtyValue notificationState {}; + + 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* batteryPlug; + 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* heartbeatIcon; + lv_obj_t* heartbeatValue; + lv_obj_t* heartbeatBpm; + lv_obj_t* notificationIcon; + lv_obj_t* stepGauge; + lv_color_t needle_colors[1]; + + Controllers::DateTime& dateTimeController; + Controllers::Battery& batteryController; + Controllers::Ble& bleController; + Controllers::NotificationManager& notificatioManager; + Controllers::Settings& settingsController; + Controllers::MotionController& motionController; + }; + } + } +} diff --git a/src/displayapp/screens/settings/SettingWatchFace.cpp b/src/displayapp/screens/settings/SettingWatchFace.cpp index 457cebf6..3e73489d 100644 --- a/src/displayapp/screens/settings/SettingWatchFace.cpp +++ b/src/displayapp/screens/settings/SettingWatchFace.cpp @@ -58,6 +58,15 @@ SettingWatchFace::SettingWatchFace(Pinetime::Applications::DisplayApp* app, Pine lv_checkbox_set_checked(cbOption[optionsTotal], true); } + optionsTotal++; + cbOption[optionsTotal] = lv_checkbox_create(container1, nullptr); + lv_checkbox_set_text_static(cbOption[optionsTotal], " PineTimeStyle"); + cbOption[optionsTotal]->user_data = this; + lv_obj_set_event_cb(cbOption[optionsTotal], event_handler); + if (settingsController.GetClockFace() == 2) { + lv_checkbox_set_checked(cbOption[optionsTotal], true); + } + optionsTotal++; } diff --git a/src/libs/lv_conf.h b/src/libs/lv_conf.h index 761baba2..a03a4833 100644 --- a/src/libs/lv_conf.h +++ b/src/libs/lv_conf.h @@ -417,6 +417,7 @@ typedef void* lv_indev_drv_user_data_t; /*Type of user data in the in LV_FONT_DECLARE(jetbrains_mono_extrabold_compressed) \ LV_FONT_DECLARE(jetbrains_mono_42) \ LV_FONT_DECLARE(jetbrains_mono_76) \ + LV_FONT_DECLARE(open_sans_light) \ LV_FONT_DECLARE(lv_font_sys_48) /* Enable it if you have fonts with a lot of characters. From 2f479e5fc7688ae47e99c0f4aead87c9cdc29123 Mon Sep 17 00:00:00 2001 From: Avamander Date: Fri, 25 Jun 2021 01:07:40 +0300 Subject: [PATCH 50/94] Fixed a bunch of format specifiers --- src/displayapp/screens/Steps.cpp | 6 +++--- src/displayapp/screens/SystemInfo.cpp | 4 ++-- src/displayapp/screens/Timer.cpp | 6 +++--- src/displayapp/screens/settings/SettingSteps.cpp | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/displayapp/screens/Steps.cpp b/src/displayapp/screens/Steps.cpp index b485c975..cc78813f 100644 --- a/src/displayapp/screens/Steps.cpp +++ b/src/displayapp/screens/Steps.cpp @@ -30,8 +30,8 @@ Steps::Steps( lSteps = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(lSteps, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, lv_color_hex(0x00FF00)); - lv_obj_set_style_local_text_font(lSteps, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); - lv_label_set_text_fmt(lSteps, "%li", stepsCount); + lv_obj_set_style_local_text_font(lSteps, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); + lv_label_set_text_fmt(lSteps, "%li", stepsCount); lv_obj_align(lSteps, nullptr, LV_ALIGN_CENTER, 0, -20); lv_obj_t * lstepsL = lv_label_create(lv_scr_act(), nullptr); @@ -41,7 +41,7 @@ Steps::Steps( lv_obj_t * lstepsGoal = lv_label_create(lv_scr_act(), nullptr); lv_obj_set_style_local_text_color(lstepsGoal, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_CYAN); - lv_label_set_text_fmt(lstepsGoal,"Goal\n%i", settingsController.GetStepsGoal()); + lv_label_set_text_fmt(lstepsGoal, "Goal\n%lu", settingsController.GetStepsGoal()); lv_label_set_align(lstepsGoal, LV_LABEL_ALIGN_CENTER); lv_obj_align(lstepsGoal, lSteps, LV_ALIGN_OUT_BOTTOM_MID, 0, 60); diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index 60e53ad6..f70b67fd 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -192,11 +192,11 @@ std::unique_ptr SystemInfo::CreateScreen3() { "\n" "#444444 LVGL Memory#\n" " #444444 used# %d (%d%%)\n" - " #444444 max used# %d\n" + " #444444 max used# %lu\n" " #444444 frag# %d%%\n" " #444444 free# %d" "\n" - "#444444 Steps# %li", + "#444444 Steps# %i", bleAddr[5], bleAddr[4], bleAddr[3], diff --git a/src/displayapp/screens/Timer.cpp b/src/displayapp/screens/Timer.cpp index 260a17ef..99e979ba 100644 --- a/src/displayapp/screens/Timer.cpp +++ b/src/displayapp/screens/Timer.cpp @@ -63,8 +63,8 @@ Timer::Timer(DisplayApp* app, Controllers::TimerController& timerController) lv_obj_set_style_local_text_color(time, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_GRAY); uint32_t seconds = timerController.GetTimeRemaining() / 1000; - lv_label_set_text_fmt(time, "%02d:%02d", seconds / 60, seconds % 60); - + 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); btnPlayPause = lv_btn_create(lv_scr_act(), nullptr); @@ -90,7 +90,7 @@ Timer::~Timer() { bool Timer::Refresh() { if (timerController.IsRunning()) { uint32_t seconds = timerController.GetTimeRemaining() / 1000; - lv_label_set_text_fmt(time, "%02d:%02d", seconds / 60, seconds % 60); + lv_label_set_text_fmt(time, "%02lu:%02lu", seconds / 60, seconds % 60); } return running; } diff --git a/src/displayapp/screens/settings/SettingSteps.cpp b/src/displayapp/screens/settings/SettingSteps.cpp index b7c024f1..faa843e6 100644 --- a/src/displayapp/screens/settings/SettingSteps.cpp +++ b/src/displayapp/screens/settings/SettingSteps.cpp @@ -45,7 +45,7 @@ SettingSteps::SettingSteps( stepValue = lv_label_create(lv_scr_act(), NULL); lv_obj_set_style_local_text_font(stepValue, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &jetbrains_mono_42); - lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); + lv_label_set_text_fmt(stepValue, "%lu", settingsController.GetStepsGoal()); lv_label_set_align(stepValue, LV_LABEL_ALIGN_CENTER); lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); @@ -81,7 +81,7 @@ void SettingSteps::UpdateSelected(lv_obj_t *object, lv_event_t event) { value += 1000; if ( value <= 500000 ) { settingsController.SetStepsGoal(value); - lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); + lv_label_set_text_fmt(stepValue, "%lu", settingsController.GetStepsGoal()); lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); } } @@ -90,7 +90,7 @@ void SettingSteps::UpdateSelected(lv_obj_t *object, lv_event_t event) { value -= 1000; if ( value >= 1000 ) { settingsController.SetStepsGoal(value); - lv_label_set_text_fmt(stepValue,"%i", settingsController.GetStepsGoal()); + lv_label_set_text_fmt(stepValue, "%lu", settingsController.GetStepsGoal()); lv_obj_align(stepValue, lv_scr_act(), LV_ALIGN_CENTER, 0, -10); } } From bdb5965f1a3432a4f24b5fc566973bf4ab811b08 Mon Sep 17 00:00:00 2001 From: Avamander Date: Fri, 25 Jun 2021 00:40:55 +0300 Subject: [PATCH 51/94] static_cast cleanup --- src/components/battery/BatteryController.cpp | 2 +- src/displayapp/screens/SystemInfo.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/battery/BatteryController.cpp b/src/components/battery/BatteryController.cpp index bc146457..b153b980 100644 --- a/src/components/battery/BatteryController.cpp +++ b/src/components/battery/BatteryController.cpp @@ -14,7 +14,7 @@ Battery::Battery() { } void Battery::Init() { - nrf_gpio_cfg_input(chargingPin, (nrf_gpio_pin_pull_t) GPIO_PIN_CNF_PULL_Pullup); + nrf_gpio_cfg_input(chargingPin, static_cast GPIO_PIN_CNF_PULL_Pullup); } void Battery::Update() { diff --git a/src/displayapp/screens/SystemInfo.cpp b/src/displayapp/screens/SystemInfo.cpp index f70b67fd..1e90bf40 100644 --- a/src/displayapp/screens/SystemInfo.cpp +++ b/src/displayapp/screens/SystemInfo.cpp @@ -203,11 +203,11 @@ std::unique_ptr SystemInfo::CreateScreen3() { bleAddr[2], bleAddr[1], bleAddr[0], - (int) mon.total_size - mon.free_size, + static_cast(mon.total_size - mon.free_size), mon.used_pct, mon.max_used, mon.frag_pct, - (int) mon.free_biggest_size, + static_cast(mon.free_biggest_size), 0); lv_obj_align(label, lv_scr_act(), LV_ALIGN_CENTER, 0, 0); return std::make_unique(2, 5, app, label); From 69894853acdbae83f3a04da976af0a5794046742 Mon Sep 17 00:00:00 2001 From: Avamander Date: Fri, 25 Jun 2021 00:39:15 +0300 Subject: [PATCH 52/94] Improved CLion configuration --- .idea/codeStyles/Project.xml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 7bdfbcb1..9c99b664 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -12,6 +12,29 @@