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); |