1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-23 16:25:16 +03:00

#1397 fix continued

This commit is contained in:
bsongis 2014-07-02 11:17:12 +02:00
parent 645350a1a2
commit 1e25e368d2

View file

@ -161,17 +161,8 @@ uint8_t barCoord(int16_t value, int16_t min, int16_t max)
return limit((uint8_t)0, (uint8_t)(((int32_t)(BAR_WIDTH-1) * (value - min)) / (max - min)), (uint8_t)BAR_WIDTH); return limit((uint8_t)0, (uint8_t)(((int32_t)(BAR_WIDTH-1) * (value - min)) / (max - min)), (uint8_t)BAR_WIDTH);
} }
void displayVoltagesScreen()
bool showTelemetryScreen() { {
#if defined(LUA)
if (s_frsky_view < TELEMETRY_CUSTOM_SCREEN_1) {
return isTelemetryScriptAvailable(s_frsky_view);
}
#endif
lcdDrawTelemetryTopBar();
if (s_frsky_view == TELEMETRY_VOLTAGES_SCREEN) {
// Volts / Amps / Watts / mAh // Volts / Amps / Watts / mAh
uint8_t analog = 0; uint8_t analog = 0;
#if defined(CPUARM) #if defined(CPUARM)
@ -262,11 +253,36 @@ bool showTelemetryScreen() {
#endif #endif
displayRssiLine(); displayRssiLine();
}
void displayAfterFlightScreen()
{
uint8_t line=1*FH+1;
if (IS_GPS_AVAILABLE()) {
// Latitude
lcd_putsLeft(line, STR_LATITUDE);
displayGpsCoord(line, frskyData.hub.gpsLatitudeNS, frskyData.hub.gpsLatitude_bp, frskyData.hub.gpsLatitude_ap);
// Longitude
line+=1*FH+1;
lcd_putsLeft(line, STR_LONGITUDE);
displayGpsCoord(line, frskyData.hub.gpsLongitudeEW, frskyData.hub.gpsLongitude_bp, frskyData.hub.gpsLongitude_ap);
displayGpsTime();
line+=1*FH+1;
} }
else if (s_frsky_view < TELEMETRY_CUSTOM_SCREEN_1+MAX_FRSKY_SCREENS) { // Rssi
FrSkyScreenData & screen = g_model.frsky.screens[s_frsky_view-TELEMETRY_CUSTOM_SCREEN_1]; lcd_putsLeft(line, STR_MINRSSI);
#if defined(GAUGES) #if defined(PCBTARANIS)
if (g_model.frsky.screensType & (1<<(s_frsky_view-TELEMETRY_CUSTOM_SCREEN_1))) { lcd_outdezNAtt(TELEM_2ND_COLUMN, line, frskyData.rssi[0].min, LEFT|LEADING0, 2);
#else
lcd_puts(TELEM_2ND_COLUMN, line, STR_TX);
lcd_outdezNAtt(TELEM_2ND_COLUMN+3*FW, line, frskyData.rssi[1].min, LEFT|LEADING0, 2);
lcd_puts(TELEM_2ND_COLUMN+6*FW, line, STR_RX);
lcd_outdezNAtt(TELEM_2ND_COLUMN+9*FW, line, frskyData.rssi[0].min, LEFT|LEADING0, 2);
#endif
}
bool displayGaugesTelemetryScreen(FrSkyScreenData & screen)
{
// Custom Screen with gauges // Custom Screen with gauges
uint8_t barHeight = 5; uint8_t barHeight = 5;
for (int8_t i=3; i>=0; i--) { for (int8_t i=3; i>=0; i--) {
@ -331,16 +347,20 @@ bool showTelemetryScreen() {
} }
} }
displayRssiLine(); displayRssiLine();
} return barHeight < 13;
else }
#endif
{ bool displayNumbersTelemetryScreen(FrSkyScreenData & screen)
{
// Custom Screen with numbers // Custom Screen with numbers
uint8_t fields_count = 0; uint8_t fields_count = 0;
for (uint8_t i=0; i<4; i++) { for (uint8_t i=0; i<4; i++) {
for (uint8_t j=0; j<NUM_LINE_ITEMS; j++) { for (uint8_t j=0; j<NUM_LINE_ITEMS; j++) {
uint8_t field = screen.lines[i].sources[j]; uint8_t field = screen.lines[i].sources[j];
if (i==3 && j==0) { if (field > 0) {
fields_count++;
}
if (i==3) {
#if LCD_W >= 212 #if LCD_W >= 212
lcd_vline(69, 8, 48); lcd_vline(69, 8, 48);
lcd_vline(141, 8, 48); lcd_vline(141, 8, 48);
@ -359,18 +379,17 @@ bool showTelemetryScreen() {
#if defined(GPS) #if defined(GPS)
else if (field == TELEM_GPS_TIME) { else if (field == TELEM_GPS_TIME) {
displayGpsTime(); displayGpsTime();
return true; break;
} }
#endif #endif
#endif #endif
} }
else { else {
displayRssiLine(); displayRssiLine();
return true; return fields_count;
} }
} }
if (field) { if (field) {
fields_count++;
getvalue_t value = getValue(MIXSRC_FIRST_TELEM+field-1); getvalue_t value = getValue(MIXSRC_FIRST_TELEM+field-1);
uint8_t att = (i==3 ? NO_UNIT : DBLSIZE|NO_UNIT); uint8_t att = (i==3 ? NO_UNIT : DBLSIZE|NO_UNIT);
#if LCD_W >= 212 #if LCD_W >= 212
@ -389,69 +408,96 @@ bool showTelemetryScreen() {
} }
} }
lcd_status_line(); lcd_status_line();
if (fields_count == 0) return false; return fields_count;
}
bool displayCustomTelemetryScreen(uint8_t index)
{
FrSkyScreenData & screen = g_model.frsky.screens[index];
#if defined(GAUGES)
if (g_model.frsky.screensType & (1<<(s_frsky_view-TELEMETRY_CUSTOM_SCREEN_1))) {
return displayGaugesTelemetryScreen(screen);
} }
else
#endif
{
return displayNumbersTelemetryScreen(screen);
}
}
bool displayTelemetryScreen()
{
#if defined(LUA)
if (s_frsky_view < TELEMETRY_CUSTOM_SCREEN_1) {
return isTelemetryScriptAvailable(s_frsky_view);
}
#endif
lcdDrawTelemetryTopBar();
if (s_frsky_view == TELEMETRY_VOLTAGES_SCREEN) {
displayVoltagesScreen();
}
else if (s_frsky_view < TELEMETRY_CUSTOM_SCREEN_1+MAX_FRSKY_SCREENS) {
return displayCustomTelemetryScreen(s_frsky_view-TELEMETRY_CUSTOM_SCREEN_1);
} }
#if defined(FRSKY_HUB) #if defined(FRSKY_HUB)
else if (s_frsky_view == TELEMETRY_AFTER_FLIGHT_SCREEN) { else {
uint8_t line=1*FH+1; displayAfterFlightScreen();
if (IS_GPS_AVAILABLE()) {
// Latitude
lcd_putsLeft(line, STR_LATITUDE);
displayGpsCoord(line, frskyData.hub.gpsLatitudeNS, frskyData.hub.gpsLatitude_bp, frskyData.hub.gpsLatitude_ap);
// Longitude
line+=1*FH+1;
lcd_putsLeft(line, STR_LONGITUDE);
displayGpsCoord(line, frskyData.hub.gpsLongitudeEW, frskyData.hub.gpsLongitude_bp, frskyData.hub.gpsLongitude_ap);
displayGpsTime();
line+=1*FH+1;
}
// Rssi
lcd_putsLeft(line, STR_MINRSSI);
#if defined(PCBTARANIS)
lcd_outdezNAtt(TELEM_2ND_COLUMN, line, frskyData.rssi[0].min, LEFT|LEADING0, 2);
#else
lcd_puts(TELEM_2ND_COLUMN, line, STR_TX);
lcd_outdezNAtt(TELEM_2ND_COLUMN+3*FW, line, frskyData.rssi[1].min, LEFT|LEADING0, 2);
lcd_puts(TELEM_2ND_COLUMN+6*FW, line, STR_RX);
lcd_outdezNAtt(TELEM_2ND_COLUMN+9*FW, line, frskyData.rssi[0].min, LEFT|LEADING0, 2);
#endif
} }
#endif #endif
return true; return true;
} }
#if defined(CPUARM)
enum NavigationDirection { enum NavigationDirection {
none, none,
up, up,
down down
}; };
#define decrTelemetryScreen() direction = up
#define incrTelemetryScreen() direction = down
#else
void decrTelemetryScreen()
{
if (s_frsky_view-- == 0)
s_frsky_view = FRSKY_VIEW_MAX;
}
void incrTelemetryScreen()
{
if (s_frsky_view++ == FRSKY_VIEW_MAX)
s_frsky_view = 0;
}
#endif
void menuTelemetryFrsky(uint8_t event) void menuTelemetryFrsky(uint8_t event)
{ {
if (event == EVT_KEY_FIRST(KEY_EXIT)) { #if defined(CPUARM)
enum NavigationDirection direction = none;
#endif
switch (event) {
case EVT_KEY_FIRST(KEY_EXIT):
killEvents(event); killEvents(event);
chainMenu(menuMainView); chainMenu(menuMainView);
return; return;
}
enum NavigationDirection direction = none;
switch (event) {
#if defined(PCBTARANIS) #if defined(PCBTARANIS)
case EVT_KEY_LONG(KEY_PAGE): case EVT_KEY_LONG(KEY_PAGE):
killEvents(event); killEvents(event);
// without break here // no break;
#endif #endif
case EVT_KEY_BREAK(KEY_UP): case EVT_KEY_BREAK(KEY_UP):
direction = up; decrTelemetryScreen();
break; break;
#if defined(PCBTARANIS) #if defined(PCBTARANIS)
case EVT_KEY_BREAK(KEY_PAGE): case EVT_KEY_BREAK(KEY_PAGE):
#endif #endif
case EVT_KEY_BREAK(KEY_DOWN): case EVT_KEY_BREAK(KEY_DOWN):
direction = down; incrTelemetryScreen();
break; break;
#if defined(PCBTARANIS) #if defined(PCBTARANIS)
@ -468,23 +514,24 @@ void menuTelemetryFrsky(uint8_t event)
#endif #endif
} }
if (direction == up) { #if defined(CPUARM)
do { do {
if (direction == up) {
if (s_frsky_view-- == 0) if (s_frsky_view-- == 0)
s_frsky_view = FRSKY_VIEW_MAX; s_frsky_view = FRSKY_VIEW_MAX;
} while (!showTelemetryScreen());
} }
else if (direction == down) { else if (direction == down) {
do {
if (s_frsky_view++ == FRSKY_VIEW_MAX) if (s_frsky_view++ == FRSKY_VIEW_MAX)
s_frsky_view = 0; s_frsky_view = 0;
} while (!showTelemetryScreen());
} }
else { else {
while (!showTelemetryScreen()) { direction = down;
if (s_frsky_view++ == FRSKY_VIEW_MAX)
s_frsky_view = 0;
} }
} while (!displayTelemetryScreen());
#else
if (!displayTelemetryScreen()) {
putEvent(event == EVT_KEY_BREAK(KEY_UP) ? event : EVT_KEY_BREAK(KEY_DOWN));
} }
#endif
} }