Fix for slow / delayed mixes
Telemetry screens redesigned
This commit is contained in:
+130
-95
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:"
|
||||
|
||||
@@ -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:"
|
||||
|
||||
@@ -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:"
|
||||
|
||||
Reference in New Issue
Block a user