diff --git a/src/cmnds/cmd_eventHandlers.c b/src/cmnds/cmd_eventHandlers.c index 2c102f646..0971a2b89 100644 --- a/src/cmnds/cmd_eventHandlers.c +++ b/src/cmnds/cmd_eventHandlers.c @@ -361,20 +361,22 @@ void EventHandlers_AddEventHandler_String(byte eventCode, int type, const char * ev->requiredArgument = 0; ev->requiredArgument2 = 0; } -void EventHandlers_FireEvent3(byte eventCode, int argument, int argument2, int argument3) { +int EventHandlers_FireEvent3(byte eventCode, int argument, int argument2, int argument3) { struct eventHandler_s *ev; ev = g_eventHandlers; - + int ran = 0; while (ev) { if (eventCode == ev->eventCode) { if (argument == ev->requiredArgument && argument2 == ev->requiredArgument2 && argument3 == ev->requiredArgument3) { ADDLOG_INFO(LOG_FEATURE_EVENT, "EventHandlers_FireEvent3: executing command %s", ev->command); CMD_ExecuteCommand(ev->command, COMMAND_FLAG_SOURCE_SCRIPT); + ran++; } } ev = ev->next; } + return ran; } int EventHandlers_FireEvent2(byte eventCode, int argument, int argument2) { struct eventHandler_s *ev; diff --git a/src/cmnds/cmd_public.h b/src/cmnds/cmd_public.h index 4d7ddb08d..8e18313cd 100644 --- a/src/cmnds/cmd_public.h +++ b/src/cmnds/cmd_public.h @@ -235,7 +235,7 @@ void EventHandlers_FireEvent_String(byte eventCode, const char* argument); void EventHandlers_FireEvent(byte eventCode, int argument); int EventHandlers_FireEvent2(byte eventCode, int argument, int argument2); const char *EventHandlers_GetHandlerCommand2(byte eventCode, int argument, int argument2); -void EventHandlers_FireEvent3(byte eventCode, int argument, int argument2, int argument3); +int EventHandlers_FireEvent3(byte eventCode, int argument, int argument2, int argument3); // This is more advanced event handler. It will only fire handlers when a variable state changes from one to another. // For example, you can watch for Voltage from BL0942 to change below 230, and it will fire event only when it becomes below 230. void EventHandlers_ProcessVariableChange_Integer(byte eventCode, int oldValue, int newValue); diff --git a/src/selftest/selftest_cmd_startup.c b/src/selftest/selftest_cmd_startup.c index 48fb50d96..5998b0501 100644 --- a/src/selftest/selftest_cmd_startup.c +++ b/src/selftest/selftest_cmd_startup.c @@ -65,6 +65,9 @@ void Test_Commands_Startup() { SELFTEST_ASSERT(1 == EventHandlers_FireEvent2(CMD_EVENT_IR_NEC, 0xC7EA, 0xF)); SELFTEST_ASSERT(1 == EventHandlers_FireEvent2(CMD_EVENT_IR_NEC, 0xC7EA, 0x10)); + SELFTEST_ASSERT(1 == EventHandlers_FireEvent3(CMD_EVENT_IR_NEC, 0xC7EA, 0x17, 0)); + SELFTEST_ASSERT(1 == EventHandlers_FireEvent3(CMD_EVENT_IR_NEC, 0xC7EA, 0xF, 0)); + SELFTEST_ASSERT(1 == EventHandlers_FireEvent3(CMD_EVENT_IR_NEC, 0xC7EA, 0x10, 0)); } { SIM_ShutdownOBK(); @@ -95,6 +98,54 @@ void Test_Commands_Startup() { } + { + SIM_ShutdownOBK(); + const char *t = "startDriver IR\n" + "setFlag 1 1\n" + "addEventHandler2 IR_NEC 0xC7EA 0x17 backlog IRSend NEC 0x0 0xA8; delay_ms 50; IRSend NEC 0x0 0xA8; IRSend NEC 0x0 0xA8; addChannel 1 1\n" + "addEventHandler2 IR_NEC 0xC7EA 0xF backlog IRSend NEC 0x0 0x8C; delay_ms 50; IRSend NEC 0x0 0x8C; IRSend NEC 0x0 0x8C; IRSend NEC 0x0 0x8C; IRSend NEC 0x0 0x8C; addChannel 2 1\n" + "addEventHandler2 IR_NEC 0xC7EA 0x10 backlog IRSend NEC 0x0 0x9C; delay_ms 50; IRSend NEC 0x0 0x9C; IRSend NEC 0x0 0x9C; IRSend NEC 0x0 0x9C; addChannel 3 1\n" + "addEventHandler2 IR_NEC 0xC7EA 0x11 backlog IRSend NEC 0x0 0x9D; delay_ms 50; IRSend NEC 0x0 0x9D; IRSend NEC 0x0 0x9D; IRSend NEC 0x0 0x9D; addChannel 4 1\n"; + + CFG_SetShortStartupCommand(t); + CFG_Save_IfThereArePendingChanges(); + // NOTE: THIS WILL RUN STARTUP COMMAND!!!! + SIM_StartOBK(0); + + CMD_ExecuteCommand("setChannel 1 0", 0); + SELFTEST_ASSERT_CHANNEL(1, 0); + CMD_ExecuteCommand("setChannel 2 0", 0); + SELFTEST_ASSERT_CHANNEL(2, 0); + CMD_ExecuteCommand("setChannel 3 0", 0); + SELFTEST_ASSERT_CHANNEL(3, 0); + CMD_ExecuteCommand("setChannel 4 0", 0); + SELFTEST_ASSERT_CHANNEL(4, 0); + + printf("TEST 0x17: %s\n", + EventHandlers_GetHandlerCommand2(CMD_EVENT_IR_NEC, 0xC7EA, 0x17)); + printf("TEST 0xF %s\n", + EventHandlers_GetHandlerCommand2(CMD_EVENT_IR_NEC, 0xC7EA, 0xF)); + printf("TEST 0x10 %s\n", + EventHandlers_GetHandlerCommand2(CMD_EVENT_IR_NEC, 0xC7EA, 0x10)); + printf("TEST 0x11 %s\n", + EventHandlers_GetHandlerCommand2(CMD_EVENT_IR_NEC, 0xC7EA, 0x11)); + SELFTEST_ASSERT(1 == EventHandlers_FireEvent2(CMD_EVENT_IR_NEC, 0xC7EA, 0x17)); + SELFTEST_ASSERT(1 == EventHandlers_FireEvent2(CMD_EVENT_IR_NEC, 0xC7EA, 0xF)); + SELFTEST_ASSERT(1 == EventHandlers_FireEvent2(CMD_EVENT_IR_NEC, 0xC7EA, 0x10)); + SELFTEST_ASSERT(1 == EventHandlers_FireEvent2(CMD_EVENT_IR_NEC, 0xC7EA, 0x11)); + + // didn't get past delay_ms 50 yet + SELFTEST_ASSERT_CHANNEL(1, 0); + SELFTEST_ASSERT_CHANNEL(2, 0); + SELFTEST_ASSERT_CHANNEL(3, 0); + SELFTEST_ASSERT_CHANNEL(4, 0); + // get past delay_ms 50 + Sim_RunMiliseconds(100, false); + SELFTEST_ASSERT_CHANNEL(1, 1); + SELFTEST_ASSERT_CHANNEL(2, 1); + SELFTEST_ASSERT_CHANNEL(3, 1); + SELFTEST_ASSERT_CHANNEL(4, 1); + } }