Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions tests/dumps/hdlc_landis_gyr_e450_cyprus_2.log
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
7E A0 84 CE FF 03 13 12 8B E6 E7 00 E0 40 00 01 00 00 70 0F 00 08 B6 7A 0C 07 EA 06 08 01 12 2F 00 FF 80 00 00 02 0D 01 0D 02 04 12 00 28 09 06 00 09 19 09 00 FF 0F 02 12 00 00 02 04 12 00 01 09 06 00 00 2A 00 00 FF 0F 02 12 00 00 02 04 12 00 01 09 06 00 00 60 01 01 FF 0F 02 12 00 00 02 04 12 00 01 09 06 00 00 60 0E 00 FF 0F 02 12 00 00 02 04 12 00 03 09 06 01 00 01 08 01 FF 0F 02 12 00 00 42 2A 7E 7E A0 7D CE FF 03 13 D0 45 E0 40 00 02 00 00 6C 02 04 12 00 03 09 06 01 00 01 08 02 FF 0F 02 12 00 00 02 04 12 00 03 09 06 01 00 02 08 01 FF 0F 02 12 00 00 02 04 12 00 03 09 06 01 00 02 08 02 FF 0F 02 12 00 00 02 04 12 00 03 09 06 01 00 01 08 00 FF 0F 02 12 00 00 02 04 12 00 03 09 06 01 00 02 08 00 FF 0F 02 12 00 00 02 04 12 00 03 09 06 01 00 03 08 00 FF 0F 02 12 00 00 B3 4E 7E 7E A0 84 CE FF 03 13 12 8B E0 C0 00 03 00 00 73 02 04 12 00 03 09 06 01 00 04 08 00 FF 0F 02 12 00 00 02 04 12 00 46 09 06 00 00 60 03 0A FF 0F 03 12 00 00 09 10 4C 47 5A 31 30 33 30 37 39 30 32 35 38 39 34 36 09 07 31 35 33 38 30 38 38 09 08 52 41 54 45 32 00 00 00 06 00 00 C3 C7 06 00 01 42 16 06 00 00 0B B1 06 00 00 00 17 06 00 02 05 DD 06 00 00 0B C8 06 00 00 0A 83 06 00 04 B0 C1 16 01 6B CC 7E
229 changes: 229 additions & 0 deletions tests/dumps/hdlc_landis_gyr_e450_cyprus_2_decoded.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,229 @@
=== HDLC frame 1 (134 bytes) ===
7E <-- opening flag
A0 84 <-- format, length=132
CE FF <-- dst addr (2B)
03 <-- src addr (1B)
13 <-- control byte
12 8B <-- HCS (OK)
... FCS: 42 2A (OK)
E6 E7 00 <-- LLC header
Payload: 119 bytes
7E <-- closing flag

=== HDLC frame 2 (127 bytes) ===
7E <-- opening flag
A0 7D <-- format, length=125
CE FF <-- dst addr (2B)
03 <-- src addr (1B)
13 <-- control byte
D0 45 <-- HCS (OK)
... FCS: B3 4E (OK)
Payload: 115 bytes
7E <-- closing flag

=== HDLC frame 3 (134 bytes) ===
7E <-- opening flag
A0 84 <-- format, length=132
CE FF <-- dst addr (2B)
03 <-- src addr (1B)
13 <-- control byte
12 8B <-- HCS (OK)
... FCS: 6B CC (OK)
Payload: 122 bytes
7E <-- closing flag

=== APDU: General Block Transfer (0xE0) ===
Block 1: 112 bytes (ctrl=0x40)
Block 2: 108 bytes (ctrl=0x40)
Block 3: 115 bytes (ctrl=0xC0) [last]
Reassembled: 335 bytes

=== APDU: DATA-NOTIFICATION ===
0F <-- DATA-NOTIFICATION tag
00 08 B6 7A <-- Long-Invoke-ID
0C <-- DateTime: 12 raw bytes
07 EA 06 08 01 12 2F 00 FF 80 00 00
= 2026-06-08 18:47:00

=== AXDR payload (317 bytes) ===
02 <-- STRUCTURE
0D <-- 13 elements
--- element [1/13] ---
01 <-- ARRAY
0D <-- 13 elements
--- element [1/13] ---
02 <-- STRUCTURE
04 <-- 4 elements
--- element [1/4] ---
12 00 28 <-- UINT16 = 40
--- element [2/4] ---
09 06 00 09 19 09 00 FF <-- OBIS 0.9.25.9.0.255
--- element [3/4] ---
0F 02 <-- INT8 = 2
--- element [4/4] ---
12 00 00 <-- UINT16 = 0
--- element [2/13] ---
02 <-- STRUCTURE
04 <-- 4 elements
--- element [1/4] ---
12 00 01 <-- UINT16 = 1
--- element [2/4] ---
09 06 00 00 2A 00 00 FF <-- OBIS 0.0.42.0.0.255, Logical device name
--- element [3/4] ---
0F 02 <-- INT8 = 2
--- element [4/4] ---
12 00 00 <-- UINT16 = 0
--- element [3/13] ---
02 <-- STRUCTURE
04 <-- 4 elements
--- element [1/4] ---
12 00 01 <-- UINT16 = 1
--- element [2/4] ---
09 06 00 00 60 01 01 FF <-- OBIS 0.0.96.1.1.255, Meter ID
--- element [3/4] ---
0F 02 <-- INT8 = 2
--- element [4/4] ---
12 00 00 <-- UINT16 = 0
--- element [4/13] ---
02 <-- STRUCTURE
04 <-- 4 elements
--- element [1/4] ---
12 00 01 <-- UINT16 = 1
--- element [2/4] ---
09 06 00 00 60 0E 00 FF <-- OBIS 0.0.96.14.0.255
--- element [3/4] ---
0F 02 <-- INT8 = 2
--- element [4/4] ---
12 00 00 <-- UINT16 = 0
--- element [5/13] ---
02 <-- STRUCTURE
04 <-- 4 elements
--- element [1/4] ---
12 00 03 <-- UINT16 = 3
--- element [2/4] ---
09 06 01 00 01 08 01 FF <-- OBIS 1.0.1.8.1.255, Active energy+ T1 (Wh)
--- element [3/4] ---
0F 02 <-- INT8 = 2
--- element [4/4] ---
12 00 00 <-- UINT16 = 0
--- element [6/13] ---
02 <-- STRUCTURE
04 <-- 4 elements
--- element [1/4] ---
12 00 03 <-- UINT16 = 3
--- element [2/4] ---
09 06 01 00 01 08 02 FF <-- OBIS 1.0.1.8.2.255, Active energy+ T2 (Wh)
--- element [3/4] ---
0F 02 <-- INT8 = 2
--- element [4/4] ---
12 00 00 <-- UINT16 = 0
--- element [7/13] ---
02 <-- STRUCTURE
04 <-- 4 elements
--- element [1/4] ---
12 00 03 <-- UINT16 = 3
--- element [2/4] ---
09 06 01 00 02 08 01 FF <-- OBIS 1.0.2.8.1.255, Active energy- T1 (Wh)
--- element [3/4] ---
0F 02 <-- INT8 = 2
--- element [4/4] ---
12 00 00 <-- UINT16 = 0
--- element [8/13] ---
02 <-- STRUCTURE
04 <-- 4 elements
--- element [1/4] ---
12 00 03 <-- UINT16 = 3
--- element [2/4] ---
09 06 01 00 02 08 02 FF <-- OBIS 1.0.2.8.2.255, Active energy- T2 (Wh)
--- element [3/4] ---
0F 02 <-- INT8 = 2
--- element [4/4] ---
12 00 00 <-- UINT16 = 0
--- element [9/13] ---
02 <-- STRUCTURE
04 <-- 4 elements
--- element [1/4] ---
12 00 03 <-- UINT16 = 3
--- element [2/4] ---
09 06 01 00 01 08 00 FF <-- OBIS 1.0.1.8.0.255, Active energy+ total (Wh)
--- element [3/4] ---
0F 02 <-- INT8 = 2
--- element [4/4] ---
12 00 00 <-- UINT16 = 0
--- element [10/13] ---
02 <-- STRUCTURE
04 <-- 4 elements
--- element [1/4] ---
12 00 03 <-- UINT16 = 3
--- element [2/4] ---
09 06 01 00 02 08 00 FF <-- OBIS 1.0.2.8.0.255, Active energy- total (Wh)
--- element [3/4] ---
0F 02 <-- INT8 = 2
--- element [4/4] ---
12 00 00 <-- UINT16 = 0
--- element [11/13] ---
02 <-- STRUCTURE
04 <-- 4 elements
--- element [1/4] ---
12 00 03 <-- UINT16 = 3
--- element [2/4] ---
09 06 01 00 03 08 00 FF <-- OBIS 1.0.3.8.0.255, Reactive energy+ total (varh)
--- element [3/4] ---
0F 02 <-- INT8 = 2
--- element [4/4] ---
12 00 00 <-- UINT16 = 0
--- element [12/13] ---
02 <-- STRUCTURE
04 <-- 4 elements
--- element [1/4] ---
12 00 03 <-- UINT16 = 3
--- element [2/4] ---
09 06 01 00 04 08 00 FF <-- OBIS 1.0.4.8.0.255, Reactive energy- total (varh)
--- element [3/4] ---
0F 02 <-- INT8 = 2
--- element [4/4] ---
12 00 00 <-- UINT16 = 0
--- element [13/13] ---
02 <-- STRUCTURE
04 <-- 4 elements
--- element [1/4] ---
12 00 46 <-- UINT16 = 70
--- element [2/4] ---
09 06 00 00 60 03 0A FF <-- OBIS 0.0.96.3.10.255
--- element [3/4] ---
0F 03 <-- INT8 = 3
--- element [4/4] ---
12 00 00 <-- UINT16 = 0
--- element [2/13] ---
09 <-- OCTET_STRING
10 <-- length = 16
4C 47 5A 31 30 33 30 37 39 30 32 35 38 39 34 36
= "LGZ1030790258946"
--- element [3/13] ---
09 <-- OCTET_STRING
07 <-- length = 7
31 35 33 38 30 38 38
= "1538088"
--- element [4/13] ---
09 <-- OCTET_STRING
08 <-- length = 8
52 41 54 45 32 00 00 00
= "RATE2"
--- element [5/13] ---
06 00 00 C3 C7 <-- UINT32 = 50119 (0x0000C3C7)
--- element [6/13] ---
06 00 01 42 16 <-- UINT32 = 82454 (0x00014216)
--- element [7/13] ---
06 00 00 0B B1 <-- UINT32 = 2993 (0x00000BB1)
--- element [8/13] ---
06 00 00 00 17 <-- UINT32 = 23 (0x00000017)
--- element [9/13] ---
06 00 02 05 DD <-- UINT32 = 132573 (0x000205DD)
--- element [10/13] ---
06 00 00 0B C8 <-- UINT32 = 3016 (0x00000BC8)
--- element [11/13] ---
06 00 00 0A 83 <-- UINT32 = 2691 (0x00000A83)
--- element [12/13] ---
06 00 04 B0 C1 <-- UINT32 = 307393 (0x0004B0C1)
--- element [13/13] ---
16 01 <-- ENUM = 1 (a)
98 changes: 98 additions & 0 deletions tests/dumps/hdlc_landis_gyr_e450_cyprus_2_decoded.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
<?xml version='1.0' encoding='utf-8'?>
<DataNotification LongInvokeId="0008B67A">
<DateTime Value="2026-06-08 18:47:00" />
<STRUCTURE Qty="13">
<ARRAY Qty="13">
<STRUCTURE Qty="4">
<UINT16 Value="40" />
<OCTETSTRING Value="0.9.25.9.0.255" />
<INT8 Value="2" />
<UINT16 Value="0" />
</STRUCTURE>
<STRUCTURE Qty="4">
<UINT16 Value="1" />
<OCTETSTRING Value="0.0.42.0.0.255" Name="Logical device name" />
<INT8 Value="2" />
<UINT16 Value="0" />
</STRUCTURE>
<STRUCTURE Qty="4">
<UINT16 Value="1" />
<OCTETSTRING Value="0.0.96.1.1.255" Name="Meter ID" />
<INT8 Value="2" />
<UINT16 Value="0" />
</STRUCTURE>
<STRUCTURE Qty="4">
<UINT16 Value="1" />
<OCTETSTRING Value="0.0.96.14.0.255" />
<INT8 Value="2" />
<UINT16 Value="0" />
</STRUCTURE>
<STRUCTURE Qty="4">
<UINT16 Value="3" />
<OCTETSTRING Value="1.0.1.8.1.255" Name="Active energy+ T1 (Wh)" />
<INT8 Value="2" />
<UINT16 Value="0" />
</STRUCTURE>
<STRUCTURE Qty="4">
<UINT16 Value="3" />
<OCTETSTRING Value="1.0.1.8.2.255" Name="Active energy+ T2 (Wh)" />
<INT8 Value="2" />
<UINT16 Value="0" />
</STRUCTURE>
<STRUCTURE Qty="4">
<UINT16 Value="3" />
<OCTETSTRING Value="1.0.2.8.1.255" Name="Active energy- T1 (Wh)" />
<INT8 Value="2" />
<UINT16 Value="0" />
</STRUCTURE>
<STRUCTURE Qty="4">
<UINT16 Value="3" />
<OCTETSTRING Value="1.0.2.8.2.255" Name="Active energy- T2 (Wh)" />
<INT8 Value="2" />
<UINT16 Value="0" />
</STRUCTURE>
<STRUCTURE Qty="4">
<UINT16 Value="3" />
<OCTETSTRING Value="1.0.1.8.0.255" Name="Active energy+ total (Wh)" />
<INT8 Value="2" />
<UINT16 Value="0" />
</STRUCTURE>
<STRUCTURE Qty="4">
<UINT16 Value="3" />
<OCTETSTRING Value="1.0.2.8.0.255" Name="Active energy- total (Wh)" />
<INT8 Value="2" />
<UINT16 Value="0" />
</STRUCTURE>
<STRUCTURE Qty="4">
<UINT16 Value="3" />
<OCTETSTRING Value="1.0.3.8.0.255" Name="Reactive energy+ total (varh)" />
<INT8 Value="2" />
<UINT16 Value="0" />
</STRUCTURE>
<STRUCTURE Qty="4">
<UINT16 Value="3" />
<OCTETSTRING Value="1.0.4.8.0.255" Name="Reactive energy- total (varh)" />
<INT8 Value="2" />
<UINT16 Value="0" />
</STRUCTURE>
<STRUCTURE Qty="4">
<UINT16 Value="70" />
<OCTETSTRING Value="0.0.96.3.10.255" />
<INT8 Value="3" />
<UINT16 Value="0" />
</STRUCTURE>
</ARRAY>
<OCTETSTRING Value="LGZ1030790258946" />
<OCTETSTRING Value="1538088" />
<OCTETSTRING Value="RATE2" />
<UINT32 Value="50119" />
<UINT32 Value="82454" />
<UINT32 Value="2993" />
<UINT32 Value="23" />
<UINT32 Value="132573" />
<UINT32 Value="3016" />
<UINT32 Value="2691" />
<UINT32 Value="307393" />
<ENUM Value="1" Unit="a" />
</STRUCTURE>
</DataNotification>
65 changes: 65 additions & 0 deletions tests/expected/hdlc_landis_gyr_e450_cyprus_2.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#pragma once

#include <cstdint>
#include <cstddef>
#include <map>
#include <string>

namespace dlms::test_data {

// Landis+Gyr E450 Cyprus - 3 HDLC frames, GBT, self-describing AXDR payload.
// Source: tests/dumps/hdlc_landis_gyr_e450_cyprus_2.log

const uint8_t hdlc_landis_gyr_e450_cyprus_2_raw_frame[] = {
// Frame 1 (134 bytes)
0x7E, 0xA0, 0x84, 0xCE, 0xFF, 0x03, 0x13, 0x12, 0x8B, 0xE6, 0xE7, 0x00, 0xE0, 0x40, 0x00, 0x01,
0x00, 0x00, 0x70, 0x0F, 0x00, 0x08, 0xB6, 0x7A, 0x0C, 0x07, 0xEA, 0x06, 0x08, 0x01, 0x12, 0x2F,
0x00, 0xFF, 0x80, 0x00, 0x00, 0x02, 0x0D, 0x01, 0x0D, 0x02, 0x04, 0x12, 0x00, 0x28, 0x09, 0x06,
0x00, 0x09, 0x19, 0x09, 0x00, 0xFF, 0x0F, 0x02, 0x12, 0x00, 0x00, 0x02, 0x04, 0x12, 0x00, 0x01,
0x09, 0x06, 0x00, 0x00, 0x2A, 0x00, 0x00, 0xFF, 0x0F, 0x02, 0x12, 0x00, 0x00, 0x02, 0x04, 0x12,
0x00, 0x01, 0x09, 0x06, 0x00, 0x00, 0x60, 0x01, 0x01, 0xFF, 0x0F, 0x02, 0x12, 0x00, 0x00, 0x02,
0x04, 0x12, 0x00, 0x01, 0x09, 0x06, 0x00, 0x00, 0x60, 0x0E, 0x00, 0xFF, 0x0F, 0x02, 0x12, 0x00,
0x00, 0x02, 0x04, 0x12, 0x00, 0x03, 0x09, 0x06, 0x01, 0x00, 0x01, 0x08, 0x01, 0xFF, 0x0F, 0x02,
0x12, 0x00, 0x00, 0x42, 0x2A, 0x7E,
// Frame 2 (127 bytes)
0x7E, 0xA0, 0x7D, 0xCE, 0xFF, 0x03, 0x13, 0xD0, 0x45, 0xE0, 0x40, 0x00, 0x02, 0x00, 0x00, 0x6C,
0x02, 0x04, 0x12, 0x00, 0x03, 0x09, 0x06, 0x01, 0x00, 0x01, 0x08, 0x02, 0xFF, 0x0F, 0x02, 0x12,
0x00, 0x00, 0x02, 0x04, 0x12, 0x00, 0x03, 0x09, 0x06, 0x01, 0x00, 0x02, 0x08, 0x01, 0xFF, 0x0F,
0x02, 0x12, 0x00, 0x00, 0x02, 0x04, 0x12, 0x00, 0x03, 0x09, 0x06, 0x01, 0x00, 0x02, 0x08, 0x02,
0xFF, 0x0F, 0x02, 0x12, 0x00, 0x00, 0x02, 0x04, 0x12, 0x00, 0x03, 0x09, 0x06, 0x01, 0x00, 0x01,
0x08, 0x00, 0xFF, 0x0F, 0x02, 0x12, 0x00, 0x00, 0x02, 0x04, 0x12, 0x00, 0x03, 0x09, 0x06, 0x01,
0x00, 0x02, 0x08, 0x00, 0xFF, 0x0F, 0x02, 0x12, 0x00, 0x00, 0x02, 0x04, 0x12, 0x00, 0x03, 0x09,
0x06, 0x01, 0x00, 0x03, 0x08, 0x00, 0xFF, 0x0F, 0x02, 0x12, 0x00, 0x00, 0xB3, 0x4E, 0x7E,
// Frame 3 (134 bytes)
0x7E, 0xA0, 0x84, 0xCE, 0xFF, 0x03, 0x13, 0x12, 0x8B, 0xE0, 0xC0, 0x00, 0x03, 0x00, 0x00, 0x73,
0x02, 0x04, 0x12, 0x00, 0x03, 0x09, 0x06, 0x01, 0x00, 0x04, 0x08, 0x00, 0xFF, 0x0F, 0x02, 0x12,
0x00, 0x00, 0x02, 0x04, 0x12, 0x00, 0x46, 0x09, 0x06, 0x00, 0x00, 0x60, 0x03, 0x0A, 0xFF, 0x0F,
0x03, 0x12, 0x00, 0x00, 0x09, 0x10, 0x4C, 0x47, 0x5A, 0x31, 0x30, 0x33, 0x30, 0x37, 0x39, 0x30,
0x32, 0x35, 0x38, 0x39, 0x34, 0x36, 0x09, 0x07, 0x31, 0x35, 0x33, 0x38, 0x30, 0x38, 0x38, 0x09,
0x08, 0x52, 0x41, 0x54, 0x45, 0x32, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xC3, 0xC7, 0x06, 0x00,
0x01, 0x42, 0x16, 0x06, 0x00, 0x00, 0x0B, 0xB1, 0x06, 0x00, 0x00, 0x00, 0x17, 0x06, 0x00, 0x02,
0x05, 0xDD, 0x06, 0x00, 0x00, 0x0B, 0xC8, 0x06, 0x00, 0x00, 0x0A, 0x83, 0x06, 0x00, 0x04, 0xB0,
0xC1, 0x16, 0x01, 0x6B, 0xCC, 0x7E,
};

constexpr size_t hdlc_landis_gyr_e450_cyprus_2_expected_count = 12;

const std::map<std::string, std::string> hdlc_landis_gyr_e450_cyprus_2_expected_strings = {
{"0.0.42.0.0.255", "LGZ1030790258946"},
{"0.0.96.1.1.255", "1538088"},
{"0.0.96.14.0.255", "RATE2"},
};

const std::map<std::string, float> hdlc_landis_gyr_e450_cyprus_2_expected_floats = {
{"1.0.1.8.1.255", 50119.0f},
{"1.0.1.8.2.255", 82454.0f},
{"1.0.2.8.1.255", 2993.0f},
{"1.0.2.8.2.255", 23.0f},
{"1.0.1.8.0.255", 132573.0f},
{"1.0.2.8.0.255", 3016.0f},
{"1.0.3.8.0.255", 2691.0f},
{"1.0.4.8.0.255", 307393.0f},
{"0.0.96.3.10.255", 1.0f},
};

} // namespace dlms::test_data
Loading
Loading