2014-08-30 20:11:35 +00:00
|
|
|
/*
|
|
|
|
* UBX Message definitions
|
|
|
|
* Copyright (C) 2014 Richard Meadows <richardeoin>
|
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining
|
|
|
|
* a copy of this software and associated documentation files (the
|
|
|
|
* "Software"), to deal in the Software without restriction, including
|
|
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
|
|
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
|
|
* permit persons to whom the Software is furnished to do so, subject to
|
|
|
|
* the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice shall be
|
|
|
|
* included in all copies or substantial portions of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
|
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
|
|
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
|
|
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
|
|
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef UBX_MESSAGES_H
|
|
|
|
#define UBX_MESSAGES_H
|
|
|
|
|
|
|
|
#include "samd20.h"
|
|
|
|
|
|
|
|
/** We use the packed attribute so we can copy direct to structs */
|
|
|
|
#define __PACKED__ __attribute__((packed))
|
|
|
|
/** UBX Message IDs are 16-bit types */
|
|
|
|
typedef uint16_t ubx_message_id_t;
|
|
|
|
/** Used for storing the state of each packet */
|
|
|
|
enum ubx_packet_state {
|
|
|
|
UBX_PACKET_WAITING,
|
|
|
|
UBX_PACKET_ACK,
|
|
|
|
UBX_PACKET_NACK,
|
2014-10-24 10:47:15 +00:00
|
|
|
UBX_PACKET_UPDATED,
|
2014-08-30 20:11:35 +00:00
|
|
|
};
|
|
|
|
/** Generic UBX Message Type. Each message type extended is from this */
|
|
|
|
typedef struct {
|
|
|
|
ubx_message_id_t id;
|
|
|
|
enum ubx_packet_state state;
|
|
|
|
} ubx_message_t;
|
|
|
|
|
|
|
|
/** UBX Class Types */
|
|
|
|
enum {
|
|
|
|
UBX_NAV = 0x01,
|
|
|
|
UBX_RXM = 0x02,
|
|
|
|
UBX_INF = 0x04,
|
|
|
|
UBX_ACK = 0x05,
|
|
|
|
UBX_CFG = 0x06,
|
|
|
|
UBX_MON = 0x0A,
|
|
|
|
UBX_AID = 0x0B,
|
|
|
|
UBX_TIM = 0x0D,
|
|
|
|
UBX_ESF = 0x10,
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* =============================================================================
|
|
|
|
* UBX CFG Message Types =======================================================
|
|
|
|
* =============================================================================
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* UBX CFG ANT Antenna Control Settings
|
|
|
|
*/
|
|
|
|
__PACKED__ struct ubx_cfg_ant {
|
|
|
|
ubx_message_id_t id;
|
|
|
|
enum ubx_packet_state state;
|
|
|
|
struct {
|
|
|
|
uint16_t flags;
|
|
|
|
uint16_t pins;
|
|
|
|
} payload;
|
|
|
|
};
|
2014-10-24 10:19:01 +00:00
|
|
|
/**
|
|
|
|
* UBX CFG GNSS
|
|
|
|
*/
|
|
|
|
__PACKED__ struct ubx_cfg_gnss {
|
|
|
|
ubx_message_id_t id;
|
|
|
|
enum ubx_packet_state state;
|
|
|
|
struct {
|
|
|
|
uint8_t msgVer;
|
|
|
|
uint8_t numTrkChHw;
|
|
|
|
uint8_t numTrkChUse;
|
|
|
|
uint8_t numConfigBlocks;
|
|
|
|
struct {
|
|
|
|
uint8_t gnssID;
|
|
|
|
uint8_t resTrkCh;
|
|
|
|
uint8_t maxTrkCh;
|
|
|
|
uint8_t reserved1;
|
|
|
|
int32_t flags;
|
|
|
|
} block[8];
|
|
|
|
} payload;
|
|
|
|
};
|
2014-08-30 20:11:35 +00:00
|
|
|
/**
|
|
|
|
* UBX CFG NAV5 Navigation Engine Settings
|
|
|
|
*/
|
|
|
|
__PACKED__ struct ubx_cfg_nav5 {
|
|
|
|
ubx_message_id_t id;
|
|
|
|
enum ubx_packet_state state;
|
|
|
|
struct {
|
|
|
|
uint16_t mask;
|
|
|
|
uint8_t dynModel;
|
|
|
|
uint8_t fixMode;
|
|
|
|
int32_t fixedAlt;
|
|
|
|
uint32_t fixedAltVar;
|
|
|
|
int8_t minElev;
|
|
|
|
uint8_t drLimit;
|
|
|
|
uint16_t pDop;
|
|
|
|
uint16_t tDop;
|
|
|
|
uint16_t pAcc;
|
|
|
|
uint16_t tAcc;
|
|
|
|
uint8_t staticHoldThresh;
|
|
|
|
uint8_t dgpsTimeOut;
|
|
|
|
uint32_t res2;
|
|
|
|
uint32_t res3;
|
|
|
|
uint32_t res4;
|
|
|
|
} payload;
|
|
|
|
};
|
|
|
|
/**
|
|
|
|
* UBX CFG TP5 TimePulse Parameters
|
|
|
|
*/
|
|
|
|
__PACKED__ struct ubx_cfg_tp5 {
|
|
|
|
ubx_message_id_t id;
|
|
|
|
enum ubx_packet_state state;
|
|
|
|
struct {
|
|
|
|
uint8_t tpIdx;
|
|
|
|
uint8_t res0;
|
|
|
|
uint16_t res1;
|
|
|
|
int16_t antCableDelay;
|
|
|
|
int16_t rfGroupDelay;
|
|
|
|
uint32_t freqPeriod;
|
|
|
|
uint32_t freqPeriodLoc;
|
|
|
|
uint32_t pulseLenRatio;
|
|
|
|
uint32_t pulseLenRatioLock;
|
|
|
|
int32_t userConfigDelay;
|
|
|
|
uint32_t flags;
|
|
|
|
} payload;
|
|
|
|
};
|
|
|
|
/**
|
|
|
|
* UBX CFG PRT Polls the configuration for one I/O Port
|
|
|
|
*/
|
|
|
|
__PACKED__ struct ubx_cfg_prt {
|
|
|
|
ubx_message_id_t id;
|
|
|
|
enum ubx_packet_state state;
|
|
|
|
struct {
|
|
|
|
uint8_t portID;
|
|
|
|
uint8_t res0;
|
|
|
|
uint16_t txReady;
|
|
|
|
uint32_t mode;
|
|
|
|
uint32_t baudRate;
|
|
|
|
uint16_t inProtoMask;
|
|
|
|
uint16_t outProtoMask;
|
|
|
|
uint16_t flags;
|
|
|
|
uint16_t res3;
|
|
|
|
} payload;
|
|
|
|
};
|
2015-10-18 17:55:56 +00:00
|
|
|
/**
|
|
|
|
* UBX CFG PWR Put receiver in a defined power state
|
|
|
|
*/
|
|
|
|
__PACKED__ struct ubx_cfg_pwr {
|
|
|
|
ubx_message_id_t id;
|
|
|
|
enum ubx_packet_state state;
|
|
|
|
struct {
|
|
|
|
uint8_t messageVersion;
|
|
|
|
uint8_t res0;
|
|
|
|
uint16_t res1;
|
|
|
|
uint32_t state;
|
|
|
|
} payload;
|
|
|
|
};
|
2015-03-16 15:30:36 +00:00
|
|
|
/**
|
|
|
|
* UBX CFG RXM Set powersave mode
|
|
|
|
*/
|
|
|
|
__PACKED__ struct ubx_cfg_rxm {
|
|
|
|
ubx_message_id_t id;
|
|
|
|
enum ubx_packet_state state;
|
|
|
|
struct {
|
|
|
|
uint8_t reserved1;
|
|
|
|
uint8_t lpMode;
|
|
|
|
} payload;
|
|
|
|
};
|
2014-08-30 20:11:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* UBX Dynamic Platform Model
|
|
|
|
*/
|
|
|
|
enum {
|
|
|
|
UBX_PLATFORM_MODEL_PORTABLE = 0,
|
|
|
|
UBX_PLATFORM_MODEL_STATIONARY = 2,
|
|
|
|
UBX_PLATFORM_MODEL_PEDESTRIAN = 3,
|
|
|
|
UBX_PLATFORM_MODEL_AUTOMOTIVE = 4,
|
|
|
|
UBX_PLATFORM_MODEL_SEA = 5,
|
|
|
|
UBX_PLATFORM_MODEL_AIRBORNE_1G = 6,
|
|
|
|
UBX_PLATFORM_MODEL_AIRBORNE_2G = 7,
|
|
|
|
UBX_PLATFORM_MODEL_AIRBORNE_4G = 8,
|
|
|
|
};
|
2014-10-24 10:19:01 +00:00
|
|
|
/**
|
|
|
|
* UBX GNSS Systems
|
|
|
|
*/
|
|
|
|
enum {
|
|
|
|
UBX_GNSS_GPS = 0,
|
|
|
|
UBX_GNSS_SBAS = 1,
|
|
|
|
UBX_GNSS_GALILEO = 2,
|
|
|
|
UBX_GNSS_BEIDOU = 3,
|
|
|
|
UBX_GNSS_QZSS = 5,
|
|
|
|
UBX_GNSS_GLONASS = 6,
|
|
|
|
};
|
2015-10-18 17:55:56 +00:00
|
|
|
/**
|
|
|
|
* UBX PWR Power States
|
|
|
|
*/
|
|
|
|
enum {
|
|
|
|
UBX_PWR_STATE_GNSS_RUNNING = 0x52554E20,
|
|
|
|
UBX_PWR_STATE_GNSS_STOPPED = 0x53544F50,
|
|
|
|
};
|
2015-03-16 15:30:36 +00:00
|
|
|
/**
|
|
|
|
* UBX Powersave Modes
|
|
|
|
*/
|
|
|
|
enum {
|
|
|
|
UBX_POWERSAVE_OFF = 0,
|
|
|
|
UBX_POWERSAVE_ON = 1,
|
|
|
|
};
|
2015-06-27 18:16:19 +00:00
|
|
|
/**
|
|
|
|
* UBX TP5 Flags
|
|
|
|
*/
|
|
|
|
enum {
|
|
|
|
UBX_TP5_ENABLE = (1 << 0),
|
|
|
|
UBX_TP5_LOCK_TO_GPS = (1 << 1),
|
|
|
|
UBX_TP5_LOCKED_OTHER = (1 << 2),
|
|
|
|
UBX_TP5_IS_FREQ = (1 << 3),
|
|
|
|
UBX_TP5_IS_LENGTH = (1 << 4),
|
|
|
|
UBX_TP5_ALIGN_TO_TOW = (1 << 5),
|
|
|
|
UBX_TP5_ALIGN_FALLING = (0 << 6),
|
|
|
|
UBX_TP5_ALIGN_RISING = (1 << 6),
|
|
|
|
UBX_TP5_USE_GRID_UTC = (0 << 7),
|
|
|
|
UBX_TP5_USE_GRID_GPS = (1 << 7),
|
|
|
|
};
|
|
|
|
|
2014-08-30 20:11:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* =============================================================================
|
|
|
|
* UBX NAV Message Types =======================================================
|
|
|
|
* =============================================================================
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* UBX NAV POSLLH Geodetic Position Solution
|
|
|
|
*/
|
|
|
|
__PACKED__ struct ubx_nav_posllh {
|
|
|
|
ubx_message_id_t id;
|
|
|
|
enum ubx_packet_state state;
|
|
|
|
struct {
|
|
|
|
uint32_t iTOW;
|
|
|
|
int32_t lon;
|
|
|
|
int32_t lat;
|
|
|
|
int32_t height;
|
|
|
|
int32_t hMSL;
|
|
|
|
uint32_t hAcc;
|
|
|
|
uint32_t vAcc;
|
|
|
|
} payload;
|
|
|
|
};
|
|
|
|
/**
|
|
|
|
* UBX NAV TIMEUTC
|
|
|
|
*/
|
|
|
|
__PACKED__ struct ubx_nav_timeutc {
|
|
|
|
ubx_message_id_t id;
|
|
|
|
enum ubx_packet_state state;
|
|
|
|
struct {
|
|
|
|
uint32_t iTOW;
|
|
|
|
uint32_t tAcc;
|
|
|
|
int32_t nano;
|
|
|
|
uint16_t year;
|
|
|
|
uint8_t month;
|
|
|
|
uint8_t day;
|
|
|
|
uint8_t hour;
|
|
|
|
uint8_t min;
|
|
|
|
uint8_t sec;
|
|
|
|
uint8_t valid;
|
|
|
|
} payload;
|
|
|
|
};
|
|
|
|
/**
|
|
|
|
* UBX NAV SOL Navigation Solution Information
|
|
|
|
*/
|
|
|
|
__PACKED__ struct ubx_nav_sol {
|
|
|
|
ubx_message_id_t id;
|
|
|
|
enum ubx_packet_state state;
|
|
|
|
struct {
|
|
|
|
uint32_t iTOW;
|
|
|
|
int32_t fTOW;
|
|
|
|
uint16_t week;
|
|
|
|
uint8_t gpsFix;
|
|
|
|
uint8_t flags;
|
|
|
|
int32_t ecefX;
|
|
|
|
int32_t ecefY;
|
|
|
|
int32_t ecefZ;
|
|
|
|
uint32_t pAcc;
|
|
|
|
int32_t ecefVX;
|
|
|
|
int32_t ecefVY;
|
|
|
|
int32_t ecefVZ;
|
|
|
|
uint32_t sAcc;
|
|
|
|
uint16_t pDOP;
|
|
|
|
uint8_t res1;
|
|
|
|
uint8_t numSV;
|
|
|
|
uint32_t res2;
|
|
|
|
} payload;
|
|
|
|
};
|
2014-10-06 18:04:48 +00:00
|
|
|
/**
|
|
|
|
* UBX NAV STATUS Receiver Navigation Status
|
|
|
|
*/
|
|
|
|
__PACKED__ struct ubx_nav_status {
|
|
|
|
ubx_message_id_t id;
|
|
|
|
enum ubx_packet_state state;
|
|
|
|
struct {
|
|
|
|
uint32_t iTOW;
|
|
|
|
uint8_t gpsFix;
|
|
|
|
int8_t flags;
|
|
|
|
int8_t fixStat;
|
|
|
|
int8_t flags2;
|
|
|
|
uint32_t ttff;
|
|
|
|
uint32_t msss;
|
|
|
|
} payload;
|
|
|
|
};
|
2014-08-30 20:11:35 +00:00
|
|
|
|
2015-06-27 18:06:18 +00:00
|
|
|
/**
|
|
|
|
* UBX TIMEUTC valid flags
|
|
|
|
*/
|
|
|
|
enum {
|
|
|
|
UBX_TIMEUTC_VALID_TOW = (1 << 0),
|
|
|
|
UBX_TIMEUTC_VALID_WKN = (1 << 1),
|
|
|
|
UBX_TIMEUTC_VALID_UTC = (1 << 2),
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2014-08-30 20:11:35 +00:00
|
|
|
#endif /* UBX_MESSAGES_H */
|