Subversion Repositories NaviCtrl

Rev

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

Rev 340 Rev 345
Line 277... Line 277...
277
//
277
//
278
//
278
//
279
// Returnvalue: '1' if a point was added
279
// Returnvalue: '1' if a point was added
280
//________________________________________________________________________________________________________________________________________
280
//________________________________________________________________________________________________________________________________________
Line 281... Line 281...
281
 
281
 
282
u8 GPX_TrackSegementAddPoint(GPX_Document_t *doc)
282
u8 GPX_TrackSegementAddPoint(GPX_Document_t *doc,unsigned char part)
Line 283... Line 283...
283
{
283
{
284
 
284
 
Line 295... Line 295...
295
                        {
295
                        {
296
                                s32 i32_1, i32_2;
296
                                s32 i32_1, i32_2;
297
                                s16 i16_1;
297
                                s16 i16_1;
298
                                u8 u8_1, u8_2;
298
                                u8 u8_1, u8_2;
299
                                // write <trkpt> tag
299
                                // write <trkpt> tag
-
 
300
                        switch(part)
-
 
301
                          {
-
 
302
                           case 0:
300
                                if(GPSData.Position.Latitude < 0) u8_1 = '-';
303
                                if(GPSData.Position.Latitude < 0) u8_1 = '-';
301
                                else u8_1 = '+';
304
                                else u8_1 = '+';
302
                                i32_1 = abs(GPSData.Position.Latitude)/10000000L;
305
                                i32_1 = abs(GPSData.Position.Latitude)/10000000L;
303
                                i32_2 = abs(GPSData.Position.Latitude)%10000000L;
306
                                i32_2 = abs(GPSData.Position.Latitude)%10000000L;
304
                                sprintf(string, "<trkpt lat=\"%c%ld.%07ld\" ",u8_1, i32_1, i32_2);
307
                                sprintf(string, "<trkpt lat=\"%c%ld.%07ld\" ",u8_1, i32_1, i32_2);
Line 307... Line 310...
307
                                else u8_1 = '+';
310
                                else u8_1 = '+';
308
                                i32_1 = abs(GPSData.Position.Longitude)/10000000L;
311
                                i32_1 = abs(GPSData.Position.Longitude)/10000000L;
309
                                i32_2 = abs(GPSData.Position.Longitude)%10000000L;
312
                                i32_2 = abs(GPSData.Position.Longitude)%10000000L;
310
                                sprintf(string, "lon=\"%c%ld.%07ld\">\r\n",u8_1, i32_1, i32_2);
313
                                sprintf(string, "lon=\"%c%ld.%07ld\">\r\n",u8_1, i32_1, i32_2);
311
                                fputs_(string, doc->file);
314
                                fputs_(string, doc->file);
-
 
315
                           break;
-
 
316
                           case 1:
312
                                // write <ele> taga
317
                                // write <ele> taga
313
                                i32_2 = GPSData.Position.Altitude - NaviData.HomePosition.Altitude;
318
                                i32_2 = GPSData.Position.Altitude - NaviData.HomePosition.Altitude;
314
                                if(i32_2 < 0) i32_2 = 0; // avoid negative altitudes in log
319
                                if(i32_2 < 0) i32_2 = 0; // avoid negative altitudes in log
315
                                i32_1 = i32_2/1000L;
320
                                i32_1 = i32_2/1000L;
316
                                i32_2 = i32_2%1000L;
321
                                i32_2 = i32_2%1000L;
Line 323... Line 328...
323
                                sprintf(string, "<sat>%d</sat>\r\n", NaviData.SatsInUse);
328
                                sprintf(string, "<sat>%d</sat>\r\n", NaviData.SatsInUse);
324
                                fputs_(string, doc->file);
329
                                fputs_(string, doc->file);
325
                                // todo: add  <extensions> tag with additional data to be logged
330
                                // todo: add  <extensions> tag with additional data to be logged
326
                                sprintf(string, "<extensions>\r\n");
331
                                sprintf(string, "<extensions>\r\n");
327
                                fputs_(string, doc->file);
332
                                fputs_(string, doc->file);
-
 
333
                           break;
-
 
334
                           case 2:
328
                                // Altimeter according to air pressure
335
                                // Altimeter according to air pressure
329
                                sprintf(string, "<Altimeter>%d,'%c'</Altimeter>\r\n", NaviData.Altimeter,FromFC_VarioCharacter);
336
                                sprintf(string, "<Altimeter>%d,'%c'</Altimeter>\r\n", NaviData.Altimeter,FromFC_VarioCharacter);
330
                                fputs_(string, doc->file);
337
                                fputs_(string, doc->file);
331
                                // Variometer according to air pressure
338
                                // Variometer according to air pressure
332
                                sprintf(string, "<Variometer>%d</Variometer>\r\n", NaviData.Variometer);
339
                                sprintf(string, "<Variometer>%d</Variometer>\r\n", NaviData.Variometer);
Line 342... Line 349...
342
                                sprintf(string, "<VerticalSpeed>%d</VerticalSpeed>\r\n", NaviData.TopSpeed);
349
                                sprintf(string, "<VerticalSpeed>%d</VerticalSpeed>\r\n", NaviData.TopSpeed);
343
                                fputs_(string, doc->file);
350
                                fputs_(string, doc->file);
344
                                // Flight duration
351
                                // Flight duration
345
                                sprintf(string, "<FlightTime>%d</FlightTime>\r\n", NaviData.FlyingTime);
352
                                sprintf(string, "<FlightTime>%d</FlightTime>\r\n", NaviData.FlyingTime);
346
                                fputs_(string, doc->file);
353
                                fputs_(string, doc->file);
-
 
354
                           break;
-
 
355
                           case 3:
347
                                // Ubat
356
                                // Ubat
348
                                u8_1 = NaviData.UBat / 10;
357
                                u8_1 = NaviData.UBat / 10;
349
                                u8_2 = NaviData.UBat % 10;
358
                                u8_2 = NaviData.UBat % 10;
350
                                sprintf(string, "<Voltage>%d.%01d</Voltage>\r\n", u8_1, u8_2);
359
                                sprintf(string, "<Voltage>%d.%01d</Voltage>\r\n", u8_1, u8_2);
351
                                fputs_(string, doc->file);
360
                                fputs_(string, doc->file);
Line 359... Line 368...
359
                                fputs_(string, doc->file);
368
                                fputs_(string, doc->file);
360
                                // RC Quality
369
                                // RC Quality
361
                                sprintf(string, "<RCQuality>%d</RCQuality>\r\n", FC.RC_Quality);
370
                                sprintf(string, "<RCQuality>%d</RCQuality>\r\n", FC.RC_Quality);
362
                                fputs_(string, doc->file);
371
                                fputs_(string, doc->file);
363
                                // RC Received Signal Strength Indication
372
                                // RC Received Signal Strength Indication
-
 
373
                           break;
-
 
374
                           case 4:
364
                                sprintf(string, "<RCRSSI>%d</RCRSSI>\r\n", FC.RC_RSSI);
375
                                sprintf(string, "<RCRSSI>%d</RCRSSI>\r\n", FC.RC_RSSI);
365
                                fputs_(string, doc->file);
376
                                fputs_(string, doc->file);
366
                                // Compassind deg
377
                                // Compassind deg
367
                                i16_1 = FromFlightCtrl.GyroHeading / 10;
378
                                i16_1 = FromFlightCtrl.GyroHeading / 10;
368
                                sprintf(string, "<Compass>%03d,%03d</Compass>\r\n", i16_1,ToFlightCtrl.CompassHeading);
379
                                sprintf(string, "<Compass>%03d,%03d</Compass>\r\n", i16_1,ToFlightCtrl.CompassHeading);
Line 371... Line 382...
371
                                sprintf(string, "<NickAngle>%03d</NickAngle>\r\n", NaviData.AngleNick);
382
                                sprintf(string, "<NickAngle>%03d</NickAngle>\r\n", NaviData.AngleNick);
372
                                fputs_(string, doc->file);
383
                                fputs_(string, doc->file);
373
                                // Roll Angle in deg
384
                                // Roll Angle in deg
374
                                sprintf(string, "<RollAngle>%03d</RollAngle>\r\n", NaviData.AngleRoll);
385
                                sprintf(string, "<RollAngle>%03d</RollAngle>\r\n", NaviData.AngleRoll);
375
                                fputs_(string, doc->file);
386
                                fputs_(string, doc->file);
-
 
387
                           break;
-
 
388
                           case 5:
376
                                // magnetic field 
389
                                // magnetic field 
377
                                sprintf(string, "<MagnetField>%03d</MagnetField>\r\n",(u16) (EarthMagneticFieldFiltered/5));
390
                                sprintf(string, "<MagnetField>%03d</MagnetField>\r\n",(u16) (EarthMagneticFieldFiltered/5));
378
                                fputs_(string, doc->file);
391
                                fputs_(string, doc->file);
379
                                // magnetic inclination & error 
392
                                // magnetic inclination & error 
380
                                sprintf(string, "<MagnetInclination>%02d,%02d</MagnetInclination>\r\n",(s16)EarthMagneticInclinationFiltered/10,(s16)(EarthMagneticInclinationFiltered/10 - EarthMagneticInclinationTheoretic));
393
                                sprintf(string, "<MagnetInclination>%02d,%02d</MagnetInclination>\r\n",(s16)EarthMagneticInclinationFiltered/10,(s16)(EarthMagneticInclinationFiltered/10 - EarthMagneticInclinationTheoretic));
Line 382... Line 395...
382
                                // BL Information
395
                                // BL Information
383
                                sprintf(string, "<MotorCurrent>%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d</MotorCurrent>\r\n",MotorCurrent[0],MotorCurrent[1],MotorCurrent[2],MotorCurrent[3],MotorCurrent[4],MotorCurrent[5],MotorCurrent[6],MotorCurrent[7],MotorCurrent[8],MotorCurrent[9],MotorCurrent[10],MotorCurrent[11]);
396
                                sprintf(string, "<MotorCurrent>%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d</MotorCurrent>\r\n",MotorCurrent[0],MotorCurrent[1],MotorCurrent[2],MotorCurrent[3],MotorCurrent[4],MotorCurrent[5],MotorCurrent[6],MotorCurrent[7],MotorCurrent[8],MotorCurrent[9],MotorCurrent[10],MotorCurrent[11]);
384
                                fputs_(string, doc->file);
397
                                fputs_(string, doc->file);
385
                                sprintf(string, "<BL_Temperature>%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d</BL_Temperature>\r\n",MotorTemperature[0],MotorTemperature[1],MotorTemperature[2],MotorTemperature[3],MotorTemperature[4],MotorTemperature[5],MotorTemperature[6],MotorTemperature[7],MotorTemperature[8],MotorTemperature[9],MotorTemperature[10],MotorTemperature[11]);
398
                                sprintf(string, "<BL_Temperature>%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d</BL_Temperature>\r\n",MotorTemperature[0],MotorTemperature[1],MotorTemperature[2],MotorTemperature[3],MotorTemperature[4],MotorTemperature[5],MotorTemperature[6],MotorTemperature[7],MotorTemperature[8],MotorTemperature[9],MotorTemperature[10],MotorTemperature[11]);
386
                                fputs_(string, doc->file);
399
                                fputs_(string, doc->file);
-
 
400
                           break;
-
 
401
                           case 6:
387
                                sprintf(string, "<AvaiableMotorPower>%03d</AvaiableMotorPower>\r\n",BL_MinOfMaxPWM);
402
                                sprintf(string, "<AvaiableMotorPower>%03d</AvaiableMotorPower>\r\n",BL_MinOfMaxPWM);
388
                                fputs_(string, doc->file);
403
                                fputs_(string, doc->file);
389
                                sprintf(string, "<FC_I2C_ErrorCounter>%03d</FC_I2C_ErrorCounter>\r\n",(s16)FC_I2C_ErrorConter);
404
                                sprintf(string, "<FC_I2C_ErrorCounter>%03d</FC_I2C_ErrorCounter>\r\n",(s16)FC_I2C_ErrorConter);
390
                                fputs_(string, doc->file);
405
                                fputs_(string, doc->file);
391
                                // Analog inputs of the NC
406
                                // Analog inputs of the NC
392
                                sprintf(string, "<AnalogInputs>%d,%d,%d,%d</AnalogInputs>\r\n",AnalogData.Ch4,AnalogData.Ch5,AnalogData.Ch6,AnalogData.Ch7);
407
                                sprintf(string, "<AnalogInputs>%d,%d,%d,%d</AnalogInputs>\r\n",AnalogData.Ch4,AnalogData.Ch5,AnalogData.Ch6,AnalogData.Ch7);
393
                                fputs_(string, doc->file);
408
                                fputs_(string, doc->file);
394
                                // NC Mode (contains the status)
409
                                // NC Mode (contains the status)
395
                                sprintf(string, "<NCFlag>0x%02X</NCFlag>\r\n", NCFlags);
410
                                sprintf(string, "<NCFlag>0x%02X</NCFlag>\r\n", NCFlags);
396
                                fputs_(string, doc->file);
411
                                fputs_(string, doc->file);
-
 
412
                           break;
-
 
413
                           case 7:
397
                                // Flags
414
                                // Flags
398
                                sprintf(string, "<FCFlags2>0x%02x,0x%02x</FCFlags2>\r\n",Logging_FCStatusFlags1,Logging_FCStatusFlags2);
415
                                sprintf(string, "<FCFlags2>0x%02x,0x%02x</FCFlags2>\r\n",Logging_FCStatusFlags1,Logging_FCStatusFlags2);
399
                                fputs_(string, doc->file);
416
                                fputs_(string, doc->file);
400
                                Logging_FCStatusFlags1 = 0;
417
                                Logging_FCStatusFlags1 = 0;
401
                                Logging_FCStatusFlags2 = 0;
418
                                Logging_FCStatusFlags2 = 0;
Line 406... Line 423...
406
                                sprintf(string, "<TargetBearing>%03d</TargetBearing>\r\n", NaviData.TargetPositionDeviation.Bearing);
423
                                sprintf(string, "<TargetBearing>%03d</TargetBearing>\r\n", NaviData.TargetPositionDeviation.Bearing);
407
                                fputs_(string, doc->file);
424
                                fputs_(string, doc->file);
408
                                // Target Distance in dm
425
                                // Target Distance in dm
409
                                sprintf(string, "<TargetDistance>%d</TargetDistance>\r\n", NaviData.TargetPositionDeviation.Distance);
426
                                sprintf(string, "<TargetDistance>%d</TargetDistance>\r\n", NaviData.TargetPositionDeviation.Distance);
410
                                fputs_(string, doc->file);
427
                                fputs_(string, doc->file);
-
 
428
                           break;
-
 
429
                           case 8:
411
                                // RC Sticks as Nick/Roll/Yaw
430
                                // RC Sticks as Nick/Roll/Yaw
412
                                sprintf(string, "<RCSticks>%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d</RCSticks>\r\n", FC.StickNick,FC.StickRoll, FC.StickYaw, FC.StickGas,FC.Poti[0],FC.Poti[1],FC.Poti[2],FC.Poti[3],FC.Poti[4],FC.Poti[5],FC.Poti[6],FC.Poti[7]);
431
                                sprintf(string, "<RCSticks>%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d</RCSticks>\r\n", FC.StickNick,FC.StickRoll, FC.StickYaw, FC.StickGas,FC.Poti[0],FC.Poti[1],FC.Poti[2],FC.Poti[3],FC.Poti[4],FC.Poti[5],FC.Poti[6],FC.Poti[7]);
413
                                fputs_(string, doc->file);
432
                                fputs_(string, doc->file);
414
                                // GPS Sticks as Nick/Roll/Yaw
433
                                // GPS Sticks as Nick/Roll/Yaw
415
                                sprintf(string, "<GPSSticks>%d,%d,%d,'%c'</GPSSticks>\r\n", ToFlightCtrl.GPSStick.Nick, ToFlightCtrl.GPSStick.Roll, ToFlightCtrl.GPSStick.Yaw,NC_GPS_ModeCharacter);
434
                                sprintf(string, "<GPSSticks>%d,%d,%d,'%c'</GPSSticks>\r\n", ToFlightCtrl.GPSStick.Nick, ToFlightCtrl.GPSStick.Roll, ToFlightCtrl.GPSStick.Yaw,NC_GPS_ModeCharacter);
Line 417... Line 436...
417
                                // eof extensions
436
                                // eof extensions
418
                                sprintf(string, "</extensions>\r\n");
437
                                sprintf(string, "</extensions>\r\n");
419
                                fputs_(string, doc->file);
438
                                fputs_(string, doc->file);
420
                                sprintf(string, "</trkpt>\r\n");
439
                                sprintf(string, "</trkpt>\r\n");
421
                                fputs_(string, doc->file);
440
                                fputs_(string, doc->file);
-
 
441
                           break;
-
 
442
                          }
422
                                retvalue = 1;
443
                        retvalue = 1;
423
                        }
444
                        }
424
                }
445
                }
425
        }
446
        }
426
        return(retvalue);
447
        return(retvalue);
427
}
448
}
Line 433... Line 454...
433
//
454
//
434
//
455
//
435
// Returnvalue: '1' if an gps coordinate was logged
456
// Returnvalue: '1' if an gps coordinate was logged
436
//________________________________________________________________________________________________________________________________________
457
//________________________________________________________________________________________________________________________________________
Line 437... Line 458...
437
 
458
 
438
u8 GPX_LoggGPSCoordinates(GPX_Document_t *doc)
459
u8 GPX_LoggGPSCoordinates(GPX_Document_t *doc,unsigned char part)
439
{
460
{
440
        u8 retval = 0;
461
        u8 retval = 0;
441
        while(doc->state != GPX_DOC_TRACKSEGMENT_OPENED)                                // automatic create document with default filename on the card.
462
        while(doc->state != GPX_DOC_TRACKSEGMENT_OPENED)                                // automatic create document with default filename on the card.
442
        {
463
        {
Line 462... Line 483...
462
                if(retval != 1) return(retval); // stop on error
483
                if(retval != 1) return(retval); // stop on error
463
        }
484
        }
Line 464... Line 485...
464
 
485
 
465
        if(doc->state == GPX_DOC_TRACKSEGMENT_OPENED)                                           // if the document was opened add coordinates to the document.
486
        if(doc->state == GPX_DOC_TRACKSEGMENT_OPENED)                                           // if the document was opened add coordinates to the document.
466
        {
487
        {
467
                retval = GPX_TrackSegementAddPoint(doc);                                                // add a track segment point
488
                retval = GPX_TrackSegementAddPoint(doc,part);                                           // add a track segment point
468
        }
489
        }
469
        return(retval);
490
        return(retval);