8#ifndef COMMANDHANDLER_H_
9#define COMMANDHANDLER_H_
18#define CMDFLAG_GET 0x01
19#define CMDFLAG_SET 0x02
20#define CMDFLAG_INFOSTRING 0x08
21#define CMDFLAG_GETADR 0x10
22#define CMDFLAG_SETADR 0x20
23#define CMDFLAG_HIDDEN 0x40
24#define CMDFLAG_DEBUG 0x80
26#define CMDFLAG_STR_ONLY 0x100
27#define CMDFLAG_HID_ONLY 0x200
32 setat = CMDFLAG_SETADR,
34 getat = CMDFLAG_GETADR,
35 info = CMDFLAG_INFOSTRING,
51 const char*
cmd =
nullptr;
155 static void logSerial(std::string
string);
185 virtual bool isValidCommandId(uint32_t cmdid,uint32_t ignoredFlags=0,uint32_t requiredFlag=0);
192 static std::vector<CommandHandler*> commandhandlers{};
193 return commandhandlers;
200 template<
typename TVal>
203 value =
static_cast<TVal
>(cmd.
val);
205 replies.emplace_back(value);
214 template<
typename TVal,
class cls,
class cls1>
217 (obj->*setfunc)(cmd.
val);
219 replies.emplace_back(value);
228 template<
typename TVal,
class cls,
class cls1,
class cls2>
231 (obj->*setfunc)(cmd.
val);
233 replies.emplace_back((obj->*getfunc)());
242 template<
typename TVal,
class cls,
class cls1>
245 value =
static_cast<TVal
>(cmd.
val);
247 replies.emplace_back((obj->*getfunc)());
261 template<
typename ID>
264 if(cmdDef.cmdId ==
static_cast<uint32_t
>(cmdid))
268 this->registeredCommands.emplace_back(cmd,
help,
static_cast<uint32_t
>(cmdid),flags);
269 this->registeredCommands.shrink_to_fit();
281 static std::vector<uint16_t> commandhandlerids{};
282 return commandhandlerids;
CmdHandlerCommanddef(const char *cmd, const char *helpstring, const uint32_t cmdId, const uint32_t flags)
static CommandStatus handleGetFuncSetFunc(const ParsedCommand &cmd, std::vector< CommandReply > &replies, TVal(cls1::*getfunc)(), void(cls2::*setfunc)(TVal), cls *obj)
virtual std::string getHelpstring()
static bool logsEnabled()
static std::vector< CommandHandler * > getHandlersFromClassName(const char *name)
static std::vector< uint16_t > & getCommandHandlerIds()
virtual uint8_t getCommandHandlerInstance()
void registerCommand(const char *cmd, const ID cmdid, const char *help=nullptr, uint32_t flags=0)
static void logSerial(std::string string)
Send a log formatted sequence.
virtual void addCommandHandler()
std::vector< CmdHandlerCommanddef > registeredCommands
virtual CmdHandlerCommanddef * getCommandFromId(const uint32_t id, uint32_t ignoredFlags=0)
virtual void setCommandsEnabled(bool enable)
static void setLogsEnabled(bool enabled)
static const char * getClassNameFromId(const uint32_t id)
static bool isInHandlerList(CommandHandler *handler)
virtual const ClassType getClassType()
virtual bool hasCommands()
virtual uint16_t getCommandHandlerID()
static CommandStatus handleGetSet(const ParsedCommand &cmd, std::vector< CommandReply > &replies, TVal &value)
virtual CommandStatus internalCommand(const ParsedCommand &cmd, std::vector< CommandReply > &replies)
void setInstance(uint8_t instance)
virtual const ClassIdentifier getInfo()=0
Command handlers always have class infos. Works well with ChoosableClass.
static CommandHandler * getHandlerFromClassName(const char *name, const uint8_t instance=0xFF)
CmdHandlerInfo cmdHandlerInfo
virtual ~CommandHandler()
static void logSerialDebug(std::string string)
Send a log formatted sequence if debug is on.
virtual CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies)
static CommandHandler * getHandlerFromHandlerId(const uint16_t cmdhandlerID)
void sendCommandReplyAsync(CommandReply reply, uint32_t cmdId, CMDtype type, CommandInterface *interface=nullptr)
virtual CmdHandlerCommanddef * getCommandFromName(const std::string &cmd, uint32_t ignoredFlags=0)
virtual std::string getCommandsHelpstring()
static CommandStatus handleGetSetFunc(const ParsedCommand &cmd, std::vector< CommandReply > &replies, TVal &value, void(cls1::*setfunc)(TVal), cls *obj)
void broadcastCommandReply(CommandReply reply, uint32_t cmdId, CMDtype type)
virtual CmdHandlerInfo * getCommandHandlerInfo()
static std::string getAllHelpstrings()
virtual void removeCommandHandler()
static CommandHandler * getHandlerFromId(const uint16_t id, const uint8_t instance=0xFF)
static CommandStatus handleGetFuncSet(const ParsedCommand &cmd, std::vector< CommandReply > &replies, TVal &value, TVal(cls1::*getfunc)(), cls *obj)
static std::vector< CommandHandler * > getHandlersFromId(const uint16_t id)
static uint32_t getClassIdFromName(const char *name)
CommandHandler(const char *clsname, uint16_t clsid, uint8_t instance=0)
static std::vector< CommandHandler * > & getCommandHandlers()
virtual bool isValidCommandId(uint32_t cmdid, uint32_t ignoredFlags=0, uint32_t requiredFlag=0)
virtual std::string getCsvHelpstring()
CommandReply(const std::string &reply, int64_t val)
CommandReply(CommandReplyType type)
CommandReply(const std::string &reply, int64_t val, int64_t adr)
CommandReply(int64_t val, int64_t adr)
CommandReply(int64_t val)
CommandReply(const std::string &reply)
uint16_t commandHandlerID
ParsedCommand originalCommand
CommandHandler * commandHandler
std::vector< CommandReply > reply
uint16_t handlerId
ID of the command handler responding to the command.
CommandInterface * originalInterface
Command interface on which this command was received. nullptr indicates a broadcast.