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