diff --git a/src/Defines_GSR.h b/src/Defines_GSR.h index 74f162d..6e2e478 100644 --- a/src/Defines_GSR.h +++ b/src/Defines_GSR.h @@ -10,9 +10,9 @@ // WiFi #define WiFi_AP_SSID "Watchy Connect" #define WiFi_AP_PSWD "Watchy123" -#define WiFi_AP_HIDE false -#define WiFi_AP_MAXC 4 -#define WiFi_SSID_MAX 32 +#define WiFi_AP_HIDE false // Hide "WiFi_AP_SSID" so it doesn't show up in the normal scan list. IS NOT A SECURITY METHOD! +#define WiFi_AP_MAXC 4 // Maximum user connections (default is 4). +#define WiFi_SSID_MAX 32 // Do not change these two values. #define WiFi_PASS_MAX 63 // Use instead of Watchy Connect (if necessary) #define WiFi_DEF_SSID "" @@ -36,11 +36,8 @@ #define MenuWidth 200 #define MenuHeight 83 -// BMA For Tilt/DTap -#define BMA432_INT1_PIN 14 -#define BMA432_INT2_PIN 12 -#define BMA432_INT1_MASK (1< WatchyGSR::display(GxEPD2_154_D67(CS, DC, RESET, BUSY)); +RTC_DATA_ATTR StableBMA SBMA; +GxEPD2_BW WatchyGSR::display(GxEPD2_154_D67(EPD_CS, EPD_DC, EPD_RESET, EPD_BUSY)); volatile uint8_t Button; @@ -286,6 +286,7 @@ void WatchyGSR::init(String datetime){ UpdateClock(); detectBattery(); UpdateDisp=Showing(); + InsertOnMinute(); break; case ESP_SLEEP_WAKEUP_EXT1: //button Press RefreshCPU(CPUDEF); @@ -298,24 +299,26 @@ void WatchyGSR::init(String datetime){ if (Options.SleepMode == 0) Options.SleepMode = 2; // Do this to avoid someone accidentally not setting this before usage. UpdateClock(); // Make sure these are done during times when it won't. Darkness.Woke=true; Updates.Tapped=true; Darkness.Last=millis(); UpdateDisp = true; // Update Screen to new state. - }else if (Button == 6){ // Wrist. + }else if (Button == 6 && !WatchTime.BedTime){ // Wrist. UpdateClock(); // Make sure these are done during times when it won't. Darkness.Woke=true; Darkness.Last=millis(); UpdateDisp = true; // Do this anyways, always. } } - InsertOnMinute(); + SRTC.resetWake(); break; default: //reset SRTC.init(); initZeros(); setupDefaults(); Rebooted=true; + Darkness.Woke=true; _bmaConfig(); UpdateUTC(); if (OkNVS(GName)) B = NVS.getString(GTZ,S); OP.setCurrentPOSIX(S); RetrieveSettings(); RefreshCPU(CPUDEF); + initWatchFaceStyle(); WatchTime.WatchyRTC = esp_timer_get_time() + ((60 - WatchTime.UTC.Second) * 1000000); WatchTime.EPSMS = (millis() + (1000 * (60 - WatchTime.UTC.Second))); UpdateClock(); @@ -330,7 +333,7 @@ void WatchyGSR::init(String datetime){ } - if ((Battery.Last > LowBattery || Button != 0 || Updates.Tapped) && !(Options.SleepStyle == 4 && Darkness.Went && !Updates.Tapped)){ + if ((Battery.Last > LowBattery || Button != 0 || Updates.Tapped || Darkness.Woke) && !(Options.SleepStyle == 4 && Darkness.Went && !Updates.Tapped)){ //Init interrupts. attachInterrupt(digitalPinToInterrupt(MENU_BTN_PIN), std::bind(&WatchyGSR::handleInterrupt,this), HIGH); attachInterrupt(digitalPinToInterrupt(BACK_BTN_PIN), std::bind(&WatchyGSR::handleInterrupt,this), HIGH); @@ -340,10 +343,10 @@ void WatchyGSR::init(String datetime){ // Sometimes BMA crashes - simply try to reinitialize bma... - if (sensor.getErrorCode() != 0) { - sensor.shutDown(); - sensor.wakeUp(); - sensor.softReset(); + if (SBMA.getErrorCode() != 0) { + SBMA.shutDown(); + SBMA.wakeUp(); + SBMA.softReset(); _bmaConfig(); } @@ -364,10 +367,10 @@ void WatchyGSR::init(String datetime){ while (ActiveMode == true) { // Here, we hijack the init and LOOP until the NTP is done, watching for the proper time when we *SHOULD* update the screen to keep time with everything. Since=millis(); ManageTime(); // Handle Time method. - Up=IsUp(); + Up=SBMA.IsUp(); // Wrist Tilt delay, keep screen on during this until you put your wrist down. if (Darkness.Woke && Up) Darkness.Last = millis(); - if ((Options.SleepStyle == 1 || Options.SleepStyle > 2) && Darkness.Went && Up) { Darkness.Last = millis(); Darkness.Woke = true; UpdateDisp=Showing(); } + if ((Options.SleepStyle == 1 || Options.SleepStyle > 2) && Darkness.Went && Up && !WatchTime.BedTime) { Darkness.Last = millis(); Darkness.Woke = true; UpdateDisp=Showing(); } processWiFiRequest(); // Process any WiFi requests. if (!Sensitive){ if (currentWiFi() == WL_CONNECTED && NTPData.State == 0 && !OTAUpdate && !WatchyAPOn && !NTPData.TimeTest) InsertWiFi(); @@ -679,16 +682,12 @@ void WatchyGSR::drawWatchFace(){ InsertBitmap(); display.setTextColor(ForeColor()); - if (!(OTAUpdate || WatchyAPOn || (Menu.Item == MENU_TOFF && Menu.SubItem == 2))){ - drawTime(); - drawDay(); - drawYear(); - } - if (GuiMode == WATCHON) drawDate(); - else if (GuiMode == MENUON) drawMenu(); + drawWatchFaceStyle(); + drawChargeMe(); // Show WiFi/AP/TZ/NTP if in progress. drawStatus(); + if (GuiMode == MENUON) drawMenu(); UpdateDisp = false; } @@ -726,8 +725,7 @@ void WatchyGSR::drawMenu(){ uint16_t w, h; String O, S; - display.setFont(&aAntiCorona12pt7b); - //display.fillRect(0, Design.Menu.Top, MenuWidth, MenuHeight, BackColor()); + display.setFont(Design.Menu.Font); display.drawBitmap(0, Design.Menu.Top, (Menu.Style == MENU_INOPTIONS) ? OptionsMenuBackground : MenuBackground, MenuWidth, MenuHeight, ForeColor(), BackColor()); display.setTextColor(Options.LightMode && Menu.Style != MENU_INNORMAL ? GxEPD_WHITE : GxEPD_BLACK); switch (Menu.Item){ @@ -778,6 +776,9 @@ void WatchyGSR::drawMenu(){ case MENU_TIMEUP: O = "Elapsed Timer"; break; + case MENU_STYL: + O = "Watch Style"; + break; case MENU_DISP: O = "Display Style"; break; @@ -869,16 +870,16 @@ void WatchyGSR::drawMenu(){ break; } } - display.getTextBounds(O, 0, Design.Menu.Header, &x1, &y1, &w, &h); + display.getTextBounds(O, 0, Design.Menu.Header + Design.Menu.Top, &x1, &y1, &w, &h); w = (196 - w) /2; - display.setCursor(w + 2, Design.Menu.Header); + display.setCursor(w + 2, Design.Menu.Header + Design.Menu.Top); display.print(O); display.setTextColor(GxEPD_BLACK); // Only show menu in Light mode if (Menu.Item == MENU_STEPS){ //Steps switch (Menu.SubItem){ case 0: // Steps. S = ""; if (Steps.Yesterday > 0) S = " (" + MakeSteps(Steps.Yesterday) + ")"; - O = MakeSteps(sensor.getCounter()) + S; + O = MakeSteps(SBMA.getCounter()) + S; break; case 1: // Hour. O="[" + MakeHour(Steps.Hour) + "]:" + MakeMinutes(Steps.Minutes) + MakeTOD(Steps.Hour, true); @@ -988,6 +989,15 @@ void WatchyGSR::drawMenu(){ } }else if (Menu.Item == MENU_OPTIONS){ // Options Menu O = "MENU to Enter"; + }else if (Menu.Item == MENU_STYL){ // Switch Watch Style + switch (Options.WatchFaceStyle){ + case 1: + O = "Ballsy"; + break; + default: + O = "Original"; + break; + } }else if (Menu.Item == MENU_DISP){ // Switch Mode if (Options.LightMode){ O = "Light"; @@ -1152,9 +1162,9 @@ void WatchyGSR::drawMenu(){ } if (O > ""){ - display.getTextBounds(O, 0, Design.Menu.Data, &x1, &y1, &w, &h); + display.getTextBounds(O, 0, Design.Menu.Data + Design.Menu.Top, &x1, &y1, &w, &h); w = (196 - w) /2; - display.setCursor(w + 2, Design.Menu.Data); + display.setCursor(w + 2, Design.Menu.Data + Design.Menu.Top); display.print(O); } } @@ -1192,12 +1202,13 @@ void WatchyGSR::drawData(String dData, byte Left, byte Bottom, WatchyGSR::DesOps void WatchyGSR::deepSleep(){ uint8_t I, N, D; - bool BatOk = (Battery.Last == 0 || Battery.Last > LowBattery); - bool BT = (Options.SleepStyle == 2 && BedTime()); - bool B = (((Options.SleepStyle == 1 || Options.SleepStyle > 2) || BT) && BatOk); - bool DM; + bool BatOk, BT,B, DM; + UpdateUTC(); UpdateClock(); + BatOk = (Battery.Last == 0 || Battery.Last > LowBattery); + BT = (Options.SleepStyle == 2 && WatchTime.BedTime); + B = (((Options.SleepStyle == 1 || Options.SleepStyle > 2) || BT) && BatOk); - UpdateUTC(); UpdateClock(); UpdateBMA(); GoDark(); + UpdateBMA(); GoDark(); DM = (Darkness.Went && !TimerDown.Active); D = WatchTime.Local.Wday + 1; @@ -1212,8 +1223,8 @@ void WatchyGSR::deepSleep(){ if (Options.NeedsSaving) RecordSettings(); DisplaySleep(); for(I = 0; I < 40; I++) { pinMode(I, INPUT); } - esp_sleep_enable_ext1_wakeup((B ? (BMA432_INT1_MASK | BMA432_INT2_MASK) : 0) | BTN_PIN_MASK, ESP_EXT1_WAKEUP_ANY_HIGH); //enable deep sleep wake on button press ... |ACC_INT_MASK - esp_sleep_enable_ext0_wakeup(RTC_PIN, 0); //enable deep sleep wake on RTC interrupt + esp_sleep_enable_ext1_wakeup((B ? SBMA.WakeMask() : 0) | BTN_PIN_MASK, ESP_EXT1_WAKEUP_ANY_HIGH); //enable deep sleep wake on button press ... |ACC_INT_MASK + esp_sleep_enable_ext0_wakeup(RTC_INT_PIN, 0); //enable deep sleep wake on RTC interrupt if (DM) SRTC.atMinuteWake(N % 60, WatchTime.Local.Hour, D); else SRTC.nextMinuteWake(); esp_deep_sleep_start(); @@ -1453,12 +1464,12 @@ void WatchyGSR::setStatus(String Status){ void WatchyGSR::VibeTo(bool Mode){ if (Mode != VibeMode){ if (Mode){ - sensor.enableFeature(BMA423_WAKEUP, false); + SBMA.enableFeature(BMA423_WAKEUP, false); pinMode(VIB_MOTOR_PIN, OUTPUT); digitalWrite(VIB_MOTOR_PIN, true); }else{ digitalWrite(VIB_MOTOR_PIN, false); - sensor.enableFeature(BMA423_WAKEUP,(Options.SleepStyle > 2 && BedTime())); + SBMA.enableFeature(BMA423_WAKEUP,(Options.SleepStyle == 2 && WatchTime.BedTime) || (Options.SleepStyle > 2)); } VibeMode = Mode; } @@ -1470,8 +1481,8 @@ void WatchyGSR::handleButtonPress(uint8_t Pressed){ if (Darkness.Went && Options.SleepStyle == 4 && !WatchTime.DeadRTC && !Updates.Tapped) return; // No buttons unless a tapped happened. if (!UpRight()) return; // Don't do buttons if not upright. - if (LastButton > 0 && (millis() - LastButton) < KEYPAUSE) return; - if (Darkness.Went) { Darkness.Woke=true; Darkness.Last=millis(); UpdateClock(); UpdateDisp=true; return; } // Don't do the button, just exit. + if (Pressed < 5 && LastButton > 0 && (millis() - LastButton) < KEYPAUSE) return; + if (Darkness.Went) { Darkness.Woke=true; Darkness.Last=millis(); UpdateUTC(); UpdateClock(); UpdateDisp=true; return; } // Don't do the button, just exit. if ((NTPData.TimeTest || OTAUpdate) && (Pressed == 3 || Pressed == 4)) return; // Up/Down don't work in these modes. switch (Pressed){ @@ -1483,7 +1494,7 @@ void WatchyGSR::handleButtonPress(uint8_t Pressed){ SetTurbo(); }else if (GuiMode == MENUON){ if (Menu.Item == MENU_OPTIONS && Menu.SubItem == 0){ // Options - Menu.Item = MENU_DISP; + Menu.Item = MENU_STYL; Menu.Style = MENU_INOPTIONS; DoHaptic = true; UpdateDisp = true; // Quick Update. @@ -1496,7 +1507,7 @@ void WatchyGSR::handleButtonPress(uint8_t Pressed){ SetTurbo(); }else if (Menu.Item == MENU_STEPS){ // Steps if (Menu.SubItem == 4){ - sensor.resetStepCounter(); + SBMA.resetStepCounter(); Menu.SubItem = 0; DoHaptic = true; UpdateDisp = true; // Quick Update. @@ -1638,13 +1649,20 @@ void WatchyGSR::handleButtonPress(uint8_t Pressed){ NTPData.UpdateUTC = true; } GuiMode = WATCHON; - Menu.Item = MENU_DISP; + Menu.Item = MENU_STYL; Menu.SubItem = 0; DoHaptic = true; UpdateDisp = true; // Quick Update. SetTurbo(); AskForWiFi(); } + }else if (Menu.Item == MENU_STYL){ // Switch Watch Face + Options.WatchFaceStyle = roller(Options.WatchFaceStyle + 1,0,MaxStyles); + initWatchFaceStyle(); + Options.NeedsSaving = true; + DoHaptic = true; + UpdateDisp = true; // Quick Update. + SetTurbo(); }else if (Menu.Item == MENU_DISP){ // Switch Mode Options.LightMode = !Options.LightMode; Options.NeedsSaving = true; @@ -2015,7 +2033,7 @@ void WatchyGSR::handleButtonPress(uint8_t Pressed){ return; }else{ if (Menu.Style == MENU_INOPTIONS){ - Menu.Item = roller(Menu.Item - 1, MENU_DISP, (NTPData.State > 0 || WatchyAPOn || OTAUpdate || Battery.Last < MinBattery) ? MENU_TRBL : MENU_OTAM); + Menu.Item = roller(Menu.Item - 1, MENU_STYL, (NTPData.State > 0 || WatchyAPOn || OTAUpdate || Battery.Last < MinBattery) ? MENU_TRBL : MENU_OTAM); }else if (Menu.Style == MENU_INALARMS){ Menu.Item = roller(Menu.Item - 1, MENU_ALARM1, MENU_TONES); }else if (Menu.Style == MENU_INTIMERS){ @@ -2193,7 +2211,7 @@ void WatchyGSR::handleButtonPress(uint8_t Pressed){ return; }else{ if (Menu.Style == MENU_INOPTIONS){ - Menu.Item = roller(Menu.Item + 1, MENU_DISP, (NTPData.State > 0 || WatchyAPOn || OTAUpdate || Battery.Last < MinBattery) ? MENU_TRBL : MENU_OTAM); + Menu.Item = roller(Menu.Item + 1, MENU_STYL, (NTPData.State > 0 || WatchyAPOn || OTAUpdate || Battery.Last < MinBattery) ? MENU_TRBL : MENU_OTAM); }else if (Menu.Style == MENU_INALARMS){ Menu.Item = roller(Menu.Item + 1, MENU_ALARM1, MENU_TONES); }else if (Menu.Style == MENU_INTIMERS){ @@ -2233,6 +2251,8 @@ void WatchyGSR::UpdateClock(){ WatchTime.Local.Day = TM->tm_mday; WatchTime.Local.Month = TM->tm_mon + 1; WatchTime.Local.Year = TM->tm_year; + if (Options.SleepEnd > Options.SleepStart) WatchTime.BedTime = (WatchTime.Local.Hour >= Options.SleepStart && WatchTime.Local.Hour < Options.SleepEnd); + else WatchTime.BedTime = (WatchTime.Local.Hour >= Options.SleepStart || WatchTime.Local.Hour < Options.SleepEnd); CalculateTones(); monitorSteps(); // Moved here for accuracy during Deep Sleep. } @@ -2296,109 +2316,33 @@ void WatchyGSR::ManageTime(){ void WatchyGSR::_bmaConfig() { - if (sensor.begin(_readRegister, _writeRegister, delay) == false) { + if (SBMA.begin(_readRegister, _writeRegister, delay, SRTC.getType()) == false) { //fail to init BMA return; } - // Accel parameter structure - Acfg cfg; - /*! - Output data rate in Hz, Optional parameters: - - BMA4_OUTPUT_DATA_RATE_0_78HZ - - BMA4_OUTPUT_DATA_RATE_1_56HZ - - BMA4_OUTPUT_DATA_RATE_3_12HZ - - BMA4_OUTPUT_DATA_RATE_6_25HZ - - BMA4_OUTPUT_DATA_RATE_12_5HZ - - BMA4_OUTPUT_DATA_RATE_25HZ - - BMA4_OUTPUT_DATA_RATE_50HZ - - BMA4_OUTPUT_DATA_RATE_100HZ - - BMA4_OUTPUT_DATA_RATE_200HZ - - BMA4_OUTPUT_DATA_RATE_400HZ - - BMA4_OUTPUT_DATA_RATE_800HZ - - BMA4_OUTPUT_DATA_RATE_1600HZ - */ - cfg.odr = BMA4_OUTPUT_DATA_RATE_100HZ; - /*! - G-range, Optional parameters: - - BMA4_ACCEL_RANGE_2G - - BMA4_ACCEL_RANGE_4G - - BMA4_ACCEL_RANGE_8G - - BMA4_ACCEL_RANGE_16G - */ - cfg.range = BMA4_ACCEL_RANGE_2G; - /*! - Bandwidth parameter, determines filter configuration, Optional parameters: - - BMA4_ACCEL_OSR4_AVG1 - - BMA4_ACCEL_OSR2_AVG2 - - BMA4_ACCEL_NORMAL_AVG4 - - BMA4_ACCEL_CIC_AVG8 - - BMA4_ACCEL_RES_AVG16 - - BMA4_ACCEL_RES_AVG32 - - BMA4_ACCEL_RES_AVG64 - - BMA4_ACCEL_RES_AVG128 - */ - cfg.bandwidth = BMA4_ACCEL_NORMAL_AVG4; - - /*! Filter performance mode , Optional parameters: - - BMA4_CIC_AVG_MODE - - BMA4_CONTINUOUS_MODE - */ - cfg.perf_mode = BMA4_CONTINUOUS_MODE; - - // Configure the BMA423 accelerometer - sensor.setAccelConfig(cfg); - - // Enable BMA423 accelerometer - // Warning : Need to use feature, you must first enable the accelerometer - sensor.enableAccel(); - - struct bma4_int_pin_config config ; - config.edge_ctrl = BMA4_LEVEL_TRIGGER; - config.lvl = BMA4_ACTIVE_HIGH; - config.od = BMA4_PUSH_PULL; - config.output_en = BMA4_OUTPUT_ENABLE; - config.input_en = BMA4_INPUT_DISABLE; - // The correct trigger interrupt needs to be configured as needed - sensor.setINTPinConfig(config, BMA4_INTR1_MAP); - - struct bma423_axes_remap remap_data; - remap_data.x_axis = 1; - remap_data.x_axis_sign = 1; - remap_data.y_axis = 0; - remap_data.y_axis_sign = 1; - remap_data.z_axis = 2; - remap_data.z_axis_sign = 1; - - // Need to raise the wrist function, need to set the correct axis - sensor.setRemapAxes(&remap_data); - + if (!SBMA.defaultConfig()) return; // Failed. // Enable BMA423 isStepCounter feature - sensor.enableFeature(BMA423_STEP_CNTR, true); - // Enable BMA423 isTilt feature - //sensor.enableFeature(BMA423_TILT, true); - // Enable BMA423 isDoubleClick feature -// sensor.enableFeature(BMA423_WAKEUP, true); + SBMA.enableFeature(BMA423_STEP_CNTR, true); + // Enable isTilt feature + //SBMA.enableTiltWake(); + // Enable isDoubleClick feature +// SBMA.enableDoubleClickWake(); // Reset steps - //sensor.resetStepCounter(); + //SBMA.resetStepCounter(); // Turn on feature interrupt - //sensor.enableStepCountInterrupt(); - //sensor.enableTiltInterrupt(); - // It corresponds to isDoubleClick interrupt -// sensor.enableWakeupInterrupt(); + //SBMA.enableStepCountInterrupt(); } void WatchyGSR::UpdateBMA(){ - bool BT = (Options.SleepStyle == 2 && BedTime()); + bool BT = (Options.SleepStyle == 2 && WatchTime.BedTime); bool B = (Options.SleepStyle > 2); bool A = (Options.SleepStyle == 1); - sensor.enableFeature(BMA423_WAKEUP,B | BT); - sensor.enableWakeupInterrupt(B | BT); - sensor.enableFeature(BMA423_TILT,A | B); - sensor.enableTiltInterrupt(A | B); + SBMA.enableDoubleClickWake(B | BT); + SBMA.enableTiltWake((A | B) & !WatchTime.BedTime); } float WatchyGSR::getBatteryVoltage(){ return ((BatteryRead() - 0.0125) + (BatteryRead() - 0.0125) + (BatteryRead() - 0.0125) + (BatteryRead() - 0.0125)) / 4; } @@ -2617,8 +2561,8 @@ String WatchyGSR::getReduce(uint8_t Amount){ void WatchyGSR::monitorSteps(){ if (Steps.Hour == WatchTime.Local.Hour && Steps.Minutes == WatchTime.Local.Minute){ if (!Steps.Reset){ - Steps.Yesterday=sensor.getCounter(); - sensor.resetStepCounter(); + Steps.Yesterday=SBMA.getCounter(); + SBMA.resetStepCounter(); Steps.Reset=true; } }else if (Steps.Reset) Steps.Reset=false; @@ -2648,11 +2592,9 @@ uint8_t WatchyGSR::getButtonMaskToID(uint64_t HW){ else if (HW & BACK_BTN_MASK) return Options.Lefty ? 3 : getSwapped(2); // Back Button [SW2] else if (HW & UP_BTN_MASK) return Options.Lefty ? getSwapped(2) : 3; // Up Button [SW3] else if (HW & DOWN_BTN_MASK) return Options.Lefty ? getSwapped(1) : 4; // Down Button [SW4] - else if ((HW & BMA432_INT1_MASK) || (HW & BMA432_INT2_MASK)) { // Acccelerometer. - sensor.getINT(); - int IRQMask = sensor.getIRQMASK(); - if (IRQMask & BMA423_WAKEUP_INT) return 5; // Double Tap. - else if (IRQMask & BMA423_TILT_INT) return 6; // Wrist Tilt. + else if (SBMA.didBMAWakeUp(HW)) { // Acccelerometer. + if (SBMA.isDoubleClick()) return 5; // Double Tap. + else if (SBMA.isTilt()) return 6; // Wrist Tilt. } return 0; } @@ -2857,31 +2799,6 @@ String WatchyGSR::PASStoString(uint8_t Index){ void WatchyGSR::initZeros(){ String S = ""; uint8_t I; - Design.Menu.Top = 72; - Design.Menu.Header = 97; - Design.Menu.Data = 138; - Design.Face.Time = 56; - Design.Face.TimeHeight = 45; - Design.Face.TimeColor = GxEPD_BLACK; - Design.Face.TimeFont = &aAntiCorona36pt7b; - Design.Face.TimeStyle = WatchyGSR::dCENTER; - Design.Face.Day = 101; - Design.Face.DayColor = GxEPD_BLACK; - Design.Face.DayFont = &aAntiCorona16pt7b; - Design.Face.DayStyle = WatchyGSR::dCENTER; - Design.Face.Date = 143; - Design.Face.DateColor = GxEPD_BLACK; - Design.Face.DateFont = &aAntiCorona15pt7b; - Design.Face.DateStyle = WatchyGSR::dCENTER; - Design.Face.Year = 186; - Design.Face.YearLeft = 99; - Design.Face.YearColor = GxEPD_BLACK; - Design.Face.YearFont = &aAntiCorona16pt7b; - Design.Face.YearStyle = WatchyGSR::dCENTER; - Design.Status.WIFIx = 5; - Design.Status.WIFIy = 193; - Design.Status.BATTx = 155; - Design.Status.BATTy = 178; GuiMode = WATCHON; VibeMode = 0; WatchyStatus = ""; @@ -2986,7 +2903,7 @@ String WatchyGSR::GetSettings(){ // Retrieve the settings from the current state into a base64 string. - I[J] = 130; J++; // New Version. + I[J] = 131; J++; // New Version. I[J] = (Steps.Hour); J++; I[J] = (Steps.Minutes); J++; K = Options.TwentyFour ? 1 : 0; @@ -3012,6 +2929,9 @@ String WatchyGSR::GetSettings(){ K = Options.BedTimeOrientation ? 1 : 0; I[J] = (K); J++; // Emd Version 130. + // Version 131. + I[J] = Options.WatchFaceStyle; J++; + // End Version 131. V = (Options.MasterRepeats << 5); I[J] = (Options.Turbo | V); J++; @@ -3103,6 +3023,9 @@ void WatchyGSR::StoreSettings(String FromUser){ J++; if (L > J){ V = constrain(O[J],0,10); GSRWiFi.TransmitPower = RawWiFiTX[V]; } J++; if (L > J){ V = O[J]; Options.BedTimeOrientation = (V & 1) ? true : false; } } + if (NewV > 130){ + J++; if (L > J){ V = constrain(O[J],0,MaxStyles); Options.WatchFaceStyle = V; } + } } if (WatchTime.DeadRTC) Options.Feedback = false; J++; if (L > J){ @@ -3215,25 +3138,15 @@ void WatchyGSR::SetTurbo(){ bool WatchyGSR::InTurbo() { return (!WatchTime.DeadRTC && Options.Turbo > 0 && TurboTime != 0 && millis() - TurboTime < (Options.Turbo * 1000)); } -bool WatchyGSR::BedTime() { - if (Options.SleepEnd > Options.SleepStart) return (WatchTime.Local.Hour >= Options.SleepStart && WatchTime.Local.Hour < Options.SleepEnd); - return (WatchTime.Local.Hour >= Options.SleepStart || WatchTime.Local.Hour < Options.SleepEnd); -} - bool WatchyGSR::UpRight() { - if (Options.Orientated || (BedTime() && Options.BedTimeOrientation)) return IsUp(); + if (Options.Orientated || (WatchTime.BedTime && Options.BedTimeOrientation)) return SBMA.IsUp(); return true; // Fake it til you make it. } -bool WatchyGSR::IsUp() { - uint8_t Direction = sensor.getDirection(); - return (Direction == DIRECTION_DISP_UP || Direction == DIRECTION_BOTTOM_EDGE); // Return whether or not it is up. -} - bool WatchyGSR::DarkWait(){ bool B = ((Options.SleepStyle > 0 || WatchTime.DeadRTC) && Darkness.Last != 0 && (millis() - Darkness.Last) < (Options.SleepMode * 1000)); if (Options.SleepStyle == 2){ - if (!BedTime()) return false; + if (!WatchTime.BedTime) return false; return B; }else if (Options.SleepStyle > 0 || WatchTime.DeadRTC) return B; return false; @@ -3286,3 +3199,126 @@ void WatchyGSR::DisplayInit(bool ForceDark){ } void WatchyGSR::DisplaySleep(){ if (!Updates.Init) { Updates.Init = true; display.hibernate(); } } + +bool WatchyGSR::SafeToDraw() { return (!(OTAUpdate || WatchyAPOn || (Menu.Item == MENU_TOFF && Menu.SubItem == 2))); } + +void WatchyGSR::getAngle(uint16_t Angle, uint8_t Away, uint8_t &X, uint8_t &Y){ + uint8_t S = 200 - (Away * 2); + float fX, fY, fA; + if (Angle > 44 && Angle < 135){ // Right + fA = Angle - 45; fA /= 90; + fY = Away + (fA * S); + fX = 200 - Away; + }else if (Angle > 134 && Angle < 225){ // Bottom + fA = Angle - 135; fA /= 90; + fX = 200 - (Away + (fA * S)); + fY = 200 - Away; + }else if (Angle > 224 && Angle < 315){ // Left. + fA = Angle - 225; fA /= 90; + fY = 200 - (Away + (fA * S)); + fX = Away; + }else { // Top + if (Angle > 314) Angle -= 315; + else Angle += 45; + fA = Angle; fA /= 90; + fX = Away + (fA * S); + fY = Away; + } + X = fX; + Y = fY; +} + +// Watch Face designs are here. + +void WatchyGSR::initWatchFaceStyle(){ + switch (Options.WatchFaceStyle){ + case 1: // Ballsy + Design.Menu.Top = 117; + Design.Menu.Header = 25; + Design.Menu.Data = 66; + Design.Menu.Font = &aAntiCorona12pt7b; + Design.Face.Time = 56; + Design.Face.TimeHeight = 45; + Design.Face.TimeColor = GxEPD_BLACK; + Design.Face.TimeFont = &aAntiCorona36pt7b; + Design.Face.TimeStyle = WatchyGSR::dCENTER; + Design.Face.Day = 54; + Design.Face.DayColor = GxEPD_BLACK; + Design.Face.DayFont = &aAntiCorona14pt7b; + Design.Face.DayStyle = WatchyGSR::dCENTER; + Design.Face.Date = 106; + Design.Face.DateColor = GxEPD_BLACK; + Design.Face.DateFont = &aAntiCorona13pt7b; + Design.Face.DateStyle = WatchyGSR::dCENTER; + Design.Face.Year = 160; + Design.Face.YearLeft = 99; + Design.Face.YearColor = GxEPD_BLACK; + Design.Face.YearFont = &aAntiCorona14pt7b; + Design.Face.YearStyle = WatchyGSR::dCENTER; + Design.Status.WIFIx = 40; + Design.Status.WIFIy = 82; + Design.Status.BATTx = 120; + Design.Status.BATTy = 66; + break; + default: + Design.Menu.Top = 72; + Design.Menu.Header = 25; + Design.Menu.Data = 66; + Design.Menu.Font = &aAntiCorona12pt7b; + Design.Face.Time = 56; + Design.Face.TimeHeight = 45; + Design.Face.TimeColor = GxEPD_BLACK; + Design.Face.TimeFont = &aAntiCorona36pt7b; + Design.Face.TimeStyle = WatchyGSR::dCENTER; + Design.Face.Day = 101; + Design.Face.DayColor = GxEPD_BLACK; + Design.Face.DayFont = &aAntiCorona16pt7b; + Design.Face.DayStyle = WatchyGSR::dCENTER; + Design.Face.Date = 143; + Design.Face.DateColor = GxEPD_BLACK; + Design.Face.DateFont = &aAntiCorona15pt7b; + Design.Face.DateStyle = WatchyGSR::dCENTER; + Design.Face.Year = 186; + Design.Face.YearLeft = 99; + Design.Face.YearColor = GxEPD_BLACK; + Design.Face.YearFont = &aAntiCorona16pt7b; + Design.Face.YearStyle = WatchyGSR::dCENTER; + Design.Status.WIFIx = 5; + Design.Status.WIFIy = 193; + Design.Status.BATTx = 155; + Design.Status.BATTy = 178; + break; + } +} + +void WatchyGSR::drawWatchFaceStyle(){ + uint8_t X, Y; + uint16_t A; + switch (Options.WatchFaceStyle){ + case 1: // Ballsy + drawDay(); + drawDate(); + if (SafeToDraw()){ + for (A = 0; A < 60; A++){ + getAngle(A * 6, 5, X, Y); + display.fillCircle(X, Y, (A == WatchTime.Local.Minute ? 5 : (A % 5 == 0 ? 3 : 1)), ForeColor()); + } + X = WatchTime.Local.Hour; + if (X > 11) X -= 12; + A = (X * 30) + (WatchTime.Local.Minute / 2); + getAngle(A, 22, X, Y); + display.fillCircle(X, Y, 9, ForeColor()); + if (WatchTime.Local.Hour < 12) display.fillCircle(X, Y, 3, BackColor()); + } + if (GuiMode == WATCHON) drawYear(); + break; + default: + if (SafeToDraw()){ + drawTime(); + drawDay(); + drawYear(); + } + if (GuiMode == WATCHON) drawDate(); + break; + } +} diff --git a/src/Watchy_GSR.h b/src/Watchy_GSR.h index 9ce48e0..487d98b 100644 --- a/src/Watchy_GSR.h +++ b/src/Watchy_GSR.h @@ -20,23 +20,25 @@ #include "GxEPD2_BW.h" #include #include -#include +#include #include "Icons_GSR.h" #include "ArduinoNvs.h" -#include "aAntiCorona15pt7b.h" #include "Bronova_Regular13pt7b.h" +#include "aAntiCorona12pt7b.h" +#include "aAntiCorona13pt7b.h" +#include "aAntiCorona14pt7b.h" +#include "aAntiCorona15pt7b.h" #include "aAntiCorona16pt7b.h" #include "aAntiCorona36pt7b.h" -#include "aAntiCorona12pt7b.h" class WatchyGSR{ public: static SmallRTC SRTC; static SmallNTP SNTP; static GxEPD2_BW display; - static constexpr const char* Build = "1.4"; + static constexpr const char* Build = "1.4.1"; enum DesOps {dSTATIC, dLEFT, dRIGHT, dCENTER}; public: WatchyGSR(); @@ -70,6 +72,10 @@ class WatchyGSR{ virtual void AskForWiFi() final; virtual wl_status_t currentWiFi() final; virtual void endWiFi() final; + virtual void getAngle(uint16_t Angle, uint8_t Away, uint8_t &X, uint8_t &Y) final; + virtual bool SafeToDraw() final; + void initWatchFaceStyle(); + void drawWatchFaceStyle(); private: void setStatus(String Status); void drawMenu(); @@ -122,7 +128,6 @@ class WatchyGSR{ bool InTurbo(); bool BedTime(); bool UpRight(); - bool IsUp(); bool DarkWait(); bool Showing(); void RefreshCPU(); @@ -131,6 +136,5 @@ class WatchyGSR{ void DisplayInit(bool ForceDark = false); void DisplaySleep(); }; - -extern RTC_DATA_ATTR BMA423 sensor; +extern RTC_DATA_ATTR StableBMA SBMA; #endif diff --git a/src/aAntiCorona13pt7b.h b/src/aAntiCorona13pt7b.h new file mode 100644 index 0000000..ca5c4fc --- /dev/null +++ b/src/aAntiCorona13pt7b.h @@ -0,0 +1,305 @@ +const uint8_t aAntiCorona13pt7bBitmaps[] PROGMEM = { + 0x00, 0x6E, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEC, 0x00, 0x6F, 0xF6, 0x63, + 0xE7, 0xE7, 0xE7, 0xE7, 0xC6, 0x46, 0x01, 0x8C, 0x07, 0x38, 0x1C, 0x70, + 0x39, 0xC0, 0x73, 0x87, 0xFF, 0xDF, 0xFF, 0xBF, 0xFE, 0x1C, 0x60, 0x39, + 0xC1, 0xFF, 0xF7, 0xFF, 0xEF, 0xFF, 0x8E, 0x30, 0x1C, 0xE0, 0x39, 0xC0, + 0xE3, 0x00, 0x86, 0x00, 0x03, 0x00, 0x7E, 0x07, 0xFC, 0x7F, 0xE7, 0xFF, + 0x3B, 0xB1, 0xFC, 0x0F, 0xE0, 0x3F, 0xE1, 0xFF, 0x83, 0xFE, 0x0F, 0xF0, + 0x73, 0x93, 0x9D, 0xFF, 0xDF, 0xFE, 0x7F, 0xE0, 0xFC, 0x01, 0x80, 0x1E, + 0x03, 0x00, 0x7F, 0x06, 0x01, 0xFE, 0x1C, 0x03, 0x9E, 0x78, 0x0E, 0x1C, + 0xE0, 0x1C, 0x3B, 0x80, 0x38, 0x77, 0x00, 0x70, 0xFC, 0x78, 0xF3, 0xBB, + 0xF8, 0xFF, 0xEF, 0xF9, 0xFD, 0xDC, 0x78, 0xF7, 0x70, 0x70, 0x0E, 0xE0, + 0xE0, 0x39, 0xC1, 0xC0, 0x73, 0xC3, 0x81, 0xC7, 0x8E, 0x03, 0x87, 0xFC, + 0x0E, 0x07, 0xF0, 0x18, 0x07, 0x80, 0x0F, 0x80, 0x7F, 0x03, 0xFE, 0x1C, + 0x78, 0x70, 0xE1, 0xC3, 0x87, 0x9C, 0x1F, 0xF0, 0x3F, 0x80, 0xFC, 0x07, + 0xFB, 0x1F, 0xFC, 0xE7, 0xF3, 0x8F, 0xCE, 0x1F, 0xBC, 0x3F, 0xFF, 0xFD, + 0xFF, 0x61, 0xF8, 0x00, 0x7F, 0xFF, 0x90, 0x06, 0x1E, 0x1E, 0x38, 0x70, + 0x70, 0x60, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, + 0xF0, 0x70, 0x78, 0x7C, 0x3E, 0x1E, 0x0E, 0x70, 0x78, 0x7C, 0x3E, 0x1E, + 0x0E, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, + 0x0E, 0x0E, 0x0C, 0x1C, 0x78, 0x78, 0x60, 0x06, 0x00, 0xE0, 0x7E, 0x0F, + 0xFF, 0xFF, 0xF7, 0xFE, 0x1F, 0x03, 0xF8, 0x77, 0x86, 0x38, 0x03, 0x00, + 0x06, 0x01, 0xC0, 0x38, 0x07, 0x07, 0xFF, 0xFF, 0xFF, 0xF0, 0x70, 0x0E, + 0x01, 0xC0, 0x30, 0x00, 0xEF, 0xF7, 0x6C, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, + 0x6F, 0xF6, 0x01, 0x81, 0xC0, 0xC0, 0xE0, 0x70, 0x70, 0x38, 0x1C, 0x1C, + 0x0E, 0x07, 0x07, 0x03, 0x83, 0x81, 0xC0, 0xE0, 0xE0, 0x70, 0x30, 0x00, + 0x03, 0xC0, 0x1F, 0xE0, 0x7F, 0xE1, 0xC3, 0xE7, 0x03, 0xCE, 0x03, 0xD8, + 0x07, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x3F, 0x00, 0x7F, 0x00, + 0xDE, 0x03, 0x9E, 0x07, 0x3E, 0x1C, 0x3F, 0xF0, 0x3F, 0xC0, 0x1E, 0x00, + 0x19, 0xDF, 0xFF, 0xDC, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCC, + 0x1F, 0x83, 0xFE, 0x3F, 0xF8, 0x83, 0xE0, 0x0F, 0x00, 0x38, 0x01, 0xC0, + 0x1E, 0x00, 0xE0, 0x0F, 0x01, 0xF0, 0x1F, 0x01, 0xF0, 0x0F, 0x00, 0xF0, + 0x0F, 0x00, 0x7F, 0xFB, 0xFF, 0xDF, 0xFC, 0x3E, 0x0F, 0xF3, 0xFE, 0x23, + 0xE0, 0x3C, 0x03, 0x80, 0x70, 0x1C, 0x1F, 0x87, 0xF8, 0xFF, 0x01, 0xF0, + 0x1E, 0x01, 0xC0, 0x3B, 0x0E, 0xFF, 0xDF, 0xF1, 0xF8, 0x00, 0x00, 0xC0, + 0x1C, 0x01, 0xC0, 0x38, 0x07, 0x00, 0x73, 0x0E, 0x71, 0xC7, 0x1C, 0x73, + 0x87, 0x78, 0x77, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x70, 0x07, 0x00, 0x70, + 0x07, 0x00, 0x60, 0x3F, 0xE7, 0xFE, 0x7F, 0xE7, 0x00, 0x70, 0x07, 0x00, + 0x7F, 0x07, 0xFC, 0x7F, 0xE0, 0x1F, 0x00, 0xF0, 0x07, 0x00, 0x70, 0x07, + 0x00, 0x66, 0x0E, 0xFF, 0xCF, 0xF8, 0x7E, 0x00, 0x07, 0xC0, 0x7F, 0x07, + 0xFC, 0x71, 0xC7, 0x06, 0x38, 0x03, 0x9F, 0x1F, 0xFC, 0xFF, 0xF7, 0xC7, + 0xFC, 0x1F, 0xE0, 0x7F, 0x03, 0xF8, 0x1D, 0xE1, 0xCF, 0xFE, 0x3F, 0xE0, + 0xFE, 0x03, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0xF0, 0x0E, 0x00, 0xE0, 0x1C, + 0x01, 0xC0, 0x1C, 0x03, 0x80, 0x38, 0x07, 0x00, 0x70, 0x07, 0x00, 0xE0, + 0x0E, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x18, 0x00, 0x0F, 0x81, 0xFC, 0x3F, + 0xE7, 0x1E, 0x70, 0xE7, 0x0E, 0x78, 0xE7, 0xFC, 0x3F, 0xC3, 0xFE, 0x7F, + 0xF7, 0x1F, 0xE0, 0xFE, 0x07, 0xE0, 0x7F, 0x06, 0x7F, 0xE7, 0xFC, 0x1F, + 0x00, 0x0F, 0x80, 0x7F, 0x83, 0xFF, 0x1F, 0xFC, 0x70, 0xFB, 0x81, 0xEE, + 0x07, 0xB8, 0x0E, 0xF0, 0x7B, 0xE3, 0xE7, 0xFF, 0x8F, 0xFE, 0x1F, 0x38, + 0x00, 0xE3, 0x07, 0x1E, 0x3C, 0x7F, 0xE0, 0xFF, 0x01, 0xF0, 0x00, 0x6F, + 0xF6, 0x00, 0x00, 0x06, 0xFF, 0x60, 0x6F, 0xF6, 0x00, 0x00, 0x0E, 0xFF, + 0x76, 0xC0, 0x00, 0x1C, 0x01, 0xF0, 0x3F, 0x83, 0xFC, 0x7F, 0x83, 0xF8, + 0x0F, 0xF0, 0x3F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF0, 0x0F, 0xC0, 0x0E, 0x7F, + 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xC0, + 0x70, 0x03, 0xF0, 0x0F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFC, 0x0F, 0xF0, 0x1F, + 0xC1, 0xFE, 0x3F, 0xC1, 0xFC, 0x0F, 0x80, 0x38, 0x00, 0x3F, 0x8F, 0xFC, + 0xFF, 0xEC, 0x1F, 0x00, 0xF0, 0x07, 0x00, 0x70, 0x0E, 0x01, 0xE0, 0x3C, + 0x07, 0x80, 0x70, 0x0E, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x1E, 0x01, 0xE0, + 0x0C, 0x00, 0x01, 0xF8, 0x01, 0xFF, 0x81, 0xFF, 0xF0, 0xF0, 0x7E, 0x38, + 0x0F, 0x9C, 0x3D, 0xF6, 0x3F, 0x3F, 0x8F, 0xC7, 0xE7, 0x71, 0xF9, 0xDC, + 0x7E, 0x7F, 0x1F, 0x9F, 0xC7, 0xF3, 0xF9, 0x9E, 0xFF, 0xE7, 0xC7, 0xF0, + 0xF8, 0xF8, 0x1F, 0xE0, 0x03, 0xF0, 0x00, 0x3C, 0x00, 0x01, 0x80, 0x07, + 0x80, 0x0F, 0x00, 0x1E, 0x00, 0x7E, 0x00, 0xFC, 0x03, 0xB8, 0x07, 0x78, + 0x0E, 0xF0, 0x38, 0xE0, 0x71, 0xE0, 0xFF, 0xC3, 0xFF, 0xC7, 0xFF, 0x9C, + 0x07, 0x38, 0x0F, 0x70, 0x1F, 0xC0, 0x1D, 0x80, 0x30, 0x7F, 0x87, 0xFE, + 0x3F, 0xF9, 0xC3, 0xEE, 0x0F, 0x70, 0x7B, 0x81, 0xDC, 0x1C, 0xFF, 0xE7, + 0xFF, 0xBF, 0xFD, 0xC1, 0xFE, 0x07, 0xF0, 0x1F, 0x80, 0xFE, 0x0E, 0xFF, + 0xE7, 0xFE, 0x3F, 0xC0, 0x01, 0xF8, 0x0F, 0xFC, 0x7F, 0xF9, 0xE0, 0xE3, + 0x80, 0x0E, 0x00, 0x18, 0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, + 0x07, 0x80, 0x0F, 0x00, 0x0F, 0x00, 0x1F, 0x00, 0x1F, 0x07, 0x3F, 0xFE, + 0x1F, 0xF8, 0x0F, 0xC0, 0x7F, 0x81, 0xFF, 0xC3, 0xFF, 0xE7, 0x07, 0xEE, + 0x07, 0xDC, 0x07, 0xF8, 0x07, 0xF0, 0x0F, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, + 0x3F, 0x00, 0x7E, 0x00, 0xDC, 0x03, 0xB8, 0x0E, 0x78, 0x38, 0xFF, 0xE1, + 0xFF, 0x83, 0xFC, 0x00, 0x7F, 0xF7, 0xFF, 0xBF, 0xF9, 0xC0, 0x0E, 0x00, + 0x70, 0x03, 0x80, 0x1C, 0x00, 0xFE, 0x07, 0xF0, 0x3F, 0x01, 0xC0, 0x0E, + 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, + 0xFF, 0xFF, 0xFF, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xFE, 0x3F, 0x8F, + 0xC3, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0C, 0x00, 0x01, + 0xF8, 0x0F, 0xFC, 0x3F, 0xF8, 0xE0, 0xF3, 0x80, 0x0E, 0x00, 0x18, 0x00, + 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x81, 0xFF, 0x87, 0xFF, 0x0F, 0xFF, + 0x01, 0xDF, 0x03, 0x9F, 0x07, 0x3F, 0xFE, 0x1F, 0xFC, 0x0F, 0xF0, 0x60, + 0x0F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, + 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, + 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7C, 0x01, 0x80, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x60, 0x1C, 0x03, 0x80, 0x70, 0x0E, + 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, + 0xC0, 0x33, 0x0E, 0xFF, 0x9F, 0xE1, 0xF0, 0x00, 0x60, 0x33, 0x81, 0xCE, + 0x0F, 0x38, 0x78, 0xE3, 0xC3, 0xBE, 0x0F, 0xE0, 0x3F, 0x00, 0xF8, 0x03, + 0xE0, 0x0F, 0xC0, 0x3F, 0xC0, 0xFF, 0x83, 0xBF, 0x0E, 0x7F, 0x38, 0x7E, + 0xE0, 0xFB, 0x81, 0xEC, 0x03, 0x80, 0x60, 0x38, 0x0E, 0x03, 0x80, 0xE0, + 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, 0x03, 0x80, 0xE0, 0x38, 0x0E, + 0x03, 0x80, 0xFF, 0xFF, 0xFF, 0xFC, 0x60, 0x07, 0xE0, 0x1F, 0xC0, 0x3F, + 0x80, 0xFF, 0x81, 0xFF, 0x07, 0xFF, 0x0F, 0xFE, 0x3F, 0xFE, 0x7F, 0xFC, + 0xFF, 0xFB, 0xBF, 0x7F, 0x7E, 0xFC, 0xFC, 0xF9, 0xF9, 0xF3, 0xF3, 0xC7, + 0xE3, 0x0F, 0xC0, 0x1F, 0x00, 0x30, 0x60, 0x0F, 0xC0, 0x7F, 0x81, 0xFF, + 0x07, 0xFC, 0x1F, 0xF8, 0x7F, 0xF1, 0xFF, 0xE7, 0xEF, 0xDF, 0x9F, 0x7E, + 0x3F, 0xF8, 0x7F, 0xE0, 0xFF, 0x83, 0xFE, 0x07, 0xF8, 0x0F, 0xE0, 0x1F, + 0x80, 0x7C, 0x01, 0x80, 0x01, 0xF8, 0x01, 0xFF, 0x81, 0xFF, 0xF0, 0xF0, + 0x7E, 0x38, 0x0F, 0x9C, 0x01, 0xF6, 0x00, 0x3F, 0x80, 0x07, 0xE0, 0x01, + 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xF0, 0x01, 0x9E, 0x00, 0xE7, + 0xC0, 0x70, 0xF8, 0x3C, 0x3F, 0xFE, 0x03, 0xFE, 0x00, 0x7E, 0x00, 0x7F, + 0xC7, 0xFF, 0x3F, 0xFD, 0xC1, 0xFE, 0x07, 0xF0, 0x1F, 0x80, 0xFC, 0x0E, + 0xFF, 0xE7, 0xFE, 0x3F, 0xE1, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, + 0x00, 0xE0, 0x07, 0x00, 0x30, 0x00, 0x01, 0xF8, 0x01, 0xFF, 0x81, 0xFF, + 0xF0, 0xF0, 0x7E, 0x38, 0x0F, 0x9C, 0x01, 0xF6, 0x00, 0x3F, 0x80, 0x07, + 0xE0, 0x01, 0xF8, 0x00, 0x7E, 0x00, 0x1F, 0x80, 0x07, 0xF0, 0x01, 0x9E, + 0x00, 0xE7, 0xC0, 0x70, 0xF8, 0x3C, 0x3F, 0xFE, 0x03, 0xFE, 0x00, 0x7E, + 0x00, 0x7F, 0x83, 0xFF, 0x8F, 0xFF, 0x38, 0x3E, 0xE0, 0x7B, 0x80, 0xEE, + 0x03, 0xB8, 0x1C, 0xFF, 0xF3, 0xFF, 0x8F, 0xF8, 0x3F, 0xC0, 0xFF, 0x83, + 0xBF, 0x0E, 0x7F, 0x38, 0xFE, 0xE0, 0xFB, 0x81, 0xEC, 0x03, 0x00, 0x07, + 0xC0, 0x7F, 0xE3, 0xFF, 0x9C, 0x3E, 0x70, 0x01, 0xC0, 0x07, 0xC0, 0x1F, + 0xF0, 0x3F, 0xF0, 0xFF, 0xE0, 0xFF, 0xC0, 0x3F, 0x00, 0x3C, 0x00, 0x72, + 0x01, 0xDE, 0x0E, 0xFF, 0xF9, 0xFF, 0xC1, 0xFC, 0x00, 0x7F, 0xFF, 0xFF, + 0xFF, 0xFC, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, + 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, + 0x00, 0x38, 0x01, 0x80, 0x60, 0x1F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, + 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, + 0x03, 0xF8, 0x1F, 0xC0, 0xCF, 0x0E, 0x7F, 0xE1, 0xFE, 0x03, 0xC0, 0x60, + 0x0F, 0xC0, 0x1F, 0xC0, 0x77, 0x80, 0xE7, 0x01, 0xCF, 0x07, 0x1E, 0x0E, + 0x1E, 0x38, 0x3C, 0x70, 0x38, 0xE0, 0x7B, 0x80, 0xF7, 0x00, 0xEE, 0x01, + 0xF8, 0x03, 0xF0, 0x03, 0xC0, 0x07, 0x80, 0x0F, 0x00, 0x0C, 0x00, 0x60, + 0x00, 0x1F, 0x00, 0x01, 0xFC, 0x0C, 0x0F, 0xE0, 0xE0, 0xE7, 0x07, 0x87, + 0x38, 0x7C, 0x39, 0xE3, 0xE1, 0x8F, 0x1F, 0x9C, 0x39, 0xFC, 0xE1, 0xEE, + 0xE7, 0x0F, 0x77, 0xF0, 0x3F, 0x3F, 0x81, 0xF8, 0xFC, 0x0F, 0xC7, 0xC0, + 0x7C, 0x3E, 0x01, 0xE1, 0xF0, 0x0F, 0x07, 0x80, 0x70, 0x38, 0x01, 0x81, + 0xC0, 0x60, 0x07, 0xE0, 0x1F, 0xE0, 0x73, 0xC1, 0xE7, 0xC3, 0x87, 0xCE, + 0x07, 0xF8, 0x07, 0xF0, 0x0F, 0xC0, 0x0F, 0x80, 0x1F, 0x80, 0x7F, 0x00, + 0xFF, 0x03, 0x9F, 0x0E, 0x1F, 0x3C, 0x1E, 0x70, 0x3F, 0xC0, 0x3F, 0x00, + 0x30, 0x60, 0x07, 0xE0, 0x1F, 0xE0, 0x73, 0xC1, 0xE7, 0xC3, 0x87, 0xCE, + 0x07, 0xF8, 0x07, 0xF0, 0x0F, 0xC0, 0x0F, 0x00, 0x0E, 0x00, 0x1C, 0x00, + 0x38, 0x00, 0x70, 0x00, 0xE0, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0C, + 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x01, 0xE0, 0x07, 0x80, 0x0E, + 0x00, 0x38, 0x00, 0xF0, 0x03, 0xC0, 0x07, 0x00, 0x1E, 0x00, 0x78, 0x01, + 0xE0, 0x03, 0x80, 0x0F, 0x00, 0x3C, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, + 0xF0, 0x7F, 0xFF, 0xF7, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, + 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1F, 0xFF, 0xFE, 0x60, 0x70, + 0x3C, 0x1E, 0x07, 0x83, 0xC1, 0xE0, 0x78, 0x3C, 0x0E, 0x07, 0x83, 0xC0, + 0xF0, 0x78, 0x3C, 0x0F, 0x07, 0x81, 0xC0, 0xC0, 0x7F, 0xFF, 0xF8, 0x70, + 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, + 0x38, 0x70, 0xEF, 0xFF, 0xFE, 0x00, 0x00, 0x70, 0x07, 0x80, 0xF8, 0x1F, + 0xC1, 0xFC, 0x39, 0xE3, 0x9F, 0x70, 0xF6, 0x0F, 0x60, 0x60, 0x7F, 0xFF, + 0xFF, 0xFF, 0x00, 0x61, 0xE3, 0xE3, 0xC3, 0xC3, 0xC3, 0x00, 0x1F, 0x87, + 0xF9, 0xFF, 0xB0, 0xF0, 0x0E, 0x0F, 0xCF, 0xFB, 0xFF, 0x7E, 0xFE, 0x1F, + 0x83, 0xF8, 0x7F, 0xFE, 0xFF, 0xCF, 0xB0, 0x60, 0x0E, 0x00, 0xE0, 0x0E, + 0x00, 0xE0, 0x0F, 0xF0, 0xFF, 0xCF, 0xFE, 0xE1, 0xEE, 0x0F, 0xE0, 0xFE, + 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x0E, 0xF0, 0xEF, 0xFC, 0xFF, 0x8F, + 0xE0, 0x07, 0xC1, 0xFE, 0x3F, 0xE7, 0x0C, 0x70, 0x0E, 0x00, 0xE0, 0x0E, + 0x00, 0xE0, 0x0F, 0x00, 0xF0, 0x07, 0xC6, 0x7F, 0xE3, 0xFE, 0x0F, 0x80, + 0x00, 0x30, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x7F, 0x1F, 0xF3, 0xFF, + 0x70, 0xF6, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xF0, 0x7F, 0x07, + 0xF8, 0x77, 0xFF, 0x3F, 0xF0, 0xFE, 0x07, 0xC1, 0xFE, 0x3F, 0xF7, 0x87, + 0x70, 0x7E, 0x0F, 0xE7, 0xEF, 0xFE, 0xFF, 0x8F, 0xF0, 0xF0, 0x07, 0xC3, + 0x7F, 0xF3, 0xFE, 0x0F, 0x80, 0x0F, 0x87, 0xF3, 0xFC, 0xC6, 0x70, 0x1C, + 0x07, 0x01, 0xF8, 0xFE, 0x3F, 0x07, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, + 0xC0, 0x70, 0x1C, 0x07, 0x01, 0x80, 0x07, 0xF1, 0xFF, 0x3F, 0xF7, 0x0F, + 0x60, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7F, 0x07, 0xF0, 0x77, 0x87, + 0x7F, 0xF3, 0xFF, 0x1F, 0xF0, 0x06, 0x30, 0xE7, 0xFC, 0x7F, 0x83, 0xE0, + 0x60, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x7C, 0xFF, 0xEF, 0xFF, + 0xF0, 0xFF, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, + 0xE0, 0x7E, 0x07, 0xE0, 0x7C, 0x06, 0x6F, 0xF6, 0x03, 0x77, 0x77, 0x77, + 0x77, 0x77, 0x77, 0x76, 0x00, 0x60, 0x0F, 0x00, 0xF0, 0x06, 0x00, 0x00, + 0x06, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, + 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xC3, + 0x1C, 0x7F, 0x87, 0xF0, 0x3E, 0x00, 0x60, 0x0E, 0x00, 0xE0, 0x0E, 0x00, + 0xE0, 0x0E, 0x0C, 0xE3, 0xCE, 0xFC, 0xFF, 0x0F, 0xC0, 0xF8, 0x0F, 0xC0, + 0xFE, 0x0F, 0xF0, 0xFF, 0x8E, 0xFC, 0xE7, 0xEE, 0x3F, 0xE0, 0xFC, 0x06, + 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x6F, 0x1E, 0x7F, 0xFF, + 0xBF, 0xFF, 0xFE, 0x7C, 0xFE, 0x1C, 0x3F, 0x0E, 0x1F, 0x87, 0x0F, 0xC3, + 0x87, 0xE1, 0xC3, 0xF0, 0xE1, 0xF8, 0x70, 0xFC, 0x38, 0x7E, 0x1C, 0x3F, + 0x0E, 0x1F, 0x06, 0x0C, 0x6F, 0x9F, 0xFB, 0xFF, 0xF8, 0xFE, 0x0F, 0xC1, + 0xF8, 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF0, + 0x30, 0x07, 0xC0, 0x7F, 0xC3, 0xFF, 0x9E, 0x3E, 0x70, 0x3F, 0x80, 0xFE, + 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0xC0, 0x7F, 0x03, 0x9F, 0x1E, 0x7F, 0xF0, + 0xFF, 0x80, 0xF8, 0x00, 0x7F, 0x8F, 0xFC, 0xFF, 0xEE, 0x1F, 0xE0, 0xFE, + 0x0F, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x6F, 0x0E, 0xFF, 0xCF, + 0xF8, 0xFE, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0C, 0x00, 0x07, 0xF1, + 0xFF, 0x3F, 0xF7, 0xFF, 0x70, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7F, + 0x07, 0xF8, 0x77, 0xFF, 0x7F, 0xF3, 0xFF, 0x0F, 0xF0, 0x07, 0x00, 0x70, + 0x07, 0x00, 0x70, 0x06, 0x07, 0x8F, 0xFB, 0xFF, 0x78, 0xCE, 0x01, 0xC0, + 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x30, + 0x00, 0x0F, 0x81, 0xFE, 0x3F, 0xE7, 0x1C, 0x78, 0x07, 0xF8, 0x7F, 0xE3, + 0xFF, 0x1F, 0xF0, 0x3F, 0x00, 0x77, 0x07, 0x7F, 0xE7, 0xFC, 0x1F, 0x00, + 0x30, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1F, 0xE7, 0xFC, 0xFF, + 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1E, 0x03, 0xC6, 0x3F, 0xC7, + 0xF8, 0x3C, 0x00, 0x60, 0x7C, 0x1F, 0x83, 0xF0, 0x7E, 0x0F, 0xC1, 0xF8, + 0x3F, 0x07, 0xE0, 0xFC, 0x1F, 0x83, 0xF8, 0xFF, 0xFE, 0xFF, 0xCF, 0xB0, + 0x60, 0x6E, 0x07, 0xF0, 0xEF, 0x0E, 0x71, 0xC7, 0x9C, 0x79, 0xC3, 0xF8, + 0x3F, 0x83, 0xF8, 0x1F, 0x01, 0xF0, 0x0F, 0x00, 0xE0, 0x0C, 0x00, 0x60, + 0x03, 0xE0, 0x87, 0xF1, 0xC7, 0xF3, 0xC7, 0x73, 0xCE, 0x73, 0xEE, 0x7B, + 0xEE, 0x7F, 0xFC, 0x3F, 0xFC, 0x3E, 0xFC, 0x3E, 0x7C, 0x1E, 0x78, 0x1E, + 0x78, 0x1C, 0x38, 0x18, 0x30, 0x60, 0x3F, 0x07, 0xF8, 0xE7, 0x9E, 0x7D, + 0xC3, 0xF8, 0x1F, 0x00, 0xF0, 0x0F, 0x81, 0xFC, 0x3B, 0xE7, 0x9F, 0xF1, + 0xFE, 0x0F, 0xC0, 0x60, 0x70, 0x37, 0x07, 0x70, 0x77, 0x8E, 0x78, 0xE3, + 0x8C, 0x3D, 0xC3, 0xDC, 0x1F, 0x81, 0xF8, 0x1F, 0x80, 0xF0, 0x0F, 0x00, + 0x60, 0x0E, 0x00, 0xE0, 0x7C, 0x0F, 0xC0, 0xF8, 0x07, 0x00, 0x7F, 0xFF, + 0xFF, 0xFF, 0xE0, 0x1E, 0x03, 0xC0, 0x38, 0x07, 0x80, 0xF0, 0x1E, 0x01, + 0xC0, 0x3C, 0x07, 0x80, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x06, 0x1C, 0x71, + 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x71, 0xC3, 0x87, 0x8F, 0x0E, 0x1C, 0x38, + 0x70, 0xE1, 0xC3, 0xC3, 0xC7, 0x86, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xF8, 0x61, 0xE3, 0xC3, 0xC7, 0x87, 0x0E, 0x1C, 0x38, + 0x70, 0xF1, 0xE1, 0xC3, 0x8E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x8E, 0x3C, + 0x70, 0x00, 0x3C, 0x1F, 0xDF, 0xFF, 0xE7, 0xE0, 0x78 }; + +const GFXglyph aAntiCorona13pt7bGlyphs[] PROGMEM = { + { 0, 1, 1, 7, 0, 0 }, // 0x20 ' ' + { 1, 4, 20, 7, 2, -17 }, // 0x21 '!' + { 11, 8, 7, 12, 2, -17 }, // 0x22 '"' + { 18, 15, 18, 17, 1, -15 }, // 0x23 '#' + { 52, 13, 19, 16, 2, -16 }, // 0x24 '$' + { 83, 23, 19, 24, 1, -16 }, // 0x25 '%' + { 138, 14, 19, 16, 1, -16 }, // 0x26 '&' + { 172, 3, 7, 7, 2, -17 }, // 0x27 ''' + { 175, 8, 24, 9, 1, -17 }, // 0x28 '(' + { 199, 8, 24, 9, 0, -17 }, // 0x29 ')' + { 223, 12, 11, 14, 1, -18 }, // 0x2A '*' + { 240, 11, 11, 13, 1, -12 }, // 0x2B '+' + { 256, 4, 6, 6, 1, -1 }, // 0x2C ',' + { 259, 11, 3, 13, 1, -5 }, // 0x2D '-' + { 264, 4, 4, 8, 2, -1 }, // 0x2E '.' + { 266, 9, 19, 11, 1, -16 }, // 0x2F '/' + { 288, 15, 19, 17, 1, -16 }, // 0x30 '0' + { 324, 5, 19, 8, 1, -16 }, // 0x31 '1' + { 336, 13, 19, 14, 0, -16 }, // 0x32 '2' + { 367, 11, 19, 13, 1, -16 }, // 0x33 '3' + { 394, 12, 19, 13, 0, -16 }, // 0x34 '4' + { 423, 12, 19, 14, 1, -16 }, // 0x35 '5' + { 452, 13, 19, 15, 1, -16 }, // 0x36 '6' + { 483, 12, 19, 12, 0, -16 }, // 0x37 '7' + { 512, 12, 19, 14, 1, -16 }, // 0x38 '8' + { 541, 14, 19, 15, 1, -16 }, // 0x39 '9' + { 575, 4, 13, 8, 2, -10 }, // 0x3A ':' + { 582, 4, 15, 7, 2, -10 }, // 0x3B ';' + { 590, 14, 12, 16, 1, -12 }, // 0x3C '<' + { 611, 11, 9, 14, 1, -11 }, // 0x3D '=' + { 624, 14, 12, 16, 1, -12 }, // 0x3E '>' + { 645, 12, 19, 14, 1, -16 }, // 0x3F '?' + { 674, 18, 19, 21, 1, -16 }, // 0x40 '@' + { 717, 15, 19, 15, -1, -16 }, // 0x41 'A' + { 753, 13, 19, 15, 1, -16 }, // 0x42 'B' + { 784, 15, 19, 17, 1, -16 }, // 0x43 'C' + { 820, 15, 19, 17, 1, -16 }, // 0x44 'D' + { 856, 13, 19, 15, 1, -16 }, // 0x45 'E' + { 887, 10, 19, 11, 1, -16 }, // 0x46 'F' + { 911, 15, 19, 17, 1, -16 }, // 0x47 'G' + { 947, 14, 19, 17, 1, -16 }, // 0x48 'H' + { 981, 3, 19, 6, 1, -16 }, // 0x49 'I' + { 989, 11, 19, 11, -1, -16 }, // 0x4A 'J' + { 1016, 14, 19, 15, 1, -16 }, // 0x4B 'K' + { 1050, 10, 19, 11, 1, -16 }, // 0x4C 'L' + { 1074, 15, 19, 18, 1, -16 }, // 0x4D 'M' + { 1110, 14, 19, 17, 1, -16 }, // 0x4E 'N' + { 1144, 18, 19, 20, 1, -16 }, // 0x4F 'O' + { 1187, 13, 19, 15, 1, -16 }, // 0x50 'P' + { 1218, 18, 19, 20, 1, -16 }, // 0x51 'Q' + { 1261, 14, 19, 16, 1, -16 }, // 0x52 'R' + { 1295, 14, 19, 15, 0, -16 }, // 0x53 'S' + { 1329, 13, 19, 15, 1, -16 }, // 0x54 'T' + { 1360, 13, 19, 15, 1, -16 }, // 0x55 'U' + { 1391, 15, 19, 15, 0, -16 }, // 0x56 'V' + { 1427, 21, 19, 22, 1, -16 }, // 0x57 'W' + { 1477, 15, 19, 17, 1, -16 }, // 0x58 'X' + { 1513, 15, 19, 17, 1, -16 }, // 0x59 'Y' + { 1549, 15, 19, 17, 1, -16 }, // 0x5A 'Z' + { 1585, 7, 24, 8, 1, -17 }, // 0x5B '[' + { 1606, 9, 19, 11, 1, -16 }, // 0x5C '\' + { 1628, 7, 24, 9, 0, -17 }, // 0x5D ']' + { 1649, 12, 11, 13, 0, -17 }, // 0x5E '^' + { 1666, 11, 3, 13, 1, 2 }, // 0x5F '_' + { 1671, 7, 7, 8, 1, -16 }, // 0x60 '`' + { 1678, 11, 15, 13, 1, -12 }, // 0x61 'a' + { 1699, 12, 20, 14, 1, -17 }, // 0x62 'b' + { 1729, 12, 15, 13, 1, -12 }, // 0x63 'c' + { 1752, 12, 20, 14, 1, -17 }, // 0x64 'd' + { 1782, 12, 15, 14, 1, -12 }, // 0x65 'e' + { 1805, 10, 20, 10, 1, -17 }, // 0x66 'f' + { 1830, 12, 20, 14, 1, -12 }, // 0x67 'g' + { 1860, 12, 20, 14, 1, -17 }, // 0x68 'h' + { 1890, 4, 20, 6, 1, -17 }, // 0x69 'i' + { 1900, 12, 25, 6, -7, -17 }, // 0x6A 'j' + { 1938, 12, 20, 14, 1, -17 }, // 0x6B 'k' + { 1968, 3, 20, 5, 1, -17 }, // 0x6C 'l' + { 1976, 17, 15, 19, 1, -12 }, // 0x6D 'm' + { 2008, 11, 15, 13, 1, -12 }, // 0x6E 'n' + { 2029, 14, 15, 16, 1, -12 }, // 0x6F 'o' + { 2056, 12, 20, 14, 1, -12 }, // 0x70 'p' + { 2086, 12, 20, 15, 1, -12 }, // 0x71 'q' + { 2116, 11, 15, 12, 1, -12 }, // 0x72 'r' + { 2137, 12, 15, 13, 0, -12 }, // 0x73 's' + { 2160, 11, 19, 12, 1, -16 }, // 0x74 't' + { 2187, 11, 15, 13, 1, -12 }, // 0x75 'u' + { 2208, 12, 15, 13, 1, -12 }, // 0x76 'v' + { 2231, 16, 15, 18, 1, -12 }, // 0x77 'w' + { 2261, 12, 15, 14, 1, -12 }, // 0x78 'x' + { 2284, 12, 20, 14, 1, -12 }, // 0x79 'y' + { 2314, 12, 15, 14, 1, -12 }, // 0x7A 'z' + { 2337, 7, 24, 8, 0, -17 }, // 0x7B '{' + { 2358, 3, 26, 7, 2, -17 }, // 0x7C '|' + { 2368, 7, 25, 8, 1, -17 }, // 0x7D '}' + { 2390, 11, 5, 14, 2, -8 } }; // 0x7E '~' + +const GFXfont aAntiCorona13pt7b PROGMEM = { + (uint8_t *)aAntiCorona13pt7bBitmaps, + (GFXglyph *)aAntiCorona13pt7bGlyphs, + 0x20, 0x7E, 28 }; + +// Approx. 3069 bytes diff --git a/src/aAntiCorona14pt7b.h b/src/aAntiCorona14pt7b.h new file mode 100644 index 0000000..46f5e55 --- /dev/null +++ b/src/aAntiCorona14pt7b.h @@ -0,0 +1,337 @@ +const uint8_t aAntiCorona14pt7bBitmaps[] PROGMEM = { + 0x00, 0x6E, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEE, 0xEC, 0x00, 0x0F, 0xFF, + 0x63, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0x42, 0x00, 0x00, 0x00, 0xE7, 0x00, + 0x73, 0x80, 0x71, 0xC0, 0x39, 0xC0, 0x1C, 0xE0, 0x7F, 0xFE, 0x7F, 0xFF, + 0x3F, 0xFF, 0x07, 0x18, 0x03, 0x9C, 0x01, 0xCE, 0x07, 0xFF, 0xE7, 0xFF, + 0xF3, 0xFF, 0xF0, 0x71, 0x80, 0x39, 0xC0, 0x38, 0xE0, 0x1C, 0x60, 0x0C, + 0x30, 0x00, 0x01, 0x80, 0x1F, 0x01, 0xFF, 0x0F, 0xFE, 0x3F, 0xF9, 0xCF, + 0xC7, 0xB8, 0x1F, 0xE0, 0x7F, 0xC0, 0xFF, 0xC1, 0xFF, 0x81, 0xFF, 0x03, + 0xFC, 0x0E, 0xF0, 0x39, 0xDE, 0xE7, 0x7F, 0xF9, 0xFF, 0xE7, 0xFF, 0x03, + 0xF0, 0x03, 0x00, 0x0F, 0x01, 0x80, 0x3F, 0x83, 0x80, 0x7F, 0xC3, 0x80, + 0x71, 0xE7, 0x80, 0xE1, 0xE7, 0x00, 0xE0, 0xE7, 0x00, 0xE0, 0xEE, 0x00, + 0xE0, 0xEE, 0x00, 0xF0, 0xFC, 0x78, 0xF9, 0xDD, 0xFC, 0x7F, 0xFB, 0xFE, + 0x3F, 0xBB, 0x8F, 0x1E, 0x77, 0x0F, 0x00, 0x77, 0x07, 0x00, 0xE7, 0x07, + 0x00, 0xE7, 0x07, 0x01, 0xC7, 0x87, 0x01, 0xC7, 0xCE, 0x03, 0x83, 0xFE, + 0x03, 0x81, 0xFC, 0x03, 0x00, 0xF0, 0x07, 0x80, 0x1F, 0x80, 0x7F, 0x80, + 0xCF, 0x03, 0x8E, 0x07, 0x1C, 0x0F, 0x38, 0x1F, 0xE0, 0x3F, 0xC0, 0x7F, + 0x00, 0xFC, 0x03, 0xFC, 0xC7, 0xFF, 0x9E, 0xFF, 0x38, 0xFE, 0x70, 0xFC, + 0xF0, 0xFF, 0xF0, 0xFD, 0xFF, 0xF3, 0xFE, 0x01, 0xF0, 0x00, 0x7F, 0xFF, + 0xD0, 0x07, 0x07, 0x87, 0xC7, 0x03, 0x03, 0x81, 0xC0, 0xC0, 0xE0, 0x70, + 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xF0, 0x78, 0x1C, 0x0F, 0x07, + 0x81, 0xE0, 0xFC, 0x3E, 0x0F, 0x00, 0x70, 0xF8, 0xFC, 0x3C, 0x1E, 0x1E, + 0x0E, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, + 0x0E, 0x0E, 0x0C, 0x1C, 0x78, 0xF0, 0xE0, 0x03, 0x00, 0x70, 0x07, 0x07, + 0x70, 0xFF, 0xFF, 0xFF, 0x7F, 0xE1, 0xFC, 0x1F, 0xC3, 0xFC, 0x79, 0xC7, + 0x18, 0x06, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, + 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xC0, 0x77, 0xBC, 0xE7, 0x31, 0x00, + 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xF0, 0x01, 0x80, 0x70, 0x38, 0x0E, + 0x07, 0x81, 0xC0, 0x70, 0x38, 0x0E, 0x03, 0x81, 0xC0, 0x70, 0x1C, 0x0E, + 0x03, 0x81, 0xE0, 0x70, 0x1C, 0x0F, 0x03, 0x80, 0xC0, 0x00, 0x03, 0xE0, + 0x0F, 0xF8, 0x1F, 0xFC, 0x3C, 0x7C, 0x30, 0x1E, 0x70, 0x1E, 0x60, 0x0F, + 0xE0, 0x0F, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, + 0xF0, 0x07, 0xF0, 0x06, 0x78, 0x0E, 0x78, 0x0C, 0x3E, 0x3C, 0x3F, 0xF8, + 0x1F, 0xF0, 0x07, 0xC0, 0x0C, 0x73, 0xDF, 0x7D, 0xF1, 0xC7, 0x1C, 0x71, + 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x18, 0x3F, 0x07, 0xFE, 0x3F, + 0xF9, 0x83, 0xC0, 0x0F, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0xF0, 0x0F, + 0x00, 0xF8, 0x0F, 0x80, 0xF8, 0x0F, 0x80, 0x78, 0x07, 0x80, 0x78, 0x03, + 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x1F, 0x03, 0xFC, 0x1F, 0xF0, + 0xC7, 0xC0, 0x1E, 0x00, 0x70, 0x03, 0x80, 0x1C, 0x01, 0xE0, 0xFE, 0x0F, + 0xF8, 0x7F, 0xE0, 0x1F, 0x80, 0x3C, 0x00, 0xE0, 0x07, 0x00, 0x3B, 0x83, + 0xBF, 0xF9, 0xFF, 0x87, 0xF0, 0x00, 0x00, 0x60, 0x07, 0x00, 0x38, 0x03, + 0x80, 0x3C, 0x01, 0xC0, 0x1E, 0x60, 0xE7, 0x0E, 0x38, 0xF1, 0xC7, 0x0E, + 0x78, 0x77, 0x83, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x38, 0x01, 0xC0, + 0x0E, 0x00, 0x70, 0x03, 0x00, 0x3F, 0xE7, 0xFE, 0x7F, 0xE7, 0x00, 0x70, + 0x07, 0x00, 0x70, 0x07, 0x00, 0x7F, 0x07, 0xFC, 0x7F, 0xE0, 0x1F, 0x00, + 0xF0, 0x07, 0x00, 0x70, 0x07, 0x00, 0x66, 0x0E, 0xFF, 0xCF, 0xF8, 0x7E, + 0x00, 0x03, 0xC0, 0x3F, 0xC1, 0xFF, 0x8E, 0x3E, 0x38, 0x71, 0xC0, 0x07, + 0x00, 0x3D, 0xF8, 0xEF, 0xF3, 0xFF, 0xEF, 0x87, 0xBC, 0x0F, 0xF0, 0x1F, + 0xC0, 0x7F, 0x81, 0xDE, 0x07, 0x7C, 0x39, 0xFF, 0xE3, 0xFF, 0x07, 0xF8, + 0x0F, 0x80, 0x7F, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0xE0, 0x0F, 0x00, 0x70, + 0x03, 0x80, 0x3C, 0x01, 0xC0, 0x0E, 0x00, 0xE0, 0x07, 0x00, 0x78, 0x03, + 0x80, 0x1C, 0x01, 0xE0, 0x0E, 0x00, 0x70, 0x07, 0x00, 0x38, 0x01, 0x80, + 0x00, 0x0F, 0x80, 0xFE, 0x0F, 0xF8, 0x63, 0xC7, 0x0E, 0x38, 0x71, 0xE3, + 0x8F, 0x9C, 0x7F, 0xE1, 0xFF, 0x0F, 0xFC, 0xFF, 0xF7, 0x1F, 0xF0, 0x3F, + 0x80, 0xFC, 0x07, 0xF0, 0x3F, 0xC1, 0x9F, 0xF8, 0x7F, 0x81, 0xF8, 0x00, + 0x07, 0xC0, 0x3F, 0xC0, 0xFF, 0xC3, 0xFF, 0xC7, 0x0F, 0x9C, 0x0F, 0xB8, + 0x0F, 0x70, 0x1E, 0xE0, 0x3D, 0xE0, 0x7B, 0xE1, 0xF3, 0xFF, 0xE3, 0xFF, + 0xC1, 0xF3, 0x80, 0x0F, 0x00, 0x1C, 0x38, 0x38, 0xF8, 0xE1, 0xFF, 0x81, + 0xFE, 0x00, 0xF8, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0xFF, + 0xF0, 0x00, 0x00, 0x06, 0xFF, 0x76, 0x6C, 0x00, 0x06, 0x00, 0x3E, 0x00, + 0xFE, 0x07, 0xFC, 0x3F, 0xE0, 0x7F, 0x80, 0xFE, 0x00, 0xFF, 0xC0, 0x7F, + 0xF8, 0x0F, 0xFE, 0x03, 0xFF, 0x00, 0x7E, 0x00, 0x1C, 0x7F, 0xFF, 0xFF, + 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, 0x70, + 0x00, 0xFE, 0x00, 0xFF, 0x80, 0xFF, 0xF0, 0x1F, 0xFC, 0x03, 0xFE, 0x00, + 0xFE, 0x01, 0xFE, 0x0F, 0xF8, 0x3F, 0xC0, 0xFF, 0x00, 0xF8, 0x00, 0xE0, + 0x00, 0x3F, 0x0F, 0xFC, 0xFF, 0xEC, 0x1E, 0x00, 0xF0, 0x07, 0x00, 0x70, + 0x07, 0x00, 0xF0, 0x0E, 0x01, 0xC0, 0x3C, 0x07, 0x80, 0xF0, 0x0E, 0x00, + 0xE0, 0x0C, 0x00, 0x00, 0x1C, 0x01, 0xE0, 0x0E, 0x00, 0x00, 0xFC, 0x00, + 0x7F, 0xF0, 0x0F, 0xFF, 0x81, 0xE0, 0xFC, 0x38, 0x03, 0xE3, 0x00, 0x1E, + 0x70, 0x79, 0xF6, 0x0F, 0xCF, 0xE1, 0xFC, 0xFE, 0x3B, 0xC7, 0xE3, 0xBC, + 0x7E, 0x3F, 0xC7, 0xE3, 0xFC, 0x7F, 0x3F, 0xC6, 0xF1, 0xFC, 0xE7, 0x9F, + 0xFC, 0x7C, 0x1F, 0x83, 0xF0, 0xF0, 0x1F, 0xF0, 0x00, 0xFF, 0x00, 0x01, + 0xE0, 0x00, 0x00, 0xC0, 0x01, 0xC0, 0x03, 0xC0, 0x03, 0xE0, 0x03, 0xE0, + 0x07, 0xE0, 0x07, 0xF0, 0x07, 0xF0, 0x0F, 0xF8, 0x0E, 0x78, 0x1E, 0x78, + 0x1E, 0x7C, 0x1C, 0x3C, 0x3F, 0xFC, 0x3F, 0xFE, 0x3F, 0xFE, 0x70, 0x1E, + 0x70, 0x0F, 0x70, 0x0F, 0xE0, 0x0F, 0xE0, 0x06, 0x7F, 0x83, 0xFF, 0x8F, + 0xFF, 0x38, 0x7C, 0xE0, 0xFB, 0x81, 0xEE, 0x07, 0xB8, 0x1E, 0xE0, 0xF3, + 0xFF, 0xCF, 0xFF, 0x3F, 0xFE, 0xE0, 0xFF, 0x80, 0xFE, 0x01, 0xF8, 0x07, + 0xE0, 0x1B, 0xC0, 0xEF, 0xFF, 0x3F, 0xF8, 0xFF, 0x80, 0x01, 0xFC, 0x07, + 0xFF, 0x0F, 0xFF, 0x1E, 0x1F, 0x38, 0x00, 0x30, 0x00, 0x70, 0x00, 0x60, + 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xF0, + 0x00, 0xF0, 0x00, 0x78, 0x00, 0x7C, 0x00, 0x3F, 0x07, 0x1F, 0xFF, 0x0F, + 0xFE, 0x03, 0xF0, 0x7F, 0xC0, 0xFF, 0xF0, 0xFF, 0xF8, 0xE0, 0xFC, 0xE0, + 0x3E, 0xE0, 0x1E, 0xE0, 0x1F, 0xE0, 0x0F, 0xE0, 0x07, 0xE0, 0x07, 0xE0, + 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x06, 0xE0, 0x0E, 0xE0, 0x0C, 0xE0, + 0x1C, 0xF0, 0x78, 0xFF, 0xF0, 0xFF, 0xE0, 0xFF, 0x00, 0x7F, 0xF3, 0xFF, + 0xCF, 0xFF, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x0E, 0x00, 0x38, 0x00, 0xE0, + 0x03, 0xF8, 0x0F, 0xE0, 0x3F, 0x00, 0xE0, 0x03, 0x80, 0x0E, 0x00, 0x38, + 0x00, 0xE0, 0x03, 0x80, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x7F, 0xFF, + 0xFF, 0xFF, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1F, 0xC3, + 0xF8, 0x7E, 0x0E, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, + 0x70, 0x0C, 0x00, 0x00, 0xFC, 0x07, 0xFF, 0x0F, 0xFF, 0x1E, 0x0F, 0x38, + 0x02, 0x30, 0x00, 0x70, 0x00, 0x60, 0x00, 0xE0, 0x00, 0xE0, 0x00, 0xE0, + 0x00, 0xE0, 0x3F, 0xE0, 0x7F, 0xF0, 0x7F, 0xF0, 0x07, 0x78, 0x07, 0x7C, + 0x07, 0x3F, 0x07, 0x1F, 0xFF, 0x0F, 0xFF, 0x03, 0xF6, 0x60, 0x0F, 0x80, + 0x7E, 0x01, 0xF8, 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xE0, + 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, + 0x07, 0xE0, 0x1F, 0x80, 0x7E, 0x01, 0xF8, 0x07, 0xC0, 0x18, 0x7F, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x30, 0x07, 0x00, 0x70, 0x07, + 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, + 0x00, 0x70, 0x07, 0x00, 0x70, 0x06, 0x00, 0xE7, 0x0C, 0x7F, 0xC7, 0xF8, + 0x3E, 0x00, 0x60, 0x19, 0xC0, 0x73, 0x81, 0xE7, 0x07, 0x8E, 0x3E, 0x1C, + 0xF8, 0x3B, 0xE0, 0x7F, 0x00, 0xFC, 0x01, 0xF0, 0x03, 0xE0, 0x07, 0xF0, + 0x0F, 0xF0, 0x1F, 0xF0, 0x3B, 0xF0, 0x73, 0xF8, 0xE3, 0xF9, 0xC3, 0xFB, + 0x81, 0xFF, 0x01, 0xEC, 0x01, 0x80, 0x60, 0x1C, 0x03, 0x80, 0x70, 0x0E, + 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, + 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0xFF, 0xFF, 0xFF, 0xFC, 0x60, + 0x03, 0xF0, 0x07, 0xF0, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xF8, 0x1F, 0xFC, + 0x1F, 0xFC, 0x3F, 0xFE, 0x3F, 0xFE, 0x3F, 0xFE, 0x7F, 0xFF, 0x77, 0xEF, + 0xF7, 0xEF, 0xE7, 0xE7, 0xE7, 0xE7, 0xC7, 0xE7, 0xC7, 0xE3, 0xC7, 0xE3, + 0x87, 0xE0, 0x07, 0xC0, 0x06, 0x60, 0x0F, 0xC0, 0x7F, 0x81, 0xFE, 0x07, + 0xFC, 0x1F, 0xF8, 0x7F, 0xE1, 0xFF, 0xC7, 0xEF, 0x9F, 0xBF, 0x7E, 0x7D, + 0xF8, 0xFF, 0xE1, 0xFF, 0x87, 0xFE, 0x0F, 0xF8, 0x1F, 0xE0, 0x3F, 0x80, + 0xFE, 0x01, 0xF8, 0x07, 0xC0, 0x18, 0x00, 0xFC, 0x00, 0x7F, 0xF0, 0x0F, + 0xFF, 0x81, 0xE0, 0xFC, 0x38, 0x03, 0xE3, 0x00, 0x1E, 0x70, 0x01, 0xF6, + 0x00, 0x0F, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x07, + 0xE0, 0x00, 0x7F, 0x00, 0x06, 0xF0, 0x00, 0xE7, 0x80, 0x0C, 0x7C, 0x01, + 0xC3, 0xF0, 0x78, 0x1F, 0xFF, 0x00, 0xFF, 0xE0, 0x03, 0xF0, 0x00, 0x7F, + 0xC3, 0xFF, 0xCF, 0xFF, 0xB8, 0x3E, 0xE0, 0x3F, 0x80, 0xFE, 0x01, 0xF8, + 0x07, 0xE0, 0x1B, 0x81, 0xEF, 0xFF, 0x3F, 0xF8, 0xFF, 0x83, 0x80, 0x0E, + 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x0E, 0x00, 0x38, 0x00, 0xC0, 0x00, + 0x00, 0xFC, 0x00, 0x7F, 0xF0, 0x0F, 0xFF, 0x81, 0xE0, 0xFC, 0x38, 0x03, + 0xE3, 0x00, 0x1E, 0x70, 0x01, 0xF6, 0x00, 0x0F, 0xE0, 0x00, 0x7E, 0x00, + 0x07, 0xE0, 0x00, 0x7E, 0x00, 0x07, 0xE0, 0x00, 0x7F, 0x00, 0x06, 0xF0, + 0x00, 0xE7, 0x80, 0x0C, 0x7C, 0x01, 0xC3, 0xF0, 0x78, 0x1F, 0xFF, 0x00, + 0xFF, 0xE0, 0x03, 0xF0, 0x00, 0x7F, 0xC1, 0xFF, 0xE3, 0xFF, 0xE7, 0x07, + 0xEE, 0x03, 0xDC, 0x03, 0xB8, 0x07, 0x70, 0x1E, 0xFF, 0xF9, 0xFF, 0xE3, + 0xFF, 0x87, 0xFE, 0x0F, 0xF0, 0x1F, 0xF8, 0x3B, 0xF8, 0x73, 0xF8, 0xE3, + 0xF9, 0xC3, 0xFB, 0x81, 0xF7, 0x01, 0xEC, 0x01, 0x80, 0x07, 0xE0, 0x3F, + 0xF0, 0xFF, 0xF1, 0x83, 0xE7, 0x01, 0x8E, 0x00, 0x1E, 0x00, 0x3F, 0x80, + 0x7F, 0xF0, 0x7F, 0xF0, 0xFF, 0xF0, 0x7F, 0xF0, 0x1F, 0xE0, 0x07, 0xC0, + 0x07, 0x80, 0x07, 0x30, 0x0C, 0xF8, 0x39, 0xFF, 0xE3, 0xFF, 0x81, 0xFC, + 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x81, 0xC0, 0x07, 0x00, 0x1C, 0x00, + 0x70, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, + 0x1C, 0x00, 0x70, 0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0x70, 0x01, 0xC0, + 0x06, 0x00, 0x60, 0x1F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, 0x1F, + 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x01, 0xF8, 0x0F, 0xC0, 0x7E, 0x03, 0xF0, + 0x1F, 0x80, 0xFE, 0x06, 0xF0, 0x73, 0xC3, 0x1F, 0xF8, 0x7F, 0x80, 0xF0, + 0x00, 0x60, 0x07, 0xF0, 0x07, 0xF0, 0x0E, 0xF0, 0x0E, 0x78, 0x0E, 0x78, + 0x1C, 0x78, 0x1C, 0x3C, 0x3C, 0x3C, 0x38, 0x3C, 0x38, 0x1E, 0x78, 0x1E, + 0x70, 0x1F, 0x70, 0x0F, 0xE0, 0x0F, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0x07, + 0xC0, 0x03, 0xC0, 0x03, 0x80, 0x03, 0x00, 0x60, 0x00, 0x0D, 0xC0, 0x00, + 0x3F, 0xC0, 0x60, 0x77, 0x81, 0xC0, 0xEF, 0x03, 0x81, 0xCF, 0x0F, 0x87, + 0x1E, 0x1F, 0x0E, 0x3C, 0x3E, 0x1C, 0x38, 0xFE, 0x78, 0x79, 0xFC, 0xE0, + 0xF3, 0xF9, 0xC1, 0xEE, 0x7B, 0x81, 0xFC, 0xFE, 0x03, 0xF9, 0xFC, 0x07, + 0xF1, 0xF8, 0x07, 0xC3, 0xF0, 0x0F, 0x87, 0xC0, 0x1F, 0x07, 0x80, 0x3C, + 0x0F, 0x00, 0x38, 0x1C, 0x00, 0x60, 0x18, 0x00, 0x60, 0x03, 0xF0, 0x07, + 0xF8, 0x0F, 0xFC, 0x1E, 0x7C, 0x1C, 0x3E, 0x38, 0x1F, 0x78, 0x1F, 0xF0, + 0x0F, 0xE0, 0x07, 0xC0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xF0, 0x0E, 0xF8, + 0x1E, 0xFC, 0x1C, 0x7C, 0x38, 0x3E, 0x78, 0x1F, 0xF0, 0x1F, 0xE0, 0x0F, + 0xC0, 0x06, 0x60, 0x03, 0xF0, 0x07, 0xF0, 0x0F, 0xF8, 0x1E, 0x7C, 0x3C, + 0x3E, 0x78, 0x3E, 0x70, 0x1F, 0xE0, 0x0F, 0xE0, 0x0F, 0xC0, 0x07, 0x80, + 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, + 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFE, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0x78, 0x00, 0xF0, + 0x01, 0xE0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0x80, 0x07, 0x80, 0x0F, 0x00, + 0x1E, 0x00, 0x1E, 0x00, 0x3C, 0x00, 0x78, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFE, 0x7F, 0xFF, 0xF7, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, + 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x3F, 0xFF, 0xFC, + 0x60, 0x3C, 0x0F, 0x03, 0xC0, 0x78, 0x1E, 0x07, 0x80, 0xF0, 0x3C, 0x0F, + 0x01, 0xE0, 0x78, 0x1F, 0x03, 0xC0, 0xF0, 0x1E, 0x07, 0x81, 0xE0, 0x3C, + 0x0E, 0x03, 0x00, 0x7F, 0xFF, 0xF8, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, + 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xDF, 0xFF, + 0xFC, 0x02, 0x00, 0x70, 0x0F, 0x00, 0xF8, 0x1F, 0x83, 0xFC, 0x3B, 0xE7, + 0x3E, 0x71, 0xFE, 0x0F, 0xE0, 0xFC, 0x06, 0x7F, 0xFF, 0xFF, 0xFF, 0xE0, + 0x00, 0xE3, 0xC7, 0xC7, 0xC7, 0xC7, 0x82, 0x0F, 0x83, 0xFE, 0x7F, 0xE7, + 0x0F, 0x00, 0xF0, 0x3F, 0x1F, 0xF3, 0xFF, 0x7F, 0xFF, 0xE7, 0xE0, 0x7E, + 0x07, 0xF0, 0x7F, 0xFF, 0x7F, 0xF1, 0xF6, 0x60, 0x07, 0x00, 0x38, 0x01, + 0xC0, 0x0E, 0x00, 0x70, 0x03, 0xFE, 0x1F, 0xF8, 0xFF, 0xE7, 0x0F, 0xB8, + 0x3F, 0xC0, 0xFE, 0x03, 0xF0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x37, 0x03, + 0xBC, 0x39, 0xFF, 0x8F, 0xF8, 0x7F, 0x80, 0x03, 0xE0, 0x7F, 0x87, 0xFC, + 0x70, 0xC7, 0x00, 0x30, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x3C, + 0x01, 0xF0, 0x07, 0xC3, 0x1F, 0xF8, 0x7F, 0xC1, 0xF8, 0x00, 0x30, 0x07, + 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x07, 0xF1, 0xFF, 0x3F, 0xF3, 0x0F, + 0x70, 0x76, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xF0, 0x7F, 0x07, + 0x7C, 0x77, 0xFF, 0x3F, 0xF0, 0xFE, 0x03, 0xE0, 0x7F, 0x87, 0xFE, 0x70, + 0xF7, 0x03, 0xB0, 0x1F, 0x87, 0xDF, 0xFE, 0xFF, 0xE7, 0xFE, 0x3F, 0x81, + 0xF0, 0x07, 0xC3, 0x9F, 0xFC, 0x7F, 0xC1, 0xF8, 0x07, 0x83, 0xFC, 0x7F, + 0x9C, 0xE3, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x7F, 0x1F, 0xE3, 0xF8, 0x38, + 0x07, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0E, 0x01, 0xC0, 0x38, 0x07, + 0x00, 0xC0, 0x00, 0x07, 0xF1, 0xFF, 0x3F, 0xF3, 0x0F, 0x70, 0x76, 0x07, + 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xF0, 0x7F, 0x07, 0x7C, 0x77, 0xFF, + 0x3F, 0xF0, 0xFF, 0x00, 0x60, 0x0E, 0x30, 0xC7, 0xFC, 0x7F, 0x83, 0xE0, + 0x60, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE7, 0x8F, 0xFE, + 0xFF, 0xEF, 0x8F, 0xF0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, + 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7C, 0x06, 0xEF, 0xF0, 0x00, + 0x37, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x76, 0x00, 0xE0, 0x0F, 0x00, + 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x07, 0x00, 0x70, 0x07, 0x00, + 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, + 0x70, 0x07, 0x00, 0x70, 0x07, 0x00, 0x60, 0x0E, 0x70, 0xCF, 0xFC, 0xFF, + 0x87, 0xE0, 0x60, 0x07, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, 0x70, 0x03, + 0x83, 0x1C, 0x78, 0xEF, 0xC7, 0xFC, 0x3F, 0x81, 0xF0, 0x0F, 0x80, 0x7E, + 0x03, 0xF8, 0x1F, 0xF0, 0xFF, 0xC7, 0x3F, 0x38, 0xFD, 0xC3, 0xFE, 0x0F, + 0x60, 0x30, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x6F, + 0x8F, 0x9F, 0xFF, 0xFB, 0xFF, 0xFF, 0x78, 0xF8, 0xFF, 0x0F, 0x0F, 0xC1, + 0xC1, 0xF8, 0x38, 0x3F, 0x07, 0x07, 0xE0, 0xE0, 0xFC, 0x1C, 0x1F, 0x83, + 0x83, 0xF0, 0x70, 0x7E, 0x0E, 0x0F, 0xC1, 0xC1, 0xF8, 0x38, 0x3E, 0x06, + 0x06, 0x67, 0x8F, 0xFE, 0xFF, 0xEF, 0x0F, 0xF0, 0x7E, 0x07, 0xE0, 0x7E, + 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7C, + 0x06, 0x07, 0xE0, 0x1F, 0xE0, 0x7F, 0xE1, 0xC3, 0xE7, 0x03, 0xEC, 0x03, + 0xF8, 0x03, 0xF0, 0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0xC0, 0x37, 0xC0, 0xE7, + 0xC3, 0x87, 0xFE, 0x07, 0xF8, 0x07, 0xC0, 0x7F, 0x0F, 0xFC, 0xFF, 0xEE, + 0x3E, 0xE0, 0xFE, 0x0F, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x6E, + 0x0E, 0xF0, 0xCF, 0xFC, 0xFF, 0x8F, 0xE0, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, + 0x00, 0xE0, 0x0C, 0x00, 0x03, 0xF8, 0x7F, 0xCF, 0xFE, 0x7F, 0xF7, 0x07, + 0xB0, 0x1F, 0x80, 0xFC, 0x07, 0xE0, 0x3F, 0x81, 0xFC, 0x0F, 0xF8, 0x77, + 0xFF, 0x9F, 0xFC, 0xFF, 0xE1, 0xFF, 0x00, 0x38, 0x01, 0xC0, 0x0E, 0x00, + 0x70, 0x03, 0x80, 0x18, 0x07, 0xC7, 0xFE, 0xFF, 0xEF, 0x0C, 0xF0, 0x0E, + 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, + 0x00, 0xE0, 0x0C, 0x00, 0x0F, 0xC1, 0xFF, 0x3F, 0xF7, 0x1E, 0x78, 0x07, + 0xF0, 0x7F, 0xC7, 0xFE, 0x3F, 0xF0, 0xFF, 0x01, 0xF0, 0x07, 0x78, 0x67, + 0xFE, 0x7F, 0xC3, 0xF0, 0x30, 0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, + 0x00, 0x70, 0x07, 0xFC, 0xFF, 0xCF, 0xF8, 0x70, 0x07, 0x00, 0x70, 0x07, + 0x00, 0x70, 0x07, 0x00, 0x78, 0x03, 0xC6, 0x3F, 0xE1, 0xFE, 0x0F, 0x80, + 0x60, 0x3E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x07, + 0xE0, 0x7E, 0x07, 0xE0, 0x7E, 0x0F, 0xF0, 0xF7, 0xFF, 0x7F, 0xF1, 0xF6, + 0x60, 0x3F, 0x07, 0xF0, 0x7F, 0x07, 0x78, 0xE7, 0x8E, 0x79, 0xE3, 0xDC, + 0x3D, 0xC3, 0xF8, 0x1F, 0x81, 0xF8, 0x0F, 0x00, 0xF0, 0x0F, 0x00, 0x60, + 0x60, 0x01, 0xF8, 0x21, 0xFC, 0x30, 0xFE, 0x3C, 0x77, 0x1E, 0x7B, 0xDF, + 0x39, 0xEF, 0xDC, 0xF7, 0xEE, 0x3F, 0xFE, 0x1F, 0xBF, 0x0F, 0xDF, 0x87, + 0xEF, 0xC1, 0xE3, 0xC0, 0xF1, 0xE0, 0x78, 0xF0, 0x18, 0x30, 0x60, 0x3F, + 0x07, 0xF8, 0xFF, 0x8E, 0x7D, 0xC3, 0xF8, 0x3F, 0x81, 0xF0, 0x0F, 0x81, + 0xFC, 0x1F, 0xC3, 0xBE, 0x71, 0xFF, 0x1F, 0xE0, 0xFC, 0x06, 0x30, 0x1B, + 0x81, 0xFC, 0x1E, 0xF0, 0xE7, 0x87, 0x3E, 0x70, 0xF3, 0x87, 0x9C, 0x1F, + 0xC0, 0xFE, 0x07, 0xF0, 0x1F, 0x00, 0xF8, 0x07, 0x80, 0x1C, 0x00, 0xE0, + 0x0E, 0x00, 0x70, 0x1F, 0x81, 0xF8, 0x0F, 0xC0, 0x3C, 0x00, 0x7F, 0xFF, + 0xFF, 0xFF, 0xF0, 0x1E, 0x03, 0xC0, 0x3C, 0x07, 0x80, 0xF0, 0x0F, 0x01, + 0xE0, 0x3C, 0x03, 0xC0, 0x78, 0x0F, 0xFF, 0xFF, 0xFF, 0xFE, 0x06, 0x0E, + 0x1E, 0x1C, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x70, 0x70, 0x78, + 0x78, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3C, 0x3E, 0x1F, 0x1E, 0x0E, + 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x61, + 0xE3, 0xC7, 0xC7, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xE3, 0xE3, 0xC7, + 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x38, 0xF1, 0xC0, 0x00, 0x3E, + 0x37, 0xF7, 0xFF, 0xFE, 0xFE, 0xC7, 0xC0, 0x10 }; + +const GFXglyph aAntiCorona14pt7bGlyphs[] PROGMEM = { + { 0, 1, 1, 7, 0, 0 }, // 0x20 ' ' + { 1, 4, 22, 7, 2, -19 }, // 0x21 '!' + { 12, 8, 7, 13, 2, -19 }, // 0x22 '"' + { 19, 17, 20, 19, 1, -17 }, // 0x23 '#' + { 62, 14, 21, 17, 2, -18 }, // 0x24 '$' + { 99, 24, 21, 25, 1, -18 }, // 0x25 '%' + { 162, 15, 21, 17, 1, -18 }, // 0x26 '&' + { 202, 3, 7, 7, 2, -19 }, // 0x27 ''' + { 205, 9, 25, 10, 1, -19 }, // 0x28 '(' + { 234, 8, 25, 10, 1, -19 }, // 0x29 ')' + { 259, 12, 12, 14, 1, -19 }, // 0x2A '*' + { 277, 12, 12, 14, 1, -13 }, // 0x2B '+' + { 295, 5, 7, 8, 2, -2 }, // 0x2C ',' + { 300, 12, 3, 14, 1, -5 }, // 0x2D '-' + { 305, 4, 3, 8, 2, 0 }, // 0x2E '.' + { 307, 10, 21, 12, 1, -18 }, // 0x2F '/' + { 334, 16, 21, 18, 1, -18 }, // 0x30 '0' + { 376, 6, 21, 8, 0, -18 }, // 0x31 '1' + { 392, 13, 21, 15, 1, -18 }, // 0x32 '2' + { 427, 13, 21, 15, 1, -18 }, // 0x33 '3' + { 462, 13, 21, 14, 0, -18 }, // 0x34 '4' + { 497, 12, 21, 14, 1, -18 }, // 0x35 '5' + { 529, 14, 21, 16, 1, -18 }, // 0x36 '6' + { 566, 13, 21, 13, 0, -18 }, // 0x37 '7' + { 601, 13, 21, 15, 1, -18 }, // 0x38 '8' + { 636, 15, 21, 16, 1, -18 }, // 0x39 '9' + { 676, 4, 13, 8, 2, -10 }, // 0x3A ':' + { 683, 4, 16, 8, 2, -11 }, // 0x3B ';' + { 691, 16, 13, 17, 1, -13 }, // 0x3C '<' + { 717, 12, 9, 15, 1, -11 }, // 0x3D '=' + { 731, 16, 13, 17, 1, -13 }, // 0x3E '>' + { 757, 12, 21, 14, 1, -18 }, // 0x3F '?' + { 789, 20, 21, 23, 1, -18 }, // 0x40 '@' + { 842, 16, 21, 16, -1, -18 }, // 0x41 'A' + { 884, 14, 21, 17, 2, -18 }, // 0x42 'B' + { 921, 16, 21, 18, 1, -18 }, // 0x43 'C' + { 963, 16, 21, 19, 2, -18 }, // 0x44 'D' + { 1005, 14, 21, 16, 2, -18 }, // 0x45 'E' + { 1042, 11, 21, 13, 2, -18 }, // 0x46 'F' + { 1071, 16, 21, 19, 1, -18 }, // 0x47 'G' + { 1113, 14, 21, 18, 2, -18 }, // 0x48 'H' + { 1150, 3, 21, 7, 2, -18 }, // 0x49 'I' + { 1158, 12, 21, 12, -1, -18 }, // 0x4A 'J' + { 1190, 15, 21, 17, 2, -18 }, // 0x4B 'K' + { 1230, 11, 21, 13, 2, -18 }, // 0x4C 'L' + { 1259, 16, 21, 20, 2, -18 }, // 0x4D 'M' + { 1301, 14, 21, 18, 2, -18 }, // 0x4E 'N' + { 1338, 20, 21, 22, 1, -18 }, // 0x4F 'O' + { 1391, 14, 21, 17, 2, -18 }, // 0x50 'P' + { 1428, 20, 21, 22, 1, -18 }, // 0x51 'Q' + { 1481, 15, 21, 18, 2, -18 }, // 0x52 'R' + { 1521, 15, 21, 16, 0, -18 }, // 0x53 'S' + { 1561, 14, 21, 16, 1, -18 }, // 0x54 'T' + { 1598, 13, 21, 15, 1, -18 }, // 0x55 'U' + { 1633, 16, 21, 17, 0, -18 }, // 0x56 'V' + { 1675, 23, 21, 24, 1, -18 }, // 0x57 'W' + { 1736, 16, 21, 18, 1, -18 }, // 0x58 'X' + { 1778, 16, 21, 18, 1, -18 }, // 0x59 'Y' + { 1820, 16, 21, 18, 1, -18 }, // 0x5A 'Z' + { 1862, 7, 25, 10, 2, -19 }, // 0x5B '[' + { 1884, 10, 21, 12, 1, -18 }, // 0x5C '\' + { 1911, 7, 25, 9, 0, -19 }, // 0x5D ']' + { 1933, 12, 12, 13, 1, -19 }, // 0x5E '^' + { 1951, 12, 3, 15, 2, 2 }, // 0x5F '_' + { 1956, 7, 8, 9, 1, -17 }, // 0x60 '`' + { 1963, 12, 16, 14, 1, -13 }, // 0x61 'a' + { 1987, 13, 22, 16, 2, -19 }, // 0x62 'b' + { 2023, 13, 16, 14, 1, -13 }, // 0x63 'c' + { 2049, 12, 22, 14, 1, -19 }, // 0x64 'd' + { 2082, 13, 16, 15, 1, -13 }, // 0x65 'e' + { 2108, 11, 22, 11, 1, -19 }, // 0x66 'f' + { 2139, 12, 22, 15, 1, -13 }, // 0x67 'g' + { 2172, 12, 22, 15, 2, -19 }, // 0x68 'h' + { 2205, 4, 22, 6, 1, -19 }, // 0x69 'i' + { 2216, 12, 28, 6, -7, -19 }, // 0x6A 'j' + { 2258, 13, 22, 15, 2, -19 }, // 0x6B 'k' + { 2294, 3, 22, 6, 2, -19 }, // 0x6C 'l' + { 2303, 19, 16, 21, 1, -13 }, // 0x6D 'm' + { 2341, 12, 16, 14, 1, -13 }, // 0x6E 'n' + { 2365, 15, 16, 17, 1, -13 }, // 0x6F 'o' + { 2395, 12, 22, 14, 1, -13 }, // 0x70 'p' + { 2428, 13, 22, 16, 1, -13 }, // 0x71 'q' + { 2464, 12, 16, 13, 1, -13 }, // 0x72 'r' + { 2488, 12, 16, 13, 0, -13 }, // 0x73 's' + { 2512, 12, 21, 13, 1, -18 }, // 0x74 't' + { 2544, 12, 16, 14, 1, -13 }, // 0x75 'u' + { 2568, 12, 16, 14, 1, -13 }, // 0x76 'v' + { 2592, 17, 16, 19, 1, -13 }, // 0x77 'w' + { 2626, 12, 16, 14, 1, -13 }, // 0x78 'x' + { 2650, 13, 22, 14, 1, -13 }, // 0x79 'y' + { 2686, 12, 16, 14, 1, -13 }, // 0x7A 'z' + { 2710, 8, 26, 8, 0, -19 }, // 0x7B '{' + { 2736, 3, 28, 7, 2, -19 }, // 0x7C '|' + { 2747, 7, 27, 9, 1, -19 }, // 0x7D '}' + { 2771, 12, 6, 15, 2, -8 } }; // 0x7E '~' + +const GFXfont aAntiCorona14pt7b PROGMEM = { + (uint8_t *)aAntiCorona14pt7bBitmaps, + (GFXglyph *)aAntiCorona14pt7bGlyphs, + 0x20, 0x7E, 30 }; + +// Approx. 3452 bytes