Program Listing for File cemi_server.h

Return to documentation for file (src/knx/cemi_server.h)

#pragma once

#include "config.h"
#ifdef USE_CEMI_SERVER

#include <stdint.h>
#include "knx_types.h"
#include "usb_tunnel_interface.h"

class BauSystemB;
class DataLinkLayer;
class CemiFrame;

class CemiServer
{
    public:
        CemiServer(BauSystemB& bau);

        void dataLinkLayer(DataLinkLayer& layer);
#ifdef KNX_TUNNELING
        void dataLinkLayerPrimary(DataLinkLayer& layer);
#endif

        // from data link layer
        // Only L_Data service
        void dataIndicationToTunnel(CemiFrame& frame);
        void dataConfirmationToTunnel(CemiFrame& frame);

        // From tunnel interface
        void frameReceived(CemiFrame& frame);

        uint16_t clientAddress() const;
        void clientAddress(uint16_t value);

        void loop();

    private:
        uint16_t _clientAddress = 0;
        uint8_t _frameNumber = 0;

        void handleLData(CemiFrame& frame);
        void handleMPropRead(CemiFrame& frame);
        void handleMPropWrite(CemiFrame& frame);
        void handleMReset(CemiFrame& frame);

        DataLinkLayer* _dataLinkLayer = nullptr;
#ifdef KNX_TUNNELING
        DataLinkLayer* _dataLinkLayerPrimary = nullptr;
#endif
        BauSystemB& _bau;
#ifdef USE_USB
        UsbTunnelInterface _usbTunnelInterface;
#endif
};

#endif