diff --git a/src/gruvin9x/board_gruvin9x.h b/src/gruvin9x/board_gruvin9x.h index 9077c71e1..cd00137c9 100644 --- a/src/gruvin9x/board_gruvin9x.h +++ b/src/gruvin9x/board_gruvin9x.h @@ -81,8 +81,10 @@ // SD driver #if !defined(SIMU) +bool sdMounted(); void sdMountPoll(); void sdPoll10ms(); + #define SD_IS_HC() (0) #define SD_GET_BLOCKNR() (0) #define SD_GET_SIZE_MB() (0) diff --git a/src/gruvin9x/diskio.cpp b/src/gruvin9x/diskio.cpp index ea5db5d77..7e80547e8 100644 --- a/src/gruvin9x/diskio.cpp +++ b/src/gruvin9x/diskio.cpp @@ -669,12 +669,17 @@ void sdPoll10ms() } #if !defined(SIMU) +bool sdMounted() +{ + return g_FATFS_Obj.fs_type != 0; +} + void sdMountPoll() { static uint8_t mountTimer; if (mountTimer-- == 0) { mountTimer = 100; - if (g_FATFS_Obj.fs_type == 0) { + if (!sdMounted()) { f_mount(0, &g_FATFS_Obj); } } diff --git a/src/model_menus.cpp b/src/model_menus.cpp index 7250ba0db..1305ff966 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -662,14 +662,21 @@ enum menuModelSetupItems { ITEM_MODEL_SWITCHES_WARNING, ITEM_MODEL_BEEP_CENTER, ITEM_MODEL_PROTOCOL, + IF_PCBSKY9X(ITEM_MODEL_PPM2_PROTOCOL) ITEM_MODEL_PROTOCOL_PARAMS, ITEM_MODEL_SETUP_MAX }; #if defined(CPUARM) || defined(PCBGRUVIN9X) -#define FIELD_TIMER_MAX 3 +#define FIELD_TIMER_MAX 3 #else -#define FIELD_TIMER_MAX 2 +#define FIELD_TIMER_MAX 2 +#endif + +#if defined(PCBSKY9X) +#define FIELD_PROTOCOL_MAX 2 +#else +#define FIELD_PROTOCOL_MAX 1 #endif #if LCD_W >= 212 @@ -700,7 +707,7 @@ void menuModelSetup(uint8_t event) s_rangecheck_mode = 0; #endif - MENU(STR_MENUSETUP, menuTabModel, e_Model, ((protocol<=PROTO_PPMSIM||IS_DSM2_PROTOCOL(protocol)||IS_PXX_PROTOCOL(protocol)) ? 1+ITEM_MODEL_SETUP_MAX : ITEM_MODEL_SETUP_MAX), {0,0,CASE_PCBX9D(0) FIELD_TIMER_MAX,FIELD_TIMER_MAX,0,0,0,0,0,0,0,NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1,1,2}); + MENU(STR_MENUSETUP, menuTabModel, e_Model, ((IS_PPM_PROTOCOL(protocol)||IS_DSM2_PROTOCOL(protocol)||IS_PXX_PROTOCOL(protocol)) ? 1+ITEM_MODEL_SETUP_MAX : ITEM_MODEL_SETUP_MAX), {0,0,CASE_PCBX9D(0) FIELD_TIMER_MAX,FIELD_TIMER_MAX,0,0,0,0,0,0,0,NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1, FIELD_PROTOCOL_MAX, IF_PCBSKY9X(1) 2 }); uint8_t sub = m_posVert - 1; int8_t editMode = s_editMode; @@ -871,42 +878,79 @@ void menuModelSetup(uint8_t event) break; case ITEM_MODEL_PROTOCOL: +#if defined(PCBSKY9X) + lcd_putsLeft(y, PSTR("Port1")); +#else lcd_putsLeft(y, NO_INDENT(STR_PROTO)); - lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_VPROTOS, protocol, - (attr && m_posHorz==0 ? (editMode>0 ? BLINK|INVERS : INVERS):0)); - if (protocol <= PROTO_PPMSIM) { +#endif + + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_VPROTOS, protocol, (attr && m_posHorz==0 ? (editMode>0 ? BLINK|INVERS : INVERS):0)); + +#if defined(PCBSKY9X) + lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+4*FW+3, y, STR_CH, (attr && m_posHorz==1) ? blink : 0); + lcd_outdezAtt(lcdLastPos, y, g_model.ppmSCH+1, LEFT | ((attr && m_posHorz==1) ? blink : 0)); + lcd_putc(lcdLastPos, y, '-'); + lcd_outdezAtt(lcdLastPos + FW+1, y, g_model.ppmSCH+NUM_PORT1_CHANNELS, LEFT | ((attr && m_posHorz==2) ? blink : 0)); +#else + if (IS_PPM_PROTOCOL(protocol)) { lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN+7*FW, y, STR_NCHANNELS, g_model.ppmNCH+2, (attr && m_posHorz==1) ? blink : 0); } -#if defined(DSM2) - else if (protocol == PROTO_DSM2) { - if (attr && m_posHorz > 1) m_posHorz = 1; - int8_t x = limit((int8_t)0, (int8_t)g_model.ppmNCH, (int8_t)2); - g_model.ppmNCH = x; - lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_DSM2MODE, x, (attr && m_posHorz==1) ? blink : 0); + else if (attr) { + REPEAT_LAST_CURSOR_MOVE(); } #endif - else if (attr) { - m_posHorz = 0; - } - if (attr && (editMode>0 || p1valdiff || (protocol>PROTO_PPMSIM && !IS_DSM2_PROTOCOL(protocol)))) { + + if (attr && (editMode>0 || p1valdiff +#if !defined(PCBSKY9X) + || (!IS_PPM_PROTOCOL(protocol) && !IS_DSM2_PROTOCOL(protocol)) +#endif + )) { switch (m_posHorz) { case 0: CHECK_INCDEC_MODELVAR(event, g_model.protocol, 0, PROTO_MAX-1); break; case 1: -#if defined(DSM2) - if (protocol == PROTO_DSM2) - CHECK_INCDEC_MODELVAR(event, g_model.ppmNCH, 0, 2); - else +#if defined(PCBSKY9X) + CHECK_INCDEC_MODELVAR(event, g_model.ppmSCH, 0, 32-8-(g_model.ppmNCH*2)); +#else + CHECK_INCDEC_MODELVAR(event, g_model.ppmNCH, -2, 4); #endif - CHECK_INCDEC_MODELVAR(event, g_model.ppmNCH, -2, 4); break; +#if defined(PCBSKY9X) + case 2: + if (IS_PPM_PROTOCOL(protocol)) + CHECK_INCDEC_MODELVAR(event, g_model.ppmNCH, -2, min(4, (32-g_model.ppmSCH)/2-4)); + else + REPEAT_LAST_CURSOR_MOVE(); + break; +#endif } } break; +#if defined(PCBSKY9X) + case ITEM_MODEL_PPM2_PROTOCOL: + lcd_putsLeft(y, PSTR("Port2")); + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_VPROTOS, 0, 0); + lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+4*FW+3, y, STR_CH, (attr && m_posHorz==0) ? blink : 0); + lcd_outdezAtt(lcdLastPos, y, g_model.ppm2SCH+1, LEFT | ((attr && m_posHorz==0) ? blink : 0)); + lcd_putc(lcdLastPos, y, '-'); + lcd_outdezAtt(lcdLastPos + FW+1, y, g_model.ppm2SCH+8+(g_model.ppm2NCH*2), LEFT | ((attr && m_posHorz==1) ? blink : 0)); + if (attr && (editMode>0 || p1valdiff)) { + switch (m_posHorz) { + case 0: + CHECK_INCDEC_MODELVAR(event, g_model.ppm2SCH, 0, 32-8-(g_model.ppm2NCH*2)); + break; + case 1: + CHECK_INCDEC_MODELVAR(event, g_model.ppm2NCH, -2, min(4, (32-g_model.ppm2SCH)/2-4)); + break; + } + } + break; +#endif + case ITEM_MODEL_PROTOCOL_PARAMS: - if (protocol <= PROTO_PPMSIM) { + if (IS_PPM_PROTOCOL(protocol)) { lcd_putsLeft( y, STR_PPMFRAME); lcd_puts(MODEL_SETUP_2ND_COLUMN+3*FW, y, STR_MS); lcd_outdezAtt(MODEL_SETUP_2ND_COLUMN, y, (int16_t)g_model.ppmFrameLength*5 + 225, ((attr && m_posHorz==0) ? (editMode>0 ? BLINK|INVERS : INVERS) : 0) | PREC1|LEFT); @@ -930,19 +974,12 @@ void menuModelSetup(uint8_t event) } #if defined(DSM2) || defined(PXX) else if (IS_DSM2_PROTOCOL(protocol) || IS_PXX_PROTOCOL(protocol)) { - if (attr && m_posHorz > 1 && IS_DSM2_PROTOCOL(protocol)) - m_posHorz = 0; // limit 3 column row to 2 colums for DSM2 protocol (Rx_Num and RANGE fields) + if (attr && m_posHorz > 1) { + REPEAT_LAST_CURSOR_MOVE(); // limit 3 column row to 2 colums (Rx_Num and RANGE fields) + } lcd_putsLeft(y, STR_RXNUM); - lcd_outdezNAtt(MODEL_SETUP_2ND_COLUMN-(IS_DSM2_PROTOCOL(protocol) ? 0 : 3*FW), y, g_model.modelId, ((attr && m_posHorz==0) ? (editMode>0 ? BLINK|INVERS : INVERS) : 0) | LEADING0|LEFT, 2); - -#if defined(DSM2) - if (IS_DSM2_PROTOCOL(protocol)) { // RANGE CHECK - lcd_putsnAtt(MODEL_SETUP_2ND_COLUMN+5*FW, y, PSTR("RANGErange")+5*(s_rangecheck_mode), 5, (m_posHorz==1 ? attr : 0)); - s_rangecheck_mode = (attr && m_posHorz==1 && editMode>0); // [MENU] key toggles range check mode - } -#endif - + lcd_outdezNAtt(MODEL_SETUP_2ND_COLUMN-3*FW, y, g_model.modelId, ((attr && m_posHorz==0) ? (editMode>0 ? BLINK|INVERS : INVERS) : 0) | LEADING0|LEFT, 2); if (attr && (m_posHorz==0 && (editMode>0 || p1valdiff))) CHECK_INCDEC_MODELVAR(event, g_model.modelId, 0, 99); @@ -958,6 +995,13 @@ void menuModelSetup(uint8_t event) } } #endif + +#if defined(DSM2) + if (IS_DSM2_PROTOCOL(protocol)) { + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, PSTR("\013Range[MENU]Norm [MENU]"), s_rangecheck_mode, (m_posHorz==1 ? attr : 0)); + s_rangecheck_mode = (attr && m_posHorz==1 && editMode>0); // [MENU] key toggles range check mode + } +#endif } #endif break; diff --git a/src/myeeprom.h b/src/myeeprom.h index 2eb16e455..830584dbd 100644 --- a/src/myeeprom.h +++ b/src/myeeprom.h @@ -121,13 +121,17 @@ enum BeeperMode { #endif #if defined(PCBX9D) || defined(PCBACT) -#define MODELDATA_EXTRA char bitmap[10]; -#define LIMITDATA_EXTRA char name[6]; -#define swstate_t uint16_t +#define MODELDATA_EXTRA char bitmap[10]; +#define LIMITDATA_EXTRA char name[6]; +#define swstate_t uint16_t +#elif defined(PCBSKY9X) +#define MODELDATA_EXTRA uint8_t ppmSCH; int8_t ppm2SCH; int8_t ppm2NCH; +#define LIMITDATA_EXTRA +#define swstate_t uint8_t #else #define MODELDATA_EXTRA #define LIMITDATA_EXTRA -#define swstate_t uint8_t +#define swstate_t uint8_t #endif enum BacklightMode { @@ -141,8 +145,7 @@ enum BacklightMode { #if defined(FSPLASH) || defined(XSPLASH) #define SPLASH_MODE uint8_t splashMode:3 #else -#define SPLASH_MODE uint8_t splashMode:1; \ -uint8_t spare4:2 +#define SPLASH_MODE uint8_t splashMode:1; uint8_t spare4:2 #endif #define ALTERNATE_VIEW 0x10 @@ -816,30 +819,29 @@ PACK(typedef struct t_TimerData { enum Protocols { PROTO_PPM, +#if !defined(CPUARM) PROTO_PPM16, PROTO_PPMSIM, +#endif #if defined(PXX) || defined(DSM2) || defined(IRPROTOS) PROTO_PXX, #endif #if defined(DSM2) || defined(IRPROTOS) - PROTO_DSM2, + PROTO_DSM2_LP45, + PROTO_DSM2_DSM2, + PROTO_DSM2_DSMX, #endif #if defined(IRPROTOS) + // we will need 4 bytes for proto :( PROTO_SILV, PROTO_TRAC09, PROTO_PICZ, -// PROTO_SWIFT, // we will need 4 bytes for proto :( + PROTO_SWIFT, #endif PROTO_MAX, PROTO_NONE }; -enum Dsm2Variants { - LPXDSM2, - DSM2only, - DSM2_DSMX -}; - #if defined(MAVLINK) #define TELEMETRY_DATA MavlinkData mavlink; #elif defined(FRSKY) || !defined(CPUM64) diff --git a/src/open9x.cpp b/src/open9x.cpp index 9b4fcc6ad..76245f117 100644 --- a/src/open9x.cpp +++ b/src/open9x.cpp @@ -267,12 +267,8 @@ void per10ms() #endif #if defined(FRSKY) && !defined(CPUARM) && !(defined(PCBSTD) && (defined(AUDIO) || defined(VOICE))) -#if defined(DSM2_SERIAL) - if (s_current_protocol != PROTO_DSM2) + if (!IS_DSM2_SERIAL_PROTOCOL(s_current_protocol)) check_frsky(); -#else - check_frsky(); -#endif #endif // These moved here from perOut() to improve beep trigger reliability. @@ -1080,7 +1076,7 @@ int16_t getGVarValue(int16_t x, int16_t min, int16_t max) int8_t mul = 1; if (idx < 0) { - idx = 1-idx; + idx = -1-idx; mul = -1; } @@ -1297,7 +1293,6 @@ void checkAll() checkTHR(); checkSwitches(); - clearKeyEvents(); } @@ -3119,12 +3114,8 @@ ISR(TIMER_10MS_VECT, ISR_NOBLOCK) // 10ms timer #if defined(FRSKY) if (cnt10ms == 30) { -#if defined(DSM2_SERIAL) - if (s_current_protocol != PROTO_DSM2) + if (!IS_DSM2_SERIAL_PROTOCOL(s_current_protocol)) check_frsky(); -#else - check_frsky(); -#endif } #endif @@ -3258,7 +3249,7 @@ FORCEINLINE void DSM2_USART0_vect() ISR(USART0_UDRE_vect) { #if defined(FRSKY) && defined(DSM2_SERIAL) - if (g_model.protocol == PROTO_DSM2) { + if (IS_DSM2_PROTOCOL(g_model.protocol)) { // TODO not s_current_protocol? DSM2_USART0_vect(); } else { diff --git a/src/open9x.h b/src/open9x.h index 36decdc15..b139fbd59 100644 --- a/src/open9x.h +++ b/src/open9x.h @@ -305,16 +305,34 @@ extern bool s_rangecheck_mode; extern uint8_t s_bind_allowed; #endif +#if defined(CPUARM) +#define IS_PPM_PROTOCOL(protocol) (protocol==PROTO_PPM) +#else +#define IS_PPM_PROTOCOL(protocol) (protocol<=PROTO_PPMSIM) +#endif + +#if defined(PXX) +#define IS_PXX_PROTOCOL(protocol) (protocol==PROTO_PXX) +#else +#define IS_PXX_PROTOCOL(protocol) (0) +#endif + #if defined(DSM2) -#define IS_DSM2_PROTOCOL(protocol) (protocol==PROTO_DSM2) +#define IS_DSM2_PROTOCOL(protocol) (protocol>=PROTO_DSM2_LP45 && protocol<=PROTO_DSM2_DSMX) #else #define IS_DSM2_PROTOCOL(protocol) (0) #endif -#if defined(PXX) -#define IS_PXX_PROTOCOL(protocol) (protocol==PROTO_PXX) +#if defined(DSM2_SERIAL) +#define IS_DSM2_SERIAL_PROTOCOL(protocol) (IS_DSM2_PROTOCOL(protocol)) #else -#define IS_PXX_PROTOCOL(protocol) (0) +#define IS_DSM2_SERIAL_PROTOCOL(protocol) (0) +#endif + + +#define NUM_PORT1_CHANNELS (IS_PXX_PROTOCOL(g_model.protocol) ? 8 : (IS_DSM2_PROTOCOL(g_model.protocol) ? 6 : (8+(g_model.ppmNCH*2)))) +#if defined(PCBSKY9X) +#define NUM_PORT2_CHANNELS (8+(g_model.ppm2NCH*2)) #endif #include "lcd.h" @@ -585,6 +603,7 @@ enum CswFunctions { #endif #define THRCHK_DEADBAND 16 + #if defined(FSPLASH) || defined(XSPLASH) #define SPLASH_TIMEOUT (g_eeGeneral.splashMode == 0 ? 60000/*infinite=10mn*/ : ((4*100) * (g_eeGeneral.splashMode & 0x03))) #else diff --git a/src/pulses_arm.cpp b/src/pulses_arm.cpp index a093d9dca..bca2118d6 100644 --- a/src/pulses_arm.cpp +++ b/src/pulses_arm.cpp @@ -38,11 +38,13 @@ uint8_t s_pulses_paused = 0; uint8_t s_current_protocol = 255; uint8_t pxxFlag = 0 ; -uint16_t ppmStream[20] = { 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ; +uint16_t ppmStream[20] = { 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ; +uint16_t ppm2Stream[20] = { 2000, 2200, 2400, 2600, 2800, 3000, 3200, 3400, 9000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ; #if defined(PCBSKY9X) -volatile uint32_t Pulses_index = 0 ; // Modified in interrupt routine -uint8_t Bit_pulses[64] ; // Likely more than we need +volatile uint32_t ppmStreamIndex = 0 ; // Modified in interrupt routine +volatile uint32_t ppm2StreamIndex = 0 ; // Modified in interrupt routine +uint8_t Bit_pulses[64] ; // Likely more than we need uint8_t *Pulses2MHzptr ; #else uint16_t pxxStream[400] ; // Transisitions @@ -76,31 +78,57 @@ void startPulses() #endif } -void setupPulsesPPM() // Don't enable interrupts through here +#if defined(PCBSKY9X) +#define PPM_PORT_PARAM uint32_t ppmPort=0 +#else +#define PPM_PORT_PARAM +#endif + +void setupPulsesPPM(PPM_PORT_PARAM) // Don't enable interrupts through here { #if defined(PCBSKY9X) register Pwm *pwmptr = PWM; #endif int16_t PPM_range = g_model.extendedLimits ? 640 * 2 : 512 * 2; //range of 0.7..1.7msec - uint32_t numCh = 8 + g_model.ppmNCH * 2; //Channels *2 // Total frame length = 22.5msec // each pulse is 0.7..1.7ms long with a 0.3ms stop tail // The pulse ISR is 2mhz that's why everything is multiplied by 2 - uint16_t * ptr = ppmStream; #if defined(PCBSKY9X) - pwmptr->PWM_CH_NUM[3].PWM_CDTYUPD = (g_model.ppmDelay * 50 + 300) * 2; //Stoplen *2 + uint32_t pwmCh; + uint16_t * ptr; + uint32_t firstCh, lastCh; + if (ppmPort == 0) { + pwmCh = 3; + ptr = ppmStream; + firstCh = g_model.ppmSCH; + lastCh = min(NUM_CHNOUT, firstCh + 8 + (g_model.ppmNCH * 2)); + } + else { + pwmCh = 1; + ptr = ppm2Stream; + firstCh = g_model.ppm2SCH; + lastCh = min(NUM_CHNOUT, firstCh + 8 + (g_model.ppm2NCH * 2)); + } +#else + #define firstCh 0 + uint32_t lastCh = 8 + g_model.ppmNCH * 2; //Channels *2 + uint16_t * ptr = ppmStream; +#endif + +#if defined(PCBSKY9X) + pwmptr->PWM_CH_NUM[pwmCh].PWM_CDTYUPD = (g_model.ppmDelay * 50 + 300) * 2; //Stoplen *2 if (g_model.pulsePol) - pwmptr->PWM_CH_NUM[3].PWM_CMR |= 0x00000200 ; // CPOL + pwmptr->PWM_CH_NUM[pwmCh].PWM_CMR |= 0x00000200 ; // CPOL else - pwmptr->PWM_CH_NUM[3].PWM_CMR &= ~0x00000200 ; // CPOL + pwmptr->PWM_CH_NUM[pwmCh].PWM_CMR &= ~0x00000200 ; // CPOL #endif uint32_t rest = 22500u * 2; //Minimum Framelen=22.5 ms rest += (int32_t(g_model.ppmFrameLength)) * 1000; - for (uint32_t i = 0; i < numCh; i++) { //NUM_CHNOUT + for (uint32_t i=firstCh; iPWM_ISR1 & PWM_ISR1_CHID3) { + reason = pwmptr->PWM_ISR1 ; + if (reason & PWM_ISR1_CHID3) { switch (s_current_protocol) // Use the current, don't switch until set_up_pulses { case PROTO_PXX: @@ -401,7 +431,9 @@ extern "C" void PWM_IRQHandler(void) } break; - case PROTO_DSM2: + case PROTO_DSM2_LP45: + case PROTO_DSM2_DSM2: + case PROTO_DSM2_DSMX: // Alternate periods of 19.5mS and 2.5 mS period = pwmptr->PWM_CH_NUM[3].PWM_CPDR; if (period == 5000) // 2.5 mS @@ -426,15 +458,23 @@ extern "C" void PWM_IRQHandler(void) break; default: - pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = ppmStream[Pulses_index++]; // Period in half uS - if (ppmStream[Pulses_index] == 0) { - Pulses_index = 0; + pwmptr->PWM_CH_NUM[3].PWM_CPDRUPD = ppmStream[ppmStreamIndex++]; // Period in half uS + if (ppmStream[ppmStreamIndex] == 0) { + ppmStreamIndex = 0; setupPulses(); } break; } } + + if (reason & PWM_ISR1_CHID1) { + pwmptr->PWM_CH_NUM[1].PWM_CPDRUPD = ppm2Stream[ppm2StreamIndex++] ; // Period in half uS + if (ppm2Stream[ppm2StreamIndex] == 0) { + ppm2StreamIndex = 0 ; + setupPulsesPPM(1) ; + } + } } #endif @@ -453,7 +493,9 @@ void setupPulses() disable_pxx(); break; #if defined(DSM2) - case PROTO_DSM2: + case PROTO_DSM2_LP45: + case PROTO_DSM2_DSM2: + case PROTO_DSM2_DSMX: disable_ssc(); break; #endif @@ -479,7 +521,9 @@ void setupPulses() init_main_ppm(5000, 0); // Initial period 2.5 mS, output off init_ssc(); break; - case PROTO_DSM2: + case PROTO_DSM2_LP45: + case PROTO_DSM2_DSM2: + case PROTO_DSM2_DSMX: init_main_ppm(5000, 0); // Initial period 2.5 mS, output off init_ssc(); break; @@ -499,7 +543,9 @@ void setupPulses() setupPulsesPXX(); break; #if defined(DSM2) - case PROTO_DSM2: + case PROTO_DSM2_LP45: + case PROTO_DSM2_DSM2: + case PROTO_DSM2_DSMX: setupPulsesDsm2(6); break; #endif diff --git a/src/pulses_avr.cpp b/src/pulses_avr.cpp index c17d27fee..e1f40f852 100644 --- a/src/pulses_avr.cpp +++ b/src/pulses_avr.cpp @@ -67,7 +67,7 @@ void startPulses() { #if defined(PCBGRUVIN9X) #if defined(DSM2_SERIAL) - if (g_model.protocol != PROTO_DSM2) + if (!IS_DSM2_PROTOCOL(g_model.protocol)) #endif { // TODO g: There has to be a better place for this bug fix @@ -97,12 +97,6 @@ uint8_t *pulses2MHzWPtr = pulses2MHz; #define CTRL_REP_1CMD -3 #define CTRL_REP_2CMD -6 -#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; ISR(TIMER1_COMPA_vect) //2MHz pulse generation (BLOCKING ISR) @@ -111,7 +105,7 @@ ISR(TIMER1_COMPA_vect) //2MHz pulse generation (BLOCKING ISR) // 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) { + if (IS_DSM2_SERIAL_PROTOCOL(s_current_protocol) || *((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)) { @@ -379,16 +373,16 @@ normal: FORCEINLINE void setupPulsesDsm2() { uint16_t *ptr = (uint16_t *)pulses2MHz; - switch(g_model.ppmNCH) + switch (s_current_protocol) { - case LPXDSM2: + case PROTO_DSM2_LP45: *ptr = 0x00; break; - case DSM2only: + case PROTO_DSM2_DSM2: *ptr = 0x10; break; - default: - *ptr = 0x18; // DSMX + default: // DSMX + *ptr = 0x18; break; } if (s_bind_allowed) s_bind_allowed--; @@ -507,16 +501,16 @@ void setupPulsesDsm2() pulses2MHzWPtr = pulses2MHz; // If more channels needed make sure the pulses union/array is large enough - switch(g_model.ppmNCH) + switch (s_current_protocol) { - case LPXDSM2: + case PROTO_DSM2_LP45: dsmDat[0] = 0x00; break; - case DSM2only: + case PROTO_DSM2_DSM2: dsmDat[0] = 0x10; break; - default: - dsmDat[0] = 0x18; // DSMX bind mode + default: // DSMX bind mode + dsmDat[0] = 0x18; break; } @@ -740,7 +734,7 @@ void setupPulses() // TX moudle power control output register, in case of electrical glitch. // (Following advice of Atmel for MCU's used in industrial / mission cricital // applications.) - if (required_protocol == PROTO_DSM2) + if (IS_DSM2_PROTOCOL(required_protocol)) PORTH &= ~0x80; else PORTH |= 0x80; @@ -749,7 +743,7 @@ void setupPulses() if (s_current_protocol != required_protocol) { #if defined(DSM2_SERIAL) && defined(FRSKY) - if (s_current_protocol == 255 || s_current_protocol == PROTO_DSM2) { + if (s_current_protocol == 255 || IS_DSM2_PROTOCOL(s_current_protocol)) { FRSKY_Init(); } #endif @@ -773,7 +767,9 @@ void setupPulses() switch (required_protocol) { #if defined(DSM2_PPM) // For DSM2=SERIAL, the default: case is executed, below - case PROTO_DSM2: + case PROTO_DSM2_LP45: + case PROTO_DSM2_DSM2: + case PROTO_DSM2_DSMX: set_timer3_capture(); OCR1C = 200; // 100 uS TCNT1 = 300; // Past the OCR1C value @@ -838,7 +834,9 @@ void setupPulses() break ; #if defined(DSM2_SERIAL) && defined(FRSKY) - case PROTO_DSM2: + case PROTO_DSM2_LP45: + case PROTO_DSM2_DSM2: + case PROTO_DSM2_DSMX: DSM2_Init(); // no break #endif @@ -876,7 +874,9 @@ void setupPulses() #endif #if defined(DSM2) - case PROTO_DSM2: + case PROTO_DSM2_LP45: + case PROTO_DSM2_DSM2: + case PROTO_DSM2_DSMX: // schedule next Mixer calculations SCHEDULE_MIXER_END(22*16); #if defined(DSM2_PPM) @@ -981,7 +981,7 @@ ISR(TIMER1_COMPB_vect) // PXX main interrupt ISR(TIMER1_COMPC_vect) // DSM2_PPM or PXX end of frame { #if defined(DSM2_PPM) && defined(PXX) - if ( g_model.protocol == PROTO_DSM2 ) { + if (IS_DSM2_PROTOCOL(g_model.protocol)) { // TODO not s_current_protocol? #endif #if defined(DSM2_PPM) diff --git a/src/sky9x/board_sky9x.cpp b/src/sky9x/board_sky9x.cpp index 3dfb0c5b0..bc27f7d63 100644 --- a/src/sky9x/board_sky9x.cpp +++ b/src/sky9x/board_sky9x.cpp @@ -398,7 +398,6 @@ void init_pwm() configure_pins( PIO_PC18, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_B | PIN_PORTC | PIN_NO_PULLUP ) ; #if !defined(REVA) - configure_pins( PIO_PC15, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_B | PIN_PORTC | PIN_NO_PULLUP ) ; configure_pins( PIO_PC22, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_B | PIN_PORTC | PIN_NO_PULLUP ) ; #endif @@ -418,16 +417,6 @@ void init_pwm() pwmptr->PWM_CH_NUM[0].PWM_CDTYUPD = 40 ; // Duty pwmptr->PWM_ENA = PWM_ENA_CHID0 ; // Enable channel 0 -#if !defined(REVA) - // PWM1 for PPM2 output 100Hz test - pwmptr->PWM_CH_NUM[1].PWM_CMR = 0x0000000C ; // CLKB - pwmptr->PWM_CH_NUM[1].PWM_CPDR = 100 ; // Period - pwmptr->PWM_CH_NUM[1].PWM_CPDRUPD = 100 ; // Period - pwmptr->PWM_CH_NUM[1].PWM_CDTY = 40 ; // Duty - pwmptr->PWM_CH_NUM[1].PWM_CDTYUPD = 40 ; // Duty - pwmptr->PWM_ENA = PWM_ENA_CHID1 ; // Enable channel 1 -#endif - #if !defined(REVA) // PWM2 for HAPTIC drive 100Hz test pwmptr->PWM_CH_NUM[2].PWM_CMR = 0x0000000C ; // CLKB @@ -765,6 +754,8 @@ void usbBootloader() NVIC_DisableIRQ(TC2_IRQn) ; disable_main_ppm() ; + disable_ppm2(); + // PWM->PWM_IDR1 = PWM_IDR1_CHID3 ; // NVIC_DisableIRQ(PWM_IRQn) ; disable_ssc() ; diff --git a/src/sky9x/board_sky9x.h b/src/sky9x/board_sky9x.h index 0534b16cf..7da131eaa 100644 --- a/src/sky9x/board_sky9x.h +++ b/src/sky9x/board_sky9x.h @@ -159,6 +159,7 @@ void setSticksGain(uint8_t gains); // Pulses driver void init_main_ppm(uint32_t period, uint32_t out_enable); void disable_main_ppm(); +void disable_ppm2(); void init_ssc(); void disable_ssc(); #define disable_pxx() disable_ssc() diff --git a/src/sky9x/pulses_driver.cpp b/src/sky9x/pulses_driver.cpp index 9b9d706ec..cec6d6b53 100644 --- a/src/sky9x/pulses_driver.cpp +++ b/src/sky9x/pulses_driver.cpp @@ -35,7 +35,7 @@ #include "../open9x.h" // TODO illogical in the driver :( -void setupPulsesPPM(); +void setupPulsesPPM(uint32_t ppmPort=0); void init_main_ppm( uint32_t period, uint32_t out_enable ) { @@ -62,9 +62,26 @@ void init_main_ppm( uint32_t period, uint32_t out_enable ) pwmptr->PWM_CH_NUM[3].PWM_CDTY = g_model.ppmDelay*100+600; // Duty in half uS pwmptr->PWM_CH_NUM[3].PWM_CDTYUPD = g_model.ppmDelay*100+600; // Duty in half uS pwmptr->PWM_ENA = PWM_ENA_CHID3 ; // Enable channel 3 - - NVIC_EnableIRQ(PWM_IRQn) ; pwmptr->PWM_IER1 = PWM_IER1_CHID3 ; + +#if !defined(REVA) + configure_pins( PIO_PC15, PIN_PERIPHERAL | PIN_INPUT | PIN_PER_B | PIN_PORTC | PIN_NO_PULLUP ) ; +#endif + +#if !defined(REVA) + // PWM1 for PPM2 + pwmptr->PWM_CH_NUM[1].PWM_CMR = 0x0000000B ; // CLKB + if (g_model.pulsePol) + pwmptr->PWM_CH_NUM[1].PWM_CMR |= 0x00000200 ; // CPOL + pwmptr->PWM_CH_NUM[1].PWM_CPDR = period ; // Period + pwmptr->PWM_CH_NUM[1].PWM_CPDRUPD = period ; // Period + pwmptr->PWM_CH_NUM[1].PWM_CDTY = g_model.ppmDelay*100+600 ; // Duty + pwmptr->PWM_CH_NUM[1].PWM_CDTYUPD = g_model.ppmDelay*100+600 ; // Duty + pwmptr->PWM_ENA = PWM_ENA_CHID1 ; // Enable channel 1 +#endif + + pwmptr->PWM_IER1 = PWM_IER1_CHID1 ; + NVIC_EnableIRQ(PWM_IRQn) ; } void disable_main_ppm() @@ -75,6 +92,16 @@ void disable_main_ppm() pioptr->PIO_PER = PIO_PA17 ; // Assign A17 to PIO PWM->PWM_IDR1 = PWM_IDR1_CHID3 ; +} + +void disable_ppm2() +{ + register Pio *pioptr ; + + pioptr = PIOC ; + pioptr->PIO_PER = PIO_PC17 ; // Assign A17 to PIO + + PWM->PWM_IDR1 = PWM_IDR1_CHID1 ; NVIC_DisableIRQ(PWM_IRQn) ; } diff --git a/src/translations.cpp b/src/translations.cpp index a830aad6e..ef9a215f2 100644 --- a/src/translations.cpp +++ b/src/translations.cpp @@ -85,9 +85,6 @@ const pm_char STR_OPEN9X[] PROGMEM = ISTR(VSWITCHES) ISTR(VSRCRAW) ISTR(VTMRMODES) -#if defined(DSM2) - ISTR(DSM2MODE) -#endif #if defined(PCBGRUVIN9X) || defined (CPUARM) ISTR(DATETIME) #endif diff --git a/src/translations.h b/src/translations.h index 44bd56a20..7a363fafc 100644 --- a/src/translations.h +++ b/src/translations.h @@ -134,14 +134,8 @@ extern const pm_char STR_OPEN9X[]; #define OFS_VSWITCHES (OFS_VKEYS + sizeof(TR_VKEYS)) #define OFS_VSRCRAW (OFS_VSWITCHES + sizeof(TR_VSWITCHES)) #define OFS_VTMRMODES (OFS_VSRCRAW + sizeof(TR_VSRCRAW)) -#if defined(DSM2) -#define OFS_DSM2MODE (OFS_VTMRMODES + sizeof(TR_VTMRMODES)) -#define OFS_ENDDSM2 (OFS_DSM2MODE + sizeof(TR_DSM2MODE)) -#else -#define OFS_ENDDSM2 (OFS_VTMRMODES + sizeof(TR_VTMRMODES)) -#endif #if defined(PCBGRUVIN9X) || defined(CPUARM) -#define OFS_DATETIME (OFS_ENDDSM2) +#define OFS_DATETIME (OFS_VTMRMODES + sizeof(TR_VTMRMODES)) #endif #if defined(CPUARM) #define OFS_VLCD (OFS_DATETIME + sizeof(TR_DATETIME)) @@ -198,10 +192,6 @@ extern const pm_char STR_OPEN9X[]; #define STR_VSRCRAW (STR_OPEN9X + OFS_VSRCRAW) #define STR_VTMRMODES (STR_OPEN9X + OFS_VTMRMODES) -#if defined(DSM2) -#define STR_DSM2MODE (STR_OPEN9X + OFS_DSM2MODE) -#endif - #if defined(ROTARY_ENCODERS) #define STR_VRENAVIG (STR_OPEN9X + OFS_VRENAVIG) #define STR_VRENCODERS (STR_OPEN9X + OFS_VRENCODERS) diff --git a/src/translations/cz.h b/src/translations/cz.h index cf0b5a992..c086eca39 100644 --- a/src/translations/cz.h +++ b/src/translations/cz.h @@ -47,22 +47,36 @@ #endif #define LEN_VPROTOS "\006" -#ifdef PXX -#define TR_PXX "PXX\0 " + +#if defined(PXX) + #define TR_PXX "PXX\0 " +#elif defined(DSM2) || defined(IRPROTOS) + #define TR_PXX "[PXX]\0" #else -#define TR_PXX "[PXX]\0" + #define TR_PXX #endif -#ifdef DSM2 -#define TR_DSM2 "DSM2\0 " + +#if defined(DSM2) + #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " +#elif defined(IRPROTOS) + #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" #else -#define TR_DSM2 "[DSM2]" + #define TR_DSM2 #endif -#ifdef IRPROTOS -#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" + +#if defined(IRPROTOS) + #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" #else -#define TR_IRPROTOS + #define TR_IRPROTOS #endif -#define TR_VPROTOS "PPM\0 ""PPM16\0""PPMsim" TR_PXX TR_DSM2 TR_IRPROTOS + +#if defined(CPUARM) + #define TR_XPPM +#else + #define TR_XPPM "PPM16\0""PPMsim" +#endif + +#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS #define LEN_POSNEG "\003" #define TR_POSNEG "POZ""NEG" @@ -230,9 +244,6 @@ #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "VYP""ABS""THs""TH%""THt" -#define LEN_DSM2MODE "\007" -#define TR_DSM2MODE "LP4/LP5DSMonlyDSMX " - // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 diff --git a/src/translations/de.h b/src/translations/de.h index 86d2258a8..40323856e 100644 --- a/src/translations/de.h +++ b/src/translations/de.h @@ -47,22 +47,36 @@ #endif #define LEN_VPROTOS "\006" -#ifdef PXX -#define TR_PXX "PXX\0 " + +#if defined(PXX) + #define TR_PXX "PXX\0 " +#elif defined(DSM2) || defined(IRPROTOS) + #define TR_PXX "[PXX]\0" #else -#define TR_PXX "[PXX]\0" + #define TR_PXX #endif -#ifdef DSM2 -#define TR_DSM2 "DSM2\0 " + +#if defined(DSM2) + #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " +#elif defined(IRPROTOS) + #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" #else -#define TR_DSM2 "[DSM2]" + #define TR_DSM2 #endif -#ifdef IRPROTOS -#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" + +#if defined(IRPROTOS) + #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" #else -#define TR_IRPROTOS + #define TR_IRPROTOS #endif -#define TR_VPROTOS "PPM\0 ""PPM16\0""PPMsim" TR_PXX TR_DSM2 + +#if defined(CPUARM) + #define TR_XPPM +#else + #define TR_XPPM "PPM16\0""PPMsim" +#endif + +#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS #define LEN_POSNEG "\003" #define TR_POSNEG "POS""NEG" @@ -231,9 +245,6 @@ #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "AUS""ABS""GSs""GS%""GSt" -#define LEN_DSM2MODE "\007" -#define TR_DSM2MODE "LP4/LP5DSMonlyDSMX " - // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 diff --git a/src/translations/en.h b/src/translations/en.h index e93d31012..72ffb0deb 100644 --- a/src/translations/en.h +++ b/src/translations/en.h @@ -52,24 +52,34 @@ #define LEN_VPROTOS "\006" #if defined(PXX) - #define TR_PXX "PXX\0 " + #define TR_PXX "PXX\0 " +#elif defined(DSM2) || defined(IRPROTOS) + #define TR_PXX "[PXX]\0" #else - #define TR_PXX "[PXX]\0" + #define TR_PXX #endif #if defined(DSM2) - #define TR_DSM2 "DSM2\0 " + #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " +#elif defined(IRPROTOS) + #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" #else - #define TR_DSM2 "[DSM2]" + #define TR_DSM2 #endif #if defined(IRPROTOS) - #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" + #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" #else #define TR_IRPROTOS #endif -#define TR_VPROTOS "PPM\0 ""PPM16\0""PPMsim" TR_PXX TR_DSM2 TR_IRPROTOS +#if defined(CPUARM) + #define TR_XPPM +#else + #define TR_XPPM "PPM16\0""PPMsim" +#endif + +#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS #define LEN_POSNEG "\003" #define TR_POSNEG "POS""NEG" @@ -267,9 +277,6 @@ #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ABS""THs""TH%""THt" -#define LEN_DSM2MODE "\007" -#define TR_DSM2MODE "LP4/LP5DSMonlyDSMX " - // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 diff --git a/src/translations/es.h b/src/translations/es.h index 9c1977f6b..93c62c254 100644 --- a/src/translations/es.h +++ b/src/translations/es.h @@ -52,24 +52,35 @@ #define LEN_VPROTOS "\006" #if defined(PXX) - #define TR_PXX "PXX\0 " + #define TR_PXX "PXX\0 " +#elif defined(DSM2) || defined(IRPROTOS) + #define TR_PXX "[PXX]\0" #else - #define TR_PXX "[PXX]\0" + #define TR_PXX #endif #if defined(DSM2) - #define TR_DSM2 "DSM2\0 " + #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " +#elif defined(IRPROTOS) + #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" #else - #define TR_DSM2 "[DSM2]" + #define TR_DSM2 #endif #if defined(IRPROTOS) - #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" + #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" #else #define TR_IRPROTOS #endif -#define TR_VPROTOS "PPM\0 ""PPM16\0""PPMsim" TR_PXX TR_DSM2 TR_IRPROTOS +#if defined(CPUARM) + #define TR_XPPM +#else + #define TR_XPPM "PPM16\0""PPMsim" +#endif + +#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS + #define LEN_POSNEG "\003" #define TR_POSNEG "POS""NEG" @@ -267,9 +278,6 @@ #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ABS""THs""TH%""THt" -#define LEN_DSM2MODE "\007" -#define TR_DSM2MODE "LP4/LP5DSMonlyDSMX " - // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 diff --git a/src/translations/fr.h b/src/translations/fr.h index 9b08f1a45..f89a01745 100644 --- a/src/translations/fr.h +++ b/src/translations/fr.h @@ -47,22 +47,36 @@ #endif #define LEN_VPROTOS "\006" -#ifdef PXX -#define TR_PXX "PXX\0 " + +#if defined(PXX) + #define TR_PXX "PXX\0 " +#elif defined(DSM2) || defined(IRPROTOS) + #define TR_PXX "[PXX]\0" #else -#define TR_PXX "[PXX]\0" + #define TR_PXX #endif -#ifdef DSM2 -#define TR_DSM2 "DSM2\0 " + +#if defined(DSM2) + #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " +#elif defined(IRPROTOS) + #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" #else -#define TR_DSM2 "[DSM2]" + #define TR_DSM2 #endif -#ifdef IRPROTOS -#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" + +#if defined(IRPROTOS) + #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" #else -#define TR_IRPROTOS + #define TR_IRPROTOS #endif -#define TR_VPROTOS "PPM\0 ""PPM16\0""PPMsim" TR_PXX TR_DSM2 TR_IRPROTOS + +#if defined(CPUARM) + #define TR_XPPM +#else + #define TR_XPPM "PPM16\0""PPMsim" +#endif + +#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS #define LEN_POSNEG "\003" #define TR_POSNEG "POS""NEG" @@ -231,9 +245,6 @@ #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ABS""GZs""GZ%""GZt" -#define LEN_DSM2MODE "\007" -#define TR_DSM2MODE "LP4/LP5DSMseulDSMX " - // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 diff --git a/src/translations/it.h b/src/translations/it.h index 3feed3d62..6489f275f 100644 --- a/src/translations/it.h +++ b/src/translations/it.h @@ -46,22 +46,36 @@ #endif #define LEN_VPROTOS "\006" -#ifdef PXX -#define TR_PXX "PXX\0 " + +#if defined(PXX) + #define TR_PXX "PXX\0 " +#elif defined(DSM2) || defined(IRPROTOS) + #define TR_PXX "[PXX]\0" #else -#define TR_PXX "[PXX]\0" + #define TR_PXX #endif -#ifdef DSM2 -#define TR_DSM2 "DSM2\0 " + +#if defined(DSM2) + #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " +#elif defined(IRPROTOS) + #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" #else -#define TR_DSM2 "[DSM2]" + #define TR_DSM2 #endif -#ifdef IRPROTOS -#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" + +#if defined(IRPROTOS) + #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" #else -#define TR_IRPROTOS + #define TR_IRPROTOS #endif -#define TR_VPROTOS "PPM\0 ""PPM16\0""PPMsim" TR_PXX TR_DSM2 TR_IRPROTOS + +#if defined(CPUARM) + #define TR_XPPM +#else + #define TR_XPPM "PPM16\0""PPMsim" +#endif + +#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS #define LEN_POSNEG "\003" #define TR_POSNEG "POS""NEG" @@ -231,9 +245,6 @@ #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ABS""THs""TH%""THt" -#define LEN_DSM2MODE "\007" -#define TR_DSM2MODE "LP4/LP5DSMonlyDSMX " - // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 diff --git a/src/translations/pt.h b/src/translations/pt.h index ee54bb619..07a7361b0 100644 --- a/src/translations/pt.h +++ b/src/translations/pt.h @@ -47,22 +47,36 @@ #endif #define LEN_VPROTOS "\006" -#ifdef PXX -#define TR_PXX "PXX\0 " + +#if defined(PXX) + #define TR_PXX "PXX\0 " +#elif defined(DSM2) || defined(IRPROTOS) + #define TR_PXX "[PXX]\0" #else -#define TR_PXX "[PXX]\0" + #define TR_PXX #endif -#ifdef DSM2 -#define TR_DSM2 "DSM2\0 " + +#if defined(DSM2) + #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " +#elif defined(IRPROTOS) + #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" #else -#define TR_DSM2 "[DSM2]" + #define TR_DSM2 #endif -#ifdef IRPROTOS -#define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" + +#if defined(IRPROTOS) + #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" #else -#define TR_IRPROTOS + #define TR_IRPROTOS #endif -#define TR_VPROTOS "PPM\0 ""PPM16\0""PPMsim" TR_PXX TR_DSM2 TR_IRPROTOS + +#if defined(CPUARM) + #define TR_XPPM +#else + #define TR_XPPM "PPM16\0""PPMsim" +#endif + +#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS #define LEN_POSNEG "\003" #define TR_POSNEG "POS""NEG" @@ -231,9 +245,6 @@ #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ABS""MTs""MT%""MTt" -#define LEN_DSM2MODE "\007" -#define TR_DSM2MODE "LP4/LP5DSMonlyDSMX " - // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 diff --git a/src/translations/se.h b/src/translations/se.h index f3abd5f08..1ada1b5f3 100644 --- a/src/translations/se.h +++ b/src/translations/se.h @@ -51,25 +51,35 @@ #define LEN_VPROTOS "\006" -#ifdef PXX - #define TR_PXX "PXX\0 " +#if defined(PXX) + #define TR_PXX "PXX\0 " +#elif defined(DSM2) || defined(IRPROTOS) + #define TR_PXX "[PXX]\0" #else - #define TR_PXX "[PXX]\0" + #define TR_PXX #endif -#ifdef DSM2 - #define TR_DSM2 "DSM2\0 " +#if defined(DSM2) + #define TR_DSM2 "LP45\0 ""DSM2\0 ""DSMX\0 " +#elif defined(IRPROTOS) + #define TR_DSM2 "[LP45]""[DSM2]""[DSMX]" #else - #define TR_DSM2 "[DSM2]" + #define TR_DSM2 #endif -#ifdef IRPROTOS - #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" +#if defined(IRPROTOS) + #define TR_IRPROTOS "SILV TRAC09PICZ SWIFT\0" #else #define TR_IRPROTOS #endif -#define TR_VPROTOS "PPM\0 ""PPM16\0""PPMsim" TR_PXX TR_DSM2 TR_IRPROTOS +#if defined(CPUARM) + #define TR_XPPM +#else + #define TR_XPPM "PPM16\0""PPMsim" +#endif + +#define TR_VPROTOS "PPM\0 " TR_XPPM TR_PXX TR_DSM2 TR_IRPROTOS #define LEN_POSNEG "\003" #define TR_POSNEG "Pos""Neg" @@ -267,9 +277,6 @@ #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "AV ""ABS""THs""TH%""THt" -#define LEN_DSM2MODE "\007" -#define TR_DSM2MODE "LP4/LP5DSMonlyDSMX " - // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1