mirror of
https://github.com/openshwprojects/OpenBK7231T_App.git
synced 2026-03-19 05:38:16 +01:00
newLedDriver commands like "led_dimmer" or "led_enableAll" must use Tokenizer so we can support syntax like "led_dimmer $led_dimmer+10", etc
This commit is contained in:
@@ -106,6 +106,40 @@ bool strCompareBound(const char *s, const char *templ, const char *stopper, int
|
||||
}
|
||||
char *g_expDebugBuffer = 0;
|
||||
#define EXPRESSION_DEBUG_BUFFER_SIZE 128
|
||||
|
||||
// tries to expand a given string into a constant
|
||||
// So, for $CH1 it will set out to given channel value
|
||||
// For $led_dimmer it will set out to current led_dimmer value
|
||||
// Etc etc
|
||||
// Returns true if constant matches
|
||||
// Returns false if no constants found
|
||||
bool CMD_ExpandConstant(const char *s, const char *stop, float *out) {
|
||||
int idx;
|
||||
|
||||
if(strCompareBound(s,"MQTTOn", stop, false)) {
|
||||
ADDLOG_INFO(LOG_FEATURE_EVENT, "CMD_ExpandConstant: MQTTOn");
|
||||
*out = Main_HasMQTTConnected();
|
||||
return true;
|
||||
}
|
||||
if(strCompareBound(s,"$CH*", stop, 1) || strCompareBound(s,"$CH**", stop, 1)) {
|
||||
idx = atoi(s+3);
|
||||
ADDLOG_INFO(LOG_FEATURE_EVENT, "CMD_ExpandConstant: channel value of idx %i",idx);
|
||||
*out = CHANNEL_Get(idx);
|
||||
return true;
|
||||
}
|
||||
if(strCompareBound(s,"$led_dimmer", stop, 1)) {
|
||||
ADDLOG_INFO(LOG_FEATURE_EVENT, "CMD_ExpandConstant: led_dimmer");
|
||||
*out = LED_GetDimmer();
|
||||
return true;
|
||||
}
|
||||
if(strCompareBound(s,"$led_enableAll", stop, 1)) {
|
||||
ADDLOG_INFO(LOG_FEATURE_EVENT, "CMD_ExpandConstant: led_enableAll");
|
||||
*out = LED_GetEnableAll();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
float CMD_EvaluateExpression(const char *s, const char *stop) {
|
||||
byte opCode;
|
||||
const char *op;
|
||||
@@ -200,15 +234,10 @@ float CMD_EvaluateExpression(const char *s, const char *stop) {
|
||||
if(s[0] == '!') {
|
||||
return !CMD_EvaluateExpression(s+1,stop);
|
||||
}
|
||||
if(strCompareBound(s,"MQTTOn", stop, false)) {
|
||||
ADDLOG_INFO(LOG_FEATURE_EVENT, "CMD_EvaluateExpression: MQTTOn");
|
||||
return Main_HasMQTTConnected();
|
||||
}
|
||||
if(strCompareBound(s,"$CH*", stop, 1) || strCompareBound(s,"$CH**", stop, 1)) {
|
||||
idx = atoi(s+3);
|
||||
ADDLOG_INFO(LOG_FEATURE_EVENT, "CMD_EvaluateExpression: channel value of idx %i",idx);
|
||||
return CHANNEL_Get(idx);
|
||||
if(CMD_ExpandConstant(s,stop,&c)) {
|
||||
return c;
|
||||
}
|
||||
|
||||
ADDLOG_INFO(LOG_FEATURE_EVENT, "CMD_EvaluateExpression: will call atof for %s",s);
|
||||
return atof(s);
|
||||
}
|
||||
|
||||
@@ -361,7 +361,9 @@ static int enableAll(const void *context, const char *cmd, const char *args, int
|
||||
int bEnable;
|
||||
ADDLOG_INFO(LOG_FEATURE_CMD, " enableAll (%s) received with args %s",cmd,args);
|
||||
|
||||
bEnable = parsePowerArgument(args);
|
||||
Tokenizer_TokenizeString(args, 0);
|
||||
|
||||
bEnable = Tokenizer_GetArgInteger(0);
|
||||
|
||||
LED_SetEnableAll(bEnable);
|
||||
|
||||
@@ -483,7 +485,9 @@ static int dimmer(const void *context, const char *cmd, const char *args, int cm
|
||||
cJSON_Delete(json);
|
||||
}
|
||||
} else {
|
||||
iVal = parsePowerArgument(args);
|
||||
Tokenizer_TokenizeString(args, 0);
|
||||
|
||||
iVal = Tokenizer_GetArgInteger(0);
|
||||
|
||||
LED_SetDimmer(iVal);
|
||||
}
|
||||
|
||||
@@ -178,6 +178,29 @@ setChannel 20 1.1==1.0
|
||||
// Channel 19 = 1
|
||||
// Channel 20 = 0
|
||||
|
||||
// Example 6:
|
||||
|
||||
// brightness loop
|
||||
// First makes it gradually brighter, then darker
|
||||
// Channel 10 is dimmer delta
|
||||
// Channel 11 is delay step in ms
|
||||
// NOTE: with the current state of things, this is a MQTT killer
|
||||
|
||||
setChannel 10 2
|
||||
setChannel 11 25
|
||||
led_enableAll 1
|
||||
|
||||
again:
|
||||
|
||||
if $led_dimmer>100 then "setChannel 10 -2"
|
||||
if $led_dimmer<0 then "setChannel 10 2"
|
||||
|
||||
delay_ms $CH11
|
||||
led_dimmer $led_dimmer+$CH10
|
||||
goto again
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
typedef struct scriptFile_s {
|
||||
|
||||
Reference in New Issue
Block a user