u-blox UBX library for I2C

Dependencies:   Vector3

It will not work

Committer:
cocorlow
Date:
Sun Sep 12 16:38:51 2021 +0000
Revision:
0:6256752abece
TIMEUTC test

Who changed what in which revision?

UserRevisionLine numberNew 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