logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

OpenBeken addEventHandler reprodukcja problemu

p.kaczmarek2 17 Paź 2025 11:13 768 8
REKLAMA
  • #1 21716245
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14622
    Pomógł: 655
    Ocena: 12641
    @divadiow @insmod
    Otrzymaliśmy takie zgłoszenie w numerze #1828:
    Cytat:
    w podsumowaniu, gdy istnieje więcej niż 3 programy obsługi zdarzeń, drugi program obsługi zdarzeń z jakiegoś powodu wykona akcję ostatniego programu obsługi zdarzeń zamiast własnej akcji.

    wersja: Zbudowany 6 października 2025 07:36:23 wersja 1.18.189
    Urządzenie Tuya IR blaster S18 chip CB3S
    Chip/model: BK7231N
    Konfiguracja urządzenia?
    to są polecenia podczas uruchamiania:
    "
    startDriver IR
    setFlag 1 1
    addEventHandler2 IR_NEC 0xC7EA 0x17 backlog IRSend NEC 0x0 0xA8; IRSend NEC 0x0 0xA8; IRSend NEC 0x0 0xA8

    addEventHandler2 IR_NEC 0xC7EA 0xF backlog IRSend NEC 0x0 0x8C; IRSend NEC 0x0 0x8C; IRSend NEC 0x0 0x8C;IRSend NEC 0x0 0x8C;IRSend NEC 0x0 0x8C

    addEventHandler2 IR_NEC 0xC7EA 0x10 backlog IRSend NEC 0x0 0x9C; IRSend NEC 0x0 0x9C; IRSend NEC 0x0 0x9C;IRSend NEC 0x0 0x9C
    "

    po uruchomieniu urządzenia stało się to, co się stało:
    "
    Info:MAIN:Uruchomiono IR.
    Info:CMD:CMD_StartScript: uruchomiono @startup na początku
    Info:MAIN:D rv IR jest już załadowany.
    Info:EVENT:CMD_AddEventHandler: dodano IR_NEC z cmd backlog IRSend NEC 0x0 0xA8; IRSend NEC 0x0 0xA8; IRSend NEC 0x0 0xA8
    Info:EVENT:CMD_AddEventHandler: dodano IR_NEC z cmd backlog IRSend NEC 0x0 0x9C; IRSend NEC 0x0 0x9C; IRSend NEC 0x0 0x9C;IRSend NEC 0x0 0x9C
    Info:EVENT:CMD_AddEventHandler: dodano IR_NEC z cmd backlog IRSend NEC 0x0 0x9C; IRSend NEC 0x0 0x9C; IRSend NEC 0x0 0x9C;IRSend NEC 0x0 0x9C
    "

    2. program obsługi zdarzeń powinien wysłać 0x8C po wyzwoleniu, ale zamiast tego wysłał 0x9C (co jest akcją 3. programu obsługi zdarzeń). jeśli istnieją 4 programy obsługi zdarzeń, 2. program obsługi zdarzeń wykona akcję 4. programu obsługi zdarzeń.

    w podsumowaniu, 2. program obsługi zdarzeń z jakiegoś powodu wykona akcję ostatniego programu obsługi zdarzeń zamiast własnej akcji.

    Czy jesteś w stanie replikować? Próbowałem z autotestem, ale na razie bez powodzenia:
    Środowisko Visual Studio z otwartym kodem C i oknem debugowania z komunikatami IRSend.
    Wygląda na możliwy problem z buforem (przekroczenie lub coś w tym stylu)
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • REKLAMA
  • #3 21716291
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14622
    Pomógł: 655
    Ocena: 12641
    Odnosi się konkretnie do polecenia uruchamiania, próbowałeś tam?
    Pomogłem? Kup mi kawę.
  • REKLAMA
  • #5 21723627
    wenhuazhang2018
    Poziom 2  
    Posty: 3
    Dzięki za pracę, oto aktualizacja i wyjaśnienie:

    1) Przepisałem skrypt startowy:
    startDriver IR
    setFlag 1 1
    addEventHandler2 IR_NEC 0xC7EA 0x17 backlog delay_ms 50; IRSend NEC-0-A8-0-32
    
    addEventHandler2 IR_NEC 0xC7EA 0xF backlog delay_ms 50; IRSend NEC-0-8C-0-32
    
    addEventHandler2 IR_NEC 0xC7EA 0x10 backlog delay_ms 50; IRSend NEC-0-9C-0-32
    .

    2) podczas uruchamiania wszystko wygląda dobrze:

    Info:MAIN:Started IR.
    Info:CMD:CMD_StartScript: started @startup at the beginning
    Info:MAIN:Drv IR is already loaded.
    Info:EVENT:CMD_AddEventHandler: added IR_NEC with cmd backlog delay_ms 50; IRSend NEC-0-A8-0-32
    Info:EVENT:CMD_AddEventHandler: added IR_NEC with cmd backlog delay_ms 50; IRSend NEC-0-8C-0-32
    Info:EVENT:CMD_AddEventHandler: added IR_NEC with cmd backlog delay_ms 50; IRSend NEC-0-9C-0-32
    Info:CMD:LFS_ReadFile: failed to file autoexec.bat
    Info:CMD:CMD_StartScript: failed to get file autoexec.bat
    Info:MAIN:Main_Init_After_Delay done


    3) ale podczas testowania:

    Info:IR:IR IR_NEC 0xC7EA 0xF 0 (32 bits)
    Info:EVENT:EventHandlers_FireEvent3: executing command  backlog delay_ms 50; IRSend NEC-0-9C-0-32
    Info:IR:Delay 100ms
    Info:IR:IR send NEC-0-9C-0-32 protocol 7 addr 0x0 cmd 0x9C repeats 0 bits override 50
    
    .
    Jak widać: Zdarzenie 0xF powinno wysłać 8C, ale zamiast tego wysłało 9C.

    4) Restartowałem i testowałem wiele razy, w rzadkich przypadkach wszystko działało poprawnie, ale w 90% przypadków wystąpi powyższy błąd.

    Dodano po 6 [minutach]: .

    Również to jest mój szablon:

    Kod: JSON
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #6 21724089
    max4elektroda
    Poziom 24  
    Posty: 756
    Pomógł: 48
    Ocena: 187
    Może uda nam się zawęzić problem dzięki dodatkowemu debugowaniu.
    Czy mógłbyś spróbować z załączonym firmware i logowaniem ustawionym na "Debug" lub nawet "ExtraDebug"?
    Jeśli zrobiłem to dobrze (nie mogę przetestować z powodu braku sprzętu), powinno to wydrukować więcej szczegółów, w jaki sposób znaleziono "pasującą" obsługę zdarzeń.

    Coś takiego z testu symulatora

    
    Debug:EVENT:DEBUG EventHandlers_FireEvent3: called with eventCode 84 address 0xEF00 command 0x0 repeat 0
    ExtraDebug:EVENT:DEBUG EventHandlers_FireEvent3: checking event for match: address 0xEF00 command 0x6 repeat 0
    ExtraDebug:EVENT:DEBUG EventHandlers_FireEvent3: checking event for match: address 0xEF00 command 0x5 repeat 0
    ExtraDebug:EVENT:DEBUG EventHandlers_FireEvent3: checking event for match: address 0xEF00 command 0x4 repeat 0
    ExtraDebug:EVENT:DEBUG EventHandlers_FireEvent3: checking event for match: address 0xEF00 command 0x10 repeat 0
    ExtraDebug:EVENT:DEBUG EventHandlers_FireEvent3: checking event for match: address 0xEF00 command 0x1 repeat 0
    ExtraDebug:EVENT:DEBUG EventHandlers_FireEvent3: checking event for match: address 0xEF00 command 0x0 repeat 0
    Debug:EVENT:DEBUG EventHandlers_FireEvent3: found event match: address 0xEF00 command 0x0 repeat 0
    Info:EVENT:EventHandlers_FireEvent3: executing command setChannel 12 1
    



    Zaktualizowano załączone oprogramowanie układowe - rozszerzono "listeventhandlers", aby pokazać również wymagane argumenty.
    Przykładowe dane wyjściowe dla kodu:
    
    Info:EVENT:Event 0 has code 84 and command backlog delay_ms 50; IRSend NEC-0-9C-0-32. Required arguments: 51178 (0xc7ea), 16 (0x10), 0 (0x0)
    Info:EVENT:Event 1 has code 84 and command backlog delay_ms 50; IRSend NEC-0-8C-0-32. Required arguments: 51178 (0xc7ea), 15 (0xf), 0 (0x0)
    Info:EVENT:Event 2 has code 84 and command backlog delay_ms 50; IRSend NEC-0-A8-0-32. Required arguments: 51178 (0xc7ea), 23 (0x17), 0 (0x0)
    Załączniki:
    • OpenBK7231T_App_irdebug_42e29b3f039a_OpenBK7231N.zip (3.78 MB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #7 21724098
    p.kaczmarek2
    Moderator Smart Home
    Posty: 14622
    Pomógł: 655
    Ocena: 12641
    Teraz pokazujesz kod z delay_ms w backlogu. Zostało to niedawno zaimplementowane poprzez umieszczenie backloga w małym wątku skryptu. Może w tym tkwi problem?

    Mimo to dodałem test delay_ms w taki sposób, ale nadal nie ma problemu...
    https://github.com/openshwprojects/OpenBK7231...mmit/3a6d7bcecc2ff8d209f6a1c797056166c830e6a6
    Może coś specyficznego dla chipa
    Pomogłem? Kup mi kawę.
  • #8 21725564
    wenhuazhang2018
    Poziom 2  
    Posty: 3
    Dzięki za sugestie, nie wypróbowałem jeszcze nowego oprogramowania układowego, ale po usunięciu opóźnienia wszystko wydaje się teraz w porządku. (Ponownie uruchomiłem urządzenie kilka razy za każdym razem działa dobrze).

    addEventHandler2 IR_NEC 0xC7EA 0x17 IRSend NEC-0-A8-0-32
    
    addEventHandler2 IR_NEC 0xC7EA 0xF  IRSend NEC-0-8C-0-32
    
    addEventHandler2 IR_NEC 0xC7EA 0x10 IRSend NEC-0-9C-0-32
    


    Kiedy próbuję przywrócić opóźnienie, ponownie pojawia się błąd. Próbowałem również tego:

    addEventHandler2 IR_NEC 0xC7EA 0x17 backlog IRSend NEC-0-A8-0-32; delay_ms 100; IRSend NEC-0-A8-0-32
    
    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
    
    addEventHandler2 IR_NEC 0xC7EA 0x10 backlog IRSend NEC-0-9C-0-32; delay_ms 100; IRSend NEC-0-9C-0-32
    .


    Otrzymałem:
    Info:IR:IR IR_NEC 0xC7EA 0xF 0 (32 bits)
    Info:EVENT:EventHandlers_FireEvent3: executing command  backlog IRSend NEC-0-9C-0-32; delay_ms 100; IRSend NEC-0-9C-0-32
    Info:IR:Delay 100ms
    Info:IR:IR send NEC-0-9C-0-32 protocol 7 addr 0x0 cmd 0x9C repeats 0 bits override 50
    Info:IR:Delay 100ms
    Info:IR:IR send NEC-0-9C-0-32 protocol 7 addr 0x0 cmd 0x9C repeats 0 bits override 50
    
    .
    Więc "delay_ms" wydaje się być problemem


    powiązane informacje i pytania:

    Próbuję transkodować IR z Roku:


    przycisk zasilania
    Info:IR:IR IR_NEC 0xC7EA 0x17 0 (32 bity)
    Info:IR:IR IR_NEC2 0xC7EA 0x97 1 (32 bity)

    Vup
    Info:IR:IR_NEC 0xC7EA 0xF 0 (32 bity)
    Info:IR:IR_NEC2 0xC7EA 0x8F 1 (32 bity)

    Vdown
    Info:IR:IR_NEC 0xC7EA 0x10 1 (32 bity)
    Info:IR:IR_NEC2 0xC7EA 0x90 1 (32 bity)

    do projektora Vankyo:

    przycisk zasilania
    Info:IR:IR_NEC 0x0 0xA8 0 (32 bity)
    Info:IR:IR_NEC 0x0 0xA8 1 (0 bitów)

    Vup
    Info:IR:IR_NEC 0x0 0x8C 0 (32 bity)
    Info:IR:IR_NEC 0x0 0x8C 1 (0 bitów)

    Vdown
    Info:IR:IR_NEC 0x0 0x9C 0 (32 bity)
    Info:IR:IR_NEC 0x0 0x9C 1 (0 bitów)

    1) Czy umieszczenie eventhandlera przy starcie jest właściwym sposobem?
    2) Kiedy próbuję to zrobić:
    addEventHandler2 IR_NEC2 0xC7EA 0x8F IRSend NEC-0-8C-0-32
    Otrzymuję błąd:
    Error:EVENT: IR_NEC2 nie jest prawidłowym zdarzeniem

    Dodano po 19 [minutach]:

    max4elektroda, próbuję firmware, który wysłałeś, w zipie jest 6 plików, którego powinienem użyć?

    Dodano po 17 [minutach]: .

    używając tego pliku do OTA "OpenBK7231N_irdebug_42e29b3f039a.rbl"
    i używając go podczas uruchamiania:

    addEventHandler2 IR_NEC 0xC7EA 0x17 backlog IRSend NEC-0-A8-0-32; delay_ms 100; IRSend NEC-0-A8-0-32
    
    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
    
    addEventHandler2 IR_NEC 0xC7EA 0x10 backlog IRSend NEC-0-9C-0-32; delay_ms 100; IRSend NEC-0-9C-0-32
    
    



    Oto powiązane dzienniki: (pokazując, że błąd występuje, gdy w zdarzeniu 0xF jest "delay_ms 50", wykonał akcję trzeciego zdarzenia)

    Info:IR:IR IR_NEC 0xC7EA 0xF 0 (32 bits)
    Debug:IR:DEBUG: Calling 'EventHandlers_FireEvent3(84, 0C7EA, 0F, 0)'
    Debug:EVENT:DEBUG EventHandlers_FireEvent3: called with eventCode 84 address 0xC7EA command 0xF repeat 0
    ExtraDebug:EVENT:DEBUG EventHandlers_FireEvent3: checking event for match: address 0xC7EA command 0xF repeat 0
    Debug:EVENT:DEBUG EventHandlers_FireEvent3: found event match: address 0xC7EA command 0xF repeat 0
    Info:EVENT:EventHandlers_FireEvent3: executing command  backlog IRSend NEC-0-9C-0-32; delay_ms 100; IRSend NEC-0-9C-0-32
    Debug:CMD:cmd [backlog IRSend NEC-0-9C-0-32; delay_ms 100; IRSend NEC-0-9C-0-32]
    ExtraDebug:EVENT:DEBUG EventHandlers_FireEvent3: checking event for match: address 0xC7EA command 0x10 repeat 0
    ExtraDebug:EVENT:DEBUG EventHandlers_FireEvent3: checking event for match: address 0xC7EA command 0x17 repeat 0
    Debug:IR:IR fire event took 9ms
    Debug:CMD:cmd [IRSend NEC-0-9C-0-32]
    Info:IR:Delay 100ms
    Info:IR:IR send NEC-0-9C-0-32 protocol 7 addr 0x0 cmd 0x9C repeats 0 bits override 50
    Debug:CMD:cmd [delay_ms 100]
    ExtraDebug:CMD:CMD_Delay_ms: thread will delay 100
    Debug:CMD:cmd [IRSend NEC-0-9C-0-32]
    Info:IR:Delay 100ms
    Info:IR:IR send NEC-0-9C-0-32 protocol 7 addr 0x0 cmd 0x9C repeats 0 bits override 50
    Debug:IR:IR decode returned true, protocol 8
    Debug:IR:Address=0xC7EA Command=0x8F
    Debug:IR:Repeat
    Debug:IR: Gap 38050us
    Debug:IR: Raw-Data=0x708FC7EA
    Debug:IR: 32 bits
    Debug:IR: LSB first
    Debug:IR:IR decode returned true, protocol NEC2 (8)
    Info:IR:IR IR_NEC2 0xC7EA 0x8F 1 (32 bits)
  • #9 21725573
    max4elektroda
    Poziom 24  
    Posty: 756
    Pomógł: 48
    Ocena: 187
    Jeśli nadal masz oprogramowanie debugujące:
    Czy mógłbyś wypróbować polecenie "listeventhandlers", aby zobaczyć, co zostało zapisane jako polecenie?
    Dzięki!

Podsumowanie tematu

✨ Dyskusja dotyczy problemu z funkcją addEventHandler w OpenBeken, zgłoszonego w numerze #1828, gdzie pojawia się podejrzenie błędu związanego z buforem (np. przekroczeniem). Próby replikacji problemu przy użyciu autotestu nie powiodły się. Testy wykonane na układzie bk7231n również nie potwierdziły występowania błędu. Wątpliwości dotyczą szczególnie polecenia uruchamiania, które zostało dokładnie skopiowane z komend startdriver i setflag, jednak problem nadal nie został odtworzony.
Wygenerowane przez model językowy.
REKLAMA