More fields displayed in Custom Telemetry Screen
Vario Function Switch (first part)
This commit is contained in:
@@ -215,6 +215,8 @@ void audioDefevent(uint8_t e);
|
||||
#define AUDIO_MIX_WARNING_2() audioDefevent(AU_MIX_WARNING_2)
|
||||
#define AUDIO_MIX_WARNING_3() audioDefevent(AU_MIX_WARNING_3)
|
||||
#define AUDIO_POT_STICK_MIDDLE() audioDefevent(AU_POT_STICK_MIDDLE)
|
||||
#define AUDIO_VARIO_UP() audioDefevent(AU_KEYPAD_UP)
|
||||
#define AUDIO_VARIO_DOWN() audioDefevent(AU_KEYPAD_DOWN)
|
||||
|
||||
#if defined(PCBSTD)
|
||||
#define AUDIO_DRIVER() audio.driver()
|
||||
|
||||
@@ -63,6 +63,8 @@ extern void beep(uint8_t val);
|
||||
#define AUDIO_MIX_WARNING_2() beep(1)
|
||||
#define AUDIO_MIX_WARNING_3() beep(1)
|
||||
#define AUDIO_POT_STICK_MIDDLE() beep(2)
|
||||
#define AUDIO_VARIO_UP() beep(0)
|
||||
#define AUDIO_VARIO_DOWN() beep(0)
|
||||
|
||||
#define IS_AUDIO_BUSY() (g_beepCnt || beepAgain || beepOn)
|
||||
|
||||
|
||||
+32
-1
@@ -481,8 +481,39 @@ void per10ms()
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// These moved here from perOut() [gruvin9x.cpp] to improve beep trigger reliability.
|
||||
// These moved here from perOut() to improve beep trigger reliability.
|
||||
if(mixWarning & 1) if(((g_tmr10ms&0xFF)== 0)) AUDIO_MIX_WARNING_1();
|
||||
if(mixWarning & 2) if(((g_tmr10ms&0xFF)== 64) || ((g_tmr10ms&0xFF)== 72)) AUDIO_MIX_WARNING_2();
|
||||
if(mixWarning & 4) if(((g_tmr10ms&0xFF)==128) || ((g_tmr10ms&0xFF)==136) || ((g_tmr10ms&0xFF)==144)) AUDIO_MIX_WARNING_3();
|
||||
|
||||
#if defined(FRSKY_HUB) or defined(WS_HOW_HIGH)
|
||||
static uint16_t s_varioTmr = 0;
|
||||
|
||||
if (isFunctionActive(FUNC_VARIO)) {
|
||||
#if defined(AUDIO)
|
||||
uint8_t warble = 0;
|
||||
#endif
|
||||
int8_t verticalSpeed = frskyHubData.baroAltitude_bp; // TODO to be modified of course!!
|
||||
|
||||
uint16_t interval;
|
||||
if (verticalSpeed == 0) {
|
||||
interval = 300;
|
||||
}
|
||||
else {
|
||||
if (verticalSpeed < 0) {
|
||||
verticalSpeed = -verticalSpeed;
|
||||
warble = 1;
|
||||
}
|
||||
if (verticalSpeed > 100) verticalSpeed = 100;
|
||||
interval = (uint16_t)200 / verticalSpeed;
|
||||
}
|
||||
if (g_tmr10ms - s_varioTmr > interval) {
|
||||
s_varioTmr = g_tmr10ms;
|
||||
if (warble)
|
||||
AUDIO_VARIO_DOWN();
|
||||
else
|
||||
AUDIO_VARIO_UP();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
+104
-78
@@ -204,13 +204,15 @@ void parseTelemHubByte(uint8_t byte)
|
||||
return;
|
||||
}
|
||||
|
||||
state = TS_IDLE;
|
||||
|
||||
if ((uint8_t)structPos == offsetof(FrskyHubData, gpsLatitude_bp)) {
|
||||
if (lowByte || byte)
|
||||
frskyHubData.gpsFix = 1;
|
||||
else if (frskyHubData.gpsFix > 0 && frskyHubData.gpsLatitude_bp > 1)
|
||||
frskyHubData.gpsFix = 0;
|
||||
}
|
||||
if ((uint8_t)structPos == offsetof(FrskyHubData, gpsLongitude_bp)) {
|
||||
else if ((uint8_t)structPos == offsetof(FrskyHubData, gpsLongitude_bp)) {
|
||||
if (lowByte || byte)
|
||||
frskyHubData.gpsFix = 1;
|
||||
else if (frskyHubData.gpsFix > 0 && frskyHubData.gpsLongitude_bp > 1)
|
||||
@@ -220,71 +222,89 @@ void parseTelemHubByte(uint8_t byte)
|
||||
if ((uint8_t)structPos == offsetof(FrskyHubData, gpsAltitude_bp) ||
|
||||
((uint8_t)structPos >= offsetof(FrskyHubData, gpsAltitude_ap) && (uint8_t)structPos <= offsetof(FrskyHubData, gpsLatitudeNS) && (uint8_t)structPos != offsetof(FrskyHubData, baroAltitude_bp) && (uint8_t)structPos != offsetof(FrskyHubData, baroAltitude_ap))) {
|
||||
// If we don't have a fix, we may discard the value
|
||||
if (frskyHubData.gpsFix <= 0) {
|
||||
state = TS_IDLE;
|
||||
if (frskyHubData.gpsFix <= 0)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
((uint8_t*)&frskyHubData)[structPos] = lowByte;
|
||||
((uint8_t*)&frskyHubData)[structPos+1] = byte;
|
||||
|
||||
// TODO switch here ...
|
||||
switch ((uint8_t)structPos) {
|
||||
|
||||
if ((uint8_t)structPos == offsetof(FrskyHubData, rpm)) {
|
||||
frskyHubData.rpm /= (g_model.frsky.blades+2);
|
||||
}
|
||||
case offsetof(FrskyHubData, rpm):
|
||||
frskyHubData.rpm /= (g_model.frsky.blades+2);
|
||||
if (frskyHubData.rpm > frskyHubData.maxRpm)
|
||||
frskyHubData.maxRpm = frskyHubData.rpm;
|
||||
break;
|
||||
|
||||
if ((uint8_t)structPos == offsetof(FrskyHubData, baroAltitude_bp)) {
|
||||
// First received 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;
|
||||
}
|
||||
case offsetof(FrskyHubData, temperature1):
|
||||
if (frskyHubData.temperature1 > frskyHubData.maxTemperature1)
|
||||
frskyHubData.maxTemperature1 = frskyHubData.temperature1;
|
||||
break;
|
||||
|
||||
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;
|
||||
case offsetof(FrskyHubData, temperature2):
|
||||
if (frskyHubData.temperature2 > frskyHubData.maxTemperature2)
|
||||
frskyHubData.maxTemperature2 = frskyHubData.temperature2;
|
||||
break;
|
||||
|
||||
if (!frskyHubData.pilotLatitude && !frskyHubData.pilotLongitude) {
|
||||
// First received GPS position => Pilot GPS position
|
||||
getGpsPilotPosition();
|
||||
}
|
||||
else if (frskyHubData.gpsDistNeeded || g_menuStack[0] == menuProcFrsky) {
|
||||
getGpsDistance();
|
||||
}
|
||||
}
|
||||
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;
|
||||
break;
|
||||
|
||||
if ((uint8_t)structPos == offsetof(FrskyHubData, gpsSpeed_bp)) {
|
||||
// Speed => Max speed
|
||||
if (frskyHubData.maxGpsSpeed < frskyHubData.gpsSpeed_bp)
|
||||
frskyHubData.maxGpsSpeed = frskyHubData.gpsSpeed_bp;
|
||||
}
|
||||
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 ((uint8_t)structPos == offsetof(FrskyHubData, volts)) {
|
||||
// Voltage => Cell number + Cell voltage
|
||||
uint8_t battnumber = ((frskyHubData.volts & 0x00F0) >> 4);
|
||||
if (battnumber < 12) {
|
||||
if (frskyHubData.cellsCount < battnumber+1) {
|
||||
frskyHubData.cellsCount = battnumber+1;
|
||||
if (!frskyHubData.pilotLatitude && !frskyHubData.pilotLongitude) {
|
||||
// First received GPS position => Pilot GPS position
|
||||
getGpsPilotPosition();
|
||||
}
|
||||
uint8_t cellVolts = (uint8_t)(((((frskyHubData.volts & 0xFF00) >> 8) + ((frskyHubData.volts & 0x000F) << 8)))/10);
|
||||
frskyHubData.cellVolts[battnumber] = cellVolts;
|
||||
if (!frskyHubData.minCellVolts || cellVolts < frskyHubData.minCellVolts)
|
||||
frskyHubData.minCellVolts = cellVolts;
|
||||
else if (frskyHubData.gpsDistNeeded || g_menuStack[0] == menuProcFrsky) {
|
||||
getGpsDistance();
|
||||
}
|
||||
break;
|
||||
|
||||
case offsetof(FrskyHubData, gpsSpeed_bp):
|
||||
// Speed => Max speed
|
||||
if (frskyHubData.gpsSpeed_bp < frskyHubData.maxGpsSpeed)
|
||||
frskyHubData.maxGpsSpeed = frskyHubData.gpsSpeed_bp;
|
||||
break;
|
||||
|
||||
case offsetof(FrskyHubData, volts):
|
||||
// Voltage => Cell number + Cell voltage
|
||||
{
|
||||
uint8_t battnumber = ((frskyHubData.volts & 0x00F0) >> 4);
|
||||
if (battnumber < 12) {
|
||||
if (frskyHubData.cellsCount < battnumber+1) {
|
||||
frskyHubData.cellsCount = battnumber+1;
|
||||
}
|
||||
uint8_t cellVolts = (uint8_t)(((((frskyHubData.volts & 0xFF00) >> 8) + ((frskyHubData.volts & 0x000F) << 8)))/10);
|
||||
frskyHubData.cellVolts[battnumber] = cellVolts;
|
||||
if (!frskyHubData.minCellVolts || cellVolts < frskyHubData.minCellVolts)
|
||||
frskyHubData.minCellVolts = cellVolts;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ((uint8_t)structPos == offsetof(FrskyHubData, hour)) {
|
||||
frskyHubData.hour = ((uint8_t)(frskyHubData.hour + g_eeGeneral.timezone + 24)) % 24;
|
||||
}
|
||||
case offsetof(FrskyHubData, hour):
|
||||
frskyHubData.hour = ((uint8_t)(frskyHubData.hour + g_eeGeneral.timezone + 24)) % 24;
|
||||
break;
|
||||
|
||||
state = TS_IDLE;
|
||||
case offsetof(FrskyHubData, accelX):
|
||||
case offsetof(FrskyHubData, accelY):
|
||||
case offsetof(FrskyHubData, accelZ):
|
||||
*(int16_t*)(&((uint8_t*)&frskyHubData)[structPos]) /= 10;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -620,22 +640,18 @@ void frskyAlarmsRefresh()
|
||||
}
|
||||
#endif
|
||||
|
||||
// TODO change names
|
||||
// Optimize?
|
||||
void FrskyRSSI::set(uint8_t value)
|
||||
{
|
||||
this->value = (((uint16_t)this->value * 7) + value + 4) / 8;
|
||||
if (!min || min > value)
|
||||
if (!min || value < min)
|
||||
min = value;
|
||||
}
|
||||
|
||||
void FrskyData::set(uint8_t value)
|
||||
{
|
||||
this->value = value;
|
||||
if (!max || max < value)
|
||||
FrskyRSSI::set(value);
|
||||
if (!max || value > max)
|
||||
max = value;
|
||||
if (!min || min > value)
|
||||
min = value;
|
||||
}
|
||||
|
||||
void resetTelemetry()
|
||||
@@ -674,6 +690,8 @@ void resetTelemetry()
|
||||
frskyHubData.gpsAltitude_bp = 50;
|
||||
frskyHubData.baroAltitude_bp = 50;
|
||||
frskyHubData.maxAltitude = 500;
|
||||
|
||||
frskyHubData.accelY = 100;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -763,8 +781,8 @@ enum FrskyViews {
|
||||
e_frsky_custom,
|
||||
e_frsky_bars,
|
||||
e_frsky_a1a2,
|
||||
e_frsky_gps_position, // TODO rename
|
||||
FRSKY_VIEW_MAX = e_frsky_gps_position
|
||||
e_frsky_after_flight,
|
||||
FRSKY_VIEW_MAX = e_frsky_after_flight
|
||||
};
|
||||
|
||||
static uint8_t s_frsky_view = e_frsky_custom;
|
||||
@@ -783,7 +801,7 @@ void displayRssiLine()
|
||||
}
|
||||
else {
|
||||
lcd_putsAtt(7*FW, 7*FH+1, STR_NODATA, BLINK);
|
||||
lcd_filled_rect(0, DISPLAY_H-8, DISPLAY_W, 8);
|
||||
lcd_status_line();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -797,7 +815,7 @@ void displayGpsTime()
|
||||
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);
|
||||
lcd_status_line();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -851,9 +869,9 @@ void menuProcFrsky(uint8_t event)
|
||||
if (frskyStreaming > 0) {
|
||||
if (field == TELEM_ACC) {
|
||||
lcd_putsLeft(7*FH+1, STR_ACCEL);
|
||||
lcd_outdezNAtt(4*FW, 7*FH+1, (int32_t)frskyHubData.accelX/10, LEFT|PREC2);
|
||||
lcd_outdezNAtt(10*FW, 7*FH+1, (int32_t)frskyHubData.accelY/10, LEFT|PREC2);
|
||||
lcd_outdezNAtt(16*FW, 7*FH+1, (int32_t)frskyHubData.accelZ/10, LEFT|PREC2);
|
||||
lcd_outdezNAtt(4*FW, 7*FH+1, frskyHubData.accelX, LEFT|PREC2);
|
||||
lcd_outdezNAtt(10*FW, 7*FH+1, frskyHubData.accelY, LEFT|PREC2);
|
||||
lcd_outdezNAtt(16*FW, 7*FH+1, frskyHubData.accelZ, LEFT|PREC2);
|
||||
break;
|
||||
}
|
||||
else if (field == TELEM_GPS_TIME) {
|
||||
@@ -867,21 +885,21 @@ void menuProcFrsky(uint8_t event)
|
||||
}
|
||||
}
|
||||
if (field) {
|
||||
// TODO change name STR_VTELEMBARS
|
||||
lcd_putsiAtt(j*65, 1+FH+2*FH*i, STR_VTELEMBARS, field, 0);
|
||||
// TODO change name STR_VTELEMCHNS
|
||||
lcd_putsiAtt(j*65, 1+FH+2*FH*i, STR_VTELEMCHNS, field, 0);
|
||||
int16_t value = getValue(CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+field-1);
|
||||
putsTelemetryChannel(j ? 128 : 63, i==3 ? 1+7*FH : 1+2*FH+2*FH*i, field-1, value, i==3 ? NO_UNIT : DBLSIZE|NO_UNIT);
|
||||
}
|
||||
}
|
||||
}
|
||||
lcd_filled_rect(0, 7*FH, DISPLAY_W, 8); // TODO optim function?
|
||||
lcd_status_line();
|
||||
}
|
||||
else if (s_frsky_view == e_frsky_bars) {
|
||||
// The bars
|
||||
uint8_t bars_height = 5;
|
||||
for (int8_t i=3; i>=0; i--) {
|
||||
if (g_model.frsky.bars[i].source && (51-g_model.frsky.bars[i].barMax) > g_model.frsky.bars[i].barMin) {
|
||||
lcd_putsiAtt(0, bars_height+bars_height+1+i*(bars_height+6), STR_VTELEMBARS, g_model.frsky.bars[i].source, 0);
|
||||
lcd_putsiAtt(0, bars_height+bars_height+1+i*(bars_height+6), STR_VTELEMCHNS, g_model.frsky.bars[i].source, 0);
|
||||
lcd_rect(25, bars_height+6+i*(bars_height+6), 101, bars_height+2);
|
||||
uint16_t value = getValue(CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+g_model.frsky.bars[i].source-1);
|
||||
uint16_t threshold = 0;
|
||||
@@ -946,11 +964,11 @@ void menuProcFrsky(uint8_t event)
|
||||
displayRssiLine();
|
||||
}
|
||||
#ifdef FRSKY_HUB
|
||||
else if (s_frsky_view == e_frsky_gps_position) {
|
||||
else if (s_frsky_view == e_frsky_after_flight) {
|
||||
// Latitude
|
||||
#define LAT_LINE (2*FH-4)
|
||||
lcd_putsLeft( LAT_LINE, PSTR("Lat:"));
|
||||
lcd_outdezAtt(lcd_lastPos, LAT_LINE, frskyHubData.gpsLatitude_bp / 100, LEFT); // ddd before '.'
|
||||
#define LAT_LINE (1*FH)
|
||||
lcd_putsLeft( LAT_LINE, PSTR("Lat"));
|
||||
lcd_outdezAtt(4*FW, LAT_LINE, frskyHubData.gpsLatitude_bp / 100, LEFT); // ddd before '.'
|
||||
lcd_putc(lcd_lastPos, LAT_LINE, '@');
|
||||
uint8_t mn = frskyHubData.gpsLatitude_bp % 100;
|
||||
lcd_outdezNAtt(lcd_lastPos+FW, LAT_LINE, mn, LEFT|LEADING0, 2); // mm before '.'
|
||||
@@ -959,9 +977,9 @@ void menuProcFrsky(uint8_t event)
|
||||
lcd_putc(lcd_lastPos+1, LAT_LINE, frskyHubData.gpsLatitudeNS ? frskyHubData.gpsLatitudeNS : '-');
|
||||
|
||||
// Longitude
|
||||
#define LONG_LINE (3*FH-3)
|
||||
lcd_putsLeft(LONG_LINE, PSTR("Lon:"));
|
||||
lcd_outdezAtt(lcd_lastPos, LONG_LINE, frskyHubData.gpsLongitude_bp / 100, LEFT); // ddd before '.'
|
||||
#define LONG_LINE (2*FH)
|
||||
lcd_putsLeft(LONG_LINE, PSTR("Lon"));
|
||||
lcd_outdezAtt(5*FW, LONG_LINE, frskyHubData.gpsLongitude_bp / 100, LEFT); // ddd before '.'
|
||||
lcd_putc(lcd_lastPos, LONG_LINE, '@');
|
||||
mn = frskyHubData.gpsLongitude_bp % 100;
|
||||
lcd_outdezNAtt(lcd_lastPos+FW, LONG_LINE, mn, LEFT|LEADING0, 2); // mm before '.'
|
||||
@@ -969,14 +987,22 @@ 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 : '-');
|
||||
|
||||
#define COURSE_LINE (4*FH-2)
|
||||
#define COURSE_LINE (3*FH)
|
||||
// Course / Heading
|
||||
lcd_putsLeft(COURSE_LINE, PSTR("Hdg:"));
|
||||
lcd_outdezNAtt(lcd_lastPos, COURSE_LINE, frskyHubData.gpsCourse_bp, LEFT|LEADING0, 3); // before '.'
|
||||
lcd_putsLeft(COURSE_LINE, PSTR("Hdg"));
|
||||
lcd_outdezNAtt(5*FW, 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, '@');
|
||||
|
||||
#define RSSI_LINE (4*FH)
|
||||
// Rssi
|
||||
lcd_putsLeft(RSSI_LINE, PSTR("Rssi"));
|
||||
lcd_puts(5*FW, RSSI_LINE, STR_TX);
|
||||
lcd_outdezNAtt(lcd_lastPos, RSSI_LINE, frskyRSSI[1].min, LEFT|LEADING0, 2);
|
||||
lcd_puts(10*FW, RSSI_LINE, STR_RX);
|
||||
lcd_outdezNAtt(lcd_lastPos, RSSI_LINE, frskyRSSI[0].min, LEFT|LEADING0, 2);
|
||||
|
||||
displayGpsTime();
|
||||
}
|
||||
#endif
|
||||
|
||||
+8
-3
@@ -52,7 +52,6 @@ enum AlarmLevel {
|
||||
#define ALARM_GREATER(channel, alarm) ((g_model.frsky.channels[channel].alarms_greater >> alarm) & 1)
|
||||
#define ALARM_LEVEL(channel, alarm) ((g_model.frsky.channels[channel].alarms_level >> (2*alarm)) & 3)
|
||||
|
||||
// TODO change names
|
||||
class FrskyRSSI {
|
||||
public:
|
||||
uint8_t value;
|
||||
@@ -115,10 +114,16 @@ 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;
|
||||
uint8_t minCellMinVolts;
|
||||
uint8_t minCellMaxVolts;
|
||||
/* order is important starting from here */
|
||||
int16_t maxAltitude;
|
||||
uint16_t maxRpm;
|
||||
int16_t maxTemperature1;
|
||||
int16_t maxTemperature2;
|
||||
uint16_t maxGpsSpeed;
|
||||
uint16_t maxGpsDistance;
|
||||
});
|
||||
|
||||
#elif defined(WS_HOW_HIGH)
|
||||
|
||||
@@ -125,6 +125,7 @@ extern void lcd_vlineStip(uint8_t x, int8_t y, int8_t h, uint8_t pat);
|
||||
|
||||
extern void lcd_rect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t pat=SOLID, uint8_t att=0);
|
||||
extern void lcd_filled_rect(uint8_t x, int8_t y, uint8_t w, uint8_t h, uint8_t pat=SOLID, uint8_t att=0);
|
||||
#define lcd_status_line() lcd_filled_rect(0, 7*FH, DISPLAY_W, 8)
|
||||
inline void lcd_square(uint8_t x, uint8_t y, uint8_t w, uint8_t att=0) { lcd_rect(x, y, w, w, SOLID, att); }
|
||||
|
||||
#define DO_CROSS(xx,yy,ww) \
|
||||
|
||||
+8
-2
@@ -52,8 +52,14 @@ void doMainScreenGrphics()
|
||||
DO_CROSS(LBOX_CENTERX,LBOX_CENTERY,3)
|
||||
DO_CROSS(RBOX_CENTERX,RBOX_CENTERY,3)
|
||||
|
||||
lcd_square(LBOX_CENTERX+(calibratedStick[CONVERT_MODE(0+1)-1]*BOX_LIMIT/(2*RESX))-MARKER_WIDTH/2, LBOX_CENTERY-(calibratedStick[CONVERT_MODE(1+1)-1]*BOX_LIMIT/(2*RESX))-MARKER_WIDTH/2, MARKER_WIDTH, ROUND);
|
||||
lcd_square(RBOX_CENTERX+(calibratedStick[CONVERT_MODE(3+1)-1]*BOX_LIMIT/(2*RESX))-MARKER_WIDTH/2, RBOX_CENTERY-(calibratedStick[CONVERT_MODE(2+1)-1]*BOX_LIMIT/(2*RESX))-MARKER_WIDTH/2, MARKER_WIDTH, ROUND);
|
||||
int16_t calibStickVert = calibratedStick[CONVERT_MODE(1+1)-1];
|
||||
if (g_eeGeneral.throttleReversed && CONVERT_MODE(1+1)-1 == THR_STICK)
|
||||
calibStickVert = -calibStickVert;
|
||||
lcd_square(LBOX_CENTERX+(calibratedStick[CONVERT_MODE(0+1)-1]*BOX_LIMIT/(2*RESX))-MARKER_WIDTH/2, LBOX_CENTERY-(calibStickVert*BOX_LIMIT/(2*RESX))-MARKER_WIDTH/2, MARKER_WIDTH, ROUND);
|
||||
calibStickVert = calibratedStick[CONVERT_MODE(2+1)-1];
|
||||
if (g_eeGeneral.throttleReversed && CONVERT_MODE(2+1)-1 == THR_STICK)
|
||||
calibStickVert = -calibStickVert;
|
||||
lcd_square(RBOX_CENTERX+(calibratedStick[CONVERT_MODE(3+1)-1]*BOX_LIMIT/(2*RESX))-MARKER_WIDTH/2, RBOX_CENTERY-(calibStickVert*BOX_LIMIT/(2*RESX))-MARKER_WIDTH/2, MARKER_WIDTH, ROUND);
|
||||
|
||||
// Optimization by Mike Blandford
|
||||
{
|
||||
|
||||
+2
-2
@@ -2003,7 +2003,7 @@ void menuProcTelemetry(uint8_t event)
|
||||
y = (subN-s_pgOfs)*FH;
|
||||
for (uint8_t k=0; k<2; k++) {
|
||||
uint8_t value = getTelemCustomField(j, k);
|
||||
lcd_putsiAtt(k==0?4:TELEM_COL2, y, STR_VTELEMBARS, value, (sub==subN && m_posHorz==k) ? blink : 0);
|
||||
lcd_putsiAtt(k==0?4:TELEM_COL2, y, STR_VTELEMCHNS, value, (sub==subN && m_posHorz==k) ? blink : 0);
|
||||
if (sub==subN && m_posHorz==k && (s_editMode>0 || p1valdiff)) {
|
||||
CHECK_INCDEC_MODELVAR(event, value, 0, (j==3 && k==0) ? STATUS_MAX : DISPLAY_MAX);
|
||||
if (checkIncDec_Ret) {
|
||||
@@ -2031,7 +2031,7 @@ void menuProcTelemetry(uint8_t event)
|
||||
for (uint8_t j=0; j<4; j++) {
|
||||
if (s_pgOfs<subN) {
|
||||
y = (subN-s_pgOfs)*FH;
|
||||
lcd_putsiAtt(4, y, STR_VTELEMBARS, g_model.frsky.bars[j].source, (sub==subN && m_posHorz==0) ? blink : 0);
|
||||
lcd_putsiAtt(4, y, STR_VTELEMCHNS, g_model.frsky.bars[j].source, (sub==subN && m_posHorz==0) ? blink : 0);
|
||||
if (g_model.frsky.bars[j].source) {
|
||||
putsTelemetryChannel(TELEM_COL2-3*FW, y, g_model.frsky.bars[j].source-1, convertTelemValue(g_model.frsky.bars[j].source-1, g_model.frsky.bars[j].barMin*5), (sub==subN && m_posHorz==1 ? blink : 0) | LEFT);
|
||||
putsTelemetryChannel(14*FW-3, y, g_model.frsky.bars[j].source-1, convertTelemValue(g_model.frsky.bars[j].source-1, (51-g_model.frsky.bars[j].barMax)*5), (sub==subN && m_posHorz==2 ? blink : 0) | LEFT);
|
||||
|
||||
+18
-2
@@ -229,6 +229,9 @@ enum Functions {
|
||||
FUNC_PLAY_SOMO,
|
||||
#endif
|
||||
FUNC_RESET,
|
||||
#if defined(FRSKY_HUB) or defined(WS_HOW_HIGH)
|
||||
FUNC_VARIO,
|
||||
#endif
|
||||
#ifdef LOGS
|
||||
FUNC_LOGS,
|
||||
#endif
|
||||
@@ -277,17 +280,30 @@ enum TelemetrySource {
|
||||
TELEM_T1,
|
||||
TELEM_T2,
|
||||
TELEM_SPEED,
|
||||
TELEM_CELL,
|
||||
TELEM_DIST,
|
||||
TELEM_CELL,
|
||||
TELEM_RSSI_TX,
|
||||
TELEM_RSSI_RX,
|
||||
TELEM_ACCx,
|
||||
TELEM_ACCy,
|
||||
TELEM_ACCz,
|
||||
TELEM_HDG,
|
||||
TELEM_MIN_A1,
|
||||
TELEM_MIN_A2,
|
||||
TELEM_MIN_CELL,
|
||||
TELEM_MAX_CELL,
|
||||
TELEM_MAX_ALT,
|
||||
TELEM_MAX_RPM,
|
||||
TELEM_MAX_T1,
|
||||
TELEM_MAX_T2,
|
||||
TELEM_MAX_SPEED,
|
||||
TELEM_MAX_DIST,
|
||||
TELEM_TM1,
|
||||
TELEM_TM2,
|
||||
TELEM_ACC,
|
||||
TELEM_GPS_TIME,
|
||||
|
||||
BAR_MAX = TELEM_DIST,
|
||||
BAR_MAX = TELEM_CELL,
|
||||
DISPLAY_MAX = TELEM_TM2,
|
||||
STATUS_MAX = TELEM_GPS_TIME
|
||||
};
|
||||
|
||||
+1
-1
@@ -61,7 +61,7 @@ const pm_char STR_OPEN9X[] PROGMEM =
|
||||
ISTR(VFSWRESET)
|
||||
ISTR(FUNCSOUNDS)
|
||||
#ifdef FRSKY
|
||||
ISTR(VTELEMBARS)
|
||||
ISTR(VTELEMCHNS)
|
||||
ISTR(VTELEMUNIT)
|
||||
ISTR(VALARM)
|
||||
ISTR(VALARMFN)
|
||||
|
||||
+3
-3
@@ -78,8 +78,8 @@ extern const pm_char STR_OPEN9X[];
|
||||
#define OFS_VFSWRESET (OFS_VFSWFUNC + sizeof(TR_VFSWFUNC))
|
||||
#define OFS_FUNCSOUNDS (OFS_VFSWRESET + sizeof(TR_VFSWRESET))
|
||||
#ifdef FRSKY
|
||||
#define OFS_VTELEMBARS (OFS_FUNCSOUNDS + sizeof(TR_FUNCSOUNDS))
|
||||
#define OFS_VTELEMUNIT (OFS_VTELEMBARS + sizeof(TR_VTELEMBARS))
|
||||
#define OFS_VTELEMCHNS (OFS_FUNCSOUNDS + sizeof(TR_FUNCSOUNDS))
|
||||
#define OFS_VTELEMUNIT (OFS_VTELEMCHNS + sizeof(TR_VTELEMCHNS))
|
||||
#define OFS_VALARM (OFS_VTELEMUNIT + sizeof(TR_VTELEMUNIT))
|
||||
#define OFS_VALARMFN (OFS_VALARM + sizeof(TR_VALARM))
|
||||
#define OFS_VTELPROTO (OFS_VALARMFN + sizeof(TR_VALARMFN))
|
||||
@@ -142,7 +142,7 @@ extern const pm_char STR_OPEN9X[];
|
||||
#define STR_FUNCSOUNDS (STR_OPEN9X + OFS_FUNCSOUNDS)
|
||||
|
||||
#ifdef FRSKY
|
||||
#define STR_VTELEMBARS (STR_OPEN9X + OFS_VTELEMBARS)
|
||||
#define STR_VTELEMCHNS (STR_OPEN9X + OFS_VTELEMCHNS)
|
||||
#define STR_VTELEMUNIT (STR_OPEN9X + OFS_VTELEMUNIT)
|
||||
#define STR_VALARM (STR_OPEN9X + OFS_VALARM)
|
||||
#define STR_VALARMFN (STR_OPEN9X + OFS_VALARMFN)
|
||||
|
||||
+19
-9
@@ -287,8 +287,6 @@ void applyExpos(int16_t *anas, uint8_t phase)
|
||||
}
|
||||
}
|
||||
|
||||
/*TODO check the stack used for recursive calls */
|
||||
/*TODO use the new MIX_xxx */
|
||||
int16_t ex_chans[NUM_CHNOUT] = {0}; // Outputs (before LIMITS) of the last perMain
|
||||
#ifdef HELI
|
||||
int16_t cyc_anas[3] = {0};
|
||||
@@ -316,13 +314,24 @@ int16_t getValue(uint8_t i)
|
||||
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;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+5) return frskyHubData.fuelLevel;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+6) return frskyHubData.temperature1;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+7) return frskyHubData.temperature2;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+8) return frskyHubData.gpsSpeed_ap;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+9) return frskyHubData.minCellVolts;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+10) return frskyHubData.gpsDistance;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_RPM) return frskyHubData.rpm;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_FUEL) return frskyHubData.fuelLevel;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_T1) return frskyHubData.temperature1;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_T2) return frskyHubData.temperature2;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_SPEED) return frskyHubData.gpsSpeed_ap;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_DIST) return frskyHubData.gpsDistance;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_CELL) return frskyHubData.minCellVolts;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_RSSI_TX) return frskyRSSI[1].value;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_RSSI_RX) return frskyRSSI[0].value;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_ACCx) return frskyHubData.accelX;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_ACCy) return frskyHubData.accelY;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_ACCz) return frskyHubData.accelZ;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_HDG) return frskyHubData.gpsCourse_bp;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_MIN_A1) return frskyTelemetry[0].min;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_MIN_A2) return frskyTelemetry[1].min;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_MIN_CELL) return frskyHubData.minCellMinVolts;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_MAX_CELL) return frskyHubData.minCellMaxVolts;
|
||||
else if(i<CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_MAX_DIST) return *(((int16_t*)(&frskyHubData.maxGpsDistance))-i-(CSW_CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+TELEM_MAX_DIST-1));
|
||||
#endif
|
||||
#endif
|
||||
else return 0;
|
||||
@@ -330,6 +339,7 @@ int16_t getValue(uint8_t i)
|
||||
|
||||
volatile uint16_t s_last_switch_used;
|
||||
volatile uint16_t s_last_switch_value;
|
||||
/* recursive function. stack as of today (16/03/2012) grows by 8bytes at each call, which is ok! */
|
||||
bool __getSwitch(int8_t swtch)
|
||||
{
|
||||
bool result;
|
||||
|
||||
+1
-2
@@ -80,6 +80,7 @@ void sig(int sgn)
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <semaphore.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#undef min
|
||||
#undef max
|
||||
@@ -224,8 +225,6 @@ void eeprom_read_block (void *pointer_ram,
|
||||
const void *pointer_eeprom,
|
||||
size_t size);
|
||||
|
||||
#undef offsetof
|
||||
#define offsetof(st, m) ((size_t) ( (char *)&((st *)(0))->m - (char *)0 ))
|
||||
#define wdt_reset() sleep(1)
|
||||
|
||||
#endif
|
||||
|
||||
+1
-1
@@ -209,7 +209,7 @@ void applyTemplate(uint8_t idx)
|
||||
|
||||
// Servo Test
|
||||
case TMPL_SERVO_TEST:
|
||||
md=setDest(15, true); md->srcRaw=MIXSRC_SW1; md->weight=110; md->mltpx=MLTPX_REP; md->delayUp = 6; md->delayDown = 6; md->speedUp = 8; md->speedDown = 8;
|
||||
md=setDest(15, true); md->srcRaw=MIXSRC_SW1; md->weight=110; md->mltpx=MLTPX_ADD; md->delayUp = 6; md->delayDown = 6; md->speedUp = 8; md->speedDown = 8;
|
||||
setSwitch(1, CS_VNEG, CSW_CHOUT_BASE+16, 0);
|
||||
break;
|
||||
|
||||
|
||||
@@ -91,8 +91,8 @@
|
||||
#define LEN_FUNCSOUNDS "\006"
|
||||
#define TR_FUNCSOUNDS "Warn1 ""Warn2 ""Cheep ""Ring ""SciFi ""Robot ""Chirp ""Tada ""Crickt""Siren ""AlmClk""Ratata""Tick ""Haptc1""Haptc2""Haptc3"
|
||||
|
||||
#define LEN_VTELEMBARS "\004"
|
||||
#define TR_VTELEMBARS "---\0""A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Cell""Dist""ACCx""ACCy""ACCz""TMR1""TMR2""ACC\0""Time"
|
||||
#define LEN_VTELEMCHNS "\004"
|
||||
#define TR_VTELEMCHNS "---\0""A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""t1\0 ""t2\0 ""Spd\0""Dist""Cell""Tx\0 ""Rx\0 ""AccX""AccY""AccZ""Hdg\0""a1\0 ""a2\0 ""cell""CELL""ALT\0""RPM\0""T1\0 ""T2\0 ""SPD\0""DIST""Tmr1""Tmr2""ACC\0""Time"
|
||||
|
||||
#define LEN_VTELEMUNIT "\003"
|
||||
#define TR_VTELEMUNIT "v\0 ""A\0 ""-\0 ""kts""kmh""M/h""m\0 ""@\0 ""%\0"
|
||||
|
||||
@@ -91,8 +91,8 @@
|
||||
#define LEN_FUNCSOUNDS "\006"
|
||||
#define TR_FUNCSOUNDS "Warn1 ""Warn2 ""Cheep ""Ring ""SciFi ""Robot ""Chirp ""Tada ""Crickt""Siren ""AlmClk""Ratata""Tick ""Haptc1""Haptc2""Haptc3"
|
||||
|
||||
#define LEN_VTELEMBARS "\004"
|
||||
#define TR_VTELEMBARS "---\0""A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Cell""Dist""ACCx""ACCy""ACCz""TMR1""TMR2""ACC\0""Time"
|
||||
#define LEN_VTELEMCHNS "\004"
|
||||
#define TR_VTELEMCHNS "---\0""A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""t1\0 ""t2\0 ""Spd\0""Dist""Cell""Tx\0 ""Rx\0 ""AccX""AccY""AccZ""Hdg\0""a1\0 ""a2\0 ""cell""CELL""ALT\0""RPM\0""T1\0 ""T2\0 ""SPD\0""DIST""Tmr1""Tmr2""ACC\0""Time"
|
||||
|
||||
#define LEN_VTELEMUNIT "\003"
|
||||
#define TR_VTELEMUNIT "v\0 ""A\0 ""-\0 ""kts""kmh""M/h""m\0 ""@\0 ""%\0"
|
||||
|
||||
@@ -91,8 +91,8 @@
|
||||
#define LEN_FUNCSOUNDS "\006"
|
||||
#define TR_FUNCSOUNDS "Varn1 ""Varn2 ""F\200r ""Ring ""SciFi ""Robot ""Pip ""Tada ""Syrsa ""Siren ""Alarm ""Ratata""Tick ""Vibr1 ""Vibr2 ""Vibr3 "
|
||||
|
||||
#define LEN_VTELEMBARS "\004"
|
||||
#define TR_VTELEMBARS "---\0""A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""T1\0 ""T2\0 ""Spd\0""Cell""Dist""ACCx""ACCy""ACCz""TMR1""TMR2""ACC\0""Time"
|
||||
#define LEN_VTELEMCHNS "\004"
|
||||
#define TR_VTELEMCHNS "---\0""A1\0 ""A2\0 ""Alt\0""Rpm\0""Fuel""t1\0 ""t2\0 ""Spd\0""Dist""Cell""Tx\0 ""Rx\0 ""AccX""AccY""AccZ""Hdg\0""a1\0 ""a2\0 ""cell""CELL""ALT\0""RPM\0""T1\0 ""T2\0 ""SPD\0""DIST""Tmr1""Tmr2""ACC\0""Time"
|
||||
|
||||
#define LEN_VTELEMUNIT "\003"
|
||||
#define TR_VTELEMUNIT "v\0 ""A\0 ""-\0 ""kts""kmh""M/h""m\0 ""@\0 ""%\0"
|
||||
|
||||
Reference in New Issue
Block a user