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:
Bilal Qamar
Date:
Thu May 31 10:59:11 2018 +0500
Revision:
12:a04f7eeece23
Child:
14:4b22bd505b93
GNSS Operations class 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
Bilal Qamar 12:a04f7eeece23 3 #define FIRST_BYTE 0x000000FF
Bilal Qamar 12:a04f7eeece23 4 #define SECOND_BYTE 0x0000FF00
Bilal Qamar 12:a04f7eeece23 5 #define THIRD_BYTE 0x00FF0000
Bilal Qamar 12:a04f7eeece23 6 #define FOURTH_BYTE 0xFF000000
Bilal Qamar 12:a04f7eeece23 7 #define RETRY 5
Bilal Qamar 12:a04f7eeece23 8
Bilal Qamar 12:a04f7eeece23 9 #define EXTRACT_BYTE(INDEX, BYTE, VALUE) ((VALUE & BYTE) >> (INDEX*8))
Bilal Qamar 12:a04f7eeece23 10
Bilal Qamar 12:a04f7eeece23 11 /**
Bilal Qamar 12:a04f7eeece23 12 *
Bilal Qamar 12:a04f7eeece23 13 * Enable UBX-NAV-PVT using UBX-CFG-MSG
Bilal Qamar 12:a04f7eeece23 14 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 15 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 16 */
Bilal Qamar 12:a04f7eeece23 17 int GnssOperations::enable_ubx_nav_pvt()
Bilal Qamar 12:a04f7eeece23 18 {
Bilal Qamar 12:a04f7eeece23 19 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 20 unsigned char enable_ubx_nav_pvt[]={0x01, 0x07, 0x01};
Bilal Qamar 12:a04f7eeece23 21 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 22 int length =0;
Bilal Qamar 12:a04f7eeece23 23
Bilal Qamar 12:a04f7eeece23 24 while(conf)
Bilal Qamar 12:a04f7eeece23 25 {
Bilal Qamar 12:a04f7eeece23 26
Bilal Qamar 12:a04f7eeece23 27 length = GnssSerial::sendUbx(0x06, 0x01, enable_ubx_nav_pvt, sizeof(enable_ubx_nav_pvt));
Bilal Qamar 12:a04f7eeece23 28 if(length >= (int)(sizeof(enable_ubx_nav_pvt) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 29 {
Bilal Qamar 12:a04f7eeece23 30 printf("UBX-NAV-PVT was enabled\r\n");
Bilal Qamar 12:a04f7eeece23 31 printf("\r\nmessage length: %i\r\n\r\n", length);
Bilal Qamar 12:a04f7eeece23 32 wait(5);
Bilal Qamar 12:a04f7eeece23 33 break;
Bilal Qamar 12:a04f7eeece23 34 }
Bilal Qamar 12:a04f7eeece23 35 else
Bilal Qamar 12:a04f7eeece23 36 {
Bilal Qamar 12:a04f7eeece23 37 printf("enabling UBX-NAV-PVT...\r\n");
Bilal Qamar 12:a04f7eeece23 38 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 39 }
Bilal Qamar 12:a04f7eeece23 40 }
Bilal Qamar 12:a04f7eeece23 41
Bilal Qamar 12:a04f7eeece23 42 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 43 }
Bilal Qamar 12:a04f7eeece23 44
Bilal Qamar 12:a04f7eeece23 45 /**
Bilal Qamar 12:a04f7eeece23 46 *
Bilal Qamar 12:a04f7eeece23 47 * Disable UBX-NAV-PVT
Bilal Qamar 12:a04f7eeece23 48 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 49 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 50 */
Bilal Qamar 12:a04f7eeece23 51 int GnssOperations::disable_ubx_nav_pvt()
Bilal Qamar 12:a04f7eeece23 52 {
Bilal Qamar 12:a04f7eeece23 53 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 54 unsigned char enable_ubx_nav_pvt[]={0x01, 0x07, 0x00};
Bilal Qamar 12:a04f7eeece23 55 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 56 int length =0;
Bilal Qamar 12:a04f7eeece23 57
Bilal Qamar 12:a04f7eeece23 58 while(conf)
Bilal Qamar 12:a04f7eeece23 59 {
Bilal Qamar 12:a04f7eeece23 60
Bilal Qamar 12:a04f7eeece23 61 length = GnssSerial::sendUbx(0x06, 0x01, enable_ubx_nav_pvt, sizeof(enable_ubx_nav_pvt));
Bilal Qamar 12:a04f7eeece23 62 if(length >= (int)(sizeof(enable_ubx_nav_pvt) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 63 {
Bilal Qamar 12:a04f7eeece23 64 printf("UBX-NAV-PVT was disabled\r\n");
Bilal Qamar 12:a04f7eeece23 65 printf("\r\nmessage length: %i\r\n\r\n", length);
Bilal Qamar 12:a04f7eeece23 66 wait(5);
Bilal Qamar 12:a04f7eeece23 67 break;
Bilal Qamar 12:a04f7eeece23 68 }
Bilal Qamar 12:a04f7eeece23 69 else
Bilal Qamar 12:a04f7eeece23 70 {
Bilal Qamar 12:a04f7eeece23 71 printf("disabling UBX-NAV-PVT...\r\n");
Bilal Qamar 12:a04f7eeece23 72 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 73 }
Bilal Qamar 12:a04f7eeece23 74 }
Bilal Qamar 12:a04f7eeece23 75
Bilal Qamar 12:a04f7eeece23 76 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 77 }
Bilal Qamar 12:a04f7eeece23 78
Bilal Qamar 12:a04f7eeece23 79 int GnssOperations::enable_ubx_nav5(unsigned int acc)
Bilal Qamar 12:a04f7eeece23 80 {
Bilal Qamar 12:a04f7eeece23 81 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 82 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 83 int length =0;
Bilal Qamar 12:a04f7eeece23 84 //convert unsigned int acc to hex
Bilal Qamar 12:a04f7eeece23 85 //ask if positioning mask or time accuracy mask
Bilal Qamar 12:a04f7eeece23 86 unsigned char ubx_cfg_nav5[]={0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Bilal Qamar 12:a04f7eeece23 87 0x00, 0x00, 0x00, 0x00, EXTRACT_BYTE(0, FIRST_BYTE, acc), EXTRACT_BYTE(1, SECOND_BYTE, acc),
Bilal Qamar 12:a04f7eeece23 88 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 89
Bilal Qamar 12:a04f7eeece23 90 while(conf)
Bilal Qamar 12:a04f7eeece23 91 {
Bilal Qamar 12:a04f7eeece23 92 length = GnssSerial::sendUbx(0x06, 0x24, ubx_cfg_nav5, sizeof(ubx_cfg_nav5));
Bilal Qamar 12:a04f7eeece23 93 if(length >= (int)(sizeof(ubx_cfg_nav5) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 94 {
Bilal Qamar 12:a04f7eeece23 95 printf("ubx_cfg_nav5 was enabled\r\n");
Bilal Qamar 12:a04f7eeece23 96 wait(5);
Bilal Qamar 12:a04f7eeece23 97 break;
Bilal Qamar 12:a04f7eeece23 98 }
Bilal Qamar 12:a04f7eeece23 99 else
Bilal Qamar 12:a04f7eeece23 100 {
Bilal Qamar 12:a04f7eeece23 101 printf("enabling ubx_cfg_nav5...\r\n");
Bilal Qamar 12:a04f7eeece23 102 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 103 }
Bilal Qamar 12:a04f7eeece23 104 }
Bilal Qamar 12:a04f7eeece23 105
Bilal Qamar 12:a04f7eeece23 106 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 107 }
Bilal Qamar 12:a04f7eeece23 108
Bilal Qamar 12:a04f7eeece23 109 /**
Bilal Qamar 12:a04f7eeece23 110 * Enabling UBX-ODOMETER using UBX-CFG-ODO
Bilal Qamar 12:a04f7eeece23 111 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 112 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 113 *
Bilal Qamar 12:a04f7eeece23 114 */
Bilal Qamar 12:a04f7eeece23 115 int GnssOperations::enable_ubx_odo()
Bilal Qamar 12:a04f7eeece23 116 {
Bilal Qamar 12:a04f7eeece23 117 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 118 unsigned char ubx_cfg_odo[]={0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x19, 0x46, 0x19, 0x66, 0x0A, 0x32, 0x00,
Bilal Qamar 12:a04f7eeece23 119 0x00, 0x99, 0x4C, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 120 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 121 int length =0;
Bilal Qamar 12:a04f7eeece23 122
Bilal Qamar 12:a04f7eeece23 123 while(conf)
Bilal Qamar 12:a04f7eeece23 124 {
Bilal Qamar 12:a04f7eeece23 125 length = GnssSerial::sendUbx(0x06, 0x1E, ubx_cfg_odo, sizeof(ubx_cfg_odo));
Bilal Qamar 12:a04f7eeece23 126 if(length >= (int)(sizeof(ubx_cfg_odo) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 127 {
Bilal Qamar 12:a04f7eeece23 128 printf("UBX-ODO was enabled\r\n");
Bilal Qamar 12:a04f7eeece23 129 wait(5);
Bilal Qamar 12:a04f7eeece23 130 break;
Bilal Qamar 12:a04f7eeece23 131 }
Bilal Qamar 12:a04f7eeece23 132 else
Bilal Qamar 12:a04f7eeece23 133 {
Bilal Qamar 12:a04f7eeece23 134 printf("enabling UBX-ODO...\r\n");
Bilal Qamar 12:a04f7eeece23 135 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 136 }
Bilal Qamar 12:a04f7eeece23 137 }
Bilal Qamar 12:a04f7eeece23 138
Bilal Qamar 12:a04f7eeece23 139 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 140 }
Bilal Qamar 12:a04f7eeece23 141
Bilal Qamar 12:a04f7eeece23 142 int GnssOperations::disable_ubx_odo()
Bilal Qamar 12:a04f7eeece23 143 {
Bilal Qamar 12:a04f7eeece23 144 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 145 unsigned char ubx_cfg_odo[]={0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x19, 0x46, 0x19, 0x66, 0x0A, 0x32, 0x00,
Bilal Qamar 12:a04f7eeece23 146 0x00, 0x99, 0x4C, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 147 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 148 int length =0;
Bilal Qamar 12:a04f7eeece23 149
Bilal Qamar 12:a04f7eeece23 150 while(conf)
Bilal Qamar 12:a04f7eeece23 151 {
Bilal Qamar 12:a04f7eeece23 152 length = GnssSerial::sendUbx(0x06, 0x1E, ubx_cfg_odo, sizeof(ubx_cfg_odo));
Bilal Qamar 12:a04f7eeece23 153 if(length >= (int)(sizeof(ubx_cfg_odo) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 154 {
Bilal Qamar 12:a04f7eeece23 155 printf("UBX-ODO was disabled\r\n");
Bilal Qamar 12:a04f7eeece23 156 wait(5);
Bilal Qamar 12:a04f7eeece23 157 break;
Bilal Qamar 12:a04f7eeece23 158 }
Bilal Qamar 12:a04f7eeece23 159 else
Bilal Qamar 12:a04f7eeece23 160 {
Bilal Qamar 12:a04f7eeece23 161 printf("disabling UBX-ODO...\r\n");
Bilal Qamar 12:a04f7eeece23 162 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 163 }
Bilal Qamar 12:a04f7eeece23 164 }
Bilal Qamar 12:a04f7eeece23 165
Bilal Qamar 12:a04f7eeece23 166 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 167 }
Bilal Qamar 12:a04f7eeece23 168 /**
Bilal Qamar 12:a04f7eeece23 169 * Enabling UBX-NAV-ODO messages using UBX-CFG-MSG
Bilal Qamar 12:a04f7eeece23 170 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 171 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 172 *
Bilal Qamar 12:a04f7eeece23 173 */
Bilal Qamar 12:a04f7eeece23 174 int GnssOperations::enable_ubx_nav_odo()
Bilal Qamar 12:a04f7eeece23 175 {
Bilal Qamar 12:a04f7eeece23 176 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 177 unsigned char ubx_nav_odo[]={0x01, 0x09, 0x01};
Bilal Qamar 12:a04f7eeece23 178 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 179 int length =0;
Bilal Qamar 12:a04f7eeece23 180
Bilal Qamar 12:a04f7eeece23 181 while(conf)
Bilal Qamar 12:a04f7eeece23 182 {
Bilal Qamar 12:a04f7eeece23 183 length = GnssSerial::sendUbx(0x06, 0x01, ubx_nav_odo, sizeof(ubx_nav_odo));
Bilal Qamar 12:a04f7eeece23 184 if(length >= (int)(sizeof(ubx_nav_odo) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 185 {
Bilal Qamar 12:a04f7eeece23 186 printf("UBX-NAV-ODO was enabled\r\n");
Bilal Qamar 12:a04f7eeece23 187 wait(5);
Bilal Qamar 12:a04f7eeece23 188 break;
Bilal Qamar 12:a04f7eeece23 189 }
Bilal Qamar 12:a04f7eeece23 190 else
Bilal Qamar 12:a04f7eeece23 191 {
Bilal Qamar 12:a04f7eeece23 192 printf("enabling UBX-NAV-ODO...\r\n");
Bilal Qamar 12:a04f7eeece23 193 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 194 }
Bilal Qamar 12:a04f7eeece23 195 }
Bilal Qamar 12:a04f7eeece23 196
Bilal Qamar 12:a04f7eeece23 197 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 198 }
Bilal Qamar 12:a04f7eeece23 199
Bilal Qamar 12:a04f7eeece23 200 /**
Bilal Qamar 12:a04f7eeece23 201 * Disabling UBX-NAV-ODO messages using UBX-CFG-MSG
Bilal Qamar 12:a04f7eeece23 202 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 203 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 204 *
Bilal Qamar 12:a04f7eeece23 205 */
Bilal Qamar 12:a04f7eeece23 206 int GnssOperations::disable_ubx_nav_odo()
Bilal Qamar 12:a04f7eeece23 207 {
Bilal Qamar 12:a04f7eeece23 208 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 209 unsigned char ubx_nav_odo[]={0x01, 0x09, 0x00};
Bilal Qamar 12:a04f7eeece23 210 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 211 int length =0;
Bilal Qamar 12:a04f7eeece23 212
Bilal Qamar 12:a04f7eeece23 213 while(conf)
Bilal Qamar 12:a04f7eeece23 214 {
Bilal Qamar 12:a04f7eeece23 215 length = GnssSerial::sendUbx(0x06, 0x01, ubx_nav_odo, sizeof(ubx_nav_odo));
Bilal Qamar 12:a04f7eeece23 216 if(length >= (int)(sizeof(ubx_nav_odo) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 217 {
Bilal Qamar 12:a04f7eeece23 218 printf("UBX-NAV-ODO was disabled\r\n");
Bilal Qamar 12:a04f7eeece23 219 wait(5);
Bilal Qamar 12:a04f7eeece23 220 break;
Bilal Qamar 12:a04f7eeece23 221 }
Bilal Qamar 12:a04f7eeece23 222 else
Bilal Qamar 12:a04f7eeece23 223 {
Bilal Qamar 12:a04f7eeece23 224 printf("disabling UBX-NAV-ODO...\r\n");
Bilal Qamar 12:a04f7eeece23 225 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 226 }
Bilal Qamar 12:a04f7eeece23 227 }
Bilal Qamar 12:a04f7eeece23 228
Bilal Qamar 12:a04f7eeece23 229 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 230 }
Bilal Qamar 12:a04f7eeece23 231
Bilal Qamar 12:a04f7eeece23 232 int GnssOperations::enable_ubx_batch_feature()
Bilal Qamar 12:a04f7eeece23 233 {
Bilal Qamar 12:a04f7eeece23 234 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 235 unsigned char enable_ubx_log_batch[]={0x00, 0x0D, 0x0A, 0x00, 0x07, 0x00, 0x00, 0x01};
Bilal Qamar 12:a04f7eeece23 236 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 237 int length =0;
Bilal Qamar 12:a04f7eeece23 238
Bilal Qamar 12:a04f7eeece23 239 //Disable NAV-ODO and NAV-PVT
Bilal Qamar 12:a04f7eeece23 240 disable_ubx_nav_odo();
Bilal Qamar 12:a04f7eeece23 241 disable_ubx_nav_pvt();
Bilal Qamar 12:a04f7eeece23 242
Bilal Qamar 12:a04f7eeece23 243 while(conf)
Bilal Qamar 12:a04f7eeece23 244 {
Bilal Qamar 12:a04f7eeece23 245 length = GnssSerial::sendUbx(0x06, 0x93, enable_ubx_log_batch, sizeof(enable_ubx_log_batch));
Bilal Qamar 12:a04f7eeece23 246 if(length >= (int)(sizeof(enable_ubx_log_batch) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 247 {
Bilal Qamar 12:a04f7eeece23 248 printf("UBX_LOG_BATCH was enabled\r\n");
Bilal Qamar 12:a04f7eeece23 249 wait(5);
Bilal Qamar 12:a04f7eeece23 250 break;
Bilal Qamar 12:a04f7eeece23 251 }
Bilal Qamar 12:a04f7eeece23 252 else
Bilal Qamar 12:a04f7eeece23 253 {
Bilal Qamar 12:a04f7eeece23 254 printf("enable ubx_batch_log...\r\n");
Bilal Qamar 12:a04f7eeece23 255 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 256 }
Bilal Qamar 12:a04f7eeece23 257 }
Bilal Qamar 12:a04f7eeece23 258 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 259 }
Bilal Qamar 12:a04f7eeece23 260
Bilal Qamar 12:a04f7eeece23 261 int GnssOperations::disable_ubx_batch_feature()
Bilal Qamar 12:a04f7eeece23 262 {
Bilal Qamar 12:a04f7eeece23 263 int conf = RETRY;
Bilal Qamar 12:a04f7eeece23 264 unsigned char enable_ubx_log_batch[]={0x00, 0x0C, 0x0A, 0x00, 0x07, 0x00, 0x00, 0x01};
Bilal Qamar 12:a04f7eeece23 265 conf = RETRY;
Bilal Qamar 12:a04f7eeece23 266 int length =0;
Bilal Qamar 12:a04f7eeece23 267
Bilal Qamar 12:a04f7eeece23 268 //Enable NAV-ODO and NAV-PVT
Bilal Qamar 12:a04f7eeece23 269 enable_ubx_nav_odo();
Bilal Qamar 12:a04f7eeece23 270 enable_ubx_nav_pvt();
Bilal Qamar 12:a04f7eeece23 271
Bilal Qamar 12:a04f7eeece23 272 while(conf)
Bilal Qamar 12:a04f7eeece23 273 {
Bilal Qamar 12:a04f7eeece23 274 length = GnssSerial::sendUbx(0x06, 0x93, enable_ubx_log_batch, sizeof(enable_ubx_log_batch));
Bilal Qamar 12:a04f7eeece23 275 if(length >= (int)(sizeof(enable_ubx_log_batch) + UBX_FRAME_SIZE))
Bilal Qamar 12:a04f7eeece23 276 {
Bilal Qamar 12:a04f7eeece23 277 printf("UBX_LOG_BATCH was enabled\r\n");
Bilal Qamar 12:a04f7eeece23 278 wait(5);
Bilal Qamar 12:a04f7eeece23 279 break;
Bilal Qamar 12:a04f7eeece23 280 }
Bilal Qamar 12:a04f7eeece23 281 else
Bilal Qamar 12:a04f7eeece23 282 {
Bilal Qamar 12:a04f7eeece23 283 printf("enable ubx_batch_log...\r\n");
Bilal Qamar 12:a04f7eeece23 284 conf = conf - 1;
Bilal Qamar 12:a04f7eeece23 285 }
Bilal Qamar 12:a04f7eeece23 286 }
Bilal Qamar 12:a04f7eeece23 287 return (conf == 0) ? 0 : 1;
Bilal Qamar 12:a04f7eeece23 288 }
Bilal Qamar 12:a04f7eeece23 289
Bilal Qamar 12:a04f7eeece23 290 /**
Bilal Qamar 12:a04f7eeece23 291 *
Bilal Qamar 12:a04f7eeece23 292 * Configuring UBX-LOG-BATCH with UBX-CFG-BATCH
Bilal Qamar 12:a04f7eeece23 293 *
Bilal Qamar 12:a04f7eeece23 294 * @param obj struct containing the data to be send in payload
Bilal Qamar 12:a04f7eeece23 295 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 296 * FAIL: 0
Bilal Qamar 12:a04f7eeece23 297 *
Bilal Qamar 12:a04f7eeece23 298 */
Bilal Qamar 12:a04f7eeece23 299 int GnssOperations::cfg_batch_feature(tUBX_CFG_BATCH *obj)
Bilal Qamar 12:a04f7eeece23 300 {
Bilal Qamar 12:a04f7eeece23 301 int length =0;
Bilal Qamar 12:a04f7eeece23 302 const unsigned char cfg_batch_feature[] = {0x00, 0x01, EXTRACT_BYTE(0, FIRST_BYTE, obj->bufSize),
Bilal Qamar 12:a04f7eeece23 303 EXTRACT_BYTE(1, SECOND_BYTE, obj->bufSize), EXTRACT_BYTE(0, FIRST_BYTE, obj->notifThrs),
Bilal Qamar 12:a04f7eeece23 304 EXTRACT_BYTE(1, SECOND_BYTE, obj->notifThrs), obj->pioId, 0x00};
Bilal Qamar 12:a04f7eeece23 305
Bilal Qamar 12:a04f7eeece23 306 length = GnssSerial::sendUbx(0x06, 0x93, cfg_batch_feature, sizeof(cfg_batch_feature));
Bilal Qamar 12:a04f7eeece23 307
Bilal Qamar 12:a04f7eeece23 308 return (length >= (int)(sizeof(cfg_batch_feature) + UBX_FRAME_SIZE)) ? 1 : 0;
Bilal Qamar 12:a04f7eeece23 309 }
Bilal Qamar 12:a04f7eeece23 310
Bilal Qamar 12:a04f7eeece23 311 /*
Bilal Qamar 12:a04f7eeece23 312 * Power mode configuration for GNSS receiver
Bilal Qamar 12:a04f7eeece23 313 *
Bilal Qamar 12:a04f7eeece23 314 * Pending: Need to send extended power management configuration messages (UBX-CFG-PM2)
Bilal Qamar 12:a04f7eeece23 315 *
Bilal Qamar 12:a04f7eeece23 316 *
Bilal Qamar 12:a04f7eeece23 317 */
Bilal Qamar 12:a04f7eeece23 318 int GnssOperations::cfg_power_mode(int power_mode)
Bilal Qamar 12:a04f7eeece23 319 {
Bilal Qamar 12:a04f7eeece23 320 int length = 0;
Bilal Qamar 12:a04f7eeece23 321 unsigned char semi_continuous_pms[] = {0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 322 unsigned char semi_continuous_pm2[] = {0x02, 0x06, 0x00, 0x00, 0x02, 0x00, 0x43, 0x01, 0x10, 0x27, 0x00, 0x00, 0x10,
Bilal Qamar 12:a04f7eeece23 323 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x01, 0x2C, 0x01, 0x00, 0x00, 0xCF, 0x40, 0x00,
Bilal Qamar 12:a04f7eeece23 324 0x00, 0x87, 0x5A, 0xA4, 0x46, 0xFE, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 325 unsigned char semi_continuous_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
Bilal Qamar 12:a04f7eeece23 326
Bilal Qamar 12:a04f7eeece23 327 unsigned char aggresive_continuous_pms[] = {0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 328 unsigned char aggresive_continuous_pm2[] = {0x02, 0x06, 0x00, 0x00, 0x02, 0x00, 0x43, 0x01, 0xE8, 0x03, 0x00, 0x00,
Bilal Qamar 12:a04f7eeece23 329 0x10, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x01, 0x2C, 0x01, 0x00, 0x00, 0xCF, 0x40,
Bilal Qamar 12:a04f7eeece23 330 0x00, 0x00, 0x87, 0x5A, 0xA4, 0x46, 0xFE, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 331 unsigned char aggressive_continuous_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
Bilal Qamar 12:a04f7eeece23 332
Bilal Qamar 12:a04f7eeece23 333 unsigned char conservative_continuous_pms[] = {0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 334 unsigned char conservative_continuous_pm2[] = {0x02, 0x06, 0x00, 0x00, 0x00, 0x00, 0x43, 0x01, 0xE8, 0x03, 0x00, 0x00,
Bilal Qamar 12:a04f7eeece23 335 0x10, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0x01, 0x2C, 0x01, 0x00, 0x00, 0xCF, 0x41,
Bilal Qamar 12:a04f7eeece23 336 0x00, 0x00, 0x88, 0x6A, 0xA4, 0x46, 0xFE, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 337 unsigned char conservative_continuous_rate[] = {0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
Bilal Qamar 12:a04f7eeece23 338
Bilal Qamar 12:a04f7eeece23 339 unsigned char full_power_pms[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
Bilal Qamar 12:a04f7eeece23 340 unsigned char full_power_rate[] = {0x06, 0x00, 0xE8, 0x03, 0x01, 0x00, 0x01, 0x00};
Bilal Qamar 12:a04f7eeece23 341
Bilal Qamar 12:a04f7eeece23 342 switch (power_mode)
Bilal Qamar 12:a04f7eeece23 343 {
Bilal Qamar 12:a04f7eeece23 344 case SEMI_CONTINOUS:
Bilal Qamar 12:a04f7eeece23 345 length = GnssSerial::sendUbx(0x06, 0x86, semi_continuous_pms, sizeof(semi_continuous_pms));
Bilal Qamar 12:a04f7eeece23 346 wait(5);
Bilal Qamar 12:a04f7eeece23 347 length = GnssSerial::sendUbx(0x06, 0x3B, semi_continuous_pm2, sizeof(semi_continuous_pm2));
Bilal Qamar 12:a04f7eeece23 348 wait(5);
Bilal Qamar 12:a04f7eeece23 349 length = GnssSerial::sendUbx(0x06, 0x08, semi_continuous_rate, sizeof(semi_continuous_rate));
Bilal Qamar 12:a04f7eeece23 350 break;
Bilal Qamar 12:a04f7eeece23 351
Bilal Qamar 12:a04f7eeece23 352 case AGGRESSIVE_CONTINUOS:
Bilal Qamar 12:a04f7eeece23 353 length = GnssSerial::sendUbx(0x06, 0x86, aggresive_continuous_pms, sizeof(aggresive_continuous_pms));
Bilal Qamar 12:a04f7eeece23 354 wait(5);
Bilal Qamar 12:a04f7eeece23 355 length = GnssSerial::sendUbx(0x06, 0x3B, aggresive_continuous_pm2, sizeof(aggresive_continuous_pm2));
Bilal Qamar 12:a04f7eeece23 356 wait(5);
Bilal Qamar 12:a04f7eeece23 357 length = GnssSerial::sendUbx(0x06, 0x08, aggressive_continuous_rate, sizeof(aggressive_continuous_rate));
Bilal Qamar 12:a04f7eeece23 358 break;
Bilal Qamar 12:a04f7eeece23 359
Bilal Qamar 12:a04f7eeece23 360 case CONSERVATIVE_CONTINOUS:
Bilal Qamar 12:a04f7eeece23 361 length = GnssSerial::sendUbx(0x06, 0x86, conservative_continuous_pms, sizeof(conservative_continuous_pms));
Bilal Qamar 12:a04f7eeece23 362 wait(5);
Bilal Qamar 12:a04f7eeece23 363 length = GnssSerial::sendUbx(0x06, 0x3B, conservative_continuous_pm2, sizeof(conservative_continuous_pm2));
Bilal Qamar 12:a04f7eeece23 364 wait(5);
Bilal Qamar 12:a04f7eeece23 365 length = GnssSerial::sendUbx(0x06, 0x08, conservative_continuous_rate, sizeof(conservative_continuous_rate));
Bilal Qamar 12:a04f7eeece23 366 break;
Bilal Qamar 12:a04f7eeece23 367
Bilal Qamar 12:a04f7eeece23 368 case FULL_POWER:
Bilal Qamar 12:a04f7eeece23 369 length = GnssSerial::sendUbx(0x06, 0x86, full_power_pms, sizeof(full_power_pms));
Bilal Qamar 12:a04f7eeece23 370 wait(5);
Bilal Qamar 12:a04f7eeece23 371 length = GnssSerial::sendUbx(0x06, 0x08, full_power_rate, sizeof(full_power_rate));
Bilal Qamar 12:a04f7eeece23 372 break;
Bilal Qamar 12:a04f7eeece23 373 }
Bilal Qamar 12:a04f7eeece23 374 return (length >= (int)(sizeof(semi_continuous_pms) + UBX_FRAME_SIZE)) ? 1 : 0;
Bilal Qamar 12:a04f7eeece23 375 }
Bilal Qamar 12:a04f7eeece23 376
Bilal Qamar 12:a04f7eeece23 377 /**
Bilal Qamar 12:a04f7eeece23 378 * GNSS start modes (Hot/Warm/Cold start)
Bilal Qamar 12:a04f7eeece23 379 *
Bilal Qamar 12:a04f7eeece23 380 * @param return SUCCESS: 1
Bilal Qamar 12:a04f7eeece23 381 * FAILURE: 0
Bilal Qamar 12:a04f7eeece23 382 *
Bilal Qamar 12:a04f7eeece23 383 */
Bilal Qamar 12:a04f7eeece23 384 int GnssOperations::start_mode(int start_mode)
Bilal Qamar 12:a04f7eeece23 385 {
Bilal Qamar 12:a04f7eeece23 386 int length = 0;
Bilal Qamar 12:a04f7eeece23 387 unsigned char hot_start[] = {0x00, 0x00, 0x02, 0x00};
Bilal Qamar 12:a04f7eeece23 388 unsigned char warm_start[] = {0x01, 0x00, 0x02, 0x00};
Bilal Qamar 12:a04f7eeece23 389 unsigned char cold_start[] = {0xFF, 0xFF, 0x02, 0x00};
Bilal Qamar 12:a04f7eeece23 390
Bilal Qamar 12:a04f7eeece23 391 switch (start_mode)
Bilal Qamar 12:a04f7eeece23 392 {
Bilal Qamar 12:a04f7eeece23 393 case HOT:
Bilal Qamar 12:a04f7eeece23 394 length = GnssSerial::sendUbx(0x06, 0x04, hot_start, sizeof(hot_start));
Bilal Qamar 12:a04f7eeece23 395 break;
Bilal Qamar 12:a04f7eeece23 396
Bilal Qamar 12:a04f7eeece23 397 case WARM:
Bilal Qamar 12:a04f7eeece23 398 length = GnssSerial::sendUbx(0x06, 0x04, warm_start, sizeof(warm_start));
Bilal Qamar 12:a04f7eeece23 399 break;
Bilal Qamar 12:a04f7eeece23 400
Bilal Qamar 12:a04f7eeece23 401 case COLD:
Bilal Qamar 12:a04f7eeece23 402 length = GnssSerial::sendUbx(0x06, 0x04, cold_start, sizeof(cold_start));
Bilal Qamar 12:a04f7eeece23 403 break;
Bilal Qamar 12:a04f7eeece23 404 }
Bilal Qamar 12:a04f7eeece23 405
Bilal Qamar 12:a04f7eeece23 406 return (length >= (int)(sizeof(hot_start) + UBX_FRAME_SIZE)) ? 1 : 0;
Bilal Qamar 12:a04f7eeece23 407 }