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
gnss_operations.cpp@12:a04f7eeece23, 2018-05-31 (annotated)
- 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?
User | Revision | Line number | New 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 | } |