Rev 722 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 722 | Rev 724 | ||
---|---|---|---|
Line 2... | Line 2... | ||
2 | #include "ubx.h" |
2 | #include "ubx.h" |
3 | #include "main.h" |
3 | #include "main.h" |
4 | #include <avr/io.h> |
4 | #include <avr/io.h> |
Line 5... | Line 5... | ||
5 | 5 | ||
6 | #include "uart.h" |
- | |
Line 7... | Line 6... | ||
7 | #include "timer0.h" |
6 | #include "uart.h" |
8 | 7 | ||
9 | // ubx protocol parser state machine |
8 | // ubx protocol parser state machine |
10 | #define UBXSTATE_IDLE 0 |
9 | #define UBXSTATE_IDLE 0 |
Line 24... | Line 23... | ||
24 | #define UBX_ID_STATUS 0x03 |
23 | #define UBX_ID_STATUS 0x03 |
25 | #define UBX_ID_VELNED 0x12 |
24 | #define UBX_ID_VELNED 0x12 |
26 | #define UBX_SYNC1_CHAR 0xB5 |
25 | #define UBX_SYNC1_CHAR 0xB5 |
27 | #define UBX_SYNC2_CHAR 0x62 |
26 | #define UBX_SYNC2_CHAR 0x62 |
Line 28... | Line -... | ||
28 | - | ||
29 | 27 | ||
30 | typedef struct { |
28 | typedef struct { |
31 | uint32_t ITOW; // ms GPS Millisecond Time of Week |
29 | uint32_t ITOW; // ms GPS Millisecond Time of Week |
32 | uint8_t GPSfix; // GPSfix Type, range 0..6 |
30 | uint8_t GPSfix; // GPSfix Type, range 0..6 |
33 | uint8_t Flags; // Navigation Status Flags |
31 | uint8_t Flags; // Navigation Status Flags |
Line 104... | Line 102... | ||
104 | if (GpsVelNed.Status == VALID) // valid packet |
102 | if (GpsVelNed.Status == VALID) // valid packet |
105 | { |
103 | { |
106 | GPSInfo.veleast = GpsVelNed.VEL_E; |
104 | GPSInfo.veleast = GpsVelNed.VEL_E; |
107 | GPSInfo.velnorth = GpsVelNed.VEL_N; |
105 | GPSInfo.velnorth = GpsVelNed.VEL_N; |
108 | GPSInfo.veltop = -GpsVelNed.VEL_D; |
106 | GPSInfo.veltop = -GpsVelNed.VEL_D; |
109 | GpsPosUtm.Status = PROCESSED; // never update old data |
107 | GpsVelNed.Status = PROCESSED; // never update old data |
110 | } |
108 | } |
111 | if (GpsStatus.Status != INVALID) |
109 | if (GpsStatus.Status != INVALID) |
112 | { |
110 | { |
113 | GPSInfo.status = VALID; // set valid if data are updated |
111 | GPSInfo.status = VALID; // set valid if data are updated |
114 | } |
112 | } |
115 | } |
113 | } |
Line -... | Line 114... | ||
- | 114 | ||
- | 115 | void ubx_init(void) |
|
- | 116 | { |
|
- | 117 | GpsStatus.Status = INVALID; |
|
- | 118 | GpsPosLlh.Status = INVALID; |
|
- | 119 | GpsPosUtm.Status = INVALID; |
|
- | 120 | GpsVelNed.Status = INVALID; |
|
- | 121 | GPSInfo.status = INVALID; |
|
- | 122 | } |
|
116 | 123 | ||
117 | // this function should be called within the UART RX ISR |
124 | // this function should be called within the UART RX ISR |
118 | void ubx_parser(uint8_t c) |
125 | void ubx_parser(uint8_t c) |
119 | { |
126 | { |
120 | static uint8_t ubxstate = UBXSTATE_IDLE; |
127 | static uint8_t ubxstate = UBXSTATE_IDLE; |
Line 234... | Line 241... | ||
234 | break; |
241 | break; |
235 | } |
242 | } |
Line 236... | Line 243... | ||
236 | 243 | ||
Line -... | Line 244... | ||
- | 244 | } |