From aee5bc282d19fbc5a3650d358497059fe6c000bd Mon Sep 17 00:00:00 2001 From: dakkar Date: Fri, 20 Oct 2023 16:10:25 +0100 Subject: try to connect? MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit it doesn't work ☹ --- atc-therm-receiver/test.pl | 73 +++++++++++++++++++++++++++++----------------- 1 file 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(); -- cgit v1.2.3