Subversion Repositories Projects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2136 - 1
/*****************************************************************************
2
 *   Copyright (C) 2008 Thomas Kaiser, thomas@ft-fanpage.de                  *
3
 *   Copyright (C) 2009 Peter "woggle" Mack, mac@denich.net                  *
4
 *   Copyright (C) 2013 Christian "Cebra" Brandtner, brandtner@brandtner.net *
5
 *   Copyright (C) 2011 Harald Bongartz                                      *
6
 *                                                                           *
7
 *   This program is free software; you can redistribute it and/or modify    *
8
 *   it under the terms of the GNU General Public License as published by    *
9
 *   the Free Software Foundation; either version 2 of the License.          *
10
 *                                                                           *
11
 *   This program is distributed in the hope that it will be useful,         *
12
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
13
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
14
 *   GNU General Public License for more details.                            *
15
 *                                                                           *
16
 *   You should have received a copy of the GNU General Public License       *
17
 *   along with this program; if not, write to the                           *
18
 *   Free Software Foundation, Inc.,                                         *
19
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.               *
20
 *                                                                           *
21
 *                                                                           *
22
 *   Credits to:                                                             *
23
 *   Holger Buss & Ingo Busker from mikrokopter.de for the MK project + SVN  *
24
 *                          http://www.mikrokopter.de                        *
25
 *   Gregor "killagreg" Stobrawa for his version of the MK code              *
26
 *   Thomas Kaiser "thkais" for the original project. See                    *
27
 *                          http://www.ft-fanpage.de/mikrokopter/            *
28
 *                          http://forum.mikrokopter.de/topic-4061-1.html    *
29
 *   Claas Anders "CaScAdE" Rathje for providing the font and his C-OSD code *
30
 *                          http://www.mylifesucks.de/oss/c-osd/             *
31
 *   Harald Bongartz "HaraldB" for providing his Ideas and Code for usibility*
32
 *****************************************************************************/
33
//############################################################################
34
//# HISTORY  eeprom.c
35
//#
36
//# 03.08.2015 CB
37
//# - chg: Obsolete Parameter geändert und für FollowMe verwendet, EEprom Version bleibt gleich
38
//#        Parameter FM_Refresh in FM_Azimuth geändert
39
//#        Parameter hyst_u_min in FM_Distance geändert
40
//#        Initialisierung der neuen Parameter hinzugefügt
41
//#
42
//# 17.06.2014 OG
43
//# - chg: ReadParameter() - Updatecode auf 139
44
//#
45
//# 13.06.2014 OG
46
//# - chg: Delete_EEPROM(() Unterstuetzung Config.PKTOffTimeout (ehemals LCD_DisplayMode)
47
//#
48
//# 30.05.2014 OG
49
//# - chg: Delete_EEPROM() Config.Lipo_UOffset auf 10000 gesetzt (vorher 8500)
50
//#
51
//# 26.05.2014 OG
52
//# - chg: Config.LCD_DisplayMode als "OBSOLETE" markiert
53
//#
54
//# 14.05.2014 OG
55
//# - chg: include "../mk/paramset.h" geaendert auf "../mksettings/paramset.h"
56
//#
57
//# 07.05.2014 OG
58
//# - chg: EEpromversion erhoeht auf 138
59
//#        -> keine neuen Parameter, neue Version nur fuer geanderte
60
//#           Initialisierung von MKParam_Favs
61
//# - fix: ReadParameter() - Vorbelegung von Config.MKParam_Favs von 255 auf 0 geaendert
62
//#        ab EEprom-Version 138
63
//# - fix: Delete_EEPROM() - Vorbelegung von Config.MKParam_Favs von 255 auf 0 geaendert
64
//# - fix: ReadParameter() - Kommentare zu Version 136 und 137 korrigiert
65
//#        bzgl. der PKT-Versionsangabe und Datum ergaenzt
66
//#
67
//# 06.04.2014 OG
68
//# - chg: ReadParameter(): umgestellt auf lcdx_printp_center()
69
//# - chg: EEpromversion erhoeht auf 137
70
//# - add: ReadParameter(): upgrade Config.Wlan_HomeSSID, Config.Wlan_HomePassword
71
//# - add: ReadParameter(): upgrade Config.UseBLE, Config.MKParam_Favs
72
//# - add: Delete_EEPROM(): init von Config.Wlan_HomeSSID, Config.Wlan_HomePassword
73
//#
74
//# 01.04.2014 OG
75
//# - add: Delete_EEPROM(): init von Config.UseBLE
76
//# - add: Delete_EEPROM(): init von Config.MKParam_Favs
77
//#
78
//# 27.03.2014 OG
79
//# - chg: ReadParameter() Niederländisch wird auf Englisch umgeschaltet
80
//#         -> Vorbereitung zum entfernen der Niederländischen Sprache
81
//#
82
//# 11.02.2014 Cebra
83
//# - add: Delete EEProm: Config.OSD_ShowCellU = false;
84
//#
85
//# 03.02.2014 OG
86
//# - add: Config.OSD_ShowCellU in ReadParameter (EEpromversion 0x87)
87
//#
88
//# 30.01.2014 OG
89
//# - add: Unterstuetzung fuer USE_BLUETOOTH
90
//#
91
//# 07.07.2013 OG
92
//# - chg: Strings fuer WLan gekuerzt
93
//#
94
//# 04.07.2013 Cebra
95
//# - add: neue Parameter fuer Wlan; EEpromversion erhoeht auf 0x85
96
//#
97
//# 04.07.2013 OG
98
//# - add: Config.OSD_UseScreen; Epromversion erhoeht auf 0x84
99
//#
100
//# 03.07.2013 OG
101
//# - chg: ReadParameter() - PKT-Upgrade restrukturiert bzgl. inkrementelle
102
//#        Updates vorheriger Versionen
103
//#
104
//# 02.07.2013 Cebra
105
//# - add: neue Parameter fuer Wlan; EEpromversion erhoeht auf 83
106
//#
107
//# 02.07.2013 OG
108
//# - chg: frei geworden: Config.OSD_HomeMKView (nicht mehr benoetigt)
109
//#
110
//# 26.06.2013 OG
111
//# - chg: frei geworden: Config.PKT_StartInfo (nicht mehr benoetigt)
112
//#
113
//# 24.06.2013 OG
114
//# - fix: ReadParameter(): ergaenzt um bt_fixname() um ggf. ungueltige
115
//#        Zeichen im Bluetooth-Namen zu eliminieren
116
//#
117
//# 23.06.2013 OG
118
//# - chg: Delete_EEPROM(): Default von Config.Lipo_UOffset von 6000 auf 8500 gesetzt
119
//# - chg: Delete_EEPROM(): Default von Config.bt_name auf "PKT" gekuerzt
120
//# - chg: Delete_EEPROM(): Config.bt_name -> nicht mehr mit Leerzeichen auffuellen!
121
//#
122
//# 20.06.2013 CB
123
//# - chg: EEPROM Versionsänderung auf 82 wegen Wechsel LCD_Orientation zu OSD_ShowMKSetting
124
//#
125
//# 15.06.2013 OG
126
//# - chg: Config.LCD_ORIENTATION zu Config.OSD_ShowMKSetting
127
//#
128
//# 13.06.2013 OG
129
//# - fix: Config.PKT_Accutyp hinzugefuegt in Delete_EEPROM()
130
//# - chg: Default GPS-LastPosition auf 0/0 gesetzt in Delete_EEPROM()
131
//# - chg: Default Config.PKT_StartInfo auf false gesetzt in Delete_EEPROM()
132
//# - chg: Code Layout
133
//#
134
//# 31.05.2013 CB
135
//# - chg: EEPROM Strukturänderung auf Version 81, Versionsanpassung angepasst
136
//#
137
//# 05.05.2013 Cebra
138
//# - add: PKT Zeitsetup EEPROM Parameter
139
//# 28.03.2013 CB
140
//# - add: save and upgrade OSD_Statistic, GPS_User, MKErr_Log in EEProm structure variable
141
//############################################################################
142
 
143
#include "../cpu.h"
144
#include <avr/io.h>
145
#include <avr/pgmspace.h>
146
#include <util/delay.h>
147
#include <stdio.h>
148
#include <stdlib.h>
149
#include <string.h>
150
#include <stdarg.h>
151
#include <avr/interrupt.h>
152
#include <avr/eeprom.h>
153
#include <stdbool.h>
154
#include <avr/wdt.h>
155
#include "../lcd/lcd.h"
156
#include "../main.h"
157
#include "../timer/timer.h"
158
#include "eeprom.h"
159
#include "../wi232/Wi232.h"
160
#include "../setup/setup.h"
161
#include "../bluetooth/bluetooth.h"
162
#include "../mk-data-structs.h"
163
#include "../connect.h"
164
#include "../tracking/ng_servo.h"
165
#include "../tracking/tracking.h"
166
#include "../osd/osd.h"
167
#include "../uart/uart1.h"
168
#include "../messages.h"
169
#include "../osd/osddata.h"
170
#include "../mksettings/paramset.h"
171
 
172
//------------------------------------------------------------------------------------------
173
 
174
ST EEMEM EEStruct;
175
 
176
ST Config;
177
 
178
 
179
//#############################################################
180
// ANMERKUNG OG:
181
//
182
// es ware besser wenn die gesamte Config-struct zum PC
183
// gesendet wird anstatt aufbreitete Textlines. Das spart
184
// Speicher im PKT (der ist limitiert).
185
//
186
// Die Aufbereitung der Daten (Umrechnungen) kann dann auf
187
// der PC Seite erfolgen.
188
//
189
// Nachteil dabei: wenn sich die Config-struct des PKT
190
// ändert muss auch das PKT-Tool auf dem PC angepasst werden.
191
//
192
//CB: deshalb ist das auch jetzt auskommentiert
193
//
194
//#############################################################
195
 
196
 
197
//char printbuff[100];
198
 
199
//void print_data_int8( const char *text, int8_t *variable)
200
//{
201
//  sprintf(printbuff, "%d", *variable);
202
//  uart1_puts_p(text); uart1_puts(printbuff); uart1_puts("\r\n");
203
//}
204
////
205
////
206
//void print_data_uint8( const char *text, uint8_t *variable)
207
//{
208
//  sprintf(printbuff, "%d", *variable);
209
//  uart1_puts_p(text); uart1_puts(printbuff); uart1_puts("\r\n");
210
//}
211
//
212
//
213
//void print_data_uint16( const char *text, uint16_t *variable)
214
//{
215
//  sprintf(printbuff, "%d", *variable);
216
//  uart1_puts_p(text); uart1_puts(printbuff); uart1_puts("\r\n");
217
//}
218
//
219
//
220
//void print_data_int16( const char *text, int16_t *variable)
221
//{
222
//  sprintf(printbuff, "%d", *variable);
223
//  uart1_puts_p(text); uart1_puts(printbuff); uart1_puts("\r\n");
224
//}
225
//
226
//
227
//void print_data_char( const char *text, char *variable, uint8_t length)
228
//{
229
//  uart1_puts_p(text);
230
//  uart1_puts(variable);
231
//  uart1_puts("\r\n");
232
//}
233
//
234
//
235
//void print_time( const char *text, PKTdatetime_t variable)
236
//{
237
//    uart1_puts_p(text);
238
//    sprintf(printbuff, "%d", variable.day);
239
//    uart1_puts(printbuff);
240
//    uart1_puts(".");
241
//    sprintf(printbuff, "%d", variable.month);
242
//    uart1_puts(printbuff);
243
//    uart1_puts(".");
244
//    sprintf(printbuff, "%d", variable.year);
245
//    uart1_puts(printbuff);
246
////    uart1_puts(" ");
247
////    sprintf(printbuff, "%d", variable.seconds);
248
////    uart1_puts(printbuff);
249
//    uart1_puts("\r\n");
250
//}
251
//
252
//
253
//
254
//void print_OSD_Statistic(void)
255
//{
256
//  print_time (PSTR("begin_StatTime:"),Config.OSD_Statistic.begin_StatTime);
257
//  print_time (PSTR("end_StatTime:"),Config.OSD_Statistic.end_StatTime);
258
//  print_data_uint16 (PSTR("total_FlyTime:"),&Config.OSD_Statistic.total_FlyTime);
259
//  print_data_uint16 (PSTR("last_FlyTime:"),&Config.OSD_Statistic.last_FlyTime);
260
//  print_data_uint16 (PSTR("count_Errorcode:"),&Config.OSD_Statistic.count_Errorcode);
261
//  print_data_int16 (PSTR("max_Altimeter:"),&Config.OSD_Statistic.max_Altimeter);
262
//  print_data_uint16 (PSTR("max_GroundSpeed:"),&Config.OSD_Statistic.max_GroundSpeed);
263
//  print_data_uint16 (PSTR("max_Distance:"),&Config.OSD_Statistic.max_Distance);
264
//  print_data_uint16 (PSTR("max_Current:"),&Config.OSD_Statistic.max_Current);
265
//  print_data_uint16 (PSTR("max_Capacity:"),&Config.OSD_Statistic.max_Capacity);
266
//  print_data_int16 (PSTR("max_Variometer:"),&Config.OSD_Statistic.max_Variometer);
267
//  print_data_int8 (PSTR("max_AngleNick:"),&Config.OSD_Statistic.max_AngleNick);
268
//  print_data_int8 (PSTR("max_AngleRoll:"),&Config.OSD_Statistic.max_AngleRoll);
269
//  print_data_uint8 (PSTR("RC Quality:"),&Config.OSD_Statistic.max_RCQuality);
270
//  print_data_int16 (PSTR("max_TopSpeed:"),&Config.OSD_Statistic.max_TopSpeed);
271
//  print_data_int8 (PSTR("min_AngleNick:"),&Config.OSD_Statistic.min_AngleNick);
272
//  print_data_int8 (PSTR("min_AngleRoll:"),&Config.OSD_Statistic.min_AngleRoll);
273
//  print_data_uint8 (PSTR("min_RCQuality:"),&Config.OSD_Statistic.min_RCQuality);
274
//  print_data_uint8 (PSTR("min_UBat:"),&Config.OSD_Statistic.min_UBat);
275
//  print_data_uint8 (PSTR("LiPoCells:"),&Config.OSD_Statistic.LiPoCells);
276
//  print_data_uint8 (PSTR("BL_Count:"),&Config.OSD_Statistic.BL_Count);
277
//}
278
 
279
 
280
 
281
//void SendConfigData(void)
282
//{
283
 
284
//  print_data_uint8 (strGet(START_VERSIONCHECK),&Config.Version );
285
//  print_data_uint8 (strGet(LOWBAT),&Config.MK_LowBat );
286
//  print_data_uint8 (strGet(LOWBAT),&Config.DisplayTimeout );
287
//  print_data_uint8 (strGet(LOWBAT),&Config.DisplayLanguage );
288
//  print_data_uint8 (strGet(WITXRX),&Config.WiTXRXChannel);
289
//  print_data_uint8 (strGet(WINETWG),&Config.WiNetworkGroup);
290
//  print_data_uint8 (strGet(WINETWM),&Config.WiNetworkMode);
291
//  print_data_uint8 (strGet(WITIMEOUT),&Config.WiTXTO);
292
//  print_data_uint8 (strGet(WIUART),&Config.WiUartMTU);
293
//  print_data_uint8 (strGet(DISPLAY8),&Config.OSD_ShowMKSetting);
294
//  print_data_uint8 (strGet(DISPLAY7),&Config.LCD_DisplayMode);
295
//  print_data_uint8 (strGet(DISPLAY6),&Config.LCD_Kontrast);
296
//  print_data_uint8 (strGet(DISPLAY5),&Config.LCD_Helligkeit);
297
//  print_data_uint8 (PSTR("USB-Betrieb:"),&Config.USBBT);
298
//  print_data_uint8 (PSTR("Uart-FC/Wi:"),&Config.U02SV2);
299
//  print_data_uint8 (PSTR("PKT-Debug:"),&Config.Debug);
300
//  print_data_uint8 (PSTR("Wi232 eingebaut:"),&Config.UseWi);
301
//  print_data_uint8 (PSTR("BTM222 eingebaut:"),&Config.UseBT);
302
//  print_data_uint8 (PSTR("Wi232 ok:"),&Config.WiIsSet);
303
//  print_data_uint8 (PSTR("BTM222 ok:"),&Config.BTIsSet);
304
//  print_data_uint8 (PSTR("BTM222 Slave:"),&Config.BTIsSlave);
305
//
306
//  print_data_char (PSTR("BTM222 Pin:"),&Config.bt_pin[0],bt_pin_length );
307
//  print_data_char (PSTR("BTM222 Name:"),&Config.bt_name[0],bt_name_length);
308
//  print_data_char (PSTR("BTM222 REID:"),&Config.RE_ID[0],RE_ID_length );
309
//  print_data_char (PSTR("BTM222 MAC:"),&Config.bt_Mac[0],bt_mac_length);
310
//  print_data_char (PSTR("GPS DevName:"),&Config.gps_UsedDevName[0],20);
311
//  print_data_char (PSTR("GPS MAC:"),&Config.gps_UsedMac[0],14);
312
//
313
//   print_data_int32 (PSTR("LastLongitude:"),&Config.LastLongitude);
314
////  print_data_int32(PSTR("LastLatitude:"),&Config.LastLatitude);
315
//
316
//  print_data_uint8 (PSTR("PKT_IdleBeep:"),&Config.PKT_IdleBeep);
317
//  print_data_uint8 (strGet(DISPLAY2),&Config.PKT_StartInfo);
318
//  print_data_uint16 (strGet(LIPO3),&Config.Lipo_UOffset);
319
//  print_data_uint8 (strGet(LIPO2),&Config.PKT_Accutyp);
320
//  print_data_uint8 (strGet(DISPLAY9),&Config.OSD_RCErrorbeep);
321
//  print_data_uint8 (strGet(OSD_Invert_Out),&Config.OSD_InvertOut);
322
//  print_data_uint8 (strGet(OSD_LED_Form),&Config.OSD_LEDform);
323
//  print_data_uint8 (strGet(OSD_Send_OSD),&Config.OSD_SendOSD);
324
//  print_data_uint8 (strGet(FALLSPEED),&Config.OSD_Fallspeed);
325
//  print_data_uint8 (strGet(OSD_VARIOBEEP),&Config.OSD_VarioBeep);
326
//  print_data_uint8 (strGet(OSD_HOMEMKVIEW),&Config.OSD_HomeMKView);
327
//  print_data_uint16 (strGet(OSD_MAHWARNING),&Config.OSD_mAh_Warning);
328
//  print_data_uint8 (strGet(OSD_SCREENMODE),&Config.OSD_ScreenMode);
329
//  print_data_uint8 (strGet(OSD_LIPOBAR),&Config.OSD_LipoBar);
330
//  print_data_uint8 (strGet(PKT_BAUDRATE),&Config.PKT_Baudrate);
331
//  print_data_uint16 (strGet(FOLLOWME_1),&Config.FM_Refresh);
332
//  print_data_uint16 (strGet(FOLLOWME_2),&Config.FM_Speed);
333
//  print_data_uint16 (strGet(FOLLOWME_3),&Config.FM_Radius);
334
//  print_data_uint8 (strGet(HWSOUND),&Config.HWSound);
335
//  print_data_uint8 (strGet(HWBEEPER),&Config.HWBeeper);
336
//  print_data_uint8 (PSTR("sIdxSteps:"),&Config.sIdxSteps);
337
//  print_data_uint8 (strGet(SV_TEST3),&Config.servo_frame);
338
//  print_data_uint8 (strGet(SV_SINGLESTEP),&Config.single_step);
339
//  print_data_uint8 (strGet(SV_COUNTTEST),&Config.repeat);
340
//  print_data_uint8 (strGet(SV_PAUSEEND),&Config.pause);
341
//  print_data_uint8 (strGet(SV_PAUSEINC),&Config.pause_step);
342
////  print_data_int8 (,&Config.tracking);
343
////  print_data_int8 (,&Config.track_tx);
344
//  print_data_uint16 (PSTR("Stick1_min:"),&Config.stick_min[0]);
345
//  print_data_uint16 (PSTR("Stick2_min:"),&Config.stick_min[1]);
346
//  print_data_uint16 (PSTR("Stick3_min:"),&Config.stick_min[2]);
347
//  print_data_uint16 (PSTR("Stick4_min:"),&Config.stick_min[3]);
348
//  print_data_uint16 (PSTR("Stick5_min:"),&Config.stick_min[4]);
349
//  print_data_uint16 (PSTR("Stick1_max:"),&Config.stick_max[0]);
350
//  print_data_uint16 (PSTR("Stick2_max:"),&Config.stick_max[1]);
351
//  print_data_uint16 (PSTR("Stick3_max:"),&Config.stick_max[2]);
352
//  print_data_uint16 (PSTR("Stick4_max:"),&Config.stick_max[3]);
353
//  print_data_uint16 (PSTR("Stick5_max:"),&Config.stick_max[4]);
354
//  print_data_uint8 (PSTR("Stick1_typ:"),&Config.stick_typ[0]);
355
//  print_data_uint8 (PSTR("Stick2_typ:"),&Config.stick_typ[1]);
356
//  print_data_uint8 (PSTR("Stick3_typ:"),&Config.stick_typ[2]);
357
//  print_data_uint8 (PSTR("Stick4_typ:"),&Config.stick_typ[3]);
358
//  print_data_uint8 (PSTR("Stick5_typ:"),&Config.stick_typ[4]);
359
//  print_data_uint8 (PSTR("Stick1_neutral:"),&Config.stick_neutral[0]);
360
//  print_data_uint8 (PSTR("Stick2_neutral"),&Config.stick_neutral[1]);
361
//  print_data_uint8 (PSTR("Stick3_neutral:"),&Config.stick_neutral[2]);
362
//  print_data_uint8 (PSTR("Stick4_neutral:"),&Config.stick_neutral[3]);
363
//  print_data_uint8 (PSTR("Stick5_neutral:"),&Config.stick_neutral[4]);
364
//  print_data_uint8 (strGet(LIPO_MESSUNG),&Config.Lipomessung);
365
//  print_OSD_Statistic();
366
//}
367
 
368
 
369
//--------------------------------------------------------------
370
//--------------------------------------------------------------
371
void WriteWiInitFlag(void)
372
{
373
       Config.WiIsSet = true;
374
}
375
 
376
 
377
//--------------------------------------------------------------
378
//--------------------------------------------------------------
379
void WriteBTInitFlag(void)
380
{
381
     Config.BTIsSet = true;
382
}
383
//--------------------------------------------------------------
384
//--------------------------------------------------------------
385
void WriteWLInitFlag(void)
386
{
387
     Config.WLIsSet = true;
388
}
389
 
390
//--------------------------------------------------------------
391
//--------------------------------------------------------------
392
void WriteBTSlaveFlag(void)
393
{
394
     Config.BTIsSlave = true;
395
}
396
 
397
 
398
//--------------------------------------------------------------
399
//--------------------------------------------------------------
400
void WriteBTMasterFlag(void)
401
{
402
     Config.BTIsSlave = false;
403
}
404
 
405
 
406
//--------------------------------------------------------------
407
//--------------------------------------------------------------
408
void WriteLastPosition( uint32_t ELongitude, uint32_t ELatitude)
409
 
410
{
411
    Config.LastLongitude = ELongitude;
412
    Config.LastLatitude  = ELatitude;
413
}
414
 
415
 
416
 
417
//--------------------------------------------------------------
418
//--------------------------------------------------------------
419
void ReadParameter( void )
420
{
421
    eeprom_read_block( (void*)&Config, (const void*)&EEStruct, sizeof(ST) );
422
 
423
    // DEBUG !!
424
    //Config.Version = 0x82;
425
    //WriteParameter();
426
    //return;
427
 
428
 
429
    //-------------------
430
    // ggf. ungueltige Zeichen aus dem
431
    // Bluetooth-Namen eliminieren
432
    //-------------------
433
    #ifdef USE_BLUETOOTH
434
    bt_fixname();
435
    #endif
436
 
437
    //-------------------
438
    // 27.03.2014 OG
439
    // Als Vorbereitung die Niederländische Sprache
440
    // zu entfernen wird hier ggf. Niederländisch
441
    // auf Englisch umgeschaltet
442
    //-------------------
443
    if( Config.DisplayLanguage == 2 )   // 2 = ehemals Niederländisch
444
        Config.DisplayLanguage = 1;     // -> wird zu 1 = Englisch
445
 
446
    //-------------------
447
    // 0. EEprom-Version nicht geaendert
448
    //-------------------
449
    if( Config.Version == EEpromVersion )                   // nichts zu tun...
450
    {
451
        return;                                             // !!! EXIT !!!
452
    }
453
 
454
 
455
    //-------------------
456
    // 1. PKT-Upgrade NICHT Update faehig
457
    //    ODER Downgrade
458
    //
459
    // 0x77 = PKT Version 3.6.6a
460
    //-------------------
461
    if( (Config.Version < 0x77) || (Config.Version > EEpromVersion) )
462
    {
463
        Delete_EEPROM();
464
        return;                                             // !!! EXIT !!!
465
    }
466
 
467
 
468
    //-------------------
469
    // 2. PKT-Upgrade
470
    //-------------------
471
 
472
    //++++++++++++++++++++++++++++
473
    // bei Eeprom-Versionwechsel
474
    // IMMER loeschen
475
    //++++++++++++++++++++++++++++
476
#ifdef USE_WAYPOINTS
477
    PointList_Clear();                                      // Init Waypoints
478
#endif
479
    STAT_Init();                                            // Init OSD Statistik
480
    GPS_User_Init();                                        // Init GPS Positionen
481
    MKErr_Log_Init();                                       // Init MK Errorlog
482
 
483
 
484
    //++++++++++++++++++++++++++++
485
    // inkrementelle Updates
486
    //++++++++++++++++++++++++++++
487
 
488
    //-----------------------------
489
    //--- ab PKT v3.6.9bX6
490
    //-----------------------------
491
    if( Config.Version < 0x81 )
492
    {
493
        Config.timezone   = 1;
494
        Config.summertime = 1;
495
    }
496
 
497
    //-----------------------------
498
    //--- ab PKT v3.7.0b
499
    //-----------------------------
500
    if( Config.Version < 0x82 )
501
    {
502
        Config.OSD_ShowMKSetting = true;
503
    }
504
 
505
    //-----------------------------
506
    //--- ab PKT v3.7.0e
507
    //-----------------------------
508
    if( Config.Version < 0x83 )
509
    {
510
        Config.UseWL   = false;
511
        Config.WLIsSet = false;
512
        strcpy_P( Config.Wlan_SSID    , PSTR("PKT"));       // Wlan
513
        strcpy_P( Config.Wlan_Password, PSTR("12345678"));  // Wlan
514
    }
515
 
516
    //-----------------------------
517
    //--- ab PKT v3.7.0eX1
518
    //-----------------------------
519
    if( Config.Version < 0x84 )
520
    {
521
        Config.OSD_UseScreen = 0xffffffff;                  // alle verfuegbaren OSD-Screens eingeschaltet
522
    }
523
 
524
    //-----------------------------
525
    //--- ab PKT v3.7.0f
526
    //-----------------------------
527
    if( Config.Version < 0x85 )
528
    {
529
       Config.Wlan_DHCP    = 0;
530
       Config.Wlan_WPA     = 0;
531
       Config.Wlan_Adhoc   = true;
532
       Config.Wlan_Channel = 1;
533
       strcpy_P( Config.Wlan_IP     , PSTR("169.254.001.001"));
534
       strcpy_P( Config.Wlan_Netmask, PSTR("255.255.000.000"));
535
       strcpy_P( Config.Wlan_Gateway, PSTR("169.254.001.001"));
536
    }
537
 
538
    //-----------------------------
539
    //--- ab PKT v3.7.3cX5
540
    //-----------------------------
541
    if( Config.Version < 0x87 )
542
    {
543
        Config.OSD_ShowCellU = false;                      //
544
    }
545
 
546
 
547
    //-----------------------------
548
    //--- 01.04.2014 OG
549
    //--- ab PKT v3.7.4aX7
550
    //-----------------------------
551
    if( Config.Version < 136 )
552
    {
553
        Config.UseBLE = false;                                              // Bluetooth 4 LowPower wird genutzt (RedBearLab BLE Mini) wird an SV2 genutzt (SV2 Patch erforderlich)
554
        memset( Config.MKParam_Favs, param_EOF, MAX_MKPARAM_FAVORITES );    // Array von MK-Parameter Favoriten des Benutzers
555
    }
556
 
557
 
558
    //-----------------------------
559
    //--- 06.04.2014 OG
560
    //--- ab PKT v3.7.4aX8
561
    //-----------------------------
562
    if( Config.Version < 137 )
563
    {
564
        strcpy_P( Config.Wlan_HomeSSID    , PSTR(""));                      // WiFly Home-Wlan: SSID (Home-WLAN)
565
        strcpy_P( Config.Wlan_HomePassword, PSTR(""));                      // WiFly Home-Wlan: Passwort (Home-WLAN)
566
    }
567
 
568
 
569
    //-----------------------------
570
    //--- 07.05.2014 OG
571
    //--- ab PKT v3.80bX3
572
    //-----------------------------
573
    if( Config.Version < 138 )
574
    {
575
        memset( Config.MKParam_Favs, 0, MAX_MKPARAM_FAVORITES );            // Array von MK-Parameter Favoriten des Benutzers (Vorbelegung jetzt 0)
576
    }
577
 
578
 
579
    //-----------------------------
580
    //--- 17.06.2014 OG
581
    //--- ab PKT v3.80cX5
582
    //-----------------------------
583
    if( Config.Version < 139 )
584
    {
585
        Config.PKTOffTimeout = 0;                                           // autom. PKT ausschalten nach n Minuten (0=immer an)
586
    }
587
 
588
 
589
 
590
    //-------------------
591
    // 3. Update Message
592
    //-------------------
593
    Config.Version = EEpromVersion;                         // Update EEPROM version number
594
    sei();
595
 
596
    lcd_cls();
597
    lcdx_printp_center( 2, PSTR("EEProm updated to"), MNORMAL, 0,0);
598
    lcdx_printp_center( 3, PSTR("new Version")      , MNORMAL, 0,0);
599
    lcdx_printp_center( 5, PSTR("check settings!")  , MNORMAL, 0,0);
600
    lcd_printp_at (18, 7, PSTR("OK")                , MNORMAL);         // Keyline
601
 
602
    while( !get_key_press(1 << KEY_ENTER) );
603
    WriteParameter();
604
    cli();
605
}
606
 
607
 
608
 
609
//--------------------------------------------------------------
610
//--------------------------------------------------------------
611
void WriteParameter( void )
612
{
613
    copy_line(7);
614
    lcd_printp_at( 0, 7, PSTR("   Write EEPROM    "), MNORMAL);
615
    eeprom_update_block( (const void*)&Config, (void*)&EEStruct, sizeof(ST) );
616
    paste_line(7);
617
}
618
 
619
 
620
 
621
//--------------------------------------------------------------
622
//--------------------------------------------------------------
623
void Delete_EEPROM( void )
624
{
625
    uint8_t i;
626
 
627
    // EEPROM auf Default setzen
628
 
629
    lcd_cls();
630
    lcd_printp_at( 0, 0, PSTR(" EEPROM Parameter    "), MINVERS);
631
    lcd_printp_at( 0, 1, PSTR("werden auf")           , MNORMAL);
632
    lcd_printp_at( 0, 2, PSTR("Standardwerte gesetzt"), MNORMAL);
633
 
634
    Config.MK_LowBat        = 137;                              // 13,7V
635
    Config.DisplayTimeout   = 0;                                // Display immer an (autom. LCD ausschalten nach n Minuten)
636
    Config.DisplayLanguage  = 5;                                // default undefined
637
    Config.WiTXRXChannel    = 1;                                // Kanal 1 MK Standard
638
    Config.WiNetworkGroup   = 66;                               // Gruppe 66  MK Standard
639
    Config.WiNetworkMode    = NetMode_Normal;                   // MK Standard
640
    Config.WiTXTO           = TWaitTime16;                      // MK Standard
641
    Config.WiUartMTU        = UartMTU64;                        // MK Standard
642
    Config.OSD_ShowMKSetting= true;                             // Anzeige MK-Setting beim OSD Start
643
    Config.PKTOffTimeout    = 0;                                // PKT immer an (autom. PKT ausschalten nach n Minuten)
644
    Config.LCD_Kontrast     = 20;                               // Kontrast normal
645
    Config.LCD_Helligkeit   = 100;                              // Helligkeit in %
646
    Config.USBBT            = 0;                                // USB Betrieb
647
    Config.U02SV2           = 0;                                // SV2 (Kabel) Standard
648
    Config.Debug            = 0;                                // kein Debug
649
    Config.UseWi            = false;                            // Wi.232 eingebaut?
650
    Config.UseBT            = false;                            // BT-222 eingebaut?
651
    Config.WiIsSet          = false;                            // Flag für die Initialisierung Wi232
652
    Config.BTIsSet          = false;                            // Flag für die Initialisierung Bluetooth
653
    Config.BTIsSlave        = true;                             // Slave Flag setzen
654
    Config.PKT_IdleBeep     = 0;                                // kein Piepsen bei Inaktivität
655
    Config.PKT_StartInfo    = false;                            //   * FREI * (ehemals: PKT Startinfo anzeigen)
656
    Config.OSD_RCErrorbeep  = true;                             // OSD Receiveerrorbeep
657
    Config.OSD_InvertOut    = false;                            // LED Anzeige invertiren
658
    Config.OSD_LEDform      = 1;                                // Form der Anzeige ( + oder schwarz)
659
    Config.OSD_SendOSD      = false;                            // OSD Daten an SV2
660
    Config.OSD_Fallspeed    = 40;                               // maximale Sinkrate
661
    Config.OSD_VarioBeep    = 1;                                // Vario Beep ein
662
    Config.OSD_HomeMKView   = true;                             //   * FREI * (ehemals: Home Circle from MK View)
663
    Config.OSD_mAh_Warning  = 10000;                            // mAh Warnschwelle
664
    Config.OSD_ScreenMode   = 0;                                // Variante des OSD Screen
665
    Config.OSD_LipoBar      = 0;                                // Bargraphanzeige für MK Lipo
666
    Config.PKT_Baudrate     = Baud_57600;                       // Baudrate für BT und Wi232
667
    Config.PKT_Accutyp      = true;                             // verwendeter Akkutyp (true=Lipo, false=LiON)
668
    Config.Lipo_UOffset     = 10000;                            // Offset für PKT-Lipomessung
669
    Config.FM_Azimuth       = 0;                                // FollowMe Azimuth
670
    Config.FM_Distance      = 0;                                // FollowMe Distance
671
    Config.FM_Speed         = 30;                               // FollowMe Speed in m/s *0.1
672
    Config.FM_Radius        = 5;                                // Waypoint Tolerance Radius in meter
673
    Config.HWSound          = 0;                                // Hardware Sounderweiterung an PD7
674
    Config.HWBeeper         = 1;                                // Hardware Beeper an PC7
675
    Config.Volume           = 0;                                // Lautstaerke
676
    Config.LastLongitude    = 0x00000000;
677
    Config.LastLatitude     = 0x00000000;
678
 
679
    strcpy_P(Config.bt_pin , PSTR("0000"));
680
    strcpy_P(Config.bt_name, PSTR("PKT"));                      // Bluetooth-Name max. 10 Zeichen! - NICHT mit Leerzeichen auffüllen (bt_name_length)
681
    strcpy_P(Config.bt_Mac , PSTR("0000-00-000000"));
682
    strcpy_P(Config.RE_ID  , PSTR("0000"));
683
 
684
    for( i = 0; i < 20; i++)
685
    {
686
       Config.gps_UsedDevName[i]      = 0;                      // benutztes GPS Device Name
687
    }
688
    for( i = 0; i < 14; i++)
689
    {
690
       Config.gps_UsedMac[i] = '0';                             // benutztes GPS Device Mac Adresse
691
    }
692
    Config.gps_UseGPS       = false;                            // ist GPS aktiv?
693
    Config.gps_UsedGPSMouse = GPS_Bluetoothmouse1;
694
 
695
  //Config.WiIsSet          = false;                            // 15.07.2013 CB doppelt drin
696
  //Config.BTIsSet          = false;
697
    Config.Version          = EEpromVersion;
698
    Config.sIdxSteps        = STEPS_255;
699
    Config.servo[0].rev     = SERVO_REV;
700
    Config.servo[0].min     = SERVO_I0_RIGHT;
701
    Config.servo[0].max     = SERVO_I0_LEFT;
702
    Config.servo[0].mid     = SERVO_I0_MIDDLE;
703
    Config.servo[1].rev     = SERVO_REV;
704
    Config.servo[1].min     = SERVO_I0_RIGHT;
705
    Config.servo[1].max     = SERVO_I0_LEFT;
706
    Config.servo[1].mid     = SERVO_I0_MIDDLE;
707
    Config.servo_frame      = SERVO_PERIODE;
708
    Config.single_step      = SINGLE_STEP;                      // nur bei Test-Servo
709
    Config.repeat           = REPEAT;                           // nur bei Test-Servo
710
    Config.pause            = PAUSE;                            // nur bei Test-Servo
711
    Config.pause_step       = PAUSE_STEP;                       // nur bei Test-Servo
712
    Config.tracking         = TRACKING_MIN;
713
    Config.track_hyst       = TRACKING_HYSTERESE;
714
    Config.track_tx         = 0;
715
 
716
    for( i=0; i<5; i++)
717
    {
718
       Config.stick_min[i]      = 30+i;                         // Joystick
719
       Config.stick_max[i]      = 270+i;                        // Joystick
720
       Config.stick_typ[i]      = 0;                            // Joystick
721
       Config.stick_dir[i]      = 0;                            // Joystick
722
       Config.stick_neutral[i]  = 0;                            // Joystick
723
    }
724
 
725
    Config.Lipomessung          = true;
726
 
727
    Config.timezone             = 1;
728
    Config.summertime           = 1;
729
 
730
    strcpy_P( Config.Wlan_SSID    , PSTR("PKT"));               // Wlan
731
    strcpy_P( Config.Wlan_Password, PSTR("12345678"));          // Wlan
732
    Config.WLIsSet              = false;                        // Wlan
733
    Config.UseWL                = false;
734
    Config.OSD_UseScreen        = 0xffffffff;                   // alle OSD-Screens eingeschaltet
735
    Config.Wlan_DHCP            = 0;                            // kein DHCP
736
    Config.Wlan_WPA             = 0;                            // 0 = adhoc 1= WPA2
737
    Config.Wlan_Adhoc           = true;                         // Adhoc
738
    Config.Wlan_Channel         = 1;                            // Wlan Channel
739
    strcpy_P( Config.Wlan_IP     , PSTR("169.254.001.001"));
740
    strcpy_P( Config.Wlan_Netmask, PSTR("255.255.000.000"));
741
    strcpy_P( Config.Wlan_Gateway, PSTR("169.254.001.001"));
742
    Config.OSD_ShowCellU        = false;
743
    Config.UseBLE               = false;
744
 
745
    memset( Config.MKParam_Favs, 0, MAX_MKPARAM_FAVORITES );    // Favoriten MK-Parameter (Anzahl: MAX_MKPARAM_FAVORITES = 10)
746
 
747
    strcpy_P( Config.Wlan_HomeSSID    , PSTR(""));              // WiFly Home-Wlan: SSID (Home-WLAN)
748
    strcpy_P( Config.Wlan_HomePassword, PSTR(""));              // WiFly Home-Wlan: Passwort (Home-WLAN)
749
 
750
    //-------------------------------------------------
751
    //-------------------------------------------------
752
#ifdef USE_WAYPOINTS
753
    PointList_Clear();
754
#endif
755
    STAT_Init();                                                // Init OSD Statistik
756
    GPS_User_Init();                                            // Init GPS Positionen
757
    MKErr_Log_Init();                                           // Init MK Errorlog
758
 
759
    WriteParameter();
760
 
761
    //lcd_printp_at (0, 4, PSTR("Waypoints loeschen"), 0);
762
    //EEWayPointList_Clear();
763
 
764
    lcd_printp_at( 0, 6, PSTR("!!Check Parameter!! "), MNORMAL);
765
    lcd_printp_at(18, 7, PSTR("OK")                  , MNORMAL);
766
    sei();
767
    set_beep( 200, 0x0080, BeepNormal);
768
 
769
    while( !get_key_press (1 << KEY_ENTER) );
770
 
771
 
772
//#if defined HWVERSION3_9
773
    clr_V_On();
774
//#else
775
//
776
//  wdt_enable( WDTO_250MS );
777
//                  while (1)
778
//                  {;}
779
//#endif
780
}
781
 
782
 
783
//--------------------------------------------------------------
784
//
785
//void EEWayPointList_Clear(void)           // löschen der Waypointliste im EEProm
786
//{
787
//  uint8_t i;
788
//  PKTWayPoint.Waypoint.Position.Latitude = 0;
789
//  PKTWayPoint.Waypoint.Position.Longitude = 0;
790
//  PKTWayPoint.Waypoint.Position.Altitude = 0;
791
//  PKTWayPoint.Waypoint.Heading = 361;
792
 
793
//  for(i = 0; i < MAX_WPLIST_LEN; i++)
794
//  {
795
//      PKTWayPointDirectory.WPList.WPDirectory[i] = 0;
796
//  }
797
 
798
//  for(i = 0; i < NumberOfWaypoints; i++)
799
//  {
800
//      lcd_printp (PSTR("."), 0);
801
//      eeprom_write_byte (&EEWayPointList[i].WPIndex, i);
802
//      eeprom_write_byte (&EEWayPointList[i].Waypoint.Position.Status, INVALID);
803
//      eeprom_write_block ((const void*)&PKTWayPoint.Waypoint.Position.Latitude, (void*)&EEWayPointList[i].Waypoint.Position.Latitude, sizeof(EEWayPointList[i].Waypoint.Position.Latitude));
804
//      eeprom_write_block ((const void*)&PKTWayPoint.Waypoint.Position.Longitude, (void*)&EEWayPointList[i].Waypoint.Position.Longitude, sizeof(EEWayPointList[i].Waypoint.Position.Longitude));
805
//      eeprom_write_block ((const void*)&PKTWayPoint.Waypoint.Position.Altitude, (void*)&EEWayPointList[i].Waypoint.Position.Altitude, sizeof(EEWayPointList[i].Waypoint.Position.Altitude));
806
//      eeprom_write_block ((const void*)&PKTWayPoint.Waypoint.Heading, (void*)&EEWayPointList[i].Waypoint.Heading, sizeof(EEWayPointList[i].Waypoint.Heading));
807
//
808
//      eeprom_write_byte (&EEWayPointList[i].Waypoint.ToleranceRadius, 0);     // in meters, if the MK is within that range around the target, then the next target is triggered
809
//      eeprom_write_byte (&EEWayPointList[i].Waypoint.HoldTime, 0);            // in seconds, if the was once in the tolerance area around a WP, this time defines the delay before the next WP is triggered
810
//      eeprom_write_byte (&EEWayPointList[i].Waypoint.Type, POINT_TYPE_INVALID);
811
//      eeprom_write_byte (&EEWayPointList[i].Waypoint.Event_Flag, 0);          // future implementation
812
//      eeprom_write_byte (&EEWayPointList[i].Waypoint.AltitudeRate, 0);        // no change of setpoint
813
//  }
814
 
815
//  for(i = 0; i < NumberOfWPLists; i++)
816
//  {
817
//      lcd_printp (PSTR("."), 0);
818
//      eeprom_write_byte (&EEWPDirectory[i].WPList.WPListnumber, i);
819
//      eeprom_write_byte (&EEWPDirectory[i].WPList.WPListAktiv, false);
820
//      eeprom_write_byte (&EEWPDirectory[i].WPList.POI_CAM_NICK_CTR, 0);
821
//      eeprom_write_byte (&EEWPDirectory[i].WPList.UsePOI, 0);
822
//      eeprom_write_block ((const void*)&PKTWayPointDirectory.WPList.WPDirectory, (void*)&EEWPDirectory[i].WPList.WPDirectory, sizeof(EEWPDirectory[i].WPList.WPDirectory));
823
//
824
//  }
825
//  lcd_printp (PSTR("\r\n"), 0);
826
 
827
//}