Bluenet
5.7.0
Bluenet, firmware for nRF52 smart home devices
|
Class that takes care of safety of switch. More...
#include <cs_SafeSwitch.h>
Public Types | |
typedef function< void(switch_state_t newState)> | callback_on_state_change_t |
Callback function definition. More... | |
Public Member Functions | |
void | init (const boards_config_t &board) |
void | start () |
Start switch. More... | |
cs_ret_code_t | setRelay (bool value) |
Set relay. More... | |
cs_ret_code_t | setDimmer (uint8_t intensity, bool fade=true) |
Set dimmer intensity. More... | |
switch_state_t | getState () |
Get current switch state. More... | |
bool | isRelayStateAccurate () |
The relay bit of the return value of getState() is retrieved from persistent memory at startup. More... | |
void | onUnexpextedStateChange (const callback_on_state_change_t &closure) |
Register a callback function that's called when state changes unexpectedly. More... | |
void | handleEvent (event_t &evt) override |
Handle events. More... | |
![]() | |
EventListener () | |
virtual | ~EventListener () |
unregisters the listener. More... | |
virtual void | handleEvent (event_t &event)=0 |
Handle events. More... | |
void | listen () |
Registers this with the EventDispatcher. More... | |
Private Member Functions | |
cs_ret_code_t | setRelayUnchecked (bool value) |
Set relay. More... | |
cs_ret_code_t | setDimmerUnchecked (uint8_t intensity, bool fade) |
Set dimmer intensity. More... | |
cs_ret_code_t | startDimmerPowerCheck (uint8_t intensity, bool fade) |
Try to see if dimmer is powered: Set dimmer intensity, and start power usage check. More... | |
void | cancelDimmerPowerCheck () |
Cancel power usage check. More... | |
void | checkDimmerPower () |
Check if power is used due to dimmer being on. More... | |
void | dimmerPoweredUp () |
Called when enough time has passed for the dimmer to be powered. More... | |
void | setDimmerPowered (bool powered) |
Set dimmerPowered and sends event. More... | |
void | forceSwitchOff () |
Turn relay and dimmer off, without any checks. More... | |
void | forceRelayOnAndDimmerOff () |
Turn relay on and dimmer off, without any checks. More... | |
state_errors_t | getErrorState () |
Get state errors from State. More... | |
bool | isSwitchOverLoaded (state_errors_t stateErrors) |
bool | hasDimmerError (state_errors_t stateErrors) |
bool | isSafeToDim (state_errors_t stateErrors) |
bool | isSafeToTurnRelayOn (state_errors_t stateErrors) |
bool | isSafeToTurnRelayOff (state_errors_t stateErrors) |
bool | isDimmerStateChangeAllowed () |
bool | isRelayStateChangeAllowed () |
bool | isWarmBoot () |
Returns true when the crownstone booted, while the hardware has been powered for a longer time. More... | |
void | sendUnexpectedStateUpdate () |
Send state update to listeners. More... | |
void | goingToDfu () |
To be called when system is going to DFU mode. More... | |
void | factoryReset () |
To be called when system is performing factory reset. More... | |
void | handleGetBehaviourDebug (event_t &evt) |
Private Attributes | |
Dimmer | dimmer |
Relay | relay |
bool | initialized = false |
bool | canTryDimmingOnBoot = false |
bool | canDimOnWarmBoot = false |
bool | dimmerOnWhenPinsFloat = true |
switch_state_t | currentState |
Current state of relay and dimmer. More... | |
callback_on_state_change_t | callbackOnStateChange |
bool | relayPowered = false |
Whether the relay circuit is powered. More... | |
bool | dimmerPowered = false |
Whether the dimmer circuit is powered. More... | |
uint32_t | dimmerPowerUpCountDown = PWM_BOOT_DELAY_MS / TICK_INTERVAL_MS |
Counter that counts down until enough time has passed for dimmer circuit to be powered. More... | |
uint32_t | dimmerCheckCountDown = 0 |
Counter that counts down until power usage via dimmer should be checked. More... | |
bool | checkedDimmerPowerUsage = false |
Whether power usage via dimmer has been checked already. More... | |
bool | allowStateChanges = true |
Determines whether or not setDimmer and setRelay will have any effect. More... | |
bool | relayHasBeenSetBefore = false |
Whether the relay has been set at least once after boot. More... | |
OperationMode | operationMode = OperationMode::OPERATION_MODE_UNINITIALIZED |
Cached operation mode. More... | |
Class that takes care of safety of switch.
typedef function<void(switch_state_t newState)> SafeSwitch::callback_on_state_change_t |
Callback function definition.
|
private |
Cancel power usage check.
Marks dimmer not powered.
|
private |
Check if power is used due to dimmer being on.
Marks dimmer not powered if check fails.
|
private |
Called when enough time has passed for the dimmer to be powered.
Marks dimmer powered.
|
private |
To be called when system is performing factory reset.
|
private |
Turn relay on and dimmer off, without any checks.
Also disables dimming in state. Also send an event.
|
private |
Turn relay and dimmer off, without any checks.
Also send an event.
|
private |
Get state errors from State.
switch_state_t SafeSwitch::getState | ( | ) |
Get current switch state.
|
private |
To be called when system is going to DFU mode.
|
overridevirtual |
Handle events.
Implements EventListener.
|
private |
|
private |
void SafeSwitch::init | ( | const boards_config_t & | board | ) |
|
private |
bool SafeSwitch::isRelayStateAccurate | ( | ) |
The relay bit of the return value of getState() is retrieved from persistent memory at startup.
There is a possibility of this getting out of sync with the physical relay state. Until the first relay action it isn't certain which physical state the device is in.
If it is certain this method returns true.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
Returns true when the crownstone booted, while the hardware has been powered for a longer time.
void SafeSwitch::onUnexpextedStateChange | ( | const callback_on_state_change_t & | closure | ) |
Register a callback function that's called when state changes unexpectedly.
|
private |
Send state update to listeners.
Only to be called when state changes due to events, not due to calls to setRelay() or setDimmer(). This prevents the user to get updates before the call is even finished, this is what return codes are for.
cs_ret_code_t SafeSwitch::setDimmer | ( | uint8_t | intensity, |
bool | fade = true |
||
) |
Set dimmer intensity.
It could be that something else is done instead, check the error code.
[in] | intensity | Intensity of the dimmer: 0-100. |
[in] | fade | Whether to fade towards the new intensity. False will set it immediately. |
|
private |
Set dimmerPowered and sends event.
|
private |
Set dimmer intensity.
Checks: similar. Does not check: safe, powered.
cs_ret_code_t SafeSwitch::setRelay | ( | bool | value | ) |
Set relay.
It could be that something else is done instead, check the error code.
[in] | value | True to set the relay on. |
|
private |
Set relay.
Checks: similar. Does not check: safe, powered.
void SafeSwitch::start | ( | ) |
Start switch.
To be called once there is enough power to switch relay, and enable dimmer.
|
private |
Try to see if dimmer is powered: Set dimmer intensity, and start power usage check.
Sets dimmer powered. Does not check: safe, powered.
|
private |
Determines whether or not setDimmer and setRelay will have any effect.
(Will be set to false when GOING_TO_DFU event is set for example.)
|
private |
|
private |
|
private |
|
private |
Whether power usage via dimmer has been checked already.
|
private |
Current state of relay and dimmer.
|
private |
|
private |
Counter that counts down until power usage via dimmer should be checked.
|
private |
|
private |
Whether the dimmer circuit is powered.
|
private |
Counter that counts down until enough time has passed for dimmer circuit to be powered.
|
private |
|
private |
Cached operation mode.
|
private |
|
private |
Whether the relay has been set at least once after boot.
|
private |
Whether the relay circuit is powered.