MCPcopy Create free account
hub / github.com/UtilitechAS/amsreader-firmware / parse

Method parse

lib/AmsDecoder/src/DlmsParser.cpp:10–44  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8#include "Cosem.h"
9
10int8_t DLMSParser::parse(uint8_t *buf, DataParserContext &ctx) {
11 if(ctx.length < 6) return DATA_PARSE_INCOMPLETE;
12
13 uint8_t* ptr = buf+1;
14 ptr += 4; // Skip invoke ID and priority
15
16 CosemData* item = (CosemData*) ptr;
17 if(item->base.type == CosemTypeOctetString) {
18 if(item->base.length == 0x0C) {
19 CosemDateTime* dateTime = (CosemDateTime*) (ptr+1);
20 ctx.timestamp = decodeCosemDateTime(*dateTime);
21 }
22 uint8_t len = 5+14;
23 ctx.length -= len;
24 return len;
25 } else if(item->base.type == CosemTypeNull) {
26 ctx.timestamp = 0;
27 uint8_t len = 5+1;
28 ctx.length -= len;
29 return len;
30 } else if(item->base.type == CosemTypeDateTime) {
31 CosemDateTime* dateTime = (CosemDateTime*) (ptr);
32 ctx.timestamp = decodeCosemDateTime(*dateTime);
33 uint8_t len = 5+13;
34 ctx.length -= len;
35 return len;
36 } else if(item->base.type == 0x0C) { // Kamstrup bug...
37 CosemDateTime* dateTime = (CosemDateTime*) (ptr);
38 ctx.timestamp = decodeCosemDateTime(*dateTime);
39 uint8_t len = 5+13;
40 ctx.length -= len;
41 return len;
42 }
43 return DATA_PARSE_UNKNOWN_DATA;
44}

Callers

nothing calls this directly

Calls 1

decodeCosemDateTimeFunction · 0.85

Tested by

no test coverage detected