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 */ /**