Firmware SDK
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
bc_module_relay.h
1 #ifndef _BC_MODULE_RELAY_H
2 #define _BC_MODULE_RELAY_H
3 
4 #include <bc_tca9534a.h>
5 #include <bc_scheduler.h>
6 
7 #define BC_MODULE_RELAY_I2C_ADDRESS_DEFAULT 0x3B
8 #define BC_MODULE_RELAY_I2C_ADDRESS_ALTERNATE 0x3F
9 
33 
35 
36 typedef enum
37 {
40 
43 
46 
48 
50 
52 
54 
55 typedef enum
56 {
57  BC_MODULE_RELAY_TASK_STATE_IDLE,
58  BC_MODULE_RELAY_TASK_STATE_SET,
59  BC_MODULE_RELAY_TASK_STATE_SET_DEMAGNETIZE,
60  BC_MODULE_RELAY_TASK_STATE_PULSE,
61  BC_MODULE_RELAY_TASK_STATE_PULSE_DEMAGNETIZE,
62  BC_MODULE_RELAY_TASK_STATE_PULSE_REVERSE,
63  BC_MODULE_RELAY_TASK_STATE_PULSE_DEMAGNETIZE_2
64 
65 } bc_module_relay_task_state_t;
66 
67 typedef enum
68 {
69  BC_MODULE_RELAY_COMMAND_NONE = 0,
70  BC_MODULE_RELAY_COMMAND_SET = 1,
71  BC_MODULE_RELAY_COMMAND_PULSE = 2
72 
73 } bc_module_relay_command_t;
74 
75 struct bc_module_relay_t
76 {
77  uint8_t _i2c_address;
78  bc_tca9534a_t _tca9534a;
79  bc_module_relay_state_t _relay_state;
80  bc_tick_t _timestamp;
81  bc_scheduler_task_id_t _task_id;
82  bc_module_relay_task_state_t _state;
83  bc_module_relay_command_t _command;
84  bc_module_relay_state_t _desired_state;
85  bc_tick_t _pulse_duration;
86  bool _task_is_active;
87  bool _error;
88 };
89 
91 
94 
95 bool bc_module_relay_init(bc_module_relay_t *self, uint8_t i2c_address);
96 
100 
101 void bc_module_relay_set_state(bc_module_relay_t *self, bool state);
102 
106 
108 
113 
114 void bc_module_relay_pulse(bc_module_relay_t *self, bool direction, bc_tick_t duration);
115 
118 
120 
122 
123 #endif // _BC_MODULE_RELAY_H
bc_module_relay_state_t
Reported relay states.
bool bc_module_relay_init(bc_module_relay_t *self, uint8_t i2c_address)
Initialize BigClown Relay Module.
uint64_t bc_tick_t
Timestamp data type.
Definition: bc_tick.h:16
bc_module_relay_state_t bc_module_relay_get_state(bc_module_relay_t *self)
Get current relay state.
Pin state.
Definition: bc_tca9534a.h:42
size_t bc_scheduler_task_id_t
Task ID assigned by scheduler.
Definition: bc_scheduler.h:18
void bc_module_relay_pulse(bc_module_relay_t *self, bool direction, bc_tick_t duration)
Generate pulse to specified state for given duration.
void bc_module_relay_set_state(bc_module_relay_t *self, bool state)
Set relay to specified state.
void bc_module_relay_toggle(bc_module_relay_t *self)
Toggle relay to opposite state.
struct bc_module_relay_t bc_module_relay_t
BigClown Relay Module instance.