added clang format C and H files.
This commit is contained in:
+109
-170
@@ -27,24 +27,20 @@ static bool isAtomicReadFileHandlerRegistered = false;
|
||||
#define MAX_ERROR_STRING 128
|
||||
#define NO_ERROR "No Error"
|
||||
static char Last_Error[MAX_ERROR_STRING] = NO_ERROR;
|
||||
static void LogError(
|
||||
const char *msg)
|
||||
static void LogError(const char *msg)
|
||||
{
|
||||
strcpy(Last_Error, msg);
|
||||
Error_Detected = true;
|
||||
}
|
||||
|
||||
void BacnetGetError(
|
||||
SV * errorMsg)
|
||||
void BacnetGetError(SV *errorMsg)
|
||||
{
|
||||
sv_setpv(errorMsg, Last_Error);
|
||||
strcpy(Last_Error, NO_ERROR);
|
||||
Error_Detected = false;
|
||||
}
|
||||
|
||||
static void __LogAnswer(
|
||||
const char *msg,
|
||||
unsigned append)
|
||||
static void __LogAnswer(const char *msg, unsigned append)
|
||||
{
|
||||
dSP;
|
||||
ENTER;
|
||||
@@ -61,48 +57,41 @@ static void __LogAnswer(
|
||||
/**************************************/
|
||||
/* error handlers */
|
||||
/*************************************/
|
||||
static void MyAbortHandler(
|
||||
BACNET_ADDRESS * src,
|
||||
uint8_t invoke_id,
|
||||
uint8_t abort_reason,
|
||||
bool server)
|
||||
static void MyAbortHandler(BACNET_ADDRESS *src, uint8_t invoke_id,
|
||||
uint8_t abort_reason, bool server)
|
||||
{
|
||||
(void) server;
|
||||
(void)server;
|
||||
if (address_match(&Target_Address, src) &&
|
||||
(invoke_id == Request_Invoke_ID)) {
|
||||
char msg[MAX_ERROR_STRING];
|
||||
sprintf(msg, "BACnet Abort: %s",
|
||||
bactext_abort_reason_name((int) abort_reason));
|
||||
bactext_abort_reason_name((int)abort_reason));
|
||||
LogError(msg);
|
||||
}
|
||||
}
|
||||
|
||||
static void MyRejectHandler(
|
||||
BACNET_ADDRESS * src,
|
||||
uint8_t invoke_id,
|
||||
uint8_t reject_reason)
|
||||
static void MyRejectHandler(BACNET_ADDRESS *src, uint8_t invoke_id,
|
||||
uint8_t reject_reason)
|
||||
{
|
||||
if (address_match(&Target_Address, src) &&
|
||||
(invoke_id == Request_Invoke_ID)) {
|
||||
char msg[MAX_ERROR_STRING];
|
||||
sprintf(msg, "BACnet Reject: %s",
|
||||
bactext_reject_reason_name((int) reject_reason));
|
||||
bactext_reject_reason_name((int)reject_reason));
|
||||
LogError(msg);
|
||||
}
|
||||
}
|
||||
|
||||
static void My_Error_Handler(
|
||||
BACNET_ADDRESS * src,
|
||||
uint8_t invoke_id,
|
||||
BACNET_ERROR_CLASS error_class,
|
||||
BACNET_ERROR_CODE error_code)
|
||||
static void My_Error_Handler(BACNET_ADDRESS *src, uint8_t invoke_id,
|
||||
BACNET_ERROR_CLASS error_class,
|
||||
BACNET_ERROR_CODE error_code)
|
||||
{
|
||||
if (address_match(&Target_Address, src) &&
|
||||
(invoke_id == Request_Invoke_ID)) {
|
||||
char msg[MAX_ERROR_STRING];
|
||||
sprintf(msg, "BACnet Error: %s: %s",
|
||||
bactext_error_class_name((int) error_class),
|
||||
bactext_error_code_name((int) error_code));
|
||||
bactext_error_class_name((int)error_class),
|
||||
bactext_error_code_name((int)error_code));
|
||||
LogError(msg);
|
||||
}
|
||||
}
|
||||
@@ -115,13 +104,12 @@ static void My_Error_Handler(
|
||||
/* Decode the ReadProperty Ack and pass to perl */
|
||||
/****************************************/
|
||||
#define MAX_ACK_STRING 512
|
||||
void rp_ack_extract_data(
|
||||
BACNET_READ_PROPERTY_DATA * data)
|
||||
void rp_ack_extract_data(BACNET_READ_PROPERTY_DATA *data)
|
||||
{
|
||||
char ackString[MAX_ACK_STRING] = "";
|
||||
char *pAckString = &ackString[0];
|
||||
BACNET_OBJECT_PROPERTY_VALUE object_value; /* for bacapp printing */
|
||||
BACNET_APPLICATION_DATA_VALUE value; /* for decode value data */
|
||||
BACNET_OBJECT_PROPERTY_VALUE object_value; /* for bacapp printing */
|
||||
BACNET_APPLICATION_DATA_VALUE value; /* for decode value data */
|
||||
int len = 0;
|
||||
uint8_t *application_data;
|
||||
int application_data_len;
|
||||
@@ -134,9 +122,8 @@ void rp_ack_extract_data(
|
||||
/* FIXME: what if application_data_len is bigger than 255? */
|
||||
/* value? need to loop until all of the len is gone... */
|
||||
for (;;) {
|
||||
len =
|
||||
bacapp_decode_application_data(application_data,
|
||||
(uint8_t) application_data_len, &value);
|
||||
len = bacapp_decode_application_data(
|
||||
application_data, (uint8_t)application_data_len, &value);
|
||||
if (first_value && (len < application_data_len)) {
|
||||
first_value = false;
|
||||
strncat(pAckString, "{", 1);
|
||||
@@ -149,7 +136,8 @@ void rp_ack_extract_data(
|
||||
object_value.array_index = data->array_index;
|
||||
object_value.value = &value;
|
||||
bacapp_snprintf_value(pAckString,
|
||||
MAX_ACK_STRING - (pAckString - ackString), &object_value);
|
||||
MAX_ACK_STRING - (pAckString - ackString),
|
||||
&object_value);
|
||||
if (len > 0) {
|
||||
if (len < application_data_len) {
|
||||
application_data += len;
|
||||
@@ -176,10 +164,9 @@ void rp_ack_extract_data(
|
||||
/*****************************************/
|
||||
/* Decode the ReadPropertyMultiple Ack and pass to perl */
|
||||
/****************************************/
|
||||
void rpm_ack_extract_data(
|
||||
BACNET_READ_ACCESS_DATA * rpm_data)
|
||||
void rpm_ack_extract_data(BACNET_READ_ACCESS_DATA *rpm_data)
|
||||
{
|
||||
BACNET_OBJECT_PROPERTY_VALUE object_value; /* for bacapp printing */
|
||||
BACNET_OBJECT_PROPERTY_VALUE object_value; /* for bacapp printing */
|
||||
BACNET_PROPERTY_REFERENCE *listOfProperties;
|
||||
BACNET_APPLICATION_DATA_VALUE *value;
|
||||
bool array_value = false;
|
||||
@@ -206,8 +193,8 @@ void rpm_ack_extract_data(
|
||||
object_value.array_index =
|
||||
listOfProperties->propertyArrayIndex;
|
||||
object_value.value = value;
|
||||
bacapp_snprintf_value(pAckString,
|
||||
MAX_ACK_STRING - (pAckString - ackString),
|
||||
bacapp_snprintf_value(
|
||||
pAckString, MAX_ACK_STRING - (pAckString - ackString),
|
||||
&object_value);
|
||||
if (value->next) {
|
||||
strncat(pAckString, ",", 1);
|
||||
@@ -223,10 +210,10 @@ void rpm_ack_extract_data(
|
||||
} else {
|
||||
/* AccessError */
|
||||
sprintf(ackString, "BACnet Error: %s: %s",
|
||||
bactext_error_class_name((int) listOfProperties->
|
||||
error.error_class),
|
||||
bactext_error_code_name((int) listOfProperties->
|
||||
error.error_code));
|
||||
bactext_error_class_name(
|
||||
(int)listOfProperties->error.error_class),
|
||||
bactext_error_code_name(
|
||||
(int)listOfProperties->error.error_code));
|
||||
LogError(ackString);
|
||||
}
|
||||
listOfProperties = listOfProperties->next;
|
||||
@@ -243,10 +230,8 @@ void rpm_ack_extract_data(
|
||||
}
|
||||
|
||||
static void AtomicReadFileAckHandler(
|
||||
uint8_t * service_request,
|
||||
uint16_t service_len,
|
||||
BACNET_ADDRESS * src,
|
||||
BACNET_CONFIRMED_SERVICE_ACK_DATA * service_data)
|
||||
uint8_t *service_request, uint16_t service_len, BACNET_ADDRESS *src,
|
||||
BACNET_CONFIRMED_SERVICE_ACK_DATA *service_data)
|
||||
{
|
||||
int len = 0;
|
||||
BACNET_ATOMIC_READ_FILE_DATA data;
|
||||
@@ -254,8 +239,7 @@ static void AtomicReadFileAckHandler(
|
||||
if (address_match(&Target_Address, src) &&
|
||||
(service_data->invoke_id == Request_Invoke_ID)) {
|
||||
len =
|
||||
arf_ack_decode_service_request(service_request, service_len,
|
||||
&data);
|
||||
arf_ack_decode_service_request(service_request, service_len, &data);
|
||||
if (len > 0) {
|
||||
/* validate the parameters before storing data */
|
||||
if ((data.access == FILE_STREAM_ACCESS) &&
|
||||
@@ -265,7 +249,7 @@ static void AtomicReadFileAckHandler(
|
||||
int i;
|
||||
|
||||
sprintf(msg, "EOF=%d,start=%d,", data.endOfFile,
|
||||
data.type.stream.fileStartPosition);
|
||||
data.type.stream.fileStartPosition);
|
||||
__LogAnswer(msg, 0);
|
||||
|
||||
pFileData = octetstring_value(&data.fileData);
|
||||
@@ -281,7 +265,6 @@ static void AtomicReadFileAckHandler(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** Handler for a ReadProperty ACK.
|
||||
* @ingroup DSRP
|
||||
* Doesn't actually do anything, except, for debugging, to
|
||||
@@ -294,10 +277,8 @@ static void AtomicReadFileAckHandler(
|
||||
* decoded from the APDU header of this message.
|
||||
*/
|
||||
static void My_Read_Property_Ack_Handler(
|
||||
uint8_t * service_request,
|
||||
uint16_t service_len,
|
||||
BACNET_ADDRESS * src,
|
||||
BACNET_CONFIRMED_SERVICE_ACK_DATA * service_data)
|
||||
uint8_t *service_request, uint16_t service_len, BACNET_ADDRESS *src,
|
||||
BACNET_CONFIRMED_SERVICE_ACK_DATA *service_data)
|
||||
{
|
||||
int len = 0;
|
||||
BACNET_READ_PROPERTY_DATA data;
|
||||
@@ -324,10 +305,8 @@ static void My_Read_Property_Ack_Handler(
|
||||
* decoded from the APDU header of this message.
|
||||
*/
|
||||
static void My_Read_Property_Multiple_Ack_Handler(
|
||||
uint8_t * service_request,
|
||||
uint16_t service_len,
|
||||
BACNET_ADDRESS * src,
|
||||
BACNET_CONFIRMED_SERVICE_ACK_DATA * service_data)
|
||||
uint8_t *service_request, uint16_t service_len, BACNET_ADDRESS *src,
|
||||
BACNET_CONFIRMED_SERVICE_ACK_DATA *service_data)
|
||||
{
|
||||
int len = 0;
|
||||
BACNET_READ_ACCESS_DATA *rpm_data;
|
||||
@@ -341,9 +320,8 @@ static void My_Read_Property_Multiple_Ack_Handler(
|
||||
(service_data->invoke_id == Request_Invoke_ID)) {
|
||||
rpm_data = calloc(1, sizeof(BACNET_READ_ACCESS_DATA));
|
||||
if (rpm_data) {
|
||||
len =
|
||||
rpm_ack_decode_service_request(service_request, service_len,
|
||||
rpm_data);
|
||||
len = rpm_ack_decode_service_request(service_request, service_len,
|
||||
rpm_data);
|
||||
}
|
||||
if (len > 0) {
|
||||
while (rpm_data) {
|
||||
@@ -387,9 +365,7 @@ static void My_Read_Property_Multiple_Ack_Handler(
|
||||
}
|
||||
}
|
||||
|
||||
void My_Write_Property_SimpleAck_Handler(
|
||||
BACNET_ADDRESS * src,
|
||||
uint8_t invoke_id)
|
||||
void My_Write_Property_SimpleAck_Handler(BACNET_ADDRESS *src, uint8_t invoke_id)
|
||||
{
|
||||
if (address_match(&Target_Address, src) &&
|
||||
(invoke_id == Request_Invoke_ID)) {
|
||||
@@ -397,9 +373,7 @@ void My_Write_Property_SimpleAck_Handler(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void Init_Service_Handlers(
|
||||
)
|
||||
static void Init_Service_Handlers()
|
||||
{
|
||||
Device_Init(NULL);
|
||||
|
||||
@@ -411,12 +385,11 @@ static void Init_Service_Handlers(
|
||||
|
||||
/* set the handler for all the services we don't implement
|
||||
It is required to send the proper reject message... */
|
||||
apdu_set_unrecognized_service_handler_handler
|
||||
(handler_unrecognized_service);
|
||||
apdu_set_unrecognized_service_handler_handler(handler_unrecognized_service);
|
||||
|
||||
/* we must implement read property - it's required! */
|
||||
apdu_set_confirmed_handler(SERVICE_CONFIRMED_READ_PROPERTY,
|
||||
handler_read_property);
|
||||
handler_read_property);
|
||||
|
||||
/* handle generic errors coming back */
|
||||
apdu_set_abort_handler(MyAbortHandler);
|
||||
@@ -428,17 +401,15 @@ typedef enum {
|
||||
waitBind,
|
||||
} waitAction;
|
||||
|
||||
static void Wait_For_Answer_Or_Timeout(
|
||||
unsigned timeout_ms,
|
||||
waitAction action)
|
||||
static void Wait_For_Answer_Or_Timeout(unsigned timeout_ms, waitAction action)
|
||||
{
|
||||
/* Wait for timeout, failure, or success */
|
||||
time_t last_seconds = time(NULL);
|
||||
time_t timeout_seconds = (apdu_timeout() / 1000) * apdu_retries();
|
||||
time_t elapsed_seconds = 0;
|
||||
uint16_t pdu_len = 0;
|
||||
BACNET_ADDRESS src = { 0 }; /* address where message came from */
|
||||
uint8_t Rx_Buf[MAX_MPDU] = { 0 };
|
||||
BACNET_ADDRESS src = {0}; /* address where message came from */
|
||||
uint8_t Rx_Buf[MAX_MPDU] = {0};
|
||||
|
||||
while (true) {
|
||||
time_t current_seconds = time(NULL);
|
||||
@@ -476,7 +447,7 @@ static void Wait_For_Answer_Or_Timeout(
|
||||
}
|
||||
} else if (action == waitBind) {
|
||||
if (address_bind_request(Target_Device_Object_Instance,
|
||||
&Target_Max_APDU, &Target_Address)) {
|
||||
&Target_Max_APDU, &Target_Address)) {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
@@ -497,8 +468,7 @@ static void Wait_For_Answer_Or_Timeout(
|
||||
/****************************************************/
|
||||
/* This is the most fundamental setup needed to start communication */
|
||||
/****************************************************/
|
||||
void BacnetPrepareComm(
|
||||
)
|
||||
void BacnetPrepareComm()
|
||||
{
|
||||
/* setup my info */
|
||||
Device_Set_Object_Instance_Number(BACNET_MAX_INSTANCE);
|
||||
@@ -511,8 +481,7 @@ void BacnetPrepareComm(
|
||||
/* Try to bind to a device. If successful, return zero. If failure, return */
|
||||
/* non-zero and log the error details */
|
||||
/****************************************************/
|
||||
int BacnetBindToDevice(
|
||||
int deviceInstanceNumber)
|
||||
int BacnetBindToDevice(int deviceInstanceNumber)
|
||||
{
|
||||
int isFailure = 0;
|
||||
|
||||
@@ -522,9 +491,9 @@ int BacnetBindToDevice(
|
||||
|
||||
/* try to bind with the device */
|
||||
if (!address_bind_request(deviceInstanceNumber, &Target_Max_APDU,
|
||||
&Target_Address)) {
|
||||
&Target_Address)) {
|
||||
Send_WhoIs(Target_Device_Object_Instance,
|
||||
Target_Device_Object_Instance);
|
||||
Target_Device_Object_Instance);
|
||||
|
||||
/* Wait for timeout, failure, or success */
|
||||
Wait_For_Answer_Or_Timeout(100, waitBind);
|
||||
@@ -538,29 +507,26 @@ int BacnetBindToDevice(
|
||||
/****************************************************/
|
||||
/* This is the interface to ReadProperty */
|
||||
/****************************************************/
|
||||
int BacnetReadProperty(
|
||||
int deviceInstanceNumber,
|
||||
int objectType,
|
||||
int objectInstanceNumber,
|
||||
int objectProperty,
|
||||
int objectIndex)
|
||||
int BacnetReadProperty(int deviceInstanceNumber, int objectType,
|
||||
int objectInstanceNumber, int objectProperty,
|
||||
int objectIndex)
|
||||
{
|
||||
if (!isReadPropertyHandlerRegistered) {
|
||||
/* handle the data coming back from confirmed requests */
|
||||
apdu_set_confirmed_ack_handler(SERVICE_CONFIRMED_READ_PROPERTY,
|
||||
My_Read_Property_Ack_Handler);
|
||||
My_Read_Property_Ack_Handler);
|
||||
|
||||
/* handle any errors coming back */
|
||||
apdu_set_error_handler(SERVICE_CONFIRMED_READ_PROPERTY,
|
||||
My_Error_Handler);
|
||||
My_Error_Handler);
|
||||
|
||||
/* indicate that handlers are now registered */
|
||||
isReadPropertyHandlerRegistered = true;
|
||||
}
|
||||
/* Send the message out */
|
||||
Request_Invoke_ID =
|
||||
Send_Read_Property_Request(deviceInstanceNumber, objectType,
|
||||
objectInstanceNumber, objectProperty, objectIndex);
|
||||
Request_Invoke_ID = Send_Read_Property_Request(
|
||||
deviceInstanceNumber, objectType, objectInstanceNumber, objectProperty,
|
||||
objectIndex);
|
||||
Wait_For_Answer_Or_Timeout(100, waitAnswer);
|
||||
|
||||
int isFailure = Error_Detected;
|
||||
@@ -571,9 +537,7 @@ int BacnetReadProperty(
|
||||
/************************************************/
|
||||
/* This is the interface to ReadPropertyMultiple */
|
||||
/************************************************/
|
||||
int BacnetReadPropertyMultiple(
|
||||
int deviceInstanceNumber,
|
||||
...)
|
||||
int BacnetReadPropertyMultiple(int deviceInstanceNumber, ...)
|
||||
{
|
||||
/* Get the variable argument list from the stack */
|
||||
Inline_Stack_Vars;
|
||||
@@ -582,7 +546,7 @@ int BacnetReadPropertyMultiple(
|
||||
calloc(1, sizeof(BACNET_READ_ACCESS_DATA));
|
||||
BACNET_READ_ACCESS_DATA *Read_Access_Data = rpm_object;
|
||||
BACNET_PROPERTY_REFERENCE *rpm_property;
|
||||
uint8_t buffer[MAX_PDU] = { 0 };
|
||||
uint8_t buffer[MAX_PDU] = {0};
|
||||
|
||||
while (rpmIndex < Inline_Stack_Items) {
|
||||
SV *pSV = Inline_Stack_Item(rpmIndex++);
|
||||
@@ -600,7 +564,7 @@ int BacnetReadPropertyMultiple(
|
||||
break;
|
||||
}
|
||||
|
||||
AV *pAV = (AV *) SvRV(pSV);
|
||||
AV *pAV = (AV *)SvRV(pSV);
|
||||
SV **ppSV;
|
||||
|
||||
/* The 0th argument is the object type */
|
||||
@@ -658,20 +622,19 @@ int BacnetReadPropertyMultiple(
|
||||
if (!isReadPropertyMultipleHandlerRegistered) {
|
||||
/* handle the data coming back from confirmed requests */
|
||||
apdu_set_confirmed_ack_handler(SERVICE_CONFIRMED_READ_PROP_MULTIPLE,
|
||||
My_Read_Property_Multiple_Ack_Handler);
|
||||
My_Read_Property_Multiple_Ack_Handler);
|
||||
|
||||
/* handle any errors coming back */
|
||||
apdu_set_error_handler(SERVICE_CONFIRMED_READ_PROP_MULTIPLE,
|
||||
My_Error_Handler);
|
||||
My_Error_Handler);
|
||||
|
||||
/* indicate that handlers are now registered */
|
||||
isReadPropertyMultipleHandlerRegistered = true;
|
||||
}
|
||||
/* Send the message out */
|
||||
if (!Error_Detected) {
|
||||
Request_Invoke_ID =
|
||||
Send_Read_Property_Multiple_Request(&buffer[0], sizeof(buffer),
|
||||
deviceInstanceNumber, Read_Access_Data);
|
||||
Request_Invoke_ID = Send_Read_Property_Multiple_Request(
|
||||
&buffer[0], sizeof(buffer), deviceInstanceNumber, Read_Access_Data);
|
||||
Wait_For_Answer_Or_Timeout(100, waitAnswer);
|
||||
}
|
||||
/* Clean up allocated memory */
|
||||
@@ -701,27 +664,23 @@ int BacnetReadPropertyMultiple(
|
||||
/****************************************************/
|
||||
/* This is the interface to WriteProperty */
|
||||
/****************************************************/
|
||||
int BacnetWriteProperty(
|
||||
int deviceInstanceNumber,
|
||||
int objectType,
|
||||
int objectInstanceNumber,
|
||||
int objectProperty,
|
||||
int objectPriority,
|
||||
int objectIndex,
|
||||
const char *tag,
|
||||
const char *value)
|
||||
int BacnetWriteProperty(int deviceInstanceNumber, int objectType,
|
||||
int objectInstanceNumber, int objectProperty,
|
||||
int objectPriority, int objectIndex, const char *tag,
|
||||
const char *value)
|
||||
{
|
||||
char msg[MAX_ERROR_STRING];
|
||||
int isFailure = 1;
|
||||
|
||||
if (!isWritePropertyHandlerRegistered) {
|
||||
/* handle the ack coming back */
|
||||
apdu_set_confirmed_simple_ack_handler(SERVICE_CONFIRMED_WRITE_PROPERTY,
|
||||
apdu_set_confirmed_simple_ack_handler(
|
||||
SERVICE_CONFIRMED_WRITE_PROPERTY,
|
||||
My_Write_Property_SimpleAck_Handler);
|
||||
|
||||
/* handle any errors coming back */
|
||||
apdu_set_error_handler(SERVICE_CONFIRMED_WRITE_PROPERTY,
|
||||
My_Error_Handler);
|
||||
My_Error_Handler);
|
||||
|
||||
/* indicate that handlers are now registered */
|
||||
isWritePropertyHandlerRegistered = true;
|
||||
@@ -748,12 +707,12 @@ int BacnetWriteProperty(
|
||||
|
||||
if (property_tag >= MAX_BACNET_APPLICATION_TAG) {
|
||||
sprintf(msg, "Error: tag=%u - it must be less than %u",
|
||||
property_tag, MAX_BACNET_APPLICATION_TAG);
|
||||
property_tag, MAX_BACNET_APPLICATION_TAG);
|
||||
LogError(msg);
|
||||
break;
|
||||
}
|
||||
if (!bacapp_parse_application_data(property_tag, value,
|
||||
&propertyValue)) {
|
||||
&propertyValue)) {
|
||||
sprintf(msg, "Error: unable to parse the tag value");
|
||||
LogError(msg);
|
||||
break;
|
||||
@@ -761,13 +720,13 @@ int BacnetWriteProperty(
|
||||
propertyValue.next = NULL;
|
||||
|
||||
/* Send out the message */
|
||||
Request_Invoke_ID =
|
||||
Send_Write_Property_Request(deviceInstanceNumber, objectType,
|
||||
objectInstanceNumber, objectProperty, &propertyValue,
|
||||
objectPriority, objectIndex);
|
||||
Request_Invoke_ID = Send_Write_Property_Request(
|
||||
deviceInstanceNumber, objectType, objectInstanceNumber,
|
||||
objectProperty, &propertyValue, objectPriority, objectIndex);
|
||||
Wait_For_Answer_Or_Timeout(100, waitAnswer);
|
||||
|
||||
/* If we get here, then there were no explicit failures. However, there */
|
||||
/* If we get here, then there were no explicit failures. However, there
|
||||
*/
|
||||
/* could have been implicit failures. Let's look at those also. */
|
||||
isFailure = Error_Detected;
|
||||
} while (false);
|
||||
@@ -777,13 +736,9 @@ int BacnetWriteProperty(
|
||||
return isFailure;
|
||||
}
|
||||
|
||||
|
||||
int BacnetAtomicWriteFile(
|
||||
int deviceInstanceNumber,
|
||||
int fileInstanceNumber,
|
||||
int blockStartAddr,
|
||||
int blockNumBytes,
|
||||
char *nibbleBuffer)
|
||||
int BacnetAtomicWriteFile(int deviceInstanceNumber, int fileInstanceNumber,
|
||||
int blockStartAddr, int blockNumBytes,
|
||||
char *nibbleBuffer)
|
||||
{
|
||||
BACNET_OCTET_STRING fileData;
|
||||
int i, nibble;
|
||||
@@ -793,7 +748,7 @@ int BacnetAtomicWriteFile(
|
||||
if (!isAtomicWriteFileHandlerRegistered) {
|
||||
/* handle any errors coming back */
|
||||
apdu_set_error_handler(SERVICE_CONFIRMED_ATOMIC_WRITE_FILE,
|
||||
My_Error_Handler);
|
||||
My_Error_Handler);
|
||||
|
||||
/* indicate that handlers are now registered */
|
||||
isAtomicWriteFileHandlerRegistered = true;
|
||||
@@ -817,9 +772,9 @@ int BacnetAtomicWriteFile(
|
||||
|
||||
/* Send out the message and wait for answer */
|
||||
if (!Error_Detected) {
|
||||
Request_Invoke_ID =
|
||||
Send_Atomic_Write_File_Stream(deviceInstanceNumber,
|
||||
fileInstanceNumber, blockStartAddr, &fileData);
|
||||
Request_Invoke_ID = Send_Atomic_Write_File_Stream(
|
||||
deviceInstanceNumber, fileInstanceNumber, blockStartAddr,
|
||||
&fileData);
|
||||
Wait_For_Answer_Or_Timeout(100, waitAnswer);
|
||||
}
|
||||
|
||||
@@ -828,8 +783,7 @@ int BacnetAtomicWriteFile(
|
||||
return isFailure;
|
||||
}
|
||||
|
||||
int BacnetGetMaxApdu(
|
||||
)
|
||||
int BacnetGetMaxApdu()
|
||||
{
|
||||
unsigned requestedOctetCount = 0;
|
||||
uint16_t my_max_apdu = 0;
|
||||
@@ -857,16 +811,8 @@ int BacnetGetMaxApdu(
|
||||
return requestedOctetCount;
|
||||
}
|
||||
|
||||
int BacnetTimeSync(
|
||||
int deviceInstanceNumber,
|
||||
int year,
|
||||
int month,
|
||||
int day,
|
||||
int hour,
|
||||
int minute,
|
||||
int second,
|
||||
int isUTC,
|
||||
int UTCOffset)
|
||||
int BacnetTimeSync(int deviceInstanceNumber, int year, int month, int day,
|
||||
int hour, int minute, int second, int isUTC, int UTCOffset)
|
||||
{
|
||||
BACNET_DATE bdate;
|
||||
BACNET_TIME btime;
|
||||
@@ -880,9 +826,9 @@ int BacnetTimeSync(
|
||||
my_time.tm_mday = day;
|
||||
my_time.tm_mon = month - 1;
|
||||
my_time.tm_year = year - 1900;
|
||||
my_time.tm_wday = 0; /* does not matter */
|
||||
my_time.tm_yday = 0; /* does not matter */
|
||||
my_time.tm_isdst = 0; /* does not matter */
|
||||
my_time.tm_wday = 0; /* does not matter */
|
||||
my_time.tm_yday = 0; /* does not matter */
|
||||
my_time.tm_isdst = 0; /* does not matter */
|
||||
|
||||
aTime = mktime(&my_time);
|
||||
newTime = localtime(&aTime);
|
||||
@@ -901,7 +847,7 @@ int BacnetTimeSync(
|
||||
int bytes_sent = 0;
|
||||
BACNET_NPDU_DATA npdu_data;
|
||||
BACNET_ADDRESS my_address;
|
||||
uint8_t Handler_Transmit_Buffer[MAX_PDU] = { 0 };
|
||||
uint8_t Handler_Transmit_Buffer[MAX_PDU] = {0};
|
||||
|
||||
/* Loop for eary exit */
|
||||
do {
|
||||
@@ -913,25 +859,22 @@ int BacnetTimeSync(
|
||||
/* encode the NPDU portion of the packet */
|
||||
npdu_encode_npdu_data(&npdu_data, false, MESSAGE_PRIORITY_NORMAL);
|
||||
datalink_get_my_address(&my_address);
|
||||
pdu_len =
|
||||
npdu_encode_pdu(&Handler_Transmit_Buffer[0], &Target_Address,
|
||||
&my_address, &npdu_data);
|
||||
pdu_len = npdu_encode_pdu(&Handler_Transmit_Buffer[0], &Target_Address,
|
||||
&my_address, &npdu_data);
|
||||
|
||||
/* encode the APDU portion of the packet */
|
||||
len =
|
||||
timesync_encode_apdu(&Handler_Transmit_Buffer[pdu_len], &bdate,
|
||||
&btime);
|
||||
len = timesync_encode_apdu(&Handler_Transmit_Buffer[pdu_len], &bdate,
|
||||
&btime);
|
||||
pdu_len += len;
|
||||
|
||||
/* send it out the datalink */
|
||||
bytes_sent =
|
||||
datalink_send_pdu(&Target_Address, &npdu_data,
|
||||
&Handler_Transmit_Buffer[0], pdu_len);
|
||||
bytes_sent = datalink_send_pdu(&Target_Address, &npdu_data,
|
||||
&Handler_Transmit_Buffer[0], pdu_len);
|
||||
if (bytes_sent <= 0) {
|
||||
char errorMsg[64];
|
||||
sprintf(errorMsg,
|
||||
"Failed to Send Time-Synchronization Request (%s)!",
|
||||
strerror(errno));
|
||||
"Failed to Send Time-Synchronization Request (%s)!",
|
||||
strerror(errno));
|
||||
LogError(errorMsg);
|
||||
break;
|
||||
}
|
||||
@@ -947,28 +890,24 @@ int BacnetTimeSync(
|
||||
/****************************************************/
|
||||
/* This is the interface to AtomicReadFile */
|
||||
/****************************************************/
|
||||
int BacnetAtomicReadFile(
|
||||
int deviceInstanceNumber,
|
||||
int fileInstanceNumber,
|
||||
int startOffset,
|
||||
int numBytes)
|
||||
int BacnetAtomicReadFile(int deviceInstanceNumber, int fileInstanceNumber,
|
||||
int startOffset, int numBytes)
|
||||
{
|
||||
if (!isAtomicReadFileHandlerRegistered) {
|
||||
/* handle the data coming back from confirmed requests */
|
||||
apdu_set_confirmed_ack_handler(SERVICE_CONFIRMED_ATOMIC_READ_FILE,
|
||||
AtomicReadFileAckHandler);
|
||||
AtomicReadFileAckHandler);
|
||||
|
||||
/* handle any errors coming back */
|
||||
apdu_set_error_handler(SERVICE_CONFIRMED_ATOMIC_READ_FILE,
|
||||
My_Error_Handler);
|
||||
My_Error_Handler);
|
||||
|
||||
/* indicate that handlers are now registered */
|
||||
isAtomicReadFileHandlerRegistered = true;
|
||||
}
|
||||
/* Send the message out */
|
||||
Request_Invoke_ID =
|
||||
Send_Atomic_Read_File_Stream(deviceInstanceNumber, fileInstanceNumber,
|
||||
startOffset, numBytes);
|
||||
Request_Invoke_ID = Send_Atomic_Read_File_Stream(
|
||||
deviceInstanceNumber, fileInstanceNumber, startOffset, numBytes);
|
||||
Wait_For_Answer_Or_Timeout(100, waitAnswer);
|
||||
|
||||
int isFailure = Error_Detected;
|
||||
|
||||
Reference in New Issue
Block a user