Skip to content

Commit

Permalink
u-blox GNSS PSM for Uni
Browse files Browse the repository at this point in the history
  • Loading branch information
lyusupov committed Jun 15, 2020
1 parent f7303db commit 4e545a7
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 10 deletions.
3 changes: 2 additions & 1 deletion software/firmware/source/SkyView/SkyView.h
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,8 @@ enum
enum
{
POWER_SAVE_NONE,
POWER_SAVE_WIFI
POWER_SAVE_WIFI,
POWER_SAVE_GNSS
};

enum
Expand Down
3 changes: 2 additions & 1 deletion software/firmware/source/SkyWatch/BatteryHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@
enum
{
POWER_SAVE_NONE,
POWER_SAVE_WIFI
POWER_SAVE_WIFI,
POWER_SAVE_GNSS
};

void Battery_setup(void);
Expand Down
3 changes: 2 additions & 1 deletion software/firmware/source/SoftRF/BatteryHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@
enum
{
POWER_SAVE_NONE,
POWER_SAVE_WIFI
POWER_SAVE_WIFI,
POWER_SAVE_GNSS
};

void Battery_setup(void);
Expand Down
56 changes: 54 additions & 2 deletions software/firmware/source/SoftRF/GNSSHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "SoCHelper.h"
#include "WiFiHelper.h"
#include "RFHelper.h"
#include "BatteryHelper.h"

#if !defined(EXCLUDE_EGM96)
#include <egm96s.h>
Expand Down Expand Up @@ -79,6 +80,17 @@ const uint8_t RXM_PMREQ[16] PROGMEM = {0xb5, 0x62, 0x02, 0x41, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x4d, 0x3b};


#if defined(USE_GNSS_PSM)
static bool gnss_psm_active = false;

/* Max Performance Mode (default) */
const uint8_t RXM_MAXP[] PROGMEM = {0xB5, 0x62, 0x06, 0x11, 0x02, 0x00, 0x08, 0x00, 0x21, 0x91};

/* Power Save Mode */
const uint8_t RXM_PSM[] PROGMEM = {0xB5, 0x62, 0x06, 0x11, 0x02, 0x00, 0x08, 0x01, 0x22, 0x92};
#endif /* USE_GNSS_PSM */

const char *GNSS_name[] = {
[GNSS_MODULE_NONE] = "NONE",
[GNSS_MODULE_NMEA] = "NMEA",
Expand Down Expand Up @@ -519,7 +531,8 @@ byte GNSS_setup() {
rval = GNSS_MODULE_NMEA;

if (hw_info.model == SOFTRF_MODEL_PRIME_MK2 ||
hw_info.model == SOFTRF_MODEL_RASPBERRY ) {
hw_info.model == SOFTRF_MODEL_RASPBERRY ||
hw_info.model == SOFTRF_MODEL_UNI) {

rval = GNSS_version();

Expand All @@ -544,9 +557,48 @@ byte GNSS_setup() {
return rval;
}

void GNSS_loop()
{
PickGNSSFix();

GNSSTimeSync();

#if defined(USE_GNSS_PSM)
if (settings->power_save == POWER_SAVE_GNSS) {
if (hw_info.model == SOFTRF_MODEL_UNI) {
if (hw_info.gnss == GNSS_MODULE_U6 ||
hw_info.gnss == GNSS_MODULE_U7 ||
hw_info.gnss == GNSS_MODULE_U8) {

if (!gnss_psm_active && isValidGNSSFix() && gnss.satellites.value() > 5) {
// Setup for Power Save Mode (Default Cyclic 1s)
for (int i = 0; i < sizeof(RXM_PSM); i++) {
swSer.write(pgm_read_byte(&RXM_PSM[i]));
}

GNSS_DEBUG_PRINTLN(F("INFO: GNSS Power Save Mode"));
gnss_psm_active = true;
} else if ( gnss_psm_active &&
((gnss.satellites.isValid() && gnss.satellites.value() <= 5) ||
gnss.satellites.age() > NMEA_EXP_TIME)) {
// Setup for Continuous Mode
for (int i = 0; i < sizeof(RXM_MAXP); i++) {
swSer.write(pgm_read_byte(&RXM_MAXP[i]));
}

GNSS_DEBUG_PRINTLN(F("INFO: GNSS Continuous Mode"));
gnss_psm_active = false;
}
}
}
}
#endif /* USE_GNSS_PSM */
}

void GNSS_fini()
{
if (hw_info.model == SOFTRF_MODEL_PRIME_MK2) {
if (hw_info.model == SOFTRF_MODEL_PRIME_MK2 ||
hw_info.model == SOFTRF_MODEL_UNI) {
if (hw_info.gnss == GNSS_MODULE_U6 ||
hw_info.gnss == GNSS_MODULE_U7 ||
hw_info.gnss == GNSS_MODULE_U8) {
Expand Down
1 change: 1 addition & 0 deletions software/firmware/source/SoftRF/GNSSHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ enum
(gnss.date.age() <= NMEA_EXP_TIME))

byte GNSS_setup (void);
void GNSS_loop (void);
void GNSS_fini (void);
void GNSSTimeSync (void);
void PickGNSSFix (void);
Expand Down
1 change: 1 addition & 0 deletions software/firmware/source/SoftRF/Platform_CC13XX.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ extern SCSerial scSerial;
#define MACRONIX_MX25R8035F 0xC228

#define USE_OLED // +5.5 kb
#define USE_GNSS_PSM

//#define USE_BASICMAC

Expand Down
4 changes: 1 addition & 3 deletions software/firmware/source/SoftRF/SoftRF.ino
Original file line number Diff line number Diff line change
Expand Up @@ -321,9 +321,7 @@ void normal()
AHRS_loop();
#endif /* ENABLE_AHRS */

PickGNSSFix();

GNSSTimeSync();
GNSS_loop();

ThisAircraft.timestamp = now();
if (isValidFix()) {
Expand Down
3 changes: 1 addition & 2 deletions software/firmware/source/UATbridge/UATbridge.ino
Original file line number Diff line number Diff line change
Expand Up @@ -282,8 +282,7 @@ void setup() {

void loop() {

PickGNSSFix();
GNSSTimeSync();
GNSS_loop();

if (hw_info.rf != RF_IC_CC13XX) {
RF_loop();
Expand Down

0 comments on commit 4e545a7

Please sign in to comment.