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

Every command from an external device such as a smartphone goes through the CommandHandler. More...

#include <cs_CommandHandler.h>

Inheritance diagram for CommandHandler:
Collaboration diagram for CommandHandler:

Public Member Functions

void init (const boards_config_t *board)
 Initialize command handler given board configuration. More...
 
void handleCommand (uint8_t protocolVersion, const CommandHandlerTypes type, cs_data_t commandData, const cmd_source_with_counter_t source, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 Handle a a command. More...
 
void handleEvent (event_t &event)
 Handle events. More...
 

Static Public Member Functions

static CommandHandlergetInstance ()
 Gets a static singleton (no dynamic memory allocation) More...
 

Private Member Functions

 CommandHandler ()
 
EncryptionAccessLevel getRequiredAccessLevel (const CommandHandlerTypes type)
 
bool allowedAsMeshCommand (const CommandHandlerTypes type)
 
void _handleCommand (uint8_t protocolVersion, const CommandHandlerTypes type, cs_data_t commandData, const cmd_source_with_counter_t source, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void resolveAsyncCommand (cs_async_result_t *result)
 
void handleCmdNop (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdGotoDfu (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdGetBootloaderVersion (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdGetUicrData (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdReset (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdFactoryReset (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdGetMacAddress (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdGetHardwareVersion (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdGetFirmwareVersion (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdSetSunTime (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdGetTime (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdIncreaseTx (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdValidateSetup (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdDisconnect (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdResetErrors (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdPwm (cs_data_t commandData, const cmd_source_with_counter_t source, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdSwitch (cs_data_t commandData, const cmd_source_with_counter_t source, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdRelay (cs_data_t commandData, const cmd_source_with_counter_t source, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdMultiSwitch (cs_data_t commandData, const cmd_source_with_counter_t source, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdMeshCommand (uint8_t protocol, cs_data_t commandData, const cmd_source_with_counter_t source, const EncryptionAccessLevel accesss_resulLevel, cs_result_t &result)
 
void handleCmdAllowDimming (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdLockSwitch (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdSetup (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdUartMsg (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdHubData (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdStateGet (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdStateSet (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdRegisterTrackedDevice (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdTrackedDeviceHeartbeat (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdGetUptime (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdMicroappUpload (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void handleCmdMicroappMessage (cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
 
void dispatchEventForCommand (CS_TYPE type, cs_data_t commandData, const cmd_source_with_counter_t &source, cs_result_t &result)
 Delegate a command via an event. More...
 
void resetDelayed (uint8_t opCode, uint16_t delayMs=2000)
 Reset, after a delay. More...
 
- Private 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 Attributes

app_timer_t _resetTimerData
 
app_timer_id_t _resetTimerId
 
const boards_config_t_boardConfig
 
struct {
   CommandHandlerTypes   type = CTRL_CMD_NONE
 
   cmd_source_with_counter_t   source
 
   uint16_t   timeoutCountdown
 
_awaitingCommandResult
 

Static Private Attributes

static const uint32_t ASYNC_COMMAND_TIMEOUT_MS = 10000
 

Detailed Description

Every command from an external device such as a smartphone goes through the CommandHandler.

Handlers

To implement a new command:

  • Add a new type to <cs_Types.h>
  • Define a custom handler for this type in this class.
  • Implement a function to handle this type.
    • The commandData contains a pointer to a data buffer.
    • This data will be gone after function returns.
    • In most functions there is no explicit memcpy, but a struct assignment (including member arrays).
    • When sending the data through as event, a pointer to the struct can be used.

Access Level

TODO: In handleCommand is every function by default executed at ADMIN level. This should be at the lowest privilege level.

Constructor & Destructor Documentation

◆ CommandHandler()

Member Function Documentation

◆ _handleCommand()

void CommandHandler::_handleCommand ( uint8_t  protocolVersion,
const CommandHandlerTypes  type,
cs_data_t  commandData,
const cmd_source_with_counter_t  source,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ allowedAsMeshCommand()

bool CommandHandler::allowedAsMeshCommand ( const CommandHandlerTypes  type)
private

◆ dispatchEventForCommand()

void CommandHandler::dispatchEventForCommand ( CS_TYPE  type,
cs_data_t  commandData,
const cmd_source_with_counter_t source,
cs_result_t result 
)
private

Delegate a command via an event.

◆ getInstance()

static CommandHandler & CommandHandler::getInstance ( )
inlinestatic

Gets a static singleton (no dynamic memory allocation)

◆ getRequiredAccessLevel()

EncryptionAccessLevel CommandHandler::getRequiredAccessLevel ( const CommandHandlerTypes  type)
private

◆ handleCmdAllowDimming()

void CommandHandler::handleCmdAllowDimming ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdDisconnect()

void CommandHandler::handleCmdDisconnect ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdFactoryReset()

void CommandHandler::handleCmdFactoryReset ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdGetBootloaderVersion()

void CommandHandler::handleCmdGetBootloaderVersion ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdGetFirmwareVersion()

void CommandHandler::handleCmdGetFirmwareVersion ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdGetHardwareVersion()

void CommandHandler::handleCmdGetHardwareVersion ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdGetMacAddress()

void CommandHandler::handleCmdGetMacAddress ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdGetTime()

void CommandHandler::handleCmdGetTime ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdGetUicrData()

void CommandHandler::handleCmdGetUicrData ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdGetUptime()

void CommandHandler::handleCmdGetUptime ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdGotoDfu()

void CommandHandler::handleCmdGotoDfu ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdHubData()

void CommandHandler::handleCmdHubData ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdIncreaseTx()

void CommandHandler::handleCmdIncreaseTx ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdLockSwitch()

void CommandHandler::handleCmdLockSwitch ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdMeshCommand()

void CommandHandler::handleCmdMeshCommand ( uint8_t  protocol,
cs_data_t  commandData,
const cmd_source_with_counter_t  source,
const EncryptionAccessLevel  accesss_resulLevel,
cs_result_t result 
)
private

◆ handleCmdMicroappMessage()

void CommandHandler::handleCmdMicroappMessage ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdMicroappUpload()

void CommandHandler::handleCmdMicroappUpload ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdMultiSwitch()

void CommandHandler::handleCmdMultiSwitch ( cs_data_t  commandData,
const cmd_source_with_counter_t  source,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdNop()

void CommandHandler::handleCmdNop ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdPwm()

void CommandHandler::handleCmdPwm ( cs_data_t  commandData,
const cmd_source_with_counter_t  source,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdRegisterTrackedDevice()

void CommandHandler::handleCmdRegisterTrackedDevice ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdRelay()

void CommandHandler::handleCmdRelay ( cs_data_t  commandData,
const cmd_source_with_counter_t  source,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdReset()

void CommandHandler::handleCmdReset ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdResetErrors()

void CommandHandler::handleCmdResetErrors ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdSetSunTime()

void CommandHandler::handleCmdSetSunTime ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdSetup()

void CommandHandler::handleCmdSetup ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdStateGet()

void CommandHandler::handleCmdStateGet ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdStateSet()

void CommandHandler::handleCmdStateSet ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdSwitch()

void CommandHandler::handleCmdSwitch ( cs_data_t  commandData,
const cmd_source_with_counter_t  source,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdTrackedDeviceHeartbeat()

void CommandHandler::handleCmdTrackedDeviceHeartbeat ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdUartMsg()

void CommandHandler::handleCmdUartMsg ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCmdValidateSetup()

void CommandHandler::handleCmdValidateSetup ( cs_data_t  commandData,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)
private

◆ handleCommand()

void CommandHandler::handleCommand ( uint8_t  protocolVersion,
const CommandHandlerTypes  type,
cs_data_t  commandData,
const cmd_source_with_counter_t  source,
const EncryptionAccessLevel  accessLevel,
cs_result_t result 
)

Handle a a command.

Parameters
[in]protocolVersionProtocol version of the command.
[in]typeType of command.
[in]commandDataData of the command.
[in]sourceSource of the entity that issuce this command.
[in]accessLevelAccess level of the entity that issued this command. Default is ADMIN.
[out]resultDataBuffer (that can be NULL) to put the result data in. Default is NULL.
Returns
Result of the command.

◆ handleEvent()

void CommandHandler::handleEvent ( event_t event)
virtual

Handle events.

This method is overloaded by all classes that derive from EventListener. They can receive an event_t struct and act upon it. These events are dispatched by the EventDispatcher.

Implements EventListener.

◆ init()

void CommandHandler::init ( const boards_config_t board)

Initialize command handler given board configuration.

◆ resetDelayed()

void CommandHandler::resetDelayed ( uint8_t  opCode,
uint16_t  delayMs = 2000 
)
private

Reset, after a delay.

TODO: This function doesn't belong in this class.

◆ resolveAsyncCommand()

void CommandHandler::resolveAsyncCommand ( cs_async_result_t result)
private

Member Data Documentation

◆ 

struct { ... } CommandHandler::_awaitingCommandResult

◆ _boardConfig

const boards_config_t* CommandHandler::_boardConfig
private

◆ _resetTimerData

app_timer_t CommandHandler::_resetTimerData
private

◆ _resetTimerId

app_timer_id_t CommandHandler::_resetTimerId
private

◆ ASYNC_COMMAND_TIMEOUT_MS

const uint32_t CommandHandler::ASYNC_COMMAND_TIMEOUT_MS = 10000
staticprivate

◆ source

cmd_source_with_counter_t CommandHandler::source

◆ timeoutCountdown

uint16_t CommandHandler::timeoutCountdown

◆ type


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