diff --git a/src/Makefile b/src/Makefile index 5df555df0..68b73c140 100644 --- a/src/Makefile +++ b/src/Makefile @@ -709,9 +709,9 @@ all: begin gccversion sizebefore build sizeafter end # Change the build target to build a HEX file or a library. ifeq ($(PCB), SKY9X) - build: stamp_header font.lbm font_dblsize.lbm sticks.lbm s9xsplash.lbm asterisk.lbm allsrc.cpp elf remallsrc bin lss + build: stamp_header lbm allsrc.cpp elf remallsrc bin lss else - build: stamp_header font.lbm font_dblsize.lbm sticks.lbm s9xsplash.lbm asterisk.lbm allsrc.cpp elf remallsrc hex eep lss sym + build: stamp_header lbm allsrc.cpp elf remallsrc hex eep lss sym endif elf: $(TARGET).elf @@ -721,6 +721,8 @@ eep: $(TARGET).eep lss: $(TARGET).lss sym: $(TARGET).sym +lbm: font.lbm font_dblsize.lbm sticks.lbm splash_9x.lbm splash_X9D.lbm asterisk.lbm + # Build stamp-file stamp_header: @echo @@ -777,9 +779,14 @@ sticks.lbm: sticks_4x1.xbm @echo "Convert sticks from xbm to lbm:" $(IMG2LBM) $< $@ img 4 -s9xsplash.lbm: s9xsplash.xbm +splash_9x.lbm: splash_9x.xbm @echo - @echo "Convert splash from xbm to lbm:" + @echo "Convert 9x splash from xbm to lbm:" + $(IMG2LBM) $< $@ img + +splash_X9D.lbm: splash_X9D.xbm + @echo + @echo "Convert X9D splash from xbm to lbm:" $(IMG2LBM) $< $@ img asterisk.lbm: asterisk.xbm diff --git a/src/frsky.cpp b/src/frsky.cpp index a7619e9c9..4029b15f4 100644 --- a/src/frsky.cpp +++ b/src/frsky.cpp @@ -538,7 +538,6 @@ void frskyTransmitBuffer( uint32_t size ) txPdcUsart( frskyTxBuffer, size ) ; } #else -// TODO inline ? pass parameter? to avoid #ifdef? void frskyTransmitBuffer() { UCSR0B |= (1 << UDRIE0); // enable UDRE0 interrupt diff --git a/src/lcd.cpp b/src/lcd.cpp index 4bd03a255..8950acd92 100644 --- a/src/lcd.cpp +++ b/src/lcd.cpp @@ -50,7 +50,7 @@ void lcd_clear() memset(displayBuf, 0, sizeof(displayBuf)); } -void lcd_img(uint8_t x, uint8_t y, const pm_uchar * img, uint8_t idx, uint8_t mode) +void lcd_img(xcoord_t x, uint8_t y, const pm_uchar * img, uint8_t idx, uint8_t mode) { const pm_uchar *q = img; uint8_t w = pgm_read_byte(q++); @@ -74,7 +74,7 @@ uint8_t lcdLock; uint32_t lcdInputs; #endif -void lcd_putcAtt(uint8_t x, uint8_t y, const unsigned char c, uint8_t mode) +void lcd_putcAtt(xcoord_t x, uint8_t y, const unsigned char c, uint8_t mode) { uint8_t *p = &displayBuf[ y / 8 * DISPLAY_W + x ]; @@ -160,19 +160,19 @@ void lcd_putcAtt(uint8_t x, uint8_t y, const unsigned char c, uint8_t mode) } } -void lcd_putc(uint8_t x, uint8_t y, const unsigned char c) +void lcd_putc(xcoord_t x, uint8_t y, const unsigned char c) { lcd_putcAtt(x,y,c,0); } -void lcd_putsiAtt(uint8_t x,uint8_t y,const pm_char * s,uint8_t idx, uint8_t flags) +void lcd_putsiAtt(xcoord_t x,uint8_t y,const pm_char * s,uint8_t idx, uint8_t flags) { uint8_t length; length = pgm_read_byte(s++) ; lcd_putsnAtt(x,y,s+length*idx,length,flags & ~(BSS|ZCHAR)); } -void lcd_putsnAtt(uint8_t x,uint8_t y,const pm_char * s,uint8_t len,uint8_t mode) +void lcd_putsnAtt(xcoord_t x,uint8_t y,const pm_char * s,uint8_t len,uint8_t mode) { while(len!=0) { unsigned char c; @@ -202,17 +202,17 @@ void lcd_putsnAtt(uint8_t x,uint8_t y,const pm_char * s,uint8_t len,uint8_t mode lcdLastPos = x; } -void lcd_putsn(uint8_t x,uint8_t y,const pm_char * s,uint8_t len) +void lcd_putsn(xcoord_t x,uint8_t y,const pm_char * s,uint8_t len) { lcd_putsnAtt(x, y, s, len, 0); } -void lcd_putsAtt(uint8_t x,uint8_t y,const pm_char * s,uint8_t mode) +void lcd_putsAtt(xcoord_t x,uint8_t y,const pm_char * s,uint8_t mode) { lcd_putsnAtt(x, y, s, 255, mode); } -void lcd_puts(uint8_t x,uint8_t y,const pm_char * s) +void lcd_puts(xcoord_t x,uint8_t y,const pm_char * s) { lcd_putsAtt( x, y, s, 0); } @@ -222,7 +222,7 @@ void lcd_putsLeft(uint8_t y, const pm_char * s) lcd_putsAtt(0, y, s, 0); } -void lcd_outhex4(uint8_t x,uint8_t y,uint16_t val) +void lcd_outhex4(xcoord_t x,uint8_t y,uint16_t val) { x+=FWNUM*4; for(int i=0; i<4; i++) @@ -234,12 +234,12 @@ void lcd_outhex4(uint8_t x,uint8_t y,uint16_t val) val>>=4; } } -void lcd_outdez8(uint8_t x, uint8_t y, int8_t val) +void lcd_outdez8(xcoord_t x, uint8_t y, int8_t val) { lcd_outdezAtt(x, y, val); } -void lcd_outdezAtt(uint8_t x, uint8_t y, int16_t val, LcdFlags flags) +void lcd_outdezAtt(xcoord_t x, uint8_t y, int16_t val, LcdFlags flags) { lcd_outdezNAtt(x, y, val, flags); } @@ -257,7 +257,7 @@ USAGE: LEADING0 means pad 0 to the left of sig. digits up to 'len' total characters */ -void lcd_outdezNAtt(uint8_t x, uint8_t y, int16_t val, LcdFlags flags, uint8_t len) +void lcd_outdezNAtt(xcoord_t x, uint8_t y, int16_t val, LcdFlags flags, uint8_t len) { uint8_t fw = FWNUM; int8_t mode = MODE(flags); @@ -267,7 +267,7 @@ void lcd_outdezNAtt(uint8_t x, uint8_t y, int16_t val, LcdFlags flags, uint8_t l if (flags & UNSIGN) { flags -= UNSIGN; } else if (val < 0) { neg=true; val=-val; } - uint8_t xn = 0; + xcoord_t xn = 0; uint8_t ln = 2; if (mode != MODE(LEADING0)) { @@ -362,17 +362,16 @@ void lcd_mask(uint8_t *p, uint8_t mask, uint8_t att) *p ^= mask; } -void lcd_plot(uint8_t x,uint8_t y, uint8_t att) +void lcd_plot(xcoord_t x,uint8_t y, uint8_t att) { uint8_t *p = &displayBuf[ y / 8 * DISPLAY_W + x ]; if (p= DISPLAY_H) return; - if (x<0) { w+=x; x=0; } if (x+w > DISPLAY_W) { w = DISPLAY_W - x; } uint8_t *p = &displayBuf[ y / 8 * DISPLAY_W + x ]; @@ -390,14 +389,14 @@ void lcd_hlineStip(int8_t x, uint8_t y, uint8_t w, uint8_t pat, uint8_t att) } } -void lcd_hline(uint8_t x, uint8_t y, uint8_t w, uint8_t att) +void lcd_hline(xcoord_t x, uint8_t y, xcoord_t w, uint8_t att) { lcd_hlineStip(x, y, w, 0xff, att); } #if 0 // allows the att parameter... perhaps will be needed later! -void lcd_vlineStip(uint8_t x, int8_t y, int8_t h, uint8_t pat, uint8_t att) +void lcd_vlineStip(xcoord_t x, int8_t y, int8_t h, uint8_t pat, uint8_t att) { if (x >= DISPLAY_W) return; if (h<0) { y+=h; h=-h; } @@ -430,7 +429,7 @@ void lcd_vlineStip(uint8_t x, int8_t y, int8_t h, uint8_t pat, uint8_t att) } } #else -void lcd_vlineStip(uint8_t x, int8_t y, int8_t h, uint8_t pat) +void lcd_vlineStip(xcoord_t x, int8_t y, int8_t h, uint8_t pat) { if (x >= DISPLAY_W) return; if (h<0) { y+=h; h=-h; } @@ -463,12 +462,12 @@ void lcd_vlineStip(uint8_t x, int8_t y, int8_t h, uint8_t pat) } #endif -void lcd_vline(uint8_t x, int8_t y, int8_t h) +void lcd_vline(xcoord_t x, int8_t y, int8_t h) { lcd_vlineStip(x, y, h, 0xff); } -void lcd_rect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t pat, uint8_t att) +void lcd_rect(xcoord_t x, uint8_t y, xcoord_t w, uint8_t h, uint8_t pat, uint8_t att) { if (!((att & BLINK) && BLINK_ON_PHASE)) { lcd_vlineStip(x, y, h, pat); @@ -479,7 +478,7 @@ void lcd_rect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t pat, uint8_t a } } -void lcd_filled_rect(uint8_t x, int8_t y, uint8_t w, uint8_t h, uint8_t pat, uint8_t att) +void lcd_filled_rect(xcoord_t x, int8_t y, xcoord_t w, uint8_t h, uint8_t pat, uint8_t att) { for (int8_t i=y; i=0 && i<64) lcd_hlineStip(x, i, w, pat, att); @@ -487,10 +486,12 @@ void lcd_filled_rect(uint8_t x, int8_t y, uint8_t w, uint8_t h, uint8_t pat, uin } } -void putsTime(uint8_t x, uint8_t y, putstime_t tme, uint8_t att, uint8_t att2) +void putsTime(xcoord_t x, uint8_t y, putstime_t tme, uint8_t att, uint8_t att2) { div_t qr; + tme+=32660; + if (att & LEFT) x+=3*FW; if (tme<0) { @@ -501,7 +502,7 @@ void putsTime(uint8_t x, uint8_t y, putstime_t tme, uint8_t att, uint8_t att2) qr = div(tme, 60); #if defined(PCBSKY9X) - if (tme >= 3600) { + if (tme >= 3600 && (~att & DBLSIZE)) { qr = div(qr.quot, 60); lcd_outdezAtt(x+2*FWNUM, y, qr.quot, att); lcd_putcAtt(lcdLastPos-((att & DBLSIZE) ? 1 : 0), y, 'h', att&att2); @@ -516,25 +517,25 @@ void putsTime(uint8_t x, uint8_t y, putstime_t tme, uint8_t att, uint8_t att2) } // TODO to be optimized with putsTelemetryValue -void putsVolts(uint8_t x, uint8_t y, uint16_t volts, uint8_t att) +void putsVolts(xcoord_t x, uint8_t y, uint16_t volts, uint8_t att) { lcd_outdezAtt(x, y, (int16_t)volts, (~NO_UNIT) & (att | ((att&PREC2)==PREC2 ? 0 : PREC1))); if (~att & NO_UNIT) lcd_putcAtt(lcdLastPos, y, 'v', att&(~INVERS)); } -void putsVBat(uint8_t x, uint8_t y, uint8_t att) +void putsVBat(xcoord_t x, uint8_t y, uint8_t att) { putsVolts(x, y, g_vbat100mV, att); } -void putsStrIdx(uint8_t x, uint8_t y, const pm_char *str, uint8_t idx, uint8_t att) +void putsStrIdx(xcoord_t x, uint8_t y, const pm_char *str, uint8_t idx, uint8_t att) { lcd_putsAtt(x, y, str, att & ~BSS); // TODO use something else than BSS for LEADING0 lcd_outdezNAtt(lcdLastPos, y, idx, att|LEFT, 2); lcd_putsAtt(x, y, str, att & ~BSS); // TODO use something else than BSS for LEADING0 } -void putsChnRaw(uint8_t x, uint8_t y, uint8_t idx, uint8_t att) +void putsChnRaw(xcoord_t x, uint8_t y, uint8_t idx, uint8_t att) { if (idx==0) lcd_putsiAtt(x, y, STR_MMMINV, 0, att); @@ -548,13 +549,13 @@ void putsChnRaw(uint8_t x, uint8_t y, uint8_t idx, uint8_t att) lcd_putsiAtt(x, y, STR_VTELEMCHNS, idx-(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS+NUM_STICKS+2+NUM_CYC+NUM_PPM+NUM_CHNOUT), att); } -void putsChn(uint8_t x, uint8_t y, uint8_t idx, uint8_t att) +void putsChn(xcoord_t x, uint8_t y, uint8_t idx, uint8_t att) { if (idx > 0 && idx <= NUM_CHNOUT) putsChnRaw(x, y, idx+(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS+NUM_STICKS+2+NUM_CYC+NUM_PPM), att); } -void putsMixerSource(uint8_t x, uint8_t y, uint8_t idx, uint8_t att) +void putsMixerSource(xcoord_t x, uint8_t y, uint8_t idx, uint8_t att) { if (idx<=NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS+NUM_STICKS+2) putsChnRaw(x, y, idx, att); @@ -564,12 +565,12 @@ void putsMixerSource(uint8_t x, uint8_t y, uint8_t idx, uint8_t att) putsChnRaw(x, y, idx-MAX_SWITCH, att); } -void putsChnLetter(uint8_t x, uint8_t y, uint8_t idx, uint8_t attr) +void putsChnLetter(xcoord_t x, uint8_t y, uint8_t idx, uint8_t attr) { lcd_putsiAtt(x, y, STR_RETA123, idx-1, attr); } -void putsModelName(uint8_t x, uint8_t y, char *name, uint8_t id, uint8_t att) +void putsModelName(xcoord_t x, uint8_t y, char *name, uint8_t id, uint8_t att) { uint8_t len = sizeof(g_model.name); while (len>0 && !name[len-1]) --len; @@ -581,7 +582,7 @@ void putsModelName(uint8_t x, uint8_t y, char *name, uint8_t id, uint8_t att) } } -void putsSwitches(uint8_t x, uint8_t y, int8_t idx, uint8_t att) +void putsSwitches(xcoord_t x, uint8_t y, int8_t idx, uint8_t att) { if (idx == 0) return lcd_putsiAtt(x, y, STR_MMMINV, 0, att); @@ -603,7 +604,7 @@ void putsSwitches(uint8_t x, uint8_t y, int8_t idx, uint8_t att) } #ifdef FLIGHT_PHASES -void putsFlightPhase(uint8_t x, uint8_t y, int8_t idx, uint8_t att) +void putsFlightPhase(xcoord_t x, uint8_t y, int8_t idx, uint8_t att) { if (idx==0) { lcd_putsiAtt(x, y, STR_MMMINV, 0, att); return; } if (idx < 0) { lcd_vlineStip(x-2, y, 8, 0x5E/*'!'*/); idx = -idx; } @@ -614,7 +615,7 @@ void putsFlightPhase(uint8_t x, uint8_t y, int8_t idx, uint8_t att) } #endif -void putsCurve(uint8_t x, uint8_t y, int8_t idx, uint8_t att) +void putsCurve(xcoord_t x, uint8_t y, int8_t idx, uint8_t att) { if (idx < 0) { lcd_putcAtt(x-1*FW, y, '!', att); @@ -626,7 +627,7 @@ void putsCurve(uint8_t x, uint8_t y, int8_t idx, uint8_t att) putsStrIdx(x, y, PSTR("c"), idx-CURVE_BASE+1, att); } -void putsTmrMode(uint8_t x, uint8_t y, int8_t mode, uint8_t att) +void putsTmrMode(xcoord_t x, uint8_t y, int8_t mode, uint8_t att) { if (mode < 0) { mode = TMR_VAROFS - mode - 1; @@ -640,7 +641,7 @@ void putsTmrMode(uint8_t x, uint8_t y, int8_t mode, uint8_t att) putsSwitches(x, y, mode-(TMR_VAROFS-1), att); } -void putsTrimMode(uint8_t x, uint8_t y, uint8_t phase, uint8_t idx, uint8_t att) +void putsTrimMode(xcoord_t x, uint8_t y, uint8_t phase, uint8_t idx, uint8_t att) { int16_t v = getRawTrimValue(phase, idx); @@ -655,7 +656,7 @@ void putsTrimMode(uint8_t x, uint8_t y, uint8_t phase, uint8_t idx, uint8_t att) } #if defined(ROTARY_ENCODERS) -void putsRotaryEncoderMode(uint8_t x, uint8_t y, uint8_t phase, uint8_t idx, uint8_t att) +void putsRotaryEncoderMode(xcoord_t x, uint8_t y, uint8_t phase, uint8_t idx, uint8_t att) { #if defined(EXTRA_ROTARY_ENCODERS) int16_t v; @@ -1031,7 +1032,7 @@ void refreshDisplay() #endif PORTC_LCD_CTRL |= (1<0; --x) { + for (xcoord_t x=DISPLAY_W; x>0; --x) { PORTA_LCD_DAT = *p++; PORTC_LCD_CTRL |= (1<= 0 ? 9*FW-FW/2 : 9*FW-FW/2-7, FH*3, g_model.timers[0].mode, SWCONDENSED); + } + + // Second timer + if (g_model.timers[1].mode) { + uint8_t att = DBLSIZE | (s_timerState[1]==TMR_BEEPING ? BLINK|INVERS : 0); + putsTime(23*FW+1, FH*2, s_timerVal[1], att, att); + putsTmrMode(s_timerVal[1] >= 0 ? 20*FW-FW/2+4 : 20*FW-FW/2-3, FH*3, g_model.timers[1].mode, SWCONDENSED); + } +#else // Main timer if (g_model.timers[0].mode) { uint8_t att = DBLSIZE | (s_timerState[0]==TMR_BEEPING ? BLINK|INVERS : 0); putsTime(12*FW+3, FH*2, s_timerVal[0], att, att); putsTmrMode(s_timerVal[0] >= 0 ? 9*FW-FW/2+5 : 9*FW-FW/2-2, FH*3, g_model.timers[0].mode, SWCONDENSED); } +#endif // Trim sliders for(uint8_t i=0; i<4; i++) { #define TL 27 // LH LV RV RH - static uint8_t x[4] = {128*1/4+2, 3, 128-4, 128*3/4-2}; + static uint8_t x[4] = {DISPLAY_W*1/4+2, 3, DISPLAY_W-4, DISPLAY_W*3/4-2}; static uint8_t vert[4] = {0,1,1,0}; uint8_t xm, ym; xm = x[CONVERT_MODE(i+1)-1]; @@ -308,7 +335,7 @@ void menuMainView(uint8_t event) case e_outputBars: #define WBAR2 (50/2) - x0 = i<4 ? 128/4+2 : 128*3/4-2; + x0 = i<4 ? DISPLAY_W/4+2 : DISPLAY_W*3/4-2; y0 = 38+(i%4)*5; uint16_t lim = g_model.extendedLimits ? 640*2 : 512*2; @@ -345,18 +372,18 @@ void menuMainView(uint8_t event) int8_t len = limit((int16_t)0, (int16_t)(((val+1024) * BAR_HEIGHT) / 2048), (int16_t)BAR_HEIGHT); #if defined(EXTRA_ROTARY_ENCODERS) #define V_BAR_W 5 - V_BAR(SCREEN_WIDTH/2-8+V_BAR_W*i, SCREEN_HEIGHT-8, len) + V_BAR(DISPLAY_W/2-8+V_BAR_W*i, DISPLAY_H-8, len) #else //EXTRA_ROTARY_ENCODERS #define V_BAR_W 5 - V_BAR(SCREEN_WIDTH/2-3+V_BAR_W*i, SCREEN_HEIGHT-8, len) + V_BAR(DISPLAY_W/2-3+V_BAR_W*i, DISPLAY_H-8, len) #endif //EXTRA_ROTARY_ENCODERS } #endif // ROTARY_ENCODERS #if defined(PCBSKY9X) for (uint8_t i=0; i9 ? 3 : 2),0,'/',attr); - lcd_outdezAtt(1+128-FW*(count>9 ? 3 : 2),0,index+1,attr); + lcd_outdezAtt(DISPLAY_W,0,count,attr); + lcd_putcAtt(1+DISPLAY_W-FW*(count>9 ? 3 : 2),0,'/',attr); + lcd_outdezAtt(1+DISPLAY_W-FW*(count>9 ? 3 : 2),0,index+1,attr); } #if defined(ROTARY_ENCODERS) @@ -537,8 +537,8 @@ const pm_char * s_global_warning = 0; void displayBox() { - lcd_filled_rect(10, 16, 108, 40, SOLID, WHITE); - lcd_rect(10, 16, 108, 40); + lcd_filled_rect(10, 16, DISPLAY_W-20, 40, SOLID, WHITE); + lcd_rect(10, 16, DISPLAY_W-20, 40); lcd_puts(16, 3*FH, s_warning); // could be a place for a s_warning_info } @@ -606,7 +606,7 @@ int8_t switchMenuItem(uint8_t x, uint8_t y, int8_t value, uint8_t attr, uint8_t #if defined(SDCARD) const char *s_menu[MENU_MAX_LINES]; -char s_bss_menu[MENU_MAX_LINES*MENU_LINE_LENGTH]; +char s_bss_menu[MENU_MAX_LINES][MENU_LINE_LENGTH]; // TODO in reusable buffer? uint8_t s_menu_item = 0; uint8_t s_menu_count = 0; uint8_t s_menu_flags = 0; @@ -616,12 +616,12 @@ const char * displayMenu(uint8_t event) { const char * result = NULL; - lcd_filled_rect(10, 16, 108, s_menu_count * (FH+1) + 2, SOLID, WHITE); - lcd_rect(10, 16, 108, s_menu_count * (FH+1) + 2); + lcd_filled_rect(10, 16, DISPLAY_W-20, s_menu_count * (FH+1) + 2, SOLID, WHITE); + lcd_rect(10, 16, DISPLAY_W-20, s_menu_count * (FH+1) + 2); for (uint8_t i=0; i= reusableBuffer.sd.count-7) + s_last_menu_offset = s_pgOfs+1; */ + else if (s_menu_offset > s_last_menu_offset) + memcpy(hidden_line, &s_bss_menu[0], MENU_LINE_LENGTH); + else + memcpy(hidden_line, &s_bss_menu[MENU_MAX_LINES-1], MENU_LINE_LENGTH); + + memset(s_bss_menu, 0, sizeof(s_bss_menu)); + FRESULT res = f_opendir(&dir, path); /* Open the directory */ if (res == FR_OK) { for (;;) { @@ -136,28 +151,73 @@ bool listSdFiles(const char *path, const char *extension) #endif uint8_t len = strlen(fn); - if (len < 5 || strcmp(fn+len-4, extension)) continue; + if (len < 5 || strcmp(fn+len-4, extension) || (fno.fattrib & AM_DIR)) continue; - if (~fno.fattrib & AM_DIR) { /* It is a file. */ - if (offset < s_menu_offset) { - offset++; - continue; - } - if (s_menu_count == MENU_MAX_LINES) { - s_menu_more = true; - break; - } - char *menu_entry = &s_bss_menu[s_menu_count*MENU_LINE_LENGTH]; - memclear(menu_entry, MENU_LINE_LENGTH); - for (uint8_t i=0; i= s_last_menu_offset) { + line = s_bss_menu[i]; + if ((!hidden_line[0] || (strcmp(hidden_line, fn) < 0)) && (line[0] == '\0' || strcmp(fn, line) < 0)) { + if (i < MENU_MAX_LINES-1) { + memmove(s_bss_menu[i+1], line, sizeof(s_bss_menu[i]) * (MENU_MAX_LINES-1-i)); + } + strncpy(line, fn, MENU_LINE_LENGTH); break; - menu_entry[i] = fn[i]; + } } - s_menu[s_menu_count++] = menu_entry; + else { + line = s_bss_menu[MENU_MAX_LINES-1-i]; + if ((!hidden_line[0] || (strcmp(hidden_line, fn) > 0)) && (line[0] == '\0' || strcmp(fn, line) > 0)) { + if (i < MENU_MAX_LINES-1) { + memmove(s_bss_menu, s_bss_menu[1], sizeof(s_bss_menu[0]) * (MENU_MAX_LINES-1-i)); + } + strncpy(line, fn, MENU_LINE_LENGTH); + break; + } + } + s_menu[i] = line; } } + s_menu_count = MENU_MAX_LINES; + s_menu_more = true; } +#else + FRESULT res = f_opendir(&dir, path); /* Open the directory */ + if (res == FR_OK) { + for (;;) { + res = f_readdir(&dir, &fno); /* Read a directory item */ + if (res != FR_OK || fno.fname[0] == 0) break; /* Break on error or end of dir */ + +#if _USE_LFN + fn = *fno.lfname ? fno.lfname : fno.fname; +#else + fn = fno.fname; +#endif + + uint8_t len = strlen(fn); + if (len < 5 || strcmp(fn+len-4, extension) || (fno.fattrib & AM_DIR)) continue; + + if (offset < s_menu_offset) { + offset++; + continue; + } + if (s_menu_count == MENU_MAX_LINES) { + s_menu_more = true; + break; + } + char *menu_entry = s_bss_menu[s_menu_count]; + memclear(menu_entry, MENU_LINE_LENGTH); + for (uint8_t i=0; imode, (attr && m_posHorz==0) ? blink : 0); putsTime(15*FW, y, timer->val, (attr && m_posHorz==1 ? blink:0), @@ -808,7 +868,13 @@ static uint8_t s_currIdx; #define MIXES_2ND_COLUMN (10*FW) #endif +#if defined(PCBX9D) +#define EXPO_ONE_2ND_COLUMN (DISPLAY_W - 88) +#define EXPO_ONE_FP_WIDTH (9*FW) +#else #define EXPO_ONE_2ND_COLUMN (7*FW+2) +#define EXPO_ONE_FP_WIDTH (5*FW) +#endif uint8_t editDelay(const uint8_t y, const uint8_t event, const uint8_t attr, const pm_char *str, uint8_t delay) { @@ -830,12 +896,12 @@ PhasesType editPhases(uint8_t x, uint8_t y, uint8_t event, PhasesType value, uin { lcd_putsLeft(y, STR_FPHASE); -#if defined(PCBSKY9X) +#if defined(PCBSKY9X) && !defined(PCBX9D) bool expoMenu = (x==EXPO_ONE_2ND_COLUMN-2*FW); #endif for (uint8_t p=0; p EXPO_ONE_2ND_COLUMN+2*FW))) continue; #endif @@ -871,7 +937,7 @@ void menuModelPhaseOne(uint8_t event) uint8_t attr = (sub==k ? (s_editMode>0 ? BLINK|INVERS : INVERS) : 0); switch(i) { case 0: - EditName(MIXES_2ND_COLUMN, y, phase->name, sizeof(phase->name), event, attr, m_posHorz); + editName(MIXES_2ND_COLUMN, y, phase->name, sizeof(phase->name), event, attr, m_posHorz); break; case 1: phase->swtch = switchMenuItem(MIXES_2ND_COLUMN, y, phase->swtch, attr, event); @@ -992,21 +1058,21 @@ void menuModelPhasesAll(uint8_t event) #endif lcd_putsnAtt(4*FW+NAME_OFS, y, p->name, sizeof(p->name), ZCHAR); if (i == 0) { - lcd_puts(11*FW+SWITCH_OFS, y, STR_DEFAULT); + lcd_puts((5+LEN_FP_NAME)*FW+SWITCH_OFS, y, STR_DEFAULT); } else { - putsSwitches(11*FW+SWITCH_OFS, y, p->swtch, 0); + putsSwitches((5+LEN_FP_NAME)*FW+SWITCH_OFS, y, p->swtch, 0); for (uint8_t t=0; tfadeIn || p->fadeOut) - lcd_putc(20*FW+2, y, (p->fadeIn && p->fadeOut) ? '*' : (p->fadeIn ? 'I' : 'O')); + lcd_putc(DISPLAY_W-FW, y, (p->fadeIn && p->fadeOut) ? '*' : (p->fadeIn ? 'I' : 'O')); } #if defined(PCBSKY9X) @@ -1466,7 +1532,7 @@ void menuModelExpoOne(uint8_t event) { #if defined(PCBSKY9X) case EXPO_FIELD_NAME: - EditName(EXPO_ONE_2ND_COLUMN-3*FW, y, ed->name, sizeof(ed->name), event, attr, m_posHorz); + editName(EXPO_ONE_2ND_COLUMN+3*FW-sizeof(ed->name)*FW, y, ed->name, sizeof(ed->name), event, attr, m_posHorz); break; #endif case EXPO_FIELD_WIDTH: @@ -1506,7 +1572,7 @@ void menuModelExpoOne(uint8_t event) #endif #if defined(FLIGHT_PHASES) case EXPO_FIELD_FLIGHT_PHASE: - ed->phases = editPhases(EXPO_ONE_2ND_COLUMN-2*FW, y, event, ed->phases, attr); + ed->phases = editPhases(EXPO_ONE_2ND_COLUMN+3*FW-EXPO_ONE_FP_WIDTH, y, event, ed->phases, attr); break; #endif case EXPO_FIELD_SWITCH: @@ -1524,8 +1590,8 @@ void menuModelExpoOne(uint8_t event) int16_t x512 = calibratedStick[ed->chn]; int16_t y512 = expoFn(x512); - lcd_outdezAtt(20*FW, 6*FH, x512*25/256, 0); - lcd_outdezAtt(14*FW, 1*FH, y512*25/256, 0); + lcd_outdezAtt(DISPLAY_W-8, 6*FH, x512*25/256, 0); + lcd_outdezAtt(DISPLAY_W-8-6*FW, 1*FH, y512*25/256, 0); x512 = X0+x512/(RESXu/WCHART); y512 = (DISPLAY_H-1) - (uint16_t)((y512+RESX)/2) * (DISPLAY_H-1) / RESX; @@ -1569,7 +1635,7 @@ void menuModelMixOne(uint8_t event) switch(i) { #if defined(PCBSKY9X) case MIX_FIELD_NAME: - EditName(MIXES_2ND_COLUMN, y, md2->name, sizeof(md2->name), event, attr, m_posHorz); + editName(MIXES_2ND_COLUMN, y, md2->name, sizeof(md2->name), event, attr, m_posHorz); break; #endif case MIX_FIELD_SOURCE: @@ -2175,7 +2241,7 @@ void menuModelLimits(uint8_t event) #endif #if defined(PPM_LIMITS_SYMETRICAL) case ITEM_LIMITS_SYMETRICAL: - lcd_putcAtt(20*FW+2, y, ld->symetrical ? '=' : '^', attr); + lcd_putcAtt(DISPLAY_W-FW, y, ld->symetrical ? '=' : '^', attr); if (active) { CHECK_INCDEC_MODELVAR(event, ld->symetrical, 0, 1); } diff --git a/src/myeeprom.h b/src/myeeprom.h index b3e722a80..5e8f40a46 100644 --- a/src/myeeprom.h +++ b/src/myeeprom.h @@ -136,7 +136,7 @@ PACK(typedef struct t_EEGeneral { int8_t backlightMode; TrainerData trainer; uint8_t view; //index of subview in main scrren - uint8_t btBaudrate:3; // TODO only needed on SKY9X + uint8_t btBaudrate:3; // only used on SKY9X board int8_t beeperMode:2; uint8_t spare1:1; uint8_t disableMemoryWarning:1; @@ -157,7 +157,7 @@ PACK(typedef struct t_EEGeneral { uint8_t templateSetup; //RETA order according to chout_ar array int8_t PPM_Multiplier; int8_t hapticLength; - uint8_t reNavigation; // TODO not needed on stock board + uint8_t reNavigation; // not used on STOCK board int8_t beeperLength:3; uint8_t hapticStrength:3; uint8_t gpsFormat:1; @@ -174,6 +174,16 @@ PACK(typedef struct t_EEGeneral { // eeprom modelspec +#if defined(PCBX9D) +#define LEN_EXPOMIX_NAME 10 +#define LEN_FP_NAME 10 +#elif defined(PCBSKY9X) +#define LEN_EXPOMIX_NAME 6 +#define LEN_FP_NAME 6 +#else +#define LEN_FP_NAME 6 +#endif + #if defined(PCBSKY9X) PACK(typedef struct t_ExpoData { uint8_t mode; // 0=end, 1=pos, 2=neg, 3=both @@ -182,7 +192,7 @@ PACK(typedef struct t_ExpoData { uint16_t phases; int8_t weight; uint8_t curveMode; - char name[6]; + char name[LEN_EXPOMIX_NAME]; int8_t curveParam; }) ExpoData; #else @@ -292,7 +302,7 @@ PACK(typedef struct t_MixData { uint8_t speedDown; uint8_t srcRaw; int8_t sOffset; - char name[6]; + char name[LEN_EXPOMIX_NAME]; }) MixData; #else #define MAX_DELAY 15 /* 7.5 seconds */ @@ -602,7 +612,7 @@ PACK(typedef struct t_SwashRingData { // Swash Ring data PACK(typedef struct t_PhaseData { TRIM_ARRAY; int8_t swtch; // swtch of phase[0] is not used - char name[6]; + char name[LEN_FP_NAME]; uint8_t fadeIn:4; uint8_t fadeOut:4; ROTARY_ENCODER_ARRAY diff --git a/src/open9x.cpp b/src/open9x.cpp index 27469cd1c..9e4b6ee4a 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -68,7 +68,11 @@ OS_MutexID mixerMutex; #if defined(SPLASH) const pm_uchar splashdata[] PROGMEM = { 'S','P','S',0, -#include "s9xsplash.lbm" +#if defined(PCBX9D) +#include "splash_X9D.lbm" +#else +#include "splash_9x.lbm" +#endif 'S','P','E',0}; const pm_uchar * splash_lbm = splashdata+4; #endif @@ -291,13 +295,13 @@ int16_t intpol(int16_t x, uint8_t idx) // -100, -75, -50, -25, 0 ,25 ,50, 75, 10 erg = (int16_t)crv.crv[crv.points-1] * (RESX/4); } else { - uint16_t a=0, b=0; // TODO init not needed + uint16_t a=0, b=0; uint8_t i; if (crv.custom) { for (i=0; i=a && (uint16_t)x<=b) break; + if ((uint16_t)x<=b) break; } } else { @@ -1219,6 +1223,9 @@ void message(const pm_char *title, const pm_char *t, const char *last MESSAGE_SO { lcd_clear(); +#if defined(PCBX9D) + lcd_img(DISPLAY_W-29, 0, asterisk_lbm, 0, 0); +#endif #if defined(PCBGRUVIN9X) || defined(PCBSKY9X) || defined(M128) || defined(EXTSTD) lcd_img(2, 0, asterisk_lbm, 0, 0); #else @@ -1231,7 +1238,7 @@ void message(const pm_char *title, const pm_char *t, const char *last MESSAGE_SO lcd_putsAtt(6*FW, 0, title, DBLSIZE); lcd_putsAtt(6*FW, 2*FH, STR_WARNING, DBLSIZE); #endif - lcd_filled_rect(0, 0, 128, 32); + lcd_filled_rect(0, 0, DISPLAY_W, 32); if (t) lcd_putsLeft(5*FH, t); if (last) { lcd_putsLeft(7*FH, last); @@ -3429,7 +3436,9 @@ int main(void) stack_paint(); g_menuStack[0] = menuMainView; +#if !defined(READONLY) g_menuStack[1] = menuModelSelect; +#endif lcdSetRefVolt(25); diff --git a/src/open9x.h b/src/open9x.h index d9a889842..1bdcb70d6 100644 --- a/src/open9x.h +++ b/src/open9x.h @@ -584,7 +584,7 @@ extern uint8_t pxxFlag; #endif #define PXX_SEND_RXNUM 0x01 -#define PXX_SEND_FAILSAFE 0x02 // TODO where is it used? +#define PXX_SEND_FAILSAFE 0x02 #define ZCHAR_MAX (40 + LEN_SPECIAL_CHARS) diff --git a/src/sky9x/board.h b/src/sky9x/board.h index 1cc4a814a..32a088bab 100644 --- a/src/sky9x/board.h +++ b/src/sky9x/board.h @@ -539,6 +539,10 @@ extern uint32_t transSpeed; #define SD_CSD_MULT(pSd) (1 << (SD_CSD_C_SIZE_MULT(pSd) + 2)) +#define SD_CSD_READ_BL_LEN(pSd) SD_CSD(pSd, 80, 4) ///< Max. read data block length + +#define SD_CSD_BLOCK_LEN(pSd) (1 << SD_CSD_READ_BL_LEN(pSd)) + #define SD_CSD_BLOCKNR(pSd) ((SD_CSD_C_SIZE(pSd) + 1) * SD_CSD_MULT(pSd)) #define SD_CSD_BLOCKNR_HC(pSd) ((SD_CSD_C_SIZE_HC(pSd) + 1) * 1024) diff --git a/src/s9xsplash.lbm b/src/splash_9x.lbm similarity index 100% rename from src/s9xsplash.lbm rename to src/splash_9x.lbm diff --git a/src/s9xsplash.xbm b/src/splash_9x.xbm similarity index 97% rename from src/s9xsplash.xbm rename to src/splash_9x.xbm index 3cffd2b81..7cf7bb1bd 100644 --- a/src/s9xsplash.xbm +++ b/src/splash_9x.xbm @@ -1,6 +1,6 @@ -#define s9xsplash_width 128 -#define s9xsplash_height 64 -static unsigned char s9xsplash_bits[] = { +#define splash_width 128 +#define splash_height 64 +static unsigned char splash_bits[] = { 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, diff --git a/src/splash_X9D.lbm b/src/splash_X9D.lbm new file mode 100644 index 000000000..9a63f048f --- /dev/null +++ b/src/splash_X9D.lbm @@ -0,0 +1,9 @@ +192,64, +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,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, +0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xe3,0x03,0x03,0x03,0x03,0x1f,0xff,0xff,0xff,0x7f,0x3f,0x0f,0x07,0x03,0x03,0x83,0xe3,0xf3,0xfb,0xff,0x7f,0x1f,0x0f,0x07,0x07,0x83,0x83,0xc3,0xc3,0xc3,0x03,0x07,0x07,0x0f,0x1f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x03,0x03,0x03,0x03,0x83,0x83,0x83,0x83,0x83,0x03,0x07,0x07,0x07,0x0f,0x1f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x0f,0x07,0x03,0x01,0x81,0xe0,0xe0,0xf0,0xf0,0xf0,0xe0,0xc0,0x01,0x01,0x03,0x07,0x0f,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0x80,0xe3,0xe1,0xf1,0xf0,0xf0,0xc0,0x00,0x00,0x01,0x03,0x0f,0xff,0xff,0xff,0x3f,0x0f,0x07,0x03,0x03,0x81,0xe0,0xe0,0xf0,0xf0,0xf0,0xe0,0xe0,0x01,0x01,0x03,0x07,0x1f,0xff,0xff,0xff,0xff,0x7f,0x03,0x00,0x00,0x00,0x00,0xc0,0xe3,0xf1,0xf0,0xf0,0x00,0x00,0x00,0x00,0x01,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x60,0x00,0x00,0x00,0x03,0x00,0x80,0xe0,0xf0,0xf8,0xfe,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x3c,0xff,0xff,0xff,0xff,0x3f,0x0f,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0x3f,0x01,0x00,0x00,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x7e,0x00,0x00,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x3e,0x7f,0xff,0xff,0xff,0x7f,0x7f,0x3f,0x07,0x00,0x00,0x00,0x80,0xf0,0xff,0x1f,0x00,0x00,0x00,0x00,0x00,0x3c,0xff,0xff,0xff,0x7f,0x7f,0x3f,0x07,0x00,0x00,0x00,0xc0,0xf8,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x30,0x70,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0x70,0x70,0xf0,0xf0,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0xe0,0xff,0xff,0xff,0x3f,0x1f,0x0f,0x07,0x03,0x00,0xc0,0xe0,0xf0,0xe0,0x00,0x00,0x00,0x03,0x1f,0x7f,0xff,0xff,0xff,0xff,0xff,0x3f,0x7f,0x7c,0xf8,0xf8,0xf0,0xf0,0xf0,0x70,0x30,0x18,0x08,0x00,0x00,0x80,0xe0,0xf8,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0x00,0x70,0x7f,0x7f,0x7f,0x7f,0x3f,0x1f,0x1f,0x07,0x00,0x00,0x80,0xc0,0xf8,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf8,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf8,0xf8,0xfc,0xfe,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0x00,0xf8,0xf8,0xf8,0xf8,0xf0,0xf0,0xf0,0xf0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf8,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf8,0xf8,0xfc,0xff,0xff,0xff,0xff,0xf1,0xf0,0xf0,0xf0,0xf0,0xfc,0xff,0xff,0xff,0xff,0xff,0xf0,0xf0,0xf0,0xf0,0xf0,0xfc,0xf7,0xf3,0xf1,0xf0,0xf0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xf0,0xf0,0xf0,0xf0,0xf3,0xff,0xff,0xff,0xf9,0xf8,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf8,0xf8,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf1,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf8,0xf8,0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x18,0x18,0x18,0x18,0x18,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, +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,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, diff --git a/src/splash_X9D.xbm b/src/splash_X9D.xbm new file mode 100644 index 000000000..d16656cfa --- /dev/null +++ b/src/splash_X9D.xbm @@ -0,0 +1,131 @@ +#define splash_X9D_width 192 +#define splash_X9D_height 64 +static unsigned char splash_X9D_bits[] = { + 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, 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, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xe0, 0x1f, 0xf8, 0x81, 0xff, 0x07, 0xe0, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe0, 0x0f, 0x7c, 0x00, 0xfe, 0x07, 0x00, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xe0, 0x07, 0x3e, 0x00, 0xfc, 0x03, 0x00, 0xfe, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xc1, 0x07, 0x1f, 0x00, 0xf8, 0x03, 0x00, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xc1, 0x03, 0x1f, 0x38, 0xf8, 0x03, 0x00, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xc1, 0x81, 0x0f, 0x3e, 0xf0, 0x83, 0x0f, 0xf8, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xc1, 0xc1, 0xff, 0x03, 0xfe, 0x0f, + 0x06, 0xfe, 0x83, 0xc0, 0x0f, 0x7e, 0xf0, 0x83, 0x1f, 0xf8, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x7f, 0x00, 0xfc, 0x41, 0x80, 0xff, 0x01, 0xf8, 0x0f, + 0x02, 0xfc, 0x83, 0xe0, 0x07, 0x7e, 0xf0, 0x81, 0x3f, 0xf8, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x3f, 0x00, 0xf8, 0x00, 0x00, 0x7f, 0x00, 0xf0, 0x07, + 0x00, 0xf8, 0x07, 0xe0, 0x07, 0x7f, 0xf0, 0xc1, 0x3f, 0xf8, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x1f, 0x00, 0xf0, 0x00, 0x00, 0x3f, 0x00, 0xe0, 0x07, + 0x00, 0xf8, 0x07, 0xf0, 0x07, 0x7f, 0xf0, 0xc1, 0x3f, 0xf8, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0x38, 0xe0, 0x00, 0x07, 0x1e, 0x70, 0xe0, 0x07, + 0x1c, 0xf8, 0x07, 0xf8, 0x07, 0x3f, 0xf0, 0xc1, 0x3f, 0xf8, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0x7e, 0xe0, 0xc0, 0x07, 0x1e, 0xfc, 0xc1, 0x07, + 0x1e, 0xf8, 0x0f, 0xfc, 0x07, 0x3f, 0xf0, 0xc1, 0x3f, 0xf8, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x07, 0xfe, 0xe0, 0xc0, 0x0f, 0x0e, 0xfc, 0xc1, 0x07, + 0x1f, 0xf8, 0x0f, 0xfc, 0x07, 0x1e, 0xf0, 0xc0, 0x3f, 0xf8, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x07, 0xff, 0xe0, 0xe0, 0x0f, 0x0e, 0xfe, 0xc1, 0x03, + 0x1f, 0xf8, 0x07, 0xfe, 0x07, 0x1e, 0xf8, 0xc0, 0x1f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x03, 0xff, 0x60, 0xe0, 0x0f, 0x06, 0x00, 0xc0, 0x83, + 0x1f, 0xfc, 0x03, 0xfc, 0x0f, 0x00, 0xf8, 0xe0, 0x1f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x83, 0xff, 0x60, 0xe0, 0x0f, 0x06, 0x00, 0xc0, 0x83, + 0x1f, 0xfc, 0x03, 0xfc, 0x0f, 0x00, 0xf8, 0xe0, 0x1f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x83, 0xff, 0x60, 0xf0, 0x0f, 0x06, 0x00, 0xc0, 0x83, + 0x1f, 0xfc, 0x01, 0xf8, 0x1f, 0x00, 0xf8, 0xe0, 0x1f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x83, 0x7f, 0x60, 0xf0, 0x07, 0x07, 0x00, 0xc0, 0x83, + 0x1f, 0xfc, 0x00, 0xf8, 0x7f, 0x30, 0xfc, 0xe0, 0x0f, 0xfe, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x83, 0x7f, 0x70, 0xf0, 0x07, 0x07, 0xff, 0xff, 0x81, + 0x0f, 0x7c, 0x20, 0xf8, 0xff, 0x1f, 0x7c, 0xf0, 0x0f, 0xfe, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x83, 0x7f, 0x30, 0xf0, 0x07, 0x07, 0xff, 0xff, 0xc1, + 0x0f, 0x3e, 0x70, 0xf0, 0xff, 0x0f, 0x7e, 0xf0, 0x03, 0xfe, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x03, 0x3f, 0x30, 0xe0, 0x83, 0x07, 0xfe, 0xff, 0xc1, + 0x0f, 0x1e, 0x78, 0xf0, 0xfb, 0x07, 0x7e, 0xf0, 0x01, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x07, 0x0e, 0x38, 0xe0, 0x80, 0x0f, 0xfc, 0xf3, 0xc1, + 0x0f, 0x1e, 0x78, 0xe0, 0xe3, 0x03, 0x7f, 0x00, 0x80, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x07, 0x00, 0x3c, 0x00, 0xc0, 0x0f, 0x00, 0xf0, 0xc1, + 0x07, 0x0e, 0xfc, 0xe0, 0x03, 0x80, 0x7f, 0x00, 0x80, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0x00, 0x3e, 0x00, 0xe0, 0x1f, 0x00, 0xf0, 0xc0, + 0x07, 0x06, 0xfe, 0xe0, 0x01, 0xc0, 0x3f, 0x00, 0xe0, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x1f, 0x00, 0x1f, 0x00, 0xf0, 0x3f, 0x00, 0xf8, 0xe0, + 0x07, 0x03, 0xff, 0xc1, 0x01, 0xe0, 0x3f, 0x00, 0xf0, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x7f, 0xc0, 0x1f, 0x3c, 0xf8, 0xff, 0x00, 0xfe, 0xe0, + 0x07, 0x81, 0xff, 0xc1, 0x07, 0xfc, 0x3f, 0x00, 0xfc, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 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, 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 }; diff --git a/src/translations.cpp b/src/translations.cpp index 525281a07..94df4f55f 100644 --- a/src/translations.cpp +++ b/src/translations.cpp @@ -157,7 +157,7 @@ const pm_char STR_RANGE[] PROGMEM = TR_RANGE; const pm_char STR_BAR[] PROGMEM = TR_BAR; const pm_char STR_ALARM[] PROGMEM = TR_ALARM; const pm_char STR_USRDATA[] PROGMEM = TR_USRDATA; -const pm_char STR_BLADES[] PROGMEM = TR_BLADES; // TODO check that it is optimized away when no FRSKY +const pm_char STR_BLADES[] PROGMEM = TR_BLADES; const pm_char STR_BARS[] PROGMEM = TR_BARS; const pm_char STR_DISPLAY[] PROGMEM = TR_DISPLAY; const pm_char STR_BEEPERMODE[] PROGMEM = TR_BEEPERMODE;