mirror of
https://github.com/thelsing/knx.git
synced 2024-10-20 20:07:45 +02:00
initial commit
This commit is contained in:
parent
cc1fc7d5fb
commit
281fe4ab02
@ -75,6 +75,8 @@ add_executable(knx-linux
|
|||||||
../../src/knx/rf_medium_object.h
|
../../src/knx/rf_medium_object.h
|
||||||
../../src/knx/rf_physical_layer.cpp
|
../../src/knx/rf_physical_layer.cpp
|
||||||
../../src/knx/rf_physical_layer.h
|
../../src/knx/rf_physical_layer.h
|
||||||
|
../../src/knx/secure_application_layer.cpp
|
||||||
|
../../src/knx/secure_application_layer.h
|
||||||
../../src/knx/table_object.cpp
|
../../src/knx/table_object.cpp
|
||||||
../../src/knx/table_object.h
|
../../src/knx/table_object.h
|
||||||
../../src/knx/tpdu.cpp
|
../../src/knx/tpdu.cpp
|
||||||
|
@ -267,7 +267,7 @@ void ApplicationLayer::groupValueReadRequest(AckType ack, uint16_t asap, Priorit
|
|||||||
uint16_t tsap = (uint16_t)value;
|
uint16_t tsap = (uint16_t)value;
|
||||||
|
|
||||||
// first to bus then to itself
|
// first to bus then to itself
|
||||||
_transportLayer->dataGroupRequest(ack, hopType, priority, tsap, apdu);
|
dataGroupRequest(ack, hopType, priority, tsap, apdu);
|
||||||
dataGroupIndication(hopType, priority, tsap, apdu);
|
dataGroupIndication(hopType, priority, tsap, apdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,7 +290,7 @@ void ApplicationLayer::individualAddressWriteRequest(AckType ack, HopCountType h
|
|||||||
apdu.type(IndividualAddressWrite);
|
apdu.type(IndividualAddressWrite);
|
||||||
uint8_t* apduData = apdu.data();
|
uint8_t* apduData = apdu.data();
|
||||||
pushWord(newaddress, apduData + 1);
|
pushWord(newaddress, apduData + 1);
|
||||||
_transportLayer->dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplicationLayer::individualAddressReadRequest(AckType ack, HopCountType hopType)
|
void ApplicationLayer::individualAddressReadRequest(AckType ack, HopCountType hopType)
|
||||||
@ -298,7 +298,7 @@ void ApplicationLayer::individualAddressReadRequest(AckType ack, HopCountType ho
|
|||||||
CemiFrame frame(1);
|
CemiFrame frame(1);
|
||||||
APDU& apdu = frame.apdu();
|
APDU& apdu = frame.apdu();
|
||||||
apdu.type(IndividualAddressRead);
|
apdu.type(IndividualAddressRead);
|
||||||
_transportLayer->dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplicationLayer::individualAddressReadResponse(AckType ack, HopCountType hopType)
|
void ApplicationLayer::individualAddressReadResponse(AckType ack, HopCountType hopType)
|
||||||
@ -306,7 +306,7 @@ void ApplicationLayer::individualAddressReadResponse(AckType ack, HopCountType h
|
|||||||
CemiFrame frame(1);
|
CemiFrame frame(1);
|
||||||
APDU& apdu = frame.apdu();
|
APDU& apdu = frame.apdu();
|
||||||
apdu.type(IndividualAddressResponse);
|
apdu.type(IndividualAddressResponse);
|
||||||
_transportLayer->dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplicationLayer::individualAddressSerialNumberReadRequest(AckType ack, HopCountType hopType, uint8_t * serialNumber)
|
void ApplicationLayer::individualAddressSerialNumberReadRequest(AckType ack, HopCountType hopType, uint8_t * serialNumber)
|
||||||
@ -316,7 +316,7 @@ void ApplicationLayer::individualAddressSerialNumberReadRequest(AckType ack, Hop
|
|||||||
apdu.type(IndividualAddressSerialNumberRead);
|
apdu.type(IndividualAddressSerialNumberRead);
|
||||||
uint8_t* data = apdu.data() + 1;
|
uint8_t* data = apdu.data() + 1;
|
||||||
memcpy(data, serialNumber, 6);
|
memcpy(data, serialNumber, 6);
|
||||||
_transportLayer->dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplicationLayer::individualAddressSerialNumberReadResponse(AckType ack, HopCountType hopType,
|
void ApplicationLayer::individualAddressSerialNumberReadResponse(AckType ack, HopCountType hopType,
|
||||||
@ -329,7 +329,7 @@ void ApplicationLayer::individualAddressSerialNumberReadResponse(AckType ack, Ho
|
|||||||
memcpy(data, serialNumber, 6);
|
memcpy(data, serialNumber, 6);
|
||||||
data += 6;
|
data += 6;
|
||||||
pushWord(domainAddress, data);
|
pushWord(domainAddress, data);
|
||||||
_transportLayer->dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplicationLayer::individualAddressSerialNumberWriteRequest(AckType ack, HopCountType hopType, uint8_t * serialNumber,
|
void ApplicationLayer::individualAddressSerialNumberWriteRequest(AckType ack, HopCountType hopType, uint8_t * serialNumber,
|
||||||
@ -342,7 +342,7 @@ void ApplicationLayer::individualAddressSerialNumberWriteRequest(AckType ack, Ho
|
|||||||
memcpy(data, serialNumber, 6);
|
memcpy(data, serialNumber, 6);
|
||||||
data += 6;
|
data += 6;
|
||||||
pushWord(newaddress, data);
|
pushWord(newaddress, data);
|
||||||
_transportLayer->dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplicationLayer::deviceDescriptorReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
|
void ApplicationLayer::deviceDescriptorReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
|
||||||
@ -423,7 +423,7 @@ void ApplicationLayer::systemNetworkParameterReadResponse(Priority priority, Hop
|
|||||||
|
|
||||||
//apdu.printPDU();
|
//apdu.printPDU();
|
||||||
|
|
||||||
_transportLayer->dataSystemBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu);
|
dataSystemBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: ApplicationLayer::domainAddressSerialNumberWriteRequest()
|
//TODO: ApplicationLayer::domainAddressSerialNumberWriteRequest()
|
||||||
@ -442,7 +442,7 @@ void ApplicationLayer::domainAddressSerialNumberReadResponse(Priority priority,
|
|||||||
|
|
||||||
//apdu.printPDU();
|
//apdu.printPDU();
|
||||||
|
|
||||||
_transportLayer->dataSystemBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu);
|
dataSystemBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: ApplicationLayer::IndividualAddressSerialNumberWriteRequest()
|
//TODO: ApplicationLayer::IndividualAddressSerialNumberWriteRequest()
|
||||||
@ -461,7 +461,7 @@ void ApplicationLayer::IndividualAddressSerialNumberReadResponse(Priority priori
|
|||||||
|
|
||||||
//apdu.printPDU();
|
//apdu.printPDU();
|
||||||
|
|
||||||
_transportLayer->dataBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu);
|
dataBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplicationLayer::propertyValueReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
|
void ApplicationLayer::propertyValueReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
|
||||||
@ -652,9 +652,9 @@ void ApplicationLayer::propertyDataSend(ApduType type, AckType ack, Priority pri
|
|||||||
memcpy(apduData, data, length);
|
memcpy(apduData, data, length);
|
||||||
|
|
||||||
if (asap == _connectedTsap)
|
if (asap == _connectedTsap)
|
||||||
_transportLayer->dataConnectedRequest(asap, priority, apdu);
|
dataConnectedRequest(asap, priority, apdu);
|
||||||
else
|
else
|
||||||
_transportLayer->dataIndividualRequest(ack, hopType, priority, asap, apdu);
|
dataIndividualRequest(ack, hopType, priority, asap, apdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApplicationLayer::groupValueSend(ApduType type, AckType ack, uint16_t asap, Priority priority, HopCountType hopType,
|
void ApplicationLayer::groupValueSend(ApduType type, AckType ack, uint16_t asap, Priority priority, HopCountType hopType,
|
||||||
@ -676,7 +676,7 @@ void ApplicationLayer::groupValueSend(ApduType type, AckType ack, uint16_t asap,
|
|||||||
}
|
}
|
||||||
// no need to check if there is a tsap. This is a response, so the read got trough
|
// no need to check if there is a tsap. This is a response, so the read got trough
|
||||||
uint16_t tsap = (uint16_t)_assocTable.translateAsap(asap);
|
uint16_t tsap = (uint16_t)_assocTable.translateAsap(asap);
|
||||||
_transportLayer->dataGroupRequest(ack, hopType, priority, tsap, apdu);
|
dataGroupRequest(ack, hopType, priority, tsap, apdu);
|
||||||
dataGroupIndication(hopType, priority, tsap, apdu);
|
dataGroupIndication(hopType, priority, tsap, apdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -911,12 +911,34 @@ void ApplicationLayer::individualConfirm(AckType ack, HopCountType hopType, Prio
|
|||||||
void ApplicationLayer::individualSend(AckType ack, HopCountType hopType, Priority priority, uint16_t asap, APDU& apdu)
|
void ApplicationLayer::individualSend(AckType ack, HopCountType hopType, Priority priority, uint16_t asap, APDU& apdu)
|
||||||
{
|
{
|
||||||
if (asap == _connectedTsap)
|
if (asap == _connectedTsap)
|
||||||
_transportLayer->dataConnectedRequest(asap, priority, apdu);
|
dataConnectedRequest(asap, priority, apdu);
|
||||||
else
|
else
|
||||||
_transportLayer->dataIndividualRequest(ack, hopType, priority, asap, apdu);
|
dataIndividualRequest(ack, hopType, priority, asap, apdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ApplicationLayer::isConnected()
|
bool ApplicationLayer::isConnected()
|
||||||
{
|
{
|
||||||
return (_connectedTsap >= 0);
|
return (_connectedTsap >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ApplicationLayer::dataGroupRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu)
|
||||||
|
{
|
||||||
|
_transportLayer->dataGroupRequest(ack, hopType, priority, tsap, apdu);
|
||||||
|
}
|
||||||
|
void ApplicationLayer::dataBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu)
|
||||||
|
{
|
||||||
|
_transportLayer->dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
||||||
|
}
|
||||||
|
void ApplicationLayer::dataSystemBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu)
|
||||||
|
{
|
||||||
|
_transportLayer->dataSystemBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu);
|
||||||
|
}
|
||||||
|
void ApplicationLayer::dataIndividualRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t destination, APDU& apdu)
|
||||||
|
{
|
||||||
|
_transportLayer->dataIndividualRequest(ack, hopType, priority, destination, apdu);
|
||||||
|
}
|
||||||
|
void ApplicationLayer::dataConnectedRequest(uint16_t tsap, Priority priority, APDU& apdu)
|
||||||
|
{
|
||||||
|
// apdu must be valid until it was confirmed
|
||||||
|
_transportLayer->dataConnectedRequest(tsap, priority, apdu);
|
||||||
|
}
|
||||||
|
@ -139,6 +139,14 @@ class ApplicationLayer
|
|||||||
uint8_t* knxSerialNumber);
|
uint8_t* knxSerialNumber);
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// to transport layer
|
||||||
|
virtual void dataGroupRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu);
|
||||||
|
virtual void dataBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu);
|
||||||
|
virtual void dataSystemBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu);
|
||||||
|
virtual void dataIndividualRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t destination, APDU& apdu);
|
||||||
|
virtual void dataConnectedRequest(uint16_t tsap, Priority priority, APDU& apdu); // apdu must be valid until it was confirmed
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void propertyDataSend(ApduType type, AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
|
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 objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data,
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "group_object_table_object.h"
|
#include "group_object_table_object.h"
|
||||||
#include "application_program_object.h"
|
#include "application_program_object.h"
|
||||||
#include "application_layer.h"
|
#include "application_layer.h"
|
||||||
|
#include "secure_application_layer.h"
|
||||||
#include "transport_layer.h"
|
#include "transport_layer.h"
|
||||||
#include "network_layer.h"
|
#include "network_layer.h"
|
||||||
#include "data_link_layer.h"
|
#include "data_link_layer.h"
|
||||||
@ -91,7 +92,11 @@ class BauSystemB : protected BusAccessUnit
|
|||||||
GroupObjectTableObject _groupObjTable;
|
GroupObjectTableObject _groupObjTable;
|
||||||
ApplicationProgramObject _appProgram;
|
ApplicationProgramObject _appProgram;
|
||||||
Platform& _platform;
|
Platform& _platform;
|
||||||
|
#ifdef USE_DATASECURE
|
||||||
|
SecureApplicationLayer _appLayer;
|
||||||
|
#else
|
||||||
ApplicationLayer _appLayer;
|
ApplicationLayer _appLayer;
|
||||||
|
#endif
|
||||||
TransportLayer _transLayer;
|
TransportLayer _transLayer;
|
||||||
NetworkLayer _netLayer;
|
NetworkLayer _netLayer;
|
||||||
bool _configured = true;
|
bool _configured = true;
|
||||||
|
@ -19,3 +19,5 @@
|
|||||||
#ifdef USE_USB
|
#ifdef USE_USB
|
||||||
#define USE_CEMI_SERVER
|
#define USE_CEMI_SERVER
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define USE_DATASECURE
|
||||||
|
106
src/knx/secure_application_layer.cpp
Normal file
106
src/knx/secure_application_layer.cpp
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
#include "secure_application_layer.h"
|
||||||
|
#include "transport_layer.h"
|
||||||
|
#include "cemi_frame.h"
|
||||||
|
#include "association_table_object.h"
|
||||||
|
#include "apdu.h"
|
||||||
|
#include "bau.h"
|
||||||
|
#include "string.h"
|
||||||
|
#include "bits.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
SecureApplicationLayer::SecureApplicationLayer(AssociationTableObject& assocTable, BusAccessUnit& bau):
|
||||||
|
ApplicationLayer(assocTable, bau)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::dataGroupIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataGroupIndication(hopType, priority, tsap, apdu);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::dataGroupConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, bool status)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataGroupConfirm(ack, hopType, priority, tsap, apdu, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::dataBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataBroadcastIndication(hopType, priority, source, apdu);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::dataBroadcastConfirm(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, bool status)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataBroadcastConfirm(ack, hopType, priority, apdu, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::dataSystemBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataSystemBroadcastIndication(hopType, priority, source, apdu);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::dataSystemBroadcastConfirm(HopCountType hopType, Priority priority, APDU& apdu, bool status)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataSystemBroadcastConfirm(hopType, priority, apdu, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::dataIndividualIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataIndividualIndication(hopType, priority, tsap, apdu);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::dataIndividualConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, bool status)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataIndividualConfirm(ack, hopType, priority, tsap, apdu, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::connectIndication(uint16_t tsap)
|
||||||
|
{
|
||||||
|
ApplicationLayer::connectIndication(tsap);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::connectConfirm(uint16_t destination, uint16_t tsap, bool status)
|
||||||
|
{
|
||||||
|
ApplicationLayer::connectConfirm(destination, tsap, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::disconnectIndication(uint16_t tsap)
|
||||||
|
{
|
||||||
|
ApplicationLayer::disconnectIndication(tsap);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::disconnectConfirm(Priority priority, uint16_t tsap, bool status)
|
||||||
|
{
|
||||||
|
ApplicationLayer::disconnectConfirm(priority, tsap, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::dataConnectedIndication(Priority priority, uint16_t tsap, APDU& apdu)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataConnectedIndication(priority, tsap, apdu);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::dataConnectedConfirm(uint16_t tsap)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataConnectedConfirm(tsap);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecureApplicationLayer::dataGroupRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataGroupRequest(ack, hopType, priority, tsap, apdu);
|
||||||
|
}
|
||||||
|
void SecureApplicationLayer::dataBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
|
||||||
|
}
|
||||||
|
void SecureApplicationLayer::dataSystemBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataSystemBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu);
|
||||||
|
}
|
||||||
|
void SecureApplicationLayer::dataIndividualRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t destination, APDU& apdu)
|
||||||
|
{
|
||||||
|
ApplicationLayer::dataIndividualRequest(ack, hopType, priority, destination, apdu);
|
||||||
|
}
|
||||||
|
void SecureApplicationLayer::dataConnectedRequest(uint16_t tsap, Priority priority, APDU& apdu)
|
||||||
|
{
|
||||||
|
// apdu must be valid until it was confirmed
|
||||||
|
ApplicationLayer::dataConnectedRequest(tsap, priority, apdu);
|
||||||
|
}
|
53
src/knx/secure_application_layer.h
Normal file
53
src/knx/secure_application_layer.h
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "application_layer.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "knx_types.h"
|
||||||
|
#include "apdu.h"
|
||||||
|
|
||||||
|
class AssociationTableObject;
|
||||||
|
class BusAccessUnit;
|
||||||
|
/**
|
||||||
|
* This is an implementation of the application layer as specified in @cite knx:3/5/1.
|
||||||
|
* It provides methods for the BusAccessUnit to do different things and translates this
|
||||||
|
* call to an APDU and calls the correct method of the TransportLayer.
|
||||||
|
* It also takes calls from TransportLayer, decodes the submitted APDU and calls the coresponding
|
||||||
|
* methods of the BusAccessUnit class.
|
||||||
|
*/
|
||||||
|
class SecureApplicationLayer : public ApplicationLayer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* The constructor.
|
||||||
|
* @param assocTable The AssociationTable is used to translate between asap (i.e. group objects) and group addresses.
|
||||||
|
* @param bau methods are called here depending of the content of the APDU
|
||||||
|
*/
|
||||||
|
SecureApplicationLayer(AssociationTableObject& assocTable, BusAccessUnit& bau);
|
||||||
|
|
||||||
|
// from transport layer
|
||||||
|
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);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// to transport layer
|
||||||
|
virtual void dataGroupRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu);
|
||||||
|
virtual void dataBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu);
|
||||||
|
virtual void dataSystemBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu);
|
||||||
|
virtual void dataIndividualRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t destination, APDU& apdu);
|
||||||
|
virtual void dataConnectedRequest(uint16_t tsap, Priority priority, APDU& apdu); // apdu must be valid until it was confirmed
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user