[all] Custom functions reworked
[all] Expo function rewritten and many other flash savings (thanks Andreas) [stock] LONG key press duration is longer [stock] Rotary Encoder bugs fixed [stock/gruvin9x] Play Both function added !!! TRANSLATIONS ALL NEED TO BE UPDATED BEFORE NEXT RELEASE
This commit is contained in:
+6
-1
@@ -613,7 +613,8 @@ void AudioQueue::play(uint8_t tFreq, uint8_t tLen, uint8_t tPause, uint8_t tFlag
|
||||
void AudioQueue::playFile(const char *filename, uint8_t flags, uint8_t id)
|
||||
{
|
||||
#if defined(SIMU)
|
||||
printf("playFile(\"%s\")\n", filename); fflush(stdout);
|
||||
printf("playFile(\"%s\", flags=%x, id=%d)\n", filename, flags, id);
|
||||
fflush(stdout);
|
||||
#else
|
||||
|
||||
if (!sdMounted())
|
||||
@@ -654,6 +655,10 @@ void AudioQueue::playFile(const char *filename, uint8_t flags, uint8_t id)
|
||||
|
||||
void AudioQueue::stopPlay(uint8_t id)
|
||||
{
|
||||
#if defined(SIMU)
|
||||
printf("stopPlay(id=%d)\n", id); fflush(stdout);
|
||||
#endif
|
||||
|
||||
// For the moment it's only needed to stop the background music
|
||||
if (backgroundContext.fragment.id == id) {
|
||||
memset(&backgroundContext.fragment, 0, sizeof(AudioFragment));
|
||||
|
||||
+2
-1
@@ -401,8 +401,9 @@ void eeLoadModel(uint8_t id)
|
||||
resumePulses();
|
||||
}
|
||||
|
||||
activeSwitches = 0;
|
||||
activeFnSwitches = 0;
|
||||
activeFunctions = 0;
|
||||
activeFunctionSwitches = 0;
|
||||
|
||||
for (uint8_t i=0; i<MAX_TIMERS; i++) {
|
||||
if (g_model.timers[i].remanent) {
|
||||
|
||||
+2
-1
@@ -898,8 +898,9 @@ void eeLoadModel(uint8_t id)
|
||||
resumePulses();
|
||||
}
|
||||
|
||||
activeSwitches = 0;
|
||||
activeFnSwitches = 0;
|
||||
activeFunctions = 0;
|
||||
activeFunctionSwitches = 0;
|
||||
|
||||
#if !defined(PCBSTD)
|
||||
for (uint8_t i=0; i<MAX_TIMERS; i++) {
|
||||
|
||||
@@ -68,7 +68,7 @@ PACK(typedef struct {
|
||||
int8_t points[NUM_POINTS];
|
||||
|
||||
CustomSwData customSw[NUM_CSW];
|
||||
FuncSwData funcSw[NUM_FSW];
|
||||
CustomFnData funcSw[NUM_CFN];
|
||||
SwashRingData swashR;
|
||||
PhaseData phaseData[MAX_PHASES];
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
#include <gtest/gtest.h>
|
||||
#include "open9x.h"
|
||||
|
||||
@@ -219,6 +220,8 @@ TEST(EEPROM, rm)
|
||||
EXPECT_EQ(sz, 0);
|
||||
}
|
||||
|
||||
#if defined(FRSKY)
|
||||
|
||||
extern void processFrskyPacket(uint8_t *packet);
|
||||
|
||||
TEST(FrSky, gpsNfuel)
|
||||
@@ -266,6 +269,8 @@ TEST(FrSky, dateNtime)
|
||||
EXPECT_EQ(frskyData.hub.sec, 50);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
TEST(getSwitch, undefCSW)
|
||||
{
|
||||
MODEL_RESET();
|
||||
@@ -425,6 +430,18 @@ TEST(Mixer, RecursiveAddChannel)
|
||||
EXPECT_EQ(chans[1], 0);
|
||||
}
|
||||
|
||||
TEST(Expo, AllValues)
|
||||
{
|
||||
// TODO whole range
|
||||
for (uint16_t x=0; x<100; x++) {
|
||||
for (uint16_t k=0; k<100; k++) {
|
||||
// TODO compare with the correct function instead of this one
|
||||
uint16_t ref = ((unsigned long)x*x*x/0x10000*k/(RESXul*RESXul/0x10000) + (RESKul-k)*x+RESKul/2)/RESKul;
|
||||
EXPECT_EQ(expou(x, k), ref);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
StartEepromThread(NULL);
|
||||
|
||||
+6
-5
@@ -64,11 +64,7 @@ uint8_t getEvent()
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM)
|
||||
#define KEY_LONG_DELAY 32
|
||||
#else
|
||||
#define KEY_LONG_DELAY 24
|
||||
#endif
|
||||
|
||||
Key keys[NUM_KEYS];
|
||||
void Key::input(bool val, EnumKeys enuk)
|
||||
@@ -161,11 +157,16 @@ void clearKeyEvents()
|
||||
CoTickDelay(100); // 200ms
|
||||
#endif
|
||||
|
||||
// loop until all keys are up
|
||||
|
||||
#if defined(SIMU)
|
||||
while (keyDown() && main_thread_running) sleep(1/*ms*/);
|
||||
#elif defined(PCBSTD) && defined(ROTARY_ENCODER_NAVIGATION) && !defined(TELEMETREZ)
|
||||
while (keyDown()) { wdt_reset(); rotencPoll(); }
|
||||
#else
|
||||
while (keyDown()) wdt_reset(); // loop until all keys are up
|
||||
while (keyDown()) wdt_reset();
|
||||
#endif
|
||||
|
||||
memclear(keys, sizeof(keys));
|
||||
putEvent(0);
|
||||
}
|
||||
|
||||
+7
-2
@@ -190,12 +190,17 @@ int16_t checkIncDec(uint8_t event, int16_t val, int16_t i_min, int16_t i_max, ui
|
||||
#if defined(CPUM64)
|
||||
int8_t checkIncDecModel(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max)
|
||||
{
|
||||
return checkIncDec(event,i_val,i_min,i_max,EE_MODEL);
|
||||
return checkIncDec(event, i_val, i_min, i_max, EE_MODEL);
|
||||
}
|
||||
|
||||
int8_t checkIncDecModelZero(uint8_t event, int8_t i_val, int8_t i_max)
|
||||
{
|
||||
return checkIncDecModel(event, i_val, 0, i_max);
|
||||
}
|
||||
|
||||
int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max)
|
||||
{
|
||||
return checkIncDec(event,i_val,i_min,i_max,EE_GENERAL);
|
||||
return checkIncDec(event, i_val, i_min, i_max, EE_GENERAL);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
+6
-1
@@ -125,15 +125,20 @@ int16_t checkIncDec(uint8_t event, int16_t i_pval, int16_t i_min, int16_t i_max,
|
||||
|
||||
#if defined(CPUM64)
|
||||
int8_t checkIncDecModel(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max);
|
||||
int8_t checkIncDecModelZero(uint8_t event, int8_t i_val, int8_t i_max);
|
||||
int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max);
|
||||
#else
|
||||
#define checkIncDecModel(event, i_val, i_min, i_max) checkIncDec(event, i_val, i_min, i_max, EE_MODEL)
|
||||
#define checkIncDecModelZero(event, i_val, i_max) checkIncDec(event, i_val, 0, i_max, EE_MODEL)
|
||||
#define checkIncDecGen(event, i_val, i_min, i_max) checkIncDec(event, i_val, i_min, i_max, EE_GENERAL)
|
||||
#endif
|
||||
|
||||
#define CHECK_INCDEC_MODELVAR(event, var, min, max) \
|
||||
var = checkIncDecModel(event,var,min,max)
|
||||
|
||||
#define CHECK_INCDEC_MODELVAR_ZERO(event, var, max) \
|
||||
var = checkIncDecModelZero(event,var,max)
|
||||
|
||||
#if defined(AUTOSWITCH)
|
||||
#define AUTOSWITCH_ENTER_LONG() (attr && event==EVT_KEY_LONG(KEY_ENTER))
|
||||
#define CHECK_INCDEC_MODELSWITCH(event, var, min, max) \
|
||||
@@ -272,7 +277,7 @@ void menuChannelsMonitor(uint8_t event);
|
||||
#endif
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBX9D)
|
||||
#define REPEAT_LAST_CURSOR_MOVE() putEvent(event)
|
||||
#define REPEAT_LAST_CURSOR_MOVE() { if (EVT_KEY_MASK(event) >= 0x0e) putEvent(event); else m_posHorz = 0; }
|
||||
#else
|
||||
#define REPEAT_LAST_CURSOR_MOVE() m_posHorz = 0;
|
||||
#endif
|
||||
|
||||
+106
-90
@@ -242,20 +242,17 @@ void menuModelSelect(uint8_t event)
|
||||
|
||||
uint8_t _event_ = (IS_ROTARY_BREAK(event) || IS_ROTARY_LONG(event) ? 0 : event);
|
||||
|
||||
if (s_copyMode && (event & 0x1f) == KEY_EXIT)
|
||||
if (s_copyMode && EVT_KEY_MASK(event) == KEY_EXIT)
|
||||
_event_ -= KEY_EXIT;
|
||||
|
||||
int8_t oldSub = m_posVert;
|
||||
|
||||
if (!check_submenu_simple(_event_, MAX_MODELS-1)) return;
|
||||
|
||||
if (s_editMode > 0) s_editMode = 0;
|
||||
|
||||
#if !defined(CPUARM)
|
||||
if (event
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
|| oldSub != m_posVert
|
||||
#endif
|
||||
) {
|
||||
if (event) {
|
||||
eeFlush(); // flush eeprom write
|
||||
#if defined(SDCARD)
|
||||
REFRESH(true);
|
||||
@@ -404,15 +401,15 @@ void menuModelSelect(uint8_t event)
|
||||
if (s_copySrcRow < 0 && s_copyMode==COPY_MODE) {
|
||||
s_copySrcRow = oldSub;
|
||||
// find a hole (in the first empty slot above / below)
|
||||
m_posVert = eeFindEmptyModel(s_copySrcRow, event==EVT_KEY_FIRST(KEY_MOVE_DOWN));
|
||||
if ((uint8_t)m_posVert == 0xff) {
|
||||
sub = eeFindEmptyModel(s_copySrcRow, event==EVT_KEY_FIRST(KEY_MOVE_DOWN));
|
||||
if (sub < 0) {
|
||||
// no free room for duplicating the model
|
||||
AUDIO_ERROR();
|
||||
m_posVert = oldSub;
|
||||
sub = oldSub;
|
||||
s_copyMode = 0;
|
||||
}
|
||||
next_ofs = 0;
|
||||
sub = m_posVert;
|
||||
m_posVert = sub;
|
||||
}
|
||||
s_copyTgtOfs = next_ofs;
|
||||
}
|
||||
@@ -735,12 +732,10 @@ void menuModelSetup(uint8_t event)
|
||||
{
|
||||
TimerData *timer = &g_model.timers[k-ITEM_MODEL_TIMER1];
|
||||
putsStrIdx(0*FW, y, STR_TIMER, k-ITEM_MODEL_TIMER1+1);
|
||||
putsTmrMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, (attr && m_posHorz==0) ? blink : 0);
|
||||
putsTime(MODEL_SETUP_2ND_COLUMN+5*FW-2, y, timer->start,
|
||||
(attr && m_posHorz==1 ? blink:0),
|
||||
(attr && m_posHorz==2 ? blink:0) );
|
||||
putsTmrMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, m_posHorz==0 ? attr : 0);
|
||||
putsTime(MODEL_SETUP_2ND_COLUMN+5*FW-2, y, timer->start, m_posHorz==1 ? attr : 0, m_posHorz==2 ? attr : 0);
|
||||
#if defined(CPUARM) || defined(PCBGRUVIN9X)
|
||||
lcd_putcAtt(MODEL_SETUP_2ND_COLUMN+10*FW-1, y, g_model.timers[k-ITEM_MODEL_TIMER1].remanent ? 'R' : '-', (attr && m_posHorz==3) ? blink : 0);
|
||||
lcd_putcAtt(MODEL_SETUP_2ND_COLUMN+10*FW-1, y, g_model.timers[k-ITEM_MODEL_TIMER1].remanent ? 'R' : '-', m_posHorz==3 ? attr : 0);
|
||||
#endif
|
||||
if (attr && (editMode>0 || p1valdiff)) {
|
||||
div_t qr = div(timer->start, 60);
|
||||
@@ -749,7 +744,7 @@ void menuModelSetup(uint8_t event)
|
||||
CHECK_INCDEC_MODELVAR(event, timer->mode, -2*(MAX_PSWITCH+NUM_CSW), TMR_VAROFS-1+2*(MAX_PSWITCH+NUM_CSW));
|
||||
break;
|
||||
case 1:
|
||||
CHECK_INCDEC_MODELVAR(event, qr.quot, 0, 59);
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, qr.quot, 59);
|
||||
timer->start = qr.rem + qr.quot*60;
|
||||
break;
|
||||
case 2:
|
||||
@@ -759,7 +754,7 @@ void menuModelSetup(uint8_t event)
|
||||
break;
|
||||
#if defined(CPUARM) || defined(PCBGRUVIN9X)
|
||||
case 3:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.timers[k-ITEM_MODEL_TIMER1].remanent, 0, 1);
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.timers[k-ITEM_MODEL_TIMER1].remanent, 1);
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
@@ -782,7 +777,7 @@ void menuModelSetup(uint8_t event)
|
||||
case ITEM_MODEL_THROTTLE_TRACE:
|
||||
{
|
||||
lcd_putsLeft(y, STR_TTRACE);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, g_model.thrTraceSrc, 0, NUM_POTS+NUM_CHNOUT);
|
||||
if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.thrTraceSrc, NUM_POTS+NUM_CHNOUT);
|
||||
uint8_t idx = g_model.thrTraceSrc + MIXSRC_Thr;
|
||||
if (idx > MIXSRC_Thr)
|
||||
idx += 1;
|
||||
@@ -871,18 +866,18 @@ void menuModelSetup(uint8_t event)
|
||||
lcd_putsLeft(y, NO_INDENT(STR_PROTO));
|
||||
#endif
|
||||
|
||||
lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_VPROTOS, protocol, (attr && m_posHorz==0 ? (editMode>0 ? BLINK|INVERS : INVERS):0));
|
||||
lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_VPROTOS, protocol, m_posHorz==0 ? attr : 0);
|
||||
|
||||
#if defined(PCBSKY9X)
|
||||
lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+4*FW+3, y, STR_CH, (attr && m_posHorz==1) ? blink : 0);
|
||||
lcd_outdezAtt(lcdLastPos, y, g_model.ppmSCH+1, LEFT | ((attr && m_posHorz==1) ? blink : 0));
|
||||
lcd_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 | ((attr && m_posHorz==2) ? blink : 0));
|
||||
lcd_outdezAtt(lcdLastPos + FW+1, y, g_model.ppmSCH+NUM_PORT1_CHANNELS, 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, (attr && m_posHorz==1) ? blink : 0);
|
||||
lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN+7*FW, y, STR_NCHANNELS, g_model.ppmNCH+2, m_posHorz==1 ? attr : 0);
|
||||
}
|
||||
else if (attr) {
|
||||
else if (attr && m_posHorz != 0 /* TODO avoid it on stock with another macro*/) {
|
||||
REPEAT_LAST_CURSOR_MOVE();
|
||||
}
|
||||
#endif
|
||||
@@ -894,11 +889,11 @@ void menuModelSetup(uint8_t event)
|
||||
)) {
|
||||
switch (m_posHorz) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.protocol, 0, PROTO_MAX-1);
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.protocol, PROTO_MAX-1);
|
||||
break;
|
||||
case 1:
|
||||
#if defined(PCBSKY9X)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.ppmSCH, 0, 32-8-(g_model.ppmNCH*2));
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.ppmSCH, 32-8-(g_model.ppmNCH*2));
|
||||
#else
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.ppmNCH, -2, 4);
|
||||
#endif
|
||||
@@ -919,14 +914,14 @@ void menuModelSetup(uint8_t event)
|
||||
case ITEM_MODEL_PPM2_PROTOCOL:
|
||||
lcd_putsLeft(y, PSTR("Port2"));
|
||||
lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_VPROTOS, 0, 0);
|
||||
lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+4*FW+3, y, STR_CH, (attr && m_posHorz==0) ? blink : 0);
|
||||
lcd_outdezAtt(lcdLastPos, y, g_model.ppm2SCH+1, LEFT | ((attr && m_posHorz==0) ? blink : 0));
|
||||
lcd_putsAtt(MODEL_SETUP_2ND_COLUMN+4*FW+3, y, STR_CH, m_posHorz==0 ? attr : 0);
|
||||
lcd_outdezAtt(lcdLastPos, y, g_model.ppm2SCH+1, LEFT | (m_posHorz==0 ? attr : 0));
|
||||
lcd_putc(lcdLastPos, y, '-');
|
||||
lcd_outdezAtt(lcdLastPos + FW+1, y, g_model.ppm2SCH+8+(g_model.ppm2NCH*2), LEFT | ((attr && m_posHorz==1) ? blink : 0));
|
||||
lcd_outdezAtt(lcdLastPos + FW+1, y, g_model.ppm2SCH+8+(g_model.ppm2NCH*2), LEFT | (m_posHorz==1 ? attr : 0));
|
||||
if (attr && (editMode>0 || p1valdiff)) {
|
||||
switch (m_posHorz) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.ppm2SCH, 0, 32-8-(g_model.ppm2NCH*2));
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.ppm2SCH, 32-8-(g_model.ppm2NCH*2));
|
||||
break;
|
||||
case 1:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.ppm2NCH, -2, min<int8_t>(4, (32-g_model.ppm2SCH)/2-4));
|
||||
@@ -940,10 +935,10 @@ void menuModelSetup(uint8_t event)
|
||||
if (IS_PPM_PROTOCOL(protocol)) {
|
||||
lcd_putsLeft( y, STR_PPMFRAME);
|
||||
lcd_puts(MODEL_SETUP_2ND_COLUMN+3*FW, y, STR_MS);
|
||||
lcd_outdezAtt(MODEL_SETUP_2ND_COLUMN, y, (int16_t)g_model.ppmFrameLength*5 + 225, ((attr && m_posHorz==0) ? (editMode>0 ? BLINK|INVERS : INVERS) : 0) | PREC1|LEFT);
|
||||
lcd_outdezAtt(MODEL_SETUP_2ND_COLUMN, y, (int16_t)g_model.ppmFrameLength*5 + 225, (m_posHorz==0 ? attr : 0) | PREC1|LEFT);
|
||||
lcd_putc(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, 'u');
|
||||
lcd_outdezAtt(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, (g_model.ppmDelay*50)+300, ((attr && m_posHorz==1) ? blink : 0));
|
||||
lcd_putcAtt(MODEL_SETUP_2ND_COLUMN+10*FW, y, g_model.pulsePol ? '+' : '-', (attr && m_posHorz==2) ? INVERS : 0);
|
||||
lcd_outdezAtt(MODEL_SETUP_2ND_COLUMN+8*FW+2, y, (g_model.ppmDelay*50)+300, m_posHorz==1 ? attr : 0);
|
||||
lcd_putcAtt(MODEL_SETUP_2ND_COLUMN+10*FW, y, g_model.pulsePol ? '+' : '-', m_posHorz==2 ? attr : 0);
|
||||
|
||||
if(attr && (editMode>0 || p1valdiff)) {
|
||||
switch (m_posHorz) {
|
||||
@@ -954,7 +949,7 @@ void menuModelSetup(uint8_t event)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.ppmDelay, -4, 10);
|
||||
break;
|
||||
case 2:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.pulsePol, 0, 1);
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.pulsePol, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -966,9 +961,9 @@ void menuModelSetup(uint8_t event)
|
||||
}
|
||||
|
||||
lcd_putsLeft(y, STR_RXNUM);
|
||||
lcd_outdezNAtt(MODEL_SETUP_2ND_COLUMN-3*FW, y, g_model.modelId, ((attr && m_posHorz==0) ? (editMode>0 ? BLINK|INVERS : INVERS) : 0) | LEADING0|LEFT, 2);
|
||||
lcd_outdezNAtt(MODEL_SETUP_2ND_COLUMN-3*FW, y, g_model.modelId, (m_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2);
|
||||
if (attr && (m_posHorz==0 && (editMode>0 || p1valdiff)))
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.modelId, 0, 99);
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.modelId, 99);
|
||||
|
||||
#if defined(PXX)
|
||||
if (protocol == PROTO_PXX) {
|
||||
@@ -1037,7 +1032,7 @@ uint8_t editDelay(const xcoord_t x, const uint8_t y, const uint8_t event, const
|
||||
{
|
||||
lcd_puts(x, y, str);
|
||||
lcd_outdezAtt(x+MIXES_2ND_COLUMN, y, (10/DELAY_STEP)*delay, attr|PREC1|LEFT);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, delay, 0, DELAY_MAX);
|
||||
if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, delay, DELAY_MAX);
|
||||
return delay;
|
||||
}
|
||||
#define EDIT_DELAY(x, y, event, attr, str, delay) editDelay(x, y, event, attr, str, delay)
|
||||
@@ -1046,7 +1041,7 @@ uint8_t editDelay(const uint8_t y, const uint8_t event, const uint8_t attr, cons
|
||||
{
|
||||
lcd_putsLeft(y, str);
|
||||
lcd_outdezAtt(MIXES_2ND_COLUMN, y, (10/DELAY_STEP)*delay, attr|PREC1|LEFT);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, delay, 0, DELAY_MAX);
|
||||
if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, delay, DELAY_MAX);
|
||||
return delay;
|
||||
}
|
||||
#define EDIT_DELAY(x, y, event, attr, str, delay) editDelay(y, event, attr, str, delay)
|
||||
@@ -1153,7 +1148,7 @@ void menuModelPhaseOne(uint8_t event)
|
||||
case ITEM_MODEL_PHASE_TRIMS:
|
||||
lcd_putsLeft(y, STR_TRIMS);
|
||||
for (uint8_t t=0; t<NUM_STICKS; t++) {
|
||||
putsTrimMode(MIXES_2ND_COLUMN+(t*FW), y, s_currIdx, t, (attr && m_posHorz==t) ? ((editMode>0) ? BLINK|INVERS : INVERS) : 0);
|
||||
putsTrimMode(MIXES_2ND_COLUMN+(t*FW), y, s_currIdx, t, m_posHorz==t ? attr : 0);
|
||||
if (attr && m_posHorz==t && ((editMode>0) || p1valdiff)) {
|
||||
int16_t v = getRawTrimValue(s_currIdx, t);
|
||||
if (v < TRIM_EXTENDED_MAX) v = TRIM_EXTENDED_MAX;
|
||||
@@ -1170,7 +1165,7 @@ void menuModelPhaseOne(uint8_t event)
|
||||
case ITEM_MODEL_PHASE_ROTARY_ENCODERS:
|
||||
lcd_putsLeft(y, STR_ROTARY_ENCODER);
|
||||
for (uint8_t t=0; t<NUM_ROTARY_ENCODERS; t++) {
|
||||
putsRotaryEncoderMode(MIXES_2ND_COLUMN+(t*FW), y, s_currIdx, t, (attr && m_posHorz==t) ? ((editMode>0) ? BLINK|INVERS : INVERS) : 0);
|
||||
putsRotaryEncoderMode(MIXES_2ND_COLUMN+(t*FW), y, s_currIdx, t, m_posHorz==t ? attr : 0);
|
||||
if (attr && m_posHorz==t && ((editMode>0) || p1valdiff)) {
|
||||
#if ROTARY_ENCODERS > 2
|
||||
int16_t v;
|
||||
@@ -1229,7 +1224,7 @@ void menuModelPhaseOne(uint8_t event)
|
||||
else {
|
||||
lcd_putsAtt(MIXES_2ND_COLUMN+2*FW, y, STR_OWN, m_posHorz==1 ? attr : 0);
|
||||
}
|
||||
if (attr && s_currIdx>0 && m_posHorz==1 && ((editMode>0) || p1valdiff)) {
|
||||
if (attr && s_currIdx>0 && m_posHorz==1 && (editMode>0 || p1valdiff)) {
|
||||
if (v < GVAR_MAX) v = GVAR_MAX;
|
||||
v = checkIncDec(event, v, GVAR_MAX, GVAR_MAX+MAX_PHASES-1, EE_MODEL);
|
||||
if (checkIncDec_Ret) {
|
||||
@@ -1382,7 +1377,7 @@ void menuModelHeli(uint8_t event)
|
||||
case ITEM_HELI_SWASHRING:
|
||||
lcd_putsLeft(y, STR_SWASHRING);
|
||||
lcd_outdezAtt(HELI_PARAM_OFS, y, g_model.swashR.value, LEFT|attr);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, g_model.swashR.value, 0, 100);
|
||||
if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.swashR.value, 100);
|
||||
break;
|
||||
|
||||
case ITEM_HELI_ELEDIRECTION:
|
||||
@@ -1843,7 +1838,7 @@ void menuModelExpoOne(uint8_t event)
|
||||
if (ed->curveMode!=MODE_EXPO || ed->curveParam==0) {
|
||||
putsCurve(EXPO_ONE_2ND_COLUMN, y, ed->curveParam, attr);
|
||||
if (attr) {
|
||||
CHECK_INCDEC_MODELVAR(event, ed->curveParam, 0, CURVE_BASE+MAX_CURVES-1);
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, ed->curveParam, CURVE_BASE+MAX_CURVES-1);
|
||||
if (ed->curveParam) ed->curveMode = MODE_CURVE;
|
||||
if (ed->curveParam>=CURVE_BASE && event==EVT_KEY_FIRST(KEY_MENU)) {
|
||||
s_curveChan = ed->curveParam - CURVE_BASE;
|
||||
@@ -2082,7 +2077,7 @@ void menuModelMixOne(uint8_t event)
|
||||
lcd_outdezAtt(COLUMN_X+MIXES_2ND_COLUMN, y, md2->mixWarn, attr|LEFT);
|
||||
else
|
||||
lcd_putsAtt(COLUMN_X+MIXES_2ND_COLUMN, y, STR_OFF, attr);
|
||||
if (attr) CHECK_INCDEC_MODELVAR( event, md2->mixWarn, 0, 3);
|
||||
if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, md2->mixWarn, 3);
|
||||
break;
|
||||
case MIX_FIELD_MLTPX:
|
||||
md2->mltpx = selectMenuItem(COLUMN_X+MIXES_2ND_COLUMN, y, STR_MULTPX, STR_VMLTPX, md2->mltpx, 0, 2, attr, event);
|
||||
@@ -2609,7 +2604,7 @@ void menuModelLimits(uint8_t event)
|
||||
case ITEM_LIMITS_SYMETRICAL:
|
||||
lcd_putcAtt(LCD_W-FW-MENUS_SCROLLBAR_WIDTH, y, ld->symetrical ? '=' : '^', attr);
|
||||
if (active) {
|
||||
CHECK_INCDEC_MODELVAR(event, ld->symetrical, 0, 1);
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, ld->symetrical, 1);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
@@ -2764,7 +2759,7 @@ void menuModelCustomSwitchOne(uint8_t event)
|
||||
lcd_putsLeft(y, STR_FUNC);
|
||||
lcd_putsiAtt(CSW_2ND_COLUMN, y, STR_VCSWFUNC, cs->func, attr);
|
||||
if (attr) {
|
||||
CHECK_INCDEC_MODELVAR(event, cs->func, 0, CS_MAXF);
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, cs->func, CS_MAXF);
|
||||
if (cstate != CS_STATE(cs->func)) {
|
||||
cs->v1 = 0;
|
||||
cs->v2 = 0;
|
||||
@@ -2835,7 +2830,7 @@ void menuModelCustomSwitchOne(uint8_t event)
|
||||
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_ZERO(event, cs->duration, MAX_CSW_DURATION);
|
||||
break;
|
||||
case CSW_FIELD_DELAY:
|
||||
lcd_putsLeft(y, STR_DELAY);
|
||||
@@ -2843,7 +2838,7 @@ void menuModelCustomSwitchOne(uint8_t event)
|
||||
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_ZERO(event, cs->delay, MAX_CSW_DELAY);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2981,7 +2976,7 @@ void menuModelCustomSwitches(uint8_t event)
|
||||
if ((s_editMode>0 || p1valdiff) && attr) {
|
||||
switch (m_posHorz) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR(event, cs->func, 0, CS_MAXF);
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, cs->func, CS_MAXF);
|
||||
if (cstate != CS_STATE(cs->func)) {
|
||||
cs->v1 = 0;
|
||||
cs->v2 = 0;
|
||||
@@ -3022,7 +3017,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
}
|
||||
#endif
|
||||
|
||||
MENU(STR_MENUCUSTOMFUNC, menuTabModel, e_CustomFunctions, NUM_FSW+1, {0, 3/*repeated*/});
|
||||
MENU(STR_MENUCUSTOMFUNC, menuTabModel, e_CustomFunctions, NUM_CFN+1, {0, 3/*repeated*/});
|
||||
|
||||
uint8_t y;
|
||||
uint8_t k = 0;
|
||||
@@ -3032,7 +3027,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
y = 1 + (i+1)*FH;
|
||||
k = i+s_pgOfs;
|
||||
if(k==NUM_CHNOUT) break;
|
||||
FuncSwData *sd = &g_model.funcSw[k];
|
||||
CustomFnData *sd = &g_model.funcSw[k];
|
||||
for (uint8_t j=0; j<4; j++) {
|
||||
uint8_t attr = ((sub==k && m_posHorz==j) ? ((s_editMode>0) ? BLINK|INVERS : INVERS) : 0);
|
||||
uint8_t active = (attr && (s_editMode>0 || p1valdiff));
|
||||
@@ -3042,7 +3037,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
if (sd->swtch > MAX_SWITCH+1) sd->swtch -= (MAX_SWITCH+1);
|
||||
if (sd->swtch < -MAX_SWITCH-1) sd->swtch += (MAX_SWITCH+1);
|
||||
}
|
||||
putsSwitches(3, y, sd->swtch, SWONOFF | attr | ((abs(sd->swtch) <= (MAX_SWITCH+1) && getSwitch(sd->swtch, 0) && (sd->func > FUNC_INSTANT_TRIM || sd->active)) ? BOLD : 0));
|
||||
putsSwitches(3, y, sd->swtch, SWONOFF | attr | ((activeFnSwitches & ((MASK_FUNC_TYPE)1 << k)) ? BOLD : 0));
|
||||
if (active || AUTOSWITCH_ENTER_LONG()) {
|
||||
#if defined(PCBX9D)
|
||||
CHECK_INCDEC_MODELSWITCH(event, sd->swtch, -127, +127);
|
||||
@@ -3086,8 +3081,8 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
}
|
||||
lcd_putsiAtt(MODEL_CUSTOM_FUNC_2ND_COLUMN, y, STR_VFSWFUNC, func_displayed, attr);
|
||||
if (active) {
|
||||
CHECK_INCDEC_MODELVAR(event, sd->func, 0, FUNC_MAX-1);
|
||||
if (checkIncDec_Ret) FSW_RESET_PARAM(sd);
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, sd->func, FUNC_MAX-1);
|
||||
if (checkIncDec_Ret) CFN_RESET_PARAM(sd);
|
||||
}
|
||||
}
|
||||
else if (attr) {
|
||||
@@ -3097,7 +3092,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
|
||||
case 2:
|
||||
if (sd->swtch) {
|
||||
int16_t val_displayed = FSW_PARAM(sd);
|
||||
int16_t val_displayed = CFN_PARAM(sd);
|
||||
int8_t val_min = 0;
|
||||
uint8_t val_max = 255;
|
||||
if (sd->func == FUNC_PLAY_SOUND) {
|
||||
@@ -3116,10 +3111,11 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
#endif
|
||||
#if defined(CPUARM) && defined(SDCARD)
|
||||
else if (sd->func == FUNC_PLAY_TRACK || sd->func == FUNC_BACKGND_MUSIC) {
|
||||
uint8_t x = (sd->func == FUNC_PLAY_TRACK ? MODEL_CUSTOM_FUNC_2ND_COLUMN + FW + FW*strlen(TR_PLAY_TRACK) : MODEL_CUSTOM_FUNC_3RD_COLUMN);
|
||||
if (ZLEN(sd->param))
|
||||
lcd_putsnAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, sd->param, sizeof(sd->param), attr);
|
||||
lcd_putsnAtt(x, y, sd->param, sizeof(sd->param), attr);
|
||||
else
|
||||
lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VCSWFUNC, 0, attr);
|
||||
lcd_putsiAtt(x, y, STR_VCSWFUNC, 0, attr);
|
||||
if (active && event==EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
s_editMode = 0;
|
||||
_event = 0;
|
||||
@@ -3132,7 +3128,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
}
|
||||
else if (sd->func == FUNC_PLAY_VALUE) {
|
||||
val_max = NUM_XCHNPLAY-1;
|
||||
putsChnRaw(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+1, attr);
|
||||
putsChnRaw(MODEL_CUSTOM_FUNC_3RD_COLUMN-FW-2, y, val_displayed+1, attr);
|
||||
}
|
||||
#endif
|
||||
#if defined(CPUARM)
|
||||
@@ -3144,14 +3140,14 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
else if (sd->func == FUNC_PLAY_TRACK) {
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+PROMPT_CUSTOM_BASE, attr|LEFT);
|
||||
}
|
||||
else if (sd->func == FUNC_PLAY_BOTH) {
|
||||
lcd_putcAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN-1, y, '|', attr);
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN+1, y, val_displayed+PROMPT_CUSTOM_BASE, attr);
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN+3, y, val_displayed+PROMPT_CUSTOM_BASE+1, attr|LEFT);
|
||||
}
|
||||
else if (sd->func == FUNC_PLAY_VALUE) {
|
||||
val_max = NUM_XCHNPLAY-1;
|
||||
putsChnRaw(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+1, attr);
|
||||
}
|
||||
else if (sd->func == FUNC_PLAY_BOTH) {
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+PROMPT_CUSTOM_BASE, attr|LEFT);
|
||||
lcd_putcAtt(lcdLastPos, y, '/', attr);
|
||||
lcd_outdezAtt(lcdLastPos+FW, y, val_displayed+PROMPT_CUSTOM_BASE+1, attr|LEFT);
|
||||
putsChnRaw(MODEL_CUSTOM_FUNC_3RD_COLUMN-2*FW-2, y, val_displayed+1, attr);
|
||||
}
|
||||
#endif
|
||||
#if defined(SDCARD)
|
||||
@@ -3167,10 +3163,10 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
#endif
|
||||
else if (sd->func == FUNC_RESET) {
|
||||
val_max = 3;
|
||||
lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VFSWRESET, FSW_PARAM(sd), attr);
|
||||
lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VFSWRESET, CFN_PARAM(sd), attr);
|
||||
}
|
||||
else if (sd->func <= FUNC_SAFETY_CH16) {
|
||||
val_displayed = (int8_t)FSW_PARAM(sd);
|
||||
val_displayed = (int8_t)CFN_PARAM(sd);
|
||||
val_min = -125; val_max = 125;
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT);
|
||||
}
|
||||
@@ -3190,7 +3186,7 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
}
|
||||
|
||||
if (active) {
|
||||
FSW_PARAM(sd) = checkIncDec(event, val_displayed, val_min, val_max, EE_MODEL);
|
||||
CFN_PARAM(sd) = checkIncDec(event, val_displayed, val_min, val_max, EE_MODEL);
|
||||
}
|
||||
}
|
||||
else if (attr) {
|
||||
@@ -3201,8 +3197,25 @@ void menuModelCustomFunctions(uint8_t event)
|
||||
case 3:
|
||||
if (sd->swtch && sd->func <= FUNC_INSTANT_TRIM) {
|
||||
menu_lcd_onoff(MODEL_CUSTOM_FUNC_4TH_COLUMN, y, sd->active, attr);
|
||||
if (active) CHECK_INCDEC_MODELVAR(event, sd->active, 0, 1);
|
||||
if (active) CHECK_INCDEC_MODELVAR_ZERO(event, sd->active, 1);
|
||||
}
|
||||
#if defined(VOICE)
|
||||
else if (sd->swtch && sd->func >= FUNC_PLAY_TRACK && sd->func <= FUNC_PLAY_VALUE) {
|
||||
#if defined(CPUARM)
|
||||
if (sd->active) {
|
||||
lcd_outdezAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN+2, y, sd->active*5, attr);
|
||||
lcd_putcAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN+2, y, '\'', attr);
|
||||
}
|
||||
else {
|
||||
lcd_putcAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN-1, y, '-', attr);
|
||||
}
|
||||
if (active) CHECK_INCDEC_MODELVAR_ZERO(event, sd->active, 12);
|
||||
#else
|
||||
lcd_putsiAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN-2*FWNUM, y, PSTR("\003\002\001-15'30'60'"), sd->active, attr);
|
||||
if (active) CHECK_INCDEC_MODELVAR_ZERO(event, sd->active, 3);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
else if (attr) {
|
||||
REPEAT_LAST_CURSOR_MOVE();
|
||||
}
|
||||
@@ -3327,8 +3340,8 @@ void menuModelTelemetry(uint8_t event)
|
||||
case ITEM_TELEMETRY_A1_RANGE:
|
||||
case ITEM_TELEMETRY_A2_RANGE:
|
||||
lcd_putsLeft(y, STR_RANGE);
|
||||
putsTelemetryChannel(TELEM_COL2, y, dest, 255-channel.offset, ((attr && m_posHorz==0) ? blink : 0)|NO_UNIT|LEFT);
|
||||
lcd_putsiAtt(lcdLastPos, y, STR_VTELEMUNIT, channel.type, (attr && m_posHorz==1 ? blink : 0));
|
||||
putsTelemetryChannel(TELEM_COL2, y, dest, 255-channel.offset, (m_posHorz==0 ? attr : 0)|NO_UNIT|LEFT);
|
||||
lcd_putsiAtt(lcdLastPos, y, STR_VTELEMUNIT, channel.type, m_posHorz==1 ? attr : 0);
|
||||
if (attr && (s_editMode>0 || p1valdiff)) {
|
||||
if (m_posHorz == 0) {
|
||||
uint16_t ratio = checkIncDec(event, channel.ratio, 0, 256, EE_MODEL);
|
||||
@@ -3345,7 +3358,7 @@ void menuModelTelemetry(uint8_t event)
|
||||
}
|
||||
}
|
||||
else {
|
||||
CHECK_INCDEC_MODELVAR(event, channel.type, 0, UNIT_A1A2_MAX);
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, channel.type, UNIT_A1A2_MAX);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -3364,9 +3377,9 @@ void menuModelTelemetry(uint8_t event)
|
||||
{
|
||||
uint8_t j = ((k==ITEM_TELEMETRY_A1_ALARM1 || k==ITEM_TELEMETRY_A2_ALARM1) ? 0 : 1);
|
||||
lcd_putsLeft(y, STR_ALARM);
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VALARM, ALARM_LEVEL(ch, j), (attr && m_posHorz==0) ? blink : 0);
|
||||
lcd_putsiAtt(TELEM_COL2+4*FW, y, STR_VALARMFN, ALARM_GREATER(ch, j), (attr && m_posHorz==1) ? blink : 0);
|
||||
putsTelemetryChannel(TELEM_COL2+6*FW, y, dest, channel.alarms_value[j], (attr && m_posHorz==2 ? blink : 0) | LEFT);
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VALARM, ALARM_LEVEL(ch, j), m_posHorz==0 ? attr : 0);
|
||||
lcd_putsiAtt(TELEM_COL2+4*FW, y, STR_VALARMFN, ALARM_GREATER(ch, j), m_posHorz==1 ? attr : 0);
|
||||
putsTelemetryChannel(TELEM_COL2+6*FW, y, dest, channel.alarms_value[j], (m_posHorz==2 ? attr : 0) | LEFT);
|
||||
|
||||
if (attr && (s_editMode>0 || p1valdiff)) {
|
||||
uint8_t t;
|
||||
@@ -3398,9 +3411,9 @@ void menuModelTelemetry(uint8_t event)
|
||||
case ITEM_TELEMETRY_RSSI_ALARM2: {
|
||||
uint8_t j = k-ITEM_TELEMETRY_RSSI_ALARM1;
|
||||
lcd_putsLeft(y, STR_ALARM);
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VALARM, ((2+j+g_model.frsky.rssiAlarms[j].level)%4), (attr && m_posHorz==0) ? blink : 0);
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VALARM, ((2+j+g_model.frsky.rssiAlarms[j].level)%4), m_posHorz==0 ? attr : 0);
|
||||
lcd_putc(TELEM_COL2+4*FW, y, '<');
|
||||
lcd_outdezNAtt(TELEM_COL2+6*FW, y, getRssiAlarmValue(j), LEFT|((attr && m_posHorz==1) ? blink : 0), 3);
|
||||
lcd_outdezNAtt(TELEM_COL2+6*FW, y, getRssiAlarmValue(j), LEFT|(m_posHorz==1 ? attr : 0), 3);
|
||||
|
||||
if (attr && (s_editMode>0 || p1valdiff)) {
|
||||
switch (m_posHorz) {
|
||||
@@ -3423,26 +3436,26 @@ void menuModelTelemetry(uint8_t event)
|
||||
case ITEM_TELEMETRY_USR_PROTO:
|
||||
lcd_putsLeft(y, STR_PROTO);
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VTELPROTO, g_model.frsky.usrProto, attr);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, g_model.frsky.usrProto, 0, USR_PROTO_LAST);
|
||||
if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.frsky.usrProto, USR_PROTO_LAST);
|
||||
break;
|
||||
|
||||
case ITEM_TELEMETRY_USR_BLADES:
|
||||
lcd_putsLeft(y, STR_BLADES);
|
||||
lcd_outdezAtt(TELEM_COL2+FWNUM, y, 2+g_model.frsky.blades, attr);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, g_model.frsky.blades, 0, 3);
|
||||
if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.frsky.blades, 3);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case ITEM_TELEMETRY_USR_VOLTAGE_SOURCE:
|
||||
lcd_putsLeft(y, STR_VOLTAGE);
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VOLTSRC, g_model.frsky.voltsSource+1, attr);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, g_model.frsky.voltsSource, 0, 3);
|
||||
if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.frsky.voltsSource, 3);
|
||||
break;
|
||||
|
||||
case ITEM_TELEMETRY_USR_CURRENT_SOURCE:
|
||||
lcd_putsLeft(y, STR_CURRENT);
|
||||
lcd_putsiAtt(TELEM_COL2, y, STR_VOLTSRC, g_model.frsky.currentSource, attr);
|
||||
if (attr) CHECK_INCDEC_MODELVAR(event, g_model.frsky.currentSource, 0, 3);
|
||||
if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, g_model.frsky.currentSource, 3);
|
||||
break;
|
||||
|
||||
#if defined(VARIO)
|
||||
@@ -3458,17 +3471,20 @@ void menuModelTelemetry(uint8_t event)
|
||||
|
||||
case ITEM_TELEMETRY_VARIO_RANGE:
|
||||
lcd_putsLeft(y, STR_LIMIT);
|
||||
lcd_outdezAtt(TELEM_COL2, y, -10+g_model.frsky.varioMin, ((attr && m_posHorz==0) ? blink : 0)|LEFT);
|
||||
lcd_outdezAtt(TELEM_COL2+7*FW-2, y, -5+g_model.frsky.varioCenterMin, ((attr && m_posHorz==1) ? blink : 0)|PREC1);
|
||||
lcd_outdezAtt(TELEM_COL2+10*FW, y, 5+g_model.frsky.varioCenterMax, ((attr && m_posHorz==2) ? blink : 0)|PREC1);
|
||||
lcd_outdezAtt(TELEM_COL2+13*FW+2, y, 10+g_model.frsky.varioMax, ((attr && m_posHorz==3) ? blink : 0));
|
||||
lcd_outdezAtt(TELEM_COL2, y, -10+g_model.frsky.varioMin, (m_posHorz==0 ? attr : 0)|LEFT);
|
||||
if (g_model.frsky.varioCenterMin == -16)
|
||||
lcd_putsAtt(TELEM_COL2+4*FW-2, y, STR_OFF, m_posHorz==1 ? attr : 0);
|
||||
else
|
||||
lcd_outdezAtt(TELEM_COL2+7*FW-2, y, -5+g_model.frsky.varioCenterMin, (m_posHorz==1 ? attr : 0)|PREC1);
|
||||
lcd_outdezAtt(TELEM_COL2+10*FW, y, 5+g_model.frsky.varioCenterMax, (m_posHorz==2 ? attr : 0)|PREC1);
|
||||
lcd_outdezAtt(TELEM_COL2+13*FW+2, y, 10+g_model.frsky.varioMax, (m_posHorz==3 ? attr : 0));
|
||||
if (attr && (s_editMode>0 || p1valdiff)) {
|
||||
switch (m_posHorz) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioMin, -7, 7);
|
||||
break;
|
||||
case 1:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMin, -15, 5+min<int8_t>(10, g_model.frsky.varioCenterMax+5));
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMin, -16, 5+min<int8_t>(10, g_model.frsky.varioCenterMax+5));
|
||||
break;
|
||||
case 2:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioCenterMax, -5+max<int8_t>(-10, g_model.frsky.varioCenterMin-5), +15);
|
||||
@@ -3540,10 +3556,10 @@ void menuModelTelemetry(uint8_t event)
|
||||
if (IS_BARS_SCREEN(screenIndex)) {
|
||||
FrSkyBarData & bar = g_model.frsky.screens[screenIndex].bars[lineIndex];
|
||||
uint8_t barSource = bar.source;
|
||||
lcd_putsiAtt(INDENT_WIDTH, y, STR_VTELEMCHNS, barSource, (attr && m_posHorz==0) ? blink : 0);
|
||||
lcd_putsiAtt(INDENT_WIDTH, y, STR_VTELEMCHNS, barSource, m_posHorz==0 ? attr : 0);
|
||||
if (barSource) {
|
||||
putsTelemetryChannel(56-3*FW, y, barSource-1, convertTelemValue(barSource, bar.barMin), (attr && m_posHorz==1 ? blink : 0) | LEFT);
|
||||
putsTelemetryChannel(14*FW-3, y, barSource-1, convertTelemValue(barSource, 255-bar.barMax), (attr && m_posHorz==2 ? blink : 0) | LEFT);
|
||||
putsTelemetryChannel(56-3*FW, y, barSource-1, convertTelemValue(barSource, bar.barMin), (m_posHorz==1 ? attr : 0) | LEFT);
|
||||
putsTelemetryChannel(14*FW-3, y, barSource-1, convertTelemValue(barSource, 255-bar.barMax), (m_posHorz==2 ? attr : 0) | LEFT);
|
||||
}
|
||||
else {
|
||||
if (attr) m_posHorz = 0;
|
||||
@@ -3569,9 +3585,9 @@ void menuModelTelemetry(uint8_t event)
|
||||
else {
|
||||
for (uint8_t c=0; c<2; c++) {
|
||||
uint8_t & value = g_model.frsky.screens[screenIndex].lines[lineIndex].sources[c];
|
||||
lcd_putsiAtt(c==0?INDENT_WIDTH:TELEM_COL2, y, STR_VTELEMCHNS, value, (attr && m_posHorz==c) ? blink : 0);
|
||||
lcd_putsiAtt(c==0?INDENT_WIDTH:TELEM_COL2, y, STR_VTELEMCHNS, value, m_posHorz==c ? attr : 0);
|
||||
if (attr && m_posHorz==c && (s_editMode>0 || p1valdiff)) {
|
||||
CHECK_INCDEC_MODELVAR(event, value, 0, g_model.frsky.usrProto ? ((lineIndex==3 && c==0) ? TELEM_STATUS_MAX : TELEM_DISPLAY_MAX) : TELEM_NOUSR_MAX);
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, value, g_model.frsky.usrProto ? ((lineIndex==3 && c==0) ? TELEM_STATUS_MAX : TELEM_DISPLAY_MAX) : TELEM_NOUSR_MAX);
|
||||
}
|
||||
}
|
||||
if (attr && m_posHorz == 2) {
|
||||
|
||||
+16
-16
@@ -381,24 +381,24 @@ enum Functions {
|
||||
};
|
||||
|
||||
#if defined(CPUARM)
|
||||
PACK(typedef struct t_FuncSwData { // Function Switches data
|
||||
PACK(typedef struct t_CustomFnData { // Function Switches data
|
||||
int8_t swtch; //input
|
||||
uint8_t func;
|
||||
char param[6];
|
||||
char param[6];
|
||||
uint8_t active;
|
||||
uint8_t spare;
|
||||
}) FuncSwData;
|
||||
#define FSW_PARAM(p) (*((uint32_t*)(p)->param))
|
||||
#define FSW_RESET_PARAM(p) memset(p->param, 0, sizeof(p->param))
|
||||
}) CustomFnData;
|
||||
#define CFN_PARAM(p) (*((uint32_t*)(p)->param))
|
||||
#define CFN_RESET_PARAM(p) memset(p->param, 0, sizeof(p->param))
|
||||
#else
|
||||
PACK(typedef struct t_FuncSwData { // Function Switches data
|
||||
int8_t swtch; //input
|
||||
uint8_t func:7;
|
||||
uint8_t active:1;
|
||||
PACK(typedef struct t_CustomFnData { // Function Switches data
|
||||
int8_t swtch; // input
|
||||
uint8_t func:6;
|
||||
uint8_t active:2;
|
||||
uint8_t param;
|
||||
}) FuncSwData;
|
||||
#define FSW_PARAM(p) ((p)->param)
|
||||
#define FSW_RESET_PARAM(p) FSW_PARAM(p) = 0
|
||||
}) CustomFnData;
|
||||
#define CFN_PARAM(p) ((p)->param)
|
||||
#define CFN_RESET_PARAM(p) CFN_PARAM(p) = 0
|
||||
#endif
|
||||
|
||||
enum TelemetryUnit {
|
||||
@@ -682,7 +682,7 @@ PACK(typedef struct t_PhaseData {
|
||||
#define MAX_MIXERS 64
|
||||
#define MAX_EXPOS 32
|
||||
#define NUM_CSW 32 // number of custom switches
|
||||
#define NUM_FSW 32 // number of functions assigned to switches
|
||||
#define NUM_CFN 32 // number of functions assigned to switches
|
||||
#elif defined(PCBGRUVIN9X) || defined(CPUM128)
|
||||
#define MAX_MODELS 30
|
||||
#define NUM_CHNOUT 16 // number of real output channels CH1-CH16
|
||||
@@ -690,7 +690,7 @@ PACK(typedef struct t_PhaseData {
|
||||
#define MAX_MIXERS 32
|
||||
#define MAX_EXPOS 14
|
||||
#define NUM_CSW 12 // number of custom switches
|
||||
#define NUM_FSW 16 // number of functions assigned to switches
|
||||
#define NUM_CFN 16 // number of functions assigned to switches
|
||||
#else
|
||||
#define MAX_MODELS 16
|
||||
#define NUM_CHNOUT 16 // number of real output channels CH1-CH16
|
||||
@@ -698,7 +698,7 @@ PACK(typedef struct t_PhaseData {
|
||||
#define MAX_MIXERS 32
|
||||
#define MAX_EXPOS 14
|
||||
#define NUM_CSW 12 // number of custom switches
|
||||
#define NUM_FSW 16 // number of functions assigned to switches
|
||||
#define NUM_CFN 16 // number of functions assigned to switches
|
||||
#endif
|
||||
|
||||
#define MAX_TIMERS 2
|
||||
@@ -881,7 +881,7 @@ PACK(typedef struct t_ModelData {
|
||||
int8_t points[NUM_POINTS];
|
||||
|
||||
CustomSwData customSw[NUM_CSW];
|
||||
FuncSwData funcSw[NUM_FSW];
|
||||
CustomFnData funcSw[NUM_CFN];
|
||||
SwashRingData swashR;
|
||||
PhaseData phaseData[MAX_PHASES];
|
||||
|
||||
|
||||
+169
-151
@@ -264,8 +264,8 @@ void per10ms()
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
if (IS_RE_NAVIGATION_ENABLE()) {
|
||||
static int16_t rePreviousValue;
|
||||
int16_t reNewValue = (g_rotenc[NAVIGATION_RE_IDX()] / ROTARY_ENCODER_GRANULARITY);
|
||||
static rotenc_t rePreviousValue;
|
||||
rotenc_t reNewValue = (g_rotenc[NAVIGATION_RE_IDX()] / ROTARY_ENCODER_GRANULARITY);
|
||||
int8_t scrollRE = reNewValue - rePreviousValue;
|
||||
if (scrollRE) {
|
||||
rePreviousValue = reNewValue;
|
||||
@@ -404,17 +404,17 @@ void modelDefault(uint8_t id)
|
||||
applyDefaultTemplate();
|
||||
}
|
||||
|
||||
int16_t intpol(int16_t x, uint8_t idx) // -100, -75, -50, -25, 0 ,25 ,50, 75, 100
|
||||
int16_t intpol(int16_t x, uint8_t idx) // -100, -75, -50, -25, 0, 25 ,50, 75, 100
|
||||
{
|
||||
CurveInfo crv = curveinfo(idx);
|
||||
int16_t erg = 0;
|
||||
|
||||
x+=RESXu;
|
||||
if (x < 0) {
|
||||
erg = (int16_t)crv.crv[0] * (RESX/4);
|
||||
erg = (int16_t)crv.crv[0];
|
||||
}
|
||||
else if (x >= (RESX*2)) {
|
||||
erg = (int16_t)crv.crv[crv.points-1] * (RESX/4);
|
||||
erg = (int16_t)crv.crv[crv.points-1];
|
||||
}
|
||||
else {
|
||||
uint16_t a=0, b=0;
|
||||
@@ -422,7 +422,7 @@ int16_t intpol(int16_t x, uint8_t idx) // -100, -75, -50, -25, 0 ,25 ,50, 75, 10
|
||||
if (crv.custom) {
|
||||
for (i=0; i<crv.points-1; i++) {
|
||||
a = b;
|
||||
b = (i==crv.points-2 ? 2*RESX : (100 * (RESX/4) / 25 + crv.crv[crv.points+i] * (RESX/4) / 25));
|
||||
b = (i==crv.points-2 ? 2*RESX : RESX + calc100toRESX(crv.crv[crv.points+i]));
|
||||
if ((uint16_t)x<=b) break;
|
||||
}
|
||||
}
|
||||
@@ -432,10 +432,10 @@ int16_t intpol(int16_t x, uint8_t idx) // -100, -75, -50, -25, 0 ,25 ,50, 75, 10
|
||||
a = i * d;
|
||||
b = a + d;
|
||||
}
|
||||
erg = (int16_t)crv.crv[i]*(RESX/4) + ((int32_t)(x-a) * (crv.crv[i+1]-crv.crv[i]) * (RESX/4)) / ((b-a));
|
||||
erg = (int16_t)crv.crv[i] + ((int32_t)(x-a) * (crv.crv[i+1]-crv.crv[i])) / (b-a);
|
||||
}
|
||||
|
||||
return erg / 25; // 100*D5/RESX;
|
||||
return calc100toRESX(erg);
|
||||
}
|
||||
|
||||
#if defined(CURVES)
|
||||
@@ -480,8 +480,19 @@ int16_t applyCurve(int16_t x, int8_t idx)
|
||||
|
||||
uint16_t expou(uint16_t x, uint16_t k)
|
||||
{
|
||||
// previous function was this one:
|
||||
// k*x*x*x + (1-k)*x
|
||||
return ((unsigned long)x*x*x/0x10000*k/(RESXul*RESXul/0x10000) + (RESKul-k)*x+RESKul/2)/RESKul;
|
||||
// return ((unsigned long)x*x*x/0x10000*k/(RESXul*RESXul/0x10000) + (RESKul-k)*x+RESKul/2)/RESKul;
|
||||
|
||||
uint32_t value = (uint32_t) x*x;
|
||||
value *= (uint32_t)k;
|
||||
value >>= 8;
|
||||
value *= (uint32_t)x;
|
||||
value >>= 12;
|
||||
value += (uint32_t)(100-k)*x+50;
|
||||
|
||||
// return divu100(value);
|
||||
return value/100;
|
||||
}
|
||||
|
||||
int16_t expo(int16_t x, int16_t k)
|
||||
@@ -1203,6 +1214,10 @@ void checkBacklight()
|
||||
{
|
||||
static uint8_t tmr10ms ;
|
||||
|
||||
#if defined(PCBSTD) && defined(ROTARY_ENCODER_NAVIGATION)
|
||||
rotencPoll();
|
||||
#endif
|
||||
|
||||
if (tmr10ms != g_blinkTmr10ms) {
|
||||
tmr10ms = g_blinkTmr10ms;
|
||||
uint16_t tsum = stickMoveValue();
|
||||
@@ -1222,10 +1237,6 @@ void checkBacklight()
|
||||
Voice.voice_process() ;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(PCBSTD) && defined(ROTARY_ENCODER_NAVIGATION)
|
||||
rotencPoll();
|
||||
#endif
|
||||
}
|
||||
|
||||
void backlightOn()
|
||||
@@ -1926,8 +1937,10 @@ void testFunc()
|
||||
}
|
||||
#endif
|
||||
|
||||
MASK_FUNC_TYPE activeFunctions = 0;
|
||||
MASK_FSW_TYPE activeFunctionSwitches = 0;
|
||||
MASK_FUNC_TYPE activeFunctions = 0;
|
||||
MASK_CFN_TYPE activeSwitches = 0;
|
||||
MASK_CFN_TYPE activeFnSwitches = 0;
|
||||
tmr10ms_t lastFunctionTime[NUM_CFN] = { 0 };
|
||||
|
||||
#if defined(VOICE)
|
||||
PLAY_FUNCTION(playValue, uint8_t idx)
|
||||
@@ -2048,16 +2061,25 @@ PLAY_FUNCTION(playValue, uint8_t idx)
|
||||
#if defined(CPUARM)
|
||||
uint8_t currentSpeakerVolume = 255;
|
||||
uint8_t requiredSpeakerVolume;
|
||||
uint8_t fnSwitchDuration[NUM_FSW] = { 0 };
|
||||
#define FSW_PRESSLONG_DURATION 100
|
||||
#define COMPLEX_SWITCH (momentary || shrt || lng)
|
||||
#else
|
||||
#define COMPLEX_SWITCH (momentary)
|
||||
uint8_t fnSwitchDuration[NUM_CFN] = { 0 };
|
||||
#define CFN_PRESSLONG_DURATION 100
|
||||
|
||||
inline void playCustomFunctionFile(CustomFnData *sd, uint8_t id)
|
||||
{
|
||||
char lfn[] = SOUNDS_PATH "/xxxxxx.wav";
|
||||
strncpy(lfn+sizeof(SOUNDS_PATH), sd->param, sizeof(sd->param));
|
||||
lfn[sizeof(SOUNDS_PATH)+sizeof(sd->param)] = '\0';
|
||||
strcat(lfn+sizeof(SOUNDS_PATH), SOUNDS_EXT);
|
||||
PLAY_FILE(lfn, sd->func==FUNC_BACKGND_MUSIC ? PLAY_BACKGROUND : 0, id);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void evalFunctions()
|
||||
{
|
||||
MASK_FUNC_TYPE newActiveFunctions = 0;
|
||||
MASK_FUNC_TYPE newActiveFunctions = 0;
|
||||
MASK_CFN_TYPE newActiveSwitches = 0;
|
||||
MASK_CFN_TYPE newActiveFnSwitches = 0;
|
||||
|
||||
#if defined(ROTARY_ENCODERS) && defined(GVARS)
|
||||
static rotenc_t rePreviousValues[ROTARY_ENCODERS];
|
||||
@@ -2071,25 +2093,39 @@ void evalFunctions()
|
||||
trimGvar[i] = -1;
|
||||
#endif
|
||||
|
||||
for (uint8_t i=0; i<NUM_FSW; i++) {
|
||||
FuncSwData *sd = &g_model.funcSw[i];
|
||||
for (uint8_t i=0; i<NUM_CFN; i++) {
|
||||
CustomFnData *sd = &g_model.funcSw[i];
|
||||
int8_t swtch = sd->swtch;
|
||||
if (swtch) {
|
||||
MASK_FUNC_TYPE function_mask = (sd->func >= FUNC_TRAINER ? ((MASK_FUNC_TYPE)1 << (sd->func-FUNC_TRAINER)) : 0);
|
||||
MASK_FSW_TYPE switch_mask = ((MASK_FSW_TYPE)1 << i);
|
||||
MASK_CFN_TYPE switch_mask = ((MASK_CFN_TYPE)1 << i);
|
||||
uint8_t momentary = 0;
|
||||
|
||||
#if defined(CPUARM)
|
||||
uint8_t shrt=0, lng=0;
|
||||
|
||||
#define MOMENTARY_START_TEST() ( (momentary && !(activeSwitches & switch_mask) && active) || \
|
||||
(shortPress && !active && fnSwitchDuration[i]>0 && fnSwitchDuration[i]<CFN_PRESSLONG_DURATION) || \
|
||||
(longPress && active && fnSwitchDuration[i]>=CFN_PRESSLONG_DURATION) )
|
||||
|
||||
uint8_t shortPress=0, longPress=0;
|
||||
if (swtch > MAX_SWITCH+1+MAX_SWITCH+1+MAX_PSWITCH) {
|
||||
lng = 1;
|
||||
longPress = 1;
|
||||
swtch -= MAX_SWITCH+1+MAX_SWITCH+1+MAX_PSWITCH;
|
||||
}
|
||||
else if (swtch > MAX_SWITCH+1+MAX_SWITCH+1) {
|
||||
shrt = 1;
|
||||
shortPress = 1;
|
||||
swtch -= MAX_SWITCH+1+MAX_SWITCH+1;
|
||||
}
|
||||
else
|
||||
|
||||
#else
|
||||
|
||||
#define shortPress 0
|
||||
#define longPress 0
|
||||
#define MOMENTARY_START_TEST() (!(activeSwitches & switch_mask) && active)
|
||||
|
||||
#endif
|
||||
|
||||
if (swtch > MAX_SWITCH+1) {
|
||||
momentary = 1;
|
||||
swtch -= MAX_SWITCH+1;
|
||||
@@ -2098,26 +2134,54 @@ void evalFunctions()
|
||||
momentary = 1;
|
||||
swtch += MAX_SWITCH+1;
|
||||
}
|
||||
|
||||
bool active = getSwitch(swtch, 0);
|
||||
if (active) newActiveSwitches |= switch_mask;
|
||||
if (momentary || longPress || shortPress) {
|
||||
|
||||
#if defined(CPUARM)
|
||||
bool sw;
|
||||
if ((sw=getSwitch(swtch, 0)) || (shrt&&fnSwitchDuration[i]>0&&fnSwitchDuration[i]<FSW_PRESSLONG_DURATION) || (lng&&fnSwitchDuration[i]>=(uint8_t)FSW_PRESSLONG_DURATION)) {
|
||||
if (shrt || lng) {
|
||||
if (sw) {
|
||||
bool swState = active;
|
||||
#endif
|
||||
|
||||
if (MOMENTARY_START_TEST()) {
|
||||
|
||||
active = !(activeFnSwitches & switch_mask);
|
||||
#if !defined(CPUARM)
|
||||
if (sd->func == FUNC_PLAY_BOTH && !active) {
|
||||
momentary = 1;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
momentary = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
active = (activeFnSwitches & switch_mask);
|
||||
momentary = 0;
|
||||
}
|
||||
#if defined(CPUARM)
|
||||
if (shortPress || longPress) {
|
||||
if (swState) {
|
||||
if (fnSwitchDuration[i] < 255)
|
||||
fnSwitchDuration[i]++;
|
||||
newActiveFunctions |= (activeFunctions & function_mask);
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
fnSwitchDuration[i] = 0;
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (getSwitch(swtch, 0)) {
|
||||
#endif
|
||||
}
|
||||
#if !defined(CPUARM)
|
||||
else if (sd->func == FUNC_PLAY_BOTH) {
|
||||
momentary = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (active || momentary) {
|
||||
if (sd->active) {
|
||||
if (sd->func < FUNC_TRAINER) {
|
||||
safetyCh[sd->func] = FSW_PARAM(sd);
|
||||
safetyCh[sd->func] = CFN_PARAM(sd);
|
||||
}
|
||||
|
||||
if (!(activeFunctions & function_mask)) {
|
||||
@@ -2133,175 +2197,129 @@ void evalFunctions()
|
||||
}
|
||||
else if (sd->func <= FUNC_INSTANT_TRIM) {
|
||||
function_mask = 0;
|
||||
switch_mask = 0;
|
||||
}
|
||||
|
||||
#if defined(SDCARD)
|
||||
if (sd->func == FUNC_LOGS) {
|
||||
logDelay = FSW_PARAM(sd);
|
||||
logDelay = CFN_PARAM(sd);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!(activeFunctionSwitches & switch_mask)) {
|
||||
if (sd->func == FUNC_RESET) {
|
||||
switch (FSW_PARAM(sd)) {
|
||||
case 0:
|
||||
case 1:
|
||||
resetTimer(FSW_PARAM(sd));
|
||||
break;
|
||||
case 2:
|
||||
resetAll();
|
||||
break;
|
||||
if (sd->func == FUNC_RESET) {
|
||||
switch (CFN_PARAM(sd)) {
|
||||
case 0:
|
||||
case 1:
|
||||
resetTimer(CFN_PARAM(sd));
|
||||
break;
|
||||
case 2:
|
||||
resetAll();
|
||||
break;
|
||||
#if defined(FRSKY)
|
||||
case 3:
|
||||
resetTelemetry();
|
||||
break;
|
||||
case 3:
|
||||
resetTelemetry();
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(CPUARM) && defined(SDCARD)
|
||||
if ((shrt || lng) && (activeFunctions & function_mask)) {
|
||||
if (sd->func == FUNC_BACKGND_MUSIC) {
|
||||
STOP_PLAY(i+1);
|
||||
}
|
||||
if (sd->func == FUNC_PLAY_SOUND) {
|
||||
AUDIO_PLAY(AU_FRSKY_FIRST+CFN_PARAM(sd));
|
||||
}
|
||||
else
|
||||
#endif
|
||||
|
||||
if (!COMPLEX_SWITCH || !(activeFunctionSwitches & switch_mask)) {
|
||||
if (sd->func == FUNC_PLAY_SOUND) {
|
||||
AUDIO_PLAY(AU_FRSKY_FIRST+FSW_PARAM(sd));
|
||||
}
|
||||
|
||||
#if defined(HAPTIC)
|
||||
if (sd->func == FUNC_HAPTIC) {
|
||||
haptic.event(AU_FRSKY_LAST+FSW_PARAM(sd));
|
||||
}
|
||||
if (sd->func == FUNC_HAPTIC) {
|
||||
haptic.event(AU_FRSKY_LAST+CFN_PARAM(sd));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM) && defined(SDCARD)
|
||||
else if (sd->func == FUNC_PLAY_TRACK || sd->func == FUNC_BACKGND_MUSIC) {
|
||||
if (IS_PLAYING(i+1)) {
|
||||
switch_mask = 0;
|
||||
}
|
||||
else {
|
||||
char lfn[] = SOUNDS_PATH "/xxxxxx.wav";
|
||||
strncpy(lfn+sizeof(SOUNDS_PATH), sd->param, sizeof(sd->param));
|
||||
lfn[sizeof(SOUNDS_PATH)+sizeof(sd->param)] = '\0';
|
||||
strcat(lfn+sizeof(SOUNDS_PATH), SOUNDS_EXT);
|
||||
PLAY_FILE(lfn, sd->func==FUNC_BACKGND_MUSIC ? PLAY_BACKGROUND : 0, i+1);
|
||||
else if (sd->func == FUNC_PLAY_TRACK || sd->func == FUNC_PLAY_VALUE) {
|
||||
tmr10ms_t tmr10ms = get_tmr10ms();
|
||||
uint8_t repeatParam = sd->active;
|
||||
if (!lastFunctionTime[i] || (repeatParam && (signed)(tmr10ms-lastFunctionTime[i])>=500*repeatParam)) {
|
||||
if (!IS_PLAYING(i+1)) {
|
||||
lastFunctionTime[i] = tmr10ms;
|
||||
if (sd->func == FUNC_PLAY_VALUE) {
|
||||
PLAY_VALUE(CFN_PARAM(sd), i+1);
|
||||
}
|
||||
else {
|
||||
playCustomFunctionFile(sd, i+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (sd->func == FUNC_PLAY_VALUE) {
|
||||
if (IS_PLAYING(i+1)) {
|
||||
switch_mask = 0;
|
||||
}
|
||||
else {
|
||||
PLAY_VALUE(FSW_PARAM(sd), i+1);
|
||||
}
|
||||
}
|
||||
else if (sd->func == FUNC_VOLUME) {
|
||||
requiredSpeakerVolume = ((1024 + getValue(FSW_PARAM(sd))) * VOLUME_LEVEL_MAX) / 2048;
|
||||
}
|
||||
else if (sd->func == FUNC_BACKGND_MUSIC) {
|
||||
if (!IS_PLAYING(i+1)) {
|
||||
playCustomFunctionFile(sd, i+1);
|
||||
}
|
||||
}
|
||||
else if (sd->func == FUNC_VOLUME) {
|
||||
requiredSpeakerVolume = ((1024 + getValue(CFN_PARAM(sd))) * VOLUME_LEVEL_MAX) / 2048;
|
||||
}
|
||||
#elif defined(VOICE)
|
||||
else if (sd->func == FUNC_PLAY_TRACK) {
|
||||
if (IS_PLAYING(i+1)) {
|
||||
switch_mask = 0;
|
||||
else if (sd->func == FUNC_PLAY_TRACK || sd->func == FUNC_PLAY_BOTH || sd->func == FUNC_PLAY_VALUE) {
|
||||
tmr10ms_t tmr10ms = get_tmr10ms();
|
||||
uint8_t repeatParam = sd->active;
|
||||
if (!lastFunctionTime[i] || (sd->func==FUNC_PLAY_BOTH && active!=(bool)(activeFnSwitches&switch_mask)) || (repeatParam && (signed)(tmr10ms-lastFunctionTime[i])>=(1500<<(repeatParam-1)))) {
|
||||
lastFunctionTime[i] = tmr10ms;
|
||||
if (sd->func == FUNC_PLAY_VALUE) {
|
||||
PLAY_VALUE(CFN_PARAM(sd), i+1);
|
||||
}
|
||||
else {
|
||||
PUSH_CUSTOM_PROMPT(sd->param, i+1);
|
||||
}
|
||||
}
|
||||
else if (sd->func == FUNC_PLAY_VALUE) {
|
||||
if (IS_PLAYING(i+1)) {
|
||||
switch_mask = 0;
|
||||
}
|
||||
else {
|
||||
PLAY_VALUE(FSW_PARAM(sd), i+1);
|
||||
}
|
||||
}
|
||||
else if (sd->func == FUNC_PLAY_BOTH) {
|
||||
if (IS_PLAYING(i+1)) {
|
||||
switch_mask = 0;
|
||||
}
|
||||
else {
|
||||
PUSH_CUSTOM_PROMPT(FSW_PARAM(sd) + 1, i+1);
|
||||
PUSH_CUSTOM_PROMPT(active ? sd->param : sd->param+1, i+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(DEBUG)
|
||||
else if (sd->func == FUNC_TEST) {
|
||||
testFunc();
|
||||
}
|
||||
else if (sd->func == FUNC_TEST) {
|
||||
testFunc();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(GVARS)
|
||||
else if (sd->func >= FUNC_ADJUST_GV1) {
|
||||
if (FSW_PARAM(sd) >= MIXSRC_TrimRud-1 && FSW_PARAM(sd) <= MIXSRC_TrimAil-1) {
|
||||
trimGvar[FSW_PARAM(sd)-MIXSRC_TrimRud+1] = sd->func-FUNC_ADJUST_GV1;
|
||||
}
|
||||
else if (sd->func >= FUNC_ADJUST_GV1) {
|
||||
if (CFN_PARAM(sd) >= MIXSRC_TrimRud-1 && CFN_PARAM(sd) <= MIXSRC_TrimAil-1) {
|
||||
trimGvar[CFN_PARAM(sd)-MIXSRC_TrimRud+1] = sd->func-FUNC_ADJUST_GV1;
|
||||
}
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
else if (FSW_PARAM(sd) >= MIXSRC_REa-1 && FSW_PARAM(sd) < MIXSRC_TrimRud-1) {
|
||||
int8_t scroll = rePreviousValues[FSW_PARAM(sd)-MIXSRC_REa+1] - (g_rotenc[FSW_PARAM(sd)-MIXSRC_REa+1] / ROTARY_ENCODER_GRANULARITY);
|
||||
if (scroll) {
|
||||
SET_GVAR(sd->func-FUNC_ADJUST_GV1, GVAR_VALUE(sd->func-FUNC_ADJUST_GV1, s_perout_flight_phase) + scroll, s_perout_flight_phase);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
SET_GVAR(sd->func-FUNC_ADJUST_GV1, limit((int16_t)-1250, getValue(FSW_PARAM(sd)), (int16_t)1250) / 10, s_perout_flight_phase);
|
||||
else if (CFN_PARAM(sd) >= MIXSRC_REa-1 && CFN_PARAM(sd) < MIXSRC_TrimRud-1) {
|
||||
int8_t scroll = rePreviousValues[CFN_PARAM(sd)-MIXSRC_REa+1] - (g_rotenc[CFN_PARAM(sd)-MIXSRC_REa+1] / ROTARY_ENCODER_GRANULARITY);
|
||||
if (scroll) {
|
||||
SET_GVAR(sd->func-FUNC_ADJUST_GV1, GVAR_VALUE(sd->func-FUNC_ADJUST_GV1, s_perout_flight_phase) + scroll, s_perout_flight_phase);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (COMPLEX_SWITCH) {
|
||||
if (!(activeFunctionSwitches & switch_mask)) {
|
||||
if (!(activeFunctions & function_mask)) {
|
||||
newActiveFunctions |= function_mask;
|
||||
}
|
||||
}
|
||||
else {
|
||||
newActiveFunctions |= (activeFunctions & function_mask);
|
||||
SET_GVAR(sd->func-FUNC_ADJUST_GV1, limit((int16_t)-1250, getValue(CFN_PARAM(sd)), (int16_t)1250) / 10, s_perout_flight_phase);
|
||||
}
|
||||
}
|
||||
else {
|
||||
#endif
|
||||
|
||||
if (active) {
|
||||
newActiveFnSwitches |= switch_mask;
|
||||
newActiveFunctions |= function_mask;
|
||||
}
|
||||
|
||||
activeFunctionSwitches |= switch_mask;
|
||||
}
|
||||
else {
|
||||
lastFunctionTime[i] = 0;
|
||||
#if defined(CPUARM)
|
||||
fnSwitchDuration[i] = 0;
|
||||
#endif
|
||||
#if defined(CPUARM) && defined(SDCARD)
|
||||
if (!COMPLEX_SWITCH && sd->func == FUNC_BACKGND_MUSIC) {
|
||||
if (sd->func == FUNC_BACKGND_MUSIC && isFunctionActive(FUNC_BACKGND_MUSIC)) {
|
||||
STOP_PLAY(i+1);
|
||||
}
|
||||
#elif defined(VOICE)
|
||||
if (sd->func == FUNC_PLAY_BOTH && (!momentary || (activeFunctionSwitches & switch_mask))) {
|
||||
if (IS_PLAYING(i+1)) {
|
||||
switch_mask = 0;
|
||||
}
|
||||
else {
|
||||
PUSH_CUSTOM_PROMPT(FSW_PARAM(sd), i+1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
activeFunctionSwitches &= (~switch_mask);
|
||||
if (COMPLEX_SWITCH)
|
||||
newActiveFunctions |= (activeFunctions & function_mask);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
activeFunctions = newActiveFunctions;
|
||||
activeSwitches = newActiveSwitches;
|
||||
activeFnSwitches = newActiveFnSwitches;
|
||||
activeFunctions = newActiveFunctions;
|
||||
|
||||
#if defined(ROTARY_ENCODERS) && defined(GVARS)
|
||||
for (uint8_t i=0; i<ROTARY_ENCODERS; i++)
|
||||
|
||||
+11
-8
@@ -534,6 +534,7 @@ enum BaseCurves {
|
||||
|
||||
enum CswFunctions {
|
||||
CS_OFF,
|
||||
// TODO add CS_VEQUAL,
|
||||
CS_VPOS, // v>offset
|
||||
CS_VNEG, // v<offset
|
||||
CS_APOS, // |v|>offset
|
||||
@@ -542,13 +543,14 @@ enum CswFunctions {
|
||||
CS_OR,
|
||||
CS_XOR,
|
||||
CS_EQUAL,
|
||||
CS_NEQUAL,
|
||||
CS_NEQUAL, // TODO remove
|
||||
CS_GREATER,
|
||||
CS_LESS,
|
||||
CS_EGREATER,
|
||||
CS_ELESS,
|
||||
CS_EGREATER, // TODO remove
|
||||
CS_ELESS, // TODO remove
|
||||
CS_DIFFEGREATER,
|
||||
CS_ADIFFEGREATER,
|
||||
// TODO add CS_TIMER,
|
||||
CS_MAXF = CS_ADIFFEGREATER
|
||||
};
|
||||
|
||||
@@ -1111,14 +1113,15 @@ inline bool isMixActive(uint8_t mix)
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM)
|
||||
#define MASK_FSW_TYPE uint32_t // current max = 32 function switches
|
||||
#define MASK_CFN_TYPE uint32_t // current max = 32 function switches
|
||||
#define MASK_FUNC_TYPE uint32_t // current max = 32 functions
|
||||
#else
|
||||
#define MASK_FSW_TYPE uint16_t // current max = 16 function switches
|
||||
#define MASK_CFN_TYPE uint16_t // current max = 16 function switches
|
||||
#define MASK_FUNC_TYPE uint16_t // current max = 16 functions
|
||||
#endif
|
||||
|
||||
extern MASK_FSW_TYPE activeFunctionSwitches;
|
||||
extern MASK_CFN_TYPE activeSwitches;
|
||||
extern MASK_CFN_TYPE activeFnSwitches;
|
||||
extern MASK_FUNC_TYPE activeFunctions;
|
||||
inline bool isFunctionActive(uint8_t func)
|
||||
{
|
||||
@@ -1126,9 +1129,9 @@ inline bool isFunctionActive(uint8_t func)
|
||||
}
|
||||
|
||||
#if defined(CPUARM)
|
||||
typedef uint32_t rotenc_t;
|
||||
typedef int32_t rotenc_t;
|
||||
#else
|
||||
typedef uint8_t rotenc_t;
|
||||
typedef int8_t rotenc_t;
|
||||
#endif
|
||||
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
|
||||
+4
-5
@@ -112,13 +112,12 @@ void t_voice::voice_process(void)
|
||||
PORTA_LCD_DAT = VoiceLatch; // Latch data set
|
||||
PORTB |= (1 << OUT_B_LIGHT); // Drive high,pullup enabled
|
||||
DDRB &= ~(1 << OUT_B_LIGHT); // Change to input
|
||||
#if !defined(SIMU)
|
||||
// delay to allow input to settle
|
||||
asm(" rjmp 1f");
|
||||
asm("1:");
|
||||
asm(" nop");
|
||||
asm(" nop");
|
||||
asm(" nop");
|
||||
asm(" nop"); // 4th nop added for Thomas9x (compared to er9x)
|
||||
#endif
|
||||
asm(" rjmp 1f");
|
||||
asm("1:");
|
||||
busy = PINB & 0x80;
|
||||
DDRB |= (1 << OUT_B_LIGHT); // Change to output
|
||||
// The next bit guarantees the backlight output gets clocked out
|
||||
|
||||
+1
-1
@@ -132,5 +132,5 @@ inline bool isPlaying()
|
||||
#define PUSH_CUSTOM_PROMPT(p, ...) pushCustomPrompt((p))
|
||||
#define PLAY_NUMBER(n, u, a) playNumber((n), (u), (a))
|
||||
#define PLAY_DURATION(d) playDuration((d))
|
||||
#define IS_PLAYING(id) isPlaying()
|
||||
#define IS_PLAYING(id) (0) /* isPlaying() */
|
||||
#define PLAY_VALUE(v, id) playValue((v))
|
||||
|
||||
+11
-11
@@ -133,35 +133,35 @@
|
||||
#else
|
||||
#define TR_SDCLOGS "[Logov\200n\204 SD]"
|
||||
#endif
|
||||
#define TR_FSW_VOLUME "Hlasitost\0 "
|
||||
#define TR_FSW_BG_MUSIC "BgHudba\0 ""BgHudba Pauza"
|
||||
#define TR_CFN_VOLUME "Hlasitost\0 "
|
||||
#define TR_CFN_BG_MUSIC "BgHudba\0 ""BgHudba Pauza"
|
||||
#elif defined(PCBGRUVIN9X)
|
||||
#if defined(SDCARD)
|
||||
#define TR_SDCLOGS "Logování SD\0 "
|
||||
#else
|
||||
#define TR_SDCLOGS "[Logování SD]"
|
||||
#endif
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#else
|
||||
#define TR_SDCLOGS
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#endif
|
||||
|
||||
#ifdef GVARS
|
||||
#define TR_FSW_ADJUST_GVAR "Nastav \0 "
|
||||
#define TR_CFN_ADJUST_GVAR "Nastav \0 "
|
||||
#else
|
||||
#define TR_FSW_ADJUST_GVAR
|
||||
#define TR_CFN_ADJUST_GVAR
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define TR_FSW_TEST "Test\0 "
|
||||
#define TR_CFN_TEST "Test\0 "
|
||||
#else
|
||||
#define TR_FSW_TEST
|
||||
#define TR_CFN_TEST
|
||||
#endif
|
||||
|
||||
#define TR_VFSWFUNC "Bezpe\201\0 ""Tren\202r \0 ""Instant Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Podsv\203tlen\204\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST
|
||||
#define TR_VFSWFUNC "Bezpe\201\0 ""Tren\202r \0 ""Instant Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Podsv\203tlen\204\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST
|
||||
|
||||
#define LEN_VFSWRESET "\006"
|
||||
#define TR_VFSWRESET "Timer1""Timer2""V\207e ""Telem."
|
||||
|
||||
+11
-11
@@ -125,33 +125,33 @@
|
||||
#else
|
||||
#define TR_SDCLOGS "[SD Aufz.]\0 "
|
||||
#endif
|
||||
#define TR_FSW_VOLUME "Lautst\201rke\0 "
|
||||
#define TR_FSW_BG_MUSIC "Musik Start\0 ""Musik Pause\0 "
|
||||
#define TR_CFN_VOLUME "Lautst\201rke\0 "
|
||||
#define TR_CFN_BG_MUSIC "Musik Start\0 ""Musik Pause\0 "
|
||||
#elif defined(PCBGRUVIN9X)
|
||||
#if defined(SDCARD)
|
||||
#define TR_SDCLOGS "SD Aufz.\0 "
|
||||
#else
|
||||
#define TR_SDCLOGS "[SD Aufz.]\0 "
|
||||
#endif
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#else
|
||||
#define TR_SDCLOGS
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#endif
|
||||
#ifdef GVARS
|
||||
#define TR_FSW_ADJUST_GVAR "\200ndere \0 "
|
||||
#define TR_CFN_ADJUST_GVAR "\200ndere \0 "
|
||||
#else
|
||||
#define TR_FSW_ADJUST_GVAR
|
||||
#define TR_CFN_ADJUST_GVAR
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
#define TR_FSW_TEST "Test\0 "
|
||||
#define TR_CFN_TEST "Test\0 "
|
||||
#else
|
||||
#define TR_FSW_TEST
|
||||
#define TR_CFN_TEST
|
||||
#endif
|
||||
|
||||
#define TR_VFSWFUNC "Sicher\0 ""Lehrsch.\0 ""Instant. Trim" TR_SOUND TR_HAPTIC "R\205cksetz.\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Beleuchtung\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST
|
||||
#define TR_VFSWFUNC "Sicher\0 ""Lehrsch.\0 ""Instant. Trim" TR_SOUND TR_HAPTIC "R\205cksetz.\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Beleuchtung\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST
|
||||
|
||||
#define LEN_VFSWRESET "\006"
|
||||
#define TR_VFSWRESET "S.Uhr1""S.Uhr2""Alle ""Telem."
|
||||
|
||||
+25
-28
@@ -120,50 +120,47 @@
|
||||
#endif
|
||||
|
||||
#if defined(VOICE)
|
||||
#define TR_PLAY_TRACK "Play Track\0"
|
||||
#define TR_PLAY_BOTH "Play Both\0 "
|
||||
#define TR_PLAY_VALUE "Play Value\0"
|
||||
#if defined(PCBSKY9X)
|
||||
#define TR_PLAY_TRACK "Play\0 "
|
||||
#else
|
||||
#define TR_PLAY_TRACK "Play Track\0"
|
||||
#endif
|
||||
#define TR_PLAY_BOTH "Play Bth\0 "
|
||||
#define TR_PLAY_VALUE "Play Val\0 "
|
||||
#else
|
||||
#define TR_PLAY_TRACK "[PlayTrack]"
|
||||
#define TR_PLAY_BOTH "[Play Both]" // TODO could be avoided
|
||||
#define TR_PLAY_BOTH "[Play Both]"
|
||||
#define TR_PLAY_VALUE "[PlayValue]"
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM)
|
||||
#if defined(SDCARD)
|
||||
#define TR_SDCLOGS "SD Logs\0 "
|
||||
#else
|
||||
#define TR_SDCLOGS "[SD Logs]\0 "
|
||||
#endif
|
||||
#define TR_FSW_VOLUME "Volume\0 "
|
||||
#define TR_FSW_BG_MUSIC "BgMusic\0 ""BgMusic ||\0"
|
||||
#elif defined(PCBGRUVIN9X)
|
||||
#if defined(SDCARD)
|
||||
#define TR_SDCLOGS "SD Logs\0 "
|
||||
#else
|
||||
#define TR_SDCLOGS "[SD Logs]\0 "
|
||||
#endif
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME "Volume\0 "
|
||||
#define TR_CFN_BG_MUSIC "BgMusic\0 ""BgMusic ||\0"
|
||||
|
||||
#if defined(SDCARD)
|
||||
#define TR_SDCLOGS "SD Logs\0 "
|
||||
#else
|
||||
#define TR_SDCLOGS
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_SDCLOGS "[SD Logs]\0 "
|
||||
#endif
|
||||
|
||||
#ifdef GVARS
|
||||
#define TR_FSW_ADJUST_GVAR "Adjust \0 "
|
||||
#define TR_CFN_ADJUST_GVAR "Adjust \0 "
|
||||
#else
|
||||
#define TR_FSW_ADJUST_GVAR
|
||||
#define TR_CFN_ADJUST_GVAR
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define TR_FSW_TEST "Test\0"
|
||||
#define TR_CFN_TEST "Test\0"
|
||||
#else
|
||||
#define TR_FSW_TEST
|
||||
#define TR_CFN_TEST
|
||||
#endif
|
||||
|
||||
#define TR_VFSWFUNC "Safety\0 ""Trainer \0 ""Inst. Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Backlight\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST
|
||||
#if defined(CPUARM)
|
||||
#define TR_VFSWFUNC "Safety\0 ""Trainer \0 ""Inst. Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Backlight\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST
|
||||
#elif defined(PCBGRUVIN9X)
|
||||
#define TR_VFSWFUNC "Safety\0 ""Trainer \0 ""Inst. Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE TR_SDCLOGS "Backlight\0 " TR_CFN_ADJUST_GVAR TR_CFN_TEST
|
||||
#else
|
||||
#define TR_VFSWFUNC "Safety\0 ""Trainer \0 ""Inst. Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_BOTH TR_PLAY_VALUE "Backlight\0 " TR_CFN_ADJUST_GVAR TR_CFN_TEST
|
||||
#endif
|
||||
|
||||
#define LEN_VFSWRESET TR("\006","\012")
|
||||
#define TR_VFSWRESET "Timer 1 ""Timer 2 ""All ""Telemetry"
|
||||
|
||||
+11
-11
@@ -134,35 +134,35 @@
|
||||
#else
|
||||
#define TR_SDCLOGS "[SD Logs]\0 "
|
||||
#endif
|
||||
#define TR_FSW_VOLUME "Volumen\0 "
|
||||
#define TR_FSW_BG_MUSIC "BgMusica\0 ""BgMusica||\0"
|
||||
#define TR_CFN_VOLUME "Volumen\0 "
|
||||
#define TR_CFN_BG_MUSIC "BgMusica\0 ""BgMusica||\0"
|
||||
#elif defined(PCBGRUVIN9X)
|
||||
#if defined(SDCARD)
|
||||
#define TR_SDCLOGS "SD Logs\0 "
|
||||
#else
|
||||
#define TR_SDCLOGS "[SD Logs]\0 "
|
||||
#endif
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#else
|
||||
#define TR_SDCLOGS
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#endif
|
||||
|
||||
#ifdef GVARS
|
||||
#define TR_FSW_ADJUST_GVAR "Ajuste \0 "
|
||||
#define TR_CFN_ADJUST_GVAR "Ajuste \0 "
|
||||
#else
|
||||
#define TR_FSW_ADJUST_GVAR
|
||||
#define TR_CFN_ADJUST_GVAR
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define TR_FSW_TEST "Test\0"
|
||||
#define TR_CFN_TEST "Test\0"
|
||||
#else
|
||||
#define TR_FSW_TEST
|
||||
#define TR_CFN_TEST
|
||||
#endif
|
||||
|
||||
#define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Inst. Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Panel luz\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST
|
||||
#define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Inst. Trim\0" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Panel luz\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST
|
||||
|
||||
#define LEN_VFSWRESET TR("\006","\012")
|
||||
#define TR_VFSWRESET "Reloj 1 ""Reloj 2 ""Todo ""Telemetr."
|
||||
|
||||
+11
-11
@@ -125,33 +125,33 @@
|
||||
#else
|
||||
#define TR_SDCLOGS "[Logs SD]\0 "
|
||||
#endif
|
||||
#define TR_FSW_VOLUME "Volume\0 "
|
||||
#define TR_FSW_BG_MUSIC "Musique\0 ""Pause Musique"
|
||||
#define TR_CFN_VOLUME "Volume\0 "
|
||||
#define TR_CFN_BG_MUSIC "Musique\0 ""Pause Musique"
|
||||
#elif defined(PCBGRUVIN9X)
|
||||
#if defined(SDCARD)
|
||||
#define TR_SDCLOGS "Logs carte SD"
|
||||
#else
|
||||
#define TR_SDCLOGS "[Logs SD]\0 "
|
||||
#endif
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#else
|
||||
#define TR_SDCLOGS
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#endif
|
||||
#ifdef GVARS
|
||||
#define TR_FSW_ADJUST_GVAR "Ajuster\0 "
|
||||
#define TR_CFN_ADJUST_GVAR "Ajuster\0 "
|
||||
#else
|
||||
#define TR_FSW_ADJUST_GVAR
|
||||
#define TR_CFN_ADJUST_GVAR
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
#define TR_FSW_TEST "Test\0 "
|
||||
#define TR_CFN_TEST "Test\0 "
|
||||
#else
|
||||
#define TR_FSW_TEST
|
||||
#define TR_CFN_TEST
|
||||
#endif
|
||||
|
||||
#define TR_VFSWFUNC "S\200cur.\0 ""Ecolage \0 ""Trim instant." TR_SOUND TR_HAPTIC "Remise \202 0\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "R\200tro\200cl.\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST
|
||||
#define TR_VFSWFUNC "S\200cur.\0 ""Ecolage \0 ""Trim instant." TR_SOUND TR_HAPTIC "Remise \202 0\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "R\200tro\200cl.\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST
|
||||
|
||||
#define LEN_VFSWRESET "\006"
|
||||
#define TR_VFSWRESET "Timer1""Timer2""Timers""T\200l\200m."
|
||||
|
||||
+11
-11
@@ -124,32 +124,32 @@
|
||||
#else
|
||||
#define TR_SDCLOGS "[SDCARD Logs]"
|
||||
#endif
|
||||
#define TR_FSW_VOLUME "Volume\0 "
|
||||
#define TR_FSW_BG_MUSIC "BgMusic\0 ""BgMusic Pause"
|
||||
#define TR_CFN_VOLUME "Volume\0 "
|
||||
#define TR_CFN_BG_MUSIC "BgMusic\0 ""BgMusic Pause"
|
||||
#elif defined(PCBGRUVIN9X)
|
||||
#if defined(SDCARD)
|
||||
#define TR_SDCLOGS "SDCARD Logs"
|
||||
#else
|
||||
#define TR_SDCLOGS "[SDCARD Logs]"
|
||||
#endif
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#else
|
||||
#define TR_SDCLOGS
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#endif
|
||||
#ifdef GVARS
|
||||
#define TR_FSW_ADJUST_GVAR "Adjust \0 "
|
||||
#define TR_CFN_ADJUST_GVAR "Adjust \0 "
|
||||
#else
|
||||
#define TR_FSW_ADJUST_GVAR
|
||||
#define TR_CFN_ADJUST_GVAR
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
#define TR_FSW_TEST "Test\0 "
|
||||
#define TR_CFN_TEST "Test\0 "
|
||||
#else
|
||||
#define TR_FSW_TEST
|
||||
#define TR_CFN_TEST
|
||||
#endif
|
||||
#define TR_VFSWFUNC "Blocco\0 ""Trainer \0 ""Instant Trim " TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Retroillum.\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST
|
||||
#define TR_VFSWFUNC "Blocco\0 ""Trainer \0 ""Instant Trim " TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Retroillum.\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST
|
||||
|
||||
#define LEN_VFSWRESET "\006"
|
||||
#define TR_VFSWRESET "Timer1""Timer2""Tutto ""Telem."
|
||||
|
||||
+11
-11
@@ -125,33 +125,33 @@
|
||||
#else
|
||||
#define TR_SDCLOGS "[SDCARD Logs]"
|
||||
#endif
|
||||
#define TR_FSW_VOLUME "Volume\0 "
|
||||
#define TR_FSW_BG_MUSIC "BgMusic\0 ""BgMusic ||\0 "
|
||||
#define TR_CFN_VOLUME "Volume\0 "
|
||||
#define TR_CFN_BG_MUSIC "BgMusic\0 ""BgMusic ||\0 "
|
||||
#elif defined(PCBGRUVIN9X)
|
||||
#if defined(SDCARD)
|
||||
#define TR_SDCLOGS "SDCARD Logs\0 "
|
||||
#else
|
||||
#define TR_SDCLOGS "[SDCARD Logs]"
|
||||
#endif
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#else
|
||||
#define TR_SDCLOGS
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#endif
|
||||
#ifdef GVARS
|
||||
#define TR_FSW_ADJUST_GVAR "Ajuste\0 "
|
||||
#define TR_CFN_ADJUST_GVAR "Ajuste\0 "
|
||||
#else
|
||||
#define TR_FSW_ADJUST_GVAR
|
||||
#define TR_CFN_ADJUST_GVAR
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
#define TR_FSW_TEST "Teste\0 "
|
||||
#define TR_CFN_TEST "Teste\0 "
|
||||
#else
|
||||
#define TR_FSW_TEST
|
||||
#define TR_CFN_TEST
|
||||
#endif
|
||||
|
||||
#define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Ajuste Rapido" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Backlight\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST
|
||||
#define TR_VFSWFUNC "Seguro\0 ""Aprendiz\0 ""Ajuste Rapido" TR_SOUND TR_HAPTIC "Reset\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Backlight\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST
|
||||
|
||||
#define LEN_VFSWRESET "\006"
|
||||
#define TR_VFSWRESET "Tempo1""Tempo2""Todo ""Telem."
|
||||
|
||||
+11
-11
@@ -133,35 +133,35 @@
|
||||
#else
|
||||
#define TR_SDCLOGS "[SDCARD Logg]"
|
||||
#endif
|
||||
#define TR_FSW_VOLUME "Volym\0 "
|
||||
#define TR_FSW_BG_MUSIC "BgMusik\0 ""BgMusik ||\0"
|
||||
#define TR_CFN_VOLUME "Volym\0 "
|
||||
#define TR_CFN_BG_MUSIC "BgMusik\0 ""BgMusik ||\0"
|
||||
#elif defined(PCBGRUVIN9X)
|
||||
#if defined(SDCARD)
|
||||
#define TR_SDCLOGS "SDCARD Loggar"
|
||||
#else
|
||||
#define TR_SDCLOGS "[SDCARD Logg]"
|
||||
#endif
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#else
|
||||
#define TR_SDCLOGS
|
||||
#define TR_FSW_VOLUME
|
||||
#define TR_FSW_BG_MUSIC
|
||||
#define TR_CFN_VOLUME
|
||||
#define TR_CFN_BG_MUSIC
|
||||
#endif
|
||||
|
||||
#ifdef GVARS
|
||||
#define TR_FSW_ADJUST_GVAR "Justera\0 "
|
||||
#define TR_CFN_ADJUST_GVAR "Justera\0 "
|
||||
#else
|
||||
#define TR_FSW_ADJUST_GVAR
|
||||
#define TR_CFN_ADJUST_GVAR
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define TR_FSW_TEST "Test\0"
|
||||
#define TR_CFN_TEST "Test\0"
|
||||
#else
|
||||
#define TR_FSW_TEST
|
||||
#define TR_CFN_TEST
|
||||
#endif
|
||||
|
||||
#define TR_VFSWFUNC "S\201kra\0 ""Trainer \0 ""S\201tt Trim\0 " TR_SOUND TR_HAPTIC "Nollst\201ll\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_FSW_VOLUME "Belysning\0 " TR_FSW_BG_MUSIC TR_FSW_ADJUST_GVAR TR_FSW_TEST
|
||||
#define TR_VFSWFUNC "S\201kra\0 ""Trainer \0 ""S\201tt Trim\0 " TR_SOUND TR_HAPTIC "Nollst\201ll\0 " TR_VVARIO TR_PLAY_TRACK TR_PLAY_VALUE TR_SDCLOGS TR_CFN_VOLUME "Belysning\0 " TR_CFN_BG_MUSIC TR_CFN_ADJUST_GVAR TR_CFN_TEST
|
||||
|
||||
#define LEN_VFSWRESET TR("\006","\012")
|
||||
#define TR_VFSWRESET "Timer1 ""Timer2 ""Allt ""Telemetri"
|
||||
|
||||
Reference in New Issue
Block a user