1
0
Fork 0
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:
bsongis 2012-02-16 17:55:23 +00:00
parent e7e7a6ca97
commit 03fd1e3b01
12 changed files with 61 additions and 38 deletions

View file

@ -42,6 +42,7 @@
#define ALRM_REQUEST 0xf8 #define ALRM_REQUEST 0xf8
#define RSSI1PKT 0xf7 #define RSSI1PKT 0xf7
#define RSSI2PKT 0xf6 #define RSSI2PKT 0xf6
#define RSSI_REQUEST 0xf1
#define START_STOP 0x7e #define START_STOP 0x7e
#define BYTESTUFF 0x7d #define BYTESTUFF 0x7d
@ -234,7 +235,6 @@ void processFrskyPacket(uint8_t *packet)
frskyRSSI[0].set(packet[3]); frskyRSSI[0].set(packet[3]);
frskyRSSI[1].set(packet[4] / 2); frskyRSSI[1].set(packet[4] / 2);
break; break;
#if defined(FRSKY_HUB) || defined (WS_HOW_HIGH) #if defined(FRSKY_HUB) || defined (WS_HOW_HIGH)
case USRPKT: // User Data packet case USRPKT: // User Data packet
uint8_t numBytes = 3 + (packet[1] & 0x07); // sanitize in case of data corruption leading to buffer overflow 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 // Now send a packet
FrskyAlarmSendState -= 1 ; FrskyAlarmSendState -= 1 ;
uint8_t alarm = 1 - (FrskyAlarmSendState % 2); uint8_t alarm = 1 - (FrskyAlarmSendState % 2);
if (FrskyAlarmSendState < SEND_MODEL_ALARMS) { if (FrskyAlarmSendState < 4) {
uint8_t channel = 1 - (FrskyAlarmSendState / 2); uint8_t channel = 1 - (FrskyAlarmSendState / 2);
*ptr++ = (g_eeGeneral.beeperMode != -2/*TODO constant*/ ? ALARM_LEVEL(channel, alarm) : alarm_off); *ptr++ = (g_eeGeneral.beeperMode != -2/*TODO constant*/ ? ALARM_LEVEL(channel, alarm) : alarm_off);
*ptr++ = ALARM_GREATER(channel, alarm); *ptr++ = ALARM_GREATER(channel, alarm);
@ -411,15 +411,13 @@ void FRSKY10mspoll(void)
*ptr++ = (A22PKT + FrskyAlarmSendState); // fc - fb - fa - f9 *ptr++ = (A22PKT + FrskyAlarmSendState); // fc - fb - fa - f9
} }
else { else {
if (FrskyAlarmSendState == SEND_MODEL_ALARMS) *ptr++ = (g_eeGeneral.beeperMode != -2/*TODO constant*/ ? ((2+alarm+g_model.frskyRssiAlarms[alarm].level) % 4) : alarm_off);
FrskyAlarmSendState = 0;
*ptr++ = g_eeGeneral.frskyRssiAlarms[alarm].level;
*ptr++ = 0x00 ; *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++ = (RSSI1PKT-alarm); // f7 - f6
} }
*ptr++ = START_STOP; // Start of packet *ptr++ = START_STOP; // Start of packet
frskyTxBufferCount = ptr - &frskyTxBuffer[0]; frskyTxBufferCount = ptr - &frskyTxBuffer[0];
frskyTransmitBuffer(); frskyTransmitBuffer();

View file

@ -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 frskyStreaming; // >0 (true) == data is streaming in. 0 = nodata detected for some time
extern uint8_t frskyUsrStreaming; extern uint8_t frskyUsrStreaming;
#define SEND_MODEL_ALARMS 4 #define SEND_MODEL_ALARMS 6
#define SEND_RSSI_ALARMS (SEND_MODEL_ALARMS + 2)
extern uint8_t FrskyAlarmSendState; extern uint8_t FrskyAlarmSendState;
extern FrskyData frskyTelemetry[2]; extern FrskyData frskyTelemetry[2];
@ -146,11 +145,6 @@ inline void FRSKY_setModelAlarms(void)
FrskyAlarmSendState = SEND_MODEL_ALARMS; FrskyAlarmSendState = SEND_MODEL_ALARMS;
} }
inline void FRSKY_setRSSIAlarms(void)
{
FrskyAlarmSendState = SEND_RSSI_ALARMS;
}
bool FRSKY_alarmRaised(uint8_t idx); bool FRSKY_alarmRaised(uint8_t idx);
void resetTelemetry(); void resetTelemetry();

View file

@ -104,7 +104,10 @@ void menuProcSetup(uint8_t event)
if(s_pgOfs<subN) { if(s_pgOfs<subN) {
lcd_putsLeft( y, STR_BEEPERMODE); 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)); 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; if((y+=FH)>7*FH) return;
}subN++; }subN++;
@ -514,14 +517,14 @@ void menuProcDiagKeys(uint8_t event)
{ {
uint8_t y=(5-i)*FH+2*FH; uint8_t y=(5-i)*FH+2*FH;
bool t=keyState((EnumKeys)(KEY_MENU+i)); 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); lcd_putcAtt(5*FW+2, y, t+'0', t);
} }
#if defined (PCBV4) #if defined (PCBV4)
for(uint8_t i=0; i<2; i++) { for(uint8_t i=0; i<2; i++) {
uint8_t y = i*FH + FH; 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)); lcd_outdezNAtt(18*FW, y, g_rotenc[i], LEFT|(keyState((EnumKeys)(BTN_RE1+i)) ? INVERS : 0));
} }
#endif #endif

View file

@ -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; 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); lcd_putsnAtt(x, y, s, len, 0);
} }

View file

@ -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_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_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_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); extern void lcd_outhex4(unsigned char x,unsigned char y,uint16_t val);

View file

@ -109,7 +109,7 @@ void displayRssiLine()
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH) #if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
void displayAltitudeLine(uint8_t x, uint8_t y, uint8_t flags) 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; int16_t value = frskyHubData.baroAltitude + frskyHubData.baroAltitudeOffset;
putsTelemetryValue(lcd_lastPos, y, value, UNIT_METERS, flags|LEFT); putsTelemetryValue(lcd_lastPos, y, value, UNIT_METERS, flags|LEFT);
} }
@ -558,10 +558,10 @@ void menuMainView(uint8_t event)
} }
} }
y0+=FH; y0+=FH;
lcd_puts(2*FW-3, y0, STR_RX); lcd_puts(2*FW-3, y0, STR_TX);
lcd_outdezAtt(5*FW-3, y0, frskyRSSI[0].value, LEFT); lcd_outdezAtt(5*FW-3, y0, frskyRSSI[1].value, LEFT);
lcd_puts(12*FW-3, y0, STR_TX); lcd_puts(12*FW-3, y0, STR_RX);
lcd_outdezAtt(15*FW-3, y0, frskyRSSI[1].value, LEFT); lcd_outdezAtt(15*FW-3, y0, frskyRSSI[0].value, LEFT);
} }
} }
else { else {

View file

@ -1843,9 +1843,9 @@ void menuProcSafetySwitches(uint8_t event)
void menuProcTelemetry(uint8_t event) void menuProcTelemetry(uint8_t event)
{ {
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH) #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 #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 #endif
int8_t sub = m_posVert; 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_UP):
case EVT_KEY_BREAK(KEY_LEFT): case EVT_KEY_BREAK(KEY_LEFT):
case EVT_KEY_BREAK(KEY_RIGHT): 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 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 defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
if(s_pgOfs<subN) { if(s_pgOfs<subN) {
y = (subN-s_pgOfs)*FH; y = (subN-s_pgOfs)*FH;

View file

@ -65,8 +65,8 @@ PACK(typedef struct t_TrainerData {
}) TrainerData; }) TrainerData;
PACK(typedef struct t_FrSkyRSSIAlarm { PACK(typedef struct t_FrSkyRSSIAlarm {
uint8_t level:2; int8_t level:2;
int8_t value:6; int8_t value:6;
}) FrSkyRSSIAlarm; }) FrSkyRSSIAlarm;
PACK(typedef struct t_EEGeneral { PACK(typedef struct t_EEGeneral {
@ -101,10 +101,10 @@ PACK(typedef struct t_EEGeneral {
uint8_t lightAutoOff; uint8_t lightAutoOff;
uint8_t templateSetup; //RETA order according to chout_ar array uint8_t templateSetup; //RETA order according to chout_ar array
int8_t PPM_Multiplier; int8_t PPM_Multiplier;
FrSkyRSSIAlarm frskyRssiAlarms[2]; uint8_t spare2[2];
int8_t beeperLength:3; int8_t beeperLength:3;
uint8_t hapticStrength:3; uint8_t hapticStrength:3;
uint8_t spare2:2; uint8_t spare3:2;
uint8_t speakerPitch; uint8_t speakerPitch;
}) EEGeneral; }) EEGeneral;
@ -328,6 +328,7 @@ PACK(typedef struct t_ModelData {
int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments int8_t ppmFrameLength; // 0=22.5ms (10ms-30ms) 0.5msec increments
uint8_t thrTraceSrc; uint8_t thrTraceSrc;
uint8_t modelId; uint8_t modelId;
FrSkyRSSIAlarm frskyRssiAlarms[2]; // TODO next EEPROM: merge with FrSkyData
}) ModelData; }) ModelData;
extern EEGeneral g_eeGeneral; extern EEGeneral g_eeGeneral;

View file

@ -186,8 +186,7 @@ const pm_char STR_SETMIDPOINT[] PROGMEM = TR_SETMIDPOINT;
const pm_char STR_MOVESTICKSPOTS[] PROGMEM = TR_MOVESTICKSPOTS; const pm_char STR_MOVESTICKSPOTS[] PROGMEM = TR_MOVESTICKSPOTS;
const pm_char STR_ALTnDST[] PROGMEM = TR_ALTnDST; const pm_char STR_ALTnDST[] PROGMEM = TR_ALTnDST;
const pm_char STR_RXBATT[] PROGMEM = TR_RXBATT; const pm_char STR_RXBATT[] PROGMEM = TR_RXBATT;
const pm_char STR_RX[] PROGMEM = TR_RX; const pm_char STR_TX[] PROGMEM = TR_TXnRX;
const pm_char STR_TX[] PROGMEM = TR_TX;
const pm_char STR_SPDnMAX[] PROGMEM = TR_SPDnMAX; const pm_char STR_SPDnMAX[] PROGMEM = TR_SPDnMAX;
const pm_char STR_TEMP1nTEMP2[] PROGMEM = TR_TEMP1nTEMP2; const pm_char STR_TEMP1nTEMP2[] PROGMEM = TR_TEMP1nTEMP2;
const pm_char STR_RPMnFUEL[] PROGMEM = TR_RPMnFUEL; const pm_char STR_RPMnFUEL[] PROGMEM = TR_RPMnFUEL;

View file

@ -264,8 +264,8 @@ extern const pm_char STR_SETMIDPOINT[];
extern const pm_char STR_MOVESTICKSPOTS[]; extern const pm_char STR_MOVESTICKSPOTS[];
extern const pm_char STR_ALTnDST[]; extern const pm_char STR_ALTnDST[];
extern const pm_char STR_RXBATT[]; extern const pm_char STR_RXBATT[];
extern const pm_char STR_RX[];
extern const pm_char STR_TX[]; extern const pm_char STR_TX[];
#define STR_RX (STR_TX+OFS_RX)
extern const pm_char STR_SPDnMAX[]; extern const pm_char STR_SPDnMAX[];
extern const pm_char STR_TEMP1nTEMP2[]; extern const pm_char STR_TEMP1nTEMP2[];
extern const pm_char STR_RPMnFUEL[]; extern const pm_char STR_RPMnFUEL[];

View file

@ -237,8 +237,8 @@
#define TR_MOVESTICKSPOTS "MOVE STICKS/POTS" #define TR_MOVESTICKSPOTS "MOVE STICKS/POTS"
#define TR_ALTnDST "Alt:\010Dst:" #define TR_ALTnDST "Alt:\010Dst:"
#define TR_RXBATT "Rx Batt:" #define TR_RXBATT "Rx Batt:"
#define TR_RX "Rx:" #define TR_TXnRX "Tx:\0Rx:"
#define TR_TX "Tx:" #define OFS_RX 4
#define TR_SPDnMAX "Spd:\010Max:" #define TR_SPDnMAX "Spd:\010Max:"
#define TR_TEMP1nTEMP2 "T@1:\007T@2:" #define TR_TEMP1nTEMP2 "T@1:\007T@2:"
#define TR_RPMnFUEL "RPM:\006Fuel:" #define TR_RPMnFUEL "RPM:\006Fuel:"

View file

@ -237,8 +237,8 @@
#define TR_MOVESTICKSPOTS "BOUGER MANCHES/POTS " #define TR_MOVESTICKSPOTS "BOUGER MANCHES/POTS "
#define TR_ALTnDST "Alt:\010Dst:" #define TR_ALTnDST "Alt:\010Dst:"
#define TR_RXBATT "Rx Batt:" #define TR_RXBATT "Rx Batt:"
#define TR_RX "Rx:" #define TR_TXnRX "Tx:\0Rx:"
#define TR_TX "Tx:" #define OFS_RX 4
#define TR_SPDnMAX "Spd:\010Max:" #define TR_SPDnMAX "Spd:\010Max:"
#define TR_TEMP1nTEMP2 "T@1:\007T@2:" #define TR_TEMP1nTEMP2 "T@1:\007T@2:"
#define TR_RPMnFUEL "RPM:\006Fuel:" #define TR_RPMnFUEL "RPM:\006Fuel:"