diff --git a/.github/workflows/gcc.yml b/.github/workflows/gcc.yml index c56e2276..4aa00f82 100644 --- a/.github/workflows/gcc.yml +++ b/.github/workflows/gcc.yml @@ -93,6 +93,20 @@ jobs: make clean make router-mstp + bip6: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Create Build Environment + run: | + sudo apt-get update -qq + sudo apt-get install -qq libconfig-dev + - name: Build BACnet/IPv6 Demos + run: | + gcc --version + make clean + make bip6 + mstp: runs-on: ubuntu-latest steps: diff --git a/.gitignore b/.gitignore index 1d83e7a5..e97c60e1 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,6 @@ CMakeLists.txt.user /out/* Obj/ Release/ +apps/piface/libmcp23s17/ +apps/piface/libpifacedigital/ + diff --git a/Makefile b/Makefile index eb075cff..2cbb7922 100644 --- a/Makefile +++ b/Makefile @@ -23,27 +23,37 @@ mstpwin32: .PHONY: mstp mstp: - $(MAKE) BACDL=mstp -C apps all + $(MAKE) BACDL=mstp -s -C apps all .PHONY: bip6-win32 bip6-win32: - $(MAKE) BACDL=bip6 BACNET_PORT=win32 -C apps all + $(MAKE) BACDL=bip6 BACNET_PORT=win32 -s -C apps all .PHONY: bip6 bip6: - $(MAKE) BACDL=bip6 -C apps all + $(MAKE) BACDL=bip6 -s -C apps all .PHONY: ethernet ethernet: - $(MAKE) BACDL=ethernet -C apps all + $(MAKE) BACDL=ethernet -s -C apps all .PHONY: apps apps: $(MAKE) -s -C apps all +.PHONY: lib +lib: + $(MAKE) -s -C apps $@ + .PHONY: cmake cmake: - mkdir build && cd build && cmake .. -DBUILD_SHARED_LIBS=ON && cmake --build . --clean-first + CMAKE_BUILD_DIR=build + [ -d $(CMAKE_BUILD_DIR) ] || mkdir -p $(CMAKE_BUILD_DIR) + [ -d $(CMAKE_BUILD_DIR) ] && cd $(CMAKE_BUILD_DIR) && cmake .. -DBUILD_SHARED_LIBS=ON && cmake --build . --clean-first + +.PHONY: cmake-test +cmake-test: + [ -d $(CMAKE_BUILD_DIR) ] && $(MAKE) -s -C build test .PHONY: abort abort: @@ -83,7 +93,7 @@ gateway: .PHONY: gateway-win32 gateway-win32: - $(MAKE) BACNET_PORT=win32 -C apps gateway + $(MAKE) BACNET_PORT=win32 -s -C apps gateway .PHONY: readbdt readbdt: @@ -115,7 +125,7 @@ uevent: .PHONY: whois whois: - $(MAKE) -C apps $@ + $(MAKE) -s -C apps $@ .PHONY: writepropm writepropm: @@ -148,11 +158,11 @@ at91sam7s: ports/at91sam7s/Makefile .PHONY: stm32f10x stm32f10x: ports/stm32f10x/Makefile - $(MAKE) -C ports/stm32f10x clean all + $(MAKE) -s -C ports/stm32f10x clean all .PHONY: stm32f4xx stm32f4xx: ports/stm32f4xx/Makefile - $(MAKE) -C ports/stm32f4xx clean all + $(MAKE) -s -C ports/stm32f4xx clean all .PHONY: mstpsnap mstpsnap: ports/linux/mstpsnap.mak diff --git a/apps/Makefile b/apps/Makefile index 4c59f424..31c78555 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -11,6 +11,12 @@ BACNET_DEFINES ?= BACNET_LIB ?= +# BACnet Library +BACNET_LIB_DIR = $(realpath lib) +BACNET_LIB_NAME = bacnet +BACNET_LIB_TARGET = $(BACNET_LIB_DIR)/lib$(BACNET_LIB_NAME).a +BACNET_LIB=-L$(BACNET_LIB_DIR),-l$(BACNET_LIB_NAME) + # choose a datalink to build the example applications # Use BACDL=mstp or BACDL=bip and BBMD=server when invoking make @@ -113,90 +119,19 @@ BACNET_DEFINES += -DBACNET_PROTOCOL_REVISION=17 # put all the flags together INCLUDES = -I$(BACNET_SRC_DIR) -I$(BACNET_PORT_DIR) CFLAGS += $(WARNINGS) $(DEBUGGING) $(OPTIMIZATION) $(BACNET_DEFINES) $(INCLUDES) -LFLAGS += -Wl,$(SYSTEM_LIB) ifneq (${BACNET_LIB},) LFLAGS += -Wl,$(BACNET_LIB) endif +# BACnet library depends on system flags. +# System flags must go after BACnet library flags. +LFLAGS += -Wl,$(SYSTEM_LIB) # GCC dead code removal CFLAGS += -ffunction-sections -fdata-sections LFLAGS += -Wl,--gc-sections -PORT_ARCNET_SRC = \ - $(BACNET_PORT_DIR)/arcnet.c - -PORT_MSTP_SRC = \ - $(BACNET_PORT_DIR)/rs485.c \ - $(BACNET_PORT_DIR)/dlmstp.c \ - $(BACNET_SRC_DIR)/bacnet/datalink/mstp.c \ - $(BACNET_SRC_DIR)/bacnet/datalink/mstptext.c \ - $(BACNET_SRC_DIR)/bacnet/datalink/crc.c - -PORT_ETHERNET_SRC = \ - $(BACNET_PORT_DIR)/ethernet.c - -PORT_BIP_SRC = \ - $(BACNET_PORT_DIR)/bip-init.c \ - $(BACNET_SRC_DIR)/bacnet/datalink/bvlc.c \ - $(BACNET_SRC_DIR)/bacnet/basic/bbmd/h_bbmd.c - -PORT_BIP6_SRC = \ - $(BACNET_PORT_DIR)/bip6.c \ - $(BACNET_SRC_DIR)/bacnet/basic/bbmd6/h_bbmd6.c \ - $(BACNET_SRC_DIR)/bacnet/basic/bbmd6/vmac.c \ - $(BACNET_SRC_DIR)/bacnet/datalink/bvlc6.c - -PORT_ALL_SRC = \ - $(BACNET_SRC_DIR)/bacnet/datalink/datalink.c \ - $(PORT_ARCNET_SRC) \ - $(PORT_MSTP_SRC) \ - $(PORT_ETHERNET_SRC) \ - $(PORT_BIP_SRC) \ - $(PORT_BIP6_SRC) - -PORT_NONE_SRC = \ - $(BACNET_SRC_DIR)/bacnet/datalink/datalink.c - -ifeq (${BACDL_DEFINE},-DBACDL_BIP=1) -BACNET_PORT_SRC = ${PORT_BIP_SRC} -endif -ifeq (${BACDL_DEFINE},-DBACDL_BIP6=1) -BACNET_PORT_SRC = ${PORT_BIP6_SRC} -endif -ifeq (${BACDL_DEFINE},-DBACDL_MSTP=1) -BACNET_PORT_SRC = ${PORT_MSTP_SRC} -endif -ifeq (${BACDL_DEFINE},-DBACDL_ARCNET=1) -BACNET_PORT_SRC = ${PORT_ARCNET_SRC} -endif -ifeq (${BACDL_DEFINE},-DBACDL_ETHERNET=1) -BACNET_PORT_SRC = ${PORT_ETHERNET_SRC} -endif -ifeq (${BACDL_DEFINE},-DBACDL_NONE=1) -BACNET_PORT_SRC = ${PORT_NONE_SRC} -endif -ifdef BACDL_ALL -BACNET_PORT_SRC = ${PORT_ALL_SRC} -endif - -BACNET_PORT_SRC += \ - $(BACNET_SRC_DIR)/bacnet/datalink/dlenv.c \ - $(BACNET_PORT_DIR)/mstimer-init.c \ - $(BACNET_PORT_DIR)/datetime-init.c \ - -BACNET_SRC ?= \ - $(wildcard $(BACNET_SRC_DIR)/bacnet/*.c) \ - -BACNET_BASIC_SRC ?= \ - $(wildcard $(BACNET_SRC_DIR)/bacnet/basic/*.c) \ - $(wildcard $(BACNET_SRC_DIR)/bacnet/basic/binding/*.c) \ - $(wildcard $(BACNET_SRC_DIR)/bacnet/basic/sys/*.c) \ - $(BACNET_SRC_DIR)/bacnet/basic/npdu/h_npdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/npdu/s_router.c \ - $(BACNET_SRC_DIR)/bacnet/basic/tsm/tsm.c - .EXPORT_ALL_VARIABLES: -SUBDIRS = readprop writeprop readfile writefile reinit server dcc \ +SUBDIRS = lib readprop writeprop readfile writefile reinit server dcc \ whohas whois iam ucov scov timesync epics readpropm readrange \ writepropm uptransfer getevent uevent abort error event ack-alarm @@ -225,13 +160,55 @@ $(TARGETS): %: $(patsubst %, %.%, $(SUBDIRS)) $(foreach TGT, $(TARGETS), $(patsubst %, %.$(TGT), $(SUBDIRS))): $(MAKE) -b -C $(subst ., , $@) +.PHONY: lib +lib: lib/Makefile Makefile $(BACNET_LIB_TARGET) + +$(BACNET_LIB_TARGET): + $(MAKE) -b -C lib + .PHONY: gateway -gateway: +gateway: $(BACNET_LIB_TARGET) $(MAKE) -b -C gateway -.PHONY: server -server: - $(MAKE) -s -b -C $@ +.PHONY: abort +abort: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: ack-alarm +ack-alarm: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: dcc +dcc: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: epics +epics: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: error +error: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: event +event: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: getevent +getevent: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: iam +iam: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: iamrouter +iamrouter: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: initrouter +initrouter: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ .PHONY: mstpcap mstpcap: @@ -241,79 +218,79 @@ mstpcap: mstpcrc: $(MAKE) -b -C $@ -.PHONY: abort -abort: +.PHONY: ptransfer +ptransfer: $(BACNET_LIB_TARGET) $(MAKE) -b -C $@ -.PHONY: ack-alarm -ack-alarm: +.PHONY: readprop +readprop: $(BACNET_LIB_TARGET) $(MAKE) -b -C $@ -.PHONY: dcc -dcc: - $(MAKE) -b -C $@ - -.PHONY: epics -epics: - $(MAKE) -b -C $@ - -.PHONY: error -error: - $(MAKE) -b -C $@ - -.PHONY: event -event: - $(MAKE) -b -C $@ - -.PHONY: getevent -getevent: - $(MAKE) -b -C $@ - -.PHONY: iam -iam: - $(MAKE) -b -C $@ - -.PHONY: iamrouter -iamrouter: - $(MAKE) -b -C $@ - -.PHONY: initrouter -initrouter: +.PHONY: readpropm +readpropm: $(BACNET_LIB_TARGET) $(MAKE) -b -C $@ .PHONY: readbdt -readbdt: +readbdt: $(BACNET_LIB_TARGET) $(MAKE) -b -C $@ .PHONY: readfdt -readfdt: +readfdt: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: readfile +readfile: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: readrange +readrange: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: reinit +reinit: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: scov +scov: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: server +server: $(BACNET_LIB_TARGET) + $(MAKE) -s -b -C $@ + +.PHONY: timesync +timesync: $(BACNET_LIB_TARGET) $(MAKE) -b -C $@ .PHONY: uevent -uevent: - $(MAKE) -b -C $@ +uevent: $(BACNET_LIB_TARGET) + $(MAKE) -C $@ .PHONY: whois -whois: +whois: $(BACNET_LIB_TARGET) $(MAKE) -b -C $@ .PHONY: writebdt -writebdt: +writebdt: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ + +.PHONY: writefile +writefile: $(BACNET_LIB_TARGET) $(MAKE) -b -C $@ .PHONY: router -router: - $(MAKE) -s -b -C $@ +router: $(BACNET_LIB_TARGET) + $(MAKE) -b -C $@ .PHONY: router-ipv6 -router-ipv6: +router-ipv6: $(BACNET_LIB_TARGET) $(MAKE) -b -C $@ .PHONY: router-mstp -router-mstp: +router-mstp: $(BACNET_LIB_TARGET) $(MAKE) -b -C $@ .PHONY: writepropm -writepropm: +writepropm: $(BACNET_LIB_TARGET) $(MAKE) -b -C $@ diff --git a/apps/abort/Makefile b/apps/abort/Makefile index 2af36baf..817f24b4 100644 --- a/apps/abort/Makefile +++ b/apps/abort/Makefile @@ -1,38 +1,28 @@ -#Makefile to build BACnet Application for the GCC port +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacabort - # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_abort.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -43,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/ack-alarm/Makefile b/apps/ack-alarm/Makefile index 846dbe55..16d41bfa 100644 --- a/apps/ack-alarm/Makefile +++ b/apps/ack-alarm/Makefile @@ -1,44 +1,28 @@ -#Makefile to build BACnet Application with GNU Make - -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacackalarm # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object - SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rr_a.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_ack_alarm.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c - # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -49,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/dcc/Makefile b/apps/dcc/Makefile index 366728ab..a86bab36 100644 --- a/apps/dcc/Makefile +++ b/apps/dcc/Makefile @@ -1,38 +1,28 @@ -#Makefile to build BACnet Application for GCC compiler +#Makefile to build BACnet Application using GCC compiler +# Executable file name TARGET = bacdcc - # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_dcc.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_dcc.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -43,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/epics/Makefile b/apps/epics/Makefile index cdaea94b..bc4ffdaa 100644 --- a/apps/epics/Makefile +++ b/apps/epics/Makefile @@ -1,38 +1,28 @@ -#Makefile to build BACnet Application for the Linux Port +#Makefile to build BACnet Application using GCC compiler +# Executable file name TARGET = bacepics +# BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp_a.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rpm_a.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_rpm.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -43,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/error/Makefile b/apps/error/Makefile index c6476352..42fbac47 100644 --- a/apps/error/Makefile +++ b/apps/error/Makefile @@ -1,35 +1,28 @@ -#Makefile to build BACnet Application +#Makefile to build BACnet Application using GCC compiler +# Executable file name TARGET = bacerror +# BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_error.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -40,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/event/Makefile b/apps/event/Makefile index 469b9381..58e82abb 100644 --- a/apps/event/Makefile +++ b/apps/event/Makefile @@ -1,8 +1,4 @@ -#Makefile to build BACnet Application with GNU Make - -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacevent @@ -11,32 +7,22 @@ BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rr_a.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_cevent.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -47,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/gateway/Makefile b/apps/gateway/Makefile index d1f09704..f1421b34 100644 --- a/apps/gateway/Makefile +++ b/apps/gateway/Makefile @@ -1,14 +1,8 @@ -#Makefile to build BACnet Gateway Demonstration Application for the Linux Port - -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacgateway - -TARGET_BIN = ${TARGET}$(TARGET_EXT) - +# BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/gateway/gw_device.c \ @@ -54,6 +48,9 @@ BACNET_BASIC_SRC = \ $(BACNET_SRC_DIR)/bacnet/basic/tsm/tsm.c \ $(wildcard $(BACNET_SRC_DIR)/bacnet/basic/service/*.c) +# TARGET_EXT is defined in apps/Makefile as .exe or nothing +TARGET_BIN = ${TARGET}$(TARGET_EXT) + SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) OBJS += ${SRCS:.c=.o} diff --git a/apps/getevent/Makefile b/apps/getevent/Makefile index a1caf166..8dce94f7 100644 --- a/apps/getevent/Makefile +++ b/apps/getevent/Makefile @@ -2,37 +2,27 @@ # Executable file name TARGET = bacge +# BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_getevent.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rr_a.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_getevent.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -43,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/iam/Makefile b/apps/iam/Makefile index c6a4ea17..554baa58 100644 --- a/apps/iam/Makefile +++ b/apps/iam/Makefile @@ -1,35 +1,28 @@ -#Makefile to build BACnet Application for the Linux Port +#Makefile to build BACnet Application using GCC compiler +# Executable file name TARGET = baciam # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -40,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/iamrouter/Makefile b/apps/iamrouter/Makefile index 409fd373..edf8a991 100644 --- a/apps/iamrouter/Makefile +++ b/apps/iamrouter/Makefile @@ -1,35 +1,28 @@ -#Makefile to build BACnet Application for the Linux Port +#Makefile to build BACnet Application using GCC compiler +# Executable file name TARGET = baciamr # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -40,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/initrouter/Makefile b/apps/initrouter/Makefile index 7302bfec..f992e7d8 100644 --- a/apps/initrouter/Makefile +++ b/apps/initrouter/Makefile @@ -1,35 +1,28 @@ -#Makefile to build BACnet Application for the Linux Port +#Makefile to build BACnet Application using GCC compiler +# Executable file name TARGET = bacinitr # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -40,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/lib/Makefile b/apps/lib/Makefile new file mode 100644 index 00000000..713fa062 --- /dev/null +++ b/apps/lib/Makefile @@ -0,0 +1,124 @@ +# BACnet Stack library +# Build all the non-OS or port specific code + +BACNET_LIB_NAME ?= bacnet +BACNET_LIB_DIR ?= $(realpath .) +BACNET_LIB_TARGET ?= $(BACNET_LIB_DIR)/lib$(BACNET_LIB_NAME).a +BACNET_SRC_DIR ?= $(realpath ../../src) +BACNET_PORT_DIR ?= $(realpath ../../ports/linux) +BACNET_DEFINES ?= + +#build for release (default) or debug +OPTIMIZATION ?= -Os +DEBUGGING ?= +WARNINGS ?= -Wall -Wmissing-prototypes +# dead code removal +ifeq (${BUILD},debug) +OPTIMIZATION = -O0 +DEBUGGING = -g -DDEBUG_ENABLED=1 +endif + +# put all the flags together +INCLUDES = -I$(BACNET_SRC_DIR) +CFLAGS += $(WARNINGS) $(DEBUGGING) $(OPTIMIZATION) $(BACNET_DEFINES) $(INCLUDES) +CFLAGS += -ffunction-sections -fdata-sections + +PORT_ARCNET_SRC = \ + $(BACNET_PORT_DIR)/arcnet.c + +PORT_MSTP_SRC = \ + $(BACNET_PORT_DIR)/rs485.c \ + $(BACNET_PORT_DIR)/dlmstp.c \ + $(BACNET_SRC_DIR)/bacnet/datalink/mstp.c \ + $(BACNET_SRC_DIR)/bacnet/datalink/mstptext.c \ + $(BACNET_SRC_DIR)/bacnet/datalink/crc.c + +PORT_ETHERNET_SRC = \ + $(BACNET_PORT_DIR)/ethernet.c + +PORT_BIP_SRC = \ + $(BACNET_PORT_DIR)/bip-init.c \ + $(BACNET_SRC_DIR)/bacnet/datalink/bvlc.c \ + $(BACNET_SRC_DIR)/bacnet/basic/bbmd/h_bbmd.c + +PORT_BIP6_SRC = \ + $(BACNET_PORT_DIR)/bip6.c \ + $(BACNET_SRC_DIR)/bacnet/basic/bbmd6/h_bbmd6.c \ + $(BACNET_SRC_DIR)/bacnet/basic/bbmd6/vmac.c \ + $(BACNET_SRC_DIR)/bacnet/datalink/bvlc6.c + +PORT_ALL_SRC = \ + $(BACNET_SRC_DIR)/bacnet/datalink/datalink.c \ + $(PORT_ARCNET_SRC) \ + $(PORT_MSTP_SRC) \ + $(PORT_ETHERNET_SRC) \ + $(PORT_BIP_SRC) \ + $(PORT_BIP6_SRC) + +PORT_NONE_SRC = \ + $(BACNET_SRC_DIR)/bacnet/datalink/datalink.c + +ifeq (${BACDL_DEFINE},-DBACDL_BIP=1) +BACNET_PORT_SRC = ${PORT_BIP_SRC} +endif +ifeq (${BACDL_DEFINE},-DBACDL_BIP6=1) +BACNET_PORT_SRC = ${PORT_BIP6_SRC} +endif +ifeq (${BACDL_DEFINE},-DBACDL_MSTP=1) +BACNET_PORT_SRC = ${PORT_MSTP_SRC} +endif +ifeq (${BACDL_DEFINE},-DBACDL_ARCNET=1) +BACNET_PORT_SRC = ${PORT_ARCNET_SRC} +endif +ifeq (${BACDL_DEFINE},-DBACDL_ETHERNET=1) +BACNET_PORT_SRC = ${PORT_ETHERNET_SRC} +endif +ifeq (${BACDL_DEFINE},-DBACDL_NONE=1) +BACNET_PORT_SRC = ${PORT_NONE_SRC} +endif +ifeq (${BACDL_DEFINE},-DBACDL_ALL=1) +BACNET_PORT_SRC = ${PORT_ALL_SRC} +endif +ifneq (${BACDL_DEFINE},) +CFLAGS += ${BACDL_DEFINE} +endif + +BACNET_PORT_SRC += \ + $(BACNET_SRC_DIR)/bacnet/datalink/dlenv.c \ + $(BACNET_PORT_DIR)/mstimer-init.c \ + $(BACNET_PORT_DIR)/datetime-init.c \ + +BACNET_SRC ?= \ + $(wildcard $(BACNET_SRC_DIR)/bacnet/*.c) \ + +BACNET_BASIC_SRC ?= \ + $(wildcard $(BACNET_SRC_DIR)/bacnet/basic/*.c) \ + $(wildcard $(BACNET_SRC_DIR)/bacnet/basic/binding/*.c) \ + $(wildcard $(BACNET_SRC_DIR)/bacnet/basic/service/*.c) \ + $(wildcard $(BACNET_SRC_DIR)/bacnet/basic/sys/*.c) \ + $(BACNET_SRC_DIR)/bacnet/basic/npdu/h_npdu.c \ + $(BACNET_SRC_DIR)/bacnet/basic/npdu/s_router.c \ + $(BACNET_SRC_DIR)/bacnet/basic/tsm/tsm.c + +SRCS := $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) + +OBJS = ${SRCS:.c=.o} + +all: $(BACNET_LIB_TARGET) + +lib: $(BACNET_LIB_TARGET) + +$(BACNET_LIB_TARGET): $(OBJS) Makefile + ${AR} rcs $@ $(OBJS) + +.c.o: + ${CC} -c ${CFLAGS} $*.c -o $@ + +depend: + rm -f .depend + ${CC} -MM ${CFLAGS} *.c >> .depend + +clean: + rm -rf core $(OBJS) $(BACNET_LIB_TARGET) + +include: .depend diff --git a/apps/mstpcap/main.c b/apps/mstpcap/main.c index 51553283..40cc989b 100644 --- a/apps/mstpcap/main.c +++ b/apps/mstpcap/main.c @@ -72,8 +72,8 @@ static volatile struct mstp_port_struct_t MSTP_Port; /* track the receive state to know when there is a broken packet */ static MSTP_RECEIVE_STATE MSTP_Receive_State = MSTP_RECEIVE_STATE_IDLE; /* buffers needed by mstp port struct */ -static uint8_t RxBuffer[MAX_MPDU]; -static uint8_t TxBuffer[MAX_MPDU]; +static uint8_t RxBuffer[DLMSTP_MPDU_MAX]; +static uint8_t TxBuffer[DLMSTP_MPDU_MAX]; /* method to tell main loop to exit from CTRL-C or other signals */ static volatile bool Exit_Requested; /* flag to indicate Wireshark is running the show - no stdout or stderr */ diff --git a/apps/piface/Makefile b/apps/piface/Makefile index 01c3279a..2403f937 100644 --- a/apps/piface/Makefile +++ b/apps/piface/Makefile @@ -4,220 +4,53 @@ ## General Flags TARGET = bacpiface +# BACnet objects that are used with this app +BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object +SRC = main.c \ + $(BACNET_OBJECT_DIR)/device.c \ + $(BACNET_OBJECT_DIR)/netport.c \ + $(BACNET_OBJECT_DIR)/bi.c \ + $(BACNET_OBJECT_DIR)/bo.c + +CFLAGS += -DMAX_TSM_TRANSACTIONS=1 +CFLAGS += -DMAX_BINARY_INPUTS=4 +CFLAGS += -DMAX_BINARY_OUTPUTS=8 + +# TARGET_EXT is defined in apps/Makefile as .exe or nothing +TARGET_BIN = ${TARGET}$(TARGET_EXT) # Source locations -BACNET_CORE = ../../src -BACNET_INCLUDE = ../../include -BACNET_HANDLER = ../../demo/handler -BACNET_OBJECT = ../../demo/object -BACNET_DEMO = ../../demo -BACNET_PORT_DIR = ../../ports/linux PIFACE_INCLUDE = libpifacedigital/src PIFACE_LIB = libpifacedigital MCP23S17_LIB = libmcp23s17 -## BACnet options -BACDL_DEFINE ?= -DBACDL_BIP=1 -# Declare your level of BBMD support -BBMD_DEFINE ?= -DBBMD_ENABLED=1 - -# local files for this project -CSRC = main.c \ - device.c - -# common demo files needed -DEMOSRC = \ - $(BACNET_HANDLER)/dlenv.c \ - $(BACNET_HANDLER)/txbuf.c \ - $(BACNET_HANDLER)/noserv.c \ - $(BACNET_HANDLER)/h_npdu.c \ - $(BACNET_HANDLER)/h_whois.c \ - $(BACNET_HANDLER)/h_iam.c \ - $(BACNET_HANDLER)/h_rp.c \ - $(BACNET_HANDLER)/h_rp_a.c \ - $(BACNET_HANDLER)/h_rpm.c \ - $(BACNET_HANDLER)/h_rpm_a.c \ - $(BACNET_HANDLER)/h_rr.c \ - $(BACNET_HANDLER)/h_wp.c \ - $(BACNET_HANDLER)/h_wpm.c \ - $(BACNET_HANDLER)/h_alarm_ack.c \ - $(BACNET_HANDLER)/h_arf.c \ - $(BACNET_HANDLER)/h_arf_a.c \ - $(BACNET_HANDLER)/h_awf.c \ - $(BACNET_HANDLER)/h_rd.c \ - $(BACNET_HANDLER)/h_dcc.c \ - $(BACNET_HANDLER)/h_ts.c \ - $(BACNET_HANDLER)/h_whohas.c \ - $(BACNET_HANDLER)/h_ihave.c \ - $(BACNET_HANDLER)/h_cov.c \ - $(BACNET_HANDLER)/h_ccov.c \ - $(BACNET_HANDLER)/h_ucov.c \ - $(BACNET_HANDLER)/h_getevent.c \ - $(BACNET_HANDLER)/h_gas_a.c \ - $(BACNET_HANDLER)/h_get_alarm_sum.c \ - $(BACNET_HANDLER)/h_getevent_a.c \ - $(BACNET_HANDLER)/h_pt.c \ - $(BACNET_HANDLER)/h_pt_a.c \ - $(BACNET_HANDLER)/h_upt.c \ - $(BACNET_HANDLER)/s_arfs.c \ - $(BACNET_HANDLER)/s_awfs.c \ - $(BACNET_HANDLER)/s_dcc.c \ - $(BACNET_HANDLER)/s_ihave.c \ - $(BACNET_HANDLER)/s_get_alarm_sum.c \ - $(BACNET_HANDLER)/s_get_event.c \ - $(BACNET_HANDLER)/s_iam.c \ - $(BACNET_HANDLER)/s_cov.c \ - $(BACNET_HANDLER)/s_ptransfer.c \ - $(BACNET_HANDLER)/s_rd.c \ - $(BACNET_HANDLER)/s_rp.c \ - $(BACNET_HANDLER)/s_rpm.c \ - $(BACNET_HANDLER)/s_ts.c \ - $(BACNET_HANDLER)/s_cevent.c \ - $(BACNET_HANDLER)/s_router.c \ - $(BACNET_HANDLER)/s_uevent.c \ - $(BACNET_HANDLER)/s_whohas.c \ - $(BACNET_HANDLER)/s_whois.c \ - $(BACNET_HANDLER)/s_wpm.c \ - $(BACNET_HANDLER)/s_upt.c \ - $(BACNET_HANDLER)/s_wp.c - -OBJSRC = \ - $(BACNET_OBJECT)/bi.c \ - $(BACNET_OBJECT)/bo.c \ - $(BACNET_OBJECT)/netport.c - -# core BACnet stack files -CORESRC = \ - $(BACNET_CORE)/apdu.c \ - $(BACNET_CORE)/npdu.c \ - $(BACNET_CORE)/bacdcode.c \ - $(BACNET_CORE)/bacint.c \ - $(BACNET_CORE)/bacreal.c \ - $(BACNET_CORE)/bacstr.c \ - $(BACNET_CORE)/bacapp.c \ - $(BACNET_CORE)/bacprop.c \ - $(BACNET_CORE)/bactext.c \ - $(BACNET_CORE)/datetime.c \ - $(BACNET_CORE)/indtext.c \ - $(BACNET_CORE)/key.c \ - $(BACNET_CORE)/keylist.c \ - $(BACNET_CORE)/proplist.c \ - $(BACNET_CORE)/debug.c \ - $(BACNET_CORE)/bigend.c \ - $(BACNET_CORE)/arf.c \ - $(BACNET_CORE)/awf.c \ - $(BACNET_CORE)/cov.c \ - $(BACNET_CORE)/dcc.c \ - $(BACNET_CORE)/iam.c \ - $(BACNET_CORE)/ihave.c \ - $(BACNET_CORE)/rd.c \ - $(BACNET_CORE)/rp.c \ - $(BACNET_CORE)/rpm.c \ - $(BACNET_CORE)/timesync.c \ - $(BACNET_CORE)/whohas.c \ - $(BACNET_CORE)/whois.c \ - $(BACNET_CORE)/wp.c \ - $(BACNET_CORE)/wpm.c \ - $(BACNET_CORE)/abort.c \ - $(BACNET_CORE)/reject.c \ - $(BACNET_CORE)/bacerror.c \ - $(BACNET_CORE)/ptransfer.c \ - $(BACNET_CORE)/memcopy.c \ - $(BACNET_CORE)/filename.c \ - $(BACNET_CORE)/tsm.c \ - $(BACNET_CORE)/bacaddr.c \ - $(BACNET_CORE)/address.c \ - $(BACNET_CORE)/bacdevobjpropref.c \ - $(BACNET_CORE)/bacpropstates.c \ - $(BACNET_CORE)/alarm_ack.c \ - $(BACNET_CORE)/event.c \ - $(BACNET_CORE)/getevent.c \ - $(BACNET_CORE)/get_alarm_sum.c \ - $(BACNET_CORE)/readrange.c \ - $(BACNET_CORE)/timestamp.c \ - $(BACNET_CORE)/lighting.c \ - $(BACNET_CORE)/version.c - -PORT_BIP_SRC = \ - $(BACNET_PORT_DIR)/bip-init.c \ - $(BACNET_CORE)/bvlc.c \ - $(BACNET_CORE)/bip.c - -ifeq (${BACDL_DEFINE},-DBACDL_BIP=1) -PORT_SRC = ${PORT_BIP_SRC} -endif - -## Include Directories -INCLUDES = -I. -I$(BACNET_INCLUDE) -I$(BACNET_HANDLER) -I$(BACNET_OBJECT) -INCLUDES += -I$(BACNET_PORT_DIR) -INCLUDES += -I$(PIFACE_INCLUDE) - -# Source to Object conversion -COBJ = $(CSRC:%.c=%.o) -DEMOOBJ = $(DEMOSRC:.c=.o) -COREOBJ = $(CORESRC:.c=.o) -OBJOBJ = $(OBJSRC:.c=.o) -PORTOBJ = $(PORT_SRC:.c=.o) - -# define something from the Makefile or batch file -DEFINES = $(BACDL_DEFINE) $(BBMD_DEFINE) -OPTIMIZATION = -Os $(OPTIMIZE_FLAGS) -DEBUGGING = -g -ifeq (${BUILD},debug) -OPTIMIZATION = -O0 -DEBUGGING = -g -endif -ifeq (${BUILD},release) -OPTIMIZATION = -Os $(OPTIMIZE_FLAGS) -DEBUGGING = -DNDEBUG -endif - -BFLAGS += -DBACNET_PROTOCOL_REVISION=17 -BFLAGS += -DMAX_TSM_TRANSACTIONS=1 -BFLAGS += -DMAX_BINARY_INPUTS=4 -BFLAGS += -DMAX_BINARY_OUTPUTS=8 - -## Compile options for C files -CFLAGS = $(DEFINES) -CFLAGS += $(DEBUGGING) -CFLAGS += $(INCLUDES) -# warnings -CFLAGS += -Wall -CFLAGS += -Wstrict-prototypes -CFLAGS += -Wmissing-prototypes -# put it all together -CFLAGS += $(BFLAGS) $(OPTIMIZATION) -CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d - -## Linker flags LDPIFACE = -Wl,-L$(PIFACE_LIB),-lpifacedigital,-L$(MCP23S17_LIB),-lmcp23s17 -LDFLAGS = -Wl,-lc,-lgcc,-lrt,-lm -LFLAGS := $(LDPIFACE) $(LDFLAGS) +LFLAGS += $(LDPIFACE) -## Objects not in library that must be built in order to link -OBJECTS = $(COBJ) $(DEMOOBJ) $(COREOBJ) $(OBJOBJ) $(PORTOBJ) +OBJS += ${SRC:.c=.o} -all: $(TARGET) +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -$(TARGET): $(OBJECTS) $(LIBRARY) - $(CC) $(OBJECTS) $(LFLAGS) -o $@ +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} + ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ + size $@ + cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ +.PHONY: depend depend: rm -f .depend ${CC} -MM ${CFLAGS} *.c >> .depend +.PHONY: clean clean: - rm -f core ${TARGET} ${OBJECTS} + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} +.PHONY: include include: .depend - -.PHONY: clean all include depend - -## Other dependencies --include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*) - diff --git a/apps/piface/configure.sh b/apps/piface/configure.sh old mode 100644 new mode 100755 index 8d77e12c..8b4de3bc --- a/apps/piface/configure.sh +++ b/apps/piface/configure.sh @@ -3,8 +3,15 @@ # The library is located at github.com/piface # Since the PiFace library is GPLv3, we have to keep it separate. -git clone https://github.com/piface/libmcp23s17.git -git clone https://github.com/piface/libpifacedigital.git +if [ ! -d "libmcp23s17" ] +then + git clone git@github.com:piface/libmcp23s17.git +fi + +if [ ! -d "libpifacedigital" ] +then + git clone git@github.com:piface/libpifacedigital.git +fi # Build the library diff --git a/apps/ptransfer/Makefile b/apps/ptransfer/Makefile index 2f01a776..3b0cb9a6 100644 --- a/apps/ptransfer/Makefile +++ b/apps/ptransfer/Makefile @@ -1,24 +1,17 @@ #Makefile to build BACnet Application using GCC compiler -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc -# AR = ar -# MAKE = make -# SIZE = size -# -# Assumes rm and cp are available - # Executable file name TARGET = ptransfer +# BACnet objects that are used with this app +BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object +SRC = main.c \ + $(BACNET_OBJECT_DIR)/client/device-client.c \ + $(BACNET_OBJECT_DIR)/netport.c +# TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = main.c \ - ../object/netport.c \ - ../object/device-client.c - -OBJS = ${SRCS:.c=.o} +OBJS += ${SRC:.c=.o} all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} @@ -27,19 +20,21 @@ ${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} size $@ cp $@ ../../bin -lib: ${BACNET_LIB_TARGET} - ${BACNET_LIB_TARGET}: - ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) ) + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ +.PHONY: depend depend: rm -f .depend ${CC} -MM ${CFLAGS} *.c >> .depend +.PHONY: clean clean: - rm -rf core ${TARGET_BIN} ${OBJS} ${BACNET_LIB_TARGET} + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} +.PHONY: include include: .depend + diff --git a/apps/readbdt/Makefile b/apps/readbdt/Makefile index 9dc577d5..e5a1de9c 100644 --- a/apps/readbdt/Makefile +++ b/apps/readbdt/Makefile @@ -1,35 +1,28 @@ -#Makefile to build BACnet Application for the GCC Port +#Makefile to build BACnet Application using GCC compiler +# Executable file name TARGET = bacrbdt # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -40,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/readfdt/Makefile b/apps/readfdt/Makefile index 409b9d7a..da61ad25 100644 --- a/apps/readfdt/Makefile +++ b/apps/readfdt/Makefile @@ -1,35 +1,28 @@ -#Makefile to build BACnet Application for the GCC Port +#Makefile to build BACnet Application using GCC compiler +# Executable file name TARGET = bacrfdt # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -40,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/readfile/Makefile b/apps/readfile/Makefile index 668460c5..ad3cee6b 100644 --- a/apps/readfile/Makefile +++ b/apps/readfile/Makefile @@ -1,40 +1,28 @@ -#Makefile to build BACnet Application for the Linux Port - -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc +#Makefile to build BACnet Application using GCC compiler +# Executable file name TARGET = bacarf # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_arfs.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -45,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/readprop/Makefile b/apps/readprop/Makefile index fa9dee7d..ccddc4f5 100644 --- a/apps/readprop/Makefile +++ b/apps/readprop/Makefile @@ -7,32 +7,22 @@ BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp_a.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -43,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/readpropm/Makefile b/apps/readpropm/Makefile index 60821b08..e58d9f84 100644 --- a/apps/readpropm/Makefile +++ b/apps/readpropm/Makefile @@ -1,8 +1,4 @@ -#Makefile to build BACnet Application for the Linux Port - -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacrpm @@ -11,34 +7,22 @@ BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp_a.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rpm_a.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_rpm.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -49,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/readrange/Makefile b/apps/readrange/Makefile index 3445af40..7076534a 100644 --- a/apps/readrange/Makefile +++ b/apps/readrange/Makefile @@ -7,32 +7,22 @@ BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rr_a.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_readrange.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -43,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/reinit/Makefile b/apps/reinit/Makefile index 9c4aa0d4..b1f3e1ac 100644 --- a/apps/reinit/Makefile +++ b/apps/reinit/Makefile @@ -1,8 +1,4 @@ -#Makefile to build BACnet Application for the Linux Port - -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacrd @@ -11,31 +7,22 @@ BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_rd.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -46,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/router-ipv6/main.c b/apps/router-ipv6/main.c index 446b1c82..c4871cc5 100644 --- a/apps/router-ipv6/main.c +++ b/apps/router-ipv6/main.c @@ -99,10 +99,11 @@ static DNET *Router_Table_Head; static uint16_t BIP_Net; static uint16_t BIP6_Net; /* buffer for receiving packets from the directly connected ports */ -static uint8_t BIP_Rx_Buffer[MAX_MPDU]; -static uint8_t BIP6_Rx_Buffer[MAX_MPDU]; +static uint8_t BIP_Rx_Buffer[BIP_MPDU_MAX]; +static uint8_t BIP6_Rx_Buffer[BIP6_MPDU_MAX]; /* buffer for transmitting from any port */ -static uint8_t Tx_Buffer[MAX_MPDU]; +#define MAX(a,b) (((a)>(b))?(a):(b)) +static uint8_t Tx_Buffer[MAX(BIP_MPDU_MAX,BIP6_MPDU_MAX)]; /* main loop exit control */ static bool Exit_Requested; @@ -1150,14 +1151,16 @@ int main(int argc, char *argv[]) /* input */ current_seconds = time(NULL); /* returns 0 bytes on timeout */ - pdu_len = bip_receive(&src, &BIP_Rx_Buffer[0], MAX_MPDU, 5); + pdu_len = bip_receive(&src, &BIP_Rx_Buffer[0], + sizeof(BIP_Rx_Buffer), 5); /* process */ if (pdu_len) { debug_printf("BACnet/IP Received packet\n"); my_routing_npdu_handler(BIP_Net, &src, &BIP_Rx_Buffer[0], pdu_len); } /* returns 0 bytes on timeout */ - pdu_len = bip6_receive(&src, &BIP6_Rx_Buffer[0], MAX_MPDU, 5); + pdu_len = bip6_receive(&src, &BIP6_Rx_Buffer[0], + sizeof(BIP6_Rx_Buffer), 5); /* process */ if (pdu_len) { debug_printf("BACnet/IPv6 Received packet\n"); diff --git a/apps/router-mstp/main.c b/apps/router-mstp/main.c index 3d32f48d..82dd7a92 100644 --- a/apps/router-mstp/main.c +++ b/apps/router-mstp/main.c @@ -97,10 +97,11 @@ static DNET *Router_Table_Head; static uint16_t BIP_Net; static uint16_t MSTP_Net; /* buffer for receiving packets from the directly connected ports */ -static uint8_t BIP_Rx_Buffer[MAX_MPDU]; -static uint8_t MSTP_Rx_Buffer[MAX_MPDU]; +static uint8_t BIP_Rx_Buffer[BIP_MPDU_MAX]; +static uint8_t MSTP_Rx_Buffer[DLMSTP_MPDU_MAX]; /* buffer for transmitting from any port */ -static uint8_t Tx_Buffer[MAX_MPDU]; +#define MAX(a,b) (((a)>(b))?(a):(b)) +static uint8_t Tx_Buffer[MAX(DLMSTP_MPDU_MAX,BIP_MPDU_MAX)]; /* main loop exit control */ static bool Exit_Requested; @@ -1161,14 +1162,16 @@ int main(int argc, char *argv[]) /* input */ current_seconds = time(NULL); /* returns 0 bytes on timeout */ - pdu_len = bip_receive(&src, &BIP_Rx_Buffer[0], MAX_MPDU, 5); + pdu_len = bip_receive(&src, &BIP_Rx_Buffer[0], + sizeof(BIP_Rx_Buffer), 5); /* process */ if (pdu_len) { debug_printf("BACnet/IP Received packet\n"); my_routing_npdu_handler(BIP_Net, &src, &BIP_Rx_Buffer[0], pdu_len); } /* returns 0 bytes on timeout */ - pdu_len = dlmstp_receive(&src, &MSTP_Rx_Buffer[0], MAX_MPDU, 5); + pdu_len = dlmstp_receive(&src, &MSTP_Rx_Buffer[0], + sizeof(MSTP_Rx_Buffer), 5); /* process */ if (pdu_len) { debug_printf("BACnet MS/TP Received packet\n"); diff --git a/apps/scov/Makefile b/apps/scov/Makefile index 0a8392f9..df4fd746 100644 --- a/apps/scov/Makefile +++ b/apps/scov/Makefile @@ -7,33 +7,22 @@ BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_ccov.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_ucov.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_cov.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -44,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/server/Makefile b/apps/server/Makefile index 795c8fb4..9ae38519 100644 --- a/apps/server/Makefile +++ b/apps/server/Makefile @@ -1,7 +1,8 @@ -#Makefile to build BACnet Application for the GCC port +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacserv +# BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/device.c \ @@ -37,24 +38,21 @@ SRC = main.c \ $(BACNET_OBJECT_DIR)/acc.c \ $(BACNET_OBJECT_DIR)/bacfile.c -BACNET_BASIC_SRC += \ - $(wildcard $(BACNET_SRC_DIR)/bacnet/basic/service/*.c) - # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS = ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -65,7 +63,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/timesync/Makefile b/apps/timesync/Makefile index 492bbb93..0b0cdc41 100644 --- a/apps/timesync/Makefile +++ b/apps/timesync/Makefile @@ -1,8 +1,4 @@ -#Makefile to build BACnet Application for the Linux Port - -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacts @@ -11,32 +7,22 @@ BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_ts.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_ts.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -47,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/ucov/Makefile b/apps/ucov/Makefile index c0958850..f648329d 100644 --- a/apps/ucov/Makefile +++ b/apps/ucov/Makefile @@ -1,8 +1,4 @@ -#Makefile to build BACnet Application for the Linux Port - -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacucov @@ -11,31 +7,22 @@ BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_cov.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -46,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/uevent/Makefile b/apps/uevent/Makefile index 73b7e9a1..ea345dde 100644 --- a/apps/uevent/Makefile +++ b/apps/uevent/Makefile @@ -1,8 +1,4 @@ -#Makefile to build BACnet Application with GNU Make - -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacuevent @@ -11,32 +7,22 @@ BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rr_a.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_uevent.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -47,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/uptransfer/Makefile b/apps/uptransfer/Makefile index bf740d2a..5e17dba1 100644 --- a/apps/uptransfer/Makefile +++ b/apps/uptransfer/Makefile @@ -7,33 +7,22 @@ BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_upt.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_upt.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -44,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/whohas/Makefile b/apps/whohas/Makefile index 2c9d54a1..1436fb13 100644 --- a/apps/whohas/Makefile +++ b/apps/whohas/Makefile @@ -1,8 +1,4 @@ -#Makefile to build BACnet Application for the Linux Port - -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacwh @@ -11,32 +7,22 @@ BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_ihave.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whohas.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -47,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/whois/Makefile b/apps/whois/Makefile index 1b896539..abb460ba 100644 --- a/apps/whois/Makefile +++ b/apps/whois/Makefile @@ -1,39 +1,28 @@ -#Makefile to build BACnet Application for the Linux Port - -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc +#Makefile to build BACnet Application using GCC compiler +# Executable file name TARGET = bacwi # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -44,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/whoisrouter/Makefile b/apps/whoisrouter/Makefile index 519ca754..005128b8 100644 --- a/apps/whoisrouter/Makefile +++ b/apps/whoisrouter/Makefile @@ -1,35 +1,28 @@ -#Makefile to build BACnet Application for the Linux Port +#Makefile to build BACnet Application using GCC compiler +# Executable file name TARGET = bacwir # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -40,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/writebdt/Makefile b/apps/writebdt/Makefile index ec5b3ab4..262efe7d 100644 --- a/apps/writebdt/Makefile +++ b/apps/writebdt/Makefile @@ -1,35 +1,28 @@ -#Makefile to build BACnet Application for the GCC Port +#Makefile to build BACnet Application using GCC compiler +# Executable file name TARGET = bacwbdt # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -40,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/writefile/Makefile b/apps/writefile/Makefile index b296ab8f..ea71f422 100644 --- a/apps/writefile/Makefile +++ b/apps/writefile/Makefile @@ -1,42 +1,28 @@ -#Makefile to build BACnet Application for the Linux Port - -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacawf - # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_awfs.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -47,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/writeprop/Makefile b/apps/writeprop/Makefile index e740241e..bb0d8eed 100644 --- a/apps/writeprop/Makefile +++ b/apps/writeprop/Makefile @@ -1,4 +1,4 @@ -#Makefile to build BACnet Application for the Linux Port +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacwp @@ -7,31 +7,22 @@ BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_wp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -42,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/apps/writepropm/Makefile b/apps/writepropm/Makefile index c7ea5a0e..b458de02 100644 --- a/apps/writepropm/Makefile +++ b/apps/writepropm/Makefile @@ -1,43 +1,28 @@ -#Makefile to build BACnet Application for the Linux Port - -# tools - only if you need them. -# Most platforms have this already defined -# CC = gcc +#Makefile to build BACnet Application using GCC compiler # Executable file name TARGET = bacwpm - # BACnet objects that are used with this app BACNET_OBJECT_DIR = $(BACNET_SRC_DIR)/bacnet/basic/object SRC = main.c \ $(BACNET_OBJECT_DIR)/client/device-client.c \ $(BACNET_OBJECT_DIR)/netport.c -BACNET_BASIC_SRC += \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_apdu.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_noserv.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/h_whois.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_iam.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_rp.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_wpm.c \ - $(BACNET_SRC_DIR)/bacnet/basic/service/s_whois.c # TARGET_EXT is defined in apps/Makefile as .exe or nothing TARGET_BIN = ${TARGET}$(TARGET_EXT) -SRCS = $(SRC) $(BACNET_SRC) $(BACNET_BASIC_SRC) $(BACNET_PORT_SRC) +OBJS += ${SRC:.c=.o} -OBJS += ${SRCS:.c=.o} +all: ${BACNET_LIB_TARGET} Makefile ${TARGET_BIN} -.PHONY: all -all: Makefile ${TARGET_BIN} - -${TARGET_BIN}: ${OBJS} +${TARGET_BIN}: ${OBJS} Makefile ${BACNET_LIB_TARGET} ${CC} ${PFLAGS} ${OBJS} ${LFLAGS} -o $@ size $@ cp $@ ../../bin +${BACNET_LIB_TARGET}: + ( cd ${BACNET_LIB_DIR} ; $(MAKE) clean ; $(MAKE) -s ) + .c.o: ${CC} -c ${CFLAGS} $*.c -o $@ @@ -48,7 +33,7 @@ depend: .PHONY: clean clean: - rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map + rm -f core ${TARGET_BIN} ${OBJS} $(TARGET).map ${BACNET_LIB_TARGET} .PHONY: include include: .depend diff --git a/ports/arduino_uno/bip.c b/ports/arduino_uno/bip.c index 0920e19e..8bd53963 100644 --- a/ports/arduino_uno/bip.c +++ b/ports/arduino_uno/bip.c @@ -170,7 +170,7 @@ int bip_send_pdu(BACNET_ADDRESS *dest, /* destination address */ unsigned pdu_len) { /* number of bytes of data */ - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[BIP_MPDU_MAX] = { 0 }; int mtu_len = 0; int bytes_sent = 0; /* addr and port in host format */ diff --git a/ports/arduino_uno/bip.h b/ports/arduino_uno/bip.h index 55f69b9b..aae99636 100644 --- a/ports/arduino_uno/bip.h +++ b/ports/arduino_uno/bip.h @@ -31,8 +31,8 @@ #include "bacnet/npdu.h" /* specific defines for BACnet/IP over Ethernet */ -#define MAX_HEADER (1 + 1 + 2) -#define MAX_MPDU (MAX_HEADER+MAX_PDU) +#define BIP_HEADER_MAX (1 + 1 + 2) +#define BIP_MPDU_MAX (BIP_HEADER_MAX+MAX_PDU) #define BVLL_TYPE_BACNET_IP (0x81) diff --git a/ports/arduino_uno/bvlc-arduino.c b/ports/arduino_uno/bvlc-arduino.c index ce582e6e..016639d7 100644 --- a/ports/arduino_uno/bvlc-arduino.c +++ b/ports/arduino_uno/bvlc-arduino.c @@ -80,7 +80,7 @@ static void bvlc_send_result(uint8_t *dest_addr, BACNET_BVLC_RESULT result_code) { - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[BIP_MPDU_MAX] = { 0 }; uint16_t mtu_len = 0; mtu_len = (uint16_t)bvlc_encode_bvlc_result(&mtu[0], result_code); diff --git a/ports/at91sam7s/dlmstp.c b/ports/at91sam7s/dlmstp.c index f9a85aea..394b1a42 100644 --- a/ports/at91sam7s/dlmstp.c +++ b/ports/at91sam7s/dlmstp.c @@ -189,7 +189,7 @@ struct mstp_pdu_packet { bool data_expecting_reply; uint8_t destination_mac; uint16_t length; - uint8_t buffer[MAX_MPDU]; + uint8_t buffer[DLMSTP_MPDU_MAX]; }; /* count must be a power of 2 for ringbuf library */ #ifndef MSTP_PDU_PACKET_COUNT diff --git a/ports/bdk-atxx4-mstp/dlmstp.c b/ports/bdk-atxx4-mstp/dlmstp.c index 0be5cd11..acd9d24f 100644 --- a/ports/bdk-atxx4-mstp/dlmstp.c +++ b/ports/bdk-atxx4-mstp/dlmstp.c @@ -193,7 +193,7 @@ struct mstp_pdu_packet { bool data_expecting_reply; uint8_t destination_mac; uint16_t length; - uint8_t buffer[MAX_MPDU]; + uint8_t buffer[DLMSTP_MPDU_MAX]; }; static struct mstp_pdu_packet PDU_Buffer[MSTP_PDU_PACKET_COUNT]; static RING_BUFFER PDU_Queue; diff --git a/ports/linux/dlmstp.c b/ports/linux/dlmstp.c index 308f3837..f598ac04 100644 --- a/ports/linux/dlmstp.c +++ b/ports/linux/dlmstp.c @@ -77,14 +77,14 @@ static bool run_thread; /* local MS/TP port data - shared with RS-485 */ static volatile struct mstp_port_struct_t MSTP_Port; /* buffers needed by mstp port struct */ -static uint8_t TxBuffer[MAX_MPDU]; -static uint8_t RxBuffer[MAX_MPDU]; +static uint8_t TxBuffer[DLMSTP_MPDU_MAX]; +static uint8_t RxBuffer[DLMSTP_MPDU_MAX]; /* data structure for MS/TP PDU Queue */ struct mstp_pdu_packet { bool data_expecting_reply; uint8_t destination_mac; uint16_t length; - uint8_t buffer[MAX_MPDU]; + uint8_t buffer[DLMSTP_MPDU_MAX]; }; /* count must be a power of 2 for ringbuf library */ #ifndef MSTP_PDU_PACKET_COUNT diff --git a/ports/linux/dlmstp_linux.h b/ports/linux/dlmstp_linux.h index ba2a551f..1af53830 100644 --- a/ports/linux/dlmstp_linux.h +++ b/ports/linux/dlmstp_linux.h @@ -40,8 +40,8 @@ #include "bacnet/basic/sys/ringbuf.h" /* defines specific to MS/TP */ /* preamble+type+dest+src+len+crc8+crc16 */ -#define MAX_HEADER (2+1+1+1+2+1+2) -#define MAX_MPDU (MAX_HEADER+MAX_PDU) +#define DLMSTP_HEADER_MAX (2+1+1+1+2+1+2) +#define DLMSTP_MPDU_MAX (DLMSTP_HEADER_MAX+MAX_PDU) /* count must be a power of 2 for ringbuf library */ #ifndef MSTP_PDU_PACKET_COUNT @@ -53,7 +53,7 @@ typedef struct dlmstp_packet { BACNET_ADDRESS address; /* source address */ uint8_t frame_type; /* type of message */ uint16_t pdu_len; /* packet length */ - uint8_t pdu[MAX_MPDU]; /* packet */ + uint8_t pdu[DLMSTP_MPDU_MAX]; /* packet */ } DLMSTP_PACKET; /* data structure for MS/TP PDU Queue */ @@ -61,7 +61,7 @@ struct mstp_pdu_packet { bool data_expecting_reply; uint8_t destination_mac; uint16_t length; - uint8_t buffer[MAX_MPDU]; + uint8_t buffer[DLMSTP_MPDU_MAX]; }; typedef struct shared_mstp_data { @@ -85,8 +85,8 @@ typedef struct shared_mstp_data { pthread_cond_t Master_Done_Flag; pthread_mutex_t Master_Done_Mutex; /* buffers needed by mstp port struct */ - uint8_t TxBuffer[MAX_MPDU]; - uint8_t RxBuffer[MAX_MPDU]; + uint8_t TxBuffer[DLMSTP_MPDU_MAX]; + uint8_t RxBuffer[DLMSTP_MPDU_MAX]; /* The minimum time without a DataAvailable or ReceiveError event */ /* that a node must wait for a station to begin replying to a */ /* confirmed request: 255 milliseconds. (Implementations may use */ diff --git a/ports/linux/ethernet.c b/ports/linux/ethernet.c index e7c7e492..32188b13 100644 --- a/ports/linux/ethernet.c +++ b/ports/linux/ethernet.c @@ -226,7 +226,7 @@ int ethernet_send_pdu(BACNET_ADDRESS *dest, /* destination address */ int i = 0; /* counter */ int bytes = 0; BACNET_ADDRESS src = { 0 }; /* source address for npdu */ - uint8_t mtu[MAX_MPDU] = { 0 }; /* our buffer */ + uint8_t mtu[ETHERNET_MPDU_MAX] = { 0 }; /* our buffer */ int mtu_len = 0; (void)npdu_data; @@ -265,7 +265,7 @@ int ethernet_send_pdu(BACNET_ADDRESS *dest, /* destination address */ mtu[15] = 0x82; /* SSAP for BACnet */ mtu[16] = 0x03; /* Control byte in header */ mtu_len = 17; - if ((mtu_len + pdu_len) > MAX_MPDU) { + if ((mtu_len + pdu_len) > ETHERNET_MPDU_MAX) { fprintf(stderr, "ethernet: PDU is too big to send!\n"); return -4; } @@ -293,7 +293,7 @@ uint16_t ethernet_receive(BACNET_ADDRESS *src, /* source address */ unsigned timeout) { /* number of milliseconds to wait for a packet */ int received_bytes; - uint8_t buf[MAX_MPDU] = { 0 }; /* data */ + uint8_t buf[ETHERNET_MPDU_MAX] = { 0 }; /* data */ uint16_t pdu_len = 0; /* return value */ fd_set read_fds; int max; diff --git a/ports/linux/mstpsnap.c b/ports/linux/mstpsnap.c index 87285607..281ede4e 100644 --- a/ports/linux/mstpsnap.c +++ b/ports/linux/mstpsnap.c @@ -61,8 +61,8 @@ /* local port data - shared with RS-485 */ static volatile struct mstp_port_struct_t MSTP_Port; /* buffers needed by mstp port struct */ -static uint8_t RxBuffer[MAX_MPDU]; -static uint8_t TxBuffer[MAX_MPDU]; +static uint8_t RxBuffer[DLMSTP_MPDU_MAX]; +static uint8_t TxBuffer[DLMSTP_MPDU_MAX]; static struct mstimer Silence_Timer; static uint32_t Timer_Silence(void *pArg) diff --git a/ports/linux/rx_fsm.c b/ports/linux/rx_fsm.c index e560c422..3b031894 100644 --- a/ports/linux/rx_fsm.c +++ b/ports/linux/rx_fsm.c @@ -69,8 +69,8 @@ /* local port data - shared with RS-485 */ static volatile struct mstp_port_struct_t MSTP_Port; /* buffers needed by mstp port struct */ -static uint8_t RxBuffer[MAX_MPDU]; -static uint8_t TxBuffer[MAX_MPDU]; +static uint8_t RxBuffer[DLMSTP_MPDU_MAX]; +static uint8_t TxBuffer[DLMSTP_MPDU_MAX]; static uint16_t SilenceTime; #define INCREMENT_AND_LIMIT_UINT16(x) \ { \ diff --git a/ports/pic18f6720/dlmstp.c b/ports/pic18f6720/dlmstp.c index 3ef3ac1d..f4f2003f 100644 --- a/ports/pic18f6720/dlmstp.c +++ b/ports/pic18f6720/dlmstp.c @@ -111,7 +111,7 @@ int dlmstp_send_pdu(BACNET_ADDRESS *dest, /* destination address */ MSTP_Port.TxDestination = MSTP_BROADCAST_ADDRESS; } dlmstp_get_my_address(&src); - if ((MAX_HEADER + pdu_len) > MAX_MPDU) { + if ((DLMSTP_HEADER_MAX + pdu_len) > DLMSTP_MPDU_MAX) { return -4; } bytes_sent = MSTP_Create_Frame((uint8_t *)&MSTP_Port.TxBuffer[0], diff --git a/ports/pic18f6720/dlmstp.h b/ports/pic18f6720/dlmstp.h index fc4e420f..58629ddc 100644 --- a/ports/pic18f6720/dlmstp.h +++ b/ports/pic18f6720/dlmstp.h @@ -42,15 +42,15 @@ #include "bacnet/npdu.h" /* defines specific to MS/TP */ -#define MAX_HEADER (2+1+1+1+2+1) -#define MAX_MPDU (MAX_HEADER+MAX_PDU) +#define DLMSTP_HEADER_MAX (2+1+1+1+2+1) +#define DLMSTP_MPDU_MAX (DLMSTP_HEADER_MAX+MAX_PDU) typedef struct dlmstp_packet { bool ready; /* true if ready to be sent or received */ BACNET_ADDRESS address; /* source address */ uint8_t frame_type; /* type of message */ unsigned pdu_len; /* packet length */ - uint8_t pdu[MAX_MPDU]; /* packet */ + uint8_t pdu[DLMSTP_MPDU_MAX]; /* packet */ } DLMSTP_PACKET; /* number of MS/TP tx/rx packets */ diff --git a/ports/pic18f6720/mstp.c b/ports/pic18f6720/mstp.c index 21417bb6..afb84311 100644 --- a/ports/pic18f6720/mstp.c +++ b/ports/pic18f6720/mstp.c @@ -222,7 +222,7 @@ void MSTP_Create_And_Send_Frame( uint8_t *data, /* any data to be sent - may be null */ unsigned data_len) { /* number of bytes of data (up to 501) */ - uint8_t buffer[MAX_MPDU] = { 0 }; /* buffer for sending */ + uint8_t buffer[DLMSTP_MPDU_MAX] = { 0 }; /* buffer for sending */ uint16_t len = 0; /* number of bytes to send */ len = (uint16_t)MSTP_Create_Frame(&buffer[0], /* where frame is loaded */ @@ -435,7 +435,7 @@ void MSTP_Receive_Frame_FSM(volatile struct mstp_port_struct_t *mstp_port) (mstp_port->DestinationAddress == MSTP_BROADCAST_ADDRESS)) { /* FrameTooLong */ - if (mstp_port->DataLength > MAX_MPDU) { + if (mstp_port->DataLength > DLMSTP_MPDU_MAX) { /* indicate that a frame with an illegal or */ /* unacceptable data length has been received */ mstp_port->ReceivedInvalidFrame = true; diff --git a/ports/pic18f97j60/dlmstp.c b/ports/pic18f97j60/dlmstp.c index 3ef3ac1d..f4f2003f 100644 --- a/ports/pic18f97j60/dlmstp.c +++ b/ports/pic18f97j60/dlmstp.c @@ -111,7 +111,7 @@ int dlmstp_send_pdu(BACNET_ADDRESS *dest, /* destination address */ MSTP_Port.TxDestination = MSTP_BROADCAST_ADDRESS; } dlmstp_get_my_address(&src); - if ((MAX_HEADER + pdu_len) > MAX_MPDU) { + if ((DLMSTP_HEADER_MAX + pdu_len) > DLMSTP_MPDU_MAX) { return -4; } bytes_sent = MSTP_Create_Frame((uint8_t *)&MSTP_Port.TxBuffer[0], diff --git a/ports/pic18f97j60/dlmstp.h b/ports/pic18f97j60/dlmstp.h index fc4e420f..58629ddc 100644 --- a/ports/pic18f97j60/dlmstp.h +++ b/ports/pic18f97j60/dlmstp.h @@ -42,15 +42,15 @@ #include "bacnet/npdu.h" /* defines specific to MS/TP */ -#define MAX_HEADER (2+1+1+1+2+1) -#define MAX_MPDU (MAX_HEADER+MAX_PDU) +#define DLMSTP_HEADER_MAX (2+1+1+1+2+1) +#define DLMSTP_MPDU_MAX (DLMSTP_HEADER_MAX+MAX_PDU) typedef struct dlmstp_packet { bool ready; /* true if ready to be sent or received */ BACNET_ADDRESS address; /* source address */ uint8_t frame_type; /* type of message */ unsigned pdu_len; /* packet length */ - uint8_t pdu[MAX_MPDU]; /* packet */ + uint8_t pdu[DLMSTP_MPDU_MAX]; /* packet */ } DLMSTP_PACKET; /* number of MS/TP tx/rx packets */ diff --git a/ports/pic18f97j60/mstp.c b/ports/pic18f97j60/mstp.c index 87e590e0..4d9097ae 100644 --- a/ports/pic18f97j60/mstp.c +++ b/ports/pic18f97j60/mstp.c @@ -222,7 +222,7 @@ void MSTP_Create_And_Send_Frame( uint8_t *data, /* any data to be sent - may be null */ unsigned data_len) { /* number of bytes of data (up to 501) */ - uint8_t buffer[MAX_MPDU] = { 0 }; /* buffer for sending */ + uint8_t buffer[DLMSTP_MPDU_MAX] = { 0 }; /* buffer for sending */ uint16_t len = 0; /* number of bytes to send */ len = (uint16_t)MSTP_Create_Frame(&buffer[0], /* where frame is loaded */ @@ -435,7 +435,7 @@ void MSTP_Receive_Frame_FSM(volatile struct mstp_port_struct_t *mstp_port) (mstp_port->DestinationAddress == MSTP_BROADCAST_ADDRESS)) { /* FrameTooLong */ - if (mstp_port->DataLength > MAX_MPDU) { + if (mstp_port->DataLength > DLMSTP_MPDU_MAX) { /* indicate that a frame with an illegal or */ /* unacceptable data length has been received */ mstp_port->ReceivedInvalidFrame = true; diff --git a/ports/pic18f97j60/mstp.h b/ports/pic18f97j60/mstp.h index a664f1b9..3e9c8486 100644 --- a/ports/pic18f97j60/mstp.h +++ b/ports/pic18f97j60/mstp.h @@ -148,7 +148,7 @@ struct mstp_port_struct_t { /* An array of octets, used to store PDU octets prior to being transmitted. */ /* This array is only used for APDU messages */ - uint8_t TxBuffer[MAX_MPDU]; + uint8_t TxBuffer[DLMSTP_MPDU_MAX]; unsigned TxLength; uint8_t TxDestination; bool TxReady; /* true if ready to be sent or received */ diff --git a/ports/rx62n/ethernet.c b/ports/rx62n/ethernet.c index 11e15d1f..17fa73bf 100644 --- a/ports/rx62n/ethernet.c +++ b/ports/rx62n/ethernet.c @@ -94,7 +94,7 @@ int ethernet_send_pdu(BACNET_ADDRESS *dest, /* destination address */ int i = 0; /* counter */ int bytes = 0; BACNET_ADDRESS src = { 0 }; /* source address for npdu */ - uint8_t mtu[MAX_MPDU] = { 0 }; /* our buffer */ + uint8_t mtu[ETHERNET_MPDU_MAX] = { 0 }; /* our buffer */ int mtu_len = 0; (void)npdu_data; @@ -130,7 +130,7 @@ int ethernet_send_pdu(BACNET_ADDRESS *dest, /* destination address */ mtu[15] = 0x82; /* SSAP for BACnet */ mtu[16] = 0x03; /* Control byte in header */ mtu_len = 17; - if ((mtu_len + pdu_len) > MAX_MPDU) { + if ((mtu_len + pdu_len) > ETHERNET_MPDU_MAX) { return -4; } memcpy(&mtu[mtu_len], pdu, pdu_len); @@ -152,7 +152,7 @@ uint16_t ethernet_receive(BACNET_ADDRESS *src, /* source address */ unsigned timeout) { /* number of milliseconds to wait for a packet */ int received_bytes; - uint8_t buf[MAX_MPDU] = { 0 }; /* data */ + uint8_t buf[ETHERNET_MPDU_MAX] = { 0 }; /* data */ uint16_t pdu_len = 0; /* return value */ /* Make sure the socket is open */ diff --git a/ports/stm32f10x/dlmstp.c b/ports/stm32f10x/dlmstp.c index 5ebc1880..a3280cca 100644 --- a/ports/stm32f10x/dlmstp.c +++ b/ports/stm32f10x/dlmstp.c @@ -165,7 +165,7 @@ static uint8_t Nmax_master = 127; struct mstp_tx_packet { uint16_t length; uint16_t index; - uint8_t buffer[MAX_MPDU]; + uint8_t buffer[DLMSTP_MPDU_MAX]; }; /* count must be a power of 2 for ringbuf library */ #ifndef MSTP_TRANSMIT_PACKET_COUNT @@ -179,7 +179,7 @@ struct mstp_pdu_packet { bool data_expecting_reply; uint8_t destination_mac; uint16_t length; - uint8_t buffer[MAX_MPDU]; + uint8_t buffer[DLMSTP_MPDU_MAX]; }; /* count must be a power of 2 for ringbuf library */ #ifndef MSTP_PDU_PACKET_COUNT diff --git a/ports/stm32f4xx/dlmstp.c b/ports/stm32f4xx/dlmstp.c index 29db722b..8472bf37 100644 --- a/ports/stm32f4xx/dlmstp.c +++ b/ports/stm32f4xx/dlmstp.c @@ -155,7 +155,7 @@ static volatile uint8_t Nmax_master = 127; /* An array of octets, used to store octets for transmitting */ /* OutputBuffer is indexed from 0 to OutputBufferSize-1. */ /* The maximum size of a frame is 501 octets. */ -static uint8_t OutputBuffer[MAX_MPDU]; +static uint8_t OutputBuffer[DLMSTP_MPDU_MAX]; /* Number of bytes pending transmit. 0=nothing pending transmit */ uint16_t OutputBufferLength; diff --git a/ports/stm32f4xx/rs485.c b/ports/stm32f4xx/rs485.c index 14f7d5d6..41aa36b5 100644 --- a/ports/stm32f4xx/rs485.c +++ b/ports/stm32f4xx/rs485.c @@ -37,12 +37,12 @@ #include "rs485.h" /* buffer for storing received bytes - size must be power of two */ -/* BACnet MAX_MPDU for MS/TP is 501 bytes */ +/* BACnet DLMSTP_MPDU_MAX for MS/TP is 501 bytes */ static uint8_t Receive_Queue_Data[512]; static FIFO_BUFFER Receive_Queue; /* buffer for storing bytes to transmit */ -/* BACnet MAX_MPDU for MS/TP is 501 bytes */ +/* BACnet DLMSTP_MPDU_MAX for MS/TP is 501 bytes */ static uint8_t Transmit_Queue_Data[512]; static FIFO_BUFFER Transmit_Queue; diff --git a/ports/win32/dlmstp-mm.c b/ports/win32/dlmstp-mm.c index 93ffb3a2..a1ca61b1 100644 --- a/ports/win32/dlmstp-mm.c +++ b/ports/win32/dlmstp-mm.c @@ -54,8 +54,8 @@ static DLMSTP_PACKET Transmit_Packet; /* local MS/TP port data - shared with RS-485 */ volatile struct mstp_port_struct_t MSTP_Port; /* buffers needed by mstp port struct */ -static uint8_t TxBuffer[MAX_MPDU]; -static uint8_t RxBuffer[MAX_MPDU]; +static uint8_t TxBuffer[DLMSTP_MPDU_MAX]; +static uint8_t RxBuffer[DLMSTP_MPDU_MAX]; /* Timer that indicates line silence - and functions */ static uint32_t SilenceStartTime; static uint32_t TimeBeginPeriod; @@ -282,7 +282,7 @@ uint16_t MSTP_Get_Send( } else { destination = MSTP_BROADCAST_ADDRESS; } - if ((MAX_HEADER + Transmit_Packet.pdu_len) > MAX_MPDU) { + if ((MAX_HEADER + Transmit_Packet.pdu_len) > DLMSTP_MPDU_MAX) { return 0; } /* convert the PDU into the MSTP Frame */ @@ -421,7 +421,7 @@ uint16_t MSTP_Get_Reply( } else { return 0; } - if ((MAX_HEADER + Transmit_Packet.pdu_len) > MAX_MPDU) { + if ((MAX_HEADER + Transmit_Packet.pdu_len) > DLMSTP_MPDU_MAX) { return 0; } /* is this the reply to the DER? */ diff --git a/ports/win32/dlmstp.c b/ports/win32/dlmstp.c index c05d6e2b..80d608c6 100644 --- a/ports/win32/dlmstp.c +++ b/ports/win32/dlmstp.c @@ -53,8 +53,8 @@ static DLMSTP_PACKET Transmit_Packet; /* local MS/TP port data - shared with RS-485 */ volatile struct mstp_port_struct_t MSTP_Port; /* buffers needed by mstp port struct */ -static uint8_t TxBuffer[MAX_MPDU]; -static uint8_t RxBuffer[MAX_MPDU]; +static uint8_t TxBuffer[DLMSTP_MPDU_MAX]; +static uint8_t RxBuffer[DLMSTP_MPDU_MAX]; /* The minimum time without a DataAvailable or ReceiveError event */ /* that a node must wait for a station to begin replying to a */ /* confirmed request: 255 milliseconds. (Implementations may use */ @@ -267,7 +267,7 @@ uint16_t MSTP_Get_Send( } else { destination = MSTP_BROADCAST_ADDRESS; } - if ((MAX_HEADER + Transmit_Packet.pdu_len) > MAX_MPDU) { + if ((MAX_HEADER + Transmit_Packet.pdu_len) > DLMSTP_MPDU_MAX) { return 0; } /* convert the PDU into the MSTP Frame */ @@ -407,7 +407,7 @@ uint16_t MSTP_Get_Reply( } else { return 0; } - if ((MAX_HEADER + Transmit_Packet.pdu_len) > MAX_MPDU) { + if ((MAX_HEADER + Transmit_Packet.pdu_len) > DLMSTP_MPDU_MAX) { return 0; } /* is this the reply to the DER? */ diff --git a/ports/win32/ethernet.c b/ports/win32/ethernet.c index 3f01b9fc..6d5df4aa 100644 --- a/ports/win32/ethernet.c +++ b/ports/win32/ethernet.c @@ -193,7 +193,7 @@ bool ethernet_init(char *if_name) */ /* Open the output device */ pcap_eth802_fp = pcap_open(if_name, /* name of the device */ - MAX_MPDU, /* portion of the packet to capture */ + ETHERNET_MPDU_MAX, /* portion of the packet to capture */ PCAP_OPENFLAG_PROMISCUOUS, /* promiscuous mode */ eth_timeout, /* read timeout */ NULL, /* authentication on the remote machine */ @@ -226,7 +226,7 @@ int ethernet_send(BACNET_ADDRESS *dest, /* destination address */ ) { int bytes = 0; - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[ETHERNET_MPDU_MAX] = { 0 }; int mtu_len = 0; int i = 0; @@ -256,7 +256,7 @@ int ethernet_send(BACNET_ADDRESS *dest, /* destination address */ LogError("ethernet.c: invalid source MAC address!\n"); return -3; } - if ((14 + 3 + pdu_len) > MAX_MPDU) { + if ((14 + 3 + pdu_len) > ETHERNET_MPDU_MAX) { LogError("ethernet.c: PDU is too big to send!\n"); return -4; } diff --git a/ports/win32/rs485.c b/ports/win32/rs485.c index 5e8ee77a..01fc1774 100644 --- a/ports/win32/rs485.c +++ b/ports/win32/rs485.c @@ -226,7 +226,7 @@ static void RS485_Configure_Status(void) RS485_Print_Error(); } /* Set the Comm buffer size */ - SetupComm(RS485_Handle, MAX_MPDU, MAX_MPDU); + SetupComm(RS485_Handle, DLMSTP_MPDU_MAX, DLMSTP_MPDU_MAX); /* raise DTR */ if (!EscapeCommFunction(RS485_Handle, SETDTR)) { fprintf(stderr, "Unable to set DTR on %s\n", RS485_Port_Name); diff --git a/ports/win32/rx_fsm.c b/ports/win32/rx_fsm.c index be5a140f..5003e8f9 100644 --- a/ports/win32/rx_fsm.c +++ b/ports/win32/rx_fsm.c @@ -78,8 +78,8 @@ typedef struct pcaprec_hdr_s { /* local port data - shared with RS-485 */ volatile struct mstp_port_struct_t MSTP_Port; -static uint8_t RxBuffer[MAX_MPDU]; -static uint8_t TxBuffer[MAX_MPDU]; +static uint8_t RxBuffer[DLMSTP_MPDU_MAX]; +static uint8_t TxBuffer[DLMSTP_MPDU_MAX]; static uint16_t SilenceTime; #define INCREMENT_AND_LIMIT_UINT16(x) \ { \ diff --git a/ports/xplained/dlmstp.c b/ports/xplained/dlmstp.c index 2f8beb2f..51ba79b8 100644 --- a/ports/xplained/dlmstp.c +++ b/ports/xplained/dlmstp.c @@ -177,7 +177,7 @@ struct mstp_pdu_packet { bool data_expecting_reply; uint8_t destination_mac; uint16_t length; - uint8_t buffer[MAX_MPDU]; + uint8_t buffer[DLMSTP_MPDU_MAX]; }; static volatile struct mstp_pdu_packet PDU_Buffer[MSTP_PDU_PACKET_COUNT]; static RING_BUFFER PDU_Queue; diff --git a/ports/zephyr/bacnet/datalink/ethernet.h b/ports/zephyr/bacnet/datalink/ethernet.h index 96c86088..8944f51e 100644 --- a/ports/zephyr/bacnet/datalink/ethernet.h +++ b/ports/zephyr/bacnet/datalink/ethernet.h @@ -32,8 +32,8 @@ #include "bacnet/npdu.h" /* specific defines for Ethernet */ -#define MAX_HEADER (6+6+2+1+1+1) -#define MAX_MPDU (MAX_HEADER+MAX_PDU) +#define ETHERNET_HEADER_MAX (6+6+2+1+1+1) +#define ETHERNET_MPDU_MAX (ETHERNET_HEADER_MAX+MAX_PDU) /* Unless we explicitly need these remaps to be NOT exposed * (e.g. implementation where we need both bacnet and Zephyr symbols), diff --git a/src/bacnet/basic/bbmd/h_bbmd.c b/src/bacnet/basic/bbmd/h_bbmd.c index 90c32c0a..48c23e19 100644 --- a/src/bacnet/basic/bbmd/h_bbmd.c +++ b/src/bacnet/basic/bbmd/h_bbmd.c @@ -77,7 +77,7 @@ static bool BVLC_NAT_Handling = false; static BACNET_IP_ADDRESS Remote_BBMD; #if BBMD_ENABLED /* local buffer & length for sending */ -static uint8_t BVLC_Buffer[MAX_MPDU]; +static uint8_t BVLC_Buffer[BIP_MPDU_MAX]; static uint16_t BVLC_Buffer_Len; /* Broadcast Distribution Table */ #ifndef MAX_BBMD_ENTRIES @@ -317,7 +317,7 @@ static uint16_t bbmd_forward_npdu( BACNET_IP_ADDRESS *bip_src, uint8_t *npdu, uint16_t npdu_length) { BACNET_IP_ADDRESS broadcast_address = { 0 }; - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[BIP_MPDU_MAX] = { 0 }; uint16_t mtu_len = 0; mtu_len = (uint16_t)bvlc_encode_forwarded_npdu( @@ -345,7 +345,7 @@ static uint16_t bbmd_bdt_forward_npdu(BACNET_IP_ADDRESS *bip_src, uint16_t npdu_length, bool original) { - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[BIP_MPDU_MAX] = { 0 }; uint16_t mtu_len = 0; unsigned i = 0; /* loop counter */ BACNET_IP_ADDRESS bip_dest = { 0 }; @@ -410,7 +410,7 @@ static uint16_t bbmd_fdt_forward_npdu(BACNET_IP_ADDRESS *bip_src, uint16_t npdu_length, bool original) { - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[BIP_MPDU_MAX] = { 0 }; uint16_t mtu_len = 0; unsigned i = 0; /* loop counter */ BACNET_IP_ADDRESS bip_dest = { 0 }; @@ -566,7 +566,7 @@ int bvlc_send_pdu(BACNET_ADDRESS *dest, unsigned pdu_len) { BACNET_IP_ADDRESS bvlc_dest = { 0 }; - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[BIP_MPDU_MAX] = { 0 }; uint16_t mtu_len = 0; #if BBMD_ENABLED BACNET_IP_ADDRESS bip_src = { 0 }; @@ -633,7 +633,7 @@ int bvlc_send_pdu(BACNET_ADDRESS *dest, */ static int bvlc_send_result(BACNET_IP_ADDRESS *dest_addr, uint16_t result_code) { - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[BIP_MPDU_MAX] = { 0 }; uint16_t mtu_len = 0; mtu_len = bvlc_encode_result(&mtu[0], sizeof(mtu), result_code); diff --git a/src/bacnet/basic/bbmd6/h_bbmd6.c b/src/bacnet/basic/bbmd6/h_bbmd6.c index ba13c91b..85326230 100644 --- a/src/bacnet/basic/bbmd6/h_bbmd6.c +++ b/src/bacnet/basic/bbmd6/h_bbmd6.c @@ -67,7 +67,7 @@ static uint8_t BVLC6_Function_Code = BVLC6_RESULT; static BACNET_IP6_ADDRESS Remote_BBMD; #if defined(BACDL_BIP6) && BBMD6_ENABLED /* local buffer & length for sending */ -static uint8_t BVLC6_Buffer[MAX_MPDU]; +static uint8_t BVLC6_Buffer[BIP6_MPDU_MAX]; static uint16_t BVLC6_Buffer_Len; /* Broadcast Distribution Table */ #ifndef MAX_BBMD6_ENTRIES @@ -281,7 +281,7 @@ int bvlc6_send_pdu(BACNET_ADDRESS *dest, unsigned pdu_len) { BACNET_IP6_ADDRESS bvlc_dest = { { 0 } }; - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[BIP6_MPDU_MAX] = { 0 }; uint16_t mtu_len = 0; uint32_t vmac_src = 0; uint32_t vmac_dst = 0; @@ -403,7 +403,7 @@ static void bbmd6_send_forward_npdu(BACNET_IP6_ADDRESS *address, uint8_t *npdu, unsigned int npdu_len) { - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[BIP6_MPDU_MAX] = { 0 }; uint16_t mtu_len = 0; unsigned i = 0; /* loop counter */ @@ -443,7 +443,7 @@ static void bbmd6_send_forward_npdu(BACNET_IP6_ADDRESS *address, static int bvlc6_send_result( BACNET_IP6_ADDRESS *dest_addr, uint32_t vmac_src, uint16_t result_code) { - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[BIP6_MPDU_MAX] = { 0 }; uint16_t mtu_len = 0; mtu_len = bvlc6_encode_result(&mtu[0], sizeof(mtu), vmac_src, result_code); @@ -465,7 +465,7 @@ static int bvlc6_send_result( static int bvlc6_send_address_resolution_ack( BACNET_IP6_ADDRESS *dest_addr, uint32_t vmac_src, uint32_t vmac_dst) { - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[BIP6_MPDU_MAX] = { 0 }; uint16_t mtu_len = 0; mtu_len = bvlc6_encode_address_resolution_ack( @@ -489,7 +489,7 @@ static int bvlc6_send_address_resolution_ack( static int bvlc6_send_virtual_address_resolution_ack( BACNET_IP6_ADDRESS *dest_addr, uint32_t vmac_src, uint32_t vmac_dst) { - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[BIP6_MPDU_MAX] = { 0 }; uint16_t mtu_len = 0; mtu_len = bvlc6_encode_virtual_address_resolution_ack( @@ -1036,7 +1036,7 @@ int bvlc6_register_with_bbmd(BACNET_IP6_ADDRESS *bbmd_addr, uint32_t vmac_src, uint16_t time_to_live_seconds) { - uint8_t mtu[MAX_MPDU] = { 0 }; + uint8_t mtu[BIP6_MPDU_MAX] = { 0 }; uint16_t mtu_len = 0; mtu_len = bvlc6_encode_register_foreign_device( diff --git a/src/bacnet/datalink/arcnet.h b/src/bacnet/datalink/arcnet.h index db8fe7b9..3860fb79 100644 --- a/src/bacnet/datalink/arcnet.h +++ b/src/bacnet/datalink/arcnet.h @@ -32,8 +32,8 @@ #include "bacnet/npdu.h" /* specific defines for ARCNET */ -#define MAX_HEADER (1+1+2+2+1+1+1+1) -#define MAX_MPDU (MAX_HEADER+MAX_PDU) +#define ARCNET_HEADER_MAX (1+1+2+2+1+1+1+1) +#define ARCNET_MPDU_MAX (ARCNET_HEADER_MAX+MAX_PDU) #ifdef __cplusplus extern "C" { diff --git a/src/bacnet/datalink/bip.h b/src/bacnet/datalink/bip.h index 0ae20cbe..4fe4b26e 100644 --- a/src/bacnet/datalink/bip.h +++ b/src/bacnet/datalink/bip.h @@ -35,8 +35,6 @@ /* specific defines for BACnet/IP over Ethernet */ #define BIP_HEADER_MAX (1 + 1 + 2) #define BIP_MPDU_MAX (BIP_HEADER_MAX + MAX_PDU) -/* for legacy demo applications */ -#define MAX_MPDU BIP_MPDU_MAX #ifdef __cplusplus extern "C" { diff --git a/src/bacnet/datalink/bip6.h b/src/bacnet/datalink/bip6.h index 44d29737..52d8f8c2 100644 --- a/src/bacnet/datalink/bip6.h +++ b/src/bacnet/datalink/bip6.h @@ -24,8 +24,6 @@ /* specific defines for BACnet/IP over Ethernet */ #define BIP6_HEADER_MAX (1 + 1 + 2) #define BIP6_MPDU_MAX (BIP6_HEADER_MAX+MAX_PDU) -/* for legacy demo applications */ -#define MAX_MPDU BIP6_MPDU_MAX #ifdef __cplusplus extern "C" { diff --git a/src/bacnet/datalink/datalink.c b/src/bacnet/datalink/datalink.c index f840efb2..d581fa2f 100644 --- a/src/bacnet/datalink/datalink.c +++ b/src/bacnet/datalink/datalink.c @@ -37,104 +37,264 @@ #if defined(BACDL_ALL) || defined FOR_DOXYGEN #include "bacnet/datalink/ethernet.h" #include "bacnet/datalink/bip.h" -#include "bacnet/datalink/bip6.h" #include "bacnet/datalink/bvlc.h" +#include "bacnet/basic/bbmd/h_bbmd.h" +#include "bacnet/datalink/bip6.h" +#include "bacnet/datalink/bvlc6.h" +#include "bacnet/basic/bbmd6/h_bbmd6.h" #include "bacnet/datalink/arcnet.h" #include "bacnet/datalink/dlmstp.h" #include -/* Function pointers - point to your datalink */ -/** Function template to Initialize the DataLink services at the given - interface. - * @ingroup DLTemplates - * - * @note For Linux, ifname is eth0, ath0, arc0, ttyS0, and others. - For Windows, ifname is the COM port or dotted ip address of the - interface. - - * @param ifname [in] The named interface to use for the network layer. - * @return True if the interface is successfully initialized, - * else False if the initialization fails. - */ -bool (*datalink_init)(char *ifname); - -/** Function template to send a packet via the DataLink. - * @ingroup DLTemplates - * - * @param dest [in] Destination address. - * @param npdu_data [in] The NPDU header (Network) information. - * @param pdu [in] Buffer of data to be sent - may be null. - * @param pdu_len [in] Number of bytes in the pdu buffer. - * @return Number of bytes sent on success, negative number on failure. - */ -int (*datalink_send_pdu)(BACNET_ADDRESS *dest, - BACNET_NPDU_DATA *npdu_data, - uint8_t *pdu, - unsigned pdu_len); - -uint16_t (*datalink_receive)( - BACNET_ADDRESS *src, uint8_t *pdu, uint16_t max_pdu, unsigned timeout); - -/** Function template to close the DataLink services and perform any cleanup. - * @ingroup DLTemplates - */ -void (*datalink_cleanup)(void); - -void (*datalink_get_broadcast_address)(BACNET_ADDRESS *dest); - -void (*datalink_get_my_address)(BACNET_ADDRESS *my_address); +static enum { + DATALINK_NONE = 0, + DATALINK_ARCNET, + DATALINK_ETHERNET, + DATALINK_BIP, + DATALINK_BIP6, + DATALINK_MSTP +} Datalink_Transport; void datalink_set(char *datalink_string) { if (strcasecmp("bip", datalink_string) == 0) { - datalink_init = bip_init; - datalink_send_pdu = bip_send_pdu; - datalink_receive = bip_receive; - datalink_cleanup = bip_cleanup; - datalink_get_broadcast_address = bip_get_broadcast_address; - datalink_get_my_address = bip_get_my_address; - } else if (strcasecmp("bvlc", datalink_string) == 0) { - datalink_init = bip_init; - datalink_send_pdu = bvlc_send_pdu; - datalink_receive = bvlc_receive; - datalink_cleanup = bip_cleanup; - datalink_get_broadcast_address = bip_get_broadcast_address; - datalink_get_my_address = bip_get_my_address; + Datalink_Transport = DATALINK_BIP; } else if (strcasecmp("bip6", datalink_string) == 0) { - datalink_init = bip6_init; - datalink_send_pdu = bip6_send_pdu; - datalink_receive = bip6_receive; - datalink_cleanup = bip6_cleanup; - datalink_get_broadcast_address = bip6_get_broadcast_address; - datalink_get_my_address = bip6_get_my_address; - } else if (strcasecmp("bvlc6", datalink_string) == 0) { - datalink_init = bip6_init; - datalink_send_pdu = bvlc6_send_pdu; - datalink_receive = bvlc6_receive; - datalink_cleanup = bip6_cleanup; - datalink_get_broadcast_address = bip6_get_broadcast_address; - datalink_get_my_address = bip6_get_my_address; + Datalink_Transport = DATALINK_BIP6; } else if (strcasecmp("ethernet", datalink_string) == 0) { - datalink_init = ethernet_init; - datalink_send_pdu = ethernet_send_pdu; - datalink_receive = ethernet_receive; - datalink_cleanup = ethernet_cleanup; - datalink_get_broadcast_address = ethernet_get_broadcast_address; - datalink_get_my_address = ethernet_get_my_address; + Datalink_Transport = DATALINK_ETHERNET; } else if (strcasecmp("arcnet", datalink_string) == 0) { - datalink_init = arcnet_init; - datalink_send_pdu = arcnet_send_pdu; - datalink_receive = arcnet_receive; - datalink_cleanup = arcnet_cleanup; - datalink_get_broadcast_address = arcnet_get_broadcast_address; - datalink_get_my_address = arcnet_get_my_address; + Datalink_Transport = DATALINK_ARCNET; } else if (strcasecmp("mstp", datalink_string) == 0) { - datalink_init = dlmstp_init; - datalink_send_pdu = dlmstp_send_pdu; - datalink_receive = dlmstp_receive; - datalink_cleanup = dlmstp_cleanup; - datalink_get_broadcast_address = dlmstp_get_broadcast_address; - datalink_get_my_address = dlmstp_get_my_address; + Datalink_Transport = DATALINK_MSTP; + } else if (strcasecmp("none", datalink_string) == 0) { + Datalink_Transport = DATALINK_NONE; + } +} + +bool datalink_init(char *ifname) +{ + bool status = false; + + switch (Datalink_Transport) { + case DATALINK_NONE: + status = true; + break; + case DATALINK_ARCNET: + status = arcnet_init(ifname); + break; + case DATALINK_ETHERNET: + status = ethernet_init(ifname); + break; + case DATALINK_BIP: + status = bip_init(ifname); + break; + case DATALINK_BIP6: + status = bip6_init(ifname); + break; + case DATALINK_MSTP: + status = dlmstp_init(ifname); + break; + default: + break; + } + + return status; +} + +int datalink_send_pdu(BACNET_ADDRESS *dest, + BACNET_NPDU_DATA *npdu_data, + uint8_t *pdu, + unsigned pdu_len) +{ + int bytes = 0; + + switch (Datalink_Transport) { + case DATALINK_NONE: + bytes = pdu_len; + break; + case DATALINK_ARCNET: + bytes = arcnet_send_pdu( + dest, npdu_data, pdu, pdu_len); + break; + case DATALINK_ETHERNET: + bytes = ethernet_send_pdu( + dest, npdu_data, pdu, pdu_len); + break; + case DATALINK_BIP: + bytes = bip_send_pdu( + dest, npdu_data, pdu, pdu_len); + break; + case DATALINK_BIP6: + bytes = bip6_send_pdu( + dest, npdu_data, pdu, pdu_len); + break; + case DATALINK_MSTP: + bytes = dlmstp_send_pdu( + dest, npdu_data, pdu, pdu_len); + break; + default: + break; + } + + return bytes; +} + +uint16_t datalink_receive( + BACNET_ADDRESS *src, uint8_t *pdu, uint16_t max_pdu, unsigned timeout) +{ + uint16_t bytes = 0; + + switch (Datalink_Transport) { + case DATALINK_NONE: + break; + case DATALINK_ARCNET: + bytes = arcnet_receive( + src, pdu, max_pdu, timeout); + break; + case DATALINK_ETHERNET: + bytes = ethernet_receive( + src, pdu, max_pdu, timeout); + break; + case DATALINK_BIP: + bytes = bip_receive( + src, pdu, max_pdu, timeout); + break; + case DATALINK_BIP6: + bytes = bip6_receive( + src, pdu, max_pdu, timeout); + break; + case DATALINK_MSTP: + bytes = dlmstp_receive( + src, pdu, max_pdu, timeout); + break; + default: + break; + } + + return bytes; +} + +void datalink_cleanup(void) +{ + switch (Datalink_Transport) { + case DATALINK_NONE: + break; + case DATALINK_ARCNET: + arcnet_cleanup(); + break; + case DATALINK_ETHERNET: + ethernet_cleanup(); + break; + case DATALINK_BIP: + bip_cleanup(); + break; + case DATALINK_BIP6: + bip6_cleanup(); + break; + case DATALINK_MSTP: + dlmstp_cleanup(); + break; + default: + break; + } +} + +void datalink_get_broadcast_address(BACNET_ADDRESS *dest) +{ + switch (Datalink_Transport) { + case DATALINK_NONE: + break; + case DATALINK_ARCNET: + arcnet_get_broadcast_address(dest); + break; + case DATALINK_ETHERNET: + ethernet_get_broadcast_address(dest); + break; + case DATALINK_BIP: + bip_get_broadcast_address(dest); + break; + case DATALINK_BIP6: + bip6_get_broadcast_address(dest); + break; + case DATALINK_MSTP: + dlmstp_get_broadcast_address(dest); + break; + default: + break; + } +} + +void datalink_get_my_address(BACNET_ADDRESS *my_address) +{ + switch (Datalink_Transport) { + case DATALINK_NONE: + break; + case DATALINK_ARCNET: + arcnet_get_my_address(my_address); + break; + case DATALINK_ETHERNET: + ethernet_get_my_address(my_address); + break; + case DATALINK_BIP: + bip_get_my_address(my_address); + break; + case DATALINK_BIP6: + bip6_get_my_address(my_address); + break; + case DATALINK_MSTP: + dlmstp_get_my_address(my_address); + break; + default: + break; + } +} + +void datalink_set_interface(char *ifname) +{ + switch (Datalink_Transport) { + case DATALINK_NONE: + (void)ifname; + break; + case DATALINK_ARCNET: + (void)ifname; + break; + case DATALINK_ETHERNET: + (void)ifname; + break; + case DATALINK_BIP: + (void)ifname; + break; + case DATALINK_BIP6: + (void)ifname; + break; + case DATALINK_MSTP: + (void)ifname; + break; + default: + break; + } +} + +void datalink_maintenance_timer(uint16_t seconds) +{ + switch (Datalink_Transport) { + case DATALINK_NONE: + break; + case DATALINK_ARCNET: + break; + case DATALINK_ETHERNET: + break; + case DATALINK_BIP: + bvlc_maintenance_timer(seconds); + break; + case DATALINK_BIP6: + bvlc6_maintenance_timer(seconds); + break; + case DATALINK_MSTP: + break; + default: + break; } } #endif diff --git a/src/bacnet/datalink/datalink.h b/src/bacnet/datalink/datalink.h index 57ac27d9..6cf2c7ef 100644 --- a/src/bacnet/datalink/datalink.h +++ b/src/bacnet/datalink/datalink.h @@ -30,6 +30,7 @@ #if defined(BACDL_ETHERNET) #include "bacnet/datalink/ethernet.h" +#define MAX_MPDU ETHERNET_MPDU_MAX #define datalink_init ethernet_init #define datalink_send_pdu ethernet_send_pdu @@ -41,6 +42,7 @@ #elif defined(BACDL_ARCNET) #include "bacnet/datalink/arcnet.h" +#define MAX_MPDU ARCNET_MPDU_MAX #define datalink_init arcnet_init #define datalink_send_pdu arcnet_send_pdu @@ -52,6 +54,7 @@ #elif defined(BACDL_MSTP) #include "bacnet/datalink/dlmstp.h" +#define MAX_MPDU DLMSTP_MPDU_MAX #define datalink_init dlmstp_init #define datalink_send_pdu dlmstp_send_pdu @@ -65,6 +68,7 @@ #include "bacnet/datalink/bip.h" #include "bacnet/datalink/bvlc.h" #include "bacnet/basic/bbmd/h_bbmd.h" +#define MAX_MPDU BIP_MPDU_MAX #define datalink_init bip_init #define datalink_send_pdu bip_send_pdu @@ -85,6 +89,8 @@ void routed_get_my_address( #include "bacnet/datalink/bip6.h" #include "bacnet/datalink/bvlc6.h" #include "bacnet/basic/bbmd6/h_bbmd6.h" +#define MAX_MPDU BIP6_MPDU_MAX + #define datalink_init bip6_init #define datalink_send_pdu bip6_send_pdu #define datalink_receive bip6_receive diff --git a/src/bacnet/datalink/dlmstp.h b/src/bacnet/datalink/dlmstp.h index 085cbfd8..db97d1d0 100644 --- a/src/bacnet/datalink/dlmstp.h +++ b/src/bacnet/datalink/dlmstp.h @@ -33,15 +33,15 @@ /* defines specific to MS/TP */ /* preamble+type+dest+src+len+crc8+crc16 */ -#define MAX_HEADER (2+1+1+1+2+1+2) -#define MAX_MPDU (MAX_HEADER+MAX_PDU) +#define DLMSTP_HEADER_MAX (2+1+1+1+2+1+2) +#define DLMSTP_MPDU_MAX (DLMSTP_HEADER_MAX+MAX_PDU) typedef struct dlmstp_packet { bool ready; /* true if ready to be sent or received */ BACNET_ADDRESS address; /* source address */ uint8_t frame_type; /* type of message */ uint16_t pdu_len; /* packet length */ - uint8_t pdu[MAX_MPDU]; /* packet */ + uint8_t pdu[DLMSTP_MPDU_MAX]; /* packet */ } DLMSTP_PACKET; #ifdef __cplusplus @@ -135,12 +135,12 @@ extern "C" { bool dlmstp_send_pdu_queue_empty(void); BACNET_STACK_EXPORT bool dlmstp_send_pdu_queue_full(void); - + BACNET_STACK_EXPORT uint8_t dlmstp_max_info_frames_limit(void); BACNET_STACK_EXPORT uint8_t dlmstp_max_master_limit(void); - + #ifdef __cplusplus } diff --git a/src/bacnet/datalink/ethernet.h b/src/bacnet/datalink/ethernet.h index 13cf03df..f4ae4ea1 100644 --- a/src/bacnet/datalink/ethernet.h +++ b/src/bacnet/datalink/ethernet.h @@ -32,8 +32,8 @@ #include "bacnet/npdu.h" /* specific defines for Ethernet */ -#define MAX_HEADER (6+6+2+1+1+1) -#define MAX_MPDU (MAX_HEADER+MAX_PDU) +#define ETHERNET_HEADER_MAX (6+6+2+1+1+1) +#define ETHERNET_MPDU_MAX (ETHERNET_HEADER_MAX+MAX_PDU) #ifdef __cplusplus extern "C" {