[all] DSM2 changes (variants are now chosen in Protocol field)

[sky9x] PPM Port2 support added
[all] Negative GVARS bug fixed
This commit is contained in:
bsongis
2013-02-08 11:14:59 +00:00
parent 82ee36571e
commit 992006217e
21 changed files with 425 additions and 233 deletions
+2
View File
@@ -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)
+6 -1
View File
@@ -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);
}
}
+77 -33
View File
@@ -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<int8_t>(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<int8_t>(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;
+16 -14
View File
@@ -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)
+4 -13
View File
@@ -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 {
+23 -4
View File
@@ -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
+67 -21
View File
@@ -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<uint32_t>(NUM_CHNOUT, firstCh + 8 + (g_model.ppmNCH * 2));
}
else {
pwmCh = 1;
ptr = ppm2Stream;
firstCh = g_model.ppm2SCH;
lastCh = min<uint32_t>(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; i<lastCh; i++) {
int16_t v = limit((int16_t)-PPM_range, g_chans512[i], (int16_t)PPM_range) + 2*PPM_CH_CENTER(i);
rest -= v;
*ptr++ = v; /* as Pat MacKenzie suggests */
@@ -331,12 +359,12 @@ void setupPulsesDsm2(uint8_t chns)
// If more channels needed make sure the pulses union/array is large enough
if (dsmDat[0]&BAD_DATA) //first time through, setup header
{
switch(g_model.ppmNCH)
switch(s_current_protocol)
{
case LPXDSM2:
case PROTO_DSM2_LP45:
dsmDat[0]= 0x80;
break;
case DSM2only:
case PROTO_DSM2_DSM2:
dsmDat[0]=0x90;
break;
default:
@@ -373,9 +401,11 @@ extern "C" void PWM_IRQHandler(void)
register Pwm *pwmptr;
register Ssc *sscptr;
uint32_t period;
uint32_t reason;
pwmptr = PWM;
if (pwmptr->PWM_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
+24 -24
View File
@@ -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)
+2 -11
View File
@@ -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() ;
+1
View File
@@ -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()
+30 -3
View File
@@ -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) ;
}
-3
View File
@@ -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
+1 -11
View File
@@ -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)
+24 -13
View File
@@ -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
+24 -13
View File
@@ -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
+16 -9
View File
@@ -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
+17 -9
View File
@@ -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
+24 -13
View File
@@ -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
+24 -13
View File
@@ -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
+24 -13
View File
@@ -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
+19 -12
View File
@@ -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