pico-tracker/firmware/inc/ubx_messages.h

335 wiersze
7.3 KiB
C

/*
* 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,
UBX_PACKET_UPDATED,
};
/** 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;
};
/**
* 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;
};
/**
* 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;
};
/**
* 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;
};
/**
* 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;
};
/**
* 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,
};
/**
* 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,
};
/**
* UBX PWR Power States
*/
enum {
UBX_PWR_STATE_GNSS_RUNNING = 0x52554E20,
UBX_PWR_STATE_GNSS_STOPPED = 0x53544F50,
};
/**
* UBX Powersave Modes
*/
enum {
UBX_POWERSAVE_OFF = 0,
UBX_POWERSAVE_ON = 1,
};
/**
* 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),
};
/**
* =============================================================================
* 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;
};
/**
* 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;
};
/**
* UBX TIMEUTC valid flags
*/
enum {
UBX_TIMEUTC_VALID_TOW = (1 << 0),
UBX_TIMEUTC_VALID_WKN = (1 << 1),
UBX_TIMEUTC_VALID_UTC = (1 << 2),
};
#endif /* UBX_MESSAGES_H */