Files
bacnet_stack/src/bacnet/datalink/bsc/bsc-event.h
T
Steve Karg cf77abac9b Feature/bacnet secure connect hub (#818)
* Added BACnet Secure Connect datalink.

* Added BACnet/SC hub application
---------

Co-authored-by: Kirill Neznamov <kirill.neznamov@dsr-corporation.com>
Co-authored-by: Mikhail Antropov <michail.antropov@dsr-corporation.com>
Co-authored-by: Ondřej Hruška <ondra@ondrovo.com>
Co-authored-by: Patrick Grimm <patrick@lunatiki.de>
2024-11-04 07:05:26 -06:00

102 lines
3.4 KiB
C

/**
* @file
* @brief crossplatform event abstraction used in BACnet secure connect.
* @author Kirill Neznamov <kirill.neznamov@dsr-corporation.com>
* @date August 2022
* @copyright SPDX-License-Identifier: MIT
*/
#ifndef BACNET_DATALINK_BSC_EVENT_H
#define BACNET_DATALINK_BSC_EVENT_H
/* BACnet Stack defines - first */
#include "bacnet/bacdef.h"
struct BSC_Event;
typedef struct BSC_Event BSC_EVENT;
/**
* @brief bsc_event_init() allocates and initializes auto-reset
* event object to non-signalled state. An event object
* can be set to signalled state by the call of
* bsc_event_signal(). When the state of the event object
* is signaled, it remains signaled until last thread is
* released which was blocked on bsc_event_wait() or
* bsc_event_timed_wait() calls. When writing the code user
* must always remember the following statements:
* 1. It is guaranteed that all currently waiting threads will be
* unblocked by the call of bsc_event_signal().
* 2. If user has called bsc_event_wait() or bsc_event_timedwait()
* from thread N after the call of bsc_event_signal() but
* when the state of the corresponded event object is still
* signalled, it is not guaranteed that thread N will be
* unblocked. Thread N may be stay blocked or may unblock
* depending on multitasking context of the OS.
*
* @return handle of event object if function succeeded, otherwise
* returns NULL.
*/
BSC_EVENT *bsc_event_init(void);
/**
* @brief bsc_event_deinit() deinitialize auto-reset
* event object. If a user calls that function while
* some threads are waiting the specified event object ev
* the behaviour is undefined.
*
* @param ev - handle to previously initialized event object.
*/
void bsc_event_deinit(BSC_EVENT *ev);
/**
* @brief bsc_wait() suspends the execution of the current thread
* for the specified amount of seconds.
*
* @param seconds - time to sleep in seconds.
*/
void bsc_wait(int seconds);
/**
* @brief bsc_wait() suspends the execution of the current thread
* for the specified amount of seconds.
*
* @param mseconds - time to sleep in milliseconds.
*/
void bsc_wait_ms(int mseconds);
/**
* @brief bsc_event_wait() suspends the execution of the current thread
* until corresponded event object becomes signalled.
*
* @param ev - handle to previously initialized event object.
*/
void bsc_event_wait(BSC_EVENT *ev);
/**
* @brief bsc_event_timedwait() suspends the execution of the current thread
* until corresponded event object becomes signalled
* or ms_timeout becomes elapsed.
*
* @param ev - handle to previously initialized event object.
* @param ms_timeout - timeout in milliseconds
* @return true if the corresponded event was signalled.
* false if ms_timeout was elapsed but event ev is still in
* non signalled state.
*/
bool bsc_event_timedwait(BSC_EVENT *ev, unsigned int ms_timeout);
/**
* @brief bsc_event_signal() function sets state of corresponded event object
* to signalled state.
*
* @param ev - handle to previously initialized event object.
*/
void bsc_event_signal(BSC_EVENT *ev);
#endif