From 78662eb3564164f8611ecc936e2c35c056edb0ae Mon Sep 17 00:00:00 2001
From: Alessio Morale <alessiomorale@gmail.com>
Date: Tue, 2 Sep 2014 00:36:04 +0200
Subject: [PATCH] OP-1370 - Explicitly disable unneeded messages

---
 flight/modules/GPS/inc/UBX.h        | 58 +++++++++++++++++++-----
 flight/modules/GPS/ubx_autoconfig.c | 69 ++++++++++++++++++++++-------
 2 files changed, 102 insertions(+), 25 deletions(-)

diff --git a/flight/modules/GPS/inc/UBX.h b/flight/modules/GPS/inc/UBX.h
index 6cc285795..1b1256e1f 100644
--- a/flight/modules/GPS/inc/UBX.h
+++ b/flight/modules/GPS/inc/UBX.h
@@ -51,18 +51,29 @@ typedef enum {
     UBX_CLASS_CFG     = 0x06,
     UBX_CLASS_MON     = 0x0A,
     UBX_CLASS_OP_CUST = 0x99,
+    UBX_CLASS_AID     = 0x0B,
+    // unused class IDs, used for disabling them
+    UBX_CLASS_RXM     = 0x02,
 } ubx_class;
 
 // Message IDs
 typedef enum {
-    UBX_ID_NAV_POSLLH  = 0x02,
-    UBX_ID_NAV_STATUS  = 0x03,
-    UBX_ID_NAV_DOP     = 0x04,
-    UBX_ID_NAV_SOL     = 0x06,
-    UBX_ID_NAV_VELNED  = 0x12,
-    UBX_ID_NAV_TIMEUTC = 0x21,
-    UBX_ID_NAV_SVINFO  = 0x30,
-    UBX_ID_NAV_PVT     = 0x07,
+    UBX_ID_NAV_POSLLH    = 0x02,
+    UBX_ID_NAV_STATUS    = 0x03,
+    UBX_ID_NAV_DOP       = 0x04,
+    UBX_ID_NAV_SOL       = 0x06,
+    UBX_ID_NAV_VELNED    = 0x12,
+    UBX_ID_NAV_TIMEUTC   = 0x21,
+    UBX_ID_NAV_SVINFO    = 0x30,
+    UBX_ID_NAV_PVT       = 0x07,
+
+    UBX_ID_NAV_AOPSTATUS = 0x60,
+    UBX_ID_NAV_CLOCK     = 0x22,
+    UBX_ID_NAV_DGPS      = 0x31,
+    UBX_ID_NAV_POSECEF   = 0x01,
+    UBX_ID_NAV_SBAS      = 0x32,
+    UBX_ID_NAV_TIMEGPS   = 0x20,
+    UBX_ID_NAV_VELECEF   = 0x11
 } ubx_class_nav_id;
 
 typedef enum {
@@ -71,15 +82,23 @@ typedef enum {
 } ubx_class_op_id;
 
 typedef enum {
-    UBX_ID_MON_VER = 0x04,
+    UBX_ID_MON_VER    = 0x04,
+    // unused messages IDs, used for disabling them
+    UBX_ID_MON_HW2    = 0x0B,
+    UBX_ID_MON_HW     = 0x09,
+    UBX_ID_MON_IO     = 0x02,
+    UBX_ID_MON_MSGPP  = 0x06,
+    UBX_ID_MON_RXBUFF = 0x07,
+    UBX_ID_MON_RXR    = 0x21,
+    UBX_ID_MON_TXBUF  = 0x08,
 } ubx_class_mon_id;
 
-
 typedef enum {
     UBX_ID_CFG_NAV5 = 0x24,
     UBX_ID_CFG_RATE = 0x08,
     UBX_ID_CFG_MSG  = 0x01,
     UBX_ID_CFG_CFG  = 0x09,
+    UBX_ID_CFG_SBAS = 0x16,
 } ubx_class_cfg_id;
 
 typedef enum {
@@ -87,6 +106,25 @@ typedef enum {
     UBX_ID_ACK_NAK = 0x00,
 } ubx_class_ack_id;
 
+typedef enum {
+    UBX_ID_AID_ALM    = 0x0B,
+    UBX_ID_AID_ALPSRV = 0x32,
+    UBX_ID_AID_ALP    = 0x50,
+    UBX_ID_AID_AOP    = 0x33,
+    UBX_ID_AID_DATA   = 0x10,
+    UBX_ID_AID_EPH    = 0x31,
+    UBX_ID_AID_HUI    = 0x02,
+    UBX_ID_AID_INI    = 0x01,
+    UBX_ID_AID_REQ    = 0x00,
+} ubx_class_aid_id;
+
+typedef enum {
+    UBX_ID_RXM_ALM  = 0x30,
+    UBX_ID_RXM_EPH  = 0x31,
+    UBX_ID_RXM_RAW  = 0x10,
+    UBX_ID_RXM_SFRB = 0x11,
+    UBX_ID_RXM_SVSI = 0x20,
+} ubx_class_rxm_id;
 // private structures
 
 // Geodetic Position Solution
diff --git a/flight/modules/GPS/ubx_autoconfig.c b/flight/modules/GPS/ubx_autoconfig.c
index b8bef3efc..b21d915ec 100644
--- a/flight/modules/GPS/ubx_autoconfig.c
+++ b/flight/modules/GPS/ubx_autoconfig.c
@@ -54,25 +54,64 @@ typedef struct {
 } status_t;
 
 ubx_cfg_msg_t msg_config_ubx6[] = {
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_POSLLH,  .rate = 1  },
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_DOP,     .rate = 1  },
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_SOL,     .rate = 1  },
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_STATUS,  .rate = 1  },
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_VELNED,  .rate = 1  },
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_TIMEUTC, .rate = 1  },
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_SVINFO,  .rate = 10 },
+    // messages to disable
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_CLOCK,     .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_POSECEF,   .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_SBAS,      .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_TIMEGPS,   .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_VELECEF,   .rate = 0  },
+
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_HW,        .rate = 0  },
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_HW2,       .rate = 0  },
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_IO,        .rate = 0  },
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_MSGPP,     .rate = 0  },
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_RXBUFF,    .rate = 0  },
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_RXR,       .rate = 0  },
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_TXBUF,     .rate = 0  },
+
+    { .msgClass = UBX_CLASS_RXM, .msgID = UBX_ID_RXM_SVSI,      .rate = 0  },
+
+    // message to enable
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_POSLLH,    .rate = 1  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_DOP,       .rate = 1  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_SOL,       .rate = 1  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_STATUS,    .rate = 1  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_VELNED,    .rate = 1  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_TIMEUTC,   .rate = 1  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_SVINFO,    .rate = 10 },
 };
 
 ubx_cfg_msg_t msg_config_ubx7[] = {
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_PVT,     .rate = 1  },
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_POSLLH,  .rate = 0  },
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_DOP,     .rate = 1  },
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_SOL,     .rate = 0  },
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_STATUS,  .rate = 0  },
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_VELNED,  .rate = 0  },
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_TIMEUTC, .rate = 0  },
-    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_SVINFO,  .rate = 10 },
+    // messages to disable
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_AOPSTATUS, .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_CLOCK,     .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_DGPS,      .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_POSECEF,   .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_SBAS,      .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_TIMEGPS,   .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_VELECEF,   .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_SOL,       .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_STATUS,    .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_VELNED,    .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_TIMEUTC,   .rate = 0  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_POSLLH,    .rate = 0  },
+
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_HW,        .rate = 0  },
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_HW2,       .rate = 0  },
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_IO,        .rate = 0  },
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_MSGPP,     .rate = 0  },
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_RXBUFF,    .rate = 0  },
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_RXR,       .rate = 0  },
+    { .msgClass = UBX_CLASS_MON, .msgID = UBX_ID_MON_TXBUF,     .rate = 0  },
+
+    { .msgClass = UBX_CLASS_RXM, .msgID = UBX_ID_RXM_SVSI,      .rate = 0  },
+
+    // message to enable
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_PVT,       .rate = 1  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_DOP,       .rate = 1  },
+    { .msgClass = UBX_CLASS_NAV, .msgID = UBX_ID_NAV_SVINFO,    .rate = 10 },
 };
+
 // private defines
 #define LAST_CONFIG_SENT_START     (-1)
 #define LAST_CONFIG_SENT_COMPLETED (-2)