knx
ETS configurable knx-stack
cemi_frame.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "knx_types.h"
4 #include "stdint.h"
5 #include "npdu.h"
6 #include "tpdu.h"
7 #include "apdu.h"
8 #include "config.h"
9 
10 #define NPDU_LPDU_DIFF 8
11 #define TPDU_NPDU_DIFF 1
12 #define APDU_TPDU_DIFF 0
13 #define TPDU_LPDU_DIFF (TPDU_NPDU_DIFF + NPDU_LPDU_DIFF)
14 #define APDU_LPDU_DIFF (APDU_TPDU_DIFF + TPDU_NPDU_DIFF + NPDU_LPDU_DIFF)
15 
16 // Mesg Code and additional info length
17 #define CEMI_HEADER_SIZE 2
18 
19 class CemiFrame
20 {
21  friend class DataLinkLayer;
22 
23  public:
24  CemiFrame(uint8_t* data, uint16_t length);
25  CemiFrame(uint8_t apduLength);
26  CemiFrame(const CemiFrame& other);
28 
29  MessageCode messageCode() const;
30  void messageCode(MessageCode value);
31  uint16_t totalLenght() const;
32  uint16_t telegramLengthtTP() const;
33  void fillTelegramTP(uint8_t* data);
34  uint16_t telegramLengthtRF() const;
35  void fillTelegramRF(uint8_t* data);
36  uint8_t* data();
37  uint16_t dataLength();
38 
39  FrameFormat frameType() const;
40  void frameType(FrameFormat value);
41  Repetition repetition() const;
42  void repetition(Repetition value);
44  void systemBroadcast(SystemBroadcast value);
45  Priority priority() const;
46  void priority(Priority value);
47  AckType ack() const;
48  void ack(AckType value);
49  Confirm confirm() const;
50  void confirm(Confirm value);
51  AddressType addressType() const;
52  void addressType(AddressType value);
53  uint8_t hopCount() const;
54  void hopCount(uint8_t value);
55  uint16_t sourceAddress() const;
56  void sourceAddress(uint16_t value);
57  uint16_t destinationAddress() const;
58  void destinationAddress(uint16_t value);
59 
60 #ifdef USE_RF
61  // only for RF medium
62  uint8_t* rfSerialOrDoA() const;
63  void rfSerialOrDoA(const uint8_t* rfSerialOrDoA);
64  uint8_t rfInfo() const;
65  void rfInfo(uint8_t rfInfo);
66  uint8_t rfLfn() const;
67  void rfLfn(uint8_t rfInfo);
68 #endif
69  NPDU& npdu();
70  TPDU& tpdu();
71  APDU& apdu();
72 
73  uint8_t calcCrcTP(uint8_t* buffer, uint16_t len);
74  bool valid() const;
75 
76  private:
77  uint8_t buffer[0xff + NPDU_LPDU_DIFF] = {0}; //only valid of add info is zero
78  uint8_t* _data = 0;
79  uint8_t* _ctrl1 = 0;
80  NPDU _npdu;
81  TPDU _tpdu;
82  APDU _apdu;
83  uint16_t _length = 0; // only set if created from byte array
84 
85 #ifdef USE_RF
86  // FIXME: integrate this propery in _data
87  // only for RF medium
88  uint8_t* _rfSerialOrDoA = 0;
89  uint8_t _rfInfo = 0;
90  uint8_t _rfLfn = 0xFF; // RF Data Link layer frame number
91 #endif
92 
93  uint8_t _sourceInterfaceIndex;
94 };
This class represents an Application Protocol Data Unit.
Definition: apdu.h:12
void fillTelegramRF(uint8_t *data)
Definition: cemi_frame.cpp:176
CemiFrame & operator=(CemiFrame other)
Definition: cemi_frame.cpp:113
SystemBroadcast systemBroadcast() const
Definition: cemi_frame.cpp:237
NPDU & npdu()
Definition: cemi_frame.cpp:357
uint16_t sourceAddress() const
Definition: cemi_frame.cpp:303
uint8_t * rfSerialOrDoA() const
Definition: cemi_frame.cpp:327
TPDU & tpdu()
Definition: cemi_frame.cpp:362
uint8_t hopCount() const
Definition: cemi_frame.cpp:292
void fillTelegramTP(uint8_t *data)
Definition: cemi_frame.cpp:149
bool valid() const
Definition: cemi_frame.cpp:372
CemiFrame(uint8_t *data, uint16_t length)
Definition: cemi_frame.cpp:77
uint8_t * data()
Definition: cemi_frame.cpp:195
AckType ack() const
Definition: cemi_frame.cpp:259
Repetition repetition() const
Definition: cemi_frame.cpp:226
uint8_t rfLfn() const
Definition: cemi_frame.cpp:347
APDU & apdu()
Definition: cemi_frame.cpp:367
uint8_t rfInfo() const
Definition: cemi_frame.cpp:337
uint16_t destinationAddress() const
Definition: cemi_frame.cpp:315
Confirm confirm() const
Definition: cemi_frame.cpp:270
MessageCode messageCode() const
Definition: cemi_frame.cpp:126
AddressType addressType() const
Definition: cemi_frame.cpp:281
uint16_t telegramLengthtTP() const
Definition: cemi_frame.cpp:141
uint16_t dataLength()
Definition: cemi_frame.cpp:200
FrameFormat frameType() const
Definition: cemi_frame.cpp:215
uint8_t calcCrcTP(uint8_t *buffer, uint16_t len)
Definition: cemi_frame.cpp:205
Priority priority() const
Definition: cemi_frame.cpp:248
uint16_t telegramLengthtRF() const
Definition: cemi_frame.cpp:171
uint16_t totalLenght() const
Definition: cemi_frame.cpp:136
Definition: npdu.h:9
Definition: tpdu.h:9
Confirm
Definition: knx_types.h:118
Repetition
Definition: knx_types.h:104
Priority
Definition: knx_types.h:10
FrameFormat
Definition: knx_types.h:4
MessageCode
Definition: knx_types.h:39
AckType
Definition: knx_types.h:18
AddressType
Definition: knx_types.h:33
SystemBroadcast
Definition: knx_types.h:112