From a78bb0ee8a64a07082e62dd962aad0cb8b47a7bc Mon Sep 17 00:00:00 2001 From: ntruchsess Date: Thu, 13 Mar 2014 17:49:18 +0000 Subject: [PATCH] FRM: fix 'set frm reset' for network-connected devices git-svn-id: https://svn.fhem.de/fhem/trunk@5217 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_FRM.pm | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/fhem/FHEM/10_FRM.pm b/fhem/FHEM/10_FRM.pm index 281852734..3c38f091d 100755 --- a/fhem/FHEM/10_FRM.pm +++ b/fhem/FHEM/10_FRM.pm @@ -121,8 +121,24 @@ sub FRM_Set($@) { COMMAND_HANDLER: { $command eq "reset" and do { - DevIo_CloseDev($hash); - return DevIo_OpenDev($hash, 0, "FRM_DoInit"); + return $hash->{NAME}." is not connected" unless (defined $hash->{FirmataDevice} and (defined $hash->{FD} or ($^O=~/Win/ and defined $hash->{USBDev}))); + $hash->{FirmataDevice}->system_reset(); + if (defined $hash->{SERVERSOCKET}) { + # dispose preexisting connections + foreach my $e ( sort keys %main::defs ) { + if ( defined( my $dev = $main::defs{$e} )) { + if ( defined( $dev->{SNAME} ) && ( $dev->{SNAME} eq $hash->{NAME} )) { + FRM_Tcp_Connection_Close($dev); + } + } + } + FRM_FirmataDevice_Close($hash); + last; + } else { + DevIo_CloseDev($hash); + FRM_FirmataDevice_Close($hash); + return DevIo_OpenDev($hash, 0, "FRM_DoInit"); + } }; $command eq "reinit" and do { FRM_forall_clients($hash,\&FRM_Init_Client,undef);