1
0
Fork 0
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:
maxim.karban@gmail.com 2012-04-17 20:02:31 +00:00
parent 85540e1ef4
commit b3113fbcbc
11 changed files with 101 additions and 10 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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