/nohands

HFP for Linux is a software package written in C++ that aims to be a conforming implementation of Bluetooth Hands-Free Profile 1.5.

Primary LanguageC++GNU General Public License v2.0GPL-2.0

HFP for Linux
=============

Copyright 2006-2008 Sam Revitch <samr7@cs.washington.edu>

HFP for Linux is a software package written in C++ that aims to be a 
conforming implementation of Bluetooth Hands-Free Profile 1.5.  This 
package inclues three main pieces:

- hfconsole, a PyGTK console application for hfpd
- hfpd, the hands-free profile D-Bus service
- libhfp, the core hands-free profile implementation

Plus, a set of secondary programs as examples:

- hfstandalone, a libhfp Qt application that does not use hfpd
- hfpdtext, a variant of hfpd with a text protocol instead of D-Bus
- nhandsfree, an hfpdtext client plugin for nGhost

libhfp is currently very simple and supports only basic HFP and SCO 
audio.  It does not support phone book access, and hfconsole does not 
implement a local phone book.


Features
--------
- Conforms to Bluetooth Hands-Free Profile 1.5
- Uses libspeexdsp signal processing and echo cancelation library
- Supports ALSA and OSS sound card drivers
- Can set BlueZ directives for authentication of incoming connections
- Supports involuntary device disconnection and reconnection
- Supports audio system tests, including loopback and DSP test modes
- libhfp is adaptable and can be plugged in to different environments easily
- libhfp includes detailed Doxygen documentation
- hfpd is a D-Bus service compatible with any environmental D-Bus bindings
- hfpd and hfstandalone support multiple concurrently connected devices
- hfpd and hfstandalone support ring tones in WAV format


Requirements
------------
- BlueZ / libbluetooth
- (optional) Speex >= 1.2b2, for microphone input cleanup
- (optional) libaudiofile
- (optional) libasound, for the ALSA backend
- (optional) D-Bus for hfpd and the D-Bus clients
- (optional) Qt4, for the hfstandalone program
- (optional) nghost, for the nhandsfree plugin

You will need a full duplex sound card.  Just about any integrated motherboard
audio device produced within the last ten years should suffice.  Most 
USB sound cards that support capture should work as well.

You will need a Bluetooth dongle with functional SCO.  I have had reliable
success with a number of dongles based on Cambridge Silicon Radio BlueCore4.
I have had less reliable success with dongles based on Broadcom BCM2035,
seemlingly due to firmware bugs.


GUI Operation
-------------
- Pair your phone with hfconsole.  Enable Bluetooth on your phone, 
  configure it to be temporarily discoverable, and click the "Scan" 
  button on the hfconsole main window.  Your phone should appear on the 
  list within five seconds.

- Outgoing calls may be placed both directly from your phone, and from the
  hfconsole dial pad.

- Incoming calls may be answered directly from the phone or from the Accept
  button that appears on hfconsole.

- To set the ring tone, click the "Configuration" button on the main window,
  switch to the Alerting tab, click the "..." button, and use the file chooser
  to select a .WAV file.

- When in a call, the hfconsole dial pad may be used to send DTMF tones 
  for navigating phone menus, i.e. "Press 1 for more options."


Troubleshooting
---------------
For all audio problems, open the GUI configuration dialog, go to the 
device tab, and use the feedback test feature to verify that your sound card 
can loop back to itself, and that the libhfp audio components are working.

libhfp has been tested only with a small set of phones, and 
incompatibilities may exist.  If you believe you may have one, please 
start hfpd manually with the '-f -d4' flags, capture the console output 
of hfpd and hfconsole to a text file, and mail it to the author with 
your problem description.


Miscellaneous
-------------
Wish list:
- libhfp should support Bluetooth PBAP and vendor AT commands for phonebook
  access
- The GUIs need a phone book
- The GUIs should support window manager alerting

This program was developed with:
- Various versions of the Linux kernel
- Various CSR-based Bluetooth dongles
- A Motorola V3 RAZR
- A Motorola A780 (bugs!)

Aside, it would not appear to be possible for a mere mortal to create a single
application implementing complete HFP with any of the Windows Bluetooth
stacks.  The Microsoft stack does not support SCO, and while the Widcomm stack
may, it does not have public documentation for this functionality.  This 
is evidenced by CentraFuse, which _does_ support hands-free profile on 
Windows, but using a custom-built Bluetooth stack from BlueSoleil.  The 
CentraFuse solution is both very expensive and doesn't support any signal 
processing at time of writing.

Mad props to BlueZ for completeness!