From bf2e1354b1720cf3c887220be037f48a52035e39 Mon Sep 17 00:00:00 2001 From: Gregg Date: Tue, 22 Feb 2022 21:53:17 -0600 Subject: [PATCH] Added second version of SpanUserCommand() that takes a void *arg Useful for passing a pointer to a Service that can be used in the CLI command. --- src/HomeSpan.cpp | 19 ++++++++++++++++--- src/HomeSpan.h | 9 ++++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/HomeSpan.cpp b/src/HomeSpan.cpp index c4d2596..b945744 100644 --- a/src/HomeSpan.cpp +++ b/src/HomeSpan.cpp @@ -982,7 +982,10 @@ void Span::processSerialCommand(const char *c){ auto uCom=UserCommands.find(c[1]); if(uCom!=UserCommands.end()){ - uCom->second->userFunction(c+1); + if(uCom->second->userFunction1) + uCom->second->userFunction1(c+1); + else + uCom->second->userFunction2(c+1,uCom->second->userArg); break; } } @@ -1893,9 +1896,19 @@ SpanButton::SpanButton(int pin, uint16_t longTime, uint16_t singleTime, uint16_t // SpanUserCommand // /////////////////////////////// -SpanUserCommand::SpanUserCommand(char c, const char *s, void (*f)(const char *v)){ +SpanUserCommand::SpanUserCommand(char c, const char *s, void (*f)(const char *)){ this->s=s; - userFunction=f; + userFunction1=f; + + homeSpan.UserCommands[c]=this; +} + +/////////////////////////////// + +SpanUserCommand::SpanUserCommand(char c, const char *s, void (*f)(const char *, void *), void *arg){ + this->s=s; + userFunction2=f; + userArg=arg; homeSpan.UserCommands[c]=this; } diff --git a/src/HomeSpan.h b/src/HomeSpan.h index f8df8cf..d692064 100644 --- a/src/HomeSpan.h +++ b/src/HomeSpan.h @@ -657,10 +657,13 @@ struct SpanButton{ /////////////////////////////// struct SpanUserCommand { - const char *s; // description of command - void (*userFunction)(const char *v); // user-defined function to call + const char *s; // description of command + void (*userFunction1)(const char *v)=NULL; // user-defined function to call + void (*userFunction2)(const char *v, void *arg)=NULL; // user-defined function to call with user-defined arg + void *userArg; - SpanUserCommand(char c, const char *s, void (*f)(const char *v)); + SpanUserCommand(char c, const char *s, void (*f)(const char *)); + SpanUserCommand(char c, const char *s, void (*f)(const char *, void *), void *arg); }; /////////////////////////////////////////////////