summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--atc-therm-receiver/test.pl73
1 files changed, 46 insertions, 27 deletions
diff --git a/atc-therm-receiver/test.pl b/atc-therm-receiver/test.pl
index 57df7d7..e99948a 100644
--- a/atc-therm-receiver/test.pl
+++ b/atc-therm-receiver/test.pl
@@ -65,7 +65,7 @@ my $bluez = $bus->get_service('org.bluez');
my $bluez_root = $bluez->get_object('/');
my $adapter = $bluez->get_object($PATH);
-sub maybe_handle_data($path,$interfaces) {
+sub maybe_handle_data($path,$interfaces,$why) {
my $dev = $interfaces->{'org.bluez.Device1'}
or return;
@@ -83,40 +83,26 @@ sub maybe_handle_data($path,$interfaces) {
my $bat_v = ($data[11]*256 + $data[10])/1000;
my $bat_pc = $data[12];
- say "$path Data = @data";
+ say "$path ($why) Data = @data";
say " ",join(':',map { sprintf('%02x',$_) } @data);
say " $temp C - $hum %h - $bat_v V - $bat_pc %";
return 1;
}
-sub look_at_device($path,$interfaces) {
- maybe_handle_data($path,$interfaces)
- or return;
-
- my $new_obj = $bluez->get_object($path);
-
- $new_obj->connect_to_signal(
- 'PropertiesChanged',
- sub($interface,$props,@) {
- say "PropertiesChanged $path";
- maybe_handle_data($path,{$interface=>$props})
- or return;
- }
- );
-
+sub set_timer($device,$path) {
my $timer;
$timer = $reactor->add_timeout(
- 5_000,
+ 15_000,
sub {
say "timer $path";
try {
- my $raw_data = $new_obj->Get(
+ my $raw_data = $device->Get(
'org.bluez.Device1',
'ServiceData'
) or die 'no data';
- maybe_handle_data($path,{'org.bluez.Device1',{ServiceData=>$raw_data}})
+ maybe_handle_data($path,{'org.bluez.Device1',{ServiceData=>$raw_data}},'timer')
or die 'bad data';
}
catch ($e) {
@@ -127,6 +113,39 @@ sub look_at_device($path,$interfaces) {
);
}
+sub look_at_device($path,$interfaces) {
+ maybe_handle_data($path,$interfaces,'look')
+ or return;
+
+ my $new_obj = $bluez->get_object($path);
+
+ my $is_connected = $new_obj->Get('org.bluez.Device1','Connected');
+ if (!$is_connected) {
+ $new_obj->Connect(dbus_call_async)->set_notify(
+ sub($reply) {
+ try {
+ $reply->get_result;
+ say "connected $path";
+ set_timer($new_obj,$path);
+ }
+ catch ($e) {
+ warn "$path - connect error - $e\n";
+ }
+ },
+ );
+ } else {
+ set_timer($new_obj,$path);
+ }
+
+ $new_obj->connect_to_signal(
+ 'PropertiesChanged',
+ sub($interface,$props,@) {
+ maybe_handle_data($path,{$interface=>$props},'props')
+ or return;
+ }
+ );
+}
+
say 'connect_to_signal';
$bluez_root->connect_to_signal(
'InterfacesAdded',
@@ -141,13 +160,13 @@ for my ($path,$interfaces) ($objects->%*) {
}
# I don't think this is any use when listening to advertisements
-say 'SetDiscoveryFilter';
-$adapter->SetDiscoveryFilter({
- Transport => 'le',
- Discoverable => Net::DBus::dbus_boolean(0),
-# Pattern => 'A4:C1:38:',
- DuplicateData => Net::DBus::dbus_boolean(1),
-});
+# say 'SetDiscoveryFilter';
+# $adapter->SetDiscoveryFilter({
+# Transport => 'le',
+# Discoverable => Net::DBus::dbus_boolean(0),
+# # Pattern => 'A4:C1:38:',
+# DuplicateData => Net::DBus::dbus_boolean(1),
+# });
# say 'StartDiscovery';
# $adapter->StartDiscovery();