Added UBX CFG PWR frame to GPS. Useful for putting GPS in "shutdown"

master
Richard Meadows 2015-10-18 18:55:56 +01:00
rodzic 014a9dc568
commit 68c9614efa
3 zmienionych plików z 42 dodań i 0 usunięć

Wyświetl plik

@ -25,6 +25,9 @@
#ifndef GPS_H
#define GPS_H
#include "samd20.h"
#include "hw_config.h"
/**
* GPS Error types
*/
@ -45,6 +48,10 @@ struct ubx_nav_sol gps_get_nav_sol();
struct ubx_nav_timeutc gps_get_nav_timeutc();
uint8_t gps_is_locked(void);
void gps_set_powersave(bool powersave_on);
void gps_set_power_state(bool gnss_running);
void gps_set_powersave_auto(void);
void gps_usart_init_enable(uint32_t baud_rate);

Wyświetl plik

@ -157,6 +157,19 @@ __PACKED__ struct ubx_cfg_prt {
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
*/
@ -193,6 +206,13 @@ enum {
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
*/

Wyświetl plik

@ -76,6 +76,7 @@ volatile struct ubx_cfg_gnss ubx_cfg_gnss = { .id = (UBX_CFG | (0x3E << 8)
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_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)) };
@ -90,6 +91,7 @@ volatile ubx_message_t* const ubx_messages[] = {
(ubx_message_t*)&ubx_cfg_nav5,
(ubx_message_t*)&ubx_cfg_tp5,
(ubx_message_t*)&ubx_cfg_prt,
(ubx_message_t*)&ubx_cfg_pwr,
(ubx_message_t*)&ubx_cfg_rxm,
(ubx_message_t*)&ubx_nav_posllh,
(ubx_message_t*)&ubx_nav_timeutc,
@ -447,6 +449,19 @@ void gps_set_powersave(bool powersave_on)
(uint8_t*)&ubx_cfg_rxm.payload,
sizeof(ubx_cfg_rxm.payload));
}
/**
* Sets the PWR power state
*/
void gps_set_power_state(bool gnss_running)
{
ubx_cfg_pwr.payload.messageVersion = 1;
ubx_cfg_pwr.payload.state = (gnss_running ? UBX_PWR_STATE_GNSS_RUNNING : UBX_PWR_STATE_GNSS_STOPPED);
/* Write the new settings */
_ubx_send_message((ubx_message_t*)&ubx_cfg_pwr,
(uint8_t*)&ubx_cfg_pwr.payload,
sizeof(ubx_cfg_pwr.payload));
}
/**
* Sets the powersave mode automatically based on if we're locked.
*