Skip to content

Commit

Permalink
tuyamCU stub, unfinished uart handler
Browse files Browse the repository at this point in the history
  • Loading branch information
openshwprojects committed Oct 16, 2022
1 parent 34c684d commit d25ced9
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 2 deletions.
51 changes: 49 additions & 2 deletions src/cmnds/cmd_eventHandlers.c
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,8 @@ static int EVENT_ParseEventName(const char *s) {
return CMD_EVENT_PIN_ONDBLCLICK;
if(!stricmp(s,"OnChannelChange"))
return CMD_EVENT_CHANNEL_ONCHANGE;
if(!stricmp(s,"OnUART"))
return CMD_EVENT_ON_UART;
return CMD_EVENT_NONE;
}
static bool EVENT_EvaluateCondition(int code, int argument, int next) {
Expand Down Expand Up @@ -187,6 +189,8 @@ typedef struct eventHandler_s {
short requiredArgument;
// command to execute when it happens
char *command;
// for UART event handlers?
char *requiredArgumentText;

struct eventHandler_s *next;
} eventHandler_t;
Expand Down Expand Up @@ -216,11 +220,27 @@ void EventHandlers_AddEventHandler_Integer(byte eventCode, int type, int require

ev->next = g_eventHandlers;
g_eventHandlers = ev;

ev->requiredArgumentText = NULL;
ev->eventType = type;
ev->command = test_strdup(commandToRun);
ev->eventCode = eventCode;
ev->requiredArgument = requiredArgument;
}

void EventHandlers_AddEventHandler_String(byte eventCode, int type, const char *requiredArgument, const char *commandToRun)
{
eventHandler_t *ev = malloc(sizeof(eventHandler_t));

ev->next = g_eventHandlers;
g_eventHandlers = ev;

ev->requiredArgumentText = test_strdup(requiredArgument);
ev->eventType = type;
ev->command = test_strdup(commandToRun);
ev->eventCode = eventCode;
ev->requiredArgument = 0;
}
void EventHandlers_FireEvent(byte eventCode, int argument) {
struct eventHandler_s *ev;

Expand All @@ -236,13 +256,30 @@ void EventHandlers_FireEvent(byte eventCode, int argument) {
ev = ev->next;
}

}
void EventHandlers_FireEvent_String(byte eventCode, const char *argument) {
struct eventHandler_s *ev;

ev = g_eventHandlers;

while(ev) {
if(eventCode==ev->eventCode) {
if(argument == ev->requiredArgument) {
ADDLOG_INFO(LOG_FEATURE_EVENT, "EventHandlers_ProcessVariableChange_Integer: executing command %s",ev->command);
CMD_ExecuteCommand(ev->command, COMMAND_FLAG_SOURCE_SCRIPT);
}
}
ev = ev->next;
}

}

static int CMD_AddEventHandler(const void *context, const char *cmd, const char *args, int cmdFlags){
const char *eventName;
int reqArg;
const char *cmdToCall;
int eventCode;
const char *reqArgStr;

if(args==0||*args==0) {
ADDLOG_INFO(LOG_FEATURE_EVENT, "CMD_AddEventHandler: command requires argument");
Expand All @@ -255,7 +292,13 @@ static int CMD_AddEventHandler(const void *context, const char *cmd, const char
}

eventName = Tokenizer_GetArg(0);
reqArg = Tokenizer_GetArgInteger(1);
if(false==Tokenizer_IsArgInteger(1)) {
reqArg = 0;
reqArgStr = Tokenizer_GetArg(1);
} else {
reqArgStr = 0;
reqArg = Tokenizer_GetArgInteger(1);
}
cmdToCall = Tokenizer_GetArgFrom(2);

eventCode = EVENT_ParseEventName(eventName);
Expand All @@ -265,7 +308,11 @@ static int CMD_AddEventHandler(const void *context, const char *cmd, const char
}

ADDLOG_INFO(LOG_FEATURE_EVENT, "CMD_AddEventHandler: added %s with cmd %s",eventName,cmdToCall);
EventHandlers_AddEventHandler_Integer(eventCode,EVENT_DEFAULT,reqArg,cmdToCall);
if(reqArgStr) {
EventHandlers_AddEventHandler_String(eventCode,EVENT_DEFAULT,reqArgStr,cmdToCall);
} else {
EventHandlers_AddEventHandler_Integer(eventCode,EVENT_DEFAULT,reqArg,cmdToCall);
}

return 1;
}
Expand Down
6 changes: 6 additions & 0 deletions src/cmnds/cmd_public.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@ enum EventCode {

// this is for ToggleChannelOnToggle
CMD_EVENT_PIN_ONTOGGLE,

// Argument is a string
// You can fire an event when TuyaMCU or something receives given string
CMD_EVENT_ON_UART,

// must be lower than 256
CMD_EVENT_MAX_TYPES
Expand Down Expand Up @@ -74,13 +78,15 @@ int Tokenizer_GetArgsCount();
const char *Tokenizer_GetArg(int i);
const char *Tokenizer_GetArgFrom(int i);
int Tokenizer_GetArgInteger(int i);
bool Tokenizer_IsArgInteger(int i);
int Tokenizer_GetArgIntegerRange(int i, int rangeMax, int rangeMin);
void Tokenizer_TokenizeString(const char *s);
// cmd_repeatingEvents.c
void RepeatingEvents_Init();
void RepeatingEvents_OnEverySecond();
// cmd_eventHandlers.c
void EventHandlers_Init();
void EventHandlers_FireEvent_String(byte eventCode, const char *argument);
void EventHandlers_FireEvent(byte eventCode, int argument);
void EventHandlers_ProcessVariableChange_Integer(byte eventCode, int oldValue, int newValue);
// cmd_tasmota.c
Expand Down
3 changes: 3 additions & 0 deletions src/cmnds/cmd_tokenizer.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ bool isWhiteSpace(char ch) {
int Tokenizer_GetArgsCount() {
return g_numArgs;
}
bool Tokenizer_IsArgInteger(int i) {
return strIsInteger(g_args[i]);
}
const char *Tokenizer_GetArg(int i) {
return g_args[i];
}
Expand Down
22 changes: 22 additions & 0 deletions src/driver/drv_tuyaMCU.c
Original file line number Diff line number Diff line change
Expand Up @@ -844,6 +844,7 @@ void TuyaMCU_ParseStateMessage(const byte *data, int len) {

void TuyaMCU_ProcessIncoming(const byte *data, int len) {
int checkLen;
int dataCount;
int i;
byte checkCheckSum;
byte cmd;
Expand Down Expand Up @@ -893,6 +894,27 @@ void TuyaMCU_ProcessIncoming(const byte *data, int len) {

}
break;
case TUYA_CMD_MCU_CONF:
// https://github.com/openshwprojects/OpenBK7231T_App/issues/291
// header ver TUYA_CMD_MCU_CONF LENGHT Chksum
// Pushing
// 55 AA 01 02 00 03 FF 01 01 06
// 55 AA 01 02 00 03 FF 01 00 05
// Rotating down
// 55 AA 01 02 00 05 01 24 02 01 0A 39
// 55 AA 01 02 00 03 01 09 00 0F
// Rotating up
// 55 AA 01 02 00 05 01 24 01 01 0A 38
// 55 AA 01 02 00 03 01 09 01 10
dataCount = data[5];
if(5 + dataCount + 1 != len) {
addLogAdv(LOG_INFO, LOG_FEATURE_TUYAMCU,"TuyaMCU_ProcessIncoming: TUYA_CMD_MCU_CONF had wrong data lenght?");
} else {
addLogAdv(LOG_INFO, LOG_FEATURE_TUYAMCU,"TuyaMCU_ProcessIncoming: TUYA_CMD_MCU_CONF, TODO!");

}
break;

default:
addLogAdv(LOG_INFO, LOG_FEATURE_TUYAMCU,"TuyaMCU_ProcessIncoming: unhandled type %i",cmd);
break;
Expand Down

0 comments on commit d25ced9

Please sign in to comment.