DIe Hauptroutine (main()) macht eigentlich nichts weiter als die Zeiten zwischen Pegelwechsel zu messen.
Bei einem langen 1-Puls (>9000 Mikrosekunden kein Signal) wird synchronisiert. Wenn mehr als 10 Pegelwechsel (tcount) erkannt worden waren, dann wird das Timingmuster ausgegeben und decodiert. Glitches bzw.Prellen, oder auch Pulse kürzer als 5 Mikrosekunden werden ignoriert.
Wenn also irgendwas sinnvolles erkannt wird, wird die Routine printout() aufgerufen. Ansonsten weiter empfangen.
Printout analysiert dann nochmal die Zeiten zwischen den Pegelwechseln und versucht daraus zu erraten, welches Protokoll verwendet wurde, bzw. welche Protokoll-Klasse:
timing[0] ist dabei die Länge des Sync-Pulses, den die meisten Sender als Beginn einer Nachricht senden. Hier konnte ich mal 4 verschiedene typische Längen ermitteln, je nach Sender. Aber da kann es natürlich noch mehr geben.Je nach Pulslänge wird dann die variable protocol gesetzt. und mint ist dabei glaube ich die Clock für das Protokoll, also das Raster in dem die Bits abgetastet werden. (in Mikrosekunden).
Dann gibt es verschiedene Dekodsierungsmethoden: Länge der 1-Pegel, wobei jedes Bit mit einem 0->1 Wechsel anfängt, oder Wert in einem starren Raster, oder Manchester-decodierung (siehe Wikipedia). Mehr hatte ich glaube ich noch nicht implementiert.