Subversion Repositories FlightCtrl

Rev

Rev 1591 | Rev 1603 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1591 Rev 1598
Line 50... Line 50...
50
// +  POSSIBILITY OF SUCH DAMAGE.
50
// +  POSSIBILITY OF SUCH DAMAGE.
51
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
51
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
52
#include "main.h"
52
#include "main.h"
Line 53... Line -...
53
 
-
 
54
 
53
 
55
unsigned char EEPromArray[E2END+1] EEMEM;
54
 
56
unsigned char PlatinenVersion = 10;
55
unsigned char PlatinenVersion = 10;
57
unsigned char SendVersionToNavi = 1;
56
unsigned char SendVersionToNavi = 1;
58
unsigned char BattLowVoltageWarning = 94;
57
unsigned char BattLowVoltageWarning = 94;
Line 63... Line 62...
63
// -- Parametersatz aus EEPROM lesen ---
62
// -- Parametersatz aus EEPROM lesen ---
64
// number [1..5]
63
// number [1..5]
65
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
64
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
66
{
65
{
67
   if((number > 5)||(number < 1)) number = 3;
66
   if((number > 5)||(number < 1)) number = 3;
68
   eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * (number - 1)], length);
67
   eeprom_read_block(buffer, (void*)(EEPROM_ADR_PARAM_BEGIN + length * (number - 1)), length);
69
   LED_Init();
68
   LED_Init();
70
}
69
}
Line 71... Line 70...
71
 
70
 
72
// -- Parametersatz ins EEPROM schreiben ---
71
// -- Parametersatz ins EEPROM schreiben ---
73
// number [1..5]
72
// number [1..5]
74
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
73
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
75
{
74
{
76
   if(number > 5) number = 5;
75
   if(number > 5) number = 5;
77
   if(number < 1) return;
76
   if(number < 1) return;
78
   eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * (number - 1)], length);
77
   eeprom_write_block(buffer, (void*)(EEPROM_ADR_PARAM_BEGIN + length * (number - 1)), length);
79
   eeprom_write_byte(&EEPromArray[EEPROM_ADR_PARAM_LENGTH], length); // Länge der Datensätze merken
78
   eeprom_write_byte((unsigned char*)(EEPROM_ADR_PARAM_LENGTH), length); // Länge der Datensätze merken
80
   eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_CHANNELS], 12); // 12 Kanäle merken
79
   eeprom_write_block(buffer, (void*)(EEPROM_ADR_CHANNELS), 12); // 12 Kanäle merken
81
   SetActiveParamSetNumber(number);
80
   SetActiveParamSetNumber(number);
82
   LED_Init();
81
   LED_Init();
Line 83... Line 82...
83
}
82
}
84
 
83
 
85
unsigned char GetActiveParamSetNumber(void)
84
unsigned char GetActiveParamSetNumber(void)
86
{
85
{
87
        unsigned char set;
86
        unsigned char set;
88
        set = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]);
87
        set = eeprom_read_byte((unsigned char*)(EEPROM_ADR_ACTIVE_SET));
89
        if((set > 5) || (set < 1))
88
        if((set > 5) || (set < 1))
90
        {
89
        {
91
                set = 3;
90
                set = 3;
Line 96... Line 95...
96
 
95
 
97
void SetActiveParamSetNumber(unsigned char number)
96
void SetActiveParamSetNumber(unsigned char number)
98
{
97
{
99
        if(number > 5) number = 5;
98
        if(number > 5) number = 5;
100
        if(number < 1) return;
99
        if(number < 1) return;
101
        eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number);                                 // diesen Parametersatz als aktuell merken
100
        eeprom_write_byte((unsigned char*)(EEPROM_ADR_ACTIVE_SET), number);                             // diesen Parametersatz als aktuell merken
Line 102... Line 101...
102
}
101
}
103
 
102
 
Line 207... Line 206...
207
    sei();
206
    sei();
Line 208... Line 207...
208
 
207
 
Line 209... Line 208...
209
        ReadParameterSet(3, (unsigned char *) &EE_Parameter.Kanalbelegung[0], 13); // read only the first bytes
208
        ReadParameterSet(3, (unsigned char *) &EE_Parameter.Kanalbelegung[0], 13); // read only the first bytes
210
 
209
 
211
 
210
 
212
    if((eeprom_read_byte(&EEPromArray[EEPROM_ADR_MIXER_TABLE]) == MIXER_REVISION) && // Check Revision in the first Byte
211
    if((eeprom_read_byte((unsigned char*)(EEPROM_ADR_MIXER_TABLE)) == MIXER_REVISION) && // Check Revision in the first Byte
213
       (eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != 0xff))                   // Settings reset via Koptertool
212
       (eeprom_read_byte((unsigned char*)(EEPROM_ADR_VALID)) != 0xff))                   // Settings reset via Koptertool
214
        {
213
        {
215
     unsigned char i;
214
     unsigned char i;
216
     eeprom_read_block(&Mixer, &EEPromArray[EEPROM_ADR_MIXER_TABLE], sizeof(Mixer));
215
     eeprom_read_block(&Mixer, (unsigned char*)(EEPROM_ADR_MIXER_TABLE), sizeof(Mixer));
217
     for(i=0; i<16;i++) { if(Mixer.Motor[i][0] > 0) RequiredMotors++;}
216
     for(i=0; i<16;i++) { if(Mixer.Motor[i][0] > 0) RequiredMotors++;}
218
        }
217
        }
Line 226... Line 225...
226
     Mixer.Motor[1][0] = 64; Mixer.Motor[1][1] = -64; Mixer.Motor[1][2] =   0; Mixer.Motor[1][3] = +64;
225
     Mixer.Motor[1][0] = 64; Mixer.Motor[1][1] = -64; Mixer.Motor[1][2] =   0; Mixer.Motor[1][3] = +64;
227
     Mixer.Motor[2][0] = 64; Mixer.Motor[2][1] =   0; Mixer.Motor[2][2] = -64; Mixer.Motor[2][3] = -64;
226
     Mixer.Motor[2][0] = 64; Mixer.Motor[2][1] =   0; Mixer.Motor[2][2] = -64; Mixer.Motor[2][3] = -64;
228
     Mixer.Motor[3][0] = 64; Mixer.Motor[3][1] =   0; Mixer.Motor[3][2] = +64; Mixer.Motor[3][3] = -64;
227
     Mixer.Motor[3][0] = 64; Mixer.Motor[3][1] =   0; Mixer.Motor[3][2] = +64; Mixer.Motor[3][3] = -64;
229
         Mixer.Revision = MIXER_REVISION;
228
         Mixer.Revision = MIXER_REVISION;
230
     memcpy(Mixer.Name, "Quadro\0", 11);
229
     memcpy(Mixer.Name, "Quadro\0", 11);
231
     eeprom_write_block(&Mixer, &EEPromArray[EEPROM_ADR_MIXER_TABLE], sizeof(Mixer));
230
     eeprom_write_block(&Mixer, (void*)(EEPROM_ADR_MIXER_TABLE), sizeof(Mixer));
232
    }
231
    }
233
    printf("\n\rMixer-Config: '%s' (%u Motors)",Mixer.Name,RequiredMotors);
232
    printf("\n\rMixer-Config: '%s' (%u Motors)",Mixer.Name,RequiredMotors);
Line 234... Line 233...
234
 
233
 
235
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
234
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Line 264... Line 263...
264
//printf("\n size: %u",STRUCT_PARAM_LAENGE);
263
//printf("\n size: %u",STRUCT_PARAM_LAENGE);
Line 265... Line 264...
265
 
264
 
266
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
265
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
267
// + Check Settings
266
// + Check Settings
268
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
267
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
269
    if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != EE_DATENREVISION)
268
    if(eeprom_read_byte((unsigned char*)(EEPROM_ADR_VALID)) != EE_DATENREVISION)
270
        {
269
        {
271
          DefaultKonstanten1();
270
          DefaultKonstanten1();
272
          printf("\n\rInit. EEPROM");
271
          printf("\n\rInit. EEPROM");
273
          for (unsigned char i=1;i<6;i++)
272
          for (unsigned char i=1;i<6;i++)
Line 282... Line 281...
282
                 EE_Parameter.GyroAccFaktor = 27;
281
                 EE_Parameter.GyroAccFaktor = 27;
283
         EE_Parameter.WinkelUmschlagNick = 78;
282
         EE_Parameter.WinkelUmschlagNick = 78;
284
         EE_Parameter.WinkelUmschlagRoll = 78;
283
         EE_Parameter.WinkelUmschlagRoll = 78;
285
                }
284
                }
286
    // valid Stick-Settings?
285
    // valid Stick-Settings?
287
           if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS]) < 12 && eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+1]) < 12 && eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+2]) < 12 && eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+3]) < 12)
286
           if(eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS)) < 12 && eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+1)) < 12 && eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+2)) < 12 && eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+3)) < 12)
288
            {
287
            {
289
         EE_Parameter.Kanalbelegung[0] = eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+0]);
288
         EE_Parameter.Kanalbelegung[0] = eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+0));
290
         EE_Parameter.Kanalbelegung[1] = eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+1]);
289
         EE_Parameter.Kanalbelegung[1] = eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+1));
291
         EE_Parameter.Kanalbelegung[2] = eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+2]);
290
         EE_Parameter.Kanalbelegung[2] = eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+2));
292
         EE_Parameter.Kanalbelegung[3] = eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+3]);
291
         EE_Parameter.Kanalbelegung[3] = eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+3));
293
         EE_Parameter.Kanalbelegung[4] = eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+4]);
292
         EE_Parameter.Kanalbelegung[4] = eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+4));
294
         EE_Parameter.Kanalbelegung[5] = eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+5]);
293
         EE_Parameter.Kanalbelegung[5] = eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+5));
295
         EE_Parameter.Kanalbelegung[6] = eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+6]);
294
         EE_Parameter.Kanalbelegung[6] = eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+6));
296
         EE_Parameter.Kanalbelegung[7] = eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+7]);
295
         EE_Parameter.Kanalbelegung[7] = eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+7));
Line 297... Line 296...
297
 
296
 
298
         if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+8]) < 255)
297
         if(eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+8)) < 0xFF)
299
                  {
298
                  {
300
                   EE_Parameter.Kanalbelegung[K_POTI5] = eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+8]);
299
                   EE_Parameter.Kanalbelegung[K_POTI5] = eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+8));
301
           EE_Parameter.Kanalbelegung[K_POTI6] = eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+9]);
300
           EE_Parameter.Kanalbelegung[K_POTI6] = eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+9));
302
           EE_Parameter.Kanalbelegung[K_POTI7] = eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+10]);
301
           EE_Parameter.Kanalbelegung[K_POTI7] = eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+10));
303
           EE_Parameter.Kanalbelegung[K_POTI8] = eeprom_read_byte(&EEPromArray[EEPROM_ADR_CHANNELS+11]);
302
           EE_Parameter.Kanalbelegung[K_POTI8] = eeprom_read_byte((unsigned char*)(EEPROM_ADR_CHANNELS+11));
304
                  }
303
                  }
305
                  else
304
                  else
306
                  {
305
                  {
307
           EE_Parameter.Kanalbelegung[K_POTI5] = 9;
306
           EE_Parameter.Kanalbelegung[K_POTI5] = 9;
Line 312... Line 311...
312
         if(i==1) printf(": Generating Default-Parameter using old Stick Settings");
311
         if(i==1) printf(": Generating Default-Parameter using old Stick Settings");
313
                } else DefaultStickMapping();
312
                } else DefaultStickMapping();
314
       WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
313
       WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
315
      }
314
      }
316
          SetActiveParamSetNumber(3); // default-Setting
315
          SetActiveParamSetNumber(3); // default-Setting
317
          eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], EE_DATENREVISION);
316
          eeprom_write_byte((unsigned char*)(EEPROM_ADR_VALID), EE_DATENREVISION);
318
        }
317
        }
Line 319... Line 318...
319
 
318
 
320
    FlugMinuten = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_MINUTES2]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_MINUTES2+1]);
319
    FlugMinuten = (int)eeprom_read_byte((unsigned char*)(EEPROM_ADR_MINUTES2)) * 256 + (int)eeprom_read_byte((unsigned char*)(EEPROM_ADR_MINUTES2+1));
321
    FlugMinutenGesamt = (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_MINUTES]) * 256 + (int)eeprom_read_byte(&EEPromArray[EEPROM_ADR_MINUTES+1]);
320
    FlugMinutenGesamt = (int)eeprom_read_byte((unsigned char*)(EEPROM_ADR_MINUTES)) * 256 + (int)eeprom_read_byte((unsigned char*)(EEPROM_ADR_MINUTES+1));
322
    if(FlugMinutenGesamt == 0xffff || FlugMinuten == 0xffff)
321
    if(FlugMinutenGesamt == 0xffff || FlugMinuten == 0xffff)
323
         {
322
         {
324
          FlugMinuten = 0;
323
          FlugMinuten = 0;
325
          FlugMinutenGesamt = 0;
324
          FlugMinutenGesamt = 0;
326
         }
325
         }
Line 327... Line 326...
327
    printf("\n\rFlight-time %u min  Total:%u min" ,FlugMinuten,FlugMinutenGesamt);
326
    printf("\n\rFlight-time %u min  Total:%u min" ,FlugMinuten,FlugMinutenGesamt);
328
 
327
 
329
    if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACC_NICK]) > 4)
328
    if(eeprom_read_byte((unsigned char*)(EEPROM_ADR_ACC_NICK)) > 4)
330
     {
329
     {
Line 331... Line 330...
331
       printf("\n\rACC not calibrated !");
330
       printf("\n\rACC not calibrated !");
Line 469... Line 468...
469
                                if(++timer2 == 2930)  // eine Minute
468
                                if(++timer2 == 2930)  // eine Minute
470
                                 {
469
                                 {
471
                                   timer2 = 0;
470
                                   timer2 = 0;
472
                   FlugMinuten++;
471
                   FlugMinuten++;
473
                       FlugMinutenGesamt++;
472
                       FlugMinutenGesamt++;
474
                   eeprom_write_byte(&EEPromArray[EEPROM_ADR_MINUTES2],FlugMinuten / 256);
473
                   eeprom_write_byte((unsigned char*)(EEPROM_ADR_MINUTES2),FlugMinuten / 256);
475
                   eeprom_write_byte(&EEPromArray[EEPROM_ADR_MINUTES2+1],FlugMinuten % 256);
474
                   eeprom_write_byte((unsigned char*)(EEPROM_ADR_MINUTES2+1),FlugMinuten % 256);
476
                   eeprom_write_byte(&EEPromArray[EEPROM_ADR_MINUTES],FlugMinutenGesamt / 256);
475
                   eeprom_write_byte((unsigned char*)(EEPROM_ADR_MINUTES),FlugMinutenGesamt / 256);
477
                   eeprom_write_byte(&EEPromArray[EEPROM_ADR_MINUTES+1],FlugMinutenGesamt % 256);
476
                   eeprom_write_byte((unsigned char*)(EEPROM_ADR_MINUTES+1),FlugMinutenGesamt % 256);
478
                                   timer = SetDelay(20); // falls "timer += 20;" mal nicht geht
477
                                   timer = SetDelay(20); // falls "timer += 20;" mal nicht geht
479
                             }
478
                             }
480
                        }
479
                        }
481
           LED_Update();
480
           LED_Update();
482
           Capacity_Update();
481
           Capacity_Update();