Files
bacnet_stack/zephyr/subsys/bacnet_basic/bacnet_port.c
T
Steve Karg 1e889b633c Added Zephyr settings and basic device in subsys. (#697)
* Added Zephyr settings subsys to enable storing of BACnet values according to BACnet object property value path.

* Added BACnet Basic features to enable basic samples. Refactored the zephyr BACnet profile B-SS sample to use BACnet basic subsys.
2024-07-19 17:12:20 -05:00

67 lines
1.8 KiB
C

/**
* @file
* @brief The BACnet/IPv4 datalink tasks for handling the device specific
* data link layer
* @author Steve Karg <skarg@users.sourceforge.net>
* @date April 2024
* @copyright SPDX-License-Identifier: MIT
*/
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
/* BACnet definitions */
#include "bacnet/bacdef.h"
/* BACnet library API */
#include "bacnet/basic/sys/mstimer.h"
#include "bacnet/datalink/datalink.h"
#include "bacnet/basic/object/netport.h"
#if defined(BACDL_BIP)
#include "bacnet_basic/bacnet_port_ipv4.h"
#elif defined(BACDL_BIP6)
#include "bacnet_basic/bacnet_port_ipv6.h"
#endif
/* me! */
#include "bacnet_basic/bacnet_port.h"
/* timer used to renew Foreign Device Registration */
static struct mstimer BACnet_Task_Timer;
/**
* @brief Periodic tasks for the BACnet datalink layer
*/
void bacnet_port_task(void)
{
uint32_t elapsed_milliseconds = 0;
uint32_t elapsed_seconds = 0;
if (mstimer_expired(&BACnet_Task_Timer)) {
/* 1 second tasks */
mstimer_reset(&BACnet_Task_Timer);
/* presume that the elapsed time is the interval time */
elapsed_milliseconds = mstimer_interval(&BACnet_Task_Timer);
elapsed_seconds = elapsed_milliseconds / 1000;
#if defined(BACDL_BIP)
bacnet_port_ipv4_task(elapsed_seconds);
#elif defined(BACDL_BIP6)
bacnet_port_ipv6_task(elapsed_seconds);
#endif
}
}
/**
* @brief Initialize the datalink network port
*/
bool bacnet_port_init(void)
{
bool status = false;
/* start the 1 second timer for non-critical cyclic tasks */
mstimer_set(&BACnet_Task_Timer, 1000L);
#if defined(BACDL_BIP)
status = bacnet_port_ipv4_init();
#elif defined(BACDL_BIP6)
status = bacnet_port_ipv6_init();
#endif
return status;
}