src.dualinventive.com/dinet/libdi-php/libdi/include/di/tws/du/strike.h

83 lines
2.0 KiB
C

/**
* TWS-3000 detection unit strike counter and filter (DUU & DUM)
*/
#ifndef LIBDI_INCLUDE_TWS_DU_STRIKE_H_
#define LIBDI_INCLUDE_TWS_DU_STRIKE_H_
#include <stdbool.h>
#include <di/types.h>
#include <di/semaphore.h>
#include <di/rpc/structures.h>
#include <di/constants/rpc/du.h>
#include <di/time.h>
#define DI_TWS_DU_STRIKE_MANUAL_HOLDOFF_TIME_MS 0
#define DI_TWS_DU_STRIKE_ULTRASONIC_HOLDOFF_TIME_MS 5000
struct di_tws_du_strike {
di_bsem_t lock;
enum di_rpc_du_strike_role role;
bool value;
bool striked;
uint32_t train_counter;
di_time_t holdoff_time;
di_time_t holdoff_until;
};
#ifdef __cplusplus
extern "C" {
#endif
/**
* Initialize the strike state
* @note May only be called once
* @param s Strike state
*/
void di_tws_du_strike_init(struct di_tws_du_strike *s);
/**
* Reset the strike state
* @param s Strike state
* @param role Strike role
* @param holdoff_time Hold-off time
*/
void di_tws_du_strike_reset(struct di_tws_du_strike *s, const enum di_rpc_du_strike_role role,
const di_time_t holdoff_time);
/**
* Update the strike state
* @param s Strike state
* @param value Next strike value
* @return true when update resulted in a strike, false otherwise
*/
bool di_tws_du_strike_update(struct di_tws_du_strike *s, const bool value);
/**
* Get current strike role
* @return Current strike role
*/
enum di_rpc_du_strike_role di_tws_du_strike_get_role(struct di_tws_du_strike *s);
/**
* Get the detection unit strike role from an DI-Net RPC message data.
* Only valid strike roles are IN or OUT.
* @param role[out] Strike role
* @param data[in] DI-Net RPC message data
* @return DNOK when strike role is read, !DNOK otherwise
*/
di_errno_t di_tws_du_strike_rpc_get_role(enum di_rpc_du_strike_role *role, const struct di_rpc_data *data);
/**
* Get the current incremental train counter
* @param s Strike state
* @return Incremental train counter
*/
uint32_t di_tws_du_strike_get_train_counter(struct di_tws_du_strike *s);
#ifdef __cplusplus
}
#endif
#endif /* LIBDI_INCLUDE_TWS_DU_STRIKE_H_ */