mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-04 22:19:38 +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";
|
$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 {
|
||||||
|
@ -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});
|
||||||
|
@ -32,11 +32,8 @@ 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};
|
|
||||||
return "no FirmataDevice assigned to ".$hash->{IODev}->{NAME} unless defined $hash->{IODev}->{FirmataDevice};
|
|
||||||
|
|
||||||
eval {
|
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 ($@);
|
return "error calling i2c_read: ".$@ if ($@);
|
||||||
if (! (defined AttrVal($hash->{NAME},"event-min-interval",undef))) {
|
if (! (defined AttrVal($hash->{NAME},"event-min-interval",undef))) {
|
||||||
|
@ -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});
|
||||||
|
@ -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 {
|
||||||
|
FRM_Client_FirmataDevice($hash)->digital_write($hash->{PIN},$value);
|
||||||
main::readingsSingleUpdate($hash,"value",$cmd, 1);
|
main::readingsSingleUpdate($hash,"value",$cmd, 1);
|
||||||
if (defined $iodev and defined $iodev->{FirmataDevice} and defined $iodev->{FD}) {
|
};
|
||||||
$iodev->{FirmataDevice}->digital_write($hash->{PIN},$value);
|
return $@;
|
||||||
} else {
|
|
||||||
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($$$$)
|
||||||
|
@ -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};
|
||||||
|
eval {
|
||||||
|
FRM_Client_FirmataDevice($hash)->analog_write($hash->{PIN},$value);
|
||||||
main::readingsSingleUpdate($hash,"value",$value, 1);
|
main::readingsSingleUpdate($hash,"value",$value, 1);
|
||||||
if (defined $iodev and defined $iodev->{FirmataDevice} and defined $iodev->{FD}) {
|
};
|
||||||
$iodev->{FirmataDevice}->analog_write($hash->{PIN},$value);
|
return $@;
|
||||||
} else {
|
|
||||||
return $hash->{NAME}." no IODev assigned" if (!defined $iodev);
|
|
||||||
return $hash->{NAME}.", ".$iodev->{NAME}." is not connected";
|
|
||||||
}
|
|
||||||
return undef;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub FRM_PWM_State($$$$)
|
sub FRM_PWM_State($$$$)
|
||||||
|
@ -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 $hash->{NAME}." no IODev assigned" if (!defined $iodev);
|
return $@;
|
||||||
return $hash->{NAME}.", ".$iodev->{NAME}." is not connected";
|
|
||||||
}
|
|
||||||
return undef;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub
|
sub
|
||||||
|
Loading…
x
Reference in New Issue
Block a user