knx
ETS configurable knx-stack
transport_layer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <stdint.h>
4 #include "knx_types.h"
5 #include "tpdu.h"
6 #include "address_table_object.h"
7 #include "cemi_frame.h"
8 
9 class ApplicationLayer;
10 class APDU;
11 class NetworkLayer;
12 class Platform;
13 
15 
17 {
18  public:
20  void networkLayer(NetworkLayer& layer);
21  void groupAddressTable(AddressTableObject& addrTable);
22 
23  #pragma region from network layer
24  void dataIndividualIndication(uint16_t destination, HopCountType hopType, Priority priority, uint16_t source, TPDU& tpdu);
25  void dataIndividualConfirm(AckType ack, uint16_t destination, HopCountType hopType, Priority priority, TPDU& tpdu, bool status);
26  void dataGroupIndication(uint16_t destination, HopCountType hopType, Priority priority, uint16_t source, TPDU& tpdu);
27  void dataGroupConfirm(AckType ack, uint16_t source, uint16_t destination, HopCountType hopType, Priority priority, TPDU& tpdu, bool status);
28  void dataBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, TPDU& tpdu);
29  void dataBroadcastConfirm(AckType ack, HopCountType hopType, Priority priority, TPDU& tpdu, bool status);
30  void dataSystemBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, TPDU& tpdu);
31  void dataSystemBroadcastConfirm(AckType ack, HopCountType hopType, TPDU& tpdu, Priority priority, bool status);
32  #pragma endregion
33 
34  #pragma region from application layer
51  void dataGroupRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu);
52  void dataBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu);
53  void dataSystemBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu);
54  void dataIndividualRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t destination, APDU& apdu);
55 
56  void connectRequest(uint16_t destination, Priority priority);
57  void disconnectRequest(uint16_t tsap, Priority priority);
58  // apdu must be valid until it was confirmed
59  void dataConnectedRequest(uint16_t tsap, Priority priority, APDU& apdu);
60 
61  uint8_t getTpciSeqNum();
62  uint16_t getConnectionAddress();
63  #pragma endregion
64 
65  #pragma region other
67  void ackTimeoutIndication();
68  void loop();
69  #pragma endregion
70 
71  private:
72  #pragma region States
73  Priority _savedPriority = LowPriority;
74  CemiFrame _savedFrame;
75  Priority _savedPriorityConnecting;
76  CemiFrame _savedFrameConnecting;
77  uint16_t _savedTsapConnecting;
78  bool _savedConnectingValid = false;
79  enum StateEvent
80  {
81  E0, E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13, E14,
82  E15, E16, E17, E18, E19, E20, E21, E22, E23, E24, E25, E26, E27
83  };
84  StateType _currentState = Closed;
85  void sendControlTelegram(TpduType pduType, uint8_t seqNo);
86  void A0();
87  void A1(uint16_t source);
88  void A2(uint16_t source, Priority priority, APDU& apdu);
89  void A3(uint16_t source, Priority priority, TPDU& recTpdu);
90  void A4(uint16_t source, Priority priority, TPDU& recTpdu);
91  void A5(uint16_t source);
92  void A6(uint16_t source);
93  void A7(Priority priority, APDU& apdu);
94  void A8();
95  void A9();
96  void A10(uint16_t source);
97  void A11(uint16_t tsap, Priority priority, APDU& apdu);
98  void A12(uint16_t destination, Priority priority);
99  void A13(uint16_t destination);
100  void A14(uint16_t destination, Priority priority);
101  void A15(Priority priority, uint16_t tsap);
102  void enableConnectionTimeout();
103  void disableConnectionTimeout();
104  void enableAckTimeout();
105  void disableAckTimeout();
106  uint16_t _connectionAddress = 0;
107  uint8_t _seqNoSend = 0;
108  uint8_t _seqNoRecv = 0;
109  bool _connectionTimeoutEnabled = false;
110  uint32_t _connectionTimeoutStartMillis = 0;
111  uint16_t _connectionTimeoutMillis = 6000;
112  bool _ackTimeoutEnabled = false;
113  uint32_t _ackTimeoutStartMillis = 0;
114  uint16_t _ackTimeoutMillis = 3000;
115  uint8_t _repCount = 0;
116  uint8_t _maxRepCount = 3;
117  #pragma endregion
118  ApplicationLayer& _applicationLayer;
119  AddressTableObject* _groupAddressTable;
120  NetworkLayer* _networkLayer;
121 };
This class represents an Application Protocol Data Unit.
Definition: apdu.h:12
This class represents the group address table.
This is an implementation of the application layer as specified in .
Definition: tpdu.h:9
void connectRequest(uint16_t destination, Priority priority)
void dataGroupIndication(uint16_t destination, HopCountType hopType, Priority priority, uint16_t source, TPDU &tpdu)
void dataSystemBroadcastConfirm(AckType ack, HopCountType hopType, TPDU &tpdu, Priority priority, bool status)
void dataIndividualIndication(uint16_t destination, HopCountType hopType, Priority priority, uint16_t source, TPDU &tpdu)
void dataBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU &apdu)
void dataIndividualConfirm(AckType ack, uint16_t destination, HopCountType hopType, Priority priority, TPDU &tpdu, bool status)
void dataGroupRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU &apdu)
Request to send an APDU that via multicast.
void dataConnectedRequest(uint16_t tsap, Priority priority, APDU &apdu)
void dataSystemBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU &apdu)
void networkLayer(NetworkLayer &layer)
void dataGroupConfirm(AckType ack, uint16_t source, uint16_t destination, HopCountType hopType, Priority priority, TPDU &tpdu, bool status)
void disconnectRequest(uint16_t tsap, Priority priority)
void dataSystemBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, TPDU &tpdu)
void dataIndividualRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t destination, APDU &apdu)
void connectionTimeoutIndication()
void groupAddressTable(AddressTableObject &addrTable)
void dataBroadcastConfirm(AckType ack, HopCountType hopType, Priority priority, TPDU &tpdu, bool status)
uint16_t getConnectionAddress()
void dataBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, TPDU &tpdu)
uint8_t getTpciSeqNum()
TransportLayer(ApplicationLayer &layer)
HopCountType
Definition: knx_types.h:124
Priority
Definition: knx_types.h:10
@ LowPriority
Normal priority of group communication.
Definition: knx_types.h:11
TpduType
Definition: knx_types.h:130
AckType
Definition: knx_types.h:18
StateType
@ OpenIdle
@ Closed
@ OpenWait
@ Connecting