u-blox UBX library for I2C
Dependencies: Vector3
It will not work
GPSUBX.hpp@0:6256752abece, 2021-09-12 (annotated)
- Committer:
- cocorlow
- Date:
- Sun Sep 12 16:38:51 2021 +0000
- Revision:
- 0:6256752abece
TIMEUTC test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
cocorlow | 0:6256752abece | 1 | #ifndef __GPSUBX_HPP__ |
cocorlow | 0:6256752abece | 2 | #define __GPSUBX_HPP__ |
cocorlow | 0:6256752abece | 3 | |
cocorlow | 0:6256752abece | 4 | #include "mbed.h" |
cocorlow | 0:6256752abece | 5 | #include "Vector3.hpp" |
cocorlow | 0:6256752abece | 6 | |
cocorlow | 0:6256752abece | 7 | #define GPS_ADDRESS 0x23 |
cocorlow | 0:6256752abece | 8 | |
cocorlow | 0:6256752abece | 9 | #define POSECEF_LEN 20 |
cocorlow | 0:6256752abece | 10 | #define POSLLH_LEN 28 |
cocorlow | 0:6256752abece | 11 | #define TIMEUTC_LEN 20 |
cocorlow | 0:6256752abece | 12 | #define VELECEF_LEN 20 |
cocorlow | 0:6256752abece | 13 | #define VELNED_LEN 36 |
cocorlow | 0:6256752abece | 14 | |
cocorlow | 0:6256752abece | 15 | |
cocorlow | 0:6256752abece | 16 | #define UBX_SYNC 0x62 << 8 | 0xb5 |
cocorlow | 0:6256752abece | 17 | |
cocorlow | 0:6256752abece | 18 | extern Serial pc; |
cocorlow | 0:6256752abece | 19 | |
cocorlow | 0:6256752abece | 20 | struct GPSData |
cocorlow | 0:6256752abece | 21 | { |
cocorlow | 0:6256752abece | 22 | int Year; |
cocorlow | 0:6256752abece | 23 | int Month; |
cocorlow | 0:6256752abece | 24 | int Day; |
cocorlow | 0:6256752abece | 25 | int Hours; |
cocorlow | 0:6256752abece | 26 | int Minutes; |
cocorlow | 0:6256752abece | 27 | int Seconds; |
cocorlow | 0:6256752abece | 28 | int iTOW; |
cocorlow | 0:6256752abece | 29 | float Longitude; |
cocorlow | 0:6256752abece | 30 | float Latitude; |
cocorlow | 0:6256752abece | 31 | float Height; |
cocorlow | 0:6256752abece | 32 | float Pressure; |
cocorlow | 0:6256752abece | 33 | Vector3 VelocityNED; |
cocorlow | 0:6256752abece | 34 | Vector3 PositionNED; |
cocorlow | 0:6256752abece | 35 | Vector3 PositionECEF; |
cocorlow | 0:6256752abece | 36 | }; |
cocorlow | 0:6256752abece | 37 | |
cocorlow | 0:6256752abece | 38 | enum GPSState |
cocorlow | 0:6256752abece | 39 | { |
cocorlow | 0:6256752abece | 40 | WAIT, |
cocorlow | 0:6256752abece | 41 | MANUAL, |
cocorlow | 0:6256752abece | 42 | AUTO, |
cocorlow | 0:6256752abece | 43 | READ, |
cocorlow | 0:6256752abece | 44 | STREAM, |
cocorlow | 0:6256752abece | 45 | CONFIG |
cocorlow | 0:6256752abece | 46 | }; |
cocorlow | 0:6256752abece | 47 | |
cocorlow | 0:6256752abece | 48 | enum LogState |
cocorlow | 0:6256752abece | 49 | { |
cocorlow | 0:6256752abece | 50 | STOP, |
cocorlow | 0:6256752abece | 51 | STBY, |
cocorlow | 0:6256752abece | 52 | RUNTIME, |
cocorlow | 0:6256752abece | 53 | FIN |
cocorlow | 0:6256752abece | 54 | }; |
cocorlow | 0:6256752abece | 55 | |
cocorlow | 0:6256752abece | 56 | // 0x01 0x01 |
cocorlow | 0:6256752abece | 57 | union POSECEF |
cocorlow | 0:6256752abece | 58 | { |
cocorlow | 0:6256752abece | 59 | char byte_data[POSECEF_LEN+8]; |
cocorlow | 0:6256752abece | 60 | struct |
cocorlow | 0:6256752abece | 61 | { |
cocorlow | 0:6256752abece | 62 | unsigned short sync; |
cocorlow | 0:6256752abece | 63 | char m_class; |
cocorlow | 0:6256752abece | 64 | char m_id; |
cocorlow | 0:6256752abece | 65 | unsigned short pay_len; |
cocorlow | 0:6256752abece | 66 | unsigned int iTOW; |
cocorlow | 0:6256752abece | 67 | int ecefX; |
cocorlow | 0:6256752abece | 68 | int ecefY; |
cocorlow | 0:6256752abece | 69 | int ecefZ; |
cocorlow | 0:6256752abece | 70 | unsigned int pAcc; |
cocorlow | 0:6256752abece | 71 | char check_a; |
cocorlow | 0:6256752abece | 72 | char check_b; |
cocorlow | 0:6256752abece | 73 | } data; |
cocorlow | 0:6256752abece | 74 | }; |
cocorlow | 0:6256752abece | 75 | |
cocorlow | 0:6256752abece | 76 | // 0x01 0x02 |
cocorlow | 0:6256752abece | 77 | union POSLLH |
cocorlow | 0:6256752abece | 78 | { |
cocorlow | 0:6256752abece | 79 | char byte_data[POSLLH_LEN+8]; |
cocorlow | 0:6256752abece | 80 | struct |
cocorlow | 0:6256752abece | 81 | { |
cocorlow | 0:6256752abece | 82 | unsigned short sync; |
cocorlow | 0:6256752abece | 83 | char m_class; |
cocorlow | 0:6256752abece | 84 | char m_id; |
cocorlow | 0:6256752abece | 85 | unsigned short pay_len; |
cocorlow | 0:6256752abece | 86 | unsigned int iTOW; |
cocorlow | 0:6256752abece | 87 | int lon; |
cocorlow | 0:6256752abece | 88 | int lat; |
cocorlow | 0:6256752abece | 89 | int height; |
cocorlow | 0:6256752abece | 90 | int hMSL; |
cocorlow | 0:6256752abece | 91 | unsigned int hAcc; |
cocorlow | 0:6256752abece | 92 | unsigned int vAcc; |
cocorlow | 0:6256752abece | 93 | char check_a; |
cocorlow | 0:6256752abece | 94 | char check_b; |
cocorlow | 0:6256752abece | 95 | } data; |
cocorlow | 0:6256752abece | 96 | }; |
cocorlow | 0:6256752abece | 97 | |
cocorlow | 0:6256752abece | 98 | // 0x01 0x21 |
cocorlow | 0:6256752abece | 99 | union TIMEUTC |
cocorlow | 0:6256752abece | 100 | { |
cocorlow | 0:6256752abece | 101 | char byte_data[TIMEUTC_LEN+8]; |
cocorlow | 0:6256752abece | 102 | struct |
cocorlow | 0:6256752abece | 103 | { |
cocorlow | 0:6256752abece | 104 | unsigned short sync; |
cocorlow | 0:6256752abece | 105 | char m_class; |
cocorlow | 0:6256752abece | 106 | char m_id; |
cocorlow | 0:6256752abece | 107 | unsigned short pay_len; |
cocorlow | 0:6256752abece | 108 | unsigned int iTOW; |
cocorlow | 0:6256752abece | 109 | unsigned int tAcc; |
cocorlow | 0:6256752abece | 110 | int nano; |
cocorlow | 0:6256752abece | 111 | unsigned short year; |
cocorlow | 0:6256752abece | 112 | unsigned char month; |
cocorlow | 0:6256752abece | 113 | unsigned char day; |
cocorlow | 0:6256752abece | 114 | unsigned char hour; |
cocorlow | 0:6256752abece | 115 | unsigned char min; |
cocorlow | 0:6256752abece | 116 | unsigned char sec; |
cocorlow | 0:6256752abece | 117 | unsigned char valid; |
cocorlow | 0:6256752abece | 118 | char check_a; |
cocorlow | 0:6256752abece | 119 | char check_b; |
cocorlow | 0:6256752abece | 120 | } data; |
cocorlow | 0:6256752abece | 121 | }; |
cocorlow | 0:6256752abece | 122 | |
cocorlow | 0:6256752abece | 123 | // 0x01 0x11 |
cocorlow | 0:6256752abece | 124 | union VELECEF |
cocorlow | 0:6256752abece | 125 | { |
cocorlow | 0:6256752abece | 126 | char byte_data[VELECEF_LEN+8]; |
cocorlow | 0:6256752abece | 127 | struct |
cocorlow | 0:6256752abece | 128 | { |
cocorlow | 0:6256752abece | 129 | unsigned short sync; |
cocorlow | 0:6256752abece | 130 | char m_class; |
cocorlow | 0:6256752abece | 131 | char m_id; |
cocorlow | 0:6256752abece | 132 | unsigned short pay_len; |
cocorlow | 0:6256752abece | 133 | unsigned int iTOW; |
cocorlow | 0:6256752abece | 134 | int ecefVX; |
cocorlow | 0:6256752abece | 135 | int ecefVY; |
cocorlow | 0:6256752abece | 136 | int ecefVZ; |
cocorlow | 0:6256752abece | 137 | unsigned int sAcc; |
cocorlow | 0:6256752abece | 138 | char check_a; |
cocorlow | 0:6256752abece | 139 | char check_b; |
cocorlow | 0:6256752abece | 140 | } data; |
cocorlow | 0:6256752abece | 141 | }; |
cocorlow | 0:6256752abece | 142 | |
cocorlow | 0:6256752abece | 143 | // 0x01 0x12 |
cocorlow | 0:6256752abece | 144 | union VELNED |
cocorlow | 0:6256752abece | 145 | { |
cocorlow | 0:6256752abece | 146 | char byte_data[VELNED_LEN+8]; |
cocorlow | 0:6256752abece | 147 | struct |
cocorlow | 0:6256752abece | 148 | { |
cocorlow | 0:6256752abece | 149 | unsigned short sync; |
cocorlow | 0:6256752abece | 150 | char m_class; |
cocorlow | 0:6256752abece | 151 | char m_id; |
cocorlow | 0:6256752abece | 152 | unsigned short pay_len; |
cocorlow | 0:6256752abece | 153 | unsigned int iTOW; |
cocorlow | 0:6256752abece | 154 | int velN; |
cocorlow | 0:6256752abece | 155 | int velE; |
cocorlow | 0:6256752abece | 156 | int velD; |
cocorlow | 0:6256752abece | 157 | unsigned int speed; |
cocorlow | 0:6256752abece | 158 | unsigned int gSpeed; |
cocorlow | 0:6256752abece | 159 | signed int heading; |
cocorlow | 0:6256752abece | 160 | unsigned int sAcc; |
cocorlow | 0:6256752abece | 161 | unsigned int cAcc; |
cocorlow | 0:6256752abece | 162 | char check_a; |
cocorlow | 0:6256752abece | 163 | char check_b; |
cocorlow | 0:6256752abece | 164 | } data; |
cocorlow | 0:6256752abece | 165 | }; |
cocorlow | 0:6256752abece | 166 | |
cocorlow | 0:6256752abece | 167 | class GPSUBX |
cocorlow | 0:6256752abece | 168 | { |
cocorlow | 0:6256752abece | 169 | private: |
cocorlow | 0:6256752abece | 170 | I2C i2c; |
cocorlow | 0:6256752abece | 171 | char Address; |
cocorlow | 0:6256752abece | 172 | public: |
cocorlow | 0:6256752abece | 173 | int TimeDifference; |
cocorlow | 0:6256752abece | 174 | |
cocorlow | 0:6256752abece | 175 | GPSUBX(PinName sda, PinName scl, char address, int timedifference, int hz); |
cocorlow | 0:6256752abece | 176 | int GetGPSData(GPSData* pdata); |
cocorlow | 0:6256752abece | 177 | int GetTimeData(GPSData* pdata); |
cocorlow | 0:6256752abece | 178 | |
cocorlow | 0:6256752abece | 179 | static void Checksum(char payload[], int n, char* ck_a, char* ck_b); |
cocorlow | 0:6256752abece | 180 | }; |
cocorlow | 0:6256752abece | 181 | |
cocorlow | 0:6256752abece | 182 | #endif |