mirror of
https://github.com/thelsing/knx.git
synced 2024-12-18 19:08:18 +01:00
103 lines
7.0 KiB
C++
103 lines
7.0 KiB
C++
#pragma once
|
|
|
|
#include <stdint.h>
|
|
#include "knx_types.h"
|
|
#include "apdu.h"
|
|
|
|
class AssociationTableObject;
|
|
class BusAccessUnit;
|
|
class TransportLayer;
|
|
|
|
class ApplicationLayer
|
|
{
|
|
public:
|
|
ApplicationLayer(AssociationTableObject& assocTable, BusAccessUnit& bau);
|
|
void transportLayer(TransportLayer& layer);
|
|
|
|
// from transport layer
|
|
#pragma region Transport-Layer-Callbacks
|
|
void dataGroupIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu);
|
|
void dataGroupConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap,
|
|
APDU& apdu, bool status);
|
|
void dataBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu);
|
|
void dataBroadcastConfirm(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, bool status);
|
|
void dataSystemBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu);
|
|
void dataSystemBroadcastConfirm(HopCountType hopType, Priority priority, APDU& apdu, bool status);
|
|
void dataIndividualIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu);
|
|
void dataIndividualConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, bool status);
|
|
void connectIndication(uint16_t tsap);
|
|
void connectConfirm(uint16_t destination, uint16_t tsap, bool status);
|
|
void disconnectIndication(uint16_t tsap);
|
|
void disconnectConfirm(Priority priority, uint16_t tsap, bool status);
|
|
void dataConnectedIndication(Priority priority, uint16_t tsap, APDU& apdu);
|
|
void dataConnectedConfirm(uint16_t tsap);
|
|
#pragma endregion
|
|
|
|
void groupValueReadRequest(AckType ack, uint16_t asap, Priority priority, HopCountType hopType);
|
|
void groupValueReadResponse(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, uint8_t* data, uint8_t dataLength);
|
|
void groupValueWriteRequest(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, uint8_t* data, uint8_t dataLength);
|
|
void individualAddressWriteRequest(AckType ack, HopCountType hopType, uint16_t newaddress);
|
|
void individualAddressReadRequest(AckType ack, HopCountType hopType);
|
|
void individualAddressReadResponse(AckType ack, HopCountType hopType);
|
|
void individualAddressSerialNumberReadRequest(AckType ack, HopCountType hopType, uint8_t* serialNumber);
|
|
void individualAddressSerialNumberReadResponse(AckType ack, HopCountType hopType, uint8_t* serialNumber,
|
|
uint16_t domainAddress);
|
|
void individualAddressSerialNumberWriteRequest(AckType ack, HopCountType hopType, uint8_t* serialNumber,
|
|
uint16_t newaddress);
|
|
void deviceDescriptorReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
|
|
uint8_t descriptorType);
|
|
void deviceDescriptorReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
|
|
uint8_t descriptorType, uint8_t* deviceDescriptor);
|
|
void restartRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap);
|
|
void propertyValueReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
|
|
uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex);
|
|
void propertyValueReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
|
|
uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length);
|
|
void propertyValueWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
|
|
uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length);
|
|
void propertyDescriptionReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
|
|
uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex);
|
|
void propertyDescriptionReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
|
|
uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex, bool writeEnable, uint8_t type,
|
|
uint16_t maxNumberOfElements, uint8_t access);
|
|
void memoryReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
|
|
uint16_t memoryAddress);
|
|
void memoryReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
|
|
uint16_t memoryAddress, uint8_t* data);
|
|
void memoryWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
|
|
uint16_t memoryAddress, uint8_t* data);
|
|
void userMemoryReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
|
|
uint32_t memoryAddress);
|
|
void userMemoryReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
|
|
uint32_t memoryAddress, uint8_t* memoryData);
|
|
void userMemoryWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
|
|
uint32_t memoryAddress, uint8_t* memoryData);
|
|
void userManufacturerInfoReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap);
|
|
void userManufacturerInfoReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
|
|
uint8_t* info);
|
|
void authorizeRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint32_t key);
|
|
void authorizeResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t level);
|
|
void keyWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t level, uint32_t key);
|
|
void keyWriteResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t level);
|
|
private:
|
|
void propertyDataSend(ApduType type, AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
|
|
uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t * data,
|
|
uint8_t length);
|
|
void memorySend(ApduType type, AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
|
|
uint16_t memoryAddress, uint8_t * memoryData);
|
|
void userMemorySend(ApduType type, AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
|
|
uint8_t number, uint32_t memoryAddress, uint8_t* memoryData);
|
|
void groupValueSend(ApduType type, AckType ack, uint16_t asap, Priority priority, HopCountType hopType, uint8_t* data, uint8_t& dataLength);
|
|
void individualIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu);
|
|
void individualConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, bool status);
|
|
void individualSend(AckType ack, HopCountType hopType, Priority priority, uint16_t asap, APDU& apdu);
|
|
|
|
uint16_t _savedAsapReadRequest;
|
|
uint16_t _savedAsapWriteRequest;
|
|
uint16_t _savedAsapResponse;
|
|
AssociationTableObject& _assocTable;
|
|
BusAccessUnit& _bau;
|
|
TransportLayer* _transportLayer;
|
|
int32_t _connectedTsap;
|
|
};
|