diff --git a/ports/atmega168/Makefile b/ports/atmega168/Makefile
index 61ff9630..224cd3ba 100644
--- a/ports/atmega168/Makefile
+++ b/ports/atmega168/Makefile
@@ -3,8 +3,8 @@
###############################################################################
## General Flags
-MCU = atmega168
-AVRDUDE_MCU = m168
+MCU = atmega328
+AVRDUDE_MCU = m328
TARGET = bacnet
## Tools
CC = avr-gcc
@@ -50,6 +50,7 @@ CSRC = main.c \
# common demo files needed
BASICSRC = $(BACNET_BASIC)/tsm/tsm.c \
$(BACNET_BASIC)/npdu/h_npdu.c \
+ $(BACNET_BASIC)/sys/bigend.c \
$(BACNET_BASIC)/service/s_iam.c \
$(BACNET_BASIC)/service/h_noserv.c
diff --git a/ports/atmega168/bacnet.atsln b/ports/atmega168/bacnet.atsln
new file mode 100644
index 00000000..a6e9df0e
--- /dev/null
+++ b/ports/atmega168/bacnet.atsln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Atmel Studio Solution File, Format Version 11.00
+VisualStudioVersion = 14.0.23107.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "bacnet", "bacnet.cproj", "{1CEFD571-4B50-48FD-B75E-0E968EBBD698}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|AVR = Debug|AVR
+ Release|AVR = Release|AVR
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1CEFD571-4B50-48FD-B75E-0E968EBBD698}.Debug|AVR.ActiveCfg = Debug|AVR
+ {1CEFD571-4B50-48FD-B75E-0E968EBBD698}.Debug|AVR.Build.0 = Debug|AVR
+ {1CEFD571-4B50-48FD-B75E-0E968EBBD698}.Release|AVR.ActiveCfg = Release|AVR
+ {1CEFD571-4B50-48FD-B75E-0E968EBBD698}.Release|AVR.Build.0 = Release|AVR
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/ports/atmega168/bacnet.cproj b/ports/atmega168/bacnet.cproj
new file mode 100644
index 00000000..343a69d2
--- /dev/null
+++ b/ports/atmega168/bacnet.cproj
@@ -0,0 +1,285 @@
+
+
+
+ 2.0
+ 7.0
+ com.Atmel.AVRGCC8.C
+ {1cefd571-4b50-48fd-b75e-0e968ebbd698}
+ ATmega328
+ mega
+ Executable
+ C
+ $(MSBuildProjectName)
+ .elf
+ $(MSBuildProjectDirectory)\$(Configuration)
+ BACnet Atmel ATmega328
+ BACnet Atmel ATmega328
+ BACnet Atmel ATmega328
+ Native
+ true
+ false
+ exception_table
+ 0
+ true
+ 0x20000000
+ true
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ 0
+
+
+
+
+
+
+ -mmcu=atmega328 -B "%24(PackRepoDir)\atmel\ATmega_DFP\1.3.300\gcc\dev\atmega328"
+ True
+ True
+ True
+ True
+ False
+
+ BACDL_MSTP
+ MAX_APDU=50
+ MAX_TSM_TRANSACTIONS=0
+ BACAPP_REAL
+ BACAPP_UNSIGNED
+ BACAPP_ENUMERATED
+ BACAPP_CHARACTER_STRING
+ BACAPP_OBJECT_ID
+ WRITE_PROPERTY
+ BOARD=USER_BOARD
+ NDEBUG
+
+
+ ..
+ ../../../src
+ %24(PackRepoDir)\atmel\ATmega_DFP\1.3.300\include
+ ../../../ports/atmega168
+
+ -fdata-sections
+ True
+ True
+ True
+ -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -Wno-switch
+ libm
+ -Wl,--relax
+ -mrelax -DBOARD=USER_BOARD
+ %24(PackRepoDir)\atmel\ATmega_DFP\1.3.300\include../src/ASF/common/boards/user_board../src/ASF/common/boards../src/ASF/mega/utils/preprocessor../src/ASF/mega/utils../src/ASF/common/utils../src../src/config
+ Optimize for size (-Os)
+
+
+ False
+ all
+ clean
+ Makefile
+
+
+
+
+ -mmcu=atmega328 -B "%24(PackRepoDir)\atmel\ATmega_DFP\1.3.300\gcc\dev\atmega328"
+ True
+ True
+ True
+ True
+ False
+
+ BACDL_MSTP
+ MAX_APDU=50
+ MAX_TSM_TRANSACTIONS=0
+ BACAPP_REAL
+ BACAPP_UNSIGNED
+ BACAPP_ENUMERATED
+ BACAPP_CHARACTER_STRING
+ BACAPP_OBJECT_ID
+ WRITE_PROPERTY
+ BOARD=USER_BOARD
+ DEBUG
+
+ ..../../../src%24(PackRepoDir)\atmel\ATmega_DFP\1.3.300\include
+ -fdata-sections
+ True
+ True
+ True
+ -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax -Wno-switch
+ libm
+ -Wl,--relax
+ -mrelax -DBOARD=USER_BOARD
+ %24(PackRepoDir)\atmel\ATmega_DFP\1.3.300\include../src/ASF/common/boards/user_board../src/ASF/common/boards../src/ASF/mega/utils/preprocessor../src/ASF/mega/utils../src/ASF/common/utils../src../src/config
+ Optimize (-O1)
+ Maximum (-g3)
+ Default (-Wa,-g)
+
+
+ False
+ all
+ clean
+ Makefile
+
+
+
+ compile
+ BACnet Handlers\bigend.c
+
+
+ compile
+ BACnet Handlers\h_npdu.c
+
+
+ compile
+ BACnet Handlers\h_noserv.c
+
+
+ compile
+ BACnet Handlers\s_iam.c
+
+
+ compile
+ BACnet Handlers\tsm.c
+
+
+ compile
+ BACnet Handlers\crc.c
+
+
+ compile
+ apdu.c
+
+
+ compile
+ av.c
+
+
+ compile
+ bv.c
+
+
+ compile
+ device.c
+
+
+ compile
+ dlmstp.c
+
+
+ compile
+ h_rp.c
+
+
+ compile
+ h_whois.c
+
+
+ compile
+ h_wp.c
+
+
+ compile
+ main.c
+
+
+ compile
+ rs485.c
+
+
+ compile
+ stack.c
+
+
+ compile
+ timer.c
+
+
+ compile
+ BACnet Core\abort.c
+
+
+ compile
+ BACnet Core\bacapp.c
+
+
+ compile
+ BACnet Core\bacdcode.c
+
+
+ compile
+ BACnet Core\bacerror.c
+
+
+ compile
+ BACnet Core\bacint.c
+
+
+ compile
+ BACnet Core\bacreal.c
+
+
+ compile
+ BACnet Core\bacstr.c
+
+
+ compile
+ BACnet Core\iam.c
+
+
+ compile
+ BACnet Core\npdu.c
+
+
+ compile
+ BACnet Core\reject.c
+
+
+ compile
+ BACnet Core\rp.c
+
+
+ compile
+ BACnet Core\whois.c
+
+
+ compile
+ BACnet Core\wp.c
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ports/atmega168/bacnet.ewp b/ports/atmega168/bacnet.ewp
index fbcc6cda..06a6a833 100644
--- a/ports/atmega168/bacnet.ewp
+++ b/ports/atmega168/bacnet.ewp
@@ -1,2238 +1,3300 @@
-
-
+
- 2
-
- Debug
-
- AVR
-
- 1
-
- General
- 12
-
- 10
- 1
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ICCAVR
- 6
-
- 17
- 1
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- AAVR
- 5
-
- 11
- 1
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CUSTOM
- 3
-
-
-
- 0
-
-
-
- BICOMP
- 0
-
-
-
- BUILDACTION
- 1
-
-
-
-
-
-
- XLINK
- 3
-
- 16
- 1
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XAR
- 2
-
- 0
- 1
- 1
-
-
-
-
-
-
- BILINK
- 0
-
-
-
-
- Release
-
- AVR
-
- 0
-
- General
- 12
-
- 10
- 1
+ 3
+
+ Release-ATmega328
+
+ AVR
+
0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ICCAVR
- 6
-
- 17
- 1
+
+ General
+ 12
+
+ 10
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ICCAVR
+ 6
+
+ 17
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AAVR
+ 5
+
+ 11
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CUSTOM
+ 3
+
+
+
+ 0
+
+
+
+ BICOMP
+ 0
+
+
+
+ BUILDACTION
+ 1
+
+
+
+
+
+
+ XLINK
+ 3
+
+ 16
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XAR
+ 2
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+ BILINK
+ 0
+
+
+
+
+ Release-ATmega168
+
+ AVR
+
0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- AAVR
- 5
-
- 11
- 1
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CUSTOM
- 3
-
-
-
- 0
-
-
-
- BICOMP
- 0
-
-
-
- BUILDACTION
- 1
-
-
-
-
-
-
- XLINK
- 3
-
- 16
- 1
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XAR
- 2
-
- 0
- 1
- 0
-
-
-
-
-
-
- BILINK
- 0
-
-
-
-
- BACnet-Basic
+
+ General
+ 12
+
+ 10
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ICCAVR
+ 6
+
+ 17
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AAVR
+ 5
+
+ 11
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CUSTOM
+ 3
+
+
+
+ 0
+
+
+
+ BICOMP
+ 0
+
+
+
+ BUILDACTION
+ 1
+
+
+
+
+
+
+ XLINK
+ 3
+
+ 16
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XAR
+ 2
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+ BILINK
+ 0
+
+
+
+
+ Debug-ATmega328
+
+ AVR
+
+ 1
+
+ General
+ 12
+
+ 10
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ICCAVR
+ 6
+
+ 17
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AAVR
+ 5
+
+ 11
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CUSTOM
+ 3
+
+
+
+ 0
+
+
+
+ BICOMP
+ 0
+
+
+
+ BUILDACTION
+ 1
+
+
+
+
+
+
+ XLINK
+ 3
+
+ 16
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XAR
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+ BILINK
+ 0
+
+
+
+
+ BACnet-Basic
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\sys\bigend.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\datalink\crc.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\service\h_noserv.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\npdu\h_npdu.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\service\s_iam.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\tsm\tsm.c
+
+
+
+ BACnet-Core
+
+ $PROJ_DIR$\..\..\src\bacnet\abort.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\bacapp.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\bacdcode.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\bacerror.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\bacint.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\bacreal.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\bacstr.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\iam.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\npdu.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\reject.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\rp.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\whois.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\wp.c
+
+
- $PROJ_DIR$\..\..\src\bacnet\datalink\crc.c
+ $PROJ_DIR$\apdu.c
- $PROJ_DIR$\..\..\src\bacnet\basic\service\h_noserv.c
+ $PROJ_DIR$\av.c
- $PROJ_DIR$\..\..\src\bacnet\basic\npdu\h_npdu.c
+ $PROJ_DIR$\bv.c
- $PROJ_DIR$\..\..\src\bacnet\basic\service\s_iam.c
+ $PROJ_DIR$\device.c
- $PROJ_DIR$\..\..\src\bacnet\basic\tsm\tsm.c
-
-
-
- BACnet-Core
-
- $PROJ_DIR$\..\..\src\bacnet\abort.c
+ $PROJ_DIR$\dlmstp.c
- $PROJ_DIR$\..\..\src\bacnet\bacapp.c
+ $PROJ_DIR$\h_rp.c
- $PROJ_DIR$\..\..\src\bacnet\bacdcode.c
+ $PROJ_DIR$\h_whois.c
- $PROJ_DIR$\..\..\src\bacnet\bacerror.c
+ $PROJ_DIR$\h_wp.c
- $PROJ_DIR$\..\..\src\bacnet\bacint.c
+ $PROJ_DIR$\hardware.h
- $PROJ_DIR$\..\..\src\bacnet\bacreal.c
+ $PROJ_DIR$\iar2gcc.h
- $PROJ_DIR$\..\..\src\bacnet\bacstr.c
+ $PROJ_DIR$\main.c
- $PROJ_DIR$\..\..\src\bacnet\iam.c
+ $PROJ_DIR$\rs485.c
- $PROJ_DIR$\..\..\src\bacnet\npdu.c
+ $PROJ_DIR$\rs485.h
- $PROJ_DIR$\..\..\src\bacnet\reject.c
+ $PROJ_DIR$\stack.c
- $PROJ_DIR$\..\..\src\bacnet\rp.c
+ $PROJ_DIR$\timer.c
- $PROJ_DIR$\..\..\src\bacnet\whois.c
+ $PROJ_DIR$\timer.h
-
- $PROJ_DIR$\..\..\src\bacnet\wp.c
-
-
-
- $PROJ_DIR$\apdu.c
-
-
- $PROJ_DIR$\av.c
-
-
- $PROJ_DIR$\bv.c
-
-
- $PROJ_DIR$\device.c
-
-
- $PROJ_DIR$\dlmstp.c
-
-
- $PROJ_DIR$\h_rp.c
-
-
- $PROJ_DIR$\h_whois.c
-
-
- $PROJ_DIR$\h_wp.c
-
-
- $PROJ_DIR$\hardware.h
-
-
- $PROJ_DIR$\iar2gcc.h
-
-
- $PROJ_DIR$\main.c
-
-
- $PROJ_DIR$\rs485.c
-
-
- $PROJ_DIR$\rs485.h
-
-
- $PROJ_DIR$\stack.c
-
-
- $PROJ_DIR$\timer.c
-
-
- $PROJ_DIR$\timer.h
-
-
-
diff --git a/ports/atmega168/bv.c b/ports/atmega168/bv.c
index 88c4ae6d..79168009 100644
--- a/ports/atmega168/bv.c
+++ b/ports/atmega168/bv.c
@@ -216,9 +216,9 @@ bool Binary_Value_Write_Property(BACNET_WRITE_PROPERTY_DATA *wp_data)
However, if Out of Service is TRUE, then don't set the
physical output. */
if (Present_Value[0] == BINARY_ACTIVE) {
- LED_GREEN_ON();
+ /* GPIO - turn ON */
} else {
- LED_GREEN_OFF();
+ /* GPIO - turn OFF */
}
status = true;
} else {
diff --git a/ports/atmega168/h_rp.c b/ports/atmega168/h_rp.c
index f87b73f6..a5601128 100644
--- a/ports/atmega168/h_rp.c
+++ b/ports/atmega168/h_rp.c
@@ -30,6 +30,7 @@
#include "bacnet/config.h"
#include "bacnet/basic/tsm/tsm.h"
#include "bacnet/datalink/datalink.h"
+#include "bacnet/basic/services.h"
#include "bacnet/bacdef.h"
#include "bacnet/bacdcode.h"
#include "bacnet/bacerror.h"
@@ -44,7 +45,7 @@
/* Encodes the property APDU and returns the length,
or sets the error, and returns -1 */
-int Encode_Property_APDU(uint8_t *apdu, BACNET_READ_PROPERTY_DATA *rpdata)
+static int Encode_Property_APDU(uint8_t *apdu, BACNET_READ_PROPERTY_DATA *rpdata)
{
int apdu_len = -1;
diff --git a/ports/atmega168/h_wp.c b/ports/atmega168/h_wp.c
index 409a74c6..5c7d524c 100644
--- a/ports/atmega168/h_wp.c
+++ b/ports/atmega168/h_wp.c
@@ -30,6 +30,7 @@
#include "bacnet/config.h"
#include "bacnet/datalink/datalink.h"
#include "bacnet/basic/tsm/tsm.h"
+#include "bacnet/basic/services.h"
#include "bacnet/bacdef.h"
#include "bacnet/bacdcode.h"
#include "bacnet/bacerror.h"
diff --git a/ports/atmega168/hardware.h b/ports/atmega168/hardware.h
index d69f2f23..c41a7e56 100644
--- a/ports/atmega168/hardware.h
+++ b/ports/atmega168/hardware.h
@@ -31,24 +31,13 @@
#endif
#if defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ASM__)
-#include
+#include
#else
-#if !defined(__AVR_ATmega168__)
-#error Firmware is configured for ATmega168 only (-mmcu=atmega168)
+#if !defined(__AVR_ATmega328__)
+#error Firmware is configured for ATmega328 only (-mmcu=atmega328)
#endif
#endif
#include "iar2gcc.h"
#include "bacnet/bits.h"
-#define LED_NPDU_INIT() BIT_SET(DDRD, DDD5)
-#define LED_NPDU_ON() BIT_CLEAR(PORTD, PD5)
-#define LED_NPDU_OFF() BIT_SET(PORTD, PD5)
-/* #define LED_NPDU PORTD_Bit5 */
-/* #define LED_NPDU_OFF() {LED_NPDU = false;} */
-/* #define LED_NPDU_ON() {LED_NPDU = true;} */
-
-#define LED_GREEN_INIT() BIT_SET(DDRD, DDD4)
-#define LED_GREEN_ON() BIT_CLEAR(PORTD, PD4)
-#define LED_GREEN_OFF() BIT_SET(PORTD, PD4)
-
#endif
diff --git a/ports/atmega168/iar2gcc.h b/ports/atmega168/iar2gcc.h
index 47ae6484..3c68b8d5 100644
--- a/ports/atmega168/iar2gcc.h
+++ b/ports/atmega168/iar2gcc.h
@@ -55,6 +55,27 @@ static inline void _delay_us(
__delay_cycles(F_CPU / 1000000UL);
} while (microseconds--);
}
+
+#if (__VER__ > 700)
+#define DDA0 DDRA0
+#define DDA1 DDRA1
+#define DDA2 DDRA2
+#define DDA3 DDRA3
+#define DDA4 DDRA4
+#define DDA5 DDRA5
+#define DDA6 DDRA6
+#define DDA7 DDRA7
+
+#define DDD0 DDRD0
+#define DDD1 DDRD1
+#define DDD2 DDRD2
+#define DDD3 DDRD3
+#define DDD4 DDRD4
+#define DDD5 DDRD5
+#define DDD6 DDRD6
+#define DDD7 DDRD7
+#endif
+
#endif
/* Input/Output Registers */
diff --git a/ports/atmega168/main.c b/ports/atmega168/main.c
index 0595a71f..44aaf1c5 100644
--- a/ports/atmega168/main.c
+++ b/ports/atmega168/main.c
@@ -30,6 +30,7 @@
#include "rs485.h"
#include "bacnet/datalink/datalink.h"
#include "bacnet/npdu.h"
+#include "bacnet/dcc.h"
#include "bacnet/basic/services.h"
#include "bacnet/basic/tsm/tsm.h"
#include "bacnet/iam.h"
@@ -88,14 +89,6 @@ static void init(void)
/* Configure Specialized Hardware */
RS485_Initialize();
- /* configure one LED for NPDU indication */
- /* default: off, output */
- LED_NPDU_OFF();
- LED_NPDU_INIT();
- /* Configure Software LED */
- LED_GREEN_INIT();
- LED_GREEN_OFF();
-
/* Configure Timer0 for millisecond timer */
Timer_Initialize();
@@ -108,7 +101,6 @@ static void task_milliseconds(void)
while (Timer_Milliseconds) {
Timer_Milliseconds--;
/* add other millisecond timer tasks here */
- RS485_LED_Timers();
}
}
@@ -166,9 +158,7 @@ int main(void)
/* BACnet handling */
pdu_len = datalink_receive(&src, &PDUBuffer[0], MAX_MPDU, 0);
if (pdu_len) {
- LED_NPDU_ON();
npdu_handler(&src, &PDUBuffer[0], pdu_len);
- LED_NPDU_OFF();
}
}
}
diff --git a/ports/atmega168/rs485.c b/ports/atmega168/rs485.c
index 4716497a..953a01d1 100644
--- a/ports/atmega168/rs485.c
+++ b/ports/atmega168/rs485.c
@@ -31,16 +31,12 @@
#include
#include
#include
-/*#include "bacnet/datalink/mstp.h" */
/* This file has been customized for use with ATMEGA168 */
#include "hardware.h"
+#include "rs485.h"
#include "timer.h"
-/* Timers for turning off the TX,RX LED indications */
-static uint8_t LED1_Off_Timer;
-static uint8_t LED3_Off_Timer;
-
/* baud rate */
static uint32_t RS485_Baud = 9600;
@@ -70,11 +66,6 @@ void RS485_Initialize(void)
/* Set port bit as Output - initially receiving */
BIT_CLEAR(PORTD, PD2);
BIT_SET(DDRD, DDD2);
- /* Configure Transmit and Receive LEDs - initially off */
- BIT_SET(PORTD, PD6);
- BIT_SET(PORTD, PD7);
- BIT_SET(DDRD, DDD6);
- BIT_SET(DDRD, DDD7);
return;
}
@@ -165,62 +156,14 @@ void RS485_Turnaround_Delay(void)
BIT_SET(UCSR0A, TXC0);
}
-/****************************************************************************
- * DESCRIPTION: Timers for delaying the LED indicators going off
- * RETURN: none
- * ALGORITHM: none
- * NOTES: expected to be called once a millisecond
- *****************************************************************************/
-void RS485_LED_Timers(void)
-{
- if (LED1_Off_Timer) {
- LED1_Off_Timer--;
- if (LED1_Off_Timer == 0) {
- BIT_SET(PORTD, PD6);
- }
- }
- if (LED3_Off_Timer) {
- LED3_Off_Timer--;
- if (LED3_Off_Timer == 0) {
- BIT_SET(PORTD, PD7);
- }
- }
-}
-
-/****************************************************************************
- * DESCRIPTION: Turn on the LED, and set the off timer to turn it off
- * RETURN: none
- * ALGORITHM: none
- * NOTES: none
- *****************************************************************************/
-static void RS485_LED1_On(void)
-{
- BIT_CLEAR(PORTD, PD6);
- LED1_Off_Timer = 20;
-}
-
-/****************************************************************************
- * DESCRIPTION: Turn on the LED, and set the off timer to turn it off
- * RETURN: none
- * ALGORITHM: none
- * NOTES: none
- *****************************************************************************/
-static void RS485_LED3_On(void)
-{
- BIT_CLEAR(PORTD, PD7);
- LED3_Off_Timer = 20;
-}
-
-/****************************************************************************
- * DESCRIPTION: Send some data and wait until it is sent
- * RETURN: none
- * ALGORITHM: none
- * NOTES: none
- *****************************************************************************/
-void RS485_Send_Data(uint8_t *buffer, /* data to send */
+/**
+ * @brief Send some data and wait until it is sent
+ * @param buffer - data to send
+ * @param nbytes - number of bytes of data
+ */
+void RS485_Send_Data(uint8_t *buffer,
uint16_t nbytes)
-{ /* number of bytes of data */
- RS485_LED3_On();
+{
while (nbytes) {
while (!BIT_CHECK(UCSR0A, UDRE0)) {
/* do nothing - wait until Tx buffer is empty */
@@ -268,9 +211,6 @@ bool RS485_ReceiveError(void)
} while (BIT_CHECK(UCSR0A, RXC0));
ReceiveError = true;
}
- if (ReceiveError) {
- RS485_LED1_On();
- }
(void)dummy_data;
return ReceiveError;
@@ -290,7 +230,6 @@ bool RS485_DataAvailable(uint8_t *data)
if (BIT_CHECK(UCSR0A, RXC0)) {
*data = UDR0;
DataAvailable = true;
- RS485_LED1_On();
}
return DataAvailable;
diff --git a/ports/atmega168/stack.c b/ports/atmega168/stack.c
index 6787d683..810304f8 100644
--- a/ports/atmega168/stack.c
+++ b/ports/atmega168/stack.c
@@ -24,6 +24,7 @@
*********************************************************************/
#include
#include "hardware.h"
+#include "stack.h"
/* stack checking */
#if defined(__GNUC__)
diff --git a/ports/atmega168/timer.c b/ports/atmega168/timer.c
index d301c1e2..0d4677a2 100644
--- a/ports/atmega168/timer.c
+++ b/ports/atmega168/timer.c
@@ -24,6 +24,7 @@
*********************************************************************/
#include
#include "hardware.h"
+#include "timer.h"
/* This module is a 1 millisecond timer */
diff --git a/ports/bdk-atxx4-mstp/Makefile b/ports/bdk-atxx4-mstp/Makefile
index 1f3caca6..debf1628 100644
--- a/ports/bdk-atxx4-mstp/Makefile
+++ b/ports/bdk-atxx4-mstp/Makefile
@@ -108,6 +108,7 @@ BASICSRC = $(BACNET_BASIC)/service/h_dcc.c \
$(BACNET_BASIC)/service/h_noserv.c \
$(BACNET_BASIC)/service/s_iam.c \
$(BACNET_BASIC)/service/s_ihave.c \
+ $(BACNET_BASIC)/sys/bigend.c \
$(BACNET_BASIC)/sys/fifo.c \
$(BACNET_BASIC)/sys/mstimer.c \
$(BACNET_BASIC)/sys/ringbuf.c \
diff --git a/ports/bdk-atxx4-mstp/bacnet.cproj b/ports/bdk-atxx4-mstp/bacnet.cproj
index cc739311..28acd2a6 100644
--- a/ports/bdk-atxx4-mstp/bacnet.cproj
+++ b/ports/bdk-atxx4-mstp/bacnet.cproj
@@ -6,7 +6,7 @@
com.Atmel.AVRGCC8.C
{1cefd571-4b50-48fd-b75e-0e968ebbd698}
ATmega644P
- none
+ mega
Executable
C
$(MSBuildProjectName)
@@ -27,14 +27,36 @@
2
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
true
@@ -50,8 +72,6 @@
True
True
False
- True
- True
BACDL_MSTP
@@ -61,6 +81,7 @@
MAX_CHARACTER_STRING_BYTES=64
MAX_OCTET_STRING_BYTES=64
NDEBUG
+ BOARD=USER_BOARD
@@ -69,22 +90,40 @@
../../../src
%24(PackRepoDir)\atmel\ATmega_DFP\1.3.300\include
../../../ports/bdk-atxx4-mstp
+ ../src/ASF/common/boards/user_board
+ ../src/ASF/common/boards
+ ../src/ASF/mega/utils/preprocessor
+ ../src/ASF/mega/utils
+ ../src/ASF/common/utils
+ ../src
+ ../src/config
+ Optimize for size (-Os)
+ -fdata-sections
True
True
True
+ -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax
libm
+ -Wl,--relax
+ -mrelax -DBOARD=USER_BOARD
%24(PackRepoDir)\atmel\ATmega_DFP\1.3.300\include
+ ../src/ASF/common/boards/user_board
+ ../src/ASF/common/boards
+ ../src/ASF/mega/utils/preprocessor
+ ../src/ASF/mega/utils
+ ../src/ASF/common/utils
+ ../src
+ ../src/config
- Optimize for size (-Os)
False
@@ -101,8 +140,6 @@
True
True
False
- True
- True
BACDL_MSTP
@@ -112,6 +149,7 @@
MAX_CHARACTER_STRING_BYTES=64
MAX_OCTET_STRING_BYTES=64
DEBUG
+ BOARD=USER_BOARD
@@ -121,23 +159,41 @@
%24(PackRepoDir)\atmel\ATmega_DFP\1.3.300\include
../../../demo/object
../../../include
+ ../src/ASF/common/boards/user_board
+ ../src/ASF/common/boards
+ ../src/ASF/mega/utils/preprocessor
+ ../src/ASF/mega/utils
+ ../src/ASF/common/utils
+ ../src
+ ../src/config
+ Optimize (-O1)
+ -fdata-sections
True
True
+ Maximum (-g3)
True
+ -std=gnu99 -fno-strict-aliasing -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -mrelax
libm
+ -Wl,--relax
+ -mrelax -DBOARD=USER_BOARD
%24(PackRepoDir)\atmel\ATmega_DFP\1.3.300\include
+ ../src/ASF/common/boards/user_board
+ ../src/ASF/common/boards
+ ../src/ASF/mega/utils/preprocessor
+ ../src/ASF/mega/utils
+ ../src/ASF/common/utils
+ ../src
+ ../src/config
- Optimize (-O1)
- Default (-g2)
Default (-Wa,-g)
@@ -353,7 +409,7 @@
compile
- BACnet Core\npdu.c
+ BACnet Core\proplist.c
compile
@@ -391,10 +447,77 @@
compile
BACnet Core\wp.c
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+ compile
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ports/bdk-atxx4-mstp/bacnet.ewp b/ports/bdk-atxx4-mstp/bacnet.ewp
index 8bf3e79a..718ac496 100644
--- a/ports/bdk-atxx4-mstp/bacnet.ewp
+++ b/ports/bdk-atxx4-mstp/bacnet.ewp
@@ -1,2329 +1,4459 @@
-
-
+
- 2
-
- Debug
-
- AVR
-
- 1
-
- General
- 12
-
- 10
- 1
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ICCAVR
- 6
-
- 17
- 1
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- AAVR
- 5
-
- 11
- 1
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CUSTOM
- 3
-
-
-
- 0
-
-
-
- BICOMP
- 0
-
-
-
- BUILDACTION
- 1
-
-
-
-
-
-
- XLINK
- 3
-
- 16
- 1
- 1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XAR
- 2
-
- 0
- 1
- 1
-
-
-
-
-
-
- BILINK
- 0
-
-
-
-
- Release
-
- AVR
-
- 0
-
- General
- 12
-
- 10
- 1
+ 3
+
+ Release-644p
+
+ AVR
+
0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ICCAVR
- 6
-
- 17
- 1
+
+ General
+ 12
+
+ 10
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ICCAVR
+ 6
+
+ 17
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AAVR
+ 5
+
+ 11
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CUSTOM
+ 3
+
+
+
+ 0
+
+
+
+ BICOMP
+ 0
+
+
+
+ BUILDACTION
+ 1
+
+
+
+
+
+
+ XLINK
+ 3
+
+ 16
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XAR
+ 2
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+ BILINK
+ 0
+
+
+
+
+ Release-1284p
+
+ AVR
+
0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- AAVR
- 5
-
- 11
- 1
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CUSTOM
- 3
-
-
-
- 0
-
-
-
- BICOMP
- 0
-
-
-
- BUILDACTION
- 1
-
-
-
-
-
-
- XLINK
- 3
-
- 16
- 1
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- XAR
- 2
-
- 0
- 1
- 0
-
-
-
-
-
-
- BILINK
- 0
-
-
-
-
- BACnet Basic
+
+ General
+ 12
+
+ 10
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ICCAVR
+ 6
+
+ 17
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AAVR
+ 5
+
+ 11
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CUSTOM
+ 3
+
+
+
+ 0
+
+
+
+ BICOMP
+ 0
+
+
+
+ BUILDACTION
+ 1
+
+
+
+
+
+
+ XLINK
+ 3
+
+ 16
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XAR
+ 2
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+ BILINK
+ 0
+
+
+
+
+ Debug-644p
+
+ AVR
+
+ 1
+
+ General
+ 12
+
+ 10
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ICCAVR
+ 6
+
+ 17
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AAVR
+ 5
+
+ 11
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CUSTOM
+ 3
+
+
+
+ 0
+
+
+
+ BICOMP
+ 0
+
+
+
+ BUILDACTION
+ 1
+
+
+
+
+
+
+ XLINK
+ 3
+
+ 16
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XAR
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+ BILINK
+ 0
+
+
+
+
+ Debug-1284p
+
+ AVR
+
+ 1
+
+ General
+ 12
+
+ 10
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ICCAVR
+ 6
+
+ 17
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AAVR
+ 5
+
+ 11
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CUSTOM
+ 3
+
+
+
+ 0
+
+
+
+ BICOMP
+ 0
+
+
+
+ BUILDACTION
+ 1
+
+
+
+
+
+
+ XLINK
+ 3
+
+ 16
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ XAR
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+ BILINK
+ 0
+
+
+
+
+ BACnet Basic
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\service\h_apdu.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\service\h_dcc.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\service\h_noserv.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\npdu\h_npdu.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\service\h_rd.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\service\h_rp.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\service\h_rpm.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\service\h_whohas.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\service\h_whois.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\service\h_wp.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\service\s_iam.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\service\s_ihave.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\tsm\tsm.c
+
+
+
+ BACnet Basic Sys
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\sys\fifo.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\sys\mstimer.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\basic\sys\ringbuf.c
+
+
+
+ BACnet Datalink
+
+ $PROJ_DIR$\..\..\src\bacnet\datalink\crc.c
+
+
+
+ BACnet-Core
+
+ $PROJ_DIR$\..\..\src\bacnet\abort.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\bacaddr.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\bacapp.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\bacdcode.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\bacerror.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\bacint.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\bacreal.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\bacstr.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\dcc.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\iam.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\ihave.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\memcopy.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\npdu.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\proplist.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\rd.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\reject.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\rp.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\rpm.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\whohas.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\whois.c
+
+
+ $PROJ_DIR$\..\..\src\bacnet\wp.c
+
+
- $PROJ_DIR$\..\..\src\bacnet\basic\service\h_apdu.c
+ $PROJ_DIR$\adc.c
- $PROJ_DIR$\..\..\src\bacnet\basic\service\h_dcc.c
+ $PROJ_DIR$\ai.c
- $PROJ_DIR$\..\..\src\bacnet\basic\service\h_noserv.c
+ $PROJ_DIR$\av.c
- $PROJ_DIR$\..\..\src\bacnet\basic\npdu\h_npdu.c
+ $PROJ_DIR$\bacnet.c
- $PROJ_DIR$\..\..\src\bacnet\basic\service\h_rd.c
+ $PROJ_DIR$\bi.c
- $PROJ_DIR$\..\..\src\bacnet\basic\service\h_rp.c
+ $PROJ_DIR$\..\..\src\bacnet\basic\sys\bigend.c
- $PROJ_DIR$\..\..\src\bacnet\basic\service\h_rpm.c
+ $PROJ_DIR$\bname.c
- $PROJ_DIR$\..\..\src\bacnet\basic\service\h_whohas.c
+ $PROJ_DIR$\bo.c
- $PROJ_DIR$\..\..\src\bacnet\basic\service\h_whois.c
+ $PROJ_DIR$\device.c
- $PROJ_DIR$\..\..\src\bacnet\basic\service\h_wp.c
+ $PROJ_DIR$\dlmstp.c
- $PROJ_DIR$\..\..\src\bacnet\basic\service\s_iam.c
+ $PROJ_DIR$\eeprom.c
- $PROJ_DIR$\..\..\src\bacnet\basic\service\s_ihave.c
+ $PROJ_DIR$\fuses.c
- $PROJ_DIR$\..\..\src\bacnet\basic\tsm\tsm.c
-
-
-
- BACnet Basic Sys
-
- $PROJ_DIR$\..\..\src\bacnet\basic\sys\fifo.c
+ $PROJ_DIR$\init.c
- $PROJ_DIR$\..\..\src\bacnet\basic\sys\mstimer.c
+ $PROJ_DIR$\input.c
- $PROJ_DIR$\..\..\src\bacnet\basic\sys\ringbuf.c
-
-
-
- BACnet Datalink
-
- $PROJ_DIR$\..\..\src\bacnet\datalink\crc.c
-
-
-
- BACnet-Core
-
- $PROJ_DIR$\..\..\src\bacnet\abort.c
+ $PROJ_DIR$\led.c
- $PROJ_DIR$\..\..\src\bacnet\bacaddr.c
+ $PROJ_DIR$\main.c
- $PROJ_DIR$\..\..\src\bacnet\bacapp.c
+ $PROJ_DIR$\mstimer-init.c
- $PROJ_DIR$\..\..\src\bacnet\bacdcode.c
+ $PROJ_DIR$\rs485.c
- $PROJ_DIR$\..\..\src\bacnet\bacerror.c
+ $PROJ_DIR$\seeprom.c
- $PROJ_DIR$\..\..\src\bacnet\bacint.c
+ $PROJ_DIR$\serial.c
- $PROJ_DIR$\..\..\src\bacnet\bacreal.c
+ $PROJ_DIR$\stack.c
- $PROJ_DIR$\..\..\src\bacnet\bacstr.c
+ $PROJ_DIR$\test.c
- $PROJ_DIR$\..\..\src\bacnet\dcc.c
+ $PROJ_DIR$\watchdog.c
-
- $PROJ_DIR$\..\..\src\bacnet\iam.c
-
-
- $PROJ_DIR$\..\..\src\bacnet\ihave.c
-
-
- $PROJ_DIR$\..\..\src\bacnet\memcopy.c
-
-
- $PROJ_DIR$\..\..\src\bacnet\npdu.c
-
-
- $PROJ_DIR$\..\..\src\bacnet\proplist.c
-
-
- $PROJ_DIR$\..\..\src\bacnet\rd.c
-
-
- $PROJ_DIR$\..\..\src\bacnet\reject.c
-
-
- $PROJ_DIR$\..\..\src\bacnet\rp.c
-
-
- $PROJ_DIR$\..\..\src\bacnet\rpm.c
-
-
- $PROJ_DIR$\..\..\src\bacnet\whohas.c
-
-
- $PROJ_DIR$\..\..\src\bacnet\whois.c
-
-
- $PROJ_DIR$\..\..\src\bacnet\wp.c
-
-
-
- $PROJ_DIR$\adc.c
-
-
- $PROJ_DIR$\ai.c
-
-
- $PROJ_DIR$\av.c
-
-
- $PROJ_DIR$\bacnet.c
-
-
- $PROJ_DIR$\bi.c
-
-
- $PROJ_DIR$\bname.c
-
-
- $PROJ_DIR$\bo.c
-
-
- $PROJ_DIR$\device.c
-
-
- $PROJ_DIR$\dlmstp.c
-
-
- $PROJ_DIR$\eeprom.c
-
-
- $PROJ_DIR$\fuses.c
-
-
- $PROJ_DIR$\init.c
-
-
- $PROJ_DIR$\input.c
-
-
- $PROJ_DIR$\led.c
-
-
- $PROJ_DIR$\main.c
-
-
- $PROJ_DIR$\mstimer-init.c
-
-
- $PROJ_DIR$\rs485.c
-
-
- $PROJ_DIR$\seeprom.c
-
-
- $PROJ_DIR$\serial.c
-
-
- $PROJ_DIR$\stack.c
-
-
- $PROJ_DIR$\test.c
-
-
- $PROJ_DIR$\watchdog.c
-
-
-
diff --git a/ports/bdk-atxx4-mstp/iar2gcc.h b/ports/bdk-atxx4-mstp/iar2gcc.h
index f3d59140..f6f88919 100644
--- a/ports/bdk-atxx4-mstp/iar2gcc.h
+++ b/ports/bdk-atxx4-mstp/iar2gcc.h
@@ -49,6 +49,44 @@ static inline void _delay_us(
__delay_cycles(F_CPU / 1000000UL);
} while (microseconds--);
}
+
+#if (__VER__ > 700)
+#define DDA0 DDRA0
+#define DDA1 DDRA1
+#define DDA2 DDRA2
+#define DDA3 DDRA3
+#define DDA4 DDRA4
+#define DDA5 DDRA5
+#define DDA6 DDRA6
+#define DDA7 DDRA7
+
+#define DDB0 DDRB0
+#define DDB1 DDRB1
+#define DDB2 DDRB2
+#define DDB3 DDRB3
+#define DDB4 DDRB4
+#define DDB5 DDRB5
+#define DDB6 DDRB6
+#define DDB7 DDRB7
+
+#define DDC0 DDRC0
+#define DDC1 DDRC1
+#define DDC2 DDRC2
+#define DDC3 DDRC3
+#define DDC4 DDRC4
+#define DDC5 DDRC5
+#define DDC6 DDRC6
+#define DDC7 DDRC7
+
+#define DDD0 DDRD0
+#define DDD1 DDRD1
+#define DDD2 DDRD2
+#define DDD3 DDRD3
+#define DDD4 DDRD4
+#define DDD5 DDRD5
+#define DDD6 DDRD6
+#define DDD7 DDRD7
+#endif
#endif
#if defined(__GNUC__)
@@ -311,6 +349,9 @@ unsigned char __uint8_eeprom_load(
/* power macros in GCC-AVR */
#if (defined(__ICCAVR__) && (defined(__ATmega644P__))) || \
(defined(__CROSSWORKS_AVR) && (__TARGET_PROCESSOR == ATmega644P))
+#if (defined(__ICCAVR__) && (__VER__ > 700))
+#define PRR PRR0
+#endif
#define power_adc_enable() (PRR &= (uint8_t)~(1 << PRADC))
#define power_spi_enable() (PRR &= (uint8_t)~(1 << PRSPI))
#define power_usart0_enable() (PRR &= (uint8_t)~(1 << PRUSART0))
diff --git a/src/bacnet/bacapp.c b/src/bacnet/bacapp.c
index 6a0cfe08..c349d2b2 100644
--- a/src/bacnet/bacapp.c
+++ b/src/bacnet/bacapp.c
@@ -1034,7 +1034,6 @@ int bacapp_snprintf_value(
{
size_t len = 0, i = 0;
char *char_str;
- uint8_t *octet_str;
BACNET_APPLICATION_DATA_VALUE *value;
BACNET_PROPERTY_ID property = PROP_ALL;
BACNET_OBJECT_TYPE object_type = MAX_BACNET_OBJECT_TYPE;
@@ -1042,6 +1041,9 @@ int bacapp_snprintf_value(
char *p_str = str;
size_t rem_str_len = str_len;
char temp_str[32];
+#if defined(BACAPP_OCTET_STRING)
+ uint8_t *octet_str;
+#endif
#ifdef __STDC_ISO_10646__
/* Wide character (decoded from multi-byte character). */
wchar_t wc;
diff --git a/src/bacnet/bacint.c b/src/bacnet/bacint.c
index e20b30ea..f9b41575 100644
--- a/src/bacnet/bacint.c
+++ b/src/bacnet/bacint.c
@@ -110,11 +110,11 @@ int decode_unsigned32(uint8_t *apdu, uint32_t *value)
*/
int encode_unsigned40(uint8_t *buffer, uint64_t value)
{
- buffer[0] = (uint8_t)((value & 0x000000ff00000000) >> 32);
- buffer[1] = (uint8_t)((value & 0x00000000ff000000) >> 24);
- buffer[2] = (uint8_t)((value & 0x0000000000ff0000) >> 16);
- buffer[3] = (uint8_t)((value & 0x000000000000ff00) >> 8);
- buffer[4] = (uint8_t)(value & 0x00000000000000ff);
+ buffer[0] = (uint8_t)((value & 0x000000ff00000000ULL) >> 32);
+ buffer[1] = (uint8_t)((value & 0x00000000ff000000ULL) >> 24);
+ buffer[2] = (uint8_t)((value & 0x0000000000ff0000ULL) >> 16);
+ buffer[3] = (uint8_t)((value & 0x000000000000ff00ULL) >> 8);
+ buffer[4] = (uint8_t)(value & 0x00000000000000ffULL);
return 5;
}
@@ -129,14 +129,14 @@ int decode_unsigned40(uint8_t *buffer, uint64_t *value)
{
if (value) {
*value =
- ((uint64_t)((((uint64_t)buffer[0]) << 32) & 0x000000ff00000000));
+ ((uint64_t)((((uint64_t)buffer[0]) << 32) & 0x000000ff00000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[1]) << 24) & 0x00000000ff000000));
+ ((uint64_t)((((uint64_t)buffer[1]) << 24) & 0x00000000ff000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[2]) << 16) & 0x0000000000ff0000));
+ ((uint64_t)((((uint64_t)buffer[2]) << 16) & 0x0000000000ff0000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[3]) << 8) & 0x000000000000ff00));
- *value |= ((uint64_t)(((uint64_t)buffer[4]) & 0x00000000000000ff));
+ ((uint64_t)((((uint64_t)buffer[3]) << 8) & 0x000000000000ff00ULL));
+ *value |= ((uint64_t)(((uint64_t)buffer[4]) & 0x00000000000000ffULL));
}
return 5;
@@ -150,12 +150,12 @@ int decode_unsigned40(uint8_t *buffer, uint64_t *value)
*/
int encode_unsigned48(uint8_t *buffer, uint64_t value)
{
- buffer[0] = (uint8_t)((value & 0x0000ff0000000000) >> 40);
- buffer[1] = (uint8_t)((value & 0x000000ff00000000) >> 32);
- buffer[2] = (uint8_t)((value & 0x00000000ff000000) >> 24);
- buffer[3] = (uint8_t)((value & 0x0000000000ff0000) >> 16);
- buffer[4] = (uint8_t)((value & 0x000000000000ff00) >> 8);
- buffer[5] = (uint8_t)(value & 0x00000000000000ff);
+ buffer[0] = (uint8_t)((value & 0x0000ff0000000000ULL) >> 40);
+ buffer[1] = (uint8_t)((value & 0x000000ff00000000ULL) >> 32);
+ buffer[2] = (uint8_t)((value & 0x00000000ff000000ULL) >> 24);
+ buffer[3] = (uint8_t)((value & 0x0000000000ff0000ULL) >> 16);
+ buffer[4] = (uint8_t)((value & 0x000000000000ff00ULL) >> 8);
+ buffer[5] = (uint8_t)(value & 0x00000000000000ffULL);
return 6;
}
@@ -170,16 +170,16 @@ int decode_unsigned48(uint8_t *buffer, uint64_t *value)
{
if (value) {
*value =
- ((uint64_t)((((uint64_t)buffer[0]) << 40) & 0x0000ff0000000000));
+ ((uint64_t)((((uint64_t)buffer[0]) << 40) & 0x0000ff0000000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[1]) << 32) & 0x000000ff00000000));
+ ((uint64_t)((((uint64_t)buffer[1]) << 32) & 0x000000ff00000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[2]) << 24) & 0x00000000ff000000));
+ ((uint64_t)((((uint64_t)buffer[2]) << 24) & 0x00000000ff000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[3]) << 16) & 0x0000000000ff0000));
+ ((uint64_t)((((uint64_t)buffer[3]) << 16) & 0x0000000000ff0000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[4]) << 8) & 0x000000000000ff00));
- *value |= ((uint64_t)(((uint64_t)buffer[5]) & 0x00000000000000ff));
+ ((uint64_t)((((uint64_t)buffer[4]) << 8) & 0x000000000000ff00ULL));
+ *value |= ((uint64_t)(((uint64_t)buffer[5]) & 0x00000000000000ffULL));
}
return 6;
@@ -193,13 +193,13 @@ int decode_unsigned48(uint8_t *buffer, uint64_t *value)
*/
int encode_unsigned56(uint8_t *buffer, uint64_t value)
{
- buffer[0] = (uint8_t)((value & 0x00ff000000000000) >> 48);
- buffer[1] = (uint8_t)((value & 0x0000ff0000000000) >> 40);
- buffer[2] = (uint8_t)((value & 0x000000ff00000000) >> 32);
- buffer[3] = (uint8_t)((value & 0x00000000ff000000) >> 24);
- buffer[4] = (uint8_t)((value & 0x0000000000ff0000) >> 16);
- buffer[5] = (uint8_t)((value & 0x000000000000ff00) >> 8);
- buffer[6] = (uint8_t)(value & 0x00000000000000ff);
+ buffer[0] = (uint8_t)((value & 0x00ff000000000000ULL) >> 48);
+ buffer[1] = (uint8_t)((value & 0x0000ff0000000000ULL) >> 40);
+ buffer[2] = (uint8_t)((value & 0x000000ff00000000ULL) >> 32);
+ buffer[3] = (uint8_t)((value & 0x00000000ff000000ULL) >> 24);
+ buffer[4] = (uint8_t)((value & 0x0000000000ff0000ULL) >> 16);
+ buffer[5] = (uint8_t)((value & 0x000000000000ff00ULL) >> 8);
+ buffer[6] = (uint8_t)(value & 0x00000000000000ffULL);
return 7;
}
@@ -214,18 +214,18 @@ int decode_unsigned56(uint8_t *buffer, uint64_t *value)
{
if (value) {
*value =
- ((uint64_t)((((uint64_t)buffer[0]) << 48) & 0x00ff000000000000));
+ ((uint64_t)((((uint64_t)buffer[0]) << 48) & 0x00ff000000000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[1]) << 40) & 0x0000ff0000000000));
+ ((uint64_t)((((uint64_t)buffer[1]) << 40) & 0x0000ff0000000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[2]) << 32) & 0x000000ff00000000));
+ ((uint64_t)((((uint64_t)buffer[2]) << 32) & 0x000000ff00000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[3]) << 24) & 0x00000000ff000000));
+ ((uint64_t)((((uint64_t)buffer[3]) << 24) & 0x00000000ff000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[4]) << 16) & 0x0000000000ff0000));
+ ((uint64_t)((((uint64_t)buffer[4]) << 16) & 0x0000000000ff0000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[5]) << 8) & 0x000000000000ff00));
- *value |= ((uint64_t)(((uint64_t)buffer[6]) & 0x00000000000000ff));
+ ((uint64_t)((((uint64_t)buffer[5]) << 8) & 0x000000000000ff00ULL));
+ *value |= ((uint64_t)(((uint64_t)buffer[6]) & 0x00000000000000ffULL));
}
return 7;
@@ -239,14 +239,14 @@ int decode_unsigned56(uint8_t *buffer, uint64_t *value)
*/
int encode_unsigned64(uint8_t *buffer, uint64_t value)
{
- buffer[0] = (uint8_t)((value & 0xff00000000000000) >> 56);
- buffer[1] = (uint8_t)((value & 0x00ff000000000000) >> 48);
- buffer[2] = (uint8_t)((value & 0x0000ff0000000000) >> 40);
- buffer[3] = (uint8_t)((value & 0x000000ff00000000) >> 32);
- buffer[4] = (uint8_t)((value & 0x00000000ff000000) >> 24);
- buffer[5] = (uint8_t)((value & 0x0000000000ff0000) >> 16);
- buffer[6] = (uint8_t)((value & 0x000000000000ff00) >> 8);
- buffer[7] = (uint8_t)(value & 0x00000000000000ff);
+ buffer[0] = (uint8_t)((value & 0xff00000000000000ULL) >> 56);
+ buffer[1] = (uint8_t)((value & 0x00ff000000000000ULL) >> 48);
+ buffer[2] = (uint8_t)((value & 0x0000ff0000000000ULL) >> 40);
+ buffer[3] = (uint8_t)((value & 0x000000ff00000000ULL) >> 32);
+ buffer[4] = (uint8_t)((value & 0x00000000ff000000ULL) >> 24);
+ buffer[5] = (uint8_t)((value & 0x0000000000ff0000ULL) >> 16);
+ buffer[6] = (uint8_t)((value & 0x000000000000ff00ULL) >> 8);
+ buffer[7] = (uint8_t)(value & 0x00000000000000ffULL);
return 8;
}
@@ -261,20 +261,20 @@ int decode_unsigned64(uint8_t *buffer, uint64_t *value)
{
if (value) {
*value =
- ((uint64_t)((((uint64_t)buffer[0]) << 56) & 0xff00000000000000));
+ ((uint64_t)((((uint64_t)buffer[0]) << 56) & 0xff00000000000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[1]) << 48) & 0x00ff000000000000));
+ ((uint64_t)((((uint64_t)buffer[1]) << 48) & 0x00ff000000000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[2]) << 40) & 0x0000ff0000000000));
+ ((uint64_t)((((uint64_t)buffer[2]) << 40) & 0x0000ff0000000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[3]) << 32) & 0x000000ff00000000));
+ ((uint64_t)((((uint64_t)buffer[3]) << 32) & 0x000000ff00000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[4]) << 24) & 0x00000000ff000000));
+ ((uint64_t)((((uint64_t)buffer[4]) << 24) & 0x00000000ff000000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[5]) << 16) & 0x0000000000ff0000));
+ ((uint64_t)((((uint64_t)buffer[5]) << 16) & 0x0000000000ff0000ULL));
*value |=
- ((uint64_t)((((uint64_t)buffer[6]) << 8) & 0x000000000000ff00));
- *value |= ((uint64_t)(((uint64_t)buffer[7]) & 0x00000000000000ff));
+ ((uint64_t)((((uint64_t)buffer[6]) << 8) & 0x000000000000ff00ULL));
+ *value |= ((uint64_t)(((uint64_t)buffer[7]) & 0x00000000000000ffULL));
}
return 8;
@@ -298,13 +298,13 @@ int bacnet_unsigned_length(BACNET_UNSIGNED_INTEGER value)
len = 3;
} else {
#ifdef UINT64_MAX
- if (value <= 0xFFFFFFFF) {
+ if (value <= 0x00000000FFFFFFFFULL) {
len = 4;
- } else if (value <= 0xFFFFFFFFFF) {
+ } else if (value <= 0x000000FFFFFFFFFFULL) {
len = 5;
- } else if (value <= 0xFFFFFFFFFFFF) {
+ } else if (value <= 0x0000FFFFFFFFFFFFULL) {
len = 6;
- } else if (value <= 0xFFFFFFFFFFFFFF) {
+ } else if (value <= 0x00FFFFFFFFFFFFFFULL) {
len = 7;
} else {
len = 8;
diff --git a/src/bacnet/basic/object/av.h b/src/bacnet/basic/object/av.h
index ce11b487..09ec5316 100644
--- a/src/bacnet/basic/object/av.h
+++ b/src/bacnet/basic/object/av.h
@@ -97,6 +97,8 @@ extern "C" {
bool Analog_Value_Name_Set(
uint32_t object_instance,
char *new_name);
+ char *Analog_Value_Name(
+ uint32_t object_instance);
BACNET_STACK_EXPORT
int Analog_Value_Read_Property(
diff --git a/src/bacnet/basic/object/bv.h b/src/bacnet/basic/object/bv.h
index 06687c53..f654ef69 100644
--- a/src/bacnet/basic/object/bv.h
+++ b/src/bacnet/basic/object/bv.h
@@ -71,6 +71,9 @@ extern "C" {
bool Binary_Value_Name_Set(
uint32_t object_instance,
char *new_name);
+ BACNET_STACK_EXPORT
+ char *Binary_Value_Name(
+ uint32_t object_instance);
BACNET_STACK_EXPORT
char *Binary_Value_Description(
diff --git a/src/bacnet/lighting.c b/src/bacnet/lighting.c
index 53866810..a18be707 100644
--- a/src/bacnet/lighting.c
+++ b/src/bacnet/lighting.c
@@ -41,6 +41,10 @@
#include "bacnet/lighting.h"
#include "bacnet/bacdcode.h"
+#ifndef islessgreater
+#define islessgreater( x, y) ((x) < (y) || (x) > (y))
+#endif
+
/** @file lighting.c Manipulate BACnet lighting command values */
/**