mirror of
https://github.com/thelsing/knx.git
synced 2024-12-18 19:08:18 +01:00
functionproperty respond only if handled
This commit is contained in:
parent
d52df6d584
commit
859b50eff6
@ -4,7 +4,7 @@
|
|||||||
#include "interface_object.h"
|
#include "interface_object.h"
|
||||||
|
|
||||||
typedef void (*BeforeRestartCallback)(void);
|
typedef void (*BeforeRestartCallback)(void);
|
||||||
typedef void (*FunctionPropertyCallback)(uint8_t objectIndex, uint8_t propertyId, uint8_t length, uint8_t *data, uint8_t *resultData, uint8_t &resultLength);
|
typedef bool (*FunctionPropertyCallback)(uint8_t objectIndex, uint8_t propertyId, uint8_t length, uint8_t *data, uint8_t *resultData, uint8_t &resultLength);
|
||||||
|
|
||||||
class BusAccessUnit
|
class BusAccessUnit
|
||||||
{
|
{
|
||||||
|
@ -303,22 +303,30 @@ void BauSystemB::functionPropertyCommandIndication(Priority priority, HopCountTy
|
|||||||
uint8_t resultData[kFunctionPropertyResultBufferMaxSize];
|
uint8_t resultData[kFunctionPropertyResultBufferMaxSize];
|
||||||
uint8_t resultLength = sizeof(resultData); // tell the callee the maximum size of the buffer
|
uint8_t resultLength = sizeof(resultData); // tell the callee the maximum size of the buffer
|
||||||
|
|
||||||
|
bool handled = false;
|
||||||
|
|
||||||
InterfaceObject* obj = getInterfaceObject(objectIndex);
|
InterfaceObject* obj = getInterfaceObject(objectIndex);
|
||||||
if(obj)
|
if(obj)
|
||||||
{
|
{
|
||||||
if (obj->property((PropertyID)propertyId)->Type() == PDT_FUNCTION)
|
if (obj->property((PropertyID)propertyId)->Type() == PDT_FUNCTION)
|
||||||
{
|
{
|
||||||
obj->command((PropertyID)propertyId, data, length, resultData, resultLength);
|
obj->command((PropertyID)propertyId, data, length, resultData, resultLength);
|
||||||
|
handled = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(_functionProperty != 0)
|
if(_functionProperty != 0)
|
||||||
_functionProperty(objectIndex, propertyId, length, data, resultData, resultLength);
|
if(_functionProperty(objectIndex, propertyId, length, data, resultData, resultLength))
|
||||||
else
|
handled = true;
|
||||||
resultLength = 0;
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if(_functionProperty != 0)
|
||||||
|
if(_functionProperty(objectIndex, propertyId, length, data, resultData, resultLength))
|
||||||
|
handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//only return a value it was handled by a property or function
|
||||||
|
if(handled)
|
||||||
applicationLayer().functionPropertyStateResponse(AckRequested, priority, hopType, asap, secCtrl, objectIndex, propertyId, resultData, resultLength);
|
applicationLayer().functionPropertyStateResponse(AckRequested, priority, hopType, asap, secCtrl, objectIndex, propertyId, resultData, resultLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -328,22 +336,30 @@ void BauSystemB::functionPropertyStateIndication(Priority priority, HopCountType
|
|||||||
uint8_t resultData[kFunctionPropertyResultBufferMaxSize];
|
uint8_t resultData[kFunctionPropertyResultBufferMaxSize];
|
||||||
uint8_t resultLength = sizeof(resultData); // tell the callee the maximum size of the buffer
|
uint8_t resultLength = sizeof(resultData); // tell the callee the maximum size of the buffer
|
||||||
|
|
||||||
|
bool handled = true;
|
||||||
|
|
||||||
InterfaceObject* obj = getInterfaceObject(objectIndex);
|
InterfaceObject* obj = getInterfaceObject(objectIndex);
|
||||||
if(obj)
|
if(obj)
|
||||||
{
|
{
|
||||||
if (obj->property((PropertyID)propertyId)->Type() == PDT_FUNCTION)
|
if (obj->property((PropertyID)propertyId)->Type() == PDT_FUNCTION)
|
||||||
{
|
{
|
||||||
obj->state((PropertyID)propertyId, data, length, resultData, resultLength);
|
obj->state((PropertyID)propertyId, data, length, resultData, resultLength);
|
||||||
|
handled = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(_functionPropertyState != 0)
|
if(_functionPropertyState != 0)
|
||||||
_functionPropertyState(objectIndex, propertyId, length, data, resultData, resultLength);
|
if(_functionPropertyState(objectIndex, propertyId, length, data, resultData, resultLength))
|
||||||
else
|
handled = true;
|
||||||
resultLength = 0;
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if(_functionProperty != 0)
|
||||||
|
if(_functionProperty(objectIndex, propertyId, length, data, resultData, resultLength))
|
||||||
|
handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//only return a value it was handled by a property or function
|
||||||
|
if(handled)
|
||||||
applicationLayer().functionPropertyStateResponse(AckRequested, priority, hopType, asap, secCtrl, objectIndex, propertyId, resultData, resultLength);
|
applicationLayer().functionPropertyStateResponse(AckRequested, priority, hopType, asap, secCtrl, objectIndex, propertyId, resultData, resultLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user