User talk:Gabrys
From Openmoko
(Changing "BT" to "Bluetooth" so it can be easier found) |
|||
Line 1: | Line 1: | ||
− | = Testing GSM <-> | + | = Testing GSM <-> Bluetooth on FreeRunner = |
− | Basics: We need to tell audio codec to route sound from GSM chip to | + | '''Basics:''' We need to tell audio codec to route sound from GSM chip to Bluetooth chip. Codec is controlled by ALSA and mixer settings. The audio chip is described here: http://wiki.openmoko.org/wiki/Neo1973_Audio_Subsystem . |
− | + | '''Prerequisite:''' Bluetooth device must be paired before the operation. | |
− | Note: 00:13:17:78:7B:A3 is | + | Note: 00:13:17:78:7B:A3 is Bluetooth MAC of my headset, modify accordingly. |
== Step one: powering on bluetooth, setting up bluetoothd, pairing == | == Step one: powering on bluetooth, setting up bluetoothd, pairing == | ||
Line 22: | Line 22: | ||
hciconfig hci0 up | hciconfig hci0 up | ||
− | Do this ONCE: use simple-agent from here: http://wiki.openmoko.org/wiki/Manually_using_Bluetooth#Pair to pair the device (or pair in any other valid way). | + | Do this ONCE (the prerequisite): use simple-agent from here: http://wiki.openmoko.org/wiki/Manually_using_Bluetooth#Pair to pair the device (or pair in any other valid way). |
Connect to the headset: | Connect to the headset: | ||
Line 59: | Line 59: | ||
Call to the phone and answer (or place a call, whichever is cheaper). | Call to the phone and answer (or place a call, whichever is cheaper). | ||
− | == Step three: load ALSA settings to switch codec "mode" to GSM <=> | + | == Step three: load ALSA settings to switch codec "mode" to GSM <=> Bluetooth == |
Wait till frameworkd sets its statefile and then overwrite it with your own: | Wait till frameworkd sets its statefile and then overwrite it with your own: | ||
Line 69: | Line 69: | ||
(last two lines due to kernel bug). | (last two lines due to kernel bug). | ||
− | Issue dbus call to start exchanging audio between GSM and | + | Issue dbus call to start exchanging audio between GSM and Bluetooth: |
BTADAPTER=`dbus-send --system --dest=org.bluez --print-reply / org.bluez.Manager.DefaultAdapter | tail -1 | sed 's/^.*"\(.*\)".*$/\1/'` | BTADAPTER=`dbus-send --system --dest=org.bluez --print-reply / org.bluez.Manager.DefaultAdapter | tail -1 | sed 's/^.*"\(.*\)".*$/\1/'` | ||
Line 98: | Line 98: | ||
time.sleep(999) # wait till user quits this nasty program | time.sleep(999) # wait till user quits this nasty program | ||
− | Now | + | Now Bluetooth should work. Don't touch the on-screen sliders though, because it will change ALSA settings and you'll lose Bluetooth connection. |
After that you should have the following command output: | After that you should have the following command output: |
Revision as of 22:46, 6 April 2010
Contents |
Testing GSM <-> Bluetooth on FreeRunner
Basics: We need to tell audio codec to route sound from GSM chip to Bluetooth chip. Codec is controlled by ALSA and mixer settings. The audio chip is described here: http://wiki.openmoko.org/wiki/Neo1973_Audio_Subsystem .
Prerequisite: Bluetooth device must be paired before the operation.
Note: 00:13:17:78:7B:A3 is Bluetooth MAC of my headset, modify accordingly.
Step one: powering on bluetooth, setting up bluetoothd, pairing
Set /etc/bluetooth/audio.conf like this:
# SCO routing. Either PCM or HCI (in which case audio is routed to/from ALSA) # Defaults to HCI SCORouting=PCM
Then
echo 1 > /sys/bus/platform/devices/neo1973-pm-bt.0/power_on sleep 1 bluetoothd hciconfig hci0 up
Do this ONCE (the prerequisite): use simple-agent from here: http://wiki.openmoko.org/wiki/Manually_using_Bluetooth#Pair to pair the device (or pair in any other valid way).
Connect to the headset:
BTADAPTER=`dbus-send --system --dest=org.bluez --print-reply / org.bluez.Manager.DefaultAdapter | tail -1 | sed 's/^.*"\(.*\)".*$/\1/'` dbus-send --system --dest=org.bluez --print-reply $BTADAPTER/dev_00_13_17_78_7B_A3 org.bluez.Headset.Connect
Test: "hcitool con" should say:
Connection < ACL 00:13:17:78:7B:A3 handle 42 state 1 lm MASTER
Test2:
BTADAPTER=`dbus-send --system --dest=org.bluez --print-reply / org.bluez.Manager.DefaultAdapter | tail -1 | sed 's/^.*"\(.*\)".*$/\1/'` dbus-send --system --dest=org.bluez --print-reply $BTADAPTER/dev_00_13_17_78_7B_A3 org.bluez.Headset.Connect
should say: Error org.bluez.Error.AlreadyConnected: Already Connected
More debug
root@om-gta02 /usr/lib/python2.6/site-packages $ dbus-send --system --dest=org.bluez --print-reply $BTADAPTER/dev_00_13_17_78_7B_A3 org.bluez.Headset.Disconnect method return sender=:1.18 -> dest=:1.287 reply_serial=2 root@om-gta02 /usr/lib/python2.6/site-packages $ dbus-send --system --dest=org.bluez --print-reply $BTADAPTER/dev_00_13_17_78_7B_A3 org.bluez.Headset.Connect Error org.bluez.Error.ConnectionAttemptFailed: Input/output error root@om-gta02 /usr/lib/python2.6/site-packages $ dbus-send --system --dest=org.bluez --print-reply $BTADAPTER/dev_00_13_17_78_7B_A3 org.bluez.Headset.Connect method return sender=:1.18 -> dest=:1.290 reply_serial=2 root@om-gta02 /usr/lib/python2.6/site-packages $ dbus-send --system --dest=org.bluez --print-reply $BTADAPTER/dev_00_13_17_78_7B_A3 org.bluez.Headset.Play method return sender=:1.18 -> dest=:1.292 reply_serial=2
Step two: make a call
Call to the phone and answer (or place a call, whichever is cheaper).
Step three: load ALSA settings to switch codec "mode" to GSM <=> Bluetooth
Wait till frameworkd sets its statefile and then overwrite it with your own:
alsactl -f /usr/share/shr/scenarii/gsmbluetooth.state restore amixer sset "Capture Left Mixer" "Analogue Mix Right" amixer sset "Capture Left Mixer" "Analogue Mix Left"
(last two lines due to kernel bug).
Issue dbus call to start exchanging audio between GSM and Bluetooth:
BTADAPTER=`dbus-send --system --dest=org.bluez --print-reply / org.bluez.Manager.DefaultAdapter | tail -1 | sed 's/^.*"\(.*\)".*$/\1/'` dbus-send --system --dest=org.bluez --print-reply $BTADAPTER/dev_00_13_17_78_7B_A3 org.bluez.Headset.Play
Set bluetooth IIS to 8000 rate and keep it with a sleep in Python:
python set_pcm.py
Where the set_pcm.py is:
import alsaaudio import time pcm_play = alsaaudio.PCM( alsaaudio.PCM_PLAYBACK, alsaaudio.PCM_NONBLOCK, "hw:0,1" ) pcm_play.setchannels(1) pcm_play.setrate(8000) pcm_play.setformat(alsaaudio.PCM_FORMAT_S16_LE) pcm_play.setperiodsize(500000) pcm_cap = alsaaudio.PCM( alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NONBLOCK, "hw:0,1" ) pcm_cap.setchannels(1) pcm_cap.setrate(8000) pcm_cap.setformat(alsaaudio.PCM_FORMAT_S16_LE) pcm_cap.setperiodsize(500000) while True: time.sleep(999) # wait till user quits this nasty program
Now Bluetooth should work. Don't touch the on-screen sliders though, because it will change ALSA settings and you'll lose Bluetooth connection.
After that you should have the following command output:
root@om-gta02 ~ $ hcitool con Connections: < SCO 00:13:17:78:7B:A3 handle 45 state 1 lm SLAVE < ACL 00:13:17:78:7B:A3 handle 42 state 1 lm MASTER