Rev 85 | Rev 92 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 85 | Rev 86 | ||
---|---|---|---|
Line 58... | Line 58... | ||
58 | #include <stdio.h> |
58 | #include <stdio.h> |
59 | #include "91x_lib.h" |
59 | #include "91x_lib.h" |
60 | #include "gpx.h" |
60 | #include "gpx.h" |
61 | #include "gpx_header.h" |
61 | #include "gpx_header.h" |
62 | #include "timer.h" |
62 | #include "timer.h" |
- | 63 | #include "spi_slave.h" |
|
- | 64 | #include "main.h" |
|
- | 65 | #include "uart1.h" |
|
Line 63... | Line 66... | ||
63 | 66 | ||
64 | //________________________________________________________________________________________________________________________________________ |
67 | //________________________________________________________________________________________________________________________________________ |
65 | // Function: GPX_DocumentInit(GPX_Document_t *) |
68 | // Function: GPX_DocumentInit(GPX_Document_t *) |
66 | // |
69 | // |
Line 267... | Line 270... | ||
267 | u8 GPX_TrackSegementAddPoint(GPX_Document_t *doc) |
270 | u8 GPX_TrackSegementAddPoint(GPX_Document_t *doc) |
268 | { |
271 | { |
Line 269... | Line 272... | ||
269 | 272 | ||
270 | u8 retvalue = 0; |
273 | u8 retvalue = 0; |
271 | s8 string[50]; |
- | |
Line 272... | Line 274... | ||
272 | s32 rel_altitude = 0; |
274 | s8 string[50]; |
Line 273... | Line 275... | ||
273 | 275 | ||
274 | if(doc == NULL) return(0); |
276 | if(doc == NULL) return(0); |
275 | 277 | ||
276 | if((GPSData.Position.Status != INVALID) && (GPS_HomePosition.Status != INVALID)) |
278 | if((GPSData.Position.Status != INVALID) && (GPS_HomePosition.Status != INVALID)) |
277 | { |
279 | { |
278 | if(doc->state == GPX_DOC_TRACKSEGMENT_OPENED) |
280 | if(doc->state == GPX_DOC_TRACKSEGMENT_OPENED) |
279 | { |
281 | { |
280 | if(doc->file != NULL) |
282 | if(doc->file != NULL) |
- | 283 | { |
|
281 | { |
284 | s32 i32_1, i32_2; |
282 | s32 i1, i2; |
285 | s16 i16_1; |
283 | u8 sign; |
286 | u8 u8_1, u8_2; |
284 | // write <trkpt> tag |
287 | // write <trkpt> tag |
285 | if(GPSData.Position.Latitude < 0) sign = '-'; |
288 | if(GPSData.Position.Latitude < 0) u8_1 = '-'; |
286 | else sign = '+'; |
289 | else u8_1 = '+'; |
287 | i1 = abs(GPSData.Position.Latitude)/10000000L; |
290 | i32_1 = abs(GPSData.Position.Latitude)/10000000L; |
288 | i2 = abs(GPSData.Position.Latitude)%10000000L; |
291 | i32_2 = abs(GPSData.Position.Latitude)%10000000L; |
289 | sprintf(string, "<trkpt lat=\"%c%ld.%07ld\" ",sign, i1, i2); |
292 | sprintf(string, "<trkpt lat=\"%c%ld.%07ld\" ",u8_1, i32_1, i32_2); |
290 | fputs_(string, doc->file); |
293 | fputs_(string, doc->file); |
291 | if(GPSData.Position.Longitude < 0) sign = '-'; |
294 | if(GPSData.Position.Longitude < 0) u8_1 = '-'; |
292 | else sign = '+'; |
295 | else u8_1 = '+'; |
293 | i1 = abs(GPSData.Position.Longitude)/10000000L; |
296 | i32_1 = abs(GPSData.Position.Longitude)/10000000L; |
294 | i2 = abs(GPSData.Position.Longitude)%10000000L; |
297 | i32_2 = abs(GPSData.Position.Longitude)%10000000L; |
295 | sprintf(string, "lon=\"%c%ld.%07ld\">\r\n",sign, i1, i2); |
298 | sprintf(string, "lon=\"%c%ld.%07ld\">\r\n",u8_1, i32_1, i32_2); |
296 | fputs_(string, doc->file); |
299 | fputs_(string, doc->file); |
297 | // write <ele> taga |
300 | // write <ele> taga |
298 | rel_altitude = GPSData.Position.Altitude - GPS_HomePosition.Altitude; |
301 | i32_2 = GPSData.Position.Altitude - GPS_HomePosition.Altitude; |
299 | if(rel_altitude < 0) rel_altitude = 0; // avoid negative altitudes in log |
302 | if(i32_2 < 0) i32_2 = 0; // avoid negative altitudes in log |
300 | i1 = rel_altitude/1000L; |
303 | i32_1 = i32_2/1000L; |
301 | i2 = rel_altitude%1000L; |
304 | i32_2 = i32_2%1000L; |
302 | sprintf(string,"<ele>%ld.%03ld</ele>\r\n",i1, i2); |
305 | sprintf(string,"<ele>%ld.%03ld</ele>\r\n",i32_1, i32_2); |
303 | fputs_(string, doc->file); |
306 | fputs_(string, doc->file); |
304 | // write <time> tag only at a resolution of one second |
- | |
- | 307 | // write <time> tag only at a resolution of one second |
|
- | 308 | sprintf(string, "<time>%04d-%02d-%02dT%02d:%02d:%02dZ</time>\r\n",SystemTime.Year, SystemTime.Month, SystemTime.Day, SystemTime.Hour, SystemTime.Min, SystemTime.Sec); |
|
- | 309 | fputs_(string, doc->file); |
|
305 | sprintf(string, "<time>%04d-%02d-%02dT%02d:%02d:%02dZ</time>\r\n",SystemTime.Year, SystemTime.Month, SystemTime.Day, SystemTime.Hour, SystemTime.Min, SystemTime.Sec); |
310 | // write <sat> tag |
- | 311 | sprintf(string, "<sat>%d</sat>\r\n", NaviData.SatsInUse); |
|
- | 312 | fputs_(string, doc->file); |
|
- | 313 | // todo: add <extensions> tag with additional data to be logged |
|
- | 314 | sprintf(string, "<extensions>\r\n"); |
|
- | 315 | fputs_(string, doc->file); |
|
- | 316 | // Course |
|
- | 317 | i16_1 = GPSData.Heading/100000L; |
|
- | 318 | sprintf(string, "<Course>%03d</Course>\r\n", i16_1); |
|
- | 319 | fputs_(string, doc->file); |
|
306 | fputs_(string, doc->file); |
320 | // Ground Speed |
- | 321 | sprintf(string, "<GroundSpeed>%d</GroundSpeed>\r\n", NaviData.GroundSpeed); |
|
- | 322 | fputs_(string, doc->file); |
|
- | 323 | // Ubat |
|
- | 324 | u8_1 = NaviData.UBat / 10; |
|
- | 325 | u8_2 = NaviData.UBat % 10; |
|
- | 326 | sprintf(string, "<Voltage>%d.%01d</Voltage>\r\n", u8_1, u8_2); |
|
- | 327 | fputs_(string, doc->file); |
|
- | 328 | // RC Quality |
|
- | 329 | sprintf(string, "<RCQuality>%d</RCQuality>\r\n", FC.RC_Quality); |
|
- | 330 | fputs_(string, doc->file); |
|
- | 331 | // Compass |
|
- | 332 | i16_1 = FromFlightCtrl.GyroHeading / 10; |
|
- | 333 | sprintf(string, "<Compass>%03d</Compass>\r\n", i16_1); |
|
- | 334 | fputs_(string, doc->file); |
|
- | 335 | // Nick Angle |
|
- | 336 | sprintf(string, "<NickAngle>%03d</NickAngle>\r\n", NaviData.AngleNick); |
|
- | 337 | fputs_(string, doc->file); |
|
- | 338 | // Roll Angle |
|
- | 339 | sprintf(string, "<RollAngle>%03d</RollAngle>\r\n", NaviData.AngleRoll); |
|
- | 340 | fputs_(string, doc->file); |
|
- | 341 | // GPS Mode |
|
- | 342 | if(NaviData.NCFlags & NC_FLAG_FREE) sprintf(string, "<GPS_Mode>FREE</GPS_Mode>\r\n"); |
|
- | 343 | else if(NaviData.NCFlags & NC_FLAG_PH) sprintf(string, "<GPS_Mode>PH</GPS_Mode>\r\n"); |
|
- | 344 | else if(NaviData.NCFlags & NC_FLAG_CH) sprintf(string, "<GPS_Mode>CH</GPS_Mode>\r\n"); |
|
- | 345 | fputs_(string, doc->file); |
|
- | 346 | // Target Bearing |
|
- | 347 | sprintf(string, "<TargetBearing>%03d</TargetBearing>\r\n", NaviData.TargetPositionDeviation.Bearing); |
|
- | 348 | fputs_(string, doc->file); |
|
- | 349 | // Target Distance |
|
- | 350 | sprintf(string, "<TargetDistance>%d</TargetDistance>\r\n", NaviData.TargetPositionDeviation.Distance); |
|
- | 351 | fputs_(string, doc->file); |
|
307 | 352 | // eof extensions |
|
308 | // todo: add <extensions> tag with additional data to be logged |
353 | sprintf(string, "</extensions>\r\n"); |
309 | 354 | fputs_(string, doc->file); |
|
310 | sprintf(string, "</trkpt>\r\n"); |
355 | sprintf(string, "</trkpt>\r\n"); |
311 | fputs_(string, doc->file); |
356 | fputs_(string, doc->file); |