knx
ETS configurable knx-stack
data_link_layer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "config.h"
4 
5 #include <stdint.h>
6 #include "device_object.h"
7 #include "knx_types.h"
8 #include "network_layer_entity.h"
9 #ifdef KNX_TUNNELING
10  #include "ip_parameter_object.h"
11 #endif
12 #include "cemi_server.h"
13 #include "bau.h"
14 
15 class Platform;
16 
17 typedef void (*ActivityCallback)(uint8_t info);
18 
20 {
21  protected:
23  public:
24  virtual ~DataLinkLayerCallbacks() = default;
25  virtual void activity(uint8_t info);
26  virtual void setActivityCallback(ActivityCallback activityCallback);
27 };
28 
30 {
31  public:
32  DataLinkLayer(DeviceObject& devObj, NetworkLayerEntity& netLayerEntity,
33  Platform& platform);
34 
35 #ifdef USE_CEMI_SERVER
36  // from tunnel
38  void dataRequestFromTunnel(CemiFrame& frame);
39 #ifdef KNX_TUNNELING
40  virtual void dataRequestToTunnel(CemiFrame& frame);
41  virtual void dataConfirmationToTunnel(CemiFrame& frame);
42  virtual void dataIndicationToTunnel(CemiFrame& frame);
43  virtual bool isTunnelAddress(uint16_t addr);
45 #endif
46 #endif
47 
48  // from network layer
49  void dataRequest(AckType ack, AddressType addrType, uint16_t destinationAddr, uint16_t sourceAddr, FrameFormat format,
50  Priority priority, NPDU& npdu);
51  void systemBroadcastRequest(AckType ack, FrameFormat format, Priority priority, NPDU& npdu, uint16_t sourceAddr);
52  virtual void loop() = 0;
53  virtual void enabled(bool value) = 0;
54  virtual bool enabled() const = 0;
55  virtual DptMedium mediumType() const = 0;
56 
57  protected:
58  void frameReceived(CemiFrame& frame);
59  void dataConReceived(CemiFrame& frame, bool success);
60  bool sendTelegram(NPDU& npdu, AckType ack, uint16_t destinationAddr, AddressType addrType, uint16_t sourceAddr, FrameFormat format, Priority priority, SystemBroadcast systemBroadcast, bool doNotRepeat = false);
61  virtual bool sendFrame(CemiFrame& frame) = 0;
62  uint8_t* frameData(CemiFrame& frame);
66 #ifdef USE_CEMI_SERVER
68 #endif
69 #ifdef KNX_ACTIVITYCALLBACK
70  uint8_t _netIndex = 0;
71 #endif
72 #ifdef KNX_TUNNELING
73  bool isTunnelingPA(uint16_t pa);
74  bool isRoutedPA(uint16_t pa);
76 #endif
77 };
This is an implementation of the cEMI server as specified in .
Definition: cemi_server.h:23
Definition: npdu.h:9
Priority
Definition: knx_types.h:10
FrameFormat
Definition: knx_types.h:4
AckType
Definition: knx_types.h:18
DptMedium
Definition: knx_types.h:254
AddressType
Definition: knx_types.h:33
SystemBroadcast
Definition: knx_types.h:112