Fix for slow / delayed mixes

Telemetry screens redesigned
This commit is contained in:
bsongis
2012-03-09 21:11:54 +00:00
parent 55de51acb9
commit cf68258531
12 changed files with 181 additions and 134 deletions
+130 -95
View File
@@ -70,7 +70,17 @@ struct FrskyAlarm frskyAlarms[4];
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
FrskyHubData frskyHubData; // TODO initialization?
uint8_t barsThresholds[BAR_MAX-3];
enum BarThresholdIdx {
THLD_ALT,
THLD_RPM,
THLD_FUEL,
THLD_T1,
THLD_T2,
THLD_SPEED,
THLD_CELL,
THLD_MAX,
};
uint8_t barsThresholds[THLD_MAX];
#endif
void frskyPushValue(uint8_t *&ptr, uint8_t value)
@@ -133,10 +143,12 @@ inline void getGpsDistance()
dist = frskyHubData.distFromEarthAxis * angle / 1000000;
result += dist*dist;
dist = frskyHubData.baroAltitude_bp + frskyHubData.baroAltitudeOffset;
dist = max(frskyHubData.baroAltitude_bp, frskyHubData.gpsAltitude_bp);
result += dist*dist;
frskyHubData.gpsDistance = isqrt32(result);
if (frskyHubData.gpsDistance > frskyHubData.maxGpsDistance)
frskyHubData.maxGpsDistance = frskyHubData.gpsDistance;
}
inline int8_t parseTelemHubIndex(uint8_t index)
@@ -216,12 +228,22 @@ void parseTelemHubByte(uint8_t byte)
((uint8_t*)&frskyHubData)[structPos] = lowByte;
((uint8_t*)&frskyHubData)[structPos+1] = byte;
if ((uint8_t)structPos == offsetof(FrskyHubData, baroAltitude_bp) && !frskyHubData.baroAltitudeOffset) {
if ((uint8_t)structPos == offsetof(FrskyHubData, baroAltitude_bp)) {
// First received altitude => Altitude offset
frskyHubData.baroAltitudeOffset = -frskyHubData.baroAltitude_bp;
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 ((uint8_t)structPos == 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.pilotLatitude && !frskyHubData.pilotLongitude) {
// First received GPS position => Pilot GPS position
getGpsPilotPosition();
@@ -484,13 +506,13 @@ void FRSKY10mspoll(void)
uint8_t alarm = 1 - (FrskyAlarmSendState % 2);
if (FrskyAlarmSendState < 4) {
uint8_t channel = 1 - (FrskyAlarmSendState / 2);
*ptr++ = (g_eeGeneral.beeperMode != -2/*TODO constant*/ ? ALARM_LEVEL(channel, alarm) : alarm_off);
*ptr++ = (g_eeGeneral.beeperMode != e_mode_quiet ? ALARM_LEVEL(channel, alarm) : alarm_off);
*ptr++ = ALARM_GREATER(channel, alarm);
frskyPushValue(ptr, g_model.frsky.channels[channel].alarms_value[alarm]);
*ptr++ = (A22PKT + FrskyAlarmSendState); // fc - fb - fa - f9
}
else {
*ptr++ = (g_eeGeneral.beeperMode != -2/*TODO constant*/ ? ((2+alarm+g_model.frsky.rssiAlarms[alarm].level) % 4) : alarm_off);
*ptr++ = (g_eeGeneral.beeperMode != e_mode_quiet ? ((2+alarm+g_model.frsky.rssiAlarms[alarm].level) % 4) : alarm_off);
*ptr++ = 0x00 ;
frskyPushValue(ptr, 50+g_model.frsky.rssiAlarms[alarm].value);
*ptr++ = (RSSI1PKT-alarm); // f7 - f6
@@ -613,23 +635,12 @@ void resetTelemetry()
{
memset(frskyTelemetry, 0, sizeof(frskyTelemetry));
memset(frskyRSSI, 0, sizeof(frskyRSSI));
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
frskyHubData.baroAltitudeOffset = -frskyHubData.baroAltitude_bp;
#endif
memset(&frskyHubData, 0, sizeof(frskyHubData));
#if defined(FRSKY_HUB)
frskyHubData.maxGpsSpeed = 0;
frskyHubData.cellsCount = 0;
frskyHubData.minCellVolts = 0;
frskyHubData.pilotLatitude = 0;
frskyHubData.pilotLongitude = 0;
frskyHubData.gpsLatitude_bp = 2;
frskyHubData.gpsLongitude_bp = 2;
frskyHubData.gpsFix = -1;
frskyHubData.gpsDistNeeded = 0;
frskyHubData.gpsDistance = 0;
#endif
#ifdef SIMU
@@ -651,14 +662,32 @@ void resetTelemetry()
getGpsDistance();
frskyHubData.cellsCount = 6;
frskyHubData.gpsAltitude_bp = 50;
frskyHubData.baroAltitude_bp = 50;
frskyHubData.maxAltitude = 500;
#endif
}
#if defined(FRSKY)
enum FrskyViews {
e_frsky_bars,
e_frsky_a1a2,
#ifdef WS_HOW_HIGH
e_frsky_ws_how_high,
#endif
#ifdef FRSKY_HUB
e_frsky_hub = e_frsky_a1a2+1,
e_frsky_gps_inflight,
e_frsky_gps_position,
#endif
};
static uint8_t s_frsky_view = e_frsky_bars;
void displayRssiLine()
{
if (frskyStreaming > 0) {
lcd_hline(0, 54, 128, 0); // separator
lcd_hline(0, 55, 128, 0); // separator
lcd_putsLeft(7*FH+1, STR_TX); lcd_outdezNAtt(4*FW, 7*FH+1, frskyRSSI[1].value, LEADING0, 2);
lcd_rect(25, 57, 38, 7);
lcd_filled_rect(26, 58, 9*frskyRSSI[1].value/25, 5);
@@ -672,41 +701,55 @@ void displayRssiLine()
lcd_filled_rect(0, DISPLAY_H-8, DISPLAY_W, 8);
}
}
#endif
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
void displayAltitudeLine(uint8_t x, uint8_t y, uint8_t flags)
void displayAltitudeLine(uint8_t y, uint8_t gps)
{
lcd_putsn(x, y, STR_ALTnDST, 4);
int16_t value = frskyHubData.baroAltitude_bp + frskyHubData.baroAltitudeOffset;
putsTelemetryValue(lcd_lastPos, y, value, UNIT_METERS, flags|LEFT);
lcd_putsLeft(y, STR_ALT);
uint16_t alt;
uint8_t att, x;
if (gps) {
alt = frskyHubData.gpsAltitude_bp;
att = DBLSIZE;
x = 10*FW+1;
}
else {
alt = frskyHubData.baroAltitude_bp;
att = LEFT|DBLSIZE;
x = 4*FW;
}
putsTelemetryValue(x, y, alt, UNIT_METERS, att);
lcd_putc(14*FW, y, '>');
putsTelemetryValue(15*FW, y, frskyHubData.maxAltitude, UNIT_METERS, LEFT);
}
#endif
enum FrskyViews {
e_frsky_bars,
e_frsky_a1a2,
#ifdef WS_HOW_HIGH
e_frsky_ws_how_high,
#if defined(FRSKY_HUB)
void displayGpsTime()
{
#define TIME_LINE (7*FH+1)
uint8_t att = (frskyStreaming > 0 ? LEFT|LEADING0 : LEFT|LEADING0|BLINK);
lcd_outdezNAtt(6*FW+5, TIME_LINE, frskyHubData.hour, att, 2);
lcd_putcAtt(8*FW+2, TIME_LINE, ':', att);
lcd_outdezNAtt(9*FW+2, TIME_LINE, frskyHubData.min, att, 2);
lcd_putcAtt(11*FW-1, TIME_LINE, ':', att);
lcd_outdezNAtt(12*FW-1, TIME_LINE, frskyHubData.sec, att, 2);
lcd_filled_rect(0, TIME_LINE-1, DISPLAY_W, 8);
}
#endif
#ifdef FRSKY_HUB
e_frsky_hub = e_frsky_a1a2+1,
e_frsky_gps
#endif
};
#if defined(FRSKY_HUB) && defined(WS_HOW_HIGH)
#define FRSKY_VIEW_MAX (g_model.frsky.usrProto == 0 ? 1 : ((g_model.frsky.usrProto == 1 && frskyHubData.gpsFix >= 0) ? 3 : 2))
#define FRSKY_VIEW_MAX (g_model.frsky.usrProto == 0 ? 1 : ((g_model.frsky.usrProto == 1 && frskyHubData.gpsFix >= 0) ? 4 : 2))
#elif defined(FRSKY_HUB)
#define FRSKY_VIEW_MAX (g_model.frsky.usrProto == 0 ? 1 : (frskyHubData.gpsFix >= 0 ? 3 : 2))
#define FRSKY_VIEW_MAX (g_model.frsky.usrProto == 0 ? 1 : (frskyHubData.gpsFix >= 0 ? 4 : 2))
#elif defined(WS_HOW_HIGH)
#define FRSKY_VIEW_MAX (g_model.frsky.usrProto == 0 ? 1 : 2)
#endif
void menuProcFrsky(uint8_t event)
{
static uint8_t s_frsky_view = e_frsky_bars;
switch (event) {
case EVT_KEY_BREAK(KEY_UP):
if (s_frsky_view-- == 0)
@@ -777,46 +820,37 @@ void menuProcFrsky(uint8_t event)
}
else if (s_frsky_view == e_frsky_a1a2) {
// Big A1 / A2 with min and max
uint8_t x0, blink;
if (g_model.frsky.channels[0].ratio || g_model.frsky.channels[1].ratio) {
x0 = 0;
for (uint8_t i=0; i<2; i++) {
if (g_model.frsky.channels[i].ratio) {
blink = (FRSKY_alarmRaised(i) ? INVERS : 0);
putsStrIdx(x0, 2*FH, STR_A, i+1, TWO_DOTS);
x0 += 3*FW;
putsTelemetryChannel(x0, 2*FH, i, frskyTelemetry[i].value, blink|DBLSIZE|LEFT);
putsTelemetryChannel(x0+FW, 3*FH, i, frskyTelemetry[i].min, 0);
putsTelemetryChannel(x0+3*FW, 3*FH, i, frskyTelemetry[i].max, LEFT);
x0 = 11*FW-2;
}
uint8_t blink;
uint8_t y = 2*FH;
for (uint8_t i=0; i<2; i++) {
if (g_model.frsky.channels[i].ratio) {
blink = (FRSKY_alarmRaised(i) ? INVERS : 0);
putsStrIdx(0, y, STR_A, i+1, TWO_DOTS);
putsTelemetryChannel(3*FW, y, i, frskyTelemetry[i].value, blink|DBLSIZE|LEFT);
lcd_putc(12*FW-1, y-FH, '<'); putsTelemetryChannel(17*FW, y-FH, i, frskyTelemetry[i].min, NO_UNIT);
lcd_putc(12*FW, y, '>'); putsTelemetryChannel(17*FW, y, i, frskyTelemetry[i].max, NO_UNIT);
y += 3*FH;
}
}
#ifdef FRSKY_HUB
// Cells voltage
{
uint8_t x, y;
x = 3*FW;
y = 5*FH-3;
if (frskyHubData.cellsCount > 0) {
uint8_t y = 1*FH;
for (uint8_t k=0; k<frskyHubData.cellsCount && k<6; k++) {
uint8_t attr = (barsThresholds[6/*TODO constant*/] && frskyHubData.cellVolts[k] < barsThresholds[6/*TODO constant*/]) ? BLINK|PREC2|LEFT : PREC2|LEFT;
if (k == 3) {
x = 3*FW;
y = 6*FH-3;
}
putsStrIdx(x-3*FW, y, STR_V, k+1, TWO_DOTS);
lcd_outdezNAtt(x, y, frskyHubData.cellVolts[k] * 2, attr, 4);
x += 7*FW;
uint8_t attr = (barsThresholds[THLD_CELL] && frskyHubData.cellVolts[k] < barsThresholds[THLD_CELL]) ? BLINK|PREC2 : PREC2;
lcd_outdezNAtt(21*FW, y, frskyHubData.cellVolts[k] * 2, attr, 4);
y += 1*FH;
}
lcd_vline(17*FW+4, 8, 47);
}
#endif
displayRssiLine();
}
#ifdef WS_HOW_HIGH
else if (g_model.frsky.usrProto == PROTO_WS_HOW_HIGH && s_frsky_view == e_frsky_ws_how_high) {
displayAltitudeLine(0, 4*FH, DBLSIZE);
displayAltitudeLine(4*FH, 0/*baro*/);
displayRssiLine();
}
#endif
@@ -838,7 +872,7 @@ void menuProcFrsky(uint8_t event)
putsTelemetryValue(15*FW, 2*FH, frskyHubData.fuelLevel, UNIT_PERCENT, DBLSIZE|LEFT);
// Altitude (barometric)
displayAltitudeLine(0, 6*FH, DBLSIZE);
displayAltitudeLine(6*FH, 0/*baro*/);
// Accelerometer
#define ACC_LINE (7*FH+1)
@@ -859,17 +893,28 @@ void menuProcFrsky(uint8_t event)
displayRssiLine();
}
}
else if (s_frsky_view == e_frsky_gps) {
uint8_t att = (frskyStreaming > 0 ? LEFT|LEADING0 : LEFT|LEADING0|BLINK);
// Time
#define TIME_LINE (7*FH+1)
lcd_outdezNAtt(6*FW+5, TIME_LINE, frskyHubData.hour, att, 2);
lcd_putcAtt(8*FW+2, TIME_LINE, ':', att);
lcd_outdezNAtt(9*FW+2, TIME_LINE, frskyHubData.min, att, 2);
lcd_putcAtt(11*FW-1, TIME_LINE, ':', att);
lcd_outdezNAtt(12*FW-1, TIME_LINE, frskyHubData.sec, att, 2);
lcd_filled_rect(0, TIME_LINE-1, DISPLAY_W, 8);
else if (s_frsky_view == e_frsky_gps_inflight) {
// GPS speed
#define SPEED_LINE (2*FH)
lcd_putsLeft(SPEED_LINE, STR_SPD);
putsTelemetryValue(10*FW+1, SPEED_LINE, frskyHubData.gpsSpeed_bp, UNIT_KTS, DBLSIZE);
lcd_putc(14*FW, SPEED_LINE, '>');
putsTelemetryValue(15*FW, SPEED_LINE, frskyHubData.maxGpsSpeed, UNIT_KTS, LEFT);
// GPS altitude
#define ALTITUDE_LINE (4*FH)
displayAltitudeLine(ALTITUDE_LINE, 1/*gps*/);
// GPS distance
#define DISTANCE_LINE (6*FH)
lcd_putsLeft(DISTANCE_LINE, STR_DST);
putsTelemetryValue(10*FW+1, DISTANCE_LINE, frskyHubData.gpsDistance, UNIT_METERS, DBLSIZE);
lcd_putc(14*FW, DISTANCE_LINE, '>');
putsTelemetryValue(15*FW, DISTANCE_LINE, frskyHubData.maxGpsDistance, UNIT_METERS, LEFT);
displayGpsTime();
}
else if (s_frsky_view == e_frsky_gps_position) {
// Latitude
#define LAT_LINE (2*FH-4)
lcd_putsLeft( LAT_LINE, PSTR("Lat:"));
@@ -892,28 +937,18 @@ void menuProcFrsky(uint8_t event)
lcd_outdezNAtt(lcd_lastPos+2, LONG_LINE, frskyHubData.gpsLongitude_ap, LEFT|UNSIGN|LEADING0, 4); // after '.'
lcd_putc(lcd_lastPos+1, LONG_LINE, frskyHubData.gpsLongitudeEW ? frskyHubData.gpsLongitudeEW : '-');
#if 0
#define COURSE_LINE (4*FH-2)
// Course / Heading
lcd_puts(5, 5*FH, STR_HDG);
lcd_outdezNAtt(lcd_lastPos, 5*FH, frskyHubData.gpsCourse_bp, LEFT|LEADING0, 3); // before '.'
lcd_plot(lcd_lastPos, 6*FH-2, 0); // small decimal point
lcd_outdezAtt(lcd_lastPos+2, 5*FH, frskyHubData.gpsCourse_ap, LEFT); // after '.'
lcd_putc(lcd_lastPos, 5*FH, '@');
#endif
lcd_putsLeft(COURSE_LINE, PSTR("Hdg:"));
lcd_outdezNAtt(lcd_lastPos, COURSE_LINE, frskyHubData.gpsCourse_bp, LEFT|LEADING0, 3); // before '.'
lcd_plot(lcd_lastPos, COURSE_LINE+6, 0); // small decimal point
lcd_outdezAtt(lcd_lastPos+2, COURSE_LINE, frskyHubData.gpsCourse_ap, LEFT); // after '.'
lcd_putc(lcd_lastPos, COURSE_LINE, '@');
// Speed
#define SPEED_LINE (6*FH)
lcd_putsLeft(SPEED_LINE, STR_SPDnMAX);
putsTelemetryValue(4*FW, SPEED_LINE, frskyHubData.gpsSpeed_bp, UNIT_KTS, LEFT|DBLSIZE); // before '.'
putsTelemetryValue(16*FW, SPEED_LINE, frskyHubData.maxGpsSpeed, UNIT_KTS, LEFT); // before '.'
// GPS altitude and distance
#define ALTITUDE_LINE (4*FH-1)
lcd_putsLeft(ALTITUDE_LINE, STR_ALTnDST);
putsTelemetryValue(4*FW, ALTITUDE_LINE, frskyHubData.gpsAltitude_bp, UNIT_METERS, LEFT); // before '.'
putsTelemetryValue(16*FW, ALTITUDE_LINE, frskyHubData.gpsDistance, UNIT_METERS, LEFT); // before '.'
displayGpsTime();
}
#endif
}
else {
lcd_putsAtt(22, 40, STR_NODATA, DBLSIZE);
+5 -2
View File
@@ -72,7 +72,7 @@ class FrskyData: public FrskyRSSI {
#if defined(FRSKY_HUB)
PACK(struct FrskyHubData {
int16_t baroAltitudeOffset;// spare reused
int16_t gpsAltitude_bp; // 0x01 before punct
uint16_t gpsAltitude_bp; // 0x01 before punct
int16_t temperature1; // 0x02 -20 .. 250 deg. celcius
uint16_t rpm; // 0x03 0..60,000 revs. per minute
uint16_t fuelLevel; // 0x04 0, 25, 50, 75, 100 percent
@@ -115,7 +115,10 @@ PACK(struct FrskyHubData {
uint16_t volts_ap; // 0x3B
// end of FrSky Hub data
uint16_t gpsDistance;
uint16_t maxGpsDistance;
uint16_t maxGpsSpeed;
int16_t gpsAltitudeOffset;
uint16_t maxAltitude;
});
#elif defined(WS_HOW_HIGH)
@@ -129,7 +132,7 @@ struct FrskyHubData {
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
extern FrskyHubData frskyHubData;
extern uint8_t barsThresholds[BAR_MAX-3];
extern uint8_t barsThresholds[];
#endif
// Global Fr-Sky telemetry data variables
+1 -1
View File
@@ -177,7 +177,7 @@ void writeLogs()
f_printf(&g_oLogFile, "%03d.%d,", frskyHubData.gpsCourse_bp, frskyHubData.gpsCourse_ap);
f_printf(&g_oLogFile, "%d.%d,", frskyHubData.gpsSpeed_bp, frskyHubData.gpsSpeed_ap);
f_printf(&g_oLogFile, "%03d.%d,", frskyHubData.gpsAltitude_bp, frskyHubData.gpsAltitude_ap);
f_printf(&g_oLogFile, "%d.%d,", frskyHubData.baroAltitude_bp + frskyHubData.baroAltitudeOffset, frskyHubData.baroAltitude_ap);
f_printf(&g_oLogFile, "%d.%d,", frskyHubData.baroAltitude_bp, frskyHubData.baroAltitude_ap);
f_printf(&g_oLogFile, "%d,", frskyHubData.temperature1);
f_printf(&g_oLogFile, "%d,", frskyHubData.temperature2);
f_printf(&g_oLogFile, "%d,", frskyHubData.rpm);
+1 -1
View File
@@ -2012,7 +2012,7 @@ void menuProcTelemetry(uint8_t event)
if (sub==subN && (s_editMode>0 || p1valdiff)) {
switch (m_posHorz) {
case 0:
CHECK_INCDEC_MODELVAR(event, g_model.frsky.bars[j].source, 0, 9); // TODO enum
CHECK_INCDEC_MODELVAR(event, g_model.frsky.bars[j].source, 0, BAR_MAX-1);
break;
case 1:
CHECK_INCDEC_MODELVAR(event, g_model.frsky.bars[j].barMin, 0, 50-g_model.frsky.bars[j].barMax);
+8 -1
View File
@@ -78,6 +78,13 @@ enum MainViews {
MAIN_VIEW_MAX = e_timer2
};
enum BeeperMode {
e_mode_quiet = -2,
e_mode_alarms,
e_mode_nokeys,
e_mode_all
};
#define ALTERNATE_VIEW 0x10
PACK(typedef struct t_EEGeneral {
uint8_t myVers;
@@ -94,7 +101,7 @@ PACK(typedef struct t_EEGeneral {
uint8_t view; //index of subview in main scrren
uint8_t disableThrottleWarning:1;
int8_t switchWarning:2; // -1=down, 0=off, 1=up
int8_t beeperMode:2; // -2=quiet, -1=only alarms, 0=no keys, 1=all
int8_t beeperMode:2;
uint8_t spare1:1;
uint8_t disableMemoryWarning:1;
uint8_t disableAlarmWarning:1;
+3 -2
View File
@@ -189,10 +189,11 @@ const pm_char STR_BG[] PROGMEM = TR_BG;
const pm_char STR_MENUTOSTART[] PROGMEM = TR_MENUTOSTART;
const pm_char STR_SETMIDPOINT[] PROGMEM = TR_SETMIDPOINT;
const pm_char STR_MOVESTICKSPOTS[] PROGMEM = TR_MOVESTICKSPOTS;
const pm_char STR_ALTnDST[] PROGMEM = TR_ALTnDST;
const pm_char STR_RXBATT[] PROGMEM = TR_RXBATT;
const pm_char STR_TX[] PROGMEM = TR_TXnRX;
const pm_char STR_SPDnMAX[] PROGMEM = TR_SPDnMAX;
const pm_char STR_SPD[] PROGMEM = TR_SPD;
const pm_char STR_ALT[] PROGMEM = TR_ALT;
const pm_char STR_DST[] PROGMEM = TR_DST;
const pm_char STR_TEMP1nTEMP2[] PROGMEM = TR_TEMP1nTEMP2;
const pm_char STR_RPMnFUEL[] PROGMEM = TR_RPMnFUEL;
const pm_char STR_ACCEL[] PROGMEM = TR_ACCEL;
+3 -2
View File
@@ -269,11 +269,12 @@ extern const pm_char STR_BG[];
extern const pm_char STR_MENUTOSTART[];
extern const pm_char STR_SETMIDPOINT[];
extern const pm_char STR_MOVESTICKSPOTS[];
extern const pm_char STR_ALTnDST[];
extern const pm_char STR_RXBATT[];
extern const pm_char STR_TX[];
#define STR_RX (STR_TX+OFS_RX)
extern const pm_char STR_SPDnMAX[];
extern const pm_char STR_SPD[];
extern const pm_char STR_ALT[];
extern const pm_char STR_DST[];
extern const pm_char STR_TEMP1nTEMP2[];
extern const pm_char STR_RPMnFUEL[];
extern const pm_char STR_ACCEL[];
+21 -19
View File
@@ -313,7 +313,7 @@ int16_t getValue(uint8_t i)
#if defined(FRSKY)
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+2) return frskyTelemetry[i-CSW_CHOUT_BASE-NUM_CHNOUT-MAX_TIMERS].value;
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+3) return frskyHubData.baroAltitude_bp + frskyHubData.baroAltitudeOffset;
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+3) return frskyHubData.baroAltitude_bp;
#endif
#if defined(FRSKY_HUB)
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+4) return (frskyHubData.rpm / 2);
@@ -1256,28 +1256,30 @@ void perOut(uint8_t phase)
int16_t v = 0;
uint8_t swTog;
//swOn[i]=false;
if (!getSwitch(md->swtch, 1)) { // switch on? (if no switch selected => on)
uint8_t k = md->srcRaw-1;
if (getSwitch(md->swtch, 1)) { // switch on? (if no switch selected => on)
swTog = !swOn[i];
swOn[i] = true;
if (k < NUM_STICKS)
v = anas[k]; //Switch is on. MAX=FULL=512 or value.
else if (k>=MIX_CH1-1 && k<=MIX_CH16-1 && k-MIX_CH1+1<md->destCh) // if we've already calculated the value - take it instead
v = chans[k-MIX_CH1+1] / 100;
else if (k>=MIX_THR-1 && k<=MIX_SWC-1)
v = getSwitch(k-MIX_THR+1+1, 0) ? +1024 : -1024;
else
v = getValue(k <= MIX_3POS ? k : k-MAX_SWITCH);
if (md->mixWarn) mixWarning |= 1<<(md->mixWarn-1); // Mix warning
}
else {
swTog = swOn[i];
swOn[i] = false;
continue;
if (md->srcRaw!=MIX_MAX || md->mltpx==MLTPX_REP) continue;
v = 0; // switch is off and it is either MAX=0 or FULL=-512
}
swTog = !swOn[i];
swOn[i] = true;
uint8_t k = md->srcRaw-1;
if (k < NUM_STICKS)
v = anas[k]; //Switch is on. MAX=FULL=512 or value.
else if (k>=MIX_CH1-1 && k<=MIX_CH16-1 && k-MIX_CH1+1<md->destCh) // if we've already calculated the value - take it instead
v = chans[k-MIX_CH1+1] / 100;
else if (k>=MIX_THR-1 && k<=MIX_SWC-1)
v = getSwitch(k-MIX_THR+1+1, 0) ? +1024 : -1024;
else
v = getValue(k <= MIX_3POS ? k : k-MAX_SWITCH);
if (md->mixWarn) mixWarning |= 1<<(md->mixWarn-1); // Mix warning
//========== INPUT OFFSET ===============
if(md->sOffset) v += calc100toRESX(md->sOffset);
-5
View File
@@ -123,11 +123,6 @@ void *main_thread(void *)
while (main_thread_running) {
perMain();
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
frskyHubData.baroAltitude_bp = 500;
#endif
sleep(1/*ms*/);
}
#ifdef SIMU_EXCEPTIONS
+3 -2
View File
@@ -251,11 +251,12 @@
#define TR_MENUTOSTART "[MENU] TO START"
#define TR_SETMIDPOINT "SET MIDPOINT"
#define TR_MOVESTICKSPOTS "MOVE STICKS/POTS"
#define TR_ALTnDST "Alt:\010Dst:"
#define TR_RXBATT "Rx Batt:"
#define TR_TXnRX "Tx:\0Rx:"
#define OFS_RX 4
#define TR_SPDnMAX "Spd:\010Max:"
#define TR_SPD "Spd:"
#define TR_ALT "Alt:"
#define TR_DST "Dst:"
#define TR_TEMP1nTEMP2 "T@1:\007T@2:"
#define TR_RPMnFUEL "RPM:\006Fuel:"
#define TR_ACCEL "Acc:"
+3 -2
View File
@@ -251,11 +251,12 @@
#define TR_MENUTOSTART "[MENU]POUR DEBUT"
#define TR_SETMIDPOINT "SET NEUTRE"
#define TR_MOVESTICKSPOTS "BOUGER MANCHES/POTS "
#define TR_ALTnDST "Alt:\010Dst:"
#define TR_RXBATT "Rx Batt:"
#define TR_TXnRX "Tx:\0Rx:"
#define OFS_RX 4
#define TR_SPDnMAX "Spd:\010Max:"
#define TR_SPD "Spd:"
#define TR_ALT "Alt:"
#define TR_DST "Dst:"
#define TR_TEMP1nTEMP2 "T@1:\007T@2:"
#define TR_RPMnFUEL "RPM:\006Fuel:"
#define TR_ACCEL "Acc:"
+3 -2
View File
@@ -251,11 +251,12 @@
#define TR_MENUTOSTART "[MENU] STARTAR"
#define TR_SETMIDPOINT " CENTRERA "
#define TR_MOVESTICKSPOTS "R\205R SPAKAR/RATTAR"
#define TR_ALTnDST "Hjd:\010Dst:"
#define TR_RXBATT "Rx Batt:"
#define TR_TXnRX "Tx:\0Rx:"
#define OFS_RX 4
#define TR_SPDnMAX "Frt:\010Max:"
#define TR_SPD "Spd:"
#define TR_ALT "Alt:"
#define TR_DST "Dst:"
#define TR_TEMP1nTEMP2 "T@1:\007T@2:"
#define TR_RPMnFUEL "RMP:\006Tank:"
#define TR_ACCEL "Acc:"