[X9D] PXX work. UI and pulses
This commit is contained in:
+21
-5
@@ -146,6 +146,7 @@ enum menuGeneralSetupItems {
|
||||
#endif
|
||||
IF_FRSKY(ITEM_SETUP_TIMEZONE)
|
||||
IF_FRSKY(ITEM_SETUP_GPSFORMAT)
|
||||
IF_PXX(ITEM_SETUP_COUNTRYCODE)
|
||||
ITEM_SETUP_RX_CHANNEL_ORD,
|
||||
ITEM_SETUP_STICK_MODE_LABELS,
|
||||
ITEM_SETUP_STICK_MODE,
|
||||
@@ -164,7 +165,7 @@ void menuGeneralSetup(uint8_t event)
|
||||
}
|
||||
#endif
|
||||
|
||||
MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), 0, 0, IF_AUDIO(0) IF_VOICE(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) IF_PCBSKY9X(0) IF_9X(0) LABEL(ALARMS), 0, IF_PCBSKY9X(0) IF_CPUARM(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) 0, LABEL(BACKLIGHT), 0, 0, CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_FRSKY(0) IF_FRSKY(0) 0, LABEL(TX_MODE), CASE_PCBX9D(0) 1/*to force edit mode*/});
|
||||
MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, IF_RTCLOCK(2) IF_RTCLOCK(2) IF_BATTGRAPH(1) LABEL(SOUND), 0, 0, IF_AUDIO(0) IF_VOICE(0) IF_HAPTIC(LABEL(HAPTIC)) IF_HAPTIC(0) IF_HAPTIC(0) IF_HAPTIC(0) IF_PCBSKY9X(0) IF_9X(0) LABEL(ALARMS), 0, IF_PCBSKY9X(0) IF_CPUARM(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) 0, LABEL(BACKLIGHT), 0, 0, CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, IF_SPLASH(0) IF_FRSKY(0) IF_FRSKY(0) IF_PXX(0) 0, LABEL(TX_MODE), CASE_PCBX9D(0) 1/*to force edit mode*/});
|
||||
|
||||
uint8_t sub = m_posVert - 1;
|
||||
|
||||
@@ -180,7 +181,7 @@ void menuGeneralSetup(uint8_t event)
|
||||
lcd_putsLeft(y, STR_DATE);
|
||||
lcd_putc(RADIO_SETUP_DATE_COLUMN, y, '-'); lcd_putc(RADIO_SETUP_DATE_COLUMN+3*FW-1, y, '-');
|
||||
for (uint8_t j=0; j<3; j++) {
|
||||
uint8_t rowattr = (m_posHorz<0 || m_posHorz==j) ? attr : 0;
|
||||
uint8_t rowattr = (m_posHorz==j ? attr : 0);
|
||||
switch (j) {
|
||||
case 0:
|
||||
lcd_outdezAtt(RADIO_SETUP_DATE_COLUMN, y, t.tm_year+1900, rowattr);
|
||||
@@ -202,6 +203,9 @@ void menuGeneralSetup(uint8_t event)
|
||||
}
|
||||
}
|
||||
}
|
||||
#if defined(PCBX9D)
|
||||
if (attr && m_posHorz < 0) lcd_filled_rect(RADIO_SETUP_2ND_COLUMN, y, LCD_W-RADIO_SETUP_2ND_COLUMN-MENUS_SCROLLBAR_WIDTH, 8);
|
||||
#endif
|
||||
if (attr && checkIncDec_Ret)
|
||||
g_rtcTime = gmktime(&t); // update local timestamp and get wday calculated
|
||||
break;
|
||||
@@ -210,7 +214,7 @@ void menuGeneralSetup(uint8_t event)
|
||||
lcd_putsLeft(y, STR_TIME);
|
||||
lcd_putc(RADIO_SETUP_TIME_COLUMN-1, y, ':'); lcd_putc(RADIO_SETUP_TIME_COLUMN+3*FW-4, y, ':');
|
||||
for (uint8_t j=0; j<3; j++) {
|
||||
uint8_t rowattr = (m_posHorz<0 || m_posHorz==j) ? attr : 0;
|
||||
uint8_t rowattr = (m_posHorz==j ? attr : 0);
|
||||
switch (j) {
|
||||
case 0:
|
||||
lcd_outdezNAtt(RADIO_SETUP_TIME_COLUMN, y, t.tm_hour, rowattr|LEADING0, 2);
|
||||
@@ -226,6 +230,9 @@ void menuGeneralSetup(uint8_t event)
|
||||
break;
|
||||
}
|
||||
}
|
||||
#if defined(PCBX9D)
|
||||
if (attr && m_posHorz < 0) lcd_filled_rect(RADIO_SETUP_2ND_COLUMN, y, LCD_W-RADIO_SETUP_2ND_COLUMN-MENUS_SCROLLBAR_WIDTH, 8);
|
||||
#endif
|
||||
if (attr && checkIncDec_Ret)
|
||||
g_rtcTime = gmktime(&t); // update local timestamp and get wday calculated
|
||||
break;
|
||||
@@ -235,8 +242,11 @@ void menuGeneralSetup(uint8_t event)
|
||||
case ITEM_SETUP_BATT_RANGE:
|
||||
lcd_putsLeft(y, STR_BATTERY_RANGE);
|
||||
lcd_putc(g_eeGeneral.vBatMin >= 10 ? RADIO_SETUP_2ND_COLUMN+2*FW+FWNUM-1 : RADIO_SETUP_2ND_COLUMN+2*FW+FWNUM-FW/2, y, '-');
|
||||
putsVolts(RADIO_SETUP_2ND_COLUMN, y, 90+g_eeGeneral.vBatMin, (m_posHorz<=0 ? attr : 0)|LEFT|NO_UNIT);
|
||||
putsVolts(RADIO_SETUP_2ND_COLUMN+4*FW-2, y, 120+g_eeGeneral.vBatMax, (m_posHorz!=0 ? attr : 0)|LEFT|NO_UNIT);
|
||||
putsVolts(RADIO_SETUP_2ND_COLUMN, y, 90+g_eeGeneral.vBatMin, (m_posHorz==0 ? attr : 0)|LEFT|NO_UNIT);
|
||||
putsVolts(RADIO_SETUP_2ND_COLUMN+4*FW-2, y, 120+g_eeGeneral.vBatMax, (m_posHorz>0 ? attr : 0)|LEFT|NO_UNIT);
|
||||
#if defined(PCBX9D)
|
||||
if (attr && m_posHorz < 0) lcd_filled_rect(RADIO_SETUP_2ND_COLUMN, y, LCD_W-RADIO_SETUP_2ND_COLUMN-MENUS_SCROLLBAR_WIDTH, 8);
|
||||
#endif
|
||||
if (attr && s_editMode>0) {
|
||||
if (m_posHorz==0)
|
||||
CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatMin, -50, g_eeGeneral.vBatMax+20); // min=4.0V
|
||||
@@ -449,6 +459,12 @@ void menuGeneralSetup(uint8_t event)
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(PXX)
|
||||
case ITEM_SETUP_COUNTRYCODE:
|
||||
g_eeGeneral.countryCode = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, PSTR("Country Code"), STR_COUNTRYCODES, g_eeGeneral.countryCode, 0, 2, attr, event);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case ITEM_SETUP_RX_CHANNEL_ORD:
|
||||
lcd_putsLeft(y, STR_RXCHANNELORD); // RAET->AETR
|
||||
for (uint8_t i=1; i<=4; i++)
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ void doMixerCalculations();
|
||||
#define MODEL_RESET() memset(&g_model, 0, sizeof(g_model))
|
||||
|
||||
#define MIXER_RESET() \
|
||||
memset(g_chans512, 0, sizeof(g_chans512)); \
|
||||
memset(channelOutputs, 0, sizeof(channelOutputs)); \
|
||||
memset(ex_chans, 0, sizeof(ex_chans))
|
||||
|
||||
uint16_t anaIn(uint8_t chan)
|
||||
|
||||
+1
-1
@@ -645,7 +645,7 @@ void menuMainView(uint8_t event)
|
||||
uint8_t chan = (g_eeGeneral.view & ALTERNATE_VIEW) ? 8+i : i;
|
||||
#endif
|
||||
|
||||
int16_t val = g_chans512[chan];
|
||||
int16_t val = channelOutputs[chan];
|
||||
|
||||
switch(view_base)
|
||||
{
|
||||
|
||||
@@ -191,10 +191,17 @@ typedef void (*MenuFuncP_PROGMEM)(uint8_t event);
|
||||
void title(const pm_char * s);
|
||||
#define TITLE(str) title(str)
|
||||
|
||||
#if defined(CPUARM)
|
||||
#define MENU(title, tab, menu, lines_count, ...) \
|
||||
const uint8_t mstate_tab[] = __VA_ARGS__; \
|
||||
if (!check(event,menu,tab,DIM(tab),mstate_tab,DIM(mstate_tab)-1,(lines_count)-1)) return; \
|
||||
TITLE(title)
|
||||
#else
|
||||
#define MENU(title, tab, menu, lines_count, ...) \
|
||||
static const pm_uint8_t mstate_tab[] PROGMEM = __VA_ARGS__; \
|
||||
if (!check(event,menu,tab,DIM(tab),mstate_tab,DIM(mstate_tab)-1,(lines_count)-1)) return; \
|
||||
TITLE(title)
|
||||
#endif
|
||||
|
||||
#define SIMPLE_MENU_NOTITLE(tab, menu, lines_count) \
|
||||
if (!check_simple(event,menu,tab,DIM(tab),(lines_count)-1)) return;
|
||||
|
||||
+117
-14
@@ -750,9 +750,16 @@ enum menuModelSetupItems {
|
||||
ITEM_MODEL_THROTTLE_WARNING,
|
||||
ITEM_MODEL_SWITCHES_WARNING,
|
||||
ITEM_MODEL_BEEP_CENTER,
|
||||
#if defined(PCBX9D)
|
||||
ITEM_MODE_INTERNAL_MODULE_LABEL,
|
||||
ITEM_MODE_INTERNAL_MODULE_MODE,
|
||||
ITEM_MODE_INTERNAL_MODULE_BIND,
|
||||
ITEM_MODE_INTERNAL_MODULE_FAILSAFE,
|
||||
#else
|
||||
ITEM_MODEL_PROTOCOL,
|
||||
IF_PCBSKY9X(ITEM_MODEL_PPM2_PROTOCOL)
|
||||
ITEM_MODEL_PROTOCOL_PARAMS,
|
||||
#endif
|
||||
ITEM_MODEL_SETUP_MAX
|
||||
};
|
||||
|
||||
@@ -777,14 +784,17 @@ void menuModelSetup(uint8_t event)
|
||||
}
|
||||
#endif
|
||||
|
||||
uint8_t protocol = g_model.protocol;
|
||||
|
||||
#if defined(DSM2)
|
||||
if (event == EVT_KEY_LONG(KEY_EXIT))
|
||||
s_rangecheck_mode = 0;
|
||||
#endif
|
||||
|
||||
#if defined(PCBX9D)
|
||||
MENU(STR_MENUSETUP, menuTabModel, e_Model, 1+ITEM_MODEL_SETUP_MAX, { 0, 0, CASE_PCBX9D(0) 2, IF_PERSISTENT_TIMERS(0) 0, 0, 2, IF_PERSISTENT_TIMERS(0) 0, 0, 0, 0, 0, 0, 0, 0, 0, NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1, LABEL(InternalModule), 2, 2, g_model.failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0});
|
||||
#else
|
||||
uint8_t protocol = g_model.protocol;
|
||||
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) 2, IF_PERSISTENT_TIMERS(0) 0, 0, 2, IF_PERSISTENT_TIMERS(0) 0, 0, 0, 0, 0, 0, 0, 0, 0, NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1, FIELD_PROTOCOL_MAX, IF_PCBSKY9X(1) 2 });
|
||||
#endif
|
||||
|
||||
uint8_t sub = m_posVert - 1;
|
||||
int8_t editMode = s_editMode;
|
||||
@@ -838,8 +848,11 @@ void menuModelSetup(uint8_t event)
|
||||
}
|
||||
else {
|
||||
putsStrIdx(0*FW, y, STR_TIMER, k>=ITEM_MODEL_TIMER2 ? 2 : 1);
|
||||
putsTmrMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, m_posHorz<=0 ? attr : 0);
|
||||
putsTime(MODEL_SETUP_2ND_COLUMN+5*FW-2+5*FWNUM+1, y, timer->start, (m_posHorz<0 || m_posHorz==1) ? attr : 0, (m_posHorz<0 || m_posHorz==2) ? attr : 0);
|
||||
putsTmrMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, m_posHorz==0 ? attr : 0);
|
||||
putsTime(MODEL_SETUP_2ND_COLUMN+5*FW-2+5*FWNUM+1, y, timer->start, m_posHorz==1 ? attr : 0, m_posHorz==2 ? attr : 0);
|
||||
#if defined(PCBX9D)
|
||||
if (attr && m_posHorz < 0) lcd_filled_rect(MODEL_SETUP_2ND_COLUMN, y, LCD_W-MODEL_SETUP_2ND_COLUMN-MENUS_SCROLLBAR_WIDTH, 8);
|
||||
#endif
|
||||
if (attr && (editMode>0 || p1valdiff)) {
|
||||
div_t qr = div(timer->start, 60);
|
||||
switch (m_posHorz) {
|
||||
@@ -969,6 +982,95 @@ void menuModelSetup(uint8_t event)
|
||||
}
|
||||
break;
|
||||
|
||||
#if defined(PCBX9D)
|
||||
case ITEM_MODE_INTERNAL_MODULE_LABEL:
|
||||
lcd_putsLeft(y, PSTR("Internal Module"));
|
||||
break;
|
||||
|
||||
case ITEM_MODE_INTERNAL_MODULE_MODE:
|
||||
lcd_putsLeft(y, PSTR("\001Mode"));
|
||||
lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, PSTR("\004""OFF\0""X16\0""D8\0 ""LR12"), 1+g_model.rfProtocol, m_posHorz==0 ? attr : 0);
|
||||
lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+5*FW+3, y, STR_CH, m_posHorz==1 ? attr : 0);
|
||||
lcd_outdezAtt(lcdLastPos, y, g_model.ppmSCH+1, LEFT | (m_posHorz==1 ? attr : 0));
|
||||
lcd_putc(lcdLastPos, y, '-');
|
||||
lcd_outdezAtt(lcdLastPos + FW+1, y, g_model.ppmSCH+NUM_PORT1_CHANNELS(g_model), LEFT | (m_posHorz==2 ? attr : 0));
|
||||
if (attr && m_posHorz < 0) lcd_filled_rect(MODEL_SETUP_2ND_COLUMN, y, LCD_W-MODEL_SETUP_2ND_COLUMN-MENUS_SCROLLBAR_WIDTH, 8);
|
||||
if (attr && (editMode>0 || p1valdiff)) {
|
||||
static const int8_t maxChannels[] = { 0, 4, 0, 2 };
|
||||
switch (m_posHorz) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.rfProtocol, RF_PROTO_OFF, RF_PROTO_LAST);
|
||||
g_model.ppmSCH = 0;
|
||||
g_model.ppmNCH = maxChannels[1+g_model.rfProtocol];
|
||||
break;
|
||||
case 1:
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.ppmSCH, 32-8-(g_model.ppmNCH*2));
|
||||
break;
|
||||
case 2:
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.ppmNCH, min<int8_t>(maxChannels[1+g_model.rfProtocol], (32-g_model.ppmSCH)/2-4));
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case ITEM_MODE_INTERNAL_MODULE_BIND:
|
||||
lcd_putsLeft(y, STR_RXNUM);
|
||||
lcd_outdezNAtt(MODEL_SETUP_2ND_COLUMN, y, g_model.modelId, (m_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2);
|
||||
if (attr && m_posHorz==0) {
|
||||
if (editMode>0 || p1valdiff) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.modelId, 63);
|
||||
if (checkIncDec_Ret)
|
||||
modelIds[g_eeGeneral.currModel] = g_model.modelId;
|
||||
}
|
||||
if (editMode==0 && event==EVT_KEY_BREAK(KEY_ENTER))
|
||||
checkModelIdUnique(g_eeGeneral.currModel);
|
||||
}
|
||||
|
||||
lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+3*FW, y, PSTR("[Bind]"), (m_posHorz==1 ? attr : 0));
|
||||
if (attr && m_posHorz==1) {
|
||||
s_editMode = 0;
|
||||
if (event==EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
pxxFlag = PXX_SEND_RXNUM;
|
||||
}
|
||||
}
|
||||
|
||||
lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+10*FW, y, PSTR("[Range]"), (pxxFlag == PXX_SEND_RANGECHECK ? BLINK : 0) | (m_posHorz==2 ? attr : 0));
|
||||
if (attr && m_posHorz==2) {
|
||||
s_editMode = 0;
|
||||
if (event==EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
pxxFlag ^= PXX_SEND_RANGECHECK;
|
||||
}
|
||||
}
|
||||
|
||||
if (attr && m_posHorz < 0) lcd_filled_rect(MODEL_SETUP_2ND_COLUMN, y, LCD_W-MODEL_SETUP_2ND_COLUMN-MENUS_SCROLLBAR_WIDTH, 8);
|
||||
break;
|
||||
|
||||
case ITEM_MODE_INTERNAL_MODULE_FAILSAFE:
|
||||
lcd_putsLeft(y, PSTR("\001FailSafe"));
|
||||
lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, PSTR("\011""Hold\0 ""Custom\0 ""No pulses"), g_model.failsafeMode, (m_posHorz==0 || g_model.failsafeMode!=FAILSAFE_CUSTOM) ? attr : 0);
|
||||
if (g_model.failsafeMode == FAILSAFE_CUSTOM) lcd_putsAtt(MODEL_SETUP_2ND_COLUMN + 10*FW, y, PSTR("[Set]"), m_posHorz==1 ? attr : 0);
|
||||
if (attr) {
|
||||
if (s_editMode==0 && g_model.failsafeMode!=FAILSAFE_CUSTOM)
|
||||
m_posHorz = -1;
|
||||
if (m_posHorz==0 || g_model.failsafeMode!=FAILSAFE_CUSTOM) {
|
||||
if (editMode>0 || p1valdiff) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.failsafeMode, FAILSAFE_LAST);
|
||||
}
|
||||
}
|
||||
else if (m_posHorz==1) {
|
||||
s_editMode = 0;
|
||||
if (g_model.failsafeMode==FAILSAFE_CUSTOM && event==EVT_KEY_LONG(KEY_ENTER)) {
|
||||
for (int32_t i=g_model.ppmSCH; i<g_model.ppmSCH+NUM_PORT1_CHANNELS(g_model); i++) {
|
||||
g_model.failsafeChannels[i] = channelOutputs[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
lcd_filled_rect(MODEL_SETUP_2ND_COLUMN, y, LCD_W-MODEL_SETUP_2ND_COLUMN-MENUS_SCROLLBAR_WIDTH, 8);
|
||||
}
|
||||
}
|
||||
break;
|
||||
#else
|
||||
case ITEM_MODEL_PROTOCOL:
|
||||
#if defined(PCBSKY9X)
|
||||
lcd_putsLeft(y, PSTR("Port1"));
|
||||
@@ -982,7 +1084,7 @@ void menuModelSetup(uint8_t event)
|
||||
lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+4*FW+3, y, STR_CH, m_posHorz==1 ? attr : 0);
|
||||
lcd_outdezAtt(lcdLastPos, y, g_model.ppmSCH+1, LEFT | (m_posHorz==1 ? attr : 0));
|
||||
lcd_putc(lcdLastPos, y, '-');
|
||||
lcd_outdezAtt(lcdLastPos + FW+1, y, g_model.ppmSCH+NUM_PORT1_CHANNELS, LEFT | (m_posHorz==2 ? attr : 0));
|
||||
lcd_outdezAtt(lcdLastPos + FW+1, y, g_model.ppmSCH+NUM_PORT1_CHANNELS(g_model), LEFT | (m_posHorz==2 ? attr : 0));
|
||||
#else
|
||||
if (IS_PPM_PROTOCOL(protocol)) {
|
||||
lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN+7*FW, y, STR_NCHANNELS, g_model.ppmNCH+2, m_posHorz!=0 ? attr : 0);
|
||||
@@ -1004,7 +1106,7 @@ void menuModelSetup(uint8_t event)
|
||||
case 1:
|
||||
#if defined(PCBSKY9X)
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.ppmSCH, 32-8-(g_model.ppmNCH*2));
|
||||
g_model.ppmFrameLength = NUM_PORT1_CHANNELS>NUM_PORT2_CHANNELS ? 4*(NUM_PORT1_CHANNELS-8) : 4*(NUM_PORT2_CHANNELS-8);
|
||||
g_model.ppmFrameLength = NUM_PORT1_CHANNELS(g_model)>NUM_PORT2_CHANNELS(g_model) ? 4*(NUM_PORT1_CHANNELS(g_model)-8) : 4*(NUM_PORT2_CHANNELS(g_model)-8);
|
||||
#else
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.ppmNCH, -2, 4);
|
||||
g_model.ppmFrameLength = g_model.ppmNCH * 8;
|
||||
@@ -1014,7 +1116,7 @@ void menuModelSetup(uint8_t event)
|
||||
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));
|
||||
g_model.ppmFrameLength = NUM_PORT1_CHANNELS>NUM_PORT2_CHANNELS ? 4*(NUM_PORT1_CHANNELS-8) : 4*(NUM_PORT2_CHANNELS-8);
|
||||
g_model.ppmFrameLength = NUM_PORT1_CHANNELS(g_model)>NUM_PORT2_CHANNELS(g_model) ? 4*(NUM_PORT1_CHANNELS(g_model)-8) : 4*(NUM_PORT2_CHANNELS(g_model)-8);
|
||||
}
|
||||
else
|
||||
REPEAT_LAST_CURSOR_MOVE();
|
||||
@@ -1036,11 +1138,11 @@ void menuModelSetup(uint8_t event)
|
||||
switch (m_posHorz) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.ppm2SCH, 32-8-(g_model.ppm2NCH*2));
|
||||
g_model.ppmFrameLength = NUM_PORT1_CHANNELS>NUM_PORT2_CHANNELS ? 4*(NUM_PORT1_CHANNELS-8) : 4*(NUM_PORT2_CHANNELS-8);
|
||||
g_model.ppmFrameLength = NUM_PORT1_CHANNELS(g_model)>NUM_PORT2_CHANNELS(g_model) ? 4*(NUM_PORT1_CHANNELS(g_model)-8) : 4*(NUM_PORT2_CHANNELS(g_model)-8);
|
||||
break;
|
||||
case 1:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.ppm2NCH, -2, min<int8_t>(4, (32-g_model.ppm2SCH)/2-4));
|
||||
g_model.ppmFrameLength = NUM_PORT1_CHANNELS>NUM_PORT2_CHANNELS ? 4*(NUM_PORT1_CHANNELS-8) : 4*(NUM_PORT2_CHANNELS-8);
|
||||
g_model.ppmFrameLength = NUM_PORT1_CHANNELS(g_model)>NUM_PORT2_CHANNELS(g_model) ? 4*(NUM_PORT1_CHANNELS(g_model)-8) : 4*(NUM_PORT2_CHANNELS(g_model)-8);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1113,6 +1215,7 @@ void menuModelSetup(uint8_t event)
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
#endif // defined(PCBX9D)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2725,10 +2828,10 @@ void menuModelLimits(uint8_t event)
|
||||
|
||||
if (sub < NUM_CHNOUT) {
|
||||
#if defined(PPM_CENTER_ADJUSTABLE) || defined(PPM_UNIT_US)
|
||||
lcd_outdezAtt(13*FW, 0, PPM_CH_CENTER(sub)+g_chans512[sub]/2, 0);
|
||||
lcd_outdezAtt(13*FW, 0, PPM_CH_CENTER(sub)+channelOutputs[sub]/2, 0);
|
||||
lcd_puts(13*FW, 0, STR_US);
|
||||
#else
|
||||
lcd_outdezAtt(13*FW, 0, calcRESXto1000(g_chans512[sub]), PREC1);
|
||||
lcd_outdezAtt(13*FW, 0, calcRESXto1000(channelOutputs[sub]), PREC1);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -2775,8 +2878,8 @@ void menuModelLimits(uint8_t event)
|
||||
#if LCD_W >= 212 || !defined(PPM_CENTER_ADJUSTABLE)
|
||||
int16_t v = (ld->revert) ? -ld->offset : ld->offset;
|
||||
char swVal = '-'; // '-', '<', '>'
|
||||
if((g_chans512[k] - v) > 50) swVal = (ld->revert ? 127 : 126); // Switch to raw inputs? - remove trim!
|
||||
if((g_chans512[k] - v) < -50) swVal = (ld->revert ? 126 : 127);
|
||||
if((channelOutputs[k] - v) > 50) swVal = (ld->revert ? 127 : 126); // Switch to raw inputs? - remove trim!
|
||||
if((channelOutputs[k] - v) < -50) swVal = (ld->revert ? 126 : 127);
|
||||
putsChn(0, y, k+1, 0);
|
||||
lcd_putc(LIMITS_DIRECTION_POS, y, swVal);
|
||||
#endif
|
||||
@@ -2815,7 +2918,7 @@ void menuModelLimits(uint8_t event)
|
||||
}
|
||||
else if (attr && event==EVT_KEY_LONG(KEY_MENU)) {
|
||||
pauseMixerCalculations();
|
||||
int32_t zero = (int32_t)g_chans512[k];
|
||||
int32_t zero = (int32_t)channelOutputs[k];
|
||||
perOut(e_perout_mode_nosticks+e_perout_mode_notrainer, 0);
|
||||
int32_t chan = chans[k];
|
||||
int8_t lim = ld->max+100;
|
||||
|
||||
@@ -60,7 +60,7 @@ void menuChannelsMonitor(uint8_t event)
|
||||
// Channels
|
||||
for (uint8_t line=0; line<8; line++) {
|
||||
uint8_t y = 9+line*7;
|
||||
int32_t val = g_chans512[ch];
|
||||
int32_t val = channelOutputs[ch];
|
||||
uint8_t ofs = (col ? 0 : 1);
|
||||
|
||||
// Channel name if present, number if not
|
||||
|
||||
+28
-14
@@ -111,7 +111,7 @@ PACK(typedef struct t_FrSkyRSSIAlarm {
|
||||
int8_t value:6;
|
||||
}) FrSkyRSSIAlarm;
|
||||
|
||||
#if defined(PCBX9D) || defined(PCBACT)
|
||||
#if defined(PCBX9D)
|
||||
enum MainViews {
|
||||
VIEW_TIMERS,
|
||||
VIEW_INPUTS,
|
||||
@@ -136,7 +136,7 @@ enum BeeperMode {
|
||||
};
|
||||
|
||||
#if defined(CPUARM)
|
||||
#define EXTRA_GENERAL_FIELDS \
|
||||
#define EXTRA_GENERAL_FIELDS \
|
||||
uint8_t backlightBright; \
|
||||
int8_t currentCalib; \
|
||||
int8_t temperatureWarn; \
|
||||
@@ -147,17 +147,20 @@ enum BeeperMode {
|
||||
uint8_t btBaudrate; \
|
||||
uint8_t optrexDisplay; \
|
||||
uint8_t sticksGain; \
|
||||
uint8_t rotarySteps;
|
||||
uint8_t rotarySteps; \
|
||||
uint8_t countryCode;
|
||||
#elif defined(PXX)
|
||||
#define EXTRA_GENERAL_FIELDS uint8_t countryCode;
|
||||
#else
|
||||
#define EXTRA_GENERAL_FIELDS
|
||||
#define EXTRA_GENERAL_FIELDS
|
||||
#endif
|
||||
|
||||
#if defined(PCBX9D) || defined(PCBACT)
|
||||
#define MODELDATA_EXTRA char bitmap[10];
|
||||
#if defined(PCBX9D)
|
||||
#define MODELDATA_EXTRA char bitmap[10]; int8_t rfProtocol; uint8_t ppmSCH; uint8_t failsafeMode; int16_t failsafeChannels[16];
|
||||
#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 MODELDATA_EXTRA uint8_t ppmSCH; int8_t ppm2SCH; int8_t ppm2NCH; int8_t rfProtocol; uint8_t rfCountryCode;
|
||||
#define LIMITDATA_EXTRA
|
||||
#define swstate_t uint8_t
|
||||
#else
|
||||
@@ -224,11 +227,11 @@ PACK(typedef struct t_EEGeneral {
|
||||
int8_t vBatMin;
|
||||
int8_t vBatMax;
|
||||
|
||||
EXTRA_GENERAL_FIELDS;
|
||||
EXTRA_GENERAL_FIELDS
|
||||
|
||||
}) EEGeneral;
|
||||
|
||||
#if defined(PCBX9D) || defined(PCBACT)
|
||||
#if defined(PCBX9D)
|
||||
#define LEN_MODEL_NAME 12
|
||||
#define LEN_EXPOMIX_NAME 10
|
||||
#define LEN_FP_NAME 10
|
||||
@@ -754,11 +757,7 @@ PACK(typedef struct t_SwashRingData { // Swash Ring data
|
||||
|
||||
#define ROTARY_ENCODER_MAX 1024
|
||||
|
||||
#if defined(PCBACT)
|
||||
#define NUM_ROTARY_ENCODERS 0
|
||||
#define ROTARY_ENCODER_ARRAY_EXTRA
|
||||
#define ROTARY_ENCODER_ARRAY int16_t rotaryEncoders[1];
|
||||
#elif defined(PCBX9D)
|
||||
#if defined(PCBX9D)
|
||||
#define NUM_ROTARY_ENCODERS 0
|
||||
#define NUM_ROTARY_ENCODERS_EXTRA 0
|
||||
#define ROTARY_ENCODER_ARRAY_EXTRA
|
||||
@@ -1088,6 +1087,21 @@ enum Protocols {
|
||||
PROTO_NONE
|
||||
};
|
||||
|
||||
enum RfProtocols {
|
||||
RF_PROTO_OFF = -1,
|
||||
RF_PROTO_X16,
|
||||
RF_PROTO_D8,
|
||||
RF_PROTO_LR12,
|
||||
RF_PROTO_LAST = RF_PROTO_LR12
|
||||
};
|
||||
|
||||
enum FailsafeModes {
|
||||
FAILSAFE_HOLD,
|
||||
FAILSAFE_CUSTOM,
|
||||
FAILSAFE_NOPULSES,
|
||||
FAILSAFE_LAST = FAILSAFE_NOPULSES
|
||||
};
|
||||
|
||||
#if defined(MAVLINK)
|
||||
#define TELEMETRY_DATA MavlinkData mavlink;
|
||||
#elif defined(FRSKY) || !defined(CPUM64)
|
||||
|
||||
+3
-3
@@ -832,7 +832,7 @@ int16_t applyLimits(uint8_t channel, int32_t value)
|
||||
}
|
||||
|
||||
int16_t calibratedStick[NUM_STICKS+NUM_POTS];
|
||||
int16_t g_chans512[NUM_CHNOUT] = {0};
|
||||
int16_t channelOutputs[NUM_CHNOUT] = {0};
|
||||
int16_t ex_chans[NUM_CHNOUT] = {0}; // Outputs (before LIMITS) of the last perMain;
|
||||
#ifdef HELI
|
||||
int16_t cyc_anas[3] = {0};
|
||||
@@ -3063,7 +3063,7 @@ void doMixerCalculations()
|
||||
int16_t value = applyLimits(i, q); // applyLimits will remove the 256 100% basis
|
||||
|
||||
cli();
|
||||
g_chans512[i] = value; // copy consistent word to int-level
|
||||
channelOutputs[i] = value; // copy consistent word to int-level
|
||||
sei();
|
||||
}
|
||||
|
||||
@@ -3087,7 +3087,7 @@ void doMixerCalculations()
|
||||
|
||||
if (g_model.thrTraceSrc > NUM_POTS) {
|
||||
uint8_t ch = g_model.thrTraceSrc-NUM_POTS-1;
|
||||
val = g_chans512[ch];
|
||||
val = channelOutputs[ch];
|
||||
|
||||
int16_t gModelMax = calc100toRESX(g_model.limitData[ch].max)+1024;
|
||||
int16_t gModelMin = calc100toRESX(g_model.limitData[ch].min)-1024;
|
||||
|
||||
+31
-19
@@ -128,6 +128,12 @@
|
||||
#define IF_FRSKY(x)
|
||||
#endif
|
||||
|
||||
#if defined(PXX)
|
||||
#define IF_PXX(x) x,
|
||||
#else
|
||||
#define IF_PXX(x)
|
||||
#endif
|
||||
|
||||
#if defined(SDCARD)
|
||||
#define IF_SDCARD(x) x,
|
||||
#else
|
||||
@@ -412,46 +418,51 @@ extern uint8_t s_bind_allowed;
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM)
|
||||
#define IS_PPM_PROTOCOL(protocol) (protocol==PROTO_PPM)
|
||||
#define IS_PPM_PROTOCOL(protocol) (protocol==PROTO_PPM)
|
||||
#else
|
||||
#define IS_PPM_PROTOCOL(protocol) (protocol<=PROTO_PPMSIM)
|
||||
#define IS_PPM_PROTOCOL(protocol) (protocol<=PROTO_PPMSIM)
|
||||
#endif
|
||||
|
||||
#if defined(PXX)
|
||||
#define IS_PXX_PROTOCOL(protocol) (protocol==PROTO_PXX)
|
||||
#define IS_PXX_PROTOCOL(protocol) (protocol==PROTO_PXX)
|
||||
#else
|
||||
#define IS_PXX_PROTOCOL(protocol) (0)
|
||||
#define IS_PXX_PROTOCOL(protocol) (0)
|
||||
#endif
|
||||
|
||||
#if defined(DSM2)
|
||||
#define IS_DSM2_PROTOCOL(protocol) (protocol>=PROTO_DSM2_LP45 && protocol<=PROTO_DSM2_DSMX)
|
||||
#define IS_DSM2_PROTOCOL(protocol) (protocol>=PROTO_DSM2_LP45 && protocol<=PROTO_DSM2_DSMX)
|
||||
#else
|
||||
#define IS_DSM2_PROTOCOL(protocol) (0)
|
||||
#define IS_DSM2_PROTOCOL(protocol) (0)
|
||||
#endif
|
||||
|
||||
#if defined(DSM2_SERIAL)
|
||||
#define IS_DSM2_SERIAL_PROTOCOL(protocol) (IS_DSM2_PROTOCOL(protocol))
|
||||
#define IS_DSM2_SERIAL_PROTOCOL(protocol) (IS_DSM2_PROTOCOL(protocol))
|
||||
#else
|
||||
#define IS_DSM2_SERIAL_PROTOCOL(protocol) (0)
|
||||
#define IS_DSM2_SERIAL_PROTOCOL(protocol) (0)
|
||||
#endif
|
||||
|
||||
#if defined(PCBX9D)
|
||||
#define NUM_PORT1_CHANNELS(model) ((8+(model.ppmNCH*2)))
|
||||
#else
|
||||
#define NUM_PORT1_CHANNELS(model) (IS_PXX_PROTOCOL(model.protocol) ? 8 : (IS_DSM2_PROTOCOL(model.protocol) ? 6 : (8+(model.ppmNCH*2))))
|
||||
#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))
|
||||
#define NUM_PORT2_CHANNELS(model) (8+(model.ppm2NCH*2))
|
||||
#endif
|
||||
|
||||
#include "lcd.h"
|
||||
#include "menus.h"
|
||||
#ifdef TEMPLATES
|
||||
#include "templates.h"
|
||||
|
||||
#if defined(TEMPLATES)
|
||||
#include "templates.h"
|
||||
#endif
|
||||
|
||||
#if !defined(SIMU)
|
||||
#define assert(x)
|
||||
#if !defined(CPUARM) || !defined(DEBUG)
|
||||
#define printf printf_not_allowed
|
||||
#endif
|
||||
#define assert(x)
|
||||
#if !defined(CPUARM) || !defined(DEBUG)
|
||||
#define printf printf_not_allowed
|
||||
#endif
|
||||
#endif
|
||||
|
||||
extern const pm_uint8_t bchout_ar[];
|
||||
@@ -642,8 +653,9 @@ extern uint16_t inacSum;
|
||||
extern uint8_t pxxFlag;
|
||||
#endif
|
||||
|
||||
#define PXX_SEND_RXNUM 0x01
|
||||
#define PXX_SEND_FAILSAFE 0x02
|
||||
#define PXX_SEND_RXNUM 0x01
|
||||
#define PXX_SEND_FAILSAFE 0x02
|
||||
#define PXX_SEND_RANGECHECK (1 << 1)
|
||||
|
||||
#define ZCHAR_MAX (40 + LEN_SPECIAL_CHARS)
|
||||
|
||||
@@ -1016,7 +1028,7 @@ extern uint8_t ppmInState; //0=unsync 1..8= wait for value i-1
|
||||
extern int16_t g_ppmIns[8];
|
||||
extern int32_t chans[NUM_CHNOUT];
|
||||
extern int16_t ex_chans[NUM_CHNOUT]; // Outputs (before LIMITS) of the last perMain
|
||||
extern int16_t g_chans512[NUM_CHNOUT];
|
||||
extern int16_t channelOutputs[NUM_CHNOUT];
|
||||
extern uint16_t BandGap;
|
||||
|
||||
extern int16_t expo(int16_t x, int16_t k);
|
||||
|
||||
+56
-28
@@ -131,7 +131,7 @@ void setupPulsesPPM(PPM_PORT_PARAM) // Don't enable interrupts
|
||||
uint32_t rest = 22500u * 2; //Minimum Framelen=22.5 ms
|
||||
rest += (int32_t(g_model.ppmFrameLength)) * 1000;
|
||||
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);
|
||||
int16_t v = limit((int16_t)-PPM_range, channelOutputs[i], (int16_t)PPM_range) + 2*PPM_CH_CENTER(i);
|
||||
rest -= v;
|
||||
*ptr++ = v; /* as Pat MacKenzie suggests */
|
||||
}
|
||||
@@ -300,33 +300,56 @@ void setupPulsesPXX()
|
||||
PxxValue = 0 ;
|
||||
#endif
|
||||
|
||||
PcmCrc = 0 ;
|
||||
PcmOnesCount = 0 ;
|
||||
putPcmHead( ) ; // sync byte
|
||||
putPcmByte( g_model.ppmNCH ) ; // TODO should be RX NUM ??? putPcmByte( g_model.rxnum ) ; //
|
||||
putPcmByte( pxxFlag ) ; // First byte of flags
|
||||
putPcmByte( 0 ) ; // Second byte of flags
|
||||
pxxFlag = 0; // reset flag after send
|
||||
for (uint32_t i=0; i<8; i+=2) { // First 8 channels only // Next 8 channels would have 2048 added
|
||||
chan = g_chans512[i] *3 / 4 + 2250 ;
|
||||
chan_1 = g_chans512[i+1] *3 / 4 + 2250 ;
|
||||
// if ( chan > 2047 )
|
||||
// {
|
||||
// chan = 2047 ;
|
||||
// }
|
||||
// if ( chan_1 > 2047 )
|
||||
// {
|
||||
// chan_1 = 2047 ;
|
||||
// }
|
||||
putPcmByte( chan ) ; // Low byte of channel
|
||||
putPcmByte( ( ( chan >> 8 ) & 0x0F ) | ( chan_1 << 4) ) ; // 4 bits each from 2 channels
|
||||
putPcmByte( chan_1 >> 4 ) ; // High byte of channel
|
||||
PcmCrc = 0;
|
||||
PcmOnesCount = 0;
|
||||
|
||||
/* Sync */
|
||||
putPcmHead();
|
||||
|
||||
/* Rx Number */
|
||||
putPcmByte(g_model.modelId);
|
||||
|
||||
/* FLAG1 */
|
||||
if (pxxFlag == PXX_SEND_RXNUM) {
|
||||
putPcmByte((g_model.rfProtocol << 6) | (g_eeGeneral.countryCode << 1) | pxxFlag);
|
||||
pxxFlag = 0; // reset flag after send
|
||||
}
|
||||
chan = PcmCrc ; // get the crc
|
||||
putPcmByte( chan ) ; // Checksum lo
|
||||
putPcmByte( chan >> 8 ) ; // Checksum hi
|
||||
putPcmHead( ) ; // sync byte
|
||||
putPcmFlush() ;
|
||||
else {
|
||||
putPcmByte((g_model.rfProtocol << 6) | pxxFlag);
|
||||
}
|
||||
|
||||
/* FLAG2 */
|
||||
putPcmByte(0);
|
||||
|
||||
/* PPM */
|
||||
static uint32_t pass = 0;
|
||||
uint32_t sendUpperChannels = 0;
|
||||
if (pass++ & 0x01) {
|
||||
sendUpperChannels = g_model.ppmNCH*2;
|
||||
}
|
||||
for (uint32_t i=0; i<8; i+=2) {
|
||||
if (i < sendUpperChannels) {
|
||||
chan = limit(2048, channelOutputs[8+g_model.ppmSCH+i] + 3072, 4095);
|
||||
chan_1 = limit(2048, channelOutputs[8+g_model.ppmSCH+i+1] + 3072, 4095);
|
||||
}
|
||||
else {
|
||||
chan = limit(0, channelOutputs[g_model.ppmSCH+i] + 1024, 2047);
|
||||
chan_1 = limit(0, channelOutputs[g_model.ppmSCH+i+1] + 1024, 2047);
|
||||
}
|
||||
putPcmByte(chan); // Low byte of channel
|
||||
putPcmByte( ( ( chan >> 8 ) & 0x0F ) | ( chan_1 << 4) ) ; // 4 bits each from 2 channels
|
||||
putPcmByte(chan_1 >> 4); // High byte of channel
|
||||
}
|
||||
|
||||
/* CRC16 */
|
||||
chan = PcmCrc;
|
||||
putPcmByte(chan);
|
||||
putPcmByte(chan >> 8);
|
||||
|
||||
/* Sync */
|
||||
putPcmHead();
|
||||
|
||||
putPcmFlush();
|
||||
}
|
||||
|
||||
#if defined(DSM2)
|
||||
@@ -382,7 +405,7 @@ void setupPulsesDsm2(uint8_t chns)
|
||||
dsmDat[1]=g_eeGeneral.currModel+1; //DSM2 Header second byte for model match
|
||||
for(uint8_t i=0; i<chns; i++)
|
||||
{
|
||||
uint16_t pulse = limit(0, ((g_chans512[i]*13)>>5)+512,1023);
|
||||
uint16_t pulse = limit(0, ((channelOutputs[i]*13)>>5)+512,1023);
|
||||
dsmDat[2+2*i] = (i<<2) | ((pulse>>8)&0x03);
|
||||
dsmDat[3+2*i] = pulse & 0xff;
|
||||
}
|
||||
@@ -485,7 +508,12 @@ void setupPulses()
|
||||
{
|
||||
heartbeat |= HEART_TIMER_PULSES;
|
||||
|
||||
#if defined(PCBX9D)
|
||||
uint8_t required_protocol = (g_model.rfProtocol == RF_PROTO_OFF ? PROTO_NONE : PROTO_PXX);
|
||||
#else
|
||||
uint8_t required_protocol = g_model.protocol;
|
||||
#endif
|
||||
|
||||
if (s_pulses_paused)
|
||||
required_protocol = PROTO_NONE;
|
||||
|
||||
|
||||
+7
-7
@@ -169,7 +169,7 @@ void setupPulsesPPM(uint8_t proto)
|
||||
|
||||
rest += (int32_t(g_model.ppmFrameLength))*1000;
|
||||
for (uint8_t i=(proto==PROTO_PPM16) ? p-8 : 0; i<p; i++) {
|
||||
int16_t v = limit((int16_t)-PPM_range, g_chans512[i], (int16_t)PPM_range) + 2*PPM_CH_CENTER(i);
|
||||
int16_t v = limit((int16_t)-PPM_range, channelOutputs[i], (int16_t)PPM_range) + 2*PPM_CH_CENTER(i);
|
||||
rest -= v;
|
||||
*ptr++ = q;
|
||||
*ptr++ = v - q; // total pulse width includes stop phase
|
||||
@@ -325,8 +325,8 @@ void setupPulsesPXX()
|
||||
pxxFlag = 0; // reset flag after send
|
||||
for ( i = 0 ; i < 8 ; i += 2 ) // First 8 channels only
|
||||
{
|
||||
chan = g_chans512[i] * 3 / 4 + 2250 ;
|
||||
chan_1 = g_chans512[i+1] * 3 / 4 + 2250 ;
|
||||
chan = channelOutputs[i] * 3 / 4 + 2250 ;
|
||||
chan_1 = channelOutputs[i+1] * 3 / 4 + 2250 ;
|
||||
putPcmByte( chan ) ; // Low byte of channel
|
||||
putPcmByte( ( ( chan >> 8 ) & 0x0F ) | ( chan_1 << 4) ) ; // 4 bits each from 2 channels
|
||||
putPcmByte( chan_1 >> 4 ) ; // High byte of channel
|
||||
@@ -405,7 +405,7 @@ FORCEINLINE void setupPulsesDsm2()
|
||||
*ptr++ = g_model.modelId;
|
||||
for (uint8_t i=0; i<DSM2_CHANS; i++)
|
||||
{
|
||||
uint16_t pulse = limit(0, ((g_chans512[i]*13)>>5)+512,1023);
|
||||
uint16_t pulse = limit(0, ((channelOutputs[i]*13)>>5)+512,1023);
|
||||
*ptr++ = (i<<2) | ((pulse>>8)&0x03); // encoded channel + upper 2 bits pulse width
|
||||
*ptr++ = pulse & 0xff; // low byte
|
||||
}
|
||||
@@ -533,7 +533,7 @@ void setupPulsesDsm2()
|
||||
dsmDat[1] = g_model.modelId; // DSM2 Header second byte for model match
|
||||
for (uint8_t i=0; i<DSM2_CHANS; i++)
|
||||
{
|
||||
uint16_t pulse = limit(0, ((g_chans512[i]*13)>>5)+512,1023);
|
||||
uint16_t pulse = limit(0, ((channelOutputs[i]*13)>>5)+512,1023);
|
||||
dsmDat[2+2*i] = (i<<2) | ((pulse>>8)&0x03); // encoded channel + upper 2 bits pulse width
|
||||
dsmDat[3+2*i] = pulse & 0xff; // low byte
|
||||
}
|
||||
@@ -675,8 +675,8 @@ NOINLINE int8_t reduce7s(int16_t v, uint8_t sfr, uint8_t sf2, int8_t ofs2)
|
||||
}
|
||||
|
||||
//these defines allow the compiler to preclculate constants
|
||||
#define getChan7u(i,bitsRes) reduce7u(g_chans512[i],(BITS-bitsRes))
|
||||
#define getChan7s(i,bitsRes) reduce7s(g_chans512[i],(BITS-bitsRes),1<<((BITS-bitsRes)-1),1<<(bitsRes-1))
|
||||
#define getChan7u(i,bitsRes) reduce7u(channelOutputs[i],(BITS-bitsRes))
|
||||
#define getChan7s(i,bitsRes) reduce7s(channelOutputs[i],(BITS-bitsRes),1<<((BITS-bitsRes)-1),1<<(bitsRes-1))
|
||||
|
||||
static void setupPulsesPiccoZ(uint8_t chn)
|
||||
{
|
||||
|
||||
@@ -95,6 +95,9 @@ const pm_char STR_OPEN9X[] PROGMEM =
|
||||
#endif
|
||||
#if defined(CPUARM)
|
||||
ISTR(VLCD)
|
||||
#endif
|
||||
#if defined(PXX)
|
||||
ISTR(COUNTRYCODES)
|
||||
#endif
|
||||
;
|
||||
|
||||
|
||||
+106
-95
@@ -76,143 +76,154 @@
|
||||
|
||||
extern const pm_char STR_OPEN9X[];
|
||||
|
||||
#define OFS_OFFON 0
|
||||
#define OFS_MMMINV (OFS_OFFON + sizeof(TR_OFFON))
|
||||
#define OFS_NCHANNELS (OFS_MMMINV + sizeof(TR_MMMINV))
|
||||
#define OFS_OFFON 0
|
||||
#define OFS_MMMINV (OFS_OFFON + sizeof(TR_OFFON))
|
||||
#define OFS_NCHANNELS (OFS_MMMINV + sizeof(TR_MMMINV))
|
||||
#if defined(GRAPHICS)
|
||||
#define OFS_VBEEPMODE (OFS_NCHANNELS + sizeof(TR_NCHANNELS))
|
||||
#define OFS_VBEEPMODE (OFS_NCHANNELS + sizeof(TR_NCHANNELS))
|
||||
#else
|
||||
#define OFS_VBEEPLEN (OFS_NCHANNELS + sizeof(TR_NCHANNELS))
|
||||
#define OFS_VBEEPMODE (OFS_VBEEPLEN + sizeof(TR_VBEEPLEN))
|
||||
#define OFS_VBEEPLEN (OFS_NCHANNELS + sizeof(TR_NCHANNELS))
|
||||
#define OFS_VBEEPMODE (OFS_VBEEPLEN + sizeof(TR_VBEEPLEN))
|
||||
#endif
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
#define OFS_VRENAVIG (OFS_VBEEPMODE + sizeof(TR_VBEEPMODE))
|
||||
#define OFS_VRENCODERS (OFS_VRENAVIG + sizeof(TR_VRENAVIG))
|
||||
#define OFS_TRNMODE (OFS_VRENCODERS + sizeof(TR_VRENCODERS))
|
||||
#define OFS_VRENAVIG (OFS_VBEEPMODE + sizeof(TR_VBEEPMODE))
|
||||
#define OFS_VRENCODERS (OFS_VRENAVIG + sizeof(TR_VRENAVIG))
|
||||
#define OFS_TRNMODE (OFS_VRENCODERS + sizeof(TR_VRENCODERS))
|
||||
#elif defined(ROTARY_ENCODER_NAVIGATION)
|
||||
#define OFS_VRENCODERS (OFS_VBEEPMODE + sizeof(TR_VBEEPMODE))
|
||||
#define OFS_TRNMODE (OFS_VRENCODERS + sizeof(TR_VRENCODERS))
|
||||
#define OFS_VRENCODERS (OFS_VBEEPMODE + sizeof(TR_VBEEPMODE))
|
||||
#define OFS_TRNMODE (OFS_VRENCODERS + sizeof(TR_VRENCODERS))
|
||||
#else
|
||||
#define OFS_TRNMODE (OFS_VBEEPMODE + sizeof(TR_VBEEPMODE))
|
||||
#define OFS_TRNMODE (OFS_VBEEPMODE + sizeof(TR_VBEEPMODE))
|
||||
#endif
|
||||
#define OFS_TRNCHN (OFS_TRNMODE + sizeof(TR_TRNMODE))
|
||||
#define OFS_VTRIMINC (OFS_TRNCHN + sizeof(TR_TRNCHN))
|
||||
#define OFS_RETA123 (OFS_VTRIMINC + sizeof(TR_VTRIMINC))
|
||||
#define OFS_VPROTOS (OFS_RETA123 + sizeof(TR_RETA123))
|
||||
#define OFS_POSNEG (OFS_VPROTOS + sizeof(TR_VPROTOS))
|
||||
#define OFS_VBLMODE (OFS_POSNEG + sizeof(TR_POSNEG))
|
||||
#define OFS_VCURVEFUNC (OFS_VBLMODE + sizeof(TR_VBLMODE))
|
||||
#define OFS_VMLTPX (OFS_VCURVEFUNC + sizeof(TR_VCURVEFUNC))
|
||||
#define OFS_VMLTPX2 (OFS_VMLTPX + sizeof(TR_VMLTPX))
|
||||
#define OFS_VMIXTRIMS (OFS_VMLTPX2 + sizeof(TR_VMLTPX2))
|
||||
#define OFS_VCSWFUNC (OFS_VMIXTRIMS + sizeof(TR_VMIXTRIMS))
|
||||
#define OFS_VFSWFUNC (OFS_VCSWFUNC + sizeof(TR_VCSWFUNC))
|
||||
#define OFS_VFSWRESET (OFS_VFSWFUNC + sizeof(TR_VFSWFUNC))
|
||||
#define OFS_FUNCSOUNDS (OFS_VFSWRESET + sizeof(TR_VFSWRESET))
|
||||
#define OFS_VTELEMCHNS (OFS_FUNCSOUNDS + sizeof(TR_FUNCSOUNDS))
|
||||
#define OFS_TRNCHN (OFS_TRNMODE + sizeof(TR_TRNMODE))
|
||||
#define OFS_VTRIMINC (OFS_TRNCHN + sizeof(TR_TRNCHN))
|
||||
#define OFS_RETA123 (OFS_VTRIMINC + sizeof(TR_VTRIMINC))
|
||||
#define OFS_VPROTOS (OFS_RETA123 + sizeof(TR_RETA123))
|
||||
#define OFS_POSNEG (OFS_VPROTOS + sizeof(TR_VPROTOS))
|
||||
#define OFS_VBLMODE (OFS_POSNEG + sizeof(TR_POSNEG))
|
||||
#define OFS_VCURVEFUNC (OFS_VBLMODE + sizeof(TR_VBLMODE))
|
||||
#define OFS_VMLTPX (OFS_VCURVEFUNC + sizeof(TR_VCURVEFUNC))
|
||||
#define OFS_VMLTPX2 (OFS_VMLTPX + sizeof(TR_VMLTPX))
|
||||
#define OFS_VMIXTRIMS (OFS_VMLTPX2 + sizeof(TR_VMLTPX2))
|
||||
#define OFS_VCSWFUNC (OFS_VMIXTRIMS + sizeof(TR_VMIXTRIMS))
|
||||
#define OFS_VFSWFUNC (OFS_VCSWFUNC + sizeof(TR_VCSWFUNC))
|
||||
#define OFS_VFSWRESET (OFS_VFSWFUNC + sizeof(TR_VFSWFUNC))
|
||||
#define OFS_FUNCSOUNDS (OFS_VFSWRESET + sizeof(TR_VFSWRESET))
|
||||
#define OFS_VTELEMCHNS (OFS_FUNCSOUNDS + sizeof(TR_FUNCSOUNDS))
|
||||
#if defined(FRSKY) || defined(CPUARM)
|
||||
#define OFS_VTELEMUNIT (OFS_VTELEMCHNS + sizeof(TR_VTELEMCHNS))
|
||||
#define OFS_VALARM (OFS_VTELEMUNIT + sizeof(TR_VTELEMUNIT))
|
||||
#define OFS_VALARMFN (OFS_VALARM + sizeof(TR_VALARM))
|
||||
#define OFS_VTELPROTO (OFS_VALARMFN + sizeof(TR_VALARMFN))
|
||||
#define OFS_GPSFORMAT (OFS_VTELPROTO + sizeof(TR_VTELPROTO))
|
||||
#define OFS_VOLTSRC (OFS_GPSFORMAT + sizeof(TR_GPSFORMAT))
|
||||
#define OFS_VARIOSRC (OFS_VOLTSRC + sizeof(TR_VOLTSRC))
|
||||
#define OFS_VSCREEN (OFS_VARIOSRC + sizeof(TR_VARIOSRC))
|
||||
#define OFS_ENDTELEM (OFS_VSCREEN + sizeof(TR_VSCREEN))
|
||||
#define OFS_VTELEMUNIT (OFS_VTELEMCHNS + sizeof(TR_VTELEMCHNS))
|
||||
#define OFS_VALARM (OFS_VTELEMUNIT + sizeof(TR_VTELEMUNIT))
|
||||
#define OFS_VALARMFN (OFS_VALARM + sizeof(TR_VALARM))
|
||||
#define OFS_VTELPROTO (OFS_VALARMFN + sizeof(TR_VALARMFN))
|
||||
#define OFS_GPSFORMAT (OFS_VTELPROTO + sizeof(TR_VTELPROTO))
|
||||
#define OFS_VOLTSRC (OFS_GPSFORMAT + sizeof(TR_GPSFORMAT))
|
||||
#define OFS_VARIOSRC (OFS_VOLTSRC + sizeof(TR_VOLTSRC))
|
||||
#define OFS_VSCREEN (OFS_VARIOSRC + sizeof(TR_VARIOSRC))
|
||||
#define OFS_VTEMPLATES (OFS_VSCREEN + sizeof(TR_VSCREEN))
|
||||
#else
|
||||
#define OFS_ENDTELEM (OFS_VTELEMCHNS + sizeof(TR_VTELEMCHNS))
|
||||
#define OFS_VTEMPLATES (OFS_VTELEMCHNS + sizeof(TR_VTELEMCHNS))
|
||||
#endif
|
||||
#ifdef TEMPLATES
|
||||
#define OFS_VTEMPLATES (OFS_ENDTELEM)
|
||||
#define OFS_ENDTPLS (OFS_VTEMPLATES + sizeof(TR_VTEMPLATES))
|
||||
#if defined(TEMPLATES)
|
||||
#define OFS_VSWASHTYPE (OFS_VTEMPLATES + sizeof(TR_VTEMPLATES))
|
||||
#else
|
||||
#define OFS_ENDTPLS (OFS_ENDTELEM)
|
||||
#define OFS_VSWASHTYPE (OFS_VTEMPLATES)
|
||||
#endif
|
||||
#ifdef HELI
|
||||
#define OFS_VSWASHTYPE (OFS_ENDTPLS)
|
||||
#define OFS_ENDHELI (OFS_VSWASHTYPE + sizeof(TR_VSWASHTYPE))
|
||||
#if defined(HELI)
|
||||
#define OFS_VKEYS (OFS_VSWASHTYPE + sizeof(TR_VSWASHTYPE))
|
||||
#else
|
||||
#define OFS_ENDHELI (OFS_ENDTPLS)
|
||||
#define OFS_VKEYS (OFS_VSWASHTYPE)
|
||||
#endif
|
||||
#define OFS_VKEYS (OFS_ENDHELI)
|
||||
#define OFS_VSWITCHES (OFS_VKEYS + sizeof(TR_VKEYS))
|
||||
#define OFS_VSWITCHES_SHORT (OFS_VSWITCHES + sizeof(TR_VSWITCHES))
|
||||
#define OFS_VSRCRAW (OFS_VSWITCHES_SHORT + sizeof(TR_VSWITCHES_SHORT))
|
||||
#define OFS_VTMRMODES (OFS_VSRCRAW + sizeof(TR_VSRCRAW))
|
||||
#define OFS_VSWITCHES (OFS_VKEYS + sizeof(TR_VKEYS))
|
||||
#define OFS_VSWITCHES_SHORT (OFS_VSWITCHES + sizeof(TR_VSWITCHES))
|
||||
#define OFS_VSRCRAW (OFS_VSWITCHES_SHORT + sizeof(TR_VSWITCHES_SHORT))
|
||||
#define OFS_VTMRMODES (OFS_VSRCRAW + sizeof(TR_VSRCRAW))
|
||||
#define OFS_DATETIME (OFS_VTMRMODES + sizeof(TR_VTMRMODES))
|
||||
#if defined(PCBGRUVIN9X) || defined(CPUARM)
|
||||
#define OFS_DATETIME (OFS_VTMRMODES + sizeof(TR_VTMRMODES))
|
||||
#define OFS_VLCD (OFS_DATETIME + sizeof(TR_DATETIME))
|
||||
#else
|
||||
#define OFS_VLCD (OFS_DATETIME)
|
||||
#endif
|
||||
#if defined(CPUARM)
|
||||
#define OFS_VLCD (OFS_DATETIME + sizeof(TR_DATETIME))
|
||||
#define OFS_COUNTRYCODES (OFS_VLCD + sizeof(TR_VLCD))
|
||||
#else
|
||||
#define OFS_COUNTRYCODES (OFS_VLCD)
|
||||
#endif
|
||||
#if defined(PXX)
|
||||
#define OFS_SPARE (OFS_COUNTRYCODES + sizeof(TR_COUNTRYCODES))
|
||||
#else
|
||||
#define OFS_SPARE (OFS_COUNTRYCODES)
|
||||
#endif
|
||||
|
||||
#define STR_OFFON (STR_OPEN9X + OFS_OFFON)
|
||||
#define STR_MMMINV (STR_OPEN9X + OFS_MMMINV)
|
||||
#define STR_NCHANNELS (STR_OPEN9X + OFS_NCHANNELS)
|
||||
#define STR_OFFON (STR_OPEN9X + OFS_OFFON)
|
||||
#define STR_MMMINV (STR_OPEN9X + OFS_MMMINV)
|
||||
#define STR_NCHANNELS (STR_OPEN9X + OFS_NCHANNELS)
|
||||
#if !defined(GRAPHICS)
|
||||
#define STR_VBEEPLEN (STR_OPEN9X + OFS_VBEEPLEN)
|
||||
#define STR_VBEEPLEN (STR_OPEN9X + OFS_VBEEPLEN)
|
||||
#endif
|
||||
#define STR_VBEEPMODE (STR_OPEN9X + OFS_VBEEPMODE)
|
||||
#define STR_TRNMODE (STR_OPEN9X + OFS_TRNMODE)
|
||||
#define STR_TRNCHN (STR_OPEN9X + OFS_TRNCHN)
|
||||
#define STR_VTRIMINC (STR_OPEN9X + OFS_VTRIMINC)
|
||||
#define STR_RETA123 (STR_OPEN9X + OFS_RETA123)
|
||||
#define STR_VPROTOS (STR_OPEN9X + OFS_VPROTOS)
|
||||
#define STR_POSNEG (STR_OPEN9X + OFS_POSNEG)
|
||||
#define STR_VBLMODE (STR_OPEN9X + OFS_VBLMODE)
|
||||
#define STR_VCURVEFUNC (STR_OPEN9X + OFS_VCURVEFUNC)
|
||||
#define STR_VSIDE STR_VCURVEFUNC
|
||||
#define LEN_VSIDE LEN_VCURVEFUNC
|
||||
#define STR_VMLTPX (STR_OPEN9X + OFS_VMLTPX)
|
||||
#define STR_VMLTPX2 (STR_OPEN9X + OFS_VMLTPX2)
|
||||
#define STR_VMIXTRIMS (STR_OPEN9X + OFS_VMIXTRIMS)
|
||||
#define STR_VCSWFUNC (STR_OPEN9X + OFS_VCSWFUNC)
|
||||
#define STR_VFSWFUNC (STR_OPEN9X + OFS_VFSWFUNC)
|
||||
#define STR_VFSWRESET (STR_OPEN9X + OFS_VFSWRESET)
|
||||
#define STR_FUNCSOUNDS (STR_OPEN9X + OFS_FUNCSOUNDS)
|
||||
#define STR_VTELEMCHNS (STR_OPEN9X + OFS_VTELEMCHNS)
|
||||
#define STR_VBEEPMODE (STR_OPEN9X + OFS_VBEEPMODE)
|
||||
#define STR_TRNMODE (STR_OPEN9X + OFS_TRNMODE)
|
||||
#define STR_TRNCHN (STR_OPEN9X + OFS_TRNCHN)
|
||||
#define STR_VTRIMINC (STR_OPEN9X + OFS_VTRIMINC)
|
||||
#define STR_RETA123 (STR_OPEN9X + OFS_RETA123)
|
||||
#define STR_VPROTOS (STR_OPEN9X + OFS_VPROTOS)
|
||||
#define STR_POSNEG (STR_OPEN9X + OFS_POSNEG)
|
||||
#define STR_VBLMODE (STR_OPEN9X + OFS_VBLMODE)
|
||||
#define STR_VCURVEFUNC (STR_OPEN9X + OFS_VCURVEFUNC)
|
||||
#define STR_VSIDE STR_VCURVEFUNC
|
||||
#define LEN_VSIDE LEN_VCURVEFUNC
|
||||
#define STR_VMLTPX (STR_OPEN9X + OFS_VMLTPX)
|
||||
#define STR_VMLTPX2 (STR_OPEN9X + OFS_VMLTPX2)
|
||||
#define STR_VMIXTRIMS (STR_OPEN9X + OFS_VMIXTRIMS)
|
||||
#define STR_VCSWFUNC (STR_OPEN9X + OFS_VCSWFUNC)
|
||||
#define STR_VFSWFUNC (STR_OPEN9X + OFS_VFSWFUNC)
|
||||
#define STR_VFSWRESET (STR_OPEN9X + OFS_VFSWRESET)
|
||||
#define STR_FUNCSOUNDS (STR_OPEN9X + OFS_FUNCSOUNDS)
|
||||
#define STR_VTELEMCHNS (STR_OPEN9X + OFS_VTELEMCHNS)
|
||||
|
||||
#if defined(FRSKY) || defined(CPUARM)
|
||||
#define STR_VTELEMUNIT (STR_OPEN9X + OFS_VTELEMUNIT)
|
||||
#define STR_VALARM (STR_OPEN9X + OFS_VALARM)
|
||||
#define STR_VALARMFN (STR_OPEN9X + OFS_VALARMFN)
|
||||
#define STR_VTELPROTO (STR_OPEN9X + OFS_VTELPROTO)
|
||||
#define STR_GPSFORMAT (STR_OPEN9X + OFS_GPSFORMAT)
|
||||
#define STR_VOLTSRC (STR_OPEN9X + OFS_VOLTSRC)
|
||||
#define STR_VARIOSRC (STR_OPEN9X + OFS_VARIOSRC)
|
||||
#define STR_VSCREEN (STR_OPEN9X + OFS_VSCREEN)
|
||||
#define STR_TELEMCHNS (STR_OPEN9X + OFS_TELEMCHNS)
|
||||
#define STR_VTELEMUNIT (STR_OPEN9X + OFS_VTELEMUNIT)
|
||||
#define STR_VALARM (STR_OPEN9X + OFS_VALARM)
|
||||
#define STR_VALARMFN (STR_OPEN9X + OFS_VALARMFN)
|
||||
#define STR_VTELPROTO (STR_OPEN9X + OFS_VTELPROTO)
|
||||
#define STR_GPSFORMAT (STR_OPEN9X + OFS_GPSFORMAT)
|
||||
#define STR_VOLTSRC (STR_OPEN9X + OFS_VOLTSRC)
|
||||
#define STR_VARIOSRC (STR_OPEN9X + OFS_VARIOSRC)
|
||||
#define STR_VSCREEN (STR_OPEN9X + OFS_VSCREEN)
|
||||
#define STR_TELEMCHNS (STR_OPEN9X + OFS_TELEMCHNS)
|
||||
#endif
|
||||
|
||||
#ifdef TEMPLATES
|
||||
#define STR_VTEMPLATES (STR_OPEN9X + OFS_VTEMPLATES)
|
||||
#define STR_VTEMPLATES (STR_OPEN9X + OFS_VTEMPLATES)
|
||||
#endif
|
||||
|
||||
#ifdef HELI
|
||||
#define STR_VSWASHTYPE (STR_OPEN9X + OFS_VSWASHTYPE)
|
||||
#define STR_VSWASHTYPE (STR_OPEN9X + OFS_VSWASHTYPE)
|
||||
#endif
|
||||
|
||||
#define STR_VKEYS (STR_OPEN9X + OFS_VKEYS)
|
||||
#define STR_VSWITCHES (STR_OPEN9X + OFS_VSWITCHES)
|
||||
#define STR_VSWITCHES_SHORT (STR_OPEN9X + OFS_VSWITCHES_SHORT)
|
||||
#define STR_VSRCRAW (STR_OPEN9X + OFS_VSRCRAW)
|
||||
#define STR_VTMRMODES (STR_OPEN9X + OFS_VTMRMODES)
|
||||
#define STR_VKEYS (STR_OPEN9X + OFS_VKEYS)
|
||||
#define STR_VSWITCHES (STR_OPEN9X + OFS_VSWITCHES)
|
||||
#define STR_VSWITCHES_SHORT (STR_OPEN9X + OFS_VSWITCHES_SHORT)
|
||||
#define STR_VSRCRAW (STR_OPEN9X + OFS_VSRCRAW)
|
||||
#define STR_VTMRMODES (STR_OPEN9X + OFS_VTMRMODES)
|
||||
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
#define STR_VRENAVIG (STR_OPEN9X + OFS_VRENAVIG)
|
||||
#define STR_VRENAVIG (STR_OPEN9X + OFS_VRENAVIG)
|
||||
#endif
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
#define STR_VRENCODERS (STR_OPEN9X + OFS_VRENCODERS)
|
||||
#define STR_VRENCODERS (STR_OPEN9X + OFS_VRENCODERS)
|
||||
#endif
|
||||
|
||||
#if defined(PCBGRUVIN9X) || defined(CPUARM)
|
||||
#define STR_DATETIME (STR_OPEN9X + OFS_DATETIME)
|
||||
#define STR_DATETIME (STR_OPEN9X + OFS_DATETIME)
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM)
|
||||
#define STR_VLCD (STR_OPEN9X + OFS_VLCD)
|
||||
#define STR_VLCD (STR_OPEN9X + OFS_VLCD)
|
||||
#endif
|
||||
|
||||
#if defined(PXX)
|
||||
#define STR_COUNTRYCODES (STR_OPEN9X + OFS_COUNTRYCODES)
|
||||
#endif
|
||||
|
||||
// The 0-terminated-strings
|
||||
|
||||
@@ -289,7 +289,7 @@
|
||||
#define TR_VSWITCHES_SHORT "-012TREAG3456789"
|
||||
|
||||
#if defined(PCBSKY9X)
|
||||
#define TR_ROTARY_ENCODERS_VSRCRAW "DrG"
|
||||
#define TR_ROTARY_ENCODERS_VSRCRAW "Dreh"
|
||||
#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS > 2
|
||||
#define TR_ROTARY_ENCODERS_VSRCRAW "DGa ""DGb ""DGc ""DGd "
|
||||
#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS <= 2
|
||||
@@ -304,7 +304,7 @@
|
||||
#define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]"
|
||||
#endif
|
||||
|
||||
#define TR_VSRCRAW "---\0""StR\0""H\203R\0""Gas\0""QuR\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS_VSRCRAW "MAX\0""3POS" TR_CYC_VSRCRAW "TrmS" "TrmH" "TrmG" "TrmQ" TR_SW_VSRCRAW
|
||||
#define TR_VSRCRAW "---\0""Sei\0""H\203h\0""Gas\0""Que\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS_VSRCRAW "MAX\0" TR_CYC_VSRCRAW "TrmS" "TrmH" "TrmG" "TrmQ" TR_SW_VSRCRAW
|
||||
|
||||
#define LEN_VTMRMODES "\003"
|
||||
#define TR_VTMRMODES "AUS""ABS""GSs""GS%""GSt"
|
||||
@@ -314,6 +314,8 @@
|
||||
#define LEN_INDENT 1
|
||||
#define INDENT_WIDTH (FW/2)
|
||||
|
||||
#define TR_ENTER "[MENU]"
|
||||
|
||||
#if defined(PCBX9D)
|
||||
#define TR_POPUPS "[ENTER]\010[EXIT]"
|
||||
#else
|
||||
@@ -337,7 +339,7 @@
|
||||
#define TR_EXPONAME "Expo Name"
|
||||
#define TR_BITMAP "Model Image"
|
||||
#define TR_TIMER "Stoppuhr"
|
||||
#define TR_ELIMITS "Erw.Limit"
|
||||
#define TR_ELIMITS "FrSkyMod."
|
||||
#define TR_ETRIMS "Erw.Trims"
|
||||
#define TR_TRIMINC "Trim Schr."
|
||||
#define TR_TTRACE "Gasquelle"
|
||||
@@ -580,4 +582,4 @@
|
||||
#define TR_SET "SET"
|
||||
#define TR_FAILSAFESET "FAILSAFE SETTINGS"
|
||||
#define TR_RANGECHECK "R. Check"
|
||||
#define TR_BIND "BIND"
|
||||
#define TR_BIND "BIND"
|
||||
|
||||
@@ -68,6 +68,9 @@
|
||||
#define LEN_VLCD "\006"
|
||||
#define TR_VLCD "NormalOptrex"
|
||||
|
||||
#define LEN_COUNTRYCODES TR("\002", "\007")
|
||||
#define TR_COUNTRYCODES TR("US""JP""EU", "America""Japan\0 ""Europe\0")
|
||||
|
||||
#define LEN_VTRIMINC TR("\006","\013")
|
||||
#define TR_VTRIMINC TR("Expo ""ExFine""Fine ""Medium""Coarse","Exponential""Extra Fine ""Fine ""Medium ""Coarse ")
|
||||
|
||||
@@ -503,14 +506,14 @@
|
||||
#define TR_MENUTEMPLATES "TEMPLATES"
|
||||
#define TR_MENUSTAT "STATS"
|
||||
#define TR_MENUDEBUG "DEBUG"
|
||||
#define TR_RXNUM TR("RxNum","Receiver No.")
|
||||
#define TR_RXNUM TR("RxNum", INDENT"Receiver No.")
|
||||
#define TR_SYNCMENU "Sync "TR_ENTER
|
||||
#define TR_LIMIT INDENT"Limit"
|
||||
#define TR_MINRSSI "Min Rssi"
|
||||
#define TR_LATITUDE "Latitude"
|
||||
#define TR_LONGITUDE "Longitude"
|
||||
#define TR_GPSCOORD TR("GPS Coords","GPS coordinate format")
|
||||
#define TR_VARIO TR("Vario","Variometer")
|
||||
#define TR_GPSCOORD TR("GPS Coords", "GPS coordinate format")
|
||||
#define TR_VARIO TR("Vario", "Variometer")
|
||||
#define TR_SHUTDOWN "SHUTTING DOWN"
|
||||
#define TR_BATT_CALIB "Battery Calib"
|
||||
#define TR_CURRENT_CALIB "Current Calib"
|
||||
@@ -585,4 +588,4 @@
|
||||
#define TR_SET "SET"
|
||||
#define TR_FAILSAFESET "FAILSAFE SETTINGS"
|
||||
#define TR_RANGECHECK "R. Check"
|
||||
#define TR_BIND "BIND"
|
||||
#define TR_BIND "BIND"
|
||||
|
||||
@@ -65,7 +65,7 @@ void setupTrainerPulses()
|
||||
rest += int32_t(g_model.ppmFrameLength) * 1000;
|
||||
|
||||
for (uint32_t i = 0 ; i < p ; i += 1 ) {
|
||||
uint32_t pulse = limit((int16_t)-PPM_range, g_chans512[i], (int16_t)PPM_range) + 2*PPM_CH_CENTER(i);
|
||||
uint32_t pulse = limit((int16_t)-PPM_range, channelOutputs[i], (int16_t)PPM_range) + 2*PPM_CH_CENTER(i);
|
||||
rest -= pulse ;
|
||||
*ptr++ = pulse ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user