Bmag incl gps rettelse
Dependencies: mbed WDT MODSERIAL BME280
SPS/SPS.cpp@44:14ec59d2170c, 2017-10-10 (annotated)
- Committer:
- MAA
- Date:
- Tue Oct 10 10:39:59 2017 +0000
- Branch:
- MbedBMAGThrRev
- Revision:
- 44:14ec59d2170c
- Parent:
- 30:072e918663b8
- Child:
- 51:dbd8e6c2211b
Fw version 1.0.0.1; ; Fixed PTH communication issue due to 10 second interval re-initialisation.; ; Temporary mag data ticker added to test date change and file name change timing at midnight utc.; ; Added forced date check when clock passes midnight.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MAA | 0:b3313c5ffca3 | 1 | #include "SPS.h" |
MAA | 0:b3313c5ffca3 | 2 | |
MAA | 19:5d25cffef662 | 3 | //! SPS, class default constructor |
MAA | 19:5d25cffef662 | 4 | /*! |
MAA | 19:5d25cffef662 | 5 | Initializing different class member values, creating a header string. |
MAA | 19:5d25cffef662 | 6 | */ |
MAA | 0:b3313c5ffca3 | 7 | SPS::SPS(){ |
MAA | 2:39c4a85dc2a4 | 8 | |
MAA | 6:6d1683c8b26b | 9 | fileNameString = ""; |
MAA | 2:39c4a85dc2a4 | 10 | currentString = ""; |
MAA | 2:39c4a85dc2a4 | 11 | currentErrString = ""; |
MAA | 6:6d1683c8b26b | 12 | lastString = ""; |
MAA | 24:099df3fa2b13 | 13 | headerString = ""; |
MAA | 5:11782a2008c2 | 14 | crc_tab16_init = 0; |
MAA | 5:11782a2008c2 | 15 | errStatus = true; |
MAA | 2:39c4a85dc2a4 | 16 | |
MAA | 2:39c4a85dc2a4 | 17 | }; |
MAA | 2:39c4a85dc2a4 | 18 | |
MAA | 19:5d25cffef662 | 19 | |
MAA | 19:5d25cffef662 | 20 | //! UpdateCurrentString, sps string creation method, taking data and info as parameters. |
MAA | 19:5d25cffef662 | 21 | /*! |
MAA | 19:5d25cffef662 | 22 | |
MAA | 19:5d25cffef662 | 23 | Generates an sps string containing everything needed in a BMAG sps string including crc, brackets etc. |
MAA | 19:5d25cffef662 | 24 | |
MAA | 19:5d25cffef662 | 25 | \param tag: string containing the tag for the sps logging unit eg. "BMAG" |
MAA | 19:5d25cffef662 | 26 | \param identifier_id: string containing the identifier id of the unit. |
MAA | 19:5d25cffef662 | 27 | \param group_id: string containing the group id of the unit. |
MAA | 19:5d25cffef662 | 28 | \param date: string containing the date in the format "YYYY/MM/DD" |
MAA | 19:5d25cffef662 | 29 | \param time: string containing the current time in format "HH:MM:SS.FFF" |
MAA | 19:5d25cffef662 | 30 | \param ZZZ: string containing "ZZZ" :) |
MAA | 23:2e914b705b99 | 31 | \param encoding: string containing encoding as described in the *.sps documentation |
MAA | 19:5d25cffef662 | 32 | \param source_id: string containing the source id of the unit eg. "0000" |
MAA | 19:5d25cffef662 | 33 | \param interpreter_id: string containing the interpreter id of the unit eg. "00" |
MAA | 19:5d25cffef662 | 34 | \param data_line_version: string containing data line version as described in the *.sps documentation, eg. "01" |
MAA | 19:5d25cffef662 | 35 | \param source_firmware_version: string containing the firmware version of the unit eg. "1.2" |
MAA | 19:5d25cffef662 | 36 | \param barcode: string containing the barcode of the unit, eg. "12345" |
MAA | 19:5d25cffef662 | 37 | \param latitude: string containing the latitude of the unit in decimal degrees. For further info read the *.sps documentation. |
MAA | 19:5d25cffef662 | 38 | \param longitude: string containing the longitude of the unit in decimal degrees. For further info read the *.sps documentation. |
MAA | 19:5d25cffef662 | 39 | \param gpsFixFlag: bool containing the gps fix status, 1 if gps fix is present, else 0. |
MAA | 19:5d25cffef662 | 40 | \param batteryvoltage: string containing the battery voltage of the units battery pack, eg. "14.2" |
MAA | 28:ed0d29f63b55 | 41 | \param preassure: string containing preassure measurement in hPa |
MAA | 28:ed0d29f63b55 | 42 | \param temperature: string containing temperature measured in deg C |
MAA | 28:ed0d29f63b55 | 43 | \param humidity: string containing air humidity percentage |
MAA | 19:5d25cffef662 | 44 | \param mag_time: string containing the last timestamp received from GSM-19 device eg. "000048.0" |
MAA | 19:5d25cffef662 | 45 | \param mag_nt: string containing the last mag measurement in nT eg. "036418.77" |
MAA | 19:5d25cffef662 | 46 | \param mag_sq: string containing info about the measurement quality of the last mag measurement eg. "99" |
MAA | 19:5d25cffef662 | 47 | |
MAA | 19:5d25cffef662 | 48 | */ |
MAA | 28:ed0d29f63b55 | 49 | void SPS::UpdateCurrentString(string tag, string identifier_id, string group_id, string date, string time, string ZZZ,string encoding, string source_id, string interpreter_id, string data_line_version, string source_firmware_version, string interpreter_firmware_version, string barcode, string latitude, string longitude, bool gpsFixFlag, string batteryvoltage, string preassure, string temperature, string humidity, string mag_time, string mag_nt, string mag_sq, Serial * dbg){ |
MAA | 2:39c4a85dc2a4 | 50 | |
MAA | 21:325cb82f1838 | 51 | this->currentString = ""; |
MAA | 21:325cb82f1838 | 52 | this->currentString.resize(256); |
MAA | 21:325cb82f1838 | 53 | |
MAA | 21:325cb82f1838 | 54 | int strLength = 0; |
MAA | 5:11782a2008c2 | 55 | char checkSum[5]; |
MAA | 5:11782a2008c2 | 56 | memset(checkSum,'\0',5); |
MAA | 5:11782a2008c2 | 57 | unsigned short chkSum = 0; |
MAA | 0:b3313c5ffca3 | 58 | |
MAA | 5:11782a2008c2 | 59 | addToCurrentString(LINESTART); |
MAA | 5:11782a2008c2 | 60 | addToCurrentString(tag); |
MAA | 5:11782a2008c2 | 61 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 62 | addToCurrentString(identifier_id); |
MAA | 5:11782a2008c2 | 63 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 64 | addToCurrentString(group_id); |
MAA | 5:11782a2008c2 | 65 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 66 | addToCurrentString(date); |
MAA | 5:11782a2008c2 | 67 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 68 | addToCurrentString(time); |
MAA | 25:57f9e3273979 | 69 | addToCurrentString(SPACE); |
MAA | 25:57f9e3273979 | 70 | if(!gpsFixFlag){ |
MAA | 25:57f9e3273979 | 71 | addToCurrentString("NOC"); |
MAA | 25:57f9e3273979 | 72 | } |
MAA | 25:57f9e3273979 | 73 | if(gpsFixFlag){ |
MAA | 25:57f9e3273979 | 74 | addToCurrentString("ZZZ"); |
MAA | 25:57f9e3273979 | 75 | } |
MAA | 5:11782a2008c2 | 76 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 77 | addToCurrentString(HEADEREND); |
MAA | 5:11782a2008c2 | 78 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 79 | addToCurrentString(source_id); |
MAA | 5:11782a2008c2 | 80 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 81 | addToCurrentString(interpreter_id); |
MAA | 5:11782a2008c2 | 82 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 83 | addToCurrentString(data_line_version); |
MAA | 5:11782a2008c2 | 84 | addToCurrentString(SPACE); |
MAA | 23:2e914b705b99 | 85 | addToCurrentString(encoding); |
MAA | 23:2e914b705b99 | 86 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 87 | addToCurrentString(source_firmware_version); |
MAA | 5:11782a2008c2 | 88 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 89 | addToCurrentString(interpreter_firmware_version); |
MAA | 5:11782a2008c2 | 90 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 91 | addToCurrentString(HEADEREND); |
MAA | 5:11782a2008c2 | 92 | addToCurrentString(SPACE); |
MAA | 8:d6287c33b54a | 93 | addToCurrentString(barcode); |
MAA | 8:d6287c33b54a | 94 | addToCurrentString(SPACE); |
MAA | 24:099df3fa2b13 | 95 | if(gpsFixFlag){ |
MAA | 24:099df3fa2b13 | 96 | addToCurrentString(latitude); |
MAA | 24:099df3fa2b13 | 97 | } |
MAA | 30:072e918663b8 | 98 | if(!gpsFixFlag || (strlen(latitude.c_str()) < 5)){ |
MAA | 24:099df3fa2b13 | 99 | addToCurrentString("NaN"); |
MAA | 24:099df3fa2b13 | 100 | } |
MAA | 5:11782a2008c2 | 101 | addToCurrentString(SPACE); |
MAA | 25:57f9e3273979 | 102 | if(gpsFixFlag && (strlen(longitude.c_str()) > 5)){ |
MAA | 24:099df3fa2b13 | 103 | addToCurrentString(longitude); |
MAA | 24:099df3fa2b13 | 104 | } |
MAA | 25:57f9e3273979 | 105 | if(!gpsFixFlag || (strlen(longitude.c_str()) < 5)){ |
MAA | 24:099df3fa2b13 | 106 | addToCurrentString("NaN"); |
MAA | 24:099df3fa2b13 | 107 | } |
MAA | 24:099df3fa2b13 | 108 | addToCurrentString(SPACE); |
MAA | 30:072e918663b8 | 109 | |
MAA | 5:11782a2008c2 | 110 | if(gpsFixFlag){ |
MAA | 5:11782a2008c2 | 111 | addToCurrentString('1'); |
MAA | 5:11782a2008c2 | 112 | } |
MAA | 5:11782a2008c2 | 113 | if(!gpsFixFlag){ |
MAA | 5:11782a2008c2 | 114 | addToCurrentString('0'); |
MAA | 5:11782a2008c2 | 115 | } |
MAA | 5:11782a2008c2 | 116 | addToCurrentString(SPACE); |
MAA | 8:d6287c33b54a | 117 | addToCurrentString(batteryvoltage); |
MAA | 8:d6287c33b54a | 118 | addToCurrentString(SPACE); |
MAA | 28:ed0d29f63b55 | 119 | addToCurrentString(preassure); |
MAA | 28:ed0d29f63b55 | 120 | addToCurrentString(SPACE); |
MAA | 28:ed0d29f63b55 | 121 | addToCurrentString(temperature); |
MAA | 28:ed0d29f63b55 | 122 | addToCurrentString(SPACE); |
MAA | 28:ed0d29f63b55 | 123 | addToCurrentString(humidity); |
MAA | 28:ed0d29f63b55 | 124 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 125 | addToCurrentString(mag_time); |
MAA | 5:11782a2008c2 | 126 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 127 | addToCurrentString(mag_nt); |
MAA | 5:11782a2008c2 | 128 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 129 | addToCurrentString(mag_sq); |
MAA | 5:11782a2008c2 | 130 | |
MAA | 21:325cb82f1838 | 131 | |
MAA | 21:325cb82f1838 | 132 | strLength = strlen(this->currentString.c_str()); |
MAA | 21:325cb82f1838 | 133 | |
MAA | 2:39c4a85dc2a4 | 134 | //calculate checksum |
MAA | 21:325cb82f1838 | 135 | for(int i = 0; i < strLength; i++){ |
MAA | 21:325cb82f1838 | 136 | if(this->currentString[i] != '>'){ |
MAA | 5:11782a2008c2 | 137 | |
MAA | 21:325cb82f1838 | 138 | chkSum = update_crc_16(chkSum, this->currentString[i]); |
MAA | 5:11782a2008c2 | 139 | |
MAA | 5:11782a2008c2 | 140 | } |
MAA | 5:11782a2008c2 | 141 | } |
MAA | 5:11782a2008c2 | 142 | |
MAA | 6:6d1683c8b26b | 143 | sprintf(checkSum, "%04X", chkSum); |
MAA | 21:325cb82f1838 | 144 | |
MAA | 2:39c4a85dc2a4 | 145 | //append rest of string |
MAA | 5:11782a2008c2 | 146 | addToCurrentString(SPACE); |
MAA | 5:11782a2008c2 | 147 | addToCurrentString(checkSum); |
MAA | 8:d6287c33b54a | 148 | addToCurrentString(LINESTOP); |
MAA | 2:39c4a85dc2a4 | 149 | }; |
MAA | 2:39c4a85dc2a4 | 150 | |
MAA | 26:68277a308839 | 151 | //! UpdateHeaderString, header / RMRK update method |
MAA | 26:68277a308839 | 152 | /*! |
MAA | 26:68277a308839 | 153 | |
MAA | 26:68277a308839 | 154 | Updates header / RMRK string |
MAA | 26:68277a308839 | 155 | |
MAA | 26:68277a308839 | 156 | \param identifier_id: string containing the identifier id of the unit. |
MAA | 26:68277a308839 | 157 | \param group_id: string containing the group id of the unit. |
MAA | 26:68277a308839 | 158 | \param ZZZ: string containing "ZZZ" :) |
MAA | 26:68277a308839 | 159 | \param encoding: string containing encoding as described in the *.sps documentation |
MAA | 26:68277a308839 | 160 | \param source_id: string containing the source id of the unit eg. "0000" |
MAA | 26:68277a308839 | 161 | \param interpreter_id: string containing the interpreter id of the unit eg. "00" |
MAA | 26:68277a308839 | 162 | \param data_line_version: string containing data line version as described in the *.sps documentation, eg. "01" |
MAA | 26:68277a308839 | 163 | \param source_firmware_version: string containing the firmware version of the unit eg. "1.2" |
MAA | 26:68277a308839 | 164 | \param barcode: string containing the barcode of the unit, eg. "12345" |
MAA | 26:68277a308839 | 165 | \param interpreter_firmware_version: string containing interpreter firmware version |
MAA | 26:68277a308839 | 166 | |
MAA | 26:68277a308839 | 167 | */ |
MAA | 24:099df3fa2b13 | 168 | void SPS::UpdateHeaderString(string barcode, string identifier_id, string group_id, string ZZZ, string encoding,string source_id, string interpreter_id, string data_line_version, string source_firmware_version, string interpreter_firmware_version){ |
MAA | 19:5d25cffef662 | 169 | |
MAA | 24:099df3fa2b13 | 170 | this->headerString = ""; |
MAA | 24:099df3fa2b13 | 171 | this->headerString.resize(256); |
MAA | 24:099df3fa2b13 | 172 | |
MAA | 24:099df3fa2b13 | 173 | int strLength = 0; |
MAA | 24:099df3fa2b13 | 174 | char checkSum[5]; |
MAA | 24:099df3fa2b13 | 175 | memset(checkSum,'\0',5); |
MAA | 24:099df3fa2b13 | 176 | unsigned short chkSum = 0; |
MAA | 24:099df3fa2b13 | 177 | |
MAA | 24:099df3fa2b13 | 178 | addToCurrentHeaderString(LINESTART); |
MAA | 24:099df3fa2b13 | 179 | addToCurrentHeaderString("RMRK"); |
MAA | 24:099df3fa2b13 | 180 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 181 | addToCurrentHeaderString(identifier_id); |
MAA | 24:099df3fa2b13 | 182 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 183 | addToCurrentHeaderString(group_id); |
MAA | 24:099df3fa2b13 | 184 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 185 | addToCurrentHeaderString("0000/00/00"); |
MAA | 24:099df3fa2b13 | 186 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 187 | addToCurrentHeaderString("00:00:00.000"); |
MAA | 24:099df3fa2b13 | 188 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 189 | addToCurrentHeaderString("ZZZ"); |
MAA | 24:099df3fa2b13 | 190 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 191 | addToCurrentHeaderString(HEADEREND); |
MAA | 24:099df3fa2b13 | 192 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 193 | addToCurrentHeaderString(source_id); |
MAA | 24:099df3fa2b13 | 194 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 195 | addToCurrentHeaderString(interpreter_id); |
MAA | 24:099df3fa2b13 | 196 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 197 | addToCurrentHeaderString("01"); |
MAA | 24:099df3fa2b13 | 198 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 199 | addToCurrentHeaderString(encoding); |
MAA | 24:099df3fa2b13 | 200 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 201 | addToCurrentHeaderString(source_firmware_version); |
MAA | 24:099df3fa2b13 | 202 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 203 | addToCurrentHeaderString(interpreter_firmware_version); |
MAA | 24:099df3fa2b13 | 204 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 205 | addToCurrentHeaderString(HEADEREND); |
MAA | 24:099df3fa2b13 | 206 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 207 | addToCurrentHeaderString("Barcode"); |
MAA | 24:099df3fa2b13 | 208 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 209 | addToCurrentHeaderString("Latitude"); |
MAA | 24:099df3fa2b13 | 210 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 211 | addToCurrentHeaderString("Longitude"); |
MAA | 24:099df3fa2b13 | 212 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 213 | addToCurrentHeaderString("gpsFixFlag"); |
MAA | 24:099df3fa2b13 | 214 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 215 | addToCurrentHeaderString("batteryVoltage"); |
MAA | 24:099df3fa2b13 | 216 | addToCurrentHeaderString(SPACE); |
MAA | 28:ed0d29f63b55 | 217 | addToCurrentHeaderString("preassure"); |
MAA | 28:ed0d29f63b55 | 218 | addToCurrentHeaderString(SPACE); |
MAA | 28:ed0d29f63b55 | 219 | addToCurrentHeaderString("temperature"); |
MAA | 28:ed0d29f63b55 | 220 | addToCurrentHeaderString(SPACE); |
MAA | 28:ed0d29f63b55 | 221 | addToCurrentHeaderString("humidity"); |
MAA | 28:ed0d29f63b55 | 222 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 223 | addToCurrentHeaderString("mag_time"); |
MAA | 24:099df3fa2b13 | 224 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 225 | addToCurrentHeaderString("mag_value"); |
MAA | 24:099df3fa2b13 | 226 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 227 | addToCurrentHeaderString("mag_quality"); |
MAA | 24:099df3fa2b13 | 228 | |
MAA | 24:099df3fa2b13 | 229 | |
MAA | 24:099df3fa2b13 | 230 | strLength = strlen(this->headerString.c_str()); |
MAA | 24:099df3fa2b13 | 231 | |
MAA | 24:099df3fa2b13 | 232 | //calculate checksum |
MAA | 24:099df3fa2b13 | 233 | for(int i = 0; i < strLength; i++){ |
MAA | 24:099df3fa2b13 | 234 | if(this->headerString[i] != '>'){ |
MAA | 24:099df3fa2b13 | 235 | |
MAA | 24:099df3fa2b13 | 236 | chkSum = update_crc_16(chkSum, this->headerString[i]); |
MAA | 24:099df3fa2b13 | 237 | |
MAA | 24:099df3fa2b13 | 238 | } |
MAA | 24:099df3fa2b13 | 239 | } |
MAA | 24:099df3fa2b13 | 240 | |
MAA | 24:099df3fa2b13 | 241 | sprintf(checkSum, "%04X", chkSum); |
MAA | 24:099df3fa2b13 | 242 | |
MAA | 24:099df3fa2b13 | 243 | //append rest of string |
MAA | 24:099df3fa2b13 | 244 | addToCurrentHeaderString(SPACE); |
MAA | 24:099df3fa2b13 | 245 | addToCurrentHeaderString(checkSum); |
MAA | 24:099df3fa2b13 | 246 | addToCurrentHeaderString(LINESTOP); |
MAA | 24:099df3fa2b13 | 247 | } |
MAA | 19:5d25cffef662 | 248 | |
MAA | 19:5d25cffef662 | 249 | //! UpdateCurrentErrString, sps ERR string creation method, taking data and info as parameters. |
MAA | 19:5d25cffef662 | 250 | /*! |
MAA | 19:5d25cffef662 | 251 | |
MAA | 19:5d25cffef662 | 252 | Generates the current sps ERR string containing everything needed in a BMAG sps string including crc, brackets etc. |
MAA | 19:5d25cffef662 | 253 | |
MAA | 19:5d25cffef662 | 254 | \param tag: string containing the tag for the sps logging unit eg. "BMAG" |
MAA | 19:5d25cffef662 | 255 | \param identifier_id: string containing the identifier id of the unit. |
MAA | 19:5d25cffef662 | 256 | \param group_id: string containing the group id of the unit. |
MAA | 19:5d25cffef662 | 257 | \param date: string containing the date in the format "YYYY/MM/DD" |
MAA | 19:5d25cffef662 | 258 | \param time: string containing the current time in format "HH:MM:SS.FFF" |
MAA | 19:5d25cffef662 | 259 | \param ZZZ: string containing "ZZZ" :) |
MAA | 23:2e914b705b99 | 260 | \param encoding: string containing encoding as described in the *.sps documentation |
MAA | 19:5d25cffef662 | 261 | \param source_id: string containing the source id of the unit eg. "0000" |
MAA | 19:5d25cffef662 | 262 | \param interpreter_id: string containing the interpreter id of the unit eg. "00" |
MAA | 19:5d25cffef662 | 263 | \param data_line_version: string containing data line version as described in the *.sps documentation, eg. "01" |
MAA | 19:5d25cffef662 | 264 | \param source_firmware_version: string containing the firmware version of the unit eg. "1.2" |
MAA | 19:5d25cffef662 | 265 | \param barcode: string containing the barcode of the unit, eg. "12345" |
MAA | 19:5d25cffef662 | 266 | \param latitude: string containing the latitude of the unit in decimal degrees. For further info read the *.sps documentation. |
MAA | 19:5d25cffef662 | 267 | \param longitude: string containing the longitude of the unit in decimal degrees. For further info read the *.sps documentation. |
MAA | 19:5d25cffef662 | 268 | \param gpsFixFlag: bool containing the gps fix status, 1 if gps fix is present, else 0. |
MAA | 19:5d25cffef662 | 269 | \param mag_time: string containing the last timestamp received from GSM-19 device eg. "000048.0" |
MAA | 19:5d25cffef662 | 270 | \param mag_nt: string containing the last mag measurement in nT eg. "036418.77" |
MAA | 19:5d25cffef662 | 271 | \param mag_sq: string containing info about the measurement quality of the last mag measurement eg. "99" |
MAA | 19:5d25cffef662 | 272 | |
MAA | 19:5d25cffef662 | 273 | */ |
MAA | 23:2e914b705b99 | 274 | void SPS::UpdateCurrentErrString(string tag, string identifier_id, string group_id, string date, string time, string ZZZ,string encoding, string source_id, string interpreter_id, string data_line_version, string source_firmware_version, string interpreter_firmware_version, string latitude, string longitude, bool gpsFixFlag, string mag_time, string mag_nt, string mag_sq, Serial * dbg){ |
MAA | 7:872984a67d5b | 275 | |
MAA | 21:325cb82f1838 | 276 | this->currentErrString = ""; |
MAA | 21:325cb82f1838 | 277 | this->currentErrString.resize(256); |
MAA | 7:872984a67d5b | 278 | char checkSum[5]; |
MAA | 7:872984a67d5b | 279 | memset(checkSum,'\0',5); |
MAA | 7:872984a67d5b | 280 | unsigned short chkSum = 0; |
MAA | 24:099df3fa2b13 | 281 | int strLength = 0; |
MAA | 7:872984a67d5b | 282 | |
MAA | 7:872984a67d5b | 283 | addToCurrentErrString(LINESTART); |
MAA | 7:872984a67d5b | 284 | addToCurrentErrString(tag); |
MAA | 7:872984a67d5b | 285 | addToCurrentErrString(SPACE); |
MAA | 7:872984a67d5b | 286 | addToCurrentErrString(identifier_id); |
MAA | 7:872984a67d5b | 287 | addToCurrentErrString(SPACE); |
MAA | 7:872984a67d5b | 288 | addToCurrentErrString(group_id); |
MAA | 7:872984a67d5b | 289 | addToCurrentErrString(SPACE); |
MAA | 7:872984a67d5b | 290 | addToCurrentErrString(date); |
MAA | 7:872984a67d5b | 291 | addToCurrentErrString(SPACE); |
MAA | 7:872984a67d5b | 292 | addToCurrentErrString(time); |
MAA | 25:57f9e3273979 | 293 | addToCurrentErrString(SPACE); |
MAA | 25:57f9e3273979 | 294 | addToCurrentErrString("ZZZ"); |
MAA | 24:099df3fa2b13 | 295 | addToCurrentErrString(SPACE); |
MAA | 24:099df3fa2b13 | 296 | addToCurrentErrString(HEADEREND); |
MAA | 25:57f9e3273979 | 297 | addToCurrentErrString(SPACE); |
MAA | 24:099df3fa2b13 | 298 | addToCurrentErrString(source_id); |
MAA | 24:099df3fa2b13 | 299 | addToCurrentErrString(SPACE); |
MAA | 24:099df3fa2b13 | 300 | addToCurrentErrString(interpreter_id); |
MAA | 24:099df3fa2b13 | 301 | addToCurrentErrString(SPACE); |
MAA | 25:57f9e3273979 | 302 | addToCurrentErrString("02"); |
MAA | 24:099df3fa2b13 | 303 | addToCurrentErrString(SPACE); |
MAA | 24:099df3fa2b13 | 304 | addToCurrentErrString(encoding); |
MAA | 24:099df3fa2b13 | 305 | addToCurrentErrString(SPACE); |
MAA | 24:099df3fa2b13 | 306 | addToCurrentErrString(source_firmware_version); |
MAA | 24:099df3fa2b13 | 307 | addToCurrentErrString(SPACE); |
MAA | 24:099df3fa2b13 | 308 | addToCurrentErrString(interpreter_firmware_version); |
MAA | 24:099df3fa2b13 | 309 | addToCurrentErrString(SPACE); |
MAA | 7:872984a67d5b | 310 | addToCurrentErrString(HEADEREND); |
MAA | 7:872984a67d5b | 311 | addToCurrentErrString(SPACE); |
MAA | 7:872984a67d5b | 312 | addToCurrentErrString("BMAG"); |
MAA | 25:57f9e3273979 | 313 | if(!gpsFixFlag){ |
MAA | 25:57f9e3273979 | 314 | addToCurrentErrString(SPACE); |
MAA | 25:57f9e3273979 | 315 | addToCurrentErrString("RTC"); |
MAA | 25:57f9e3273979 | 316 | } |
MAA | 7:872984a67d5b | 317 | addToCurrentErrString(SPACE); |
MAA | 7:872984a67d5b | 318 | addToCurrentErrString("C02"); |
MAA | 7:872984a67d5b | 319 | addToCurrentErrString(SPACE); |
MAA | 7:872984a67d5b | 320 | addToCurrentErrString("C03"); |
MAA | 7:872984a67d5b | 321 | |
MAA | 24:099df3fa2b13 | 322 | strLength = strlen(this->currentErrString.c_str()); |
MAA | 24:099df3fa2b13 | 323 | |
MAA | 7:872984a67d5b | 324 | //calculate checksum |
MAA | 24:099df3fa2b13 | 325 | for(int i = 0; i < strLength; i++){ |
MAA | 24:099df3fa2b13 | 326 | if(this->currentErrString[i] != '>'){ |
MAA | 7:872984a67d5b | 327 | |
MAA | 21:325cb82f1838 | 328 | chkSum = update_crc_16(chkSum, this->currentErrString[i]); |
MAA | 7:872984a67d5b | 329 | |
MAA | 7:872984a67d5b | 330 | } |
MAA | 7:872984a67d5b | 331 | } |
MAA | 21:325cb82f1838 | 332 | |
MAA | 7:872984a67d5b | 333 | sprintf(checkSum, "%04X", chkSum); |
MAA | 7:872984a67d5b | 334 | |
MAA | 7:872984a67d5b | 335 | //append rest of string |
MAA | 7:872984a67d5b | 336 | addToCurrentErrString(SPACE); |
MAA | 7:872984a67d5b | 337 | addToCurrentErrString(checkSum); |
MAA | 8:d6287c33b54a | 338 | addToCurrentErrString(LINESTOP); |
MAA | 7:872984a67d5b | 339 | }; |
MAA | 7:872984a67d5b | 340 | |
MAA | 19:5d25cffef662 | 341 | //! init_crc16_tab, creates a crc tab. |
MAA | 19:5d25cffef662 | 342 | /*! |
MAA | 19:5d25cffef662 | 343 | Populates a crc array for later use |
MAA | 19:5d25cffef662 | 344 | */ |
MAA | 4:c70ef089a3fd | 345 | void SPS::init_crc16_tab() |
MAA | 4:c70ef089a3fd | 346 | { |
MAA | 4:c70ef089a3fd | 347 | int i, j; |
MAA | 4:c70ef089a3fd | 348 | unsigned short crc, c; |
MAA | 4:c70ef089a3fd | 349 | |
MAA | 4:c70ef089a3fd | 350 | for (i = 0; i < 256; i++) |
MAA | 4:c70ef089a3fd | 351 | { |
MAA | 4:c70ef089a3fd | 352 | crc = 0; |
MAA | 4:c70ef089a3fd | 353 | c = (unsigned short) i; |
MAA | 4:c70ef089a3fd | 354 | |
MAA | 4:c70ef089a3fd | 355 | for (j = 0; j < 8; j++) |
MAA | 4:c70ef089a3fd | 356 | { |
MAA | 4:c70ef089a3fd | 357 | if ((crc ^ c) & 0x0001) |
MAA | 4:c70ef089a3fd | 358 | crc = (crc >> 1) ^ P_16; |
MAA | 4:c70ef089a3fd | 359 | else |
MAA | 4:c70ef089a3fd | 360 | crc = crc >> 1; |
MAA | 4:c70ef089a3fd | 361 | |
MAA | 4:c70ef089a3fd | 362 | c = c >> 1; |
MAA | 4:c70ef089a3fd | 363 | } |
MAA | 4:c70ef089a3fd | 364 | crc_tab16[i] = crc; |
MAA | 4:c70ef089a3fd | 365 | } |
MAA | 4:c70ef089a3fd | 366 | crc_tab16_init = 1; |
MAA | 4:c70ef089a3fd | 367 | }; |
MAA | 4:c70ef089a3fd | 368 | |
MAA | 4:c70ef089a3fd | 369 | |
MAA | 19:5d25cffef662 | 370 | |
MAA | 19:5d25cffef662 | 371 | //! update_crc_16, updates crc tab. |
MAA | 19:5d25cffef662 | 372 | /*! |
MAA | 20:73fa202c73db | 373 | \param crc: the crc currently getting calculated |
MAA | 20:73fa202c73db | 374 | \param c: next character to be part of crc |
MAA | 19:5d25cffef662 | 375 | \return returns crc value |
MAA | 19:5d25cffef662 | 376 | */ |
MAA | 4:c70ef089a3fd | 377 | unsigned short SPS::update_crc_16(unsigned short crc, char c) |
MAA | 4:c70ef089a3fd | 378 | { |
MAA | 4:c70ef089a3fd | 379 | unsigned short tmp, short_c; |
MAA | 4:c70ef089a3fd | 380 | |
MAA | 4:c70ef089a3fd | 381 | short_c = 0x00ff & (unsigned short) c; |
MAA | 4:c70ef089a3fd | 382 | |
MAA | 4:c70ef089a3fd | 383 | if (!crc_tab16_init) |
MAA | 4:c70ef089a3fd | 384 | init_crc16_tab(); |
MAA | 21:325cb82f1838 | 385 | |
MAA | 4:c70ef089a3fd | 386 | |
MAA | 4:c70ef089a3fd | 387 | tmp = crc ^ short_c; |
MAA | 4:c70ef089a3fd | 388 | crc = (crc >> 8) ^ crc_tab16[tmp & 0xff]; |
MAA | 4:c70ef089a3fd | 389 | |
MAA | 4:c70ef089a3fd | 390 | return crc; |
MAA | 4:c70ef089a3fd | 391 | }; |
MAA | 5:11782a2008c2 | 392 | |
MAA | 5:11782a2008c2 | 393 | |
MAA | 20:73fa202c73db | 394 | |
MAA | 20:73fa202c73db | 395 | //! getCurrentString, returns the current sps data string |
MAA | 20:73fa202c73db | 396 | /*! |
MAA | 20:73fa202c73db | 397 | \return returns current sps data string |
MAA | 20:73fa202c73db | 398 | */ |
MAA | 5:11782a2008c2 | 399 | string SPS::getCurrentString(void){ |
MAA | 5:11782a2008c2 | 400 | return this->currentString; |
MAA | 5:11782a2008c2 | 401 | }; |
MAA | 5:11782a2008c2 | 402 | |
MAA | 5:11782a2008c2 | 403 | |
MAA | 20:73fa202c73db | 404 | //! getErrStatus, returns the current error status flag |
MAA | 20:73fa202c73db | 405 | /*! |
MAA | 20:73fa202c73db | 406 | \return returns the current error status flag (bool) |
MAA | 20:73fa202c73db | 407 | */ |
MAA | 5:11782a2008c2 | 408 | bool SPS::getErrStatus(void){ |
MAA | 5:11782a2008c2 | 409 | return this->errStatus; |
MAA | 5:11782a2008c2 | 410 | }; |
MAA | 5:11782a2008c2 | 411 | |
MAA | 20:73fa202c73db | 412 | //! setErrStatus, sets error status flag |
MAA | 20:73fa202c73db | 413 | /*! |
MAA | 20:73fa202c73db | 414 | \param status: boolean value assigned to errorStatus |
MAA | 20:73fa202c73db | 415 | */ |
MAA | 5:11782a2008c2 | 416 | void SPS::setErrStatus(bool status){ |
MAA | 5:11782a2008c2 | 417 | this->errStatus = status; |
MAA | 5:11782a2008c2 | 418 | }; |
MAA | 5:11782a2008c2 | 419 | |
MAA | 20:73fa202c73db | 420 | //! getHeaderString, getter method, returning header string for *.sps file |
MAA | 20:73fa202c73db | 421 | /*! |
MAA | 20:73fa202c73db | 422 | \return returns the header string for the *.sps file |
MAA | 20:73fa202c73db | 423 | */ |
MAA | 5:11782a2008c2 | 424 | string SPS::getHeaderString(void){ |
MAA | 5:11782a2008c2 | 425 | return this->headerString; |
MAA | 5:11782a2008c2 | 426 | }; |
MAA | 5:11782a2008c2 | 427 | |
MAA | 5:11782a2008c2 | 428 | //add data to current string |
MAA | 20:73fa202c73db | 429 | //! addToCurrentString, appends string of data to the sps string currently being manipulated. |
MAA | 20:73fa202c73db | 430 | /*! |
MAA | 20:73fa202c73db | 431 | \param data: string containing data |
MAA | 20:73fa202c73db | 432 | */ |
MAA | 5:11782a2008c2 | 433 | void SPS::addToCurrentString(string data){ |
MAA | 21:325cb82f1838 | 434 | int currentStartIndex = strlen(this->currentString.c_str()); |
MAA | 5:11782a2008c2 | 435 | char dataStrLen = 0; |
MAA | 8:d6287c33b54a | 436 | int index = 0; |
MAA | 8:d6287c33b54a | 437 | |
MAA | 5:11782a2008c2 | 438 | dataStrLen = strlen(data.c_str()); |
MAA | 5:11782a2008c2 | 439 | |
MAA | 5:11782a2008c2 | 440 | for(int i = 0; i < dataStrLen; i++){ |
MAA | 8:d6287c33b54a | 441 | |
MAA | 21:325cb82f1838 | 442 | if((this->currentString[currentStartIndex+i] != '\r') || (this->currentString[currentStartIndex+i] != '\n')){ |
MAA | 8:d6287c33b54a | 443 | |
MAA | 21:325cb82f1838 | 444 | this->currentString[currentStartIndex+i] = data[index]; |
MAA | 8:d6287c33b54a | 445 | index += 1; |
MAA | 8:d6287c33b54a | 446 | |
MAA | 8:d6287c33b54a | 447 | } |
MAA | 8:d6287c33b54a | 448 | |
MAA | 5:11782a2008c2 | 449 | } |
MAA | 5:11782a2008c2 | 450 | } |
MAA | 5:11782a2008c2 | 451 | |
MAA | 20:73fa202c73db | 452 | //! addToCurrentString, appends char to the sps string currently being manipulated. |
MAA | 20:73fa202c73db | 453 | /*! |
MAA | 20:73fa202c73db | 454 | \param data: data character |
MAA | 20:73fa202c73db | 455 | */ |
MAA | 5:11782a2008c2 | 456 | void SPS::addToCurrentString(char data){ |
MAA | 21:325cb82f1838 | 457 | int currentStartIndex = strlen(this->currentString.c_str()); |
MAA | 21:325cb82f1838 | 458 | this->currentString[currentStartIndex] = data; |
MAA | 6:6d1683c8b26b | 459 | }; |
MAA | 6:6d1683c8b26b | 460 | |
MAA | 24:099df3fa2b13 | 461 | |
MAA | 26:68277a308839 | 462 | |
MAA | 26:68277a308839 | 463 | //! addToCurrentHeaderString, appends string to the current header string |
MAA | 26:68277a308839 | 464 | /*! |
MAA | 26:68277a308839 | 465 | \param data: data string |
MAA | 26:68277a308839 | 466 | */ |
MAA | 24:099df3fa2b13 | 467 | void SPS::addToCurrentHeaderString(string data){ |
MAA | 24:099df3fa2b13 | 468 | int currentStartIndex = strlen(this->headerString.c_str()); |
MAA | 24:099df3fa2b13 | 469 | char dataStrLen = 0; |
MAA | 24:099df3fa2b13 | 470 | int index = 0; |
MAA | 24:099df3fa2b13 | 471 | |
MAA | 24:099df3fa2b13 | 472 | dataStrLen = strlen(data.c_str()); |
MAA | 24:099df3fa2b13 | 473 | |
MAA | 24:099df3fa2b13 | 474 | for(int i = 0; i < dataStrLen; i++){ |
MAA | 24:099df3fa2b13 | 475 | |
MAA | 24:099df3fa2b13 | 476 | if((this->headerString[currentStartIndex+i] != '\r') || (this->headerString[currentStartIndex+i] != '\n')){ |
MAA | 24:099df3fa2b13 | 477 | |
MAA | 24:099df3fa2b13 | 478 | this->headerString[currentStartIndex+i] = data[index]; |
MAA | 24:099df3fa2b13 | 479 | index += 1; |
MAA | 24:099df3fa2b13 | 480 | |
MAA | 24:099df3fa2b13 | 481 | } |
MAA | 24:099df3fa2b13 | 482 | |
MAA | 24:099df3fa2b13 | 483 | } |
MAA | 24:099df3fa2b13 | 484 | }; |
MAA | 24:099df3fa2b13 | 485 | |
MAA | 24:099df3fa2b13 | 486 | |
MAA | 26:68277a308839 | 487 | //! addToCurrentHeaderString, appends char to the current header string |
MAA | 26:68277a308839 | 488 | /*! |
MAA | 26:68277a308839 | 489 | \param data: data char |
MAA | 26:68277a308839 | 490 | */ |
MAA | 24:099df3fa2b13 | 491 | void SPS::addToCurrentHeaderString(char data){ |
MAA | 24:099df3fa2b13 | 492 | int currentStartIndex = strlen(this->headerString.c_str()); |
MAA | 24:099df3fa2b13 | 493 | this->headerString[currentStartIndex] = data; |
MAA | 24:099df3fa2b13 | 494 | }; |
MAA | 24:099df3fa2b13 | 495 | |
MAA | 20:73fa202c73db | 496 | //! addToCurrentErrString, appends string to the sps err_string currently being manipulated. |
MAA | 20:73fa202c73db | 497 | /*! |
MAA | 20:73fa202c73db | 498 | \param data: data string |
MAA | 20:73fa202c73db | 499 | */ |
MAA | 7:872984a67d5b | 500 | void SPS::addToCurrentErrString(string data){ |
MAA | 21:325cb82f1838 | 501 | int currentStartIndex = strlen(this->currentErrString.c_str()); |
MAA | 7:872984a67d5b | 502 | char dataStrLen = 0; |
MAA | 7:872984a67d5b | 503 | dataStrLen = strlen(data.c_str()); |
MAA | 7:872984a67d5b | 504 | |
MAA | 7:872984a67d5b | 505 | for(int i = 0; i < dataStrLen; i++){ |
MAA | 21:325cb82f1838 | 506 | this->currentErrString[currentStartIndex+i] = data[i]; |
MAA | 7:872984a67d5b | 507 | } |
MAA | 7:872984a67d5b | 508 | |
MAA | 7:872984a67d5b | 509 | }; |
MAA | 20:73fa202c73db | 510 | |
MAA | 20:73fa202c73db | 511 | //! addToCurrentErrString, appends a character to the sps err_string currently being manipulated. |
MAA | 20:73fa202c73db | 512 | /*! |
MAA | 20:73fa202c73db | 513 | \param data: data char |
MAA | 20:73fa202c73db | 514 | */ |
MAA | 7:872984a67d5b | 515 | void SPS::addToCurrentErrString(char data){ |
MAA | 7:872984a67d5b | 516 | int currentStartIndex = strlen(currentErrString.c_str()); |
MAA | 7:872984a67d5b | 517 | currentErrString[currentStartIndex] = data; |
MAA | 7:872984a67d5b | 518 | |
MAA | 7:872984a67d5b | 519 | }; |
MAA | 7:872984a67d5b | 520 | |
MAA | 20:73fa202c73db | 521 | //! generateSpsFilename, generates a sps file name, including file postfix, using the current date as input. |
MAA | 20:73fa202c73db | 522 | /*! |
MAA | 44:14ec59d2170c | 523 | \param formattedDate: Date string using a formatted date with format: "YYYY/MM/DD" |
MAA | 20:73fa202c73db | 524 | */ |
MAA | 6:6d1683c8b26b | 525 | void SPS::generateSpsFilename(string formattedDate){ |
MAA | 6:6d1683c8b26b | 526 | |
MAA | 7:872984a67d5b | 527 | fileNameString.resize(25); |
MAA | 6:6d1683c8b26b | 528 | |
MAA | 7:872984a67d5b | 529 | fileNameString.replace(0, 10, "/usb/BMAG_"); |
MAA | 6:6d1683c8b26b | 530 | |
MAA | 7:872984a67d5b | 531 | fileNameString[10] = formattedDate[0]; |
MAA | 7:872984a67d5b | 532 | fileNameString[11] = formattedDate[1]; |
MAA | 7:872984a67d5b | 533 | fileNameString[12] = formattedDate[2]; |
MAA | 7:872984a67d5b | 534 | fileNameString[13] = formattedDate[3]; |
MAA | 7:872984a67d5b | 535 | fileNameString[14] = '-'; |
MAA | 7:872984a67d5b | 536 | fileNameString[15] = formattedDate[5]; |
MAA | 7:872984a67d5b | 537 | fileNameString[16] = formattedDate[6]; |
MAA | 7:872984a67d5b | 538 | fileNameString[17] = '-'; |
MAA | 7:872984a67d5b | 539 | fileNameString[18] = formattedDate[8]; |
MAA | 7:872984a67d5b | 540 | fileNameString[19] = formattedDate[9]; |
MAA | 6:6d1683c8b26b | 541 | |
MAA | 7:872984a67d5b | 542 | fileNameString[20] = '.'; |
MAA | 7:872984a67d5b | 543 | fileNameString[21] = 's'; |
MAA | 7:872984a67d5b | 544 | fileNameString[22] = 'p'; |
MAA | 7:872984a67d5b | 545 | fileNameString[23] = 's'; |
MAA | 6:6d1683c8b26b | 546 | |
MAA | 6:6d1683c8b26b | 547 | }; |
MAA | 6:6d1683c8b26b | 548 | |
MAA | 20:73fa202c73db | 549 | //! getSpsFileName, getter method, returning a *.sps filename based on the formatted date generated using generateSpsFilename(string formattedDate) method. |
MAA | 20:73fa202c73db | 550 | /*! |
MAA | 20:73fa202c73db | 551 | \return fileNameString returns file name including postfix. |
MAA | 20:73fa202c73db | 552 | */ |
MAA | 6:6d1683c8b26b | 553 | string SPS::getSpsFileName(void){ |
MAA | 6:6d1683c8b26b | 554 | |
MAA | 6:6d1683c8b26b | 555 | return this->fileNameString; |
MAA | 6:6d1683c8b26b | 556 | |
MAA | 7:872984a67d5b | 557 | }; |
MAA | 7:872984a67d5b | 558 | |
MAA | 20:73fa202c73db | 559 | //! getCurrentErrString, getter method returning current sps error string |
MAA | 20:73fa202c73db | 560 | /*! |
MAA | 20:73fa202c73db | 561 | \return currentErrString: returns the current sps error string. |
MAA | 20:73fa202c73db | 562 | */ |
MAA | 7:872984a67d5b | 563 | string SPS::getCurrentErrString(void){ |
MAA | 7:872984a67d5b | 564 | return this->currentErrString; |
MAA | 5:11782a2008c2 | 565 | }; |