Infrared Protocol Analysis

I want to do some protocol analysis on my remote, but not sure how to use my flipper to do so. I captured a few buttons of the remote, and they all show “raw” as the protocol. Are there other possible protocols that the flipper can read or understand?

I’m also not sure what the values under “data” are. I assume these are times in microseconds, they represent signal received? If so, are the spaces between signal not measured/timed? Here are a couple of buttons I captured as an example, taken from the resulting .ir file:

Version: 1
# 
name: Vol_up
type: raw
frequency: 38000
duty_cycle: 0.330000
data: 4507 4541 524 1733 523 1735 520 1734 521 604 524 604 523 605 522 607 521 605 522 1732 524 1733 523 1732 524 605 523 605 523 605 522 606 522 605 522 1733 523 1732 524 1734 521 604 524 606 521 605 546 582 522 605 545 583 545 581 546 582 524 1730 546 1707 548 1711 544 1709 547 1710 545 580 547 581 546 581 546 581 546 42752 4508 4541 548 1709 546 1708 547 1707 548 580 547 579 548 581 546 580 547 579 548 1708 547 1707 548 1708 547 581 546 580 547 579 548 581 546 580 548 1708 547 1708 547 1709 547 580 548 581 547 582 545 581 547 580 547 580 547 580 547 582 545 1709 546 1708 548 1708 547 1708 547 1708 547 579 548 581 546 582 545 579 548
# 
name: Vol_dn
type: raw
frequency: 38000
duty_cycle: 0.330000
data: 4507 4542 573 1679 576 1679 576 1678 577 552 575 551 576 550 578 551 576 551 576 1679 576 1680 575 1680 575 550 577 551 576 551 576 550 577 550 577 1678 578 1678 577 550 577 1678 577 550 577 550 577 550 577 550 577 550 577 550 577 1678 577 550 577 1679 576 1678 577 1678 551 1705 550 576 551 575 552 576 551 577 550 42746 4508 4539 551 1704 551 1704 551 1704 551 577 551 575 552 578 550 577 550 576 578 1679 577 1677 578 1678 577 549 578 550 577 548 579 549 578 550 577 1676 580 1681 574 549 578 1679 576 549 578 549 578 549 578 551 576 551 576 551 576 1680 575 550 577 1680 575 1680 575 1680 575 1681 574 551 576 555 572 553 574 554 548
#
1 Like

You assumption is right. The values are trimmings from on to off and off to on.
But this is only half the path to an analysis. If you know when the light is on or off is good, but a 0 or 1 is different, depending on the encoding.

Most times a 0 or a 1 is a timing pair. Sometimes the on/off is a fixed length, sometimes the on is fixed and the length of off is defining the value and sometimes the other way around.
And to make it even more interesting, it is not a fixed value, within one data field, the value can vary.

I’ve started this for another project, where I want to compare all signals of IRDB to find doubles. So I need to make it comparable first and either encode the raw or decode the parsed ones.

What I have done so far: https://github.com/LupusE/FlipperMgmt/tree/main/helper/infrared

2 Likes

I knew I’ve had it a little more described. But I wasn’t aware it was in already my main project.

    # The recorded pulse is alternate on/off
    ### Header 
    # Significant longer than data.
    # At least one long on to calibrate the AGC, oftern followed by a shorter off
    ### Data
    ## Manchester encoding, signal 1ms:
    # - 0 -> Off 0,5ms/On  0,5ms (signal 1ms) - 1:1
    # - 1 -> On  0,5ms/Off 0,5ms (signal 1ms) - 1:1
    ## Pulse distance control:
    # - 0 -> On 0,1ms/Off 0,9ms (signal 1ms) - 1:9
    # - 1 -> On 0,1ms/Off 1,9ms (signal 2ms) - 1:19
    ## Pulse length control:
    # - 0 -> On 0,5ms/Off 0,5ms (signal 1ms) - 1:1
    # - 1 -> On 0,5ms/Off 1,5ms (signal 2ms) - 1:3

from https://github.com/LupusE/FlipperMgmt/blob/main/irfiles_import.py from line 152, function button_raw2binary(btn_data).