Bmag incl gps rettelse
Dependencies: mbed WDT MODSERIAL BME280
SPS/SPS.cpp
- Committer:
- MAA
- Date:
- 2017-03-02
- Revision:
- 4:c70ef089a3fd
- Parent:
- 2:39c4a85dc2a4
- Child:
- 5:11782a2008c2
File content as of revision 4:c70ef089a3fd:
#include "SPS.h" SPS::SPS(){ currentString = ""; currentErrString = ""; headerString = "/tag identifier_id group_id date time zzz | s1 source_id interpreter_id data_line_version encoding source_firmware_version interpreter_firmware_version | latitude longitude gpsFixFlag mag_time mag_nt mag_sq checksum"; }; void SPS::UpdateCurrentString(string tag, string identifier_id, string group_id, string date, string time, string ZZZ,string s1, string source_id, string interpreter_id, string data_line_version, string encoding, string source_firmware_version, string interpreter_firmware_version, string latitude, string longitude, char gpsFixFlag, string mag_time, string mag_nt, string mag_sq){ currentString = ""; string checkSum = ""; //create current string currentString.push_back(LINESTART); currentString.append(tag); currentString.push_back(SPACE); currentString.append(identifier_id); currentString.push_back(SPACE); currentString.append(group_id); currentString.push_back(SPACE); currentString.append(date); currentString.push_back(SPACE); currentString.append(time); currentString.push_back(SPACE); currentString.append("ZZZ"); currentString.push_back(SPACE); currentString.push_back(HEADEREND); currentString.push_back(SPACE); currentString.append(s1); currentString.push_back(SPACE); currentString.append(source_id); currentString.push_back(SPACE); currentString.append(interpreter_id); currentString.push_back(SPACE); currentString.append(data_line_version); currentString.push_back(SPACE); currentString.append(encoding); currentString.push_back(SPACE); currentString.append(source_firmware_version); currentString.push_back(SPACE); currentString.append(interpreter_firmware_version); currentString.push_back(SPACE); currentString.push_back(HEADEREND); currentString.push_back(SPACE); currentString.append(latitude); currentString.push_back(SPACE); currentString.append(longitude); currentString.push_back(SPACE); currentString.push_back(gpsFixFlag); currentString.push_back(SPACE); currentString.append(mag_time); currentString.push_back(SPACE); currentString.append(mag_nt); currentString.push_back(SPACE); currentString.append(mag_sq); //calculate checksum checkSum = this->checkSumCalc(); //append rest of string currentString.push_back(SPACE); currentString.append(checkSum); currentString.push_back(LINESTOP); }; //Fills the array for calculation of the CRC-16 with values void SPS::init_crc16_tab() { int i, j; unsigned short crc, c; for (i = 0; i < 256; i++) { crc = 0; c = (unsigned short) i; for (j = 0; j < 8; j++) { if ((crc ^ c) & 0x0001) crc = (crc >> 1) ^ P_16; else crc = crc >> 1; c = c >> 1; } crc_tab16[i] = crc; } crc_tab16_init = 1; }; // The function update_crc_16 calculates a new CRC-16 value based on the // previous value of the CRC and the next byte of the data to be checked. unsigned short SPS::update_crc_16(unsigned short crc, char c) { unsigned short tmp, short_c; short_c = 0x00ff & (unsigned short) c; if (!crc_tab16_init) init_crc16_tab(); tmp = crc ^ short_c; crc = (crc >> 8) ^ crc_tab16[tmp & 0xff]; return crc; }; //***************************************************************************