summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2015-10-19 16:46:08 +0200
committerErich Eckner <git@eckner.net>2015-10-19 16:46:08 +0200
commitc78de582883a92b5be17acc75ab734aeaf39c935 (patch)
tree7791fdad9fb00cd2fe33f8c312490fa8c494afaa
parent8c21488c33ee752d347d5f29af1e917c0af1ccb0 (diff)
downloadunits-c78de582883a92b5be17acc75ab734aeaf39c935.tar.xz
Tastenverarbeitung vorbereitet: Entprellen nun prinzipiell möglich
-rw-r--r--irdecoderunit.pas43
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;