From 72b4c02da919e75437b497de114d2beea193bf04 Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Sun, 21 Jun 2015 08:42:13 +0000 Subject: [PATCH] DevIo.pm: allow setting of serial parameters (Forum #38242) git-svn-id: svn://svn.code.sf.net/p/fhem/code/trunk@8790 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/DevIo.pm | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/fhem/FHEM/DevIo.pm b/fhem/FHEM/DevIo.pm index 97da9c3a3..bfe130938 100644 --- a/fhem/FHEM/DevIo.pm +++ b/fhem/FHEM/DevIo.pm @@ -182,6 +182,15 @@ DevIo_OpenDev($$$) my $po; my $baudrate; ($dev, $baudrate) = split("@", $dev); + my ($databits, $parity, $stopbits) = (8, 'none', 1); + + if($baudrate =~ m/(\d+)(,([78])(,([NEO])(,([012]))?)?)?/) { + $baudrate = $1 if(defined($1)); + $databits = $3 if(defined($3)); + $parity = 'odd' if(defined($5) && $5 eq 'O'); + $parity = 'even' if(defined($5) && $5 eq 'E'); + $stopbits = $7 if(defined($7)); + } if($hash->{DevIoJustClosed}) { delete $hash->{DevIoJustClosed}; @@ -302,12 +311,13 @@ DevIo_OpenDev($$$) if($baudrate) { $po->reset_error(); - Log3 $name, 3, "Setting $name baudrate to $baudrate" - if(!$hash->{DevioText}); + my $p = ($parity eq "none" ? "N" : ($parity eq "odd" ? "O" : "E")); + Log3 $name, 3, "Setting $name serial parameters to ". + "$baudrate,$databits,$p,$stopbits" if(!$hash->{DevioText}); $po->baudrate($baudrate); - $po->databits(8); - $po->parity('none'); - $po->stopbits(1); + $po->databits($databits); + $po->parity($parity); + $po->stopbits($stopbits); $po->handshake('none'); # This part is for some Linux kernel versions whih has strange default