mirror of
https://github.com/opentx/opentx.git
synced 2025-07-23 16:25:16 +03:00
now it compiles as rev 556
new option in code VARIO_EXTENDED
This commit is contained in:
parent
85540e1ef4
commit
b3113fbcbc
11 changed files with 101 additions and 10 deletions
|
@ -155,6 +155,7 @@ void audioQueue::playASAP(uint8_t tFreq, uint8_t tLen, uint8_t tPause,
|
|||
}
|
||||
}
|
||||
|
||||
#if defined(VARIO_EXTENDED)
|
||||
void audioQueue::playVario(uint8_t tFreq, uint8_t tLen)
|
||||
{
|
||||
uint8_t next_queueWidx = (t_queueWidx + 1) % AUDIO_QUEUE_LENGTH;
|
||||
|
@ -167,6 +168,7 @@ void audioQueue::playVario(uint8_t tFreq, uint8_t tLen)
|
|||
t_queueWidx = next_queueWidx;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void audioQueue::event(uint8_t e, uint8_t f)
|
||||
{
|
||||
|
|
|
@ -101,7 +101,9 @@ class audioQueue
|
|||
|
||||
void playASAP(uint8_t tFreq, uint8_t tLen, uint8_t tPause, uint8_t tRepeat=0, int8_t tFreqIncr=0);
|
||||
|
||||
#if defined(VARIO_EXTENDED)
|
||||
void playVario(uint8_t tFreq, uint8_t tLen);
|
||||
#endif
|
||||
|
||||
inline bool busy() { return (toneTimeLeft > 0); }
|
||||
|
||||
|
|
|
@ -241,7 +241,7 @@ void parseTelemHubByte(uint8_t byte)
|
|||
if (frskyHubData.temperature2 > frskyHubData.maxTemperature2)
|
||||
frskyHubData.maxTemperature2 = frskyHubData.temperature2;
|
||||
break;
|
||||
|
||||
#if defined(VARIO_EXTENDED)
|
||||
case offsetof(FrskyHubData, baroAltitude_bp):
|
||||
case offsetof(FrskyHubData, baroAltitude_ap):
|
||||
if((!g_model.frsky.use_baroAltitude_ap & (offsetof(FrskyHubData, baroAltitude_bp) == (uint8_t)structPos)) |
|
||||
|
@ -282,7 +282,35 @@ void parseTelemHubByte(uint8_t byte)
|
|||
|
||||
}
|
||||
break;
|
||||
#else
|
||||
case offsetof(FrskyHubData, baroAltitude_bp):
|
||||
// First received barometer altitude => Altitude offset
|
||||
if (!frskyHubData.baroAltitudeOffset)
|
||||
frskyHubData.baroAltitudeOffset = -frskyHubData.baroAltitude_bp;
|
||||
frskyHubData.baroAltitude_bp += frskyHubData.baroAltitudeOffset;
|
||||
if (frskyHubData.baroAltitude_bp > frskyHubData.maxAltitude)
|
||||
frskyHubData.maxAltitude = frskyHubData.baroAltitude_bp;
|
||||
if (frskyHubData.baroAltitude_bp < frskyHubData.minAltitude)
|
||||
frskyHubData.minAltitude = frskyHubData.baroAltitude_bp;
|
||||
|
||||
{
|
||||
int16_t actVario = frskyHubData.baroAltitude_bp - frskyHubData.lastBaroAltitude_bp;
|
||||
frskyHubData.varioAcc2 = frskyHubData.varioAcc2 - frskyHubData.varioQueue[frskyHubData.queuePointer];
|
||||
frskyHubData.varioQueue[frskyHubData.queuePointer] = actVario;
|
||||
uint8_t tmp = frskyHubData.queuePointer + 5;
|
||||
if (tmp >= 10)
|
||||
tmp -= 10;
|
||||
tmp = (uint8_t)frskyHubData.varioQueue[tmp];
|
||||
frskyHubData.varioAcc2 = frskyHubData.varioAcc2 + (int8_t)tmp;
|
||||
frskyHubData.varioAcc1 = frskyHubData.varioAcc1 + actVario - (int8_t)tmp;
|
||||
frskyHubData.varioSpeed = frskyHubData.varioAcc1 - frskyHubData.varioAcc2;
|
||||
if (++frskyHubData.queuePointer >= 10)
|
||||
frskyHubData.queuePointer = 0;
|
||||
frskyHubData.lastBaroAltitude_bp = frskyHubData.baroAltitude_bp;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#if defined(VARIO_EXTENDED)
|
||||
case offsetof(FrskyHubData, gpsAltitude_ap):
|
||||
if(g_model.frsky.use_baroAltitude_ap){
|
||||
frskyHubData.gpsAltitude_full = frskyHubData.gpsAltitude_bp*100;
|
||||
|
@ -309,7 +337,25 @@ void parseTelemHubByte(uint8_t byte)
|
|||
getGpsDistance();
|
||||
}
|
||||
break;
|
||||
#else
|
||||
case offsetof(FrskyHubData, gpsAltitude_ap):
|
||||
if (!frskyHubData.gpsAltitudeOffset)
|
||||
frskyHubData.gpsAltitudeOffset = -frskyHubData.gpsAltitude_bp;
|
||||
frskyHubData.gpsAltitude_bp += frskyHubData.gpsAltitudeOffset;
|
||||
if (frskyHubData.gpsAltitude_bp > frskyHubData.maxAltitude)
|
||||
frskyHubData.maxAltitude = frskyHubData.gpsAltitude_bp;
|
||||
if (frskyHubData.gpsAltitude_bp < frskyHubData.minAltitude)
|
||||
frskyHubData.minAltitude = frskyHubData.gpsAltitude_bp;
|
||||
|
||||
if (!frskyHubData.pilotLatitude && !frskyHubData.pilotLongitude) {
|
||||
// First received GPS position => Pilot GPS position
|
||||
getGpsPilotPosition();
|
||||
}
|
||||
else if (frskyHubData.gpsDistNeeded || g_menuStack[0] == menuProcFrsky) {
|
||||
getGpsDistance();
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case offsetof(FrskyHubData, gpsSpeed_bp):
|
||||
// Speed => Max speed
|
||||
if (frskyHubData.gpsSpeed_bp < frskyHubData.maxGpsSpeed)
|
||||
|
@ -648,7 +694,7 @@ void check_frsky()
|
|||
|
||||
if (isFunctionActive(FUNC_VARIO)) {
|
||||
#if defined(AUDIO)
|
||||
|
||||
/*
|
||||
#define VARIO_SPEED_LIMIT 10 //m/s
|
||||
int16_t verticalSpeed = 0;
|
||||
//vertical speed in 0.01m/s now
|
||||
|
@ -656,7 +702,7 @@ void check_frsky()
|
|||
verticalSpeed = limit((int16_t)(-VARIO_SPEED_LIMIT*100), (int16_t)frskyHubData.varioSpeed, (int16_t)(+VARIO_SPEED_LIMIT*100));
|
||||
else
|
||||
verticalSpeed = limit((int16_t)-VARIO_SPEED_LIMIT, (int16_t)(frskyHubData.varioSpeed), (int16_t)+VARIO_SPEED_LIMIT)*100;
|
||||
|
||||
|
||||
uint8_t SoundAltBeepNextFreq = (0);
|
||||
uint8_t SoundAltBeepNextTime = (0);
|
||||
if(verticalSpeed < g_model.varioSpeedUpMin*VARIO_LIM_MUL && verticalSpeed > g_model.varioSpeedDownMin*(-VARIO_LIM_MUL)) //check thresholds here in cm/s
|
||||
|
@ -675,6 +721,7 @@ void check_frsky()
|
|||
audio.playVario(SoundAltBeepNextFreq, 1);
|
||||
}
|
||||
}
|
||||
*/
|
||||
#endif //AUDIO
|
||||
#endif //FRSKY_HUB || WS_HOW_HIGH
|
||||
}
|
||||
|
@ -1105,10 +1152,13 @@ void menuProcFrsky(uint8_t event)
|
|||
putsTime(x, 1+FH+2*FH*i, value, att, att);
|
||||
}
|
||||
else {
|
||||
#if defined(PCBV4)
|
||||
if(g_model.frsky.use_baroAltitude_ap & (field == TELEM_VSPD)){
|
||||
putsTelemetryChannel(j ? 128 : 63, i==3 ? 1+7*FH : 1+2*FH+2*FH*i, field-1, value, att|PREC2);
|
||||
}
|
||||
else {
|
||||
else
|
||||
#endif
|
||||
{
|
||||
putsTelemetryChannel(j ? 128 : 63, i==3 ? 1+7*FH : 1+2*FH+2*FH*i, field-1, value, att);
|
||||
}
|
||||
lcd_putsiAtt(j*65, 1+FH+2*FH*i, STR_VTELEMCHNS, field, 0);
|
||||
|
|
20
src/frsky.h
20
src/frsky.h
|
@ -109,10 +109,18 @@ PACK(struct FrskyHubData {
|
|||
uint8_t cellsCount:4; // 4bits out of 16bits spare reused
|
||||
uint8_t minCellVolts; // 8bits out of 16bits spare reused
|
||||
uint16_t current; // 0x28 Current
|
||||
int8_t spare2[10];//varioQueue[10]; // circular-buffer
|
||||
#if defined(VARIO_EXTENDED)
|
||||
int8_t spare2[10];
|
||||
#else
|
||||
int8_t varioQueue[10]; // circular-buffer
|
||||
#endif
|
||||
uint8_t queuePointer; // circular-buffer pointer
|
||||
int8_t spare3;
|
||||
int16_t spare4; //lastBaroAltitude_bp;
|
||||
#if defined(VARIO_EXTENDED)
|
||||
int16_t spare4;
|
||||
#else
|
||||
int16_t lastBaroAltitude_bp;
|
||||
#endif
|
||||
int16_t varioSpeed;
|
||||
/* next fields must keep this order! */
|
||||
int16_t minAltitude;
|
||||
|
@ -123,19 +131,25 @@ PACK(struct FrskyHubData {
|
|||
uint16_t maxGpsSpeed;
|
||||
uint16_t maxGpsDistance;
|
||||
/* end */
|
||||
#if defined(VARIO_EXTENDED)
|
||||
int16_t Altitude_show;
|
||||
int16_t spare5;
|
||||
#else
|
||||
int16_t varioAcc1;
|
||||
int16_t varioAcc2;
|
||||
#endif
|
||||
uint16_t volts_bp; // 0x3A
|
||||
uint16_t volts_ap; // 0x3B
|
||||
// end of FrSky Hub data
|
||||
uint16_t gpsDistance;
|
||||
int16_t gpsAltitudeOffset;
|
||||
uint8_t minCellMinVolts;
|
||||
#if defined(VARIO_EXTENDED)
|
||||
int32_t baroAltitude_full;
|
||||
int32_t gpsAltitude_full;
|
||||
int32_t baroAltitude_full_prev;
|
||||
int16_t baroAltitudeQueue_Acc[5];
|
||||
|
||||
#endif
|
||||
});
|
||||
|
||||
#elif defined(WS_HOW_HIGH)
|
||||
|
|
|
@ -2004,7 +2004,11 @@ void menuProcFunctionSwitches(uint8_t event)
|
|||
void menuProcTelemetry(uint8_t event)
|
||||
{
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)// v v v v 4 new menu items for baro alt/vario
|
||||
#if defined(VARIO_EXTENDED)
|
||||
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 32, {0, (uint8_t)-1, 1, 0, 2, 2, (uint8_t)-1, 1, 0, 2, 2, (uint8_t)-1, 1, 1, (uint8_t)-1, 0, 0, (uint8_t)-1, 0, 0, 0, 0, (uint8_t)-1, 1, 1, 1, 1, (uint8_t)-1, 2, 2, 2, 2});
|
||||
#else
|
||||
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 27, {0, (uint8_t)-1, 1, 0, 2, 2, (uint8_t)-1, 1, 0, 2, 2, (uint8_t)-1, 1, 1, (uint8_t)-1, 0, 0, (uint8_t)-1, 1, 1, 1, 1, (uint8_t)-1, 2, 2, 2, 2});
|
||||
#endif
|
||||
#else
|
||||
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 24, {0, (uint8_t)-1, 1, 0, 2, 2, (uint8_t)-1, 1, 0, 2, 2, (uint8_t)-1, 1, 1, (uint8_t)-1, 1, 1, 1, 1, (uint8_t)-1, 2, 2, 2, 2});
|
||||
#endif
|
||||
|
@ -2152,7 +2156,7 @@ void menuProcTelemetry(uint8_t event)
|
|||
CHECK_INCDEC_MODELVAR(event, g_model.frsky.blades, 0, 2);
|
||||
}
|
||||
subN++;
|
||||
|
||||
#if defined(VARIO_EXTENDED)
|
||||
if(s_pgOfs<subN) {
|
||||
y = (subN-s_pgOfs)*FH;
|
||||
lcd_putsLeft(y, STR_BARO_VARIO);
|
||||
|
@ -2194,6 +2198,7 @@ void menuProcTelemetry(uint8_t event)
|
|||
CHECK_INCDEC_MODELVAR(event, g_model.varioSpeedDownMin, 0, 15);
|
||||
}
|
||||
subN++;
|
||||
#endif //VARIO_EXTENDED
|
||||
#endif
|
||||
|
||||
// Display
|
||||
|
|
|
@ -360,8 +360,12 @@ PACK(typedef struct t_FrSkyData {
|
|||
uint8_t usrProto:3; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh
|
||||
uint8_t imperial:1;
|
||||
uint8_t blades:2; // How many blades for RPMs, 0=2 blades, 1=3 blades
|
||||
#if defined(VARIO_EXTENDED)
|
||||
uint8_t use_baroAltitude_ap:1;//used 2 spare bits here
|
||||
uint8_t use_baroAltitude_only:1;
|
||||
#else
|
||||
uint8_t spare:2;
|
||||
#endif
|
||||
FrSkyBarData bars[4];
|
||||
FrSkyRSSIAlarm rssiAlarms[2];
|
||||
}) FrSkyData;
|
||||
|
@ -511,9 +515,11 @@ PACK(typedef struct t_ModelData {
|
|||
uint8_t frskyLines[4];
|
||||
uint16_t frskyLinesXtra;
|
||||
int8_t servoCenter[NUM_CHNOUT];
|
||||
#if defined(VARIO_EXTENDED)
|
||||
//TODO:temporary place, need to move to frskydata
|
||||
uint8_t varioSpeedUpMin:4; //if increment in 0.2m/s = 3.0m/s max
|
||||
uint8_t varioSpeedDownMin:4; //too small but enough in most cases
|
||||
#endif //VARIO_EXTENDED
|
||||
}) ModelData;
|
||||
|
||||
extern EEGeneral g_eeGeneral;
|
||||
|
|
|
@ -148,11 +148,13 @@ const pm_char STR_BAR[] PROGMEM = TR_BAR;
|
|||
const pm_char STR_ALARM[] PROGMEM = TR_ALARM;
|
||||
const pm_char STR_USRDATA[] PROGMEM = TR_USRDATA;
|
||||
const pm_char STR_BLADES[] PROGMEM = TR_BLADES; // TODO check that it is optimized away when no FRSKY
|
||||
#ifdef VARIO_EXTENDED
|
||||
const pm_char STR_BARO_VARIO[] PROGMEM = TR_BARO_VARIO;
|
||||
const pm_char STR_BARO_PR[] PROGMEM = TR_BARO_PR;
|
||||
const pm_char STR_BARO_ONLY[] PROGMEM = TR_BARO_ONLY;
|
||||
const pm_char STR_BARO_UP_LIM[] PROGMEM = TR_BARO_UP_LIM;
|
||||
const pm_char STR_BARO_DWN_LIM[] PROGMEM = TR_BARO_DWN_LIM;
|
||||
#endif //VARIO_EXTENDED
|
||||
const pm_char STR_BARS[] PROGMEM = TR_BARS;
|
||||
const pm_char STR_DISPLAY[] PROGMEM = TR_DISPLAY;
|
||||
const pm_char STR_BEEPERMODE[] PROGMEM = TR_BEEPERMODE;
|
||||
|
|
|
@ -423,8 +423,12 @@ int16_t getValue(uint8_t i)
|
|||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_RSSI_TX) return frskyRSSI[1].value;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_RSSI_RX) return frskyRSSI[0].value;
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
#if defined(VARIO_EXTENDED)
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_ALT) return frskyHubData.Altitude_show;
|
||||
#endif
|
||||
#else //VARIO_EXTENDED
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_ALT) return frskyHubData.baroAltitude_bp;
|
||||
#endif //VARIO_EXTENDED
|
||||
#endif //FRSKY_HUB || WS_HOW_HIGH
|
||||
#if defined(FRSKY_HUB)
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_RPM) return frskyHubData.rpm;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_FUEL) return frskyHubData.fuelLevel;
|
||||
|
@ -441,7 +445,7 @@ int16_t getValue(uint8_t i)
|
|||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MIN_A1) return frskyTelemetry[0].min;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MIN_A2) return frskyTelemetry[1].min;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MAX_DIST) return *(((int16_t*)(&frskyHubData.minAltitude))+i-(CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MIN_ALT-1));
|
||||
#endif
|
||||
#endif //FRSKY_HUB
|
||||
#endif
|
||||
else return 0;
|
||||
}
|
||||
|
|
|
@ -236,11 +236,13 @@
|
|||
#define TR_ALARM "Alarm"
|
||||
#define TR_USRDATA "UsrData"
|
||||
#define TR_BLADES "Blades"
|
||||
#ifdef VARIO_EXTENDED
|
||||
#define TR_BARO_VARIO "Baro Vario"
|
||||
#define TR_BARO_PR "Use AP"
|
||||
#define TR_BARO_ONLY "BaroOnly"
|
||||
#define TR_BARO_UP_LIM "Up Lim"
|
||||
#define TR_BARO_DWN_LIM "Down Lim"
|
||||
#endif //VARIO_EXTENDED
|
||||
#define TR_BARS "Bars"
|
||||
#define TR_DISPLAY "Display"
|
||||
#ifdef AUDIO
|
||||
|
|
|
@ -236,11 +236,13 @@
|
|||
#define TR_ALARM "Alarme"
|
||||
#define TR_USRDATA "UsrData"
|
||||
#define TR_BLADES "Blades"
|
||||
#ifdef VARIO_EXTENDED
|
||||
#define TR_BARO_VARIO "Baro Vario"
|
||||
#define TR_BARO_PR "Use AP"
|
||||
#define TR_BARO_ONLY "BaroOnly"
|
||||
#define TR_BARO_UP_LIM "Up Lim"
|
||||
#define TR_BARO_DWN_LIM "Down Lim"
|
||||
#endif //VARIO_EXTENDED
|
||||
#define TR_BARS "Gauges"
|
||||
#define TR_DISPLAY "Display"
|
||||
#ifdef AUDIO
|
||||
|
|
|
@ -236,11 +236,13 @@
|
|||
#define TR_ALARM "Alarm"
|
||||
#define TR_USRDATA "Anv\201ndardata"
|
||||
#define TR_BLADES "Blad"
|
||||
#ifdef VARIO_EXTENDED
|
||||
#define TR_BARO_VARIO "Baro Vario"
|
||||
#define TR_BARO_PR "Use AP"
|
||||
#define TR_BARO_ONLY "BaroOnly"
|
||||
#define TR_BARO_UP_LIM "Up Lim"
|
||||
#define TR_BARO_DWN_LIM "Down Lim"
|
||||
#endif //VARIO_EXTENDED
|
||||
#define TR_BARS "Staplar som visas"
|
||||
#define TR_DISPLAY "Display"
|
||||
#ifdef AUDIO
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue