use strict;
use warnings;
use Win32::SerialPort;

my $port = Win32::SerialPort->new ('COM1') || die "Oops!";

# Parameter lesen im Listenmodus --> Moeglichkeiten
my @baud_opt = $port->baudrate;
my @parity_opt = $port->parity;
my @data_opt = $port->databits;
my @stop_opt = $port->stopbits;
my @hshake_opt = $port->handshake;

print "Optionen fuer COM1:\n";
print "\nDatenbits:   ";
foreach $a (@data_opt) { print "  $a"; }

print "\nStoppbits:   ";
foreach $a (@stop_opt) { print "  $a"; }

print "\nHandshake:   ";
foreach $a (@hshake_opt) { print "  $a"; }

print "\nParity:      ";
foreach $a (@parity_opt) { print "  $a"; }

my $c = 0;
print "\nBaudrate:    ";
foreach $a (@baud_opt)
  {
  printf "%8d", $a;
  $c++;
  print "\n             " if ($c %5 == 0);
  }

print "\nAktuelle Einstellungen:\n";
printf "    Baudrate......: %d\n", scalar $port->baudrate;
printf "    Parity........: %s\n", scalar $port->parity;
printf "    Datenbits.....: %d\n", scalar $port->databits;
printf "    Stoppbits.....: %d\n", scalar $port->stopbits;
printf "    Handshake.....: %s\n", scalar $port->handshake;
printf "    Alias.........: %s\n", $port->alias;


print "\nTerminal-Einstellungen:\n";
printf "    Xon-Zeichen...: 0x%02x\n", scalar $port->xon_char;
printf "    Xoff-Zeichen..: 0x%02x\n", scalar $port->xoff_char;
printf "    Eof-Zeichen...: 0x%02x\n", scalar $port->eof_char;
printf "    Event-Zeichen.: 0x%02x\n", scalar $port->event_char;
printf "    Error-Zeichen.: 0x%02x\n", scalar $port->error_char;

print "\nPuffer und Limits:\n";
my ($in, $out) = $port->buffer_max;
printf "    Input-Puffer..: 0x%08x (max.)\n", $in;
printf "    Output-Puffer.: 0x%08x (max.)\n", $out;
($in, $out)= $port->buffers;
printf "    Input-Puffer..: 0x%08x\n", $in;
printf "    output-Puffer.: 0x%08x\n", $out;
printf "    Xon-Limit.....: 0x%08x\n", scalar $port->xon_limit;
printf "    Xoff-Limit....: 0x%08x\n", scalar $port->xoff_limit;

print "\nTimeouts:\n";
print  "    Read:\n";
printf "    Intervall.....: 0x%x\n", scalar $port->read_interval;
printf "    const_time....: %d\n", scalar $port->read_const_time;
printf "    char_time.....: %d\n", scalar $port->read_char_time;
print  "    Write:\n";
printf "    const_time....: %d\n", scalar $port->write_const_time;
printf "    char_time.....: %d\n", scalar $port->write_char_time;

print "\nWeitere Eigenschaften:\n";
print "    can_baud\n"			if (scalar $port->can_baud);
print "    can_databits\n"		if (scalar $port->can_databits);
print "    can_stopbits\n"		if (scalar $port->can_stopbits);
print "    can_dtrdsr\n"		if (scalar $port->can_dtrdsr);
print "    can_handshake\n"		if (scalar $port->can_handshake);
print "    can_parity_check\n"		if (scalar $port->can_parity_check);
print "    can_parity_config\n"		if (scalar $port->can_parity_config);
print "    can_parity_enable\n"		if (scalar $port->can_parity_enable);
print "    can_rlsd\n"			if (scalar $port->can_rlsd);
print "    can_rtscts\n"		if (scalar $port->can_rtscts);
print "    can_xonxoff\n"		if (scalar $port->can_xonxoff);
print "    can_interval_timeout\n"	if (scalar $port->can_interval_timeout);
print "    can_total_timeout\n"		if (scalar $port->can_total_timeout);
print "    can_xon_char\n"		if (scalar $port->can_xon_char);
print "    can_spec_char\n"		if (scalar $port->can_spec_char);
print "    can_16bitmode\n"		if (scalar $port->can_16bitmode);
print "    is_rs232\n"			if (scalar $port->is_rs232);
print "    is_modem\n"			if (scalar $port->is_modem);
print "    binary\n"			if (scalar $port->binary);
print "    parity_enable\n"		if (scalar $port->parity_enable);

undef $port;