* Fixed units property declaration in basic Analog Input header file to be uint16_t instead of uint8_t.
* Added range checking of units property in example objects WriteProperty handler.
* Changed BACnetARRAY index validation into ReadProperty, ReadPropertyMultiple, WriteProperty, and WritePropertyMultiple handlers.
* Changed the basic and example objects after refactoring BACnetARRAY index validation into ReadProperty, ReadPropertyMultiple, WriteProperty, and WritePropertyMultiple handlers.
* Added BACnet application decoder that understands that an array element of zero is an unsigned integer tagged value. Fixes RP and RPM apps when reading the array element zero of arrays.
* pre-commit: Update and enable clang-format check
There is newer version from clang-format so use that. We do not yet want
18 as that is little bit too new.
* Format some thing by hand which clang-format "breaks"
Clang-format will format some things little bit off in some cases.
Format some things by hand so we get cleaner end result.
* Run clang-format with
```
pre-commit run --all-files clang-format
```
We have already in previously checked places where clang-format does not
make good format and ignored those (hopefully most of the things).
---------
Co-authored-by: Kari Argillander <kari.argillander@fidelix.com>
* Make most of the functions const correct
Used clang-tidy and sonarlint to help find places where const could
pretty easily applied. Also lot of hand work.
This commit does not yet touch handlers and typedefs of those.
* Fix Arduino uno handler_who_is() has extra parenthesis
For some reason there is extra parenthesis. Remove it this is more
likely buildable.
* Bugfix/bacapp: Fix uninitilized array_index
We have changed bacapp_snprintf_value() to be const correct. After that
we got
```
/home/runner/work/bacnet-stack/bacnet-stack/src/bacnet/bacapp.c:3183:27: warning: 4th function call argument is an uninitialized value [core.CallAndMessage]
ret_val = bacapp_snprintf_weeklyschedule(
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
```
So analyzer could now spot that we do not actually initilize array_index
at all. Fix this by setting array_index to zero. Note that I actually do
not know if zeroing is right thing to do here. I choose zero as if this
has worked before it is most likely that it will work with zero value.
* cmake: Add and ignore Wwrite-strings compiler option
Wwrite-strings helps find places where const correctness is broken.
Example it will warn about these
```C
void func1(char* str);
func("test") /* "test" is const so we should not pass it to func1().
char* func2()
{
return "test"; /* func2() should return const char*.
}
```
We still need to ignore it as not all are fixed but let's add it already
so we remember that it should be opened at some point.
---------
Co-authored-by: Kari Argillander <kari.argillander@fidelix.com>
* Added basic object-name get for ASCII names to enable free if they were dynamically created. Added unit testing to validate the basic object ASCII object-name API.
* Removed static scope on character array used for name since the array gets copied into characterstring array and static is not needed.
* format: Strip trailing whitespaces
We want to get rid of trailing whitespaces completly as they make just git
noice. Much better to start using automated tools to get rid of them once and
not getting them back again. This way git history will be cleaner and review
easier.
Commit was generated with:
pre-commit run --all-files trailing-whitespace
* format: Files should have exactly one new line end of them
It is good practice that every file has one new line. It is not now days so
mandatory but it also is not nice if file has lot of newlines end of it. We will
use pre-commit which takes automatically care about this so let's fix all.
Commit was generated with:
pre-commit run --all-files end-of-file-fixer
* format: Convert tabs to spaces
Project mostly use spaces over tabs. When mixing tabs and spaces this usually
makes formatting issues and also when changing those in commits it will make lot
of git noise. We will force spaces most of the time and use pre-commit to fix.
Commit was generated with:
pre-commit run --all-files remove-tabs
---------
Co-authored-by: Kari Argillander <kari.argillander@fidelix.com>
* Reduced MS/TP MAX_APDU to 480 from 1476 so that devices not use new MS/TP extended frame types which older routers do not understand.
* Added extra objects to STM32F4xx example to elicit edge cases in object-list for testing.
* Added Create/Delete object services to Analog Input, Analog Value, Binary Input, Binary Value, Multistate Input, Multistate Value object examples, and updated their units tests.
* Added dependent BACnet stack headers into bacdef.h file.
* Changed bacdef.h and other stack includes in c/h files to have a common pattern.
* Moved bits.h, bytes.h, and bacnet_stack_exports.h under bacnet/basic/sys/ folder.
* ao.c: set proper bounds for Analog_Output_Present_Value_Write
The lower and upper bounds to the value passed to this function were
hard-coded to 0 and 100 respectively. This meant that a client was not
able to write a value outside of these bounds, regardless of the values
of `Min_Pres_Value` and `Max_Pres_Value`.
Now properly compare the new value against `Min_Pres_Value` and
`Max_Pres_Value` and only return `ERROR_CODE_VALUE_OUT_OF_RANGE` when it
is outside of this range.
Signed-off-by: Sebastian Weyer <sebastian.weyer@smile.fr>
* ao.c: make Analog_Output_Present_Value_Set return 0 when out of range
Compare the new value passsed to `Analog_Output_Present_Value_Set`
against `Min_Pres_Value` and `Max_Pres_Value`. If the new value is
outside of these bounds, don't update the present value and return false.
Signed-off-by: Sebastian Weyer <sebastian.weyer@smile.fr>
---------
Signed-off-by: Sebastian Weyer <sebastian.weyer@smile.fr>
Co-authored-by: Sebastian Weyer <sebastian.weyer@smile.fr>
* Updated keylist to use bool and stdint value for key not found.
* Added Keylist_Index_Key to deprecate Keylist_Key function
* Changed the deprecated Keylist_Key API to Keylist_Index_Key
* Added unit test for Keylist_Index_Key API
* refactor WriteProperty of object-name property rules into device object.
* remove dependence on device object inside some dynamic objects
* improve device object unit test coverage
---------
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
* fixed BACnetXYcolor and BACnetColorCommand encode and decoding and improved unit test coverage. Refactored BACnetXYcolor to/from ascii into lighting module.
* added to the color, color temperature, and lighting output objects a fade/ramp/step engine. Added color and color command coercion into the channel object and enabled color temperature object coercion. Added CreateObject and DeleteObject service handling to the color, color temperature, lighting output, and channel objects.
* added blinkt demo app for Raspberry Pi [WIP]
* updated gitignore to simplify handling of apps folder contents
* fixed piface demo build
* added RaspiOS to pipeline for piface and blinkt! demo builds
* added device object timer function for child object types into example Device object. Refactored device object to increment database revision for create or delete object services. Refactored example app/server to use mstimer library and device child object timers.
---------
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
Added BACnet CreateObject and DeleteObject services
* refactored codec for BACnetPropertyValue into bacapp module
* added unit tests for BACnetPropertyValue
* refactored COV and Events to use BACnetPropertyValue codec API
* added unit tests for COV
* added overrun safe decoders for tag numbers and boolean context
* added unit tests and codecs for CreateObject and DeleteObject services
* added APDU service handers and senders for CreateObject and DeleteObject services
* added command line apps bacco and bacdo for CreateObject and DeleteObject services
* added CreateObject and DeleteObject service handling in example server app and device object
* added new BACnetRejectReason, Error Class, and BACnetAbortReason enumerations and conversions
---------
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
* Add common BACnetARRAY encode function to fix Device object list buffer overflow. Refactor device, analog-output, access-door and binary-output objects to use common BACnetARRAY encoder.
* Fix non-POSIX builds (win32).
* Cleanup some ports/stm32 build warnings
---------
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
* Fix SPLINT to perform static defect analysis
Fix the SPLINT invocation in Makefile
Fix C files where SPLINT detected problems.
Remove UCIX check from SPLINT
Use SPLINT friendly parsing code disable for bacsec
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
* refactor write-property tag check
* modify ports objects to use write-property tag check API
* modify example objects to use write-property tag check API
* Fix object unit test builds
* Fix and run unit ztests via CMake
* Enable unit testing on Travis CI
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
* moving folders and files and adjust server demo build
* Fix Makefile for apps/server on Linux
* fix unit test source file folders
* fix datetime convert UTC functions. Add Code::Blocks project for datetime testing
* added some ignore extensions
* disable parallel make option
* fix build for abort, dcc, and epics apps
* fix build for dcc, epics, error, and getevent apps.
* Fixed building of all apps
* fix the ipv4 to ipv6 router app build
* Change indent style from Google to Webkit
* make pretty to re-format style
* removed common Makefile since we already had one and two was too many
* remove scripts from root folder that are no longer maintained or used
* remove mercurial EOL and ignore files for git repo
* remove .vscodeconfig files from repo
* tweak clang-format style
* clang-format src and apps with tweaked style
* added clang-tidy to fix readability if braces in src
* result of make tidy for src and apps
* fix clang-tidy mangling
* Added code::blocks project for BACnet server simulation
* added code::blocks linux project for WhoIs app
* update text files for EOL
* fix EOL in some files
* fixed make win32 apps for older gcc
* Removed Borland C++ Makefile in apps. Unable to maintain support for Borland C++ compiler.
* created codeblocks project for apps/epics for Windows
* fixing ports/xplained to work with new data structure.
* fix ports/xplained example for Atmel Studio compile
* fix ports/stm32f10x example for gcc Makefile compile
* fix ports/stm32f10x example for IAR EWARM compile
* fix ports/xplained timer callback
* fix ports/bdk_atxx_mspt build with subdirs
* fix ports/bdk_atxx_mspt build with subdirs
* updated git ignore for IAR build artifacts
* updated gitignore for non-tracked files and folders
* fixed bdk-atxx4-mstp port for Rowley Crossworks project file
* fixed bdk-atxx4-mstp port for GCC AVR Makefile
* fixed atmega168 port for IAR AVR and GCC AVR Makefile
* fixed at91sam7s port for IAR ARM and GCC ARM Makefile
* removed unmaintainable DOS, RTOS32, and atmega8 ports. Updated rx62n (untested).
* changed arm7 to uip port