From c70c0b1800e97bf136df0a3aa5d69fdbb037d261 Mon Sep 17 00:00:00 2001 From: Richard Meadows Date: Sat, 19 Dec 2015 21:57:54 +0000 Subject: [PATCH] [ubx] Add ubx-cfg-rst message on startup Conflicts: firmware/inc/ubx_messages.h firmware/src/gps_ubx.c --- firmware/inc/ubx_messages.h | 12 ++++++++++++ firmware/src/gps_ubx.c | 22 ++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/firmware/inc/ubx_messages.h b/firmware/inc/ubx_messages.h index 8f5ea70..2df4d78 100644 --- a/firmware/inc/ubx_messages.h +++ b/firmware/inc/ubx_messages.h @@ -170,6 +170,18 @@ __PACKED__ struct ubx_cfg_pwr { uint32_t state; } payload; }; +/** + * UBX CFG RST Reset Receiver + */ +__PACKED__ struct ubx_cfg_rst { + ubx_message_id_t id; + enum ubx_packet_state state; + struct { + uint16_t navBbrMask; + uint8_t resetMode; + uint8_t reserved1; + } payload; +}; /** * UBX CFG RXM Set powersave mode */ diff --git a/firmware/src/gps_ubx.c b/firmware/src/gps_ubx.c index 467125c..d7b1b72 100644 --- a/firmware/src/gps_ubx.c +++ b/firmware/src/gps_ubx.c @@ -78,6 +78,7 @@ volatile struct ubx_cfg_nav5 ubx_cfg_nav5 = { .id = (UBX_CFG | (0x24 << 8)) }; volatile struct ubx_cfg_tp5 ubx_cfg_tp5 = { .id = (UBX_CFG | (0x31 << 8)) }; volatile struct ubx_cfg_prt ubx_cfg_prt = { .id = (UBX_CFG | (0x00 << 8)) }; volatile struct ubx_cfg_pwr ubx_cfg_pwr = { .id = (UBX_CFG | (0x57 << 8)) }; +volatile struct ubx_cfg_rst ubx_cfg_rst = { .id = (UBX_CFG | (0x04 << 8)) }; volatile struct ubx_cfg_rxm ubx_cfg_rxm = { .id = (UBX_CFG | (0x11 << 8)) }; volatile struct ubx_nav_posllh ubx_nav_posllh = { .id = (UBX_NAV | (0x02 << 8)) }; volatile struct ubx_nav_timeutc ubx_nav_timeutc = { .id = (UBX_NAV | (0x21 << 8)) }; @@ -93,6 +94,7 @@ volatile ubx_message_t* const ubx_messages[] = { (ubx_message_t*)&ubx_cfg_tp5, (ubx_message_t*)&ubx_cfg_prt, (ubx_message_t*)&ubx_cfg_pwr, + (ubx_message_t*)&ubx_cfg_rst, (ubx_message_t*)&ubx_cfg_rxm, (ubx_message_t*)&ubx_nav_posllh, (ubx_message_t*)&ubx_nav_timeutc, @@ -294,6 +296,23 @@ void gps_set_io_config(uint32_t baud_rate) for (int i = 0; i < 1000*100; i++); } +/** + * Reset the uBlox + */ +void gps_cfg_rst(void) +{ + ubx_cfg_rst.payload.navBbrMask = 0xFFFF; /* Cold start */ + ubx_cfg_rst.payload.resetMode = 0; /* Immediate hardware reset */ + ubx_cfg_rst.payload.reserved1 = 0; + + _ubx_send_message((ubx_message_t*)&ubx_cfg_rst, + (uint8_t*)&ubx_cfg_rst.payload, + sizeof(ubx_cfg_rst.payload)); + + for (int i = 0; i < 1000*100*2; i++); +} + + /** * Sends messages to the GPS to update the time */ @@ -561,6 +580,9 @@ void gps_init(void) kick_the_watchdog(); + /* Reset the GPS */ + gps_cfg_rst(); + /* We use ubx protocol */ gps_set_io_config(GPS_BAUD_RATE);