From cb4f675e394cc3b8e6f876b91acf42a392ad0d64 Mon Sep 17 00:00:00 2001 From: Steve Karg Date: Tue, 2 Jul 2024 12:47:15 -0500 Subject: [PATCH] Reduced MS/TP MAX_APDU to use 480 by default in examples (#683) * Reduced MS/TP MAX_APDU to 480 from 1476 so that devices not use new MS/TP extended frame types which older routers do not understand. * Added extra objects to STM32F4xx example to elicit edge cases in object-list for testing. --- ports/stm32f10x/CMakeLists.txt | 3 +- ports/stm32f10x/Makefile | 3 +- ports/stm32f10x/bacnet.ewp | 2 +- ports/stm32f4xx/CMakeLists.txt | 14 ++++- ports/stm32f4xx/Makefile | 15 +++++- ports/stm32f4xx/bacnet.c | 67 +++++++++++++++++++++++- ports/stm32f4xx/bacnet.ewp | 35 ++++++++++++- ports/stm32f4xx/device.c | 49 +++++++++++++++++ ports/stm32f4xx/stm32f4xx.ld | 56 ++++++++++++++------ src/bacnet/basic/object/ai.c | 4 +- src/bacnet/basic/object/ao.c | 4 +- src/bacnet/basic/object/av.c | 4 +- src/bacnet/basic/object/bo.c | 4 +- src/bacnet/basic/object/ms-input.c | 4 +- src/bacnet/basic/object/mso.c | 4 +- src/bacnet/basic/object/msv.c | 4 +- src/bacnet/config.h | 17 +++--- test/bacnet/datalink/mstp/CMakeLists.txt | 1 + 18 files changed, 242 insertions(+), 48 deletions(-) diff --git a/ports/stm32f10x/CMakeLists.txt b/ports/stm32f10x/CMakeLists.txt index 262c63e4..145b6d25 100644 --- a/ports/stm32f10x/CMakeLists.txt +++ b/ports/stm32f10x/CMakeLists.txt @@ -221,7 +221,8 @@ target_compile_definitions(${EXECUTABLE} PRIVATE -DHSE_VALUE=25000000 # BACnet Stack library -DBACDL_MSTP - -DMAX_APDU=1476 + # note: MS/TP extended frames can be up to MAX_APDU=1476 bytes + -DMAX_APDU=480 -DBIG_ENDIAN=0 -DMAX_TSM_TRANSACTIONS=0 -DBACAPP_MINIMAL diff --git a/ports/stm32f10x/Makefile b/ports/stm32f10x/Makefile index 3269dfee..837b4794 100644 --- a/ports/stm32f10x/Makefile +++ b/ports/stm32f10x/Makefile @@ -153,7 +153,8 @@ OPTIMIZE_FLAGS += -DNDEBUG BACNET_FLAGS = -DBACDL_MSTP=1 BACNET_FLAGS += -DBACAPP_MINIMAL -BACNET_FLAGS += -DMAX_APDU=1476 +# note: MS/TP extended frames can be up to MAX_APDU=1476 bytes +BACNET_FLAGS += -DMAX_APDU=480 BACNET_FLAGS += -DBIG_ENDIAN=0 BACNET_FLAGS += -DMAX_TSM_TRANSACTIONS=0 BACNET_FLAGS += -DMAX_CHARACTER_STRING_BYTES=64 diff --git a/ports/stm32f10x/bacnet.ewp b/ports/stm32f10x/bacnet.ewp index 84b9c01b..57851c71 100644 --- a/ports/stm32f10x/bacnet.ewp +++ b/ports/stm32f10x/bacnet.ewp @@ -227,7 +227,7 @@ STM32F10X_XL USE_STDPERIPH_DRIVER BACDL_MSTP - MAX_APDU=1476 + MAX_APDU=480 MAX_TSM_TRANSACTIONS=0 BACAPP_MINIMAL diff --git a/ports/stm32f4xx/CMakeLists.txt b/ports/stm32f4xx/CMakeLists.txt index ce7a089d..1f7387de 100644 --- a/ports/stm32f4xx/CMakeLists.txt +++ b/ports/stm32f4xx/CMakeLists.txt @@ -151,6 +151,16 @@ set(BACNET_PROJECT_SOURCE ${CMAKE_SOURCE_DIR}/device.c ${CMAKE_SOURCE_DIR}/netport.c + ${LIBRARY_BACNET_BASIC}/object/ai.c + ${LIBRARY_BACNET_BASIC}/object/ao.c + ${LIBRARY_BACNET_BASIC}/object/av.c + ${LIBRARY_BACNET_BASIC}/object/bi.c + ${LIBRARY_BACNET_BASIC}/object/bo.c + ${LIBRARY_BACNET_BASIC}/object/bv.c + ${LIBRARY_BACNET_BASIC}/object/ms-input.c + ${LIBRARY_BACNET_BASIC}/object/mso.c + ${LIBRARY_BACNET_BASIC}/object/msv.c + ${LIBRARY_BACNET_BASIC}/service/h_dcc.c ${LIBRARY_BACNET_BASIC}/service/h_apdu.c ${LIBRARY_BACNET_BASIC}/npdu/h_npdu.c @@ -167,6 +177,7 @@ set(BACNET_PROJECT_SOURCE ${LIBRARY_BACNET_BASIC}/sys/debug.c ${LIBRARY_BACNET_BASIC}/sys/ringbuf.c ${LIBRARY_BACNET_BASIC}/sys/fifo.c + ${LIBRARY_BACNET_BASIC}/sys/keylist.c ${LIBRARY_BACNET_BASIC}/sys/mstimer.c ${LIBRARY_BACNET_CORE}/abort.c @@ -273,8 +284,9 @@ target_link_options(${EXECUTABLE} PRIVATE # Create hex and bin files add_custom_command(TARGET ${EXECUTABLE} POST_BUILD - COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE} ${PROJECT_NAME}.hex COMMAND ${CMAKE_OBJCOPY} -O binary ${EXECUTABLE} ${PROJECT_NAME}.bin + COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE} ${PROJECT_NAME}.hex + COMMAND ${CMAKE_OBJCOPY} -O ihex ${EXECUTABLE} ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}.hex ) # Print executable size diff --git a/ports/stm32f4xx/Makefile b/ports/stm32f4xx/Makefile index ce4b024c..04630f32 100644 --- a/ports/stm32f4xx/Makefile +++ b/ports/stm32f4xx/Makefile @@ -34,6 +34,15 @@ PLATFORM_SRC = \ BASIC_SRC = \ $(BACNET_BASIC)/npdu/h_npdu.c \ + $(BACNET_BASIC)/object/ai.c \ + $(BACNET_BASIC)/object/ao.c \ + $(BACNET_BASIC)/object/av.c \ + $(BACNET_BASIC)/object/bi.c \ + $(BACNET_BASIC)/object/bo.c \ + $(BACNET_BASIC)/object/bv.c \ + $(BACNET_BASIC)/object/ms-input.c \ + $(BACNET_BASIC)/object/mso.c \ + $(BACNET_BASIC)/object/msv.c \ $(BACNET_BASIC)/service/h_apdu.c \ $(BACNET_BASIC)/service/h_dcc.c \ $(BACNET_BASIC)/service/h_rd.c \ @@ -48,6 +57,7 @@ BASIC_SRC = \ $(BACNET_BASIC)/sys/debug.c \ $(BACNET_BASIC)/sys/ringbuf.c \ $(BACNET_BASIC)/sys/fifo.c \ + $(BACNET_BASIC)/sys/keylist.c \ $(BACNET_BASIC)/sys/mstimer.c \ $(BACNET_BASIC)/tsm/tsm.c @@ -149,8 +159,9 @@ MCU_FLAGS += -DUSE_STDPERIPH_DRIVER OPTIMIZE_FLAGS := -Os -ggdb OPTIMIZE_FLAGS += -DNDEBUG -BACNET_FLAGS = -DBACDL_MSTP=1 -BACNET_FLAGS += -DMAX_APDU=1476 +BACNET_FLAGS = -DBACDL_MSTP= +# note: MS/TP extended frames can be up to MAX_APDU=1476 bytes +BACNET_FLAGS += -DMAX_APDU=480 BACNET_FLAGS += -DBIG_ENDIAN=0 BACNET_FLAGS += -DMAX_TSM_TRANSACTIONS=0 BACNET_FLAGS += -DMAX_CHARACTER_STRING_BYTES=64 diff --git a/ports/stm32f4xx/bacnet.c b/ports/stm32f4xx/bacnet.c index bedb0211..a2e68ae5 100644 --- a/ports/stm32f4xx/bacnet.c +++ b/ports/stm32f4xx/bacnet.c @@ -37,7 +37,15 @@ #include "bacnet/iam.h" /* BACnet objects */ #include "bacnet/basic/object/device.h" +#include "bacnet/basic/object/ai.h" +#include "bacnet/basic/object/ao.h" +#include "bacnet/basic/object/av.h" +#include "bacnet/basic/object/bi.h" #include "bacnet/basic/object/bo.h" +#include "bacnet/basic/object/bv.h" +#include "bacnet/basic/object/ms-input.h" +#include "bacnet/basic/object/mso.h" +#include "bacnet/basic/object/msv.h" /* me */ #include "bacnet.h" @@ -47,14 +55,69 @@ static struct mstimer DCC_Timer; /* Device ID to track changes */ static uint32_t Device_ID = 0xFFFFFFFF; +#ifndef BACNET_ANALOG_INPUTS_MAX +#define BACNET_ANALOG_INPUTS_MAX 12 +#endif +#ifndef BACNET_ANALOG_OUTPUTS_MAX +#define BACNET_ANALOG_OUTPUTS_MAX 12 +#endif +#ifndef BACNET_ANALOG_VALUES_MAX +#define BACNET_ANALOG_VALUES_MAX 12 +#endif +#ifndef BACNET_BINARY_INPUTS_MAX +#define BACNET_BINARY_INPUTS_MAX 12 +#endif +#ifndef BACNET_BINARY_OUTPUTS_MAX +#define BACNET_BINARY_OUTPUTS_MAX 12 +#endif +#ifndef BACNET_BINARY_VALUES_MAX +#define BACNET_BINARY_VALUES_MAX 12 +#endif +#ifndef BACNET_MULTISTATE_INPUTS_MAX +#define BACNET_MULTISTATE_INPUTS_MAX 12 +#endif +#ifndef BACNET_MULTISTATE_OUTPUTS_MAX +#define BACNET_MULTISTATE_OUTPUTS_MAX 12 +#endif +#ifndef BACNET_MULTISTATE_VALUES_MAX +#define BACNET_MULTISTATE_VALUES_MAX 12 +#endif + /** * @brief Initialize the BACnet device object, the service handlers, and timers */ void bacnet_init(void) -{ +{ + uint32_t instance; /* initialize objects */ Device_Init(NULL); - + for (instance = 1; instance <= BACNET_ANALOG_INPUTS_MAX; instance++) { + Analog_Input_Create(instance); + } + for (instance = 1; instance <= BACNET_ANALOG_OUTPUTS_MAX; instance++) { + Analog_Output_Create(instance); + } + for (instance = 1; instance <= BACNET_ANALOG_VALUES_MAX; instance++) { + Analog_Value_Create(instance); + } + for (instance = 1; instance <= BACNET_BINARY_INPUTS_MAX; instance++) { + Binary_Input_Create(instance); + } + for (instance = 1; instance <= BACNET_BINARY_OUTPUTS_MAX; instance++) { + Binary_Output_Create(instance); + } + for (instance = 1; instance <= BACNET_BINARY_VALUES_MAX; instance++) { + Binary_Value_Create(instance); + } + for (instance = 1; instance <= BACNET_MULTISTATE_INPUTS_MAX; instance++) { + Multistate_Input_Create(instance); + } + for (instance = 1; instance <= BACNET_MULTISTATE_OUTPUTS_MAX; instance++) { + Multistate_Output_Create(instance); + } + for (instance = 1; instance <= BACNET_MULTISTATE_VALUES_MAX; instance++) { + Multistate_Value_Create(instance); + } /* set up our confirmed service unrecognized service handler - required! */ apdu_set_unrecognized_service_handler_handler(handler_unrecognized_service); /* we need to handle who-is to support dynamic device binding */ diff --git a/ports/stm32f4xx/bacnet.ewp b/ports/stm32f4xx/bacnet.ewp index 7f8ee341..265aaf16 100644 --- a/ports/stm32f4xx/bacnet.ewp +++ b/ports/stm32f4xx/bacnet.ewp @@ -224,7 +224,7 @@ USE_STDPERIPH_DRIVER STM32F4XX BACDL_MSTP - MAX_APDU=1476 + MAX_APDU=480 BIG_ENDIAN=0 MAX_TSM_TRANSACTIONS=1 BACAPP_MINIMAL @@ -1164,6 +1164,36 @@ $PROJ_DIR$\..\..\src\bacnet\basic\npdu\h_npdu.c + + BACnet Basic Objects + + $PROJ_DIR$\..\..\src\bacnet\basic\object\ai.c + + + $PROJ_DIR$\..\..\src\bacnet\basic\object\ao.c + + + $PROJ_DIR$\..\..\src\bacnet\basic\object\av.c + + + $PROJ_DIR$\..\..\src\bacnet\basic\object\bi.c + + + $PROJ_DIR$\..\..\src\bacnet\basic\object\bo.c + + + $PROJ_DIR$\..\..\src\bacnet\basic\object\bv.c + + + $PROJ_DIR$\..\..\src\bacnet\basic\object\ms-input.c + + + $PROJ_DIR$\..\..\src\bacnet\basic\object\mso.c + + + $PROJ_DIR$\..\..\src\bacnet\basic\object\msv.c + + BACnet Basic Services @@ -1211,6 +1241,9 @@ $PROJ_DIR$\..\..\src\bacnet\basic\sys\fifo.c + + $PROJ_DIR$\..\..\src\bacnet\basic\sys\keylist.c + $PROJ_DIR$\..\..\src\bacnet\basic\sys\mstimer.c diff --git a/ports/stm32f4xx/device.c b/ports/stm32f4xx/device.c index 89ea2dad..8cf82502 100644 --- a/ports/stm32f4xx/device.c +++ b/ports/stm32f4xx/device.c @@ -40,11 +40,22 @@ #include "bacnet/version.h" #include "bacnet/basic/services.h" /* objects */ +#include "bacnet/basic/object/ai.h" +#include "bacnet/basic/object/ao.h" +#include "bacnet/basic/object/av.h" +#include "bacnet/basic/object/bi.h" +#include "bacnet/basic/object/bo.h" +#include "bacnet/basic/object/bv.h" +#include "bacnet/basic/object/ms-input.h" +#include "bacnet/basic/object/mso.h" +#include "bacnet/basic/object/msv.h" #if (BACNET_PROTOCOL_REVISION >= 17) #include "bacnet/basic/object/netport.h" #endif #include "bacnet/basic/object/device.h" + +/* clang-format off */ static struct my_object_functions { BACNET_OBJECT_TYPE Object_Type; object_init_function Object_Init; @@ -60,6 +71,43 @@ static struct my_object_functions { Device_Valid_Object_Instance_Number, Device_Object_Name, Device_Read_Property_Local, Device_Write_Property_Local, Device_Property_Lists }, + { OBJECT_ANALOG_INPUT, Analog_Input_Init, Analog_Input_Count, + Analog_Input_Index_To_Instance, Analog_Input_Valid_Instance, + Analog_Input_Object_Name, Analog_Input_Read_Property, + Analog_Input_Write_Property, Analog_Input_Property_Lists}, + { OBJECT_ANALOG_OUTPUT, Analog_Output_Init, Analog_Output_Count, + Analog_Output_Index_To_Instance, Analog_Output_Valid_Instance, + Analog_Output_Object_Name, Analog_Output_Read_Property, + Analog_Output_Write_Property, Analog_Output_Property_Lists}, + { OBJECT_ANALOG_VALUE, Analog_Value_Init, Analog_Value_Count, + Analog_Value_Index_To_Instance, Analog_Value_Valid_Instance, + Analog_Value_Object_Name, Analog_Value_Read_Property, + Analog_Value_Write_Property, Analog_Value_Property_Lists}, + { OBJECT_BINARY_INPUT, Binary_Input_Init, Binary_Input_Count, + Binary_Input_Index_To_Instance, Binary_Input_Valid_Instance, + Binary_Input_Object_Name, Binary_Input_Read_Property, + Binary_Input_Write_Property, Binary_Input_Property_Lists}, + { OBJECT_BINARY_OUTPUT, Binary_Output_Init, Binary_Output_Count, + Binary_Output_Index_To_Instance, Binary_Output_Valid_Instance, + Binary_Output_Object_Name, Binary_Output_Read_Property, + Binary_Output_Write_Property, Binary_Output_Property_Lists}, + { OBJECT_BINARY_VALUE, Binary_Value_Init, Binary_Value_Count, + Binary_Value_Index_To_Instance, Binary_Value_Valid_Instance, + Binary_Value_Object_Name, Binary_Value_Read_Property, + Binary_Value_Write_Property, Binary_Value_Property_Lists}, + { OBJECT_MULTI_STATE_INPUT, Multistate_Input_Init, Multistate_Input_Count, + Multistate_Input_Index_To_Instance, Multistate_Input_Valid_Instance, + Multistate_Input_Object_Name, Multistate_Input_Read_Property, + Multistate_Input_Write_Property, Multistate_Input_Property_Lists}, + { OBJECT_MULTI_STATE_OUTPUT, Multistate_Output_Init, + Multistate_Output_Count, Multistate_Output_Index_To_Instance, + Multistate_Output_Valid_Instance, Multistate_Output_Object_Name, + Multistate_Output_Read_Property, Multistate_Output_Write_Property, + Multistate_Output_Property_Lists}, + { OBJECT_MULTI_STATE_VALUE, Multistate_Value_Init, Multistate_Value_Count, + Multistate_Value_Index_To_Instance, Multistate_Value_Valid_Instance, + Multistate_Value_Object_Name, Multistate_Value_Read_Property, + Multistate_Value_Write_Property, Multistate_Value_Property_Lists}, #if (BACNET_PROTOCOL_REVISION >= 17) { OBJECT_NETWORK_PORT, Network_Port_Init, Network_Port_Count, Network_Port_Index_To_Instance, Network_Port_Valid_Instance, @@ -68,6 +116,7 @@ static struct my_object_functions { #endif { MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL } }; +/* clang-format on */ /* note: you really only need to define variables for properties that are writable or that may change. diff --git a/ports/stm32f4xx/stm32f4xx.ld b/ports/stm32f4xx/stm32f4xx.ld index 60851b47..6582d8e2 100644 --- a/ports/stm32f4xx/stm32f4xx.ld +++ b/ports/stm32f4xx/stm32f4xx.ld @@ -4,6 +4,16 @@ MEMORY flash (RX) : ORIGIN = 0x08000000, LENGTH = 512k } +_estack = 0x20000000 + 128k - 4; /* End of SRAM */ + +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 48K; +/* Analysis from MAP file and Stack Usage (su) + + adjust _Min_Heap_Size until linker error: sram overflowed by x bytes + _Min_Heap_Size = _Min_Heap_Size - x +*/ +_Min_Stack_Size = 16K; + SECTIONS { .text : @@ -22,11 +32,10 @@ SECTIONS *(.gnu.linkonce.r.*) . = ALIGN(4); _etext = .; - _sidata = _etext; + _sidata = _etext; PROVIDE(etext = .); - _fini = . ; - *(.fini) - + _fini = . ; + *(.fini) } >flash .data : AT (_etext) @@ -40,20 +49,20 @@ SECTIONS _edata = .; } >sram - .ARM.extab : - { - *(.ARM.extab*) - } >sram + .ARM.extab : + { + *(.ARM.extab*) + } >sram - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx*) - } >sram - __exidx_end = .; + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx*) + } >sram + __exidx_end = .; .bss (NOLOAD) : { - . = ALIGN(4); + . = ALIGN(4); /* This is used by the startup in order to initialize the .bss secion */ _sbss = .; *(.bss .bss.*) @@ -63,6 +72,19 @@ SECTIONS _ebss = .; } >sram - end = .; - PROVIDE( _estack = 0x20010000 ); + PROVIDE ( end = _ebss ); + PROVIDE ( _end = _ebss ); + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(4); + . = . + _Min_Heap_Size; + _user_heap_end = .; + . = . + _Min_Stack_Size; + . = ALIGN(4); + } >sram + + PROVIDE(_heap_limit = _user_heap_end); + PROVIDE(_stack_limit = _estack); } diff --git a/src/bacnet/basic/object/ai.c b/src/bacnet/basic/object/ai.c index 3096b587..34b4e34b 100644 --- a/src/bacnet/basic/object/ai.c +++ b/src/bacnet/basic/object/ai.c @@ -249,8 +249,8 @@ bool Analog_Input_Object_Name( characterstring_init_ansi(object_name, pObject->Object_Name); } else { snprintf( - text_string, sizeof(text_string), "ANALOG INPUT %u", - object_instance); + text_string, sizeof(text_string), "ANALOG INPUT %lu", + (unsigned long)object_instance); status = characterstring_init_ansi(object_name, text_string); } } diff --git a/src/bacnet/basic/object/ao.c b/src/bacnet/basic/object/ao.c index 11f24899..a9a105f3 100644 --- a/src/bacnet/basic/object/ao.c +++ b/src/bacnet/basic/object/ao.c @@ -514,8 +514,8 @@ bool Analog_Output_Object_Name( status = characterstring_init_ansi(object_name, pObject->Object_Name); } else { - snprintf(name_text, sizeof(name_text), "ANALOG OUTPUT %u", - object_instance); + snprintf(name_text, sizeof(name_text), "ANALOG OUTPUT %lu", + (unsigned long)object_instance); status = characterstring_init_ansi(object_name, name_text); } } diff --git a/src/bacnet/basic/object/av.c b/src/bacnet/basic/object/av.c index a8a0860f..21898413 100644 --- a/src/bacnet/basic/object/av.c +++ b/src/bacnet/basic/object/av.c @@ -257,8 +257,8 @@ bool Analog_Value_Object_Name( characterstring_init_ansi(object_name, pObject->Object_Name); } else { snprintf( - text_string, sizeof(text_string), "ANALOG VALUE %u", - object_instance); + text_string, sizeof(text_string), "ANALOG VALUE %lu", + (unsigned long)object_instance); status = characterstring_init_ansi(object_name, text_string); } } diff --git a/src/bacnet/basic/object/bo.c b/src/bacnet/basic/object/bo.c index e70b24cc..0ba191d0 100644 --- a/src/bacnet/basic/object/bo.c +++ b/src/bacnet/basic/object/bo.c @@ -513,8 +513,8 @@ bool Binary_Output_Object_Name( status = characterstring_init_ansi(object_name, pObject->Object_Name); } else { - snprintf(name_text, sizeof(name_text), "BINARY OUTPUT %u", - object_instance); + snprintf(name_text, sizeof(name_text), "BINARY OUTPUT %lu", + (unsigned long)object_instance); status = characterstring_init_ansi(object_name, name_text); } } diff --git a/src/bacnet/basic/object/ms-input.c b/src/bacnet/basic/object/ms-input.c index 4b3874fb..91565006 100644 --- a/src/bacnet/basic/object/ms-input.c +++ b/src/bacnet/basic/object/ms-input.c @@ -464,8 +464,8 @@ bool Multistate_Input_Object_Name( status = characterstring_init_ansi(object_name, pObject->Object_Name); } else { - snprintf(name_text, sizeof(name_text), "MULTI-STATE INPUT %u", - object_instance); + snprintf(name_text, sizeof(name_text), "MULTI-STATE INPUT %lu", + (unsigned long)object_instance); status = characterstring_init_ansi(object_name, name_text); } } diff --git a/src/bacnet/basic/object/mso.c b/src/bacnet/basic/object/mso.c index 97980818..ba30bb9e 100644 --- a/src/bacnet/basic/object/mso.c +++ b/src/bacnet/basic/object/mso.c @@ -607,8 +607,8 @@ bool Multistate_Output_Object_Name( status = characterstring_init_ansi(object_name, pObject->Object_Name); } else { - snprintf(name_text, sizeof(name_text), "MULTI-STATE OUTPUT %u", - object_instance); + snprintf(name_text, sizeof(name_text), "MULTI-STATE OUTPUT %lu", + (unsigned long)object_instance); status = characterstring_init_ansi(object_name, name_text); } } diff --git a/src/bacnet/basic/object/msv.c b/src/bacnet/basic/object/msv.c index 7573abd9..46133f0f 100644 --- a/src/bacnet/basic/object/msv.c +++ b/src/bacnet/basic/object/msv.c @@ -464,8 +464,8 @@ bool Multistate_Value_Object_Name( status = characterstring_init_ansi(object_name, pObject->Object_Name); } else { - snprintf(name_text, sizeof(name_text), "MULTI-STATE INPUT %u", - object_instance); + snprintf(name_text, sizeof(name_text), "MULTI-STATE INPUT %lu", + (unsigned long)object_instance); status = characterstring_init_ansi(object_name, name_text); } } diff --git a/src/bacnet/config.h b/src/bacnet/config.h index f8d51fac..dbbbf78a 100644 --- a/src/bacnet/config.h +++ b/src/bacnet/config.h @@ -4,17 +4,17 @@ * @author Steve Karg * @date 2004 * @section LICENSE - * + * * Copyright (C) 2004 Steve Karg - * + * * SPDX-License-Identifier: MIT */ #ifndef BACNET_CONFIG_H_ #define BACNET_CONFIG_H_ /** - * @note configurations are default to values used in the example apps build. - * Use a local copy named "bacnet-config.h" with settings configured for + * @note configurations are default to values used in the example apps build. + * Use a local copy named "bacnet-config.h" with settings configured for * the product specific needs for code space reductions in your device. * Alternately, use a compiler and linker to override these defines. */ @@ -98,6 +98,7 @@ #if defined(BACNET_SECURITY) #define MAX_APDU 412 #else +/* note: MS/TP extended frames can be up to 1476 bytes */ #define MAX_APDU 1476 #endif #else @@ -185,7 +186,7 @@ #define BACAPP_OBJECT_ID #endif -#if defined (BACAPP_TYPES_EXTRA) +#if defined (BACAPP_TYPES_EXTRA) #define BACAPP_DOUBLE #define BACAPP_TIMESTAMP #define BACAPP_DATETIME @@ -236,14 +237,14 @@ #endif /** - * @note Control the selection of services etc to enable code size reduction - * for those compiler suites which do not handle removing of unused functions + * @note Control the selection of services etc to enable code size reduction + * for those compiler suites which do not handle removing of unused functions * in modules so well. * * We will start with the A type services code first as these are least likely * to be required in embedded systems using the stack. */ -#ifndef BACNET_SVC_SERVER +#ifndef BACNET_SVC_SERVER /* default to client-server device for the example apps to build. */ #define BACNET_SVC_SERVER 0 #endif diff --git a/test/bacnet/datalink/mstp/CMakeLists.txt b/test/bacnet/datalink/mstp/CMakeLists.txt index 1cbf7745..b22cf207 100644 --- a/test/bacnet/datalink/mstp/CMakeLists.txt +++ b/test/bacnet/datalink/mstp/CMakeLists.txt @@ -25,6 +25,7 @@ add_compile_definitions( CONFIG_ZTEST=1 BACDL_MSTP=1 MSTP_ZERO_CONFIG_STATION_INCREMENT_MODULO + MAX_APDU=1476 ) include_directories(