On 11.06.2016 18:41, Marco Trapanese wrote:
Hello,
I have this setup:

- RPi3
- Raspbian Jessie Lite
- bluez 5.40
- ofono 1.18

in /etc/bluetooth/main.conf I set this class: 0x640408.
Using bluetoothctl I connected my phone to the SBC and I can make a call using the ofono tests.

I wonder how to read the contacts. I launched test-phonebook but I got this error:

Method "Import" with signature "" on interface "org.ofono.Phonebook" doesn't exist

Do I need to enable something other before?
Thanks
Marco

Hi Marco,

see attached python script for how to get the phone book from a bluetooth device. I think you need obexd for this, although I am not quite sure because I programmed
it long ago.

Regards
              Georg
#!/usr/bin/python
# -*- coding: utf-8 -*-

import gtk, gobject, os, dbus, dbus.service, logging

class Phonebook_Phone:

   bus = None
   session_p = None
   session = None
   pbap_object = None
   transfer_path = None
   transfer_file = None
   phone_book = []
   cb_done = None

   def __init__(self, phone, done_cb):
      self.cb_done = done_cb
      self.bus = dbus.SessionBus()
      client = dbus.Interface(self.bus.get_object("org.bluez.obex", "/org/bluez/obex"), "org.bluez.obex.Client1")
      self.session_p = client.CreateSession(phone, { "Target": "PBAP" })
      obj = self.bus.get_object("org.bluez.obex", self.session_p)
      self.session = dbus.Interface(obj, "org.bluez.obex.Session1")
      self.pbap_object = dbus.Interface(obj, "org.bluez.obex.PhonebookAccess1")
      self.bus.add_signal_receiver(self.properties_changed,
               dbus_interface="org.freedesktop.DBus.Properties",
               signal_name="PropertiesChanged",
               path_keyword="path")
      self.pbap_object.Select("int", "PB")
      self.get_book()

   def properties_changed(self, interface, properties, invalidated, path):
      if self.transfer_file == None:
         return
      if "Transferred" in properties:
         return
      if properties['Status'] == 'complete':
         self.transfer_complete(path)
         return
      if properties['Status'] == 'error':
         self.error(path)
         return

   def get_book(self):
      params = dbus.Dictionary({ "Format" : "vcard30",
                               "Fields" : ["PHOTO"] })
      self.pbap_object.PullAll("", params,
              reply_handler=self.register,
              error_handler=self.error)

   def register(self, path, properties):
      self.transfer_path = path
      self.transfer_file = properties["Filename"]

   def error(self, err):
       logging.error("Error while retrieving the Phonebook: %s", err)

   def transfer_complete(self, path):
       if self.transfer_file == None:
          return
       try:
          f = open(self.transfer_file, "r")
          lines = f.readlines()
          f.close()
          os.remove(self.transfer_file)
          self.result_cb(lines)
       except:
          pass
 
   def result_cb(self, lines):
       for line in lines:
           line = line.strip()
           if line[:3] == "FN:":
              my_name = line[3:]
              my_numbers = []
           elif line[:4] == "TEL;":
              my_numbers.append(line[line.find(":") + 1:])
           elif line == "END:VCARD" and len(my_numbers) != 0:
              for i in range(0, len(my_numbers)):
                 my_name_1 = my_name
                 if i != 0:
                    my_name_1 = my_name_1 + " " + str(i)
                 self.phone_book.append([my_name_1, my_numbers[i]])
       if self.cb_done:
          self.cb_done()

_______________________________________________
ofono mailing list
[email protected]
https://lists.ofono.org/mailman/listinfo/ofono

Reply via email to