This class provides an API to communicate with a u-blox GNSS chip. The files here were originally part of the C027_Support library (https://developer.mbed.org/teams/ublox/code/C027_Support/ at revision 138:dafbbf31bf76) but have been separated out, primarily for use on the u-blox C030 board where the cellular interace portion of the C027_Support library will instead be provided through the new mbed Cellular API.

Dependents:   example-ublox-at-cellular-interface-ext example-low-power-sleep example-C030-out-of-box-demo example-C030-out-of-box-demo ... more

Committer:
fahim.alavi@u-blox.com
Date:
Wed Apr 03 16:32:30 2019 +0500
Revision:
31:9a1ce433f062
Parent:
27:405a5e611635
Child:
32:36bf0ff17131
NAVX5 support added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Bilal Qamar 12:a04f7eeece23 1 #include "gnss_operations.h"
Bilal Qamar 12:a04f7eeece23 2
fahim.alavi@u-blox.com 16:cb9861f0f4d8 3 #ifndef UBLOX_WEARABLE_FRAMEWORK
fahim.alavi@u-blox.com 16:cb9861f0f4d8 4 #define SEND_LOGGING_MESSAGE printf
fahim.alavi@u-blox.com 16:cb9861f0f4d8 5 #else
fahim.alavi@u-blox.com 16:cb9861f0f4d8 6 #include "MessageView.h"
fahim.alavi@u-blox.com 16:cb9861f0f4d8 7 #endif
fahim.alavi@u-blox.com 16:cb9861f0f4d8 8
Bilal Qamar 12:a04f7eeece23 9 #define FIRST_BYTE 0x000000FF
Bilal Qamar 12:a04f7eeece23 10 #define SECOND_BYTE 0x0000FF00
Bilal Qamar 12:a04f7eeece23 11 #define THIRD_BYTE 0x00FF0000
Bilal Qamar 12:a04f7eeece23 12 #define FOURTH_BYTE 0xFF000000
Bilal Qamar 12:a04f7eeece23 13 #define RETRY 5
Bilal Qamar 12:a04f7eeece23 14
Bilal Qamar 12:a04f7eeece23 15 #define EXTRACT_BYTE(INDEX, BYTE, VALUE) ((VALUE & BYTE) >> (INDEX*8))
Bilal Qamar 12:a04f7eeece23 16
Bilal Qamar 12:a04f7eeece23 17 /**
Bilal Qamar 12:a04f7eeece23 18 *
Bilal Qamar 12:a04f7eeece23 19 * Enable UBX-NAV-PVT using UBX-CFG-MSG
Bilal Qamar 12:a04f7eeece23 20 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 21 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 22 */
Bilal Qamar 12:a04f7eeece23 23 int GnssOperations::enable_ubx_nav_pvt()
Bilal Qamar 12:a04f7eeece23 24 {
Bilal Qamar 12:a04f7eeece23 25 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 26 unsigned char enable_ubx_nav_pvt[]={0x01, 0x07, 0x01};
Bilal Qamar 12:a04f7eeece23 27 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 28 int length =0;
Bilal Qamar 12:a04f7eeece23 29
Bilal Qamar 12:a04f7eeece23 30 while(conf)
Bilal Qamar 12:a04f7eeece23 31 {
Bilal Qamar 12:a04f7eeece23 32
Bilal Qamar 12:a04f7eeece23 33 length = GnssSerial::sendUbx(0x06, 0x01, enable_ubx_nav_pvt, sizeof(enable_ubx_nav_pvt));
Bilal Qamar 12:a04f7eeece23 34 if(length >= (int)(sizeof(enable_ubx_nav_pvt) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 35 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 36 SEND_LOGGING_MESSAGE("UBX-NAV-PVT was enabled\r\n");
wajahat.abbas@u-blox.com 19:119e7c15ff97 37 wait(1);
Bilal Qamar 12:a04f7eeece23 38 break;
Bilal Qamar 12:a04f7eeece23 39 }
Bilal Qamar 12:a04f7eeece23 40 else
Bilal Qamar 12:a04f7eeece23 41 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 42 SEND_LOGGING_MESSAGE("enabling UBX-NAV-PVT...\r\n");
Bilal Qamar 12:a04f7eeece23 43 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 44 }
Bilal Qamar 12:a04f7eeece23 45 }
Bilal Qamar 12:a04f7eeece23 46
Bilal Qamar 12:a04f7eeece23 47 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 48 }
Bilal Qamar 12:a04f7eeece23 49
fahim.alavi@u-blox.com 21:f91c0334d017 50 int GnssOperations::enable_ubx_nav_status() {
fahim.alavi@u-blox.com 21:f91c0334d017 51 int conf = RETRY;
fahim.alavi@u-blox.com 21:f91c0334d017 52 unsigned char enable_ubx_nav_status[]={0x01, 0x03, 0x01};
fahim.alavi@u-blox.com 21:f91c0334d017 53 conf = RETRY;
fahim.alavi@u-blox.com 21:f91c0334d017 54 int length =0;
fahim.alavi@u-blox.com 21:f91c0334d017 55
fahim.alavi@u-blox.com 21:f91c0334d017 56 while(conf)
fahim.alavi@u-blox.com 21:f91c0334d017 57 {
fahim.alavi@u-blox.com 21:f91c0334d017 58
fahim.alavi@u-blox.com 21:f91c0334d017 59 length = GnssSerial::sendUbx(0x06, 0x01, enable_ubx_nav_status, sizeof(enable_ubx_nav_status));
fahim.alavi@u-blox.com 21:f91c0334d017 60 if(length >= (int)(sizeof(enable_ubx_nav_status) + UBX_FRAME_SIZE))
fahim.alavi@u-blox.com 21:f91c0334d017 61 {
fahim.alavi@u-blox.com 21:f91c0334d017 62 SEND_LOGGING_MESSAGE("UBX-NAV-STATUS was enabled\r\n");
fahim.alavi@u-blox.com 21:f91c0334d017 63 wait(1);
fahim.alavi@u-blox.com 21:f91c0334d017 64 break;
fahim.alavi@u-blox.com 21:f91c0334d017 65 }
fahim.alavi@u-blox.com 21:f91c0334d017 66 else
fahim.alavi@u-blox.com 21:f91c0334d017 67 {
fahim.alavi@u-blox.com 21:f91c0334d017 68 SEND_LOGGING_MESSAGE("enabling UBX-NAV-STATUS...\r\n");
fahim.alavi@u-blox.com 21:f91c0334d017 69 conf = conf - 1;
fahim.alavi@u-blox.com 21:f91c0334d017 70 }
fahim.alavi@u-blox.com 21:f91c0334d017 71 }
fahim.alavi@u-blox.com 21:f91c0334d017 72
fahim.alavi@u-blox.com 21:f91c0334d017 73 return (conf == 0) ? 0 : 1;
fahim.alavi@u-blox.com 21:f91c0334d017 74
fahim.alavi@u-blox.com 21:f91c0334d017 75 }
fahim.alavi@u-blox.com 21:f91c0334d017 76
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 77 int GnssOperations::enable_ubx_nav_sat() {
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 78 int conf = RETRY;
fahim.alavi@u-blox.com 25:f538f1dc4121 79 unsigned char enable_ubx_nav_sat[]={0x01, 0x35, 0x01};
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 80 conf = RETRY;
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 81 int length =0;
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 82
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 83 while(conf)
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 84 {
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 85
fahim.alavi@u-blox.com 25:f538f1dc4121 86 length = GnssSerial::sendUbx(0x06, 0x01, enable_ubx_nav_sat, sizeof(enable_ubx_nav_sat));
fahim.alavi@u-blox.com 25:f538f1dc4121 87 if(length >= (int)(sizeof(enable_ubx_nav_sat) + UBX_FRAME_SIZE))
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 88 {
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 89 SEND_LOGGING_MESSAGE("UBX-NAV-STATUS was enabled\r\n");
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 90 wait(1);
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 91 break;
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 92 }
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 93 else
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 94 {
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 95 SEND_LOGGING_MESSAGE("enabling UBX-NAV-STATUS...\r\n");
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 96 conf = conf - 1;
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 97 }
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 98 }
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 99
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 100 return (conf == 0) ? 0 : 1;
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 101
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 102 }
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 103
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 104 int GnssOperations::enable_ubx_nav_sol() {
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 105 int conf = RETRY;
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 106 unsigned char enable_ubx_nav_status[]={0x01, 0x06, 0x0A};
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 107 conf = RETRY;
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 108 int length =0;
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 109
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 110 while(conf)
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 111 {
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 112
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 113 length = GnssSerial::sendUbx(0x06, 0x01, enable_ubx_nav_status, sizeof(enable_ubx_nav_status));
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 114 if(length >= (int)(sizeof(enable_ubx_nav_status) + UBX_FRAME_SIZE))
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 115 {
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 116 SEND_LOGGING_MESSAGE("UBX-NAV-STATUS was enabled\r\n");
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 117 wait(1);
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 118 break;
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 119 }
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 120 else
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 121 {
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 122 SEND_LOGGING_MESSAGE("enabling UBX-NAV-STATUS...\r\n");
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 123 conf = conf - 1;
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 124 }
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 125 }
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 126
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 127 return (conf == 0) ? 0 : 1;
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 128
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 129 }
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 130
fahim.alavi@u-blox.com 22:d8cd4cf0fcc0 131
Bilal Qamar 12:a04f7eeece23 132 /**
Bilal Qamar 12:a04f7eeece23 133 *
Bilal Qamar 12:a04f7eeece23 134 * Disable UBX-NAV-PVT
Bilal Qamar 12:a04f7eeece23 135 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 136 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 137 */
Bilal Qamar 12:a04f7eeece23 138 int GnssOperations::disable_ubx_nav_pvt()
Bilal Qamar 12:a04f7eeece23 139 {
Bilal Qamar 12:a04f7eeece23 140 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 141 unsigned char enable_ubx_nav_pvt[]={0x01, 0x07, 0x00};
Bilal Qamar 12:a04f7eeece23 142 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 143 int length =0;
Bilal Qamar 12:a04f7eeece23 144
Bilal Qamar 12:a04f7eeece23 145 while(conf)
Bilal Qamar 12:a04f7eeece23 146 {
Bilal Qamar 12:a04f7eeece23 147
Bilal Qamar 12:a04f7eeece23 148 length = GnssSerial::sendUbx(0x06, 0x01, enable_ubx_nav_pvt, sizeof(enable_ubx_nav_pvt));
Bilal Qamar 12:a04f7eeece23 149 if(length >= (int)(sizeof(enable_ubx_nav_pvt) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 150 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 151 SEND_LOGGING_MESSAGE("UBX-NAV-PVT was disabled\r\n");
Bilal Qamar 12:a04f7eeece23 152 wait(5);
Bilal Qamar 12:a04f7eeece23 153 break;
Bilal Qamar 12:a04f7eeece23 154 }
Bilal Qamar 12:a04f7eeece23 155 else
Bilal Qamar 12:a04f7eeece23 156 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 157 SEND_LOGGING_MESSAGE("disabling UBX-NAV-PVT...\r\n");
Bilal Qamar 12:a04f7eeece23 158 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 159 }
Bilal Qamar 12:a04f7eeece23 160 }
Bilal Qamar 12:a04f7eeece23 161
Bilal Qamar 12:a04f7eeece23 162 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 163 }
Bilal Qamar 12:a04f7eeece23 164
Bilal Qamar 12:a04f7eeece23 165 int GnssOperations::enable_ubx_nav5(unsigned int acc)
Bilal Qamar 12:a04f7eeece23 166 {
Bilal Qamar 12:a04f7eeece23 167 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 168 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 169 int length =0;
Bilal Qamar 12:a04f7eeece23 170 //convert unsigned int acc to hex
Bilal Qamar 12:a04f7eeece23 171 //ask if positioning mask or time accuracy mask
bqam 18:7adca4350499 172 unsigned char ubx_cfg_nav5[]={0xFF, 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00,
bqam 18:7adca4350499 173 0x0A, 0x00, 0xFA, 0x00,0xFA, 0x00, EXTRACT_BYTE(0, FIRST_BYTE, acc), EXTRACT_BYTE(1, SECOND_BYTE, acc),
bqam 18:7adca4350499 174 0x5E, 0x01, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 175
Bilal Qamar 12:a04f7eeece23 176 while(conf)
Bilal Qamar 12:a04f7eeece23 177 {
Bilal Qamar 12:a04f7eeece23 178 length = GnssSerial::sendUbx(0x06, 0x24, ubx_cfg_nav5, sizeof(ubx_cfg_nav5));
Bilal Qamar 12:a04f7eeece23 179 if(length >= (int)(sizeof(ubx_cfg_nav5) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 180 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 181 SEND_LOGGING_MESSAGE("ubx_cfg_nav5 was enabled\r\n");
wajahat.abbas@u-blox.com 19:119e7c15ff97 182 wait(1);
Bilal Qamar 12:a04f7eeece23 183 break;
Bilal Qamar 12:a04f7eeece23 184 }
Bilal Qamar 12:a04f7eeece23 185 else
Bilal Qamar 12:a04f7eeece23 186 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 187 SEND_LOGGING_MESSAGE("enabling ubx_cfg_nav5...\r\n");
Bilal Qamar 12:a04f7eeece23 188 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 189 }
Bilal Qamar 12:a04f7eeece23 190 }
Bilal Qamar 12:a04f7eeece23 191
Bilal Qamar 12:a04f7eeece23 192 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 193 }
Bilal Qamar 12:a04f7eeece23 194
fahim.alavi@u-blox.com 31:9a1ce433f062 195 int GnssOperations::enable_ubx_navx5()
fahim.alavi@u-blox.com 31:9a1ce433f062 196 {
fahim.alavi@u-blox.com 31:9a1ce433f062 197 int conf = RETRY;
fahim.alavi@u-blox.com 31:9a1ce433f062 198 conf = RETRY;
fahim.alavi@u-blox.com 31:9a1ce433f062 199 int length =0;
fahim.alavi@u-blox.com 31:9a1ce433f062 200 //convert unsigned int acc to hex
fahim.alavi@u-blox.com 31:9a1ce433f062 201 //ask if positioning mask or time accuracy mask
fahim.alavi@u-blox.com 31:9a1ce433f062 202 unsigned char ubx_cfg_navx5[]={0x28, 0x00, 0x02, 0x00, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x03, 0x02, 0x03, 0x20, 0x06, 0x00, 0x01, 0x01, 0x00, 0x00, 0x90,
fahim.alavi@u-blox.com 31:9a1ce433f062 203 0x07, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x02, 0x64, 0x64, 0x00, 0x00, 0x01, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xF7};
fahim.alavi@u-blox.com 31:9a1ce433f062 204
fahim.alavi@u-blox.com 31:9a1ce433f062 205 while(conf)
fahim.alavi@u-blox.com 31:9a1ce433f062 206 {
fahim.alavi@u-blox.com 31:9a1ce433f062 207 length = GnssSerial::sendUbx(0x06, 0x23, ubx_cfg_navx5, sizeof(ubx_cfg_navx5));
fahim.alavi@u-blox.com 31:9a1ce433f062 208 if(length >= (int)(sizeof(ubx_cfg_navx5) + UBX_FRAME_SIZE))
fahim.alavi@u-blox.com 31:9a1ce433f062 209 {
fahim.alavi@u-blox.com 31:9a1ce433f062 210 SEND_LOGGING_MESSAGE("ubx_cfg_navx5 was enabled\r\n");
fahim.alavi@u-blox.com 31:9a1ce433f062 211 wait(1);
fahim.alavi@u-blox.com 31:9a1ce433f062 212 break;
fahim.alavi@u-blox.com 31:9a1ce433f062 213 }
fahim.alavi@u-blox.com 31:9a1ce433f062 214 else
fahim.alavi@u-blox.com 31:9a1ce433f062 215 {
fahim.alavi@u-blox.com 31:9a1ce433f062 216 SEND_LOGGING_MESSAGE("enabling ubx_cfg_navx5...\r\n");
fahim.alavi@u-blox.com 31:9a1ce433f062 217 conf = conf - 1;
fahim.alavi@u-blox.com 31:9a1ce433f062 218 }
fahim.alavi@u-blox.com 31:9a1ce433f062 219 }
fahim.alavi@u-blox.com 31:9a1ce433f062 220
fahim.alavi@u-blox.com 31:9a1ce433f062 221 return (conf == 0) ? 0 : 1;
fahim.alavi@u-blox.com 31:9a1ce433f062 222 }
fahim.alavi@u-blox.com 31:9a1ce433f062 223
Bilal Qamar 12:a04f7eeece23 224 /**
Bilal Qamar 12:a04f7eeece23 225 * Enabling UBX-ODOMETER using UBX-CFG-ODO
Bilal Qamar 12:a04f7eeece23 226 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 227 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 228 *
Bilal Qamar 12:a04f7eeece23 229 */
Bilal Qamar 12:a04f7eeece23 230 int GnssOperations::enable_ubx_odo()
Bilal Qamar 12:a04f7eeece23 231 {
Bilal Qamar 12:a04f7eeece23 232 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 233 unsigned char ubx_cfg_odo[]={0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x19, 0x46, 0x19, 0x66, 0x0A, 0x32, 0x00,
Bilal Qamar 12:a04f7eeece23 234 0x00, 0x99, 0x4C, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 235 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 236 int length =0;
Bilal Qamar 12:a04f7eeece23 237
Bilal Qamar 12:a04f7eeece23 238 while(conf)
Bilal Qamar 12:a04f7eeece23 239 {
Bilal Qamar 12:a04f7eeece23 240 length = GnssSerial::sendUbx(0x06, 0x1E, ubx_cfg_odo, sizeof(ubx_cfg_odo));
Bilal Qamar 12:a04f7eeece23 241 if(length >= (int)(sizeof(ubx_cfg_odo) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 242 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 243 SEND_LOGGING_MESSAGE("UBX-ODO was enabled\r\n");
wajahat.abbas@u-blox.com 19:119e7c15ff97 244 wait(1);
Bilal Qamar 12:a04f7eeece23 245 break;
Bilal Qamar 12:a04f7eeece23 246 }
Bilal Qamar 12:a04f7eeece23 247 else
Bilal Qamar 12:a04f7eeece23 248 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 249 SEND_LOGGING_MESSAGE("enabling UBX-ODO...\r\n");
Bilal Qamar 12:a04f7eeece23 250 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 251 }
Bilal Qamar 12:a04f7eeece23 252 }
Bilal Qamar 12:a04f7eeece23 253
Bilal Qamar 12:a04f7eeece23 254 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 255 }
Bilal Qamar 12:a04f7eeece23 256
Bilal Qamar 12:a04f7eeece23 257 int GnssOperations::disable_ubx_odo()
Bilal Qamar 12:a04f7eeece23 258 {
Bilal Qamar 12:a04f7eeece23 259 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 260 unsigned char ubx_cfg_odo[]={0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x19, 0x46, 0x19, 0x66, 0x0A, 0x32, 0x00,
Bilal Qamar 12:a04f7eeece23 261 0x00, 0x99, 0x4C, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 262 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 263 int length =0;
Bilal Qamar 12:a04f7eeece23 264
Bilal Qamar 12:a04f7eeece23 265 while(conf)
Bilal Qamar 12:a04f7eeece23 266 {
Bilal Qamar 12:a04f7eeece23 267 length = GnssSerial::sendUbx(0x06, 0x1E, ubx_cfg_odo, sizeof(ubx_cfg_odo));
Bilal Qamar 12:a04f7eeece23 268 if(length >= (int)(sizeof(ubx_cfg_odo) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 269 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 270 SEND_LOGGING_MESSAGE("UBX-ODO was disabled\r\n");
Bilal Qamar 12:a04f7eeece23 271 wait(5);
Bilal Qamar 12:a04f7eeece23 272 break;
Bilal Qamar 12:a04f7eeece23 273 }
Bilal Qamar 12:a04f7eeece23 274 else
Bilal Qamar 12:a04f7eeece23 275 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 276 SEND_LOGGING_MESSAGE("disabling UBX-ODO...\r\n");
Bilal Qamar 12:a04f7eeece23 277 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 278 }
Bilal Qamar 12:a04f7eeece23 279 }
Bilal Qamar 12:a04f7eeece23 280
Bilal Qamar 12:a04f7eeece23 281 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 282 }
Bilal Qamar 12:a04f7eeece23 283 /**
Bilal Qamar 12:a04f7eeece23 284 * Enabling UBX-NAV-ODO messages using UBX-CFG-MSG
Bilal Qamar 12:a04f7eeece23 285 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 286 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 287 *
Bilal Qamar 12:a04f7eeece23 288 */
Bilal Qamar 12:a04f7eeece23 289 int GnssOperations::enable_ubx_nav_odo()
Bilal Qamar 12:a04f7eeece23 290 {
Bilal Qamar 12:a04f7eeece23 291 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 292 unsigned char ubx_nav_odo[]={0x01, 0x09, 0x01};
Bilal Qamar 12:a04f7eeece23 293 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 294 int length =0;
Bilal Qamar 12:a04f7eeece23 295
Bilal Qamar 12:a04f7eeece23 296 while(conf)
Bilal Qamar 12:a04f7eeece23 297 {
Bilal Qamar 12:a04f7eeece23 298 length = GnssSerial::sendUbx(0x06, 0x01, ubx_nav_odo, sizeof(ubx_nav_odo));
Bilal Qamar 12:a04f7eeece23 299 if(length >= (int)(sizeof(ubx_nav_odo) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 300 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 301 SEND_LOGGING_MESSAGE("UBX-NAV-ODO was enabled\r\n");
wajahat.abbas@u-blox.com 19:119e7c15ff97 302 wait(1);
Bilal Qamar 12:a04f7eeece23 303 break;
Bilal Qamar 12:a04f7eeece23 304 }
Bilal Qamar 12:a04f7eeece23 305 else
Bilal Qamar 12:a04f7eeece23 306 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 307 SEND_LOGGING_MESSAGE("enabling UBX-NAV-ODO...\r\n");
Bilal Qamar 12:a04f7eeece23 308 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 309 }
Bilal Qamar 12:a04f7eeece23 310 }
Bilal Qamar 12:a04f7eeece23 311
Bilal Qamar 12:a04f7eeece23 312 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 313 }
Bilal Qamar 12:a04f7eeece23 314
Bilal Qamar 12:a04f7eeece23 315 /**
Bilal Qamar 12:a04f7eeece23 316 * Disabling UBX-NAV-ODO messages using UBX-CFG-MSG
Bilal Qamar 12:a04f7eeece23 317 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 318 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 319 *
Bilal Qamar 12:a04f7eeece23 320 */
Bilal Qamar 12:a04f7eeece23 321 int GnssOperations::disable_ubx_nav_odo()
Bilal Qamar 12:a04f7eeece23 322 {
Bilal Qamar 12:a04f7eeece23 323 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 324 unsigned char ubx_nav_odo[]={0x01, 0x09, 0x00};
Bilal Qamar 12:a04f7eeece23 325 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 326 int length =0;
Bilal Qamar 12:a04f7eeece23 327
Bilal Qamar 12:a04f7eeece23 328 while(conf)
Bilal Qamar 12:a04f7eeece23 329 {
Bilal Qamar 12:a04f7eeece23 330 length = GnssSerial::sendUbx(0x06, 0x01, ubx_nav_odo, sizeof(ubx_nav_odo));
Bilal Qamar 12:a04f7eeece23 331 if(length >= (int)(sizeof(ubx_nav_odo) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 332 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 333 SEND_LOGGING_MESSAGE("UBX-NAV-ODO was disabled\r\n");
Bilal Qamar 12:a04f7eeece23 334 wait(5);
Bilal Qamar 12:a04f7eeece23 335 break;
Bilal Qamar 12:a04f7eeece23 336 }
Bilal Qamar 12:a04f7eeece23 337 else
Bilal Qamar 12:a04f7eeece23 338 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 339 SEND_LOGGING_MESSAGE("disabling UBX-NAV-ODO...\r\n");
Bilal Qamar 12:a04f7eeece23 340 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 341 }
Bilal Qamar 12:a04f7eeece23 342 }
Bilal Qamar 12:a04f7eeece23 343
Bilal Qamar 12:a04f7eeece23 344 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 345 }
Bilal Qamar 12:a04f7eeece23 346
Bilal Qamar 12:a04f7eeece23 347 int GnssOperations::enable_ubx_batch_feature()
Bilal Qamar 12:a04f7eeece23 348 {
Bilal Qamar 12:a04f7eeece23 349 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 350 unsigned char enable_ubx_log_batch[]={0x00, 0x0D, 0x0A, 0x00, 0x07, 0x00, 0x00, 0x01};
Bilal Qamar 12:a04f7eeece23 351 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 352 int length =0;
Bilal Qamar 12:a04f7eeece23 353
Bilal Qamar 12:a04f7eeece23 354 //Disable NAV-ODO and NAV-PVT
Bilal Qamar 12:a04f7eeece23 355 disable_ubx_nav_odo();
Bilal Qamar 12:a04f7eeece23 356 disable_ubx_nav_pvt();
Bilal Qamar 12:a04f7eeece23 357
Bilal Qamar 12:a04f7eeece23 358 while(conf)
Bilal Qamar 12:a04f7eeece23 359 {
Bilal Qamar 12:a04f7eeece23 360 length = GnssSerial::sendUbx(0x06, 0x93, enable_ubx_log_batch, sizeof(enable_ubx_log_batch));
Bilal Qamar 12:a04f7eeece23 361 if(length >= (int)(sizeof(enable_ubx_log_batch) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 362 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 363 SEND_LOGGING_MESSAGE("UBX_LOG_BATCH was enabled\r\n");
wajahat.abbas@u-blox.com 19:119e7c15ff97 364 wait(1);
Bilal Qamar 12:a04f7eeece23 365 break;
Bilal Qamar 12:a04f7eeece23 366 }
Bilal Qamar 12:a04f7eeece23 367 else
Bilal Qamar 12:a04f7eeece23 368 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 369 SEND_LOGGING_MESSAGE("enable ubx_batch_log...\r\n");
Bilal Qamar 12:a04f7eeece23 370 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 371 }
Bilal Qamar 12:a04f7eeece23 372 }
Bilal Qamar 12:a04f7eeece23 373 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 374 }
Bilal Qamar 12:a04f7eeece23 375
Bilal Qamar 12:a04f7eeece23 376 int GnssOperations::disable_ubx_batch_feature()
Bilal Qamar 12:a04f7eeece23 377 {
Bilal Qamar 12:a04f7eeece23 378 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 379 unsigned char enable_ubx_log_batch[]={0x00, 0x0C, 0x0A, 0x00, 0x07, 0x00, 0x00, 0x01};
Bilal Qamar 12:a04f7eeece23 380 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 381 int length =0;
Bilal Qamar 12:a04f7eeece23 382
Bilal Qamar 12:a04f7eeece23 383 //Enable NAV-ODO and NAV-PVT
Bilal Qamar 12:a04f7eeece23 384 enable_ubx_nav_odo();
Bilal Qamar 12:a04f7eeece23 385 enable_ubx_nav_pvt();
Bilal Qamar 12:a04f7eeece23 386
Bilal Qamar 12:a04f7eeece23 387 while(conf)
Bilal Qamar 12:a04f7eeece23 388 {
Bilal Qamar 12:a04f7eeece23 389 length = GnssSerial::sendUbx(0x06, 0x93, enable_ubx_log_batch, sizeof(enable_ubx_log_batch));
Bilal Qamar 12:a04f7eeece23 390 if(length >= (int)(sizeof(enable_ubx_log_batch) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 391 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 392 SEND_LOGGING_MESSAGE("UBX_LOG_BATCH was enabled\r\n");
Bilal Qamar 12:a04f7eeece23 393 wait(5);
Bilal Qamar 12:a04f7eeece23 394 break;
Bilal Qamar 12:a04f7eeece23 395 }
Bilal Qamar 12:a04f7eeece23 396 else
Bilal Qamar 12:a04f7eeece23 397 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 398 SEND_LOGGING_MESSAGE("enable ubx_batch_log...\r\n");
Bilal Qamar 12:a04f7eeece23 399 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 400 }
Bilal Qamar 12:a04f7eeece23 401 }
Bilal Qamar 12:a04f7eeece23 402 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 403 }
Bilal Qamar 12:a04f7eeece23 404
Bilal Qamar 12:a04f7eeece23 405 /**
Bilal Qamar 12:a04f7eeece23 406 *
Bilal Qamar 12:a04f7eeece23 407 * Configuring UBX-LOG-BATCH with UBX-CFG-BATCH
Bilal Qamar 12:a04f7eeece23 408 *
Bilal Qamar 12:a04f7eeece23 409 * @param obj struct containing the data to be send in payload
Bilal Qamar 12:a04f7eeece23 410 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 411 * FAIL: 0
Bilal Qamar 12:a04f7eeece23 412 *
Bilal Qamar 12:a04f7eeece23 413 */
Bilal Qamar 12:a04f7eeece23 414 int GnssOperations::cfg_batch_feature(tUBX_CFG_BATCH *obj)
Bilal Qamar 12:a04f7eeece23 415 {
Bilal Qamar 12:a04f7eeece23 416 int length =0;
Bilal Qamar 12:a04f7eeece23 417 const unsigned char cfg_batch_feature[] = {0x00, 0x01, EXTRACT_BYTE(0, FIRST_BYTE, obj->bufSize),
Bilal Qamar 12:a04f7eeece23 418 EXTRACT_BYTE(1, SECOND_BYTE, obj->bufSize), EXTRACT_BYTE(0, FIRST_BYTE, obj->notifThrs),
Bilal Qamar 12:a04f7eeece23 419 EXTRACT_BYTE(1, SECOND_BYTE, obj->notifThrs), obj->pioId, 0x00};
Bilal Qamar 12:a04f7eeece23 420
Bilal Qamar 12:a04f7eeece23 421 length = GnssSerial::sendUbx(0x06, 0x93, cfg_batch_feature, sizeof(cfg_batch_feature));
Bilal Qamar 12:a04f7eeece23 422
Bilal Qamar 12:a04f7eeece23 423 return (length >= (int)(sizeof(cfg_batch_feature) + UBX_FRAME_SIZE)) ? 1 : 0;
Bilal Qamar 12:a04f7eeece23 424 }
Bilal Qamar 12:a04f7eeece23 425
Bilal Qamar 12:a04f7eeece23 426 /*
Bilal Qamar 12:a04f7eeece23 427 * Power mode configuration for GNSS receiver
Bilal Qamar 12:a04f7eeece23 428 *
Bilal Qamar 12:a04f7eeece23 429 * Pending: Need to send extended power management configuration messages (UBX-CFG-PM2)
Bilal Qamar 12:a04f7eeece23 430 *
Bilal Qamar 12:a04f7eeece23 431 *
Bilal Qamar 12:a04f7eeece23 432 */
fahim.alavi@u-blox.com 27:405a5e611635 433 int GnssOperations::cfg_power_mode(Powermodes power_mode, bool minimumAcqTimeZero)
Bilal Qamar 12:a04f7eeece23 434 {
Bilal Qamar 12:a04f7eeece23 435 int length = 0;
fahim.alavi@u-blox.com 27:405a5e611635 436 const int minimumAcqTime_index = 22;
Bilal Qamar 12:a04f7eeece23 437 unsigned char semi_continuous_pms[] = {0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 438 unsigned char semi_continuous_pm2[] = {0x02, 0x06, 0x00, 0x00, 0x02, 0x00, 0x43, 0x01, 0x10, 0x27, 0x00, 0x00, 0x10,
Bilal Qamar 12:a04f7eeece23 439 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x01, 0x2C, 0x01, 0x00, 0x00, 0xCF, 0x40, 0x00,
Bilal Qamar 12:a04f7eeece23 440 0x00, 0x87, 0x5A, 0xA4, 0x46, 0xFE, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 441 unsigned char semi_continuous_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
Bilal Qamar 12:a04f7eeece23 442
Bilal Qamar 12:a04f7eeece23 443 unsigned char aggresive_continuous_pms[] = {0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 444 unsigned char aggresive_continuous_pm2[] = {0x02, 0x06, 0x00, 0x00, 0x02, 0x00, 0x43, 0x01, 0xE8, 0x03, 0x00, 0x00,
Bilal Qamar 12:a04f7eeece23 445 0x10, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x01, 0x2C, 0x01, 0x00, 0x00, 0xCF, 0x40,
Bilal Qamar 12:a04f7eeece23 446 0x00, 0x00, 0x87, 0x5A, 0xA4, 0x46, 0xFE, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 447 unsigned char aggressive_continuous_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
Bilal Qamar 12:a04f7eeece23 448
Bilal Qamar 12:a04f7eeece23 449 unsigned char conservative_continuous_pms[] = {0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 450 unsigned char conservative_continuous_pm2[] = {0x02, 0x06, 0x00, 0x00, 0x00, 0x00, 0x43, 0x01, 0xE8, 0x03, 0x00, 0x00,
Bilal Qamar 12:a04f7eeece23 451 0x10, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x01, 0x2C, 0x01, 0x00, 0x00, 0xCF, 0x41,
Bilal Qamar 12:a04f7eeece23 452 0x00, 0x00, 0x88, 0x6A, 0xA4, 0x46, 0xFE, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 453 unsigned char conservative_continuous_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
Bilal Qamar 12:a04f7eeece23 454
Bilal Qamar 12:a04f7eeece23 455 unsigned char full_power_pms[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
bqam 18:7adca4350499 456 unsigned char full_power_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
bqam 18:7adca4350499 457
bqam 18:7adca4350499 458 unsigned char full_power_block_level_pms[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
bqam 18:7adca4350499 459 unsigned char full_power_block_level_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
bqam 18:7adca4350499 460
bqam 18:7adca4350499 461 unsigned char full_power_building_level_pms[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
bqam 18:7adca4350499 462 unsigned char full_power_building_level_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
Bilal Qamar 12:a04f7eeece23 463
Bilal Qamar 12:a04f7eeece23 464 switch (power_mode)
Bilal Qamar 12:a04f7eeece23 465 {
Bilal Qamar 12:a04f7eeece23 466 case SEMI_CONTINOUS:
fahim.alavi@u-blox.com 16:cb9861f0f4d8 467 SEND_LOGGING_MESSAGE("Configuring SEMI_CONTINOUS");
Bilal Qamar 12:a04f7eeece23 468 length = GnssSerial::sendUbx(0x06, 0x86, semi_continuous_pms, sizeof(semi_continuous_pms));
wajahat.abbas@u-blox.com 19:119e7c15ff97 469 wait(1);
fahim.alavi@u-blox.com 27:405a5e611635 470
fahim.alavi@u-blox.com 27:405a5e611635 471 if(minimumAcqTimeZero) {
fahim.alavi@u-blox.com 27:405a5e611635 472 semi_continuous_pm2[minimumAcqTime_index] = 0x00;
fahim.alavi@u-blox.com 27:405a5e611635 473 semi_continuous_pm2[minimumAcqTime_index + 1] = 0x00;
fahim.alavi@u-blox.com 27:405a5e611635 474 }
fahim.alavi@u-blox.com 27:405a5e611635 475
Bilal Qamar 12:a04f7eeece23 476 length = GnssSerial::sendUbx(0x06, 0x3B, semi_continuous_pm2, sizeof(semi_continuous_pm2));
wajahat.abbas@u-blox.com 19:119e7c15ff97 477 wait(1);
Bilal Qamar 12:a04f7eeece23 478 length = GnssSerial::sendUbx(0x06, 0x08, semi_continuous_rate, sizeof(semi_continuous_rate));
fahim.alavi@u-blox.com 20:bc678f383db1 479 wait(1);
Bilal Qamar 12:a04f7eeece23 480 break;
Bilal Qamar 12:a04f7eeece23 481
Bilal Qamar 12:a04f7eeece23 482 case AGGRESSIVE_CONTINUOS:
fahim.alavi@u-blox.com 16:cb9861f0f4d8 483 SEND_LOGGING_MESSAGE("Configuring AGGRESSIVE_CONTINUOS");
Bilal Qamar 12:a04f7eeece23 484 length = GnssSerial::sendUbx(0x06, 0x86, aggresive_continuous_pms, sizeof(aggresive_continuous_pms));
wajahat.abbas@u-blox.com 19:119e7c15ff97 485 wait(1);
fahim.alavi@u-blox.com 27:405a5e611635 486
fahim.alavi@u-blox.com 27:405a5e611635 487 if(minimumAcqTimeZero) {
fahim.alavi@u-blox.com 27:405a5e611635 488 semi_continuous_pm2[minimumAcqTime_index] = 0x00;
fahim.alavi@u-blox.com 27:405a5e611635 489 semi_continuous_pm2[minimumAcqTime_index + 1] = 0x00;
fahim.alavi@u-blox.com 27:405a5e611635 490 }
fahim.alavi@u-blox.com 27:405a5e611635 491
Bilal Qamar 12:a04f7eeece23 492 length = GnssSerial::sendUbx(0x06, 0x3B, aggresive_continuous_pm2, sizeof(aggresive_continuous_pm2));
wajahat.abbas@u-blox.com 19:119e7c15ff97 493 wait(1);
Bilal Qamar 12:a04f7eeece23 494 length = GnssSerial::sendUbx(0x06, 0x08, aggressive_continuous_rate, sizeof(aggressive_continuous_rate));
fahim.alavi@u-blox.com 20:bc678f383db1 495 wait(1);
Bilal Qamar 12:a04f7eeece23 496 break;
Bilal Qamar 12:a04f7eeece23 497
Bilal Qamar 12:a04f7eeece23 498 case CONSERVATIVE_CONTINOUS:
fahim.alavi@u-blox.com 16:cb9861f0f4d8 499 SEND_LOGGING_MESSAGE("Configuring CONSERVATIVE_CONTINOUS");
Bilal Qamar 12:a04f7eeece23 500 length = GnssSerial::sendUbx(0x06, 0x86, conservative_continuous_pms, sizeof(conservative_continuous_pms));
wajahat.abbas@u-blox.com 19:119e7c15ff97 501 wait(1);
fahim.alavi@u-blox.com 27:405a5e611635 502
fahim.alavi@u-blox.com 27:405a5e611635 503 if(minimumAcqTimeZero) {
fahim.alavi@u-blox.com 27:405a5e611635 504 semi_continuous_pm2[minimumAcqTime_index] = 0x00;
fahim.alavi@u-blox.com 27:405a5e611635 505 semi_continuous_pm2[minimumAcqTime_index + 1] = 0x00;
fahim.alavi@u-blox.com 27:405a5e611635 506 }
fahim.alavi@u-blox.com 27:405a5e611635 507
Bilal Qamar 12:a04f7eeece23 508 length = GnssSerial::sendUbx(0x06, 0x3B, conservative_continuous_pm2, sizeof(conservative_continuous_pm2));
wajahat.abbas@u-blox.com 19:119e7c15ff97 509 wait(1);
Bilal Qamar 12:a04f7eeece23 510 length = GnssSerial::sendUbx(0x06, 0x08, conservative_continuous_rate, sizeof(conservative_continuous_rate));
fahim.alavi@u-blox.com 20:bc678f383db1 511 wait(1);
Bilal Qamar 12:a04f7eeece23 512 break;
Bilal Qamar 12:a04f7eeece23 513
Bilal Qamar 12:a04f7eeece23 514 case FULL_POWER:
fahim.alavi@u-blox.com 16:cb9861f0f4d8 515 SEND_LOGGING_MESSAGE("Configuring FULL_POWER");
Bilal Qamar 12:a04f7eeece23 516 length = GnssSerial::sendUbx(0x06, 0x86, full_power_pms, sizeof(full_power_pms));
wajahat.abbas@u-blox.com 19:119e7c15ff97 517 wait(1);
Bilal Qamar 12:a04f7eeece23 518 length = GnssSerial::sendUbx(0x06, 0x08, full_power_rate, sizeof(full_power_rate));
fahim.alavi@u-blox.com 20:bc678f383db1 519 wait(1);
Bilal Qamar 12:a04f7eeece23 520 break;
bqam 18:7adca4350499 521 case FULL_POWER_BLOCK_LEVEL:
bqam 18:7adca4350499 522 SEND_LOGGING_MESSAGE("Configuring FULL_POWER_BLOCK_LEVEL");
bqam 18:7adca4350499 523 length = GnssSerial::sendUbx(0x06, 0x86, full_power_block_level_pms, sizeof(full_power_block_level_pms));
wajahat.abbas@u-blox.com 19:119e7c15ff97 524 wait(1);
bqam 18:7adca4350499 525 length = GnssSerial::sendUbx(0x06, 0x08, full_power_block_level_rate, sizeof(full_power_block_level_rate));
fahim.alavi@u-blox.com 20:bc678f383db1 526 wait(1);
bqam 18:7adca4350499 527 break;
bqam 18:7adca4350499 528 case FULL_POWER_BUILDING_LEVEL:
bqam 18:7adca4350499 529 SEND_LOGGING_MESSAGE("Configuring FULL_POWER_BUILDING_LEVEL");
bqam 18:7adca4350499 530 length = GnssSerial::sendUbx(0x06, 0x86, full_power_building_level_pms, sizeof(full_power_building_level_pms));
wajahat.abbas@u-blox.com 19:119e7c15ff97 531 wait(1);
bqam 18:7adca4350499 532 length = GnssSerial::sendUbx(0x06, 0x08, full_power_building_level_rate, sizeof(full_power_building_level_rate));
fahim.alavi@u-blox.com 20:bc678f383db1 533 wait(1);
bqam 18:7adca4350499 534 break;
Bilal Qamar 12:a04f7eeece23 535 }
fahim.alavi@u-blox.com 20:bc678f383db1 536
Bilal Qamar 12:a04f7eeece23 537 return (length >= (int)(sizeof(semi_continuous_pms) + UBX_FRAME_SIZE)) ? 1 : 0;
Bilal Qamar 12:a04f7eeece23 538 }
Bilal Qamar 12:a04f7eeece23 539
fahim.alavi@u-blox.com 20:bc678f383db1 540 bool GnssOperations::verify_gnss_mode() {
fahim.alavi@u-blox.com 20:bc678f383db1 541
fahim.alavi@u-blox.com 20:bc678f383db1 542 unsigned char CFG_PMS[] = {0xB5, 0x62, 0x06, 0x86, 0x00, 0x00, 0x8c, 0xAA};
fahim.alavi@u-blox.com 20:bc678f383db1 543 unsigned char CFG_PM2[] = {0xB5, 0x62, 0x06, 0x3B, 0x00, 0x00, 0x41, 0xC9};
fahim.alavi@u-blox.com 20:bc678f383db1 544 unsigned char CFG_RATE[] = {0xB5, 0x62, 0x06, 0x08, 0x00, 0x00, 0x0E, 0x30};
fahim.alavi@u-blox.com 20:bc678f383db1 545 unsigned char CFG_NAV5[] = {0xB5, 0x62, 0x06, 0x24, 0x00, 0x00, 0x2A, 0x84};
fahim.alavi@u-blox.com 31:9a1ce433f062 546 unsigned char CFG_NAVX5[] = {0xB5, 0x62, 0x06, 0x24, 0x00, 0x00, 0x29, 0x81};
fahim.alavi@u-blox.com 20:bc678f383db1 547
fahim.alavi@u-blox.com 20:bc678f383db1 548 this->_send(CFG_PMS, sizeof(CFG_PMS));
fahim.alavi@u-blox.com 20:bc678f383db1 549 wait(1);
fahim.alavi@u-blox.com 20:bc678f383db1 550
fahim.alavi@u-blox.com 20:bc678f383db1 551 this->_send(CFG_PM2, sizeof(CFG_PM2));
fahim.alavi@u-blox.com 20:bc678f383db1 552 wait(1);
fahim.alavi@u-blox.com 20:bc678f383db1 553
fahim.alavi@u-blox.com 20:bc678f383db1 554 this->_send(CFG_RATE, sizeof(CFG_RATE));
fahim.alavi@u-blox.com 20:bc678f383db1 555 wait(1);
fahim.alavi@u-blox.com 20:bc678f383db1 556
fahim.alavi@u-blox.com 20:bc678f383db1 557 this->_send(CFG_NAV5, sizeof(CFG_NAV5));
fahim.alavi@u-blox.com 20:bc678f383db1 558 wait(1);
fahim.alavi@u-blox.com 20:bc678f383db1 559
fahim.alavi@u-blox.com 31:9a1ce433f062 560 this->_send(CFG_NAVX5, sizeof(CFG_NAVX5));
fahim.alavi@u-blox.com 31:9a1ce433f062 561 wait(1);
fahim.alavi@u-blox.com 31:9a1ce433f062 562
fahim.alavi@u-blox.com 20:bc678f383db1 563 return true;
fahim.alavi@u-blox.com 20:bc678f383db1 564 }
fahim.alavi@u-blox.com 20:bc678f383db1 565
Bilal Qamar 12:a04f7eeece23 566 /**
Bilal Qamar 12:a04f7eeece23 567 * GNSS start modes (Hot/Warm/Cold start)
Bilal Qamar 12:a04f7eeece23 568 *
Bilal Qamar 12:a04f7eeece23 569 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 570 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 571 *
Bilal Qamar 12:a04f7eeece23 572 */
Bilal Qamar 12:a04f7eeece23 573 int GnssOperations::start_mode(int start_mode)
Bilal Qamar 12:a04f7eeece23 574 {
Bilal Qamar 12:a04f7eeece23 575 int length = 0;
Bilal Qamar 12:a04f7eeece23 576 unsigned char hot_start[] = {0x00, 0x00, 0x02, 0x00};
Bilal Qamar 12:a04f7eeece23 577 unsigned char warm_start[] = {0x01, 0x00, 0x02, 0x00};
Bilal Qamar 12:a04f7eeece23 578 unsigned char cold_start[] = {0xFF, 0xFF, 0x02, 0x00};
Bilal Qamar 12:a04f7eeece23 579
Bilal Qamar 12:a04f7eeece23 580 switch (start_mode)
Bilal Qamar 12:a04f7eeece23 581 {
Bilal Qamar 12:a04f7eeece23 582 case HOT:
Bilal Qamar 12:a04f7eeece23 583 length = GnssSerial::sendUbx(0x06, 0x04, hot_start, sizeof(hot_start));
Bilal Qamar 12:a04f7eeece23 584 break;
Bilal Qamar 12:a04f7eeece23 585
Bilal Qamar 12:a04f7eeece23 586 case WARM:
Bilal Qamar 12:a04f7eeece23 587 length = GnssSerial::sendUbx(0x06, 0x04, warm_start, sizeof(warm_start));
Bilal Qamar 12:a04f7eeece23 588 break;
Bilal Qamar 12:a04f7eeece23 589
Bilal Qamar 12:a04f7eeece23 590 case COLD:
Bilal Qamar 12:a04f7eeece23 591 length = GnssSerial::sendUbx(0x06, 0x04, cold_start, sizeof(cold_start));
Bilal Qamar 12:a04f7eeece23 592 break;
Bilal Qamar 12:a04f7eeece23 593 }
Bilal Qamar 12:a04f7eeece23 594
Bilal Qamar 12:a04f7eeece23 595 return (length >= (int)(sizeof(hot_start) + UBX_FRAME_SIZE)) ? 1 : 0;
Bilal Qamar 12:a04f7eeece23 596 }
bqam 14:4b22bd505b93 597
bqam 14:4b22bd505b93 598 void GnssOperations::send_to_gnss(char rChar)
bqam 14:4b22bd505b93 599 {
bqam 14:4b22bd505b93 600 GnssSerial::putc(rChar);
bqam 14:4b22bd505b93 601 }
bqam 14:4b22bd505b93 602
bqam 14:4b22bd505b93 603 void GnssOperations::power_on_gnss()
bqam 14:4b22bd505b93 604 {
bqam 14:4b22bd505b93 605 GnssSerial::_powerOn();
bqam 14:4b22bd505b93 606 }