Subversion Repositories FlightCtrl

Rev

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

Rev 2072 Rev 2090
Line 82... Line 82...
82
GPSPacket_t GPSPacket;
82
GPSPacket_t GPSPacket;
83
VarioPacket_t VarioPacket;
83
VarioPacket_t VarioPacket;
84
ASCIIPacket_t ASCIIPacket;
84
ASCIIPacket_t ASCIIPacket;
85
ElectricAirPacket_t ElectricAirPacket;
85
ElectricAirPacket_t ElectricAirPacket;
86
HoTTGeneral_t HoTTGeneral;
86
HoTTGeneral_t HoTTGeneral;
-
 
87
unsigned char SpeakHoTT = SPEAK_MIKROKOPTER;
87
int HoTTVarioMeter = 0;
88
int HoTTVarioMeter = 0;
88
 
-
 
-
 
89
const char PROGMEM MIKROKOPTER[] =      {"     MikroKopter     "};
89
const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17] =
90
const char PROGMEM NC_ERROR_TEXT[MAX_ERR_NUMBER][17] =
90
{
91
{
91
//0123456789123456
92
//0123456789123456
92
 "No Error        \0",  // 0
93
 "No Error        \0",  // 0
93
 "Not compatible  \0",  // 1
94
 "Not compatible  \0",  // 1
Line 119... Line 120...
119
 "SD-Logging error\0",  // 27
120
 "SD-Logging error\0",  // 27
120
 "Flying range!   \0",  // 28
121
 "Flying range!   \0",  // 28
121
 "Max Altitude!   \0"   // 29
122
 "Max Altitude!   \0"   // 29
122
};
123
};
Line -... Line 124...
-
 
124
 
-
 
125
 
-
 
126
const char PROGMEM HOTT_ERROR[MAX_ERR_NUMBER][2] =
-
 
127
{       // 1 -> only in flight   0 -> also on ground
-
 
128
//0123456789123456
-
 
129
         {0,0},// "No Error        \0",  // 0
-
 
130
         {SPEAK_ERROR,0},// "Not compatible  \0",  // 1
-
 
131
         {SPEAK_ERROR,0},// "MK3Mag not compa\0",  // 2
-
 
132
         {SPEAK_ERR_NAVI,1},// "No FC communicat\0",  // 3
-
 
133
         {SPEAK_ERR_COMPASS,1},// "MK3Mag communica\0",  // 4
-
 
134
         {SPEAK_ERR_GPS,0},// "GPS communicatio\0",  // 5
-
 
135
         {SPEAK_ERR_COMPASS,1},// "compass value   \0",  // 6
-
 
136
         {SPEAK_ERR_RECEICER,0},// "RC Signal lost  \0",  // 7
-
 
137
         {SPEAK_ERR_NAVI,0},// "FC spi rx error \0",  // 8
-
 
138
         {SPEAK_ERR_NAVI,0},// "No NC communicat\0",  // 9
-
 
139
         {SPEAK_ERR_SENSOR,0},// "FC Nick Gyro    \0",  // 10
-
 
140
         {SPEAK_ERR_SENSOR,0},// "FC Roll Gyro    \0",  // 11
-
 
141
         {SPEAK_ERR_SENSOR,0},// "FC Yaw Gyro     \0",  // 12
-
 
142
         {SPEAK_ERR_SENSOR,0},// "FC Nick ACC     \0",  // 13
-
 
143
         {SPEAK_ERR_SENSOR,0},// "FC Roll ACC     \0",  // 14
-
 
144
         {SPEAK_ERR_SENSOR,0},// "FC Z-ACC        \0",  // 15
-
 
145
         {SPEAK_ERR_SENSOR,0},// "Pressure sensor \0",  // 16
-
 
146
         {SPEAK_ERR_DATABUS,1},// "I2C FC->BL-Ctrl \0",  // 17
-
 
147
         {SPEAK_ERR_DATABUS,1},// "Bl Missing      \0",  // 18
-
 
148
         {SPEAK_ERROR,0},// "Mixer Error     \0",  // 19
-
 
149
         {SPEAK_CF_OFF,1},// "Carefree Error  \0",  // 20
-
 
150
         {SPEAK_GPS_FIX,1},// "GPS Fix lost    \0",  // 21
-
 
151
         {SPEAK_ERR_COMPASS,0},// "Magnet Error    \0",  // 22
-
 
152
         {SPEAK_ERR_MOTOR,1},// "Motor restart   \0",  // 23
-
 
153
         {SPEAK_MAX_TEMPERAT,1},// "BL Limitation   \0",  // 24
-
 
154
         {SPEAK_MAX_RANGE,1},// "GPS Range       \0",  // 25
-
 
155
         {SPEAK_ERROR,1},// "No SD-Card      \0",  // 26
-
 
156
         {SPEAK_ERROR,1},// "SD-Logging error\0",  // 27
-
 
157
         {SPEAK_MAX_RANGE,1},// "Flying range!   \0",   // 28
-
 
158
         {SPEAK_MAX_ALTITUD,1}// "Max Altitude!   \0"   // 29
-
 
159
};
-
 
160
 
-
 
161
 
123
 
162
 
124
unsigned char MaxBlTempertaure = 0;
163
unsigned char MaxBlTempertaure = 0;
125
unsigned char MinBlTempertaure = 0;
164
unsigned char MinBlTempertaure = 0;
Line 126... Line 165...
126
unsigned char HottestBl = 0;
165
unsigned char HottestBl = 0;
Line 150... Line 189...
150
}
189
}
151
//---------------------------------------------------------------
190
//---------------------------------------------------------------
Line 152... Line 191...
152
 
191
 
153
unsigned char HoTT_Waring(void)
192
unsigned char HoTT_Waring(void)
-
 
193
{
-
 
194
  unsigned char status = 0;
-
 
195
  static char old_status = 0;
-
 
196
  static int repeat;
-
 
197
//SpeakHoTT = 0; // zunächst noch nicht unterstützen
-
 
198
DebugOut.Analog[16] = 0;
154
{
199
  if(Parameter_UserParam1) return(Parameter_UserParam1);
-
 
200
  if(FC_StatusFlags & FC_STATUS_LOWBAT) status = VOICE_MINIMALE_EINGANSSPANNUNG;
-
 
201
  else
-
 
202
  if(NC_ErrorCode)      
-
 
203
   {
-
 
204
    if(MotorenEin || !pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][1])) status = pgm_read_byte(&HOTT_ERROR[NC_ErrorCode][0]);
-
 
205
   }
-
 
206
 
-
 
207
  if(!status) {status = SpeakHoTT; };
-
 
208
 
-
 
209
  if(old_status == status)
155
  if(FC_StatusFlags & FC_STATUS_LOWBAT) return(VOICE_MINIMALE_EINGANSSPANNUNG);
210
   {
-
 
211
    if(!CheckDelay(repeat)) return(0);
-
 
212
        repeat = SetDelay(5000);
-
 
213
   }
-
 
214
   else repeat = SetDelay(2000);
-
 
215
 
-
 
216
  if(status)
-
 
217
   {
-
 
218
    if(status == SpeakHoTT) SpeakHoTT = 0;
-
 
219
   }   
-
 
220
  old_status = status;
156
  if(MotorenEin && NC_ErrorCode)                return(VOICE_BEEP);
221
DebugOut.Analog[16] = status;
-
 
222
if(status) DebugOut.Analog[17]++;
157
//if(Parameter_UserParam1) return(Parameter_UserParam1);
223
 
158
  return(0);
224
  return(status);
Line 159... Line 225...
159
}
225
}
160
 
226
 
161
//---------------------------------------------------------------
227
//---------------------------------------------------------------
Line 225... Line 291...
225
 
291
 
226
 
292
 
227
//---------------------------------------------------------------
293
//---------------------------------------------------------------
-
 
294
unsigned char HoTT_Telemety(unsigned char packet_request)
-
 
295
{
-
 
296
unsigned char i;
228
unsigned char HoTT_Telemety(unsigned char packet_request)
297
  //Debug("rqst: %02X",packet_request);
229
{
298
 
230
 switch(packet_request)
299
 switch(packet_request)
231
 {
300
 {
232
  case HOTT_VARIO_PACKET_ID:
301
  case HOTT_VARIO_PACKET_ID:
233
                VarioPacket.Altitude = HoehenWert/100 + 500;  
302
                VarioPacket.Altitude = HoehenWert/100 + 500;  
234
                VarioPacket.m_sec = BuildHoTT_Vario();
303
                VarioPacket.m_sec = BuildHoTT_Vario();
235
                VarioPacket.m_3sec = VarioPacket.m_sec;
304
                VarioPacket.m_3sec = VarioPacket.m_sec;
236
                VarioPacket.m_10sec = VarioPacket.m_sec;
305
                VarioPacket.m_10sec = VarioPacket.m_sec;
237
                if (VarioPacket.Altitude < VarioPacket.MinAltitude) VarioPacket.MinAltitude = VarioPacket.Altitude;
306
                if (VarioPacket.Altitude < VarioPacket.MinAltitude) VarioPacket.MinAltitude = VarioPacket.Altitude;
238
                if (VarioPacket.Altitude > VarioPacket.MaxAltitude) VarioPacket.MaxAltitude = VarioPacket.Altitude;            
307
                if (VarioPacket.Altitude > VarioPacket.MaxAltitude) VarioPacket.MaxAltitude = VarioPacket.Altitude;            
-
 
308
                VarioPacket.WarnBeep = 0;//HoTT_Waring();
-
 
309
                HoTT_DataPointer = (unsigned char *) &VarioPacket;
-
 
310
        VarioPacket.FreeCharacters[0] = VarioCharacter;
-
 
311
    if(FC_StatusFlags2 & FC_STATUS2_CAREFREE) VarioPacket.FreeCharacters[1] = 'C'; else VarioPacket.FreeCharacters[1] = ' ';
-
 
312
//      VarioPacket.FreeCharacters[2] = ' ';
-
 
313
    if(NC_ErrorCode)
-
 
314
         {
-
 
315
                for(i=0; i<16;i++) VarioPacket.Text[i+4] = pgm_read_byte(&NC_ERROR_TEXT[NC_ErrorCode][i]);
-
 
316
                VarioPacket.Text[0] = NC_ErrorCode/10 + '0';
-
 
317
                VarioPacket.Text[1] = NC_ErrorCode%10 + '0';
-
 
318
                VarioPacket.Text[2] = ':';
-
 
319
         }
239
                VarioPacket.WarnBeep = HoTT_Waring();
320
         else for(i=0; i<21;i++) VarioPacket.Text[i] = pgm_read_byte(&MIKROKOPTER[i]); // no Error
240
                HoTT_DataPointer = (unsigned char *) &VarioPacket;
321
         
Line 241... Line 322...
241
                return(sizeof(VarioPacket));
322
                return(sizeof(VarioPacket));
242
                break;
323
                break;
243
 
324
 
244
  case HOTT_GPS_PACKET_ID:
325
  case HOTT_GPS_PACKET_ID:
245
                GPSPacket.Altitude = HoehenWert/100 + 500;  
326
                GPSPacket.Altitude = HoehenWert/100 + 500;  
246
//              GPSPacket.Distance = GPSInfo.HomeDistance/10;  // macht die NC
327
//              GPSPacket.Distance = GPSInfo.HomeDistance/10;  // macht die NC
247
//              GPSPacket.Heading = GPSInfo.HomeBearing/2;     // macht die NC
328
//              GPSPacket.Heading = GPSInfo.HomeBearing/2;     // macht die NC
248
//              GPSPacket.Speed = (GPSInfo.Speed * 36) / 10;   // macht die NC
329
//              GPSPacket.Speed = (GPSInfo.Speed * 36) / 10;   // macht die NC
249
                GPSPacket.m_sec = BuildHoTT_Vario();
330
                GPSPacket.m_sec = BuildHoTT_Vario();
-
 
331
                GPSPacket.m_3sec = 120;
-
 
332
                GPSPacket.NumOfSats = GPSInfo.NumOfSats;
-
 
333
                GPSPacket.WarnBeep = HoTT_Waring();
-
 
334
                if(GPSInfo.Flags & FLAG_DIFFSOLN) GPSPacket.SatFix = 'D';
250
                GPSPacket.m_3sec = 120;
335
                else
-
 
336
        if(GPSInfo.SatFix == SATFIX_3D) GPSPacket.SatFix = ' ';
-
 
337
                else GPSPacket.SatFix = '!';
-
 
338
                HoTT_DataPointer = (unsigned char *) &GPSPacket;
251
                GPSPacket.m_10sec = 0;
339
                GPSPacket.FreeCharacters[0] = NC_GPS_ModeCharacter;
252
                GPSPacket.WarnBeep = HoTT_Waring();
340
                GPSPacket.FreeCharacters[2] = GPSPacket.SatFix;
253
                HoTT_DataPointer = (unsigned char *) &GPSPacket;
341
                GPSPacket.HomeDirection = GPSInfo.HomeBearing / 2;//230;
254
                return(sizeof(GPSPacket));  
342
                return(sizeof(GPSPacket));  
255
                break;
343
                break;
Line 268... Line 356...
268
                ElectricAirPacket.m_3sec = 120;
356
                ElectricAirPacket.m_3sec = 120;
269
                ElectricAirPacket.InputVoltage = UBat;
357
                ElectricAirPacket.InputVoltage = UBat;
270
                ElectricAirPacket.Temperature1 = MinBlTempertaure + 20;
358
                ElectricAirPacket.Temperature1 = MinBlTempertaure + 20;
271
                ElectricAirPacket.Temperature2 = MaxBlTempertaure + 20;
359
                ElectricAirPacket.Temperature2 = MaxBlTempertaure + 20;
272
                ElectricAirPacket.Capacity = Capacity.UsedCapacity/10;
360
                ElectricAirPacket.Capacity = Capacity.UsedCapacity/10;
273
                ElectricAirPacket.WarnBeep = HoTT_Waring();
361
                ElectricAirPacket.WarnBeep = 0;//HoTT_Waring();
274
                ElectricAirPacket.Current = Capacity.ActualCurrent;
362
                ElectricAirPacket.Current = Capacity.ActualCurrent;
275
                HoTT_DataPointer = (unsigned char *) &ElectricAirPacket;
363
                HoTT_DataPointer = (unsigned char *) &ElectricAirPacket;
-
 
364
                ElectricAirPacket.FlightTimeMinutes = FlugSekunden / 60;
-
 
365
                ElectricAirPacket.FlightTimeSeconds = FlugSekunden % 60;
276
                return(sizeof(ElectricAirPacket));
366
                return(sizeof(ElectricAirPacket));
277
                break;
367
                break;
278
  case HOTT_GENERAL_PACKET_ID:
368
  case HOTT_GENERAL_PACKET_ID:
279
                GetHottestBl();
369
                GetHottestBl();
280
                HoTTGeneral.Rpm = GPSInfo.HomeDistance/100;
370
                HoTTGeneral.Rpm = GPSInfo.HomeDistance/100;
Line 291... Line 381...
291
                HoTTGeneral.m_3sec = 120;
381
                HoTTGeneral.m_3sec = 120;
292
                HoTTGeneral.InputVoltage = UBat;
382
                HoTTGeneral.InputVoltage = UBat;
293
                HoTTGeneral.Temperature1 = MinBlTempertaure + 20;
383
                HoTTGeneral.Temperature1 = MinBlTempertaure + 20;
294
                HoTTGeneral.Temperature2 = MaxBlTempertaure + 20;
384
                HoTTGeneral.Temperature2 = MaxBlTempertaure + 20;
295
                HoTTGeneral.Capacity = Capacity.UsedCapacity/10;
385
                HoTTGeneral.Capacity = Capacity.UsedCapacity/10;
296
                HoTTGeneral.WarnBeep = HoTT_Waring();
386
                HoTTGeneral.WarnBeep = 0;//HoTT_Waring();
297
                HoTTGeneral.Current = Capacity.ActualCurrent;
387
                HoTTGeneral.Current = Capacity.ActualCurrent;
298
                HoTT_DataPointer = (unsigned char *) &HoTTGeneral;
388
                HoTT_DataPointer = (unsigned char *) &HoTTGeneral;
299
                return(sizeof(HoTTGeneral));
389
                return(sizeof(HoTTGeneral));
300
                break;
390
                break;
301
  default: return(0);
391
  default: return(0);
Line 378... Line 468...
378
                            HoTT_printfxy(12,5,"HM:%3d%c %c", GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter);
468
                            HoTT_printfxy(12,5,"HM:%3d%c %c", GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter);
379
                                HoTT_printfxy(9,5,"incl:%2d%c(%2i)",EarthMagneticInclination, HoTT_GRAD,EarthMagneticInclinationTheoretic);
469
                                HoTT_printfxy(9,5,"incl:%2d%c(%2i)",EarthMagneticInclination, HoTT_GRAD,EarthMagneticInclinationTheoretic);
380
              }
470
              }
381
                         else
471
                         else
382
                          {
472
                          {
383
                        //HoTT_printfxy(9,5,":");
-
 
384
                                HoTT_printfxy(0,5,"    %2um/s:  HM:%3d%c %c",GPSInfo.Speed, GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter);
473
                                HoTT_printfxy(0,5,"    %2um/s:  HM:%3d%c %c",GPSInfo.Speed, GPSInfo.HomeBearing, HoTT_GRAD, NC_GPS_ModeCharacter);
385
//                          HoTT_printfxy(11,5,"");
-
 
386
                          }    
474
                          }    
387
            }
475
            }
388
                        else Hott_ClearLine(5);
476
                        else Hott_ClearLine(5);
389
                        break;
477
                        break;
390
        case 6:
478
        case 6:
Line 400... Line 488...
400
                                {
488
                                {
401
                                 HoTT_printfxy(0,7,"ERR: ");     _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);};
489
                                 HoTT_printfxy(0,7,"ERR: ");     _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);};
402
                                }
490
                                }
403
                        else HoTT_printfxy(0,7," www.MikroKopter.de  ");
491
                        else HoTT_printfxy(0,7," www.MikroKopter.de  ");
404
                        break;
492
                        break;
405
        case 8: ASCIIPacket.WarnBeep = HoTT_Waring();
493
        case 8: //ASCIIPacket.WarnBeep = HoTT_Waring();
406
                        // ASCIIPacket.WarnBeep = Parameter_UserParam1;
494
                        // ASCIIPacket.WarnBeep = Parameter_UserParam1;
407
        case 9:
495
        case 9:
408
        case 10:
496
        case 10:
409
        case 11:
497
        case 11:
410
        case 12:
498
        case 12:
Line 517... Line 605...
517
                                {
605
                                {
518
                                 HoTT_printfxy(0,7,"ERR: ");     _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);};
606
                                 HoTT_printfxy(0,7,"ERR: ");     _printf_P(&LIBFC_HoTT_Putchar, NC_ERROR_TEXT[NC_ErrorCode] , 0);};
519
                                }
607
                                }
520
                        else HoTT_printfxy(0,7," www.MikroKopter.de  ");
608
                        else HoTT_printfxy(0,7," www.MikroKopter.de  ");
521
                        break;
609
                        break;
522
        case 8: ASCIIPacket.WarnBeep = HoTT_Waring();
610
        case 8: // ASCIIPacket.WarnBeep = HoTT_Waring();
523
                        // ASCIIPacket.WarnBeep = Parameter_UserParam1;
611
                        // ASCIIPacket.WarnBeep = Parameter_UserParam1;
524
        case 9:
612
        case 9:
525
        case 10:
613
        case 10:
526
        case 11:
614
        case 11:
527
        case 12:
615
        case 12:
Line 610... Line 698...
610
                         if(EE_Parameter.BitConfig & (CFG_LOOP_LINKS | CFG_LOOP_RECHTS | CFG_LOOP_UNTEN | CFG_LOOP_OBEN)) HoTT_printf_BLINK("LOOPING! ");
698
                         if(EE_Parameter.BitConfig & (CFG_LOOP_LINKS | CFG_LOOP_RECHTS | CFG_LOOP_UNTEN | CFG_LOOP_OBEN)) HoTT_printf_BLINK("LOOPING! ");
611
                         if(Parameter_GlobalConfig & CFG_HEADING_HOLD) HoTT_printf_BLINK("HH! ");
699
                         if(Parameter_GlobalConfig & CFG_HEADING_HOLD) HoTT_printf_BLINK("HH! ");
612
                         if(!(Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) HoTT_printf_BLINK("COMPASS OFF! ");
700
                         if(!(Parameter_GlobalConfig & CFG_KOMPASS_AKTIV)) HoTT_printf_BLINK("COMPASS OFF! ");
613
                        }
701
                        }
614
                        break;
702
                        break;
615
    case 8: ASCIIPacket.WarnBeep = HoTT_Waring();
703
    case 8: //ASCIIPacket.WarnBeep = HoTT_Waring();
616
                        break;
704
                        break;
617
    case 9:
705
    case 9:
618
    case 10:
706
    case 10:
619
    case 11:
707
    case 11:
620
    case 12:
708
    case 12: