Revert last 2 commits

This commit is contained in:
bsongis
2012-04-16 18:56:34 +00:00
parent 938e907322
commit a34652e99c
9 changed files with 75 additions and 178 deletions
+53 -92
View File
@@ -243,60 +243,41 @@ void parseTelemHubByte(uint8_t byte)
break;
case offsetof(FrskyHubData, baroAltitude_bp):
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;
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_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;
// 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;
}
}
{
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;
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_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;
}
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();
@@ -644,39 +625,30 @@ 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);
#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.frsky.varioSpeedUpMin*VARIO_LIM_MUL && verticalSpeed > g_model.frsky.varioSpeedDownMin*(-VARIO_LIM_MUL)) //check thresholds here in cm/s
{
SoundAltBeepNextFreq = (0);
SoundAltBeepNextTime = (0);
}else{
SoundAltBeepNextFreq = (((verticalSpeed * 56) + 77400)/10)/10/30;
SoundAltBeepNextTime = ((1600 - verticalSpeed) / 100);
if(verticalSpeed > 0){
if ((int16_t)(g_tmr10ms - s_varioTmr) > (int16_t)(SoundAltBeepNextTime*2)) {
s_varioTmr = g_tmr10ms;
audio.playNow(SoundAltBeepNextFreq, SoundAltBeepNextTime, 0, 0, 0);
}
} else {//negative vertical speed gives sound without pauses
if (g_tmr10ms - s_varioTmr > SoundAltBeepNextTime) {
s_varioTmr = g_tmr10ms;
audio.playNow(SoundAltBeepNextFreq, SoundAltBeepNextTime+2, 0, 0, 0);
}
}
}
uint16_t interval;
if (verticalSpeed == 0) {
interval = 300;
}
else {
if (verticalSpeed < 0) {
verticalSpeed = -verticalSpeed;
warble = 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 //AUDIO
#endif //FRSKY_HUB || WS_HOW_HIGH
#endif
}
bool FRSKY_alarmRaised(uint8_t idx)
@@ -823,9 +795,7 @@ 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;
@@ -1104,16 +1074,7 @@ void menuProcFrsky(uint8_t event)
putsTime(x, 1+FH+2*FH*i, value, att, att);
}
else {
if(g_model.frsky.use_baroAltitude_ap &
((field == TELEM_VSPD) |
(field == TELEM_ALT) |
(field == TELEM_MIN_ALT) |
(field == TELEM_MAX_ALT))){
putsTelemetryChannel(j ? 128 : 63, i==3 ? 1+7*FH : 1+2*FH+2*FH*i, field-1, value, att|PREC2);
}
else {
putsTelemetryChannel(j ? 128 : 63, i==3 ? 1+7*FH : 1+2*FH+2*FH*i, field-1, value, att);
}
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);
}
}
+10 -10
View File
@@ -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
int32_t minAltitude_full; //4 bytes from varioQueue reused
int32_t maxAltitude_full; //4 bytes from varioQueue reused
int8_t dummy1[2];//varioQueue[10]; // circular-buffer 2
uint8_t queuePointer; // circular-buffer pointer 3
int8_t spare2;// 4
int16_t dummy2;//lastBaroAltitude; 6
int8_t varioQueue[10]; // circular-buffer
uint8_t queuePointer; // circular-buffer pointer
int8_t spare2;
int16_t lastBaroAltitude_bp;
int16_t varioSpeed;
/* next fields must keep this order! */
int32_t gpsAltitude_full;//4 bytes fro minAltitude and maxAltitude reused
int16_t minAltitude;
int16_t maxAltitude;
uint16_t maxRpm;
int16_t maxTemperature1;
int16_t maxTemperature2;
uint16_t maxGpsSpeed;
uint16_t maxGpsDistance;
/* end */
int32_t baroAltitude_full;// 4 bytes from varioAcc1 and varioAcc2 reused
int16_t varioAcc1;
int16_t varioAcc2;
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)
+1 -1
View File
@@ -72,7 +72,7 @@ const MenuFuncP_PROGMEM menuTabDiag[] PROGMEM = {
};
#define GENERAL_PARAM_OFS 17*FW
uint8_t onoffMenuItem( uint8_t value, uint8_t y, const pm_char *s, uint8_t condition, uint8_t event )
uint8_t onoffMenuItem( uint8_t value, uint8_t y, const prog_char *s, uint8_t condition, uint8_t event )
{
lcd_putsLeft(y, s);
menu_lcd_onoff( GENERAL_PARAM_OFS, y, value, condition ) ;
+7 -49
View File
@@ -1662,7 +1662,7 @@ void menuProcMixAll(uint8_t event)
void menuProcLimits(uint8_t event)
{
#ifdef LIMITS_US
#ifdef PPM_CENTER_ADJUSTABLE
#define LIMITS_ITEMS_COUNT 4
#else
#define LIMITS_ITEMS_COUNT 3
@@ -1672,7 +1672,7 @@ void menuProcLimits(uint8_t event)
int8_t sub = m_posVert - 1;
#ifdef LIMITS_US
#ifdef PPM_CENTER_ADJUSTABLE
if (sub >= 0) {
lcd_outdezAtt(12*FW, 0, PPM_CENTER+g_model.servoCenter[sub]+g_chans512[sub]/2, 0);
lcd_puts(12*FW, 0, STR_US);
@@ -1697,7 +1697,7 @@ void menuProcLimits(uint8_t event)
LimitData *ld = limitaddress(k) ;
#ifndef LIMITS_US
#ifndef PPM_CENTER_ADJUSTABLE
int16_t v = (ld->revert) ? -ld->offset : ld->offset;
char swVal = '-'; // '-', '<', '>'
@@ -1753,7 +1753,7 @@ void menuProcLimits(uint8_t event)
}
break;
case 3:
#ifdef LIMITS_US
#ifdef PPM_CENTER_ADJUSTABLE
lcd_putcAtt(17*FW-2, y, ld->revert ? 127 : 126, attr);
#else
lcd_putsiAtt(18*FW, y, STR_MMMINV, ld->revert, attr);
@@ -1762,7 +1762,7 @@ void menuProcLimits(uint8_t event)
CHECK_INCDEC_MODELVAR(event, ld->revert, 0, 1);
}
break;
#ifdef LIMITS_US
#ifdef PPM_CENTER_ADJUSTABLE
case 4:
lcd_outdezAtt(21*FW+2, y, PPM_CENTER+g_model.servoCenter[k], attr);
if (active) {
@@ -2001,8 +2001,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)// v v v v 4 new menu items for baro alt/vario
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 29, {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});
#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});
#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
@@ -2150,48 +2150,6 @@ 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+4, y, VARIO_LIM_MUL*g_model.frsky.varioSpeedUpMin, (sub==subN ? INVERS : 0)|PREC2);//TODO: EDIT DECIMALS HERE
if (sub==subN)
CHECK_INCDEC_MODELVAR(event, g_model.frsky.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+4, y, -VARIO_LIM_MUL*g_model.frsky.varioSpeedDownMin, (sub==subN ? INVERS : 0)|PREC2);//TODO: EDIT DECIMALS HERE
if (sub==subN)
CHECK_INCDEC_MODELVAR(event, g_model.frsky.varioSpeedDownMin, 0, 15);
}
subN++;
#endif
// Display
+2 -7
View File
@@ -347,25 +347,20 @@ PACK(typedef struct t_FrSkyBarData {
uint16_t barMax:6; // ditto for max display (would usually = ratio)
}) FrSkyBarData;
enum FrskyUsrProtocols {//probably to add x3mfly protocol here
enum FrskyUsrProtocols {
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 use_baroAltitude_ap:1;//used 2 spare bits here
uint8_t use_baroAltitude_only:1;
uint8_t spare:2;
FrSkyBarData bars[4];
FrSkyRSSIAlarm rssiAlarms[2];
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
}) FrSkyData;
#ifdef MAVLINK
-5
View File
@@ -148,11 +148,6 @@ 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;
-5
View File
@@ -235,11 +235,6 @@ 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[];
+2 -4
View File
@@ -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_full;
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_ALT) return frskyHubData.baroAltitude_bp;
#endif
#if defined(FRSKY_HUB)
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+TELEM_RPM) return frskyHubData.rpm;
@@ -440,9 +440,7 @@ 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_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));
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
else return 0;
-5
View File
@@ -236,11 +236,6 @@
#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