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