Bluenet  5.7.0
Bluenet, firmware for nRF52 smart home devices
Loading...
Searching...
No Matches
SafeSwitch Class Reference

Class that takes care of safety of switch. More...

#include <cs_SafeSwitch.h>

Inheritance diagram for SafeSwitch:
Collaboration diagram for SafeSwitch:

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...
 
- Public Member Functions inherited from EventListener
 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...
 

Detailed Description

Class that takes care of safety of switch.

  • Checks if dimmer circuit is powered.
  • Handles hardware errors.
  • Checks which hardware board can do what.

Member Typedef Documentation

◆ callback_on_state_change_t

typedef function<void(switch_state_t newState)> SafeSwitch::callback_on_state_change_t

Callback function definition.

Member Function Documentation

◆ cancelDimmerPowerCheck()

void SafeSwitch::cancelDimmerPowerCheck ( )
private

Cancel power usage check.

Marks dimmer not powered.

◆ checkDimmerPower()

void SafeSwitch::checkDimmerPower ( )
private

Check if power is used due to dimmer being on.

Marks dimmer not powered if check fails.

◆ dimmerPoweredUp()

void SafeSwitch::dimmerPoweredUp ( )
private

Called when enough time has passed for the dimmer to be powered.

Marks dimmer powered.

◆ factoryReset()

void SafeSwitch::factoryReset ( )
private

To be called when system is performing factory reset.

◆ forceRelayOnAndDimmerOff()

void SafeSwitch::forceRelayOnAndDimmerOff ( )
private

Turn relay on and dimmer off, without any checks.

Also disables dimming in state. Also send an event.

◆ forceSwitchOff()

void SafeSwitch::forceSwitchOff ( )
private

Turn relay and dimmer off, without any checks.

Also send an event.

◆ getErrorState()

state_errors_t SafeSwitch::getErrorState ( )
private

Get state errors from State.

◆ getState()

switch_state_t SafeSwitch::getState ( )

Get current switch state.

Returns
Current switch state.

◆ goingToDfu()

void SafeSwitch::goingToDfu ( )
private

To be called when system is going to DFU mode.

◆ handleEvent()

void SafeSwitch::handleEvent ( event_t evt)
overridevirtual

Handle events.

Implements EventListener.

◆ handleGetBehaviourDebug()

void SafeSwitch::handleGetBehaviourDebug ( event_t evt)
private

◆ hasDimmerError()

bool SafeSwitch::hasDimmerError ( state_errors_t  stateErrors)
private

◆ init()

void SafeSwitch::init ( const boards_config_t board)

◆ isDimmerStateChangeAllowed()

bool SafeSwitch::isDimmerStateChangeAllowed ( )
private

◆ isRelayStateAccurate()

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.

◆ isRelayStateChangeAllowed()

bool SafeSwitch::isRelayStateChangeAllowed ( )
private

◆ isSafeToDim()

bool SafeSwitch::isSafeToDim ( state_errors_t  stateErrors)
private

◆ isSafeToTurnRelayOff()

bool SafeSwitch::isSafeToTurnRelayOff ( state_errors_t  stateErrors)
private

◆ isSafeToTurnRelayOn()

bool SafeSwitch::isSafeToTurnRelayOn ( state_errors_t  stateErrors)
private

◆ isSwitchOverLoaded()

bool SafeSwitch::isSwitchOverLoaded ( state_errors_t  stateErrors)
private

◆ isWarmBoot()

bool SafeSwitch::isWarmBoot ( )
private

Returns true when the crownstone booted, while the hardware has been powered for a longer time.

◆ onUnexpextedStateChange()

void SafeSwitch::onUnexpextedStateChange ( const callback_on_state_change_t closure)

Register a callback function that's called when state changes unexpectedly.

◆ sendUnexpectedStateUpdate()

void SafeSwitch::sendUnexpectedStateUpdate ( )
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.

◆ setDimmer()

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.

Parameters
[in]intensityIntensity of the dimmer: 0-100.
[in]fadeWhether to fade towards the new intensity. False will set it immediately.
Returns
Error code: if not successful, check what the current state is. ERR_NOT_POWERED when the dimmer is not powered yet.

◆ setDimmerPowered()

void SafeSwitch::setDimmerPowered ( bool  powered)
private

Set dimmerPowered and sends event.

◆ setDimmerUnchecked()

cs_ret_code_t SafeSwitch::setDimmerUnchecked ( uint8_t  intensity,
bool  fade 
)
private

Set dimmer intensity.

Checks: similar. Does not check: safe, powered.

◆ setRelay()

cs_ret_code_t SafeSwitch::setRelay ( bool  value)

Set relay.

It could be that something else is done instead, check the error code.

Parameters
[in]valueTrue to set the relay on.
Returns
Result code: if not successful, check what the current state is.

◆ setRelayUnchecked()

cs_ret_code_t SafeSwitch::setRelayUnchecked ( bool  value)
private

Set relay.

Checks: similar. Does not check: safe, powered.

◆ start()

void SafeSwitch::start ( )

Start switch.

To be called once there is enough power to switch relay, and enable dimmer.

◆ startDimmerPowerCheck()

cs_ret_code_t SafeSwitch::startDimmerPowerCheck ( uint8_t  intensity,
bool  fade 
)
private

Try to see if dimmer is powered: Set dimmer intensity, and start power usage check.

Sets dimmer powered. Does not check: safe, powered.

Member Data Documentation

◆ allowStateChanges

bool SafeSwitch::allowStateChanges = true
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.)

◆ callbackOnStateChange

callback_on_state_change_t SafeSwitch::callbackOnStateChange
private

◆ canDimOnWarmBoot

bool SafeSwitch::canDimOnWarmBoot = false
private

◆ canTryDimmingOnBoot

bool SafeSwitch::canTryDimmingOnBoot = false
private

◆ checkedDimmerPowerUsage

bool SafeSwitch::checkedDimmerPowerUsage = false
private

Whether power usage via dimmer has been checked already.

◆ currentState

switch_state_t SafeSwitch::currentState
private

Current state of relay and dimmer.

◆ dimmer

Dimmer SafeSwitch::dimmer
private

◆ dimmerCheckCountDown

uint32_t SafeSwitch::dimmerCheckCountDown = 0
private

Counter that counts down until power usage via dimmer should be checked.

◆ dimmerOnWhenPinsFloat

bool SafeSwitch::dimmerOnWhenPinsFloat = true
private

◆ dimmerPowered

bool SafeSwitch::dimmerPowered = false
private

Whether the dimmer circuit is powered.

◆ dimmerPowerUpCountDown

uint32_t SafeSwitch::dimmerPowerUpCountDown = PWM_BOOT_DELAY_MS / TICK_INTERVAL_MS
private

Counter that counts down until enough time has passed for dimmer circuit to be powered.

◆ initialized

bool SafeSwitch::initialized = false
private

◆ operationMode

OperationMode SafeSwitch::operationMode = OperationMode::OPERATION_MODE_UNINITIALIZED
private

Cached operation mode.

◆ relay

Relay SafeSwitch::relay
private

◆ relayHasBeenSetBefore

bool SafeSwitch::relayHasBeenSetBefore = false
private

Whether the relay has been set at least once after boot.

◆ relayPowered

bool SafeSwitch::relayPowered = false
private

Whether the relay circuit is powered.


The documentation for this class was generated from the following file: