u-blox UBX library for I2C

Dependencies:   Vector3

It will not work

GPSUBX.hpp

Committer:
cocorlow
Date:
2021-09-12
Revision:
0:6256752abece

File content as of revision 0:6256752abece:

#ifndef __GPSUBX_HPP__
#define __GPSUBX_HPP__

#include "mbed.h"
#include "Vector3.hpp"

#define GPS_ADDRESS 0x23

#define POSECEF_LEN 20
#define POSLLH_LEN 28
#define TIMEUTC_LEN 20
#define VELECEF_LEN 20
#define VELNED_LEN 36


#define UBX_SYNC 0x62 << 8 | 0xb5

extern Serial pc;

struct GPSData
{
    int Year;
    int Month;
    int Day;
    int Hours;
    int Minutes;
    int Seconds;
    int iTOW;
    float Longitude;
    float Latitude;
    float Height;
    float Pressure;
    Vector3 VelocityNED;
    Vector3 PositionNED;
    Vector3 PositionECEF;
};

enum GPSState
{
    WAIT,
    MANUAL,
    AUTO,
    READ,
    STREAM,
    CONFIG    
};

enum LogState
{
    STOP,
    STBY,
    RUNTIME,
    FIN
};

// 0x01 0x01
union POSECEF
{
    char byte_data[POSECEF_LEN+8];
    struct
    {
        unsigned short sync;
        char m_class;
        char m_id;
        unsigned short pay_len;
        unsigned int iTOW;
        int ecefX;
        int ecefY;
        int ecefZ;
        unsigned int pAcc;
        char check_a;
        char check_b;
    } data;
};

// 0x01 0x02
union POSLLH
{
    char byte_data[POSLLH_LEN+8];
    struct
    {
        unsigned short sync;
        char m_class;
        char m_id;
        unsigned short pay_len;
        unsigned int iTOW;
        int lon;
        int lat;
        int height;
        int hMSL;
        unsigned int hAcc;
        unsigned int vAcc;
        char check_a;
        char check_b;
    } data;
};

// 0x01 0x21
union TIMEUTC
{
    char byte_data[TIMEUTC_LEN+8];
    struct
    {
        unsigned short sync;
        char m_class;
        char m_id;
        unsigned short pay_len;
        unsigned int iTOW;
        unsigned int tAcc;
        int nano;
        unsigned short year;
        unsigned char month;
        unsigned char day;
        unsigned char hour;
        unsigned char min;
        unsigned char sec;
        unsigned char valid;
        char check_a;
        char check_b;
    } data;
};

// 0x01 0x11
union VELECEF
{
    char byte_data[VELECEF_LEN+8];
    struct
    {
        unsigned short sync;
        char m_class;
        char m_id;
        unsigned short pay_len;
        unsigned int iTOW;
        int ecefVX;
        int ecefVY;
        int ecefVZ;
        unsigned int sAcc;
        char check_a;
        char check_b;
    } data;  
};

// 0x01 0x12
union VELNED
{
    char byte_data[VELNED_LEN+8];
    struct
    {
        unsigned short sync;
        char m_class;
        char m_id;
        unsigned short pay_len;
        unsigned int iTOW;
        int velN;
        int velE;
        int velD;
        unsigned int speed;
        unsigned int gSpeed;
        signed int heading;
        unsigned int sAcc;
        unsigned int cAcc;
        char check_a;
        char check_b;
    } data;
};

class GPSUBX
{
private:
    I2C i2c;
    char Address;
public:
    int TimeDifference;
    
    GPSUBX(PinName sda, PinName scl, char address, int timedifference, int hz);
    int GetGPSData(GPSData* pdata);
    int GetTimeData(GPSData* pdata);
    
    static void Checksum(char payload[], int n, char* ck_a, char* ck_b);
};

#endif