[all] And switches added to Custom Switches

[ARM] No Init of SD after a reboot (not tested)
[X9D] Bug when [EXIT] on MODELSEL
This commit is contained in:
bsongis
2013-02-21 20:25:40 +00:00
parent 8cfde7854b
commit 3824939030
9 changed files with 84 additions and 26 deletions
+9
View File
@@ -265,6 +265,12 @@ AudioQueue::AudioQueue()
prioIdx = -1;
}
void AudioQueue::start()
{
state = AUDIO_RESUMING;
CoSetFlag(audioFlag);
}
void audioTimerHandle(void)
{
CoSetFlag(audioFlag);
@@ -277,6 +283,9 @@ void audioTimerHandle(void)
#ifndef SIMU
void audioTask(void* pdata)
{
while (audioQueue.busy())
CoWaitForSingleFlag(audioFlag, 0);
#if defined(SDCARD)
if (!unexpectedShutdown) {
codecsInit();
+8 -4
View File
@@ -65,10 +65,11 @@ class AudioFragment : public ToneFragment {
extern "C" void DAC_IRQHandler();
#define AUDIO_SLEEPING 0
#define AUDIO_RESUMING 1
#define AUDIO_PLAYING_TONE 2
#define AUDIO_PLAYING_WAV 3
#define AUDIO_NOT_STARTED 0
#define AUDIO_SLEEPING 1
#define AUDIO_RESUMING 2
#define AUDIO_PLAYING_TONE 3
#define AUDIO_PLAYING_WAV 4
extern bool playingBackground;
@@ -92,6 +93,8 @@ class AudioQueue {
AudioQueue();
void start();
void play(uint8_t tFreq, uint8_t tLen, uint8_t tPause, uint8_t tFlags=0, int8_t tFreqIncr=0);
void playFile(const char *filename, uint8_t flags=0, uint8_t id=0);
@@ -141,6 +144,7 @@ extern AudioQueue audioQueue;
void codecsInit();
void audioEvent(uint8_t e, uint8_t f=BEEP_DEFAULT_FREQ);
void audioStart();
#define AUDIO_TADA() audioEvent(AU_TADA)
#define AUDIO_KEYPAD_UP() audioEvent(AU_KEYPAD_UP)
+1 -1
View File
@@ -1141,7 +1141,7 @@ void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val,
if (channel >= TELEM_MAX_T1-1 && channel <= TELEM_MAX_DIST-1)
channel -= TELEM_MAX_T1 - TELEM_T1;
if (channel <= TELEM_GPSALT-1)
unit = channel - 6;
unit = channel + 1 - TELEM_ALT;
if (channel >= TELEM_MIN_ALT-1 && channel <= TELEM_MAX_ALT-1)
unit = 0;
if (channel == TELEM_HDG-1)
+44 -12
View File
@@ -244,8 +244,13 @@ void menuModelSelect(uint8_t event)
uint8_t _event_ = (IS_ROTARY_BREAK(event) || IS_ROTARY_LONG(event) ? 0 : event);
#if defined(PCBX9D)
if ((s_copyMode && EVT_KEY_MASK(event) == KEY_EXIT) || event == EVT_KEY_BREAK(KEY_EXIT))
_event_ -= KEY_EXIT;
#else
if (s_copyMode && EVT_KEY_MASK(event) == KEY_EXIT)
_event_ -= KEY_EXIT;
#endif
int8_t oldSub = m_posVert;
@@ -307,6 +312,18 @@ void menuModelSelect(uint8_t event)
sub = m_posVert = (s_copyMode == MOVE_MODE || s_copySrcRow<0) ? (MAX_MODELS+sub+s_copyTgtOfs) % MAX_MODELS : s_copySrcRow;
s_copyMode = 0;
}
#if defined(PCBX9D)
else {
if (m_posVert != g_eeGeneral.currModel) {
m_posVert = g_eeGeneral.currModel;
s_pgOfs = 0;
}
else {
popMenu();
return;
}
}
#endif
break;
#if defined(ROTARY_ENCODER_NAVIGATION)
case EVT_ROTARY_BREAK:
@@ -349,7 +366,11 @@ void menuModelSelect(uint8_t event)
s_copyMode = 0;
event = EVT_ENTRY_UP;
}
else if (event == EVT_KEY_LONG(KEY_MENU) || IS_ROTARY_BREAK(event)) {
else if (event == EVT_KEY_LONG(KEY_ENTER)
#if !defined(PCBX9D)
|| IS_ROTARY_BREAK(event)
#endif
) {
s_copyMode = 0;
killEvents(event);
#if defined(NAVIGATION_MENUS)
@@ -435,14 +456,14 @@ void menuModelSelect(uint8_t event)
case EVT_KEY_FIRST(KEY_MOVE_UP):
case EVT_KEY_FIRST(KEY_MOVE_DOWN):
if (s_copyMode) {
int8_t next_ofs = (IS_ROTARY_LEFT(event) || event == EVT_KEY_FIRST(KEY_MOVE_UP)) ? s_copyTgtOfs+1 : s_copyTgtOfs-1;
int8_t next_ofs = (IS_ROTARY_UP(event) || event == EVT_KEY_FIRST(KEY_MOVE_UP)) ? s_copyTgtOfs+1 : s_copyTgtOfs-1;
if (next_ofs == MAX_MODELS || next_ofs == -MAX_MODELS)
next_ofs = 0;
if (s_copySrcRow < 0 && s_copyMode==COPY_MODE) {
s_copySrcRow = oldSub;
// find a hole (in the first empty slot above / below)
sub = eeFindEmptyModel(s_copySrcRow, IS_ROTARY_RIGHT(event) || event==EVT_KEY_FIRST(KEY_MOVE_DOWN));
sub = eeFindEmptyModel(s_copySrcRow, IS_ROTARY_DOWN(event) || event==EVT_KEY_FIRST(KEY_MOVE_DOWN));
if (sub < 0) {
// no free room for duplicating the model
AUDIO_ERROR();
@@ -3100,9 +3121,14 @@ void menuModelCustomSwitches(uint8_t event)
}
#else
#define CSW_1ST_COLUMN (4*FW-3)
#define CSW_2ND_COLUMN (10*FW+1)
#define CSW_3RD_COLUMN (18*FW+2)
#define CSW_4TH_COLUMN (20*FW+1)
void menuModelCustomSwitches(uint8_t event)
{
MENU(STR_MENUCUSTOMSWITCHES, menuTabModel, e_CustomSwitches, NUM_CSW+1, {0, 2/*repeated...*/});
MENU(STR_MENUCUSTOMSWITCHES, menuTabModel, e_CustomSwitches, NUM_CSW+1, {0, 3/*repeated...*/});
uint8_t y = 0;
uint8_t k = 0;
@@ -3119,28 +3145,28 @@ void menuModelCustomSwitches(uint8_t event)
putsSwitches(0, y, sw, getSwitch(sw, 0) ? BOLD : 0);
// CSW func
lcd_putsiAtt(4*FW-3, y, STR_VCSWFUNC, cs->func, m_posHorz==0 ? attr : 0);
lcd_putsiAtt(CSW_1ST_COLUMN, y, STR_VCSWFUNC, cs->func, m_posHorz==0 ? attr : 0);
// CSW params
uint8_t cstate = CS_STATE(cs->func);
int8_t v1_min=0, v1_max=MIXSRC_LAST_CH+NUM_TELEMETRY, v2_min=0, v2_max=MIXSRC_LAST_CH+NUM_TELEMETRY;
if (cstate == CS_VBOOL) {
putsSwitches(10*FW, y, cs->v1, m_posHorz==1 ? attr : 0);
putsSwitches(16*FW, y, cs->v2, m_posHorz==2 ? attr : 0);
putsSwitches(CSW_2ND_COLUMN, y, cs->v1, m_posHorz==1 ? attr : 0);
putsSwitches(CSW_3RD_COLUMN, y, cs->v2, m_posHorz==2 ? attr : 0);
v1_min = SWSRC_OFF+1; v1_max = SWSRC_ON-1;
v2_min = SWSRC_OFF+1; v2_max = SWSRC_ON-1;
}
else if (cstate == CS_VCOMP) {
putsMixerSource(10*FW, y, cs->v1, m_posHorz==1 ? attr : 0);
putsMixerSource(16*FW, y, cs->v2, m_posHorz==2 ? attr : 0);
putsMixerSource(CSW_2ND_COLUMN, y, cs->v1, m_posHorz==1 ? attr : 0);
putsMixerSource(CSW_3RD_COLUMN, y, cs->v2, m_posHorz==2 ? attr : 0);
}
else {
putsMixerSource(10*FW, y, cs->v1, (m_posHorz==1 ? attr : 0));
putsMixerSource(CSW_2ND_COLUMN, y, cs->v1, (m_posHorz==1 ? attr : 0));
#if defined(FRSKY)
if (cs->v1 > MIXSRC_LAST_CH) {
putsTelemetryChannel(18*FW+2, y, cs->v1 - MIXSRC_LAST_CH - 1, convertCswTelemValue(cs), m_posHorz==2 ? attr : 0);
putsTelemetryChannel(CSW_3RD_COLUMN, y, cs->v1 - MIXSRC_LAST_CH - 1, convertCswTelemValue(cs), m_posHorz==2 ? attr : 0);
v2_max = maxTelemValue(cs->v1 - MIXSRC_LAST_CH);
if (cstate == CS_VOFS) {
v2_min = -128;
@@ -3158,11 +3184,14 @@ void menuModelCustomSwitches(uint8_t event)
else
#endif
{
lcd_outdezAtt(19*FW, y, cs->v2, m_posHorz==2 ? attr : 0);
lcd_outdezAtt(CSW_3RD_COLUMN, y, cs->v2, m_posHorz==2 ? attr : 0);
v2_min = -125; v2_max = 125;
}
}
// CSW and switch
lcd_putsiAtt(CSW_4TH_COLUMN, y, STR_VSWITCHES_SHORT, cs->andsw, m_posHorz==3 ? attr : 0);
if ((s_editMode>0 || p1valdiff) && attr) {
switch (m_posHorz) {
case 0:
@@ -3178,6 +3207,9 @@ void menuModelCustomSwitches(uint8_t event)
case 2:
CHECK_INCDEC_MODELVAR(event, cs->v2, v2_min, v2_max);
break;
case 3:
CHECK_INCDEC_MODELVAR(event, cs->andsw, 0, 15);
break;
}
}
}
+2 -1
View File
@@ -791,7 +791,7 @@ bool __getSwitch(int8_t swtch)
CustomSwData * cs = cswaddress(cs_idx);
uint8_t s = cs->andsw;
// TODO why? if (s > 8) s += 1;
if (s >= SWSRC_TRN) s += SWSRC_SW3-SWSRC_TRN;
if (cs->func == CS_OFF || (s && !__getSwitch(s))) {
result = false;
}
@@ -3532,6 +3532,7 @@ inline void open9xInit(OPEN9X_INIT_ARGS)
#endif
#if defined(CPUARM)
audioQueue.start();
setBacklight(g_eeGeneral.backlightBright);
#endif
+13 -7
View File
@@ -583,8 +583,10 @@ enum CswFunctions {
#endif
#if defined(PCBX9D)
#define IS_ROTARY_LEFT(evt) (evt==EVT_KEY_FIRST(KEY_MOVE_DOWN) || evt==EVT_KEY_REPT(KEY_MOVE_DOWN))
#define IS_ROTARY_RIGHT(evt) (evt==EVT_KEY_FIRST(KEY_MOVE_UP) || evt==EVT_KEY_REPT(KEY_MOVE_UP))
#define IS_ROTARY_LEFT(evt) (evt==EVT_KEY_FIRST(KEY_MINUS) || evt==EVT_KEY_REPT(KEY_MINUS))
#define IS_ROTARY_RIGHT(evt) (evt==EVT_KEY_FIRST(KEY_PLUS) || evt==EVT_KEY_REPT(KEY_PLUS))
#define IS_ROTARY_UP(evt) (evt==EVT_KEY_FIRST(KEY_PLUS) || evt==EVT_KEY_REPT(KEY_PLUS))
#define IS_ROTARY_DOWN(evt) (evt==EVT_KEY_FIRST(KEY_MINUS) || evt==EVT_KEY_REPT(KEY_MINUS))
#define IS_ROTARY_BREAK(evt) (evt==EVT_KEY_BREAK(KEY_ENTER))
#define IS_ROTARY_LONG(evt) (evt==EVT_KEY_LONG(KEY_ENTER))
#define IS_ROTARY_EVENT(evt) (0)
@@ -595,6 +597,8 @@ enum CswFunctions {
#elif defined(ROTARY_ENCODER_NAVIGATION)
#define IS_ROTARY_LEFT(evt) (evt == EVT_ROTARY_LEFT)
#define IS_ROTARY_RIGHT(evt) (evt == EVT_ROTARY_RIGHT)
#define IS_ROTARY_UP(evt) IS_ROTARY_LEFT(evt)
#define IS_ROTARY_DOWN(evt) IS_ROTARY_RIGHT(evt)
#define IS_ROTARY_BREAK(evt) (evt == EVT_ROTARY_BREAK)
#define IS_ROTARY_LONG(evt) (evt == EVT_ROTARY_LONG)
#define IS_ROTARY_EVENT(evt) (EVT_KEY_MASK(evt) >= 0x0e)
@@ -603,11 +607,13 @@ enum CswFunctions {
#define CASE_EVT_ROTARY_LEFT case EVT_ROTARY_LEFT:
#define CASE_EVT_ROTARY_RIGHT case EVT_ROTARY_RIGHT:
#else
#define IS_ROTARY_LEFT(evt) (0)
#define IS_ROTARY_RIGHT(evt) (0)
#define IS_ROTARY_BREAK(evt) (0)
#define IS_ROTARY_LONG(evt) (0)
#define IS_ROTARY_EVENT(evt) (0)
#define IS_ROTARY_LEFT(evt) (0)
#define IS_ROTARY_RIGHT(evt) (0)
#define IS_ROTARY_UP(evt) (0)
#define IS_ROTARY_DOWN(evt) (0)
#define IS_ROTARY_BREAK(evt) (0)
#define IS_ROTARY_LONG(evt) (0)
#define IS_ROTARY_EVENT(evt) (0)
#define CASE_EVT_ROTARY_BREAK
#define CASE_EVT_ROTARY_LONG
#define CASE_EVT_ROTARY_LEFT
+1
View File
@@ -87,6 +87,7 @@ const pm_char STR_OPEN9X[] PROGMEM =
#endif
ISTR(VKEYS)
ISTR(VSWITCHES)
ISTR(VSWITCHES_SHORT)
ISTR(VSRCRAW)
ISTR(VTMRMODES)
#if defined(PCBGRUVIN9X) || defined (CPUARM)
+3 -1
View File
@@ -137,7 +137,8 @@ extern const pm_char STR_OPEN9X[];
#endif
#define OFS_VKEYS (OFS_ENDHELI)
#define OFS_VSWITCHES (OFS_VKEYS + sizeof(TR_VKEYS))
#define OFS_VSRCRAW (OFS_VSWITCHES + sizeof(TR_VSWITCHES))
#define OFS_VSWITCHES_SHORT (OFS_VSWITCHES + sizeof(TR_VSWITCHES))
#define OFS_VSRCRAW (OFS_VSWITCHES_SHORT + sizeof(TR_VSWITCHES_SHORT))
#define OFS_VTMRMODES (OFS_VSRCRAW + sizeof(TR_VSRCRAW))
#if defined(PCBGRUVIN9X) || defined(CPUARM)
#define OFS_DATETIME (OFS_VTMRMODES + sizeof(TR_VTMRMODES))
@@ -194,6 +195,7 @@ extern const pm_char STR_OPEN9X[];
#define STR_VKEYS (STR_OPEN9X + OFS_VKEYS)
#define STR_VSWITCHES (STR_OPEN9X + OFS_VSWITCHES)
#define STR_VSWITCHES_SHORT (STR_OPEN9X + OFS_VSWITCHES_SHORT)
#define STR_VSRCRAW (STR_OPEN9X + OFS_VSRCRAW)
#define STR_VTMRMODES (STR_OPEN9X + OFS_VTMRMODES)
+3
View File
@@ -297,6 +297,9 @@
#define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_CUSTOMSW " ON"
#endif
#define LEN_VSWITCHES_SHORT "\001"
#define TR_VSWITCHES_SHORT "-012TREAG3456789"
#if defined(PCBX9D)
#define TR_ROTARY_ENCODERS_VSRCRAW
#elif defined(PCBSKY9X)