Zephyr core bacnet server port; bacnet/device test (#123)
Co-authored-by: Gregory Shue <gregory.shue@legrand.us>
This commit is contained in:
+95
-82
@@ -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
@@ -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)
|
||||
@@ -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.
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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 */
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
# Copyright (c) 2020 Legrand North America, LLC.
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
add_subdirectory_ifdef(CONFIG_BACNETSTACK_BACNET_SERVER server)
|
||||
@@ -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"
|
||||
@@ -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)
|
||||
@@ -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
|
||||
@@ -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);
|
||||
@@ -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
|
||||
)
|
||||
@@ -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
|
||||
@@ -0,0 +1,3 @@
|
||||
tests:
|
||||
bacnet.device:
|
||||
tags: bacnet
|
||||
Reference in New Issue
Block a user