Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 2135 → Rev 2136

/Transportables_Koptertool/PKT/GPL_PKT_V3_85f/osd/osddata.c
0,0 → 1,838
/*****************************************************************************
* Copyright (C) 2013 Oliver Gemesi *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
*****************************************************************************/
 
//############################################################################
//# HISTORY osddata.c
//#
//# 14.06.2014 OG
//# - chg: Menu_OSDData() - Bezeichnung von "OSD Daten" und "BL Daten" geaendert
//# zu "OSD Statistik" und "BL Statistik"
//#
//# 11.05.2014 OG
//# - chg: Text von SHOWMKERROR_de, SHOWMKERROR_en etwas gekuerzt
//# - chg: Titel von Scrollbox-Listen angepasst
//# - chg: Menu_OSDData() umgestellt auf MenuCtrl_SetTitleFromParentItem()
//# -> die Menues 'erben' damit ihren Titel vom aufrufenden Menuepunkt
//#
//# 30.03.2014 OG
//# - chg: Sprache Hollaendisch vollstaendig entfernt
//# - chg: MenuCtrl_PushML_P() umgestellt auf MenuCtrl_PushML2_P()
//#
//# 29.03.2014 OG
//# - chg: Menu_OSDData() del: MenuCtrl_SetShowBatt() wegen Aenderung Default auf true
//# - chg: ask_delete_data() - Layout und Optimierung
//# - add: OSDDATA_ShowLastGPSPosition()
//# - del: OSDDATA_ShowLastGPS()
//#
//# 12.02.2014 OG
//# - del: die includes zu den alten parameter... entfernt
//#
//# 24.01.2014 OG
//# - fix: OSDDATA_ClearAllData(): Beep wenn Daten geloescht werden
//# (wie bei den anderen Löschungen)
//#
//# 30.06.2013 OG
//# - add: Gesamtstrom-Mittelwert in OSDDATA_Statistics() und OSDDATA_BLStatistics()
//# - chg: Benamung Statistik-Var's von mid_* auf avg_* geaendert
//# - chg: Funktionsnamen geaendert
//#
//# 19.06.2013 OG
//# - add: last Flytime in OSDDATA_Statistics()
//# - chg: Reihenfolge in OSDDATA_Statistics() und zusaetzliche Trennline
//# - add: max Current (Gesamt) in OSDDATA_Statistics()
//#
//# 16.06.2013 OG
//# - fix: "min. Voltage" Anzeige in OSDDATA_Statistics() (war veschoben)
//#
//# 13.06.2013 OG
//# - chg: Uebersetzungen von CB in ask_delete_data() aufgenommen
//# - chg: GPS-Menuetitel geaendert
//# - fix: include pkt.h
//#
//# 11.06.2013 OG
//# - chg: ask_delete_data() erweitert um Info was geloescht wird & Layout (TODO: Uebersetzungen)
//# - add: Mittelwertanzeige fuer BL-Strom
//# - add: Anzahl BL-Statistik-Datenpakete (nur wenn USE_OSD_SCREEN_DEBUG)
//# - add: OSDDATA_BLStatistic() - die BL-Daten wurden in eigene Anzeigefunktion verschoben
//# - add: OSDDATA_ClearAllData() - alle Daten loeschen
//# - add: OSDDATA_ShowLastGPS() - letzte GPS-Position anzeigen
//# - add: Menu_OSDData() - ehemals in menu.c jetzt hier
//# - chg: PKT_CtrlHook() noch an einigen Stellen eingefuegt
//# - fix: ctrl_osddata() clear screen vor ScrollBox_Refresh
//#
//# 15.05.2013 OG
//# - chg: OSDDATA_Statistics() umgestellt auf calc_BLmax() (aus osd.c)
//#
//# 04.05.2013 OG
//# - chg: angepasst auf xutils.c
//# - add: weitere Anzeigen in OSD_Statistics()
//# - add: Content in OSDDATA_UserGPS() und OSDDATA_MkError()
//#
//# 28.04.2013 OG
//# - chg: auf die neuen Features von xprintf angepasst (siehe utils/xstring.c)
//#
//# 21.04.2013 Cebra
//# - chg: Texte "Datenlöschen" in messages.c aufgenommen
//#
//# 20.04.2013 OG - NEU
//############################################################################
 
#include "../cpu.h"
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <string.h>
 
#include "../main.h"
#include "../lcd/lcd.h"
#include "../timer/timer.h"
#include "../uart/usart.h"
#include "../eeprom/eeprom.h"
#include "../messages.h"
#include "../sound/pwmsine8bit.h"
#include "../mk-data-structs.h"
#include "../osd/osd.h"
#include "../utils/scrollbox.h"
#include "../utils/xutils.h"
#include "../utils/menuctrl.h"
#include "../pkt/pkt.h"
#include "../lipo/lipo.h"
#include "../mk/mkbase.h"
 
 
#define INIT_STATISTIC 1
#define INIT_MKERROR 2
#define INIT_USERGPS 3
#define INIT_LASTPOS 4
#define INIT_ALLDATA 5
 
 
//-----------------------
// Menu_OSDDATA
//-----------------------
#define ID_SHOWSTATISTIK 1
#define ID_SHOWBLSTATISTIK 2
#define ID_SHOWMKERROR 3
#define ID_SHOWUSERGPS 4
#define ID_SHOWLASTGPS 5
#define ID_CLEARALLDATA 6
 
 
//static const char SHOWSTATISTIK_de[] PROGMEM = "OSD Daten";
//static const char SHOWSTATISTIK_en[] PROGMEM = "OSD data";
 
//static const char SHOWBLSTATISTIK_de[] PROGMEM = "BL Daten";
//static const char SHOWBLSTATISTIK_en[] PROGMEM = "BL data";
 
static const char SHOWSTATISTIK_de[] PROGMEM = "OSD Statistik";
static const char SHOWSTATISTIK_en[] PROGMEM = "OSD statistics";
 
static const char SHOWBLSTATISTIK_de[] PROGMEM = "BL Statistik";
static const char SHOWBLSTATISTIK_en[] PROGMEM = "BL statistics";
 
static const char SHOWMKERROR_de[] PROGMEM = "MK Fehler";
static const char SHOWMKERROR_en[] PROGMEM = "MK errors";
 
static const char SHOWUSERGPS_de[] PROGMEM = "GPS Userdaten";
static const char SHOWUSERGPS_en[] PROGMEM = "GPS userdata";
 
static const char SHOWLASTGPS_de[] PROGMEM = "GPS letzte Pos.";
static const char SHOWLASTGPS_en[] PROGMEM = "GPS last pos.";
 
static const char CLEARALLDATA_de[] PROGMEM = "LÖSCHE alle Daten";
static const char CLEARALLDATA_en[] PROGMEM = "DELETE all data";
 
 
 
//############################################################################
 
 
 
//--------------------------------------------------------------
//--------------------------------------------------------------
uint8_t ask_delete_data( uint8_t initcode )
{
uint8_t refresh = true;
 
clear_key_all();
 
set_beep ( 60, 0xffff, BeepNormal);
 
while( true )
{
//--------------------------------------
// screen refresh
//--------------------------------------
if( refresh )
{
lcd_cls();
 
lcd_frect( 0, 0, 127, 7, 1); // Headline: Box fill Black
lcdx_printp_at( 1, 0, strGet(DELETE), MINVERS, 0,0); // Titel
show_Lipo(); // LiPo anzeigen
 
lcd_rect_round( 0, 20, 127, 27, 1, R2); // Rahmen fuer Benutzerfrage
 
switch( initcode )
{
case INIT_STATISTIC: lcdx_printp_center( 2, strGet(STAT_OSDBL), MNORMAL, 0,9); break;
case INIT_MKERROR : lcdx_printp_center( 2, strGet(STAT_ERROR), MNORMAL, 0,9); break;
case INIT_USERGPS : lcdx_printp_center( 2, strGet(STAT_GPS) , MNORMAL, 0,9); break;
case INIT_LASTPOS : lcdx_printp_center( 2, strGet(STAT_POS) , MNORMAL, 0,9); break;
case INIT_ALLDATA : lcdx_printp_center( 2, strGet(STAT_ALL) , MNORMAL, 0,9); break;
}
 
lcdx_printp_center( 4, strGet(DELETE), MNORMAL, 0,4); // "löschen?"
 
lcd_printp_at( 0, 7, strGet(START_LASTPOS2) , MNORMAL); // Keyline: "löschen Nein"
 
refresh = false;
}
 
//--------------------------------------
// Update vom Updatetool angefordert?
//--------------------------------------
if( PKT_CtrlHook() )
{
refresh = true;
}
 
//--------------------------------------
// loeschen
//--------------------------------------
if( get_key_press(1 << KEY_MINUS) )
{
clear_key_all();
return true; // Rueckgabe: true = loeschen
}
 
 
//--------------------------------------
// Ende
//--------------------------------------
if( get_key_press(1 << KEY_ENTER) )
{
clear_key_all();
return false; // Rueckgabe: false = nicht loeschen
}
}
}
 
 
 
//--------------------------------------------------------------
//--------------------------------------------------------------
void ctrl_osddata( uint8_t isdata, uint8_t initcode )
{
uint8_t key = 0;
 
if( !isdata ) ScrollBox_Push_P( MNORMAL, PSTR(" no data...") );
 
ScrollBox_SetKey( KEY_ENTER, " Del" );
 
do
{
key = ScrollBox_Show();
 
if( key == KEY_ENTER )
{
if( ask_delete_data(initcode) )
{
switch( initcode )
{
case INIT_STATISTIC: STAT_Init(); break;
case INIT_MKERROR: MKErr_Log_Init(); break;
case INIT_USERGPS: GPS_User_Init(); break;
}
 
set_beep ( 400, 0xffff, BeepNormal);
key = 0; // exit
}
else
{
lcd_cls();
ScrollBox_Refresh();
}
}
 
} while( key );
}
 
 
 
//--------------------------------------------------------------
// add_statistic_head()
//
// fuegt Basisdaten den OSD- und BL-Listen hinzu
//--------------------------------------------------------------
void add_statistic_head( void )
{
PKTdatetime_t dtlocal;
 
//---------------------------
// begin: date/time
//---------------------------
UTCdatetime2local( &dtlocal, &Config.OSD_Statistic.begin_StatTime );
ScrollBox_Push_P( MNORMAL, PSTR("Begin: %02u:%02u %02u.%02u."),
(uint16_t)(dtlocal.seconds/3600), (uint16_t)(dtlocal.seconds/60%60),
//lcd_printp_at( 3, 3, strGet(DELETEDATA), MNORMAL); // "Daten loeschen?"
dtlocal.day, dtlocal.month
);
 
//---------------------------
// end: date/time
//---------------------------
UTCdatetime2local( &dtlocal, &Config.OSD_Statistic.end_StatTime );
ScrollBox_Push_P( MNORMAL, PSTR("End: %02u:%02u %02u.%02u."),
(uint16_t)(dtlocal.seconds/3600), (uint16_t)(dtlocal.seconds/60%60),
dtlocal.day, dtlocal.month
);
 
//+++++++++++++++++++++++++++
// TRENNER
//+++++++++++++++++++++++++++
ScrollBox_PushLine();
}
 
 
 
//--------------------------------------------------------------
// zeigt aufgezeichnete OSD-Daten an
//--------------------------------------------------------------
void OSDDATA_Statistics( void )
{
int16_t v;
osd_BLmax_t blmax;
 
lcd_cls();
 
if( !ScrollBox_Create(25) )
return; // kein RAM mehr
 
//+++++++++++++++++++++++++++
// max. der BL's ermitteln
//+++++++++++++++++++++++++++
calc_BLmax( &blmax );
 
ScrollBox_Push_P( MINVERS, PSTR(" OSD Data") );
 
//---------------------------
// Basisanzeige der Stat-Liste
//---------------------------
add_statistic_head();
 
//---------------------------
// last Flytime
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR(" Last Fly %02u:%02u min"), (Config.OSD_Statistic.last_FlyTime/60), (Config.OSD_Statistic.last_FlyTime%60) );
 
//---------------------------
// max. Altitude
//---------------------------
v = Config.OSD_Statistic.max_Altimeter / (30 / AltimeterAdjust);
ScrollBox_Push_P( MNORMAL, PSTR("%cAltitude%7d m"), SYMBOL_MAX, v );
 
//---------------------------
// max. Distance
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%cDistance%7u m"), SYMBOL_MAX, Config.OSD_Statistic.max_Distance/10 );
 
//---------------------------
// max. Ground-Speed
//---------------------------
v = (uint16_t) (((uint32_t) Config.OSD_Statistic.max_GroundSpeed * (uint32_t) 90) / (uint32_t) 250);
ScrollBox_Push_P( MNORMAL, PSTR("%cGrnd.Speed%3.1d kmh"), SYMBOL_MAX, v );
 
//---------------------------
// max. Vert.-Speed
//---------------------------
v = Config.OSD_Statistic.max_TopSpeed;
v = (v*36/100); // cm/s -> km/h*10
ScrollBox_Push_P( MNORMAL, PSTR("%cVert.Speed%3.1d kmh"), SYMBOL_MAX, v );
 
 
//+++++++++++++++++++++++++++
// TRENNER
//+++++++++++++++++++++++++++
ScrollBox_PushLine();
 
 
//---------------------------
// Used Capacity
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR(" Capacity%7d mAh"), Config.OSD_Statistic.max_Capacity );
 
//---------------------------
// max. Current
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%cCurrent%6.1d A"), SYMBOL_MAX, Config.OSD_Statistic.max_Current );
 
//---------------------------
// avg. Current
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%cCurrent%6.1d A"), SYMBOL_AVG, (uint8_t)(Config.OSD_Statistic.avg_Current/100) );
 
//---------------------------
// BL-Detected
//---------------------------
//ScrollBox_Push_P( MNORMAL, PSTR(" BL Detected%4d"), Config.OSD_Statistic.BL_Count );
 
//---------------------------
// max. BL-Current
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%cBL%1d Curr.%4.1u A"), SYMBOL_MAX, blmax.max_BL_Current_Index+1, blmax.max_BL_Current );
 
//---------------------------
// max. BL-Temp
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%cBL%1d Temp. %5u %cC"), SYMBOL_MAX, blmax.max_BL_Temp_Index+1, blmax.max_BL_Temp, SYMBOL_BIGDEGREE );
 
//---------------------------
// min. Voltage
//---------------------------
v = (Config.OSD_Statistic.min_UBat == 255) ? 0 : Config.OSD_Statistic.min_UBat;
ScrollBox_Push_P( MNORMAL, PSTR("%cVoltage%6.1d V"), SYMBOL_MIN, v );
 
 
//+++++++++++++++++++++++++++
// TRENNER
//+++++++++++++++++++++++++++
ScrollBox_PushLine();
 
 
//---------------------------
// max. RC-Quality
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%cRC-Quality%5d"), SYMBOL_MAX, Config.OSD_Statistic.max_RCQuality );
 
//---------------------------
// min. RC-Quality
//---------------------------
v = (Config.OSD_Statistic.min_RCQuality==255) ? 0 : Config.OSD_Statistic.min_RCQuality;
ScrollBox_Push_P( MNORMAL, PSTR("%cRC-Quality%5d"), SYMBOL_MIN, v );
 
 
//---------------------------
// max. Nick
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%cNick%11d %c"), SYMBOL_MAX, Config.OSD_Statistic.max_AngleNick, SYMBOL_SMALLDEGREE );
 
//---------------------------
// min. Nick
//---------------------------
v = (Config.OSD_Statistic.min_AngleNick==126) ? 0 : Config.OSD_Statistic.min_AngleNick;
ScrollBox_Push_P( MNORMAL, PSTR("%cNick%11d %c"), SYMBOL_MIN, v, SYMBOL_SMALLDEGREE );
 
//---------------------------
// max. Roll
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%cRoll%11d %c"), SYMBOL_MAX, Config.OSD_Statistic.max_AngleRoll, SYMBOL_SMALLDEGREE );
 
//---------------------------
// min. Roll
//---------------------------
v = (Config.OSD_Statistic.min_AngleRoll==126) ? 0 : Config.OSD_Statistic.min_AngleRoll;
ScrollBox_Push_P( MNORMAL, PSTR("%cRoll%11d %c"), SYMBOL_MIN, v, SYMBOL_SMALLDEGREE );
 
 
//+++++++++++++++++++++++++++
// TRENNER
//+++++++++++++++++++++++++++
ScrollBox_PushLine();
 
ctrl_osddata( true, INIT_STATISTIC );
 
ScrollBox_Destroy(); // free memory
}
 
 
 
//--------------------------------------------------------------
// zeigt aufgezeichnete BL-Daten an
//--------------------------------------------------------------
void OSDDATA_StatisticsBL( void )
{
uint8_t i;
osd_BLmax_t blmax;
 
lcd_cls();
 
#ifdef USE_OSD_SCREEN_DEBUG
if( !ScrollBox_Create(10 + (Config.OSD_Statistic.BL_Count*6)) )
return; // kein RAM mehr
#else
if( !ScrollBox_Create(10 + (Config.OSD_Statistic.BL_Count*4)) )
return; // kein RAM mehr
#endif
 
//+++++++++++++++++++++++++++
// max. der BL's ermitteln
//+++++++++++++++++++++++++++
calc_BLmax( &blmax );
 
ScrollBox_Push_P( MINVERS, PSTR(" BL Data") );
 
//---------------------------
// Basisanzeige der Stat-Liste
//---------------------------
add_statistic_head();
 
//---------------------------
// max. Current
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%cCurrent%6.1d A"), SYMBOL_MAX, Config.OSD_Statistic.max_Current );
 
//---------------------------
// avg. Current
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%cCurrent%6.1d A"), SYMBOL_AVG, (uint8_t)(Config.OSD_Statistic.avg_Current/100) );
 
//---------------------------
// BL-Detected
//---------------------------
//ScrollBox_Push_P( MNORMAL, PSTR("BL Detected %4d"), Config.OSD_Statistic.BL_Count );
 
//---------------------------
// max. BL-Current
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%cBL%1d Current%2.1u A"), SYMBOL_MAX, blmax.max_BL_Current_Index+1, blmax.max_BL_Current );
 
//---------------------------
// max. BL-Temp
//---------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%cBL%1d Temp. %5u %cC" ), SYMBOL_MAX, blmax.max_BL_Temp_Index+1, blmax.max_BL_Temp, SYMBOL_BIGDEGREE );
 
 
//+++++++++++++++++++++++++++
// TRENNER
//+++++++++++++++++++++++++++
ScrollBox_PushLine();
 
//---------------------------
// LIST: BL-Data
//---------------------------
if( Config.OSD_Statistic.BL_Count > 0 )
{
ScrollBox_Push_P( MINVERS, PSTR(" BL Data") );
 
for( i=0; i < Config.OSD_Statistic.BL_Count; i++)
{
ScrollBox_Push_P( MNORMAL, PSTR("%1d:%cCurrent%4.1u A"), (i+1), SYMBOL_MAX, (uint8_t)(Config.OSD_Statistic.BL[i].max_Current) );
ScrollBox_Push_P( MNORMAL, PSTR(" %cCurrent%4.1u A" ), SYMBOL_AVG, (uint8_t)(Config.OSD_Statistic.BL[i].avg_Current/100) );
ScrollBox_Push_P( MNORMAL, PSTR(" %cTemp.%8u %cC" ), SYMBOL_MAX, (uint8_t)(Config.OSD_Statistic.BL[i].max_Temp), SYMBOL_BIGDEGREE );
 
#ifdef USE_OSD_SCREEN_DEBUG
ScrollBox_Push_P( MNORMAL, PSTR(" RX-Pkg.%7u"), Config.OSD_Statistic.BL[i].count );
//ScrollBox_Push_P( MNORMAL, PSTR(" MC%12u A" ), Config.OSD_Statistic.BL[i].avg_Current );
#endif
 
//+++++++++++++++++++++++++++
// TRENNER
//+++++++++++++++++++++++++++
ScrollBox_PushLine();
}
}
 
ctrl_osddata( true, INIT_STATISTIC );
 
ScrollBox_Destroy(); // free memory
}
 
 
 
//--------------------------------------------------------------
// zeigt aufgezeichnete Benutzer-GPS-Daten an
//--------------------------------------------------------------
void OSDDATA_UserGPS( void )
{
uint8_t i;
uint8_t isdata = 0;
PKTdatetime_t dtlocal;
 
lcd_cls();
 
if( !ScrollBox_Create( (MAX_GPS_USER*4) + 5 ) ) // Speicher reservieren
return; // kein RAM mehr
 
ScrollBox_Push_P( MINVERS, PSTR(" GPS Userdata") );
 
for( i=0; i<MAX_GPS_USER; i++)
{
if( Config.GPS_User[i].GPSData.Latitude != 0) // nur gueltige GPS-Koordinaten anzeigen
{
isdata = 1;
 
ScrollBox_PushLine();
 
//-----------------------------------
// Zeile 1: Nummer / Datum / Zeit
//-----------------------------------
UTCdatetime2local( &dtlocal, &Config.GPS_User[i].timestamp );
ScrollBox_Push_P( MNORMAL, PSTR("%02u.%02u.%04u %02u:%02u:%02u"),
dtlocal.day, dtlocal.month, dtlocal.year,
(uint16_t)(dtlocal.seconds/3600), (uint16_t)(dtlocal.seconds/60%60), (uint16_t)(dtlocal.seconds%60)
);
 
/*
sec = (uint16_t)(Config.GPS_User[i].timestamp.seconds); // Sekunden
ScrollBox_Push_P( MNORMAL, PSTR("%02u.%02u.%04u %02u:%02u:%02u"),
Config.MKErr_Log[i].set_Time.day, Config.MKErr_Log[i].set_Time.month, Config.MKErr_Log[i].set_Time.year,
(uint16_t)(sec/3600), (uint16_t)(sec/60%60), (uint16_t)(sec%60)
);
 
// Alternative Anzeige von Datum/Zeit:
min = (uint16_t)(Config.GPS_User[i].timestamp.seconds/60); // Minuten
ScrollBox_Push_P( MNORMAL, PSTR("%02u: %02u:%02u %02u.%02u.%02u"), i+1,
(uint16_t)(min/60), (uint16_t)(min%60),
Config.GPS_User[i].timestamp.day, Config.GPS_User[i].timestamp.month, Config.GPS_User[i].timestamp.year%100
);
 
// Alternative Anzeige von Datum/Zeit:
ScrollBox_Push_P( MNORMAL, PSTR("%02u: %02u:%02u %02u.%02u.%04u"), i+1,
(uint16_t)(min/60), (uint16_t)(min%60),
Config.GPS_User[i].timestamp.day, Config.GPS_User[i].timestamp.month, Config.GPS_User[i].timestamp.year
);
 
// Alternative Anzeige von Datum/Zeit:
ScrollBox_Push_P( MNORMAL, PSTR("%02u: %02u.%02u.%04u %02u:%02u"), i+1,
Config.GPS_User[i].timestamp.day, Config.GPS_User[i].timestamp.month, Config.GPS_User[i].timestamp.year,
(uint16_t)(min/60), (uint16_t)(min%60)
);
*/
//-----------------------------------
// Zeile 2: Hoehe (GPS/Barymetrisch)
//-----------------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%7d mG%5.1d mB"),
(Config.GPS_User[i].GPSData.Altitude/1000), // GPS-Hoehe in m
(Config.GPS_User[i].Altimeter / (3 / AltimeterAdjust)) ); // Barymetrische-Hoehe in dm
 
//-----------------------------------
// Zeile 3: Koordinaten (Lat/Long)
//-----------------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%3.6ld%3.6ld"),
Config.GPS_User[i].GPSData.Latitude/10,
Config.GPS_User[i].GPSData.Longitude/10 );
}
}
ScrollBox_PushLine();
 
 
ctrl_osddata( isdata, INIT_USERGPS );
 
ScrollBox_Destroy(); // free memory
}
 
 
 
//--------------------------------------------------------------
// OSDDATA_MkError()
//
// zeigt aufgezeichnete MK-Fehler an
//--------------------------------------------------------------
void OSDDATA_MkError( void )
{
uint8_t i;
uint8_t isdata = 0;
PKTdatetime_t dtlocal;
 
lcd_cls();
 
if( !ScrollBox_Create( (MAX_MKERR_LOG*4) + 3 ) ) // Speicher reservieren
return; // kein RAM mehr
 
ScrollBox_Push_P( MINVERS, PSTR(" MK Errors") );
 
for( i=0; i<MAX_MKERR_LOG; i++)
{
if( Config.MKErr_Log[i].Errorcode != 0) // nur vorhandene Errorcodes anzeigen
{
isdata = 1;
 
ScrollBox_PushLine();
 
//-----------------------------------
// Zeile 1: Zeit / Datum
//-----------------------------------
UTCdatetime2local( &dtlocal, &Config.MKErr_Log[i].set_Time );
ScrollBox_Push_P( MNORMAL, PSTR("%02u:%02u:%02u %02u.%02u.%04u"),
(uint16_t)(dtlocal.seconds/3600), (uint16_t)(dtlocal.seconds/60%60), (uint16_t)(dtlocal.seconds%60),
dtlocal.day, dtlocal.month, dtlocal.year
);
 
//-----------------------------------
// Zeile 2: Error Code
//-----------------------------------
ScrollBox_Push_P( MNORMAL, PSTR(" Code %02u"), Config.MKErr_Log[i].Errorcode );
 
//-----------------------------------
// Zeile 3: Error Text
//-----------------------------------
ScrollBox_Push_P( MNORMAL, PSTR("%20S"), pgm_read_word(&mkerrortext[Config.MKErr_Log[i].Errorcode]) );
}
}
ScrollBox_PushLine();
 
ctrl_osddata( isdata, INIT_MKERROR );
 
ScrollBox_Destroy(); // free memory
}
 
 
 
//--------------------------------------------------------------
// OSDDATA_ShowLastGPSPosition()
//
// zeigt die letzte aufgezeichnete GPS-Position an.
// Möglichkeit zum loeschen der GPS-Pos ist vorhanden.
//--------------------------------------------------------------
void OSDDATA_ShowLastGPSPosition( void )
{
uint8_t redraw = true;
 
clear_key_all();
 
while( true )
{
//------------------------
// Screen neu zeichnen
//------------------------
if( redraw )
{
PKT_TitlePKT(); // Titel mit PKT-Version anzeigen (und clearcsreen)
 
lcdx_printp_at(3, 1, strGet(START_LASTPOS) , MNORMAL, 0,4); // "Letzte Position"
lcdx_printp_at(3, 2, strGet(START_LASTPOS3), MNORMAL, 0,4); // "Google Eingabe"
 
//----
lcd_frect( 0, (4*7)+4, 127, 7, 1); // Rect: Invers
lcdx_printp_at(1, 3, strGet(START_LASTPOS1), MINVERS, 0,8); // "Breitengr Längengr"
 
writex_gpspos( 1, 4, Config.LastLatitude , MNORMAL, 0,10); // Anzeige: Breitengrad
writex_gpspos( 12, 4, Config.LastLongitude, MNORMAL, -1,10); // Anzeige: Laengengrad
 
lcd_rect( 0, (3*8)+7, 127, (2*8)+4, 1); // Rahmen
 
//lcd_printp_at(0, 7, strGet(START_LASTPOS2), MNORMAL); // Keyline
lcd_printp_at(12, 7, strGet(KEYLINE4) , MNORMAL); // Keyline
lcd_printp_at(18, 7, PSTR("Del") , MNORMAL); // Keyline
 
redraw = false;
}
 
 
//------------------------
// LiPo Spannung zeigen
//------------------------
show_Lipo();
 
 
//------------------------
// Tasten abfragen
//------------------------
if( get_key_press (1 << KEY_ESC) ) // Ende
{
break;
}
 
if( (get_key_press (1 << KEY_ENTER)) ) // Del
{
if( ask_delete_data(INIT_LASTPOS) )
{
set_beep ( 400, 0xffff, BeepNormal);
WriteLastPosition( 0x00000000, 0x00000000 ); // letzte GPS Position loeschen
break; // und beenden
}
redraw = true;
}
 
 
//------------------------
// ggf. auf PKT-Update reagieren
//------------------------
if( PKT_CtrlHook() )
{
redraw = true;
}
}
 
clear_key_all();
}
 
 
 
 
//--------------------------------------------------------------
// OSDDATA_ClearAllData()
//
// löscht alle erhobenen Daten
//--------------------------------------------------------------
void OSDDATA_ClearAllData( void )
{
if( ask_delete_data( INIT_ALLDATA ) )
{
STAT_Init();
MKErr_Log_Init();
GPS_User_Init(); // loeschen: User GPS
WriteLastPosition( 0x00000000, 0x00000000 ); // loeschen: letzte GPS Position
 
set_beep ( 400, 0xffff, BeepNormal);
}
}
 
 
 
//--------------------------------------------------------------
// Menue fuer osddata
//--------------------------------------------------------------
#ifdef USE_OSDDATA
void Menu_OSDData( void )
{
//---------------
// Create
//---------------
MenuCtrl_Create();
MenuCtrl_SetTitleFromParentItem(); // "OSD Daten"
//MenuCtrl_SetTitle_P( PSTR("OSD Daten") );
//MenuCtrl_SetShowBatt( true );
 
 
//---------------
// Menuitems
//---------------
MenuCtrl_PushML2_P( ID_SHOWSTATISTIK , MENU_ITEM, &OSDDATA_Statistics, SHOWSTATISTIK_de , SHOWSTATISTIK_en );
MenuCtrl_PushML2_P( ID_SHOWBLSTATISTIK, MENU_ITEM, &OSDDATA_StatisticsBL, SHOWBLSTATISTIK_de, SHOWBLSTATISTIK_en );
MenuCtrl_PushML2_P( ID_SHOWMKERROR , MENU_ITEM, &OSDDATA_MkError, SHOWMKERROR_de , SHOWMKERROR_en );
MenuCtrl_PushML2_P( ID_SHOWUSERGPS , MENU_ITEM, &OSDDATA_UserGPS, SHOWUSERGPS_de , SHOWUSERGPS_en );
MenuCtrl_PushML2_P( ID_SHOWLASTGPS , MENU_ITEM, &OSDDATA_ShowLastGPSPosition, SHOWLASTGPS_de , SHOWLASTGPS_en );
MenuCtrl_PushML2_P( ID_CLEARALLDATA , MENU_ITEM, &OSDDATA_ClearAllData, CLEARALLDATA_de , CLEARALLDATA_en );
 
//---------------
// Control
//---------------
MenuCtrl_Control( MENUCTRL_EVENT );
 
//---------------
// Destroy
//---------------
MenuCtrl_Destroy();
}
#endif
 
 
Property changes:
Added: svn:mime-type
+text/plain
\ No newline at end of property