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
25#define CMDFLAG_EXTOVERRIDE 0x80000000
27#define CMDFLAG_STR_ONLY 0x100
28#define CMDFLAG_HID_ONLY 0x200
52 const char*
cmd =
nullptr;
156 static void logSerial(std::string
string);
186 virtual bool isValidCommandId(uint32_t cmdid,uint32_t ignoredFlags=0,uint32_t requiredFlag=0);
193 static std::vector<CommandHandler*> commandhandlers{};
194 return commandhandlers;
201 template<
typename TVal>
204 value =
static_cast<TVal
>(cmd.
val);
206 replies.emplace_back(value);
215 template<
typename TVal,
class cls,
class cls1>
218 (obj->*setfunc)(cmd.
val);
220 replies.emplace_back(value);
229 template<
typename TVal,
class cls,
class cls1,
class cls2>
232 (obj->*setfunc)(cmd.
val);
234 replies.emplace_back((obj->*getfunc)());
243 template<
typename TVal,
class cls,
class cls1>
246 value =
static_cast<TVal
>(cmd.
val);
248 replies.emplace_back((obj->*getfunc)());
262 template<
typename ID>
269 template<
typename ID>
287 static std::vector<uint16_t> commandhandlerids{};
288 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 registerCommand_INT(const char *cmd, const uint32_t cmdid, const char *help=nullptr, uint32_t flags=0)
void overrideCommandFlags(const ID cmdid, uint32_t flagmask=0)
void overrideCommandFlags_INT(const uint32_t cmdid, uint32_t flagmask=CMDFLAG_GET|CMDFLAG_GETADR)
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)
virtual void postCmdhandlerInit()
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.