New telemetry screens (bars)
New telemetry units for A1 / A2 Update to pgmtypes according to Michal patch (suggested by gcc developers!) EEPROM v204
This commit is contained in:
+16
-16
@@ -494,10 +494,10 @@ void menuProcArduPilot1(uint8_t event)
|
||||
initval (1, PACK_POS, LON);
|
||||
// title of the screen
|
||||
title ('1');
|
||||
lcd_puts_P (5*FW, 1*FH, PSTR(" Latitude")); // line 1 column 5
|
||||
lcd_puts (5*FW, 1*FH, PSTR(" Latitude")); // line 1 column 5
|
||||
// first buffer into line 2 column 2
|
||||
lcd_putsAtt (2*FW, 2*FH, VALSTR(0), APSIZE);
|
||||
lcd_puts_P (5*FW, 4*FH, PSTR(" Longitude")); // line 4 column 5
|
||||
lcd_puts (5*FW, 4*FH, PSTR(" Longitude")); // line 4 column 5
|
||||
// second buffer into line 5 column 2
|
||||
lcd_putsAtt (1*FW, 5*FH, VALSTR(1), APSIZE);
|
||||
}
|
||||
@@ -520,9 +520,9 @@ void menuProcArduPilot2(uint8_t event)
|
||||
initval (0, PACK_POS, SPD);
|
||||
initval (1, PACK_POS, CRT);
|
||||
title ('2');
|
||||
lcd_puts_P (1*FW, 1*FH, PSTR(" Ground speed"));
|
||||
lcd_puts (1*FW, 1*FH, PSTR(" Ground speed"));
|
||||
lcd_putsAtt (2*FW, 2*FH, VALSTR(0), APSIZE);
|
||||
lcd_puts_P (1*FW, 4*FH, PSTR(" Climb rate") );
|
||||
lcd_puts (1*FW, 4*FH, PSTR(" Climb rate") );
|
||||
lcd_putsAtt (2*FW, 5*FH, VALSTR(1), APSIZE);
|
||||
}
|
||||
|
||||
@@ -544,9 +544,9 @@ void menuProcArduPilot3(uint8_t event)
|
||||
initval (0, PACK_POS, ALT);
|
||||
initval (1, PACK_POS, ALH);
|
||||
title ('3');
|
||||
lcd_puts_P (1*FW, 1*FH, PSTR(" Altitude"));
|
||||
lcd_puts (1*FW, 1*FH, PSTR(" Altitude"));
|
||||
lcd_putsAtt (2*FW, 2*FH, VALSTR(0), APSIZE);
|
||||
lcd_puts_P (1*FW, 4*FH, PSTR(" Altitude Hold") );
|
||||
lcd_puts (1*FW, 4*FH, PSTR(" Altitude Hold") );
|
||||
lcd_putsAtt (2*FW, 5*FH, VALSTR(1), APSIZE);
|
||||
}
|
||||
|
||||
@@ -568,9 +568,9 @@ void menuProcArduPilot4(uint8_t event)
|
||||
initval (0, PACK_POS, CRS);
|
||||
initval (1, PACK_POS, BER);
|
||||
title ('4');
|
||||
lcd_puts_P (1*FW, 1*FH, PSTR(" Course"));
|
||||
lcd_puts (1*FW, 1*FH, PSTR(" Course"));
|
||||
lcd_putsAtt (2*FW, 2*FH, VALSTR(0), APSIZE);
|
||||
lcd_puts_P (1*FW, 4*FH, PSTR(" Bearing"));
|
||||
lcd_puts (1*FW, 4*FH, PSTR(" Bearing"));
|
||||
lcd_putsAtt (2*FW, 5*FH, VALSTR(1), APSIZE);
|
||||
}
|
||||
|
||||
@@ -594,9 +594,9 @@ void menuProcArduPilot5(uint8_t event)
|
||||
initval (0, PACK_POS, WPN);
|
||||
initval (1, PACK_POS, DST);
|
||||
title ('5');
|
||||
lcd_puts_P (1*FW, 1*FH, PSTR(" Way Point # "));
|
||||
lcd_puts (1*FW, 1*FH, PSTR(" Way Point # "));
|
||||
lcd_putsAtt (2*FW, 2*FH, VALSTR(0), APSIZE);
|
||||
lcd_puts_P (1*FW, 4*FH, PSTR(" Distance "));
|
||||
lcd_puts (1*FW, 4*FH, PSTR(" Distance "));
|
||||
lcd_putsAtt (2*FW, 5*FH, VALSTR(1), APSIZE);
|
||||
}
|
||||
|
||||
@@ -620,9 +620,9 @@ void menuProcArduPilot6(uint8_t event)
|
||||
initval (0, PACK_ATT, ASP);
|
||||
initval (1, PACK_ATT, THH);
|
||||
title ('6');
|
||||
lcd_puts_P (1*FW, 1*FH, PSTR(" Air Speed "));
|
||||
lcd_puts (1*FW, 1*FH, PSTR(" Air Speed "));
|
||||
lcd_putsAtt (2*FW, 2*FH, VALSTR(0), APSIZE);
|
||||
lcd_puts_P (1*FW, 4*FH, PSTR(" Climb Rate "));
|
||||
lcd_puts (1*FW, 4*FH, PSTR(" Climb Rate "));
|
||||
lcd_putsAtt (2*FW, 5*FH, VALSTR(1), APSIZE);
|
||||
}
|
||||
|
||||
@@ -646,9 +646,9 @@ void menuProcArduPilot7(uint8_t event)
|
||||
initval (0, PACK_ATT, RLL);
|
||||
initval (1, PACK_ATT, PCH);
|
||||
title ('7');
|
||||
lcd_puts_P (1*FW, 1*FH, PSTR(" Roll Angle"));
|
||||
lcd_puts (1*FW, 1*FH, PSTR(" Roll Angle"));
|
||||
lcd_putsAtt (2*FW, 2*FH, VALSTR(0), APSIZE);
|
||||
lcd_puts_P (1*FW, 4*FH, PSTR(" Pitch Angle"));
|
||||
lcd_puts (1*FW, 4*FH, PSTR(" Pitch Angle"));
|
||||
lcd_putsAtt (2*FW, 5*FH, VALSTR(1), APSIZE);
|
||||
}
|
||||
|
||||
@@ -672,9 +672,9 @@ void menuProcArduPilot8(uint8_t event)
|
||||
initval (0, PACK_MOD, MOD);
|
||||
initval (1, PACK_WPC, WPC);
|
||||
title ('8');
|
||||
lcd_puts_P (1*FW, 1*FH, PSTR(" ArduPilot Mode"));
|
||||
lcd_puts (1*FW, 1*FH, PSTR(" ArduPilot Mode"));
|
||||
lcd_putsAtt (2*FW, 2*FH, VALSTR(0), APSIZE);
|
||||
lcd_puts_P (1*FW, 4*FH, PSTR(" RTL Distance"));
|
||||
lcd_puts (1*FW, 4*FH, PSTR(" RTL Distance"));
|
||||
lcd_putsAtt (2*FW, 5*FH, VALSTR(1), APSIZE);
|
||||
}
|
||||
|
||||
|
||||
+1
-6
@@ -15,11 +15,6 @@
|
||||
#include "open9x.h"
|
||||
|
||||
audioQueue::audioQueue()
|
||||
{
|
||||
aqinit();
|
||||
}
|
||||
|
||||
void audioQueue::aqinit()
|
||||
{
|
||||
toneTimeLeft = 0;
|
||||
tonePause = 0;
|
||||
@@ -236,7 +231,7 @@ void audioQueue::event(uint8_t e, uint8_t f)
|
||||
break;
|
||||
// inactivity timer alert
|
||||
case AU_INACTIVITY:
|
||||
playNow(70, 10, 2,2);
|
||||
playNow(70, 10, 2, 2);
|
||||
break;
|
||||
// low battery in tx
|
||||
case AU_TX_BATTERY_LOW:
|
||||
|
||||
@@ -143,11 +143,9 @@ class audioQueue
|
||||
}
|
||||
|
||||
protected:
|
||||
void aqinit(); // To stop constructor being compiled twice
|
||||
inline uint8_t getToneLength(uint8_t tLen);
|
||||
|
||||
private:
|
||||
|
||||
uint8_t t_queueRidx;
|
||||
uint8_t t_queueWidx;
|
||||
|
||||
|
||||
@@ -442,6 +442,8 @@ void per10ms()
|
||||
|
||||
#if defined (FRSKY)
|
||||
|
||||
// TODO it would be better in frsky.h / .cpp!
|
||||
|
||||
// Attempt to transmit any waiting Fr-Sky alarm set packets every 50ms (subject to packet buffer availability)
|
||||
static uint8_t FrskyDelay = 5;
|
||||
if (FrskyAlarmSendState && (--FrskyDelay == 0))
|
||||
|
||||
+3
-3
@@ -580,10 +580,10 @@ void RlcFile::DisplayProgressBar(uint8_t x)
|
||||
if (s_eeDirtyMsk || isWriting() || eeprom_buffer_size) {
|
||||
#if defined (PROGRESS_BAR)
|
||||
uint8_t len = (s_eeDirtyMsk ? 123 : min((uint8_t)123, (uint8_t)((m_rlc_len) / 5 + eeprom_buffer_size)));
|
||||
lcd_filled_rect(2, 1, 125, 5, WHITE);
|
||||
lcd_filled_rect(2, 1, 125, 5, SOLID, WHITE);
|
||||
lcd_filled_rect(3, 2, 123-len, 3);
|
||||
#elif defined (PROGRESS_CIRCLE)
|
||||
lcd_filled_rect(x-1, 0, 7, 7, WHITE);
|
||||
lcd_filled_rect(x-1, 0, 7, 7, SOLID, WHITE);
|
||||
uint8_t len = s_eeDirtyMsk ? 1 : limit(1, 12 - (uint8_t)(m_rlc_len/m_ratio), 12);
|
||||
lcd_hline(x+1, 1, min((uint8_t)3, len));
|
||||
if (len >= 3) {
|
||||
@@ -597,7 +597,7 @@ void RlcFile::DisplayProgressBar(uint8_t x)
|
||||
}
|
||||
#elif defined (PROGRESS_VERTICAL_BAR)
|
||||
uint8_t len = s_eeDirtyMsk ? 1 : limit((uint8_t)1, (uint8_t)(7 - (m_rlc_len/m_ratio)), (uint8_t)7);
|
||||
lcd_filled_rect(x+1, 0, 5, FH, WHITE);
|
||||
lcd_filled_rect(x+1, 0, 5, FH, SOLID, WHITE);
|
||||
lcd_filled_rect(x+2, 7-len, 3, len);
|
||||
#elif defined (PROGRESS_FIXED_CIRCLE)
|
||||
lcd_square(x, 1, 5);
|
||||
|
||||
+38
-17
@@ -43,7 +43,7 @@ uint8_t frskyStreaming = 0;
|
||||
uint8_t frskyUsrStreaming = 0;
|
||||
|
||||
FrskyData frskyTelemetry[2];
|
||||
FrskyData frskyRSSI[2];
|
||||
FrskyRSSI frskyRSSI[2];
|
||||
|
||||
struct FrskyAlarm {
|
||||
uint8_t level; // The alarm's 'urgency' level. 0=disabled, 1=yellow, 2=orange, 3=red
|
||||
@@ -54,9 +54,8 @@ struct FrskyAlarm {
|
||||
struct FrskyAlarm frskyAlarms[4];
|
||||
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
FrskyHubData frskyHubData;
|
||||
int16_t baroAltitudeOffset = 0;
|
||||
uint8_t maxGpsSpeed = 0;
|
||||
FrskyHubData frskyHubData; // TODO initialization?
|
||||
uint8_t barsThresholds[BAR_MAX-3];
|
||||
#endif
|
||||
|
||||
void frskyPushValue(uint8_t *&ptr, uint8_t value)
|
||||
@@ -99,14 +98,8 @@ int8_t parseTelemHubIndex(uint8_t index)
|
||||
index = 0; // invalid index
|
||||
if (index > 0x39)
|
||||
index -= 17;
|
||||
if (index > 0x27)
|
||||
index -= 1;
|
||||
if (index > 0x21)
|
||||
index -= 5;
|
||||
if (index > 0x0f)
|
||||
index -= 6;
|
||||
if (index > 0x08)
|
||||
index -= 2;
|
||||
return 2*(index-1);
|
||||
}
|
||||
|
||||
@@ -151,8 +144,22 @@ void parseTelemHubByte(uint8_t byte)
|
||||
return;
|
||||
}
|
||||
((uint8_t*)&frskyHubData)[structPos+1] = byte;
|
||||
if (structPos == offsetof(FrskyHubData, gpsSpeed_ap)/2 && maxGpsSpeed < frskyHubData.gpsSpeed_ap)
|
||||
maxGpsSpeed = frskyHubData.gpsSpeed_ap;
|
||||
if ((uint8_t)structPos == offsetof(FrskyHubData, gpsSpeed_ap)) {
|
||||
// Speed => Max speed
|
||||
if (frskyHubData.maxGpsSpeed < frskyHubData.gpsSpeed_ap)
|
||||
frskyHubData.maxGpsSpeed = frskyHubData.gpsSpeed_ap;
|
||||
}
|
||||
if ((uint8_t)structPos == offsetof(FrskyHubData, volts)) {
|
||||
// Voltage => Cell number + Cell voltage
|
||||
uint8_t battnumber = (frskyHubData.volts & 0x00F0) >> 4;
|
||||
if (frskyHubData.cellsCount < battnumber+1) {
|
||||
frskyHubData.cellsCount = battnumber+1;
|
||||
}
|
||||
uint8_t cellVolts = 2*(((frskyHubData.volts & 0xFF00) >> 8) + ((frskyHubData.volts & 0x000F) << 8));
|
||||
frskyHubData.cellVolts[battnumber] = cellVolts;
|
||||
if (!frskyHubData.minCellVolts || cellVolts < frskyHubData.minCellVolts)
|
||||
frskyHubData.minCellVolts = cellVolts;
|
||||
}
|
||||
|
||||
state = TS_IDLE;
|
||||
}
|
||||
@@ -485,21 +492,35 @@ void frskyAlarmsRefresh()
|
||||
}
|
||||
#endif
|
||||
|
||||
void FrskyData::set(uint8_t value)
|
||||
void FrskyRSSI::set(uint8_t value)
|
||||
{
|
||||
this->value = value;
|
||||
if (!max || max < value)
|
||||
max = value;
|
||||
this->value = (((uint16_t)this->value * 7) + value) / 8;
|
||||
if (!min || min > value)
|
||||
min = value;
|
||||
}
|
||||
|
||||
void FrskyData::set(uint8_t value)
|
||||
{
|
||||
if (!max || max < value)
|
||||
max = value;
|
||||
FrskyRSSI::set(value);
|
||||
}
|
||||
|
||||
void resetTelemetry()
|
||||
{
|
||||
memset(frskyTelemetry, 0, sizeof(frskyTelemetry));
|
||||
memset(frskyRSSI, 0, sizeof(frskyRSSI));
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
baroAltitudeOffset = -frskyHubData.baroAltitude;
|
||||
frskyHubData.baroAltitudeOffset = -frskyHubData.baroAltitude;
|
||||
frskyHubData.maxGpsSpeed = 0;
|
||||
frskyHubData.cellsCount = 0;
|
||||
frskyHubData.minCellVolts = 0;
|
||||
#endif
|
||||
|
||||
#ifdef SIMU
|
||||
frskyTelemetry[0].set(120);
|
||||
frskyRSSI[0].set(75);
|
||||
frskyHubData.fuelLevel = 75;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
+17
-7
@@ -39,13 +39,21 @@ 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)
|
||||
|
||||
struct FrskyData {
|
||||
// TODO change names
|
||||
class FrskyRSSI {
|
||||
public:
|
||||
uint8_t value;
|
||||
uint8_t min;
|
||||
void set(uint8_t value);
|
||||
};
|
||||
|
||||
class FrskyData: public FrskyRSSI {
|
||||
public:
|
||||
uint8_t max;
|
||||
void set(uint8_t value);
|
||||
};
|
||||
|
||||
|
||||
#if defined(FRSKY_HUB)
|
||||
struct FrskyHubData {
|
||||
// 1 spare
|
||||
@@ -55,9 +63,10 @@ struct FrskyHubData {
|
||||
uint16_t fuelLevel; // 0, 25, 50, 75, 100 percent
|
||||
int16_t temperature2; // -20 .. 250 deg. celcius
|
||||
uint16_t volts; // 1/500V increments (0..4.2V)
|
||||
// 2 spares
|
||||
int16_t baroAltitudeOffset; // spare reused
|
||||
uint16_t maxGpsSpeed; // spare reused
|
||||
int16_t gpsAltitude_ap; // after punct
|
||||
// 6 spares
|
||||
uint8_t cellVolts[12]; // 6 spares reused
|
||||
uint16_t baroAltitude; // 0..9,999 meters
|
||||
uint16_t gpsSpeed_bp; // before punct
|
||||
uint16_t gpsLongitude_bp; // before punct
|
||||
@@ -79,7 +88,8 @@ struct FrskyHubData {
|
||||
int16_t accelX; // 1/256th gram (-8g ~ +8g)
|
||||
int16_t accelY; // 1/256th gram (-8g ~ +8g)
|
||||
int16_t accelZ; // 1/256th gram (-8g ~ +8g)
|
||||
// 1 spare
|
||||
uint8_t cellsCount; // 1/2 spare reused
|
||||
uint8_t minCellVolts; // 1/2 spare reused
|
||||
uint16_t current;
|
||||
// 17 spares
|
||||
uint16_t volts_bp;
|
||||
@@ -90,14 +100,14 @@ struct FrskyHubData {
|
||||
|
||||
struct FrskyHubData {
|
||||
uint16_t baroAltitude; // 0..9,999 meters
|
||||
int16_t baroAltitudeOffset;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
extern FrskyHubData frskyHubData;
|
||||
extern int16_t baroAltitudeOffset;
|
||||
extern uint8_t maxGpsSpeed;
|
||||
extern uint8_t barsThresholds[BAR_MAX-3];
|
||||
#endif
|
||||
|
||||
// Global Fr-Sky telemetry data variables
|
||||
@@ -109,7 +119,7 @@ extern uint8_t frskyUsrStreaming;
|
||||
extern uint8_t FrskyAlarmSendState;
|
||||
|
||||
extern FrskyData frskyTelemetry[2];
|
||||
extern FrskyData frskyRSSI[2];
|
||||
extern FrskyRSSI frskyRSSI[2];
|
||||
extern uint8_t frskyTxBuffer[FRSKY_TX_PACKET_SIZE];
|
||||
extern uint8_t frskyTxBufferCount;
|
||||
|
||||
|
||||
+36
-39
@@ -90,7 +90,7 @@ void menuProcSetup(uint8_t event)
|
||||
|
||||
uint8_t subN = 1;
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y, STR_BEEPER);
|
||||
lcd_putsLeft( y, STR_BEEPER);
|
||||
lcd_putsnAtt(PARAM_OFS - 2*FW, y, STR_VBEEPER+LEN_VBEEPER*g_eeGeneral.beeperVal, LEN_VBEEPER, (sub==subN ? INVERS:0));
|
||||
if(sub==subN) CHECK_INCDEC_GENVAR(event, g_eeGeneral.beeperVal, 0, 6);
|
||||
if((y+=FH)>7*FH) return;
|
||||
@@ -98,7 +98,7 @@ void menuProcSetup(uint8_t event)
|
||||
|
||||
#ifdef AUDIO
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y, STR_SPKRPITCH);
|
||||
lcd_putsLeft( y, STR_SPKRPITCH);
|
||||
lcd_outdezAtt(PARAM_OFS, y, g_eeGeneral.speakerPitch,(sub==subN ? INVERS : 0)|LEFT);
|
||||
if (sub==subN) {
|
||||
CHECK_INCDEC_GENVAR(event, g_eeGeneral.speakerPitch, 0, 100);
|
||||
@@ -109,7 +109,7 @@ void menuProcSetup(uint8_t event)
|
||||
|
||||
#ifdef HAPTIC
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y, STR_HAPTICSTRENGTH);
|
||||
lcd_putsLeft( y, STR_HAPTICSTRENGTH);
|
||||
lcd_outdezAtt(PARAM_OFS, y, g_eeGeneral.hapticStrength, (sub==subN ? INVERS : 0)|LEFT);
|
||||
if (sub==subN) {
|
||||
CHECK_INCDEC_GENVAR(event, g_eeGeneral.hapticStrength, 0, 5);
|
||||
@@ -119,7 +119,7 @@ void menuProcSetup(uint8_t event)
|
||||
#endif
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y, STR_CONTRAST);
|
||||
lcd_putsLeft( y, STR_CONTRAST);
|
||||
lcd_outdezAtt(PARAM_OFS,y,g_eeGeneral.contrast,(sub==subN ? INVERS : 0)|LEFT);
|
||||
if(sub==subN) {
|
||||
CHECK_INCDEC_GENVAR(event, g_eeGeneral.contrast, 10, 45);
|
||||
@@ -129,14 +129,14 @@ void menuProcSetup(uint8_t event)
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y,STR_BATTERYWARNING);
|
||||
lcd_putsLeft( y,STR_BATTERYWARNING);
|
||||
putsVolts(PARAM_OFS, y, g_eeGeneral.vBatWarn, (sub==subN ? INVERS : 0)|LEFT);
|
||||
if(sub==subN) CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatWarn, 40, 120); //4-12V
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y,STR_INACTIVITYALARM);
|
||||
lcd_putsLeft( y,STR_INACTIVITYALARM);
|
||||
lcd_outdezAtt(PARAM_OFS, y, g_eeGeneral.inactivityTimer, (sub==subN ? INVERS : 0)|LEFT);
|
||||
lcd_putc(lcd_lastPos, y, 'm');
|
||||
if(sub==subN) g_eeGeneral.inactivityTimer = checkIncDec(event, g_eeGeneral.inactivityTimer, 0, 250, EE_GENERAL); //0..250minutes
|
||||
@@ -144,49 +144,49 @@ void menuProcSetup(uint8_t event)
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y,STR_FILTERADC);
|
||||
lcd_putsLeft( y,STR_FILTERADC);
|
||||
lcd_putsnAtt(PARAM_OFS, y, STR_ADCFILTER+LEN_ADCFILTER*g_eeGeneral.filterInput, LEN_ADCFILTER, (sub==subN ? INVERS:0));
|
||||
if(sub==subN) CHECK_INCDEC_GENVAR(event, g_eeGeneral.filterInput, 0, 2);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y,STR_THROTTLEREVERSE);
|
||||
lcd_putsLeft( y,STR_THROTTLEREVERSE);
|
||||
menu_lcd_onoff( PARAM_OFS, y, g_eeGeneral.throttleReversed, sub==subN ) ;
|
||||
if(sub==subN) CHECK_INCDEC_GENVAR(event, g_eeGeneral.throttleReversed, 0, 1);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y, STR_MINUTEBEEP);
|
||||
lcd_putsLeft( y, STR_MINUTEBEEP);
|
||||
menu_lcd_onoff( PARAM_OFS, y, g_eeGeneral.minuteBeep, sub==subN ) ;
|
||||
if(sub==subN) CHECK_INCDEC_GENVAR(event, g_eeGeneral.minuteBeep, 0, 1);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y, STR_BEEPCOUNTDOWN);
|
||||
lcd_putsLeft( y, STR_BEEPCOUNTDOWN);
|
||||
menu_lcd_onoff( PARAM_OFS, y, g_eeGeneral.preBeep, sub==subN ) ;
|
||||
if(sub==subN) CHECK_INCDEC_GENVAR(event, g_eeGeneral.preBeep, 0, 1);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y, STR_FLASHONBEEP);
|
||||
lcd_putsLeft( y, STR_FLASHONBEEP);
|
||||
menu_lcd_onoff( PARAM_OFS, y, g_eeGeneral.flashBeep, sub==subN ) ;
|
||||
if(sub==subN) CHECK_INCDEC_GENVAR(event, g_eeGeneral.flashBeep, 0, 1);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y, STR_LIGHTSWITCH);
|
||||
lcd_putsLeft( y, STR_LIGHTSWITCH);
|
||||
putsSwitches(PARAM_OFS,y,g_eeGeneral.lightSw,sub==subN ? INVERS : 0);
|
||||
if(sub==subN) CHECK_INCDEC_GENVAR(event, g_eeGeneral.lightSw, -MAX_SWITCH, MAX_SWITCH);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y, STR_LIGHTOFFAFTER);
|
||||
lcd_putsLeft( y, STR_LIGHTOFFAFTER);
|
||||
if(g_eeGeneral.lightAutoOff) {
|
||||
lcd_outdezAtt(PARAM_OFS, y, g_eeGeneral.lightAutoOff*5,LEFT|(sub==subN ? INVERS : 0));
|
||||
lcd_putc(lcd_lastPos, y, 's');
|
||||
@@ -201,7 +201,7 @@ void menuProcSetup(uint8_t event)
|
||||
#ifdef SPLASH
|
||||
if(s_pgOfs<subN) {
|
||||
uint8_t b = 1-g_eeGeneral.disableSplashScreen;
|
||||
lcd_puts_P(0, y,STR_SPLASHSCREEN);
|
||||
lcd_putsLeft( y,STR_SPLASHSCREEN);
|
||||
menu_lcd_onoff( PARAM_OFS, y, b, sub==subN ) ;
|
||||
if(sub==subN)
|
||||
{
|
||||
@@ -214,7 +214,7 @@ void menuProcSetup(uint8_t event)
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
uint8_t b = 1-g_eeGeneral.disableThrottleWarning;
|
||||
lcd_puts_P(0, y,STR_THROTTLEWARNING);
|
||||
lcd_putsLeft( y,STR_THROTTLEWARNING);
|
||||
menu_lcd_onoff( PARAM_OFS, y, b, sub==subN ) ;
|
||||
if(sub==subN)
|
||||
{
|
||||
@@ -225,7 +225,7 @@ void menuProcSetup(uint8_t event)
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y, STR_SWITCHWARNING);
|
||||
lcd_putsLeft( y, STR_SWITCHWARNING);
|
||||
lcd_putsnAtt(PARAM_OFS, y, STR_WARNSW+LEN_WARNSW*(1+g_eeGeneral.switchWarning), LEN_WARNSW, (sub==subN ? INVERS:0));
|
||||
if(sub==subN) CHECK_INCDEC_GENVAR(event, g_eeGeneral.switchWarning, -1, 1);
|
||||
if((y+=FH)>7*FH) return;
|
||||
@@ -233,7 +233,7 @@ void menuProcSetup(uint8_t event)
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
uint8_t b = 1-g_eeGeneral.disableMemoryWarning;
|
||||
lcd_puts_P(0, y, STR_MEMORYWARNING);
|
||||
lcd_putsLeft( y, STR_MEMORYWARNING);
|
||||
menu_lcd_onoff( PARAM_OFS, y, b, sub==subN ) ;
|
||||
if(sub==subN)
|
||||
{
|
||||
@@ -245,7 +245,7 @@ void menuProcSetup(uint8_t event)
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
uint8_t b = 1-g_eeGeneral.disableAlarmWarning;
|
||||
lcd_puts_P(0, y,STR_ALARMWARNING);
|
||||
lcd_putsLeft( y,STR_ALARMWARNING);
|
||||
menu_lcd_onoff( PARAM_OFS, y, b, sub==subN ) ;
|
||||
if(sub==subN)
|
||||
{
|
||||
@@ -257,7 +257,7 @@ void menuProcSetup(uint8_t event)
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
uint8_t b = g_eeGeneral.enableTelemetryAlarm;
|
||||
lcd_puts_P(0, y,STR_NODATAALARM);
|
||||
lcd_putsLeft( y,STR_NODATAALARM);
|
||||
menu_lcd_onoff( PARAM_OFS, y, b, sub==subN ) ;
|
||||
if(sub==subN)
|
||||
{
|
||||
@@ -269,7 +269,7 @@ void menuProcSetup(uint8_t event)
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
uint8_t attr = sub==subN?INVERS:0;
|
||||
lcd_puts_P(0, y,STR_RXCHANNELORD);// RAET->AETR
|
||||
lcd_putsLeft( y,STR_RXCHANNELORD);// RAET->AETR
|
||||
for (uint8_t i=1; i<=4; i++)
|
||||
putsChnLetter((16+i)*FW, y, channel_order(i), attr);
|
||||
if(attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.templateSetup, 0, 23);
|
||||
@@ -277,7 +277,7 @@ void menuProcSetup(uint8_t event)
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P( 1*FW, y, STR_MODE2); // TODO STR_MODE would save flash
|
||||
lcd_puts( 1*FW, y, STR_MODE2); // TODO STR_MODE would save flash
|
||||
if(y<7*FH) {for(uint8_t i=0; i<4; i++) lcd_img((6+4*i)*FW, y, sticks,i,0); }
|
||||
if((y+=FH)>7*FH) return;
|
||||
|
||||
@@ -397,11 +397,11 @@ void menuProcTrainer(uint8_t event)
|
||||
uint8_t blink ;
|
||||
|
||||
if (SLAVE_MODE) { // i am the slave
|
||||
lcd_puts_P(7*FW, 3*FH, STR_SLAVE);
|
||||
lcd_puts(7*FW, 3*FH, STR_SLAVE);
|
||||
return;
|
||||
}
|
||||
|
||||
lcd_puts_P(3*FW, 1*FH, STR_MODESRC);
|
||||
lcd_puts(3*FW, 1*FH, STR_MODESRC);
|
||||
|
||||
sub--;
|
||||
y = 2*FH;
|
||||
@@ -434,7 +434,7 @@ void menuProcTrainer(uint8_t event)
|
||||
y += FH;
|
||||
}
|
||||
|
||||
lcd_puts_P(0*FW, y, STR_MULTIPLIER);
|
||||
lcd_puts(0*FW, y, STR_MULTIPLIER);
|
||||
lcd_outdezAtt(13*FW, y, g_eeGeneral.PPM_Multiplier+10, (sub==4 ? INVERS : 0)|PREC1);
|
||||
if(sub==4) CHECK_INCDEC_GENVAR(event, g_eeGeneral.PPM_Multiplier, -10, 40);
|
||||
y += FH;
|
||||
@@ -463,11 +463,11 @@ void menuProcDiagVers(uint8_t event)
|
||||
{
|
||||
SIMPLE_MENU(STR_MENUVERSION, menuTabDiag, e_Vers, 1);
|
||||
|
||||
lcd_puts_P(0, 2*FH,stamp1 );
|
||||
lcd_puts_P(0, 3*FH,stamp2 );
|
||||
lcd_puts_P(0, 4*FH,stamp3 );
|
||||
lcd_puts_P(0, 5*FH,stamp4 );
|
||||
lcd_puts_P(0, 7*FH,STR_EEPROMV);
|
||||
lcd_putsLeft( 2*FH,stamp1 );
|
||||
lcd_putsLeft( 3*FH,stamp2 );
|
||||
lcd_putsLeft( 4*FH,stamp3 );
|
||||
lcd_putsLeft( 5*FH,stamp4 );
|
||||
lcd_putsLeft( 7*FH,STR_EEPROMV);
|
||||
lcd_outdezAtt(8*FW, 7*FH, g_eeGeneral.myVers, LEFT);
|
||||
}
|
||||
|
||||
@@ -500,7 +500,7 @@ void menuProcDiagKeys(uint8_t event)
|
||||
}
|
||||
#endif
|
||||
|
||||
lcd_puts_P(14*FW, 3*FH, STR_VTRIM);
|
||||
lcd_puts(14*FW, 3*FH, STR_VTRIM);
|
||||
for(uint8_t i=0; i<4; i++)
|
||||
{
|
||||
uint8_t y=i*FH+FH*4;
|
||||
@@ -531,7 +531,7 @@ void menuProcDiagAna(uint8_t event)
|
||||
// lcd_outdezAtt( 21*FW, 3*FH, g_eeGeneral.vBatCalib, 0) ;
|
||||
// lcd_outdezAtt( 21*FW, 4*FH, abRunningAvg, 0) ;
|
||||
// Display raw BandGap result (debug)
|
||||
lcd_puts_P( 19*FW, 5*FH, STR_BG) ;
|
||||
lcd_puts( 19*FW, 5*FH, STR_BG) ;
|
||||
lcd_outdezAtt(21*FW, 6*FH, BandGap, 0);
|
||||
lcd_outdezAtt(21*FW, 7*FH, anaIn(7)*35/512, PREC1);
|
||||
|
||||
@@ -576,15 +576,13 @@ void menuProcDiagCalib(uint8_t event)
|
||||
switch (idxState) {
|
||||
case 0:
|
||||
// START CALIBRATION
|
||||
// [MENU]
|
||||
lcd_puts_P(2*FW, 3*FH, STR_MENUTOSTART);
|
||||
lcd_puts(3*FW, 3*FH, STR_MENUTOSTART);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
// SET MIDPOINT
|
||||
// [MENU]
|
||||
lcd_putsAtt(2*FW, 2*FH, STR_SETMIDPOINT, s_noScroll ? INVERS : 0);
|
||||
lcd_puts_P(2*FW, 3*FH, STR_MENUWHENDONE);
|
||||
lcd_putsAtt(5*FW, 2*FH, STR_SETMIDPOINT, s_noScroll ? INVERS : 0);
|
||||
lcd_puts(3*FW, 3*FH, STR_MENUWHENDONE);
|
||||
|
||||
for (uint8_t i=0; i<7; i++) {
|
||||
loVals[i] = 15000;
|
||||
@@ -595,9 +593,8 @@ void menuProcDiagCalib(uint8_t event)
|
||||
|
||||
case 2:
|
||||
// MOVE STICKS/POTS
|
||||
// [MENU]
|
||||
lcd_putsAtt(2*FW, 2*FH, STR_MOVESTICKSPOTS, s_noScroll ? INVERS : 0);
|
||||
lcd_puts_P(2*FW, 3*FH, STR_MENUWHENDONE);
|
||||
lcd_putsAtt(3*FW, 2*FH, STR_MOVESTICKSPOTS, s_noScroll ? INVERS : 0);
|
||||
lcd_puts(3*FW, 3*FH, STR_MENUWHENDONE);
|
||||
|
||||
for (uint8_t i=0; i<7; i++) {
|
||||
if (abs(loVals[i]-hiVals[i])>50) {
|
||||
|
||||
+102
-41
@@ -68,7 +68,7 @@ void lcd_putcAtt(uint8_t x, uint8_t y, const char c, uint8_t mode)
|
||||
uint8_t *p = &displayBuf[ y / 8 * DISPLAY_W + x ];
|
||||
|
||||
const pm_uchar *q = &font_5x8_x20_x7f[ + (c-0x20)*5];
|
||||
bool inv = (mode & INVERS) ? true : (mode & BLINK ? BLINK_ON_PHASE : false);
|
||||
bool inv = (mode & INVERS) ? true : (mode & BLINK ? BLINK_ON_PHASE : false);
|
||||
if(mode & DBLSIZE)
|
||||
{
|
||||
/* each letter consists of ten top bytes followed by
|
||||
@@ -76,23 +76,20 @@ void lcd_putcAtt(uint8_t x, uint8_t y, const char c, uint8_t mode)
|
||||
q = &font_10x16_x20_x7f[(c-0x20)*10 + ((c-0x20)/16)*160];
|
||||
for(char i=5; i>=0; i--) {
|
||||
if (mode & CONDENSED && i==0) break;
|
||||
/*top byte*/
|
||||
uint8_t b1 = i>0 ? pgm_read_byte(q) : 0;
|
||||
/*bottom byte*/
|
||||
uint8_t b3 = i>0 ? pgm_read_byte(160+q) : 0;
|
||||
/*top byte*/
|
||||
uint8_t b2 = i>0 ? pgm_read_byte(++q) : 0;
|
||||
/*bottom byte*/
|
||||
uint8_t b4 = i>0 ? pgm_read_byte(160+q) : 0;
|
||||
|
||||
uint8_t b1=0, b2=0, b3=0, b4=0;
|
||||
if (i>0) {
|
||||
b1 = pgm_read_byte(q); /*top byte*/
|
||||
b3 = pgm_read_byte(160+q); /*bottom byte*/
|
||||
b2 = pgm_read_byte(++q); /*top byte*/
|
||||
b4 = pgm_read_byte(160+q); /*bottom byte*/
|
||||
}
|
||||
if(inv) {
|
||||
b1=~b1;
|
||||
b2=~b2;
|
||||
b3=~b3;
|
||||
b4=~b4;
|
||||
}
|
||||
|
||||
if(&p[DISPLAY_W+1] < DISPLAY_END){
|
||||
if(&p[DISPLAY_W+1] < DISPLAY_END) {
|
||||
p[0]=b1;
|
||||
p[1]=b2;
|
||||
p[DISPLAY_W] = b3;
|
||||
@@ -110,15 +107,21 @@ void lcd_putcAtt(uint8_t x, uint8_t y, const char c, uint8_t mode)
|
||||
condense=1;
|
||||
}
|
||||
|
||||
for (char i=5; i!=0; i--) {
|
||||
uint8_t b = pgm_read_byte(q++);
|
||||
uint8_t ym8 = (y % 8);
|
||||
for (char i=5; i>=0; i--) {
|
||||
uint8_t b = (i>0 ? pgm_read_byte(q++) : 0);
|
||||
if (inv) b = ~b;
|
||||
|
||||
if (condense && i==4) {
|
||||
/*condense the letter by skipping column 4 */
|
||||
continue;
|
||||
}
|
||||
if(p<DISPLAY_END) *p++ = inv ? ~b : b;
|
||||
if (p<DISPLAY_END) {
|
||||
*p = (*p & (~(0xff << ym8))) + (b << ym8);
|
||||
if (ym8) { uint8_t *r = p + DISPLAY_W; if (r<DISPLAY_END) *r = (*r & (~(0xff >> (8-ym8)))) + (b >> (8-ym8)); }
|
||||
p++;
|
||||
}
|
||||
}
|
||||
if(p<DISPLAY_END) *p++ = inv ? ~0 : 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,10 +145,15 @@ void lcd_putsnAtt(uint8_t x,uint8_t y,const pm_char * s,uint8_t len,uint8_t mode
|
||||
c = pgm_read_byte(s);
|
||||
break;
|
||||
}
|
||||
if (!c) break;
|
||||
lcd_putcAtt(x,y,c,mode);
|
||||
x+=FW;
|
||||
if (mode&DBLSIZE) x+=FW-1;
|
||||
if (!c || x>DISPLAY_W-6) break;
|
||||
if (c >= 0x20) {
|
||||
lcd_putcAtt(x,y,c,mode);
|
||||
x += FW;
|
||||
if (mode&DBLSIZE) x += FW-1;
|
||||
}
|
||||
else {
|
||||
x += (c*FW);
|
||||
}
|
||||
s++;
|
||||
len--;
|
||||
}
|
||||
@@ -162,11 +170,16 @@ void lcd_putsAtt(uint8_t x,uint8_t y,const pm_char * s,uint8_t mode)
|
||||
lcd_putsnAtt(x, y, s, 255, mode);
|
||||
}
|
||||
|
||||
void lcd_puts_P(uint8_t x,uint8_t y,const pm_char * s)
|
||||
void lcd_puts(uint8_t x,uint8_t y,const pm_char * s)
|
||||
{
|
||||
lcd_putsAtt( x, y, s, 0);
|
||||
}
|
||||
|
||||
void lcd_putsLeft(uint8_t y, const pm_char * s)
|
||||
{
|
||||
lcd_putsAtt(0, y, s, 0);
|
||||
}
|
||||
|
||||
void lcd_outhex4(uint8_t x,uint8_t y,uint16_t val)
|
||||
{
|
||||
x+=FWNUM*4;
|
||||
@@ -331,6 +344,9 @@ void lcd_vlineStip(uint8_t x, int8_t y, int8_t h, uint8_t pat)
|
||||
if (y<0) { h+=y; y=0; }
|
||||
if (y+h > DISPLAY_H) { h = DISPLAY_H - y; }
|
||||
|
||||
if (pat==DOTTED && !(y%2))
|
||||
pat = ~pat;
|
||||
|
||||
uint8_t *p = &displayBuf[ y / 8 * DISPLAY_W + x ];
|
||||
y = y % 8;
|
||||
if (y) {
|
||||
@@ -362,16 +378,18 @@ void lcd_rect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t pat, uint8_t a
|
||||
{
|
||||
if (!((att & BLINK) && BLINK_ON_PHASE)) {
|
||||
lcd_vlineStip(x, y, h, pat);
|
||||
lcd_hlineStip(x, y+h-1, w, pat);
|
||||
lcd_vlineStip(x+w-1, y, h, pat);
|
||||
if (~att & ROUND) { x+=1; w-=2; }
|
||||
lcd_hlineStip(x, y+h-1, w, pat);
|
||||
lcd_hlineStip(x, y, w, pat);
|
||||
}
|
||||
}
|
||||
|
||||
void lcd_filled_rect(uint8_t x, int8_t y, uint8_t w, uint8_t h, uint8_t att)
|
||||
void lcd_filled_rect(uint8_t x, int8_t y, uint8_t w, uint8_t h, uint8_t pat, uint8_t att)
|
||||
{
|
||||
for (int8_t i=y; i<y+h; i++) {
|
||||
if (i>=0 && i<64) lcd_hline(x, i, w, att);
|
||||
if (i>=0 && i<64) lcd_hlineStip(x, i, w, pat, att);
|
||||
if (pat != 0xff) pat = ~pat;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -387,6 +405,7 @@ void putsTime(uint8_t x,uint8_t y,int16_t tme,uint8_t att,uint8_t att2)
|
||||
lcd_outdezNAtt(lcd_lastPos+FW, y, tme%60, att2|LEADING0|LEFT, 2);
|
||||
}
|
||||
|
||||
// TODO to be optimized with putsTelemetryValue
|
||||
void putsVolts(uint8_t x, uint8_t y, uint16_t volts, uint8_t att)
|
||||
{
|
||||
lcd_outdezAtt(x, y, (int16_t)volts, att | ((att&PREC2)==PREC2 ? 0 : PREC1));
|
||||
@@ -493,29 +512,71 @@ void putsTmrMode(uint8_t x, uint8_t y, int8_t mode, uint8_t att)
|
||||
|
||||
#ifdef FRSKY
|
||||
// TODO move this into frsky.cpp
|
||||
void putsTelemetryChannel(uint8_t x, uint8_t y, uint8_t channel, uint8_t val, uint8_t att)
|
||||
void putsTelemetryChannel(uint8_t x, uint8_t y, uint8_t channel, int16_t val, uint8_t att)
|
||||
{
|
||||
// TODO optimize this, avoid int32_t
|
||||
int16_t converted_value = ((int32_t)val+g_model.frsky.channels[channel].offset) * g_model.frsky.channels[channel].ratio * 2 / 51;
|
||||
if (g_model.frsky.channels[channel].type == UNIT_VOLTS && converted_value < 1000) {
|
||||
att |= PREC2;
|
||||
// TODO enum
|
||||
|
||||
switch (channel) {
|
||||
case 0:
|
||||
case 1:
|
||||
// A1 and A2
|
||||
{
|
||||
// TODO optimize this, avoid int32_t
|
||||
int16_t converted_value = ((int32_t)val+g_model.frsky.channels[channel].offset) * g_model.frsky.channels[channel].ratio * 2 / 51;
|
||||
if (g_model.frsky.channels[channel].type >= UNIT_RAW) {
|
||||
converted_value /= 10;
|
||||
}
|
||||
else {
|
||||
if (converted_value < 1000) {
|
||||
att |= PREC2;
|
||||
}
|
||||
else {
|
||||
converted_value /= 10;
|
||||
att |= PREC1;
|
||||
}
|
||||
}
|
||||
putsTelemetryValue(x, y, converted_value, g_model.frsky.channels[channel].type, att);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
// Altitude
|
||||
putsTelemetryValue(x, y, val * 4, UNIT_METERS, att);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
// RPMs
|
||||
lcd_outdezAtt(x, y, (int16_t)val * 50, att);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
// FUEL
|
||||
putsTelemetryValue(x, y, val, UNIT_PERCENT, att);
|
||||
break;
|
||||
|
||||
case 5:
|
||||
case 6:
|
||||
// TEMPERATURE
|
||||
putsTelemetryValue(x, y, val, UNIT_DEGREES, att);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
// SPEED
|
||||
putsTelemetryValue(x, y, val*2, UNIT_KMH, att);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
// CELL
|
||||
putsVolts(x, y, val*2, att);
|
||||
break;
|
||||
}
|
||||
else {
|
||||
converted_value /= 10;
|
||||
}
|
||||
putsTelemetryValue(x, y, converted_value, g_model.frsky.channels[channel].type, att);
|
||||
}
|
||||
|
||||
void putsTelemetryValue(uint8_t x, uint8_t y, int16_t val, uint8_t unit, uint8_t att)
|
||||
{
|
||||
if (unit == UNIT_VOLTS) {
|
||||
putsVolts(x, y, val, att);
|
||||
}
|
||||
else {
|
||||
lcd_outdezAtt(x, (att & DBLSIZE ? y - FH : y), val, att); // TODO we could add this test inside lcd_outdezAtt!
|
||||
if (~att & NO_UNIT && unit != UNIT_RAW)
|
||||
lcd_putsnAtt(lcd_lastPos+1, y, STR_VTELEMUNIT+LEN_VTELEMUNIT*unit, LEN_VTELEMUNIT, 0);
|
||||
}
|
||||
lcd_outdezAtt(x, (att & DBLSIZE ? y - FH : y), val, att); // TODO we could add this test inside lcd_outdezAtt!
|
||||
if (~att & NO_UNIT && unit != UNIT_RAW)
|
||||
lcd_putsnAtt(lcd_lastPos+1, y, STR_VTELEMUNIT+LEN_VTELEMUNIT*unit, LEN_VTELEMUNIT, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@
|
||||
/* line, rect, square flags */
|
||||
#define BLACK 0x02
|
||||
#define WHITE 0x04
|
||||
#define ROUND 0x08
|
||||
|
||||
/* other flags */
|
||||
#define NO_UNIT UNSIGN
|
||||
@@ -72,7 +73,8 @@ extern void lcd_putcAtt(unsigned char x,unsigned char y,const char c,uint8_t mod
|
||||
|
||||
extern void lcd_putsAtt(unsigned char x,unsigned char y,const pm_char * s,uint8_t mode);
|
||||
extern void lcd_putsnAtt(unsigned char x,unsigned char y,const pm_char * s,unsigned char len,uint8_t mode);
|
||||
extern void lcd_puts_P(unsigned char x,unsigned char y,const pm_char * s);
|
||||
extern void lcd_puts(unsigned char x,unsigned char y,const pm_char * s);
|
||||
extern void lcd_putsLeft(unsigned char y, const pm_char * s);
|
||||
extern void lcd_putsn_P(unsigned char x,unsigned char y,const pm_char * s,unsigned char len);
|
||||
|
||||
extern void lcd_outhex4(unsigned char x,unsigned char y,uint16_t val);
|
||||
@@ -99,19 +101,22 @@ extern void putsTime(uint8_t x,uint8_t y, int16_t tme, uint8_t att, uint8_t att2
|
||||
|
||||
#ifdef FRSKY
|
||||
// TODO move this into frsky.h
|
||||
void putsTelemetryChannel(uint8_t x, uint8_t y, uint8_t channel, uint8_t val, uint8_t att);
|
||||
void putsTelemetryChannel(uint8_t x, uint8_t y, uint8_t channel, int16_t val, uint8_t att);
|
||||
void putsTelemetryValue(uint8_t x, uint8_t y, int16_t val, uint8_t unit, uint8_t att);
|
||||
#endif
|
||||
|
||||
#define SOLID 0xff
|
||||
#define DOTTED 0x55
|
||||
|
||||
extern void lcd_plot(unsigned char x, unsigned char y, uint8_t att=0);
|
||||
extern void lcd_hline(unsigned char x, unsigned char y, uint8_t w, uint8_t att=0);
|
||||
extern void lcd_hlineStip(int8_t x, uint8_t y, uint8_t w, uint8_t pat, uint8_t att=0);
|
||||
extern void lcd_vline(uint8_t x, int8_t y, int8_t h);
|
||||
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=0xff, uint8_t att=0);
|
||||
extern void lcd_filled_rect(uint8_t x, int8_t y, uint8_t w, uint8_t h, uint8_t att=0);
|
||||
inline void lcd_square(uint8_t x, uint8_t y, uint8_t w, uint8_t att=0) { lcd_rect(x, y, w, w, 0xff, att); }
|
||||
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);
|
||||
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) \
|
||||
lcd_vline(xx,yy-ww/2,ww); \
|
||||
|
||||
+138
-138
@@ -40,11 +40,11 @@ uint8_t tabViews[] = {
|
||||
2, /*e_inputs*/
|
||||
1, /*e_timer2*/
|
||||
#if defined(FRSKY_HUB)
|
||||
4, /*e_telemetry*/
|
||||
5, /*e_telemetry*/
|
||||
#elif defined(WS_HOW_HIGH)
|
||||
3, /*e_telemetry*/
|
||||
4, /*e_telemetry*/
|
||||
#elif defined(FRSKY)
|
||||
2, /*e_telemetry*/
|
||||
3, /*e_telemetry*/
|
||||
#endif
|
||||
};
|
||||
|
||||
@@ -67,8 +67,8 @@ 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);
|
||||
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);
|
||||
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);
|
||||
|
||||
// Optimization by Mike Blandford
|
||||
{
|
||||
@@ -81,11 +81,31 @@ void doMainScreenGrphics()
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(FRSKY)
|
||||
void displayA1A2(uint8_t x, uint8_t y, uint8_t idx)
|
||||
{
|
||||
lcd_puts(x, y, PSTR("A :"));
|
||||
lcd_putc(x+FW, y, '1'+idx);
|
||||
}
|
||||
|
||||
void displayRssiLine()
|
||||
{
|
||||
lcd_hline(0, 54, 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);
|
||||
lcd_puts(105, 7*FH+1, STR_RX); lcd_outdezNAtt(105+4*FW-1, 7*FH+1, frskyRSSI[0].value, LEADING0, 2);
|
||||
lcd_rect(65, 57, 38, 7);
|
||||
uint8_t v = 9*frskyRSSI[0].value/25;
|
||||
lcd_filled_rect(66+36-v, 58, v, 5);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
void displayAltitudeLine(uint8_t x, uint8_t y, uint8_t flags)
|
||||
{
|
||||
lcd_puts_P(x, y, STR_ALT);
|
||||
int16_t value = frskyHubData.baroAltitude + baroAltitudeOffset;
|
||||
lcd_puts(x, y, STR_ALT);
|
||||
int16_t value = frskyHubData.baroAltitude + frskyHubData.baroAltitudeOffset;
|
||||
putsTelemetryValue(lcd_lastPos, y, value, UNIT_METERS, flags|LEFT);
|
||||
}
|
||||
#endif
|
||||
@@ -248,11 +268,11 @@ void menuMainView(uint8_t event)
|
||||
uint8_t xm, ym;
|
||||
xm = x[CONVERT_MODE(i+1)-1];
|
||||
|
||||
uint8_t att = 0;
|
||||
uint8_t att = ROUND;
|
||||
int16_t val = getTrimValue(getTrimFlightPhase(i, phase), i);
|
||||
|
||||
if (val < -125 || val > 125)
|
||||
att = BLINK;
|
||||
att = BLINK|ROUND;
|
||||
|
||||
if (val < -(TL+1)*4)
|
||||
val = -(TL+1);
|
||||
@@ -265,7 +285,6 @@ void menuMainView(uint8_t event)
|
||||
ym = 31;
|
||||
lcd_vline(xm, ym-TL, TL*2);
|
||||
if (i!=2 || !g_model.thrTrim) {
|
||||
// TODO square?
|
||||
lcd_vline(xm-1, ym-1, 3);
|
||||
lcd_vline(xm+1, ym-1, 3);
|
||||
}
|
||||
@@ -288,7 +307,7 @@ void menuMainView(uint8_t event)
|
||||
uint8_t x0,y0;
|
||||
int16_t val = g_chans512[i];
|
||||
//val += g_model.limitData[i].revert ? g_model.limitData[i].offset : -g_model.limitData[i].offset;
|
||||
switch(view_base) // TODO optim with if (view_base == e_e_outputValues) ... else ...
|
||||
switch(view_base)
|
||||
{
|
||||
case e_outputValues:
|
||||
x0 = (i%4*9+3)*FW/2;
|
||||
@@ -305,19 +324,18 @@ void menuMainView(uint8_t event)
|
||||
#define WBAR2 (50/2)
|
||||
x0 = i<4 ? 128/4+2 : 128*3/4-2;
|
||||
y0 = 38+(i%4)*5;
|
||||
int8_t l = (abs(val) * WBAR2 + 512) / 1024;
|
||||
if(l>WBAR2) l = WBAR2; // prevent bars from going over the end - comment for debugging
|
||||
|
||||
lcd_hlineStip(x0-WBAR2,y0,WBAR2*2+1,0x55);
|
||||
int8_t len = (abs(val) * WBAR2 + 512) / 1024;
|
||||
if(len>WBAR2) len = WBAR2; // prevent bars from going over the end - comment for debugging
|
||||
lcd_hlineStip(x0-WBAR2, y0, WBAR2*2+1, DOTTED);
|
||||
lcd_vline(x0,y0-2,5);
|
||||
// TODO optim
|
||||
if(val>0){
|
||||
if (val>0){
|
||||
x0+=1;
|
||||
}else{
|
||||
x0-=l;
|
||||
x0-=len;
|
||||
}
|
||||
lcd_hline(x0,y0+1,l);
|
||||
lcd_hline(x0,y0-1,l);
|
||||
lcd_hline(x0,y0+1,len);
|
||||
lcd_hline(x0,y0-1,len);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -340,103 +358,98 @@ void menuMainView(uint8_t event)
|
||||
V_BAR(SCREEN_WIDTH/2-5*4+2+i*5, SCREEN_HEIGHT-8, len)
|
||||
}
|
||||
for (uint8_t i=0; i<12; i++) {
|
||||
if ((i%6) < 3) lcd_puts_P(i<6 ? 2*FW-2 : 16*FW-2, (i%3)*FH+4*FH, STR_SW);
|
||||
if ((i%6) < 3) lcd_puts(i<6 ? 2*FW-2 : 16*FW-2, (i%3)*FH+4*FH, STR_SW);
|
||||
lcd_putcAtt((i<6 ? 2*FW-2 : 16*FW-2) + 2 * FW + ((i%6) < 3 ? 0 : FW), (i%3)*FH+4*FH, i<9 ? '1'+i : 'A'+i-9, getSwitch(10+i, 0) ? INVERS : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
#if defined(FRSKY)
|
||||
else if (view_base == e_telemetry) {
|
||||
static uint8_t displayCount = 0;
|
||||
static uint8_t staticTelemetry[2];
|
||||
static uint8_t staticRSSI[2];
|
||||
static bool alarmRaised[2];
|
||||
|
||||
if (frskyStreaming) {
|
||||
uint8_t y0, x0, blink;
|
||||
if (!displayCount) {
|
||||
for (int i=0; i<2; i++) {
|
||||
staticTelemetry[i] = frskyTelemetry[i].value;
|
||||
staticRSSI[i] = frskyRSSI[i].value;
|
||||
alarmRaised[i] = FRSKY_alarmRaised(i);
|
||||
}
|
||||
}
|
||||
displayCount = (displayCount+1) % 50;
|
||||
|
||||
if (view == e_telemetry+ALTERNATE_VIEW) {
|
||||
// The bars
|
||||
uint8_t bars_height = 5;
|
||||
for (int8_t i=3; i>=0; i--) {
|
||||
if (g_model.frsky.bars[i].source && (63-g_model.frsky.bars[i].barMax) > g_model.frsky.bars[i].barMin) {
|
||||
lcd_putsnAtt(0, bars_height+bars_height+1+i*(bars_height+6), STR_VTELEMBARS+LEN_VTELEMBARS*g_model.frsky.bars[i].source, LEN_VTELEMBARS, 0);
|
||||
lcd_rect(25, bars_height+6+i*(bars_height+6), 101, bars_height+2);
|
||||
int16_t value = getValue(CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+g_model.frsky.bars[i].source-1);
|
||||
uint8_t threshold = 0, thresholdX = 0;
|
||||
if (g_model.frsky.bars[i].source <= 2)
|
||||
threshold = g_model.frsky.channels[g_model.frsky.bars[i].source-1].alarms_value[0];
|
||||
else
|
||||
threshold = barsThresholds[g_model.frsky.bars[i].source-3];
|
||||
if (threshold) {
|
||||
thresholdX = (uint8_t)(int16_t)((int16_t)100 * (threshold - g_model.frsky.bars[i].barMin * 4) / ((63 - g_model.frsky.bars[i].barMax) * 4 - g_model.frsky.bars[i].barMin * 4));
|
||||
if (thresholdX > 100)
|
||||
thresholdX = 0;
|
||||
}
|
||||
uint8_t width = (uint8_t)limit((int16_t)0, (int16_t)((int16_t)100 * (value - g_model.frsky.bars[i].barMin * 4) / ((63 - g_model.frsky.bars[i].barMax) * 4 - g_model.frsky.bars[i].barMin * 4)), (int16_t)100);
|
||||
lcd_filled_rect(26, bars_height+6+1+i*(bars_height+6), width, bars_height, (threshold > value) ? DOTTED : SOLID);
|
||||
for (uint8_t j=50; j<125; j+=25)
|
||||
if (j>thresholdX) lcd_vline(j, bars_height+6+1+i*(bars_height+6), bars_height);
|
||||
if (thresholdX) {
|
||||
lcd_vlineStip(26+thresholdX, bars_height+4+i*(bars_height+6), bars_height+3, DOTTED);
|
||||
lcd_hline(25+thresholdX, bars_height+4+i*(bars_height+6), 3);
|
||||
}
|
||||
}
|
||||
else {
|
||||
bars_height += 2;
|
||||
}
|
||||
}
|
||||
|
||||
displayRssiLine();
|
||||
}
|
||||
else if (view == e_telemetry+2*ALTERNATE_VIEW) {
|
||||
// Big A1 / A2 with min and max
|
||||
if (g_model.frsky.channels[0].ratio || g_model.frsky.channels[1].ratio) {
|
||||
x0 = 0;
|
||||
for (int i=0; i<2; i++) {
|
||||
for (uint8_t i=0; i<2; i++) {
|
||||
if (g_model.frsky.channels[i].ratio) {
|
||||
blink = (alarmRaised[i] ? INVERS : 0);
|
||||
lcd_puts_P(x0, 3*FH, PSTR("A :"));
|
||||
lcd_putc(x0+FW, 3*FH, '1'+i);
|
||||
blink = (FRSKY_alarmRaised(i) ? INVERS : 0);
|
||||
displayA1A2(x0, 2*FH, i);
|
||||
x0 += 3*FW;
|
||||
putsTelemetryChannel(x0, 2*FH, i, staticTelemetry[i], blink|DBLSIZE|LEFT);
|
||||
putsTelemetryChannel(x0+FW, 4*FH, i, frskyTelemetry[i].min, 0);
|
||||
putsTelemetryChannel(x0+3*FW, 4*FH, i, frskyTelemetry[i].max, LEFT);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
// Display RX Batt Volts only if a valid channel (A1/A2) has been selected
|
||||
if (g_eeFrsky.rxVoltsChannel >0)
|
||||
// Cells voltage
|
||||
lcd_putsLeft( 5*FH-3, PSTR("V1=\004V2=\004V3=")) ;
|
||||
lcd_putsLeft( 6*FH-3, PSTR("V4=\004V5=\004V6="));
|
||||
{
|
||||
y+=FH; lcd_puts_P(2*FW, y, STR_RXBATT);
|
||||
// Rx batt voltage bar frame
|
||||
|
||||
// Minimum voltage
|
||||
lcd_vline(3, 58, 6); // marker
|
||||
|
||||
y = 6*FH;
|
||||
putsVolts(1, y, g_eeFrsky.rxVoltsBarMin, LEFT);
|
||||
uint8_t middleVolts = g_eeFrsky.rxVoltsBarMin+(g_eeFrsky.rxVoltsBarMax - g_eeFrsky.rxVoltsBarMin)/2;
|
||||
putsVolts(64-FW, y, middleVolts, LEFT);
|
||||
lcd_vline(64, 58, 6); // marker
|
||||
putsVolts(128-FW, y, g_eeFrsky.rxVoltsBarMax, 0);
|
||||
lcd_vline(125, 58, 6); // marker
|
||||
|
||||
// Rx Batt: volts (255 == g_eefrsky.rxVoltsMax)
|
||||
uint16_t centaVolts = (voltsVal > 0) ? (10 * (uint16_t)g_eeFrsky.rxVoltsMax * (uint32_t)(voltsVal) / 255) + g_eeFrsky.rxVoltsOfs : 0;
|
||||
lcd_outdezAtt(13*FW, 4*FH, centaVolts, 0|PREC2);
|
||||
lcd_putc(13*FW, 4*FH, 'v');
|
||||
|
||||
// draw the actual voltage bar
|
||||
uint16_t centaVoltsMin = 10 * g_eeFrsky.rxVoltsBarMin;
|
||||
if (centaVolts >= centaVoltsMin)
|
||||
{
|
||||
uint8_t vbarLen = (centaVolts - (10 * (uint16_t)g_eeFrsky.rxVoltsBarMin)) * 12
|
||||
/ (g_eeFrsky.rxVoltsBarMax - g_eeFrsky.rxVoltsBarMin);
|
||||
for (uint8_t i = 59; i < 63; i++) // Bar 4 pixels thick (high)
|
||||
lcd_hline(4, i, (vbarLen > 120) ? 120 : vbarLen);
|
||||
uint8_t x, y;
|
||||
x = 6*FW;
|
||||
y = 6*FH-3;
|
||||
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 : PREC2;
|
||||
if (k == 3) {
|
||||
x = 6*FW;
|
||||
y = 7*FH-3;
|
||||
}
|
||||
lcd_outdezNAtt(x, y, frskyHubData.cellVolts[k] * 2, attr, 4);
|
||||
x += 7*FW;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
lcd_puts_P(0, 6*FH, STR_RX);
|
||||
lcd_outdezAtt(3 * FW, 5*FH+2, staticRSSI[0], DBLSIZE|LEFT);
|
||||
lcd_outdezAtt(4 * FW, 7*FH, frskyRSSI[0].min, 0);
|
||||
lcd_outdezAtt(6 * FW, 7*FH, frskyRSSI[0].max, LEFT);
|
||||
lcd_puts_P(11 * FW - 2, 6*FH, STR_TX);
|
||||
lcd_outdezAtt(14 * FW - 2, 5*FH+2, staticRSSI[1], DBLSIZE|LEFT);
|
||||
lcd_outdezAtt(15 * FW - 2, 7*FH, frskyRSSI[1].min, 0);
|
||||
lcd_outdezAtt(17 * FW - 2, 7*FH, frskyRSSI[1].max, LEFT);
|
||||
displayRssiLine();
|
||||
}
|
||||
|
||||
#ifdef WS_HOW_HIGH
|
||||
else if (g_model.frsky.usrProto == PROTO_WS_HOW_HIGH && view == e_telemetry+2*ALTERNATE_VIEW) {
|
||||
else if (g_model.frsky.usrProto == PROTO_WS_HOW_HIGH && view == e_telemetry+3*ALTERNATE_VIEW) {
|
||||
displayAltitudeLine(0, 4*FH, DBLSIZE);
|
||||
lcd_puts_P(1*FW, 7*FH, STR_RX);
|
||||
lcd_outdezAtt(4*FW, 7*FH, staticRSSI[0], LEFT);
|
||||
lcd_puts_P(11*FW, 7*FH, STR_TX);
|
||||
lcd_outdezAtt(14*FW, 7*FH, staticRSSI[1], LEFT);
|
||||
lcd_filled_rect(0, 7*FH, DISPLAY_W, 8);
|
||||
displayRssiLine();
|
||||
}
|
||||
#endif
|
||||
#ifdef FRSKY_HUB
|
||||
else if (g_model.frsky.usrProto == PROTO_FRSKY_HUB && view == e_telemetry+3*ALTERNATE_VIEW) {
|
||||
#define DATE_LINE (7*FH)
|
||||
//lcd_puts_P(0, DATE_LINE, PSTR("D/T:"));
|
||||
else if (g_model.frsky.usrProto == PROTO_FRSKY_HUB && view == e_telemetry+4*ALTERNATE_VIEW) {
|
||||
#define DATE_LINE (7*FH+1)
|
||||
//lcd_putsLeft( DATE_LINE, PSTR("D/T:"));
|
||||
// Date
|
||||
lcd_outdezNAtt(3*FW, DATE_LINE, frskyHubData.year+2000, LEFT, 4);
|
||||
lcd_putc(7*FW-4, DATE_LINE, '-');
|
||||
@@ -450,11 +463,11 @@ void menuMainView(uint8_t event)
|
||||
lcd_outdezNAtt(15*FW+2, DATE_LINE, frskyHubData.min, LEFT|LEADING0, 2);
|
||||
lcd_putc(17*FW-1, DATE_LINE, ':');
|
||||
lcd_outdezNAtt(18*FW-1, DATE_LINE, frskyHubData.sec, LEFT|LEADING0, 2);
|
||||
lcd_filled_rect(0, DATE_LINE, DISPLAY_W, 8);
|
||||
lcd_filled_rect(0, DATE_LINE-1, DISPLAY_W, 8);
|
||||
|
||||
// Latitude
|
||||
#define LAT_LINE (2*FH)
|
||||
lcd_puts_P(0, LAT_LINE, PSTR("Lat:"));
|
||||
#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 '.'
|
||||
lcd_putc(lcd_lastPos, LAT_LINE, '@');
|
||||
uint8_t mn = frskyHubData.gpsLatitude_bp % 100;
|
||||
@@ -464,8 +477,8 @@ void menuMainView(uint8_t event)
|
||||
lcd_putc(lcd_lastPos+1, LAT_LINE, frskyHubData.gpsLatitudeNS ? frskyHubData.gpsLatitudeNS : '-');
|
||||
|
||||
// Longitude
|
||||
#define LONG_LINE (3*FH)
|
||||
lcd_puts_P(0, LONG_LINE, PSTR("Lon:"));
|
||||
#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 '.'
|
||||
lcd_putc(lcd_lastPos, LONG_LINE, '@');
|
||||
mn = frskyHubData.gpsLongitude_bp % 100;
|
||||
@@ -476,7 +489,7 @@ void menuMainView(uint8_t event)
|
||||
|
||||
#if 0
|
||||
// Course / Heading
|
||||
lcd_puts_P(5, 5*FH, STR_HDG);
|
||||
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 '.'
|
||||
@@ -485,81 +498,68 @@ void menuMainView(uint8_t event)
|
||||
|
||||
// Speed
|
||||
#define SPEED_LINE (6*FH)
|
||||
lcd_puts_P(0, SPEED_LINE, STR_SPD);
|
||||
putsTelemetryValue(lcd_lastPos, SPEED_LINE, frskyHubData.gpsSpeed_bp, UNIT_KTS, LEFT|DBLSIZE); // before '.'
|
||||
lcd_putsLeft( SPEED_LINE, STR_SPDnMAX);
|
||||
putsTelemetryValue(4*FW, SPEED_LINE, frskyHubData.gpsSpeed_bp, UNIT_KTS, LEFT|DBLSIZE); // before '.'
|
||||
// lcd_putcAtt(lcd_lastPos-2, 5*FH, '.', DBLSIZE); // small decimal point
|
||||
// lcd_outdezAtt(lcd_lastPos+FW, 5*FH, frskyHubData.gpsSpeed_ap, LEFT|UNSIGN|DBLSIZE); // after '.'
|
||||
lcd_puts_P(10*FW, SPEED_LINE, PSTR("Max:"));
|
||||
putsTelemetryValue(lcd_lastPos, SPEED_LINE, maxGpsSpeed, UNIT_KTS, LEFT); // before '.'
|
||||
putsTelemetryValue(17*FW, SPEED_LINE, frskyHubData.maxGpsSpeed, UNIT_KTS, LEFT); // before '.'
|
||||
|
||||
// Altitude
|
||||
#define ALTITUDE_LINE (4*FH)
|
||||
lcd_puts_P(0, ALTITUDE_LINE, STR_ALT);
|
||||
putsTelemetryValue(lcd_lastPos, ALTITUDE_LINE, frskyHubData.gpsAltitude_bp, UNIT_METERS, LEFT); // before '.'
|
||||
#define ALTITUDE_LINE (4*FH-1)
|
||||
lcd_putsLeft( ALTITUDE_LINE, STR_ALT);
|
||||
putsTelemetryValue(4*FW, ALTITUDE_LINE, frskyHubData.gpsAltitude_bp, UNIT_METERS, LEFT); // before '.'
|
||||
// lcd_plot(lcd_lastPos, 8*FH-2, 0); // small decimal point
|
||||
// lcd_outdezAtt(lcd_lastPos+2, 7*FH, frskyHubData.gpsAltitude_ap, LEFT|UNSIGN); // after '.'
|
||||
}
|
||||
else if (g_model.frsky.usrProto == PROTO_FRSKY_HUB && view == e_telemetry+2*ALTERNATE_VIEW) {
|
||||
else if (g_model.frsky.usrProto == PROTO_FRSKY_HUB && view == e_telemetry+3*ALTERNATE_VIEW) {
|
||||
// Temperature 1
|
||||
lcd_puts_P(0, 4*FH, STR_TEMP1);
|
||||
putsTelemetryValue(lcd_lastPos, 4*FH, frskyHubData.temperature1, UNIT_DEGREES, DBLSIZE|LEFT);
|
||||
lcd_putsLeft( 4*FH, STR_TEMP1nTEMP2);
|
||||
putsTelemetryValue(4*FW, 4*FH, frskyHubData.temperature1, UNIT_DEGREES, DBLSIZE|LEFT);
|
||||
|
||||
// Temperature 2
|
||||
lcd_puts_P(11*FW, 4*FH, STR_TEMP2);
|
||||
putsTelemetryValue(lcd_lastPos, 4*FH, frskyHubData.temperature2, UNIT_DEGREES, DBLSIZE|LEFT);
|
||||
putsTelemetryValue(15*FW, 4*FH, frskyHubData.temperature2, UNIT_DEGREES, DBLSIZE|LEFT);
|
||||
|
||||
// RPM
|
||||
lcd_puts_P(0, 2*FH, STR_RPM);
|
||||
lcd_outdezNAtt(lcd_lastPos, 1*FH, frskyHubData.rpm, DBLSIZE|LEFT);
|
||||
lcd_putsLeft(2*FH, STR_RPMnFUEL);
|
||||
lcd_outdezNAtt(4*FW, 1*FH, frskyHubData.rpm, DBLSIZE|LEFT);
|
||||
|
||||
// Fuel
|
||||
lcd_puts_P(10*FW, 2*FH, STR_FUEL);
|
||||
lcd_outdezNAtt(lcd_lastPos, 1*FH, frskyHubData.fuelLevel, DBLSIZE|LEFT); // TODO putsTelemetry + UNIT_PERCENT
|
||||
lcd_putc(lcd_lastPos, 2*FH, '%');
|
||||
|
||||
#if 0
|
||||
// Volts
|
||||
lcd_puts_P(10*FW, 7*FH, STR_VOLTS);
|
||||
lcd_outdezNAtt(lcd_lastPos, 6*FH, frskyHubData.volts, DBLSIZE|LEFT); // TODO putsTelemetry?
|
||||
lcd_putc(lcd_lastPos, 7*FH, 'V');
|
||||
#endif
|
||||
putsTelemetryValue(15*FW, 2*FH, frskyHubData.fuelLevel, UNIT_PERCENT, DBLSIZE|LEFT);
|
||||
|
||||
// Altitude (barometric)
|
||||
displayAltitudeLine(0, 6*FH, DBLSIZE);
|
||||
|
||||
// Accelerometer
|
||||
lcd_puts_P(0, 7*FH, STR_ACCEL);
|
||||
// lcd_puts_P(4*FW, 7*FH, PSTR("x:"));
|
||||
lcd_outdezNAtt(4*FW, 7*FH, (int32_t)frskyHubData.accelX * 100 / 256, LEFT|PREC2);
|
||||
#define ACC_LINE (7*FH+1)
|
||||
lcd_putsLeft(ACC_LINE, STR_ACCEL);
|
||||
// lcd_puts(4*FW, 7*FH, PSTR("x:"));
|
||||
lcd_outdezNAtt(4*FW, ACC_LINE, (int32_t)frskyHubData.accelX * 100 / 256, LEFT|PREC2);
|
||||
// lcd_putc(lcd_lastPos, 7*FH, 'g');
|
||||
// lcd_puts_P(11*FW, 7*FH, PSTR("y:"));
|
||||
lcd_outdezNAtt(10*FW, 7*FH, (int32_t)frskyHubData.accelY * 100 / 256, LEFT|PREC2);
|
||||
// lcd_puts(11*FW, 7*FH, PSTR("y:"));
|
||||
lcd_outdezNAtt(10*FW, ACC_LINE, (int32_t)frskyHubData.accelY * 100 / 256, LEFT|PREC2);
|
||||
// lcd_putc(lcd_lastPos, 7*FH, 'g');
|
||||
// lcd_puts_P(18*FW, 7*FH, PSTR("z:"));
|
||||
lcd_outdezNAtt(16*FW, 7*FH, (int32_t)frskyHubData.accelZ * 100 / 256, LEFT|PREC2);
|
||||
// lcd_puts(18*FW, 7*FH, PSTR("z:"));
|
||||
lcd_outdezNAtt(16*FW, ACC_LINE, (int32_t)frskyHubData.accelZ * 100 / 256, LEFT|PREC2);
|
||||
// lcd_putc(lcd_lastPos, 7*FH, 'g');
|
||||
lcd_filled_rect(0, DATE_LINE, DISPLAY_W, 8);
|
||||
lcd_filled_rect(0, ACC_LINE-1, DISPLAY_W, 8);
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
y0 = 5*FH;
|
||||
//lcd_puts_P(2*FW-3, y0, STR_TELE);
|
||||
x0 = 4*FW-3;
|
||||
x0 = 2*FW-3;
|
||||
for (int i=0; i<2; i++) {
|
||||
if (g_model.frsky.channels[i].ratio) {
|
||||
blink = (alarmRaised[i] ? INVERS+BLINK : 0)|LEFT;
|
||||
lcd_puts_P(x0, y0, PSTR("A :"));
|
||||
lcd_putc(x0+FW, y0, '1'+i);
|
||||
putsTelemetryChannel(x0+3*FW, y0, i, staticTelemetry[i], blink);
|
||||
x0 = 13*FW-3;
|
||||
blink = (FRSKY_alarmRaised(i) ? INVERS+BLINK : 0)|LEFT;
|
||||
displayA1A2(x0, y0, i);
|
||||
putsTelemetryChannel(x0+3*FW, y0, i, frskyTelemetry[i].value, blink);
|
||||
x0 = 12*FW-3;
|
||||
}
|
||||
}
|
||||
y0+=FH;
|
||||
//lcd_puts_P(2*FW-3, y0, STR_RSSI);
|
||||
lcd_puts_P(4*FW-3, y0, STR_RX);
|
||||
lcd_outdezAtt(7*FW-3, y0, staticRSSI[0], LEFT);
|
||||
lcd_puts_P(13*FW-3, y0, STR_TX);
|
||||
lcd_outdezAtt(16*FW-3, y0, staticRSSI[1], LEFT);
|
||||
lcd_puts(2*FW-3, y0, STR_RX);
|
||||
lcd_outdezAtt(5*FW-3, y0, frskyRSSI[0].value, LEFT);
|
||||
lcd_puts(12*FW-3, y0, STR_TX);
|
||||
lcd_outdezAtt(15*FW-3, y0, frskyRSSI[1].value, LEFT);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
+114
-106
@@ -96,9 +96,9 @@ uint8_t s_confirmation = 0;
|
||||
|
||||
void displayBox()
|
||||
{
|
||||
lcd_filled_rect(10, 16, 108, 40, WHITE);
|
||||
lcd_filled_rect(10, 16, 108, 40, SOLID, WHITE);
|
||||
lcd_rect(10, 16, 108, 40);
|
||||
lcd_puts_P(16, 3*FH, s_warning);
|
||||
lcd_puts(16, 3*FH, s_warning);
|
||||
// could be a place for a s_warning_info
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ void displayWarning(uint8_t event)
|
||||
{
|
||||
if (s_warning) {
|
||||
displayBox();
|
||||
lcd_puts_P(16, 5*FH, STR_POPUPS+10);
|
||||
lcd_puts(16, 5*FH, STR_EXIT);
|
||||
switch(event) {
|
||||
case EVT_KEY_FIRST(KEY_EXIT):
|
||||
killEvents(event);
|
||||
@@ -130,7 +130,7 @@ void displayConfirmation(uint8_t event)
|
||||
displayBox();
|
||||
if (s_warning_info)
|
||||
lcd_putsnAtt(16, 4*FH, s_warning_info, s_warning_info_len, ZCHAR);
|
||||
lcd_puts_P(16, 5*FH, STR_POPUPS);
|
||||
lcd_puts(16, 5*FH, STR_POPUPS);
|
||||
|
||||
switch(event) {
|
||||
case EVT_KEY_FIRST(KEY_MENU):
|
||||
@@ -176,7 +176,7 @@ void menuProcModelSelect(uint8_t event)
|
||||
if (!check_submenu_simple(_event_, MAX_MODELS-1)) return;
|
||||
int8_t sub = m_posVert;
|
||||
|
||||
lcd_puts_P(9*FW-(LEN_FREE-4)*FW, 0, STR_FREE);
|
||||
lcd_puts(9*FW-(LEN_FREE-4)*FW, 0, STR_FREE);
|
||||
lcd_outdezAtt( 17*FW, 0, EeFsGetFree(),0);
|
||||
|
||||
DisplayScreenIndex(e_ModelSelect, DIM(menuTabModel), INVERS);
|
||||
@@ -327,7 +327,7 @@ void menuProcModelSelect(uint8_t event)
|
||||
|
||||
if (s_copyMode && sub==i+s_pgOfs) {
|
||||
lcd_filled_rect(9, y, DISPLAY_W-1-9, 7);
|
||||
lcd_rect(8, y-1, DISPLAY_W-1-7, 9, s_copyMode == COPY_MODE ? 0xff : 0x55);
|
||||
lcd_rect(8, y-1, DISPLAY_W-1-7, 9, s_copyMode == COPY_MODE ? SOLID : DOTTED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -391,7 +391,7 @@ void menuProcModel(uint8_t event)
|
||||
|
||||
uint8_t subN = 1;
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0*FW, y, STR_NAME);
|
||||
lcd_puts(0*FW, y, STR_NAME);
|
||||
EditName(PARAM_OFS, y, g_model.name, sizeof(g_model.name), event, sub==subN, m_posHorz);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
@@ -433,28 +433,28 @@ void menuProcModel(uint8_t event)
|
||||
}
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P( 0, y, STR_ELIMITS);
|
||||
lcd_putsLeft( y, STR_ELIMITS);
|
||||
menu_lcd_onoff( PARAM_OFS, y, g_model.extendedLimits, sub==subN ) ;
|
||||
if(sub==subN) CHECK_INCDEC_MODELVAR(event,g_model.extendedLimits,0,1);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P( 0, y, STR_ETRIMS);
|
||||
lcd_putsLeft( y, STR_ETRIMS);
|
||||
menu_lcd_onoff( PARAM_OFS, y, g_model.extendedTrims, sub==subN ) ;
|
||||
if(sub==subN) CHECK_INCDEC_MODELVAR(event,g_model.extendedTrims,0,1);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P( 0, y, STR_TRIMINC);
|
||||
lcd_putsLeft( y, STR_TRIMINC);
|
||||
lcd_putsnAtt(PARAM_OFS, y, STR_VTRIMINC+LEN_VTRIMINC*g_model.trimInc, LEN_VTRIMINC, (sub==subN ? INVERS:0));
|
||||
if(sub==subN) CHECK_INCDEC_MODELVAR(event,g_model.trimInc,0,4);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P( 0, y, STR_TTRACE);
|
||||
lcd_putsLeft( y, STR_TTRACE);
|
||||
int8_t idx = 3;
|
||||
if (g_model.thrTraceSrc > NUM_POTS) idx = NUM_STICKS+2+3+NUM_PPM+g_model.thrTraceSrc;
|
||||
else if (g_model.thrTraceSrc > 0) idx = NUM_STICKS+g_model.thrTraceSrc;
|
||||
@@ -464,14 +464,14 @@ void menuProcModel(uint8_t event)
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P( 0, y, STR_TTRIM);
|
||||
lcd_putsLeft( y, STR_TTRIM);
|
||||
menu_lcd_onoff(PARAM_OFS, y, g_model.thrTrim, sub==subN && m_posHorz==0) ;
|
||||
if (sub==subN) CHECK_INCDEC_MODELVAR(event,g_model.thrTrim,0,1);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P( 0, y, STR_BEEPCTR);
|
||||
lcd_putsLeft( y, STR_BEEPCTR);
|
||||
for(uint8_t i=0;i<7;i++) lcd_putsnAtt(PARAM_OFS+i*FW, y, STR_RETA123+LEN_RETA123*i, LEN_RETA123, ((m_posHorz==i) && (sub==subN)) ? BLINK : ((g_model.beepANACenter & (1<<i)) ? INVERS : 0 ) );
|
||||
if(sub==subN){
|
||||
if((event==EVT_KEY_FIRST(KEY_MENU)) || p1valdiff) {
|
||||
@@ -485,12 +485,12 @@ void menuProcModel(uint8_t event)
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P(0, y, STR_PROTO);
|
||||
lcd_putsLeft( y, STR_PROTO);
|
||||
lcd_putsnAtt(PARAM_OFS, y, STR_VPROTOS+LEN_VPROTOS*g_model.protocol, LEN_VPROTOS,
|
||||
(sub==subN && m_posHorz==0 ? (s_editMode>0 ? BLINK : INVERS):0));
|
||||
if (g_model.protocol == PROTO_PPM) {
|
||||
lcd_putsnAtt(PARAM_OFS+4*FW, y, STR_NCHANNELS+LEN_NCHANNELS*(g_model.ppmNCH+2), LEN_NCHANNELS, ((sub==subN && m_posHorz==1) ? ((s_editMode>0) ? BLINK : INVERS) : 0));
|
||||
lcd_puts_P(PARAM_OFS+11*FW, y, PSTR("u"));
|
||||
lcd_puts(PARAM_OFS+11*FW, y, PSTR("u"));
|
||||
lcd_outdezAtt(PARAM_OFS+11*FW, y, (g_model.ppmDelay*50)+300, ((sub==subN && m_posHorz==2) ? ((s_editMode>0) ? BLINK : INVERS) : 0));
|
||||
}
|
||||
#ifdef DSM2
|
||||
@@ -511,7 +511,7 @@ void menuProcModel(uint8_t event)
|
||||
if (sub==subN && (s_editMode>0 || p1valdiff || (g_model.protocol!=0 && g_model.protocol!=PROTO_DSM2))) { // TODO avoid DSM2 when not defined
|
||||
switch (m_posHorz) {
|
||||
case 0:
|
||||
CHECK_INCDEC_MODELVAR(event,g_model.protocol,0,PROT_MAX);
|
||||
CHECK_INCDEC_MODELVAR(event,g_model.protocol,0,PROTO_MAX-1);
|
||||
break;
|
||||
case 1:
|
||||
#ifdef DSM2
|
||||
@@ -531,8 +531,8 @@ void menuProcModel(uint8_t event)
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
if (g_model.protocol == PROTO_PPM) {
|
||||
lcd_puts_P(0, y, STR_PPMFRAME);
|
||||
lcd_puts_P(PARAM_OFS+3*FW, y, STR_MS);
|
||||
lcd_putsLeft( y, STR_PPMFRAME);
|
||||
lcd_puts(PARAM_OFS+3*FW, y, STR_MS);
|
||||
lcd_outdezAtt(PARAM_OFS, y, (int16_t)g_model.ppmFrameLength*5 + 225, ((sub==subN && m_posHorz==0) ? (s_editMode>0 ? BLINK : INVERS) : 0) | PREC1|LEFT);
|
||||
lcd_putsnAtt(PARAM_OFS+6*FW, y, STR_POSNEG+LEN_POSNEG*g_model.pulsePol, LEN_POSNEG, (sub==subN && m_posHorz==1) ? INVERS : 0);
|
||||
if(sub==subN && (s_editMode>0 || p1valdiff)) {
|
||||
@@ -549,7 +549,7 @@ void menuProcModel(uint8_t event)
|
||||
// TODO port PPM16 ppmDelay from er9x
|
||||
#if defined(DSM2) || defined(PXX)
|
||||
else if (g_model.protocol == PROTO_DSM2 || g_model.protocol == PROTO_PXX) {
|
||||
lcd_puts_P(0, y, STR_RXNUM);
|
||||
lcd_putsLeft( y, STR_RXNUM);
|
||||
lcd_outdezNAtt(PARAM_OFS-3*FW, y, g_model.modelId, ((sub==subN && m_posHorz==0) ? (s_editMode>0 ? BLINK : INVERS) : 0) | LEADING0|LEFT, 2);
|
||||
|
||||
if (sub==subN && (s_editMode>0 || p1valdiff)) {
|
||||
@@ -594,16 +594,16 @@ void menuProcPhaseOne(uint8_t event)
|
||||
uint8_t attr = sub==k ? INVERS : 0;
|
||||
switch(i) {
|
||||
case 0:
|
||||
lcd_puts_P(0, y, STR_NAME);
|
||||
lcd_putsLeft( y, STR_NAME);
|
||||
EditName(10*FW, y, phase->name, sizeof(phase->name), event, attr, m_posHorz);
|
||||
break;
|
||||
case 1:
|
||||
lcd_puts_P(0, y, STR_SWITCH);
|
||||
lcd_putsLeft( y, STR_SWITCH);
|
||||
putsSwitches(10*FW, y, phase->swtch, attr);
|
||||
if(attr) CHECK_INCDEC_MODELVAR(event, phase->swtch, -MAX_DRSWITCH, MAX_DRSWITCH);
|
||||
break;
|
||||
case 2:
|
||||
lcd_puts_P(0, y, STR_TRIMS);
|
||||
lcd_putsLeft( y, STR_TRIMS);
|
||||
for (uint8_t t=0; t<NUM_STICKS; t++) {
|
||||
int16_t v = getTrimValue(s_currIdx, t);
|
||||
if (v > TRIM_EXTENDED_MAX) {
|
||||
@@ -625,12 +625,12 @@ void menuProcPhaseOne(uint8_t event)
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
lcd_puts_P(0, y, STR_FADEIN); // TODO lcd_puts_left
|
||||
lcd_putsLeft( y, STR_FADEIN);
|
||||
lcd_outdezAtt(10*FW, y, phase->fadeIn, attr|LEFT);
|
||||
if(attr) CHECK_INCDEC_MODELVAR(event, phase->fadeIn, 0, 15);
|
||||
break;
|
||||
case 4:
|
||||
lcd_puts_P(0, y, STR_FADEOUT);
|
||||
lcd_putsLeft( y, STR_FADEOUT);
|
||||
lcd_outdezAtt(10*FW, y, phase->fadeOut, attr|LEFT);
|
||||
if(attr) CHECK_INCDEC_MODELVAR(event, phase->fadeOut, 0, 15);
|
||||
break;
|
||||
@@ -666,7 +666,7 @@ void menuProcPhasesAll(uint8_t event)
|
||||
putsFlightPhase(0, y, i+1, att);
|
||||
lcd_putsnAtt(4*FW, y, p->name, 6, ZCHAR);
|
||||
if (i == 0) {
|
||||
lcd_puts_P(11*FW+FW/2, y, STR_DEFAULT);
|
||||
lcd_puts(11*FW+FW/2, y, STR_DEFAULT);
|
||||
}
|
||||
else {
|
||||
putsSwitches(11*FW+FW/2, y, p->swtch, 0);
|
||||
@@ -709,42 +709,42 @@ void menuProcHeli(uint8_t event)
|
||||
|
||||
uint8_t subN = 1;
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P( 0, y, STR_SWASHTYPE);
|
||||
lcd_putsLeft( y, STR_SWASHTYPE);
|
||||
lcd_putsnAtt( 14*FW, y, STR_VSWASHTYPE+LEN_VSWASHTYPE*g_model.swashR.type, LEN_VSWASHTYPE, (sub==subN ? INVERS:0));
|
||||
if(sub==subN) CHECK_INCDEC_MODELVAR(event,g_model.swashR.type,0,SWASH_TYPE_NUM);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P( 0, y, STR_COLLECTIVE);
|
||||
lcd_putsLeft( y, STR_COLLECTIVE);
|
||||
putsChnRaw(14*FW, y, g_model.swashR.collectiveSource, sub==subN ? INVERS : 0);
|
||||
if(sub==subN) CHECK_INCDEC_MODELVAR(event, g_model.swashR.collectiveSource, 0, NUM_XCHNRAW);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P( 0, y, STR_SWASHRING);
|
||||
lcd_putsLeft( y, STR_SWASHRING);
|
||||
lcd_outdezAtt(14*FW, y, g_model.swashR.value, LEFT|(sub==subN ? INVERS : 0));
|
||||
if(sub==subN) CHECK_INCDEC_MODELVAR(event, g_model.swashR.value, 0, 100);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P( 0, y, STR_ELEDIRECTION);
|
||||
lcd_putsLeft( y, STR_ELEDIRECTION);
|
||||
menu_lcd_HYPHINV( 14*FW, y, g_model.swashR.invertELE, sub==subN ) ;
|
||||
if(sub==subN) CHECK_INCDEC_MODELVAR(event, g_model.swashR.invertELE, 0, 1);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P( 0, y, STR_AILDIRECTION);
|
||||
lcd_putsLeft( y, STR_AILDIRECTION);
|
||||
menu_lcd_HYPHINV( 14*FW, y, g_model.swashR.invertAIL, sub==subN ) ;
|
||||
if(sub==subN) CHECK_INCDEC_MODELVAR(event, g_model.swashR.invertAIL, 0, 1);
|
||||
if((y+=FH)>7*FH) return;
|
||||
}subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
lcd_puts_P( 0, y, STR_COLDIRECTION);
|
||||
lcd_putsLeft( y, STR_COLDIRECTION);
|
||||
menu_lcd_HYPHINV( 14*FW, y, g_model.swashR.invertCOL, sub==subN ) ;
|
||||
if(sub==subN) CHECK_INCDEC_MODELVAR(event, g_model.swashR.invertCOL, 0, 1);
|
||||
if((y+=FH)>7*FH) return;
|
||||
@@ -862,7 +862,7 @@ void menuProcCurveOne(uint8_t event)
|
||||
lcd_outdezAtt(x, y, crv[i], attr);
|
||||
}
|
||||
|
||||
lcd_puts_P(0*FW, 7*FH, STR_MODE);
|
||||
lcd_puts(0*FW, 7*FH, STR_MODE);
|
||||
lcd_putsnAtt(5*FW-2, 7*FH, STR_CURVMODES+LEN_CURVMODES*(s_editMode<=0)*m_posHorz, LEN_CURVMODES, s_editMode>0 || autoThrStep ? 0 : INVERS);
|
||||
|
||||
if (s_editMode>0 || autoThrStep) {
|
||||
@@ -1146,29 +1146,29 @@ void menuProcMixOne(uint8_t event)
|
||||
uint8_t attr = sub==i ? INVERS : 0;
|
||||
switch(i) {
|
||||
case 0:
|
||||
lcd_puts_P( 2*FW,y,STR_SOURCE);
|
||||
lcd_puts( 2*FW,y,STR_SOURCE);
|
||||
putsChnRaw( FW*10,y,md2->srcRaw,attr);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->srcRaw, 1,NUM_XCHNRAW);
|
||||
break;
|
||||
case 1:
|
||||
lcd_puts_P( 2*FW,y,STR_WEIGHT);
|
||||
lcd_puts( 2*FW,y,STR_WEIGHT);
|
||||
lcd_outdezAtt(FW*10,y,md2->weight,attr|LEFT);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->weight, -125,125);
|
||||
break;
|
||||
case 2:
|
||||
lcd_puts_P( 2*FW,y,STR_OFFSET);
|
||||
lcd_puts( 2*FW,y,STR_OFFSET);
|
||||
lcd_outdezAtt(FW*10,y,md2->sOffset,attr|LEFT);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->sOffset, -125,125);
|
||||
break;
|
||||
case 3:
|
||||
// TODO hidden when src is not a STICK as it has no sense
|
||||
lcd_puts_P(2*FW, y, STR_TRIM);
|
||||
lcd_puts(2*FW, y, STR_TRIM);
|
||||
// lcd_putsnAtt(FW*10, y, STR_OFFON+LEN_OFFON*(1-md2->carryTrim), LEN_OFFON, attr);
|
||||
lcd_putsnAtt(FW*10, y, STR_VMIXTRIMS+LEN_VMIXTRIMS*md2->carryTrim, LEN_VMIXTRIMS, attr); // TODO perhaps could be optimized by reusing STR_OFFON
|
||||
if (attr) CHECK_INCDEC_MODELVAR( event, md2->carryTrim, 0, 2);
|
||||
break;
|
||||
case 4:
|
||||
lcd_puts_P(2*FW, y, STR_CURVES);
|
||||
lcd_puts(2*FW, y, STR_CURVES);
|
||||
putsCurve(FW*10, y, md2->curve, attr);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->curve, 0,MAX_CURVE5+MAX_CURVE9+7-1);
|
||||
if(attr && md2->curve>=CURVE_BASE && event==EVT_KEY_FIRST(KEY_MENU)){
|
||||
@@ -1177,17 +1177,17 @@ void menuProcMixOne(uint8_t event)
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
lcd_puts_P( 2*FW,y,STR_SWITCH);
|
||||
lcd_puts( 2*FW,y,STR_SWITCH);
|
||||
putsSwitches(10*FW, y,md2->swtch,attr);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->swtch, -MAX_SWITCH, MAX_SWITCH);
|
||||
break;
|
||||
case 6:
|
||||
lcd_puts_P( 2*FW,y,STR_FPHASE);
|
||||
lcd_puts( 2*FW,y,STR_FPHASE);
|
||||
putsFlightPhase(10*FW, y, md2->phase, attr);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->phase, -MAX_PHASES, MAX_PHASES);
|
||||
break;
|
||||
case 7:
|
||||
lcd_puts_P( 2*FW,y,STR_WARNING);
|
||||
lcd_puts( 2*FW,y,STR_WARNING);
|
||||
if(md2->mixWarn)
|
||||
lcd_outdezAtt(FW*10,y,md2->mixWarn,attr|LEFT);
|
||||
else
|
||||
@@ -1195,27 +1195,27 @@ void menuProcMixOne(uint8_t event)
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->mixWarn, 0,3);
|
||||
break;
|
||||
case 8:
|
||||
lcd_puts_P( 2*FW,y,STR_MULTPX);
|
||||
lcd_puts( 2*FW,y,STR_MULTPX);
|
||||
lcd_putsnAtt(10*FW, y, STR_VMLTPX+LEN_VMLTPX*md2->mltpx, LEN_VMLTPX, attr);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->mltpx, 0, 2);
|
||||
break;
|
||||
case 9:
|
||||
lcd_puts_P( 2*FW,y,STR_DELAYDOWN);
|
||||
lcd_puts( 2*FW,y,STR_DELAYDOWN);
|
||||
lcd_outdezAtt(FW*16,y,md2->delayDown,attr);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->delayDown, 0,15);
|
||||
break;
|
||||
case 10:
|
||||
lcd_puts_P( 2*FW,y,STR_DELAYUP);
|
||||
lcd_puts( 2*FW,y,STR_DELAYUP);
|
||||
lcd_outdezAtt(FW*16,y,md2->delayUp,attr);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->delayUp, 0,15);
|
||||
break;
|
||||
case 11:
|
||||
lcd_puts_P( 2*FW,y,STR_SLOWDOWN);
|
||||
lcd_puts( 2*FW,y,STR_SLOWDOWN);
|
||||
lcd_outdezAtt(FW*16,y,md2->speedDown,attr);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->speedDown, 0,15);
|
||||
break;
|
||||
case 12:
|
||||
lcd_puts_P( 2*FW,y,STR_SLOWUP);
|
||||
lcd_puts( 2*FW,y,STR_SLOWUP);
|
||||
lcd_outdezAtt(FW*16,y,md2->speedUp,attr);
|
||||
if(attr) CHECK_INCDEC_MODELVAR( event, md2->speedUp, 0,15);
|
||||
break;
|
||||
@@ -1254,7 +1254,7 @@ inline void displayMixerLine(uint8_t row, uint8_t mix, uint8_t ch, uint8_t idx,
|
||||
if (s_copyMode) {
|
||||
if ((s_copyMode==COPY_MODE || s_copyTgtOfs == 0) && s_copySrcCh == ch && mix == (s_copySrcIdx + (s_copyTgtOfs<0))) {
|
||||
/* draw a border around the raw on selection mode (copy/move) */
|
||||
lcd_rect(22, y-1, DISPLAY_W-1-21, 9, s_copyMode == COPY_MODE ? 0xff : 0x55);
|
||||
lcd_rect(22, y-1, DISPLAY_W-1-21, 9, s_copyMode == COPY_MODE ? SOLID : DOTTED);
|
||||
}
|
||||
|
||||
if (row == cur) {
|
||||
@@ -1282,7 +1282,7 @@ inline void displayExpoLine(uint8_t row, uint8_t expo, uint8_t ch, uint8_t idx,
|
||||
if (s_copyMode) {
|
||||
if ((s_copyMode==COPY_MODE || s_copyTgtOfs == 0) && s_copySrcCh == ch && expo == (s_copySrcIdx + (s_copyTgtOfs<0))) {
|
||||
/* draw a border around the raw on selection mode (copy/move) */
|
||||
lcd_rect(18, y-1, DISPLAY_W-18, 9, s_copyMode == COPY_MODE ? 0xff : 0x55);
|
||||
lcd_rect(18, y-1, DISPLAY_W-18, 9, s_copyMode == COPY_MODE ? SOLID : DOTTED);
|
||||
}
|
||||
if (row == cur) {
|
||||
/* invert the raw when it's the current one */
|
||||
@@ -1304,7 +1304,7 @@ void menuProcExpoMix(uint8_t expo, uint8_t _event_)
|
||||
|
||||
TITLEP(expo ? STR_DREXPO : STR_MIXER);
|
||||
lcd_outdezAtt(lcd_lastPos+2*FW+FW/2, 0, getExpoMixCount(expo));
|
||||
lcd_puts_P(lcd_lastPos, 0, expo ? PSTR("/14") : PSTR("/32"));
|
||||
lcd_puts(lcd_lastPos, 0, expo ? PSTR("/14") : PSTR("/32"));
|
||||
SIMPLE_MENU_NOTITLE(menuTabModel, expo ? e_ExposAll : e_MixAll, s_maxLines);
|
||||
|
||||
uint8_t sub = m_posVert;
|
||||
@@ -1428,7 +1428,7 @@ void menuProcExpoMix(uint8_t expo, uint8_t _event_)
|
||||
if (s_copyMode) {
|
||||
if (s_copyMode == MOVE_MODE && s_pgOfs < cur && cur-s_pgOfs < 8 && s_copySrcCh == ch && s_copyTgtOfs != 0 && i == (s_copySrcIdx + (s_copyTgtOfs<0))) {
|
||||
uint8_t y = (cur-s_pgOfs)*FH;
|
||||
lcd_rect(22, y-1, DISPLAY_W-1-21, 9, 0x55);
|
||||
lcd_rect(22, y-1, DISPLAY_W-1-21, 9, DOTTED);
|
||||
cur++;
|
||||
}
|
||||
if (s_currIdx == i) {
|
||||
@@ -1449,7 +1449,7 @@ void menuProcExpoMix(uint8_t expo, uint8_t _event_)
|
||||
} while (expo ? (i<MAX_EXPOS && ed->chn+1 == ch && ed->mode) : (i<MAX_MIXERS && md->destCh == ch));
|
||||
if (s_copyMode == MOVE_MODE && s_pgOfs < cur && cur-s_pgOfs < 8 && s_copySrcCh == ch && i == (s_copySrcIdx + (s_copyTgtOfs<0))) {
|
||||
uint8_t y = (cur-s_pgOfs)*FH;
|
||||
lcd_rect(22, y-1, DISPLAY_W-1-21, 9, 0x55);
|
||||
lcd_rect(22, y-1, DISPLAY_W-1-21, 9, DOTTED);
|
||||
cur++;
|
||||
}
|
||||
}
|
||||
@@ -1469,7 +1469,7 @@ void menuProcExpoMix(uint8_t expo, uint8_t _event_)
|
||||
putsChn(0, (cur-s_pgOfs)*FH, ch, attr); // show CHx
|
||||
if (s_copyMode == MOVE_MODE && s_copySrcCh == ch) {
|
||||
uint8_t y = (cur-s_pgOfs)*FH;
|
||||
lcd_rect(22, y-1, DISPLAY_W-1-21, 9, 0x55);
|
||||
lcd_rect(22, y-1, DISPLAY_W-1-21, 9, DOTTED);
|
||||
}
|
||||
}
|
||||
cur++;
|
||||
@@ -1622,7 +1622,7 @@ void menuProcCustomSwitches(uint8_t event)
|
||||
uint8_t k = 0;
|
||||
int8_t sub = m_posVert - 1;
|
||||
|
||||
for(uint8_t i=0; i<7; i++){
|
||||
for(uint8_t i=0; i<7; i++) {
|
||||
y=(i+1)*FH;
|
||||
k=i+s_pgOfs;
|
||||
if(k==NUM_CSW) break;
|
||||
@@ -1630,34 +1630,20 @@ void menuProcCustomSwitches(uint8_t event)
|
||||
CustomSwData &cs = g_model.customSw[k];
|
||||
|
||||
//write SW names here
|
||||
lcd_puts_P(0*FW, y, STR_SW);
|
||||
lcd_puts(0*FW, y, STR_SW);
|
||||
lcd_putc(2*FW, y, k + (k>8 ? 'A'-9: '1'));
|
||||
lcd_putsnAtt(4*FW - 1, y, STR_VCSWFUNC+LEN_VCSWFUNC*cs.func, LEN_VCSWFUNC, m_posHorz==0 ? attr : 0);
|
||||
|
||||
uint8_t cstate = CS_STATE(cs.func);
|
||||
int8_t v1_min=0, v1_max=NUM_XCHNCSW, v2_min=0, v2_max=NUM_XCHNCSW;
|
||||
|
||||
if(cstate == CS_VOFS)
|
||||
if (cstate == CS_VOFS)
|
||||
{
|
||||
putsChnRaw(12*FW, y, cs.v1, m_posHorz==1 ? attr : 0);
|
||||
putsChnRaw(12*FW-2, y, cs.v1, m_posHorz==1 ? attr : 0);
|
||||
|
||||
#if defined(FRSKY)
|
||||
#if defined(FRSKY_HUB)
|
||||
if (cs.v1 > NUM_XCHNCSW-NUM_TELEMETRY+3) {
|
||||
lcd_outdezAtt(20*FW, y, (128+cs.v2) * 50, m_posHorz==2 ? attr : 0);
|
||||
v2_min = -128; v2_max = 127;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
if (cs.v1 > NUM_XCHNCSW-NUM_TELEMETRY+2) {
|
||||
lcd_outdezAtt(20*FW, y, (128+cs.v2) * 4, m_posHorz==2 ? attr : 0);
|
||||
v2_min = -128; v2_max = 127;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (cs.v1 > NUM_XCHNCSW-NUM_TELEMETRY) {
|
||||
putsTelemetryChannel(20*FW, y, cs.v1+NUM_TELEMETRY-NUM_XCHNCSW-1, 128+cs.v2, m_posHorz==2 ? attr : 0);
|
||||
if (cs.v1 > NUM_XCHNCSW-NUM_TELEMETRY-MAX_TIMERS+2) {
|
||||
putsTelemetryChannel(20*FW, y, cs.v1 - (NUM_XCHNCSW-NUM_TELEMETRY-MAX_TIMERS+3), 128+cs.v2, m_posHorz==2 ? attr : 0);
|
||||
v2_min = -128; v2_max = 127;
|
||||
}
|
||||
else
|
||||
@@ -1671,16 +1657,16 @@ void menuProcCustomSwitches(uint8_t event)
|
||||
v2_min = -125; v2_max = 125;
|
||||
}
|
||||
}
|
||||
else if(cstate == CS_VBOOL)
|
||||
else if (cstate == CS_VBOOL)
|
||||
{
|
||||
putsSwitches(13*FW, y, cs.v1, m_posHorz==1 ? attr : 0);
|
||||
putsSwitches(12*FW-2, y, cs.v1, m_posHorz==1 ? attr : 0);
|
||||
putsSwitches(17*FW, y, cs.v2, m_posHorz==2 ? attr : 0);
|
||||
v1_min = -MAX_SWITCH; v1_max = MAX_SWITCH;
|
||||
v2_min = -MAX_SWITCH; v2_max = MAX_SWITCH;
|
||||
}
|
||||
else // cstate == CS_COMP
|
||||
{
|
||||
putsChnRaw(12*FW, y, cs.v1, m_posHorz==1 ? attr : 0);
|
||||
putsChnRaw(12*FW-2, y, cs.v1, m_posHorz==1 ? attr : 0);
|
||||
putsChnRaw(17*FW, y, cs.v2, m_posHorz==2 ? attr : 0);
|
||||
}
|
||||
|
||||
@@ -1697,14 +1683,16 @@ void menuProcCustomSwitches(uint8_t event)
|
||||
{
|
||||
int8_t v1 = cs.v1;
|
||||
CHECK_INCDEC_MODELVAR(event, cs.v1, v1_min, v1_max);
|
||||
if (cs.v1 == CHOUT_BASE+NUM_CHNOUT+1 && v1 < cs.v1) cs.v2 = -98;
|
||||
if (cstate == CS_VOFS) {
|
||||
if (cs.v1 == CHOUT_BASE+NUM_CHNOUT+1 && v1 < cs.v1) cs.v2 = -98;
|
||||
#ifdef FRSKY
|
||||
if (cs.v1 == CHOUT_BASE+NUM_CHNOUT+3 && v1 < cs.v1) cs.v2 = -128;
|
||||
if (cs.v1 == CHOUT_BASE+NUM_CHNOUT+3 && v1 < cs.v1) cs.v2 = -128;
|
||||
#endif
|
||||
if (cs.v1 == CHOUT_BASE+NUM_CHNOUT && v1 > cs.v1) cs.v2 = 0;
|
||||
if (cs.v1 == CHOUT_BASE+NUM_CHNOUT && v1 > cs.v1) cs.v2 = 0;
|
||||
#ifdef FRSKY
|
||||
if (cs.v1 == CHOUT_BASE+NUM_CHNOUT+2 && v1 > cs.v1) cs.v2 = -98;
|
||||
if (cs.v1 == CHOUT_BASE+NUM_CHNOUT+2 && v1 > cs.v1) cs.v2 = -98;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
@@ -1838,12 +1826,13 @@ void menuProcSafetySwitches(uint8_t event)
|
||||
#endif
|
||||
|
||||
#ifdef FRSKY
|
||||
#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, 12, {0, -1, 1, 0, 2, 2, -1, 1, 0, 2, 2, 0});
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 16, {0, -1, 1, 0, 2, 2, -1, 1, 0, 2, 2, 0, 2, 2, 2, 2});
|
||||
#else
|
||||
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 11, {0, -1, 1, 0, 2, 2, -1, 1, 0, 2, 2});
|
||||
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, 15, {0, -1, 1, 0, 2, 2, -1, 1, 0, 2, 2, 2, 2, 2, 2});
|
||||
#endif
|
||||
|
||||
int8_t sub = m_posVert;
|
||||
@@ -1866,16 +1855,16 @@ void menuProcTelemetry(uint8_t event)
|
||||
for (int i=0; i<2; i++) {
|
||||
if(s_pgOfs<subN) {
|
||||
y=(subN-s_pgOfs)*FH;
|
||||
lcd_puts_P(0, y, STR_ACHANNEL);
|
||||
lcd_putsLeft( y, STR_ACHANNEL);
|
||||
lcd_outdezAtt(2*FW, y, 1+i, 0);
|
||||
}
|
||||
subN++;
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
y=(subN-s_pgOfs)*FH;
|
||||
lcd_puts_P(4, y, STR_RANGE);
|
||||
putsTelemetryValue(8*FW, y, g_model.frsky.channels[i].ratio, g_model.frsky.channels[i].type, (sub==subN && m_posHorz==0 ? blink:0)|NO_UNIT|LEFT);
|
||||
lcd_putsnAtt(lcd_lastPos, y, STR_VTELEMUNIT+LEN_VTELEMUNIT*g_model.frsky.channels[i].type, LEN_VTELEMUNIT, (sub==subN && m_posHorz==1 ? blink:0));
|
||||
lcd_puts(4, y, STR_RANGE);
|
||||
putsTelemetryChannel(TELEM_COL2, y, i, 255-g_model.frsky.channels[i].offset, (sub==subN && m_posHorz==0 ? blink:0)|NO_UNIT|LEFT);
|
||||
lcd_putsnAtt(lcd_lastPos+1, y, STR_VTELEMUNIT+LEN_VTELEMUNIT*g_model.frsky.channels[i].type, LEN_VTELEMUNIT, (sub==subN && m_posHorz==1 ? blink:0));
|
||||
if (sub==subN && (s_editMode>0 || p1valdiff)) {
|
||||
if (m_posHorz == 0)
|
||||
g_model.frsky.channels[i].ratio = checkIncDec(event, g_model.frsky.channels[i].ratio, 0, 255, EE_MODEL);
|
||||
@@ -1887,31 +1876,19 @@ void menuProcTelemetry(uint8_t event)
|
||||
|
||||
if(s_pgOfs<subN) {
|
||||
y=(subN-s_pgOfs)*FH;
|
||||
lcd_puts_P(4, y, STR_OFFSET);
|
||||
putsTelemetryChannel(8*FW, y, i, 0, (sub==subN ? blink:0)|LEFT);
|
||||
if(sub==subN) CHECK_INCDEC_MODELVAR(event, g_model.frsky.channels[i].offset, -127, 127);
|
||||
lcd_puts(4, y, STR_OFFSET);
|
||||
putsTelemetryChannel(TELEM_COL2, y, i, 0, (sub==subN ? blink:0)|LEFT);
|
||||
if(sub==subN) CHECK_INCDEC_MODELVAR(event, g_model.frsky.channels[i].offset, -128, 127);
|
||||
}
|
||||
subN++;
|
||||
|
||||
#if 0
|
||||
if(s_pgOfs<subN) {
|
||||
y=(subN-s_pgOfs)*FH;
|
||||
lcd_puts_P(4, y, STR_BAR);
|
||||
putsTelemetryChannel(8*FW, y, i, g_model.frsky.channels[i].barMin, (sub==subN && m_posHorz==0 ? blink:0)|LEFT);
|
||||
putsTelemetryChannel(13*FW, y, i, g_model.frsky.channels[i].barMax, (sub==subN && m_posHorz==1 ? blink:0)|LEFT);
|
||||
if(sub==subN && m_posHorz==0 && (s_editMode>0 || p1valdiff)) g_model.frsky.channels[i].barMin = checkIncDec(event, g_model.frsky.channels[i].barMin, 0, 255, EE_MODEL);
|
||||
if(sub==subN && m_posHorz==1 && (s_editMode>0 || p1valdiff)) g_model.frsky.channels[i].barMax = checkIncDec(event, g_model.frsky.channels[i].barMax, 0, 255, EE_MODEL);
|
||||
}
|
||||
subN++;
|
||||
#endif
|
||||
|
||||
for (int j=0; j<2; j++) {
|
||||
if(s_pgOfs<subN) {
|
||||
y=(subN-s_pgOfs)*FH;
|
||||
lcd_puts_P(4, y, STR_ALARM);
|
||||
lcd_putsnAtt(8*FW, y, STR_VALARM+LEN_VALARM*ALARM_LEVEL(i, j), LEN_VALARM, (sub==subN && m_posHorz==0 ? blink:0));
|
||||
lcd_putsnAtt(12*FW, y, STR_VALARMFN+LEN_VALARMFN*ALARM_GREATER(i, j), LEN_VALARMFN,(sub==subN && m_posHorz==1 ? blink:0));
|
||||
putsTelemetryChannel(14*FW, y, i, g_model.frsky.channels[i].alarms_value[j], (sub==subN && m_posHorz==2 ? blink:0) | LEFT);
|
||||
lcd_puts(4, y, STR_ALARM);
|
||||
lcd_putsnAtt(TELEM_COL2, y, STR_VALARM+LEN_VALARM*ALARM_LEVEL(i, j), LEN_VALARM, (sub==subN && m_posHorz==0 ? blink:0));
|
||||
lcd_putsnAtt(TELEM_COL2+4*FW, y, STR_VALARMFN+LEN_VALARMFN*ALARM_GREATER(i, j), LEN_VALARMFN,(sub==subN && m_posHorz==1 ? blink:0));
|
||||
putsTelemetryChannel(TELEM_COL2+6*FW, y, i, g_model.frsky.channels[i].alarms_value[j], (sub==subN && m_posHorz==2 ? blink:0) | LEFT);
|
||||
|
||||
if(sub==subN && (s_editMode>0 || p1valdiff)) {
|
||||
switch (m_posHorz) {
|
||||
@@ -1938,17 +1915,48 @@ void menuProcTelemetry(uint8_t event)
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
if(s_pgOfs<subN) {
|
||||
y = (subN-s_pgOfs)*FH;
|
||||
lcd_puts_P(0, y, STR_USRPROTO);
|
||||
lcd_putsLeft(y, STR_USRPROTO);
|
||||
#if defined(WS_HOW_HIGH)
|
||||
#define USR_PROTO_MAX 2
|
||||
#else
|
||||
#define USR_PROTO_MAX 1
|
||||
#endif
|
||||
lcd_putsnAtt(10*FW, y, STR_VTELPROTO+LEN_VTELPROTO*g_model.frsky.usrProto, LEN_VTELPROTO, sub==subN ? INVERS:0);
|
||||
lcd_putsnAtt(TELEM_COL2, y, STR_VTELPROTO+LEN_VTELPROTO*g_model.frsky.usrProto, LEN_VTELPROTO, sub==subN ? INVERS:0);
|
||||
if (sub==subN)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.frsky.usrProto, 0, USR_PROTO_MAX);
|
||||
}
|
||||
subN++;
|
||||
#endif
|
||||
|
||||
// Bars setup
|
||||
for (int j=0; j<4; j++) {
|
||||
if (s_pgOfs<subN) {
|
||||
y = (subN-s_pgOfs)*FH;
|
||||
putsStrIdx(0*FW, y, PSTR("Bar"), j+1); // TODO lang
|
||||
lcd_putsnAtt(5*FW, y, STR_VTELEMBARS+LEN_VTELEMBARS*g_model.frsky.bars[j].source, LEN_VTELEMBARS, sub==subN && m_posHorz==0 ? blink : 0);
|
||||
if (g_model.frsky.bars[j].source) {
|
||||
putsTelemetryChannel(TELEM_COL2, y, g_model.frsky.bars[j].source-1, g_model.frsky.bars[j].barMin*4, (sub==subN && m_posHorz==1 ? blink : 0) | LEFT);
|
||||
putsTelemetryChannel(16*FW-3, y, g_model.frsky.bars[j].source-1, (63-g_model.frsky.bars[j].barMax)*4, (sub==subN && m_posHorz==2 ? blink : 0) | LEFT);
|
||||
}
|
||||
else {
|
||||
if (sub == subN) m_posHorz = 0;
|
||||
}
|
||||
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
|
||||
break;
|
||||
case 1:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.frsky.bars[j].barMin, 0, 63-g_model.frsky.bars[j].barMax);
|
||||
break;
|
||||
case 2:
|
||||
g_model.frsky.bars[j].barMax = 63 - checkIncDec(event, 63 - g_model.frsky.bars[j].barMax, g_model.frsky.bars[j].barMin, 63, EE_MODEL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
subN++;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
+30
-9
@@ -36,7 +36,7 @@
|
||||
#define WARN_MEM (!(g_eeGeneral.warnOpts & WARN_MEM_BIT))
|
||||
#define BEEP_VAL ( (g_eeGeneral.warnOpts & WARN_BVAL_BIT) >>3 )
|
||||
|
||||
#define EEPROM_VER 203
|
||||
#define EEPROM_VER 204
|
||||
|
||||
#ifndef PACK
|
||||
#define PACK( __Declaration__ ) __Declaration__ __attribute__((__packed__))
|
||||
@@ -179,12 +179,14 @@ PACK(typedef struct t_FuncSwData { // Function Switches data
|
||||
|
||||
enum TelemetryUnit {
|
||||
UNIT_VOLTS,
|
||||
UNIT_AMPS,
|
||||
UNIT_RAW,
|
||||
UNIT_KTS,
|
||||
UNIT_KMH,
|
||||
UNIT_MPH,
|
||||
UNIT_METERS,
|
||||
UNIT_DEGREES,
|
||||
UNIT_PERCENT,
|
||||
UNIT_MAX
|
||||
};
|
||||
|
||||
@@ -195,16 +197,40 @@ PACK(typedef struct t_FrSkyChannelData {
|
||||
uint8_t alarms_level:4;
|
||||
uint8_t alarms_greater:2; // 0=LT(<), 1=GT(>)
|
||||
uint8_t multiplier:2; // 0=no multiplier, 1=*2 multiplier
|
||||
uint8_t barMin:4; // minimum for bar display
|
||||
uint8_t barMax:4; // ditto for max display (would usually = ratio)
|
||||
int8_t offset;
|
||||
}) FrSkyChannelData;
|
||||
|
||||
enum BarSource {
|
||||
BAR_NONE,
|
||||
BAR_A1,
|
||||
BAR_A2,
|
||||
BAR_ALT,
|
||||
#if defined(FRSKY_HUB)
|
||||
BAR_RPM,
|
||||
BAR_FUEL,
|
||||
BAR_T1,
|
||||
BAR_T2,
|
||||
BAR_SPEED,
|
||||
BAR_CELL,
|
||||
#endif
|
||||
BAR_MAX
|
||||
};
|
||||
|
||||
PACK(typedef struct t_FrSkyBarData {
|
||||
uint16_t source:4;
|
||||
uint16_t barMin:6; // minimum for bar display
|
||||
uint16_t barMax:6; // ditto for max display (would usually = ratio)
|
||||
}) FrSkyBarData;
|
||||
|
||||
#define PROTO_NONE 0
|
||||
#define PROTO_FRSKY_HUB 1
|
||||
#define PROTO_WS_HOW_HIGH 2
|
||||
PACK(typedef struct t_FrSkyData {
|
||||
FrSkyChannelData channels[2];
|
||||
uint8_t usrProto; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh
|
||||
uint16_t usrProto:3; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh
|
||||
uint16_t imperial:1;
|
||||
uint16_t spare:4;
|
||||
FrSkyBarData bars[4];
|
||||
}) FrSkyData;
|
||||
|
||||
PACK(typedef struct t_SwashRingData { // Swash Ring data
|
||||
@@ -214,11 +240,6 @@ PACK(typedef struct t_SwashRingData { // Swash Ring data
|
||||
uint8_t type:5;
|
||||
uint8_t collectiveSource;
|
||||
uint8_t value;
|
||||
|
||||
/* TODO BSS everything is in comments in menus.cpp, how should it be used?
|
||||
uint8_t lim; // 0 mean off 100 full deflection
|
||||
uint8_t chX; // 2 channels to limit
|
||||
uint8_t chY; // 2 channels to limit */
|
||||
}) SwashRingData;
|
||||
|
||||
#define TRIM_EXTENDED_MAX 500
|
||||
|
||||
+14
-14
@@ -442,7 +442,7 @@ void menuProcNMEA1(uint8_t event)
|
||||
|
||||
|
||||
title ('1');
|
||||
lcd_puts_P ( 2*FW, 1*FH, PSTR("UTC-Time Sat"));
|
||||
lcd_puts ( 2*FW, 1*FH, PSTR("UTC-Time Sat"));
|
||||
|
||||
if (rbuf[0][0]) { // show always if data have been received
|
||||
lcd_putcAtt ( 19*FW, 1*FH, sbuf[2], 0); // satellites in view
|
||||
@@ -457,12 +457,12 @@ void menuProcNMEA1(uint8_t event)
|
||||
|
||||
if ((show_timer == 1) && rbuf[0][0]) { // show the Timer when data have been received
|
||||
|
||||
lcd_puts_P ( 2*FW, 4*FH, PSTR("Timer")); // display "Timer"
|
||||
lcd_puts ( 2*FW, 4*FH, PSTR("Timer")); // display "Timer"
|
||||
putsTime ( 5*FW, 5*FH, (gpstime-gpstimer), DBLSIZE, DBLSIZE); // display difference as mm:ss
|
||||
}
|
||||
else
|
||||
{
|
||||
lcd_puts_P ( 2*FW, 4*FH, PSTR("Date")); // show the UTC Date
|
||||
lcd_puts ( 2*FW, 4*FH, PSTR("Date")); // show the UTC Date
|
||||
|
||||
if (rbuf[1][0]) {
|
||||
lcd_putsnAtt( 2*FW, 5*FH, &rbuf[1][0], 2, APSIZE); // year
|
||||
@@ -561,18 +561,18 @@ void menuProcNMEA2(uint8_t event)
|
||||
}
|
||||
title ('2');
|
||||
|
||||
lcd_puts_P ( 1*FW, 1*FH, PSTR("Altitude Sat Max"));
|
||||
lcd_puts ( 1*FW, 1*FH, PSTR("Altitude Sat Max"));
|
||||
|
||||
|
||||
lcd_puts_P ( 16*FW, 3*FH, PSTR("Home"));
|
||||
lcd_puts_P ( 2*FW, 4*FH, PSTR("Lift") );
|
||||
lcd_puts ( 16*FW, 3*FH, PSTR("Home"));
|
||||
lcd_puts ( 2*FW, 4*FH, PSTR("Lift") );
|
||||
|
||||
lcd_puts_P ( 16*FW, 5*FH, PSTR("Beep") );
|
||||
lcd_puts ( 16*FW, 5*FH, PSTR("Beep") );
|
||||
if (beep_on==1)
|
||||
lcd_puts_P ( 18*FW, 6*FH, PSTR("ON") );
|
||||
lcd_puts ( 18*FW, 6*FH, PSTR("ON") );
|
||||
|
||||
else
|
||||
lcd_puts_P ( 17*FW, 6*FH, PSTR("OFF") );
|
||||
lcd_puts ( 17*FW, 6*FH, PSTR("OFF") );
|
||||
|
||||
|
||||
lcd_outdezNAtt( 20*FW, 4*FH, home_alt, PREC1, 6); // display home_alt, small characters
|
||||
@@ -629,7 +629,7 @@ void menuProcNMEA2(uint8_t event)
|
||||
|
||||
lcd_outdezNAtt( 10*FW, 5*FH, lift_alt, DBLSIZE|PREC1, 6); // lift
|
||||
lcd_putcAtt ( 11*FW, 6*FH, sbuf[0], 0); // dimension [m/S]
|
||||
lcd_puts_P ( 12*FW, 6*FH, PSTR("/S") );
|
||||
lcd_puts ( 12*FW, 6*FH, PSTR("/S") );
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -663,7 +663,7 @@ void menuProcNMEA3(uint8_t event)
|
||||
initval (LONG_BUF(1), PACK_RMC, COG);
|
||||
initval (SHORT_BUF(2), PACK_GGA, SAT); // -> sbuf[2]
|
||||
title ('3');
|
||||
lcd_puts_P ( 0*FW, 1*FH, PSTR("GrndSpeed[knt] Sat"));
|
||||
lcd_puts ( 0*FW, 1*FH, PSTR("GrndSpeed[knt] Sat"));
|
||||
if (rbuf[0][0]) // if first position is 00, buffer is empty, taken as false
|
||||
{ // any other value is true
|
||||
uint8_t i = 0;
|
||||
@@ -683,7 +683,7 @@ void menuProcNMEA3(uint8_t event)
|
||||
|
||||
lcd_putcAtt ( 19*FW, 1*FH, sbuf[2], 0); // satellites in view
|
||||
|
||||
lcd_puts_P ( 1*FW, 4*FH, PSTR("Course over ground") );
|
||||
lcd_puts ( 1*FW, 4*FH, PSTR("Course over ground") );
|
||||
lcd_putsAtt ( 2*FW, 5*FH, VALSTR(1), APSIZE); // course over ground
|
||||
}
|
||||
|
||||
@@ -717,7 +717,7 @@ void menuProcNMEA4(uint8_t event)
|
||||
initval (SHORT_BUF(2), PACK_GGA, SAT); // -> sbuf[2]
|
||||
// title of the screen
|
||||
title ('4');
|
||||
lcd_puts_P ( 3*FW, 1*FH, PSTR("Latitude Sat")); // line 1 column 3
|
||||
lcd_puts ( 3*FW, 1*FH, PSTR("Latitude Sat")); // line 1 column 3
|
||||
// first buffer into line 2 column 2
|
||||
if (rbuf[0][0])
|
||||
{
|
||||
@@ -729,7 +729,7 @@ void menuProcNMEA4(uint8_t event)
|
||||
}
|
||||
else
|
||||
lcd_putsAtt ( 2*FW, 2*FH, val_unknown, APSIZE);
|
||||
lcd_puts_P ( 3*FW, 4*FH, PSTR("Longitude")); // line 4 column 5
|
||||
lcd_puts ( 3*FW, 4*FH, PSTR("Longitude")); // line 4 column 5
|
||||
// second buffer into line 5 column 2
|
||||
if (rbuf[0][0])
|
||||
{
|
||||
|
||||
+6
-11
@@ -24,6 +24,7 @@ const pm_char STR_OPEN9X[] PROGMEM =
|
||||
TR_VFSWFUNC
|
||||
TR_FUNCSOUNDS
|
||||
#ifdef FRSKY
|
||||
TR_VTELEMBARS
|
||||
TR_VTELEMUNIT
|
||||
TR_VALARM
|
||||
TR_VALARMFN
|
||||
@@ -144,19 +145,13 @@ const pm_char STR_ALT[] PROGMEM = TR_ALT;
|
||||
const pm_char STR_RXBATT[] PROGMEM = TR_RXBATT;
|
||||
const pm_char STR_RX[] PROGMEM = TR_RX;
|
||||
const pm_char STR_TX[] PROGMEM = TR_TX;
|
||||
const pm_char STR_SPD[] PROGMEM = TR_SPD;
|
||||
const pm_char STR_TEMP1[] PROGMEM = TR_TEMP1;
|
||||
const pm_char STR_TEMP2[] PROGMEM = TR_TEMP2;
|
||||
const pm_char STR_RPM[] PROGMEM = TR_RPM;
|
||||
const pm_char STR_FUEL[] PROGMEM = TR_FUEL;
|
||||
const pm_char STR_SPDnMAX[] PROGMEM = TR_SPDnMAX;
|
||||
const pm_char STR_TEMP1nTEMP2[] PROGMEM = TR_TEMP1nTEMP2;
|
||||
const pm_char STR_RPMnFUEL[] PROGMEM = TR_RPMnFUEL;
|
||||
const pm_char STR_ACCEL[] PROGMEM = TR_ACCEL;
|
||||
const pm_char STR_TELE[] PROGMEM = TR_TELE;
|
||||
const pm_char STR_RSSI[] PROGMEM = TR_RSSI;
|
||||
const pm_char STR_NODATA[] PROGMEM = TR_NODATA;
|
||||
const pm_char STR_TM1[] PROGMEM = TR_TM1;
|
||||
const pm_char STR_TM2[] PROGMEM = TR_TM2;
|
||||
const pm_char STR_THR[] PROGMEM = TR_THR;
|
||||
const pm_char STR_TH[] PROGMEM = TR_TH;
|
||||
const pm_char STR_TM1TM2[] PROGMEM = TR_TM1TM2;
|
||||
const pm_char STR_THRTHP[] PROGMEM = TR_THRTHP;
|
||||
const pm_char STR_TOT[] PROGMEM = TR_TOT;
|
||||
const pm_char STR_TMR1LATMAXUS[] PROGMEM = TR_TMR1LATMAXUS;
|
||||
const pm_char STR_TMR1LATMINUS[] PROGMEM = TR_TMR1LATMINUS;
|
||||
|
||||
+9
-12
@@ -37,7 +37,8 @@ extern const pm_char STR_OPEN9X[];
|
||||
#define OFS_VFSWFUNC (OFS_VCSWFUNC + PSIZE(TR_VCSWFUNC))
|
||||
#define OFS_FUNCSOUNDS (OFS_VFSWFUNC + PSIZE(TR_VFSWFUNC))
|
||||
#ifdef FRSKY
|
||||
#define OFS_VTELEMUNIT (OFS_FUNCSOUNDS + PSIZE(TR_FUNCSOUNDS))
|
||||
#define OFS_VTELEMBARS (OFS_FUNCSOUNDS + PSIZE(TR_FUNCSOUNDS))
|
||||
#define OFS_VTELEMUNIT (OFS_VTELEMBARS + PSIZE(TR_VTELEMBARS))
|
||||
#define OFS_VALARM (OFS_VTELEMUNIT + PSIZE(TR_VTELEMUNIT))
|
||||
#define OFS_VALARMFN (OFS_VALARM + PSIZE(TR_VALARM))
|
||||
#define OFS_VTELPROTO (OFS_VALARMFN + PSIZE(TR_VALARMFN))
|
||||
@@ -99,6 +100,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_VTELEMUNIT (STR_OPEN9X + OFS_VTELEMUNIT)
|
||||
#define STR_VALARM (STR_OPEN9X + OFS_VALARM)
|
||||
#define STR_VALARMFN (STR_OPEN9X + OFS_VALARMFN)
|
||||
@@ -131,6 +133,7 @@ extern const pm_char STR_OPEN9X[];
|
||||
// The 0-terminated-strings
|
||||
|
||||
extern const pm_char STR_POPUPS[];
|
||||
#define STR_EXIT (STR_POPUPS + OFS_EXIT)
|
||||
extern const pm_char STR_MENUWHENDONE[];
|
||||
extern const pm_char STR_FREE[];
|
||||
#define LEN_FREE PSIZE(TR_FREE)
|
||||
@@ -223,19 +226,13 @@ extern const pm_char STR_ALT[];
|
||||
extern const pm_char STR_RXBATT[];
|
||||
extern const pm_char STR_RX[];
|
||||
extern const pm_char STR_TX[];
|
||||
extern const pm_char STR_SPD[];
|
||||
extern const pm_char STR_TEMP1[];
|
||||
extern const pm_char STR_TEMP2[];
|
||||
extern const pm_char STR_RPM[];
|
||||
extern const pm_char STR_FUEL[];
|
||||
extern const pm_char STR_SPDnMAX[];
|
||||
extern const pm_char STR_TEMP1nTEMP2[];
|
||||
extern const pm_char STR_RPMnFUEL[];
|
||||
extern const pm_char STR_ACCEL[];
|
||||
extern const pm_char STR_TELE[];
|
||||
extern const pm_char STR_RSSI[];
|
||||
extern const pm_char STR_NODATA[];
|
||||
extern const pm_char STR_TM1[];
|
||||
extern const pm_char STR_TM2[];
|
||||
extern const pm_char STR_THR[];
|
||||
extern const pm_char STR_TH[];
|
||||
extern const pm_char STR_TM1TM2[];
|
||||
extern const pm_char STR_THRTHP[];
|
||||
extern const pm_char STR_TOT[];
|
||||
extern const pm_char STR_TMR1LATMAXUS[];
|
||||
extern const pm_char STR_TMR1LATMINUS[];
|
||||
|
||||
+23
-10
@@ -277,8 +277,9 @@ void applyExpos(int16_t *anas, uint8_t phase)
|
||||
}
|
||||
}
|
||||
|
||||
/*TODO evaluate impact FORCEINLINE */
|
||||
bool s_noStickInputs = false;
|
||||
FORCEINLINE int16_t getValue(uint8_t i)
|
||||
int16_t getValue(uint8_t i)
|
||||
{
|
||||
if(i<NUM_STICKS+NUM_POTS) return (s_noStickInputs ? 0 : calibratedStick[i]);
|
||||
else if(i<MIX_FULL/*srcRaw is shifted +1!*/) return 1024; //FULL/MAX
|
||||
@@ -286,13 +287,18 @@ FORCEINLINE int16_t getValue(uint8_t i)
|
||||
else if(i<PPM_BASE+NUM_PPM) return g_ppmIns[i-PPM_BASE]*2;
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT) return ex_chans[i-CHOUT_BASE];
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS) return s_timerVal[i-CHOUT_BASE-NUM_CHNOUT];
|
||||
#ifdef FRSKY
|
||||
#if defined(FRSKY)
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+2) return frskyTelemetry[i-CHOUT_BASE-NUM_CHNOUT-MAX_TIMERS].value;
|
||||
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+3) return frskyHubData.baroAltitude + baroAltitudeOffset;
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+3) return frskyHubData.baroAltitude + frskyHubData.baroAltitudeOffset;
|
||||
#endif
|
||||
#if defined(FRSKY_HUB)
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+4) return (frskyHubData.rpm / 2);
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+5) return frskyHubData.fuelLevel;
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+6) return frskyHubData.temperature1;
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+7) return frskyHubData.temperature2;
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+8) return frskyHubData.gpsSpeed_ap;
|
||||
else if(i<CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+9) return frskyHubData.minCellVolts;
|
||||
#endif
|
||||
#endif
|
||||
else return 0;
|
||||
@@ -354,8 +360,15 @@ bool __getSwitch(int8_t swtch)
|
||||
if (s == CS_VOFS) {
|
||||
#ifdef FRSKY
|
||||
#if defined(FRSKY_HUB)
|
||||
// Fill the threshold array
|
||||
if (cs.v1 > CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+2)
|
||||
barsThresholds[cs.v1-CHOUT_BASE-NUM_CHNOUT-MAX_TIMERS-3] = 128 + cs.v2;
|
||||
// TODO CELL?
|
||||
// FUEL, T1, T2, SPEED
|
||||
if (cs.v1 > CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+4)
|
||||
y = (128+cs.v2);
|
||||
// RPMs
|
||||
if (cs.v1 > CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+3)
|
||||
else if (cs.v1 > CHOUT_BASE+NUM_CHNOUT+MAX_TIMERS+3)
|
||||
y = (128+cs.v2) * 25;
|
||||
else
|
||||
#endif
|
||||
@@ -559,9 +572,9 @@ void alertMessages( const pm_char * s, const pm_char * t )
|
||||
{
|
||||
lcd_clear();
|
||||
lcd_putsAtt(64-5*FW,0*FH,STR_ALERT,DBLSIZE);
|
||||
lcd_puts_P(0,4*FH,s);
|
||||
lcd_puts_P(0,5*FH,t);
|
||||
lcd_puts_P(0,6*FH, STR_PRESSANYKEYTOSKIP ) ;
|
||||
lcd_putsLeft(4*FH,s);
|
||||
lcd_putsLeft(5*FH,t);
|
||||
lcd_putsLeft(6*FH, STR_PRESSANYKEYTOSKIP ) ;
|
||||
refreshDisplay();
|
||||
lcdSetRefVolt(g_eeGeneral.contrast);
|
||||
|
||||
@@ -650,7 +663,7 @@ void message(const pm_char * s)
|
||||
{
|
||||
lcd_clear();
|
||||
lcd_putsAtt(64-5*FW, 0*FH, STR_MESSAGE, DBLSIZE);
|
||||
lcd_puts_P(0,4*FW,s);
|
||||
lcd_putsLeft(4*FW,s);
|
||||
refreshDisplay();
|
||||
lcdSetRefVolt(g_eeGeneral.contrast);
|
||||
}
|
||||
@@ -659,8 +672,8 @@ void alert(const pm_char * s, bool defaults)
|
||||
{
|
||||
lcd_clear();
|
||||
lcd_putsAtt(64-5*FW, 0*FH, STR_ALERT, DBLSIZE);
|
||||
lcd_puts_P(0,4*FH,s);
|
||||
lcd_puts_P(64-LEN_PRESSANYKEY*FW/2, 7*FH, STR_PRESSANYKEY);
|
||||
lcd_putsLeft(4*FH,s);
|
||||
lcd_puts(64-LEN_PRESSANYKEY*FW/2, 7*FH, STR_PRESSANYKEY);
|
||||
refreshDisplay();
|
||||
lcdSetRefVolt(defaults ? 25 : g_eeGeneral.contrast);
|
||||
AUDIO_ERROR();
|
||||
|
||||
+10
-43
@@ -40,26 +40,9 @@
|
||||
#include <stddef.h>
|
||||
#include <avr/io.h>
|
||||
#define assert(x)
|
||||
//disable whole pgmspace functionality for all avr-gcc because
|
||||
//avr-gcc > 4.2.1 does not work anyway
|
||||
//http://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg239240.html
|
||||
//http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34734
|
||||
//
|
||||
//Workarounds:
|
||||
//
|
||||
//PSTR is fixed below
|
||||
//all prog_xx definitions must use APM explicitely
|
||||
|
||||
//#define __ATTR_PROGMEM__
|
||||
#include <avr/pgmspace.h>
|
||||
#undef PROGMEM
|
||||
#define PROGMEM __attribute__(( section(".progmem.data") ))
|
||||
#include "pgmtypes.h"
|
||||
#ifdef __cplusplus
|
||||
#define APM __attribute__(( section(".progmem.data") ))
|
||||
#undef PSTR
|
||||
#define PSTR(s) (__extension__({static const pm_char __c[] PROGMEM = (s);&__c[0];}))
|
||||
#endif
|
||||
|
||||
#include <avr/eeprom.h>
|
||||
#include <avr/sleep.h>
|
||||
@@ -347,7 +330,7 @@ enum EnumKeys {
|
||||
#define CHOUT_BASE (PPM_BASE+NUM_PPM)
|
||||
|
||||
#if defined(FRSKY_HUB)
|
||||
#define NUM_TELEMETRY 4
|
||||
#define NUM_TELEMETRY 9
|
||||
#elif defined(WS_HOW_HIGH)
|
||||
#define NUM_TELEMETRY 3
|
||||
#elif defined(FRSKY)
|
||||
@@ -397,12 +380,13 @@ enum EnumKeys {
|
||||
|
||||
#define MAX_ALERT_TIME 60
|
||||
|
||||
// TODO enum in myeeprom.h
|
||||
#define PROTO_PPM 0
|
||||
#define PROTO_PXX 1
|
||||
#define PROTO_DSM2 2
|
||||
#define PROTO_PPM16 3
|
||||
#define PROT_MAX 3
|
||||
enum Protocols {
|
||||
PROTO_PPM,
|
||||
PROTO_PXX,
|
||||
PROTO_DSM2,
|
||||
PROTO_PPM16,
|
||||
PROTO_MAX
|
||||
};
|
||||
|
||||
extern uint8_t heartbeat;
|
||||
extern uint32_t inacCounter;
|
||||
@@ -444,26 +428,9 @@ void perMain();
|
||||
/// Bearbeitet alle zeitkritischen Jobs.
|
||||
/// wie z.B. einlesen aller Eingaenge, Entprellung, Key-Repeat..
|
||||
void per10ms();
|
||||
/// Erzeugt periodisch alle Outputs ausser Bildschirmausgaben.
|
||||
void zeroVariables();
|
||||
|
||||
/// Liefert den Zustand des Switches 'swtch'. Die Numerierung erfolgt ab 1
|
||||
/// (1=SW_ON, 2=SW_ThrCt, 10=SW_Trainer). 0 Bedeutet not conected.
|
||||
/// Negative Werte erzeugen invertierte Ergebnisse.
|
||||
/// Die Funktion putsSwitches(..) erzeugt den passenden Ausdruck.
|
||||
///
|
||||
/// \param swtch
|
||||
/// 0 : not connected. Liefert den Wert 'nc'
|
||||
/// 1.. MAX_SWITCH : SW_ON .. SW_Trainer
|
||||
/// -1..-MAX_SWITCH : negierte Werte
|
||||
/// \param nc Wert, der bei swtch==0 geliefert wird.
|
||||
int16_t getValue(uint8_t i);
|
||||
bool getSwitch(int8_t swtch, bool nc);
|
||||
/// Zeigt den Namen des Switches 'swtch' im display an
|
||||
/// \param x x-koordinate 0..127
|
||||
/// \param y y-koordinate 0..63 (nur durch 8 teilbar)
|
||||
/// \param swtch -MAX_SWITCH .. MAX_SWITCH
|
||||
/// \param att NO_INV,INVERS,BLINK
|
||||
///
|
||||
|
||||
uint8_t getFlightPhase();
|
||||
uint8_t getTrimFlightPhase(uint8_t idx, uint8_t phase);
|
||||
@@ -650,7 +617,7 @@ extern volatile uint16_t g_tmr10ms;
|
||||
extern volatile uint8_t g_blinkTmr10ms;
|
||||
extern uint8_t g_beepCnt;
|
||||
extern uint8_t g_beepVal[5];
|
||||
// TODO needed?
|
||||
|
||||
extern const PROGMEM char modi12x3[];
|
||||
|
||||
#include "o9xstrings.h"
|
||||
|
||||
@@ -1,6 +1,32 @@
|
||||
#ifndef __PGMTYPES__
|
||||
#define __PGMTYPES__
|
||||
|
||||
/* this is workaround for g++ bug: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34734 */
|
||||
#if (((__GNUC__ * 1000) + __GNUC_MINOR__) * 1000 + __GNUC_PATCHLEVEL__) < 4006002
|
||||
# ifdef __cplusplus
|
||||
# undef PROGMEM
|
||||
# define PROGMEM __attribute__(( section(".progmem.data") ))
|
||||
# undef PSTR
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* old (pre 1.8.0) avr-libc does not have progmem macros compatible with new gcc
|
||||
* note: even for old gcc, definition was wrong. Old gcc was just more tolerant. */
|
||||
#if (((__AVR_LIBC_MAJOR__ * 1000) + __AVR_LIBC_MINOR__) * 1000 + __AVR_LIBC_REVISION__) < 1008000
|
||||
# ifndef __PGMSPACE_H_
|
||||
# warning "This file should be included after <avr/pgmspace.h>"
|
||||
# endif
|
||||
# undef PSTR
|
||||
# undef PGM_P
|
||||
# undef PGM_VOID_P
|
||||
# define PGM_P const char *
|
||||
# define PGM_VOID_P const void *
|
||||
#endif
|
||||
|
||||
#ifndef PSTR
|
||||
# define PSTR(s) (__extension__({static const char __c[] PROGMEM = (s);&__c[0];}))
|
||||
#endif
|
||||
|
||||
typedef void pm_void;
|
||||
typedef char pm_char;
|
||||
typedef unsigned char pm_uchar;
|
||||
|
||||
+10
-13
@@ -35,17 +35,15 @@ void menuProcStatistic(uint8_t event)
|
||||
break;
|
||||
}
|
||||
|
||||
lcd_puts_P( 1*FW, FH*1, STR_TM1);
|
||||
lcd_puts( 1*FW, FH*1, STR_TM1TM2);
|
||||
putsTime( 5*FW, FH*1, s_timerVal[0], 0, 0);
|
||||
lcd_puts_P( 17*FW, FH*1, STR_TM2);
|
||||
putsTime( 12*FW, FH*1, s_timerVal[1], 0, 0);
|
||||
|
||||
lcd_puts_P( 1*FW, FH*2, STR_THR);
|
||||
lcd_puts( 1*FW, FH*2, STR_THRTHP);
|
||||
putsTime( 5*FW, FH*2, s_timeCumThr, 0, 0);
|
||||
lcd_puts_P( 17*FW, FH*2, STR_TH);
|
||||
putsTime( 12*FW, FH*2, s_timeCum16ThrP/16, 0, 0);
|
||||
|
||||
lcd_puts_P( 17*FW, FH*0, STR_TOT);
|
||||
lcd_puts( 17*FW, FH*0, STR_TOT);
|
||||
putsTime( 12*FW, FH*0, s_timeCumTot, 0, 0);
|
||||
|
||||
uint16_t traceRd = s_traceCnt>MAXTRACE ? s_traceWr : 0;
|
||||
@@ -67,7 +65,6 @@ void menuProcStatistic(uint8_t event)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO ifdef DEBUG
|
||||
void menuProcDebug(uint8_t event)
|
||||
{
|
||||
TITLE(STR_MENUDEBUG);
|
||||
@@ -87,21 +84,21 @@ void menuProcDebug(uint8_t event)
|
||||
chainMenu(menuMainView);
|
||||
break;
|
||||
}
|
||||
lcd_puts_P( 0*FW, 1*FH, STR_TMR1LATMAXUS);
|
||||
lcd_puts( 0*FW, 1*FH, STR_TMR1LATMAXUS);
|
||||
lcd_outdez8(15*FW , 1*FH, g_tmr1Latency_max/2 );
|
||||
lcd_puts_P( 0*FW, 2*FH, STR_TMR1LATMINUS);
|
||||
lcd_puts( 0*FW, 2*FH, STR_TMR1LATMINUS);
|
||||
lcd_outdez8(15*FW , 2*FH, g_tmr1Latency_min/2 );
|
||||
lcd_puts_P( 0*FW, 3*FH, STR_TMR1JITTERUS);
|
||||
lcd_puts( 0*FW, 3*FH, STR_TMR1JITTERUS);
|
||||
lcd_outdez8(15*FW , 3*FH, (g_tmr1Latency_max - g_tmr1Latency_min) /2 );
|
||||
lcd_puts_P( 0*FW, 4*FH, STR_TMAINMAXMS);
|
||||
lcd_puts( 0*FW, 4*FH, STR_TMAINMAXMS);
|
||||
lcd_outdezAtt(15*FW, 4*FH, (g_timeMain*100)/16, PREC2);
|
||||
#ifdef DEBUG
|
||||
lcd_puts_P( 0*FW, 5*FH, STR_T10MSUS);
|
||||
lcd_puts( 0*FW, 5*FH, STR_T10MSUS);
|
||||
lcd_outdez8(15*FW , 5*FH, g_time_per10/2 );
|
||||
#endif
|
||||
#ifndef SIMU
|
||||
lcd_puts_P( 0*FW, 6*FH, STR_FREESTACKMINB);
|
||||
lcd_puts( 0*FW, 6*FH, STR_FREESTACKMINB);
|
||||
lcd_outdezAtt(18*FW-1, 6*FH, stack_free(), UNSIGN) ;
|
||||
#endif
|
||||
lcd_puts_P( 3*FW, 7*FH, STR_MENUTORESET);
|
||||
lcd_puts( 3*FW, 7*FH, STR_MENUTORESET);
|
||||
}
|
||||
|
||||
+34
-34
@@ -8,8 +8,8 @@
|
||||
#define LEN_NCHANNELS 4
|
||||
#define TR_NCHANNELS "4CH 6CH 8CH 10CH12CH14CH16CH"
|
||||
|
||||
#define LEN_VBEEPER 6
|
||||
#define TR_VBEEPER "Quiet ""NoKey ""xShort""Short ""Norm ""Long ""xLong "
|
||||
#define LEN_VBEEPER 6
|
||||
#define TR_VBEEPER "Quiet ""NoKey ""xShort""Short ""Norm ""Long ""xLong "
|
||||
|
||||
#define LEN_ADCFILTER 4
|
||||
#define TR_ADCFILTER "SING""OSMP""FILT"
|
||||
@@ -57,7 +57,7 @@
|
||||
#define TR_VMIXTRIMS "ON ""OFF ""Offset"
|
||||
|
||||
#define LEN_VCSWFUNC 7
|
||||
#define TR_VCSWFUNC "---- ""v>ofs ""v<ofs ""|v|>ofs""|v|<ofs""AND ""OR ""XOR ""v1==v2 ""v1!=v2 ""v1>v2 ""v1<v2 ""v1>=v2 ""v1<=v2 "
|
||||
#define TR_VCSWFUNC "----\0 ""v>ofs ""v<ofs ""|v|>ofs""|v|<ofs""AND ""OR ""XOR ""v1==v2 ""v1!=v2 ""v1>v2 ""v1<v2 ""v1>=v2 ""v1<=v2 "
|
||||
|
||||
#define LEN_VFSWFUNC 13
|
||||
#ifdef LOGS
|
||||
@@ -70,8 +70,11 @@
|
||||
#define LEN_FUNCSOUNDS 6
|
||||
#define TR_FUNCSOUNDS "Warn1 ""Warn2 ""Cheep ""Ring ""SciFi ""Robot ""Chirp ""Tada ""Crickt""Siren ""AlmClk""Ratata""Tick ""Haptc1""Haptc2""Haptc3"
|
||||
|
||||
#define LEN_VTELEMUNIT 4
|
||||
#define TR_VTELEMUNIT "v\0 ""-\0 ""kts\0""km/h""M/h\0""m\0 ""@C\0 "
|
||||
#define LEN_VTELEMBARS 4
|
||||
#define TR_VTELEMBARS "---\0""A1\0 ""A2\0 ""ALT\0""RPM\0""FUEL""T1\0 ""T2\0 ""SPD\0""CELL"
|
||||
|
||||
#define LEN_VTELEMUNIT 3
|
||||
#define TR_VTELEMUNIT "v\0 ""A\0 ""-\0 ""kts""kmh""M/h""m\0 ""@\0 ""%\0"
|
||||
|
||||
#define LEN_VALARM 3
|
||||
#define TR_VALARM "---""Yel""Org""Red"
|
||||
@@ -89,8 +92,8 @@
|
||||
#define LEN_VTEMPLATES 12
|
||||
#define TR_VTEMPLATES "Simple 4-CH ""T-Cut ""V-Tail ""Elevon\\Delta""eCCPM ""Heli Setup ""Servo Test "
|
||||
|
||||
#define LEN_VSWASHTYPE 6
|
||||
#define TR_VSWASHTYPE "--- ""120 ""120X ""140 ""90 "
|
||||
#define LEN_VSWASHTYPE 4
|
||||
#define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90 "
|
||||
|
||||
#define LEN_VKEYS 5
|
||||
#define TR_VKEYS " Menu"" Exit"" Down"" Up""Right"" Left"
|
||||
@@ -107,12 +110,14 @@
|
||||
#define LEN_VTMRMODES 3
|
||||
#define TR_VTMRMODES "OFF""ABS""THs""TH%""THt"
|
||||
|
||||
#define LEN_TELEMCHNS 3
|
||||
#if defined(FRSKY_HUB)
|
||||
#define TR_TELEMCHNS "AD1AD2ALTRPM"
|
||||
#define LEN_TELEMCHNS 4
|
||||
#define TR_TELEMCHNS "AD1 AD2 ALT RPM FUELT@1 T@2 SPD\0CELL"
|
||||
#elif defined(WS_HOW_HIGH)
|
||||
#define LEN_TELEMCHNS 3
|
||||
#define TR_TELEMCHNS "AD1AD2ALT"
|
||||
#elif defined(FRSKY)
|
||||
#define LEN_TELEMCHNS 3
|
||||
#define TR_TELEMCHNS "AD1AD2"
|
||||
#endif
|
||||
|
||||
@@ -120,8 +125,9 @@
|
||||
#define TR_DSM2MODE "LP4/LP5DSMonlyDSMX "
|
||||
|
||||
// ZERO TERMINATED STRINGS
|
||||
#define TR_POPUPS "[MENU] [EXIT]"
|
||||
#define TR_MENUWHENDONE " [MENU] WHEN DONE"
|
||||
#define TR_POPUPS "[MENU]\004[EXIT]"
|
||||
#define OFS_EXIT 7
|
||||
#define TR_MENUWHENDONE "[MENU] WHEN DONE"
|
||||
#define TR_FREE "free"
|
||||
#define TR_DELETEMODEL "DELETE MODEL"
|
||||
#define TR_COPYINGMODEL "Copying model..."
|
||||
@@ -143,7 +149,7 @@
|
||||
#define TR_FADEIN "Fade In"
|
||||
#define TR_FADEOUT "Fade Out"
|
||||
#define TR_DEFAULT "(default)"
|
||||
#define TR_CHECKTRIMS "Check Trims"
|
||||
#define TR_CHECKTRIMS "Check\005Trims"
|
||||
#define TR_SWASHTYPE "Swash Type"
|
||||
#define TR_COLLECTIVE "Collective"
|
||||
#define TR_SWASHRING "Swash Ring"
|
||||
@@ -173,7 +179,7 @@
|
||||
#define TR_COPYTRIMMENU "COPY TRIM [MENU]"
|
||||
#define TR_CV "CV"
|
||||
#define TR_SW "SW"
|
||||
#define TR_ACHANNEL "A channel"
|
||||
#define TR_ACHANNEL "A\002channel"
|
||||
#define TR_RANGE "Range"
|
||||
#define TR_BAR "Bar"
|
||||
#define TR_ALARM "Alarm"
|
||||
@@ -199,39 +205,33 @@
|
||||
#define TR_RXCHANNELORD "Rx Channel Ord"
|
||||
#define TR_MODE2 "Mode"
|
||||
#define TR_SLAVE "Slave"
|
||||
#define TR_MODESRC "mode % src"
|
||||
#define TR_MODESRC "mode\003% src"
|
||||
#define TR_MULTIPLIER "Multiplier"
|
||||
#define TR_CAL "Cal"
|
||||
#define TR_EEPROMV "EEPROM v"
|
||||
#define TR_VTRIM "Trim- +"
|
||||
#define TR_BG "BG"
|
||||
#define TR_MENUTOSTART " [MENU] TO START "
|
||||
#define TR_SETMIDPOINT " SET MIDPOINT "
|
||||
#define TR_MOVESTICKSPOTS " MOVE STICKS/POTS "
|
||||
#define TR_MENUTOSTART "[MENU] TO START"
|
||||
#define TR_SETMIDPOINT "SET MIDPOINT"
|
||||
#define TR_MOVESTICKSPOTS "MOVE STICKS/POTS"
|
||||
#define TR_ALT "Alt:"
|
||||
#define TR_RXBATT "Rx Batt:"
|
||||
#define TR_RX "Rx:"
|
||||
#define TR_TX "Tx:"
|
||||
#define TR_SPD "Spd:"
|
||||
#define TR_TEMP1 "T@1:"
|
||||
#define TR_TEMP2 "T@2:"
|
||||
#define TR_RPM "RPM:"
|
||||
#define TR_FUEL "Fuel:"
|
||||
#define TR_SPDnMAX "Spd:\008Max:"
|
||||
#define TR_TEMP1nTEMP2 "T@1:\007T@2:"
|
||||
#define TR_RPMnFUEL "RPM:\006Fuel:"
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_TELE "Tele:"
|
||||
#define TR_RSSI "RSSI:"
|
||||
#define TR_NODATA "NO DATA"
|
||||
#define TR_TM1 "TM1"
|
||||
#define TR_TM2 "TM2"
|
||||
#define TR_THR "THR"
|
||||
#define TR_TH "TH%"
|
||||
#define TR_TM1TM2 "TM1\015TM2"
|
||||
#define TR_THRTHP "THR\015TH%"
|
||||
#define TR_TOT "TOT"
|
||||
#define TR_TMR1LATMAXUS "tmr1Lat max us"
|
||||
#define TR_TMR1LATMINUS "tmr1Lat min us"
|
||||
#define TR_TMR1JITTERUS "tmr1 Jitter us"
|
||||
#define TR_TMAINMAXMS "tmain max ms"
|
||||
#define TR_T10MSUS "t10ms us"
|
||||
#define TR_FREESTACKMINB "Free Stack min b"
|
||||
#define TR_TMR1LATMAXUS "tmr1Lat max\004us"
|
||||
#define TR_TMR1LATMINUS "tmr1Lat min\004us"
|
||||
#define TR_TMR1JITTERUS "tmr1 Jitter\004us"
|
||||
#define TR_TMAINMAXMS "tmain max\010ms"
|
||||
#define TR_T10MSUS "t10ms\010us"
|
||||
#define TR_FREESTACKMINB "Free Stack min\004b"
|
||||
#define TR_MENUTORESET "[MENU] to reset"
|
||||
#define TR_PPM "PPM"
|
||||
#define TR_CH "CH"
|
||||
|
||||
+31
-32
@@ -57,7 +57,7 @@
|
||||
#define TR_VMIXTRIMS "ON ""OFF ""Offset"
|
||||
|
||||
#define LEN_VCSWFUNC 7
|
||||
#define TR_VCSWFUNC "---- ""v>ofs ""v<ofs ""|v|>ofs""|v|<ofs""ET ""OU ""XOU ""v1==v2 ""v1!=v2 ""v1>v2 ""v1<v2 ""v1>=v2 ""v1<=v2 "
|
||||
#define TR_VCSWFUNC "----\0 ""v>ofs ""v<ofs ""|v|>ofs""|v|<ofs""AND ""OR ""XOR ""v1==v2 ""v1!=v2 ""v1>v2 ""v1<v2 ""v1>=v2 ""v1<=v2 "
|
||||
|
||||
#define LEN_VFSWFUNC 13
|
||||
#ifdef LOGS
|
||||
@@ -70,8 +70,11 @@
|
||||
#define LEN_FUNCSOUNDS 6
|
||||
#define TR_FUNCSOUNDS "Warn1 ""Warn2 ""Cheep ""Ring ""SciFi ""Robot ""Chirp ""Tada ""Crickt""Siren ""AlmClk""Ratata""Tick ""Haptc1""Haptc2""Haptc3"
|
||||
|
||||
#define LEN_VTELEMUNIT 4
|
||||
#define TR_VTELEMUNIT "v\0 ""-\0 ""kts\0""km/h""M/h\0""m\0 ""@C\0 "
|
||||
#define LEN_VTELEMBARS 4
|
||||
#define TR_VTELEMBARS "---\0""A1\0 ""A2\0 ""ALT\0""RPM\0""FUEL""T1\0 ""T2\0 ""SPD\0""CELL"
|
||||
|
||||
#define LEN_VTELEMUNIT 3
|
||||
#define TR_VTELEMUNIT "v\0 ""A\0 ""-\0 ""kts""kmh""M/h""m\0 ""@\0 ""%\0"
|
||||
|
||||
#define LEN_VALARM 3
|
||||
#define TR_VALARM "---""Yel""Org""Red"
|
||||
@@ -89,8 +92,8 @@
|
||||
#define LEN_VTEMPLATES 14
|
||||
#define TR_VTEMPLATES "4 Voies simple""Coupure Gaz ""Empennage V ""Elevon\\Delta ""eCCPM ""Conf.Helico ""Servo Test "
|
||||
|
||||
#define LEN_VSWASHTYPE 6
|
||||
#define TR_VSWASHTYPE "--- ""120 ""120X ""140 ""90 "
|
||||
#define LEN_VSWASHTYPE 4
|
||||
#define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90 "
|
||||
|
||||
#define LEN_VKEYS 5
|
||||
#define TR_VKEYS " Menu"" Exit"" Bas"" Haut""Droit""Gauch"
|
||||
@@ -107,12 +110,14 @@
|
||||
#define LEN_VTMRMODES 3
|
||||
#define TR_VTMRMODES "OFF""ABS""GZs""GZ%""GZt"
|
||||
|
||||
#define LEN_TELEMCHNS 3
|
||||
#if defined(FRSKY_HUB)
|
||||
#define TR_TELEMCHNS "AD1AD2ALTRPM"
|
||||
#define LEN_TELEMCHNS 4
|
||||
#define TR_TELEMCHNS "AD1 AD2 ALT RPM FUELT@1 T@2 SPD\0CELL"
|
||||
#elif defined(WS_HOW_HIGH)
|
||||
#define LEN_TELEMCHNS 3
|
||||
#define TR_TELEMCHNS "AD1AD2ALT"
|
||||
#elif defined(FRSKY)
|
||||
#define LEN_TELEMCHNS 3
|
||||
#define TR_TELEMCHNS "AD1AD2"
|
||||
#endif
|
||||
|
||||
@@ -120,8 +125,9 @@
|
||||
#define TR_DSM2MODE "LP4/LP5DSMonlyDSMX "
|
||||
|
||||
// ZERO TERMINATED STRINGS
|
||||
#define TR_POPUPS "[MENU] [EXIT]"
|
||||
#define TR_MENUWHENDONE " [MENU]Quand PRET"
|
||||
#define TR_POPUPS "[MENU]\004[EXIT]"
|
||||
#define OFS_EXIT 7
|
||||
#define TR_MENUWHENDONE "[MENU]Quand PRET"
|
||||
#define TR_FREE "libre"
|
||||
#define TR_DELETEMODEL "SUPPRIMER MODELE"
|
||||
#define TR_COPYINGMODEL "Copie..."
|
||||
@@ -143,7 +149,7 @@
|
||||
#define TR_FADEIN "Fade In"
|
||||
#define TR_FADEOUT "Fade Out"
|
||||
#define TR_DEFAULT "(defaut)"
|
||||
#define TR_CHECKTRIMS "Verif Trims"
|
||||
#define TR_CHECKTRIMS "Verif\005Trims"
|
||||
#define TR_SWASHTYPE "Type de Plateau"
|
||||
#define TR_COLLECTIVE "Collectif"
|
||||
#define TR_SWASHRING "Swash Ring"
|
||||
@@ -173,7 +179,7 @@
|
||||
#define TR_COPYTRIMMENU "COPIER TRIM [MENU]"
|
||||
#define TR_CV "CV"
|
||||
#define TR_SW "SW"
|
||||
#define TR_ACHANNEL "A voie"
|
||||
#define TR_ACHANNEL "A\002voie"
|
||||
#define TR_RANGE "Range"
|
||||
#define TR_BAR "Bar"
|
||||
#define TR_ALARM "Alarme"
|
||||
@@ -199,40 +205,33 @@
|
||||
#define TR_RXCHANNELORD "Ordre Voies Rx"
|
||||
#define TR_MODE2 "Mode"
|
||||
#define TR_SLAVE "Esclave"
|
||||
#define TR_MODESRC "mode % src"
|
||||
#define TR_MODESRC "mode\003% src"
|
||||
#define TR_MULTIPLIER "Multiplieur"
|
||||
#define TR_CAL "Cal"
|
||||
#define TR_EEPROMV "EEPROM v"
|
||||
#define TR_VTRIM "Trim- +"
|
||||
#define TR_BG "BG"
|
||||
#define TR_MENUTOSTART "[MENU]POUR DEBUT"
|
||||
#define TR_SETMIDPOINT " SET NEUTRE "
|
||||
#define TR_MOVESTICKSPOTS " BOUGER MANCHES/POTS "
|
||||
#define TR_SETMIDPOINT "SET NEUTRE"
|
||||
#define TR_MOVESTICKSPOTS "BOUGER MANCHES/POTS "
|
||||
#define TR_ALT "Alt:"
|
||||
#define TR_RXBATT "Rx Batt:"
|
||||
#define TR_RX "Rx:"
|
||||
#define TR_TX "Tx:"
|
||||
#define TR_SPD "Spd:"
|
||||
#define TR_TEMP1 "T@1:"
|
||||
#define TR_TEMP2 "T@2:"
|
||||
#define TR_RPM "RPM:"
|
||||
#define TR_FUEL "Fuel:"
|
||||
#define TR_VOLTS "Vlts:"
|
||||
#define TR_SPDnMAX "Spd:\006Max:"
|
||||
#define TR_TEMP1nTEMP2 "T@1:\007T@2:"
|
||||
#define TR_RPMnFUEL "RPM:\006Fuel:"
|
||||
#define TR_ACCEL "Acc:"
|
||||
#define TR_TELE "Tele:"
|
||||
#define TR_RSSI "RSSI:"
|
||||
#define TR_NODATA "NO DATA"
|
||||
#define TR_TM1 "TM1"
|
||||
#define TR_TM2 "TM2"
|
||||
#define TR_THR "GAZ"
|
||||
#define TR_TH "TH%"
|
||||
#define TR_TM1TM2 "TM1\015TM2"
|
||||
#define TR_THRTHP "THR\015TH%"
|
||||
#define TR_TOT "TOT"
|
||||
#define TR_TMR1LATMAXUS "tmr1Lat max us"
|
||||
#define TR_TMR1LATMINUS "tmr1Lat min us"
|
||||
#define TR_TMR1JITTERUS "tmr1 Jitter us"
|
||||
#define TR_TMAINMAXMS "tmain max ms"
|
||||
#define TR_T10MSUS "t10ms us"
|
||||
#define TR_FREESTACKMINB "Free Stack min b"
|
||||
#define TR_TMR1LATMAXUS "tmr1Lat max\004us"
|
||||
#define TR_TMR1LATMINUS "tmr1Lat min\004us"
|
||||
#define TR_TMR1JITTERUS "tmr1 Jitter\004us"
|
||||
#define TR_TMAINMAXMS "tmain max\010ms"
|
||||
#define TR_T10MSUS "t10ms\010us"
|
||||
#define TR_FREESTACKMINB "Free Stack min\004b"
|
||||
#define TR_MENUTORESET "[MENU]pour reset"
|
||||
#define TR_PPM "PPM"
|
||||
#define TR_CH "CH"
|
||||
|
||||
Reference in New Issue
Block a user