mirror of
https://github.com/opentx/opentx.git
synced 2025-07-23 16:25:16 +03:00
Telemetry A3/A4 settings and alarms
This commit is contained in:
parent
48a62406f8
commit
375147e4eb
11 changed files with 176 additions and 79 deletions
|
@ -194,6 +194,10 @@ const char * audioFilenames[] = {
|
||||||
"a1_red",
|
"a1_red",
|
||||||
"a2_org",
|
"a2_org",
|
||||||
"a2_red",
|
"a2_red",
|
||||||
|
"a3_org",
|
||||||
|
"a3_red",
|
||||||
|
"a4_org",
|
||||||
|
"a4_red",
|
||||||
"rssi_org",
|
"rssi_org",
|
||||||
"rssi_red",
|
"rssi_red",
|
||||||
"swr_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);
|
audioQueue.playTone(BEEP_DEFAULT_FREQ+150, 120, 20, PLAY_REPEAT(2)|PLAY_NOW);
|
||||||
break;
|
break;
|
||||||
case AU_A1_ORANGE:
|
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);
|
audioQueue.playTone(BEEP_DEFAULT_FREQ+600, 200, 20, PLAY_NOW);
|
||||||
break;
|
break;
|
||||||
case AU_A1_RED:
|
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:
|
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;
|
break;
|
||||||
case AU_RSSI_ORANGE:
|
case AU_RSSI_ORANGE:
|
||||||
audioQueue.playTone(BEEP_DEFAULT_FREQ+1500, 800, 20, PLAY_NOW);
|
audioQueue.playTone(BEEP_DEFAULT_FREQ+1500, 800, 20, PLAY_NOW);
|
||||||
|
|
|
@ -285,6 +285,10 @@ void audioStart();
|
||||||
#define AUDIO_A1_RED() audioEvent(AU_A1_RED)
|
#define AUDIO_A1_RED() audioEvent(AU_A1_RED)
|
||||||
#define AUDIO_A2_ORANGE() audioEvent(AU_A2_ORANGE)
|
#define AUDIO_A2_ORANGE() audioEvent(AU_A2_ORANGE)
|
||||||
#define AUDIO_A2_RED() audioEvent(AU_A2_RED)
|
#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_ORANGE() audioEvent(AU_RSSI_ORANGE)
|
||||||
#define AUDIO_RSSI_RED() audioEvent(AU_RSSI_RED)
|
#define AUDIO_RSSI_RED() audioEvent(AU_RSSI_RED)
|
||||||
#define AUDIO_SWR_RED() audioEvent(AU_SWR_RED)
|
#define AUDIO_SWR_RED() audioEvent(AU_SWR_RED)
|
||||||
|
|
|
@ -5358,6 +5358,18 @@ enum menuModelTelemetryItems {
|
||||||
ITEM_TELEMETRY_A2_OFFSET,
|
ITEM_TELEMETRY_A2_OFFSET,
|
||||||
ITEM_TELEMETRY_A2_ALARM1,
|
ITEM_TELEMETRY_A2_ALARM1,
|
||||||
ITEM_TELEMETRY_A2_ALARM2,
|
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_LABEL,
|
||||||
ITEM_TELEMETRY_RSSI_ALARM1,
|
ITEM_TELEMETRY_RSSI_ALARM1,
|
||||||
ITEM_TELEMETRY_RSSI_ALARM2,
|
ITEM_TELEMETRY_RSSI_ALARM2,
|
||||||
|
@ -5434,11 +5446,11 @@ enum menuModelTelemetryItems {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
#define CHANNEL_ROWS (uint8_t)-1, 1, 0, 0, 0,
|
#define CHANNEL_ROWS (uint8_t)-1, 1, 0, 0, 0
|
||||||
#define RSSI_ROWS (uint8_t)-1, 0, 0,
|
#define RSSI_ROWS (uint8_t)-1, 0, 0
|
||||||
#else
|
#else
|
||||||
#define CHANNEL_ROWS (uint8_t)-1, 1, 0, 2, 2,
|
#define CHANNEL_ROWS (uint8_t)-1, 1, 0, 2, 2
|
||||||
#define RSSI_ROWS (uint8_t)-1, 1, 1,
|
#define RSSI_ROWS (uint8_t)-1, 1, 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(GAUGES)
|
#if defined(GAUGES)
|
||||||
|
@ -5461,7 +5473,7 @@ enum menuModelTelemetryItems {
|
||||||
|
|
||||||
void menuModelTelemetry(uint8_t event)
|
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;
|
uint8_t sub = m_posVert - 1;
|
||||||
|
|
||||||
|
@ -5482,12 +5494,26 @@ void menuModelTelemetry(uint8_t event)
|
||||||
uint8_t k = i + s_pgOfs;
|
uint8_t k = i + s_pgOfs;
|
||||||
uint8_t blink = ((s_editMode>0) ? BLINK|INVERS : INVERS);
|
uint8_t blink = ((s_editMode>0) ? BLINK|INVERS : INVERS);
|
||||||
uint8_t attr = (sub == k ? blink : 0);
|
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];
|
FrSkyChannelData & channel = g_model.frsky.channels[ch];
|
||||||
uint8_t dest=TELEM_A1-1+ch;
|
uint8_t dest = TELEM_A1-1+ch;
|
||||||
switch(k) {
|
switch (k) {
|
||||||
case ITEM_TELEMETRY_A1_LABEL:
|
case ITEM_TELEMETRY_A1_LABEL:
|
||||||
case ITEM_TELEMETRY_A2_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_putsLeft(y, STR_ACHANNEL);
|
||||||
lcd_outdezAtt(2*FW, y, ch+1, 0);
|
lcd_outdezAtt(2*FW, y, ch+1, 0);
|
||||||
putsTelemetryChannel(TELEM_COL2+6*FW, y, dest, frskyData.analog[ch].value, LEFT);
|
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_A1_RANGE:
|
||||||
case ITEM_TELEMETRY_A2_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);
|
lcd_putsLeft(y, STR_RANGE);
|
||||||
putsTelemetryChannel(TELEM_COL2, y, dest, 255-channel.offset, (m_posHorz<=0 ? attr : 0)|NO_UNIT|LEFT);
|
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);
|
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_A1_OFFSET:
|
||||||
case ITEM_TELEMETRY_A2_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);
|
lcd_putsLeft(y, STR_OFFSET);
|
||||||
putsTelemetryChannel(TELEM_COL2, y, dest, 0, LEFT|attr);
|
putsTelemetryChannel(TELEM_COL2, y, dest, 0, LEFT|attr);
|
||||||
if (attr) channel.offset = checkIncDec(event, channel.offset, -256, 256, EE_MODEL);
|
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_A1_ALARM2:
|
||||||
case ITEM_TELEMETRY_A2_ALARM1:
|
case ITEM_TELEMETRY_A2_ALARM1:
|
||||||
case ITEM_TELEMETRY_A2_ALARM2:
|
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)
|
#if defined(PCBTARANIS)
|
||||||
lcd_putsLeft(y, (j==0 ? STR_LOWALARM : STR_CRITICALALARM));
|
lcd_putsLeft(y, (alarm==0 ? STR_LOWALARM : STR_CRITICALALARM));
|
||||||
putsTelemetryChannel(TELEM_COL2, y, dest, channel.alarms_value[j], LEFT|attr);
|
putsTelemetryChannel(TELEM_COL2, y, dest, channel.alarms_value[alarm], LEFT|attr);
|
||||||
if (attr && (s_editMode>0 || p1valdiff)) {
|
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
|
#else
|
||||||
lcd_putsLeft(y, STR_ALARM);
|
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, y, STR_VALARM, ALARM_LEVEL(ch, alarm), 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);
|
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[j], ((m_posHorz<0 || m_posHorz==2) ? attr : 0) | LEFT);
|
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)) {
|
if (attr && (s_editMode>0 || p1valdiff)) {
|
||||||
uint8_t t;
|
uint8_t t;
|
||||||
switch (m_posHorz) {
|
switch (m_posHorz) {
|
||||||
case 0:
|
case 0:
|
||||||
t = ALARM_LEVEL(ch, j);
|
t = ALARM_LEVEL(ch, alarm);
|
||||||
channel.alarms_level = (channel.alarms_level & ~(3<<(2*j))) + (checkIncDecModel(event, t, 0, 3) << (2*j));
|
channel.alarms_level = (channel.alarms_level & ~(3<<(2*alarm))) + (checkIncDecModel(event, t, 0, 3) << (2*alarm));
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
t = ALARM_GREATER(ch, j);
|
t = ALARM_GREATER(ch, alarm);
|
||||||
if (t != checkIncDecModel(event, t, 0, 1)) {
|
if (t != checkIncDecModel(event, t, 0, 1)) {
|
||||||
channel.alarms_greater ^= (1 << j);
|
channel.alarms_greater ^= (1 << alarm);
|
||||||
frskySendAlarms();
|
frskySendAlarms();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5573,26 +5617,26 @@ void menuModelTelemetry(uint8_t event)
|
||||||
|
|
||||||
case ITEM_TELEMETRY_RSSI_ALARM1:
|
case ITEM_TELEMETRY_RSSI_ALARM1:
|
||||||
case ITEM_TELEMETRY_RSSI_ALARM2: {
|
case ITEM_TELEMETRY_RSSI_ALARM2: {
|
||||||
uint8_t j = k-ITEM_TELEMETRY_RSSI_ALARM1;
|
uint8_t alarm = k-ITEM_TELEMETRY_RSSI_ALARM1;
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
lcd_putsLeft(y, (j==0 ? STR_LOWALARM : STR_CRITICALALARM));
|
lcd_putsLeft(y, (alarm==0 ? STR_LOWALARM : STR_CRITICALALARM));
|
||||||
lcd_outdezNAtt(TELEM_COL2, y, getRssiAlarmValue(j), LEFT|attr, 3);
|
lcd_outdezNAtt(TELEM_COL2, y, getRssiAlarmValue(alarm), LEFT|attr, 3);
|
||||||
if (attr && (s_editMode>0 || p1valdiff)) {
|
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
|
#else
|
||||||
lcd_putsLeft(y, STR_ALARM);
|
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_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)) {
|
if (attr && (s_editMode>0 || p1valdiff)) {
|
||||||
switch (m_posHorz) {
|
switch (m_posHorz) {
|
||||||
case 0:
|
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;
|
break;
|
||||||
case 1:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -163,11 +163,6 @@ uint16_t getChannelRatio(uint8_t channel)
|
||||||
|
|
||||||
lcdint_t applyChannelRatio(uint8_t channel, lcdint_t val)
|
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;
|
return ((int32_t)val+g_model.frsky.channels[channel].offset) * getChannelRatio(channel) * 2 / 51;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -330,10 +330,16 @@ getvalue_t getValue(uint8_t i)
|
||||||
#if defined(FRSKY)
|
#if defined(FRSKY)
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
else if (i==MIXSRC_FIRST_TELEM-1+TELEM_SWR) return frskyData.swr.value;
|
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
|
#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_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_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)
|
#if defined(FRSKY_SPORT)
|
||||||
else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ALT) return frskyData.hub.baroAltitude;
|
else if (i==MIXSRC_FIRST_TELEM-1+TELEM_ALT) return frskyData.hub.baroAltitude;
|
||||||
#elif defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
#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_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_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_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_A1) return frskyData.analog[TELEM_ANA_A1].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_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));
|
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
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -984,7 +984,7 @@ enum TelemetryUnit {
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(CPUARM)
|
#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.
|
uint8_t ratio; // 0.0 means not used, 0.1V steps EG. 6.6 Volts = 66. 25.1V = 251, etc.
|
||||||
int16_t offset:12;
|
int16_t offset:12;
|
||||||
uint16_t type:4; // channel unit (0=volts, ...)
|
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
|
uint8_t multiplier; // 0=no multiplier, 1=*2 multiplier
|
||||||
}) FrSkyChannelData;
|
}) FrSkyChannelData;
|
||||||
#else
|
#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.
|
uint8_t ratio; // 0.0 means not used, 0.1V steps EG. 6.6 Volts = 66. 25.1V = 251, etc.
|
||||||
int16_t offset:12;
|
int16_t offset:12;
|
||||||
uint16_t type:4; // channel unit (0=volts, ...)
|
uint16_t type:4; // channel unit (0=volts, ...)
|
||||||
|
@ -1006,12 +1006,6 @@ PACK(typedef struct t_FrSkyChannelData {
|
||||||
}) FrSkyChannelData;
|
}) FrSkyChannelData;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CPUARM)
|
|
||||||
#define TELEM_A_COUNT 4
|
|
||||||
#else
|
|
||||||
#define TELEM_A_COUNT 2
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum TelemetrySource {
|
enum TelemetrySource {
|
||||||
TELEM_NONE,
|
TELEM_NONE,
|
||||||
TELEM_TX_VOLTAGE,
|
TELEM_TX_VOLTAGE,
|
||||||
|
@ -1036,11 +1030,13 @@ enum TelemetrySource {
|
||||||
TELEM_A_FIRST,
|
TELEM_A_FIRST,
|
||||||
TELEM_A1=TELEM_A_FIRST,
|
TELEM_A1=TELEM_A_FIRST,
|
||||||
TELEM_A2,
|
TELEM_A2,
|
||||||
#if defined(CPUARM)
|
#if !defined(CPUARM)
|
||||||
|
TELEM_A_LAST=TELEM_A2,
|
||||||
|
#else
|
||||||
TELEM_A3,
|
TELEM_A3,
|
||||||
TELEM_A4,
|
TELEM_A4,
|
||||||
|
TELEM_A_LAST=TELEM_A4,
|
||||||
#endif
|
#endif
|
||||||
TELEM_A_LAST=TELEM_A_FIRST+TELEM_A_COUNT-1,
|
|
||||||
TELEM_ALT,
|
TELEM_ALT,
|
||||||
TELEM_RPM,
|
TELEM_RPM,
|
||||||
TELEM_FUEL,
|
TELEM_FUEL,
|
||||||
|
@ -1069,11 +1065,15 @@ enum TelemetrySource {
|
||||||
TELEM_RESERVE9,
|
TELEM_RESERVE9,
|
||||||
TELEM_RESERVE10,
|
TELEM_RESERVE10,
|
||||||
#endif
|
#endif
|
||||||
TELEM_MIN_A1,
|
TELEM_MIN_A_FIRST,
|
||||||
|
TELEM_MIN_A1=TELEM_MIN_A_FIRST,
|
||||||
TELEM_MIN_A2,
|
TELEM_MIN_A2,
|
||||||
#if defined(CPUARM)
|
#if !defined(CPUARM)
|
||||||
|
TELEM_MIN_A_LAST=TELEM_MIN_A2,
|
||||||
|
#else
|
||||||
TELEM_MIN_A3,
|
TELEM_MIN_A3,
|
||||||
TELEM_MIN_A4,
|
TELEM_MIN_A4,
|
||||||
|
TELEM_MIN_A_LAST=TELEM_MIN_A4,
|
||||||
#endif
|
#endif
|
||||||
TELEM_MIN_ALT,
|
TELEM_MIN_ALT,
|
||||||
TELEM_MAX_ALT,
|
TELEM_MAX_ALT,
|
||||||
|
|
|
@ -1333,6 +1333,10 @@ enum AUDIO_SOUNDS {
|
||||||
AU_A1_RED,
|
AU_A1_RED,
|
||||||
AU_A2_ORANGE,
|
AU_A2_ORANGE,
|
||||||
AU_A2_RED,
|
AU_A2_RED,
|
||||||
|
AU_A3_ORANGE,
|
||||||
|
AU_A3_RED,
|
||||||
|
AU_A4_ORANGE,
|
||||||
|
AU_A4_RED,
|
||||||
AU_RSSI_ORANGE,
|
AU_RSSI_ORANGE,
|
||||||
AU_RSSI_RED,
|
AU_RSSI_RED,
|
||||||
AU_SWR_RED,
|
AU_SWR_RED,
|
||||||
|
@ -1570,12 +1574,7 @@ getvalue_t convertLswTelemValue(LogicalSwitchData * cs);
|
||||||
|
|
||||||
#if defined(FRSKY) || defined(CPUARM)
|
#if defined(FRSKY) || defined(CPUARM)
|
||||||
lcdint_t applyChannelRatio(uint8_t channel, lcdint_t val);
|
lcdint_t applyChannelRatio(uint8_t channel, lcdint_t val);
|
||||||
#endif
|
#define ANA_CHANNEL_UNIT(channel) g_model.frsky.channels[channel].type
|
||||||
|
|
||||||
#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
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
getvalue_t div10_and_round(getvalue_t value);
|
getvalue_t div10_and_round(getvalue_t value);
|
||||||
|
|
|
@ -249,6 +249,16 @@ NOINLINE void processSerialData(uint8_t data)
|
||||||
#endif
|
#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()
|
void telemetryWakeup()
|
||||||
{
|
{
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
|
@ -310,7 +320,7 @@ void telemetryWakeup()
|
||||||
|
|
||||||
alarmsCheckTime = get_tmr10ms() + 100; /* next check in 1 second */
|
alarmsCheckTime = get_tmr10ms() + 100; /* next check in 1 second */
|
||||||
|
|
||||||
if (alarmsCheckStep == 0) {
|
if (alarmsCheckStep == ALARM_SWR_STEP) {
|
||||||
#if defined(PCBTARANIS)
|
#if defined(PCBTARANIS)
|
||||||
if (IS_FRSKY_SPORT_PROTOCOL() && frskyData.swr.value > 0x33) {
|
if (IS_FRSKY_SPORT_PROTOCOL() && frskyData.swr.value > 0x33) {
|
||||||
AUDIO_SWR_RED();
|
AUDIO_SWR_RED();
|
||||||
|
@ -320,7 +330,7 @@ void telemetryWakeup()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if (TELEMETRY_STREAMING()) {
|
else if (TELEMETRY_STREAMING()) {
|
||||||
if (alarmsCheckStep == 1) {
|
if (alarmsCheckStep == ALARM_RSSI_STEP) {
|
||||||
if (getRssiAlarmValue(1) && frskyData.rssi[0].value < getRssiAlarmValue(1)) {
|
if (getRssiAlarmValue(1) && frskyData.rssi[0].value < getRssiAlarmValue(1)) {
|
||||||
AUDIO_RSSI_RED();
|
AUDIO_RSSI_RED();
|
||||||
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
|
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
|
||||||
|
@ -330,29 +340,49 @@ void telemetryWakeup()
|
||||||
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
|
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (alarmsCheckStep == 2) {
|
else if (alarmsCheckStep == ALARM_A1_STEP) {
|
||||||
if (alarmRaised(1, 1)) {
|
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();
|
AUDIO_A2_RED();
|
||||||
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
|
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
|
||||||
}
|
}
|
||||||
else if (alarmRaised(1, 0)) {
|
else if (alarmRaised(TELEM_ANA_A2, 0)) {
|
||||||
AUDIO_A2_ORANGE();
|
AUDIO_A2_ORANGE();
|
||||||
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
|
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (alarmsCheckStep == 3) {
|
else if (alarmsCheckStep == ALARM_A3_STEP) {
|
||||||
if (alarmRaised(0, 1)) {
|
if (alarmRaised(TELEM_ANA_A3, 1)) {
|
||||||
AUDIO_A1_RED();
|
AUDIO_A3_RED();
|
||||||
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
|
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
|
||||||
}
|
}
|
||||||
else if (alarmRaised(0, 0)) {
|
else if (alarmRaised(TELEM_ANA_A3, 0)) {
|
||||||
AUDIO_A1_ORANGE();
|
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 */
|
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (++alarmsCheckStep == 4) {
|
if (++alarmsCheckStep == ALARM_STEPS_COUNT) {
|
||||||
alarmsCheckStep = 0;
|
alarmsCheckStep = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -465,8 +495,8 @@ void telemetryReset()
|
||||||
#endif
|
#endif
|
||||||
frskyData.rssi[0].value = 75;
|
frskyData.rssi[0].value = 75;
|
||||||
frskyData.rssi[1].value = 75;
|
frskyData.rssi[1].value = 75;
|
||||||
frskyData.analog[0].set(120, UNIT_VOLTS);
|
frskyData.analog[TELEM_ANA_A1].set(120, UNIT_VOLTS);
|
||||||
frskyData.analog[1].set(240, UNIT_VOLTS);
|
frskyData.analog[TELEM_ANA_A2].set(240, UNIT_VOLTS);
|
||||||
frskyData.hub.fuelLevel = 75;
|
frskyData.hub.fuelLevel = 75;
|
||||||
frskyData.hub.rpm = 12000;
|
frskyData.hub.rpm = 12000;
|
||||||
frskyData.hub.vfas = 100;
|
frskyData.hub.vfas = 100;
|
||||||
|
|
|
@ -281,8 +281,19 @@ PACK(struct FrskySerialData {
|
||||||
});
|
});
|
||||||
#endif
|
#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 {
|
struct FrskyData {
|
||||||
FrskyValueWithMinMax analog[TELEM_A_COUNT];
|
FrskyValueWithMinMax analog[TELEM_ANA_COUNT];
|
||||||
FrskyValueWithMin rssi[2];
|
FrskyValueWithMin rssi[2];
|
||||||
#if defined(CPUARM)
|
#if defined(CPUARM)
|
||||||
FrskyValueWithMin swr;
|
FrskyValueWithMin swr;
|
||||||
|
|
|
@ -296,8 +296,8 @@ void frskyDProcessPacket(uint8_t *packet)
|
||||||
{
|
{
|
||||||
case LINKPKT: // A1/A2/RSSI values
|
case LINKPKT: // A1/A2/RSSI values
|
||||||
{
|
{
|
||||||
frskyData.analog[0].set(packet[1], g_model.frsky.channels[0].type);
|
frskyData.analog[TELEM_ANA_A1].set(packet[1], g_model.frsky.channels[TELEM_ANA_A1].type);
|
||||||
frskyData.analog[1].set(packet[2], g_model.frsky.channels[1].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[0].set(packet[3]);
|
||||||
frskyData.rssi[1].set(packet[4] / 2);
|
frskyData.rssi[1].set(packet[4] / 2);
|
||||||
frskyStreaming = FRSKY_TIMEOUT10ms; // reset counter only if valid frsky packets are being detected
|
frskyStreaming = FRSKY_TIMEOUT10ms; // reset counter only if valid frsky packets are being detected
|
||||||
|
|
|
@ -321,7 +321,7 @@ void frskySportProcessPacket(uint8_t *packet)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else if (appId == BATT_ID) {
|
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) {
|
else if ((appId >> 8) == 0) {
|
||||||
// The old FrSky IDs
|
// The old FrSky IDs
|
||||||
|
@ -464,10 +464,10 @@ void frskySportProcessPacket(uint8_t *packet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (appId >= A3_FIRST_ID && appId <= A3_LAST_ID) {
|
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) {
|
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) {
|
else if (appId >= CELLS_FIRST_ID && appId <= CELLS_LAST_ID) {
|
||||||
uint32_t cells = SPORT_DATA_U32(packet);
|
uint32_t cells = SPORT_DATA_U32(packet);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue