Flash saving

Momentary switches a little bit modified (depending of the function) in Function Switches
New trigger ONm in Function Switches
This commit is contained in:
bsongis
2012-07-19 19:06:55 +00:00
parent 6cc287b4eb
commit 4a8f0979fd
14 changed files with 235 additions and 195 deletions
+3
View File
@@ -503,6 +503,9 @@ void eeLoadModel(uint8_t id)
clearKeyEvents();
}
activeFunctions = 0;
activeFunctionSwitches = 0;
resetProto();
resetAll();
}
+4 -8
View File
@@ -273,17 +273,10 @@ bool EFile::exists(uint8_t i_fileId)
*/
void EFile::swap(uint8_t i_fileId1, uint8_t i_fileId2)
{
#if ((__GNUC__ > 4 || __GNUC__ == 4) && (__GNUC_MINOR__ > 7 || __GNUC_MINOR__ == 7))
DirEnt tmp;
__builtin_memcpy(&tmp, __builtin_assume_aligned(&eeFs.files[i_fileId1], sizeof(DirEnt)), sizeof(DirEnt));
__builtin_memcpy(&eeFs.files[i_fileId1], __builtin_assume_aligned(&eeFs.files[i_fileId2], sizeof(DirEnt)), sizeof(DirEnt));
__builtin_memcpy(&eeFs.files[i_fileId2], __builtin_assume_aligned(&tmp, sizeof(DirEnt)), sizeof(DirEnt));
#else
DirEnt tmp = eeFs.files[i_fileId1];
eeFs.files[i_fileId1] = eeFs.files[i_fileId2];
eeFs.files[i_fileId2] = tmp;
#endif
s_sync_write = true;
EeFsFlushDirEnt(i_fileId1);
EeFsFlushDirEnt(i_fileId2);
@@ -870,6 +863,9 @@ void eeLoadModel(uint8_t id)
clearKeyEvents();
}
activeFunctions = 0;
activeFunctionSwitches = 0;
resetProto();
resetAll();
+4 -4
View File
@@ -528,18 +528,18 @@ void putsSwitches(uint8_t x, uint8_t y, int8_t idx, uint8_t att)
{
if (idx == 0)
return lcd_putsiAtt(x, y, STR_MMMINV, 0, att);
if (~att & SWONLY) {
if (att & SWONOFF) {
if (idx == SWITCH_ON)
return lcd_putsiAtt(x, y, STR_OFFON, 1, att);
if (idx == SWITCH_OFF)
return lcd_putsiAtt(x, y, STR_OFFON, 0, att);
}
if (idx<0) {
if (idx < 0) {
lcd_vlineStip(x-2, y, 8, 0x5E/*'!'*/);
idx = -idx;
}
if (idx > MAX_SWITCH) {
idx -= ((att & SWONLY) ? MAX_SWITCH : MAX_SWITCH+1);
idx -= ((att & SWONOFF) ? MAX_SWITCH+1 : MAX_SWITCH);
if (~att & SWCONDENSED) lcd_putcAtt(x+3*FW, y, 'm', att);
}
lcd_putsiAtt(x, y, STR_VSWITCHES, idx-1, att);
@@ -580,7 +580,7 @@ void putsTmrMode(uint8_t x, uint8_t y, int8_t mode, uint8_t att)
return;
}
putsSwitches(x, y, mode-(TMR_VAROFS-1), att|SWONLY);
putsSwitches(x, y, mode-(TMR_VAROFS-1), att);
}
void putsTrimMode(uint8_t x, uint8_t y, uint8_t phase, uint8_t idx, uint8_t att)
+1 -1
View File
@@ -73,7 +73,7 @@
#define ROUND 0x08
/* switches flags */
#define SWONLY 0x10 /* means no ON OFF, only switches */
#define SWONOFF 0x10 /* means inlude ON OFF in switches */
#define SWCONDENSED 0x20 /* means that THRm will be displayed as THR */
/* telemetry flags */
+65 -65
View File
@@ -1105,13 +1105,13 @@ void menuProcCurveOne(uint8_t event)
if (s_curveChan >= MAX_CURVE5) {
points = 9;
crv = g_model.curves9[s_curveChan-MAX_CURVE5];
}
else {
points = 5;
crv = g_model.curves5[s_curveChan];
}
crv = curveaddress(s_curveChan);
switch(event) {
case EVT_ENTRY:
dfltCrv = 0;
@@ -2127,7 +2127,7 @@ void menuProcCurvesAll(uint8_t event)
if(yd>7) break;
if(!m) m = attr;
putsStrIdx(0, y, STR_CV, k+1, attr);
int8_t *crv = cv9 ? g_model.curves9[k-MAX_CURVE5] : g_model.curves5[k];
int8_t *crv = curveaddress(k);
for (uint8_t j = 0; j < (5); j++) {
lcd_outdezAtt( j*(3*FW+3) + 7*FW + 2, y, crv[j], 0);
}
@@ -2156,7 +2156,7 @@ enum CustomSwitchFields {
void menuProcCustomSwitchOne(uint8_t event)
{
TITLEP(STR_MENUCUSTOMSWITCH);
CustomSwData &cs = g_model.customSw[s_currIdx];
CustomSwData * cs = cswaddress(s_currIdx);
uint8_t sw = DSW_SW1+s_currIdx;
putsSwitches(14*FW, 0, sw, (getSwitch(sw, 0) ? BOLD : 0));
SIMPLE_SUBMENU_NOTITLE(CSW_FIELD_COUNT);
@@ -2167,16 +2167,16 @@ void menuProcCustomSwitchOne(uint8_t event)
uint8_t y = (k+2) * FH;
uint8_t i = k + s_pgOfs;
uint8_t attr = (sub==i ? (s_editMode>0 ? BLINK|INVERS : INVERS) : 0);
uint8_t cstate = CS_STATE(cs.func);
uint8_t cstate = CS_STATE(cs->func);
switch(i) {
case CSW_FIELD_FUNCTION:
lcd_putsLeft(y, STR_FUNC);
lcd_putsiAtt(CSW_2ND_COLUMN, y, STR_VCSWFUNC, cs.func, attr);
lcd_putsiAtt(CSW_2ND_COLUMN, y, STR_VCSWFUNC, cs->func, attr);
if (attr) {
CHECK_INCDEC_MODELVAR(event, cs.func, 0, CS_MAXF);
if (cstate != CS_STATE(cs.func)) {
cs.v1 = 0;
cs.v2 = 0;
CHECK_INCDEC_MODELVAR(event, cs->func, 0, CS_MAXF);
if (cstate != CS_STATE(cs->func)) {
cs->v1 = 0;
cs->v2 = 0;
}
}
break;
@@ -2185,14 +2185,14 @@ void menuProcCustomSwitchOne(uint8_t event)
lcd_putsLeft(y, STR_V1);
int8_t v1_min=0, v1_max=NUM_XCHNCSW;
if (cstate == CS_VBOOL) {
putsSwitches(CSW_2ND_COLUMN, y, cs.v1, attr);
putsSwitches(CSW_2ND_COLUMN, y, cs->v1, attr);
v1_min = SWITCH_OFF; v1_max = SWITCH_ON;
}
else {
putsChnRaw(CSW_2ND_COLUMN, y, cs.v1, attr);
putsChnRaw(CSW_2ND_COLUMN, y, cs->v1, attr);
}
if (attr) {
CHECK_INCDEC_MODELVAR(event, cs.v1, v1_min, v1_max);
CHECK_INCDEC_MODELVAR(event, cs->v1, v1_min, v1_max);
}
break;
}
@@ -2201,16 +2201,16 @@ void menuProcCustomSwitchOne(uint8_t event)
lcd_putsLeft(y, STR_V2);
int8_t v2_min=0, v2_max=NUM_XCHNCSW;
if (cstate == CS_VBOOL) {
putsSwitches(CSW_2ND_COLUMN, y, cs.v2, attr);
putsSwitches(CSW_2ND_COLUMN, y, cs->v2, attr);
v2_min = SWITCH_OFF; v2_max = SWITCH_ON;
}
else if (cstate == CS_VOFS) {
#if defined(FRSKY)
if (cs.v1 > NUM_XCHNCSW-NUM_TELEMETRY) {
putsTelemetryChannel(CSW_2ND_COLUMN, y, cs.v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), convertTelemValue(cs.v1 - (NUM_XCHNCSW-NUM_TELEMETRY), 128+cs.v2), attr|LEFT);
v2_min = -128; v2_max = maxTelemValue(cs.v1 - (NUM_XCHNCSW-NUM_TELEMETRY)) - 128;
if (cs.v2 > v2_max) {
cs.v2 = v2_max;
if (cs->v1 > NUM_XCHNCSW-NUM_TELEMETRY) {
putsTelemetryChannel(CSW_2ND_COLUMN, y, cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), convertTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY), 128+cs->v2), attr|LEFT);
v2_min = -128; v2_max = maxTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY)) - 128;
if (cs->v2 > v2_max) {
cs->v2 = v2_max;
eeDirty(EE_MODEL);
}
}
@@ -2218,32 +2218,32 @@ void menuProcCustomSwitchOne(uint8_t event)
#endif
{
v2_min = -125; v2_max = 125;
lcd_outdezAtt(CSW_2ND_COLUMN, y, cs.v2, attr|LEFT);
lcd_outdezAtt(CSW_2ND_COLUMN, y, cs->v2, attr|LEFT);
}
}
else {
putsChnRaw(CSW_2ND_COLUMN, y, cs.v2, attr);
putsChnRaw(CSW_2ND_COLUMN, y, cs->v2, attr);
}
if (attr) {
CHECK_INCDEC_MODELVAR(event, cs.v2, v2_min, v2_max);
CHECK_INCDEC_MODELVAR(event, cs->v2, v2_min, v2_max);
}
break;
}
case CSW_FIELD_DURATION:
lcd_putsLeft(y, STR_DURATION);
if (cs.duration > 0)
lcd_outdezAtt(CSW_2ND_COLUMN, y, 5*cs.duration, attr|PREC1|LEFT);
if (cs->duration > 0)
lcd_outdezAtt(CSW_2ND_COLUMN, y, 5*cs->duration, attr|PREC1|LEFT);
else
lcd_putsiAtt(CSW_2ND_COLUMN, y, STR_MMMINV, 0, attr);
if (attr) CHECK_INCDEC_MODELVAR(event, cs.duration, 0, MAX_CSW_DURATION);
if (attr) CHECK_INCDEC_MODELVAR(event, cs->duration, 0, MAX_CSW_DURATION);
break;
case CSW_FIELD_DELAY:
lcd_putsLeft(y, STR_DELAY);
if (cs.delay > 0)
lcd_outdezAtt(CSW_2ND_COLUMN, y, 5*cs.delay, attr|PREC1|LEFT);
if (cs->delay > 0)
lcd_outdezAtt(CSW_2ND_COLUMN, y, 5*cs->delay, attr|PREC1|LEFT);
else
lcd_putsiAtt(CSW_2ND_COLUMN, y, STR_MMMINV, 0, attr);
if (attr) CHECK_INCDEC_MODELVAR(event, cs.delay, 0, MAX_CSW_DELAY);
if (attr) CHECK_INCDEC_MODELVAR(event, cs->delay, 0, MAX_CSW_DELAY);
break;
}
}
@@ -2277,47 +2277,47 @@ void menuProcCustomSwitches(uint8_t event)
for (uint8_t i=0; i<7; i++) {
y = (i+1)*FH;
k = i+s_pgOfs;
CustomSwData &cs = g_model.customSw[k];
CustomSwData * cs = cswaddress(k);
// CSW name
uint8_t sw = DSW_SW1+k;
putsSwitches(0, y, sw, (sub==k ? INVERS : 0) | (getSwitch(sw, 0) ? BOLD : 0));
if (cs.func > 0) {
if (cs->func > 0) {
// CSW func
lcd_putsiAtt(4*FW - 2, y, STR_VCSWFUNC, cs.func, 0);
lcd_putsiAtt(4*FW - 2, y, STR_VCSWFUNC, cs->func, 0);
// CSW params
uint8_t cstate = CS_STATE(cs.func);
uint8_t cstate = CS_STATE(cs->func);
if (cstate == CS_VOFS)
{
putsChnRaw(12*FW-6, y, cs.v1, 0);
putsChnRaw(12*FW-6, y, cs->v1, 0);
#if defined(FRSKY)
if (cs.v1 > NUM_XCHNCSW-NUM_TELEMETRY) {
putsTelemetryChannel(19*FW, y, cs.v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), convertTelemValue(cs.v1 - (NUM_XCHNCSW-NUM_TELEMETRY), 128+cs.v2), 0);
int8_t v2_max = maxTelemValue(cs.v1 - (NUM_XCHNCSW-NUM_TELEMETRY)) - 128;
if (cs.v2 > v2_max) {
cs.v2 = v2_max;
if (cs->v1 > NUM_XCHNCSW-NUM_TELEMETRY) {
putsTelemetryChannel(19*FW, y, cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), convertTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY), 128+cs->v2), 0);
int8_t v2_max = maxTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY)) - 128;
if (cs->v2 > v2_max) {
cs->v2 = v2_max;
eeDirty(EE_MODEL);
}
}
else
#endif
{
lcd_outdezAtt(19*FW, y, cs.v2, 0);
lcd_outdezAtt(19*FW, y, cs->v2, 0);
}
}
else if (cstate == CS_VBOOL)
{
putsSwitches(12*FW-6, y, cs.v1, 0);
putsSwitches(17*FW, y, cs.v2, 0);
putsSwitches(12*FW-6, y, cs->v1, 0);
putsSwitches(17*FW, y, cs->v2, 0);
}
else // cstate == CS_COMP
{
putsChnRaw(12*FW-6, y, cs.v1, 0);
putsChnRaw(17*FW, y, cs.v2, 0);
putsChnRaw(12*FW-6, y, cs->v1, 0);
putsChnRaw(17*FW, y, cs->v2, 0);
}
}
}
@@ -2335,66 +2335,66 @@ void menuProcCustomSwitches(uint8_t event)
y = (i+1)*FH;
k = i+s_pgOfs;
uint8_t attr = (sub==k ? ((s_editMode>0) ? BLINK|INVERS : INVERS) : 0);
CustomSwData &cs = g_model.customSw[k];
CustomSwData * cs = cswaddress(k);
// CSW name
uint8_t sw = DSW_SW1+k;
putsSwitches(0, y, sw, getSwitch(sw, 0) ? BOLD : 0);
// CSW func
lcd_putsiAtt(4*FW - 2, y, STR_VCSWFUNC, cs.func, m_posHorz==0 ? attr : 0);
lcd_putsiAtt(4*FW - 2, y, STR_VCSWFUNC, cs->func, m_posHorz==0 ? attr : 0);
// CSW params
uint8_t cstate = CS_STATE(cs.func);
uint8_t cstate = CS_STATE(cs->func);
int8_t v1_min=0, v1_max=NUM_XCHNCSW, v2_min=0, v2_max=NUM_XCHNCSW;
if (cstate == CS_VOFS)
{
putsChnRaw(12*FW-6, y, cs.v1, (m_posHorz==1 ? attr : 0));
putsChnRaw(12*FW-6, y, cs->v1, (m_posHorz==1 ? attr : 0));
#if defined(FRSKY)
if (cs.v1 > NUM_XCHNCSW-NUM_TELEMETRY) {
putsTelemetryChannel(19*FW, y, cs.v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), convertTelemValue(cs.v1 - (NUM_XCHNCSW-NUM_TELEMETRY), 128+cs.v2), m_posHorz==2 ? attr : 0);
v2_min = -128; v2_max = maxTelemValue(cs.v1 - (NUM_XCHNCSW-NUM_TELEMETRY)) - 128;
if (cs.v2 > v2_max) {
cs.v2 = v2_max;
if (cs->v1 > NUM_XCHNCSW-NUM_TELEMETRY) {
putsTelemetryChannel(19*FW, y, cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY+1), convertTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY), 128+cs->v2), m_posHorz==2 ? attr : 0);
v2_min = -128; v2_max = maxTelemValue(cs->v1 - (NUM_XCHNCSW-NUM_TELEMETRY)) - 128;
if (cs->v2 > v2_max) {
cs->v2 = v2_max;
eeDirty(EE_MODEL);
}
}
else
#endif
{
lcd_outdezAtt(19*FW, y, cs.v2, m_posHorz==2 ? attr : 0);
lcd_outdezAtt(19*FW, y, cs->v2, m_posHorz==2 ? attr : 0);
v2_min = -125; v2_max = 125;
}
}
else if (cstate == CS_VBOOL)
{
putsSwitches(12*FW-6, y, cs.v1, m_posHorz==1 ? attr : 0);
putsSwitches(17*FW, y, cs.v2, m_posHorz==2 ? attr : 0);
putsSwitches(12*FW-6, y, cs->v1, m_posHorz==1 ? attr : 0);
putsSwitches(17*FW, y, cs->v2, m_posHorz==2 ? attr : 0);
v1_min = SWITCH_OFF; v1_max = SWITCH_ON;
v2_min = SWITCH_OFF; v2_max = SWITCH_ON;
}
else // cstate == CS_COMP
{
putsChnRaw(12*FW-6, y, cs.v1, m_posHorz==1 ? attr : 0);
putsChnRaw(17*FW, y, cs.v2, m_posHorz==2 ? attr : 0);
putsChnRaw(12*FW-6, y, cs->v1, m_posHorz==1 ? attr : 0);
putsChnRaw(17*FW, y, cs->v2, m_posHorz==2 ? attr : 0);
}
if ((s_editMode>0 || p1valdiff) && attr) {
switch (m_posHorz) {
case 0:
CHECK_INCDEC_MODELVAR(event, cs.func, 0,CS_MAXF);
if (cstate != CS_STATE(cs.func)) {
cs.v1 = 0;
cs.v2 = 0;
CHECK_INCDEC_MODELVAR(event, cs->func, 0,CS_MAXF);
if (cstate != CS_STATE(cs->func)) {
cs->v1 = 0;
cs->v2 = 0;
}
break;
case 1:
CHECK_INCDEC_MODELVAR(event, cs.v1, v1_min, v1_max);
CHECK_INCDEC_MODELVAR(event, cs->v1, v1_min, v1_max);
break;
case 2:
CHECK_INCDEC_MODELVAR(event, cs.v2, v2_min, v2_max);
CHECK_INCDEC_MODELVAR(event, cs->v2, v2_min, v2_max);
break;
}
}
@@ -2427,9 +2427,9 @@ void menuProcFunctionSwitches(uint8_t event)
uint8_t active = (attr && (s_editMode>0 || p1valdiff));
switch (j) {
case 0:
putsSwitches(3, y, sd->swtch, attr | ((abs(sd->swtch) <= MAX_SWITCH && getSwitch(sd->swtch, 0) && (sd->func >= 16 || (FSW_PARAM(sd) & 1))) ? BOLD : 0));
putsSwitches(3, y, sd->swtch, SWONOFF | attr | ((abs(sd->swtch) <= MAX_SWITCH && getSwitch(sd->swtch, 0) && (sd->func >= 16 || (FSW_PARAM(sd) & 1))) ? BOLD : 0));
if (active) {
CHECK_INCDEC_MODELSWITCH( event, sd->swtch, SWITCH_OFF-MAX_SWITCH, SWITCH_ON+MAX_SWITCH);
CHECK_INCDEC_MODELSWITCH( event, sd->swtch, SWITCH_OFF-MAX_SWITCH, SWITCH_ON+MAX_SWITCH+1);
}
break;
case 1:
+52 -34
View File
@@ -162,6 +162,16 @@ LimitData *limitaddress(uint8_t idx)
return &g_model.limitData[idx];
}
int8_t *curveaddress(uint8_t idx)
{
return (idx >= MAX_CURVE5 ? g_model.curves9[idx-MAX_CURVE5] : g_model.curves5[idx]);
}
CustomSwData *cswaddress(uint8_t idx)
{
return &g_model.customSw[idx];
}
void generalDefault()
{
memset(&g_eeGeneral, 0, sizeof(g_eeGeneral));
@@ -236,7 +246,7 @@ int16_t intpol(int16_t x, uint8_t idx) // -100, -75, -50, -25, 0 ,25 ,50, 75, 10
#define D9 (RESX * 2 / 8)
#define D5 (RESX * 2 / 4)
bool cv9 = idx >= MAX_CURVE5;
int8_t *crv = cv9 ? g_model.curves9[idx-MAX_CURVE5] : g_model.curves5[idx];
int8_t *crv = curveaddress(idx);
int16_t erg;
x+=RESXu;
@@ -553,10 +563,10 @@ bool __getSwitch(int8_t swtch)
}
else {
cs_idx -= MAX_PSWITCH+1;
volatile CustomSwData &cs = g_model.customSw[cs_idx];
if (cs.func == CS_OFF) return false;
CustomSwData * cs = cswaddress(cs_idx);
if (cs->func == CS_OFF) return false;
uint8_t s = CS_STATE(cs.func);
uint8_t s = CS_STATE(cs->func);
if (s == CS_VBOOL) {
GETSWITCH_RECURSIVE_TYPE mask = ((GETSWITCH_RECURSIVE_TYPE)1 << cs_idx);
if (s_last_switch_used & mask) {
@@ -564,9 +574,9 @@ bool __getSwitch(int8_t swtch)
}
else {
s_last_switch_used |= mask;
bool res1 = __getSwitch(cs.v1);
bool res2 = __getSwitch(cs.v2);
switch (cs.func) {
bool res1 = __getSwitch(cs->v1);
bool res2 = __getSwitch(cs->v2);
switch (cs->func) {
case CS_AND:
result = (res1 && res2);
break;
@@ -586,26 +596,26 @@ bool __getSwitch(int8_t swtch)
#endif
}
else {
int16_t x = getValue(cs.v1-1);
int16_t x = getValue(cs->v1-1);
int16_t y;
if (s == CS_VOFS) {
#if defined(FRSKY)
// Telemetry
if (cs.v1 > CSW_CHOUT_BASE+NUM_CHNOUT) {
y = convertTelemValue(cs.v1-(CSW_CHOUT_BASE+NUM_CHNOUT), 128+cs.v2);
uint8_t idx = cs.v1-CSW_CHOUT_BASE-NUM_CHNOUT-TELEM_ALT;
if (cs->v1 > CSW_CHOUT_BASE+NUM_CHNOUT) {
y = convertTelemValue(cs->v1-(CSW_CHOUT_BASE+NUM_CHNOUT), 128+cs->v2);
uint8_t idx = cs->v1-CSW_CHOUT_BASE-NUM_CHNOUT-TELEM_ALT;
if (idx < THLD_MAX) {
// Fill the threshold array
barsThresholds[idx] = 128 + cs.v2;
barsThresholds[idx] = 128 + cs->v2;
}
}
else
#endif
{
y = calc100toRESX(cs.v2);
y = calc100toRESX(cs->v2);
}
switch (cs.func) {
switch (cs->func) {
case CS_VPOS:
result = (x>y);
break;
@@ -622,9 +632,9 @@ bool __getSwitch(int8_t swtch)
}
}
else {
y = getValue(cs.v2-1);
y = getValue(cs->v2-1);
switch (cs.func) {
switch (cs->func) {
case CS_EQUAL:
result = (x==y);
break;
@@ -649,24 +659,24 @@ bool __getSwitch(int8_t swtch)
}
#if defined(PCBARM)
if (cs.delay) {
if (cs->delay) {
if (result) {
if (delays[cs_idx] > get_tmr10ms())
result = false;
}
else {
delays[cs_idx] = get_tmr10ms() + (cs.delay*50);
delays[cs_idx] = get_tmr10ms() + (cs->delay*50);
}
}
if (cs.duration) {
if (cs->duration) {
if (result) {
if (durations[cs_idx] < get_tmr10ms()) {
result = false;
if (cs.delay) delays[cs_idx] = get_tmr10ms() + (cs.delay*50);
if (cs->delay) delays[cs_idx] = get_tmr10ms() + (cs->delay*50);
}
}
else {
durations[cs_idx] = get_tmr10ms() + (cs.duration*50);
durations[cs_idx] = get_tmr10ms() + (cs->duration*50);
}
}
@@ -1596,15 +1606,8 @@ void testFunc()
}
#endif
#if defined(PCBARM)
#define MASK_FSW_TYPE uint32_t // current max = 32 function switches
#else
#define MASK_FSW_TYPE uint16_t // current max = 16 function switches
#endif
uint16_t activeFunctions = 0;
MASK_FSW_TYPE active_switches = 0;
MASK_FSW_TYPE activeFunctionSwitches = 0;
#if defined(PCBARM) || defined(SOMO)
void playValue(uint8_t idx)
@@ -1764,7 +1767,7 @@ void evalFunctions()
}
}
if (~active_switches & switch_mask) {
if (~activeFunctionSwitches & switch_mask) {
if (sd->func == FUNC_RESET) {
switch (FSW_PARAM(sd)) {
case 0:
@@ -1783,7 +1786,7 @@ void evalFunctions()
}
}
if ((!momentary) || (~active_switches & switch_mask)) {
if ((!momentary) || (~activeFunctionSwitches & switch_mask)) {
if (sd->func == FUNC_PLAY_SOUND) {
AUDIO_PLAY(AU_FRSKY_FIRST+FSW_PARAM(sd));
}
@@ -1835,11 +1838,26 @@ void evalFunctions()
#endif
}
newActiveFunctions |= function_mask;
active_switches |= switch_mask;
if (momentary) {
if (~activeFunctionSwitches & switch_mask) {
if (~activeFunctions & function_mask) {
newActiveFunctions |= function_mask;
}
}
else {
newActiveFunctions |= (activeFunctions & function_mask);
}
}
else {
newActiveFunctions |= function_mask;
}
activeFunctionSwitches |= switch_mask;
}
else {
active_switches &= (~switch_mask);
activeFunctionSwitches &= (~switch_mask);
if (momentary)
newActiveFunctions |= (activeFunctions & function_mask);
}
}
}
+9
View File
@@ -777,6 +777,8 @@ extern PhaseData *phaseaddress(uint8_t idx);
extern ExpoData *expoaddress(uint8_t idx);
extern MixData *mixaddress(uint8_t idx);
extern LimitData *limitaddress(uint8_t idx);
extern int8_t *curveaddress(uint8_t idx);
extern CustomSwData *cswaddress(uint8_t idx);
extern void deleteExpoMix(uint8_t expo, uint8_t idx);
@@ -809,6 +811,13 @@ inline bool isMixActive(uint8_t mix)
#define isMixActive(x) false
#endif
#if defined(PCBARM)
#define MASK_FSW_TYPE uint32_t // current max = 32 function switches
#else
#define MASK_FSW_TYPE uint16_t // current max = 16 function switches
#endif
extern MASK_FSW_TYPE activeFunctionSwitches;
extern uint16_t activeFunctions;
inline bool isFunctionActive(uint8_t func)
{
+85 -71
View File
@@ -53,49 +53,63 @@
#include "open9x.h"
MixData* setDest(uint8_t dch, bool clear=false)
MixData* setDest(uint8_t dch, uint8_t src, bool clear=false)
{
uint8_t i = 0;
while (i<MAX_MIXERS && g_model.mixData[i].srcRaw && g_model.mixData[i].destCh <= dch) {
if (clear && g_model.mixData[i].destCh == dch)
deleteExpoMix(0, i);
else
i++;
}
if(i==MAX_MIXERS) return &g_model.mixData[0];
uint8_t i = 0;
MixData * mix;
memmove(&g_model.mixData[i+1],&g_model.mixData[i],
(MAX_MIXERS-(i+1))*sizeof(MixData) );
memset(&g_model.mixData[i],0,sizeof(MixData));
g_model.mixData[i].destCh = dch;
return &g_model.mixData[i];
while (1) {
mix = mixaddress(i);
if (mix->srcRaw && mix->destCh <= dch) {
if (clear && mix->destCh == dch)
deleteExpoMix(0, i);
else {
if (++i==MAX_MIXERS) {
// TODO should return null pointer but needs to be tested then
mix = mixaddress(0);
break;
}
}
}
else {
break;
}
}
memmove(mix+1, mix, (MAX_MIXERS-(i+1))*sizeof(MixData) );
memset(mix,0,sizeof(MixData));
mix->destCh = dch;
mix->srcRaw = src;
mix->weight = 100;
return mix;
}
void clearMixes()
{
memset(g_model.mixData,0,sizeof(g_model.mixData)); //clear all mixes
STORE_MODELVARS;
memset(g_model.mixData, 0, sizeof(g_model.mixData)); //clear all mixes
STORE_MODELVARS;
}
void clearCurves()
{
memset(g_model.curves5,0,sizeof(g_model.curves5)); //clear all curves
memset(g_model.curves9,0,sizeof(g_model.curves9)); //clear all curves
memset(g_model.curves5, 0, sizeof(g_model.curves5)); //clear all curves
memset(g_model.curves9, 0, sizeof(g_model.curves9)); //clear all curves
}
void setCurve(uint8_t c, const pm_int8_t ar[])
{
if(c<MAX_CURVE5) //5 pt curve
for(uint8_t i=0; i<5; i++) g_model.curves5[c][i] = pgm_read_byte(&ar[i]);
else //9 pt curve
for(uint8_t i=0; i<9; i++) g_model.curves9[c-MAX_CURVE5][i] = pgm_read_byte(&ar[i]);
int8_t * cv = curveaddress(c);
for (uint8_t i=0; i<(c<MAX_CURVE5 ? 5 : 9); i++) {
cv[i] = pgm_read_byte(&ar[i]);
}
}
void setSwitch(uint8_t idx, uint8_t func, int8_t v1, int8_t v2)
{
g_model.customSw[idx-1].func = func;
g_model.customSw[idx-1].v1 = v1;
g_model.customSw[idx-1].v2 = v2;
CustomSwData *cs = cswaddress(idx-1);
cs->func = func;
cs->v1 = v1;
cs->v2 = v2;
}
const pm_int8_t heli_ar1[] PROGMEM = {-100, 20, 50, 70, 90};
@@ -106,7 +120,7 @@ const pm_int8_t heli_ar5[] PROGMEM = {-100, 0, 0, 0, 100};
void applyTemplate(uint8_t idx)
{
MixData *md = &g_model.mixData[0];
MixData *md;
//CC(STK) -> vSTK
//ICC(vSTK) -> STK
@@ -124,43 +138,43 @@ void applyTemplate(uint8_t idx)
// Simple 4-Ch
case TMPL_SIMPLE_4CH:
clearMixes();
md=setDest(ICC(STK_RUD)); md->srcRaw=MIXSRC_Rud; md->weight=100;
md=setDest(ICC(STK_ELE)); md->srcRaw=MIXSRC_Ele; md->weight=100;
md=setDest(ICC(STK_THR)); md->srcRaw=MIXSRC_Thr; md->weight=100;
md=setDest(ICC(STK_AIL)); md->srcRaw=MIXSRC_Ail; md->weight=100;
setDest(ICC(STK_RUD), MIXSRC_Rud);
setDest(ICC(STK_ELE), MIXSRC_Ele);
setDest(ICC(STK_THR), MIXSRC_Thr);
setDest(ICC(STK_AIL), MIXSRC_Ail);
break;
// T-Cut
case TMPL_THR_CUT:
md=setDest(ICC(STK_THR)); md->srcRaw=MIXSRC_MAX; md->weight=-100; md->swtch=DSW_THR; md->mltpx=MLTPX_REP;
md=setDest(ICC(STK_THR), MIXSRC_MAX); md->weight=-100; md->swtch=DSW_THR; md->mltpx=MLTPX_REP;
break;
// V-Tail
case TMPL_V_TAIL:
md=setDest(ICC(STK_RUD), true); md->srcRaw=MIXSRC_Rud; md->weight= 100;
md=setDest(ICC(STK_RUD)); md->srcRaw=MIXSRC_Ele; md->weight=-100;
md=setDest(ICC(STK_ELE), true); md->srcRaw=MIXSRC_Rud; md->weight= 100;
md=setDest(ICC(STK_ELE)); md->srcRaw=MIXSRC_Ele; md->weight= 100;
setDest(ICC(STK_RUD), MIXSRC_Rud, true);
md=setDest(ICC(STK_RUD), MIXSRC_Ele); md->weight=-100;
setDest(ICC(STK_ELE), MIXSRC_Rud, true);
setDest(ICC(STK_ELE), MIXSRC_Ele);
break;
// Elevon\\Delta
case TMPL_ELEVON_DELTA:
md=setDest(ICC(STK_ELE), true); md->srcRaw=MIXSRC_Ele; md->weight= 100;
md=setDest(ICC(STK_ELE)); md->srcRaw=MIXSRC_Ail; md->weight= 100;
md=setDest(ICC(STK_AIL), true); md->srcRaw=MIXSRC_Ele; md->weight= 100;
md=setDest(ICC(STK_AIL)); md->srcRaw=MIXSRC_Ail; md->weight=-100;
setDest(ICC(STK_ELE), MIXSRC_Ele, true);
setDest(ICC(STK_ELE), MIXSRC_Ail);
setDest(ICC(STK_AIL), MIXSRC_Ele, true);
md=setDest(ICC(STK_AIL), MIXSRC_Ail); md->weight=-100;
break;
// eCCPM
case TMPL_ECCPM:
md=setDest(ICC(STK_ELE), true); md->srcRaw=MIXSRC_Ele; md->weight= 72;
md=setDest(ICC(STK_ELE)); md->srcRaw=MIXSRC_Thr; md->weight= 55;
md=setDest(ICC(STK_AIL), true); md->srcRaw=MIXSRC_Ele; md->weight=-36;
md=setDest(ICC(STK_AIL)); md->srcRaw=MIXSRC_Ail; md->weight= 62;
md=setDest(ICC(STK_AIL)); md->srcRaw=MIXSRC_Thr; md->weight= 55;
md=setDest(5, true); md->srcRaw=MIXSRC_Ele; md->weight=-36;
md=setDest(5); md->srcRaw=MIXSRC_Ail; md->weight=-62;
md=setDest(5); md->srcRaw=MIXSRC_Thr; md->weight= 55;
md=setDest(ICC(STK_ELE), MIXSRC_Ele, true); md->weight= 72;
md=setDest(ICC(STK_ELE), MIXSRC_Thr); md->weight= 55;
md=setDest(ICC(STK_AIL), MIXSRC_Ele, true); md->weight=-36;
md=setDest(ICC(STK_AIL), MIXSRC_Ail); md->weight= 62;
md=setDest(ICC(STK_AIL), MIXSRC_Thr); md->weight= 55;
md=setDest(5, MIXSRC_Ele, true); md->weight=-36;
md=setDest(5, MIXSRC_Ail); md->weight=-62;
md=setDest(5, MIXSRC_Thr); md->weight= 55;
break;
// Heli Setup
@@ -169,34 +183,34 @@ void applyTemplate(uint8_t idx)
clearCurves();
//Set up Mixes
md=setDest(ICC(STK_AIL)); md->srcRaw=MIXSRC_CH9; md->weight= 50;
md=setDest(ICC(STK_AIL)); md->srcRaw=MIXSRC_CH10; md->weight=-100;
md=setDest(ICC(STK_AIL)); md->srcRaw=MIXSRC_CH11; md->weight= 100; md->carryTrim=TRIM_OFF;
md=setDest(ICC(STK_AIL), MIXSRC_CH9); md->weight= 50;
md=setDest(ICC(STK_AIL), MIXSRC_CH10); md->weight=-100;
md=setDest(ICC(STK_AIL), MIXSRC_CH11); md->carryTrim=TRIM_OFF;
md=setDest(ICC(STK_ELE)); md->srcRaw=MIXSRC_CH9; md->weight=-100;
md=setDest(ICC(STK_ELE)); md->srcRaw=MIXSRC_CH11; md->weight= 100; md->carryTrim=TRIM_OFF;
md=setDest(ICC(STK_ELE), MIXSRC_CH9); md->weight=-100;
md=setDest(ICC(STK_ELE), MIXSRC_CH11); md->carryTrim=TRIM_OFF;
md=setDest(ICC(STK_THR)); md->srcRaw=MIXSRC_Thr; md->weight= 100; md->swtch=DSW_ID0; md->curve=CV(1); md->carryTrim=TRIM_OFF;
md=setDest(ICC(STK_THR)); md->srcRaw=MIXSRC_Thr; md->weight= 100; md->swtch=DSW_ID1; md->curve=CV(2); md->carryTrim=TRIM_OFF;
md=setDest(ICC(STK_THR)); md->srcRaw=MIXSRC_Thr; md->weight= 110; md->swtch=DSW_ID2; md->curve=CV(2); md->carryTrim=TRIM_OFF;
md=setDest(ICC(STK_THR)); md->srcRaw=MIXSRC_MAX; md->weight=-125; md->swtch=DSW_THR; md->mltpx=MLTPX_REP; md->carryTrim=TRIM_OFF;
md=setDest(ICC(STK_THR), MIXSRC_Thr); md->swtch=DSW_ID0; md->curve=CV(1); md->carryTrim=TRIM_OFF;
md=setDest(ICC(STK_THR), MIXSRC_Thr); md->swtch=DSW_ID1; md->curve=CV(2); md->carryTrim=TRIM_OFF;
md=setDest(ICC(STK_THR), MIXSRC_Thr); md->weight= 110; md->swtch=DSW_ID2; md->curve=CV(2); md->carryTrim=TRIM_OFF;
md=setDest(ICC(STK_THR), MIXSRC_MAX); md->weight=-125; md->swtch=DSW_THR; md->mltpx=MLTPX_REP; md->carryTrim=TRIM_OFF;
md=setDest(ICC(STK_RUD)); md->srcRaw=MIXSRC_Rud; md->weight=100;
md=setDest(ICC(STK_RUD), MIXSRC_Rud);
md=setDest(4); md->srcRaw=MIXSRC_MAX; md->weight= 50; md->swtch=-DSW_GEA; md->carryTrim=TRIM_OFF;
md=setDest(4); md->srcRaw=MIXSRC_MAX; md->weight=-50; md->swtch= DSW_GEA; md->carryTrim=TRIM_OFF;
md=setDest(4); md->srcRaw=STK_P3; md->weight= 40; md->carryTrim=TRIM_OFF;
md=setDest(4, MIXSRC_MAX); md->weight= 50; md->swtch=-DSW_GEA; md->carryTrim=TRIM_OFF;
md=setDest(4, MIXSRC_MAX); md->weight=-50; md->swtch= DSW_GEA; md->carryTrim=TRIM_OFF;
md=setDest(4, STK_P3); md->weight= 40; md->carryTrim=TRIM_OFF;
md=setDest(5); md->srcRaw=MIXSRC_CH9; md->weight= -50;
md=setDest(5); md->srcRaw=MIXSRC_CH10; md->weight=-100;
md=setDest(5); md->srcRaw=MIXSRC_CH11; md->weight=-100; md->carryTrim=TRIM_OFF;
md=setDest(5, MIXSRC_CH9); md->weight= -50;
md=setDest(5, MIXSRC_CH10); md->weight=-100;
md=setDest(5, MIXSRC_CH11); md->weight=-100; md->carryTrim=TRIM_OFF;
md=setDest(8); md->srcRaw=MIXSRC_Ele; md->weight= 60;
md=setDest(9); md->srcRaw=MIXSRC_Ail; md->weight=-52;
md=setDest(10); md->srcRaw=MIXSRC_Thr; md->weight= 70; md->swtch=DSW_ID0; md->curve=CV(3); md->carryTrim=TRIM_OFF;
md=setDest(10); md->srcRaw=MIXSRC_Thr; md->weight= 70; md->swtch=DSW_ID1; md->curve=CV(4); md->carryTrim=TRIM_OFF;
md=setDest(10); md->srcRaw=MIXSRC_Thr; md->weight= 70; md->swtch=DSW_ID2; md->curve=CV(4); md->carryTrim=TRIM_OFF;
md=setDest(10); md->srcRaw=MIXSRC_Thr; md->weight=100; md->swtch=DSW_THR; md->curve=CV(5); md->carryTrim=TRIM_OFF; md->mltpx=MLTPX_REP;
md=setDest(8, MIXSRC_Ele); md->weight= 60;
md=setDest(9, MIXSRC_Ail); md->weight=-52;
md=setDest(10, MIXSRC_Thr); md->weight= 70; md->swtch=DSW_ID0; md->curve=CV(3); md->carryTrim=TRIM_OFF;
md=setDest(10, MIXSRC_Thr); md->weight= 70; md->swtch=DSW_ID1; md->curve=CV(4); md->carryTrim=TRIM_OFF;
md=setDest(10, MIXSRC_Thr); md->weight= 70; md->swtch=DSW_ID2; md->curve=CV(4); md->carryTrim=TRIM_OFF;
md=setDest(10, MIXSRC_Thr); md->swtch=DSW_THR; md->curve=CV(5); md->carryTrim=TRIM_OFF; md->mltpx=MLTPX_REP;
//Set up Curves
setCurve(CURVE5(1), heli_ar1);
@@ -208,8 +222,8 @@ void applyTemplate(uint8_t idx)
// Servo Test
case TMPL_SERVO_TEST:
md=setDest(15, true); md->srcRaw=MIXSRC_SW1; md->weight=110; md->mltpx=MLTPX_ADD; md->delayUp = 6; md->delayDown = 6; md->speedUp = 8; md->speedDown = 8;
setSwitch(1, CS_VNEG, CSW_CHOUT_BASE+16, 0);
md=setDest(15, MIXSRC_SW1, true); md->weight=110; md->mltpx=MLTPX_ADD; md->delayUp = 6; md->delayDown = 6; md->speedUp = 8; md->speedDown = 8;
setSwitch(1, CS_VNEG, CSW_CHOUT_BASE+16, 0);
break;
default:
+2 -2
View File
@@ -213,9 +213,9 @@
#define LEN_VSWITCHES "\003"
#if defined(PCBARM)
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC""CSD""CSE""CSF""CSG""CSH""CSI""CSJ""CSK""CSL""CSM""CSN""CSO""CSP""CSQ""CSR""CSS""CST""CSU""CSV""CSW"
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC""CSD""CSE""CSF""CSG""CSH""CSI""CSJ""CSK""CSL""CSM""CSN""CSO""CSP""CSQ""CSR""CSS""CST""CSU""CSV""CSW"" ON"
#else
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC"
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC"" ON"
#endif
#define LEN_VSRCRAW "\004"
+2 -2
View File
@@ -213,9 +213,9 @@
#define LEN_VSWITCHES "\003"
#if defined(PCBARM)
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""SW1""SW2""SW3""SW4""SW5""SW6""SW7""SW8""SW9""SWA""SWB""SWC""SWD""SWE""SWF""SWG""SWH""SWI""SWJ""SWK""SWL""SWM""SWN""SWO""SWP""SWQ""SWR""SWS""SWT""SWU""SWV""SWW"
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""SW1""SW2""SW3""SW4""SW5""SW6""SW7""SW8""SW9""SWA""SWB""SWC""SWD""SWE""SWF""SWG""SWH""SWI""SWJ""SWK""SWL""SWM""SWN""SWO""SWP""SWQ""SWR""SWS""SWT""SWU""SWV""SWW"" ON"
#else
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""SW1""SW2""SW3""SW4""SW5""SW6""SW7""SW8""SW9""SWA""SWB""SWC"
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""SW1""SW2""SW3""SW4""SW5""SW6""SW7""SW8""SW9""SWA""SWB""SWC"" ON"
#endif
#define LEN_VSRCRAW "\004"
+2 -2
View File
@@ -214,9 +214,9 @@
#define LEN_VSWITCHES "\003"
#if defined(PCBARM)
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC""CSD""CSE""CSF""CSG""CSH""CSI""CSJ""CSK""CSL""CSM""CSN""CSO""CSP""CSQ""CSR""CSS""CST""CSU""CSV""CSW"
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC""CSD""CSE""CSF""CSG""CSH""CSI""CSJ""CSK""CSL""CSM""CSN""CSO""CSP""CSQ""CSR""CSS""CST""CSU""CSV""CSW"" ON"
#else
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC"
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""CS1""CS2""CS3""CS4""CS5""CS6""CS7""CS8""CS9""CSA""CSB""CSC"" ON"
#endif
#define LEN_VSRCRAW "\004"
+2 -2
View File
@@ -211,9 +211,9 @@
#define LEN_VSWITCHES "\003"
#if defined(PCBARM)
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""SW1""SW2""SW3""SW4""SW5""SW6""SW7""SW8""SW9""SWA""SWB""SWC""SWD""SWE""SWF""SWG""SWH""SWI""SWJ""SWK""SWL""SWM""SWN""SWO""SWP""SWQ""SWR""SWS""SWT""SWU""SWV""SWW"
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""SW1""SW2""SW3""SW4""SW5""SW6""SW7""SW8""SW9""SWA""SWB""SWC""SWD""SWE""SWF""SWG""SWH""SWI""SWJ""SWK""SWL""SWM""SWN""SWO""SWP""SWQ""SWR""SWS""SWT""SWU""SWV""SWW"" ON"
#else
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""SW1""SW2""SW3""SW4""SW5""SW6""SW7""SW8""SW9""SWA""SWB""SWC"
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""SW1""SW2""SW3""SW4""SW5""SW6""SW7""SW8""SW9""SWA""SWB""SWC"" ON"
#endif
#define LEN_VSRCRAW "\004"
+2 -2
View File
@@ -213,9 +213,9 @@
#define LEN_VSWITCHES "\003"
#if defined(PCBARM)
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""SW1""SW2""SW3""SW4""SW5""SW6""SW7""SW8""SW9""SWA""SWB""SWC""SWD""SWE""SWF""SWG""SWH""SWI""SWJ""SWK""SWL""SWM""SWN""SWO""SWP""SWQ""SWR""SWS""SWT""SWU""SWV""SWW"
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""SW1""SW2""SW3""SW4""SW5""SW6""SW7""SW8""SW9""SWA""SWB""SWC""SWD""SWE""SWF""SWG""SWH""SWI""SWJ""SWK""SWL""SWM""SWN""SWO""SWP""SWQ""SWR""SWS""SWT""SWU""SWV""SWW"" ON"
#else
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""SW1""SW2""SW3""SW4""SW5""SW6""SW7""SW8""SW9""SWA""SWB""SWC"
#define TR_VSWITCHES "THR""RUD""ELE""ID0""ID1""ID2""AIL""GEA""TRN""SW1""SW2""SW3""SW4""SW5""SW6""SW7""SW8""SW9""SWA""SWB""SWC"" ON"
#endif
#define LEN_VSRCRAW "\004"
+2 -2
View File
@@ -211,9 +211,9 @@
#define LEN_VSWITCHES "\003"
#if defined(PCBARM)
#define TR_VSWITCHES "GAS""ROD""H\205J""ID0""ID1""ID2""SKE""LAN""TRN""BR1""BR2""BR3""BR4""BR5""BR6""BR7""BR8""BR9""BRA""BRB""BRC""BRD""BRE""BRF""BRG""BRH""BRI""BRJ""BRK""BRL""BRM""BRN""BRO""BRP""BRQ""BRR""BRS""BRT""BRU""BRV""BRW"
#define TR_VSWITCHES "GAS""ROD""H\205J""ID0""ID1""ID2""SKE""LAN""TRN""BR1""BR2""BR3""BR4""BR5""BR6""BR7""BR8""BR9""BRA""BRB""BRC""BRD""BRE""BRF""BRG""BRH""BRI""BRJ""BRK""BRL""BRM""BRN""BRO""BRP""BRQ""BRR""BRS""BRT""BRU""BRV""BRW"" ON"
#else
#define TR_VSWITCHES "GAS""ROD""H\205J""ID0""ID1""ID2""SKE""LAN""TRN""BR1""BR2""BR3""BR4""BR5""BR6""BR7""BR8""BR9""BRA""BRB""BRC"
#define TR_VSWITCHES "GAS""ROD""H\205J""ID0""ID1""ID2""SKE""LAN""TRN""BR1""BR2""BR3""BR4""BR5""BR6""BR7""BR8""BR9""BRA""BRB""BRC"" ON"
#endif
#define LEN_VSRCRAW "\004"