Subversion Repositories NaviCtrl

Rev

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
}