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:
wajahat.abbas@u-blox.com
Date:
Mon Jul 29 14:24:22 2019 +0500
Revision:
34:d6a65d4c902a
Parent:
33:75163fa7e453
Fixed build error on generic applications

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