1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-26 09:45:21 +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 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,11 +411,9 @@ 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
}

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 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();

View file

@ -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

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;
}
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);
}

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_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);

View file

@ -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 {

View file

@ -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;

View file

@ -65,7 +65,7 @@ PACK(typedef struct t_TrainerData {
}) TrainerData;
PACK(typedef struct t_FrSkyRSSIAlarm {
uint8_t level:2;
int8_t level:2;
int8_t value:6;
}) FrSkyRSSIAlarm;
@ -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;

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_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;

View file

@ -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[];

View file

@ -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:"

View file

@ -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:"