mirror of
https://github.com/opentx/opentx.git
synced 2025-07-26 17:55:19 +03:00
RSSI alarms are now stored in ModelData. Alarms disabled on Quiet mode, re-enabled when not Quiet mode.
This commit is contained in:
parent
e7e7a6ca97
commit
03fd1e3b01
12 changed files with 61 additions and 38 deletions
|
@ -42,6 +42,7 @@
|
|||
#define ALRM_REQUEST 0xf8
|
||||
#define RSSI1PKT 0xf7
|
||||
#define RSSI2PKT 0xf6
|
||||
#define RSSI_REQUEST 0xf1
|
||||
|
||||
#define START_STOP 0x7e
|
||||
#define BYTESTUFF 0x7d
|
||||
|
@ -234,7 +235,6 @@ void processFrskyPacket(uint8_t *packet)
|
|||
frskyRSSI[0].set(packet[3]);
|
||||
frskyRSSI[1].set(packet[4] / 2);
|
||||
break;
|
||||
|
||||
#if defined(FRSKY_HUB) || defined (WS_HOW_HIGH)
|
||||
case USRPKT: // User Data packet
|
||||
uint8_t numBytes = 3 + (packet[1] & 0x07); // sanitize in case of data corruption leading to buffer overflow
|
||||
|
@ -403,7 +403,7 @@ void FRSKY10mspoll(void)
|
|||
// Now send a packet
|
||||
FrskyAlarmSendState -= 1 ;
|
||||
uint8_t alarm = 1 - (FrskyAlarmSendState % 2);
|
||||
if (FrskyAlarmSendState < SEND_MODEL_ALARMS) {
|
||||
if (FrskyAlarmSendState < 4) {
|
||||
uint8_t channel = 1 - (FrskyAlarmSendState / 2);
|
||||
*ptr++ = (g_eeGeneral.beeperMode != -2/*TODO constant*/ ? ALARM_LEVEL(channel, alarm) : alarm_off);
|
||||
*ptr++ = ALARM_GREATER(channel, alarm);
|
||||
|
@ -411,15 +411,13 @@ void FRSKY10mspoll(void)
|
|||
*ptr++ = (A22PKT + FrskyAlarmSendState); // fc - fb - fa - f9
|
||||
}
|
||||
else {
|
||||
if (FrskyAlarmSendState == SEND_MODEL_ALARMS)
|
||||
FrskyAlarmSendState = 0;
|
||||
*ptr++ = g_eeGeneral.frskyRssiAlarms[alarm].level;
|
||||
*ptr++ = (g_eeGeneral.beeperMode != -2/*TODO constant*/ ? ((2+alarm+g_model.frskyRssiAlarms[alarm].level) % 4) : alarm_off);
|
||||
*ptr++ = 0x00 ;
|
||||
frskyPushValue(ptr, g_eeGeneral.frskyRssiAlarms[alarm].value+50-(10*alarm));
|
||||
frskyPushValue(ptr, 50+g_model.frskyRssiAlarms[alarm].value);
|
||||
*ptr++ = (RSSI1PKT-alarm); // f7 - f6
|
||||
}
|
||||
|
||||
*ptr++ = START_STOP; // Start of packet
|
||||
*ptr++ = START_STOP; // Start of packet
|
||||
|
||||
frskyTxBufferCount = ptr - &frskyTxBuffer[0];
|
||||
frskyTransmitBuffer();
|
||||
|
|
|
@ -129,8 +129,7 @@ extern uint8_t barsThresholds[BAR_MAX-3];
|
|||
extern uint8_t frskyStreaming; // >0 (true) == data is streaming in. 0 = nodata detected for some time
|
||||
extern uint8_t frskyUsrStreaming;
|
||||
|
||||
#define SEND_MODEL_ALARMS 4
|
||||
#define SEND_RSSI_ALARMS (SEND_MODEL_ALARMS + 2)
|
||||
#define SEND_MODEL_ALARMS 6
|
||||
extern uint8_t FrskyAlarmSendState;
|
||||
|
||||
extern FrskyData frskyTelemetry[2];
|
||||
|
@ -146,11 +145,6 @@ inline void FRSKY_setModelAlarms(void)
|
|||
FrskyAlarmSendState = SEND_MODEL_ALARMS;
|
||||
}
|
||||
|
||||
inline void FRSKY_setRSSIAlarms(void)
|
||||
{
|
||||
FrskyAlarmSendState = SEND_RSSI_ALARMS;
|
||||
}
|
||||
|
||||
bool FRSKY_alarmRaised(uint8_t idx);
|
||||
|
||||
void resetTelemetry();
|
||||
|
|
|
@ -104,7 +104,10 @@ void menuProcSetup(uint8_t event)
|
|||
if(s_pgOfs<subN) {
|
||||
lcd_putsLeft( y, STR_BEEPERMODE);
|
||||
lcd_putsnAtt(PARAM_OFS - 2*FW, y, STR_VBEEPMODE+(LEN_VBEEPMODE*2)+(LEN_VBEEPMODE*g_eeGeneral.beeperMode), LEN_VBEEPMODE, (sub==subN ? INVERS:0));
|
||||
if(sub==subN) CHECK_INCDEC_GENVAR(event, g_eeGeneral.beeperMode, -2, 1);
|
||||
if(sub==subN) {
|
||||
CHECK_INCDEC_GENVAR(event, g_eeGeneral.beeperMode, -2, 1);
|
||||
if (checkIncDec_Ret) FRSKY_setModelAlarms();
|
||||
}
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
|
@ -514,14 +517,14 @@ void menuProcDiagKeys(uint8_t event)
|
|||
{
|
||||
uint8_t y=(5-i)*FH+2*FH;
|
||||
bool t=keyState((EnumKeys)(KEY_MENU+i));
|
||||
lcd_putsn_P(0, y, STR_VKEYS+LEN_VKEYS*i, LEN_VKEYS);
|
||||
lcd_putsn(0, y, STR_VKEYS+LEN_VKEYS*i, LEN_VKEYS);
|
||||
lcd_putcAtt(5*FW+2, y, t+'0', t);
|
||||
}
|
||||
|
||||
#if defined (PCBV4)
|
||||
for(uint8_t i=0; i<2; i++) {
|
||||
uint8_t y = i*FH + FH;
|
||||
lcd_putsn_P(14*FW, y, STR_RE1RE2+LEN_RE1RE2*i, LEN_RE1RE2);
|
||||
lcd_putsn(14*FW, y, STR_RE1RE2+LEN_RE1RE2*i, LEN_RE1RE2);
|
||||
lcd_outdezNAtt(18*FW, y, g_rotenc[i], LEFT|(keyState((EnumKeys)(BTN_RE1+i)) ? INVERS : 0));
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -171,7 +171,7 @@ void lcd_putsnAtt(uint8_t x,uint8_t y,const pm_char * s,uint8_t len,uint8_t mode
|
|||
lcd_lastPos = x;
|
||||
}
|
||||
|
||||
void lcd_putsn_P(uint8_t x,uint8_t y,const pm_char * s,uint8_t len)
|
||||
void lcd_putsn(uint8_t x,uint8_t y,const pm_char * s,uint8_t len)
|
||||
{
|
||||
lcd_putsnAtt(x, y, s, len, 0);
|
||||
}
|
||||
|
|
|
@ -87,7 +87,7 @@ extern void lcd_putsAtt(unsigned char x,unsigned char y,const pm_char * s,uint8_
|
|||
extern void lcd_putsnAtt(unsigned char x,unsigned char y,const pm_char * s,unsigned char len,uint8_t mode);
|
||||
extern void lcd_puts(unsigned char x,unsigned char y,const pm_char * s);
|
||||
extern void lcd_putsLeft(unsigned char y, const pm_char * s);
|
||||
extern void lcd_putsn_P(unsigned char x,unsigned char y,const pm_char * s,unsigned char len);
|
||||
extern void lcd_putsn(unsigned char x,unsigned char y,const pm_char * s,unsigned char len);
|
||||
|
||||
extern void lcd_outhex4(unsigned char x,unsigned char y,uint16_t val);
|
||||
|
||||
|
|
|
@ -109,7 +109,7 @@ void displayRssiLine()
|
|||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
void displayAltitudeLine(uint8_t x, uint8_t y, uint8_t flags)
|
||||
{
|
||||
lcd_putsn_P(x, y, STR_ALTnDST, 4);
|
||||
lcd_putsn(x, y, STR_ALTnDST, 4);
|
||||
int16_t value = frskyHubData.baroAltitude + frskyHubData.baroAltitudeOffset;
|
||||
putsTelemetryValue(lcd_lastPos, y, value, UNIT_METERS, flags|LEFT);
|
||||
}
|
||||
|
@ -558,10 +558,10 @@ void menuMainView(uint8_t event)
|
|||
}
|
||||
}
|
||||
y0+=FH;
|
||||
lcd_puts(2*FW-3, y0, STR_RX);
|
||||
lcd_outdezAtt(5*FW-3, y0, frskyRSSI[0].value, LEFT);
|
||||
lcd_puts(12*FW-3, y0, STR_TX);
|
||||
lcd_outdezAtt(15*FW-3, y0, frskyRSSI[1].value, LEFT);
|
||||
lcd_puts(2*FW-3, y0, STR_TX);
|
||||
lcd_outdezAtt(5*FW-3, y0, frskyRSSI[1].value, LEFT);
|
||||
lcd_puts(12*FW-3, y0, STR_RX);
|
||||
lcd_outdezAtt(15*FW-3, y0, frskyRSSI[0].value, LEFT);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -1843,9 +1843,9 @@ void menuProcSafetySwitches(uint8_t event)
|
|||
void menuProcTelemetry(uint8_t event)
|
||||
{
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 19, {0, -1, 1, 0, 2, 2, -1, 1, 0, 2, 2, -1, 0, 0, -1, 2, 2, 2, 2});
|
||||
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 22, {0, -1, 1, 0, 2, 2, -1, 1, 0, 2, 2, -1, 1, 1, -1, 0, 0, -1, 2, 2, 2, 2});
|
||||
#else
|
||||
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 16, {0, -1, 1, 0, 2, 2, -1, 1, 0, 2, 2, -1, 2, 2, 2, 2});
|
||||
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 19, {0, -1, 1, 0, 2, 2, -1, 1, 0, 2, 2, -1, 1, 1, -1, 2, 2, 2, 2});
|
||||
#endif
|
||||
|
||||
int8_t sub = m_posVert;
|
||||
|
@ -1857,7 +1857,7 @@ void menuProcTelemetry(uint8_t event)
|
|||
case EVT_KEY_BREAK(KEY_UP):
|
||||
case EVT_KEY_BREAK(KEY_LEFT):
|
||||
case EVT_KEY_BREAK(KEY_RIGHT):
|
||||
if (s_editMode>0) // only fr-sky alarm fields have an edit mode
|
||||
if (s_editMode>0 && sub<=13)
|
||||
FRSKY_setModelAlarms(); // update Fr-Sky module when edit mode exited
|
||||
}
|
||||
|
||||
|
@ -1938,6 +1938,34 @@ void menuProcTelemetry(uint8_t event)
|
|||
}
|
||||
}
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
y = (subN-s_pgOfs)*FH;
|
||||
lcd_putsLeft(y, PSTR("RSSI"));
|
||||
}
|
||||
subN++;
|
||||
|
||||
for (int j=0; j<2; j++) {
|
||||
if(s_pgOfs<subN) {
|
||||
y = (subN-s_pgOfs)*FH;
|
||||
lcd_putsn(4, y, STR_TX+j*OFS_RX, OFS_RX-2);
|
||||
lcd_putsnAtt(TELEM_COL2, y, STR_VALARM+LEN_VALARM*((2+j+g_model.frskyRssiAlarms[j].level)%4), LEN_VALARM, (sub==subN && m_posHorz==0 ? blink:0));
|
||||
lcd_putc(TELEM_COL2+4*FW, y, '<');
|
||||
lcd_outdezNAtt(TELEM_COL2+6*FW, y, 50+g_model.frskyRssiAlarms[j].value, LEFT|(sub==subN && m_posHorz==1 ? blink:0), 3);
|
||||
|
||||
if (sub==subN && (s_editMode>0 || p1valdiff)) {
|
||||
switch (m_posHorz) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.frskyRssiAlarms[j].level, -3, 2); // circular (saves flash)
|
||||
break;
|
||||
case 1:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.frskyRssiAlarms[j].value, -30, 30);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
subN++;
|
||||
}
|
||||
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
if(s_pgOfs<subN) {
|
||||
y = (subN-s_pgOfs)*FH;
|
||||
|
|
|
@ -65,8 +65,8 @@ PACK(typedef struct t_TrainerData {
|
|||
}) TrainerData;
|
||||
|
||||
PACK(typedef struct t_FrSkyRSSIAlarm {
|
||||
uint8_t level:2;
|
||||
int8_t value:6;
|
||||
int8_t level:2;
|
||||
int8_t value:6;
|
||||
}) FrSkyRSSIAlarm;
|
||||
|
||||
PACK(typedef struct t_EEGeneral {
|
||||
|
@ -101,10 +101,10 @@ PACK(typedef struct t_EEGeneral {
|
|||
uint8_t lightAutoOff;
|
||||
uint8_t templateSetup; //RETA order according to chout_ar array
|
||||
int8_t PPM_Multiplier;
|
||||
FrSkyRSSIAlarm frskyRssiAlarms[2];
|
||||
uint8_t spare2[2];
|
||||
int8_t beeperLength:3;
|
||||
uint8_t hapticStrength:3;
|
||||
uint8_t spare2:2;
|
||||
uint8_t spare3:2;
|
||||
uint8_t speakerPitch;
|
||||
}) EEGeneral;
|
||||
|
||||
|
@ -328,6 +328,7 @@ PACK(typedef struct t_ModelData {
|
|||
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
|
||||
uint8_t thrTraceSrc;
|
||||
uint8_t modelId;
|
||||
FrSkyRSSIAlarm frskyRssiAlarms[2]; // TODO next EEPROM: merge with FrSkyData
|
||||
}) ModelData;
|
||||
|
||||
extern EEGeneral g_eeGeneral;
|
||||
|
|
|
@ -186,8 +186,7 @@ const pm_char STR_SETMIDPOINT[] PROGMEM = TR_SETMIDPOINT;
|
|||
const pm_char STR_MOVESTICKSPOTS[] PROGMEM = TR_MOVESTICKSPOTS;
|
||||
const pm_char STR_ALTnDST[] PROGMEM = TR_ALTnDST;
|
||||
const pm_char STR_RXBATT[] PROGMEM = TR_RXBATT;
|
||||
const pm_char STR_RX[] PROGMEM = TR_RX;
|
||||
const pm_char STR_TX[] PROGMEM = TR_TX;
|
||||
const pm_char STR_TX[] PROGMEM = TR_TXnRX;
|
||||
const pm_char STR_SPDnMAX[] PROGMEM = TR_SPDnMAX;
|
||||
const pm_char STR_TEMP1nTEMP2[] PROGMEM = TR_TEMP1nTEMP2;
|
||||
const pm_char STR_RPMnFUEL[] PROGMEM = TR_RPMnFUEL;
|
||||
|
|
|
@ -264,8 +264,8 @@ extern const pm_char STR_SETMIDPOINT[];
|
|||
extern const pm_char STR_MOVESTICKSPOTS[];
|
||||
extern const pm_char STR_ALTnDST[];
|
||||
extern const pm_char STR_RXBATT[];
|
||||
extern const pm_char STR_RX[];
|
||||
extern const pm_char STR_TX[];
|
||||
#define STR_RX (STR_TX+OFS_RX)
|
||||
extern const pm_char STR_SPDnMAX[];
|
||||
extern const pm_char STR_TEMP1nTEMP2[];
|
||||
extern const pm_char STR_RPMnFUEL[];
|
||||
|
|
|
@ -237,8 +237,8 @@
|
|||
#define TR_MOVESTICKSPOTS "MOVE STICKS/POTS"
|
||||
#define TR_ALTnDST "Alt:\010Dst:"
|
||||
#define TR_RXBATT "Rx Batt:"
|
||||
#define TR_RX "Rx:"
|
||||
#define TR_TX "Tx:"
|
||||
#define TR_TXnRX "Tx:\0Rx:"
|
||||
#define OFS_RX 4
|
||||
#define TR_SPDnMAX "Spd:\010Max:"
|
||||
#define TR_TEMP1nTEMP2 "T@1:\007T@2:"
|
||||
#define TR_RPMnFUEL "RPM:\006Fuel:"
|
||||
|
|
|
@ -237,8 +237,8 @@
|
|||
#define TR_MOVESTICKSPOTS "BOUGER MANCHES/POTS "
|
||||
#define TR_ALTnDST "Alt:\010Dst:"
|
||||
#define TR_RXBATT "Rx Batt:"
|
||||
#define TR_RX "Rx:"
|
||||
#define TR_TX "Tx:"
|
||||
#define TR_TXnRX "Tx:\0Rx:"
|
||||
#define OFS_RX 4
|
||||
#define TR_SPDnMAX "Spd:\010Max:"
|
||||
#define TR_TEMP1nTEMP2 "T@1:\007T@2:"
|
||||
#define TR_RPMnFUEL "RPM:\006Fuel:"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue