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:
Fri Oct 05 18:46:48 2018 +0500
Revision:
20:bc678f383db1
Parent:
19:119e7c15ff97
Child:
21:f91c0334d017
Verify GNSS method 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
Bilal Qamar 12:a04f7eeece23 50 /**
Bilal Qamar 12:a04f7eeece23 51 *
Bilal Qamar 12:a04f7eeece23 52 * Disable UBX-NAV-PVT
Bilal Qamar 12:a04f7eeece23 53 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 54 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 55 */
Bilal Qamar 12:a04f7eeece23 56 int GnssOperations::disable_ubx_nav_pvt()
Bilal Qamar 12:a04f7eeece23 57 {
Bilal Qamar 12:a04f7eeece23 58 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 59 unsigned char enable_ubx_nav_pvt[]={0x01, 0x07, 0x00};
Bilal Qamar 12:a04f7eeece23 60 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 61 int length =0;
Bilal Qamar 12:a04f7eeece23 62
Bilal Qamar 12:a04f7eeece23 63 while(conf)
Bilal Qamar 12:a04f7eeece23 64 {
Bilal Qamar 12:a04f7eeece23 65
Bilal Qamar 12:a04f7eeece23 66 length = GnssSerial::sendUbx(0x06, 0x01, enable_ubx_nav_pvt, sizeof(enable_ubx_nav_pvt));
Bilal Qamar 12:a04f7eeece23 67 if(length >= (int)(sizeof(enable_ubx_nav_pvt) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 68 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 69 SEND_LOGGING_MESSAGE("UBX-NAV-PVT was disabled\r\n");
Bilal Qamar 12:a04f7eeece23 70 wait(5);
Bilal Qamar 12:a04f7eeece23 71 break;
Bilal Qamar 12:a04f7eeece23 72 }
Bilal Qamar 12:a04f7eeece23 73 else
Bilal Qamar 12:a04f7eeece23 74 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 75 SEND_LOGGING_MESSAGE("disabling UBX-NAV-PVT...\r\n");
Bilal Qamar 12:a04f7eeece23 76 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 77 }
Bilal Qamar 12:a04f7eeece23 78 }
Bilal Qamar 12:a04f7eeece23 79
Bilal Qamar 12:a04f7eeece23 80 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 81 }
Bilal Qamar 12:a04f7eeece23 82
Bilal Qamar 12:a04f7eeece23 83 int GnssOperations::enable_ubx_nav5(unsigned int acc)
Bilal Qamar 12:a04f7eeece23 84 {
Bilal Qamar 12:a04f7eeece23 85 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 86 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 87 int length =0;
Bilal Qamar 12:a04f7eeece23 88 //convert unsigned int acc to hex
Bilal Qamar 12:a04f7eeece23 89 //ask if positioning mask or time accuracy mask
bqam 18:7adca4350499 90 unsigned char ubx_cfg_nav5[]={0xFF, 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00,
bqam 18:7adca4350499 91 0x0A, 0x00, 0xFA, 0x00,0xFA, 0x00, EXTRACT_BYTE(0, FIRST_BYTE, acc), EXTRACT_BYTE(1, SECOND_BYTE, acc),
bqam 18:7adca4350499 92 0x5E, 0x01, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 93
Bilal Qamar 12:a04f7eeece23 94 while(conf)
Bilal Qamar 12:a04f7eeece23 95 {
Bilal Qamar 12:a04f7eeece23 96 length = GnssSerial::sendUbx(0x06, 0x24, ubx_cfg_nav5, sizeof(ubx_cfg_nav5));
Bilal Qamar 12:a04f7eeece23 97 if(length >= (int)(sizeof(ubx_cfg_nav5) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 98 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 99 SEND_LOGGING_MESSAGE("ubx_cfg_nav5 was enabled\r\n");
wajahat.abbas@u-blox.com 19:119e7c15ff97 100 wait(1);
Bilal Qamar 12:a04f7eeece23 101 break;
Bilal Qamar 12:a04f7eeece23 102 }
Bilal Qamar 12:a04f7eeece23 103 else
Bilal Qamar 12:a04f7eeece23 104 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 105 SEND_LOGGING_MESSAGE("enabling ubx_cfg_nav5...\r\n");
Bilal Qamar 12:a04f7eeece23 106 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 107 }
Bilal Qamar 12:a04f7eeece23 108 }
Bilal Qamar 12:a04f7eeece23 109
Bilal Qamar 12:a04f7eeece23 110 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 111 }
Bilal Qamar 12:a04f7eeece23 112
Bilal Qamar 12:a04f7eeece23 113 /**
Bilal Qamar 12:a04f7eeece23 114 * Enabling UBX-ODOMETER using UBX-CFG-ODO
Bilal Qamar 12:a04f7eeece23 115 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 116 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 117 *
Bilal Qamar 12:a04f7eeece23 118 */
Bilal Qamar 12:a04f7eeece23 119 int GnssOperations::enable_ubx_odo()
Bilal Qamar 12:a04f7eeece23 120 {
Bilal Qamar 12:a04f7eeece23 121 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 122 unsigned char ubx_cfg_odo[]={0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x19, 0x46, 0x19, 0x66, 0x0A, 0x32, 0x00,
Bilal Qamar 12:a04f7eeece23 123 0x00, 0x99, 0x4C, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 124 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 125 int length =0;
Bilal Qamar 12:a04f7eeece23 126
Bilal Qamar 12:a04f7eeece23 127 while(conf)
Bilal Qamar 12:a04f7eeece23 128 {
Bilal Qamar 12:a04f7eeece23 129 length = GnssSerial::sendUbx(0x06, 0x1E, ubx_cfg_odo, sizeof(ubx_cfg_odo));
Bilal Qamar 12:a04f7eeece23 130 if(length >= (int)(sizeof(ubx_cfg_odo) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 131 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 132 SEND_LOGGING_MESSAGE("UBX-ODO was enabled\r\n");
wajahat.abbas@u-blox.com 19:119e7c15ff97 133 wait(1);
Bilal Qamar 12:a04f7eeece23 134 break;
Bilal Qamar 12:a04f7eeece23 135 }
Bilal Qamar 12:a04f7eeece23 136 else
Bilal Qamar 12:a04f7eeece23 137 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 138 SEND_LOGGING_MESSAGE("enabling UBX-ODO...\r\n");
Bilal Qamar 12:a04f7eeece23 139 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 140 }
Bilal Qamar 12:a04f7eeece23 141 }
Bilal Qamar 12:a04f7eeece23 142
Bilal Qamar 12:a04f7eeece23 143 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 144 }
Bilal Qamar 12:a04f7eeece23 145
Bilal Qamar 12:a04f7eeece23 146 int GnssOperations::disable_ubx_odo()
Bilal Qamar 12:a04f7eeece23 147 {
Bilal Qamar 12:a04f7eeece23 148 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 149 unsigned char ubx_cfg_odo[]={0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x19, 0x46, 0x19, 0x66, 0x0A, 0x32, 0x00,
Bilal Qamar 12:a04f7eeece23 150 0x00, 0x99, 0x4C, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 151 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 152 int length =0;
Bilal Qamar 12:a04f7eeece23 153
Bilal Qamar 12:a04f7eeece23 154 while(conf)
Bilal Qamar 12:a04f7eeece23 155 {
Bilal Qamar 12:a04f7eeece23 156 length = GnssSerial::sendUbx(0x06, 0x1E, ubx_cfg_odo, sizeof(ubx_cfg_odo));
Bilal Qamar 12:a04f7eeece23 157 if(length >= (int)(sizeof(ubx_cfg_odo) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 158 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 159 SEND_LOGGING_MESSAGE("UBX-ODO was disabled\r\n");
Bilal Qamar 12:a04f7eeece23 160 wait(5);
Bilal Qamar 12:a04f7eeece23 161 break;
Bilal Qamar 12:a04f7eeece23 162 }
Bilal Qamar 12:a04f7eeece23 163 else
Bilal Qamar 12:a04f7eeece23 164 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 165 SEND_LOGGING_MESSAGE("disabling UBX-ODO...\r\n");
Bilal Qamar 12:a04f7eeece23 166 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 167 }
Bilal Qamar 12:a04f7eeece23 168 }
Bilal Qamar 12:a04f7eeece23 169
Bilal Qamar 12:a04f7eeece23 170 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 171 }
Bilal Qamar 12:a04f7eeece23 172 /**
Bilal Qamar 12:a04f7eeece23 173 * Enabling UBX-NAV-ODO messages using UBX-CFG-MSG
Bilal Qamar 12:a04f7eeece23 174 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 175 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 176 *
Bilal Qamar 12:a04f7eeece23 177 */
Bilal Qamar 12:a04f7eeece23 178 int GnssOperations::enable_ubx_nav_odo()
Bilal Qamar 12:a04f7eeece23 179 {
Bilal Qamar 12:a04f7eeece23 180 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 181 unsigned char ubx_nav_odo[]={0x01, 0x09, 0x01};
Bilal Qamar 12:a04f7eeece23 182 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 183 int length =0;
Bilal Qamar 12:a04f7eeece23 184
Bilal Qamar 12:a04f7eeece23 185 while(conf)
Bilal Qamar 12:a04f7eeece23 186 {
Bilal Qamar 12:a04f7eeece23 187 length = GnssSerial::sendUbx(0x06, 0x01, ubx_nav_odo, sizeof(ubx_nav_odo));
Bilal Qamar 12:a04f7eeece23 188 if(length >= (int)(sizeof(ubx_nav_odo) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 189 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 190 SEND_LOGGING_MESSAGE("UBX-NAV-ODO was enabled\r\n");
wajahat.abbas@u-blox.com 19:119e7c15ff97 191 wait(1);
Bilal Qamar 12:a04f7eeece23 192 break;
Bilal Qamar 12:a04f7eeece23 193 }
Bilal Qamar 12:a04f7eeece23 194 else
Bilal Qamar 12:a04f7eeece23 195 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 196 SEND_LOGGING_MESSAGE("enabling UBX-NAV-ODO...\r\n");
Bilal Qamar 12:a04f7eeece23 197 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 198 }
Bilal Qamar 12:a04f7eeece23 199 }
Bilal Qamar 12:a04f7eeece23 200
Bilal Qamar 12:a04f7eeece23 201 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 202 }
Bilal Qamar 12:a04f7eeece23 203
Bilal Qamar 12:a04f7eeece23 204 /**
Bilal Qamar 12:a04f7eeece23 205 * Disabling UBX-NAV-ODO messages using UBX-CFG-MSG
Bilal Qamar 12:a04f7eeece23 206 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 207 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 208 *
Bilal Qamar 12:a04f7eeece23 209 */
Bilal Qamar 12:a04f7eeece23 210 int GnssOperations::disable_ubx_nav_odo()
Bilal Qamar 12:a04f7eeece23 211 {
Bilal Qamar 12:a04f7eeece23 212 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 213 unsigned char ubx_nav_odo[]={0x01, 0x09, 0x00};
Bilal Qamar 12:a04f7eeece23 214 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 215 int length =0;
Bilal Qamar 12:a04f7eeece23 216
Bilal Qamar 12:a04f7eeece23 217 while(conf)
Bilal Qamar 12:a04f7eeece23 218 {
Bilal Qamar 12:a04f7eeece23 219 length = GnssSerial::sendUbx(0x06, 0x01, ubx_nav_odo, sizeof(ubx_nav_odo));
Bilal Qamar 12:a04f7eeece23 220 if(length >= (int)(sizeof(ubx_nav_odo) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 221 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 222 SEND_LOGGING_MESSAGE("UBX-NAV-ODO was disabled\r\n");
Bilal Qamar 12:a04f7eeece23 223 wait(5);
Bilal Qamar 12:a04f7eeece23 224 break;
Bilal Qamar 12:a04f7eeece23 225 }
Bilal Qamar 12:a04f7eeece23 226 else
Bilal Qamar 12:a04f7eeece23 227 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 228 SEND_LOGGING_MESSAGE("disabling UBX-NAV-ODO...\r\n");
Bilal Qamar 12:a04f7eeece23 229 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 230 }
Bilal Qamar 12:a04f7eeece23 231 }
Bilal Qamar 12:a04f7eeece23 232
Bilal Qamar 12:a04f7eeece23 233 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 234 }
Bilal Qamar 12:a04f7eeece23 235
Bilal Qamar 12:a04f7eeece23 236 int GnssOperations::enable_ubx_batch_feature()
Bilal Qamar 12:a04f7eeece23 237 {
Bilal Qamar 12:a04f7eeece23 238 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 239 unsigned char enable_ubx_log_batch[]={0x00, 0x0D, 0x0A, 0x00, 0x07, 0x00, 0x00, 0x01};
Bilal Qamar 12:a04f7eeece23 240 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 241 int length =0;
Bilal Qamar 12:a04f7eeece23 242
Bilal Qamar 12:a04f7eeece23 243 //Disable NAV-ODO and NAV-PVT
Bilal Qamar 12:a04f7eeece23 244 disable_ubx_nav_odo();
Bilal Qamar 12:a04f7eeece23 245 disable_ubx_nav_pvt();
Bilal Qamar 12:a04f7eeece23 246
Bilal Qamar 12:a04f7eeece23 247 while(conf)
Bilal Qamar 12:a04f7eeece23 248 {
Bilal Qamar 12:a04f7eeece23 249 length = GnssSerial::sendUbx(0x06, 0x93, enable_ubx_log_batch, sizeof(enable_ubx_log_batch));
Bilal Qamar 12:a04f7eeece23 250 if(length >= (int)(sizeof(enable_ubx_log_batch) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 251 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 252 SEND_LOGGING_MESSAGE("UBX_LOG_BATCH was enabled\r\n");
wajahat.abbas@u-blox.com 19:119e7c15ff97 253 wait(1);
Bilal Qamar 12:a04f7eeece23 254 break;
Bilal Qamar 12:a04f7eeece23 255 }
Bilal Qamar 12:a04f7eeece23 256 else
Bilal Qamar 12:a04f7eeece23 257 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 258 SEND_LOGGING_MESSAGE("enable ubx_batch_log...\r\n");
Bilal Qamar 12:a04f7eeece23 259 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 260 }
Bilal Qamar 12:a04f7eeece23 261 }
Bilal Qamar 12:a04f7eeece23 262 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 263 }
Bilal Qamar 12:a04f7eeece23 264
Bilal Qamar 12:a04f7eeece23 265 int GnssOperations::disable_ubx_batch_feature()
Bilal Qamar 12:a04f7eeece23 266 {
Bilal Qamar 12:a04f7eeece23 267 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 268 unsigned char enable_ubx_log_batch[]={0x00, 0x0C, 0x0A, 0x00, 0x07, 0x00, 0x00, 0x01};
Bilal Qamar 12:a04f7eeece23 269 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 270 int length =0;
Bilal Qamar 12:a04f7eeece23 271
Bilal Qamar 12:a04f7eeece23 272 //Enable NAV-ODO and NAV-PVT
Bilal Qamar 12:a04f7eeece23 273 enable_ubx_nav_odo();
Bilal Qamar 12:a04f7eeece23 274 enable_ubx_nav_pvt();
Bilal Qamar 12:a04f7eeece23 275
Bilal Qamar 12:a04f7eeece23 276 while(conf)
Bilal Qamar 12:a04f7eeece23 277 {
Bilal Qamar 12:a04f7eeece23 278 length = GnssSerial::sendUbx(0x06, 0x93, enable_ubx_log_batch, sizeof(enable_ubx_log_batch));
Bilal Qamar 12:a04f7eeece23 279 if(length >= (int)(sizeof(enable_ubx_log_batch) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 280 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 281 SEND_LOGGING_MESSAGE("UBX_LOG_BATCH was enabled\r\n");
Bilal Qamar 12:a04f7eeece23 282 wait(5);
Bilal Qamar 12:a04f7eeece23 283 break;
Bilal Qamar 12:a04f7eeece23 284 }
Bilal Qamar 12:a04f7eeece23 285 else
Bilal Qamar 12:a04f7eeece23 286 {
fahim.alavi@u-blox.com 16:cb9861f0f4d8 287 SEND_LOGGING_MESSAGE("enable ubx_batch_log...\r\n");
Bilal Qamar 12:a04f7eeece23 288 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 289 }
Bilal Qamar 12:a04f7eeece23 290 }
Bilal Qamar 12:a04f7eeece23 291 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 292 }
Bilal Qamar 12:a04f7eeece23 293
Bilal Qamar 12:a04f7eeece23 294 /**
Bilal Qamar 12:a04f7eeece23 295 *
Bilal Qamar 12:a04f7eeece23 296 * Configuring UBX-LOG-BATCH with UBX-CFG-BATCH
Bilal Qamar 12:a04f7eeece23 297 *
Bilal Qamar 12:a04f7eeece23 298 * @param obj struct containing the data to be send in payload
Bilal Qamar 12:a04f7eeece23 299 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 300 * FAIL: 0
Bilal Qamar 12:a04f7eeece23 301 *
Bilal Qamar 12:a04f7eeece23 302 */
Bilal Qamar 12:a04f7eeece23 303 int GnssOperations::cfg_batch_feature(tUBX_CFG_BATCH *obj)
Bilal Qamar 12:a04f7eeece23 304 {
Bilal Qamar 12:a04f7eeece23 305 int length =0;
Bilal Qamar 12:a04f7eeece23 306 const unsigned char cfg_batch_feature[] = {0x00, 0x01, EXTRACT_BYTE(0, FIRST_BYTE, obj->bufSize),
Bilal Qamar 12:a04f7eeece23 307 EXTRACT_BYTE(1, SECOND_BYTE, obj->bufSize), EXTRACT_BYTE(0, FIRST_BYTE, obj->notifThrs),
Bilal Qamar 12:a04f7eeece23 308 EXTRACT_BYTE(1, SECOND_BYTE, obj->notifThrs), obj->pioId, 0x00};
Bilal Qamar 12:a04f7eeece23 309
Bilal Qamar 12:a04f7eeece23 310 length = GnssSerial::sendUbx(0x06, 0x93, cfg_batch_feature, sizeof(cfg_batch_feature));
Bilal Qamar 12:a04f7eeece23 311
Bilal Qamar 12:a04f7eeece23 312 return (length >= (int)(sizeof(cfg_batch_feature) + UBX_FRAME_SIZE)) ? 1 : 0;
Bilal Qamar 12:a04f7eeece23 313 }
Bilal Qamar 12:a04f7eeece23 314
Bilal Qamar 12:a04f7eeece23 315 /*
Bilal Qamar 12:a04f7eeece23 316 * Power mode configuration for GNSS receiver
Bilal Qamar 12:a04f7eeece23 317 *
Bilal Qamar 12:a04f7eeece23 318 * Pending: Need to send extended power management configuration messages (UBX-CFG-PM2)
Bilal Qamar 12:a04f7eeece23 319 *
Bilal Qamar 12:a04f7eeece23 320 *
Bilal Qamar 12:a04f7eeece23 321 */
fahim.alavi@u-blox.com 16:cb9861f0f4d8 322 int GnssOperations::cfg_power_mode(Powermodes power_mode)
Bilal Qamar 12:a04f7eeece23 323 {
Bilal Qamar 12:a04f7eeece23 324 int length = 0;
Bilal Qamar 12:a04f7eeece23 325 unsigned char semi_continuous_pms[] = {0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 326 unsigned char semi_continuous_pm2[] = {0x02, 0x06, 0x00, 0x00, 0x02, 0x00, 0x43, 0x01, 0x10, 0x27, 0x00, 0x00, 0x10,
Bilal Qamar 12:a04f7eeece23 327 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x01, 0x2C, 0x01, 0x00, 0x00, 0xCF, 0x40, 0x00,
Bilal Qamar 12:a04f7eeece23 328 0x00, 0x87, 0x5A, 0xA4, 0x46, 0xFE, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 329 unsigned char semi_continuous_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
Bilal Qamar 12:a04f7eeece23 330
Bilal Qamar 12:a04f7eeece23 331 unsigned char aggresive_continuous_pms[] = {0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 332 unsigned char aggresive_continuous_pm2[] = {0x02, 0x06, 0x00, 0x00, 0x02, 0x00, 0x43, 0x01, 0xE8, 0x03, 0x00, 0x00,
Bilal Qamar 12:a04f7eeece23 333 0x10, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x01, 0x2C, 0x01, 0x00, 0x00, 0xCF, 0x40,
Bilal Qamar 12:a04f7eeece23 334 0x00, 0x00, 0x87, 0x5A, 0xA4, 0x46, 0xFE, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 335 unsigned char aggressive_continuous_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
Bilal Qamar 12:a04f7eeece23 336
Bilal Qamar 12:a04f7eeece23 337 unsigned char conservative_continuous_pms[] = {0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 338 unsigned char conservative_continuous_pm2[] = {0x02, 0x06, 0x00, 0x00, 0x00, 0x00, 0x43, 0x01, 0xE8, 0x03, 0x00, 0x00,
Bilal Qamar 12:a04f7eeece23 339 0x10, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x01, 0x2C, 0x01, 0x00, 0x00, 0xCF, 0x41,
Bilal Qamar 12:a04f7eeece23 340 0x00, 0x00, 0x88, 0x6A, 0xA4, 0x46, 0xFE, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 341 unsigned char conservative_continuous_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
Bilal Qamar 12:a04f7eeece23 342
Bilal Qamar 12:a04f7eeece23 343 unsigned char full_power_pms[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
bqam 18:7adca4350499 344 unsigned char full_power_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
bqam 18:7adca4350499 345
bqam 18:7adca4350499 346 unsigned char full_power_block_level_pms[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
bqam 18:7adca4350499 347 unsigned char full_power_block_level_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
bqam 18:7adca4350499 348
bqam 18:7adca4350499 349 unsigned char full_power_building_level_pms[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
bqam 18:7adca4350499 350 unsigned char full_power_building_level_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
Bilal Qamar 12:a04f7eeece23 351
Bilal Qamar 12:a04f7eeece23 352 switch (power_mode)
Bilal Qamar 12:a04f7eeece23 353 {
Bilal Qamar 12:a04f7eeece23 354 case SEMI_CONTINOUS:
fahim.alavi@u-blox.com 16:cb9861f0f4d8 355 SEND_LOGGING_MESSAGE("Configuring SEMI_CONTINOUS");
Bilal Qamar 12:a04f7eeece23 356 length = GnssSerial::sendUbx(0x06, 0x86, semi_continuous_pms, sizeof(semi_continuous_pms));
wajahat.abbas@u-blox.com 19:119e7c15ff97 357 wait(1);
Bilal Qamar 12:a04f7eeece23 358 length = GnssSerial::sendUbx(0x06, 0x3B, semi_continuous_pm2, sizeof(semi_continuous_pm2));
wajahat.abbas@u-blox.com 19:119e7c15ff97 359 wait(1);
Bilal Qamar 12:a04f7eeece23 360 length = GnssSerial::sendUbx(0x06, 0x08, semi_continuous_rate, sizeof(semi_continuous_rate));
fahim.alavi@u-blox.com 20:bc678f383db1 361 wait(1);
Bilal Qamar 12:a04f7eeece23 362 break;
Bilal Qamar 12:a04f7eeece23 363
Bilal Qamar 12:a04f7eeece23 364 case AGGRESSIVE_CONTINUOS:
fahim.alavi@u-blox.com 16:cb9861f0f4d8 365 SEND_LOGGING_MESSAGE("Configuring AGGRESSIVE_CONTINUOS");
Bilal Qamar 12:a04f7eeece23 366 length = GnssSerial::sendUbx(0x06, 0x86, aggresive_continuous_pms, sizeof(aggresive_continuous_pms));
wajahat.abbas@u-blox.com 19:119e7c15ff97 367 wait(1);
Bilal Qamar 12:a04f7eeece23 368 length = GnssSerial::sendUbx(0x06, 0x3B, aggresive_continuous_pm2, sizeof(aggresive_continuous_pm2));
wajahat.abbas@u-blox.com 19:119e7c15ff97 369 wait(1);
Bilal Qamar 12:a04f7eeece23 370 length = GnssSerial::sendUbx(0x06, 0x08, aggressive_continuous_rate, sizeof(aggressive_continuous_rate));
fahim.alavi@u-blox.com 20:bc678f383db1 371 wait(1);
Bilal Qamar 12:a04f7eeece23 372 break;
Bilal Qamar 12:a04f7eeece23 373
Bilal Qamar 12:a04f7eeece23 374 case CONSERVATIVE_CONTINOUS:
fahim.alavi@u-blox.com 16:cb9861f0f4d8 375 SEND_LOGGING_MESSAGE("Configuring CONSERVATIVE_CONTINOUS");
Bilal Qamar 12:a04f7eeece23 376 length = GnssSerial::sendUbx(0x06, 0x86, conservative_continuous_pms, sizeof(conservative_continuous_pms));
wajahat.abbas@u-blox.com 19:119e7c15ff97 377 wait(1);
Bilal Qamar 12:a04f7eeece23 378 length = GnssSerial::sendUbx(0x06, 0x3B, conservative_continuous_pm2, sizeof(conservative_continuous_pm2));
wajahat.abbas@u-blox.com 19:119e7c15ff97 379 wait(1);
Bilal Qamar 12:a04f7eeece23 380 length = GnssSerial::sendUbx(0x06, 0x08, conservative_continuous_rate, sizeof(conservative_continuous_rate));
fahim.alavi@u-blox.com 20:bc678f383db1 381 wait(1);
Bilal Qamar 12:a04f7eeece23 382 break;
Bilal Qamar 12:a04f7eeece23 383
Bilal Qamar 12:a04f7eeece23 384 case FULL_POWER:
fahim.alavi@u-blox.com 16:cb9861f0f4d8 385 SEND_LOGGING_MESSAGE("Configuring FULL_POWER");
Bilal Qamar 12:a04f7eeece23 386 length = GnssSerial::sendUbx(0x06, 0x86, full_power_pms, sizeof(full_power_pms));
wajahat.abbas@u-blox.com 19:119e7c15ff97 387 wait(1);
Bilal Qamar 12:a04f7eeece23 388 length = GnssSerial::sendUbx(0x06, 0x08, full_power_rate, sizeof(full_power_rate));
fahim.alavi@u-blox.com 20:bc678f383db1 389 wait(1);
Bilal Qamar 12:a04f7eeece23 390 break;
bqam 18:7adca4350499 391 case FULL_POWER_BLOCK_LEVEL:
bqam 18:7adca4350499 392 SEND_LOGGING_MESSAGE("Configuring FULL_POWER_BLOCK_LEVEL");
bqam 18:7adca4350499 393 length = GnssSerial::sendUbx(0x06, 0x86, full_power_block_level_pms, sizeof(full_power_block_level_pms));
wajahat.abbas@u-blox.com 19:119e7c15ff97 394 wait(1);
bqam 18:7adca4350499 395 length = GnssSerial::sendUbx(0x06, 0x08, full_power_block_level_rate, sizeof(full_power_block_level_rate));
fahim.alavi@u-blox.com 20:bc678f383db1 396 wait(1);
bqam 18:7adca4350499 397 break;
bqam 18:7adca4350499 398 case FULL_POWER_BUILDING_LEVEL:
bqam 18:7adca4350499 399 SEND_LOGGING_MESSAGE("Configuring FULL_POWER_BUILDING_LEVEL");
bqam 18:7adca4350499 400 length = GnssSerial::sendUbx(0x06, 0x86, full_power_building_level_pms, sizeof(full_power_building_level_pms));
wajahat.abbas@u-blox.com 19:119e7c15ff97 401 wait(1);
bqam 18:7adca4350499 402 length = GnssSerial::sendUbx(0x06, 0x08, full_power_building_level_rate, sizeof(full_power_building_level_rate));
fahim.alavi@u-blox.com 20:bc678f383db1 403 wait(1);
bqam 18:7adca4350499 404 break;
Bilal Qamar 12:a04f7eeece23 405 }
fahim.alavi@u-blox.com 20:bc678f383db1 406
Bilal Qamar 12:a04f7eeece23 407 return (length >= (int)(sizeof(semi_continuous_pms) + UBX_FRAME_SIZE)) ? 1 : 0;
Bilal Qamar 12:a04f7eeece23 408 }
Bilal Qamar 12:a04f7eeece23 409
fahim.alavi@u-blox.com 20:bc678f383db1 410 bool GnssOperations::verify_gnss_mode() {
fahim.alavi@u-blox.com 20:bc678f383db1 411
fahim.alavi@u-blox.com 20:bc678f383db1 412 unsigned char CFG_PMS[] = {0xB5, 0x62, 0x06, 0x86, 0x00, 0x00, 0x8c, 0xAA};
fahim.alavi@u-blox.com 20:bc678f383db1 413 unsigned char CFG_PM2[] = {0xB5, 0x62, 0x06, 0x3B, 0x00, 0x00, 0x41, 0xC9};
fahim.alavi@u-blox.com 20:bc678f383db1 414 unsigned char CFG_RATE[] = {0xB5, 0x62, 0x06, 0x08, 0x00, 0x00, 0x0E, 0x30};
fahim.alavi@u-blox.com 20:bc678f383db1 415 unsigned char CFG_NAV5[] = {0xB5, 0x62, 0x06, 0x24, 0x00, 0x00, 0x2A, 0x84};
fahim.alavi@u-blox.com 20:bc678f383db1 416
fahim.alavi@u-blox.com 20:bc678f383db1 417 this->_send(CFG_PMS, sizeof(CFG_PMS));
fahim.alavi@u-blox.com 20:bc678f383db1 418 wait(1);
fahim.alavi@u-blox.com 20:bc678f383db1 419
fahim.alavi@u-blox.com 20:bc678f383db1 420 this->_send(CFG_PM2, sizeof(CFG_PM2));
fahim.alavi@u-blox.com 20:bc678f383db1 421 wait(1);
fahim.alavi@u-blox.com 20:bc678f383db1 422
fahim.alavi@u-blox.com 20:bc678f383db1 423 this->_send(CFG_RATE, sizeof(CFG_RATE));
fahim.alavi@u-blox.com 20:bc678f383db1 424 wait(1);
fahim.alavi@u-blox.com 20:bc678f383db1 425
fahim.alavi@u-blox.com 20:bc678f383db1 426 this->_send(CFG_NAV5, sizeof(CFG_NAV5));
fahim.alavi@u-blox.com 20:bc678f383db1 427 wait(1);
fahim.alavi@u-blox.com 20:bc678f383db1 428
fahim.alavi@u-blox.com 20:bc678f383db1 429 return true;
fahim.alavi@u-blox.com 20:bc678f383db1 430 }
fahim.alavi@u-blox.com 20:bc678f383db1 431
Bilal Qamar 12:a04f7eeece23 432 /**
Bilal Qamar 12:a04f7eeece23 433 * GNSS start modes (Hot/Warm/Cold start)
Bilal Qamar 12:a04f7eeece23 434 *
Bilal Qamar 12:a04f7eeece23 435 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 436 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 437 *
Bilal Qamar 12:a04f7eeece23 438 */
Bilal Qamar 12:a04f7eeece23 439 int GnssOperations::start_mode(int start_mode)
Bilal Qamar 12:a04f7eeece23 440 {
Bilal Qamar 12:a04f7eeece23 441 int length = 0;
Bilal Qamar 12:a04f7eeece23 442 unsigned char hot_start[] = {0x00, 0x00, 0x02, 0x00};
Bilal Qamar 12:a04f7eeece23 443 unsigned char warm_start[] = {0x01, 0x00, 0x02, 0x00};
Bilal Qamar 12:a04f7eeece23 444 unsigned char cold_start[] = {0xFF, 0xFF, 0x02, 0x00};
Bilal Qamar 12:a04f7eeece23 445
Bilal Qamar 12:a04f7eeece23 446 switch (start_mode)
Bilal Qamar 12:a04f7eeece23 447 {
Bilal Qamar 12:a04f7eeece23 448 case HOT:
Bilal Qamar 12:a04f7eeece23 449 length = GnssSerial::sendUbx(0x06, 0x04, hot_start, sizeof(hot_start));
Bilal Qamar 12:a04f7eeece23 450 break;
Bilal Qamar 12:a04f7eeece23 451
Bilal Qamar 12:a04f7eeece23 452 case WARM:
Bilal Qamar 12:a04f7eeece23 453 length = GnssSerial::sendUbx(0x06, 0x04, warm_start, sizeof(warm_start));
Bilal Qamar 12:a04f7eeece23 454 break;
Bilal Qamar 12:a04f7eeece23 455
Bilal Qamar 12:a04f7eeece23 456 case COLD:
Bilal Qamar 12:a04f7eeece23 457 length = GnssSerial::sendUbx(0x06, 0x04, cold_start, sizeof(cold_start));
Bilal Qamar 12:a04f7eeece23 458 break;
Bilal Qamar 12:a04f7eeece23 459 }
Bilal Qamar 12:a04f7eeece23 460
Bilal Qamar 12:a04f7eeece23 461 return (length >= (int)(sizeof(hot_start) + UBX_FRAME_SIZE)) ? 1 : 0;
Bilal Qamar 12:a04f7eeece23 462 }
bqam 14:4b22bd505b93 463
bqam 14:4b22bd505b93 464 void GnssOperations::send_to_gnss(char rChar)
bqam 14:4b22bd505b93 465 {
bqam 14:4b22bd505b93 466 GnssSerial::putc(rChar);
bqam 14:4b22bd505b93 467 }
bqam 14:4b22bd505b93 468
bqam 14:4b22bd505b93 469 void GnssOperations::power_on_gnss()
bqam 14:4b22bd505b93 470 {
bqam 14:4b22bd505b93 471 GnssSerial::_powerOn();
bqam 14:4b22bd505b93 472 }