mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01:00 
			
		
		
		
	save work
This commit is contained in:
		
							parent
							
								
									318d350243
								
							
						
					
					
						commit
						692cbf78cb
					
				@ -8,6 +8,8 @@
 | 
			
		||||
#include "bits.h"
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
const SecurityControl ApplicationLayer::noSecurity {.toolAccess=true, .dataSecurity=DataSecurity::none};
 | 
			
		||||
 | 
			
		||||
ApplicationLayer::ApplicationLayer(AssociationTableObject& assocTable, BusAccessUnit& bau):
 | 
			
		||||
    _assocTable(assocTable),  _bau(bau)
 | 
			
		||||
{
 | 
			
		||||
@ -17,10 +19,11 @@ void ApplicationLayer::transportLayer(TransportLayer& layer)
 | 
			
		||||
{
 | 
			
		||||
    _transportLayer = &layer;
 | 
			
		||||
}
 | 
			
		||||
static constexpr SecurityControl noSecurity {.toolAccess=true, .dataSecurity=DataSecurity::none};
 | 
			
		||||
 | 
			
		||||
#pragma region TL Callbacks
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::dataGroupIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu)
 | 
			
		||||
void ApplicationLayer::dataGroupIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl& secCtrl = ApplicationLayer::noSecurity)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t len = apdu.length();
 | 
			
		||||
    uint8_t dataArray[len];
 | 
			
		||||
@ -44,13 +47,13 @@ void ApplicationLayer::dataGroupIndication(HopCountType hopType, Priority priori
 | 
			
		||||
        switch (apdu.type())
 | 
			
		||||
        {
 | 
			
		||||
            case GroupValueRead:
 | 
			
		||||
                _bau.groupValueReadIndication(asap, priority, hopType);
 | 
			
		||||
                _bau.groupValueReadIndication(asap, priority, hopType, secCtrl);
 | 
			
		||||
                break;
 | 
			
		||||
            case GroupValueResponse:
 | 
			
		||||
                _bau.groupValueReadAppLayerConfirm(asap, priority, hopType, data, len);
 | 
			
		||||
                _bau.groupValueReadAppLayerConfirm(asap, priority, hopType, secCtrl, data, len);
 | 
			
		||||
                break;
 | 
			
		||||
            case GroupValueWrite:
 | 
			
		||||
                _bau.groupValueWriteIndication(asap, priority, hopType, data, len);
 | 
			
		||||
                _bau.groupValueWriteIndication(asap, priority, hopType, secCtrl, data, len);
 | 
			
		||||
            default:
 | 
			
		||||
                /* other apdutypes ar not valid here. If the appear do nothing */
 | 
			
		||||
                break;
 | 
			
		||||
@ -58,18 +61,18 @@ void ApplicationLayer::dataGroupIndication(HopCountType hopType, Priority priori
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::dataGroupConfirm(AckType ack, HopCountType hopType, Priority priority,  uint16_t tsap, APDU& apdu, bool status)
 | 
			
		||||
void ApplicationLayer::dataGroupConfirm(AckType ack, HopCountType hopType, Priority priority,  uint16_t tsap, APDU& apdu, const SecurityControl &secCtrl, bool status)
 | 
			
		||||
{
 | 
			
		||||
    switch (apdu.type())
 | 
			
		||||
    {
 | 
			
		||||
    case GroupValueRead:
 | 
			
		||||
        _bau.groupValueReadLocalConfirm(ack, _savedAsapReadRequest, priority, hopType, status);
 | 
			
		||||
        _bau.groupValueReadLocalConfirm(ack, _savedAsapReadRequest, priority, hopType, secCtrl, status);
 | 
			
		||||
        break;
 | 
			
		||||
    case GroupValueResponse:
 | 
			
		||||
        _bau.groupValueReadResponseConfirm(ack, _savedAsapResponse, priority, hopType, apdu.data(), apdu.length() - 1, status);
 | 
			
		||||
        _bau.groupValueReadResponseConfirm(ack, _savedAsapResponse, priority, hopType, secCtrl, apdu.data(), apdu.length() - 1, status);
 | 
			
		||||
        break;
 | 
			
		||||
    case GroupValueWrite:
 | 
			
		||||
        _bau.groupValueWriteLocalConfirm(ack, _savedAsapWriteRequest, priority, hopType, apdu.data(), apdu.length() - 1, status);
 | 
			
		||||
        _bau.groupValueWriteLocalConfirm(ack, _savedAsapWriteRequest, priority, hopType, secCtrl, apdu.data(), apdu.length() - 1, status);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        print("datagroup-confirm: unhandled APDU-Type: ");
 | 
			
		||||
@ -77,7 +80,7 @@ void ApplicationLayer::dataGroupConfirm(AckType ack, HopCountType hopType, Prior
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::dataBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu)
 | 
			
		||||
void ApplicationLayer::dataBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t* data = apdu.data();
 | 
			
		||||
    switch (apdu.type())
 | 
			
		||||
@ -86,26 +89,26 @@ void ApplicationLayer::dataBroadcastIndication(HopCountType hopType, Priority pr
 | 
			
		||||
        {
 | 
			
		||||
            uint16_t newAddress;
 | 
			
		||||
            popWord(newAddress, data + 1);
 | 
			
		||||
            _bau.individualAddressWriteIndication(hopType, newAddress);
 | 
			
		||||
            _bau.individualAddressWriteIndication(hopType, secCtrl, newAddress);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case IndividualAddressRead:
 | 
			
		||||
            _bau.individualAddressReadIndication(hopType);
 | 
			
		||||
            _bau.individualAddressReadIndication(hopType, secCtrl);
 | 
			
		||||
            break;
 | 
			
		||||
        case IndividualAddressResponse:
 | 
			
		||||
            _bau.individualAddressReadAppLayerConfirm(hopType, apdu.frame().sourceAddress());
 | 
			
		||||
            _bau.individualAddressReadAppLayerConfirm(hopType, secCtrl, apdu.frame().sourceAddress());
 | 
			
		||||
            break;
 | 
			
		||||
        case IndividualAddressSerialNumberRead:
 | 
			
		||||
        {
 | 
			
		||||
            uint8_t* knxSerialNumber = &data[1];
 | 
			
		||||
            _bau.individualAddressSerialNumberReadIndication(priority, hopType, knxSerialNumber);
 | 
			
		||||
            _bau.individualAddressSerialNumberReadIndication(priority, hopType, secCtrl, knxSerialNumber);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case IndividualAddressSerialNumberResponse:
 | 
			
		||||
        {
 | 
			
		||||
            uint16_t domainAddress;
 | 
			
		||||
            popWord(domainAddress, data + 7);
 | 
			
		||||
            _bau.individualAddressSerialNumberReadAppLayerConfirm(hopType, data + 1, apdu.frame().sourceAddress(),
 | 
			
		||||
            _bau.individualAddressSerialNumberReadAppLayerConfirm(hopType, secCtrl, data + 1, apdu.frame().sourceAddress(),
 | 
			
		||||
                domainAddress);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
@ -114,13 +117,13 @@ void ApplicationLayer::dataBroadcastIndication(HopCountType hopType, Priority pr
 | 
			
		||||
            uint8_t* knxSerialNumber = &data[1];
 | 
			
		||||
            uint16_t newIndividualAddress;
 | 
			
		||||
            popWord(newIndividualAddress, &data[7]);
 | 
			
		||||
            _bau.individualAddressSerialNumberWriteIndication(priority, hopType, newIndividualAddress, knxSerialNumber);
 | 
			
		||||
            _bau.individualAddressSerialNumberWriteIndication(priority, hopType, secCtrl, newIndividualAddress, knxSerialNumber);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        default:
 | 
			
		||||
#if (MEDIUM_TYPE == 5)||(MEDIUM_TYPE == 0)
 | 
			
		||||
            // Make sure we also check if it is a service normally available only on SystemBroadcast on open media
 | 
			
		||||
            dataSystemBroadcastIndication(hopType, priority, source, apdu);
 | 
			
		||||
            dataSystemBroadcastIndication(hopType, priority, source, apdu, secCtrl);
 | 
			
		||||
#else
 | 
			
		||||
            print("Broadcast-indication: unhandled APDU-Type: ");
 | 
			
		||||
            println(apdu.type());
 | 
			
		||||
@ -130,7 +133,7 @@ void ApplicationLayer::dataBroadcastIndication(HopCountType hopType, Priority pr
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::dataBroadcastConfirm(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, bool status)
 | 
			
		||||
void ApplicationLayer::dataBroadcastConfirm(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, const SecurityControl& secCtrl, bool status)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t* data = apdu.data();
 | 
			
		||||
    switch (apdu.type())
 | 
			
		||||
@ -139,36 +142,36 @@ void ApplicationLayer::dataBroadcastConfirm(AckType ack, HopCountType hopType, P
 | 
			
		||||
        {
 | 
			
		||||
            uint16_t newAddress;
 | 
			
		||||
            popWord(newAddress, data + 1);
 | 
			
		||||
            _bau.individualAddressWriteLocalConfirm(ack, hopType, newAddress, status);
 | 
			
		||||
            _bau.individualAddressWriteLocalConfirm(ack, hopType, secCtrl, newAddress, status);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case IndividualAddressRead:
 | 
			
		||||
            _bau.individualAddressReadLocalConfirm(ack, hopType, status);
 | 
			
		||||
            _bau.individualAddressReadLocalConfirm(ack, hopType, secCtrl, status);
 | 
			
		||||
            break;
 | 
			
		||||
        case IndividualAddressResponse:
 | 
			
		||||
            _bau.individualAddressReadResponseConfirm(ack, hopType, status);
 | 
			
		||||
            _bau.individualAddressReadResponseConfirm(ack, hopType, secCtrl, status);
 | 
			
		||||
            break;
 | 
			
		||||
        case IndividualAddressSerialNumberRead:
 | 
			
		||||
            _bau.individualAddressSerialNumberReadLocalConfirm(ack, hopType, data + 1, status);
 | 
			
		||||
            _bau.individualAddressSerialNumberReadLocalConfirm(ack, hopType, secCtrl, data + 1, status);
 | 
			
		||||
            break;
 | 
			
		||||
        case IndividualAddressSerialNumberResponse:
 | 
			
		||||
        {
 | 
			
		||||
            uint16_t domainAddress;
 | 
			
		||||
            popWord(domainAddress, data + 7);
 | 
			
		||||
            _bau.individualAddressSerialNumberReadResponseConfirm(ack, hopType, data + 1, domainAddress, status);
 | 
			
		||||
            _bau.individualAddressSerialNumberReadResponseConfirm(ack, hopType, secCtrl, data + 1, domainAddress, status);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case IndividualAddressSerialNumberWrite:
 | 
			
		||||
        {
 | 
			
		||||
            uint16_t newAddress;
 | 
			
		||||
            popWord(newAddress, data + 7);
 | 
			
		||||
            _bau.individualAddressSerialNumberWriteLocalConfirm(ack, hopType, data + 1, newAddress, status);
 | 
			
		||||
            _bau.individualAddressSerialNumberWriteLocalConfirm(ack, hopType, secCtrl, data + 1, newAddress, status);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        default:
 | 
			
		||||
#if (MEDIUM_TYPE == 5)||(MEDIUM_TYPE == 0)
 | 
			
		||||
            // Make sure we also check if it is a service normally available only on SystemBroadcast on open media
 | 
			
		||||
            dataSystemBroadcastConfirm(hopType, priority, apdu, status);
 | 
			
		||||
            dataSystemBroadcastConfirm(hopType, priority, apdu, secCtrl, status);
 | 
			
		||||
#else
 | 
			
		||||
            print("Broadcast-confirm: unhandled APDU-Type: ");
 | 
			
		||||
            println(apdu.type());
 | 
			
		||||
@ -178,7 +181,7 @@ void ApplicationLayer::dataBroadcastConfirm(AckType ack, HopCountType hopType, P
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::dataSystemBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu)
 | 
			
		||||
void ApplicationLayer::dataSystemBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu, const SecurityControl &secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    const uint8_t* data = apdu.data();
 | 
			
		||||
    switch (apdu.type())
 | 
			
		||||
@ -195,20 +198,20 @@ void ApplicationLayer::dataSystemBroadcastIndication(HopCountType hopType, Prior
 | 
			
		||||
            popByte(testInfo[1], data + 5);
 | 
			
		||||
            propertyId = (propertyId >> 4) & 0x0FFF;;
 | 
			
		||||
            testInfo[0] &= 0x0F;
 | 
			
		||||
            _bau.systemNetworkParameterReadIndication(priority, hopType, objectType, propertyId, testInfo, sizeof(testInfo));
 | 
			
		||||
            _bau.systemNetworkParameterReadIndication(priority, hopType, secCtrl, objectType, propertyId, testInfo, sizeof(testInfo));
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case DomainAddressSerialNumberWrite:
 | 
			
		||||
        {
 | 
			
		||||
            const uint8_t* knxSerialNumber = &data[1];
 | 
			
		||||
            const uint8_t* domainAddress = &data[7];
 | 
			
		||||
            _bau.domainAddressSerialNumberWriteIndication(priority, hopType, domainAddress, knxSerialNumber);
 | 
			
		||||
            _bau.domainAddressSerialNumberWriteIndication(priority, hopType, secCtrl, domainAddress, knxSerialNumber);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case DomainAddressSerialNumberRead:
 | 
			
		||||
        {
 | 
			
		||||
            const uint8_t* knxSerialNumber = &data[1];
 | 
			
		||||
            _bau.domainAddressSerialNumberReadIndication(priority, hopType, knxSerialNumber);
 | 
			
		||||
            _bau.domainAddressSerialNumberReadIndication(priority, hopType, secCtrl, knxSerialNumber);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        default:
 | 
			
		||||
@ -222,7 +225,7 @@ void ApplicationLayer::dataSystemBroadcastIndication(HopCountType hopType, Prior
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::dataSystemBroadcastConfirm(HopCountType hopType, Priority priority, APDU& apdu, bool status)
 | 
			
		||||
void ApplicationLayer::dataSystemBroadcastConfirm(HopCountType hopType, Priority priority, APDU& apdu, const SecurityControl& secCtrl, bool status)
 | 
			
		||||
{
 | 
			
		||||
    const uint8_t* data = apdu.data();
 | 
			
		||||
    switch (apdu.type())
 | 
			
		||||
@ -239,20 +242,20 @@ void ApplicationLayer::dataSystemBroadcastConfirm(HopCountType hopType, Priority
 | 
			
		||||
            popByte(testInfo[1], data + 5);
 | 
			
		||||
            propertyId = (propertyId >> 4) & 0x0FFF;;
 | 
			
		||||
            testInfo[0] &= 0x0F;
 | 
			
		||||
            _bau.systemNetworkParameterReadLocalConfirm(priority, hopType, objectType, propertyId, testInfo, sizeof(testInfo), status);
 | 
			
		||||
            _bau.systemNetworkParameterReadLocalConfirm(priority, hopType, secCtrl, objectType, propertyId, testInfo, sizeof(testInfo), status);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case DomainAddressSerialNumberWrite:
 | 
			
		||||
        {
 | 
			
		||||
            const uint8_t* knxSerialNumber = &data[1];
 | 
			
		||||
            const uint8_t* domainAddress = &data[7];
 | 
			
		||||
            _bau.domainAddressSerialNumberWriteLocalConfirm(priority, hopType, domainAddress, knxSerialNumber, status);
 | 
			
		||||
            _bau.domainAddressSerialNumberWriteLocalConfirm(priority, hopType, secCtrl, domainAddress, knxSerialNumber, status);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case DomainAddressSerialNumberRead:
 | 
			
		||||
        {
 | 
			
		||||
            const uint8_t* knxSerialNumber = &data[1];
 | 
			
		||||
            _bau.domainAddressSerialNumberReadLocalConfirm(priority, hopType, knxSerialNumber, status);
 | 
			
		||||
            _bau.domainAddressSerialNumberReadLocalConfirm(priority, hopType, secCtrl, knxSerialNumber, status);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        default:
 | 
			
		||||
@ -266,14 +269,14 @@ void ApplicationLayer::dataSystemBroadcastConfirm(HopCountType hopType, Priority
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::dataIndividualIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu)
 | 
			
		||||
void ApplicationLayer::dataIndividualIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    individualIndication(hopType, priority, tsap, apdu);
 | 
			
		||||
    individualIndication(hopType, priority, tsap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::dataIndividualConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, bool status)
 | 
			
		||||
void ApplicationLayer::dataIndividualConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl &secCtrl, bool status)
 | 
			
		||||
{
 | 
			
		||||
    individualConfirm(ack, hopType, priority, tsap, apdu, status);
 | 
			
		||||
    individualConfirm(ack, hopType, priority, tsap, apdu, secCtrl, status);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::connectIndication(uint16_t tsap)
 | 
			
		||||
@ -302,9 +305,9 @@ void ApplicationLayer::disconnectConfirm(Priority priority, uint16_t tsap, bool
 | 
			
		||||
    _connectedTsap = -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::dataConnectedIndication(Priority priority, uint16_t tsap, APDU& apdu)
 | 
			
		||||
void ApplicationLayer::dataConnectedIndication(Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    individualIndication(NetworkLayerParameter, priority, tsap, apdu);
 | 
			
		||||
    individualIndication(NetworkLayerParameter, priority, tsap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::dataConnectedConfirm(uint16_t tsap)
 | 
			
		||||
@ -312,7 +315,7 @@ void ApplicationLayer::dataConnectedConfirm(uint16_t tsap)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#pragma endregion
 | 
			
		||||
void ApplicationLayer::groupValueReadRequest(AckType ack, uint16_t asap, Priority priority, HopCountType hopType)
 | 
			
		||||
void ApplicationLayer::groupValueReadRequest(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    _savedAsapReadRequest = asap;
 | 
			
		||||
    CemiFrame frame(1);
 | 
			
		||||
@ -326,59 +329,59 @@ void ApplicationLayer::groupValueReadRequest(AckType ack, uint16_t asap, Priorit
 | 
			
		||||
    uint16_t tsap = (uint16_t)value;
 | 
			
		||||
 | 
			
		||||
    // first to bus then to itself
 | 
			
		||||
    dataGroupRequest(ack, hopType, priority, tsap, apdu);
 | 
			
		||||
    dataGroupIndication(hopType, priority, tsap, apdu);
 | 
			
		||||
    dataGroupRequest(ack, hopType, priority, tsap, apdu, secCtrl);
 | 
			
		||||
    dataGroupIndication(hopType, priority, tsap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::groupValueReadResponse(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, uint8_t * data, uint8_t dataLength)
 | 
			
		||||
void ApplicationLayer::groupValueReadResponse(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl& secCtrl, uint8_t * data, uint8_t dataLength)
 | 
			
		||||
{
 | 
			
		||||
    _savedAsapResponse = asap;
 | 
			
		||||
    groupValueSend(GroupValueResponse, ack, asap, priority, hopType, data, dataLength);
 | 
			
		||||
    groupValueSend(GroupValueResponse, ack, asap, priority, hopType, secCtrl, data, dataLength);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::groupValueWriteRequest(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, uint8_t * data, uint8_t dataLength)
 | 
			
		||||
void ApplicationLayer::groupValueWriteRequest(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl& secCtrl, uint8_t * data, uint8_t dataLength)
 | 
			
		||||
{
 | 
			
		||||
    _savedAsapWriteRequest = asap;
 | 
			
		||||
    groupValueSend(GroupValueWrite, ack, asap, priority, hopType, data, dataLength);
 | 
			
		||||
    groupValueSend(GroupValueWrite, ack, asap, priority, hopType, secCtrl, data, dataLength);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::individualAddressWriteRequest(AckType ack, HopCountType hopType, uint16_t newaddress)
 | 
			
		||||
void ApplicationLayer::individualAddressWriteRequest(AckType ack, HopCountType hopType, const SecurityControl& secCtrl, uint16_t newaddress)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(3);
 | 
			
		||||
    APDU& apdu = frame.apdu();
 | 
			
		||||
    apdu.type(IndividualAddressWrite);
 | 
			
		||||
    uint8_t* apduData = apdu.data();
 | 
			
		||||
    pushWord(newaddress, apduData + 1);
 | 
			
		||||
    dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
 | 
			
		||||
    dataBroadcastRequest(ack, hopType, SystemPriority, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::individualAddressReadRequest(AckType ack, HopCountType hopType)
 | 
			
		||||
void ApplicationLayer::individualAddressReadRequest(AckType ack, HopCountType hopType, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(1);
 | 
			
		||||
    APDU& apdu = frame.apdu();
 | 
			
		||||
    apdu.type(IndividualAddressRead);
 | 
			
		||||
    dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
 | 
			
		||||
    dataBroadcastRequest(ack, hopType, SystemPriority, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::individualAddressReadResponse(AckType ack, HopCountType hopType)
 | 
			
		||||
void ApplicationLayer::individualAddressReadResponse(AckType ack, HopCountType hopType, const SecurityControl &secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(1);
 | 
			
		||||
    APDU& apdu = frame.apdu();
 | 
			
		||||
    apdu.type(IndividualAddressResponse);
 | 
			
		||||
    dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
 | 
			
		||||
    dataBroadcastRequest(ack, hopType, SystemPriority, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::individualAddressSerialNumberReadRequest(AckType ack, HopCountType hopType, uint8_t * serialNumber)
 | 
			
		||||
void ApplicationLayer::individualAddressSerialNumberReadRequest(AckType ack, HopCountType hopType, const SecurityControl &secCtrl, uint8_t * serialNumber)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(7);
 | 
			
		||||
    APDU& apdu = frame.apdu();
 | 
			
		||||
    apdu.type(IndividualAddressSerialNumberRead);
 | 
			
		||||
    uint8_t* data = apdu.data() + 1;
 | 
			
		||||
    memcpy(data, serialNumber, 6);
 | 
			
		||||
    dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
 | 
			
		||||
    dataBroadcastRequest(ack, hopType, SystemPriority, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::individualAddressSerialNumberReadResponse(AckType ack, HopCountType hopType, 
 | 
			
		||||
void ApplicationLayer::individualAddressSerialNumberReadResponse(AckType ack, HopCountType hopType, const SecurityControl& secCtrl,
 | 
			
		||||
    uint8_t * serialNumber, uint16_t domainAddress)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(7);
 | 
			
		||||
@ -388,10 +391,10 @@ void ApplicationLayer::individualAddressSerialNumberReadResponse(AckType ack, Ho
 | 
			
		||||
    memcpy(data, serialNumber, 6);
 | 
			
		||||
    data += 6;
 | 
			
		||||
    pushWord(domainAddress, data);
 | 
			
		||||
    dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
 | 
			
		||||
    dataBroadcastRequest(ack, hopType, SystemPriority, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::individualAddressSerialNumberWriteRequest(AckType ack, HopCountType hopType, uint8_t * serialNumber,
 | 
			
		||||
void ApplicationLayer::individualAddressSerialNumberWriteRequest(AckType ack, HopCountType hopType, const SecurityControl &secCtrl, uint8_t * serialNumber,
 | 
			
		||||
    uint16_t newaddress)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(13);
 | 
			
		||||
@ -401,10 +404,10 @@ void ApplicationLayer::individualAddressSerialNumberWriteRequest(AckType ack, Ho
 | 
			
		||||
    memcpy(data, serialNumber, 6);
 | 
			
		||||
    data += 6;
 | 
			
		||||
    pushWord(newaddress, data);
 | 
			
		||||
    dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
 | 
			
		||||
    dataBroadcastRequest(ack, hopType, SystemPriority, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::deviceDescriptorReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, 
 | 
			
		||||
void ApplicationLayer::deviceDescriptorReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
    uint8_t descriptorType)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(1);
 | 
			
		||||
@ -413,10 +416,10 @@ void ApplicationLayer::deviceDescriptorReadRequest(AckType ack, Priority priorit
 | 
			
		||||
    uint8_t* data = apdu.data();
 | 
			
		||||
    *data |= (descriptorType & 0x3f);
 | 
			
		||||
    
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::deviceDescriptorReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, 
 | 
			
		||||
void ApplicationLayer::deviceDescriptorReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
    uint8_t descriptorType, uint8_t* deviceDescriptor)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t length = 0;
 | 
			
		||||
@ -442,7 +445,7 @@ void ApplicationLayer::deviceDescriptorReadResponse(AckType ack, Priority priori
 | 
			
		||||
    if (length > 1)
 | 
			
		||||
        memcpy(data + 1, deviceDescriptor, length - 1);
 | 
			
		||||
    
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::connectRequest(uint16_t destination, Priority priority)
 | 
			
		||||
@ -455,19 +458,19 @@ void ApplicationLayer::disconnectRequest(Priority priority)
 | 
			
		||||
    _transportLayer->disconnectRequest(_connectedTsap, priority);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::restartRequest(AckType ack, Priority priority, HopCountType hopType)
 | 
			
		||||
void ApplicationLayer::restartRequest(AckType ack, Priority priority, HopCountType hopType, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(1);
 | 
			
		||||
    APDU& apdu = frame.apdu();
 | 
			
		||||
    apdu.type(Restart);
 | 
			
		||||
 | 
			
		||||
    individualSend(ack, hopType, priority, _connectedTsap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, _connectedTsap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//TODO: ApplicationLayer::systemNetworkParameterReadRequest()
 | 
			
		||||
void ApplicationLayer::systemNetworkParameterReadResponse(Priority priority, HopCountType hopType, 
 | 
			
		||||
void ApplicationLayer::systemNetworkParameterReadResponse(Priority priority, HopCountType hopType, const SecurityControl &secCtrl,
 | 
			
		||||
                                                          uint16_t objectType, uint16_t propertyId,
 | 
			
		||||
                                                          uint8_t* testInfo, uint16_t testInfoLength, 
 | 
			
		||||
                                                          uint8_t* testInfo, uint16_t testInfoLength,
 | 
			
		||||
                                                          uint8_t* testResult, uint16_t testResultLength)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(testInfoLength + testResultLength + 3 + 1); // PID and testInfo share an octet (+3) and +1 for APCI byte(?)
 | 
			
		||||
@ -482,12 +485,12 @@ void ApplicationLayer::systemNetworkParameterReadResponse(Priority priority, Hop
 | 
			
		||||
 | 
			
		||||
    //apdu.printPDU();
 | 
			
		||||
 | 
			
		||||
    dataSystemBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu);
 | 
			
		||||
    dataSystemBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//TODO: ApplicationLayer::domainAddressSerialNumberWriteRequest()
 | 
			
		||||
//TODO: ApplicationLayer::domainAddressSerialNumberReadRequest()
 | 
			
		||||
void ApplicationLayer::domainAddressSerialNumberReadResponse(Priority priority, HopCountType hopType, const uint8_t* rfDoA,
 | 
			
		||||
void ApplicationLayer::domainAddressSerialNumberReadResponse(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* rfDoA,
 | 
			
		||||
                                                             const uint8_t* knxSerialNumber)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(13); 
 | 
			
		||||
@ -501,12 +504,12 @@ void ApplicationLayer::domainAddressSerialNumberReadResponse(Priority priority,
 | 
			
		||||
 | 
			
		||||
    //apdu.printPDU();
 | 
			
		||||
 | 
			
		||||
    dataSystemBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu);
 | 
			
		||||
    dataSystemBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//TODO: ApplicationLayer::IndividualAddressSerialNumberWriteRequest()
 | 
			
		||||
//TODO: ApplicationLayer::IndividualAddressSerialNumberReadRequest()
 | 
			
		||||
void ApplicationLayer::IndividualAddressSerialNumberReadResponse(Priority priority, HopCountType hopType, const uint8_t* rfDoA,
 | 
			
		||||
void ApplicationLayer::IndividualAddressSerialNumberReadResponse(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* rfDoA,
 | 
			
		||||
                                                                 const uint8_t* knxSerialNumber)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(13); 
 | 
			
		||||
@ -520,10 +523,10 @@ void ApplicationLayer::IndividualAddressSerialNumberReadResponse(Priority priori
 | 
			
		||||
 | 
			
		||||
     //apdu.printPDU();
 | 
			
		||||
 | 
			
		||||
    dataBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu);
 | 
			
		||||
    dataBroadcastRequest(AckDontCare, hopType, SystemPriority, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::propertyValueReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, 
 | 
			
		||||
void ApplicationLayer::propertyValueReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
    uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(5);
 | 
			
		||||
@ -536,24 +539,24 @@ void ApplicationLayer::propertyValueReadRequest(AckType ack, Priority priority,
 | 
			
		||||
    pushWord(startIndex & 0xfff, data);
 | 
			
		||||
    *data &= ((numberOfElements & 0xf) << 4);
 | 
			
		||||
    
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::propertyValueReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, 
 | 
			
		||||
void ApplicationLayer::propertyValueReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
    uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length)
 | 
			
		||||
{
 | 
			
		||||
    propertyDataSend(PropertyValueResponse, ack, priority, hopType, asap, objectIndex, propertyId, numberOfElements,
 | 
			
		||||
    propertyDataSend(PropertyValueResponse, ack, priority, hopType, asap, secCtrl, objectIndex, propertyId, numberOfElements,
 | 
			
		||||
        startIndex, data, length);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::propertyValueWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, 
 | 
			
		||||
void ApplicationLayer::propertyValueWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
    uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t * data, uint8_t length)
 | 
			
		||||
{
 | 
			
		||||
    propertyDataSend(PropertyValueWrite, ack, priority, hopType, asap, objectIndex, propertyId, numberOfElements,
 | 
			
		||||
    propertyDataSend(PropertyValueWrite, ack, priority, hopType, asap, secCtrl, objectIndex, propertyId, numberOfElements,
 | 
			
		||||
        startIndex, data, length);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::functionPropertyStateResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
void ApplicationLayer::functionPropertyStateResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
                                                     uint8_t objectIndex, uint8_t propertyId, uint8_t* resultData, uint8_t resultLength)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(3 + resultLength + 1);
 | 
			
		||||
@ -567,12 +570,12 @@ void ApplicationLayer::functionPropertyStateResponse(AckType ack, Priority prior
 | 
			
		||||
        memcpy(&data[2], resultData, resultLength);
 | 
			
		||||
 | 
			
		||||
    if (asap == _connectedTsap)
 | 
			
		||||
        dataConnectedRequest(asap, priority, apdu);
 | 
			
		||||
        dataConnectedRequest(asap, priority, apdu, secCtrl);
 | 
			
		||||
    else
 | 
			
		||||
        dataIndividualRequest(ack, hopType, priority, asap, apdu);
 | 
			
		||||
        dataIndividualRequest(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::propertyDescriptionReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
void ApplicationLayer::propertyDescriptionReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
    uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(4);
 | 
			
		||||
@ -582,10 +585,10 @@ void ApplicationLayer::propertyDescriptionReadRequest(AckType ack, Priority prio
 | 
			
		||||
    data[1] = objectIndex;
 | 
			
		||||
    data[2] = propertyId;
 | 
			
		||||
    data[3] = propertyIndex;
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::propertyDescriptionReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
void ApplicationLayer::propertyDescriptionReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
    uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex, bool writeEnable, uint8_t type, 
 | 
			
		||||
    uint16_t maxNumberOfElements, uint8_t access)
 | 
			
		||||
{
 | 
			
		||||
@ -601,10 +604,10 @@ void ApplicationLayer::propertyDescriptionReadResponse(AckType ack, Priority pri
 | 
			
		||||
    data[4] |= (type & 0x3f);
 | 
			
		||||
    pushWord(maxNumberOfElements & 0xfff, data + 5);
 | 
			
		||||
    data[7] = access;
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::memoryReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
void ApplicationLayer::memoryReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t number,
 | 
			
		||||
    uint16_t memoryAddress)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(3);
 | 
			
		||||
@ -613,22 +616,22 @@ void ApplicationLayer::memoryReadRequest(AckType ack, Priority priority, HopCoun
 | 
			
		||||
    uint8_t* data = apdu.data();
 | 
			
		||||
    *data |= (number & 0x3f);
 | 
			
		||||
    pushWord(memoryAddress, data + 1);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::memoryReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
void ApplicationLayer::memoryReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t number,
 | 
			
		||||
    uint16_t memoryAddress, uint8_t * memoryData)
 | 
			
		||||
{
 | 
			
		||||
    memorySend(MemoryResponse, ack, priority, hopType, asap, number, memoryAddress, memoryData);
 | 
			
		||||
    memorySend(MemoryResponse, ack, priority, hopType, asap, secCtrl, number, memoryAddress, memoryData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::memoryWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
void ApplicationLayer::memoryWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
    uint8_t number, uint16_t memoryAddress, uint8_t * data)
 | 
			
		||||
{
 | 
			
		||||
    memorySend(MemoryWrite, ack, priority, hopType, asap, number, memoryAddress, data);
 | 
			
		||||
    memorySend(MemoryWrite, ack, priority, hopType, asap, secCtrl, number, memoryAddress, data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::userMemoryReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
void ApplicationLayer::userMemoryReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
    uint8_t number, uint32_t memoryAddress)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(4);
 | 
			
		||||
@ -638,30 +641,30 @@ void ApplicationLayer::userMemoryReadRequest(AckType ack, Priority priority, Hop
 | 
			
		||||
    data[1] |= (number & 0xf);
 | 
			
		||||
    data[1] |= ((memoryAddress >> 12) & 0xf0);
 | 
			
		||||
    pushWord(memoryAddress & 0xff, data + 2);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::userMemoryReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, 
 | 
			
		||||
void ApplicationLayer::userMemoryReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
    uint8_t number, uint32_t memoryAddress, uint8_t * memoryData)
 | 
			
		||||
{
 | 
			
		||||
    userMemorySend(UserMemoryResponse, ack, priority, hopType, asap, number, memoryAddress, memoryData);
 | 
			
		||||
    userMemorySend(UserMemoryResponse, ack, priority, hopType, asap, secCtrl, number, memoryAddress, memoryData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::userMemoryWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
void ApplicationLayer::userMemoryWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
    uint8_t number, uint32_t memoryAddress, uint8_t * memoryData)
 | 
			
		||||
{
 | 
			
		||||
    userMemorySend(UserMemoryWrite, ack, priority, hopType, asap, number, memoryAddress, memoryData);
 | 
			
		||||
    userMemorySend(UserMemoryWrite, ack, priority, hopType, asap, secCtrl, number, memoryAddress, memoryData);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::userManufacturerInfoReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap)
 | 
			
		||||
void ApplicationLayer::userManufacturerInfoReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(1);
 | 
			
		||||
    APDU& apdu = frame.apdu();
 | 
			
		||||
    apdu.type(UserManufacturerInfoRead);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::userManufacturerInfoReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
void ApplicationLayer::userManufacturerInfoReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
    uint8_t* info)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(4);
 | 
			
		||||
@ -669,30 +672,30 @@ void ApplicationLayer::userManufacturerInfoReadResponse(AckType ack, Priority pr
 | 
			
		||||
    apdu.type(UserMemoryRead);
 | 
			
		||||
    uint8_t* data = apdu.data();
 | 
			
		||||
    memcpy(data + 1, info, 3);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::authorizeRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint32_t key)
 | 
			
		||||
void ApplicationLayer::authorizeRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint32_t key)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(6);
 | 
			
		||||
    APDU& apdu = frame.apdu();
 | 
			
		||||
    apdu.type(AuthorizeRequest);
 | 
			
		||||
    uint8_t* data = apdu.data();
 | 
			
		||||
    pushInt(key, data + 2);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::authorizeResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t level)
 | 
			
		||||
void ApplicationLayer::authorizeResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t level)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(2);
 | 
			
		||||
    APDU& apdu = frame.apdu();
 | 
			
		||||
    apdu.type(AuthorizeResponse);
 | 
			
		||||
    uint8_t* data = apdu.data();
 | 
			
		||||
    data[1] = level;
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::keyWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t level, uint32_t key)
 | 
			
		||||
void ApplicationLayer::keyWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t level, uint32_t key)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(6);
 | 
			
		||||
    APDU& apdu = frame.apdu();
 | 
			
		||||
@ -700,20 +703,20 @@ void ApplicationLayer::keyWriteRequest(AckType ack, Priority priority, HopCountT
 | 
			
		||||
    uint8_t* data = apdu.data();
 | 
			
		||||
    data[1] = level;
 | 
			
		||||
    pushInt(key, data + 2);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::keyWriteResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t level)
 | 
			
		||||
void ApplicationLayer::keyWriteResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t level)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(6);
 | 
			
		||||
    APDU& apdu = frame.apdu();
 | 
			
		||||
    apdu.type(KeyResponse);
 | 
			
		||||
    uint8_t* data = apdu.data();
 | 
			
		||||
    data[1] = level;
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::propertyDataSend(ApduType type, AckType ack, Priority priority, HopCountType hopType, uint16_t asap, 
 | 
			
		||||
void ApplicationLayer::propertyDataSend(ApduType type, AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
    uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(5 + length);
 | 
			
		||||
@ -730,12 +733,12 @@ void ApplicationLayer::propertyDataSend(ApduType type, AckType ack, Priority pri
 | 
			
		||||
        memcpy(apduData, data, length);
 | 
			
		||||
 | 
			
		||||
    if (asap == _connectedTsap)
 | 
			
		||||
        dataConnectedRequest(asap, priority, apdu);
 | 
			
		||||
        dataConnectedRequest(asap, priority, apdu, secCtrl);
 | 
			
		||||
    else
 | 
			
		||||
        dataIndividualRequest(ack, hopType, priority, asap, apdu);
 | 
			
		||||
        dataIndividualRequest(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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, const SecurityControl &secCtrl,
 | 
			
		||||
    uint8_t* data,  uint8_t& dataLength)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(dataLength + 1);
 | 
			
		||||
@ -754,11 +757,11 @@ 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
 | 
			
		||||
    uint16_t tsap = (uint16_t)_assocTable.translateAsap(asap);
 | 
			
		||||
    dataGroupRequest(ack, hopType, priority, tsap, apdu);
 | 
			
		||||
    dataGroupIndication(hopType, priority, tsap, apdu);
 | 
			
		||||
    dataGroupRequest(ack, hopType, priority, tsap, apdu, secCtrl);
 | 
			
		||||
    dataGroupIndication(hopType, priority, tsap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::memorySend(ApduType type, AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
void ApplicationLayer::memorySend(ApduType type, AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t number,
 | 
			
		||||
    uint16_t memoryAddress, uint8_t * memoryData)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(3 + number);
 | 
			
		||||
@ -770,10 +773,10 @@ void ApplicationLayer::memorySend(ApduType type, AckType ack, Priority priority,
 | 
			
		||||
    if (number > 0)
 | 
			
		||||
        memcpy(data + 3, memoryData, number);
 | 
			
		||||
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::userMemorySend(ApduType type, AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
void ApplicationLayer::userMemorySend(ApduType type, AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t number,
 | 
			
		||||
    uint32_t memoryAddress, uint8_t * memoryData)
 | 
			
		||||
{
 | 
			
		||||
    CemiFrame frame(4 + number);
 | 
			
		||||
@ -785,30 +788,30 @@ void ApplicationLayer::userMemorySend(ApduType type, AckType ack, Priority prior
 | 
			
		||||
    pushWord(memoryAddress & 0xffff, data + 2);
 | 
			
		||||
    if (number > 0)
 | 
			
		||||
        memcpy(data + 4, memoryData, number);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu);
 | 
			
		||||
    individualSend(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::individualIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU & apdu)
 | 
			
		||||
void ApplicationLayer::individualIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU & apdu, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t* data = apdu.data();
 | 
			
		||||
    switch (apdu.type())
 | 
			
		||||
    {
 | 
			
		||||
        case DeviceDescriptorRead:
 | 
			
		||||
            _bau.deviceDescriptorReadIndication(priority, hopType, tsap, *data & 0x3f);
 | 
			
		||||
            _bau.deviceDescriptorReadIndication(priority, hopType, tsap, secCtrl, *data & 0x3f);
 | 
			
		||||
            break;
 | 
			
		||||
        case DeviceDescriptorResponse:
 | 
			
		||||
            _bau.deviceDescriptorReadAppLayerConfirm(priority, hopType, tsap, *data & 0x3f, data + 1);
 | 
			
		||||
            _bau.deviceDescriptorReadAppLayerConfirm(priority, hopType, tsap, secCtrl, *data & 0x3f, data + 1);
 | 
			
		||||
            break;
 | 
			
		||||
        case Restart:
 | 
			
		||||
            if ((*data & 0x3f) == 0)
 | 
			
		||||
                _bau.restartRequestIndication(priority, hopType, tsap);
 | 
			
		||||
                _bau.restartRequestIndication(priority, hopType, tsap, secCtrl);
 | 
			
		||||
            break;
 | 
			
		||||
        case PropertyValueRead:
 | 
			
		||||
        {
 | 
			
		||||
            uint16_t startIndex;
 | 
			
		||||
            popWord(startIndex, data + 3);
 | 
			
		||||
            startIndex &= 0xfff;
 | 
			
		||||
            _bau.propertyValueReadIndication(priority, hopType, tsap, data[1], data[2], data[3] >> 4, startIndex);
 | 
			
		||||
            _bau.propertyValueReadIndication(priority, hopType, tsap, secCtrl, data[1], data[2], data[3] >> 4, startIndex);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case PropertyValueResponse:
 | 
			
		||||
@ -816,7 +819,7 @@ void ApplicationLayer::individualIndication(HopCountType hopType, Priority prior
 | 
			
		||||
            uint16_t startIndex;
 | 
			
		||||
            popWord(startIndex, data + 3);
 | 
			
		||||
            startIndex &= 0xfff;
 | 
			
		||||
            _bau.propertyValueReadAppLayerConfirm(priority, hopType, tsap, data[1], data[2], data[3] >> 4,
 | 
			
		||||
            _bau.propertyValueReadAppLayerConfirm(priority, hopType, tsap, secCtrl, data[1], data[2], data[3] >> 4,
 | 
			
		||||
                startIndex, data + 5, apdu.length() - 5);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
@ -825,67 +828,67 @@ void ApplicationLayer::individualIndication(HopCountType hopType, Priority prior
 | 
			
		||||
            uint16_t startIndex;
 | 
			
		||||
            popWord(startIndex, data + 3);
 | 
			
		||||
            startIndex &= 0xfff;
 | 
			
		||||
            _bau.propertyValueWriteIndication(priority, hopType, tsap, data[1], data[2], data[3] >> 4,
 | 
			
		||||
            _bau.propertyValueWriteIndication(priority, hopType, tsap, secCtrl, data[1], data[2], data[3] >> 4,
 | 
			
		||||
                startIndex, data + 5, apdu.length() - 5);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case FunctionPropertyCommand:
 | 
			
		||||
            _bau.functionPropertyCommandIndication(priority, hopType, tsap, data[1], data[2], &data[3], apdu.length() - 4); //TODO: check length
 | 
			
		||||
            _bau.functionPropertyCommandIndication(priority, hopType, tsap, secCtrl, data[1], data[2], &data[3], apdu.length() - 4); //TODO: check length
 | 
			
		||||
            break;
 | 
			
		||||
        case FunctionPropertyState:
 | 
			
		||||
            _bau.functionPropertyStateIndication(priority, hopType, tsap, data[1], data[2], &data[3], apdu.length() - 4); //TODO: check length
 | 
			
		||||
            _bau.functionPropertyStateIndication(priority, hopType, tsap, secCtrl, data[1], data[2], &data[3], apdu.length() - 4); //TODO: check length
 | 
			
		||||
            break;
 | 
			
		||||
        case PropertyDescriptionRead:
 | 
			
		||||
            _bau.propertyDescriptionReadIndication(priority, hopType, tsap, data[1], data[2], data[3]);
 | 
			
		||||
            _bau.propertyDescriptionReadIndication(priority, hopType, tsap, secCtrl, data[1], data[2], data[3]);
 | 
			
		||||
            break;
 | 
			
		||||
        case PropertyDescriptionResponse:
 | 
			
		||||
            _bau.propertyDescriptionReadAppLayerConfirm(priority, hopType, tsap, data[1], data[2], data[3],
 | 
			
		||||
            _bau.propertyDescriptionReadAppLayerConfirm(priority, hopType, tsap, secCtrl, data[1], data[2], data[3],
 | 
			
		||||
                (data[4] & 0x80) > 0, data[4] & 0x3f, getWord(data + 5) & 0xfff, data[7]);
 | 
			
		||||
            break;
 | 
			
		||||
        case MemoryRead:
 | 
			
		||||
            _bau.memoryReadIndication(priority, hopType, tsap, data[0] & 0x3f, getWord(data + 1));
 | 
			
		||||
            _bau.memoryReadIndication(priority, hopType, tsap, secCtrl, data[0] & 0x3f, getWord(data + 1));
 | 
			
		||||
            break;
 | 
			
		||||
        case MemoryResponse:
 | 
			
		||||
            _bau.memoryReadAppLayerConfirm(priority, hopType, tsap, data[0] & 0x3f, getWord(data + 1), data + 3);
 | 
			
		||||
            _bau.memoryReadAppLayerConfirm(priority, hopType, tsap, secCtrl, data[0] & 0x3f, getWord(data + 1), data + 3);
 | 
			
		||||
            break;
 | 
			
		||||
        case MemoryWrite:
 | 
			
		||||
            _bau.memoryWriteIndication(priority, hopType, tsap, data[0] & 0x3f, getWord(data + 1), data + 3);
 | 
			
		||||
            _bau.memoryWriteIndication(priority, hopType, tsap, secCtrl, data[0] & 0x3f, getWord(data + 1), data + 3);
 | 
			
		||||
            break;
 | 
			
		||||
        case UserMemoryRead:
 | 
			
		||||
        {
 | 
			
		||||
            uint32_t address = ((data[1] & 0xf0) << 12) + (data[2] << 8) + data[3];
 | 
			
		||||
            _bau.userMemoryReadIndication(priority, hopType, tsap, data[1] & 0xf, address);
 | 
			
		||||
            _bau.userMemoryReadIndication(priority, hopType, tsap, secCtrl, data[1] & 0xf, address);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case UserMemoryResponse:
 | 
			
		||||
        {
 | 
			
		||||
            uint32_t address = ((data[1] & 0xf0) << 12) + (data[2] << 8) + data[3];
 | 
			
		||||
            _bau.userMemoryReadAppLayerConfirm(priority, hopType, tsap, data[1] & 0xf, address, data + 4);
 | 
			
		||||
            _bau.userMemoryReadAppLayerConfirm(priority, hopType, tsap, secCtrl, data[1] & 0xf, address, data + 4);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case UserMemoryWrite:
 | 
			
		||||
        {
 | 
			
		||||
            uint32_t address = ((data[1] & 0xf0) << 12) + (data[2] << 8) + data[3];
 | 
			
		||||
            _bau.userMemoryWriteIndication(priority, hopType, tsap, data[1] & 0xf, address, data + 4);
 | 
			
		||||
            _bau.userMemoryWriteIndication(priority, hopType, tsap, secCtrl, data[1] & 0xf, address, data + 4);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case UserManufacturerInfoRead:
 | 
			
		||||
            _bau.userManufacturerInfoIndication(priority, hopType, tsap);
 | 
			
		||||
            _bau.userManufacturerInfoIndication(priority, hopType, tsap, secCtrl);
 | 
			
		||||
            break;
 | 
			
		||||
        case UserManufacturerInfoResponse:
 | 
			
		||||
            _bau.userManufacturerInfoAppLayerConfirm(priority, hopType, tsap, data + 1);
 | 
			
		||||
            _bau.userManufacturerInfoAppLayerConfirm(priority, hopType, tsap, secCtrl, data + 1);
 | 
			
		||||
            break;
 | 
			
		||||
        case AuthorizeRequest:
 | 
			
		||||
            _bau.authorizeIndication(priority, hopType, tsap, getInt(data + 2));
 | 
			
		||||
            _bau.authorizeIndication(priority, hopType, tsap, secCtrl, getInt(data + 2));
 | 
			
		||||
            break;
 | 
			
		||||
        case AuthorizeResponse:
 | 
			
		||||
            _bau.authorizeAppLayerConfirm(priority, hopType, tsap, data[1]);
 | 
			
		||||
            _bau.authorizeAppLayerConfirm(priority, hopType, tsap, secCtrl, data[1]);
 | 
			
		||||
            break;
 | 
			
		||||
        case KeyWrite:
 | 
			
		||||
            _bau.keyWriteIndication(priority, hopType, tsap, data[1], getInt(data + 2));
 | 
			
		||||
            _bau.keyWriteIndication(priority, hopType, tsap, secCtrl, data[1], getInt(data + 2));
 | 
			
		||||
            break;
 | 
			
		||||
        case KeyResponse:
 | 
			
		||||
            _bau.keyWriteAppLayerConfirm(priority, hopType, tsap, data[1]);
 | 
			
		||||
            _bau.keyWriteAppLayerConfirm(priority, hopType, tsap, secCtrl, data[1]);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            print("Indiviual-indication: unhandled APDU-Type: ");
 | 
			
		||||
@ -893,26 +896,26 @@ void ApplicationLayer::individualIndication(HopCountType hopType, Priority prior
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::individualConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU & apdu, bool status)
 | 
			
		||||
void ApplicationLayer::individualConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU & apdu, const SecurityControl &secCtrl, bool status)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t* data = apdu.data();
 | 
			
		||||
    switch (apdu.type())
 | 
			
		||||
    {
 | 
			
		||||
        case DeviceDescriptorRead:
 | 
			
		||||
            _bau.deviceDescriptorReadLocalConfirm(ack, priority, hopType, tsap, *data & 0x3f, status);
 | 
			
		||||
            _bau.deviceDescriptorReadLocalConfirm(ack, priority, hopType, tsap, secCtrl, *data & 0x3f, status);
 | 
			
		||||
            break;
 | 
			
		||||
        case DeviceDescriptorResponse:
 | 
			
		||||
            _bau.deviceDescriptorReadResponseConfirm(ack, priority, hopType, tsap, *data & 0x3f, data + 1, status);
 | 
			
		||||
            _bau.deviceDescriptorReadResponseConfirm(ack, priority, hopType, tsap, secCtrl, *data & 0x3f, data + 1, status);
 | 
			
		||||
            break;
 | 
			
		||||
        case Restart:
 | 
			
		||||
            _bau.restartRequestLocalConfirm(ack, priority, hopType, tsap, status);
 | 
			
		||||
            _bau.restartRequestLocalConfirm(ack, priority, hopType, tsap, secCtrl, status);
 | 
			
		||||
            break;
 | 
			
		||||
        case PropertyValueRead:
 | 
			
		||||
        {
 | 
			
		||||
            uint16_t startIndex;
 | 
			
		||||
            popWord(startIndex, data + 3);
 | 
			
		||||
            startIndex &= 0xfff;
 | 
			
		||||
            _bau.propertyValueReadLocalConfirm(ack, priority, hopType, tsap, data[1], data[2], data[3] >> 4,
 | 
			
		||||
            _bau.propertyValueReadLocalConfirm(ack, priority, hopType, tsap, secCtrl, data[1], data[2], data[3] >> 4,
 | 
			
		||||
                startIndex, status);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
@ -921,7 +924,7 @@ void ApplicationLayer::individualConfirm(AckType ack, HopCountType hopType, Prio
 | 
			
		||||
            uint16_t startIndex;
 | 
			
		||||
            popWord(startIndex, data + 3);
 | 
			
		||||
            startIndex &= 0xfff;
 | 
			
		||||
            _bau.propertyValueReadResponseConfirm(ack, priority, hopType, tsap, data[1], data[2], data[3] >> 4,
 | 
			
		||||
            _bau.propertyValueReadResponseConfirm(ack, priority, hopType, tsap, secCtrl, data[1], data[2], data[3] >> 4,
 | 
			
		||||
                startIndex, data + 5, apdu.length() - 5, status);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
@ -930,61 +933,61 @@ void ApplicationLayer::individualConfirm(AckType ack, HopCountType hopType, Prio
 | 
			
		||||
            uint16_t startIndex;
 | 
			
		||||
            popWord(startIndex, data + 3);
 | 
			
		||||
            startIndex &= 0xfff;
 | 
			
		||||
            _bau.propertyValueWriteLocalConfirm(ack, priority, hopType, tsap, data[1], data[2], data[3] >> 4,
 | 
			
		||||
            _bau.propertyValueWriteLocalConfirm(ack, priority, hopType, tsap, secCtrl, data[1], data[2], data[3] >> 4,
 | 
			
		||||
                startIndex, data + 5, apdu.length() - 5, status);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case PropertyDescriptionRead:
 | 
			
		||||
            _bau.propertyDescriptionReadLocalConfirm(ack, priority, hopType, tsap, data[1], data[2], data[3], status);
 | 
			
		||||
            _bau.propertyDescriptionReadLocalConfirm(ack, priority, hopType, tsap, secCtrl, data[1], data[2], data[3], status);
 | 
			
		||||
            break;
 | 
			
		||||
        case PropertyDescriptionResponse:
 | 
			
		||||
            _bau.propertyDescriptionReadResponseConfirm(ack, priority, hopType, tsap, data[1], data[2], data[3],
 | 
			
		||||
            _bau.propertyDescriptionReadResponseConfirm(ack, priority, hopType, tsap, secCtrl, data[1], data[2], data[3],
 | 
			
		||||
                (data[4] & 0x80) > 0, data[4] & 0x3f, getWord(data + 5) & 0xfff, data[7], status);
 | 
			
		||||
            break;
 | 
			
		||||
        case MemoryRead:
 | 
			
		||||
            _bau.memoryReadLocalConfirm(ack, priority, hopType, tsap, data[0] & 0x3f, getWord(data + 1), status);
 | 
			
		||||
            _bau.memoryReadLocalConfirm(ack, priority, hopType, tsap, secCtrl, data[0] & 0x3f, getWord(data + 1), status);
 | 
			
		||||
            break;
 | 
			
		||||
        case MemoryResponse:
 | 
			
		||||
            _bau.memoryReadResponseConfirm(ack, priority, hopType, tsap, data[0] & 0x3f, getWord(data + 1), data + 3, status);
 | 
			
		||||
            _bau.memoryReadResponseConfirm(ack, priority, hopType, tsap, secCtrl, data[0] & 0x3f, getWord(data + 1), data + 3, status);
 | 
			
		||||
            break;
 | 
			
		||||
        case MemoryWrite:
 | 
			
		||||
            _bau.memoryWriteLocalConfirm(ack, priority, hopType, tsap, data[0] & 0x3f, getWord(data + 1), data + 3, status);
 | 
			
		||||
            _bau.memoryWriteLocalConfirm(ack, priority, hopType, tsap, secCtrl, data[0] & 0x3f, getWord(data + 1), data + 3, status);
 | 
			
		||||
            break;
 | 
			
		||||
        case UserMemoryRead:
 | 
			
		||||
        {
 | 
			
		||||
            uint32_t address = ((data[1] & 0xf0) << 12) + (data[2] << 8) + data[3];
 | 
			
		||||
            _bau.memoryReadLocalConfirm(ack, priority, hopType, tsap, data[1] & 0xf, address, status);
 | 
			
		||||
            _bau.memoryReadLocalConfirm(ack, priority, hopType, tsap, secCtrl, data[1] & 0xf, address, status);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case UserMemoryResponse:
 | 
			
		||||
        {
 | 
			
		||||
            uint32_t address = ((data[1] & 0xf0) << 12) + (data[2] << 8) + data[3];
 | 
			
		||||
            _bau.memoryReadResponseConfirm(ack, priority, hopType, tsap, data[1] & 0xf, address, data + 4, status);
 | 
			
		||||
            _bau.memoryReadResponseConfirm(ack, priority, hopType, tsap, secCtrl, data[1] & 0xf, address, data + 4, status);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        case UserMemoryWrite:
 | 
			
		||||
        {
 | 
			
		||||
            uint32_t address = ((data[1] & 0xf0) << 12) + (data[2] << 8) + data[3];
 | 
			
		||||
            _bau.memoryWriteLocalConfirm(ack, priority, hopType, tsap, data[1] & 0xf, address, data + 4, status);
 | 
			
		||||
            _bau.memoryWriteLocalConfirm(ack, priority, hopType, tsap, secCtrl, data[1] & 0xf, address, data + 4, status);
 | 
			
		||||
            break;
 | 
			
		||||
        }        
 | 
			
		||||
        case UserManufacturerInfoRead:
 | 
			
		||||
            _bau.userManufacturerInfoLocalConfirm(ack, priority, hopType, tsap, status);
 | 
			
		||||
            _bau.userManufacturerInfoLocalConfirm(ack, priority, hopType, tsap, secCtrl, status);
 | 
			
		||||
            break;
 | 
			
		||||
        case UserManufacturerInfoResponse:
 | 
			
		||||
            _bau.userManufacturerInfoResponseConfirm(ack, priority, hopType, tsap, data + 1, status);
 | 
			
		||||
            _bau.userManufacturerInfoResponseConfirm(ack, priority, hopType, tsap, secCtrl, data + 1, status);
 | 
			
		||||
            break;
 | 
			
		||||
        case AuthorizeRequest:
 | 
			
		||||
            _bau.authorizeLocalConfirm(ack, priority, hopType, tsap, getInt(data + 2), status);
 | 
			
		||||
            _bau.authorizeLocalConfirm(ack, priority, hopType, tsap, secCtrl, getInt(data + 2), status);
 | 
			
		||||
            break;
 | 
			
		||||
        case AuthorizeResponse:
 | 
			
		||||
            _bau.authorizeResponseConfirm(ack, priority, hopType, tsap, data[1], status);
 | 
			
		||||
            _bau.authorizeResponseConfirm(ack, priority, hopType, tsap, secCtrl, data[1], status);
 | 
			
		||||
            break;
 | 
			
		||||
        case KeyWrite:
 | 
			
		||||
            _bau.keyWriteLocalConfirm(ack, priority, hopType, tsap, data[1], getInt(data + 2), status);
 | 
			
		||||
            _bau.keyWriteLocalConfirm(ack, priority, hopType, tsap, secCtrl, data[1], getInt(data + 2), status);
 | 
			
		||||
            break;
 | 
			
		||||
        case KeyResponse:
 | 
			
		||||
            _bau.keyWriteResponseConfirm(ack, priority, hopType, tsap, data[1], status);
 | 
			
		||||
            _bau.keyWriteResponseConfirm(ack, priority, hopType, tsap, secCtrl, data[1], status);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            print("Indiviual-confirm: unhandled APDU-Type: ");
 | 
			
		||||
@ -992,12 +995,12 @@ 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, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    if (asap == _connectedTsap)
 | 
			
		||||
        dataConnectedRequest(asap, priority, apdu);
 | 
			
		||||
        dataConnectedRequest(asap, priority, apdu, secCtrl);
 | 
			
		||||
    else
 | 
			
		||||
        dataIndividualRequest(ack, hopType, priority, asap, apdu);
 | 
			
		||||
        dataIndividualRequest(ack, hopType, priority, asap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ApplicationLayer::isConnected()
 | 
			
		||||
@ -1005,24 +1008,29 @@ bool ApplicationLayer::isConnected()
 | 
			
		||||
    return (_connectedTsap >= 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationLayer::dataGroupRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu)
 | 
			
		||||
void ApplicationLayer::dataGroupRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    (void)secCtrl; // We do not need security related information in the plain application layer
 | 
			
		||||
    _transportLayer->dataGroupRequest(ack, hopType, priority, tsap, apdu);
 | 
			
		||||
}
 | 
			
		||||
void ApplicationLayer::dataBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu)
 | 
			
		||||
void ApplicationLayer::dataBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, const SecurityControl &secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    (void)secCtrl; // We do not need security related information in the plain application layer
 | 
			
		||||
    _transportLayer->dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
 | 
			
		||||
}
 | 
			
		||||
void ApplicationLayer::dataSystemBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu)
 | 
			
		||||
void ApplicationLayer::dataSystemBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    (void)secCtrl; // We do not need security related information in the plain application layer
 | 
			
		||||
    _transportLayer->dataSystemBroadcastRequest(ack, hopType, SystemPriority, apdu);
 | 
			
		||||
}
 | 
			
		||||
void ApplicationLayer::dataIndividualRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t destination, APDU& apdu)
 | 
			
		||||
void ApplicationLayer::dataIndividualRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t destination, APDU& apdu, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    (void)secCtrl; // We do not need security related information in the plain application layer
 | 
			
		||||
    _transportLayer->dataIndividualRequest(ack, hopType, priority, destination, apdu);
 | 
			
		||||
}
 | 
			
		||||
void ApplicationLayer::dataConnectedRequest(uint16_t tsap, Priority priority, APDU& apdu)
 | 
			
		||||
void ApplicationLayer::dataConnectedRequest(uint16_t tsap, Priority priority, APDU& apdu, const SecurityControl &secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    (void)secCtrl; // We do not need security related information in the plain application layer
 | 
			
		||||
    // apdu must be valid until it was confirmed
 | 
			
		||||
    _transportLayer->dataConnectedRequest(tsap, priority, apdu);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -39,12 +39,13 @@ class ApplicationLayer
 | 
			
		||||
     *        See 3.1.1 of @cite knx:3/3/7
 | 
			
		||||
     *        
 | 
			
		||||
     * @param apdu The submitted APDU.
 | 
			
		||||
     * 
 | 
			
		||||
     *
 | 
			
		||||
     * @param priority The ::Priority of the received request.
 | 
			
		||||
     * 
 | 
			
		||||
     * @param hopType Should routing be endless or should the NetworkLayer::hopCount be used? See also ::HopCountType.
 | 
			
		||||
     */
 | 
			
		||||
    virtual void dataGroupIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu);
 | 
			
		||||
    void dataGroupIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl &secCtrl);
 | 
			
		||||
    void dataGroupIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu) {dataGroupIndication(hopType, priority, tsap, apdu, noSecurity);}
 | 
			
		||||
    /**
 | 
			
		||||
     * Report the status of an APDU that we sent via multicast communiation back to us. See 3.2 of @cite knx:3/3/4. 
 | 
			
		||||
     * See also ApplicationLayer::dataGroupConfirm and TransportLayer::dataGroupRequest. This method is called by 
 | 
			
		||||
@ -63,16 +64,25 @@ class ApplicationLayer
 | 
			
		||||
     * 
 | 
			
		||||
     * @param ack Did we want a DataLinkLayer acknowledgement? See ::AckType.
 | 
			
		||||
     */
 | 
			
		||||
    virtual void dataGroupConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap,
 | 
			
		||||
                          APDU& apdu, bool status);
 | 
			
		||||
    virtual void dataBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu);
 | 
			
		||||
    virtual void dataBroadcastConfirm(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, bool status);
 | 
			
		||||
    virtual void dataSystemBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu);
 | 
			
		||||
    virtual void dataSystemBroadcastConfirm(HopCountType hopType, Priority priority, APDU& apdu, bool status);
 | 
			
		||||
    virtual void dataIndividualIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu);
 | 
			
		||||
    virtual void dataIndividualConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, bool status);
 | 
			
		||||
    virtual void dataConnectedIndication(Priority priority, uint16_t tsap, APDU& apdu);
 | 
			
		||||
    virtual void dataConnectedConfirm(uint16_t tsap);
 | 
			
		||||
    void dataGroupConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap,
 | 
			
		||||
                          APDU& apdu, const SecurityControl& secCtrl, bool status);
 | 
			
		||||
    void dataGroupConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap,
 | 
			
		||||
                                  APDU& apdu, bool status) {dataGroupConfirm(ack, hopType, priority, tsap, apdu, noSecurity, status);}
 | 
			
		||||
    void dataBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu, const SecurityControl& secCtrl);
 | 
			
		||||
    void dataBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu) {dataBroadcastIndication(hopType, priority, source, apdu, noSecurity);}
 | 
			
		||||
    void dataBroadcastConfirm(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, const SecurityControl& secCtrl, bool status);
 | 
			
		||||
    void dataBroadcastConfirm(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, bool status) {dataBroadcastConfirm(ack, hopType, priority, apdu, status);}
 | 
			
		||||
    void dataSystemBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu, const SecurityControl& secCtrl);
 | 
			
		||||
    void dataSystemBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu) {dataSystemBroadcastIndication(hopType, priority, source, apdu);}
 | 
			
		||||
    void dataSystemBroadcastConfirm(HopCountType hopType, Priority priority, APDU& apdu, const SecurityControl& secCtrl, bool status);
 | 
			
		||||
    void dataSystemBroadcastConfirm(HopCountType hopType, Priority priority, APDU& apdu, bool status) {dataSystemBroadcastConfirm(hopType, priority, apdu, status);}
 | 
			
		||||
    void dataIndividualIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu, const SecurityControl& secCtrl);
 | 
			
		||||
    void dataIndividualIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu) {dataIndividualIndication(hopType, priority, source, apdu);}
 | 
			
		||||
    void dataIndividualConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl& secCtrl, bool status);
 | 
			
		||||
    void dataIndividualConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, bool status) {dataIndividualConfirm(ack, hopType, priority, tsap, apdu, status);}
 | 
			
		||||
    void dataConnectedIndication(Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl& secCtrl);
 | 
			
		||||
    void dataConnectedIndication(Priority priority, uint16_t tsap, APDU& apdu) {dataConnectedIndication(priority, tsap, apdu);}
 | 
			
		||||
    void dataConnectedConfirm(uint16_t tsap);
 | 
			
		||||
    void connectIndication(uint16_t tsap);
 | 
			
		||||
    void connectConfirm(uint16_t destination, uint16_t tsap, bool status);
 | 
			
		||||
    void disconnectIndication(uint16_t tsap);
 | 
			
		||||
@ -80,92 +90,94 @@ class ApplicationLayer
 | 
			
		||||
#pragma endregion
 | 
			
		||||
 | 
			
		||||
#pragma region from bau
 | 
			
		||||
    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,
 | 
			
		||||
    void groupValueReadRequest(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl);
 | 
			
		||||
    void groupValueReadResponse(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl& secCtrl, uint8_t* data, uint8_t dataLength);
 | 
			
		||||
    void groupValueWriteRequest(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint8_t* data, uint8_t dataLength);
 | 
			
		||||
    void individualAddressWriteRequest(AckType ack, HopCountType hopType, const SecurityControl &secCtrl, uint16_t newaddress);
 | 
			
		||||
    void individualAddressReadRequest(AckType ack, HopCountType hopType, const SecurityControl& secCtrl);
 | 
			
		||||
    void individualAddressReadResponse(AckType ack, HopCountType hopType, const SecurityControl& secCtrl);
 | 
			
		||||
    void individualAddressSerialNumberReadRequest(AckType ack, HopCountType hopType, const SecurityControl& secCtrl, uint8_t* serialNumber);
 | 
			
		||||
    void individualAddressSerialNumberReadResponse(AckType ack, HopCountType hopType, const SecurityControl& secCtrl, uint8_t* serialNumber,
 | 
			
		||||
                                                   uint16_t domainAddress);
 | 
			
		||||
    void individualAddressSerialNumberWriteRequest(AckType ack, HopCountType hopType, uint8_t* serialNumber,
 | 
			
		||||
    void individualAddressSerialNumberWriteRequest(AckType ack, HopCountType hopType, const SecurityControl& secCtrl, uint8_t* serialNumber,
 | 
			
		||||
                                                   uint16_t newaddress);
 | 
			
		||||
    void deviceDescriptorReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    void deviceDescriptorReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
                                     uint8_t descriptorType);
 | 
			
		||||
    void deviceDescriptorReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    void deviceDescriptorReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
                                      uint8_t descriptorType, uint8_t* deviceDescriptor);
 | 
			
		||||
    void connectRequest(uint16_t destination, Priority priority);
 | 
			
		||||
    void disconnectRequest(Priority priority);
 | 
			
		||||
    bool isConnected();
 | 
			
		||||
    void restartRequest(AckType ack, Priority priority, HopCountType hopType);
 | 
			
		||||
    void propertyValueReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    void restartRequest(AckType ack, Priority priority, HopCountType hopType, const SecurityControl& secCtrl);
 | 
			
		||||
    void propertyValueReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
                                  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,
 | 
			
		||||
    void propertyValueReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, 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,
 | 
			
		||||
    void propertyValueWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                   uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length);
 | 
			
		||||
    void functionPropertyStateResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    void functionPropertyStateResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
                                       uint8_t objectIndex, uint8_t propertyId, uint8_t *resultData, uint8_t resultLength);
 | 
			
		||||
    void propertyDescriptionReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    void propertyDescriptionReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
                                        uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex);
 | 
			
		||||
    void propertyDescriptionReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    void propertyDescriptionReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
                                         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,
 | 
			
		||||
    void memoryReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t number,
 | 
			
		||||
                           uint16_t memoryAddress);
 | 
			
		||||
    void memoryReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    void memoryReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t number,
 | 
			
		||||
                            uint16_t memoryAddress, uint8_t* data);
 | 
			
		||||
    void memoryWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    void memoryWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t number,
 | 
			
		||||
                            uint16_t memoryAddress, uint8_t* data);
 | 
			
		||||
    void userMemoryReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    void userMemoryReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                               uint32_t memoryAddress);
 | 
			
		||||
    void userMemoryReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    void userMemoryReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                                uint32_t memoryAddress, uint8_t* memoryData);
 | 
			
		||||
    void userMemoryWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    void userMemoryWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, 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,
 | 
			
		||||
    void userManufacturerInfoReadRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl);
 | 
			
		||||
    void userManufacturerInfoReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
                                          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);
 | 
			
		||||
    void authorizeRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint32_t key);
 | 
			
		||||
    void authorizeResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t level);
 | 
			
		||||
    void keyWriteRequest(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t level, uint32_t key);
 | 
			
		||||
    void keyWriteResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t level);
 | 
			
		||||
 | 
			
		||||
    void systemNetworkParameterReadResponse(Priority priority, HopCountType hopType, uint16_t objectType,
 | 
			
		||||
    void systemNetworkParameterReadResponse(Priority priority, HopCountType hopType, const SecurityControl& secCtrl, uint16_t objectType,
 | 
			
		||||
                                            uint16_t propertyId, uint8_t* testInfo, uint16_t testInfoLength,
 | 
			
		||||
                                            uint8_t* testResult, uint16_t testResultLength);
 | 
			
		||||
    void domainAddressSerialNumberReadResponse(Priority priority, HopCountType hopType, const uint8_t* rfDoA,
 | 
			
		||||
    void domainAddressSerialNumberReadResponse(Priority priority, HopCountType hopType, const SecurityControl& secCtrl, const uint8_t* rfDoA,
 | 
			
		||||
                                               const uint8_t* knxSerialNumber);                                       
 | 
			
		||||
    void IndividualAddressSerialNumberReadResponse(Priority priority, HopCountType hopType, const uint8_t* rfDoA,
 | 
			
		||||
    void IndividualAddressSerialNumberReadResponse(Priority priority, HopCountType hopType, const SecurityControl& secCtrl, const uint8_t* rfDoA,
 | 
			
		||||
                                               const uint8_t* knxSerialNumber);                                       
 | 
			
		||||
#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
 | 
			
		||||
    virtual void dataGroupRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl &secCtrl);
 | 
			
		||||
    virtual void dataBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, const SecurityControl& secCtrl);
 | 
			
		||||
    virtual void dataSystemBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, const SecurityControl& secCtrl);
 | 
			
		||||
    virtual void dataIndividualRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t destination, APDU& apdu, const SecurityControl& secCtrl);
 | 
			
		||||
    virtual void dataConnectedRequest(uint16_t tsap, Priority priority, APDU& apdu, const SecurityControl& secCtrl); // apdu must be valid until it was confirmed
 | 
			
		||||
 | 
			
		||||
    uint16_t getConnectedTsasp() {return _connectedTsap;}
 | 
			
		||||
 | 
			
		||||
    // Protected: we need to access it in derived class SecureApplicationLayer
 | 
			
		||||
    TransportLayer* _transportLayer = 0;
 | 
			
		||||
 | 
			
		||||
    static const SecurityControl noSecurity;
 | 
			
		||||
 | 
			
		||||
  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, const SecurityControl &secCtrl,
 | 
			
		||||
                          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,
 | 
			
		||||
    void memorySend(ApduType type, AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl, uint8_t number,
 | 
			
		||||
                    uint16_t memoryAddress, uint8_t* memoryData);
 | 
			
		||||
    void userMemorySend(ApduType type, AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    void userMemorySend(ApduType type, AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl& secCtrl,
 | 
			
		||||
                        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);
 | 
			
		||||
    void groupValueSend(ApduType type, AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl& secCtrl, uint8_t* data, uint8_t& dataLength);
 | 
			
		||||
    void individualIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl &secCtrl);
 | 
			
		||||
    void individualConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl& secCtrl, bool status);
 | 
			
		||||
    void individualSend(AckType ack, HopCountType hopType, Priority priority, uint16_t asap, APDU& apdu, const SecurityControl& secCtrl);
 | 
			
		||||
 | 
			
		||||
    uint16_t _savedAsapReadRequest;
 | 
			
		||||
    uint16_t _savedAsapWriteRequest;
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										134
									
								
								src/knx/bau.cpp
									
									
									
									
									
								
							
							
						
						
									
										134
									
								
								src/knx/bau.cpp
									
									
									
									
									
								
							@ -1,248 +1,248 @@
 | 
			
		||||
#include "bau.h"
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::groupValueReadLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, bool status)
 | 
			
		||||
void BusAccessUnit::groupValueReadLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl& secCtrl, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::groupValueReadIndication(uint16_t asap, Priority priority, HopCountType hopType)
 | 
			
		||||
void BusAccessUnit::groupValueReadIndication(uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::groupValueReadResponseConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopTtype, uint8_t* data, uint8_t dataLength, bool status)
 | 
			
		||||
void BusAccessUnit::groupValueReadResponseConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopTtype, const SecurityControl &secCtrl, uint8_t* data, uint8_t dataLength, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::groupValueReadAppLayerConfirm(uint16_t asap, Priority priority, HopCountType hopType, uint8_t* data, uint8_t dataLength)
 | 
			
		||||
void BusAccessUnit::groupValueReadAppLayerConfirm(uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint8_t* data, uint8_t dataLength)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::groupValueWriteLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, uint8_t* data, uint8_t dataLength, bool status)
 | 
			
		||||
void BusAccessUnit::groupValueWriteLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint8_t* data, uint8_t dataLength, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::groupValueWriteIndication(uint16_t asap, Priority priority, HopCountType hopType, uint8_t* data, uint8_t dataLength)
 | 
			
		||||
void BusAccessUnit::groupValueWriteIndication(uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint8_t* data, uint8_t dataLength)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::individualAddressWriteLocalConfirm(AckType ack, HopCountType hopType, uint16_t newaddress, bool status)
 | 
			
		||||
void BusAccessUnit::individualAddressWriteLocalConfirm(AckType ack, HopCountType hopType, const SecurityControl &secCtrl, uint16_t newaddress, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::individualAddressWriteIndication(HopCountType hopType, uint16_t newaddress)
 | 
			
		||||
void BusAccessUnit::individualAddressWriteIndication(HopCountType hopType, const SecurityControl &secCtrl, uint16_t newaddress)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::individualAddressReadLocalConfirm(AckType ack, HopCountType hopType, bool status)
 | 
			
		||||
void BusAccessUnit::individualAddressReadLocalConfirm(AckType ack, HopCountType hopType, const SecurityControl &secCtrl, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::individualAddressReadIndication(HopCountType hopType)
 | 
			
		||||
void BusAccessUnit::individualAddressReadIndication(HopCountType hopType, const SecurityControl &secCtrl)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::individualAddressReadResponseConfirm(AckType ack, HopCountType hopType, bool status)
 | 
			
		||||
void BusAccessUnit::individualAddressReadResponseConfirm(AckType ack, HopCountType hopType, const SecurityControl &secCtrl, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::individualAddressReadAppLayerConfirm(HopCountType hopType, uint16_t individualAddress)
 | 
			
		||||
void BusAccessUnit::individualAddressReadAppLayerConfirm(HopCountType hopType, const SecurityControl &secCtrl, uint16_t individualAddress)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::individualAddressSerialNumberReadLocalConfirm(AckType ack, HopCountType hopType, uint8_t* serialNumber, bool status)
 | 
			
		||||
void BusAccessUnit::individualAddressSerialNumberReadLocalConfirm(AckType ack, HopCountType hopType, const SecurityControl &secCtrl, uint8_t* serialNumber, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::individualAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, uint8_t* knxSerialNumber)
 | 
			
		||||
void BusAccessUnit::individualAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint8_t* knxSerialNumber)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::individualAddressSerialNumberReadResponseConfirm(AckType ack, HopCountType hopType, uint8_t* serialNumber, uint16_t domainAddress, bool status)
 | 
			
		||||
void BusAccessUnit::individualAddressSerialNumberReadResponseConfirm(AckType ack, HopCountType hopType, const SecurityControl &secCtrl, uint8_t* serialNumber, uint16_t domainAddress, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::individualAddressSerialNumberReadAppLayerConfirm(HopCountType hopType, uint8_t* serialNumber, uint16_t individualAddress, uint16_t domainAddress)
 | 
			
		||||
void BusAccessUnit::individualAddressSerialNumberReadAppLayerConfirm(HopCountType hopType, const SecurityControl &secCtrl, uint8_t* serialNumber, uint16_t individualAddress, uint16_t domainAddress)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::individualAddressSerialNumberWriteLocalConfirm(AckType ack, HopCountType hopType, uint8_t* serialNumber, uint16_t newaddress, bool status)
 | 
			
		||||
void BusAccessUnit::individualAddressSerialNumberWriteLocalConfirm(AckType ack, HopCountType hopType, const SecurityControl &secCtrl, uint8_t* serialNumber, uint16_t newaddress, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::individualAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, uint16_t newIndividualAddress,
 | 
			
		||||
void BusAccessUnit::individualAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t newIndividualAddress,
 | 
			
		||||
                                                                 uint8_t* knxSerialNumber)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::deviceDescriptorReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t descriptorType, bool status)
 | 
			
		||||
void BusAccessUnit::deviceDescriptorReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t descriptorType, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::deviceDescriptorReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t descriptorType)
 | 
			
		||||
void BusAccessUnit::deviceDescriptorReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t descriptorType)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::deviceDescriptorReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t descriptor_type,
 | 
			
		||||
void BusAccessUnit::deviceDescriptorReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t descriptor_type,
 | 
			
		||||
                                                        uint8_t* device_descriptor, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::deviceDescriptorReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, uint8_t descriptortype, uint8_t* deviceDescriptor)
 | 
			
		||||
void BusAccessUnit::deviceDescriptorReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t descriptortype, uint8_t* deviceDescriptor)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::restartRequestLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, bool status)
 | 
			
		||||
void BusAccessUnit::restartRequestLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::restartRequestIndication(Priority priority, HopCountType hopType, uint16_t asap)
 | 
			
		||||
void BusAccessUnit::restartRequestIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::propertyValueReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, bool status)
 | 
			
		||||
void BusAccessUnit::propertyValueReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::propertyValueReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex)
 | 
			
		||||
void BusAccessUnit::propertyValueReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::functionPropertyCommandIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex, uint8_t propertyId, uint8_t* data, uint8_t length)
 | 
			
		||||
void BusAccessUnit::functionPropertyCommandIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t* data, uint8_t length)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::functionPropertyStateIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex, uint8_t propertyId, uint8_t* data, uint8_t length)
 | 
			
		||||
void BusAccessUnit::functionPropertyStateIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t* data, uint8_t length)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::propertyValueReadResponseConfirm(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, bool status)
 | 
			
		||||
void BusAccessUnit::propertyValueReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::propertyValueReadAppLayerConfirm(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 BusAccessUnit::propertyValueReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::propertyValueWriteLocalConfirm(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, bool status)
 | 
			
		||||
void BusAccessUnit::propertyValueWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::propertyValueWriteIndication(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 BusAccessUnit::propertyValueWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::propertyDescriptionReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex, bool status)
 | 
			
		||||
void BusAccessUnit::propertyDescriptionReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::propertyDescriptionReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex)
 | 
			
		||||
void BusAccessUnit::propertyDescriptionReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::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 BusAccessUnit::propertyDescriptionReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex, bool writeEnable, uint8_t type, uint16_t maxNumberOfElements, uint8_t access)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::propertyDescriptionReadResponseConfirm(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, bool status)
 | 
			
		||||
void BusAccessUnit::propertyDescriptionReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex, bool writeEnable, uint8_t type, uint16_t maxNumberOfElements, uint8_t access, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::propertyDescriptionReadAppLayerConfirm(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 BusAccessUnit::propertyDescriptionReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex, bool writeEnable, uint8_t type, uint16_t maxNumberOfElements, uint8_t access)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::memoryReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint16_t memoryAddress, bool status)
 | 
			
		||||
void BusAccessUnit::memoryReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::memoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint16_t memoryAddress)
 | 
			
		||||
void BusAccessUnit::memoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::memoryReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint16_t memoryAddress, uint8_t* data, bool status)
 | 
			
		||||
void BusAccessUnit::memoryReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress, uint8_t* data, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::memoryReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint16_t memoryAddress, uint8_t* data)
 | 
			
		||||
void BusAccessUnit::memoryReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress, uint8_t* data)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::memoryWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint16_t memoryAddress, uint8_t* data, bool status)
 | 
			
		||||
void BusAccessUnit::memoryWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress, uint8_t* data, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::memoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint16_t memoryAddress, uint8_t* data)
 | 
			
		||||
void BusAccessUnit::memoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress, uint8_t* data)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::userMemoryReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint32_t memoryAddress, bool status)
 | 
			
		||||
void BusAccessUnit::userMemoryReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::userMemoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint32_t memoryAddress)
 | 
			
		||||
void BusAccessUnit::userMemoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::userMemoryReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint32_t memoryAddress, uint8_t* memoryData, bool status)
 | 
			
		||||
void BusAccessUnit::userMemoryReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress, uint8_t* memoryData, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::userMemoryReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint32_t memoryAddress, uint8_t* memoryData)
 | 
			
		||||
void BusAccessUnit::userMemoryReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress, uint8_t* memoryData)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::userMemoryWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint32_t memoryAddress, uint8_t* memoryData, bool status)
 | 
			
		||||
void BusAccessUnit::userMemoryWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress, uint8_t* memoryData, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::userMemoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint32_t memoryAddress, uint8_t* memoryData)
 | 
			
		||||
void BusAccessUnit::userMemoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress, uint8_t* memoryData)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::userManufacturerInfoLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, bool status)
 | 
			
		||||
void BusAccessUnit::userManufacturerInfoLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::userManufacturerInfoIndication(Priority priority, HopCountType hopType, uint16_t asap)
 | 
			
		||||
void BusAccessUnit::userManufacturerInfoIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::userManufacturerInfoResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t* info, bool status)
 | 
			
		||||
void BusAccessUnit::userManufacturerInfoResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t* info, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::userManufacturerInfoAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, uint8_t* info)
 | 
			
		||||
void BusAccessUnit::userManufacturerInfoAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t* info)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::authorizeLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint32_t key, bool status)
 | 
			
		||||
void BusAccessUnit::authorizeLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint32_t key, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::authorizeIndication(Priority priority, HopCountType hopType, uint16_t asap, uint32_t key)
 | 
			
		||||
void BusAccessUnit::authorizeIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint32_t key)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::authorizeResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t level, bool status)
 | 
			
		||||
void BusAccessUnit::authorizeResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t level, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::authorizeAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, uint8_t level)
 | 
			
		||||
void BusAccessUnit::authorizeAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t level)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::keyWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t level, uint32_t key, bool status)
 | 
			
		||||
void BusAccessUnit::keyWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t level, uint32_t key, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::keyWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t level, uint32_t key)
 | 
			
		||||
void BusAccessUnit::keyWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t level, uint32_t key)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::keyWriteResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t level, bool status)
 | 
			
		||||
void BusAccessUnit::keyWriteResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t level, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::keyWriteAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, uint8_t level)
 | 
			
		||||
void BusAccessUnit::keyWriteAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t level)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -250,31 +250,31 @@ void BusAccessUnit::connectConfirm(uint16_t destination)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::systemNetworkParameterReadIndication(Priority priority, HopCountType hopType, uint16_t objectType,
 | 
			
		||||
void BusAccessUnit::systemNetworkParameterReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t objectType,
 | 
			
		||||
                                                         uint16_t propertyId, uint8_t* testInfo, uint16_t testInfoLength)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::domainAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, const uint8_t* rfDoA,
 | 
			
		||||
void BusAccessUnit::domainAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* rfDoA,
 | 
			
		||||
                                                             const uint8_t* knxSerialNumber)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::domainAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, const uint8_t* knxSerialNumber)
 | 
			
		||||
void BusAccessUnit::domainAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* knxSerialNumber)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::systemNetworkParameterReadLocalConfirm(Priority priority, HopCountType hopType, uint16_t objectType,
 | 
			
		||||
void BusAccessUnit::systemNetworkParameterReadLocalConfirm(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t objectType,
 | 
			
		||||
                                                         uint16_t propertyId, uint8_t* testInfo, uint16_t testInfoLength, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::domainAddressSerialNumberWriteLocalConfirm(Priority priority, HopCountType hopType, const uint8_t* rfDoA,
 | 
			
		||||
void BusAccessUnit::domainAddressSerialNumberWriteLocalConfirm(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* rfDoA,
 | 
			
		||||
                                                             const uint8_t* knxSerialNumber, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BusAccessUnit::domainAddressSerialNumberReadLocalConfirm(Priority priority, HopCountType hopType, const uint8_t* knxSerialNumber, bool status)
 | 
			
		||||
void BusAccessUnit::domainAddressSerialNumberReadLocalConfirm(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* knxSerialNumber, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										134
									
								
								src/knx/bau.h
									
									
									
									
									
								
							
							
						
						
									
										134
									
								
								src/knx/bau.h
									
									
									
									
									
								
							@ -7,129 +7,129 @@ class BusAccessUnit
 | 
			
		||||
{
 | 
			
		||||
  public:
 | 
			
		||||
    virtual ~BusAccessUnit() {}
 | 
			
		||||
    virtual void groupValueReadLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, bool status);
 | 
			
		||||
    virtual void groupValueReadIndication(uint16_t asap, Priority priority, HopCountType hopType);
 | 
			
		||||
    virtual void groupValueReadResponseConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopTtype,
 | 
			
		||||
    virtual void groupValueReadLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl, bool status);
 | 
			
		||||
    virtual void groupValueReadIndication(uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl);
 | 
			
		||||
    virtual void groupValueReadResponseConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopTtype, const SecurityControl &secCtrl,
 | 
			
		||||
                                               uint8_t* data, uint8_t dataLength, bool status);
 | 
			
		||||
    virtual void groupValueReadAppLayerConfirm(uint16_t asap, Priority priority, HopCountType hopType,
 | 
			
		||||
    virtual void groupValueReadAppLayerConfirm(uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl,
 | 
			
		||||
                                               uint8_t* data, uint8_t dataLength);
 | 
			
		||||
    virtual void groupValueWriteLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType,
 | 
			
		||||
    virtual void groupValueWriteLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl,
 | 
			
		||||
                                             uint8_t* data, uint8_t dataLength, bool status);
 | 
			
		||||
    virtual void groupValueWriteIndication(uint16_t asap, Priority priority, HopCountType hopType,
 | 
			
		||||
    virtual void groupValueWriteIndication(uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl,
 | 
			
		||||
                                           uint8_t* data, uint8_t dataLength);
 | 
			
		||||
    virtual void individualAddressWriteLocalConfirm(AckType ack, HopCountType hopType,
 | 
			
		||||
    virtual void individualAddressWriteLocalConfirm(AckType ack, HopCountType hopType, const SecurityControl &secCtrl,
 | 
			
		||||
                                                    uint16_t newaddress, bool status);
 | 
			
		||||
    virtual void individualAddressWriteIndication(HopCountType hopType, uint16_t newaddress);
 | 
			
		||||
    virtual void individualAddressReadLocalConfirm(AckType ack, HopCountType hopType, bool status);
 | 
			
		||||
    virtual void individualAddressReadIndication(HopCountType hopType);
 | 
			
		||||
    virtual void individualAddressReadResponseConfirm(AckType ack, HopCountType hopType, bool status);
 | 
			
		||||
    virtual void individualAddressReadAppLayerConfirm(HopCountType hopType, uint16_t individualAddress);
 | 
			
		||||
    virtual void individualAddressSerialNumberReadLocalConfirm(AckType ack, HopCountType hopType,
 | 
			
		||||
    virtual void individualAddressWriteIndication(HopCountType hopType, const SecurityControl &secCtrl, uint16_t newaddress);
 | 
			
		||||
    virtual void individualAddressReadLocalConfirm(AckType ack, HopCountType hopType, const SecurityControl &secCtrl, bool status);
 | 
			
		||||
    virtual void individualAddressReadIndication(HopCountType hopType, const SecurityControl &secCtrl);
 | 
			
		||||
    virtual void individualAddressReadResponseConfirm(AckType ack, HopCountType hopType, const SecurityControl &secCtrl, bool status);
 | 
			
		||||
    virtual void individualAddressReadAppLayerConfirm(HopCountType hopType, const SecurityControl &secCtrl, uint16_t individualAddress);
 | 
			
		||||
    virtual void individualAddressSerialNumberReadLocalConfirm(AckType ack, HopCountType hopType, const SecurityControl &secCtrl,
 | 
			
		||||
                                                               uint8_t* serialNumber, bool status);
 | 
			
		||||
    virtual void individualAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, uint8_t* knxSerialNumber);
 | 
			
		||||
    virtual void individualAddressSerialNumberReadResponseConfirm(AckType ack, HopCountType hopType,
 | 
			
		||||
    virtual void individualAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint8_t* knxSerialNumber);
 | 
			
		||||
    virtual void individualAddressSerialNumberReadResponseConfirm(AckType ack, HopCountType hopType, const SecurityControl &secCtrl,
 | 
			
		||||
                                                                  uint8_t* serialNumber, uint16_t domainAddress, bool status);
 | 
			
		||||
    virtual void individualAddressSerialNumberReadAppLayerConfirm(HopCountType hopType, uint8_t* serialNumber,
 | 
			
		||||
    virtual void individualAddressSerialNumberReadAppLayerConfirm(HopCountType hopType, const SecurityControl &secCtrl, uint8_t* serialNumber,
 | 
			
		||||
                                                                  uint16_t individualAddress, uint16_t domainAddress);
 | 
			
		||||
    virtual void individualAddressSerialNumberWriteLocalConfirm(AckType ack, HopCountType hopType, uint8_t* serialNumber,
 | 
			
		||||
    virtual void individualAddressSerialNumberWriteLocalConfirm(AckType ack, HopCountType hopType, const SecurityControl &secCtrl, uint8_t* serialNumber,
 | 
			
		||||
                                                                uint16_t newaddress, bool status);
 | 
			
		||||
    virtual void individualAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, uint16_t newIndividualAddress,
 | 
			
		||||
    virtual void individualAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t newIndividualAddress,
 | 
			
		||||
                                                              uint8_t* knxSerialNumber);
 | 
			
		||||
    virtual void deviceDescriptorReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    virtual void deviceDescriptorReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
                                                  uint8_t descriptorType, bool status);
 | 
			
		||||
    virtual void deviceDescriptorReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t descriptorType);
 | 
			
		||||
    virtual void deviceDescriptorReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    virtual void deviceDescriptorReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t descriptorType);
 | 
			
		||||
    virtual void deviceDescriptorReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
                                                     uint8_t descriptor_type, uint8_t* device_descriptor, bool status);
 | 
			
		||||
    virtual void deviceDescriptorReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    virtual void deviceDescriptorReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
                                                     uint8_t descriptortype, uint8_t* deviceDescriptor);
 | 
			
		||||
    virtual void restartRequestLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, bool status);
 | 
			
		||||
    virtual void restartRequestIndication(Priority priority, HopCountType hopType, uint16_t asap);
 | 
			
		||||
    virtual void propertyValueReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    virtual void restartRequestLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, bool status);
 | 
			
		||||
    virtual void restartRequestIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl);
 | 
			
		||||
    virtual void propertyValueReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
                                               uint8_t objectIndex, uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, bool status);
 | 
			
		||||
    virtual void propertyValueReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
    virtual void propertyValueReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                             uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex);
 | 
			
		||||
    virtual void functionPropertyCommandIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
    virtual void functionPropertyCommandIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                                   uint8_t propertyId, uint8_t* data, uint8_t length);
 | 
			
		||||
    virtual void functionPropertyStateIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
    virtual void functionPropertyStateIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                                 uint8_t propertyId, uint8_t* data, uint8_t length);
 | 
			
		||||
    virtual void propertyValueReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
    virtual void propertyValueReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                                  uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length, bool status);
 | 
			
		||||
    virtual void propertyValueReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
    virtual void propertyValueReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                                  uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length);
 | 
			
		||||
    virtual void propertyValueWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
    virtual void propertyValueWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                                uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length, bool status);
 | 
			
		||||
    virtual void propertyValueWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
    virtual void propertyValueWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                              uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length);
 | 
			
		||||
    virtual void propertyDescriptionReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    virtual void propertyDescriptionReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
                                                     uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex, bool status);
 | 
			
		||||
    virtual void propertyDescriptionReadIndication(Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    virtual void propertyDescriptionReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
                                                   uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex);
 | 
			
		||||
    virtual void propertyDescriptionReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    virtual void propertyDescriptionReadResponse(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
                                                 uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex, bool writeEnable, uint8_t type,
 | 
			
		||||
                                                 uint16_t maxNumberOfElements, uint8_t access);
 | 
			
		||||
    virtual void propertyDescriptionReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    virtual void propertyDescriptionReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
                                                        uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex, bool writeEnable, uint8_t type,
 | 
			
		||||
                                                        uint16_t maxNumberOfElements, uint8_t access, bool status);
 | 
			
		||||
    virtual void propertyDescriptionReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    virtual void propertyDescriptionReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
                                                        uint8_t objectIndex, uint8_t propertyId, uint8_t propertyIndex, bool writeEnable, uint8_t type,
 | 
			
		||||
                                                        uint16_t maxNumberOfElements, uint8_t access);
 | 
			
		||||
    virtual void memoryReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    virtual void memoryReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                                        uint16_t memoryAddress, bool status);
 | 
			
		||||
    virtual void memoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint16_t memoryAddress);
 | 
			
		||||
    virtual void memoryReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    virtual void memoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint16_t memoryAddress);
 | 
			
		||||
    virtual void memoryReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                                           uint16_t memoryAddress, uint8_t* data, bool status);
 | 
			
		||||
    virtual void memoryReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    virtual void memoryReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                                           uint16_t memoryAddress, uint8_t* data);
 | 
			
		||||
    virtual void memoryWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    virtual void memoryWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                                         uint16_t memoryAddress, uint8_t* data, bool status);
 | 
			
		||||
    virtual void memoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    virtual void memoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                                       uint16_t memoryAddress, uint8_t* data);
 | 
			
		||||
    virtual void userMemoryReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    virtual void userMemoryReadLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                                            uint32_t memoryAddress, bool status);
 | 
			
		||||
    virtual void userMemoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    virtual void userMemoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                                          uint32_t memoryAddress);
 | 
			
		||||
    virtual void userMemoryReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    virtual void userMemoryReadResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                                               uint32_t memoryAddress, uint8_t* memoryData, bool status);
 | 
			
		||||
    virtual void userMemoryReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    virtual void userMemoryReadAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                                               uint32_t memoryAddress, uint8_t* memoryData);
 | 
			
		||||
    virtual void userMemoryWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    virtual void userMemoryWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                                             uint32_t memoryAddress, uint8_t* memoryData, bool status);
 | 
			
		||||
    virtual void userMemoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    virtual void userMemoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                                           uint32_t memoryAddress, uint8_t* memoryData);
 | 
			
		||||
    virtual void userManufacturerInfoLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, bool status);
 | 
			
		||||
    virtual void userManufacturerInfoIndication(Priority priority, HopCountType hopType, uint16_t asap);
 | 
			
		||||
    virtual void userManufacturerInfoResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    virtual void userManufacturerInfoLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, bool status);
 | 
			
		||||
    virtual void userManufacturerInfoIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl);
 | 
			
		||||
    virtual void userManufacturerInfoResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
                                                     uint8_t* info, bool status);
 | 
			
		||||
    virtual void userManufacturerInfoAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap,
 | 
			
		||||
    virtual void userManufacturerInfoAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl,
 | 
			
		||||
                                                     uint8_t* info);
 | 
			
		||||
    virtual void authorizeLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint32_t key, bool status);
 | 
			
		||||
    virtual void authorizeIndication(Priority priority, HopCountType hopType, uint16_t asap, uint32_t key);
 | 
			
		||||
    virtual void authorizeResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t level,
 | 
			
		||||
    virtual void authorizeLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint32_t key, bool status);
 | 
			
		||||
    virtual void authorizeIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint32_t key);
 | 
			
		||||
    virtual void authorizeResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t level,
 | 
			
		||||
                                          bool status);
 | 
			
		||||
    virtual void authorizeAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, uint8_t level);
 | 
			
		||||
    virtual void keyWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t level,
 | 
			
		||||
    virtual void authorizeAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t level);
 | 
			
		||||
    virtual void keyWriteLocalConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t level,
 | 
			
		||||
                                      uint32_t key, bool status);
 | 
			
		||||
    virtual void keyWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t level,
 | 
			
		||||
    virtual void keyWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t level,
 | 
			
		||||
                                    uint32_t key);
 | 
			
		||||
    virtual void keyWriteResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, uint8_t level,
 | 
			
		||||
    virtual void keyWriteResponseConfirm(AckType ack, Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t level,
 | 
			
		||||
                                         bool status);
 | 
			
		||||
    virtual void keyWriteAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, uint8_t level);
 | 
			
		||||
    virtual void keyWriteAppLayerConfirm(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t level);
 | 
			
		||||
    virtual void connectConfirm(uint16_t destination);
 | 
			
		||||
    virtual void systemNetworkParameterReadIndication(Priority priority, HopCountType hopType, uint16_t objectType,
 | 
			
		||||
    virtual void systemNetworkParameterReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t objectType,
 | 
			
		||||
                                                      uint16_t propertyId, uint8_t* testInfo, uint16_t testInfoLength);
 | 
			
		||||
 | 
			
		||||
    virtual void domainAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, const uint8_t* rfDoA,
 | 
			
		||||
    virtual void domainAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* rfDoA,
 | 
			
		||||
                                                          const uint8_t* knxSerialNumber);
 | 
			
		||||
 | 
			
		||||
    virtual void domainAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, const uint8_t* knxSerialNumber);
 | 
			
		||||
    virtual void domainAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* knxSerialNumber);
 | 
			
		||||
 | 
			
		||||
    virtual void systemNetworkParameterReadLocalConfirm(Priority priority, HopCountType hopType, uint16_t objectType,
 | 
			
		||||
    virtual void systemNetworkParameterReadLocalConfirm(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t objectType,
 | 
			
		||||
                                                        uint16_t propertyId, uint8_t* testInfo, uint16_t testInfoLength, bool status);
 | 
			
		||||
 | 
			
		||||
    virtual void domainAddressSerialNumberWriteLocalConfirm(Priority priority, HopCountType hopType, const uint8_t* rfDoA,
 | 
			
		||||
    virtual void domainAddressSerialNumberWriteLocalConfirm(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* rfDoA,
 | 
			
		||||
                                                            const uint8_t* knxSerialNumber, bool status);
 | 
			
		||||
 | 
			
		||||
    virtual void domainAddressSerialNumberReadLocalConfirm(Priority priority, HopCountType hopType, const uint8_t* knxSerialNumber, bool status);
 | 
			
		||||
    virtual void domainAddressSerialNumberReadLocalConfirm(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* knxSerialNumber, bool status);
 | 
			
		||||
 | 
			
		||||
    virtual void propertyValueRead(ObjectType objectType, uint8_t objectInstance, uint8_t propertyId,
 | 
			
		||||
                                   uint8_t& numberOfElements, uint16_t startIndex,
 | 
			
		||||
 | 
			
		||||
@ -136,7 +136,7 @@ void Bau27B0::loop()
 | 
			
		||||
#endif    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Bau27B0::domainAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, const uint8_t* rfDoA,
 | 
			
		||||
void Bau27B0::domainAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* rfDoA,
 | 
			
		||||
                                                       const uint8_t* knxSerialNumber)
 | 
			
		||||
{
 | 
			
		||||
    // If the received serial number matches our serial number
 | 
			
		||||
@ -145,15 +145,15 @@ void Bau27B0::domainAddressSerialNumberWriteIndication(Priority priority, HopCou
 | 
			
		||||
        _rfMediumObj.rfDomainAddress(rfDoA);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Bau27B0::domainAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, const uint8_t* knxSerialNumber)
 | 
			
		||||
void Bau27B0::domainAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* knxSerialNumber)
 | 
			
		||||
{
 | 
			
		||||
    // If the received serial number matches our serial number
 | 
			
		||||
    // then send a response with the current RF domain address stored in the RF medium object
 | 
			
		||||
    if (!memcmp(knxSerialNumber, _deviceObj.propertyData(PID_SERIAL_NUMBER), 6))
 | 
			
		||||
        _appLayer.domainAddressSerialNumberReadResponse(priority, hopType, _rfMediumObj.rfDomainAddress(), knxSerialNumber);
 | 
			
		||||
        _appLayer.domainAddressSerialNumberReadResponse(priority, hopType, secCtrl, _rfMediumObj.rfDomainAddress(), knxSerialNumber);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Bau27B0::individualAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, uint16_t newIndividualAddress,
 | 
			
		||||
void Bau27B0::individualAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t newIndividualAddress,
 | 
			
		||||
                                                          uint8_t* knxSerialNumber)
 | 
			
		||||
{
 | 
			
		||||
    // If the received serial number matches our serial number
 | 
			
		||||
@ -162,20 +162,20 @@ void Bau27B0::individualAddressSerialNumberWriteIndication(Priority priority, Ho
 | 
			
		||||
        _deviceObj.induvidualAddress(newIndividualAddress);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Bau27B0::individualAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, uint8_t* knxSerialNumber)
 | 
			
		||||
void Bau27B0::individualAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint8_t* knxSerialNumber)
 | 
			
		||||
{
 | 
			
		||||
    // If the received serial number matches our serial number
 | 
			
		||||
    // then send a response with the current RF domain address stored in the RF medium object and the serial number
 | 
			
		||||
    if (!memcmp(knxSerialNumber, _deviceObj.propertyData(PID_SERIAL_NUMBER), 6))
 | 
			
		||||
        _appLayer.IndividualAddressSerialNumberReadResponse(priority, hopType, _rfMediumObj.rfDomainAddress(), knxSerialNumber);
 | 
			
		||||
        _appLayer.IndividualAddressSerialNumberReadResponse(priority, hopType, secCtrl, _rfMediumObj.rfDomainAddress(), knxSerialNumber);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Bau27B0::domainAddressSerialNumberWriteLocalConfirm(Priority priority, HopCountType hopType, const uint8_t* rfDoA,
 | 
			
		||||
void Bau27B0::domainAddressSerialNumberWriteLocalConfirm(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* rfDoA,
 | 
			
		||||
                                                         const uint8_t* knxSerialNumber, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Bau27B0::domainAddressSerialNumberReadLocalConfirm(Priority priority, HopCountType hopType, const uint8_t* knxSerialNumber, bool status)
 | 
			
		||||
void Bau27B0::domainAddressSerialNumberReadLocalConfirm(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* knxSerialNumber, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -28,14 +28,14 @@ class Bau27B0 : public BauSystemB
 | 
			
		||||
    CemiServerObject _cemiServerObject;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    void domainAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, const uint8_t* rfDoA,
 | 
			
		||||
    void domainAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* rfDoA,
 | 
			
		||||
                                                  const uint8_t* knxSerialNumber) override;
 | 
			
		||||
    void domainAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, const uint8_t* knxSerialNumber) override;
 | 
			
		||||
    void individualAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, uint16_t newIndividualAddress,
 | 
			
		||||
    void domainAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* knxSerialNumber) override;
 | 
			
		||||
    void individualAddressSerialNumberWriteIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t newIndividualAddress,
 | 
			
		||||
                                                      uint8_t* knxSerialNumber) override;
 | 
			
		||||
    void individualAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, uint8_t* knxSerialNumber) override;
 | 
			
		||||
    void domainAddressSerialNumberWriteLocalConfirm(Priority priority, HopCountType hopType, const uint8_t* rfDoA,
 | 
			
		||||
    void individualAddressSerialNumberReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint8_t* knxSerialNumber) override;
 | 
			
		||||
    void domainAddressSerialNumberWriteLocalConfirm(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* rfDoA,
 | 
			
		||||
                                                    const uint8_t* knxSerialNumber, bool status) override;
 | 
			
		||||
    void domainAddressSerialNumberReadLocalConfirm(Priority priority, HopCountType hopType, const uint8_t* knxSerialNumber, bool status) override;
 | 
			
		||||
    void domainAddressSerialNumberReadLocalConfirm(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, const uint8_t* knxSerialNumber, bool status) override;
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -59,6 +59,10 @@ void BauSystemB::sendNextGroupTelegram()
 | 
			
		||||
    if(!configured())
 | 
			
		||||
        return;
 | 
			
		||||
    
 | 
			
		||||
    // TODO: get security flags from Security Interface Object for this group object
 | 
			
		||||
    SecurityControl goSecurity;
 | 
			
		||||
    goSecurity.dataSecurity = DataSecurity::none;
 | 
			
		||||
 | 
			
		||||
    static uint16_t startIdx = 1;
 | 
			
		||||
 | 
			
		||||
    GroupObjectTableObject& table = _groupObjTable;
 | 
			
		||||
@ -78,12 +82,12 @@ void BauSystemB::sendNextGroupTelegram()
 | 
			
		||||
        if (flag == WriteRequest && go.transmitEnable())
 | 
			
		||||
        {
 | 
			
		||||
            uint8_t* data = go.valueRef();
 | 
			
		||||
            _appLayer.groupValueWriteRequest(AckRequested, asap, go.priority(), NetworkLayerParameter, data,
 | 
			
		||||
            _appLayer.groupValueWriteRequest(AckRequested, asap, go.priority(), NetworkLayerParameter, goSecurity, data,
 | 
			
		||||
                go.sizeInTelegram());
 | 
			
		||||
        }
 | 
			
		||||
        else if (flag == ReadRequest)
 | 
			
		||||
        {
 | 
			
		||||
            _appLayer.groupValueReadRequest(AckRequested, asap, go.priority(), NetworkLayerParameter);
 | 
			
		||||
            _appLayer.groupValueReadRequest(AckRequested, asap, go.priority(), NetworkLayerParameter, goSecurity);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        go.commFlag(Transmitting);
 | 
			
		||||
@ -152,59 +156,59 @@ bool BauSystemB::configured()
 | 
			
		||||
    return _configured;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::deviceDescriptorReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t descriptorType)
 | 
			
		||||
void BauSystemB::deviceDescriptorReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t descriptorType)
 | 
			
		||||
{
 | 
			
		||||
    if (descriptorType != 0)
 | 
			
		||||
        descriptorType = 0x3f;
 | 
			
		||||
    
 | 
			
		||||
    uint8_t data[2];
 | 
			
		||||
    pushWord(_deviceObj.maskVersion(), data);
 | 
			
		||||
    _appLayer.deviceDescriptorReadResponse(AckRequested, priority, hopType, asap, descriptorType, data);
 | 
			
		||||
    _appLayer.deviceDescriptorReadResponse(AckRequested, priority, hopType, asap, secCtrl, descriptorType, data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::memoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
void BauSystemB::memoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
    uint16_t memoryAddress, uint8_t * data)
 | 
			
		||||
{
 | 
			
		||||
    _memory.writeMemory(memoryAddress, number, data);
 | 
			
		||||
 | 
			
		||||
    if (_deviceObj.verifyMode())
 | 
			
		||||
        memoryReadIndication(priority, hopType, asap, number, memoryAddress);
 | 
			
		||||
        memoryReadIndication(priority, hopType, asap, secCtrl, number, memoryAddress);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::memoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
void BauSystemB::memoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
    uint16_t memoryAddress)
 | 
			
		||||
{
 | 
			
		||||
    _appLayer.memoryReadResponse(AckRequested, priority, hopType, asap, number, memoryAddress,
 | 
			
		||||
    _appLayer.memoryReadResponse(AckRequested, priority, hopType, asap, secCtrl, number, memoryAddress,
 | 
			
		||||
        _memory.toAbsolute(memoryAddress));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::restartRequestIndication(Priority priority, HopCountType hopType, uint16_t asap)
 | 
			
		||||
void BauSystemB::restartRequestIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    // Flush the EEPROM before resetting
 | 
			
		||||
    _memory.writeMemory();
 | 
			
		||||
    _platform.restart();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::authorizeIndication(Priority priority, HopCountType hopType, uint16_t asap, uint32_t key)
 | 
			
		||||
void BauSystemB::authorizeIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint32_t key)
 | 
			
		||||
{
 | 
			
		||||
    _appLayer.authorizeResponse(AckRequested, priority, hopType, asap, 0);
 | 
			
		||||
    _appLayer.authorizeResponse(AckRequested, priority, hopType, asap, secCtrl, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::userMemoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint32_t memoryAddress)
 | 
			
		||||
void BauSystemB::userMemoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress)
 | 
			
		||||
{
 | 
			
		||||
    _appLayer.userMemoryReadResponse(AckRequested, priority, hopType, asap, number, memoryAddress,
 | 
			
		||||
    _appLayer.userMemoryReadResponse(AckRequested, priority, hopType, asap, secCtrl, number, memoryAddress,
 | 
			
		||||
        _memory.toAbsolute(memoryAddress));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::userMemoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint32_t memoryAddress, uint8_t* data)
 | 
			
		||||
void BauSystemB::userMemoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress, uint8_t* data)
 | 
			
		||||
{
 | 
			
		||||
    _memory.writeMemory(memoryAddress, number, data);
 | 
			
		||||
 | 
			
		||||
    if (_deviceObj.verifyMode())
 | 
			
		||||
        userMemoryReadIndication(priority, hopType, asap, number, memoryAddress);
 | 
			
		||||
        userMemoryReadIndication(priority, hopType, asap, secCtrl, number, memoryAddress);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::propertyDescriptionReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
void BauSystemB::propertyDescriptionReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
    uint8_t propertyId, uint8_t propertyIndex)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t pid = propertyId;
 | 
			
		||||
@ -216,20 +220,20 @@ void BauSystemB::propertyDescriptionReadIndication(Priority priority, HopCountTy
 | 
			
		||||
    if (obj)
 | 
			
		||||
        obj->readPropertyDescription(pid, propertyIndex, writeEnable, type, numberOfElements, access);
 | 
			
		||||
 | 
			
		||||
    _appLayer.propertyDescriptionReadResponse(AckRequested, priority, hopType, asap, objectIndex, pid, propertyIndex,
 | 
			
		||||
    _appLayer.propertyDescriptionReadResponse(AckRequested, priority, hopType, asap, secCtrl, objectIndex, pid, propertyIndex,
 | 
			
		||||
        writeEnable, type, numberOfElements, access);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::propertyValueWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
void BauSystemB::propertyValueWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
    uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length)
 | 
			
		||||
{
 | 
			
		||||
    InterfaceObject* obj = getInterfaceObject(objectIndex);
 | 
			
		||||
    if(obj)
 | 
			
		||||
        obj->writeProperty((PropertyID)propertyId, startIndex, data, numberOfElements);
 | 
			
		||||
    propertyValueReadIndication(priority, hopType, asap, objectIndex, propertyId, numberOfElements, startIndex);
 | 
			
		||||
    propertyValueReadIndication(priority, hopType, asap, secCtrl, objectIndex, propertyId, numberOfElements, startIndex);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::propertyValueReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
void BauSystemB::propertyValueReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
    uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t size = 0;
 | 
			
		||||
@ -250,11 +254,11 @@ void BauSystemB::propertyValueReadIndication(Priority priority, HopCountType hop
 | 
			
		||||
    if (elementCount == 0)
 | 
			
		||||
        size = 0;
 | 
			
		||||
    
 | 
			
		||||
    _appLayer.propertyValueReadResponse(AckRequested, priority, hopType, asap, objectIndex, propertyId, elementCount,
 | 
			
		||||
    _appLayer.propertyValueReadResponse(AckRequested, priority, hopType, asap, secCtrl, objectIndex, propertyId, elementCount,
 | 
			
		||||
        startIndex, data, size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::functionPropertyCommandIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
void BauSystemB::functionPropertyCommandIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                                   uint8_t propertyId, uint8_t* data, uint8_t length)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t resultData[32];
 | 
			
		||||
@ -264,10 +268,10 @@ void BauSystemB::functionPropertyCommandIndication(Priority priority, HopCountTy
 | 
			
		||||
    if(obj)
 | 
			
		||||
        obj->command((PropertyID)propertyId, data, length, resultData, resultLength);
 | 
			
		||||
 | 
			
		||||
    _appLayer.functionPropertyStateResponse(AckRequested, priority, hopType, asap, objectIndex, propertyId, resultData, resultLength);
 | 
			
		||||
    _appLayer.functionPropertyStateResponse(AckRequested, priority, hopType, asap, secCtrl, objectIndex, propertyId, resultData, resultLength);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::functionPropertyStateIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
void BauSystemB::functionPropertyStateIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                                 uint8_t propertyId, uint8_t* data, uint8_t length)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t resultData[32];
 | 
			
		||||
@ -277,22 +281,22 @@ void BauSystemB::functionPropertyStateIndication(Priority priority, HopCountType
 | 
			
		||||
    if(obj)
 | 
			
		||||
        obj->state((PropertyID)propertyId, data, length, resultData, resultLength);
 | 
			
		||||
 | 
			
		||||
    _appLayer.functionPropertyStateResponse(AckRequested, priority, hopType, asap, objectIndex, propertyId, resultData, resultLength);
 | 
			
		||||
    _appLayer.functionPropertyStateResponse(AckRequested, priority, hopType, asap, secCtrl, objectIndex, propertyId, resultData, resultLength);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::individualAddressReadIndication(HopCountType hopType)
 | 
			
		||||
void BauSystemB::individualAddressReadIndication(HopCountType hopType, const SecurityControl &secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    if (_deviceObj.progMode())
 | 
			
		||||
        _appLayer.individualAddressReadResponse(AckRequested, hopType);
 | 
			
		||||
        _appLayer.individualAddressReadResponse(AckRequested, hopType, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::individualAddressWriteIndication(HopCountType hopType, uint16_t newaddress)
 | 
			
		||||
void BauSystemB::individualAddressWriteIndication(HopCountType hopType, const SecurityControl &secCtrl, uint16_t newaddress)
 | 
			
		||||
{
 | 
			
		||||
    if (_deviceObj.progMode())
 | 
			
		||||
        _deviceObj.induvidualAddress(newaddress);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::groupValueWriteLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, uint8_t * data, uint8_t dataLength, bool status)
 | 
			
		||||
void BauSystemB::groupValueWriteLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint8_t * data, uint8_t dataLength, bool status)
 | 
			
		||||
{
 | 
			
		||||
    GroupObject& go = _groupObjTable.get(asap);
 | 
			
		||||
    if (status)
 | 
			
		||||
@ -301,7 +305,7 @@ void BauSystemB::groupValueWriteLocalConfirm(AckType ack, uint16_t asap, Priorit
 | 
			
		||||
        go.commFlag(Error);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::groupValueReadLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, bool status)
 | 
			
		||||
void BauSystemB::groupValueReadLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl, bool status)
 | 
			
		||||
{
 | 
			
		||||
    GroupObject& go = _groupObjTable.get(asap);
 | 
			
		||||
    if (status)
 | 
			
		||||
@ -310,7 +314,7 @@ void BauSystemB::groupValueReadLocalConfirm(AckType ack, uint16_t asap, Priority
 | 
			
		||||
        go.commFlag(Error);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::groupValueReadIndication(uint16_t asap, Priority priority, HopCountType hopType)
 | 
			
		||||
void BauSystemB::groupValueReadIndication(uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    GroupObject& go = _groupObjTable.get(asap);
 | 
			
		||||
 | 
			
		||||
@ -318,10 +322,10 @@ void BauSystemB::groupValueReadIndication(uint16_t asap, Priority priority, HopC
 | 
			
		||||
        return;
 | 
			
		||||
    
 | 
			
		||||
    uint8_t* data = go.valueRef();
 | 
			
		||||
    _appLayer.groupValueReadResponse(AckRequested, asap, priority, hopType, data, go.sizeInTelegram());
 | 
			
		||||
    _appLayer.groupValueReadResponse(AckRequested, asap, priority, hopType, secCtrl, data, go.sizeInTelegram());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::groupValueReadAppLayerConfirm(uint16_t asap, Priority priority, HopCountType hopType, uint8_t* data,
 | 
			
		||||
void BauSystemB::groupValueReadAppLayerConfirm(uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint8_t* data,
 | 
			
		||||
    uint8_t dataLength)
 | 
			
		||||
{
 | 
			
		||||
    GroupObject& go = _groupObjTable.get(asap);
 | 
			
		||||
@ -332,7 +336,7 @@ void BauSystemB::groupValueReadAppLayerConfirm(uint16_t asap, Priority priority,
 | 
			
		||||
    updateGroupObject(go, data, dataLength);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::groupValueWriteIndication(uint16_t asap, Priority priority, HopCountType hopType, uint8_t * data, uint8_t dataLength)
 | 
			
		||||
void BauSystemB::groupValueWriteIndication(uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint8_t * data, uint8_t dataLength)
 | 
			
		||||
{
 | 
			
		||||
    GroupObject& go = _groupObjTable.get(asap);
 | 
			
		||||
 | 
			
		||||
@ -347,13 +351,13 @@ void BauSystemB::addSaveRestore(SaveRestore* obj)
 | 
			
		||||
    _memory.addSaveRestore(obj);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool BauSystemB::restartRequest(uint16_t asap)
 | 
			
		||||
bool BauSystemB::restartRequest(uint16_t asap, const SecurityControl &secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    if (_appLayer.isConnected())
 | 
			
		||||
        return false;
 | 
			
		||||
    _restartState = Connecting; // order important, has to be set BEFORE connectRequest
 | 
			
		||||
    _appLayer.connectRequest(asap, SystemPriority);
 | 
			
		||||
    _appLayer.deviceDescriptorReadRequest(AckRequested, SystemPriority, NetworkLayerParameter, asap, 0);
 | 
			
		||||
    _appLayer.deviceDescriptorReadRequest(AckRequested, SystemPriority, NetworkLayerParameter, asap, secCtrl, 0);
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -373,6 +377,10 @@ void BauSystemB::connectConfirm(uint16_t tsap)
 | 
			
		||||
 | 
			
		||||
void BauSystemB::nextRestartState()
 | 
			
		||||
{
 | 
			
		||||
    // TODO:
 | 
			
		||||
    SecurityControl secCtrl;
 | 
			
		||||
    secCtrl.dataSecurity = DataSecurity::none;
 | 
			
		||||
 | 
			
		||||
    switch (_restartState)
 | 
			
		||||
    {
 | 
			
		||||
        case Idle:
 | 
			
		||||
@ -385,7 +393,7 @@ void BauSystemB::nextRestartState()
 | 
			
		||||
            /* connection confirmed, we send restartRequest, but we wait a moment (sending ACK etc)... */
 | 
			
		||||
            if (millis() - _restartDelay > 30)
 | 
			
		||||
            {
 | 
			
		||||
                _appLayer.restartRequest(AckRequested, SystemPriority, NetworkLayerParameter);
 | 
			
		||||
                _appLayer.restartRequest(AckRequested, SystemPriority, NetworkLayerParameter, secCtrl);
 | 
			
		||||
                _restartState = Restarted;
 | 
			
		||||
                _restartDelay = millis();
 | 
			
		||||
            }
 | 
			
		||||
@ -402,7 +410,7 @@ void BauSystemB::nextRestartState()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::systemNetworkParameterReadIndication(Priority priority, HopCountType hopType, uint16_t objectType,
 | 
			
		||||
void BauSystemB::systemNetworkParameterReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t objectType,
 | 
			
		||||
                                                      uint16_t propertyId, uint8_t* testInfo, uint16_t testInfoLength)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t operand;
 | 
			
		||||
@ -417,7 +425,7 @@ void BauSystemB::systemNetworkParameterReadIndication(Priority priority, HopCoun
 | 
			
		||||
            if (_deviceObj.progMode() && (objectType == OT_DEVICE) && (propertyId == PID_SERIAL_NUMBER))
 | 
			
		||||
            {
 | 
			
		||||
                // Send reply. testResult data is KNX serial number
 | 
			
		||||
                _appLayer.systemNetworkParameterReadResponse(priority, hopType, objectType, propertyId,
 | 
			
		||||
                _appLayer.systemNetworkParameterReadResponse(priority, hopType, secCtrl, objectType, propertyId,
 | 
			
		||||
                                                             testInfo, testInfoLength, (uint8_t*)_deviceObj.propertyData(PID_SERIAL_NUMBER), 6);
 | 
			
		||||
            }
 | 
			
		||||
        break;
 | 
			
		||||
@ -433,7 +441,7 @@ void BauSystemB::systemNetworkParameterReadIndication(Priority priority, HopCoun
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void BauSystemB::systemNetworkParameterReadLocalConfirm(Priority priority, HopCountType hopType, uint16_t objectType,
 | 
			
		||||
void BauSystemB::systemNetworkParameterReadLocalConfirm(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t objectType,
 | 
			
		||||
                                                         uint16_t propertyId, uint8_t* testInfo, uint16_t testInfoLength, bool status)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,7 @@ class BauSystemB : protected BusAccessUnit
 | 
			
		||||
    void readMemory();
 | 
			
		||||
    void writeMemory();
 | 
			
		||||
    void addSaveRestore(SaveRestore* obj);
 | 
			
		||||
    bool restartRequest(uint16_t asap);
 | 
			
		||||
    bool restartRequest(uint16_t asap, const SecurityControl &secCtrl);
 | 
			
		||||
 | 
			
		||||
    void propertyValueRead(ObjectType objectType, uint8_t objectInstance, uint8_t propertyId,
 | 
			
		||||
                           uint8_t& numberOfElements, uint16_t startIndex, 
 | 
			
		||||
@ -42,39 +42,39 @@ class BauSystemB : protected BusAccessUnit
 | 
			
		||||
 | 
			
		||||
  protected:
 | 
			
		||||
    virtual DataLinkLayer& dataLinkLayer() = 0;
 | 
			
		||||
    void memoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    void memoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                               uint16_t memoryAddress, uint8_t* data) override;
 | 
			
		||||
    void memoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    void memoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                              uint16_t memoryAddress) override;
 | 
			
		||||
    void deviceDescriptorReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t descriptorType) override;
 | 
			
		||||
    void restartRequestIndication(Priority priority, HopCountType hopType, uint16_t asap) override;
 | 
			
		||||
    void authorizeIndication(Priority priority, HopCountType hopType, uint16_t asap, uint32_t key) override;
 | 
			
		||||
    void userMemoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number, uint32_t memoryAddress) override;
 | 
			
		||||
    void userMemoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t number,
 | 
			
		||||
    void deviceDescriptorReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t descriptorType) override;
 | 
			
		||||
    void restartRequestIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl) override;
 | 
			
		||||
    void authorizeIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint32_t key) override;
 | 
			
		||||
    void userMemoryReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number, uint32_t memoryAddress) override;
 | 
			
		||||
    void userMemoryWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t number,
 | 
			
		||||
                                   uint32_t memoryAddress, uint8_t* memoryData) override;
 | 
			
		||||
    void propertyDescriptionReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
    void propertyDescriptionReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                           uint8_t propertyId, uint8_t propertyIndex) override;
 | 
			
		||||
    void propertyValueWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
    void propertyValueWriteIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                      uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex, uint8_t* data, uint8_t length) override;
 | 
			
		||||
    void propertyValueReadIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
    void propertyValueReadIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                     uint8_t propertyId, uint8_t numberOfElements, uint16_t startIndex) override;
 | 
			
		||||
    void functionPropertyCommandIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
    void functionPropertyCommandIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                           uint8_t propertyId, uint8_t* data, uint8_t length);
 | 
			
		||||
    void functionPropertyStateIndication(Priority priority, HopCountType hopType, uint16_t asap, uint8_t objectIndex,
 | 
			
		||||
    void functionPropertyStateIndication(Priority priority, HopCountType hopType, uint16_t asap, const SecurityControl &secCtrl, uint8_t objectIndex,
 | 
			
		||||
                                         uint8_t propertyId, uint8_t* data, uint8_t length);
 | 
			
		||||
    void individualAddressReadIndication(HopCountType hopType) override;
 | 
			
		||||
    void individualAddressWriteIndication(HopCountType hopType, uint16_t newaddress) override;
 | 
			
		||||
    void groupValueWriteLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType,
 | 
			
		||||
    void individualAddressReadIndication(HopCountType hopType, const SecurityControl &secCtrl) override;
 | 
			
		||||
    void individualAddressWriteIndication(HopCountType hopType, const SecurityControl &secCtrl, uint16_t newaddress) override;
 | 
			
		||||
    void groupValueWriteLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl,
 | 
			
		||||
                                     uint8_t* data, uint8_t dataLength, bool status) override;
 | 
			
		||||
    void groupValueReadLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, bool status) override;
 | 
			
		||||
    void groupValueReadIndication(uint16_t asap, Priority priority, HopCountType hopType) override;
 | 
			
		||||
    void groupValueReadAppLayerConfirm(uint16_t asap, Priority priority, HopCountType hopType,
 | 
			
		||||
    void groupValueReadLocalConfirm(AckType ack, uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl, bool status) override;
 | 
			
		||||
    void groupValueReadIndication(uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl) override;
 | 
			
		||||
    void groupValueReadAppLayerConfirm(uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl,
 | 
			
		||||
                                       uint8_t* data, uint8_t dataLength) override;
 | 
			
		||||
    void groupValueWriteIndication(uint16_t asap, Priority priority, HopCountType hopType,
 | 
			
		||||
    void groupValueWriteIndication(uint16_t asap, Priority priority, HopCountType hopType, const SecurityControl &secCtrl,
 | 
			
		||||
                                   uint8_t* data, uint8_t dataLength) override;
 | 
			
		||||
    void systemNetworkParameterReadIndication(Priority priority, HopCountType hopType, uint16_t objectType,
 | 
			
		||||
    void systemNetworkParameterReadIndication(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t objectType,
 | 
			
		||||
                                              uint16_t propertyId, uint8_t* testInfo, uint16_t testinfoLength) override;
 | 
			
		||||
    void systemNetworkParameterReadLocalConfirm(Priority priority, HopCountType hopType, uint16_t objectType,
 | 
			
		||||
    void systemNetworkParameterReadLocalConfirm(Priority priority, HopCountType hopType, const SecurityControl &secCtrl, uint16_t objectType,
 | 
			
		||||
                                                uint16_t propertyId, uint8_t* testInfo, uint16_t testInfoLength, bool status) override;
 | 
			
		||||
    void connectConfirm(uint16_t tsap) override;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -182,3 +182,17 @@ enum ApduType
 | 
			
		||||
    // Secure Service
 | 
			
		||||
    SecureService = 0x3F1
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
enum class DataSecurity
 | 
			
		||||
{
 | 
			
		||||
    none,
 | 
			
		||||
    auth,
 | 
			
		||||
    authConf
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct SecurityControl
 | 
			
		||||
{
 | 
			
		||||
    bool toolAccess;
 | 
			
		||||
    DataSecurity dataSecurity;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -41,6 +41,9 @@ void SecureApplicationLayer::dataGroupIndication(HopCountType hopType, Priority
 | 
			
		||||
 | 
			
		||||
    if (apdu.type() == SecureService)
 | 
			
		||||
    {
 | 
			
		||||
        // TODO:
 | 
			
		||||
        SecurityControl secCtrl;
 | 
			
		||||
 | 
			
		||||
        // Decrypt secure APDU
 | 
			
		||||
        // Somehow ugly that we need to know the size in advance here at this point
 | 
			
		||||
        uint16_t plainApduLength = apdu.length() - 1 - 6 - 4; // secureAdsuLength - sizeof(scf) - sizeof(seqNum) - sizeof(mac)
 | 
			
		||||
@ -49,7 +52,7 @@ void SecureApplicationLayer::dataGroupIndication(HopCountType hopType, Priority
 | 
			
		||||
        if (decodeSecureApdu(apdu, plainFrame.apdu()))
 | 
			
		||||
        {
 | 
			
		||||
            // Process decrypted inner APDU
 | 
			
		||||
            ApplicationLayer::dataGroupIndication(hopType, priority, tsap, plainFrame.apdu());
 | 
			
		||||
            ApplicationLayer::dataGroupIndication(hopType, priority, tsap, plainFrame.apdu(), secCtrl);
 | 
			
		||||
        }
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
@ -240,7 +243,7 @@ void SecureApplicationLayer::dataConnectedConfirm(uint16_t tsap)
 | 
			
		||||
 | 
			
		||||
/* to transport layer */
 | 
			
		||||
 | 
			
		||||
void SecureApplicationLayer::dataGroupRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu)
 | 
			
		||||
void SecureApplicationLayer::dataGroupRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    // TODO:
 | 
			
		||||
    // get flags auth and confidentiality for this TSAP from PID_GO_SECURITY_FLAGS from SecIntObj
 | 
			
		||||
@ -253,15 +256,15 @@ void SecureApplicationLayer::dataGroupRequest(AckType ack, HopCountType hopType,
 | 
			
		||||
        // create secure APDU
 | 
			
		||||
        if (createSecureApdu(apdu, secureFrame.apdu(), true, true)) // TODO: toolAccess, confidentialty
 | 
			
		||||
        {
 | 
			
		||||
            ApplicationLayer::dataGroupRequest(ack, hopType, priority, tsap, secureFrame.apdu());
 | 
			
		||||
            ApplicationLayer::dataGroupRequest(ack, hopType, priority, tsap, secureFrame.apdu(), secCtrl);
 | 
			
		||||
        }
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ApplicationLayer::dataGroupRequest(ack, hopType, priority, tsap, apdu);
 | 
			
		||||
    ApplicationLayer::dataGroupRequest(ack, hopType, priority, tsap, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SecureApplicationLayer::dataBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu)
 | 
			
		||||
void SecureApplicationLayer::dataBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    // TODO:
 | 
			
		||||
    bool needsEncryption = true;
 | 
			
		||||
@ -273,15 +276,15 @@ void SecureApplicationLayer::dataBroadcastRequest(AckType ack, HopCountType hopT
 | 
			
		||||
        // create secure APDU
 | 
			
		||||
        if (createSecureApdu(apdu, secureFrame.apdu(), true, true)) // TODO: toolAccess, confidentialty
 | 
			
		||||
        {
 | 
			
		||||
            ApplicationLayer::dataBroadcastRequest(ack, hopType, SystemPriority, secureFrame.apdu());
 | 
			
		||||
            ApplicationLayer::dataBroadcastRequest(ack, hopType, SystemPriority, secureFrame.apdu(), secCtrl);
 | 
			
		||||
        }
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ApplicationLayer::dataBroadcastRequest(ack, hopType, SystemPriority, apdu);
 | 
			
		||||
    ApplicationLayer::dataBroadcastRequest(ack, hopType, SystemPriority, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SecureApplicationLayer::dataSystemBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu)
 | 
			
		||||
void SecureApplicationLayer::dataSystemBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    // TODO:
 | 
			
		||||
    bool needsEncryption = true;
 | 
			
		||||
@ -293,15 +296,15 @@ void SecureApplicationLayer::dataSystemBroadcastRequest(AckType ack, HopCountTyp
 | 
			
		||||
        // create secure APDU
 | 
			
		||||
        if (createSecureApdu(apdu, secureFrame.apdu(), true, true)) // TODO: toolAccess, confidentialty
 | 
			
		||||
        {
 | 
			
		||||
            ApplicationLayer::dataSystemBroadcastRequest(ack, hopType, SystemPriority, secureFrame.apdu());
 | 
			
		||||
            ApplicationLayer::dataSystemBroadcastRequest(ack, hopType, SystemPriority, secureFrame.apdu(), secCtrl);
 | 
			
		||||
        }
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ApplicationLayer::dataSystemBroadcastRequest(ack, hopType, SystemPriority, apdu);
 | 
			
		||||
    ApplicationLayer::dataSystemBroadcastRequest(ack, hopType, SystemPriority, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SecureApplicationLayer::dataIndividualRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t destination, APDU& apdu)
 | 
			
		||||
void SecureApplicationLayer::dataIndividualRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t destination, APDU& apdu, const SecurityControl& secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    // TODO:
 | 
			
		||||
    bool needsEncryption = true;
 | 
			
		||||
@ -313,15 +316,15 @@ void SecureApplicationLayer::dataIndividualRequest(AckType ack, HopCountType hop
 | 
			
		||||
        // create secure APDU
 | 
			
		||||
        if (createSecureApdu(apdu, secureFrame.apdu(), true, true)) // TODO: toolAccess, confidentialty
 | 
			
		||||
        {
 | 
			
		||||
            ApplicationLayer::dataIndividualRequest(ack, hopType, priority, destination, secureFrame.apdu());
 | 
			
		||||
            ApplicationLayer::dataIndividualRequest(ack, hopType, priority, destination, secureFrame.apdu(), secCtrl);
 | 
			
		||||
        }
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ApplicationLayer::dataIndividualRequest(ack, hopType, priority, destination, apdu);
 | 
			
		||||
    ApplicationLayer::dataIndividualRequest(ack, hopType, priority, destination, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SecureApplicationLayer::dataConnectedRequest(uint16_t tsap, Priority priority, APDU& apdu)
 | 
			
		||||
void SecureApplicationLayer::dataConnectedRequest(uint16_t tsap, Priority priority, APDU& apdu, const SecurityControl &secCtrl)
 | 
			
		||||
{
 | 
			
		||||
    // TODO:
 | 
			
		||||
    bool needsEncryption = true;
 | 
			
		||||
@ -333,13 +336,13 @@ void SecureApplicationLayer::dataConnectedRequest(uint16_t tsap, Priority priori
 | 
			
		||||
        // create secure APDU
 | 
			
		||||
        if (createSecureApdu(apdu, secureFrame.apdu(), true, true)) // TODO: toolAccess, confidentialty
 | 
			
		||||
        {
 | 
			
		||||
            ApplicationLayer::dataConnectedRequest(tsap, priority, secureFrame.apdu());
 | 
			
		||||
            ApplicationLayer::dataConnectedRequest(tsap, priority, secureFrame.apdu(), secCtrl);
 | 
			
		||||
        }
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // apdu must be valid until it was confirmed
 | 
			
		||||
    ApplicationLayer::dataConnectedRequest(tsap, priority, apdu);
 | 
			
		||||
    ApplicationLayer::dataConnectedRequest(tsap, priority, apdu, secCtrl);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SecureApplicationLayer::encryptAesCbc(uint8_t* buffer, uint16_t bufLen, const uint8_t* iv, const uint8_t* key)
 | 
			
		||||
 | 
			
		||||
@ -35,27 +35,27 @@ class SecureApplicationLayer :  public ApplicationLayer
 | 
			
		||||
    uint8_t getFromFailureLogByIndex(uint8_t index, uint8_t* data, uint8_t maxDataLen);
 | 
			
		||||
 | 
			
		||||
    // from transport layer
 | 
			
		||||
    virtual void dataGroupIndication(HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu) override;
 | 
			
		||||
    virtual void dataGroupConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap,
 | 
			
		||||
                                  APDU& apdu, bool status) override;
 | 
			
		||||
    virtual void dataBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu) override;
 | 
			
		||||
    virtual void dataBroadcastConfirm(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, bool status) override;
 | 
			
		||||
    virtual void dataSystemBroadcastIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu) override;
 | 
			
		||||
    virtual void dataSystemBroadcastConfirm(HopCountType hopType, Priority priority, APDU& apdu, bool status) override;
 | 
			
		||||
    virtual void dataIndividualIndication(HopCountType hopType, Priority priority, uint16_t source, APDU& apdu) override;
 | 
			
		||||
    virtual void dataIndividualConfirm(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, bool status) override;
 | 
			
		||||
    virtual void dataConnectedIndication(Priority priority, uint16_t tsap, APDU& apdu) override;
 | 
			
		||||
    virtual void dataConnectedConfirm(uint16_t tsap) override;
 | 
			
		||||
    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 dataConnectedIndication(Priority priority, uint16_t tsap, APDU& apdu);
 | 
			
		||||
    void dataConnectedConfirm(uint16_t tsap);
 | 
			
		||||
 | 
			
		||||
    void loop();
 | 
			
		||||
 | 
			
		||||
  protected:
 | 
			
		||||
    // to transport layer
 | 
			
		||||
    virtual void dataGroupRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu) override;
 | 
			
		||||
    virtual void dataBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu) override;
 | 
			
		||||
    virtual void dataSystemBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu) override;
 | 
			
		||||
    virtual void dataIndividualRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t destination, APDU& apdu) override;
 | 
			
		||||
    virtual void dataConnectedRequest(uint16_t tsap, Priority priority, APDU& apdu) override; // apdu must be valid until it was confirmed
 | 
			
		||||
    virtual void dataGroupRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t tsap, APDU& apdu, const SecurityControl& secCtrl) override;
 | 
			
		||||
    virtual void dataBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, const SecurityControl& secCtrl) override;
 | 
			
		||||
    virtual void dataSystemBroadcastRequest(AckType ack, HopCountType hopType, Priority priority, APDU& apdu, const SecurityControl& secCtrl) override;
 | 
			
		||||
    virtual void dataIndividualRequest(AckType ack, HopCountType hopType, Priority priority, uint16_t destination, APDU& apdu, const SecurityControl& secCtrl) override;
 | 
			
		||||
    virtual void dataConnectedRequest(uint16_t tsap, Priority priority, APDU& apdu, const SecurityControl& secCtrl) override; // apdu must be valid until it was confirmed
 | 
			
		||||
 | 
			
		||||
  private:
 | 
			
		||||
 | 
			
		||||
@ -188,13 +188,6 @@ class SecureApplicationLayer :  public ApplicationLayer
 | 
			
		||||
        unknown
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    enum class DataSecurity
 | 
			
		||||
    {
 | 
			
		||||
        none,
 | 
			
		||||
        auth,
 | 
			
		||||
        authConf
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    struct Addr
 | 
			
		||||
    {
 | 
			
		||||
        Addr() = default;
 | 
			
		||||
@ -226,12 +219,6 @@ class SecureApplicationLayer :  public ApplicationLayer
 | 
			
		||||
        IndAddr(uint8_t addr) : Addr{addr} { addrType = AddrType::individual; }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    struct SecurityControl
 | 
			
		||||
    {
 | 
			
		||||
        bool toolAccess;
 | 
			
		||||
        DataSecurity dataSecurity;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    uint32_t calcAuthOnlyMac(uint8_t* apdu, uint8_t apduLength, const uint8_t *key, uint8_t* iv, uint8_t* ctr0);
 | 
			
		||||
    uint32_t calcConfAuthMac(uint8_t* associatedData, uint16_t associatedDataLength, uint8_t* apdu, uint8_t apduLength, const uint8_t* key, uint8_t* iv);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -33,7 +33,7 @@ SecurityInterfaceObject::SecurityInterfaceObject()
 | 
			
		||||
                obj->_state = (LoadState) data[0];
 | 
			
		||||
                return 1;
 | 
			
		||||
            }),
 | 
			
		||||
        new FunctionProperty<SecurityInterfaceObject>(this, PID_SECURITY_MODE, ReadLv3 | WriteLv0,
 | 
			
		||||
        new FunctionProperty<SecurityInterfaceObject>(this, PID_SECURITY_MODE,
 | 
			
		||||
            // Command Callback of PID_SECURITY_MODE
 | 
			
		||||
            [](SecurityInterfaceObject* obj, uint8_t* data, uint8_t length, uint8_t* resultData, uint8_t& resultLength) -> void {
 | 
			
		||||
                uint8_t serviceId = data[1] & 0xff;
 | 
			
		||||
@ -83,7 +83,7 @@ SecurityInterfaceObject::SecurityInterfaceObject()
 | 
			
		||||
        new DataProperty( PID_P2P_KEY_TABLE, true, PDT_GENERIC_20, 32, ReadLv3 | WriteLv0 ), // written by ETS
 | 
			
		||||
        new DataProperty( PID_GRP_KEY_TABLE, true, PDT_GENERIC_18, 32, ReadLv3 | WriteLv0 ), // written by ETS
 | 
			
		||||
        new DataProperty( PID_SECURITY_INDIVIDUAL_ADDRESS_TABLE, true, PDT_GENERIC_08, 32, ReadLv3 | WriteLv0 ), // written by ETS
 | 
			
		||||
        new FunctionProperty<SecurityInterfaceObject>(this, PID_SECURITY_FAILURES_LOG, ReadLv3 | WriteLv0,
 | 
			
		||||
        new FunctionProperty<SecurityInterfaceObject>(this, PID_SECURITY_FAILURES_LOG,
 | 
			
		||||
            // Command Callback of PID_SECURITY_FAILURES_LOG
 | 
			
		||||
            [](SecurityInterfaceObject* obj, uint8_t* data, uint8_t length, uint8_t* resultData, uint8_t& resultLength) -> void {
 | 
			
		||||
                if (length != 3)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user