2
0
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:
ntruchsess 2013-06-27 19:50:23 +00:00
parent 504586dcfe
commit d33c97c6d4
7 changed files with 34 additions and 40 deletions

View File

@ -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 {

View File

@ -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});

View File

@ -32,12 +32,9 @@ 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]);
};
eval {
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))) {
$main::attr{$hash->{NAME}}{"event-min-interval"} = 5;

View File

@ -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});

View File

@ -53,15 +53,11 @@ FRM_OUT_Set($$$)
my $list = "on off";
return SetExtensions($hash, $list, $name, $cmd, @a);
}
my $iodev = $hash->{IODev};
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;
eval {
FRM_Client_FirmataDevice($hash)->digital_write($hash->{PIN},$value);
main::readingsSingleUpdate($hash,"value",$cmd, 1);
};
return $@;
}
sub FRM_OUT_State($$$$)

View File

@ -56,14 +56,11 @@ FRM_PWM_Set($@)
my $command = $a[1];
my $value = $a[2];
my $iodev = $hash->{IODev};
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;
eval {
FRM_Client_FirmataDevice($hash)->analog_write($hash->{PIN},$value);
main::readingsSingleUpdate($hash,"value",$value, 1);
};
return $@;
}
sub FRM_PWM_State($$$$)

View File

@ -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);
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;
eval {
FRM_Client_FirmataDevice($hash)->servo_write($hash->{PIN},$value);
main::readingsSingleUpdate($hash,"state",$value, 1);
};
return $@;
}
sub