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(