1. Added new file s_wpm.c (Send_Write_Property_Multiple_Request_Data)

2. Changed file wpm.h (new struct added BACNET_WRITE_ACCESS_DATA, declaration for wpm_encode_apdu added)
3. Changed file wpm.c (definition added for wpm_encode_apdu)
4. client.h file updated with declaration for Send_Write_Property_Multiple_Request_Data

Thank you for the contribution, Daniel Blazevic!
This commit is contained in:
skarg
2013-10-09 21:49:15 +00:00
parent 0600454320
commit 7361bb4650
6 changed files with 192 additions and 0 deletions
+54
View File
@@ -30,6 +30,7 @@
#include "bacdef.h"
#include "wp.h"
#include "wpm.h"
#include "string.h"
/** @file wpm.c Encode/Decode BACnet Write Property Multiple APDUs */
@@ -254,6 +255,59 @@ int wpm_encode_apdu_object_property(
return apdu_len;
}
int wpm_encode_apdu(
uint8_t * apdu,
size_t max_apdu,
uint8_t invoke_id,
BACNET_WRITE_ACCESS_DATA * write_access_data)
{
int apdu_len = 0;
int len = 0;
BACNET_WRITE_ACCESS_DATA *wpm_object; /* current object */
uint8_t apdu_temp[MAX_APDU]; /* temp for data before copy */
BACNET_PROPERTY_VALUE *wpm_property; /* current property */
BACNET_WRITE_PROPERTY_DATA wpdata; /* for compatibility with wpm_encode_apdu_object_property function */
if (apdu) {
len = wpm_encode_apdu_init(&apdu[0], invoke_id);
apdu_len += len;
wpm_object = write_access_data;
while(wpm_object){
len = wpm_encode_apdu_object_begin(&apdu[apdu_len],
wpm_object->object_type, wpm_object->object_instance);
apdu_len += len;
wpm_property = wpm_object->listOfProperties;
while(wpm_property){
wpdata.object_property = wpm_property->propertyIdentifier;
wpdata.array_index = wpm_property->propertyArrayIndex;
wpdata.priority = wpm_property->priority;
wpdata.application_data_len = bacapp_encode_data(&apdu_temp[0],
&wpm_property->value);
memcpy(&wpdata.application_data[0], &apdu_temp[0],
wpdata.application_data_len);
len = wpm_encode_apdu_object_property(&apdu[apdu_len], &wpdata);
apdu_len += len;
wpm_property = wpm_property->next;
}
len = wpm_encode_apdu_object_end(&apdu[apdu_len]);
apdu_len += len;
wpm_object = wpm_object->next;
}
}
return apdu_len;
}
int wpm_ack_encode_apdu_init(
uint8_t * apdu,
uint8_t invoke_id)