0,0 → 1,825 |
/***************************************************************************** |
* Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de * |
* Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net * |
* Copyright (C) 2011 Christian "Cebra" Brandtner, brandtner@brandtner.net * |
* Copyright (C) 2011 Harald Bongartz * |
* * |
* 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. * |
* * |
* * |
* Credits to: * |
* Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN * |
* http://www.mikrokopter.de * |
* Gregor "killagreg" Stobrawa for his version of the MK code * |
* Thomas Kaiser "thkais" for the original project. See * |
* http://www.ft-fanpage.de/mikrokopter/ * |
* http://forum.mikrokopter.de/topic-4061-1.html * |
* Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code * |
* http://www.mylifesucks.de/oss/c-osd/ * |
* Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility* |
*****************************************************************************/ |
|
//############################################################################ |
//# HISTORY mkbase.c |
//# |
//# 21.06.2014 OG |
//# - chg: searchMK() schaltet am Ende wieder auf die NC um sofern diese |
//# vorhanden ist |
//# |
//# 19.05.2014 OG |
//# - chg: MKVersion_Setting_print() umgestellt auf strGet(STR_ERROR) fuer |
//# Multi-Sprachenunterstuetzung |
//# |
//# 14.05.2014 OG |
//# - chg: include "paramset.h" geaendert auf "../mksettings/paramset.h" |
//# |
//# 13.05.2014 OG |
//# - chg: MK_Info() - del: MKINFO_AUTO_REFRESH (nicht mehr unterstuetzt) |
//# - chg: MK_Setting_write() - del: unused variable 'lsetting' |
//# |
//# 17.04.2014 OG |
//# - chg: MK_Setting_load - Ansprechverhalten verbessert wenn Windows |
//# Mikrokoptertool aktiv ist |
//# |
//# 29.03.2014 OG |
//# - del: MK_Show_LastGPS_Position() -> jetzt: OSDDATA_ShowLastGPSPosition()/osddata.c |
//# |
//# 28.03.2014 OG |
//# - add: MK_Show_LastGPS_Position() - ehemals in main.c |
//# |
//# 24.03.2014 OG |
//# - chg: searchMK(): doppeltes MK_SwitchToNC() um evtl. vorhandene NC |
//# zuverlaessiger zu erkennen |
//# - fix: searchMK(): RetVal initialisiert |
//# - chg: Default-Anzeigezeit von MK_Info() in searchMK() auf 5 Sek. reduziert |
//# |
//# 21.02.2014 OG |
//# - fix: MKVersion_Setting_print() Anzeige der Settings-Nummer gekuerzt |
//# |
//# 20.02.2014 OG |
//#- chg: searchMK() auf aktuelle Version von PKT_TitlePKTVersion() angepasst |
//# |
//# 20.02.2014 OG |
//# - chg: MKVersion_Setting_print() um ein paar Bytes zu sparen |
//# - chg: MK_Info() um ein paar Bytes zu sparen |
//# |
//# 16.02.2014 OG |
//# - add: MK_SwitchToNC(), MK_SwitchToFC(), MK_SwitchToMAG(), MK_SwitchToGPS() |
//# - add: MK_Setting_write(), MK_Setting_change() |
//# - chg: umbenannt: MK_load_setting() zu MK_Setting_load() |
//# |
//# 13.02.2014 OG |
//# - add: MKVersion_Cmp() (Anleitung bei der Funktion beachten!) |
//# - del: WrongFCVersion |
//# |
//# 12.02.2014 OG |
//# - chg: verschiedene Verbesserungen an MK_Info(), MK_load_settings(), searckMK() |
//# |
//# 10.02.2014 OG |
//# - add: MKVersion_Setting_print() |
//# |
//# 09.02.2014 OG |
//# - add: MK_Info() |
//# |
//# 08.02.2014 OG |
//# - chg: searckMK() Anpassung an MKVersion |
//# - chg: MK_load_setting() Anpassung an MKVersion und Parameter geaendert |
//# - add: MKVersion_Init(), MKVersion_print_at() |
//# |
//# 03.02.2014 OG |
//# - chg: Titelanzeige in searchMK() umgestellt auf PKT_ShowTitlePKTVersion() |
//# - chg: kleine Aenderung in der Anzeige "für FC..." in searchMK() |
//# |
//# 29.01.2014 OG |
//# - Ausgliederungen aus main.c: MK_load_setting(), searchMK() |
//############################################################################ |
|
|
#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 <util/atomic.h> |
#include <avr/wdt.h> |
#include <avr/eeprom.h> |
|
|
//#include "../lipo/lipo.h" |
#include "../main.h" |
#include "../lipo/lipo.h" |
#include "../lcd/lcd.h" |
#include "../uart/usart.h" |
|
#include "../uart/uart1.h" |
#include "../mk-data-structs.h" |
//#include "../menu.h" |
#include "../timer/timer.h" |
#include "../eeprom/eeprom.h" |
#include "../messages.h" |
#include "../utils/scrollbox.h" |
#include "../utils/xutils.h" |
#include "../pkt/pkt.h" |
#include "../mksettings/paramset.h" |
#include "mkbase.h" |
|
|
|
//---------------------------- |
// MK-Versionsinformationen |
// global verfuegbar |
//---------------------------- |
MKVersion_t MKVersion; |
|
uint8_t cmd; |
|
|
//############################################################################################# |
//# 1. MKVersion |
//############################################################################################# |
|
|
//-------------------------------------------------------------- |
// MKVersion_Init() |
// |
// initialisiert MKVersion auf 0 |
//-------------------------------------------------------------- |
void MKVersion_Init( void ) |
{ |
memset( &MKVersion, 0, sizeof(MKVersion_t) ); |
} |
|
|
|
//-------------------------------------------------------------- |
// value = MKVersion_Cmp( FC/NCver, SWMajor,SWMinor,SWPatch ) |
// |
// Vergleicht eine uebergebene FC/NC-Version mit der vom MK |
// ermittelten Version |
// |
// Parameter: |
// |
// FC/NCver: MKVersion.FCVer oder MKVersion.NCVer |
// |
// SWMajor,SWMinor,SWPatch: siehe nachfolgendes... |
// |
//--- |
// Beispiel aus osd.c/OSD_MK_GetData(): |
// |
// v = MKVersion_Cmp( MKVersion.NCVer, 0,30,'g' ); // pruefe auf NC-Version "0.30g" |
// |
// if( v && (v >= GIVEN_VERSION) ) // wenn aktuelle NC-Version >= "0.30g"... |
// { ... |
// |
// Sowas geht auch: |
// |
// if( v && (v == GIVEN_VERSION) ) // nur wenn aktuelle NC-Version == "0.30g"... |
// |
// oder: |
// |
// if( v && (v < GIVEN_VERSION) ) // nur wenn aktuelle NC-Version kleiner als "0.30g"... |
// |
//--- |
// Warum "if( v && ..." ? |
// |
// Wenn das PKT keine FC/NC-Version ermitteln konnte, und somit kein |
// Vergleich moeglich ist, gibt MKVersion_Cmp() false (=0) zurueck! |
//-------------------------------------------------------------- |
uint8_t MKVersion_Cmp( Version_t ver, unsigned char SWMajor, unsigned char SWMinor, unsigned char SWPatch ) |
{ |
SWPatch = SWPatch -'a'; |
|
if( ver.SWMajor > 0 || ver.SWMinor > 0 ) // NC/FC Version erkannt? |
{ |
if( (ver.SWMajor == SWMajor) && (ver.SWMinor == SWMinor) && (ver.SWPatch == SWPatch) ) |
return VERSION_EQUAL; // ==2 |
|
if( ver.SWMajor != SWMajor ) |
{ |
if( ver.SWMajor < SWMajor ) |
return VERSION_LOWER; // ==1 |
else |
return VERSION_GREATER; // ==3 |
} |
|
if( ver.SWMinor != SWMinor ) |
{ |
if( ver.SWMinor < SWMinor ) |
return VERSION_LOWER; // ==1 |
else |
return VERSION_GREATER; // ==3 |
} |
|
if( ver.SWPatch < SWPatch ) |
return VERSION_LOWER; // ==1 |
else |
return VERSION_GREATER; // ==3 |
} |
return VERSION_NO; // ==0 |
} |
|
|
|
//-------------------------------------------------------------- |
// MKVersion_print_at() |
// |
// zeigt die aktuelle FC, NC Version auf dem LCD an |
// |
// Parameter: |
// what: NC, FC, |
//-------------------------------------------------------------- |
void MKVersion_print_at( uint8_t x, uint8_t y, uint8_t what, uint8_t drawmode, int8_t xoffs, int8_t yoffs ) |
{ |
const char *mask = PSTR("%1u.%02u%c"); |
const char *nostr = PSTR("-----"); |
|
switch(what) |
{ |
case FC: if( MKVersion.FCVer.SWMajor > 0 || MKVersion.FCVer.SWMinor > 0 ) |
lcdx_printf_at_P( x, y, drawmode, xoffs, yoffs, mask, MKVersion.FCVer.SWMajor, MKVersion.FCVer.SWMinor, MKVersion.FCVer.SWPatch+'a' ); |
else |
lcdx_printp_at( x,y, nostr, drawmode, xoffs, yoffs); |
break; |
|
case NC: if( (MKVersion.NCVer.SWMajor != 0) || (MKVersion.NCVer.SWMinor != 0) ) |
lcdx_printf_at_P( x, y, drawmode, xoffs, yoffs, PSTR("%1u.%02u%c"), MKVersion.NCVer.SWMajor, MKVersion.NCVer.SWMinor, MKVersion.NCVer.SWPatch+'a' ); |
else |
lcdx_printp_at( x,y, nostr, drawmode, xoffs, yoffs); |
break; |
} |
} |
|
|
|
//-------------------------------------------------------------- |
// MKVersion_Setting_print( y, drawmode, xoffs,yoffs) |
// |
// Zeigt das aktuelle MK-Setting aus MKVersion zentriert in der |
// Zeile y auf dem PKT-Screen an |
//-------------------------------------------------------------- |
void MKVersion_Setting_print( uint8_t y, uint8_t drawmode, uint8_t xoffs, uint8_t yoffs ) |
{ |
char buffer[18]; // String Buffer fuer eine Zeile |
|
if( MKVersion.mksetting == 0 ) |
xsnprintf_P( buffer, 18, PSTR("* %S *"), strGet(STR_ERROR) ); // FC Setting konnte NICHT gelesen werden |
|
else if( MKVersion.mksetting != 0 && MKVersion.paramsetOK ) // FC-Setting wurde gelesen... |
xsnprintf_P( buffer, 18, PSTR("%u %s"), MKVersion.mksetting, MKVersion.mksettingName ); // ... passende FC-Reversion -> Nummer und Name anzeigen |
|
else |
xsnprintf_P( buffer, 18, PSTR("%u"), MKVersion.mksetting ); // ... aber FALSCHE FC-Version -> nicht den Namen anzeigen (nur die Nummer) |
|
lcdx_print_center( y, (unsigned char *)buffer, drawmode, xoffs,yoffs); // Ausgabe Setting-Name (zentriert) |
} |
|
|
|
|
//############################################################################################# |
//# 2. Sonstiges - MK-Suche, Settings laden, MK-Info |
//############################################################################################# |
|
#define SWITCH_DELAY 25 // alt 50 |
|
//-------------------------------------------------------------- |
//-------------------------------------------------------------- |
void MK_SwitchToNC( void ) |
{ |
// switch to NC |
USART_putc (0x1b); |
USART_putc (0x1b); |
USART_putc (0x55); |
USART_putc (0xaa); |
USART_putc (0x00); |
current_hardware = NC; |
_delay_ms( SWITCH_DELAY ); |
} |
|
|
//-------------------------------------------------------------- |
//-------------------------------------------------------------- |
void MK_SwitchToFC( void ) |
{ |
// switch to FC |
cmd = 0x00; // 0 = FC, 1 = MK3MAG, 2 = MKGPS |
SendOutData('u', ADDRESS_NC, 1, &cmd, 1); |
current_hardware = FC; |
_delay_ms( SWITCH_DELAY ); |
} |
|
|
//-------------------------------------------------------------- |
//-------------------------------------------------------------- |
void MK_SwitchToMAG( void ) |
{ |
// switch to MK3MAG |
cmd = 0x01; // 0 = FC, 1 = MK3MAG, 2 = MKGPS |
SendOutData('u', ADDRESS_NC, 1, &cmd, 1); |
current_hardware = MK3MAG; |
_delay_ms( SWITCH_DELAY ); |
} |
|
|
//-------------------------------------------------------------- |
//-------------------------------------------------------------- |
void MK_SwitchToGPS( void ) |
{ |
// switch to MKGPS |
cmd = 0x02; // 0 = FC, 1 = MK3MAG, 2 = MKGPS |
SendOutData('u', ADDRESS_NC, 1, &cmd, 1); |
current_hardware = MKGPS; |
_delay_ms( SWITCH_DELAY ); |
} |
|
|
|
//-------------------------------------------------------------- |
// ret = MK_Setting_load( lsetting, &mk_param_struct, showerror) |
// |
// holt MK-Settings - es wird auf die FC umgeschaltet! |
//-------------------------------------------------------------- |
uint8_t MK_Setting_load( uint8_t lsetting, uint8_t timeout ) |
{ |
// timeout = 15 bis 20 ist meist ein guter Wert |
|
//MK_SwitchToFC(); |
|
mode = 'Q'; // Settings Request |
rxd_buffer_locked = FALSE; |
|
while( !rxd_buffer_locked && timeout ) |
{ |
MK_SwitchToFC(); |
SendOutData( 'q', ADDRESS_FC, 1, &lsetting, 1); // lsetting == 0xff -> aktuelles MK-Setting laden |
|
timer2 = 25; // timer ist ggf. belegt von MK_Info() -> versuchen wir es mit timer2.... |
while( timer2 > 0 && !rxd_buffer_locked ); |
|
timeout--; |
} |
|
mode = 0; |
|
// Initialisierungen |
paramsetInit(0); |
|
if( rxd_buffer_locked ) |
{ |
Decode64(); |
paramsetInit( (unsigned char *) pRxData ); // fuellt u.a. auch MKVersion.paramsetRevision |
} |
|
return MKVersion.mksetting; // wird von paramsetInit() gesetzt/initialisert |
} |
|
|
|
//-------------------------------------------------------------- |
//-------------------------------------------------------------- |
uint8_t MK_Setting_write( uint8_t wsetting, uint8_t timeout) |
{ |
//uint8_t timeout = 50; |
uint8_t setting; |
|
if( !MKVersion.paramsetOK ) |
{ |
return 0; // Error |
} |
|
//MK_SwitchToFC(); // ? |
|
setting = 0; |
mode = 'S'; // Settings |
|
rxd_buffer_locked = FALSE; |
|
while( !rxd_buffer_locked && timeout && !setting) |
{ |
SendOutData( 's', ADDRESS_FC, 2, &wsetting, 1, (pRxData+1), paramsetSize() ); // pRxData+1 = die mk_datastruct beginnt bei +1; bei 0 ist die Settingsnummer |
|
timer2 = 70; |
while( timer2 > 0 && !rxd_buffer_locked ); |
timeout--; |
|
if( rxd_buffer_locked ) |
{ |
Decode64(); |
setting = *pRxData; |
|
if( !setting ) |
rxd_buffer_locked = FALSE; |
} |
} |
|
setting = MK_Setting_load( 0xff, 15); // damit pRxData & MKVersion initialisiert sind |
|
return setting; |
} |
|
|
|
//-------------------------------------------------------------- |
//-------------------------------------------------------------- |
uint8_t MK_Setting_change( uint8_t setting ) |
{ |
uint8_t lsetting = 0; |
uint8_t wsetting = 0; |
|
lsetting = MK_Setting_load( setting, 20); |
|
if( lsetting == setting ) |
{ |
wsetting = MK_Setting_write( setting, 50); |
} |
|
/* |
//-------------------- |
// DEBUG... |
//-------------------- |
lcd_printf_at_P( 0, 1, MNORMAL, PSTR("load : %1u (req:%1u)"), lsetting, setting ); |
lcd_printf_at_P( 0, 2, MNORMAL, PSTR("write: %1u "), wsetting ); |
if( (setting != lsetting) || (setting != wsetting) ) |
set_beep( 1000, 0x0f0f, BeepNormal ); // Error |
timer2 = 500; while( timer2 > 0 ); |
*/ |
|
return wsetting; // 0 = Fehler; oder 1..5 = geschriebenes Setting |
} |
|
|
|
//-------------------------------------------------------------- |
// ok = searchMK( showMKInfo ) |
// |
// Parameter: |
// showMKInfo: true/false |
//-------------------------------------------------------------- |
uint8_t searchMK( uint8_t showMKInfo ) |
{ |
uint8_t timeout; |
//uint8_t setting; // aktuelles FC-Setting (1..5) |
uint8_t RetVal = false; |
uint8_t redraw = true; |
uint8_t searchbar_y; |
uint8_t searchbar_w = 0; |
|
|
MKVersion_Init(); |
|
//---------------- |
// Switch to NC |
//---------------- |
MK_SwitchToNC(); |
_delay_ms(50); // 24.03.2014 OG: manchmal wurde nicht auf eine vorhandene NC umgeschaltet |
MK_SwitchToNC(); // evtl. wird das durch doppeltes Senden verbessert |
|
//--------------------------------------- |
// MK-Suchscreen - Versionsabfrage NC |
//--------------------------------------- |
mode = 'V'; |
|
rxd_buffer_locked = FALSE; |
timeout = 50; |
|
//searchbar_y = 5*8-1; |
searchbar_y = 5*8+2; |
|
while( !rxd_buffer_locked ) |
{ |
//------------------------ |
// MK Suchscreen anzeigen |
//------------------------ |
if( redraw ) |
{ |
PKT_TitlePKT(); // Titel mit PKT-Version anzeigen (mit Lipo-Anzeige) |
lcdx_printp_center( 2, strGet(STR_PKT), MNORMAL, 0,2); // "PKT" |
lcdx_printp_at( 0, 3, strGet(START_SEARCHFC), MNORMAL, 0,8); // "suche Mikrokopter..." |
|
lcd_printp_at(12, 7, strGet(ENDE), MNORMAL); // Keyline |
|
lcd_rect ( 0, searchbar_y , 126, 8, 1); // Rahmen fuer Bar-Anzeige |
|
searchbar_w = 2; |
|
redraw = false; |
} |
|
//------------------------ |
// PKT-LiPo Anzeige |
//------------------------ |
show_Lipo(); |
|
//------------------------ |
// MK Datenanfrage |
//------------------------ |
SendOutData( 'v', ADDRESS_ANY, 0); // Versions-Anfrage an MK senden |
|
timer = 16; // kurze Verögerung fuer Datenanfrage und Fortschrittsbalken |
while( timer > 0 ); |
|
//------------------------ |
// Fortschrittsbalken |
//------------------------ |
lcd_frect( 2, searchbar_y+2, searchbar_w, 4, 1); // Fortschrittsbalken zeichnen... |
searchbar_w += 2; |
if( searchbar_w >= 125 ) |
{ |
searchbar_w = 0; |
lcd_frect( 2, searchbar_y+2, 123, 4, 0); |
} |
|
//------------------------ |
// Tasten abfragen |
//------------------------ |
if( get_key_press(1 << KEY_ESC) ) |
{ |
hardware = NO; |
return false; |
} |
|
//------------------------------------------ |
// Pruefe PKT-Update oder andere PKT-Aktion |
//------------------------------------------ |
if( PKT_CtrlHook() ) // Update vom Updatetool angefordert? |
{ |
redraw = true; |
} |
} |
|
|
|
//-------------------------- |
// MK gefunden? |
//-------------------------- |
if( rxd_buffer_locked ) |
{ |
Decode64(); |
|
//--- |
// TODO OG: testen mit entsprechendem Hardware Setup des MK's! |
//--- |
if( (rxd_buffer[1] - 'a') == ADDRESS_FC ) |
{ |
hardware = FC; |
current_hardware = hardware; |
MKVersion.isFC = true; |
RetVal = true; |
memcpy( &MKVersion.FCVer, (Version_t *) (pRxData), sizeof(Version_t) ); |
} |
|
if( (rxd_buffer[1] - 'a') == ADDRESS_NC ) |
{ |
hardware = NC; |
current_hardware = hardware; |
MKVersion.isNC = true; |
RetVal = true; |
memcpy( &MKVersion.NCVer, (Version_t *) (pRxData), sizeof(Version_t) ); |
} |
|
|
//-------------------------- |
// jetzt: Version der FC abfragen |
//-------------------------- |
if( hardware == NC ) |
{ |
MK_SwitchToFC(); |
|
mode = 'V'; |
rxd_buffer_locked = FALSE; |
timeout = 40; |
|
while( !rxd_buffer_locked && timeout) |
{ |
SendOutData( 'v', ADDRESS_FC, 0); |
timer = 20; |
while( timer > 0 ); |
timeout--; |
} |
|
//-------------------------- |
// FC gefunden! |
// -> Version kopieren |
//-------------------------- |
if( rxd_buffer_locked ) |
{ |
Decode64(); |
MKVersion.isFC = true; |
memcpy( &MKVersion.FCVer, (Version_t *) (pRxData), sizeof(Version_t) ); |
} |
} |
|
} // end: if( rxd_buffer_locked ) |
|
|
//--------------------------------------- |
// FC EEprom Version / Struktur pruefen |
//--------------------------------------- |
MK_Setting_load( 0xff, 15 ); // 0xff == aktuelles Parameterset holen; 15 == timeout; Ergebnisse in MKVersion |
|
mode = 0; |
rxd_buffer_locked = FALSE; |
|
if( MKVersion.isNC ) |
{ |
MK_SwitchToNC(); // wieder auf NC umschalten als default |
} |
|
|
if( MKVersion.paramsetOK ) // FC Revision OK? |
{ |
set_beep( 25, 0xffff, BeepNormal ); // kurzer Beep (FC-Revision ok) |
if( showMKInfo ) MK_Info( 500, true ); // Anzeige von MK_Info() max. 5 Sekunden (mit Settings-Refresh) |
} |
else // FC Revision nicht unterstuetzt... |
{ |
set_beep( 1000, 0xffff, BeepNormal ); // langer Error-Beep (FC-Revision nicht unterstuetzt) |
if( showMKInfo ) MK_Info( 1600, true ); // Anzeige von MK_Info() max. 16 Sekunden (mit Settings-Refresh) |
} |
|
|
//timer = 50; |
//while (timer > 0); |
|
get_key_press(KEY_ALL); |
|
return RetVal; |
|
} // searchMK() |
|
|
|
|
//-------------------------------------------------------------- |
// chg = MK_Info( displaytimeout, refreshSettings ) |
// |
// Parameter: |
// displaytimeout : 0 = kein autom. Timeout |
// n = Anzeige verschwindet automatisch nach n Zeit |
// (bei z.B. n=600 nach 6 Sekunden) |
// |
// refreshSettings: true/false |
// true = in bestimmten Zeitintervallen (RELOAD_SETTING_TIME) |
// wird MK_Setting_load() durchgeführt um ggf. einen Kopterwechsel |
// automatisch zu erkennen. |
// Dazu muss MKINFO_AUTO_REFRESH in main.h eingeschaltet sein! |
// |
// Rueckgabe: |
// hardwarechange: true/false |
//-------------------------------------------------------------- |
uint8_t MK_Info( uint16_t displaytimeout, uint8_t refreshSettings ) |
{ |
uint8_t redraw; |
uint8_t old_isFC; |
uint8_t old_isNC; |
|
old_isFC = MKVersion.isFC; |
old_isNC = MKVersion.isNC; |
|
|
//displaytimeout = 0; |
|
if( displaytimeout ) |
timer = displaytimeout; |
|
#define RELOAD_SETTING_TIME 350 // alle 0.35 sec neue Settings vom MK laden |
timer_get_tidata = RELOAD_SETTING_TIME; // ich brauche weitere timer... und bediene mich jetzt mal bei einem osd-timer |
// (timer2 ist belegt von MK_Setting_load) |
|
//get_key_press(KEY_ALL); |
|
|
redraw = true; |
|
while( true ) |
{ |
//------------------------------------------ |
// Screen neu zeichnen |
//------------------------------------------ |
if( redraw ) |
{ |
if( redraw != 2 ) |
lcd_cls(); |
|
show_Lipo(); // LiPo direkt anzeigen damit es nicht flackert |
|
lcd_frect( 0, 0, 101, 8, 1); // Headline: Box fill Black mit Platz fuer PKT-LiPo rechts |
lcdx_printp_at( 1, 0, PSTR("MK Info"), MINVERS, 0,0); // Titel |
|
if( MKVersion.isFC || MKVersion.isNC ) // MK gefunden... |
{ |
lcd_frect_round( 0, 30, 127, 22, 1, R2); // Fill: Anzeigebereich der Settings in Schwarz |
|
//-------------------- |
// FC-Version |
//-------------------- |
lcdx_printp_at( 0, 2, PSTR("FC:") , MNORMAL, 4,-5); |
MKVersion_print_at( 4, 2, FC , MNORMAL, 2,-5); |
|
//-------------------- |
// FC-Revision |
//-------------------- |
lcdx_printp_at( 12, 2, PSTR("Rev:"), MNORMAL, 5,-5); |
lcdx_printf_at_P( 17, 2, MNORMAL, 2,-5, PSTR("%03u"), MKVersion.paramsetRevision ); |
|
if( !MKVersion.paramsetOK ) |
lcdx_printp_at( 11, 3, PSTR(" Rev-ERR!"), MINVERS, 5,-4); // Fehler FC-Revision (nicht vom PKT unterstuetzt) |
else |
lcd_frect( 11*6+5, 3*8-4, 9*6, 8, 0); // ggf. Fehleranzeige loeschen (nach refreshSettings) |
|
|
//-------------------- |
// NC-Version |
//-------------------- |
lcdx_printp_at( 0, 3, PSTR("NC:") , MNORMAL, 4,-3); |
MKVersion_print_at( 4, 3, NC , MNORMAL, 2,-3); |
|
|
//-------------------- |
// aktuelles Setting |
//-------------------- |
lcdx_printp_center( 4, PSTR("MK Setting"), MINVERS, 0,1); // "MK Setting" (zentriert) |
|
//lcdx_printp_at( 5, 4, PSTR("MK Setting"), MINVERS, 4,1); |
MKVersion_Setting_print( 5, MINVERS, 0,3); |
} |
else // else: if( MKVersion.isFC || MKVersion.isNC ) // KEINEN MK gefunden... |
{ |
//PKT_Message_P( *text, error, timeout, beep, clearscreen ) |
PKT_Message_P( strGet(NOMKFOUND), false, 0, true, false ); // FEHLER! nodata (max. 8 Sekunden anzeigen) |
|
} // end: if( MKVersion.isFC || MKVersion.isNC ) |
|
|
//lcd_printp_at( 19, 7, strGet(OK), MNORMAL); // Keyline |
lcd_printp_at(12, 7, strGet(ENDE), MNORMAL); // Keyline |
|
if( displaytimeout == 0 ) |
lcd_printp_at( 0, 7, PSTR("Refresh"), MNORMAL); // Keyline: Refresh |
|
redraw = false; |
|
} // end: if( redraw ) |
|
|
//------------------------------------------ |
// PKT-LiPo Anzeige |
//------------------------------------------ |
show_Lipo(); |
|
|
//------------------------ |
// Tasten abfragen |
//------------------------ |
if( get_key_press(1 << KEY_MINUS) && (displaytimeout == 0) ) |
{ |
searchMK( false ); // false = zeige nicht MK_Info() an |
redraw = true; |
} |
|
if( get_key_short(1 << KEY_ESC) ) |
{ |
break; |
} |
|
|
//------------------------------------------ |
// Pruefe PKT-Update oder andere PKT-Aktion |
//------------------------------------------ |
if( PKT_CtrlHook() ) // Update vom Updatetool angefordert? |
{ |
redraw = true; |
} |
|
//------------------------------------------ |
// displaytimeout? |
//------------------------------------------ |
if( displaytimeout && !timer ) |
{ |
break; |
} |
|
} // end: while( true ) |
|
get_key_press(KEY_ALL); |
|
return( (old_isFC != MKVersion.isFC) || (old_isNC != MKVersion.isNC) ); |
|
} // MK_Info() |
|
|
|
Property changes: |
Added: svn:mime-type |
+text/plain |
\ No newline at end of property |