diff options
-rw-r--r-- | irdecoderunit.pas | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/irdecoderunit.pas b/irdecoderunit.pas index c4cb658..f344606 100644 --- a/irdecoderunit.pas +++ b/irdecoderunit.pas @@ -10,7 +10,13 @@ uses type tIRDecoder = class private - ttySLeser: tLeseProzess; + ttySLeser: tLeseProzess; + letztesZeichen: array[boolean] of longword; + letzterEmpf: boolean; + procedure init; + procedure verarbeite(lw: longword); + function einzelKlickZeichen(lw: longword): boolean; + procedure tastenDruckAnhaengen(lw: longword); public constructor create(inputName: string); destructor destroy; override; @@ -25,6 +31,7 @@ constructor tIRDecoder.create(inputName: string); begin inherited create; ttySLeser:=tLeseProzess.create(inputName,1); + init; end; destructor tIRDecoder.destroy; @@ -33,6 +40,37 @@ begin inherited destroy; end; +procedure tIRDecoder.init; +begin + letztesZeichen[false]:=$ffffffff; + letztesZeichen[true]:=$ffffffff; + letzterEmpf:=false; +end; + +procedure tIRDecoder.verarbeite(lw: longword); +var + empf: boolean; +begin + empf:=odd(lw); + lw:=lw shr 1; + + if (lw<>letztesZeichen[letzterEmpf]) or not einzelKlickZeichen(lw) then + tastenDruckAnhaengen(lw); + + letztesZeichen[empf]:=lw; + letzterEmpf:=empf; +end; + +function tIRDecoder.einzelKlickZeichen(lw: longword): boolean; +begin + result:=true; +end; + +procedure tIRDecoder.tastenDruckAnhaengen(lw: longword); +begin + writeln('> '+hexDump(@lw,sizeof(lw))); +end; + function tIRDecoder.zeileVerarbeitet: boolean; var s: string; @@ -43,6 +81,7 @@ begin if s='Ha!' then begin // Startzeichen writeln('Empfänger hat sich gemeldet!'); + init; exit; end; @@ -51,7 +90,7 @@ begin raise exception.create('interner Fehler: base64ToBin meckert, base64Decode aber nicht!'); writeln('Bits: '+s+' '+hexDump(@inByte,sizeof(inByte))); - // verarbeiten! + verarbeite(inByte); exit; end; |