IR: change IR events to Event3 and include 'repeats' argument - this should not break anything, cause Event2 handlers will still be called as before, if not, let me know

This commit is contained in:
Tester23
2025-08-09 22:34:13 +02:00
parent a72fe4a4c5
commit b5d9d5f5f1
2 changed files with 34 additions and 3 deletions

View File

@@ -857,10 +857,11 @@ extern "C" void DRV_IR_RunFrame(){
break;
}
// we should include repeat here?
// e.g. on/off button should not toggle on repeats, but up/down probably should eat them.
uint32_t counter_in = ir_counter;
EventHandlers_FireEvent2(tgType,ourReceiver->decodedIRData.address,ourReceiver->decodedIRData.command);
// 2025.08.09 - include repeats, this should work also
// with older scripts
EventHandlers_FireEvent3(tgType, ourReceiver->decodedIRData.address,
ourReceiver->decodedIRData.command, repeats);
uint32_t counter_dur = ((ir_counter - counter_in)*50)/1000;
ADDLOG_DEBUG(LOG_FEATURE_IR, (char *)"IR fire event took %dms", counter_dur);
}

View File

@@ -98,6 +98,36 @@ void Test_Events() {
SELFTEST_ASSERT(EVENT_ParseEventName("UnknownEvent") == CMD_EVENT_NONE);
SELFTEST_ASSERT(EVENT_ParseEventName("") == CMD_EVENT_NONE);
SELFTEST_ASSERT(EVENT_ParseEventName(" ") == CMD_EVENT_NONE);
CMD_ExecuteCommand("setchannel 20 0", 0);
SELFTEST_ASSERT_CHANNEL(20, 0);
CMD_ExecuteCommand("addEventHandler2 IR_RC6 0x11 0x23 addChannel 20 1", 0);
// FireEvent 3 will call addEventHandler2
// (it assumes that third argument is 'any')
// So if we want RC6 events for 0x20 0x20 with ANY repeats (press or hold)
// then both press and release calls event
EventHandlers_FireEvent3(CMD_EVENT_IR_RC6, 0x11, 0x23, 0);
SELFTEST_ASSERT_CHANNEL(20, 1);
EventHandlers_FireEvent3(CMD_EVENT_IR_RC6, 0x11, 0x23, 0);
SELFTEST_ASSERT_CHANNEL(20, 2);
EventHandlers_FireEvent3(CMD_EVENT_IR_RC6, 0x11, 0x23, 0);
SELFTEST_ASSERT_CHANNEL(20, 3);
CMD_ExecuteCommand("setchannel 10 0", 0);
SELFTEST_ASSERT_CHANNEL(10, 0);
CMD_ExecuteCommand("addEventHandler3 IR_RC6 0x10 0x10 1 addChannel 10 1", 0);
EventHandlers_FireEvent3(CMD_EVENT_IR_RC6, 0x10, 0x10, 0);
SELFTEST_ASSERT_CHANNEL(10, 0);
EventHandlers_FireEvent3(CMD_EVENT_IR_RC6, 0x10, 0x10, 1);
SELFTEST_ASSERT_CHANNEL(10, 1);
EventHandlers_FireEvent3(CMD_EVENT_IR_RC6, 0x10, 0x10, 1);
SELFTEST_ASSERT_CHANNEL(10, 2);
EventHandlers_FireEvent3(CMD_EVENT_IR_RC6, 0x10, 0x10, 0);
SELFTEST_ASSERT_CHANNEL(10, 2);
EventHandlers_FireEvent2(CMD_EVENT_IR_RC6, 0x10, 0x10);
SELFTEST_ASSERT_CHANNEL(10, 3);
EventHandlers_FireEvent2(CMD_EVENT_IR_RC6, 0x10, 0x10);
SELFTEST_ASSERT_CHANNEL(10, 4);
}
void Test_UART() {