Barometric Vario function changed
new menu items added to handle new function sound function changed for Vario sound driver changed to remove crisps on continues sound frsky data structure changed to fit new variables, some spares reused
This commit is contained in:
+19
-2
@@ -89,9 +89,9 @@ void audioQueue::heartbeat()
|
||||
toneFreq += toneFreqIncr;
|
||||
}
|
||||
else {
|
||||
SPEAKER_OFF;
|
||||
|
||||
if (tonePause > 0) {
|
||||
SPEAKER_OFF;
|
||||
tonePause--;
|
||||
}
|
||||
else if (t_queueRidx != t_queueWidx) {
|
||||
@@ -99,10 +99,14 @@ void audioQueue::heartbeat()
|
||||
toneTimeLeft = queueToneLength[t_queueRidx];
|
||||
toneFreqIncr = queueToneFreqIncr[t_queueRidx];
|
||||
tonePause = queueTonePause[t_queueRidx];
|
||||
|
||||
if((toneFreq==0) || (toneTimeLeft==0)){
|
||||
SPEAKER_OFF;
|
||||
}
|
||||
if (!queueToneRepeat[t_queueRidx]--) {
|
||||
t_queueRidx = (t_queueRidx + 1) % AUDIO_QUEUE_LENGTH;
|
||||
}
|
||||
} else {
|
||||
SPEAKER_OFF;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -151,6 +155,19 @@ void audioQueue::playASAP(uint8_t tFreq, uint8_t tLen, uint8_t tPause,
|
||||
}
|
||||
}
|
||||
|
||||
void audioQueue::playVario(uint8_t tFreq, uint8_t tLen)
|
||||
{
|
||||
uint8_t next_queueWidx = (t_queueWidx + 1) % AUDIO_QUEUE_LENGTH;
|
||||
if (next_queueWidx != t_queueRidx) {
|
||||
queueToneFreq[t_queueWidx] = tFreq;
|
||||
queueToneLength[t_queueWidx] = tLen;
|
||||
queueTonePause[t_queueWidx] = 0;
|
||||
queueToneRepeat[t_queueWidx] = 0;
|
||||
queueToneFreqIncr[t_queueWidx] = 0;
|
||||
t_queueWidx = next_queueWidx;
|
||||
}
|
||||
}
|
||||
|
||||
void audioQueue::event(uint8_t e, uint8_t f)
|
||||
{
|
||||
s_beeper = (g_eeGeneral.beeperMode>0 || (g_eeGeneral.beeperMode==0 && e>=AU_WARNING1) || (g_eeGeneral.beeperMode>=-1 && e<=AU_ERROR));
|
||||
|
||||
@@ -101,6 +101,8 @@ class audioQueue
|
||||
|
||||
void playASAP(uint8_t tFreq, uint8_t tLen, uint8_t tPause, uint8_t tRepeat=0, int8_t tFreqIncr=0);
|
||||
|
||||
void playVario(uint8_t tFreq, uint8_t tLen);
|
||||
|
||||
inline bool busy() { return (toneTimeLeft > 0); }
|
||||
|
||||
void event(uint8_t e, uint8_t f=BEEP_DEFAULT_FREQ);
|
||||
|
||||
+12
-12
@@ -128,8 +128,8 @@ uint8_t vpot_mod_state = 0;
|
||||
|
||||
ISR(USART2_RX_vect)
|
||||
{
|
||||
//receive data from extension board
|
||||
//bit 9 = 1 mean encoder number, following byte with bit 9 = 0 is increment value
|
||||
//receive data from extension board
|
||||
//bit 9 = 1 mean encoder number, following byte with bit 9 = 0 is increment value
|
||||
/* Get status and 9th bit, then data */
|
||||
/* from buffer */
|
||||
//uint8_t status = UCSR2A;
|
||||
@@ -140,19 +140,19 @@ ISR(USART2_RX_vect)
|
||||
|
||||
/* Filter the 9th bit, then return */
|
||||
resh = (resh >> 1) & 0x01;
|
||||
res = ((resh << 8) | resl);
|
||||
res = ((resh << 8) | resl);
|
||||
if((res & 0x100) == 0x100){
|
||||
vpotToChange = res & 0xff;
|
||||
vpot_mod_state = 1;
|
||||
vpotToChange = res & 0xff;
|
||||
vpot_mod_state = 1;
|
||||
}else{
|
||||
if(vpot_mod_state & (vpotToChange>0) & (vpotToChange<=NUM_EXTRA_ROTARY_ENCODERS))
|
||||
{
|
||||
if(vpot_mod_state & (vpotToChange>0) & (vpotToChange<=NUM_EXTRA_ROTARY_ENCODERS))
|
||||
{
|
||||
int8_t vpot_inc = res & 0xff;
|
||||
if(vpot_inc){
|
||||
incRotaryEncoder(NUM_ROTARY_ENCODERS-NUM_EXTRA_ROTARY_ENCODERS+vpotToChange-1, vpot_inc);
|
||||
}
|
||||
vpot_mod_state = 0;
|
||||
}
|
||||
if(vpot_inc){
|
||||
incRotaryEncoder(NUM_ROTARY_ENCODERS-NUM_EXTRA_ROTARY_ENCODERS+vpotToChange-1, vpot_inc);
|
||||
}
|
||||
vpot_mod_state = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif //EXTRA_ROTARY_ENCODERS
|
||||
|
||||
+104
-59
@@ -243,41 +243,60 @@ void parseTelemHubByte(uint8_t byte)
|
||||
break;
|
||||
|
||||
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)
|
||||
case offsetof(FrskyHubData, baroAltitude_ap):
|
||||
if((!g_model.frsky.use_baroAltitude_ap & (offsetof(FrskyHubData, baroAltitude_bp) == (uint8_t)structPos)) |
|
||||
(g_model.frsky.use_baroAltitude_ap & (offsetof(FrskyHubData, baroAltitude_ap) == (uint8_t)structPos))){
|
||||
//here is baro altitude suggested 0.01m accuracy, i.e. baroAltitude_ap in range [0:99]
|
||||
if(g_model.frsky.use_baroAltitude_ap){
|
||||
uint16_t alt_sign = frskyHubData.baroAltitude_bp/abs(frskyHubData.baroAltitude_bp);
|
||||
frskyHubData.baroAltitude_full = frskyHubData.baroAltitude_bp*100 + frskyHubData.baroAltitude_ap*alt_sign;
|
||||
}else{
|
||||
frskyHubData.baroAltitude_full = frskyHubData.baroAltitude_bp;
|
||||
}
|
||||
if(++frskyHubData.queuePointer>=5)
|
||||
frskyHubData.queuePointer = 0;
|
||||
frskyHubData.lastBaroAltitude_bp = frskyHubData.baroAltitude_bp;
|
||||
|
||||
int8_t tmp = frskyHubData.queuePointer + 1;
|
||||
if(tmp >= 5)
|
||||
tmp = 0;
|
||||
|
||||
frskyHubData.baroAltitudeQueue_full[frskyHubData.queuePointer] =
|
||||
frskyHubData.baroAltitude_full;
|
||||
|
||||
frskyHubData.varioSpeed =
|
||||
frskyHubData.baroAltitudeQueue_full[frskyHubData.queuePointer] -
|
||||
frskyHubData.baroAltitudeQueue_full[tmp];
|
||||
|
||||
// First received barometer altitude => Altitude offset
|
||||
if (!frskyHubData.baroAltitudeOffset)
|
||||
frskyHubData.baroAltitudeOffset = -frskyHubData.baroAltitude_full;
|
||||
frskyHubData.baroAltitude_full += frskyHubData.baroAltitudeOffset;
|
||||
if(g_model.frsky.use_baroAltitude_only){
|
||||
if (frskyHubData.baroAltitude_full > frskyHubData.maxAltitude_full)
|
||||
frskyHubData.maxAltitude_full = frskyHubData.baroAltitude_full;
|
||||
if (frskyHubData.baroAltitude_full < frskyHubData.minAltitude_full)
|
||||
frskyHubData.minAltitude_full = frskyHubData.baroAltitude_full;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case offsetof(FrskyHubData, gpsAltitude_ap):
|
||||
if(g_model.frsky.use_baroAltitude_ap){
|
||||
frskyHubData.gpsAltitude_full = frskyHubData.gpsAltitude_bp*100;
|
||||
} else {
|
||||
frskyHubData.gpsAltitude_full = frskyHubData.gpsAltitude_bp;
|
||||
}
|
||||
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;
|
||||
|
||||
frskyHubData.gpsAltitudeOffset = -frskyHubData.gpsAltitude_full;
|
||||
frskyHubData.gpsAltitude_full += frskyHubData.gpsAltitudeOffset;
|
||||
if(!g_model.frsky.use_baroAltitude_only){
|
||||
if (frskyHubData.gpsAltitude_full > frskyHubData.maxAltitude_full)
|
||||
frskyHubData.maxAltitude_full = frskyHubData.gpsAltitude_full;
|
||||
if (frskyHubData.gpsAltitude_full < frskyHubData.minAltitude_full)
|
||||
frskyHubData.minAltitude_full = frskyHubData.gpsAltitude_full;
|
||||
}
|
||||
if (!frskyHubData.pilotLatitude && !frskyHubData.pilotLongitude) {
|
||||
// First received GPS position => Pilot GPS position
|
||||
getGpsPilotPosition();
|
||||
@@ -625,30 +644,36 @@ void check_frsky()
|
||||
|
||||
if (isFunctionActive(FUNC_VARIO)) {
|
||||
#if defined(AUDIO)
|
||||
uint8_t warble = 0;
|
||||
#endif
|
||||
int8_t verticalSpeed = limit((int16_t)-100, (int16_t)(frskyHubData.varioSpeed/10), (int16_t)+100);
|
||||
|
||||
uint16_t interval;
|
||||
if (verticalSpeed == 0) {
|
||||
interval = 300;
|
||||
}
|
||||
else {
|
||||
if (verticalSpeed < 0) {
|
||||
verticalSpeed = -verticalSpeed;
|
||||
warble = 1;
|
||||
#define VARIO_SPEED_LIMIT 10 //m/s
|
||||
int16_t verticalSpeed = 0;
|
||||
//vertical speed in 0.01m/s now
|
||||
if(g_model.frsky.use_baroAltitude_ap)//means if additional data enabled then _ap unit is 0.01
|
||||
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
|
||||
{
|
||||
SoundAltBeepNextFreq = (0);
|
||||
SoundAltBeepNextTime = (0);
|
||||
}else{
|
||||
SoundAltBeepNextFreq = (((((int32_t)verticalSpeed * 84) + 125000)/10)/10)/20;//;150000)/10)/10)/20;
|
||||
SoundAltBeepNextTime = ((1600 - verticalSpeed) / 100);
|
||||
if(verticalSpeed > 0){
|
||||
if ((int16_t)(g_tmr10ms - s_varioTmr) > (int16_t)(SoundAltBeepNextTime*2)) {
|
||||
s_varioTmr = g_tmr10ms;
|
||||
audio.playVario(SoundAltBeepNextFreq, SoundAltBeepNextTime);
|
||||
}
|
||||
} else {//negative vertical speed gives sound without pauses
|
||||
audio.playVario(SoundAltBeepNextFreq, 1);
|
||||
}
|
||||
interval = (uint8_t)200 / verticalSpeed;
|
||||
}
|
||||
if (g_tmr10ms - s_varioTmr > interval) {
|
||||
s_varioTmr = g_tmr10ms;
|
||||
if (warble)
|
||||
AUDIO_VARIO_DOWN();
|
||||
else
|
||||
AUDIO_VARIO_UP();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif //AUDIO
|
||||
#endif //FRSKY_HUB || WS_HOW_HIGH
|
||||
}
|
||||
|
||||
bool FRSKY_alarmRaised(uint8_t idx)
|
||||
@@ -795,7 +820,9 @@ void resetTelemetry()
|
||||
frskyHubData.cellsCount = 6;
|
||||
|
||||
frskyHubData.gpsAltitude_bp = 50;
|
||||
frskyHubData.gpsAltitude_full = 5000;
|
||||
frskyHubData.baroAltitude_bp = 50;
|
||||
frskyHubData.baroAltitude_full = 5000;
|
||||
frskyHubData.minAltitude = 10;
|
||||
frskyHubData.maxAltitude = 500;
|
||||
|
||||
@@ -1074,7 +1101,25 @@ void menuProcFrsky(uint8_t event)
|
||||
putsTime(x, 1+FH+2*FH*i, value, att, att);
|
||||
}
|
||||
else {
|
||||
putsTelemetryChannel(j ? 128 : 63, i==3 ? 1+7*FH : 1+2*FH+2*FH*i, field-1, value, att);
|
||||
if(g_model.frsky.use_baroAltitude_ap &
|
||||
((field == TELEM_VSPD) |
|
||||
(field == TELEM_ALT) |
|
||||
(field == TELEM_MIN_ALT) |
|
||||
(field == TELEM_MAX_ALT))){
|
||||
switch(field){
|
||||
case TELEM_VSPD:
|
||||
putsTelemetryChannel(j ? 128 : 63, i==3 ? 1+7*FH : 1+2*FH+2*FH*i, field-1, value, att|PREC2);
|
||||
break;
|
||||
case TELEM_ALT:
|
||||
case TELEM_MIN_ALT:
|
||||
case TELEM_MAX_ALT:
|
||||
putsTelemetryChannel(j ? 128 : 63, i==3 ? 1+7*FH : 1+2*FH+2*FH*i, field-1, value/100, att);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -1116,14 +1161,14 @@ void menuProcFrsky(uint8_t event)
|
||||
}
|
||||
uint8_t width = (uint8_t)limit((int16_t)0, (int16_t)(((int32_t)100 * (value - barMin)) / (barMax - barMin)), (int16_t)100);
|
||||
|
||||
// reversed barshade for T1/T2
|
||||
uint8_t barShade;
|
||||
if (source == TELEM_T1 || source == TELEM_T2)
|
||||
barShade = ((threshold < value) ? DOTTED : SOLID);
|
||||
else
|
||||
barShade = ((threshold > value) ? DOTTED : SOLID);
|
||||
lcd_filled_rect(26, bars_height+6+1+i*(bars_height+6), width, bars_height, barShade);
|
||||
|
||||
// reversed barshade for T1/T2
|
||||
uint8_t barShade;
|
||||
if (source == TELEM_T1 || source == TELEM_T2)
|
||||
barShade = ((threshold < value) ? DOTTED : SOLID);
|
||||
else
|
||||
barShade = ((threshold > value) ? DOTTED : SOLID);
|
||||
lcd_filled_rect(26, bars_height+6+1+i*(bars_height+6), width, bars_height, barShade);
|
||||
|
||||
for (uint8_t j=50; j<125; j+=25)
|
||||
if (j>26+thresholdX || j>26+width) lcd_vline(j, bars_height+6+1+i*(bars_height+6), bars_height);
|
||||
if (thresholdX) {
|
||||
|
||||
+10
-10
@@ -105,33 +105,33 @@ PACK(struct FrskyHubData {
|
||||
int16_t accelZ; // 0x26 1/256th gram (-8g ~ +8g)
|
||||
uint8_t gpsDistNeeded:1; // 1bits out of 16bits spare reused
|
||||
int8_t gpsFix:2; // 2bits out of 16bits spare reused: -1=never fixed, 0=not fixed now, 1=fixed
|
||||
uint8_t spare1:1; //
|
||||
uint8_t spare1:1; //
|
||||
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 varioQueue[10]; // circular-buffer
|
||||
uint8_t queuePointer; // circular-buffer pointer
|
||||
int8_t spare2;
|
||||
int16_t lastBaroAltitude_bp;
|
||||
int32_t minAltitude_full; //4 bytes from varioQueue reused
|
||||
int32_t maxAltitude_full; //4 bytes from varioQueue reused
|
||||
int8_t spare2[2];//varioQueue[10]; // circular-buffer 2
|
||||
uint8_t queuePointer; // circular-buffer pointer 3
|
||||
int8_t spare3;// 4
|
||||
int16_t spare4;//lastBaroAltitude; 6
|
||||
int16_t varioSpeed;
|
||||
/* next fields must keep this order! */
|
||||
int16_t minAltitude;
|
||||
int16_t maxAltitude;
|
||||
int32_t gpsAltitude_full;//4 bytes fro minAltitude and maxAltitude reused
|
||||
uint16_t maxRpm;
|
||||
int16_t maxTemperature1;
|
||||
int16_t maxTemperature2;
|
||||
uint16_t maxGpsSpeed;
|
||||
uint16_t maxGpsDistance;
|
||||
/* end */
|
||||
int16_t varioAcc1;
|
||||
int16_t varioAcc2;
|
||||
int32_t baroAltitude_full;// 4 bytes from varioAcc1 and varioAcc2 reused
|
||||
uint16_t volts_bp; // 0x3A
|
||||
uint16_t volts_ap; // 0x3B
|
||||
// end of FrSky Hub data
|
||||
uint16_t gpsDistance;
|
||||
int16_t gpsAltitudeOffset;
|
||||
uint8_t minCellMinVolts;
|
||||
|
||||
int32_t baroAltitudeQueue_full[5];//20
|
||||
});
|
||||
|
||||
#elif defined(WS_HOW_HIGH)
|
||||
|
||||
+44
-3
@@ -746,7 +746,6 @@ void menuProcPhasesAll(uint8_t event)
|
||||
att = i==sub ? INVERS : 0;
|
||||
PhaseData *p = phaseaddress(i);
|
||||
#if defined(EXTRA_ROTARY_ENCODERS)
|
||||
// lcd_outdezNAtt(0, y, i, att|LEFT, 1);
|
||||
putsFlightPhase(0, y, i+1, att|CONDENSED);
|
||||
#else //EXTRA_ROTARY_ENCODERS
|
||||
putsFlightPhase(0, y, i+1, att);
|
||||
@@ -2004,8 +2003,8 @@ void menuProcFunctionSwitches(uint8_t event)
|
||||
#define TELEM_COL2 (9*FW+2)
|
||||
void menuProcTelemetry(uint8_t event)
|
||||
{
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
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});
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)// v v v v 4 new menu items for baro alt/vario
|
||||
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, 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
|
||||
@@ -2153,6 +2152,48 @@ void menuProcTelemetry(uint8_t event)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.frsky.blades, 0, 2);
|
||||
}
|
||||
subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
y = (subN-s_pgOfs)*FH;
|
||||
lcd_putsLeft(y, STR_BARO_VARIO);
|
||||
}
|
||||
subN++;
|
||||
|
||||
if(s_pgOfs<subN) {//setup baro altimeter after point data to be used
|
||||
y = (subN-s_pgOfs)*FH;
|
||||
lcd_puts(4, y, STR_BARO_PR);
|
||||
menu_lcd_onoff( TELEM_COL2, y, g_model.frsky.use_baroAltitude_ap, sub==subN ) ;
|
||||
if (sub==subN)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.frsky.use_baroAltitude_ap, 0, 1);
|
||||
}
|
||||
subN++;
|
||||
|
||||
if(s_pgOfs<subN) {//use barometer altitude only if ON and use GPS altitude if OFF
|
||||
y = (subN-s_pgOfs)*FH;
|
||||
lcd_puts(4, y, STR_BARO_ONLY);
|
||||
menu_lcd_onoff( TELEM_COL2, y, g_model.frsky.use_baroAltitude_only, sub==subN ) ;
|
||||
if (sub==subN)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.frsky.use_baroAltitude_only, 0, 1);
|
||||
}
|
||||
subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
y = (subN-s_pgOfs)*FH;
|
||||
lcd_puts(4, y, STR_BARO_UP_LIM);
|
||||
lcd_outdezAtt(TELEM_COL2+FWNUM+2*FW, y, VARIO_LIM_MUL*g_model.varioSpeedUpMin, (sub==subN ? INVERS : 0)|PREC2);//TODO: EDIT DECIMALS HERE
|
||||
if (sub==subN)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.varioSpeedUpMin, 0, 15);
|
||||
}
|
||||
subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
y = (subN-s_pgOfs)*FH;
|
||||
lcd_puts(4, y, STR_BARO_DWN_LIM);
|
||||
lcd_outdezAtt(TELEM_COL2+FWNUM+2*FW, y, VARIO_LIM_MUL*g_model.varioSpeedDownMin, (sub==subN ? INVERS : 0)|PREC2);//TODO: EDIT DECIMALS HERE
|
||||
if (sub==subN)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.varioSpeedDownMin, 0, 15);
|
||||
}
|
||||
subN++;
|
||||
#endif
|
||||
|
||||
// Display
|
||||
|
||||
+8
-2
@@ -347,18 +347,21 @@ PACK(typedef struct t_FrSkyBarData {
|
||||
uint16_t barMax:6; // ditto for max display (would usually = ratio)
|
||||
}) FrSkyBarData;
|
||||
|
||||
enum FrskyUsrProtocols {
|
||||
enum FrskyUsrProtocols {//probably to add x3mfly protocol here
|
||||
PROTO_NONE,
|
||||
PROTO_FRSKY_HUB,
|
||||
PROTO_WS_HOW_HIGH
|
||||
};
|
||||
|
||||
#define VARIO_LIM_MUL 20 //to get 0.2m steps
|
||||
|
||||
PACK(typedef struct t_FrSkyData {
|
||||
FrSkyChannelData channels[2];
|
||||
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
|
||||
uint8_t spare:2;
|
||||
uint8_t use_baroAltitude_ap:1;//used 2 spare bits here
|
||||
uint8_t use_baroAltitude_only:1;
|
||||
FrSkyBarData bars[4];
|
||||
FrSkyRSSIAlarm rssiAlarms[2];
|
||||
}) FrSkyData;
|
||||
@@ -508,6 +511,9 @@ PACK(typedef struct t_ModelData {
|
||||
uint8_t frskyLines[4];
|
||||
uint16_t frskyLinesXtra;
|
||||
int8_t servoCenter[NUM_CHNOUT];
|
||||
//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
|
||||
}) ModelData;
|
||||
|
||||
extern EEGeneral g_eeGeneral;
|
||||
|
||||
@@ -148,6 +148,11 @@ 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
|
||||
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;
|
||||
const pm_char STR_BARS[] PROGMEM = TR_BARS;
|
||||
const pm_char STR_DISPLAY[] PROGMEM = TR_DISPLAY;
|
||||
const pm_char STR_BEEPERMODE[] PROGMEM = TR_BEEPERMODE;
|
||||
|
||||
@@ -235,6 +235,11 @@ extern const pm_char STR_BAR[];
|
||||
extern const pm_char STR_ALARM[];
|
||||
extern const pm_char STR_USRDATA[];
|
||||
extern const pm_char STR_BLADES[];
|
||||
extern const pm_char STR_BARO_VARIO[];
|
||||
extern const pm_char STR_BARO_PR[];
|
||||
extern const pm_char STR_BARO_ONLY[];
|
||||
extern const pm_char STR_BARO_UP_LIM[];
|
||||
extern const pm_char STR_BARO_DWN_LIM[];
|
||||
extern const pm_char STR_BARS[];
|
||||
extern const pm_char STR_DISPLAY[];
|
||||
extern const pm_char STR_BEEPERMODE[];
|
||||
|
||||
+5
-3
@@ -423,7 +423,7 @@ 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)
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_ALT) return frskyHubData.baroAltitude_bp;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_ALT) return frskyHubData.baroAltitude_full;
|
||||
#endif
|
||||
#if defined(FRSKY_HUB)
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_RPM) return frskyHubData.rpm;
|
||||
@@ -440,7 +440,9 @@ int16_t getValue(uint8_t i)
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_VSPD) return frskyHubData.varioSpeed;
|
||||
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));
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MIN_ALT) return frskyHubData.minAltitude_full;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MAX_ALT) return frskyHubData.maxAltitude_full;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MAX_DIST) return *(((int16_t*)(&frskyHubData.minAltitude_full))+i-(CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_MIN_ALT-1));
|
||||
#endif
|
||||
#endif
|
||||
else return 0;
|
||||
@@ -1260,7 +1262,7 @@ BeepANACenter evalSticks(uint8_t phase)
|
||||
v = v * (int32_t)RESX / (max((int16_t)100,(v>0 ?
|
||||
g_eeGeneral.calibSpanPos[i] :
|
||||
g_eeGeneral.calibSpanNeg[i])));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if(v < -RESX) v = -RESX;
|
||||
|
||||
@@ -236,6 +236,11 @@
|
||||
#define TR_ALARM "Alarm"
|
||||
#define TR_USRDATA "UsrData"
|
||||
#define TR_BLADES "Blades"
|
||||
#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"
|
||||
#define TR_BARS "Bars"
|
||||
#define TR_DISPLAY "Display"
|
||||
#ifdef AUDIO
|
||||
|
||||
@@ -236,6 +236,11 @@
|
||||
#define TR_ALARM "Alarme"
|
||||
#define TR_USRDATA "UsrData"
|
||||
#define TR_BLADES "Blades"
|
||||
#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"
|
||||
#define TR_BARS "Gauges"
|
||||
#define TR_DISPLAY "Display"
|
||||
#ifdef AUDIO
|
||||
|
||||
@@ -236,6 +236,11 @@
|
||||
#define TR_ALARM "Alarm"
|
||||
#define TR_USRDATA "Anv\201ndardata"
|
||||
#define TR_BLADES "Blad"
|
||||
#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"
|
||||
#define TR_BARS "Staplar som visas"
|
||||
#define TR_DISPLAY "Display"
|
||||
#ifdef AUDIO
|
||||
|
||||
Reference in New Issue
Block a user