diff --git a/src/frsky.cpp b/src/frsky.cpp index 38076d1af..e581e82ab 100644 --- a/src/frsky.cpp +++ b/src/frsky.cpp @@ -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(); diff --git a/src/frsky.h b/src/frsky.h index 54ebd1418..a2d6924c1 100644 --- a/src/frsky.h +++ b/src/frsky.h @@ -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(); diff --git a/src/general_menus.cpp b/src/general_menus.cpp index 75430c186..335d5f345 100644 --- a/src/general_menus.cpp +++ b/src/general_menus.cpp @@ -104,7 +104,10 @@ void menuProcSetup(uint8_t event) if(s_pgOfs7*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 diff --git a/src/lcd.cpp b/src/lcd.cpp index 47598466d..c42fc6c8f 100644 --- a/src/lcd.cpp +++ b/src/lcd.cpp @@ -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); } diff --git a/src/lcd.h b/src/lcd.h index 26ca25551..fc89a00aa 100644 --- a/src/lcd.h +++ b/src/lcd.h @@ -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); diff --git a/src/main_views.cpp b/src/main_views.cpp index 63ef6009e..646b2a892 100644 --- a/src/main_views.cpp +++ b/src/main_views.cpp @@ -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 { diff --git a/src/model_menus.cpp b/src/model_menus.cpp index b97561b40..9d6c18d6a 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -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_pgOfs0 || 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