diff --git a/src/general_menus.cpp b/src/general_menus.cpp index f8ebd165f..4bd52ab22 100644 --- a/src/general_menus.cpp +++ b/src/general_menus.cpp @@ -957,11 +957,10 @@ void menuGeneralCalib(uint8_t event) static uint8_t idxState; - for (uint8_t i=0; i<7; i++) { //get low and high vals for sticks and trims + for (uint8_t i=0; i=4) midVals[i] = (loVals[i] + hiVals[i])/2; } s_noScroll = idxState; // make sure we don't scroll while calibrating @@ -972,7 +971,7 @@ void menuGeneralCalib(uint8_t event) idxState = 0; break; - case EVT_KEY_BREAK(KEY_MENU): + case EVT_KEY_BREAK(KEY_ENTER): idxState++; if (idxState==3) { STORE_GENERALVARS; @@ -985,15 +984,15 @@ void menuGeneralCalib(uint8_t event) switch (idxState) { case 0: // START CALIBRATION - lcd_puts(3*FW, 3*FH, STR_MENUTOSTART); + lcd_putsLeft(3*FH, STR_MENUTOSTART); break; case 1: // SET MIDPOINT lcd_putsAtt(5*FW, 2*FH, STR_SETMIDPOINT, s_noScroll ? INVERS : 0); - lcd_puts(3*FW, 3*FH, STR_MENUWHENDONE); + lcd_putsLeft(3*FH, STR_MENUWHENDONE); - for (uint8_t i=0; i<7; i++) { + for (uint8_t i=0; i50) { g_eeGeneral.calibMid[i] = reusableBuffer.calib.midVals[i]; int16_t v = reusableBuffer.calib.midVals[i] - reusableBuffer.calib.loVals[i]; @@ -1020,4 +1019,7 @@ void menuGeneralCalib(uint8_t event) } doMainScreenGraphics(); +#if defined(PCBX9D) + drawPotsBars(); +#endif } diff --git a/src/main_views.cpp b/src/main_views.cpp index 62ba281d9..c356aa2dc 100644 --- a/src/main_views.cpp +++ b/src/main_views.cpp @@ -85,6 +85,16 @@ #define MARKER_WIDTH 5 #define BOX_LIMIT (BOX_WIDTH-MARKER_WIDTH) +void drawPotsBars() +{ + // Optimization by Mike Blandford + uint8_t x, y, len ; // declare temporary variables + for (x=DISPLAY_W/2-5, y=NUM_STICKS; y 0) s_editMode = 0; if (s_editMode > 0 && l_posVert == 0 && menuTab) s_editMode = -1; + if (maxrow == 0) s_editMode = -1; } } #else diff --git a/src/menus.h b/src/menus.h index 72d16c5c0..988a739d4 100644 --- a/src/menus.h +++ b/src/menus.h @@ -80,6 +80,7 @@ inline MenuFuncP lastPopMenu() return g_menuStack[g_menuStackPtr+1]; } +void drawPotsBars(); void doMainScreenGraphics(); void menuMainView(uint8_t event); void menuGeneralDiagAna(uint8_t event); diff --git a/src/open9x.cpp b/src/open9x.cpp index 508684e51..9e6dd4e53 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -2542,7 +2542,7 @@ void perOut(uint8_t mode, uint8_t tick10ms) tick10ms = 0; dirtyChannels &= passDirtyChannels; - } while (++pass < 3 && dirtyChannels); + } while (++pass < 5 && dirtyChannels); mixWarning = lv_mixWarning; } diff --git a/src/open9x.h b/src/open9x.h index 5f97a3ccc..8b0ec6c5d 100644 --- a/src/open9x.h +++ b/src/open9x.h @@ -1306,9 +1306,9 @@ union ReusableBuffer struct { - int16_t midVals[7]; - int16_t loVals[7]; - int16_t hiVals[7]; + int16_t midVals[NUM_STICKS+NUM_POTS]; + int16_t loVals[NUM_STICKS+NUM_POTS]; + int16_t hiVals[NUM_STICKS+NUM_POTS]; } calib; // 42 bytes used by menuGeneralCalib #if defined(SDCARD) diff --git a/src/pulses_avr.cpp b/src/pulses_avr.cpp index ee6387820..86353f884 100644 --- a/src/pulses_avr.cpp +++ b/src/pulses_avr.cpp @@ -55,7 +55,7 @@ uint16_t B3_comp_value; inline void DSM2_EnableTXD(void) { UCSR0B |= (1 << TXEN0); // enable TX - // UCSR0B |= (1 << UDRIE0); // don't enable UDRE0 interrupt, it will be enabled during next setupPulses + // don't enable UDRE0 interrupt now, it will be enabled during next setupPulses } #endif @@ -97,8 +97,11 @@ uint8_t *pulses2MHzWPtr = pulses2MHz; #define CTRL_REP_1CMD -3 #define CTRL_REP_2CMD -6 - -#ifndef SIMU +#if defined(DSM2_SERIAL) +#define DSM2_SERIAL_INTERRUPT() (s_current_protocol == PROTO_DSM2) +#else +#define DSM2_SERIAL_INTERRUPT() (0) +#endif // TIMER1_COMPA_vect used for PPM and DSM2=SERIAL uint8_t g_ppmPulsePolarity = 0; @@ -106,70 +109,54 @@ ISR(TIMER1_COMPA_vect) //2MHz pulse generation (BLOCKING ISR) { uint8_t dt = TCNT1L; // record Timer1 latency for DEBUG stats display -#ifdef DSM2_SERIAL - if (s_current_protocol == PROTO_DSM2) { - setupPulses(); // includes scheduling of next COMPA int. vector (this ISR). - // also re-enables interrupts at and for a safe time. (G: Only if in DSM2_SERIAL mode. Why?) - cli(); // re-disable interrupts to prevent reentrance here. (This ISR will automatically issue sei upon exit.) - UCSR0B |= (1 << UDRIE0); // enable UDRE0 interrupt to start transmitting DSM2 data bytes from buffer + // Call setupPulses only after REST pulse had been sent. + // Must do this before toggle PORTB to keep timing accurate + if (DSM2_SERIAL_INTERRUPT() || *((uint16_t*)pulses2MHzRPtr) == 0) { + setupPulses(); // does not sei() for setupPulsesPPM + heartbeat |= HEART_TIMER_PULSES; + if (IS_PXX_PROTOCOL(s_current_protocol) || IS_DSM2_PROTOCOL(s_current_protocol)) { + // !PPM protocols interrupts don't need COMPA + return; + } } - else -#endif - { + #if !defined(PCBGRUVIN9X) - // Original bitbang for PPM - if (s_current_protocol != PROTO_NONE) { - if (g_ppmPulsePolarity) { - PORTB |= (1< g_tmr1Latency_max) g_tmr1Latency_max = dt; if (dt < g_tmr1Latency_min) g_tmr1Latency_min = dt; - - heartbeat |= HEART_TIMER_PULSES; } -#endif - void setupPulsesPPM(uint8_t proto) { // Total frame length is a fixed 22.5msec (more than 9 channels is non-standard and requires this to be extended.) @@ -432,6 +419,8 @@ FORCEINLINE void setupPulsesDsm2() pulses2MHzWPtr = (uint8_t *)ptr; pulses2MHzRPtr = pulses2MHz; + + UCSR0B |= (1 << UDRIE0); // enable UDRE0 interrupt to start transmitting DSM2 data bytes from buffer } // DSM2=SERIAL mode @@ -754,26 +743,34 @@ void setupPulses() s_current_protocol = required_protocol; + TCCR1B = 0; // Stop counter + TCNT1 = 0; + +#if defined(PCBGRUVIN9X) + TIMSK1 &= ~0x2F; // All Timer1 interrupts off + TIMSK1 &= ~(1< DAL\207\214" +#define TR_MENUWHENDONE CENTER"\007[MENU] > DAL\207\214" #define TR_FREE "voln\202:" #define TR_DELETEMODEL "SMAZAT MODEL" #define TR_COPYINGMODEL "Kop\204ruji model.." @@ -327,9 +327,9 @@ #define TR_CAL "Kal." #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART "\001[MENU] = START" -#define TR_SETMIDPOINT "NASTAV ST\215EDY" -#define TR_MOVESTICKSPOTS "H\216BEJ P\213KY/POTY" +#define TR_MENUTOSTART CENTER"\007[MENU] = START" +#define TR_SETMIDPOINT CENTER"NASTAV ST\215EDY" +#define TR_MOVESTICKSPOTS CENTER"H\216BEJ P\213KY/POTY" #define TR_RXBATT "Rx Bat.:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 diff --git a/src/translations/de.h b/src/translations/de.h index ec08682ff..31b500462 100644 --- a/src/translations/de.h +++ b/src/translations/de.h @@ -235,7 +235,7 @@ #define TR_POPUPS "[MENU]\010[EXIT]" #define OFS_EXIT 7 -#define TR_MENUWHENDONE "[MENU] > Weiter" +#define TR_MENUWHENDONE CENTER"\006[MENU] > Weiter" #define TR_FREE "frei" #define TR_DELETEMODEL "Modell l\203schen?" #define TR_COPYINGMODEL "Kopiere Modell" @@ -328,9 +328,9 @@ #define TR_CAL "Kal." #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART "[MENU] > Starten" -#define TR_SETMIDPOINT "NEUTRALSTELLUNG" -#define TR_MOVESTICKSPOTS "KNPL/POTIS BEWEGEN" +#define TR_MENUTOSTART CENTER"\006[MENU] > Starten" +#define TR_SETMIDPOINT CENTER"NEUTRALSTELLUNG" +#define TR_MOVESTICKSPOTS CENTER"KNPL/POTIS BEWEGEN" #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 diff --git a/src/translations/en.h b/src/translations/en.h index ffa3843d3..e785570ed 100644 --- a/src/translations/en.h +++ b/src/translations/en.h @@ -246,7 +246,7 @@ #define TR_POPUPS "[MENU]\010[EXIT]" #define OFS_EXIT 7 -#define TR_MENUWHENDONE "[MENU] WHEN DONE" +#define TR_MENUWHENDONE CENTER"\006[MENU] WHEN DONE" #define TR_FREE "free" #define TR_DELETEMODEL "DELETE MODEL" #define TR_COPYINGMODEL "Copying model..." @@ -339,9 +339,9 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART "[MENU] TO START" -#define TR_SETMIDPOINT "SET MIDPOINT" -#define TR_MOVESTICKSPOTS "MOVE STICKS/POTS" +#define TR_MENUTOSTART CENTER"\006[MENU] TO START" +#define TR_SETMIDPOINT CENTER"SET MIDPOINT" +#define TR_MOVESTICKSPOTS CENTER"MOVE STICKS/POTS" #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 diff --git a/src/translations/es.h b/src/translations/es.h index 6584fb1d1..c8bdcc8f3 100644 --- a/src/translations/es.h +++ b/src/translations/es.h @@ -227,7 +227,7 @@ #define TR_POPUPS "[MENU]\010[SALIR]" #define OFS_EXIT 7 -#define TR_MENUWHENDONE "[MENU]AL FINAL" +#define TR_MENUWHENDONE CENTER"\006[MENU]AL FINAL" #define TR_FREE "Libre" #define TR_DELETEMODEL "BORRA MODELO" #define TR_COPYINGMODEL "Copiando modelo." @@ -322,9 +322,9 @@ #define TR_CAL "Cal" #define TR_VTRIM "Ajte- +" #define TR_BG "BG:" -#define TR_MENUTOSTART "[MENU] INICIAR" -#define TR_SETMIDPOINT "AJUSTAR CENTROS" -#define TR_MOVESTICKSPOTS "MOVER STICK/POT" +#define TR_MENUTOSTART CENTER"\006[MENU] INICIAR" +#define TR_SETMIDPOINT CENTER"AJUSTAR CENTROS" +#define TR_MOVESTICKSPOTS CENTER"MOVER STICK/POT" #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 diff --git a/src/translations/fr.h b/src/translations/fr.h index 70e696c02..6d2685288 100644 --- a/src/translations/fr.h +++ b/src/translations/fr.h @@ -235,7 +235,7 @@ #define TR_POPUPS "[MENU]\010[QUIT]" #define OFS_EXIT 7 -#define TR_MENUWHENDONE "[MENU] QUAND PRET" +#define TR_MENUWHENDONE CENTER"\006[MENU] QUAND PRET" #define TR_FREE "libre" #define TR_DELETEMODEL "SUPPRIMER MODELE" #define TR_COPYINGMODEL "Copie..." @@ -328,9 +328,9 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART "[MENU] POUR DEBUT" -#define TR_SETMIDPOINT "REGLER NEUTRES" -#define TR_MOVESTICKSPOTS "BOUGER STICKS/POTS" +#define TR_MENUTOSTART CENTER"\006[MENU] POUR DEBUT" +#define TR_SETMIDPOINT CENTER"REGLER NEUTRES" +#define TR_MOVESTICKSPOTS CENTER"BOUGER STICKS/POTS" #define TR_RXBATT "Batt.RX" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 diff --git a/src/translations/it.h b/src/translations/it.h index 6eec80296..e539396fc 100644 --- a/src/translations/it.h +++ b/src/translations/it.h @@ -233,7 +233,7 @@ #define TR_POPUPS "[Men\200]\004[Exit]" #define OFS_EXIT 7 -#define TR_MENUWHENDONE "[Men\200] Conferma" +#define TR_MENUWHENDONE CENTER"\006[Men\200] Conferma" #define TR_FREE " Disp." #define TR_DELETEMODEL "Elimina modello?" #define TR_COPYINGMODEL "Copia in corso.." @@ -326,9 +326,9 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART "[Men\200] per Cal." -#define TR_SETMIDPOINT "SETTA CENTRO" -#define TR_MOVESTICKSPOTS "MUOVI STICK/POT" +#define TR_MENUTOSTART CENTER"\006[Men\200] per Cal." +#define TR_SETMIDPOINT CENTER"SETTA CENTRO" +#define TR_MOVESTICKSPOTS CENTER"MUOVI STICK/POT" #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 diff --git a/src/translations/pt.h b/src/translations/pt.h index 3195fa3f2..c5da452d4 100644 --- a/src/translations/pt.h +++ b/src/translations/pt.h @@ -235,7 +235,7 @@ #define TR_POPUPS "[MENU]\010[SAIR] " #define OFS_EXIT 7 -#define TR_MENUWHENDONE "[MENU]QDO PRONTO" +#define TR_MENUWHENDONE CENTER"\006[MENU]QDO PRONTO" #define TR_FREE "Livre" #define TR_DELETEMODEL "EXCLUI MODELO" #define TR_COPYINGMODEL "Copiando modelo" @@ -328,9 +328,9 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART "[MENU] INICIAR" -#define TR_SETMIDPOINT "CENTRAR STICK/POT" -#define TR_MOVESTICKSPOTS "MOVER STICKS/POTs" +#define TR_MENUTOSTART CENTER"\006[MENU] INICIAR" +#define TR_SETMIDPOINT CENTER"CENTRAR STICK/POT" +#define TR_MOVESTICKSPOTS CENTER"MOVER STICKS/POTs" #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 diff --git a/src/translations/se.h b/src/translations/se.h index 8d4d30add..eb598ed1e 100644 --- a/src/translations/se.h +++ b/src/translations/se.h @@ -238,7 +238,7 @@ #define TR_POPUPS "[MENU]\010[EXIT]" #define OFS_EXIT 7 -#define TR_MENUWHENDONE "[MENU] Avslutar" +#define TR_MENUWHENDONE CENTER"\006[MENU] Avslutar" #define TR_FREE "Ledigt" #define TR_DELETEMODEL "Radera Modell" #define TR_COPYINGMODEL "Kopierar Modell" @@ -331,9 +331,9 @@ #define TR_CAL "Kalib." #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART "[MENU] Startar" -#define TR_SETMIDPOINT "Centrera Allt" -#define TR_MOVESTICKSPOTS "R\202r Rattar/Spakar" +#define TR_MENUTOSTART CENTER"\006[MENU] Startar" +#define TR_SETMIDPOINT CENTER"Centrera Allt" +#define TR_MOVESTICKSPOTS CENTER"R\202r Rattar/Spakar" #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4