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:
@@ -503,6 +503,9 @@ void eeLoadModel(uint8_t id)
|
||||
clearKeyEvents();
|
||||
}
|
||||
|
||||
activeFunctions = 0;
|
||||
activeFunctionSwitches = 0;
|
||||
|
||||
resetProto();
|
||||
resetAll();
|
||||
}
|
||||
|
||||
+4
-8
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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:
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user