diff --git a/radio/src/gui/9x/lcd.h b/radio/src/gui/9x/lcd.h index ffb4ad376..0490bdacc 100644 --- a/radio/src/gui/9x/lcd.h +++ b/radio/src/gui/9x/lcd.h @@ -251,6 +251,10 @@ void lcdInit(); void lcdRefresh(); +#if defined(LCD_KS108) +void lcdRefreshSide(); +#endif + #if defined(LCD_ST7920) uint8_t lcdRefresh_ST7920(uint8_t full); #define IS_LCD_REFRESH_ALLOWED() (0==lcdstate) diff --git a/radio/src/gui/9x/splash.cpp b/radio/src/gui/9x/splash.cpp index 9019a38e0..fd542d974 100644 --- a/radio/src/gui/9x/splash.cpp +++ b/radio/src/gui/9x/splash.cpp @@ -52,7 +52,7 @@ void drawSplash() { lcdClear(); #if defined(PCBMEGA2560) && !defined(SIMU) - lcd_imgfar(0, 0, pgm_get_far_address(splash_lbm), 0, 0); // use progmem "far" for splash working with all other options enabled + lcd_imgfar(0, 0, (GET_FAR_ADDRESS(splashdata)+4), 0, 0); // use progmem "far" for splash working with all other options enabled #else lcd_img(0, 0, splash_lbm, 0, 0); #endif diff --git a/radio/src/main_avr.cpp b/radio/src/main_avr.cpp index 70fc6f3f0..069b7df20 100644 --- a/radio/src/main_avr.cpp +++ b/radio/src/main_avr.cpp @@ -138,7 +138,9 @@ void perMain() drawStatusLine(); } -#if defined(LCD_ST7920) +#if defined(LCD_KS108) + lcdRefreshSide(); +#elif defined(LCD_ST7920) lcdstate = lcdRefresh_ST7920(0); #else lcdRefresh(); diff --git a/radio/src/targets/9x/lcd_ks108_driver.cpp b/radio/src/targets/9x/lcd_ks108_driver.cpp index 4113c2512..5931a7dc2 100644 --- a/radio/src/targets/9x/lcd_ks108_driver.cpp +++ b/radio/src/targets/9x/lcd_ks108_driver.cpp @@ -65,8 +65,13 @@ void lcdSetRefVolt(uint8_t val) { } -void lcdRefreshSide(display_t * p) +void lcdRefreshSide() { + static uint8_t change = 0; // toggle left or right lcd writing + uint8_t *p; + if (change == 0){ CS2_off; CS1_on; p = displayBuf; change = 1;} // Right + else{ CS1_off; CS2_on; p = displayBuf + 64; change = 0;} // Left + for (uint8_t page=0; page < 8; page++) { lcdSendCtl(DISPLAY_SET_COLUMN); // Column addr 0 lcdSendCtl( page | DISPLAY_SET_PAGE); //Page addr @@ -82,13 +87,6 @@ void lcdRefreshSide(display_t * p) void lcdRefresh() { - // Right - CS1_on; - lcdRefreshSide(displayBuf); - CS1_off; - - // Left - CS2_on; - lcdRefreshSide(displayBuf + 64); - CS2_off; + lcdRefreshSide(); + lcdRefreshSide(); } diff --git a/radio/src/targets/mega2560/board_mega2560.cpp b/radio/src/targets/mega2560/board_mega2560.cpp index a1822246c..cf6b43db0 100644 --- a/radio/src/targets/mega2560/board_mega2560.cpp +++ b/radio/src/targets/mega2560/board_mega2560.cpp @@ -25,16 +25,16 @@ inline void boardInit() { // Set up I/O port data directions and initial states (unused pin setting : input, pull-up on) DDRA = 0b11111111; PORTA = 0b00000000; // LCD data - DDRB = 0b01110111; PORTB = 0b00101111; // 7:SOMOBusy, 6:PPM_OUT, 5:SimCTRL, 4:Buzzer, SDCARD[3:MISO 2:MOSI 1:SCK 0:CS] + DDRB = 0b01110111; PORTB = 0b00101111; // 7:WTV20SDBusy, 6:PPM_OUT, 5:SimCTRL, 4:Buzzer, SDCARD[3:MISO 2:MOSI 1:SCK 0:CS] DDRC = 0b11111100; PORTC = 0b00000011; // 7-3:LCD, 2:BackLight, 1:ID2_SW, 0:ID1_SW DDRD = 0b00000000; PORTD = 0b11111100; // 7:AilDR_SW, 6:N/A, 5:N/A, 4:N/A, 3:RENC2_B, 2:RENC2_A, 1:I2C_SDA, 0:I2C_SCL - DDRE = 0b00001010; PORTE = 0b01110100; // 7:PPM_IN, 6:N/A, 5:RENC1_B, 4:RENC1_A, 3:SOMOData, 2:N/A, 1:TELEM_TX, 0:TELEM_RX + DDRE = 0b00001010; PORTE = 0b01110100; // 7:PPM_IN, 6:N/A, 5:RENC1_B, 4:RENC1_A, 3:WTV20SDData, 2:N/A, 1:TELEM_TX, 0:TELEM_RX DDRF = 0b00000000; PORTF = 0b11111111; // 7-0:Trim switch inputs - DDRG = 0b00100000; PORTG = 0b11011111; // 7:N/A, 6:N/A, 5:SOMOClock, 4:N/A, 3:N/A, 2:TCut_SW, 1:Gear_SW, 0: RudDr_SW + DDRG = 0b00100000; PORTG = 0b11011111; // 7:N/A, 6:N/A, 5:WTV20SDClock, 4:N/A, 3:N/A, 2:TCut_SW, 1:Gear_SW, 0: RudDr_SW #if defined(DEBUG) - DDRH = 0b01011010; PORTH = 0b11110100; // 7:N/A, 6:RF_Activated, 5:DSC_Activated, 4:Hold_Power, 3:Speaker, 2:N/A, 1:SOMOReset, 0:Haptic + DDRH = 0b01011010; PORTH = 0b11110100; // 7:N/A, 6:RF_Activated, 5:DSC_Activated, 4:Hold_Power, 3:Speaker, 2:N/A, 1:WTV20SDReset, 0:Haptic #else - DDRH = 0b00011010; PORTH = 0b11110100; // 7:N/A, 6:RF_Activated, 5:DSC_Activated, 4:Hold_Power, 3:Speaker, 2:N/A, 1:SOMOReset, 0:Haptic + DDRH = 0b00011010; PORTH = 0b11110100; // 7:N/A, 6:RF_Activated, 5:DSC_Activated, 4:Hold_Power, 3:Speaker, 2:N/A, 1:WTV20SDReset, 0:Haptic #endif DDRJ = 0b00000000; PORTJ = 0b11111111; // 7:N/A, 6:N/A, 5:N/A, 4:N/A, 3:N/A, 2:N/A, 1:RENC2_push, 0:RENC1_push DDRK = 0b00000000; PORTK = 0b00000000; // Analogic input (no pull-ups) @@ -57,7 +57,7 @@ inline void boardInit() #endif #if defined(VOICE) - // SOMO set-up, with TIMER5 + // WTV20SD set-up, with TIMER5 OCR5A = 0x1F4; //2ms TCCR5B = (1 << WGM52) | (0b011 << CS50); // CTC OCR5A TIMSK5 |= (1<