diff --git a/App/app/foxhunt.c b/App/app/foxhunt.c index de16abe3..9d08c0c6 100644 --- a/App/app/foxhunt.c +++ b/App/app/foxhunt.c @@ -434,9 +434,9 @@ static void FOXHUNT_Tag(const char *s, uint8_t x, uint8_t line) static void FOXHUNT_DrawFKey(void) { if (foxLocked) - memcpy(gStatusLine + 69, gFontKeyLock, sizeof(gFontKeyLock)); + memcpy(gStatusLine + 70, gFontKeyLock, sizeof(gFontKeyLock)); else if (gWasFKeyPressed) - memcpy(gStatusLine + 69, gFontF, sizeof(gFontF)); + memcpy(gStatusLine + 70, gFontF, sizeof(gFontF)); } // Draw a string right-aligned in the small (7 px) font: its right edge lands at rightX. diff --git a/App/apps/beacon/beacon_app.c b/App/apps/beacon/beacon_app.c index 4e2d9de1..361fdcf0 100644 --- a/App/apps/beacon/beacon_app.c +++ b/App/apps/beacon/beacon_app.c @@ -62,6 +62,7 @@ static const uint8_t M_DIG[10] = {0x3F,0x2F,0x27,0x23,0x21,0x20,0x30,0x38,0x3C,0 static const char FOX_TAIL[5] = {'E','I','S','H','5'}; static const uint8_t BMP_TX[16] = {0x1c,0x22,0x41,0x1c,0x22,0x00,0x08,0x1c,0x1c,0x08,0x00,0x22,0x1c,0x41,0x22,0x1c}; static const uint8_t FONT_LOCK[9] = {0x7c,0x46,0x45,0x45,0x45,0x45,0x45,0x46,0x7c}; +static const uint8_t FONT_F[9] = {0x3e,0x7f,0x41,0x75,0x75,0x75,0x7d,0x7f,0x3e}; static const app_api_t *A; @@ -134,7 +135,8 @@ static void chrome(void){ A->status_clear(); A->print_inverse("BEACON",2,0,true,true,26); A->draw_battery(); - if(foxLocked) cpy(A->status_line+69,FONT_LOCK,9); + if(foxLocked) cpy(A->status_line+70,FONT_LOCK,sizeof(FONT_LOCK)); + else if(fArm) cpy(A->status_line+70,FONT_F,sizeof(FONT_F)); { char *o=putu(str,A->tx_freq()/100000u); *o++='.'; uint32_t fr=A->tx_freq()%100000u; for(int8_t d=4;d>=0;d--){ uint32_t p=1; for(int8_t k=0;kprint_normal(str,(uint8_t)(126-slen(str)*7),0,6); @@ -192,11 +194,14 @@ static void beaconDraw(bool txNow,uint8_t il){ static void blit(void){ A->blit_status(); A->blit_full(); } /* ---- keypad-lock long-press ---- */ -static void lockTrack(uint8_t key,uint16_t ms){ - if(key!=APP_KEY_F){ fHoldMs=0; fLongDone=false; return; } - if(fLongDone) return; +/* true exactly on the lock/unlock toggle, so a caller that does not redraw every tick + * (the TX loop) can refresh the padlock at once. */ +static bool lockTrack(uint8_t key,uint16_t ms){ + if(key!=APP_KEY_F){ fHoldMs=0; fLongDone=false; return false; } + if(fLongDone) return false; fHoldMs+=ms; - if(fHoldMs>=LOCK_HOLD_MS){ fLongDone=true; foxLocked=!foxLocked; fArm=false; A->backlight_on(); } + if(fHoldMs>=LOCK_HOLD_MS){ fLongDone=true; foxLocked=!foxLocked; fArm=false; A->backlight_on(); return true; } + return false; } /* ---- interactive TX delay: drains the window, keys, live seconds. true = abort ---- */ @@ -209,7 +214,7 @@ static bool txDelay(uint16_t ms){ if((uint8_t)((txMsLeft+999u)/1000u)!=secShown){ drawTxSeconds(); A->blit_line(0); } uint8_t key=A->get_key(); - lockTrack(key,slice); + if(lockTrack(key,slice)){ beaconDraw(true,0); blit(); } /* show the padlock at once, mid-TX */ if(key==APP_KEY_INVALID||key==prevKey){ prevKey=key; continue; } prevKey=key; A->backlight_on(); diff --git a/App/apps/fm/fm_app.c b/App/apps/fm/fm_app.c index 9212af0c..5fa382b1 100644 --- a/App/apps/fm/fm_app.c +++ b/App/apps/fm/fm_app.c @@ -36,7 +36,7 @@ #define CHMAX APP_FM_CH_MAX static const char BAND_NAME[4][10] = { "87.5-108M", "76-108M", "76-90M", "64-76M" }; -static const uint8_t FONT_F[8] = {0x7f,0x00,0x76,0x76,0x76,0x76,0x7e,0x7f}; +static const uint8_t FONT_F[9] = {0x3e,0x7f,0x41,0x75,0x75,0x75,0x7d,0x7f,0x3e}; static void cpy(uint8_t *d, const uint8_t *s, uint8_t n){ while(n--)*d++=*s++; } static const app_api_t *A; @@ -102,7 +102,7 @@ static void draw(void) A->display_clear(); A->status_clear(); A->draw_battery(); - if(fArm) cpy(A->status_line+69,FONT_F,8); /* F armed indicator */ + if(fArm) cpy(A->status_line+70,FONT_F,sizeof(FONT_F)); /* F armed indicator */ A->print_string("FM",2,0,0,8); A->print_normal(BAND_NAME[st.band],1,0,6); diff --git a/App/apps/foxhunt/foxhunt_app.c b/App/apps/foxhunt/foxhunt_app.c index 1588c584..fba3aacf 100644 --- a/App/apps/foxhunt/foxhunt_app.c +++ b/App/apps/foxhunt/foxhunt_app.c @@ -81,7 +81,7 @@ static const uint8_t BMP_SPEAKER[10] = {0x1c,0x1c,0x3e,0x7f,0x00,0x22,0x1c,0x41, static const uint8_t BMP_UP[11] = {0x20,0x30,0x38,0x3c,0x3e,0x3f,0x3e,0x3c,0x38,0x30,0x20}; static const uint8_t BMP_DOWN[11] = {0x01,0x03,0x07,0x0f,0x1f,0x3f,0x1f,0x0f,0x07,0x03,0x01}; static const uint8_t BMP_FLAT[11] = {0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12}; -static const uint8_t FONT_F[8] = {0x7f,0x00,0x76,0x76,0x76,0x76,0x7e,0x7f}; +static const uint8_t FONT_F[9] = {0x3e,0x7f,0x41,0x75,0x75,0x75,0x7d,0x7f,0x3e}; static const uint8_t FONT_LOCK[9] = {0x7c,0x46,0x45,0x45,0x45,0x45,0x45,0x46,0x7c}; static void cpy(uint8_t *d, const uint8_t *s, uint8_t n){ while(n--)*d++=*s++; } @@ -240,8 +240,8 @@ static void draw(void){ else cpy(A->status_line+38,BMP_BARS,11); if(foxAudioMode==AUDIO_BEEP) cpy(A->status_line+55,BMP_SIGNAL,10); else if(foxAudioMode==AUDIO_STATION) cpy(A->status_line+55,BMP_SPEAKER,10); - if(foxLocked) cpy(A->status_line+69,FONT_LOCK,9); - else if(fArm) cpy(A->status_line+69,FONT_F,8); + if(foxLocked) cpy(A->status_line+70,FONT_LOCK,9); + else if(fArm) cpy(A->status_line+70,FONT_F,sizeof(FONT_F)); i2str(big,curDbm); A->display_freq(big,2,0,false); diff --git a/App/bitmaps.c b/App/bitmaps.c index 21f8cff1..32f1bc52 100644 --- a/App/bitmaps.c +++ b/App/bitmaps.c @@ -22,16 +22,17 @@ const uint8_t gFontPttClassic[2][6] = {0x00, 0x7f, 0x40, 0x40, 0x40, 0x40}, }; -const uint8_t gFontF[8] = +const uint8_t gFontF[9] = { + 0b00111110, 0b01111111, - 0b00000000, - 0b01110110, - 0b01110110, - 0b01110110, - 0b01110110, - 0b01111110, - 0b01111111 + 0b01000001, + 0b01110101, + 0b01110101, + 0b01110101, + 0b01111101, + 0b01111111, + 0b00111110 }; const uint8_t gFontS[6] = diff --git a/App/bitmaps.h b/App/bitmaps.h index fba73398..a79eb7a4 100644 --- a/App/bitmaps.h +++ b/App/bitmaps.h @@ -7,7 +7,7 @@ extern const uint8_t gFontPowerSave[2][6]; extern const uint8_t gFontPttOnePush[2][6]; extern const uint8_t gFontPttClassic[2][6]; -extern const uint8_t gFontF[8]; +extern const uint8_t gFontF[9]; extern const uint8_t gFontS[6]; extern const uint8_t gFontKeyLock[9];