mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 03:06:37 +00:00
refactor use of connected FirmataDevice for FRM-Clients to support Win32
git-svn-id: https://svn.fhem.de/fhem/trunk@3347 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
504586dcfe
commit
d33c97c6d4
@ -399,6 +399,14 @@ FRM_Client_Unassign($)
|
||||
$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;
|
||||
|
||||
sub new {
|
||||
|
@ -88,10 +88,10 @@ FRM_AD_Get($)
|
||||
my $ret;
|
||||
ARGUMENT_HANDLER: {
|
||||
$cmd eq "reading" and do {
|
||||
my $iodev = $hash->{IODev};
|
||||
return $name." no IODev assigned" if (!defined $iodev);
|
||||
return $name.", ".$iodev->{NAME}." is not connected" if (!(defined $iodev->{FirmataDevice} and defined $iodev->{FD}));
|
||||
return $iodev->{FirmataDevice}->analog_read($hash->{PIN});
|
||||
eval {
|
||||
return FRM_Client_FirmataDevice($hash)->analog_read($hash->{PIN});
|
||||
};
|
||||
return $@;
|
||||
};
|
||||
( $cmd eq "alarm-upper-threshold" or $cmd eq "alarm-lower-threshold" or $cmd eq "state" ) and do {
|
||||
return main::ReadingsVal($name,"count",$gets{$cmd});
|
||||
|
@ -32,11 +32,8 @@ FRM_I2C_Init($)
|
||||
$hash->{"i2c-register"} = @$args[1];
|
||||
$hash->{"i2c-bytestoread"} = @$args[2];
|
||||
|
||||
return "no IODev set" unless defined $hash->{IODev};
|
||||
return "no FirmataDevice assigned to ".$hash->{IODev}->{NAME} unless defined $hash->{IODev}->{FirmataDevice};
|
||||
|
||||
eval {
|
||||
$hash->{IODev}->{FirmataDevice}->i2c_read(@$args[0],@$args[1],@$args[2]);
|
||||
FRM_Client_FirmataDevice($hash)->i2c_read(@$args[0],@$args[1],@$args[2]);
|
||||
};
|
||||
return "error calling i2c_read: ".$@ if ($@);
|
||||
if (! (defined AttrVal($hash->{NAME},"event-min-interval",undef))) {
|
||||
|
@ -102,10 +102,10 @@ FRM_IN_Get($)
|
||||
my $cmd = shift @a;
|
||||
ARGUMENT_HANDLER: {
|
||||
$cmd eq "reading" and do {
|
||||
my $iodev = $hash->{IODev};
|
||||
return $name." no IODev assigned" if (!defined $iodev);
|
||||
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";
|
||||
eval {
|
||||
return FRM_Client_FirmataDevice($hash)->digital_read($hash->{PIN}) == PIN_HIGH ? "on" : "off";
|
||||
};
|
||||
return $@;
|
||||
};
|
||||
( $cmd eq "count" or $cmd eq "alarm" or $cmd eq "state" ) and do {
|
||||
return main::ReadingsVal($name,"count",$gets{$cmd});
|
||||
|
@ -53,15 +53,11 @@ FRM_OUT_Set($$$)
|
||||
my $list = "on off";
|
||||
return SetExtensions($hash, $list, $name, $cmd, @a);
|
||||
}
|
||||
my $iodev = $hash->{IODev};
|
||||
eval {
|
||||
FRM_Client_FirmataDevice($hash)->digital_write($hash->{PIN},$value);
|
||||
main::readingsSingleUpdate($hash,"value",$cmd, 1);
|
||||
if (defined $iodev and defined $iodev->{FirmataDevice} and defined $iodev->{FD}) {
|
||||
$iodev->{FirmataDevice}->digital_write($hash->{PIN},$value);
|
||||
} else {
|
||||
return $name." no IODev assigned" if (!defined $iodev);
|
||||
return $name.", ".$iodev->{NAME}." is not connected";
|
||||
}
|
||||
return undef;
|
||||
};
|
||||
return $@;
|
||||
}
|
||||
|
||||
sub FRM_OUT_State($$$$)
|
||||
|
@ -56,14 +56,11 @@ FRM_PWM_Set($@)
|
||||
my $command = $a[1];
|
||||
my $value = $a[2];
|
||||
my $iodev = $hash->{IODev};
|
||||
eval {
|
||||
FRM_Client_FirmataDevice($hash)->analog_write($hash->{PIN},$value);
|
||||
main::readingsSingleUpdate($hash,"value",$value, 1);
|
||||
if (defined $iodev and defined $iodev->{FirmataDevice} and defined $iodev->{FD}) {
|
||||
$iodev->{FirmataDevice}->analog_write($hash->{PIN},$value);
|
||||
} else {
|
||||
return $hash->{NAME}." no IODev assigned" if (!defined $iodev);
|
||||
return $hash->{NAME}.", ".$iodev->{NAME}." is not connected";
|
||||
}
|
||||
return undef;
|
||||
};
|
||||
return $@;
|
||||
}
|
||||
|
||||
sub FRM_PWM_State($$$$)
|
||||
|
@ -69,15 +69,11 @@ FRM_SERVO_Set($@)
|
||||
if(!defined($sets{$a[1]}));
|
||||
my $command = $a[1];
|
||||
my $value = $a[2];
|
||||
my $iodev = $hash->{IODev};
|
||||
if (defined $iodev and defined $iodev->{FirmataDevice} and defined $iodev->{FD}) {
|
||||
$iodev->{FirmataDevice}->servo_write($hash->{PIN},$value);
|
||||
eval {
|
||||
FRM_Client_FirmataDevice($hash)->servo_write($hash->{PIN},$value);
|
||||
main::readingsSingleUpdate($hash,"state",$value, 1);
|
||||
} else {
|
||||
return $hash->{NAME}." no IODev assigned" if (!defined $iodev);
|
||||
return $hash->{NAME}.", ".$iodev->{NAME}." is not connected";
|
||||
}
|
||||
return undef;
|
||||
};
|
||||
return $@;
|
||||
}
|
||||
|
||||
sub
|
||||
|
Loading…
x
Reference in New Issue
Block a user