diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index f587cad6c..089a604e3 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -194,6 +194,10 @@ const char * audioFilenames[] = { "a1_red", "a2_org", "a2_red", + "a3_org", + "a3_red", + "a4_org", + "a4_red", "rssi_org", "rssi_red", "swr_red", @@ -1061,16 +1065,16 @@ void audioEvent(uint8_t e, uint16_t f) audioQueue.playTone(BEEP_DEFAULT_FREQ+150, 120, 20, PLAY_REPEAT(2)|PLAY_NOW); break; case AU_A1_ORANGE: + case AU_A2_ORANGE: + case AU_A3_ORANGE: + case AU_A4_ORANGE: audioQueue.playTone(BEEP_DEFAULT_FREQ+600, 200, 20, PLAY_NOW); break; case AU_A1_RED: - audioQueue.playTone(BEEP_DEFAULT_FREQ+600, 200, 20, PLAY_REPEAT(1)|PLAY_NOW); - break; - case AU_A2_ORANGE: - audioQueue.playTone(BEEP_DEFAULT_FREQ+1500, 200, 20, PLAY_NOW); - break; case AU_A2_RED: - audioQueue.playTone(BEEP_DEFAULT_FREQ+1500, 200, 20, PLAY_REPEAT(1)|PLAY_NOW); + case AU_A3_RED: + case AU_A4_RED: + audioQueue.playTone(BEEP_DEFAULT_FREQ+600, 200, 20, PLAY_REPEAT(1)|PLAY_NOW); break; case AU_RSSI_ORANGE: audioQueue.playTone(BEEP_DEFAULT_FREQ+1500, 800, 20, PLAY_NOW); diff --git a/radio/src/audio_arm.h b/radio/src/audio_arm.h index fa0478010..b0dccb080 100644 --- a/radio/src/audio_arm.h +++ b/radio/src/audio_arm.h @@ -285,6 +285,10 @@ void audioStart(); #define AUDIO_A1_RED() audioEvent(AU_A1_RED) #define AUDIO_A2_ORANGE() audioEvent(AU_A2_ORANGE) #define AUDIO_A2_RED() audioEvent(AU_A2_RED) +#define AUDIO_A3_ORANGE() audioEvent(AU_A3_ORANGE) +#define AUDIO_A3_RED() audioEvent(AU_A3_RED) +#define AUDIO_A4_ORANGE() audioEvent(AU_A4_ORANGE) +#define AUDIO_A4_RED() audioEvent(AU_A4_RED) #define AUDIO_RSSI_ORANGE() audioEvent(AU_RSSI_ORANGE) #define AUDIO_RSSI_RED() audioEvent(AU_RSSI_RED) #define AUDIO_SWR_RED() audioEvent(AU_SWR_RED) diff --git a/radio/src/gui/menu_model.cpp b/radio/src/gui/menu_model.cpp index 0622ce758..36f3bde08 100644 --- a/radio/src/gui/menu_model.cpp +++ b/radio/src/gui/menu_model.cpp @@ -5358,6 +5358,18 @@ enum menuModelTelemetryItems { ITEM_TELEMETRY_A2_OFFSET, ITEM_TELEMETRY_A2_ALARM1, ITEM_TELEMETRY_A2_ALARM2, +#if defined(CPUARM) + ITEM_TELEMETRY_A3_LABEL, + ITEM_TELEMETRY_A3_RANGE, + ITEM_TELEMETRY_A3_OFFSET, + ITEM_TELEMETRY_A3_ALARM1, + ITEM_TELEMETRY_A3_ALARM2, + ITEM_TELEMETRY_A4_LABEL, + ITEM_TELEMETRY_A4_RANGE, + ITEM_TELEMETRY_A4_OFFSET, + ITEM_TELEMETRY_A4_ALARM1, + ITEM_TELEMETRY_A4_ALARM2, +#endif ITEM_TELEMETRY_RSSI_LABEL, ITEM_TELEMETRY_RSSI_ALARM1, ITEM_TELEMETRY_RSSI_ALARM2, @@ -5434,11 +5446,11 @@ enum menuModelTelemetryItems { #endif #if defined(PCBTARANIS) - #define CHANNEL_ROWS (uint8_t)-1, 1, 0, 0, 0, - #define RSSI_ROWS (uint8_t)-1, 0, 0, + #define CHANNEL_ROWS (uint8_t)-1, 1, 0, 0, 0 + #define RSSI_ROWS (uint8_t)-1, 0, 0 #else - #define CHANNEL_ROWS (uint8_t)-1, 1, 0, 2, 2, - #define RSSI_ROWS (uint8_t)-1, 1, 1, + #define CHANNEL_ROWS (uint8_t)-1, 1, 0, 2, 2 + #define RSSI_ROWS (uint8_t)-1, 1, 1 #endif #if defined(GAUGES) @@ -5461,7 +5473,7 @@ enum menuModelTelemetryItems { void menuModelTelemetry(uint8_t event) { - MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX+1, {0, CHANNEL_ROWS CHANNEL_ROWS RSSI_ROWS USRDATA_LINES 0, 0, IF_FAS_OFFSET(0) CASE_CPUARM(0) CASE_VARIO(LABEL(Vario)) CASE_VARIO(0) CASE_VARIO(VARIO_RANGE_ROWS) CASE_PCBTARANIS(LABEL(TopBar)) CASE_PCBTARANIS(0) SCREEN_TYPE_ROWS, 2, 2, 2, 2, SCREEN_TYPE_ROWS, 2, 2, 2, 2, CASE_CPUARM(SCREEN_TYPE_ROWS) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2) }); + MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX+1, {0, CHANNEL_ROWS, CHANNEL_ROWS, CASE_CPUARM(CHANNEL_ROWS) CASE_CPUARM(CHANNEL_ROWS) RSSI_ROWS, USRDATA_LINES 0, 0, IF_FAS_OFFSET(0) CASE_CPUARM(0) CASE_VARIO(LABEL(Vario)) CASE_VARIO(0) CASE_VARIO(VARIO_RANGE_ROWS) CASE_PCBTARANIS(LABEL(TopBar)) CASE_PCBTARANIS(0) SCREEN_TYPE_ROWS, 2, 2, 2, 2, SCREEN_TYPE_ROWS, 2, 2, 2, 2, CASE_CPUARM(SCREEN_TYPE_ROWS) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2) }); uint8_t sub = m_posVert - 1; @@ -5482,12 +5494,26 @@ void menuModelTelemetry(uint8_t event) uint8_t k = i + s_pgOfs; uint8_t blink = ((s_editMode>0) ? BLINK|INVERS : INVERS); uint8_t attr = (sub == k ? blink : 0); - uint8_t ch = (k >= ITEM_TELEMETRY_A2_LABEL) ? 1 : 0; +#if defined(CPUARM) + uint8_t ch = TELEM_ANA_A1; + if (k >= ITEM_TELEMETRY_A4_LABEL) + ch = TELEM_ANA_A4; + else if (k >= ITEM_TELEMETRY_A3_LABEL) + ch = TELEM_ANA_A3; + else if (k >= ITEM_TELEMETRY_A2_LABEL) + ch = TELEM_ANA_A2; +#else + uint8_t ch = (k >= ITEM_TELEMETRY_A2_LABEL) ? TELEM_ANA_A2 : TELEM_ANA_A1; +#endif FrSkyChannelData & channel = g_model.frsky.channels[ch]; - uint8_t dest=TELEM_A1-1+ch; - switch(k) { + uint8_t dest = TELEM_A1-1+ch; + switch (k) { case ITEM_TELEMETRY_A1_LABEL: case ITEM_TELEMETRY_A2_LABEL: +#if defined(CPUARM) + case ITEM_TELEMETRY_A3_LABEL: + case ITEM_TELEMETRY_A4_LABEL: +#endif lcd_putsLeft(y, STR_ACHANNEL); lcd_outdezAtt(2*FW, y, ch+1, 0); putsTelemetryChannel(TELEM_COL2+6*FW, y, dest, frskyData.analog[ch].value, LEFT); @@ -5495,6 +5521,10 @@ void menuModelTelemetry(uint8_t event) case ITEM_TELEMETRY_A1_RANGE: case ITEM_TELEMETRY_A2_RANGE: +#if defined(CPUARM) + case ITEM_TELEMETRY_A3_RANGE: + case ITEM_TELEMETRY_A4_RANGE: +#endif lcd_putsLeft(y, STR_RANGE); 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!=0 ? attr : 0); @@ -5521,6 +5551,10 @@ void menuModelTelemetry(uint8_t event) case ITEM_TELEMETRY_A1_OFFSET: case ITEM_TELEMETRY_A2_OFFSET: +#if defined(CPUARM) + case ITEM_TELEMETRY_A3_OFFSET: + case ITEM_TELEMETRY_A4_OFFSET: +#endif lcd_putsLeft(y, STR_OFFSET); putsTelemetryChannel(TELEM_COL2, y, dest, 0, LEFT|attr); if (attr) channel.offset = checkIncDec(event, channel.offset, -256, 256, EE_MODEL); @@ -5530,36 +5564,46 @@ void menuModelTelemetry(uint8_t event) case ITEM_TELEMETRY_A1_ALARM2: case ITEM_TELEMETRY_A2_ALARM1: case ITEM_TELEMETRY_A2_ALARM2: +#if defined(CPUARM) + case ITEM_TELEMETRY_A3_ALARM1: + case ITEM_TELEMETRY_A3_ALARM2: + case ITEM_TELEMETRY_A4_ALARM1: + case ITEM_TELEMETRY_A4_ALARM2: +#endif { - uint8_t j = ((k==ITEM_TELEMETRY_A1_ALARM1 || k==ITEM_TELEMETRY_A2_ALARM1) ? 0 : 1); +#if defined(CPUARM) + uint8_t alarm = ((k==ITEM_TELEMETRY_A1_ALARM1 || k==ITEM_TELEMETRY_A2_ALARM1 || k==ITEM_TELEMETRY_A3_ALARM1 || k==ITEM_TELEMETRY_A4_ALARM1) ? 0 : 1); +#else + uint8_t alarm = ((k==ITEM_TELEMETRY_A1_ALARM1 || k==ITEM_TELEMETRY_A2_ALARM1) ? 0 : 1); +#endif #if defined(PCBTARANIS) - lcd_putsLeft(y, (j==0 ? STR_LOWALARM : STR_CRITICALALARM)); - putsTelemetryChannel(TELEM_COL2, y, dest, channel.alarms_value[j], LEFT|attr); + lcd_putsLeft(y, (alarm==0 ? STR_LOWALARM : STR_CRITICALALARM)); + putsTelemetryChannel(TELEM_COL2, y, dest, channel.alarms_value[alarm], LEFT|attr); if (attr && (s_editMode>0 || p1valdiff)) { - channel.alarms_value[j] = checkIncDec(event, channel.alarms_value[j], 0, 255, EE_MODEL); + channel.alarms_value[alarm] = checkIncDec(event, channel.alarms_value[alarm], 0, 255, EE_MODEL); } #else lcd_putsLeft(y, STR_ALARM); - 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<0 || m_posHorz==1) ? attr : 0); - putsTelemetryChannel(TELEM_COL2+6*FW, y, dest, channel.alarms_value[j], ((m_posHorz<0 || m_posHorz==2) ? attr : 0) | LEFT); + lcd_putsiAtt(TELEM_COL2, y, STR_VALARM, ALARM_LEVEL(ch, alarm), m_posHorz<=0 ? attr : 0); + lcd_putsiAtt(TELEM_COL2+4*FW, y, STR_VALARMFN, ALARM_GREATER(ch, alarm), (m_posHorz<0 || m_posHorz==1) ? attr : 0); + putsTelemetryChannel(TELEM_COL2+6*FW, y, dest, channel.alarms_value[alarm], ((m_posHorz<0 || m_posHorz==2) ? attr : 0) | LEFT); if (attr && (s_editMode>0 || p1valdiff)) { uint8_t t; switch (m_posHorz) { case 0: - t = ALARM_LEVEL(ch, j); - channel.alarms_level = (channel.alarms_level & ~(3<<(2*j))) + (checkIncDecModel(event, t, 0, 3) << (2*j)); + t = ALARM_LEVEL(ch, alarm); + channel.alarms_level = (channel.alarms_level & ~(3<<(2*alarm))) + (checkIncDecModel(event, t, 0, 3) << (2*alarm)); break; case 1: - t = ALARM_GREATER(ch, j); + t = ALARM_GREATER(ch, alarm); if (t != checkIncDecModel(event, t, 0, 1)) { - channel.alarms_greater ^= (1 << j); + channel.alarms_greater ^= (1 << alarm); frskySendAlarms(); } break; case 2: - channel.alarms_value[j] = checkIncDec(event, channel.alarms_value[j], 0, 255, EE_MODEL); + channel.alarms_value[alarm] = checkIncDec(event, channel.alarms_value[alarm], 0, 255, EE_MODEL); break; } } @@ -5573,26 +5617,26 @@ void menuModelTelemetry(uint8_t event) case ITEM_TELEMETRY_RSSI_ALARM1: case ITEM_TELEMETRY_RSSI_ALARM2: { - uint8_t j = k-ITEM_TELEMETRY_RSSI_ALARM1; + uint8_t alarm = k-ITEM_TELEMETRY_RSSI_ALARM1; #if defined(PCBTARANIS) - lcd_putsLeft(y, (j==0 ? STR_LOWALARM : STR_CRITICALALARM)); - lcd_outdezNAtt(TELEM_COL2, y, getRssiAlarmValue(j), LEFT|attr, 3); + lcd_putsLeft(y, (alarm==0 ? STR_LOWALARM : STR_CRITICALALARM)); + lcd_outdezNAtt(TELEM_COL2, y, getRssiAlarmValue(alarm), LEFT|attr, 3); if (attr && (s_editMode>0 || p1valdiff)) { - CHECK_INCDEC_MODELVAR(event, g_model.frsky.rssiAlarms[j].value, -30, 30); + CHECK_INCDEC_MODELVAR(event, g_model.frsky.rssiAlarms[alarm].value, -30, 30); } #else lcd_putsLeft(y, STR_ALARM); - lcd_putsiAtt(TELEM_COL2, y, STR_VALARM, ((2+j+g_model.frsky.rssiAlarms[j].level)%4), m_posHorz<=0 ? attr : 0); + lcd_putsiAtt(TELEM_COL2, y, STR_VALARM, ((2+alarm+g_model.frsky.rssiAlarms[alarm].level)%4), m_posHorz<=0 ? attr : 0); lcd_putc(TELEM_COL2+4*FW, y, '<'); - lcd_outdezNAtt(TELEM_COL2+6*FW, y, getRssiAlarmValue(j), LEFT|(m_posHorz!=0 ? attr : 0), 3); + lcd_outdezNAtt(TELEM_COL2+6*FW, y, getRssiAlarmValue(alarm), LEFT|(m_posHorz!=0 ? attr : 0), 3); if (attr && (s_editMode>0 || p1valdiff)) { switch (m_posHorz) { case 0: - CHECK_INCDEC_MODELVAR(event, g_model.frsky.rssiAlarms[j].level, -3, 2); // circular (saves flash) + CHECK_INCDEC_MODELVAR(event, g_model.frsky.rssiAlarms[alarm].level, -3, 2); // circular (saves flash) break; case 1: - CHECK_INCDEC_MODELVAR(event, g_model.frsky.rssiAlarms[j].value, -30, 30); + CHECK_INCDEC_MODELVAR(event, g_model.frsky.rssiAlarms[alarm].value, -30, 30); break; } } diff --git a/radio/src/maths.cpp b/radio/src/maths.cpp index 25b2716ef..2d07eb27c 100644 --- a/radio/src/maths.cpp +++ b/radio/src/maths.cpp @@ -163,11 +163,6 @@ uint16_t getChannelRatio(uint8_t channel) lcdint_t applyChannelRatio(uint8_t channel, lcdint_t val) { -#if defined(CPUARM) - // A3 and A4 don't have ratio settings - if (channel > 1) - return val; -#endif return ((int32_t)val+g_model.frsky.channels[channel].offset) * getChannelRatio(channel) * 2 / 51; } #endif diff --git a/radio/src/mixer.cpp b/radio/src/mixer.cpp index 38bcc643c..caaf064de 100755 --- a/radio/src/mixer.cpp +++ b/radio/src/mixer.cpp @@ -330,10 +330,16 @@ getvalue_t getValue(uint8_t i) #if defined(FRSKY) #if defined(CPUARM) else if (i==MIXSRC_FIRST_TELEM-1+TELEM_SWR) return frskyData.swr.value; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RX_VOLTAGE) return frskyData.analog[TELEM_ANA_RxBatt].value; #endif else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RSSI_TX) return frskyData.rssi[1].value; else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RSSI_RX) return frskyData.rssi[0].value; - else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_A_LAST) return frskyData.analog[i-MIXSRC_FIRST_TELEM+1-TELEM_A1].value; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_A1) return frskyData.analog[TELEM_ANA_A1].value; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_A2) return frskyData.analog[TELEM_ANA_A2].value; +#if defined(CPUARM) + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_A3) return frskyData.analog[TELEM_ANA_A3].value; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_A4) return frskyData.analog[TELEM_ANA_A4].value; +#endif #if defined(FRSKY_SPORT) else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ALT) return frskyData.hub.baroAltitude; #elif defined(FRSKY_HUB) || defined(WS_HOW_HIGH) @@ -360,8 +366,12 @@ getvalue_t getValue(uint8_t i) else if (i==MIXSRC_FIRST_TELEM-1+TELEM_VSPEED) return frskyData.hub.varioSpeed; else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ASPEED) return frskyData.hub.airSpeed; else if (i==MIXSRC_FIRST_TELEM-1+TELEM_DTE) return frskyData.hub.dTE; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_MIN_A1) return frskyData.analog[0].min; - else if (i==MIXSRC_FIRST_TELEM-1+TELEM_MIN_A2) return frskyData.analog[1].min; + else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_MIN_A1) return frskyData.analog[TELEM_ANA_A1].min; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_MIN_A2) return frskyData.analog[TELEM_ANA_A2].min; +#if defined(CPUARM) + else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_MIN_A3) return frskyData.analog[TELEM_ANA_A3].min; + else if (i==MIXSRC_FIRST_TELEM-1+TELEM_MIN_A4) return frskyData.analog[TELEM_ANA_A4].min; +#endif else if (i<=MIXSRC_FIRST_TELEM-1+TELEM_CSW_MAX) return *(((int16_t*)(&frskyData.hub.minAltitude))+i-(MIXSRC_FIRST_TELEM-1+TELEM_MIN_ALT)); #endif #endif diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 5165e5f0b..a9f4cf6c5 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -984,7 +984,7 @@ enum TelemetryUnit { }; #if defined(CPUARM) -PACK(typedef struct t_FrSkyChannelData { +PACK(typedef struct { uint8_t ratio; // 0.0 means not used, 0.1V steps EG. 6.6 Volts = 66. 25.1V = 251, etc. int16_t offset:12; uint16_t type:4; // channel unit (0=volts, ...) @@ -995,7 +995,7 @@ PACK(typedef struct t_FrSkyChannelData { uint8_t multiplier; // 0=no multiplier, 1=*2 multiplier }) FrSkyChannelData; #else -PACK(typedef struct t_FrSkyChannelData { +PACK(typedef struct { uint8_t ratio; // 0.0 means not used, 0.1V steps EG. 6.6 Volts = 66. 25.1V = 251, etc. int16_t offset:12; uint16_t type:4; // channel unit (0=volts, ...) @@ -1006,12 +1006,6 @@ PACK(typedef struct t_FrSkyChannelData { }) FrSkyChannelData; #endif -#if defined(CPUARM) - #define TELEM_A_COUNT 4 -#else - #define TELEM_A_COUNT 2 -#endif - enum TelemetrySource { TELEM_NONE, TELEM_TX_VOLTAGE, @@ -1036,11 +1030,13 @@ enum TelemetrySource { TELEM_A_FIRST, TELEM_A1=TELEM_A_FIRST, TELEM_A2, -#if defined(CPUARM) +#if !defined(CPUARM) + TELEM_A_LAST=TELEM_A2, +#else TELEM_A3, TELEM_A4, + TELEM_A_LAST=TELEM_A4, #endif - TELEM_A_LAST=TELEM_A_FIRST+TELEM_A_COUNT-1, TELEM_ALT, TELEM_RPM, TELEM_FUEL, @@ -1069,11 +1065,15 @@ enum TelemetrySource { TELEM_RESERVE9, TELEM_RESERVE10, #endif - TELEM_MIN_A1, + TELEM_MIN_A_FIRST, + TELEM_MIN_A1=TELEM_MIN_A_FIRST, TELEM_MIN_A2, -#if defined(CPUARM) +#if !defined(CPUARM) + TELEM_MIN_A_LAST=TELEM_MIN_A2, +#else TELEM_MIN_A3, TELEM_MIN_A4, + TELEM_MIN_A_LAST=TELEM_MIN_A4, #endif TELEM_MIN_ALT, TELEM_MAX_ALT, diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 8be4c8068..6dd2f110d 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1333,6 +1333,10 @@ enum AUDIO_SOUNDS { AU_A1_RED, AU_A2_ORANGE, AU_A2_RED, + AU_A3_ORANGE, + AU_A3_RED, + AU_A4_ORANGE, + AU_A4_RED, AU_RSSI_ORANGE, AU_RSSI_RED, AU_SWR_RED, @@ -1570,12 +1574,7 @@ getvalue_t convertLswTelemValue(LogicalSwitchData * cs); #if defined(FRSKY) || defined(CPUARM) lcdint_t applyChannelRatio(uint8_t channel, lcdint_t val); -#endif - -#if defined(CPUARM) - #define ANA_CHANNEL_UNIT(channel) (channel > 1 ? UNIT_VOLTS : g_model.frsky.channels[channel].type) -#else - #define ANA_CHANNEL_UNIT(channel) g_model.frsky.channels[channel].type +#define ANA_CHANNEL_UNIT(channel) g_model.frsky.channels[channel].type #endif getvalue_t div10_and_round(getvalue_t value); diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index e42825aee..06fd308e5 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -249,6 +249,16 @@ NOINLINE void processSerialData(uint8_t data) #endif } +enum AlarmsCheckSteps { + ALARM_SWR_STEP, + ALARM_RSSI_STEP, + ALARM_A1_STEP, + ALARM_A2_STEP, + ALARM_A3_STEP, + ALARM_A4_STEP, + ALARM_STEPS_COUNT +}; + void telemetryWakeup() { #if defined(CPUARM) @@ -310,7 +320,7 @@ void telemetryWakeup() alarmsCheckTime = get_tmr10ms() + 100; /* next check in 1 second */ - if (alarmsCheckStep == 0) { + if (alarmsCheckStep == ALARM_SWR_STEP) { #if defined(PCBTARANIS) if (IS_FRSKY_SPORT_PROTOCOL() && frskyData.swr.value > 0x33) { AUDIO_SWR_RED(); @@ -320,7 +330,7 @@ void telemetryWakeup() #endif } else if (TELEMETRY_STREAMING()) { - if (alarmsCheckStep == 1) { + if (alarmsCheckStep == ALARM_RSSI_STEP) { if (getRssiAlarmValue(1) && frskyData.rssi[0].value < getRssiAlarmValue(1)) { AUDIO_RSSI_RED(); alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */ @@ -330,29 +340,49 @@ void telemetryWakeup() alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */ } } - else if (alarmsCheckStep == 2) { - if (alarmRaised(1, 1)) { + else if (alarmsCheckStep == ALARM_A1_STEP) { + if (alarmRaised(TELEM_ANA_A1, 1)) { + AUDIO_A1_RED(); + alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */ + } + else if (alarmRaised(TELEM_ANA_A1, 0)) { + AUDIO_A1_ORANGE(); + alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */ + } + } + else if (alarmsCheckStep == ALARM_A2_STEP) { + if (alarmRaised(TELEM_ANA_A2, 1)) { AUDIO_A2_RED(); alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */ } - else if (alarmRaised(1, 0)) { + else if (alarmRaised(TELEM_ANA_A2, 0)) { AUDIO_A2_ORANGE(); alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */ } } - else if (alarmsCheckStep == 3) { - if (alarmRaised(0, 1)) { - AUDIO_A1_RED(); + else if (alarmsCheckStep == ALARM_A3_STEP) { + if (alarmRaised(TELEM_ANA_A3, 1)) { + AUDIO_A3_RED(); alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */ } - else if (alarmRaised(0, 0)) { - AUDIO_A1_ORANGE(); + else if (alarmRaised(TELEM_ANA_A3, 0)) { + AUDIO_A3_ORANGE(); + alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */ + } + } + else if (alarmsCheckStep == ALARM_A4_STEP) { + if (alarmRaised(TELEM_ANA_A4, 1)) { + AUDIO_A4_RED(); + alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */ + } + else if (alarmRaised(TELEM_ANA_A4, 0)) { + AUDIO_A4_ORANGE(); alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */ } } } - if (++alarmsCheckStep == 4) { + if (++alarmsCheckStep == ALARM_STEPS_COUNT) { alarmsCheckStep = 0; } } @@ -465,8 +495,8 @@ void telemetryReset() #endif frskyData.rssi[0].value = 75; frskyData.rssi[1].value = 75; - frskyData.analog[0].set(120, UNIT_VOLTS); - frskyData.analog[1].set(240, UNIT_VOLTS); + frskyData.analog[TELEM_ANA_A1].set(120, UNIT_VOLTS); + frskyData.analog[TELEM_ANA_A2].set(240, UNIT_VOLTS); frskyData.hub.fuelLevel = 75; frskyData.hub.rpm = 12000; frskyData.hub.vfas = 100; diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index 90070e8be..e0cc2519d 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -281,8 +281,19 @@ PACK(struct FrskySerialData { }); #endif +enum TelemAnas { + TELEM_ANA_A1, + TELEM_ANA_A2, +#if defined(CPUARM) + TELEM_ANA_A3, + TELEM_ANA_A4, + TELEM_ANA_RxBatt, +#endif + TELEM_ANA_COUNT +}; + struct FrskyData { - FrskyValueWithMinMax analog[TELEM_A_COUNT]; + FrskyValueWithMinMax analog[TELEM_ANA_COUNT]; FrskyValueWithMin rssi[2]; #if defined(CPUARM) FrskyValueWithMin swr; diff --git a/radio/src/telemetry/frsky_d.cpp b/radio/src/telemetry/frsky_d.cpp index 85fd5a9fa..8a69433c4 100644 --- a/radio/src/telemetry/frsky_d.cpp +++ b/radio/src/telemetry/frsky_d.cpp @@ -296,8 +296,8 @@ void frskyDProcessPacket(uint8_t *packet) { case LINKPKT: // A1/A2/RSSI values { - frskyData.analog[0].set(packet[1], g_model.frsky.channels[0].type); - frskyData.analog[1].set(packet[2], g_model.frsky.channels[1].type); + frskyData.analog[TELEM_ANA_A1].set(packet[1], g_model.frsky.channels[TELEM_ANA_A1].type); + frskyData.analog[TELEM_ANA_A2].set(packet[2], g_model.frsky.channels[TELEM_ANA_A2].type); frskyData.rssi[0].set(packet[3]); frskyData.rssi[1].set(packet[4] / 2); frskyStreaming = FRSKY_TIMEOUT10ms; // reset counter only if valid frsky packets are being detected diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index bdca730ba..13253ae67 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -321,7 +321,7 @@ void frskySportProcessPacket(uint8_t *packet) #endif } else if (appId == BATT_ID) { - frskyData.analog[0].set(SPORT_DATA_U8(packet), g_model.frsky.channels[0].type); + frskyData.analog[TELEM_ANA_RxBatt].set(SPORT_DATA_U32(packet), UNIT_VOLTS); } else if ((appId >> 8) == 0) { // The old FrSky IDs @@ -464,10 +464,10 @@ void frskySportProcessPacket(uint8_t *packet) } } else if (appId >= A3_FIRST_ID && appId <= A3_LAST_ID) { - frskyData.analog[2].set(SPORT_DATA_U32(packet), 0); + frskyData.analog[TELEM_ANA_A3].set(SPORT_DATA_U32(packet), UNIT_VOLTS); } else if (appId >= A4_FIRST_ID && appId <= A4_LAST_ID) { - frskyData.analog[3].set(SPORT_DATA_U32(packet), 0); + frskyData.analog[TELEM_ANA_A4].set(SPORT_DATA_U32(packet), UNIT_VOLTS); } else if (appId >= CELLS_FIRST_ID && appId <= CELLS_LAST_ID) { uint32_t cells = SPORT_DATA_U32(packet);