Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /var/www/web-klick.de/dsh/90_akt/DivBasicF/

Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Upload File :
Current File : /var/www/web-klick.de/dsh/90_akt/DivBasicF/PCan.pm

package DivBasicF::PCan;

use strict;
use DivBasicF::Vector;
# use DivBasicF::AULocale;
use Logic::lq;
use Term::ReadLine;
use vars qw(@ISA);


sub new {

   my $class = shift;
   my $self  = {};
   $self->{'___LISTEN___'}     = shift;  #  Socket, von dem gelesen wird
   $self->{'___SEND___'}       = shift;  #  Socket, an den gesandt wird
   $self->{'___SYSCOMMAND___'} = shift;  #  syscommand fuer transmit
   $self->{'___FILE___'}       = shift;  #  Datei mit zu sendenden Daten
   bless($self,$class);
   if    ($self->{'___LISTEN___'} eq "STDIN")  {
       $self->{'___LISTEN_MODE___'} = 0;
   }
   elsif ($self->{'___LISTEN___'} =~ /PubSub/) {
      $self->{'___LISTEN_MODE___'} = 2;
      $self->{'___STACK___'} = [];
   }
   elsif ($self->{'___LISTEN___'} =~ /BlackBoard/) {
      $self->{'___LISTEN_MODE___'} = 3;
      $self->{'___STACK___'} = [];
   }
   else {
      $self->{'___LISTEN_MODE___'} = 1;
   }
   if    ($self->{'___SEND___'} eq "STDIN")  {
       $self->{'___SEND_MODE___'} = 0;
   }
   elsif ($self->{'___SEND___'} =~ /PubSub/) {
      $self->{'___SEND_MODE___'} = 2;
   }
   elsif ($self->{'___SEND___'} =~ /BlackBoard/) {
      $self->{'___SEND_MODE___'} = 3;
   }
   else {
      $self->{'___SEND_MODE___'} = 1;
   }
   $self->read_in_signals();
   $self->{'NRCMD'}  = 0;
   $self->{'NRNR'}   = 1;
   $self->{'NRBIT'}  = 2;
   $self->{'NRLEN'}  = 3;
   $self->{'NRINIT'} = 4;
   if (!($main::__terminal)) {
      $main::__terminal = Term::ReadLine->new("PCAN");
   }
   autoflush STDOUT 1;
   return($self);

}

#**********************************************************************

sub init_stack {

   my $self = shift;

   $self->{'VALUES'} = {};
   my $o; my $o1;
   my $nrcmd  = $self->{'NRCMD'};
   my $nrnr   = $self->{'NRNR'};
   my $nrbit  = $self->{'NRBIT'};
   my $nrlen  = $self->{'NRLEN'};
   my $nrinit = $self->{'NRINIT'};

#  NACHRICHT: Mappt die Nachrichten        auf eine Liste von Signalen
#  NACHR_NR:  Mappt die Nachrichtennummern auf eine Liste von Signalen

   foreach $o (keys %{$self->{'SIGNALS'}}) {
      $o1 = $self->{'SIGNALS'}->{$o};
      $self->{'VALUES'}->{$o} = $o1->[$nrinit] . "\:2";
      if (!($self->{'NACHRICHT'}->{$o1->[$nrcmd]})) {
         $self->{'NACHRICHT'}->{$o1->[$nrcmd]} = $o1->[$nrnr]  . "," . $o;
         $self->{'NACHR_NR'}->{$o1->[$nrnr]}   = $o1->[$nrcmd] . "," . $o;
      } else {
         $self->{'NACHRICHT'}->{$o1->[$nrcmd]} =
            $self->{'NACHRICHT'}->{$o1->[$nrcmd]} . "," . $o;
         $self->{'NACHR_NR'}->{$o1->[$nrnr]} =
            $self->{'NACHR_NR'}->{$o1->[$nrnr]} . "," . $o;
      }

   }

}
   
#**********************************************************************

sub fetch_raw {

   my $self = shift;
   my $text = $self->readsocket();
   return($text);

}

#**********************************************************************
   
#  Hier koennen Signale vom Stack abgerufen werden.
#  Durch Komma getrennte Signale muessen in einem Kommando kommen.
#  Die einzelnen Bloecke sind dann Signalfolgen, die in beliebiger
#  Reihenfolge hereinkommen koennen.


sub fetch {

   my $self    = shift;
   my $le      = shift;
   my $zusatz  = shift;
   my $nrcmd   = $self->{'NRCMD'};
   my $nrnr    = $self->{'NRNR'};
   my $nrbit   = $self->{'NRBIT'};
   my $nrlen   = $self->{'NRLEN'};
   my $nrinit  = $self->{'NRINIT'};

   my $o; my $o1; my $o2; my $o3; my $nr;
   my $sigval; my $sigvalold; my $sigreset; my $sigtoggle;
   my $pcancmd; my $pcancontent; my $pcanlength;
   my $signal; my @signallist; my $value;
   my $value_old; my $erg; my $varlist; my $lq1;
   
   my $error_statement = "";
   if ($zusatz) {
      ($le,$error_statement) = $self->fetch_prepare($le,$zusatz);
   }

   my $lq = Logic::lq->new($self,$le);

#  Es wird solange vom Stack gelesen, bis das gewuenschte
#  Ergebnis erreicht ist

   my $stack  = [];
   my $stackcounter = 0;

   $self->{'SL'} = {};
   my $sl = $self->{'SL'};

   while (0 == 0) {

      $o = $self->readsocket();
      return("___NO_STACK___") if (!$o);
      next if ($o !~ /(0x[0123456789ABCDEF]+) +(\d) +(.*)/);
print "N: $o\n";
      $stackcounter = $stackcounter + 1;
      $pcancmd     = $1;
      $pcanlength  = 8*$2;
      $pcancontent = $3;
      $pcancmd =~ /^0x(.*)(...)$/;
      $pcancmd = "0x" . $2;
      $pcancontent =~ s/0x//g;
      $pcancontent =~ s/ //g;
      $pcancontent = AutoTest::Vector->new_Hex($pcanlength,$pcancontent)->to_Bin("_reverse_");
      $pcancontent = $self->bitreverse($pcancontent);
print "BIT: $pcancontent\n";
      my $sigresetold  = "1";
      $o = $self->{'NACHR_NR'}->{$pcancmd};
      $o = "," . $o . ",";
      if ($o =~ s/,([^,]*)__RESET_STATUS,/,/) {
         $o1 = "," . $1 . "__RESET_STATUS" . $o;
      }
      $o =~ /^,(.*),$/;
      @signallist  = split(/,/,$1);
      $sigreset    = 1;
      $sigtoggle   = 0;

      foreach $signal (@signallist) {

         $o = $self->{'SIGNALS'}->{$signal};
         $sigval = substr($pcancontent,$o->[$nrbit]-1,$o->[$nrlen]);
         $sigval = AutoTest::Vector->new_Bin($o->[$nrlen]+1,$sigval)->to_Dec();
         while ($sigval =~ /^0(.+)/) { $sigval = $1; } # evtl. unnoetig
         $value_old = $self->{'VALUES'}->{$signal};
         $value_old =~ /^(.*)\:(.*)$/;
         $sigvalold = $1;
         next if ($sigvalold == $sigval);
         if ($signal =~ /__RESET_STATUS$/) {
            $sigreset  = $sigval;
            $sigtoggle = 1;
            $value  = $sigval . ":1";
         } else {
            if (!$sigtoggle and $sigreset) {
               $value = $sigval . ":1";
            } else {
               $value = $sigval . ":0";
            }
         }
print "    --->  S: $signal, $value\n";
         $self->{'VALUES'}->{$signal} = $value;
         if (!($sl->{$signal})) { $sl->{$signal} = {}; }
         $sl->{$signal}->{$stackcounter} = $value;
         if (!($sl->{$signal."=".$sigval})) {
                                $sl->{$signal."=".$sigval} = {}; }
         $sl->{$signal."=".$sigval}->{$stackcounter} = 1;
         if ($sigreset and !$sigtoggle) {
            if (!($sl->{$signal."=++"})) { $sl->{$signal."=++"} = {}; }
            $sl->{$signal."=++"}->{$stackcounter} = 1;
         }

      }

      $lq  = $lq->collapse();
      $lq1 = $lq->substitute("e",$stackcounter)->collapse();
print $lq1->unparse() . "\n";
      if ($lq1->junc() eq "OBJ" and $lq1->pars() == 1) {
         return($lq1->pars());
      }

   }

}

#***************************************************************

#  Hier koennen Signale vom Stack abgerufen werden.

sub fetch_packetizer {

   my $self    = shift;
   my $pcancmd; my $pcannr; 
   my $pcancontent; my $text; my $o; 

   while (0 == 0) {

      $o = $self->readsocket();
      return("___NO_STACK___") if (!$o);
      next if ($o !~ /(0x\d+) +(\d) +(.*) +(.*)/);
print "N: $o\n";
      $pcancmd     = $1;
      $pcancontent = $4;
      $pcannr      = $3;
      $pcancontent =~ s/0x//g;
      $pcannr      =~ s/0x//g;
      $pcancontent =~ s/ //g;
      $pcancontent = substr($pcancontent."----------------",0,14);
      $pcannr      = AutoTest::Vector->new_Hex(8,$pcannr)->to_Dec();
      $o = 0;
      if ($pcannr > 127) {
         $pcannr = $pcannr - 128;
         $o = 1;
      }
      if (!($self->{'PACKET'}->{$pcancmd})) {
         $self->{'PACKET'}->{$pcancmd} = [0,""];
      }
      $text = $self->{'PACKET'}->{$pcancmd}->[1];
      if ($o) {
         if ($self->{'PACKET'}->{$pcancmd}->[0]) {
            return("___ERROR___");
         }
         $self->{'PACKET'}->{$pcancmd}->[0] = 1;
      }
      $o = 0;
      while (0 == 0) {
         last if (length($text) >= 14*($pcannr-1));
         $o = 1;
         $text = ".............." . $text;
      }
      if ($o) {
         $text = $pcancontent . $text;
      } else {
         $o = length($text) - 14*($pcannr+1);
         $text = substr($text,0,$o-1) .$pcancontent. substr($text,$o+14);
      }
      if ($text !~ /\./ and $self->{'PACKET'}->{$pcancmd}->[0]) {
         $text =~ s/\-//g;
         delete ($self->{'PACKET'}->{$pcancmd});
         return([$pcancmd,$text]);
      } else {
         $self->{'PACKET'}->{$pcancmd} = $text;
      }
   }

}

#**********************************************************************

sub func {

   my $self = shift;
   my $junc = shift;
   my @vals = @_;
   my $o; my $o1; my $nr; my $erg;
   
   if ($junc eq "F" or $junc eq "G") {    #   Fehler? was ist, wenn der
      my @signals = split(/,/,$vals[0]);  #   zweite Parameter groesser
      $o  = shift(@signals);              #   ist als de achrichtenstack?
      $o1 = $self->{'SL'}->{$o};
      return("___UNDEFINED___") if (!$o1);
      my %werte = %$o1;
      foreach $o (@signals) {
         $o1 = $self->{'SL'}->{$o};
         return("___UNDEFINED___") if (!$o1);
         foreach $nr (keys %werte) {
            next if ($o1->{$nr});
            delete ($werte{$nr});
         }
         return("___UNDEFINED___") if (!%werte);
      }
      if ($junc eq "F") {
         foreach $o (sort keys %werte) {
            return($o) if ($o >= $vals[1]);
         }
      } else {
         foreach $o (sort reverse keys %werte) {
            return($o) if ($o <= $vals[1]);
         }
      }
      return("___UNDEFINED___");
   }

   elsif ($junc eq "H") {      #    Fehler? was ist, wenn der zweite
      $o = $self->{'SL'}->{$vals[0]};  #  Parameter groesser als die Liste ist?
      $erg = 0;
      foreach $o1 (sort keys %$o) {
         last if ($o1 > $vals[1]);
         $erg = $o->{$o1};
      }
      if ($erg =~ /^(.*)\.(.*)$/) {
         $erg = $1;
      }
      return($erg);
   }      

   return("___UNDEFINED___");


}


#**********************************************************************

sub readsocket {

   my $self        = shift;
   my $socket      = $self->{'___LISTEN___'};
   my $socket_mode = $self->{'___LISTEN_MODE___'};

   my $o = 0; my $o1; my $o9; my @ee = (); my @ee1 = ();
   if    ($socket_mode == 0) {
      $o = <STDIN>;
   }
   elsif ($socket_mode == 1) {
      $o = <$socket>;
   }
   elsif ($socket_mode == 2) {
      while (0 == 0) {
         last if (@{$self->{'___STACK___'}});
         if ($o) { sleep 1; }
         $o = 1;
         @ee = $socket->get();
         if (@ee) {
            @ee1 = ();
            foreach $o1 (@ee) {
               @ee1 = (@ee1,split(/\n/,$o1));
            }
            $self->{'___STACK___'} = [@ee1];
         }
      }
      $o = shift(@{$self->{'___STACK___'}});
   }
   elsif ($socket_mode == 3) {
      while (0 == 0) {
         last if (@{$self->{'___STACK___'}});
         if ($o) { sleep 1; }
         $o  = 1;
         $o9 = $socket->get();
         if (@$o9) {
            @ee1 = ();
            foreach $o1 (@$o9) {
               @ee1 = (@ee1,split(/\n/,$o1->[1]));
            }
            $self->{'___STACK___'} = [@ee1];
         }
      }
      $o = shift(@{$self->{'___STACK___'}});
   }

   return($o);

}

#**********************************************************************

sub message_raw {

   my $self = shift;
   my $text = shift;
   $self->writesocket($text."\n");
   print $text . "\n";
   return(1);

}

#**********************************************************************


sub message {

   my $self    = shift;
   my $signals = [@_];

   my $nrcmd   = $self->{'NRCMD'};
   my $nrnr    = $self->{'NRNR'};
   my $nrbit   = $self->{'NRBIT'};
   my $nrlen   = $self->{'NRLEN'};
   my $nrinit  = $self->{'NRINIT'};

   my $nachrichten = {};
   my $nlist       = [];
   my $o; my $o1; my $o2; my $o3; my $o4; my $value; my $pcannr;
   my @signallist; my $nrbytes; my $signal; my $value; my $pos; my $len;

   foreach $o (@$signals) {
      if ($o =~ /^(.*)\=(.*)$/) {
         $signal = $1;
         $value  = $2;
         $o1     = $self->{'SIGNALS'}->{$signal};
         $pcannr = $o1->[$nrnr];
         if (!($nachrichten->{$pcannr})) {
            push(@$nlist,$pcannr);
            $o2 = "";
            @signallist = split(/,/,$self->{'NACHR_NR'}->{$pcannr});
            shift(@signallist);
            my $sl = $self->{'SIGNALS'};
            foreach $o3 (sort {$sl->{$a}->[$nrbit] <=> 
                               $sl->{$b}->[$nrbit]} @signallist) {
               $self->{'VALUES'}->{$o3} =~ /(.*)\:(.*)/;
               $o4 = $1;
               $o2 = $o2 . AutoTest::Vector->new_Dec(
                        $self->{'SIGNALS'}->{$o3}->[$nrlen],
                        $o4)->to_Bin();
            }
            $nrbytes = sprintf("%1u",(length($o2)-1)/8) + 1;
            $o2  = substr($o2."000000000",0,8*$nrbytes);
            $nachrichten->{$pcannr} = $o2;
         }
         $o2  = $nachrichten->{$pcannr};
         $pos = $self->{'SIGNALS'}->{$signal}->[$nrbit];
         $len = $self->{'SIGNALS'}->{$signal}->[$nrlen];
         $self->{'VALUES'}->{$signal} = $value.":2";
         $o2  = substr($o2,0,$pos-1) .
                    AutoTest::Vector->new_Dec($len,$value)->to_Bin() .
                    substr($o2,$pos+$len-1);
         $nachrichten->{$pcannr} = $o2;
      }
   }

   my $text = ""; my $tt; my $zaehler;
   foreach $o (@$nlist) {
print "ZZ: $o\n";
      $tt = $o . " ___ZAEHLER___";
      $o1 = $nachrichten->{$o};
      $o3 = "";
      while ($o1 =~ /^([01])(.*)$/) {
         $o3 = $1 . $o3;
         $o1 = $2;
      }
      print $o3 . "\n";
      $zaehler = 0;
      while ($o3) {
         $zaehler = $zaehler + 1;
         $tt = $tt . " 0x" . AutoTest::Vector->new_Bin(8,substr($o3,0,8))->to_Hex();
         $o3 = substr($o3,8);
      }
      $tt =~ s/___ZAEHLER___/$zaehler/;
      $text = $text . "m s " . $tt . "\n";
   }
   $text = $text . "\n";
print $text;
   $self->writesocket($text);

}

#**********************************************************************

sub message_packetizer {

   my $self    = shift;
   my $canid   = shift;
   my $text    = shift;

   my $nlist   = [];
   my $zaehler = 0;
   my $o; my $zaehler; my $nr; my $tt;

   while ($text) {
      push(@$nlist,substr($text,0,14));
      $text = substr($text,14);
      $nr   = $nr + 1;
   }

   my $diff = 128;
   foreach $o (@$nlist) {
      $nr      = $nr - 1;
      $zaehler = 1;
      $tt      = $canid . " ___ZAEHLER___ " .
                 "0x0" . AutoTest::Vector->new_Dec(8,$nr+$diff)->to_Hex();
      $diff    = 0;
      while ($o) {
         $zaehler = $zaehler + 1;
         $tt = $tt . " 0x" . substr($o,0,2);
         $o = substr($o,2);
      }
      $tt =~ s/___ZAEHLER___/$zaehler/;
      $text = $text . "m s " . $tt . "\n";
   }
   $text = $text . "\n";
print $text;
   $self->writesocket($text);

}

#**********************************************************************

sub bitreverse {

   my $self = shift;
   my $bits = shift;
   my $o3 = "";
   while ($bits =~ /^([01])(.*)$/) {
      $o3   = $1 . $o3;
      $bits = $2;
   }
   return($o3);

}

#**********************************************************************

sub writesocket {

   my $self        = shift;
   my $text        = shift;
   my $socket      = $self->{'___SEND___'};
   my $socket_mode =  $self->{'___SEND_MODE___'};

   if    ($socket_mode == 0) {
      print $text;
   } 
   elsif ($socket_mode == 1) {
      print $socket $text;
   }
   elsif ($socket_mode == 2) {
      $socket->msg($text);
   }
   elsif ($socket_mode == 3) {
      $socket->msg($text);
   }

}      

#**********************************************************************

sub dialog {

   my $self   = shift;
   my $text   = shift;
   my $prompt = shift;
   if (!$prompt) {
      $prompt = "<enter>";
   }
   print $text;
   flush STDOUT;
   if (-f "/etc/fstab") {
      print "\n";
   }
   my $erg = $main::__terminal->readline($prompt);
   return($erg);

}


#**********************************************************************

sub read_in_signals {

   my $self = shift;

   my $can_ndw = <<'TEXT_ENDE';

AE_AKFKT
    0x11E (
        RESET_STATUS 
        DRV 8
        CHP 8
        SPR 8
        S_VIDEO_OFF 
    )

AE_APWRT
    0x071 (
        RESET_STATUS 
        WARTUNG_JAHR 7
        WARTUNG_MON 4
        WARTUNG_TAG 5
        INSTR_TIME 16
    )

AE_HF
    0x096 (
        RESET_STATUS 
        ONOFF 
        SET_INTENS 2
        INTENS 8
        MODUL 3
    )

AE_INSTSTAT
    0x056 (
        RESET_STATUS 
        HOLDER 8
        INSTR1_TYP 4
        INSTR2_TYP 4
        INSTR3_TYP 4
        INSTR4_TYP 4
        INSTR5_TYP 4
        INSTR6_TYP 4
        INSTR7_TYP 4
    )

AE_KLVN
    0x094 (
        RESET_STATUS 
        KLST_KL1 
        KLST_KL2 
        KLST_KL3 
        KLST_KL4 
        KLST_KL5 
        KLST_KL6 
        VNST_KLVN 3
        SPRAY_INIT 
        KLST_KL7 
    )

AE_OPTION
    0x072 (
        RESET_STATUS 
        FILMB 
        SPRAY_HEIZER 
    )

AE_PA_COOLAIR
    0x053 (
        RESET_STATUS 
        FAKTOR 8
        MOTORNR 4
    )

AE_PA_KALIBRIERUNG
    0x058 (
        RESET_STATUS 
        MOTORNR 2
    )

AE_PA_PARAMETER
    0x059 (
        RESET_STATUS 
        LICHT_AN 
        LICHT_INTENSITAET 8
        LICHT_SPANNUNG 8
        PATMOTDREHRICHTUNG 
        PATMOTFREIGABE 
        PATMOTFUSSCHALTERTYP 
        PATMOTKALIB 
        PATMOTKANALNR 3
        PATMOTMAXDREHMOMENT 16
        PATMOTMAXDREHZAHL 16
        PATMOTMODE 3
        PATMOTOPERATIONMODE 2
    )

AE_SERV
    0x412 (
        INHALT 64
    )

AE_SET_ERROR
    0x068 (
        CAT 4
        CODE 12
        MSEC_HIGH 11
        MSEC_LOW 16
        NODE_ID 8
        SUBSYSTEM_INST 3
        SUBSYTEM_ID 10
    )

AE_SET_HE
    0x05A (
        RESET_STATUS 
        AUTOPURGE_FLAG 
        PREPARE_PURGE 
        PURGE_FLAG 
        STOP_PURGE 
    )

AE_STAT
    0x093 (
        RESET_STATUS 
        AUTOPURGE_ACTIVE 
        AUTOPURGE_TIME 8
        BLOWOUT 
        EMR_TEST_STAT 2
        ERROR 
        FILMB 
        FREMDKAMERA 
        INSTR_MODE 2
        LOCK_KBD 
        NACHKUEHLEN 
        PR_BEEP 
        PURGE_ACTIVE 
        PURGE_TIME 8
        PU_BEEP 
        REST_PURGE_TIME 7
        ROEFI_TASTE 
        SPUELMENGE 4
        SPV_WASSERHEIZER 
        STORE_MODE 2
        TEMP_WASSER 3
        VIDEOMODE_LOCKED 
        VIDEO_MODE 
        VMS 
        WASSER_VERBRAUCHER 
    )

AE_STATUS_EMOTOR
    0x062 (
        RESET_STATUS 
        CHIP 
        COOL_ERR 
        DIR 
        EBENE 2
        EMK_RI 
        FS_MODE 
        ILIGHT 
        ILIGHT_STEP 4
        ILIGHT_VOLT 6
        KUEHLUNG 
        KUEHLUNG_MODE 3
        MO_BEEP 
        NACL_MENGE 4
        SPEED 16
        SVT_NR1 8
        SVT_VALID 3
    )

AE_STATUS_EMOTOR_EXT
    0x067 (
        RESET_STATUS 
        AUTOREVERSE 2
        CALIBRATION 2
        DMS_BEEP 
        DMS_BEEP_KONFIG 
        RATIO 11
        RATIO_SIGN 
        SPUELUNG 
        TORQ 16
    )

AE_STATUS_HF
    0x065 (
        RESET_STATUS 
        AKTIV 
        EBENE 2
        ERROR 
        INTENSITY 7
        MODULATION 3
        SVT_VALID 3
    )

AE_STATUS_KAMERA
    0x066 (
        RESET_STATUS 
        AWB_NOK 
        AWB_OK 
        COL_USER 
        COL_VALID 
        COL_WERK 
        OPT0_AWB 
        OPT0_MIRROR 
        QUAD_EINZEL 
        SCHWARZBILD 
        TYP 7
        WEISSBILD 
        WERKS_DATEN 
    )

AE_STATUS_SPRAYVIT
    0x060 (
        RESET_STATUS 
        HEIZER_LUFT 
        HEIZER_WASSER 
        ILIGHT 
        ILIGHT_STEP 4
        ILIGHT_VOLT 6
        TEMP_WASSER 3
    )

AE_STATUS_TURBINE
    0x063 (
        RESET_STATUS 
        CHIP 
        FS_MODE 
        ILIGHT 
        ILIGHT_STEP 4
        ILIGHT_VOLT 6
        INTENSITY 16
        KUEHLUNG 
        KUEHLUNG_MODE 3
        NACL_MENGE 4
    )

AE_STATUS_US
    0x064 (
        RESET_STATUS 
        BETRIEBS_MODE 2
        BOOST 
        EBENE 2
        ENDO_MODE 
        FS_MODE 
        ILIGHT 
        ILIGHT_STEP 4
        ILIGHT_VOLT 6
        INTENSITY 7
        KUEHLUNG 
        KUEHLUNG_MODE 3
        NACL_MENGE 4
        SPUELUNG 
        SVT_VALID 3
    )

AE_VERSION
    0x302 (
        RESET_STATUS 
        SW_MAJ 8
        SW_MIN 8
        HW_MAJ 8
        HW_MIN 8
    )

AK_ALIVE
    0x041 (
        RESET_STATUS 
        READY 
    )

AK_OPTION
    0x09B (
        RESET_STATUS 
        VENTIL_CODE 3
    )

AK_REALTIME
    0x040 (
        RESET_STATUS 
        HIGH_TIME 
        LOW_TIME 16
    )

AK_SERV
    0x416 (
        INHALT 64
    )

AK_SET_ERROR
    0x0A0 (
        CAT 4
        CODE 12
        MSEC_HIGH 11
        MSEC_LOW 16
        NODE_ID 8
        SUBSYSTEM_INST 3
        SUBSYTEM_ID 10
    )

AK_STAT
    0x09A (
        RESET_STATUS 
        CFS 2
        CHP_ERROR 
        DRV_ERROR 
        EMR_TEST_NODE 2
        EMR_TEST_STAT 2
        ERROR 
        ERROR_DUMP_MODE 2
        FRTST 
        FRTST_MOD 
        KLINGEL 
        KLINGEL_MOD 
        MOTION_UNBLOCKED 
        RDSVN 
        SAN 
        SPR_ERROR 
        SS_STATUS 5
        SVC_DETECTED 
    )

AK_VERSION
    0x304 (
        RESET_STATUS 
        SW_MAJ 8
        SW_MIN 8
        HW_MAJ 8
        HW_MIN 8
    )

AP_AEFKT
    0x054 (
        RESET_STATUS 
        INST_TEST 
        PREPARE_PURGE 
        STOP_PURGE 2
    )

AP_AEWRT
    0x070 (
        RESET_STATUS 
        INSTR_TIME 16
        SET_INSTR_TIME 2
        SET_WARTUNG 2
    )

AP_CONFIG
    0x0D9 (
        RESET_STATUS 
        BEHANDLER_ANZAHL 3
        CURSOR_MODE 2
        KAMERA_PC_MODUS_TASTE 
        WEISSBILD 
    )

AP_OPTION
    0x0D8 (
        RESET_STATUS 
        LAUTSPRECHER 
    )

AP_SERV
    0x417 (
        INHALT 64
    )

AP_SET_AE
    0x0C0 (
        RESET_STATUS 
        AUTOPURGE_FLAG 
        AUTOPURGE_TIME_DECR 
        AUTOPURGE_TIME_INCR 
        BLOWOUT 
        CHNG_STORE_MODE 
        NACHKUEHLEN 
        PURGE_FLAG 
        PURGE_TIME_DECR 
        PURGE_TIME_INCR 
        SPUELMENGE_DECR 
        SPUELMENGE_INCR 
        TEMP_WASSER_DECR 
        TEMP_WASSER_INCR 
    )

AP_SET_AK
    0x0C1 (
        RESET_STATUS 
        FRTST 
        FRWSL 
        KLINGEL 
        KLWSL 
        LORDOSE_DECR 
        LORDOSE_INCR 
        MASSAGE 
    )

AP_SET_EMOTOR
    0x0C2 (
        RESET_STATUS 
        CHIP 
        CHNG_AUTOREVERSE 
        CHNG_CALIBRATION 
        CHNG_DIR 
        CHNG_DMS_BEEP_KONFIG 
        CHNG_FS_MODE 
        CHNG_HANDPIECE 
        CHNG_ILIGHT 
        CHNG_KUEHLUNG 
        CMD_STORE 
        DIR 
        DIR_CMD 
        EBENE 2
        EBENE_CMD 
        ILIGHT_STEP_DECR 
        ILIGHT_STEP_INCR 
        ILIGHT_VOLT_DECR 
        ILIGHT_VOLT_INCR 
        INST_STAT 
        KUEHLUNG_MODE 3
        KUEHLUNG_MODE_CMD 
        NACL_MENGE_DECR 
        NACL_MENGE_INCR 
        SPEED_DECR 
        SPEED_DECR_FAST 
        SPEED_INCR 
        SPEED_INCR_FAST 
        SPUELUNG 
        SVT_CHNG_CMD 
        SVT_CHNG_STOP_CMD 
        SVT_CMD 
        SVT_INDEX 3
        TORQ_DECR 
        TORQ_INCR 
    )

AP_SET_EMOTOR_THERAPIE
    0x0D2 (
        RESET_STATUS 
        AUTOREVERSE 2
        DMS_BEEP_KONFIG 
        FS_MODE 
        ILIGHT 
        KUEHLUNG 
        RATIO 11
        RATIO_SIGN 
        SPEED 16
        TORQ 16
    )

AP_SET_ERROR
    0x0CD (
        CAT 4
        CODE 12
        MSEC_HIGH 11
        MSEC_LOW 16
        NODE_ID 8
        SUBSYSTEM_INST 3
        SUBSYTEM_ID 10
    )

AP_SET_FILM
    0x11A (
        RESET_STATUS 
        ONOFF 
    )

AP_SET_HE
    0x0C3 (
        RESET_STATUS 
        CFS 
        CONFIG_CFS_POLYLICHT 
        CONFIG_CFS_SAUGER 
        SAUGUNG 
    )

AP_SET_HF
    0x0C4 (
        RESET_STATUS 
        CMD_STORE 
        EBENE 2
        EBENE_CMD 
        INST_STAT 
        INTENSITY_DECR 
        INTENSITY_DECR_FAST 
        INTENSITY_INCR 
        INTENSITY_INCR_FAST 
        MODULATION_NEXT 
        MODULATION_PREV 
        SVT_CHNG_CMD 
        SVT_CHNG_STOP_CMD 
        SVT_CMD 
        SVT_INDEX 3
    )

AP_SET_KAMERA
    0x0C5 (
        RESET_STATUS 
        AWB 
        CLEAR_ALLPICT 
        NEXT_PICT 
        QUAD_EINZEL 
        SCHWARZBILD 
        SET_LIVE 
        STORE_PICT 
        USER_DATEN 
        WEISSBILD 
        WERKS_DATEN 
    )

AP_SET_SL
    0x0C6 (
        RESET_STATUS 
        CH_MODE 
        COMPOSITE 
        INTDC 
        INTIC 
        ONOFF 
    )

AP_SET_SPRAYVIT_AE
    0x0C7 (
        RESET_STATUS 
        CHNG_HEIZER_LUFT 
        CHNG_HEIZER_WASSER 
        CHNG_ILIGHT 
        ILIGHT_STEP_DECR 
        ILIGHT_STEP_INCR 
        ILIGHT_VOLT_DECR 
        ILIGHT_VOLT_INCR 
        TEMP_WASSER_DECR 
        TEMP_WASSER_INCR 
    )

AP_SET_SPRAYVIT_HE
    0x0C8 (
        RESET_STATUS 
        CHNG_HEIZER_LUFT 
        CHNG_HEIZER_WASSER 
        CHNG_ILIGHT 
        ILIGHT_STEP_DECR 
        ILIGHT_STEP_INCR 
        ILIGHT_VOLT_DECR 
        ILIGHT_VOLT_INCR 
        TEMP_WASSER_DECR 
        TEMP_WASSER_INCR 
    )

AP_SET_STUHL
    0x0C9 (
        RESET_STATUS 
        AEBWD 
        AEFWD 
        GKAB 
        GKAUF 
        KPAB 
        KPAUF 
        LORDOSE_DECR 
        LORDOSE_INCR 
        MASSAGE 
        PATAB 
        PATAUF 
        PRG 4
        PRG_CMD 
        PRG_MIT_AE 
        PRG_STORE_CMD 
        RLAB 
        RLAUF 
        SPEISCHALE_BEI_S 
        STAB 
        STAUF 
        SWAB 
        SWAUF 
    )

AP_SET_TURBINE
    0x0CA (
        RESET_STATUS 
        CHIP 
        CHNG_ILIGHT 
        CHNG_KUEHLUNG 
        CMD_STORE 
        ILIGHT_STEP_DECR 
        ILIGHT_STEP_INCR 
        ILIGHT_VOLT_DECR 
        ILIGHT_VOLT_INCR 
        INST_STAT 
        KUEHLUNG_MODE 3
        KUEHLUNG_MODE_CMD 
        NACL_MENGE_DECR 
        NACL_MENGE_INCR 
    )

AP_SET_US
    0x0CB (
        RESET_STATUS 
        CHNG_BETRIEBS_MODE 
        CHNG_BOOST 
        CHNG_ENDO_MODE 
        CHNG_FS_MODE 
        CHNG_ILIGHT 
        CHNG_KUEHLUNG 
        CMD_STORE 
        EBENE 2
        EBENE_CMD 
        ILIGHT_STEP_DECR 
        ILIGHT_STEP_INCR 
        ILIGHT_VOLT_DECR 
        ILIGHT_VOLT_INCR 
        INST_STAT 
        INTENSITY_DECR 
        INTENSITY_DECR_FAST 
        INTENSITY_INCR 
        INTENSITY_INCR_FAST 
        KUEHLUNG_MODE 3
        KUEHLUNG_MODE_CMD 
        NACL_MENGE_DECR 
        NACL_MENGE_INCR 
        SPUELUNG 
        SVT_CHNG_CMD 
        SVT_CHNG_STOP_CMD 
        SVT_CMD 
        SVT_INDEX 3
    )

AP_SET_WE
    0x0CC (
        RESET_STATUS 
        AM_TEST 
        BOWL_ON_S 
        CHNG_MUND_MODUS 
        CUP_ON_S 
        DESINF_MB_LEEREN 
        HYDROKOLLOID 
        HYDROKOLLOID_DAUER_DECR 
        HYDROKOLLOID_DAUER_INCR 
        MB_LEEREN 
        MUNDGLAS_HEIZER 
        MUNDGLAS_HEIZER_MODUS 
        MUNDM_DECR 
        MUNDM_INCR 
        MUNDV 
        MUND_TEMP_DECR 
        MUND_TEMP_INCR 
        REINIGUNG_MSBV 
        RNDSP 
        RUNDM_DECR 
        RUNDM_INCR 
        SANIER_PREPARE 
        SANIER_START 
    )

AP_STATUS
    0x057 (
        RESET_STATUS 
        BEHANDLER 3
        PANEELTYP 3
        THERAPIE_AKTIV 3
        THERAPIE_KLAUE 4
        TIMER 
        VIDEO_MODE 
    )

AP_VERSION
    0x303 (
        RESET_STATUS 
        SW_MAJ 8
        SW_MIN 8
        HW_MAJ 8
        HW_MIN 8
    )

FS_POTI
    0x051 (
        RESET_STATUS 
        ANWRT 8
    )

FS_SCHALT
    0x052 (
        RESET_STATUS 
        FS_RICHT 3
        FS_PEDAL 
        FS_TASTEN 8
        FS_KENNUNG 8
    )

HE_INSTSTAT
    0x09C (
        RESET_STATUS 
        HOLDER 8
        INSTR1_TYP 4
        INSTR2_TYP 4
        INSTR3_TYP 4
        INSTR4_TYP 4
        INSTR5_TYP 4
    )

HE_KLVN
    0x099 (
        RESET_STATUS 
        KLST_KL1 
        KLST_KL2 
        KLST_KL3 
        KLST_KL4 
        KLST_KL5 
        SPRAY_INIT 
        VNST_KLVN 3
    )

HE_OPTION
    0x09F (
        RESET_STATUS 
        OPTSUCTION 
        POLYLICHT 2
        SPRAYVIT 2
    )

HE_SERV
    0x414 (
        INHALT 64
    )

HE_SET_AP
    0x09E (
        RESET_STATUS 
        TIMER 
    )

HE_SET_ERROR
    0x13B (
        CAT 4
        CODE 12
        MSEC_HIGH 11
        MSEC_LOW 16
        NODE_ID 8
        SUBSYSTEM_INST 3
        SUBSYTEM_ID 10
    )

HE_SET_FILM
    0x138 (
        RESET_STATUS 
        ONOFF 
    )

HE_SET_KAMERA
    0x13A (
        RESET_STATUS 
        WEISSBILD 
    )

HE_SET_SL
    0x139 (
        RESET_STATUS 
        COMPOSITE 
        ONOFF 
    )

HE_STAT
    0x098 (
        RESET_STATUS 
        BEEPER 
        CAMERA 2
        CONFIG_CFS_POLYLICHT 
        CONFIG_CFS_SAUGER 
        ERROR 
        OPTION 
        PL 
        PLCFS 
        PURGE_ACTIVE 
        SAUGI 3
        SAUGM 
        SUCTCFS 
        WASSER_VERBRAUCHER 
    )

HE_STATUS_SPRAYVIT
    0x09D (
        RESET_STATUS 
        HEIZER_LUFT 
        HEIZER_WASSER 
        ILIGHT 
        ILIGHT_STEP 4
        ILIGHT_VOLT 6
        TEMP_WASSER 3
    )

HE_VERSION
    0x301 (
        RESET_STATUS 
        SW_MAJ 8
        SW_MIN 8
        HW_MAJ 8
        HW_MIN 8
    )

HF_SERV
    0x419 (
        INHALT 64
    )

HF_STAT
    0x097 (
        RESET_STATUS 
        ERROR 8
        ON 
        SET_INTENS 2
        INTENS 7
        INST_TYP 4
        MODUL 3
    )

HF_VERSION
    0x306 (
        RESET_STATUS 
        SW_MAJ 8
        SW_MIN 8
        HW_MAJ 8
        HW_MIN 8
    )

HP_PRGPS
    0x135 (
        RESET_STATUS 
        STARTPR 
        POSPR 
        SEL_P0 
        SEL_P1 
        SEL_P2 
        SEL_PS 
        SEL_PT 
    )

HP_SET_AK
    0x137 (
        RESET_STATUS 
        FREIT 
        KLINGEL 
        WEISSBILD 
    )

HP_SET_WE
    0x136 (
        RESET_STATUS 
        MUNDV 
        RNDSP 
        SANIER_PREPARE 
        SANIER_START 
    )

KS_SERV
    0x421 (
        INHALT 64
    )

KS_SET_ERROR
    0x0B1 (
        CAT 4
        CODE 12
        MSEC_HIGH 11
        MSEC_LOW 16
        NODE_ID 8
        SUBSYSTEM_INST 3
        SUBSYTEM_ID 10
    )

KS_STATUS
    0x0B0 (
        RESET_STATUS 
        MOVING_HEAD 
        MOVING_SWORD 
        OKS_BUTTON 8
        POSITION_HEAD 16
        POSITION_SWORD 16
        UKS_BUTTON 8
    )

KS_VERSION
    0x308 (
        RESET_STATUS 
        SW_MAJ 8
        SW_MIN 8
        HW_MAJ 8
        HW_MIN 8
    )

PA_AE_INSTR
    0x082 (
        RESET_STATUS 
        POS_0 8
        POS_1 8
        POS_2 8
        POS_3 8
        POS_4 8
    )

PA_AE_KALIBRIERSTATUS
    0x083 (
        RESET_STATUS 
        STATUS 2
    )

PA_AE_MOT_TEMP
    0x084 (
        RESET_STATUS 
        POS_0 8
        POS_1 8
        POS_2 8
        POS_3 8
    )

PA_SERV
    0x420 (
        INHALT 64
    )

PA_SET_ERROR
    0x081 (
        CAT 4
        CODE 12
        MSEC_HIGH 11
        MSEC_LOW 16
        NODE_ID 8
        SUBSYSTEM_INST 3
        SUBSYTEM_ID 10
    )

PA_STATUS
    0x080 (
        RESET_STATUS 
        DIR 
        IST_DREHMOMENT 16
        IST_DREHZAHL 16
        LICHT 
        STATUS 
        TEMP_LIMIT 
        TORQUE_BARRIER 
        TORQUE_LIMIT 
    )

PA_VERSION
    0x307 (
        RESET_STATUS 
        HW 8
        SW_ARM_MAJ 8
        SW_ARM_MIN 8
        SW_H8_MAJ 8
        SW_H8_MIN 8
        VARIANTE 8
    )

SL_OPTION
    0x142 (
        RESET_STATUS 
        SIROLUX 
    )

SL_STAT
    0x140 (
        RESET_STATUS 
        SRLX 
        INTEN 8
        MODE 
        COMPOSITE_MODE 
    )

ST_OPTION
    0x113 (
        RESET_STATUS 
        KOPFSTUETZE 
        LORDOSE 
        MASSAGE 
    )

ST_SET_KS
    0x0B2 (
        RESET_STATUS 
        POSITION_HEAD 16
        POSITION_SWORD 16
        TIME_HEAD 16
    )

ST_SET_WE
    0x114 (
        RESET_STATUS 
        LICHT_EIN 
        MUNDGLAS_FUELLEN 
        RUND_SPUELUNG 
        SPEI_AUSSCHWENKEN 
        SS_SPEI_AKTIV 
    )

ST_STAT
    0x110 (
        RESET_STATUS 
        EMR_TEST_STAT 2
        ERROR 
        MNPRG 2
        PRGST_BEFEHL 
        PRGST_BWGST 
        PRGST_PRG 2
    )

ST_STATUS
    0x111 (
        RESET_STATUS 
        AEBWD 
        AEFWD 
        EMR_BEEP 
        ERR_BEEP 
        GKAB 
        GKAUF 
        KPAB 
        KPAUF 
        MASSAGE 
        PATAB 
        PATAUF 
        PRG 4
        PRG_BEEP 
        PRG_MIT_AE 2
        PRG_STATE 2
        RLAB 
        RLAUF 
        SPEISCHALE_BEI_S 
        STAB 
        STAUF 
        SWAB 
        SWAUF 
    )

ST_STATUS_SS
    0x112 (
        RESET_STATUS 
        ARMLEHNE_AE 2
        ARMLEHNE_HE 2
        FUSSAUFLAGE 2
        HANDLEISTE 2
        HE 2
        HECKVERKLEIDUNG 2
        HUB 2
        HUBRAHMEN 2
        RUECKENLEHNE 2
        SPEISCHALE 2
    )

ST_VERSION
    0x305 (
        RESET_STATUS 
        SW_MAJ 8
        SW_MIN 8
        HW_MAJ 8
        HW_MIN 8
    )

SV_AESRV
    0x408 (
        CMD 64
    )

SV_AKSRV
    0x409 (
        CMD 64
    )

SV_APSRV
    0x40A (
        CMD 64
    )

SV_HESRV
    0x406 (
        CMD 64
    )

SV_HFSRV
    0x40B (
        CMD 64
    )

SV_KSSRV
    0x40D (
        CMD 64
    )

SV_PASRV
    0x40C (
        CMD 64
    )

SV_PA_COLMO_REGISTER
    0x500 (
        RESET_STATUS 
        REGISTER 8
        WERT_0 16
        WERT_1 16
        WERT_2 16
    )

SV_PA_LICHT_PARAMETER
    0x502 (
        RESET_STATUS 
        DELAY 8
        LMR 8
    )

SV_PA_MOT_PARAMETER
    0x503 (
        RESET_STATUS 
        AUTOREVERS_ZEIT 8
        BLOCK_ZEIT 8
        DEC_FAKTOR 8
        INC_FAKTOR 8
        MAX_TEMP 8
    )

SV_PA_REQ_COLMO_REGISTER
    0x501 (
        RESET_STATUS 
        REGISTER 8
        SCHREIBEN 
        WERT_0 16
        WERT_1 16
        WERT_2 16
    )

SV_PA_STATUS_LICHT
    0x504 (
        RESET_STATUS 
        BNVR 8
        LDR 8
        LEDNVR 8
        LIR 8
        LMR 8
        LSR 8
    )

SV_TEST
    0x410 (
        REQUEST 
    )

SV_WESRV
    0x407 (
        CMD 64
    )

WE_AKFKT
    0x095 (
        RESET_STATUS 
        UPM_FREI 
        SAUGM 
    )

WE_OPTION
    0x213 (
        RESET_STATUS 
        AMALGAM 
        DESINFEKTION 
        FILMB 
        HYDROKOLLOID 
        MSBV 
        MUNDGLAS_HEIZER 
    )

WE_SAN
    0x211 (
        RESET_STATUS 
        AEST_KL1 
        AEST_KL2 
        AEST_KL3 
        AEST_KL4 
        AEST_KL5 
        AEST_KL6 
        AE_VALVE_ONOFF 3
        FHLRK 4
        HEST_KL1 
        HEST_KL2 
        HEST_KL3 
        HEST_KL4 
        HE_VALVE_ONOFF 3
        RESTZ_MIN 6
        RESTZ_STD 5
        SAN 
        SANAN 
        SANIER_PHASE 3
        SANOK 
    )

WE_SERV
    0x413 (
        INHALT 64
    )

WE_SET_ERROR
    0x214 (
        CAT 4
        CODE 12
        MSEC_HIGH 11
        MSEC_LOW 16
        NODE_ID 8
        SUBSYSTEM_INST 3
        SUBSYTEM_ID 10
    )

WE_STAT
    0x210 (
        RESET_STATUS 
        AE_WASS_OK 
        AKTIVE_VERBRAUCHER 5
        DURCHFLUSS 11
        DVGW_MODE 
        ERROR 
        HE_WASS_OK 
        KEIN_WASSER 
        NETZTEIL_90 
        SANIER_ACTIVE 
        SAUGK 3
    )

WE_STAT_EXT
    0x212 (
        RESET_STATUS 
        AMALGAM 2
        BOWL_ON_S 
        CUP_ON_S 
        DESIN 
        DESINF_MB_LEEREN 3
        FILMB 
        HYDROKOLLOID 
        HYDROKOLLOID_DAUER 8
        MB_LEEREN 3
        MUNDGLAS_HEIZER 
        MUNDGLAS_HEIZER_MODUS 
        MUNDM 4
        MUNDV 
        MUND_TEMP 4
        PUMPEN_NOTBETRIEB 
        REINIGUNG_MSBV 
        RNDSP 
        RUNDM 9
    )

WE_VERSION
    0x300 (
        RESET_STATUS 
        SW_MAJ 8
        SW_MIN 8
        HW_MAJ 8
        HW_MIN 8
    )

TEXT_ENDE


#   SIGNALS:  Liste aller Signale, Format:
#       Nachricht,NachrichtNr,Startbit,Laenge,Defaultwert


   my $zeile; my $bit; my $laenge;
   my $signalname; my $pcancommand; my $pcannr; my $o;
   foreach $zeile (split(/\n/,$can_ndw)) {
      if ($zeile =~ /^([A-Z]+)\_([A-Z\_]+)/) {
         $pcancommand = $zeile;
         $bit         = 1;
      }
      elsif ($zeile =~ /0x([0123456789ABCDEF]+)/) {
         $pcannr      = "0x" . $1;
      }
#      elsif ($zeile =~ /RESET\_STATUS/) {
#         1;
#      }
      elsif ($zeile =~ /([A-Z].*)/) {
         $signalname  = $1;
         $laenge      = 1;
         if ($signalname  =~ /^(.*) (\d+)/) {
            $laenge      = $2;
            $signalname  = $1;
         }
         $signalname =~ s/ //g;
         $o = 0;
#         if ($signalname eq "RESET_STATUS") { $o = 1; }
         $self->{'SIGNALS'}->{$pcancommand."__".$signalname} =
                [$pcancommand,$pcannr,$bit,$laenge,$o];
# print "$signalname: $pcancommand $pcannr $bit $laenge\n";
         $bit = $bit + $laenge;
      }
   }

}




1;


bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net