refactor use of connected FirmataDevice for FRM-Clients to support Win32

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@3347 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
ntruchsess 2013-06-27 19:50:23 +00:00
parent e2e341a51d
commit 7585c908fc
7 changed files with 34 additions and 40 deletions

View File

@ -399,6 +399,14 @@ FRM_Client_Unassign($)
$dev->{STATE}="defined"; $dev->{STATE}="defined";
} }
sub FRM_Client_FirmataDevice($) {
my $hash = shift;
my $iodev = $hash->{IODev};
die $hash->{NAME}." no IODev assigned" unless defined $iodev;
die $hash->{NAME}.", ".$iodev->{NAME}." is not connected" unless (defined $iodev->{FirmataDevice} and (defined $iodev->{FD} or ($^O=~/Win/ and defined $iodev->{USBDev})));
return $iodev->{FirmataDevice};
}
package Firmata_IO; package Firmata_IO;
sub new { sub new {

View File

@ -88,10 +88,10 @@ FRM_AD_Get($)
my $ret; my $ret;
ARGUMENT_HANDLER: { ARGUMENT_HANDLER: {
$cmd eq "reading" and do { $cmd eq "reading" and do {
my $iodev = $hash->{IODev}; eval {
return $name." no IODev assigned" if (!defined $iodev); return FRM_Client_FirmataDevice($hash)->analog_read($hash->{PIN});
return $name.", ".$iodev->{NAME}." is not connected" if (!(defined $iodev->{FirmataDevice} and defined $iodev->{FD})); };
return $iodev->{FirmataDevice}->analog_read($hash->{PIN}); return $@;
}; };
( $cmd eq "alarm-upper-threshold" or $cmd eq "alarm-lower-threshold" or $cmd eq "state" ) and do { ( $cmd eq "alarm-upper-threshold" or $cmd eq "alarm-lower-threshold" or $cmd eq "state" ) and do {
return main::ReadingsVal($name,"count",$gets{$cmd}); return main::ReadingsVal($name,"count",$gets{$cmd});

View File

@ -32,12 +32,9 @@ FRM_I2C_Init($)
$hash->{"i2c-register"} = @$args[1]; $hash->{"i2c-register"} = @$args[1];
$hash->{"i2c-bytestoread"} = @$args[2]; $hash->{"i2c-bytestoread"} = @$args[2];
return "no IODev set" unless defined $hash->{IODev}; eval {
return "no FirmataDevice assigned to ".$hash->{IODev}->{NAME} unless defined $hash->{IODev}->{FirmataDevice}; FRM_Client_FirmataDevice($hash)->i2c_read(@$args[0],@$args[1],@$args[2]);
};
eval {
$hash->{IODev}->{FirmataDevice}->i2c_read(@$args[0],@$args[1],@$args[2]);
};
return "error calling i2c_read: ".$@ if ($@); return "error calling i2c_read: ".$@ if ($@);
if (! (defined AttrVal($hash->{NAME},"event-min-interval",undef))) { if (! (defined AttrVal($hash->{NAME},"event-min-interval",undef))) {
$main::attr{$hash->{NAME}}{"event-min-interval"} = 5; $main::attr{$hash->{NAME}}{"event-min-interval"} = 5;

View File

@ -102,10 +102,10 @@ FRM_IN_Get($)
my $cmd = shift @a; my $cmd = shift @a;
ARGUMENT_HANDLER: { ARGUMENT_HANDLER: {
$cmd eq "reading" and do { $cmd eq "reading" and do {
my $iodev = $hash->{IODev}; eval {
return $name." no IODev assigned" if (!defined $iodev); return FRM_Client_FirmataDevice($hash)->digital_read($hash->{PIN}) == PIN_HIGH ? "on" : "off";
return $name.", ".$iodev->{NAME}." is not connected" if (!(defined $iodev->{FirmataDevice} and defined $iodev->{FD})); };
return $iodev->{FirmataDevice}->digital_read($hash->{PIN}) == PIN_HIGH ? "on" : "off"; return $@;
}; };
( $cmd eq "count" or $cmd eq "alarm" or $cmd eq "state" ) and do { ( $cmd eq "count" or $cmd eq "alarm" or $cmd eq "state" ) and do {
return main::ReadingsVal($name,"count",$gets{$cmd}); return main::ReadingsVal($name,"count",$gets{$cmd});

View File

@ -53,15 +53,11 @@ FRM_OUT_Set($$$)
my $list = "on off"; my $list = "on off";
return SetExtensions($hash, $list, $name, $cmd, @a); return SetExtensions($hash, $list, $name, $cmd, @a);
} }
my $iodev = $hash->{IODev}; eval {
main::readingsSingleUpdate($hash,"value",$cmd, 1); FRM_Client_FirmataDevice($hash)->digital_write($hash->{PIN},$value);
if (defined $iodev and defined $iodev->{FirmataDevice} and defined $iodev->{FD}) { main::readingsSingleUpdate($hash,"value",$cmd, 1);
$iodev->{FirmataDevice}->digital_write($hash->{PIN},$value); };
} else { return $@;
return $name." no IODev assigned" if (!defined $iodev);
return $name.", ".$iodev->{NAME}." is not connected";
}
return undef;
} }
sub FRM_OUT_State($$$$) sub FRM_OUT_State($$$$)

View File

@ -56,14 +56,11 @@ FRM_PWM_Set($@)
my $command = $a[1]; my $command = $a[1];
my $value = $a[2]; my $value = $a[2];
my $iodev = $hash->{IODev}; my $iodev = $hash->{IODev};
main::readingsSingleUpdate($hash,"value",$value, 1); eval {
if (defined $iodev and defined $iodev->{FirmataDevice} and defined $iodev->{FD}) { FRM_Client_FirmataDevice($hash)->analog_write($hash->{PIN},$value);
$iodev->{FirmataDevice}->analog_write($hash->{PIN},$value); main::readingsSingleUpdate($hash,"value",$value, 1);
} else { };
return $hash->{NAME}." no IODev assigned" if (!defined $iodev); return $@;
return $hash->{NAME}.", ".$iodev->{NAME}." is not connected";
}
return undef;
} }
sub FRM_PWM_State($$$$) sub FRM_PWM_State($$$$)

View File

@ -69,15 +69,11 @@ FRM_SERVO_Set($@)
if(!defined($sets{$a[1]})); if(!defined($sets{$a[1]}));
my $command = $a[1]; my $command = $a[1];
my $value = $a[2]; my $value = $a[2];
my $iodev = $hash->{IODev}; eval {
if (defined $iodev and defined $iodev->{FirmataDevice} and defined $iodev->{FD}) { FRM_Client_FirmataDevice($hash)->servo_write($hash->{PIN},$value);
$iodev->{FirmataDevice}->servo_write($hash->{PIN},$value); main::readingsSingleUpdate($hash,"state",$value, 1);
main::readingsSingleUpdate($hash,"state",$value, 1); };
} else { return $@;
return $hash->{NAME}." no IODev assigned" if (!defined $iodev);
return $hash->{NAME}.", ".$iodev->{NAME}." is not connected";
}
return undef;
} }
sub sub