MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / parse

Function parse

app/rcc/scripts/parser/js/sirf_binary.js:183–223  ·  view source on GitHub ↗

* Parses a SiRF binary message frame into the predefined array structure. * * SiRF binary message structure: * Bytes 0-1: Start sequence (0xA0 0xA2) * Bytes 2-3: Payload length (big-endian, 15 bits) * Byte 4: Message ID * Bytes 5-n: Payload data * Bytes n+1-n+2: Check

(frame)

Source from the content-addressed store, hash-verified

181 * @returns {array} Array of values mapped according to messageIdMap
182 */
183function parse(frame) {
184 if (frame.length < 5)
185 return parsedValues;
186
187 var payloadLength = ((frame[0] & 0x7F) << 8) | frame[1];
188
189 if (frame.length < 2 + payloadLength + 2) {
190 console.error("Incomplete SiRF frame");
191 return parsedValues;
192 }
193
194 var messageId = frame[2];
195
196 var payload = [];
197 for (var i = 2; i < 2 + payloadLength; i++)
198 payload.push(frame[i]);
199
200 var checksumOffset = 2 + payloadLength;
201 var receivedChecksum = ((frame[checksumOffset] & 0x7F) << 8) | frame[checksumOffset + 1];
202
203 if (!validateChecksum(payload, receivedChecksum)) {
204 console.error("SiRF checksum validation failed");
205 return parsedValues;
206 }
207
208 if (!messageIdMap.hasOwnProperty(messageId))
209 return parsedValues;
210
211 var config = messageIdMap[messageId];
212
213 try {
214 var values = config.parser(payload.slice(1));
215 for (var i = 0; i < values.length && i < config.indices.length; i++)
216 parsedValues[config.indices[i]] = values[i];
217 }
218 catch (e) {
219 console.error("SiRF parsing error:", e.message);
220 }
221
222 return parsedValues;
223}

Callers

nothing calls this directly

Calls 3

errorMethod · 0.80
pushMethod · 0.80
validateChecksumFunction · 0.70

Tested by

no test coverage detected