Rev 87 | Rev 92 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 87 | Rev 88 | ||
---|---|---|---|
Line 60... | Line 60... | ||
60 | #include "timer.h" |
60 | #include "timer.h" |
61 | #include "uart1.h" |
61 | #include "uart1.h" |
62 | #include "kml.h" |
62 | #include "kml.h" |
63 | #include "gpx.h" |
63 | #include "gpx.h" |
64 | #include "ssc.h" |
64 | #include "ssc.h" |
- | 65 | #include "settings.h" |
|
Line 65... | Line 66... | ||
65 | 66 | ||
66 | typedef enum |
67 | typedef enum |
67 | { |
68 | { |
68 | LOGFILE_IDLE, |
69 | LOGFILE_IDLE, |
Line 77... | Line 78... | ||
77 | logfilestate_t Logging_GPX(u32 LogDelay); |
78 | logfilestate_t Logging_GPX(u32 LogDelay); |
Line 78... | Line 79... | ||
78 | 79 | ||
79 | typedef struct |
80 | typedef struct |
80 | { |
81 | { |
81 | u32 KML_Interval; // the kml-log interval (0 = off) |
82 | u32 KML_Interval; // the kml-log interval (0 = off) |
82 | u32 GPX_Interval; // the gpx-log interval (0 = off) |
83 | u32 GPX_Interval; // the gpx-log interval (0 = off) |
Line 83... | Line 84... | ||
83 | } LogCfg_t; |
84 | } LogCfg_t; |
Line 84... | Line 85... | ||
84 | 85 | ||
85 | LogCfg_t LogCfg = {0 , 1000}; |
86 | LogCfg_t LogCfg = {500 , 1000}; |
86 | 87 | ||
Line 149... | Line 150... | ||
149 | // initialize if LogDelay os zero |
150 | // initialize if LogDelay os zero |
150 | if(!LogDelay) |
151 | if(!LogDelay) |
151 | { |
152 | { |
152 | switch(logfilestate) |
153 | switch(logfilestate) |
153 | { |
154 | { |
154 | case LOGFILE_OPENED: |
155 | case LOGFILE_OPENED: |
155 | KML_DocumentClose(&logfile); // try to close it |
156 | KML_DocumentClose(&logfile); // try to close it |
156 | break; |
157 | break; |
157 | default: |
158 | default: |
158 | break; |
159 | break; |
159 | } |
160 | } |
160 | logfilestate = LOGFILE_IDLE; |
161 | logfilestate = LOGFILE_IDLE; |
161 | logfilename = NULL; |
162 | logfilename = NULL; |
162 | KML_DocumentInit(&logfile); |
163 | KML_DocumentInit(&logfile); |
163 | logtimer = SetDelay(0); // set logtimer to now |
164 | logtimer = SetDelay(0); // set logtimer to now |
164 | return logfilestate; |
165 | return logfilestate; |
165 | } |
166 | } |
166 | // no init |
167 | // no init |
167 | if(CheckDelay(logtimer)) |
168 | if(CheckDelay(logtimer)) |
168 | { |
169 | { |
169 | logtimer = SetDelay(LogDelay); // standard interval |
170 | logtimer = SetDelay(LogDelay); // standard interval |
170 | 171 | ||
171 | if(FC.MKFlags & MKFLAG_MOTOR_RUN) |
172 | if(FC.MKFlags & MKFLAG_MOTOR_RUN) |
172 | { |
173 | { |
173 | switch(logfilestate) |
174 | switch(logfilestate) |
174 | { |
175 | { |
175 | case LOGFILE_IDLE: |
176 | case LOGFILE_IDLE: |
Line 206... | Line 207... | ||
206 | } |
207 | } |
207 | } |
208 | } |
208 | else |
209 | else |
209 | { |
210 | { |
210 | logfilestate = LOGFILE_ERROR; |
211 | logfilestate = LOGFILE_ERROR; |
211 | SerialPutString("\r\nError getting free kml-file name\r\n"); |
212 | SerialPutString("\r\nError getting free kml-file name\r\n"); |
212 | } |
213 | } |
213 | // else retry in next loop |
214 | // else retry in next loop |
214 | break; |
215 | break; |
215 | case LOGFILE_OPENED: |
216 | case LOGFILE_OPENED: |
216 | // append new gps log data |
217 | // append new gps log data |
Line 223... | Line 224... | ||
223 | logfilestate = LOGFILE_ERROR; |
224 | logfilestate = LOGFILE_ERROR; |
224 | } |
225 | } |
225 | //else DebugOut.Analog[26]++; // count SD-Logs |
226 | //else DebugOut.Analog[26]++; // count SD-Logs |
226 | } |
227 | } |
227 | break; |
228 | break; |
228 | 229 | ||
229 | case LOGFILE_ERROR: |
230 | case LOGFILE_ERROR: |
230 | break; |
231 | break; |
231 | 232 | ||
232 | default: |
233 | default: |
233 | logfilestate = LOGFILE_IDLE; |
234 | logfilestate = LOGFILE_IDLE; |
234 | break; |
235 | break; |
235 | } |
236 | } |
236 | } // EOF model is flying |
237 | } // EOF model is flying |
Line 251... | Line 252... | ||
251 | } //EOF model is not flying |
252 | } //EOF model is not flying |
252 | } // EOF Check LogTimer |
253 | } // EOF Check LogTimer |
Line 253... | Line 254... | ||
253 | 254 | ||
254 | return logfilestate; |
255 | return logfilestate; |
255 | } |
256 | } |
256 | 257 | ||
257 | //---------------------------------------------------------------------------------------------------- |
258 | //---------------------------------------------------------------------------------------------------- |
258 | // logs gps and state info to a gpx file |
259 | // logs gps and state info to a gpx file |
259 | logfilestate_t Logging_GPX(u32 LogDelay) |
260 | logfilestate_t Logging_GPX(u32 LogDelay) |
260 | { |
261 | { |
Line 266... | Line 267... | ||
266 | // initialize if LogDelay os zero |
267 | // initialize if LogDelay os zero |
267 | if(!LogDelay) |
268 | if(!LogDelay) |
268 | { |
269 | { |
269 | switch(logfilestate) |
270 | switch(logfilestate) |
270 | { |
271 | { |
271 | case LOGFILE_OPENED: |
272 | case LOGFILE_OPENED: |
272 | GPX_DocumentClose(&logfile); // try to close it |
273 | GPX_DocumentClose(&logfile); // try to close it |
273 | break; |
274 | break; |
274 | default: |
275 | default: |
275 | break; |
276 | break; |
276 | } |
277 | } |
277 | logfilestate = LOGFILE_IDLE; |
278 | logfilestate = LOGFILE_IDLE; |
278 | logfilename = NULL; |
279 | logfilename = NULL; |
279 | GPX_DocumentInit(&logfile); |
280 | GPX_DocumentInit(&logfile); |
280 | logtimer = SetDelay(0); // set logtimer to now |
281 | logtimer = SetDelay(0); // set logtimer to now |
281 | return logfilestate; |
282 | return logfilestate; |
282 | } |
283 | } |
283 | // no init |
284 | // no init |
284 | if(CheckDelay(logtimer)) |
285 | if(CheckDelay(logtimer)) |
285 | { |
286 | { |
286 | logtimer = SetDelay(LogDelay); // standard interval |
287 | logtimer = SetDelay(LogDelay); // standard interval |
287 | 288 | ||
288 | if(FC.MKFlags & MKFLAG_MOTOR_RUN) |
289 | if(FC.MKFlags & MKFLAG_MOTOR_RUN) |
289 | { |
290 | { |
290 | switch(logfilestate) |
291 | switch(logfilestate) |
291 | { |
292 | { |
292 | case LOGFILE_IDLE: |
293 | case LOGFILE_IDLE: |
Line 323... | Line 324... | ||
323 | } |
324 | } |
324 | } |
325 | } |
325 | else |
326 | else |
326 | { |
327 | { |
327 | logfilestate = LOGFILE_ERROR; |
328 | logfilestate = LOGFILE_ERROR; |
328 | SerialPutString("\r\nError getting free gpx-file name\r\n"); |
329 | SerialPutString("\r\nError getting free gpx-file name\r\n"); |
329 | } |
330 | } |
330 | // else retry in next loop |
331 | // else retry in next loop |
331 | break; |
332 | break; |
332 | case LOGFILE_OPENED: |
333 | case LOGFILE_OPENED: |
333 | // append new gps log data |
334 | // append new gps log data |
Line 339... | Line 340... | ||
339 | GPX_DocumentClose(&logfile); |
340 | GPX_DocumentClose(&logfile); |
340 | logfilestate = LOGFILE_ERROR; |
341 | logfilestate = LOGFILE_ERROR; |
341 | } |
342 | } |
342 | } |
343 | } |
343 | break; |
344 | break; |
344 | 345 | ||
345 | case LOGFILE_ERROR: |
346 | case LOGFILE_ERROR: |
346 | break; |
347 | break; |
347 | 348 | ||
348 | default: |
349 | default: |
349 | logfilestate = LOGFILE_IDLE; |
350 | logfilestate = LOGFILE_IDLE; |
350 | break; |
351 | break; |
351 | } |
352 | } |
352 | } // EOF model is flying |
353 | } // EOF model is flying |
Line 372... | Line 373... | ||
372 | 373 | ||
373 | //---------------------------------------------------------------------------------------------------- |
374 | //---------------------------------------------------------------------------------------------------- |
374 | // initialize logging |
375 | // initialize logging |
375 | void Logging_Init(void) |
376 | void Logging_Init(void) |
- | 377 | { |
|
- | 378 | LogCfg.KML_Interval = 500; //default |
|
376 | { |
379 | Settings_GetParamValue(PID_KML_LOGGING, (u16*)&LogCfg.KML_Interval); // overwrite by settings value |
- | 380 | Logging_KML(0); |
|
- | 381 | LogCfg.GPX_Interval = 0; //default |
|
377 | Logging_KML(0); |
382 | Settings_GetParamValue(PID_GPX_LOGGING, (u16*)&LogCfg.GPX_Interval); // overwrite by settings value |
378 | Logging_GPX(0); |
383 | Logging_GPX(0); |
Line 379... | Line 384... | ||
379 | } |
384 | } |
380 | 385 | ||
381 | //---------------------------------------------------------------------------------------------------- |
386 | //---------------------------------------------------------------------------------------------------- |
382 | // gobal logging handler |
387 | // gobal logging handler |
383 | void Logging_Update(void) |
388 | void Logging_Update(void) |
384 | { |
389 | { |
385 | static u32 logtimer = 0; |
390 | static u32 logtimer = 0; |
Line 386... | Line 391... | ||
386 | static logfilestate_t logstate = LOGFILE_IDLE; |
391 | static logfilestate_t logstate = LOGFILE_IDLE; |
387 | 392 | ||
388 | 393 | ||
389 | if(SD_SWITCH && CheckDelay(logtimer)) // a card is in slot |
394 | if(SD_SWITCH && CheckDelay(logtimer)) // a card is in slot |
390 | { |
395 | { |
391 | logtimer = SetDelay(10); // faster makes no sense |
396 | logtimer = SetDelay(10); // faster makes no sense |
392 | // call the logger handlers if no error has occured |
397 | // call the logger handlers if no error has occured |
393 | if(logstate != LOGFILE_ERROR) logstate = Logging_KML(LogCfg.KML_Interval); |
398 | if(logstate != LOGFILE_ERROR) logstate = Logging_KML(LogCfg.KML_Interval); |
394 | if(logstate != LOGFILE_ERROR) logstate = Logging_GPX(LogCfg.GPX_Interval); |
399 | if(logstate != LOGFILE_ERROR) logstate = Logging_GPX(LogCfg.GPX_Interval); |
395 | 400 | ||
396 | // a logging error has occured |
401 | // a logging error has occured |
397 | if(logstate == LOGFILE_ERROR) |
402 | if(logstate == LOGFILE_ERROR) |
Line 406... | Line 411... | ||
406 | else |
411 | else |
407 | { // retry in 5 seconds |
412 | { // retry in 5 seconds |
408 | logtimer = SetDelay(5000); // try again in 5 sec |
413 | logtimer = SetDelay(5000); // try again in 5 sec |
409 | } |
414 | } |
410 | } //EOF logfile error |
415 | } //EOF logfile error |
411 | }// EOF CheckDelay |
416 | }// EOF CheckDelay |
412 | } |
417 | } |