Zephyr core bacnet server port; bacnet/device test (#123)

Co-authored-by: Gregory Shue <gregory.shue@legrand.us>
This commit is contained in:
Greg Shue
2020-09-22 07:24:38 -07:00
committed by GitHub
parent cbaa106c59
commit a95b7d597e
26 changed files with 4166 additions and 86 deletions
+95 -82
View File
@@ -83,8 +83,8 @@ set(BACNETSTACK_SRCS
${BACNETSTACK_SRC}/bacnet/bactext.h
${BACNETSTACK_SRC}/bacnet/bactimevalue.c
${BACNETSTACK_SRC}/bacnet/bactimevalue.h
$<$<BOOL:${CONFIG_BACDL_BIP}>:${BACNETSTACK_SRC}/bacnet/basic/bbmd6/h_bbmd.c>
$<$<BOOL:${CONFIG_BACDL_BIP}>:${BACNETSTACK_SRC}/bacnet/basic/bbmd6/h_bbmd.h>
$<$<BOOL:${CONFIG_BACDL_BIP}>:${BACNETSTACK_SRC}/bacnet/basic/bbmd/h_bbmd.c>
$<$<BOOL:${CONFIG_BACDL_BIP}>:${BACNETSTACK_SRC}/bacnet/basic/bbmd/h_bbmd.h>
$<$<BOOL:${CONFIG_BACDL_BIP6}>:${BACNETSTACK_SRC}/bacnet/basic/bbmd6/h_bbmd6.c>
$<$<BOOL:${CONFIG_BACDL_BIP6}>:${BACNETSTACK_SRC}/bacnet/basic/bbmd6/h_bbmd6.h>
$<$<BOOL:${CONFIG_BACDL_BIP6}>:${BACNETSTACK_SRC}/bacnet/basic/bbmd6/vmac.c>
@@ -95,105 +95,58 @@ set(BACNETSTACK_SRCS
${BACNETSTACK_SRC}/bacnet/basic/npdu/h_npdu.h
${BACNETSTACK_SRC}/bacnet/basic/npdu/h_routed_npdu.c
${BACNETSTACK_SRC}/bacnet/basic/npdu/h_routed_npdu.h
${BACNETSTACK_SRC}/bacnet/basic/npdu/s_router.c
${BACNETSTACK_SRC}/bacnet/basic/npdu/s_router.h
${BACNETSTACK_SRC}/bacnet/basic/object/access_credential.c
${BACNETSTACK_SRC}/bacnet/basic/object/access_credential.h
${BACNETSTACK_SRC}/bacnet/basic/object/access_door.c
${BACNETSTACK_SRC}/bacnet/basic/object/access_door.h
${BACNETSTACK_SRC}/bacnet/basic/object/access_point.c
${BACNETSTACK_SRC}/bacnet/basic/object/access_point.h
${BACNETSTACK_SRC}/bacnet/basic/object/access_rights.c
${BACNETSTACK_SRC}/bacnet/basic/object/access_rights.h
${BACNETSTACK_SRC}/bacnet/basic/object/access_user.c
${BACNETSTACK_SRC}/bacnet/basic/object/access_user.h
${BACNETSTACK_SRC}/bacnet/basic/object/access_zone.c
${BACNETSTACK_SRC}/bacnet/basic/object/access_zone.h
${BACNETSTACK_SRC}/bacnet/basic/object/acc.c
${BACNETSTACK_SRC}/bacnet/basic/object/ai.c
${BACNETSTACK_SRC}/bacnet/basic/object/ai.h
${BACNETSTACK_SRC}/bacnet/basic/object/ao.c
${BACNETSTACK_SRC}/bacnet/basic/object/ao.h
${BACNETSTACK_SRC}/bacnet/basic/object/av.c
${BACNETSTACK_SRC}/bacnet/basic/object/av.h
#${BACNETSTACK_SRC}/bacnet/basic/object/bacfile.c # Build error: fseek not supported in Zephyr
${BACNETSTACK_SRC}/bacnet/basic/object/bacfile.h
${BACNETSTACK_SRC}/bacnet/basic/object/bi.c
${BACNETSTACK_SRC}/bacnet/basic/object/bi.h
${BACNETSTACK_SRC}/bacnet/basic/object/bo.c
${BACNETSTACK_SRC}/bacnet/basic/object/bo.h
${BACNETSTACK_SRC}/bacnet/basic/object/bv.c
${BACNETSTACK_SRC}/bacnet/basic/object/bv.h
${BACNETSTACK_SRC}/bacnet/basic/object/channel.c
${BACNETSTACK_SRC}/bacnet/basic/object/channel.h
#${BACNETSTACK_SRC}/bacnet/basic/object/client/device-client.c
${BACNETSTACK_SRC}/bacnet/basic/object/command.c
${BACNETSTACK_SRC}/bacnet/basic/object/command.h
${BACNETSTACK_SRC}/bacnet/basic/object/credential_data_input.c
${BACNETSTACK_SRC}/bacnet/basic/object/credential_data_input.h
${BACNETSTACK_SRC}/bacnet/basic/object/csv.c
${BACNETSTACK_SRC}/bacnet/basic/object/csv.h
${BACNETSTACK_SRC}/bacnet/basic/object/device.c
${BACNETSTACK_SRC}/bacnet/basic/object/device.h
$<$<BOOL:${CONFIG_BAC_ROUTING}>:${BACNETSTACK_SRC}/bacnet/basic/object/gateway/gw_device.c>
${BACNETSTACK_SRC}/bacnet/basic/object/iv.c
${BACNETSTACK_SRC}/bacnet/basic/object/iv.h
${BACNETSTACK_SRC}/bacnet/basic/object/lc.c
${BACNETSTACK_SRC}/bacnet/basic/object/lc.h
${BACNETSTACK_SRC}/bacnet/basic/object/lo.c
${BACNETSTACK_SRC}/bacnet/basic/object/lo.h
${BACNETSTACK_SRC}/bacnet/basic/object/lsp.c
${BACNETSTACK_SRC}/bacnet/basic/object/lsp.h
${BACNETSTACK_SRC}/bacnet/basic/object/Makefile
${BACNETSTACK_SRC}/bacnet/basic/object/ms-input.c
${BACNETSTACK_SRC}/bacnet/basic/object/ms-input.h
${BACNETSTACK_SRC}/bacnet/basic/object/mso.c
${BACNETSTACK_SRC}/bacnet/basic/object/mso.h
${BACNETSTACK_SRC}/bacnet/basic/object/msv.c
${BACNETSTACK_SRC}/bacnet/basic/object/msv.h
${BACNETSTACK_SRC}/bacnet/basic/object/nc.c
${BACNETSTACK_SRC}/bacnet/basic/object/nc.h
${BACNETSTACK_SRC}/bacnet/basic/object/netport.c
${BACNETSTACK_SRC}/bacnet/basic/object/netport.h
${BACNETSTACK_SRC}/bacnet/basic/object/objects.c
${BACNETSTACK_SRC}/bacnet/basic/object/objects.h
${BACNETSTACK_SRC}/bacnet/basic/object/osv.c
${BACNETSTACK_SRC}/bacnet/basic/object/osv.h
${BACNETSTACK_SRC}/bacnet/basic/object/piv.c
${BACNETSTACK_SRC}/bacnet/basic/object/piv.h
${BACNETSTACK_SRC}/bacnet/basic/object/schedule.c
${BACNETSTACK_SRC}/bacnet/basic/object/schedule.h
${BACNETSTACK_SRC}/bacnet/basic/object/trendlog.c
${BACNETSTACK_SRC}/bacnet/basic/object/trendlog.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_alarm_ack.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_alarm_ack.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_apdu.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_apdu.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_arf_a.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_arf_a.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_arf.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_arf.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_awf.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_awf.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_ccov.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_ccov.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_cov.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_cov.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_dcc.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_dcc.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_gas_a.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_gas_a.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_get_alarm_sum.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_get_alarm_sum.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_getevent_a.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_getevent_a.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_getevent.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_getevent.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_iam.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_iam.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_ihave.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_ihave.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_lso.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_lso.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_noserv.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_noserv.h
@@ -207,15 +160,10 @@ set(BACNETSTACK_SRCS
${BACNETSTACK_SRC}/bacnet/basic/service/h_rpm_a.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_rpm.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_rpm.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_rr_a.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_rr_a.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_rr.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_rr.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_ts.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_ts.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_ucov.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_ucov.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_upt.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_upt.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_whohas.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_whohas.h
@@ -225,55 +173,34 @@ set(BACNETSTACK_SRCS
${BACNETSTACK_SRC}/bacnet/basic/service/h_wp.h
${BACNETSTACK_SRC}/bacnet/basic/service/h_wpm.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_wpm.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_abort.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_abort.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_ack_alarm.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_ack_alarm.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_arfs.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_arfs.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_awfs.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_awfs.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_cevent.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_cevent.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_cov.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_cov.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_dcc.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_dcc.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_error.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_error.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_get_alarm_sum.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_get_alarm_sum.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_get_event.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_getevent.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_get_event.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_getevent.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_iam.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_iam.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_ihave.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_ihave.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_lso.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_lso.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_rd.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_rd.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_readrange.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_readrange.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_rp.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_rp.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_rpm.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_rpm.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_ts.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_ts.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_uevent.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_uevent.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_upt.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_upt.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_whohas.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_whohas.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_whois.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_whois.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_wp.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_wp.h
${BACNETSTACK_SRC}/bacnet/basic/service/s_wpm.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_wpm.h
${BACNETSTACK_SRC}/bacnet/basic/services.h
${BACNETSTACK_SRC}/bacnet/basic/sys/bigend.c
@@ -316,8 +243,6 @@ set(BACNETSTACK_SRCS
$<$<BOOL:${CONFIG_BACDL_MSTP}>:${BACNETSTACK_SRC}/bacnet/datalink/crc.c>
${BACNETSTACK_SRC}/bacnet/datalink/datalink.c
${BACNETSTACK_SRC}/bacnet/datalink/datalink.h
${BACNETSTACK_SRC}/bacnet/datalink/dlenv.c
${BACNETSTACK_SRC}/bacnet/datalink/dlenv.h
${BACNETSTACK_SRC}/bacnet/datalink/dlmstp.h
${BACNETSTACK_SRC}/bacnet/datalink/ethernet.h
$<$<BOOL:${CONFIG_BACDL_MSTP}>:${BACNETSTACK_SRC}/bacnet/datalink/mstp.h>
@@ -377,7 +302,86 @@ set(BACNETSTACK_SRCS
${BACNETSTACK_SRC}/bacnet/wp.c
${BACNETSTACK_SRC}/bacnet/wp.h
${BACNETSTACK_SRC}/bacnet/wpm.c
${BACNETSTACK_SRC}/bacnet/wpm.h)
${BACNETSTACK_SRC}/bacnet/wpm.h
)
set(BACNETSTACK_BASIC_SRCS
$<$<BOOL:${CONFIG_BACDL_BIP6}>:${BACNETSTACK_SRC}/bacnet/basic/bbmd6/h_bbmd6.c>
$<$<BOOL:${CONFIG_BACDL_BIP6}>:${BACNETSTACK_SRC}/bacnet/basic/bbmd6/vmac.c>
${BACNETSTACK_SRC}/bacnet/basic/npdu/s_router.c
${BACNETSTACK_SRC}/bacnet/basic/object/access_credential.c
${BACNETSTACK_SRC}/bacnet/basic/object/access_door.c
${BACNETSTACK_SRC}/bacnet/basic/object/access_point.c
${BACNETSTACK_SRC}/bacnet/basic/object/access_rights.c
${BACNETSTACK_SRC}/bacnet/basic/object/access_user.c
${BACNETSTACK_SRC}/bacnet/basic/object/access_zone.c
${BACNETSTACK_SRC}/bacnet/basic/object/acc.c
${BACNETSTACK_SRC}/bacnet/basic/object/ai.c
${BACNETSTACK_SRC}/bacnet/basic/object/ao.c
${BACNETSTACK_SRC}/bacnet/basic/object/av.c
${BACNETSTACK_SRC}/bacnet/basic/object/bacfile.c # Build error: fseek not supported in Zephyr
${BACNETSTACK_SRC}/bacnet/basic/object/bi.c
${BACNETSTACK_SRC}/bacnet/basic/object/bo.c
${BACNETSTACK_SRC}/bacnet/basic/object/bv.c
${BACNETSTACK_SRC}/bacnet/basic/object/channel.c
#${BACNETSTACK_SRC}/bacnet/basic/object/client/device-client.c
${BACNETSTACK_SRC}/bacnet/basic/object/command.c
${BACNETSTACK_SRC}/bacnet/basic/object/credential_data_input.c
${BACNETSTACK_SRC}/bacnet/basic/object/csv.c
${BACNETSTACK_SRC}/bacnet/basic/object/device.c
$<$<BOOL:${CONFIG_BAC_ROUTING}>:${BACNETSTACK_SRC}/bacnet/basic/object/gateway/gw_device.c>
${BACNETSTACK_SRC}/bacnet/basic/object/iv.c
${BACNETSTACK_SRC}/bacnet/basic/object/lc.c
${BACNETSTACK_SRC}/bacnet/basic/object/lo.c
${BACNETSTACK_SRC}/bacnet/basic/object/lsp.c
${BACNETSTACK_SRC}/bacnet/basic/object/Makefile
${BACNETSTACK_SRC}/bacnet/basic/object/ms-input.c
${BACNETSTACK_SRC}/bacnet/basic/object/mso.c
${BACNETSTACK_SRC}/bacnet/basic/object/msv.c
${BACNETSTACK_SRC}/bacnet/basic/object/nc.c
${BACNETSTACK_SRC}/bacnet/basic/object/netport.c
${BACNETSTACK_SRC}/bacnet/basic/object/objects.c
${BACNETSTACK_SRC}/bacnet/basic/object/osv.c
${BACNETSTACK_SRC}/bacnet/basic/object/piv.c
${BACNETSTACK_SRC}/bacnet/basic/object/schedule.c
${BACNETSTACK_SRC}/bacnet/basic/object/trendlog.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_alarm_ack.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_arf_a.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_arf.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_awf.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_ccov.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_gas_a.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_get_alarm_sum.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_getevent_a.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_getevent.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_lso.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_rr_a.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_rr.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_ts.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_ucov.c
${BACNETSTACK_SRC}/bacnet/basic/service/h_upt.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_abort.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_ack_alarm.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_arfs.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_awfs.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_cevent.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_cov.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_dcc.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_error.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_get_alarm_sum.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_get_event.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_getevent.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_lso.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_rd.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_readrange.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_rp.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_rpm.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_ts.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_uevent.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_upt.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_wp.c
${BACNETSTACK_SRC}/bacnet/basic/service/s_wpm.c
)
#
# add ports
@@ -390,14 +394,23 @@ set(BACNETSTACK_PORT ${CMAKE_CURRENT_LIST_DIR}/../ports/zephyr)
list(
APPEND BACNETSTACK_SRCS
${BACNETSTACK_PORT}/bacport.h
#${BACNETSTACK_PORT}/datetime-init.c
#$<$<BOOL:${CONFIG_BACDL_ETHERNET}>:${BACNETSTACK_PORT}/ethernet.c>
$<IF:$<BOOL:${CONFIG_NATIVE_APPLICATION}>,
${BACNETSTACK_BASIC_SRCS}
,#else
${BACNETSTACK_PORT}/device.c
>
${BACNETSTACK_PORT}/datetime-init.c
$<$<BOOL:${CONFIG_BACDL_BIP}>:${BACNETSTACK_PORT}/bip-init.c>
$<$<BOOL:${CONFIG_BACDL_BIP6}>:${BACNETSTACK_PORT}/bip6-init.c>
$<$<BOOL:${CONFIG_BACDL_BIP}>:${BACNETSTACK_PORT}/datalink/bvlc.c>
$<$<BOOL:${CONFIG_BACDL_ETHERNET}>:${BACNETSTACK_PORT}/ethernet.c>
${BACNETSTACK_PORT}/main.c
#${BACNETSTACK_PORT}/mstimer-init.c
${BACNETSTACK_PORT}/mstimer-init.c
)
add_subdirectory(subsys)
#
# library
+2 -2
View File
@@ -10,7 +10,7 @@ menuconfig BACNETSTACK
if BACNETSTACK
module = BACNET
module = BACNETSTACK
module-str = Log level for BACnet
module-help = Enable BACnet library to output debug messages
source "$(ZEPHYR_BASE)/subsys/logging/Kconfig.template.log_config"
@@ -100,6 +100,6 @@ config BACDL_BIP6_PORT
help
UDP port to listen on (default=47808)
#rsource "subsys/Kconfig"
rsource "subsys/Kconfig"
endif # BACNETSTACK
@@ -0,0 +1,8 @@
# SPDX-License-Identifier: MIT
cmake_minimum_required(VERSION 3.13.1)
include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_SCOPE)
project(b-ss)
target_sources(app PRIVATE src/main.c)
+23
View File
@@ -0,0 +1,23 @@
.. _b-ss_sample:
BACnet Profile B-SS Sample
##########################
Overview
********
This is a simple application demonstrating configuration of a
BACnet B-SS device profile.
Requirements
************
* A board with Ethernet support, for instance: mimxrt1064_evk
Building and Running
********************
This sample can be found under :bacnet_file:`samples/profiles/b-ss` in
the BACnet tree.
The sample can be built for several platforms.
+83
View File
@@ -0,0 +1,83 @@
CONFIG_BACNETSTACK=y
# BIP Options
CONFIG_BACDL_BIP=y
CONFIG_BACDL_BIP_PORT=47808
CONFIG_BACDL_BIP_ADDRESS_INDEX=0
# BIP6 Options
#CONFIG_BACDL_BIP6=y
CONFIG_BACDL_BIP6_PORT=47808
CONFIG_BACDL_BIP6_ADDRESS_INDEX=1
CONFIG_NET_IPV6_MLD=y
CONFIG_NET_IPV4=n
CONFIG_NET_ARP=n
CONFIG_BACDL_BIP6_ADDRESS_INDEX=0
CONFIG_BACDL_BIP6_MCAST_ADDRESS="FE80::0020" # YABE unicast workaround
CONFIG_NEWLIB_LIBC=y
# pthreads
CONFIG_POSIX_API=y
CONFIG_PTHREAD_IPC=y
CONFIG_POSIX_MQUEUE=y
# networking
CONFIG_NETWORKING=y
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=y
CONFIG_NET_ARP=y
CONFIG_NET_TCP=y
CONFIG_NET_UDP=y
#CONFIG_NET_DHCPV4=y
CONFIG_NET_MGMT=y
CONFIG_NET_MGMT_EVENT=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_CONFIG_SETTINGS=y
CONFIG_NET_CONFIG_MY_IPV4_ADDR="192.168.10.80"
CONFIG_NET_CONFIG_MY_IPV4_NETMASK="255.255.255.0"
CONFIG_NET_CONFIG_MY_IPV4_GW="192.168.10.1"
CONFIG_NET_CONFIG_PEER_IPV4_ADDR="192.168.10.1"
CONFIG_NET_LLDP=y
CONFIG_NET_IF_UNICAST_IPV6_ADDR_COUNT=4
CONFIG_NET_IF_MCAST_IPV6_ADDR_COUNT=4
CONFIG_NET_CONFIG_MY_IPV6_ADDR="FE80::0010"
# Promiscuous mode on layer 2 is required to receive IPv6 multicasts.
# Ethernet hardware will not respond to MAC 33:33:x:x:x:x without this:
CONFIG_ETH_MCUX_PROMISCUOUS_MODE=y
#CONFIG_LOG_STRDUP_BUF_COUNT=4
#CONFIG_LOG_STRDUP_MAX_STRING=96
CONFIG_DNS_RESOLVER=y
CONFIG_SLIP_STATISTICS=n
CONFIG_NET_SHELL=y
CONFIG_NET_TX_STACK_SIZE=8192
CONFIG_NET_RX_STACK_SIZE=8192
CONFIG_NET_IF_UNICAST_IPV4_ADDR_COUNT=4
# logging
#CONFIG_NET_CONN_LOG_LEVEL_DEFAULT=n
#CONFIG_NET_CONN_LOG_LEVEL_DBG=y
#CONFIG_NET_IF_LOG_LEVEL_DEFAULT=n
CONFIG_NET_IF_LOG_LEVEL_DBG=y
CONFIG_NET_LOG=y
CONFIG_LOG=y
CONFIG_BACNETSTACK_LOG_LEVEL_DBG=y
# system
CONFIG_ISR_STACK_SIZE=8192
CONFIG_MAIN_STACK_SIZE=8192
CONFIG_IDLE_STACK_SIZE=2048
CONFIG_TEST_RANDOM_GENERATOR=y
CONFIG_INIT_STACKS=y
CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE=131072
+7
View File
@@ -0,0 +1,7 @@
sample:
name: BACnet Profile B-SS Sample
tests:
sample.profile.b-ss:
tags: bacnet
platform_whitelist: qemu_x86 native_posix native_posix_64
+157
View File
@@ -0,0 +1,157 @@
/*
* Copyright (C) 2020 Legrand North America, Inc.
*
* SPDX-License-Identifier: MIT
*/
#include <kernel.h>
#include <stdint.h>
#include "bacnet/config.h"
#include "bacnet/bacdef.h"
#include "bacnet/bacdcode.h"
#include "bacnet/apdu.h"
#include "bacnet/dcc.h"
#include "bacnet/iam.h"
#include "bacnet/npdu.h"
#include "bacnet/getevent.h"
#include "bacnet/version.h"
#include "bacnet/basic/services.h"
#include "bacnet/datalink/dlenv.h"
#include "bacnet/basic/sys/filename.h"
#include "bacnet/basic/tsm/tsm.h"
#include "bacnet/basic/tsm/tsm.h"
#include "bacnet/datalink/datalink.h"
#include "bacnet/basic/binding/address.h"
/* include the device object */
#include "bacnet/basic/object/device.h"
#include "bacnet/basic/object/lc.h"
#include "bacnet/basic/object/trendlog.h"
#if defined(INTRINSIC_REPORTING)
#include "bacnet/basic/object/nc.h"
#endif /* defined(INTRINSIC_REPORTING) */
/* Logging module registration is already done in ports/zephyr/main.c */
#include <logging/log.h>
LOG_MODULE_DECLARE(bacnet, CONFIG_BACNETSTACK_LOG_LEVEL);
/** Buffer used for receiving */
static uint8_t Rx_Buf[MAX_MPDU] = { 0 };
/** Initialize the handlers we will utilize.
* @see Device_Init, apdu_set_unconfirmed_handler, apdu_set_confirmed_handler
*/
static void service_handlers_init(void)
{
Device_Init(NULL);
/* we need to handle who-is to support dynamic device binding */
apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_IS,
handler_who_is);
apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_HAS,
handler_who_has);
/* set the handler for all the services we don't implement */
/* It is required to send the proper reject message... */
apdu_set_unrecognized_service_handler_handler(
handler_unrecognized_service);
/* Set the handlers for any confirmed services that we support. */
/* We must implement read property - it's required! */
apdu_set_confirmed_handler(SERVICE_CONFIRMED_READ_PROPERTY,
handler_read_property);
apdu_set_confirmed_handler(SERVICE_CONFIRMED_READ_PROP_MULTIPLE,
handler_read_property_multiple);
apdu_set_confirmed_handler(SERVICE_CONFIRMED_WRITE_PROPERTY,
handler_write_property);
apdu_set_confirmed_handler(SERVICE_CONFIRMED_WRITE_PROP_MULTIPLE,
handler_write_property_multiple);
apdu_set_confirmed_handler(SERVICE_CONFIRMED_REINITIALIZE_DEVICE,
handler_reinitialize_device);
/* handle communication so we can shutup when asked */
apdu_set_confirmed_handler(
SERVICE_CONFIRMED_DEVICE_COMMUNICATION_CONTROL,
handler_device_communication_control);
}
void main(void)
{
LOG_INF("\n*** BACnet Profile B-SS Sample ***\n");
LOG_INF("BACnet Stack Version " BACNET_VERSION_TEXT);
LOG_INF("BACnet Device ID: %u", Device_Object_Instance_Number());
LOG_INF("BACnet Device Max APDU: %d", MAX_APDU);
service_handlers_init();
datalink_init(NULL);
/* configure the timeout values */
s64_t last_ms = k_uptime_get();
/* broadcast an I-Am on startup */
Send_I_Am(&Handler_Transmit_Buffer[0]);
s64_t address_binding_tmr = 0;
#if defined(INTRINSIC_REPORTING)
s64_t recipient_scan_tmr = 0;
#endif
#if defined(BACNET_TIME_MASTER)
BACNET_DATE_TIME bdatetime = { 0 };
#endif
for (;;) {
k_sleep(K_MSEC(1)); /* Allows debug prints */
BACNET_ADDRESS src = { 0 }; /* address where message came from */
const unsigned timeout_ms = 1;
s64_t current_ms = k_uptime_get();
/* returns 0 bytes on timeout */
uint16_t const pdu_len = datalink_receive(&src, &Rx_Buf[0],
MAX_MPDU, timeout_ms);
/* process */
if (pdu_len > 0) {
npdu_handler(&src, &Rx_Buf[0], pdu_len);
}
if (current_ms - last_ms > 1000) {
const uint32_t elapsed_milliseconds =
(uint32_t)(current_ms - last_ms);
//TODO: const uint32_t elapsed_seconds = elapsed_milliseconds / 1000UL;
last_ms = current_ms;
//TODO: dcc_timer_seconds(elapsed_seconds);
//TODO: datalink_maintenance_timer(elapsed_seconds);
//TODO: dlenv_maintenance_timer(elapsed_seconds);
//TODO: Load_Control_State_Machine_handler():
//TODO: handler_cov_timer_seconds(elapsed_seconds);
//TODO: tsm_timer_milliseconds(elapsed_milliseconds);
//TODO: trend_log_timer(elapsed_seconds);
#if defined(INTRINSIC_REPORTING)
//TODO: Device_local_reporting();
#endif
#if defined(BACNET_TIME_MASTER)
//TODO: Device_getCurrentDateTime(&bdatetime);
//TODO: handler_Timesync_task(&bdatetime);
#endif
address_binding_tmr += elapsed_milliseconds;
#if defined(INTRINSIC_REPORTING)
recipient_scan_tmr += elapsed_milliseconds;
#endif
}
//TODO: handler_cov_task();
/* scan cache address */
if (address_binding_tmr >= 60 * 1000) {
//TODO: address_cache_timer(address_binding_tmr / 1000);
address_binding_tmr = 0;
}
#if defined(INTRINSIC_REPORTING)
/* try to find addresses of recipients */
if (recipient_scan_tmr >= NC_RESCAN_RECIPIENTS_SECS * 1000) {
//TODO: Notification_Class_find_recipient();
recipient_scan_tmr = 0;
}
#endif
/* output */
/* blink LEDs, Turn on or off outputs, etc */
}
}
+4
View File
@@ -0,0 +1,4 @@
# Copyright (c) 2020 Legrand North America, LLC.
# SPDX-License-Identifier: MIT
add_subdirectory_ifdef(CONFIG_BACNETSTACK_BACNET_SERVER server)
+8
View File
@@ -0,0 +1,8 @@
# Copyright (c) 2020 Legrand North America, LLC.
# SPDX-License-Identifier: MIT
# Kconfig - Subsystem configuration options
comment "BACnet Subsystems"
rsource "server/Kconfig"
+11
View File
@@ -0,0 +1,11 @@
# Copyright (c) 2020 Legrand North America, LLC.
# SPDX-License-Identifier: MIT
zephyr_include_directories(include)
zephyr_interface_library_named(bac_server)
zephyr_library()
zephyr_library_sources(server.c)
zephyr_library_link_libraries(bac_server)
+35
View File
@@ -0,0 +1,35 @@
# Copyright (c) 2020 Legrand North America, LLC.
# SPDX-License-Identifier: MIT
# Kconfig -
menuconfig BACNETSTACK_BACNET_SERVER
bool "BACNETSTACK_BACNET_SERVER"
help
This option enables BACnet Server services
if BACNETSTACK_BACNET_SERVER
module = BACNETSTACK_BACNET_SERVER
module-str = bac_server
config BACNETSTACK_BACNET_SERVER_APP_PRIORITY
int "App init priority"
default 0
help
This sets the starting priority of the thread.
config BACNETSTACK_BACNET_SERVER_PRIO
int "BACnet server thread priority"
default 50
help
This sets the execution priority of the thread.
config BACNETSTACK_BACNET_SERVER_STACK_SIZE
int "BACnet server stack size"
default 4096
help
This sets the stack size of the thread.
endif # BACNETSTACK_BACNET_SERVER
+242
View File
@@ -0,0 +1,242 @@
/*
* Copyright (c) 2020 Legrand North America, LLC.
*
* SPDX-License-Identifier: MIT
*/
#include <stdalign.h> /*TODO: Not std until C11! */
#include <device.h>
#include <init.h>
#include <kernel.h>
#include <net/net_if.h>
#include <net/net_core.h>
#include <net/net_context.h>
#include <net/net_mgmt.h>
#include <net/net_ip.h>
#include <sys/printk.h>
/* some BACnet modules we use */
#include "bacnet/bacdef.h"
#include "bacnet/config.h"
#include "bacnet/bactext.h"
#include "bacnet/bacerror.h"
#include "bacnet/iam.h"
#include "bacnet/arf.h"
#include "bacnet/npdu.h"
#include "bacnet/apdu.h"
#include "bacnet/version.h"
/* some demo modules we use */
#include "bacnet/basic/sys/debug.h"
#include "bacnet/basic/tsm/tsm.h"
#include "bacnet/basic/binding/address.h"
#include "bacnet/basic/services.h"
/* our datalink layers */
#include "bacnet/datalink/bip.h"
#include "bacnet/datalink/bvlc.h"
/* include the device object */
#include "bacnet/basic/object/device.h"
/* Logging module registration is already done in ports/zephyr/main.c */
#include <logging/log.h>
LOG_MODULE_DECLARE(bacnet, CONFIG_BACNETSTACK_LOG_LEVEL);
enum bacnet_server_msg_type {
SERVER_MSG_TYPE_INVALID = 0,
SERVER_MSG_TYPE_IPV4_EVENT,
};
struct bacnet_server_msg {
uint8_t type;
uint8_t dummy[3];
uint32_t parm_u32;
void *parm_ptr;
};
K_MSGQ_DEFINE(bacnet_server_msgq, sizeof(struct bacnet_server_msg), 8,
alignof(struct bacnet_server_msg));
#define SERVER_IPV4_EVENTS_MASK \
(NET_EVENT_IPV4_ADDR_ADD | NET_EVENT_IPV4_ADDR_DEL)
static struct k_thread server_thread_data;
static K_THREAD_STACK_DEFINE(server_thread_stack,
CONFIG_BACNETSTACK_BACNET_SERVER_STACK_SIZE);
/* Keep a reference to the Ethernet interface */
static struct net_mgmt_event_callback mgmt_cb;
/* track our directly connected ports network number */
static uint16_t BIP_Net;
/* buffer for receiving packets from the directly connected ports */
static uint8_t BIP_Rx_Buffer[MAX_MPDU];
/** Initialize the handlers we will utilize.
* @see Device_Init, apdu_set_unconfirmed_handler, apdu_set_confirmed_handler
*/
static void service_handlers_init(void)
{
Device_Init(NULL);
/* we need to handle who-is to support dynamic device binding */
apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_IS,
handler_who_is);
apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_HAS,
handler_who_has);
/* set the handler for all the services we don't implement */
/* It is required to send the proper reject message... */
apdu_set_unrecognized_service_handler_handler(
handler_unrecognized_service);
/* Set the handlers for any confirmed services that we support. */
/* We must implement read property - it's required! */
apdu_set_confirmed_handler(SERVICE_CONFIRMED_READ_PROPERTY,
handler_read_property);
apdu_set_confirmed_handler(SERVICE_CONFIRMED_READ_PROP_MULTIPLE,
handler_read_property_multiple);
apdu_set_confirmed_handler(SERVICE_CONFIRMED_WRITE_PROPERTY,
handler_write_property);
apdu_set_confirmed_handler(SERVICE_CONFIRMED_WRITE_PROP_MULTIPLE,
handler_write_property_multiple);
apdu_set_confirmed_handler(SERVICE_CONFIRMED_REINITIALIZE_DEVICE,
handler_reinitialize_device);
/* handle communication so we can shutup when asked */
apdu_set_confirmed_handler(
SERVICE_CONFIRMED_DEVICE_COMMUNICATION_CONTROL,
handler_device_communication_control);
}
/* TODO: Update copyright as this code pattern copied from
* conn_mgr_ipv4_events_handler()
*/
static void ipv4_events_handler(struct net_mgmt_event_callback *cb,
u32_t mgmt_event, struct net_if *iface)
{
static int counter = 0;
printk("\n*** Handler[%d]: IPv4 event %08x received on iface %p ***\n",
++counter, mgmt_event, iface);
if ((mgmt_event & SERVER_IPV4_EVENTS_MASK) != mgmt_event) {
printk("\n*** Handler[%d]: ignoring event %08x on iface %p ***\n",
counter, mgmt_event, iface);
return;
}
struct bacnet_server_msg msg = {
.type = SERVER_MSG_TYPE_IPV4_EVENT,
.parm_u32 = mgmt_event,
.parm_ptr = iface,
};
int ret = k_msgq_put(&bacnet_server_msgq, &msg, K_NO_WAIT);
if (ret != 0) {
printk("\n*** Handler[%d]: queue full, type %u event 0x%08x on iface %p dropped! ***\n",
counter, msg.type, msg.parm_u32, msg.parm_ptr);
}
}
/**
* @brief BACnet Server Thread
*/
static void server_thread(void)
{
LOG_INF("Server: started");
service_handlers_init();
bip_init("Server: from init");
BIP_Net = 1;
net_mgmt_init_event_callback(&mgmt_cb, ipv4_events_handler,
SERVER_IPV4_EVENTS_MASK);
net_mgmt_add_event_callback(&mgmt_cb);
while (1) {
const s32_t sleep_ms = K_FOREVER;
struct bacnet_server_msg msg = {
.type = SERVER_MSG_TYPE_INVALID,
};
int ret = k_msgq_get(&bacnet_server_msgq, &msg, sleep_ms);
/* Waiting period timed out */
if (-EAGAIN == ret) {
BACNET_ADDRESS src = {
0
}; /* address where message came from */
/* input */
/* returns 0 bytes on timeout */
uint16_t pdu_len = bip_receive(&src, &BIP_Rx_Buffer[0],
MAX_MPDU, 5);
/* process */
if (pdu_len) {
LOG_INF("Server: BIP received %u bytes.",
(unsigned)pdu_len);
}
}
/* Message received */
else if (0 == ret) {
switch (msg.type) {
#if defined(CONFIG_NET_IPV4)
case SERVER_MSG_TYPE_IPV4_EVENT: {
LOG_INF("Server: MSG_TYPE_IPV4_EVENT u32: %08x ptr: %p",
msg.parm_u32, msg.parm_ptr);
const u32_t mgmt_event = msg.parm_u32;
//TODO: const struct net_if *iface = msg.parm_ptr;
/* Handle events */
if ((mgmt_event & SERVER_IPV4_EVENTS_MASK) !=
mgmt_event) {
LOG_INF("Server: thread ignoring event");
break;
}
switch (NET_MGMT_GET_COMMAND(mgmt_event)) {
#if 0
case NET_EVENT_IPV4_CMD_ADDR_ADD:
LOG_INF("Server: IPv4 addr activated");
bip_init("Server: from CMD_ADDR_ADD");
BIP_Net = bip_valid() ? 1 : 0;
break;
case NET_EVENT_IPV4_CMD_ADDR_DEL:
LOG_INF("Server: IPv4 addr deactivated");
bip_cleanup();
BIP_Net = 0;
break;
#endif
default:
LOG_INF("Server: Unsupported event %u",
mgmt_event);
break;
}
} break;
#endif /* defined(CONFIG_NET_IPV4) */
default:
LOG_WRN("Server: Dropping unsupported type %u",
msg.type);
break;
}
}
/* Returned without waiting and without message - why? */
else {
LOG_WRN("Server: Msgq returned w/o timeout or msg! req = %d",
ret);
}
}
}
static int server_init(struct device *dev)
{
ARG_UNUSED(dev);
k_thread_create(&server_thread_data, server_thread_stack,
K_THREAD_STACK_SIZEOF(server_thread_stack),
(k_thread_entry_t)server_thread, NULL, NULL, NULL,
K_PRIO_PREEMPT(CONFIG_BACNETSTACK_BACNET_SERVER_PRIO), 0,
K_NO_WAIT);
k_thread_name_set(&server_thread_data, "BACserver");
return 0;
}
SYS_INIT(server_init, APPLICATION, CONFIG_BACNETSTACK_BACNET_SERVER_APP_PRIORITY);
+25
View File
@@ -0,0 +1,25 @@
# SPDX-License-Identifier: MIT
cmake_minimum_required(VERSION 3.13.1)
# Extract module path and names
string(REGEX REPLACE
"/zephyr/tests/[a-zA-Z_/-]*$" ""
BACNET_BASE
${CMAKE_CURRENT_SOURCE_DIR})
string(REGEX REPLACE
"/zephyr/tests/" "/test/"
BACNET_TEST_PATH
${CMAKE_CURRENT_SOURCE_DIR})
get_filename_component(BACNET_NAME ${BACNET_BASE} NAME)
# Update include path for this module
list(APPEND BACNET_INCLUDE ${BACNET_BASE}/src)
include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_SCOPE)
project(${BACNET_NAME})
target_include_directories(app PRIVATE ${BACNET_INCLUDE})
target_sources(app PRIVATE
${BACNET_TEST_PATH}/src/main.c
)
+11
View File
@@ -0,0 +1,11 @@
CONFIG_ZTEST=y
CONFIG_BACNETSTACK=y
CONFIG_NETWORKING=y
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=y
CONFIG_NET_ARP=y
CONFIG_NET_TCP=y
CONFIG_NET_UDP=y
CONFIG_NEWLIB_LIBC=y
+3
View File
@@ -0,0 +1,3 @@
tests:
bacnet.device:
tags: bacnet