Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
730 views
in Technique[技术] by (71.8m points)

debugging - Problem with bluetooth on android 2.1 (samsung spica i5700) where pairing works but connection does not work

I have a Samsung Spica i5700 which I already have updated to Android 2.1. I am using the phone with an application called Run.GPS (http://www.rungps.net). This application logs data such as GPS position, route, speed, bearing etc. It can also log heartrate provided the user has a Zephyr HxM bluetooth heart rate monitor ("HxM"), which I do have.

I can pair the HxM to the phone through the standard bluetooth utility. I'm prompted for the PIN, which I enter and the device is shown as 'Paired but not connected'.

In the Run.GPS application itself, I click on 'Connect Heartrate Monitor'. This times out after about 30 seconds and the error message is 'Could not connect to heartrate monitor. Please try other settings'.

I used a friend's HTC Windows Mobile as a control device to see if the HxM works there. It does. The Run.GPS application automatically sets the baud rate (initially to 9600 IIRC, though the connection also worked with higher baud rates) and it is possible to choose between various COM ports as well as a .Net COM port.

I did some testing on my Spica Android, to try to find out why the bluetooth connection doesn't work. Below are some log files that I connected over adb when I clicked on 'Connect to Heartrate Monitor' in the Run.GPS application.

I would be interested in any tips (including if I'm posting to the wrong forum here ;-)) - whether or not it's possible to experiment with the baud rate in Android etc. I still don't know if the problem is with the Run.GPS application (I've posted already on the development forum there) or with Android 2.1. I checked out another application - Endomondo - which is also a sport tracking application which supports heartrate monitor only with the HxM. There, what looked like exactly the same error occurred - I clicked on 'Connect Zephyr HxM'. For a few seconds I was shown the 'Connecting...' status, but then it timed out into 'Not Connected'. I'm thus tending towards looking at Android for the problem.

Here's the output of adb logcat while trying to connect

./adb logcat | grep Run.GPS
  D/WYNEX> (11551): Excute :: Run.GPS Trainer UV, (null)
  E/Run.GPS (11997): Cannot connect to BT device
  E/Run.GPS (11997): java.io.IOException: Service discovery failed
  E/Run.GPS (11997): at  android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:374)
  E/Run.GPS (11997): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:184)
  E/Run.GPS (11997): at ju.a(Unknown Source)
  E/Run.GPS (11997): at qk.j(Unknown Source)
  E/Run.GPS (11997): at fs.c(Unknown Source)
  E/Run.GPS (11997): at le.a(Unknown Source)
  E/Run.GPS (11997): at s.b(Unknown Source)
  E/Run.GPS (11997): at pb.a(Unknown Source)
  E/Run.GPS (11997): at as.a(Unknown Source)
  E/Run.GPS (11997): at am.b(Unknown Source)
  E/Run.GPS (11997): at gf.onTouchEvent(Unknown Source)
  E/Run.GPS (11997): at android.view.View.dispatchTouchEvent(View.java:3709)
  E/Run.GPS (11997): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
  E/Run.GPS (11997): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
  E/Run.GPS (11997): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1665)
  E/Run.GPS (11997): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
  E/Run.GPS (11997): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
  E/Run.GPS (11997): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1649)
  E/Run.GPS (11997): at android.view.ViewRoot.handleMessage(ViewRoot.java:1694)
  E/Run.GPS (11997): at android.os.Handler.dispatchMessage(Handler.java:99)
  E/Run.GPS (11997): at android.os.Looper.loop(Looper.java:123)
  E/Run.GPS (11997): at android.app.ActivityThread.main(ActivityThread.java:4363)
  E/Run.GPS (11997): at java.lang.reflect.Method.invokeNative(Native Method)
  E/Run.GPS (11997): at java.lang.reflect.Method.invoke(Method.java:521)
  E/Run.GPS (11997): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
  E/Run.GPS (11997): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
  E/Run.GPS (11997): at dalvik.system.NativeStart.main(Native Method)
  E/Run.GPS (11997): Cannot connect to BT device
  E/Run.GPS (11997): java.io.IOException: Service discovery failed

Here's the output of dmesg while trying to connect the heartrate monitor

<4>[74726.239833] select 11691 (.serviceModeApp), adj 15, size 3205, to kill
<4>[74726.240741] select 11739 (com.wssnps), adj 15, size 3207, to kill
<4>[74726.246870] select 11750 (id.partnersetup), adj 15, size 3219, to kill
<4>[74726.253390] select 11857 (p.bluetoothicon), adj 15, size 3299, to kill
<4>[74726.259879] select 13131 (ndroid.settings), adj 15, size 4586, to kill
<4>[74726.266372] send sigkill to 13131 (ndroid.settings), adj 15, size 4586
<7>[74733.945097] [BT] GPIO_BT_WAKE = 1
<7>[74733.945121] [BT] wake_lock(bt_wake_lock)
<7>[74733.951799] [BT] GPIO_BT_HOST_WAKE = 1
<7>[74733.951822] [BT] wake_lock timeout = 5 sec
<7>[74735.890196] [BT] GPIO_BT_HOST_WAKE = 0
<7>[74736.150987] [BT] GPIO_BT_HOST_WAKE = 1
<7>[74736.151009] [BT] wake_lock timeout = 5 sec
<7>[74737.490185] [BT] GPIO_BT_HOST_WAKE = 0
<7>[74740.073913] [BT] GPIO_BT_HOST_WAKE = 1
<7>[74740.073948] [BT] wake_lock timeout = 5 sec
<7>[74741.315336] [BT] GPIO_BT_HOST_WAKE = 0
<7>[74743.249747] [BT] GPIO_BT_HOST_WAKE = 1
<7>[74743.249768] [BT] wake_lock timeout = 5 sec
<7>[74744.865099] [BT] GPIO_BT_HOST_WAKE = 0
<7>[74745.154487] [BT] GPIO_BT_HOST_WAKE = 1
<7>[74745.154509] [BT] wake_lock timeout = 5 sec
<7>[74748.852534] [BT] GPIO_BT_HOST_WAKE = 0
<7>[74749.156256] [BT] GPIO_BT_HOST_WAKE = 1
<7>[74749.156278] [BT] wake_lock timeout = 5 sec
<7>[74750.490018] [BT] GPIO_BT_HOST_WAKE = 0
<4>[74754.230424] select 11691 (.serviceModeApp), adj 15, size 3191, to kill
<4>[74754.231326] select 11739 (com.wssnps), adj 15, size 3193, to kill
<4>[74754.237473] select 11750 (id.partnersetup), adj 15, size 3205, to kill
<4>[74754.243950] select 11857 (p.bluetoothicon), adj 15, size 3283, to kill
<4>[74754.250452] select 13140 (com.svox.pico), adj 15, size 3465, to kill
<4>[74754.256787] send sigkill to 13140 (com.svox.pico), adj 15, size 3465 

Here's the logcat output when I click 'connect zephyr' in Endomondo

I/PUSH Event(19147): MotionEvent : QueuedEvent{43d7d480 MotionEvent{440b5680 action=1 x=228.28438 y=212.55624 pressure=0.0 size=0.0}} 
D/BluetoothZephyrService(23605): connect to: 00:07:80:88:F5:AD
D/BluetoothSocket(23605): BluetoothSocket created fd: -1uuid00001101-0000-1000-8000-00805f9b34fbport -1                     
D/BluetoothSocket.cpp(23605): initSocketNative      
I/BLZ20_WRAPPER(23605): blz20_wrp_socket: fam 31, type 1, prot BTPROTO_RFCOMM                                                      
D/BLZ20_WRAPPER(23605): blz20_init: initializing...       
D/BTL_IFC_WRP(23605): wsactive_init: init active list                                                                          
I/BTL_IFC (23605): main_client_thread: Client main thread starting                                                               
D/BLZ20_WRAPPER(23605): blz20_init: success       
I/BTL_IFC (23605): BTL_IFC_RegisterSubSystem: Register subsystem [(null)]                                                         
I/BTL_IFC (23605): btl_ifc_ctrl_connect: Connect control channel for subsystem [(null)]                                           
D/BTL_IFC_WRP(23605): wrp_sock_create: CTRL 
D/BTL_IFC_WRP(23605): wrp_alloc_new_sock: wrp_alloc_new_sock sub 1                                               
D/BTL_IFC_WRP(23605): wrp_sock_create: 28
D/BTL_IFC_WRP(23605): wrp_sock_connect: wrp_sock_connect 127.0.0.1:9000 (28)                                      
I/BTL-IFS (21889): main_server_thread: [CTRL] Client connected (14)                                               
I/BTL_IFC_WRP(23605): wrp_sock_connect: Connected. (28)                                                           
I/BTL_IFC (23605): send_ctrl_msg: [BTL_IFC CTRL] send BTLIF_REGISTER_SUBSYS_REQ ((null)) 0 pbytes (hdl 28)      
I/BTL-IFS (21889): attach_client: multiclient index 1                                                                       
I/BTL-IFS (21889): attach_client: ######## Attached client subsystem  (14) ########                                                  
I/BTL-IFS (21889): btl_if_notify_local_event: Notify local event BTLIF_SUBSYSTEM_ATTACHED 
D/        (21889): btlif_bts_api_ctrl_cb: btlif_bts_api_ctrl_cb : id BTLIF_SUBSYSTEM_ATTACHED (4112) on hdl 14                 
I/        (21889): btlif_rfc_ctrl_chan_attached: client attached ctrl handle 14                                               
D/BTL-IFS (21889): send_registration_rsp: send_registration_rsp [0]                                                             
I/BTL-IFS (21889): send_ctrl_msg: [BTL_IFS CTRL] send BTLIF_REGISTER_SUBSYS_RSP (CTRL) 2 pbytes (hdl 14)                        
D/BTL_IFC (23605): BTL_IFC_RegisterSubSystem: add new ctrl fd to active set                                                     
D/BTL_IFC_WRP(23605): wrp_wsock_create: (null)     
D/BTL_IFC_WRP(23605): wrp_alloc_new_sock: wrp_alloc_new_sock sub 15                                                            
D/BTL_IFC_WRP(23605): wrp_wsock_create: 32     
D/BLZ20_WRAPPER(23605): btsk_alloc_add: success    
I/BLZ20_WRAPPER(23605): blz20_wrp_socket: return 32                                                                            
D/BLZ20_WRAPPER(23605): blz20_wrp_setsockopt:  fd (-1:32), bta -1, rc 0, wflags 0x0                                                
I/BLZ20_WRAPPER(23605): blz20_wrp_setsockopt: configure rfcomm lm mode 0x26, (master:0, auth 1, enc 1)                       
I/BLZ20_WRAPPER(23605): blz20_wrp_setsockopt: success
D/BLZ20_WRAPPER(23605): blz20_wrp_setsockopt:  fd (-1:32), bta -1, rc 0, wflags 0x0                                            
I/BLZ20_WRAPPER(23605): blz20_wrp_setsockopt: configure rfcomm sndbuf len 71680 bytes                                            
I/BLZ20_WRAPPER(23605): blz20_wrp_setsockopt: success 
D/BluetoothSocket.cpp(23605): ...fd 32 created (RFCOMM, lm = 26)                                                               
D/BluetoothSocket.cpp(23605): initSocketFromFdNative              
D/BluetoothZephyrService(23605): setState() 0 -> 2                                                                              
I/BluetoothZephyrService(23605): BEGIN mConnectThread      
E/BluetoothService.cpp(19147): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session) 
D/BluetoothSocket(23605): connect                  
D/BluetoothSocket(23605): doSdp                 
I/BluetoothService.cpp(19147): ... Object Path = /org/bluez/21902/hci0/dev_00_07_80_88_F5_AD      
I/BluetoothService.cpp(19147): ... Pattern = 00001101-0000-1000-8000-00805f9b34fb, strlen = 36                                 
I/BluetoothZephyr(23605): MESSAGE_STATE_CHANGE: 2                                                                             
D/DEVICE  (21902):     *************DiscoverServices********                         
I/DTUN_HCID(21902): dtun_client_get_remote_svc_channel: starting discovery on  (uuid16=0x0011)                                               
I/DTUN_HCID(21902):    bdaddr=00:07:80:88:F5

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I got this information from the gps-sport forum. Not sure what to do with it though...

See also http://www.gps-sport.net/forums/thread/1532-0/Keine-Sprachausgabe-auf-HTC-Desire

Cross posting this entry from the software category. The thread over there deals with the Zephyr HxM as a secondary issue - meaning it mightn't be easy to find...

24.04.2010 16:47:05 UTC ge?ndert am 24.04.2010 17:03:03 UTC

A fix to the bluetooth connection problem

Hi

If this problem still is not resolved, the code below describes how to make the connection work with Android 2.1 (Tested on HTC Desire). Just replace "00:07:80:89:EE:EB" with the MAC of your HXM to make it connect. After the connection is successful, a regular method with input = socket.getInputStream() can be used.

BluetoothDevice hxm = BluetoothAdapter.getDefaultAdapter().getRemoteDevice("00:07:80:89:EE:EB");
Method m = hxm.getClass().getMethod("createRfcommSocket", new Class[]{int.class});
socket = (BluetoothSocket)m.invoke(hxm, Integer.valueOf(1));
socket.connect();

Hope the fix will be out very soon =)

Best regards Espen S. Nygaard


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...