use Net::Bluetooth;
#### About the sdp_search call:
#### The $addr argument is an address in the form of "00:00:00:00:00:00".
#### $addr can also be "localhost" which will search the local SDP server.
#### The second argument is the service ID to search for and is optional.
#### It is a string in the form of a 128 bit ID:
#### "00000000-0000-0000-0000-000000000000" or a 16 bit ID: "0000".
#### All service IDs must be in hexidecimal format.
#### The service ID can also be "0" which will search the public
#### services on the device.
#### The third argument is the service name and is optional.
#### Different ways to search for a service:
#### Search for service 1101 (Serial Port) and do not specify a name.
sdp_search($addr, "1101", "");
#### Search for services named "Imaging" and do not specify a service ID.
sdp_search($addr, "", "Imaging");
#### Search for a service on the local SDP server.
sdp_search("localhost", "12345678-1234-1234-123456789012", "");
#### Search for public services and do not specify a name.
#### Note, usually not every single device service is listed in the public group.
sdp_search($addr, "0", "");
sdp_search($addr, "", "");
#### Finally here is an exmaple of how I search for the serial port on my GPS device:
use Net::Bluetooth;
#### find remote devices
my $device_ref = get_remote_devices();
#### Could retry here instead of exiting.
die "No devices found." unless(defined($device_ref));
my $gps_addr = "";
#### Loop through each device and find the one we want.
foreach $addr (keys %$device_ref) {
#### If the device name matches "BT GPS" grab the address.
$gps_addr = $addr if($device_ref->{$addr} =~ /^BT GPS/);
}
#### Could retry here instead of exiting.
die "BT GPS not found." unless(defined($gps_addr));
#### Search for the serial service (0x1101) on my GPS device.
#### The serial port is what mine uses to transfer GPS info.
my @sdp_array = sdp_search($gps_addr, "1101", "");
die "No service records found" unless(defined(@sdp_array));
my $port = 0;
#### Loop through all the service records.
#### foreach service record ....
foreach $rec_ref (@sdp_array) {
#### Get the RFCOMM port number for the service.
if(exists($rec_ref->{RFCOMM})) {
$port = $rec_ref->{RFCOMM};
last;
}
}
die "No RFCOMM record found." unless($port > 0);