Bluenet  5.7.0
Bluenet, firmware for nRF52 smart home devices
Loading...
Searching...
No Matches
cs_CommandHandler.h
Go to the documentation of this file.
1/*
2 * Author: Crownstone Team
3 * Copyright: Crownstone (https://crownstone.rocks)
4 * Date: May 18, 2016
5 * License: LGPLv3+, Apache License 2.0, and/or MIT (triple-licensed)
6 */
7#pragma once
8
9#include <ble/cs_Nordic.h>
10#include <ble/cs_Stack.h>
11#include <cfg/cs_Boards.h>
12#include <common/cs_Types.h>
14
35public:
38 static CommandHandler instance;
39 return instance;
40 }
41
44 void init(const boards_config_t* board);
45
58 uint8_t protocolVersion,
60 cs_data_t commandData,
62 const EncryptionAccessLevel accessLevel,
63 cs_result_t& result);
64
65 // Handle events as EventListener
66 void handleEvent(event_t& event);
67
68private:
70
71 app_timer_t _resetTimerData;
72 app_timer_id_t _resetTimerId;
73
75
76 struct {
77 // Control command type we are waiting for. Set to CTRL_CMD_NONE for none.
79
80 // Source of the command.
82
83 // Number of ticks until timeout.
86
87 static const uint32_t ASYNC_COMMAND_TIMEOUT_MS = 10000;
88
91
92 /*
93 * Same as handleCommand, allows us to check the result code.
94 */
96 uint8_t protocolVersion,
98 cs_data_t commandData,
100 const EncryptionAccessLevel accessLevel,
101 cs_result_t& result);
102
104
105 void handleCmdNop(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
106 void handleCmdGotoDfu(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
108 cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
109 void handleCmdGetUicrData(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
110 void handleCmdReset(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
111 void handleCmdFactoryReset(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
112 void handleCmdGetMacAddress(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
114 cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
116 cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
117 void handleCmdSetSunTime(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
118 void handleCmdGetTime(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
119 void handleCmdIncreaseTx(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
120 void handleCmdValidateSetup(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
121 void handleCmdDisconnect(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
122 void handleCmdResetErrors(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
124 cs_data_t commandData,
126 const EncryptionAccessLevel accessLevel,
127 cs_result_t& result);
129 cs_data_t commandData,
131 const EncryptionAccessLevel accessLevel,
132 cs_result_t& result);
134 cs_data_t commandData,
136 const EncryptionAccessLevel accessLevel,
137 cs_result_t& result);
139 cs_data_t commandData,
141 const EncryptionAccessLevel accessLevel,
142 cs_result_t& result);
144 uint8_t protocol,
145 cs_data_t commandData,
147 const EncryptionAccessLevel accesss_resulLevel,
148 cs_result_t& result);
149 void handleCmdAllowDimming(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
150 void handleCmdLockSwitch(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
151 void handleCmdSetup(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
152 void handleCmdUartMsg(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
153 void handleCmdHubData(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
154 void handleCmdStateGet(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
155 void handleCmdStateSet(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
157 cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
159 cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
160 void handleCmdGetUptime(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
161 void handleCmdMicroappUpload(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
162 void handleCmdMicroappMessage(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t& result);
163
168 CS_TYPE type, cs_data_t commandData, const cmd_source_with_counter_t& source, cs_result_t& result);
169
174 void resetDelayed(uint8_t opCode, uint16_t delayMs = 2000);
175};
Every command from an external device such as a smartphone goes through the CommandHandler.
Definition: cs_CommandHandler.h:34
app_timer_t _resetTimerData
Definition: cs_CommandHandler.h:71
void handleCmdStateSet(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
void resetDelayed(uint8_t opCode, uint16_t delayMs=2000)
Reset, after a delay.
const boards_config_t * _boardConfig
Definition: cs_CommandHandler.h:74
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)
bool allowedAsMeshCommand(const CommandHandlerTypes type)
static CommandHandler & getInstance()
Gets a static singleton (no dynamic memory allocation)
Definition: cs_CommandHandler.h:37
void handleCmdGetTime(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)
static const uint32_t ASYNC_COMMAND_TIMEOUT_MS
Definition: cs_CommandHandler.h:87
void handleCmdIncreaseTx(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
void handleCmdNop(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
uint16_t timeoutCountdown
Definition: cs_CommandHandler.h:84
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.
cmd_source_with_counter_t source
Definition: cs_CommandHandler.h:81
void handleCmdUartMsg(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 handleCmdHubData(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 _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 handleCmdDisconnect(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
CommandHandlerTypes type
Definition: cs_CommandHandler.h:78
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.
void handleCmdSwitch(cs_data_t commandData, const cmd_source_with_counter_t source, const EncryptionAccessLevel accessLevel, cs_result_t &result)
void handleCmdReset(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 handleCmdRelay(cs_data_t commandData, const cmd_source_with_counter_t source, const EncryptionAccessLevel accessLevel, cs_result_t &result)
void handleCmdGetFirmwareVersion(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
EncryptionAccessLevel getRequiredAccessLevel(const CommandHandlerTypes type)
void handleCmdAllowDimming(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 handleEvent(event_t &event)
Handle events.
void handleCmdMultiSwitch(cs_data_t commandData, const cmd_source_with_counter_t source, 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 handleCmdTrackedDeviceHeartbeat(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
void init(const boards_config_t *board)
Initialize command handler given board configuration.
struct CommandHandler::@10 _awaitingCommandResult
void handleCmdGetMacAddress(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
void handleCmdLockSwitch(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
app_timer_id_t _resetTimerId
Definition: cs_CommandHandler.h:72
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 handleCmdStateGet(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 handleCmdGetHardwareVersion(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 handleCmdMicroappMessage(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
void resolveAsyncCommand(cs_async_result_t *result)
void handleCmdResetErrors(cs_data_t commandData, const EncryptionAccessLevel accessLevel, cs_result_t &result)
Event listener.
Definition: cs_EventListener.h:17
Author: Crownstone Team Copyright: Crownstone (https://crownstone.rocks) Date: Oct 9,...
Definition: cs_Event.h:26
CommandHandlerTypes
Author: Crownstone Team Copyright: Crownstone (https://crownstone.rocks) Date: Jun 3,...
Definition: cs_CommandTypes.h:10
@ CTRL_CMD_NONE
Definition: cs_CommandTypes.h:85
EncryptionAccessLevel
Packets (structs) that are used over the air, over uart, or stored in flash.
Definition: cs_Packets.h:36
Manufacturing data.
CS_TYPE
Types:
Definition: cs_Types.h:79
Board configuration.
Definition: cs_Boards.h:169
Struct that tells where a command originated from.
Definition: cs_CmdSource.h:54
Definition: cs_PacketsInternal.h:71
Packets (structs) that are used internally in the firmware, and can be changed freely.
Definition: cs_PacketsInternal.h:27
Definition: cs_PacketsInternal.h:46