Subversion Repositories NaviCtrl

Rev

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

Rev 786 Rev 802
Line 72... Line 72...
72
u8 POIIndex = 0;        // list index of GPS Point representing the current POI, can be maximal WPCount
72
u8 POIIndex = 0;        // list index of GPS Point representing the current POI, can be maximal WPCount
73
u8 WPCount = 0;         // number of waypoints
73
u8 WPCount = 0;         // number of waypoints
74
u8 PointCount = 0;      // number of points in the list can be maximal equal to MAX_LIST_LEN
74
u8 PointCount = 0;      // number of points in the list can be maximal equal to MAX_LIST_LEN
75
u8 POICount = 0;        // number of point of interest in the list
75
u8 POICount = 0;        // number of point of interest in the list
76
u8 FsPointCnt = 0;
76
u8 FsPointCnt = 0;
-
 
77
u8 FlyzonePointCnt = 0;
77
s16 HeadingOld = -1;
78
s16 HeadingOld = -1;
78
u32 SD_WaypointTimeout = 5; // Setting on SD-Card
79
u32 SD_WaypointTimeout = 5; // Setting on SD-Card
Line 79... Line 80...
79
 
80
 
Line 87... Line 88...
87
u8 PointList_Clear(void)
88
u8 PointList_Clear(void)
88
{
89
{
89
        u8 i;
90
        u8 i;
90
        WPIndex = 0;    // real list position are 1 ,2, 3 ...
91
        WPIndex = 0;    // real list position are 1 ,2, 3 ...
91
        POIIndex = 0;   // real list position are 1 ,2, 3 ...
92
        POIIndex = 0;   // real list position are 1 ,2, 3 ...
-
 
93
 
92
        WPCount = 0;    // no waypoints
94
        WPCount = 0;    // no waypoints
93
        FsPointCnt = 0;
95
        FsPointCnt = 0;
94
    POICount = 0;
96
    POICount = 0;
95
        PointCount = 0; // no contents
97
        PointCount = 0; // no contents
-
 
98
    FlyzonePointCnt = 0;
-
 
99
 
96
        WPActive = FALSE;
100
        WPActive = FALSE;
97
        NaviData.WaypointNumber = WPCount;
101
        NaviData.WaypointNumber = WPCount;
98
        NaviData.WaypointIndex = 0;
102
        NaviData.WaypointIndex = 0;
99
        for(i = 0; i < MAX_LIST_LEN; i++)
103
        for(i = 0; i < MAX_LIST_LEN; i++)
100
        {
104
        {
Line 116... Line 120...
116
        }
120
        }
117
        ClearWLP_Name();
121
        ClearWLP_Name();
118
        return TRUE;           
122
        return TRUE;           
119
}
123
}
Line -... Line 124...
-
 
124
 
-
 
125
 
-
 
126
s32 CheckPositionInFlyzone(s32 Longitude, s32 Latitude, u8 UpdateTimer)
-
 
127
{
-
 
128
#define POINTS 31
-
 
129
 static Vec2D_t poly[POINTS+1];
-
 
130
 Vec2D_t check_pos;
-
 
131
 u32 z = 0;
-
 
132
 u32 i;
-
 
133
 s32 wn;
-
 
134
if(FlyzonePointCnt < 3) return(100);   // too small - return 100
-
 
135
 
-
 
136
 check_pos.x = Longitude >> 8;
-
 
137
 check_pos.y = Latitude >> 8;
-
 
138
 
-
 
139
if(UpdateTimer == 0)
-
 
140
 {
-
 
141
 for(i=0; i < PointCount; i++)
-
 
142
  {
-
 
143
    if(PointList[i].Type == POINT_TYPE_FLYZONE)
-
 
144
    {
-
 
145
     poly[z].x = PointList[i].Position.Longitude >> 8;
-
 
146
     poly[z].y = PointList[i].Position.Latitude >> 8;
-
 
147
         z++;
-
 
148
     if(z >= FlyzonePointCnt) break; // we found them all
-
 
149
         if(z >= POINTS) break; // too many
-
 
150
        }
-
 
151
  }
-
 
152
   // close polygon
-
 
153
   poly[z].x = poly[0].x;
-
 
154
   poly[z].y = poly[0].y;
-
 
155
 }
-
 
156
 wn = PointPolyCheck(check_pos,poly,FlyzonePointCnt);  
-
 
157
 return(wn);
-
 
158
}
-
 
159
 
120
 
160
 
121
u8 PointList_GetCount(void)
161
u8 PointList_GetCount(void)
122
{
162
{
123
        return PointCount; // number of points in the list
163
        return PointCount; // number of points in the list
Line 132... Line 172...
132
u8 PointList_SetAt(Point_t* pPoint)
172
u8 PointList_SetAt(Point_t* pPoint)
133
{
173
{
134
        // if index is in range
174
        // if index is in range
135
        if((pPoint->Index > 0) && (pPoint->Index <= MAX_LIST_LEN))
175
        if((pPoint->Index > 0) && (pPoint->Index <= MAX_LIST_LEN))
136
        {
176
        {
-
 
177
        UpdateFlyzoneTimer = 2; // makes an update of the flightzone in some milliseconds
137
                // check list entry before update
178
                // check list entry before update
138
                switch(PointList[pPoint->Index-1].Type)
179
                switch(PointList[pPoint->Index-1].Type)
139
                {
180
                {
140
                        case POINT_TYPE_INVALID: // was invalid
181
                        case POINT_TYPE_INVALID: // was invalid
141
                                switch(pPoint->Type)
182
                                switch(pPoint->Type)
Line 158... Line 199...
158
                                                break;
199
                                                break;
159
                                        case POINT_TYPE_FS:
200
                                        case POINT_TYPE_FS:
160
                                                FsPointCnt++;
201
                                                FsPointCnt++;
161
                                                PointCount++;
202
                                                PointCount++;
162
                                                break;
203
                                                break;
-
 
204
                                        case POINT_TYPE_FLYZONE:
-
 
205
                                                FlyzonePointCnt++;
-
 
206
                                                PointCount++;
-
 
207
                                                break;
163
                                }
208
                                }
164
                                break;
209
                                break;
Line 165... Line 210...
165
                               
210
                               
166
                        case POINT_TYPE_LAND: // was a landing point
211
                        case POINT_TYPE_LAND: // was a landing point
167
                                switch(pPoint->Type)
212
                                switch(pPoint->Type)
168
                                {
213
                                {
169
                                        case POINT_TYPE_INVALID:
214
                                        case POINT_TYPE_INVALID:
170
                                                WPCount--;
215
                                                WPCount--;
171
                                                PointCount--;
216
                                                PointCount--;
172
                                                break;
-
 
173
 
217
                                                break;
174
                                        default:
218
                                        default:
175
                                        case POINT_TYPE_LAND:
219
                                        case POINT_TYPE_LAND:
176
                                                break;
220
                                                break;
177
                                        case POINT_TYPE_WP:
221
                                        case POINT_TYPE_WP:
178
                                                FsPointCnt--;
222
                                                FsPointCnt--; // the landing point is also a Failsafe-Pt
179
                                                break;
223
                                                break;
180
                                        case POINT_TYPE_FS:
224
                                        case POINT_TYPE_FS:
181
                                                FsPointCnt++;
225
                                                FsPointCnt++;
182
                                                WPCount--;
226
                                                WPCount--;
183
                                                break;
227
                                                break;
184
                                        case POINT_TYPE_POI:
228
                                        case POINT_TYPE_POI:
185
                                                POICount++;
229
                                                POICount++;
186
                                                WPCount--;
230
                                                WPCount--;
-
 
231
                                                break;
-
 
232
                                        case POINT_TYPE_FLYZONE:
-
 
233
                                                FlyzonePointCnt++;
-
 
234
                                                WPCount--;
187
                                                break;
235
                                                break;
188
                                }
236
                                }
189
                                break;
237
                                break;
190
                        case POINT_TYPE_WP:
238
                        case POINT_TYPE_WP:
191
                                switch(pPoint->Type)
239
                                switch(pPoint->Type)
Line 195... Line 243...
195
                                                PointCount--;
243
                                                PointCount--;
196
                                                break;
244
                                                break;
Line 197... Line 245...
197
 
245
 
198
                                        default:
246
                                        default:
199
                                        case POINT_TYPE_LAND:
247
                                        case POINT_TYPE_LAND:
200
                                                FsPointCnt++;
248
                                                FsPointCnt++; // the landing point is also a Failsafe-Pt
201
                                                break;
249
                                                break;
202
                                        case POINT_TYPE_WP:
250
                                        case POINT_TYPE_WP:
203
                                                //nothing to do
251
                                                //nothing to do
204
                                                break;
252
                                                break;
Line 208... Line 256...
208
                                                break;
256
                                                break;
209
                                        case POINT_TYPE_POI:
257
                                        case POINT_TYPE_POI:
210
                                                POICount++;
258
                                                POICount++;
211
                                                WPCount--;
259
                                                WPCount--;
212
                                                break;
260
                                                break;
-
 
261
                                        case POINT_TYPE_FLYZONE:
-
 
262
                                                FlyzonePointCnt++;
-
 
263
                                                WPCount--;
-
 
264
                                                break;
-
 
265
                                }
-
 
266
                                break;
-
 
267
                        case POINT_TYPE_FLYZONE:
-
 
268
                                switch(pPoint->Type)
-
 
269
                                {
-
 
270
                                        case POINT_TYPE_INVALID:
-
 
271
                                                FlyzonePointCnt--;
-
 
272
                                                PointCount--;
-
 
273
                                                break;
-
 
274
                                        default:
-
 
275
                                        case POINT_TYPE_LAND:
-
 
276
                                                FsPointCnt++; // the landing point is also a Failsafe-Pt
-
 
277
                                                break;
-
 
278
                                        case POINT_TYPE_WP:
-
 
279
                                                WPCount++;
-
 
280
                                                FlyzonePointCnt--;
-
 
281
                                                break;
-
 
282
                                        case POINT_TYPE_FLYZONE:
-
 
283
                                                //nothing to do
-
 
284
                                                break;
-
 
285
                                        case POINT_TYPE_FS:
-
 
286
                                                FsPointCnt++;
-
 
287
                                                FlyzonePointCnt--;
-
 
288
                                                break;
-
 
289
                                        case POINT_TYPE_POI:
-
 
290
                                                POICount++;
-
 
291
                                                FlyzonePointCnt--;
-
 
292
                                                break;
213
                                }
293
                                }
214
                                break;
294
                                break;
Line 215... Line 295...
215
                               
295
                               
216
                        case POINT_TYPE_POI: // was a poi
296
                        case POINT_TYPE_POI: // was a poi
217
                                switch(pPoint->Type)
297
                                switch(pPoint->Type)
218
                                {
298
                                {
219
                                        case POINT_TYPE_INVALID:
299
                                        case POINT_TYPE_INVALID:
220
                                                POICount--;
300
                                                POICount--;
221
                                                PointCount--;
301
                                                PointCount--;
-
 
302
                                                break;
-
 
303
                                        case POINT_TYPE_FS:
-
 
304
                                                FsPointCnt++;
-
 
305
                                                POICount--;
Line 222... Line 306...
222
                                                break;
306
                                                break;
223
 
307
 
224
                                        case POINT_TYPE_LAND:
308
                                        case POINT_TYPE_LAND:
225
                                                FsPointCnt++;    // break fehlt absichtlich 
309
                                                FsPointCnt++;    // break fehlt absichtlich 
226
                                        case POINT_TYPE_WP:
310
                                        case POINT_TYPE_WP:
227
                                                WPCount++;
311
                                                WPCount++;
228
                                                POICount--;
-
 
229
                                                break;
312
                                                POICount--;
230
 
313
                                                break;
231
                                        case POINT_TYPE_FS:
314
                                        case POINT_TYPE_FLYZONE:
232
                                                FsPointCnt++;
315
                                                FlyzonePointCnt++;
233
                                                POICount--;
-
 
234
                                                break;
316
                                                POICount--;
235
                                       
317
                                                break;
236
                                        case POINT_TYPE_POI:
318
                                        case POINT_TYPE_POI:
237
                                        default:
319
                                        default:
238
                                                // nothing to do
320
                                                // nothing to do
Line 243... Line 325...
243
                                {
325
                                {
244
                                        case POINT_TYPE_INVALID:
326
                                        case POINT_TYPE_INVALID:
245
                                                FsPointCnt--;
327
                                                FsPointCnt--;
246
                                                PointCount--;
328
                                                PointCount--;
247
                                                break;
329
                                                break;
248
 
-
 
249
                                        case POINT_TYPE_LAND:
330
                                        case POINT_TYPE_LAND:
250
                                                FsPointCnt++;
331
                                                FsPointCnt++;  // (wird gleich wieder abgezogen)
251
                                        case POINT_TYPE_WP:
332
                                        case POINT_TYPE_WP:
252
                                                WPCount++;
333
                                                WPCount++;
253
                                                FsPointCnt--;
334
                                                FsPointCnt--;
254
                                                break;
335
                                                break;
255
                                       
-
 
256
                                        case POINT_TYPE_POI:
336
                                        case POINT_TYPE_POI:
257
                                                POICount++;
337
                                                POICount++;
258
                                                FsPointCnt--;
338
                                                FsPointCnt--;
259
                                                break;
339
                                                break;
-
 
340
                                        case POINT_TYPE_FLYZONE:
-
 
341
                                                FlyzonePointCnt++;
-
 
342
                                                FsPointCnt--;
260
 
343
                                                break;
261
                                        case POINT_TYPE_FS:
344
                                        case POINT_TYPE_FS:
262
                                                break;
345
                                                break;
263
                                        default:
346
                                        default:
264
                                                // nothing to do
347
                                                // nothing to do
265
                                                break;
348
                                                break;
Line 699... Line 782...
699
                                                                                FsPointCnt++;
782
                                                                                FsPointCnt++;
700
                                                                                break;
783
                                                                                break;
701
                                                                        case POINT_TYPE_POI:
784
                                                                        case POINT_TYPE_POI:
702
                                                                                POICount++;
785
                                                                                POICount++;
703
                                                                                break;
786
                                                                                break;
-
 
787
                                                                        case POINT_TYPE_FLYZONE:
-
 
788
                                                                                FlyzonePointCnt++;
-
 
789
                                                                                break;
704
                                                                }
790
                                                                }
705
                                                        }
791
                                                        }
706
                                                        else if(strcmp(name, "PREFIX") == 0)
792
                                                        else if(strcmp(name, "PREFIX") == 0)
707
                                                        {
793
                                                        {
708
                                                                strncpy(PointList[IsPointSection-1].Name, value, 4);
794
                                                                strncpy(PointList[IsPointSection-1].Name, value, 4);