* 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.
* 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>
* Add editorconfig and pre-commit config
Editorconfig is widly used and supported file. It says basic things how
files should be formatted.
pre-commit is tool which can automatically check some basic checks like
code formatting everytime someone makes commit. This can also be used in
CI to run these things. Then it is very easy to do same things locally
as in CI. This also makes easy to select clang-format version so
everyone is using same one.
* clang-format: Ignore folders where are external code
We should not format external code. Add clang-format files to exclude
those. We should move external code always to example external/ folder
so we can exclude those more easily.
* clang-format: Remove custom zephyr/.clang-gormat
This clang-format file where introduces before our root clang-format. It
does not make sense anymore as we have root clang-format. Removing this
will unifie formatting in whole repo.
* clang-format: Add couple new rules
Add couple new formatting rules.
Always align const to left side. We did have only one place where it was
right side so this make sense as it is already rule for us.
I choose also insertbraces becuase when I run this I notice that we have
lot of multiline code without braces. So very error prone places. This
will take error possibility away. Repo also always use braces even with
single line statments so this does not matter much.
* ci: Add pre-commit validation
Validate pre-commit in CI.
* format: Convert spaces to tabs in Makefiles
Makefile normally use tabs. We enforce that with editorconfig. Fix
couple places where spaces where still in use.
---------
Co-authored-by: Kari Argillander <kari.argillander@fidelix.com>
It is lot easier to work with automatic formatters if we have external
files in different folder. For some tools we can example just exclude
external all together.
Co-authored-by: Kari Argillander <kari.argillander@fidelix.com>
* 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>
* clang-format: Ignore javascript files
Ignore javascript files. Clang-format is not very good formatter for
javascript files anyway. If we ever need javascript formatter we should
use Prettier.
* clang-format: Ignore some lines in sources
Couple things get formatted really funky if we let clang-format format
those. Just ignore those locally.
* zephyr/tescase.yaml: Fix yaml syntax
pre-commit hook check-yaml did found out that there are two skips.
Remove another as this is not right syntax.
* Fix repo contains unicode replacement chars
When running pre-commit text-unicode-replacement-char it founds that
there is couple unicode replacemnt chars. Remove and replace these.
* Convert some tabs to spaces manually
We will soon auto format tabs to spaces. How ever it could not do couple
thing so fix those by hand first.
* Make files with shebang executables
It is good habit that if file has shebang then it is marked executable.
These where found with pre-commit check-shebang-scripts-are-executable
checker.
---------
Co-authored-by: Kari Argillander <kari.argillander@fidelix.com>
* Change MIT license texts to SPDX-License-Identifier
SPDX-License-Identifier is much easier to understand and grep than
license text so use that instead.
* Change GPL exception license texts to SPDX-License-Identifier
SPDX-License-Identifier is much easier to understand and grep than
license text so use that instead.
* Change misc license texts to SPDX-License-Identifier
There are some external code in repo which are not licenses as most of
the stuff in this repo. We still want every file to have SPDX identifier
to easily grep licenses.
* Add currently used license files
Even though Bacnet-Stack is using SPDX identifiers we still need to give
those license files with source. For this reason add all license files
to license/ folder.
SPDX has also files which would make same thing but this is style which
example Linux kernel is using and it is quite clear so I choose that one
for now.
I choosed not yet bring CC-PDDC as that is not right license for those
files.
---------
Co-authored-by: Kari Argillander <kari.argillander@fidelix.com>
* Refactored and secured BACnetActionCommand codec into bacaction.c module for command object and added to bacapp module encode/decode with define for enabling and pseudo application tag for internal use.
* Simplified bacapp_data_len() and moved into bacdcode module as bacnet_enclosed_data_len() function.
* Secured ReadProperty-REQUEST and -ACK decoding.
* Removed deprecated Keylist_Key() functions from usage.
* Removed pseudo application datatypes from bacapp_data_decode() which only uses primitive application tag encoded values.
* Defined INT_MAX when it is not already defined by compiler or libc.
* Deprecated bacapp_decode_application_data_len() and bacapp_decode_context_data_len() as they are no longer used in any code in the library.
* Added BACnetScale to bacapp module. Improved complex property value decoding. Refactored bacapp_decode_known_property() function.
* Refactored and improved the bacapp_snprintf() function for printing EPICS.
* Fixed Lighting Output WriteProperty to handle known property decoding.
* 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.
* Fix device object ReinitializeDevice service handling examples of no-password in the device. Add unit testing of device object ReinitializeDevice service. Add API for setting ReinitializeDevice device object password.
* Fix DeviceCommunicationControl service handling example of no-password in the device.
---------
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
* fix ports/xplained build under Linux
* fix network port object link-speeds property
---------
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>
* Add What-Is-Network-Number handling.
Add What-Is-Network-Number and Network-Number-Is network layer handling.
Refactor npdu_encode_npdu_network() from router specific code.
Add unit test for NDPU network message
Add app for What-Is-Network-Number
Add app for Network-Number-Is
Add send helper for What-Is-Network-Number
Add send helper for Network-Number-Is
* added sys/debug.c to ports builds for use of debug_printf() in npdu handler.
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
* added BACnetColorCommand and BACnetxyColor encoding and unit testing
* Added Color object and unit testing.
* Added Color Temperature object and Unit test
* Fix BVLC unit test warning.
* add port Makefile for extra types
* added RGB to and from CIE xy utility in sys folder, and add unit tests.
* added cmake-win32 target
* Change RP and RPM to use known property decoder.
Add color object RP and RPM decoding and printing
Fix RPM print for new reserved range above 4194303
Change default protocol-revision to 24 for Color object
* Integrate Color and Color Temperature objects into demo apps
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
* Add APDU as NULL to get BACnet type lengths.
* Fix bacapp copy test to succeed
* fix BACnet REAL and DOUBLE decode
* Add unit test for NULL APDU encoding for length
* Add unit tests for bacapp context
* refactor host-n-port to hostnport.c module
* fix BVLC decoder
* additional unit testing for bacapp
* include bacdevobjpropref module in builds
* simplify bacapp snprintf to be able to return length
* adjust compiler for variable-length arrays
* fix bug found by scan-build
Authored-by: Steve Karg <skarg@users.sourceforge.net>
* Avoid redefining MSTP timeouts
* Remove duplicate MS/TP time definitions
Ports of MS/TP datalink included #defines of several time values, which
were already defined in src/bacnet/datalink/mstpdef.h. All those ports
already include that header.
* 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>
* RP and RPM Network Port indefinite object instance
Added ReadProperty and ReadPropertyMultiple handling for
Network Port object indefinite object instance 4194303.
* Add network port object to some examples
* Fix stm32f10x build
* Fix Endian order of network port IP UDP port
* Add network port object to BDK Makefile
* Add network port object header to BDK device.c
* fix BDK and AT91SAM7S port builds
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
* Remove dependence on endian define
* Make use of existing big_endian function if BACNET_BIG_ENDIAN is not defined
* Add efficient endian macro option if available
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
* Added zeroing rx buffer remain
* Added zeroing rx buffer remain
* Added safety margin for the rx-buffer in the different ports.
* Added safety margin for the receive buffer.
* Added DoxyGen comments.
* Fixed checking return value when calculating distance between opening and closing tag on multiple properties.
* Added property-list to device object for client applications
* Added property-list to some AVR ARM and RX62 ports
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
* Added pretty-apps and pretty-ports make targets
* pretty-fied apps folder C files
* Pretty-fied ports folder C and H files
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
* refactor BACnet/IPv4 BVLC into encode-decode library with unit tests
Added Read-Broadcast-Distribution-Table encoding and unit test.
Added Read-Broadcast-Distribution-Table-Ack encoding and unit test.
Added Read-Foreign-Device-Table-Ack encoding and unit test.
Added some BDT/FDT diff copy functions with unit tests
Added some FDT add and delete entry functions with unit tests
Added some BDT set append and clear entry functions with unit tests
Added some BIPv4 address conversion functions with unit tests
Added non-BBMD handling unit test
Added basic unit test for BBMD handler
Added BBMD broadcast mask get set and unit tests
Added IPv6 maintenance timer.
Added ReadFDT app
Fixed ReadBDT app
Added Who-Is to Makefile for individual app build
Fixed debugging code blocks projects by swapping bip.c for h_bbmd.c module.
Ported BACnet/IPv4 to refactored BVLC for Linux, BSD, Windows
Fix datalink debug for DLENV module
Improve BIPv4 linux driver debug info
Added BDT mask functions
Reduce debug info clutter in Who-Is app by using environment option
Fix TTL seconds upper bounds addition
Fix CIDR prefix calculation on Linux BIPv4.
Convert BSD BIPv4 to BVLCv4
Fix CMake build for BIPv4 (Linux, BSD, Windows)
Added [U]nsigned to 0xBAC0 constants
Cleanup POSIX and Win32 API sockets
Remove unnecessary file scope variable initialization
Fix routed NPDU to depend on datalink; fix warning
Remove OS dependent network code from gateway
Enable BBMD client in library by default
Co-authored-by: Steve Karg <skarg@users.sourceforge.net>
Co-authored-by: Steve Karg <steve.karg@legrand.us>
* Use BACNET_OBJECT_TYPE for all object type variables.
* Fix ICC "mixing enumerated type" warnings for assignments and parameters.
* Network Port: Use enums for state structs and remove erroneous bounds checks copy-pasted from IP_Subnet_Prefix setter.
* Fix ICC "unreachable statement" warnings.
* Fix ICC "unused variable" warnings when printing is disabled.
* Fix ICC "mixing enumerated type" warnings for struct initializers { 0 } by ensuring the first member is an integer type.
* Send_GetEvent_Global: Return 0 (invalid TSM invoke ID) instead of -1 = 255 (technically valid invoke ID) on failure.
* Fix ICC "pointless comparison" warnings.
* Fix wrong import in objects.c (memset being used).
* Fix signedness warnings and inconsistencies. Include -1 = 255 check in cov_address_get().
* Add some guards for BACAPP_LIGHTING_COMMAND to avoid errors/warnings.
* RPM test fixes
* Address requested changes. (#38)
* 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