Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ The git repository is hosted at the following site:
* Changed gitignore to ignore the build folder.

### Added
* Added "bacnet property" shell command with list, size, and value options.
The value option can list all the property values of any internal object,
and read or write any specific property values that are writable.
The output is in JSON format.
* Added all the basic object property value data types supported
for B-ASC sample. (#52)
* Added BACnet Application Specific Control (B-ASC) sample. (#51)
Expand Down
5 changes: 5 additions & 0 deletions zephyr/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,12 @@ message(STATUS "BACNETSTACK: BACNET_PROTOCOL_REVISION \"${CONFIG_BACNET_PROTOCOL
message(STATUS "BACNETSTACK: BACAPP_MINIMAL \"${CONFIG_BACAPP_MINIMAL}\"")
message(STATUS "BACNETSTACK: BACAPP_TYPES_EXTRA \"${CONFIG_BACAPP_TYPES_EXTRA}\"")
message(STATUS "BACNETSTACK: BACNET_ADDRESS_CACHE_FILE \"${CONFIG_BACNET_ADDRESS_CACHE_FILE}\"")
message(STATUS "BACNETSTACK: MAX_APDU \"${CONFIG_BACNET_MAX_APDU_SIZE}\"")
message(STATUS "BACNETSTACK: MAX_TSM_TRANSACTIONS \"${CONFIG_BACNET_MAX_TSM_TRANSACTIONS}\"")
message(STATUS "BACNETSTACK: MAX_ADDRESS_CACHE \"${CONFIG_BACNET_MAX_ADDRESS_CACHE}\"")
message(STATUS "BACNETSTACK: MAX_CHARACTER_STRING_BYTES \"${CONFIG_BACNET_MAX_CHARACTER_STRING_BYTES}\"")
message(STATUS "BACNETSTACK: MAX_OCTET_STRING_BYTES \"${CONFIG_BACNET_MAX_OCTET_STRING_BYTES}\"")
message(STATUS "BACNETSTACK: BACNET_DAILY_SCHEDULE_TIME_VALUES_SIZE \"${CONFIG_BACNET_DAILY_SCHEDULE_TIME_VALUES_SIZE}\"")
message(STATUS "BACNETSTACK: CONFIG_BACNETSTACK_LOG_LEVEL \"${CONFIG_BACNETSTACK_LOG_LEVEL}\"")

if(NOT (CONFIG_BACDL_ETHERNET OR
Expand Down Expand Up @@ -476,6 +478,7 @@ set(BACNETSTACK_BASIC_SRCS
$<$<BOOL:${CONFIG_BAC_ROUTING}>:${BACNETSTACK_SRC}/bacnet/basic/object/gateway/gw_device.c>
$<$<BOOL:${CONFIG_BACNET_BASIC_OBJECT_INTEGER_VALUE}>:${BACNETSTACK_SRC}/bacnet/basic/object/iv.c>
$<$<BOOL:${CONFIG_BACNET_BASIC_OBJECT_LOAD_CONTROL}>:${BACNETSTACK_SRC}/bacnet/basic/object/lc.c>
$<$<BOOL:${CONFIG_BACNET_BASIC_OBJECT_LOOP}>:${BACNETSTACK_SRC}/bacnet/basic/object/loop.c>
$<$<BOOL:${CONFIG_BACNET_BASIC_OBJECT_LIGHTING_OUTPUT}>:${BACNETSTACK_SRC}/bacnet/basic/object/lo.c>
$<$<BOOL:${CONFIG_BACNET_BASIC_OBJECT_BINARY_LIGHTING_OUTPUT}>:${BACNETSTACK_SRC}/bacnet/basic/object/blo.c>
$<$<BOOL:${CONFIG_BACNET_BASIC_OBJECT_LIFE_SAFETY_POINT}>:${BACNETSTACK_SRC}/bacnet/basic/object/lsp.c>
Expand Down Expand Up @@ -595,10 +598,12 @@ zephyr_compile_definitions(
$<$<BOOL:${CONFIG_BACAPP_PRINT_ENABLED}>:BACAPP_PRINT_ENABLED=1>
$<$<BOOL:${CONFIG_BACAPP_SNPRINTF_ENABLED}>:BACAPP_SNPRINTF_ENABLED=1>
$<$<BOOL:${CONFIG_BACNET_ADDRESS_CACHE_FILE}>:BACNET_ADDRESS_CACHE_FILE=1>
MAX_APDU=${CONFIG_BACNET_MAX_APDU_SIZE}
MAX_TSM_TRANSACTIONS=${CONFIG_BACNET_MAX_TSM_TRANSACTIONS}
MAX_ADDRESS_CACHE=${CONFIG_BACNET_MAX_ADDRESS_CACHE}
MAX_CHARACTER_STRING_BYTES=${CONFIG_BACNET_MAX_CHARACTER_STRING_BYTES}
MAX_OCTET_STRING_BYTES=${CONFIG_BACNET_MAX_OCTET_STRING_BYTES}
BACNET_DAILY_SCHEDULE_TIME_VALUES_SIZE=${CONFIG_BACNET_DAILY_SCHEDULE_TIME_VALUES_SIZE}
$<$<BOOL:${CONFIG_BACNET_BASIC_COV_SUBSCRIPTIONS_SIZE}>:MAX_COV_SUBCRIPTIONS=${CONFIG_BACNET_BASIC_COV_SUBSCRIPTIONS_SIZE}>
$<$<BOOL:${CONFIG_BACNET_BASIC_COV_ADDRESSES_SIZE}>:MAX_COV_ADDRESSES=${CONFIG_BACNET_BASIC_COV_ADDRESSES_SIZE}>
# BACnet data types supported for WriteProperty: all = minimal + extra
Expand Down
18 changes: 18 additions & 0 deletions zephyr/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,12 @@ config BACAPP_WEEKLY_SCHEDULE
help
BACnet data types supported for WriteProperty: WEEKLY_SCHEDULE

config BACNET_DAILY_SCHEDULE_TIME_VALUES_SIZE
int "Number of daily schedules for each of the 7 weekly schedules."
default 8
help
Number of daily schedules for each of the 7 weekly schedules. (default=8)

config BACAPP_CALENDAR_ENTRY
bool "BACnet data types supported for WriteProperty: CALENDAR_ENTRY"
default false
Expand Down Expand Up @@ -647,6 +653,12 @@ config BACDL_BIP6_PORT
help
UDP port to listen on (default=47808)

config BACNET_MAX_APDU_SIZE
int "Maximum size of the APDU"
default 1476
help
Maximum size of the APDU (default=1476)

config BACNET_MAX_TSM_TRANSACTIONS
int "Number of initiated confirmed-message transactions"
default 1
Expand Down Expand Up @@ -814,6 +826,12 @@ config BACNET_BASIC_OBJECT_LOAD_CONTROL
help
Use the BACnet basic load control object

config BACNET_BASIC_OBJECT_LOOP
bool "Use the BACnet basic loop object"
default false
help
Use the BACnet basic loop object

config BACNET_BASIC_OBJECT_LIGHTING_OUTPUT
bool "Use the BACnet basic lighting output object"
default false
Expand Down
7 changes: 5 additions & 2 deletions zephyr/samples/profiles/b-asc/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,24 @@

# system
CONFIG_KERNEL_MEM_POOL=y
CONFIG_HEAP_MEM_POOL_SIZE=8192
CONFIG_MAIN_THREAD_PRIORITY=7
#CONFIG_PICOLIBC=y
CONFIG_ISR_STACK_SIZE=8192
CONFIG_MAIN_STACK_SIZE=16384
CONFIG_IDLE_STACK_SIZE=2048
CONFIG_INIT_STACKS=y
CONFIG_NET_TX_STACK_SIZE=8192
CONFIG_NET_RX_STACK_SIZE=8192
CONFIG_HEAP_MEM_POOL_SIZE=16384
CONFIG_MAIN_STACK_SIZE=16384
CONFIG_BACNET_BASIC_SERVER_KSLEEP=100

# BACnet Library
CONFIG_BACNETSTACK=y
# BACnet Library - shell
CONFIG_BACNETSTACK_BACNET_SHELL=y
CONFIG_BACNETSTACK_BACNET_BASIC_SHELL=y
CONFIG_BACAPP_PRINT_ENABLED=y
CONFIG_SHELL_STACK_SIZE=16384
# BACnet settings subsystem
CONFIG_BACNETSTACK_BACNET_SETTINGS=y
CONFIG_BACNET_SETTINGS_SHELL=y
Expand All @@ -53,6 +55,7 @@ CONFIG_BACNET_BASIC_OBJECT_COLOR_TEMPERATURE=y
CONFIG_BACNET_BASIC_OBJECT_CHARACTERSTRING_VALUE=y
CONFIG_BACNET_BASIC_OBJECT_INTEGER_VALUE=y
CONFIG_BACNET_BASIC_OBJECT_LOAD_CONTROL=y
CONFIG_BACNET_BASIC_OBJECT_LOOP=y
CONFIG_BACNET_BASIC_OBJECT_LIGHTING_OUTPUT=y
CONFIG_BACNET_BASIC_OBJECT_BINARY_LIGHTING_OUTPUT=y
CONFIG_BACNET_BASIC_OBJECT_LIFE_SAFETY_POINT=y
Expand Down
2 changes: 2 additions & 0 deletions zephyr/samples/profiles/b-ld/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ CONFIG_BACNETSTACK=y
# BACnet Library - shell
CONFIG_BACNETSTACK_BACNET_SHELL=y
CONFIG_BACNETSTACK_BACNET_BASIC_SHELL=y
CONFIG_BACAPP_PRINT_ENABLED=y
CONFIG_SHELL_STACK_SIZE=16384
# BACnet settings subsystem
CONFIG_BACNETSTACK_BACNET_SETTINGS=y
CONFIG_BACNET_SETTINGS_SHELL=y
Expand Down
2 changes: 2 additions & 0 deletions zephyr/samples/profiles/b-ls/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ CONFIG_BACNETSTACK=y
# BACnet Library - shell
CONFIG_BACNETSTACK_BACNET_SHELL=y
CONFIG_BACNETSTACK_BACNET_BASIC_SHELL=y
CONFIG_BACAPP_PRINT_ENABLED=y
CONFIG_SHELL_STACK_SIZE=16384
# BACnet settings subsystem
CONFIG_BACNETSTACK_BACNET_SETTINGS=y
CONFIG_BACNET_SETTINGS_SHELL=y
Expand Down
2 changes: 2 additions & 0 deletions zephyr/samples/profiles/b-sa/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ CONFIG_BACNETSTACK=y
# BACnet Library - shell
CONFIG_BACNETSTACK_BACNET_SHELL=y
CONFIG_BACNETSTACK_BACNET_BASIC_SHELL=y
CONFIG_BACAPP_PRINT_ENABLED=y
CONFIG_SHELL_STACK_SIZE=16384
# BACnet settings subsystem
CONFIG_BACNETSTACK_BACNET_SETTINGS=y
CONFIG_BACNET_SETTINGS_SHELL=y
Expand Down
2 changes: 2 additions & 0 deletions zephyr/samples/profiles/b-ss/prj.conf
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ CONFIG_BACNETSTACK=y
# BACnet Library - shell
CONFIG_BACNETSTACK_BACNET_SHELL=y
CONFIG_BACNETSTACK_BACNET_BASIC_SHELL=y
CONFIG_BACAPP_PRINT_ENABLED=y
CONFIG_SHELL_STACK_SIZE=16384
# BACnet settings subsystem
CONFIG_BACNETSTACK_BACNET_SETTINGS=y
CONFIG_BACNET_SETTINGS_SHELL=y
Expand Down
1 change: 1 addition & 0 deletions zephyr/subsys/bacnet_shell/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,6 @@ zephyr_library_sources_ifdef(CONFIG_BACNETSTACK_BACNET_BASIC_SHELL
bacnet_shell_lighting_output.c
bacnet_shell_objects.c
bacnet_shell_packets.c
bacnet_shell_property.c
bacnet_shell_uptime.c
)
24 changes: 11 additions & 13 deletions zephyr/subsys/bacnet_shell/bacnet_shell_objects.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "bacnet/bacdef.h"
#include "bacnet/bacdcode.h"
#include "bacnet/bactext.h"
#include "bacnet/bacstr.h"
#include "bacnet/bacapp.h"
/* BACnet objects API */
#include "bacnet/basic/object/device.h"
Expand All @@ -33,39 +34,36 @@ static int bacnet_object_instance_parse(
uint16_t *r_object_type,
uint32_t *r_object_instance)
{
uint16_t object_type = 0;
uint32_t object_type = 0;
uint32_t object_instance = 0;
unsigned unsigned_value = 0;

if (argc < 2) {
shell_error(sh, "parse: %s <object-type> <instance>", argv[0]);
return -EINVAL;
}
if (!bactext_object_type_strtol(argv[1], &unsigned_value)) {
if (!bactext_object_type_strtol(argv[1], &object_type)) {
shell_error(sh, "parse: Invalid object-type: %s.", argv[1]);
return -EINVAL;
}
if (unsigned_value > BACNET_MAX_OBJECT) {
if (object_type > BACNET_MAX_OBJECT) {
shell_error(
sh, "parse: Invalid object-type: %s. Must be 0-%u.", argv[1],
BACNET_MAX_OBJECT);
return -EINVAL;
}
object_type = (uint16_t)unsigned_value;
if (!bactext_strtoul(argv[2], &unsigned_value)) {
if (r_object_type) {
*r_object_type = (uint16_t)object_type;
}
if (!bacnet_string_to_uint32(argv[2], &object_instance)) {
shell_error(sh, "parse: Invalid object-instance: %s.", argv[2]);
return -EINVAL;
}
if (unsigned_value > 4194303) {
if (object_instance > BACNET_MAX_INSTANCE) {
shell_error(
sh, "parse: Invalid object-instance: %s. Must be 0-4194303.",
argv[2]);
sh, "parse: Invalid object-instance: %s. Must be 0-%d.", argv[2],
BACNET_MAX_INSTANCE);
return -EINVAL;
}
object_instance = (uint32_t)unsigned_value;
if (r_object_type) {
*r_object_type = object_type;
}
if (r_object_instance) {
*r_object_instance = object_instance;
}
Expand Down
Loading
Loading