Rev 602 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
41 | ingob | 1 | #ifndef _WAYPOINTS_H |
2 | #define _WAYPOINTS_H |
||
3 | |||
4 | #include "ubx.h" |
||
5 | |||
277 | killagreg | 6 | #define POINT_TYPE_INVALID 255 |
225 | killagreg | 7 | #define POINT_TYPE_WP 0 |
8 | #define POINT_TYPE_POI 1 |
||
602 | holgerb | 9 | #define POINT_TYPE_FS 2 |
225 | killagreg | 10 | |
602 | holgerb | 11 | // the waypoints list |
12 | #define MAX_LIST_LEN 101 |
||
13 | |||
41 | ingob | 14 | typedef struct |
15 | { |
||
16 | GPS_Pos_t Position; // the gps position of the waypoint, see ubx.h for details |
||
277 | killagreg | 17 | s16 Heading; // orientation, 0 no action, 1...360 fix heading, neg. = Index to POI in WP List |
41 | ingob | 18 | u8 ToleranceRadius; // in meters, if the MK is within that range around the target, then the next target is triggered |
88 | killagreg | 19 | u8 HoldTime; // in seconds, if the was once in the tolerance area around a WP, this time defines the delay before the next WP is triggered |
20 | u8 Event_Flag; // future implementation |
||
162 | ingob | 21 | u8 Index; // to indentify different waypoints, workaround for bad communications PC <-> NC |
225 | killagreg | 22 | u8 Type; // typeof Waypoint |
397 | holgerb | 23 | u8 WP_EventChannelValue; // Will be transferred to the FC and can be used as Poti value there |
491 | killagreg | 24 | u8 AltitudeRate; // rate to change the setpoint in steps of 0.1m/s |
25 | u8 Speed; // rate to change the Position(0 = max) in steps of 0.1m/s |
||
397 | holgerb | 26 | u8 CamAngle; // Camera servo angle in degree (255 -> POI-Automatic) |
386 | holgerb | 27 | u8 Name[4]; // Name of that point (ASCII) |
602 | holgerb | 28 | u8 AutoPhotoDistance; // in [m] |
29 | u8 reserve[1]; // reserve |
||
280 | killagreg | 30 | } __attribute__((packed)) Point_t; |
41 | ingob | 31 | |
495 | killagreg | 32 | |
33 | #define WPL_STORE_TYPE_REL 0 |
||
34 | #define WPL_STORE_TYPE_ABS 1 |
||
35 | |||
36 | typedef struct |
||
37 | { |
||
38 | u8 Index; |
||
513 | killagreg | 39 | u8 res1; |
495 | killagreg | 40 | u8 OverwriteFile; // 0 = no, 1 = yes |
41 | u8 reserved[7]; |
||
42 | s8 Name[12]; |
||
43 | } __attribute__((packed)) WPL_Store_t; |
||
44 | |||
496 | killagreg | 45 | extern WPL_Store_t WPL_Store; |
46 | |||
277 | killagreg | 47 | // Init List, return TRUE on success |
280 | killagreg | 48 | u8 PointList_Init(void); |
277 | killagreg | 49 | // Clear List, return TRUE on success |
280 | killagreg | 50 | u8 PointList_Clear(void); |
277 | killagreg | 51 | // Returns number of points in the list |
280 | killagreg | 52 | u8 PointList_GetCount(void); |
53 | // return pointer to point at position |
||
54 | Point_t* PointList_GetAt(u8 index); |
||
295 | killagreg | 55 | // set a point in the list at index, returns its index on success, else 0 |
56 | u8 PointList_SetAt(Point_t* pPoint); |
||
277 | killagreg | 57 | // goto the first WP in the list and return pointer to it |
280 | killagreg | 58 | Point_t* PointList_WPBegin(void); |
277 | killagreg | 59 | // goto the last WP in the list and return pointer to it |
280 | killagreg | 60 | Point_t* PointList_WPEnd(void); |
277 | killagreg | 61 | // goto next WP in the list and return pointer to it |
280 | killagreg | 62 | Point_t* PointList_WPNext(void); |
295 | killagreg | 63 | // enables/disables waypoint function |
280 | killagreg | 64 | void PointList_WPActive(u8 set); |
277 | killagreg | 65 | // returns pointer to actual POI |
280 | killagreg | 66 | Point_t* PointList_GetPOI(void); |
490 | killagreg | 67 | // save actual point list to SD card |
497 | killagreg | 68 | #define WPL_ERROR 0 |
69 | #define WPL_OK 1 |
||
70 | #define WPL_FILEEXIST 2 |
||
71 | #define WPL_NO_SDCARD_FOUND 3 |
||
72 | #define WPL_NO_WAYPOINTS 4 |
||
513 | killagreg | 73 | u8 PointList_WriteToFile(WPL_Store_t * pWPL_Store); |
490 | killagreg | 74 | // load actual point list from SD card |
495 | killagreg | 75 | u8 PointList_ReadFromFile(WPL_Store_t * pWPL_Store); |
491 | killagreg | 76 | // move actual point list to ref pos., the point in the list marked by RefIndex get the RefPos afterwards |
503 | holgerb | 77 | u8 PointList_Move(u8 RefIndex, GPS_Pos_t* pRefPos, u16 RotationAngle); |
513 | killagreg | 78 | // save actual gps positiin and heading to file |
79 | u8 PointList_SaveSinglePoint(WPL_Store_t * pWPL_Store); |
||
80 | // load target gps positiin and heading from file |
||
81 | u8 PointList_LoadSinglePoint(WPL_Store_t * pWPL_Store); |
||
82 | |||
577 | holgerb | 83 | extern u32 SD_WaypointTimeout; // Setting on SD-Card |
504 | holgerb | 84 | extern void ClearWLP_Name(void); |
517 | holgerb | 85 | extern s16 HeadingOld; |
602 | holgerb | 86 | extern Point_t PointList[MAX_LIST_LEN]; |
87 | extern u8 FsPointCnt; |
||
41 | ingob | 88 | |
89 | #endif // _WAYPOINTS_H |