Re: Registering a profile

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Neil,
On Tue, Oct 2, 2018 at 1:32 AM Neil Benn <neil.benn@xxxxxxxxx> wrote:
>
> Hello,
>
>   I've been running a dbus-monitor and I can't see the interface being
> called of 'org.bluez.Profile1' - I can see 'org.bluez.Device1' and
> I've tried listening to that interface and also on the path with
> dev_<ADAPTER-MAC> but I'm clearly doing something fundamentally wrong.
> IF anyone has any advance I'd be very grateful and there is 100 rep
> points up on Stack Overflow for any advice too!
>
>   Thanks; it's late here and I'll not be home till gone 1am so I'll be off now!
>
> Cheers,
>
> Neil
> On Fri, 28 Sep 2018 at 23:38, Neil Benn <neil.benn@xxxxxxxxx> wrote:
> >
> > Hello,
> >
> >   I'm trying to setup a RPi0 operating a Bluetooth device; I've setup
> > the device using the following call:
> > ---
> >     #configure the bluetooth hardware device
> >     def init_bt_device(self):
> >
> >         print("Configuring for name " + BTKbDevice.MY_DEV_NAME)
> >
> >         #set the device class to a barcode scanner and set the name
> >         os.system("hciconfig hcio class 0x002560")
> >         os.system("hciconfig hcio name " + BTKbDevice.MY_DEV_NAME)
> >
> >         #make the device discoverable
> >         os.system("hciconfig hcio piscan")
> >

You shouldn't be using hciconfig, instead do the following:

The class is automatically set by bluetoothd based on the
services/profiles registered and the setting in the main.conf:

https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/src/main.conf#n9

For the name use D-Bus property Alias:

https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/adapter-api.txt#n216

To make the adapter discoverable use D-Bus property Discoverable:

https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/adapter-api.txt#n252



> >   Then after that I attempt to setup the profile using the following code:
> > ---
> >     #set up a bluez profile to advertise device capabilities from a
> > loaded service record
> >     def init_bluez_profile(self):
> >
> >         print("Configuring Bluez Profile")
> >
> >         #setup profile options
> >         service_record=self.read_sdp_service_record()
> >
> >         opts = {
> >             "ServiceRecord":service_record,
> >             "Role":"server",
> >             "RequireAuthentication":False,
> >             "RequireAuthorization":False,
> >             "Name":BTKbDevice.MY_DEV_NAME,
> >             "AutoConnect":True
> >         }
> >
> >         #retrieve a proxy for the bluez profile interface
> >         bus = dbus.SystemBus()
> >         self.manager =
> > dbus.Interface(bus.get_object("org.bluez","/org/bluez"),
> > "org.bluez.ProfileManager1")
> >         self.profile = BTKbBluezProfile(bus, BTKbDevice.PROFILE_DBUS_PATH)
> >         self.manager.RegisterProfile(BTKbDevice.PROFILE_DBUS_PATH,
> > BTKbDevice.UUID, opts)
> >         print("Profile registered ")
> > ---
> >   The sdp record is available from https://textuploader.com/dv8xt.
> > The profile in question is basically the same as the one defined in
> > the test-profile as shown below:
> > ---
> > class BTKbBluezProfile(dbus.service.Object):
> >     fd = -1
> >
> >     @dbus.service.method("org.bluez.Profile1",
> >                                     in_signature="", out_signature="")
> >     def Release(self):
> >             print("Release")
> >             mainloop.quit()
> >
> >     @dbus.service.method("org.bluez.Profile1",
> >                                     in_signature="", out_signature="")
> >     def Cancel(self):
> >             print("Cancel")
> >
> >     @dbus.service.method("org.bluez.Profile1", in_signature="oha{sv}",
> > out_signature="")
> >     def NewConnection(self, path, fd, properties):
> >             self.fd = fd.take()
> >             print("NewConnection(%s, %d)" % (path, self.fd))
> >             for key in properties.keys():
> >                     print ('key ' + key + ' value ' + properties[key])
> >                     if key == "Version" or key == "Features":
> >                             print("  %s = 0x%04x" % (key, properties[key]))
> >                     else:
> >                             print("  %s = %s" % (key, properties[key]))
> >
> >     @dbus.service.method("org.bluez.Profile1", in_signature="o",
> > out_signature="")
> >     def RequestDisconnection(self, path):
> >             print("RequestDisconnection(%s)" % (path))
> >
> >             if (self.fd > 0):
> >                     os.close(self.fd)
> >                     self.fd = -1
> >
> >     def __init__(self, bus, path):
> >             dbus.service.Object.__init__(self, bus, path)
> > ---
> >   However it seems like the profile is not being registered, or least
> > the methods in the profile are not being called.  I'm sorry to ask
> > such a basic question but can someone please point me in the right
> > direction as to why the profile is either not being registered or the
> > callbacks on the profile are not being called.

They would be called only when there is a connection to the profile,
did you actually connect? If this is something like a serial port the
remote should lookup the SDP record and connect to the channel listed
there.

> >   Thank you very much for reading this far and any and all help is
> > most appreciated!
> >
> > Cheers,
> >
> > Neil
> >
> > --
> >
> > Neil Benn MSc
> > Ziath Ltd
> > Phone: +44 (0) 1223 855021
> > http://www.ziath.com
> >
> > Please consider the environment before printing this email.
>
>
>
> --
>
> Neil Benn MSc
> Ziath Ltd
> Phone: +44 (0) 1223 855021
> http://www.ziath.com
>
> Please consider the environment before printing this email.
>
> Follow us on Facebook, Twitter or LinkedIn
>
> IMPORTANT NOTICE: This message, including any attached documents, is
> intended only for the use of the individual or entity to which it is
> addressed, and may contain information that is privileged,
> confidential and exempt from disclosure under applicable law. If the
> reader of this message is not the intended recipient, or the employee
> or agent responsible for delivering the message to the intended
> recipient, you are hereby notified that any dissemination,
> distribution or copying of this communication is strictly prohibited.
> If you have received this communication in error, please notify Ziath
> Ltd immediately by email at info@xxxxxxxxx. Thank you.



--
Luiz Augusto von Dentz



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux