diff --git a/bacnet-stack/demo/epics/main.c b/bacnet-stack/demo/epics/main.c index 88ce0d46..7008b8ea 100644 --- a/bacnet-stack/demo/epics/main.c +++ b/bacnet-stack/demo/epics/main.c @@ -808,6 +808,7 @@ static void BuildPropRequest( } propEntry->propertyIdentifier = Property_Value_List[i].property_id; propEntry->propertyArrayIndex = BACNET_ARRAY_ALL; + propEntry->next = NULL; oldEntry = propEntry; propEntry = NULL; } @@ -1377,6 +1378,7 @@ void StartNextObject( rpm_object->object_instance = pNewObject->instance; rpm_property = calloc(1, sizeof(BACNET_PROPERTY_REFERENCE)); rpm_object->listOfProperties = rpm_property; + rpm_object->next = NULL; assert(rpm_property); rpm_property->propertyIdentifier = PROP_ALL; rpm_property->propertyArrayIndex = BACNET_ARRAY_ALL; diff --git a/bacnet-stack/demo/handler/dlenv.c b/bacnet-stack/demo/handler/dlenv.c index b4c62788..69a991bb 100644 --- a/bacnet-stack/demo/handler/dlenv.c +++ b/bacnet-stack/demo/handler/dlenv.c @@ -298,9 +298,11 @@ void dlenv_init( if (!datalink_init(getenv("BACNET_IFACE"))) { exit(1); } +#if (MAX_TSM_TRANSACTIONS) pEnv = getenv("BACNET_INVOKE_ID"); if (pEnv) { tsm_invokeID_set((uint8_t) strtol(pEnv, NULL, 0)); } +#endif dlenv_register_as_foreign_device(); } diff --git a/bacnet-stack/demo/handler/h_cov.c b/bacnet-stack/demo/handler/h_cov.c index c4fb111c..9297f777 100644 --- a/bacnet-stack/demo/handler/h_cov.c +++ b/bacnet-stack/demo/handler/h_cov.c @@ -892,13 +892,13 @@ void handler_cov_subscribe( bytes_sent = datalink_send_pdu(src, &npdu_data, &Handler_Transmit_Buffer[0], pdu_len); + if (bytes_sent <= 0) { #if PRINT_ENABLED - if (bytes_sent <= 0) fprintf(stderr, "SubscribeCOV: Failed to send PDU (%s)!\n", strerror(errno)); -#else - bytes_sent = bytes_sent; #endif + } + return; } diff --git a/bacnet-stack/demo/handler/h_getevent_a.c b/bacnet-stack/demo/handler/h_getevent_a.c index 1ec43f22..8547ab8a 100644 --- a/bacnet-stack/demo/handler/h_getevent_a.c +++ b/bacnet-stack/demo/handler/h_getevent_a.c @@ -1,87 +1,87 @@ -/** - * @file - * @author Daniel Blazevic - * @date 2014 - * @brief GetEvent ACK service handling - * - * @section LICENSE - * - * Copyright (C) 2014 Daniel Blazevic - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * @section DESCRIPTION - * - * The GetEventInformation service ACK service handler is used by a client - * BACnet-user to obtain a summary of all "active event states". The term - * "active event states" refers to all event-initiating objects that have an - * Event_State property whose value is not equal to NORMAL, or have an - * Acked_Transitions property, which has at least one of the bits - * (TO-OFFNORMAL, TO-FAULT, TONORMAL) set to FALSE. - */ -#include -#include "config.h" -#include "txbuf.h" -#include "bacdef.h" -#include "bacdcode.h" -#include "bacerror.h" -#include "apdu.h" -#include "npdu.h" -#include "abort.h" -#include "handlers.h" -#include "getevent.h" - -/* 40 = min size of get event data in APDU */ -#define MAX_NUMBER_OF_EVENTS ((MAX_APDU / 40) + 1) - -/** Example function to handle a GetEvent ACK. - * - * @param service_request [in] The contents of the service request. - * @param service_len [in] The length of the service_request. - * @param src [in] BACNET_ADDRESS of the source of the message - * @param service_data [in] The BACNET_CONFIRMED_SERVICE_ACK_DATA information - * decoded from the APDU header of this message. - */ -void get_event_ack_handler( - uint8_t *service_request, - uint16_t service_len, - BACNET_ADDRESS *src, - BACNET_CONFIRMED_SERVICE_ACK_DATA *service_data) -{ - uint8_t i = 0; - uint16_t apdu_len = 0; - bool more_events = false; - /* initialize array big enough to accommodate - multiple get event data in APDU */ - BACNET_GET_EVENT_INFORMATION_DATA get_event_data[MAX_NUMBER_OF_EVENTS]; - - for (i = 1; i < MAX_NUMBER_OF_EVENTS; i++) { - /* Create linked list */ - get_event_data[i - 1].next = &get_event_data[i]; - } - - apdu_len = - getevent_ack_decode_service_request(&service_request[0], - service_len, &get_event_data[0], &more_events); - - if (apdu_len > 0) { - /* FIXME: Add code to process get_event_data */ - } -} +/** + * @file + * @author Daniel Blazevic + * @date 2014 + * @brief GetEvent ACK service handling + * + * @section LICENSE + * + * Copyright (C) 2014 Daniel Blazevic + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * @section DESCRIPTION + * + * The GetEventInformation service ACK service handler is used by a client + * BACnet-user to obtain a summary of all "active event states". The term + * "active event states" refers to all event-initiating objects that have an + * Event_State property whose value is not equal to NORMAL, or have an + * Acked_Transitions property, which has at least one of the bits + * (TO-OFFNORMAL, TO-FAULT, TONORMAL) set to FALSE. + */ +#include +#include "config.h" +#include "txbuf.h" +#include "bacdef.h" +#include "bacdcode.h" +#include "bacerror.h" +#include "apdu.h" +#include "npdu.h" +#include "abort.h" +#include "handlers.h" +#include "getevent.h" + +/* 40 = min size of get event data in APDU */ +#define MAX_NUMBER_OF_EVENTS ((MAX_APDU / 40) + 1) + +/** Example function to handle a GetEvent ACK. + * + * @param service_request [in] The contents of the service request. + * @param service_len [in] The length of the service_request. + * @param src [in] BACNET_ADDRESS of the source of the message + * @param service_data [in] The BACNET_CONFIRMED_SERVICE_ACK_DATA information + * decoded from the APDU header of this message. + */ +void get_event_ack_handler( + uint8_t *service_request, + uint16_t service_len, + BACNET_ADDRESS *src, + BACNET_CONFIRMED_SERVICE_ACK_DATA *service_data) +{ + uint8_t i = 0; + uint16_t apdu_len = 0; + bool more_events = false; + /* initialize array big enough to accommodate + multiple get event data in APDU */ + BACNET_GET_EVENT_INFORMATION_DATA get_event_data[MAX_NUMBER_OF_EVENTS]; + + for (i = 1; i < MAX_NUMBER_OF_EVENTS; i++) { + /* Create linked list */ + get_event_data[i - 1].next = &get_event_data[i]; + } + + apdu_len = + getevent_ack_decode_service_request(&service_request[0], + service_len, &get_event_data[0], &more_events); + + if (apdu_len > 0) { + /* FIXME: Add code to process get_event_data */ + } +} diff --git a/bacnet-stack/demo/object/ai.c b/bacnet-stack/demo/object/ai.c index bb3b5cdd..ccca7c5f 100644 --- a/bacnet-stack/demo/object/ai.c +++ b/bacnet-stack/demo/object/ai.c @@ -49,8 +49,8 @@ ANALOG_INPUT_DESCR AI_Descr[MAX_ANALOG_INPUTS]; -/* These arrays are used by the ReadPropertyMultiple handler */ -static const int Analog_Input_Properties_Required[] = { +/* These three arrays are used by the ReadPropertyMultiple handler */ +static const int Properties_Required[] = { PROP_OBJECT_IDENTIFIER, PROP_OBJECT_NAME, PROP_OBJECT_TYPE, @@ -62,7 +62,7 @@ static const int Analog_Input_Properties_Required[] = { -1 }; -static const int Analog_Input_Properties_Optional[] = { +static const int Properties_Optional[] = { PROP_DESCRIPTION, PROP_RELIABILITY, PROP_COV_INCREMENT, @@ -81,7 +81,7 @@ static const int Analog_Input_Properties_Optional[] = { -1 }; -static const int Analog_Input_Properties_Proprietary[] = { +static const int Properties_Proprietary[] = { 9997, 9998, 9999, @@ -94,11 +94,11 @@ void Analog_Input_Property_Lists( const int **pProprietary) { if (pRequired) - *pRequired = Analog_Input_Properties_Required; + *pRequired = Properties_Required; if (pOptional) - *pOptional = Analog_Input_Properties_Optional; + *pOptional = Properties_Optional; if (pProprietary) - *pProprietary = Analog_Input_Properties_Proprietary; + *pProprietary = Properties_Proprietary; return; } diff --git a/bacnet-stack/demo/object/av.c b/bacnet-stack/demo/object/av.c index 84cb89d5..6c653038 100644 --- a/bacnet-stack/demo/object/av.c +++ b/bacnet-stack/demo/object/av.c @@ -100,10 +100,9 @@ void Analog_Value_Property_Lists( void Analog_Value_Init( void) { -#if defined(INTRINSIC_REPORTING) - unsigned i, j; -#else unsigned i; +#if defined(INTRINSIC_REPORTING) + unsigned j; #endif for (i = 0; i < MAX_ANALOG_VALUES; i++) { @@ -247,7 +246,7 @@ int Analog_Value_Read_Property( ANALOG_VALUE_DESCR *CurrentAV; #if defined(INTRINSIC_REPORTING) int len = 0; - unsigned int i = 0; + unsigned i = 0; #endif if ((rpdata == NULL) || (rpdata->application_data == NULL) || diff --git a/bacnet-stack/demo/object/lsp.c b/bacnet-stack/demo/object/lsp.c index 7ceac821..2b54660d 100644 --- a/bacnet-stack/demo/object/lsp.c +++ b/bacnet-stack/demo/object/lsp.c @@ -54,8 +54,8 @@ static BACNET_LIFE_SAFETY_OPERATION /* Writable out-of-service allows others to play with our Present Value */ /* without changing the physical output */ static bool Life_Safety_Point_Out_Of_Service[MAX_LIFE_SAFETY_POINTS]; -/* These arrays are used by the ReadPropertyMultiple handler and - property-list property (as of protocol-revision 14) */ + +/* These three arrays are used by the ReadPropertyMultiple handler */ static const int Life_Safety_Point_Properties_Required[] = { PROP_OBJECT_IDENTIFIER, PROP_OBJECT_NAME, diff --git a/bacnet-stack/demo/object/mso.c b/bacnet-stack/demo/object/mso.c index 7065b293..78f3dbbc 100644 --- a/bacnet-stack/demo/object/mso.c +++ b/bacnet-stack/demo/object/mso.c @@ -43,8 +43,8 @@ #endif /* When all the priorities are level null, the present value returns */ -/* the Relinquish Default value */ -#define MULTISTATE_RELINQUISH_DEFAULT 1 /* multistates cannot be 0 ! */ +/* the Relinquish Default value, 0 is not allowed */ +#define MULTISTATE_RELINQUISH_DEFAULT 1 /* NULL part of the array */ #define MULTISTATE_NULL (255) diff --git a/bacnet-stack/demo/object/trendlog.c b/bacnet-stack/demo/object/trendlog.c index ee98e36c..ea994a8a 100644 --- a/bacnet-stack/demo/object/trendlog.c +++ b/bacnet-stack/demo/object/trendlog.c @@ -1594,13 +1594,13 @@ static int local_read_property( * Attempt to fetch the logged property and store it in the Trend Log * ****************************************************************************/ -static void TL_fetch_property( +void TL_fetch_property( int iLog) { uint8_t ValueBuf[MAX_APDU]; /* This is a big buffer in case someone selects the device object list for example */ uint8_t StatusBuf[3]; /* Should be tag, bits unused in last octet and 1 byte of data */ - BACNET_ERROR_CLASS error_class = 0; - BACNET_ERROR_CODE error_code = ERROR_CODE_SUCCESS; + BACNET_ERROR_CLASS error_class = ERROR_CLASS_SERVICES; + BACNET_ERROR_CODE error_code = ERROR_CODE_OTHER; int iLen; uint8_t ucCount; TL_LOG_INFO *CurrentLog;