summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2015-10-19 21:09:39 +0200
committerErich Eckner <git@eckner.net>2015-10-19 21:09:39 +0200
commit9992352d91dbf2f5ee59dd23c7a970312a0d2bfb (patch)
treec12bd9b7b3d5fb97a2b0d2bfe867fb7044e83dd0
parente69b34e2a2bf722ab6b7b8daf8656e582608f053 (diff)
downloadunits-9992352d91dbf2f5ee59dd23c7a970312a0d2bfb.tar.xz
Tastencodes einprogrammiert, die meisten Tasten entprellt
-rw-r--r--irdecoderunit.pas61
1 files changed, 51 insertions, 10 deletions
diff --git a/irdecoderunit.pas b/irdecoderunit.pas
index ac46bcb..1075857 100644
--- a/irdecoderunit.pas
+++ b/irdecoderunit.pas
@@ -10,11 +10,12 @@ uses
type
tIRDecoder = class
private
- ttySLeser: tLeseProzess;
- letztesZeichen: array[boolean] of longword;
- letzterEmpf: boolean;
- eingabePuffer: array of longword;
- eingabeLaenge: longword;
+ ttySLeser: tLeseProzess;
+ letztesZeichen: array[boolean] of longword;
+ letzterEmpf: boolean;
+ eingabePuffer: array of longword;
+ eingabeLaenge,
+ letzterBefehl: longword;
procedure init;
procedure tastenDruckAnhaengen(lw: longword);
procedure befehlAusfuehren(lw: longword);
@@ -33,8 +34,41 @@ type
implementation
-const zeichenTabelle: array[0..0] of tBefehl = (
- (zeichen: $e0000000; einzelKlick: true; toDo: 'Hallo!')
+const zeichenTabelle: array[0..33] of tBefehl = (
+ (zeichen: $00000007; einzelKlick: true; toDo: '0'), // 0/10
+ (zeichen: $00004006; einzelKlick: true; toDo: '1'), // 1
+ (zeichen: $00002007; einzelKlick: true; toDo: '2'), // 2
+ (zeichen: $00006006; einzelKlick: true; toDo: '3'), // 3
+ (zeichen: $00001007; einzelKlick: true; toDo: '4'), // 4
+ (zeichen: $00005006; einzelKlick: true; toDo: '5'), // 5
+ (zeichen: $00003007; einzelKlick: true; toDo: '6'), // 6
+ (zeichen: $00007006; einzelKlick: true; toDo: '7'), // 7
+ (zeichen: $00000807; einzelKlick: true; toDo: '8'), // 8
+ (zeichen: $00004806; einzelKlick: true; toDo: '9'), // 9
+ (zeichen: $00000a07; einzelKlick: true; toDo: '2/12'), // 2-/12
+ (zeichen: $00001807; einzelKlick: true; toDo: 'Power'), // Power
+ (zeichen: $00001a07; einzelKlick: true; toDo: 'Punkt'), // Punkt
+ (zeichen: $00007806; einzelKlick: true; toDo: 'PfeilInKasten'), // PfeilInKasten
+ (zeichen: $00002a07; einzelKlick: true; toDo: '|>'), // |>
+ (zeichen: $00003a07; einzelKlick: true; toDo: '<|'), // <|
+ (zeichen: $00002807; einzelKlick: true; toDo: '<<'), // <<
+ (zeichen: $00006806; einzelKlick: true; toDo: '>>'), // >>
+ (zeichen: $00003807; einzelKlick: true; toDo: '||'), // ||
+ (zeichen: $00006a06; einzelKlick: true; toDo: '>'), // >
+ (zeichen: $00004a06; einzelKlick: true; toDo: '[]'), // []
+ (zeichen: $00004e06; einzelKlick: true; toDo: 'P+'), // P+
+ (zeichen: $00000e07; einzelKlick: true; toDo: 'P-'), // P-
+ (zeichen: $00005806; einzelKlick: true; toDo: 'Stumm'), // Stumm
+ (zeichen: $00000407; einzelKlick: false; toDo: 'L+'), // L+
+ (zeichen: $00004406; einzelKlick: false; toDo: 'L-'), // L-
+ (zeichen: $00005406; einzelKlick: false; toDo: 'K-'), // K-
+ (zeichen: $00001407; einzelKlick: false; toDo: 'K+'), // K+
+ (zeichen: $00006406; einzelKlick: false; toDo: 'H-'), // H-
+ (zeichen: $00002407; einzelKlick: false; toDo: 'H+'), // H+
+ (zeichen: $00004c06; einzelKlick: true; toDo: 'rot'), // rot
+ (zeichen: $00007406; einzelKlick: true; toDo: 'gruen'), // gruen
+ (zeichen: $00006c06; einzelKlick: true; toDo: 'gelb'), // gelb
+ (zeichen: $00001207; einzelKlick: true; toDo: 'blau') // blau
);
// tIRDecoder ******************************************************************
@@ -58,6 +92,7 @@ begin
letztesZeichen[false]:=$ffffffff;
letztesZeichen[true]:=$ffffffff;
letzterEmpf:=false;
+ letzterBefehl:=$ffffffff;
setlength(eingabePuffer,0);
eingabeLaenge:=0;
end;
@@ -69,7 +104,7 @@ begin
empf:=odd(lw shr 1);
lw:=((lw shr 1) and not 1) or byte(odd(lw));
- if (lw<>letztesZeichen[letzterEmpf]) or (empf=letzterEmpf) then begin
+ if (lw<>letztesZeichen[letzterEmpf]) or (empf=letzterEmpf) or empf then begin
if eingabeLaenge>=length(eingabePuffer) then
setlength(eingabePuffer,eingabeLaenge+1024);
eingabePuffer[eingabeLaenge]:=lw;
@@ -82,11 +117,17 @@ end;
procedure tIRDecoder.befehlAusfuehren(lw: longword);
var
- i: longword;
+ i: longword;
+ neu: boolean;
begin
+ neu:=lw<>letzterBefehl;
+ letzterBefehl:=lw;
+ lw:=lw and not $08;
+
for i:=0 to length(zeichenTabelle)-1 do
if zeichenTabelle[i].zeichen=lw then begin
- writeln('> '+zeichenTabelle[i].toDo);
+ if neu or not zeichenTabelle[i].einzelKlick then
+ writeln('> '+zeichenTabelle[i].toDo);
exit;
end;
writeln('roh: '+hexDump(@lw,sizeof(lw)));