
| Current Path : /var/www/web-klick.de/dsh/90_akt/PPLTest.old/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/web-klick.de/dsh/90_akt/PPLTest.old/MMIStatus1.pm |
package PPLTest::MMIStatus;
use strict;
use Server::BlackBoard;
use PPLTest::Buffer_Semantic;
use Data::Dumper;
use MIME::Base64;
#********************************************************************
sub new {
my $class = shift;
my $self = {};
bless($self,$class);
return($self);
}
#********************************************************************
sub event {
my $self = shift;
my $v = shift;
my $t = shift;
my $o; my $o1; my $o2; my $VAR1;
my $erg = "___INTERACTIVE___";
my $semantic = PPLTest::Buffer_Semantic->new($v->{'data'});
if ($v->{'socket_exists'} == 0) {
return($erg);
}
elsif ($t =~ /^sync$/i) {
my $out = Server::BlackBoard->new($PAR::in_db->{$v->{'data'}});
$out->msg("getbytes");
$erg = "";
}
elsif ($t =~ /^KeyPressShort/i) {
my $bytefolge = $semantic->send($t);
my $out = Server::BlackBoard->new($PAR::in_db->{$v->{'data'}});
$out->msg($bytefolge);
# $out->msg("getbytes");
$erg = "";
}
elsif ($t =~ /^SoftKey.(.*)$/i) {
my $mmi = $v->{'mmi'};
$t = $mmi->{'matrix'}->{$1};
my $bytefolge = $semantic->send($t);
my $out = Server::BlackBoard->new($PAR::in_db->{$v->{'data'}});
$out->msg($bytefolge);
# $out->msg("getbytes");
$erg = "";
}
elsif ($t =~ /^display$/i) {
my $in = Server::BlackBoard->new($PAR::out_db->{$v->{'data'}},
$v->{'dblast'});
my $messages = $in->get();
$v->{'dblast'} = $in->last();
$erg = "";
foreach $o (reverse @$messages) {
print "BUFFER MESSAGE $o->[1]\n";
if ($o->[1] =~ /^(05|1A)(..)(.+)$/i) {
$erg = $3 . "-" . $2 . "-" . $o->[0];
# processdescr - statedescr - eingangszeit
}
}
}
return($erg);
}
#********************************************************************
sub status {
my $self = shift;
my $v = shift;
my $t = shift;
my $e = shift; # Ergebnis
my $mmi = $v->{'mmi'};
my $z = time();
unshift(@{$mmi->{'trace'}},[$t,$e,$z]);
if (!($mmi->{'screen'})) {
$mmi->{'screen'} = { 'name' => "einschalten" };
$mmi->{'partition'} = "basispartition";
}
my $screen; my $fkt;
while (0 == 0) {
$screen = $mmi->{'screen'};
$fkt = $v->{'data'} . "_" . $mmi->{'screen'}->{'name'};
eval("\$self->$fkt(\$v,\$mmi,\$screen,\$t,\$e,\$z)");
if ($@) {
$fkt = "common_" . $mmi->{'screen'}->{'name'};
eval("\$self->$fkt(\$v,\$mmi,\$screen,\$t,\$e,\$z)");
}
last if (!($screen->{'redirect'}));
print "REDIRECT-SCREEN: $screen->{'redirect'}\n";
$mmi->{'screen'} = $screen->{'redirect'};
delete ($screen->{'redirect'});
$mmi->{'screen'}->{'zeit'} = $z;
}
$screen->{'zeit'} = $z;
my $mmi1 = {%$mmi};
delete ($mmi1->{'trace'});
$v->{'log'} = $v->{'log'} . Dumper($mmi1);
}
#********************************************************************
sub display {
my $self = shift;
my $title = shift;
my $partition = shift;
my $e = shift;
my $v = shift;
my $o;
my $semantic = PPLTest::Buffer_Semantic->new($v->{'data'});
my $var_map = $semantic->var_map();
print "ERG: $e\n";
if ($e =~ /^(.*\-.*)\-(.*)$/) {
$o = $1;
if (lc($o) ne lc($var_map->{$title} . "-" . $var_map->{$partition})) {
$v->{'result'} = 1009;
}
}
elsif ($e =~ /^(.*\-.*)$/) {
$o = $1;
if (lc($o) ne lc($title . "-" . $partition)) {
$v->{'result'} = 1009;
}
}
elsif ($e !~ /^OK$/i) {
$v->{'result'} = 1009;
}
if ($v->{'result'} == 1009) {
$v->{'remark'} = "Wrong screen";
$v->{'weight'} = 50;
$v->{'log'} = "ERROR: Wrong screen:\nIST: " . $o .
"\nSOLL: " . $title . "-" . $partition . "\n\n\n" .
$v->{'log'};
}
}
#********************************************************************
sub common_einschalten {
my $self = shift;
my ($v,$mmi,$screen,$t,$e,$z) = @_;
if ($t =~ /^KeyPressShort.EINAUS/i) {
$screen = { 'name' => 'sprachauswahl' };
}
elsif ($t =~ /^DISPLAY$/i) {
$self->display("BITTE_GERAET_EINSCHALTEN","BASISPARTITION",$e,$v);
}
}
#********************************************************************
sub common_sprachauswahl {
my $self = shift;
my ($v,$mmi,$screen,$t,$e,$z) = @_;
$screen->{'sprache'} ||= $mmi->{'sprache'} || 'deutsch';
my $sprachliste = $self->rotate([keys %{$PAR::sprache->{$v->{'data'}}}]);
if ($z - $screen->{'zeit'} > 4099887766) {
$screen->{'redirect'} = { 'name' => 'sprachauswahl' };
}
elsif ($t =~ /^KeyPressShort\.OK$/i) {
$mmi->{'sprache'} = $screen->{'sprache'};
$mmi->{'screen'} = { 'name' => 'laenderauswahl' };
}
elsif ($t =~ /^KeyPressShort.AUF$/i) {
$screen->{'sprache'} = $sprachliste->{$screen->{'sprache'}};
}
elsif ($t =~ /^KeyPressShort.AB$/i) {
$screen->{'sprache'} = $sprachliste->{".".$screen->{'sprache'}};
}
elsif ($t =~ /^DISPLAY$/i) {
$self->display("BITTE_GERAET_EINSCHALTEN","BASISPARTITION",$e,$v);
}
}
#********************************************************************
sub common_laenderauswahl {
my $self = shift;
my ($v,$mmi,$screen,$t,$e,$z) = @_;
$screen->{'land'} ||= $mmi->{'land'} || "Deutschland";
my $laenderliste = $self->rotate(
$PAR::sprache->{$v->{'data'}}->{$screen->{'land'}});
if ($#{[keys %$laenderliste]} == 1) {
$screen->{'redirect'} = { 'name' => "datumauswahl" };
}
elsif ($t =~ /^KeyPressShort.OK$/i) {
$mmi->{'land'} = $screen->{'land'};
$mmi->{'screen'} = { 'name' => 'datumauswahl',
'datum' => $mmi->{'datum'} || [1,1,2010],
'cursor' => 0,
};
}
elsif ($t =~ /^KeyPressShort.AUF$/i) {
$screen->{'land'} = $laenderliste->{$screen->{'land'}};
}
elsif ($t =~ /^KeyPressShort.AB$/i) {
$screen->{'land'} = $laenderliste->{".".$screen->{'land'}};
}
elsif ($t =~ /^DISPLAY$/i) {
$self->display("BITTE_GERAET_EINSCHALTEN","BASISPARTITION",$e,$v);
}
}
#********************************************************************
sub common_datumauswahl {
my $self = shift;
my ($v,$mmi,$screen,$t,$e,$z) = @_;
$screen->{'datum'} ||= $mmi->{'datum'} || [1,1,2010];
$screen->{'cursor'} ||= 0;
if ($t =~ /^KeyPressShort.OK$/i) {
if ($screen->{'cursor'} == 2) {
$mmi->{'datum'} = $screen->{'datum'};
$mmi->{'screen'} = { 'name' => 'tageszeitauswahl' };
} else {
$screen->{'cursor'} = $screen->{'cursor'} + 1;
}
}
elsif ($t =~ /^KeyPressShort.AUF$/i) {
$screen->{'datum'}->[$screen->{'cursor'}] += 1;
}
elsif ($t =~ /^KeyPressShort.AB$/i) {
$screen->{'datum'}->{$screen->{'cursor'}} -= 1;
}
elsif ($t =~ /^DISPLAY$/i) {
$self->display("BITTE_GERAET_EINSCHALTEN","BASISPARTITION",$e,$v);
}
}
#********************************************************************
sub common_tageszeitauswahl {
my $self = shift;
my ($v,$mmi,$screen,$t,$e,$z) = @_;
$screen->{'tageszeit'} ||= $mmi->{'tageszeit'} || [0,0];
$screen->{'cursor'} ||= 0;
if ($z - $screen->{'zeit'} > 45) {
$screen->{'redirect'} = { 'name' => 'sprachauswahl' };
}
elsif ($t =~ /^KeyPressShort.OK$/i) {
if ($screen->{'cursor'} == 1) {
$mmi->{'tageszeit'} = $screen->{'tageszeit'};
$mmi->{'screen'} = { 'name' => 'tageszeitanzeige' };
} else {
$screen->{'cursor'} = $screen->{'cursor'} + 1;
}
}
elsif ($t =~ /^DISPLAY$/i) {
$self->display("BITTE_GERAET_EINSCHALTEN","BASISPARTITION",$e,$v);
}
}
#********************************************************************
sub common_tageszeitanzeige {
my $self = shift;
my ($v,$mmi,$screen,$t,$e,$z) = @_;
$screen->{'tageszeitanzeige'} ||= $mmi->{'tageszeitanzeige'} || "12h";
$screen->{'cursor'} ||= 0;
my $anzeigeliste = $self->rotate([qw(12h 24h)]);
if ($z - $screen->{'zeit'} > 145) {
$screen->{'redirect'} = { 'name' => 'sprachauswahl' };
}
elsif ($t =~ /^KeyPressShort.OK$/i) {
$mmi->{'tageszeitanzeige'} = $screen->{'tageszeitanzeige'};
$mmi->{'screen'} = { 'name' => 'vde0' };
}
elsif ($t =~ /^KeyPressShort.AUF$/i) {
$screen->{'tageszeitanzeige'} = $anzeigeliste->{$screen->{'tageszeitanzeige'}};
}
elsif ($t =~ /^KeyPressShort.AB$/i) {
$screen->{'tageszeitanzeige'} = $anzeigeliste->{".".$screen->{'tageszeitanzeige'}};
}
elsif ($t =~ /^DISPLAY$/i) {
$self->display("BITTE_GERAET_EINSCHALTEN","BASISPARTITION",$e,$v);
}
}
#********************************************************************
sub rotate {
my $self = shift;
my $o1 = shift;
my $liste = [@$o1];
my $o2 = shift(@$liste);
push(@$liste,$o2);
my $decessor = {};
while (@$liste) {
$o1 = $o2;
$o2 = shift(@$liste);
$decessor->{$o1} = $o2;
$decessor->{".".$o2} = $o1;
}
print Dumper($decessor);
return($decessor);
}
#********************************************************************
<<'UUU';
#-----------------------------------------------------------------
# sprache: Aktuell angezeigte Sprache
if ($mmi->{'screen'}->{'name'} eq "Sprachauswahl") {
if ($t eq "KeyPressShort.OK") {
$mmi->{'sprache'} = $mmi->{'screen'}->{'sprache'};
$mmi->{'screen'} = {
'name' => "Uhrzeiteinstellung",
'cursor' => 1,
'zeit' => [0,0,0]
};
}
if ($t eq "KeyPressShort.AUF"
}
#------------------------------------------------------------------
# zeit: Dreielementiges Feld mit Stunde, Minute, Sekunde
# cursor: Zeigt das aktive Zeitelement an.
elsif ($mmi->{'screen'}->{'name'} eq "Uhrzeiteinstellung") {
if ($t eq "KeyPressShort.OK") {
if ($mmi->{'screen'}->{'cursor'} == 3) {
$mmi->{'zeit_initial'} = [@{$mmi->{'screen'}->{'zeit'}}];
$mmi->{'screen'} = {
'name' => 'Laendereinstellung',
}
} else {
$mmi->{'screen'}->{'cursor'} = $mmi->{'screen'}->{'cursor'} + 1;
}
}
elsif ($t eq "KeyPressShort.AUF") {
$mmi->{'screen'}->{'zeit'}->[$mmi->{'screen'}->{'cursor'}] =
$mmi->{'screen'}->{'zeit'}->[$mmi->{'screen'}->{'cursor'}] + 1;
}
elsif ($t eq "KeyPressShort.DOWN") {
$mmi->{'screen'}->{'zeit'}->[$mmi->{'screen'}->{'cursor'}] =
$mmi->{'screen'}->{'zeit'}->[$mmi->{'screen'}->{'cursor'}] - 1;
}
}
#------------------------------------------------------------------
if ($t eq "DISPLAY") {
my $buffer = PPLTest::Buffer_Semantic->new($v->{'data'});
my $var_map = $buffer->var_map();
if ($e =~ /^(.*)\-(.*)$/) {
if ($var_map->{$mmi->{'processdescr'}} ne $1 or
$var_map->{$mmi->{'statedescr'}} ne $2) {
$v->{'result'} = 1009;
$v->{'remark'} = "ERROR. Wrong display.";
$v->{'weight'} = 1000;
}
}
}
if ($t eq "KeyPressShort.OK") {
$mmi->{'processdescr'} = "BASIS";
if ($#{$mmi->{'trace'}} == 1) {
$mmi->{'statedescr'} = "Willkommen";
$mmi->{'pin'} = 0;
}
elsif ($mmi->{'pin'} == 3) {
$mmi->{'statedescr'} = "Uhrzeit";
}
elsif ($mmi->{'pin'} < 3) {
$mmi->{'pin'} = $mmi->{'pin'} + 1;
}
}
return($log);
}
<<'UUU';
if ($t =~ /^GERAET_(.*)$/) {
return("");
}
if ($t eq "DISPLAY") {
$mmi->{'status'} = $e;
}
$o = $1;
if (!($v->{'data'})) {
$v->{'data'} = $o;
my $in = Server::BlackBoard->new($PAR::out_db->{$o});
my $out = Server::BlackBoard->new($PAR::in_db->{$o});
$in->msg("setcookielock");
$o1 = 0;
while ($o1 < 15) {
$o1 = $o1 + 1;
$msg = $out->get();
foreach $o2 (@$msg) {
if ($o2 =~ s/^cookie//) {
if ($o2 eq "lock") {
$o2
MIME::Base64::base64_decode($o2)
}
last if ($o2 =~ /^cookie/);
}
last if ($o2 =~ /^cookie/);
}
}
$soll->{'data'} = $1;
$soll->{'display'} = "PIN CODE --- Uhrzeit|1 0 0 0";
$soll->{'start'} = time();
$soll->{'statedescr'} = "Willkommen";
$soll->{'processdescr'} = "Basispartition";
}
return(1);
}
#-----------------------------------------------------------
# 2. Phasenbestimmung
if ($soll->{'data'} =~ /(CVAM)/) {
if (time() - $soll->{'start'} < 45) {
$soll->{'phase'} = "Aufheizphase";
}
elsif (time() - $soll->{'start'} < 180) {
$soll->{'phase'} = "Geraet_spuelt";
}
else {
$soll->{'phase'} = "Betriebsphase";
}
}
return(1) if ($soll->{'phase'} ne "Betriebsphase");
#-----------------------------------------------------------
if ($t =~ /^(TASTE_UP|OK|TASTE_DOWN)$/) {
if ($soll->{'display'} =~ /^PIN CODE --- Uhrzeit|(\d) (\d) (\d) (\d)$/) {
$o1 = $1;
$o2 = $2;
$o3 = $3;
$o4 = $4;
if ($t eq "TASTE_UP") {
if ($o1 == 1) { $o2 = $o2 + 1; }
if ($o1 == 2) { $o3 = $o3 + 1; }
if ($o1 == 3) { $o4 = $o4 + 1; }
}
if ($t eq "TASTE_DOWN") {
if ($o1 == 1) { $o2 = $o2 - 1; }
if ($o1 == 2) { $o3 = $o3 - 1; }
if ($o1 == 3) { $o4 = $o4 - 1; }
}
if ($t eq "OK") {
$o1 = $o1 + 1;
}
if ($o2 == 10) { $o2 = 9; }
if ($o3 == 10) { $o3 = 9; }
if ($o4 == 10) { $o4 = 9; }
if ($o2 == -1) { $o2 = 0; }
if ($o3 == -1) { $o3 = 0; }
if ($o4 == -1) { $o4 = 0; }
if ($o1 == 4) {
$soll->{'display'} = "Sprache|deutsch|...";
}
$soll->{'display'} = "PIN CODE --- Uhrzeit|$o1 $o2 $o3 $o4";
return(1);
}
}
if ($t eq "OK") {
if ($soll->{'display'} =~ /^PIN CODE --- Uhrzeit|(\d) (\d) (\d) (\d)$/) {
$o1 = $1;
$o2 = $2;
$o3 = $3;
$o4 = $4;
$o1 = $o1 + 1;
$soll->{'display'} = "PIN CODE --- Uhrzeit|$o1 $o2 $o3 $o4";
return(1);
}
}
if ($t eq "TASTE_UP") {
if ($soll->{'display'} =~ /^(.*)\:(.*)$/) {
$o = $1;
$o1 = [split("|",$2)];
$o2 = shift(@$o1);
push(@$o1,$o2);
$soll->{'display'} = $o . ":" . join("|",@$o1);
}
return(1);
}
if ($t eq "TASTE_DOWN") {
if ($soll->{'display'} =~ /^(.*)\:(.*)$/) {
$o = $1;
$o1 = [split("|",$2)];
$o2 = pop(@$o1);
unshift(@$o1,$o2);
$soll->{'display'} = $o . ":" . join("|",@$o1);
}
return(1);
}
if ($t eq "TASTE_DOWN") {
if ($soll->{'display'} =~ /^(.*)\:(.*)$/) {
$o = $1;
$o1 = [split("|",$2)];
$o2 = pop(@$o1);
unshift(@$o1,$o2);
$soll->{'display'} = $o . ":" . join("|",@$o1);
}
return(1);
}
# 3. Getraenketaste gedrueckt und aktiv
if ($soll->{'data'} =~ /(CVAM)/) {
if ($t =~ /^GETRAENK_(.*)/) {
$soll->{'getraenk'} = $1;
return(1);
}
}
}
UUU
1;