2013-2-21 15:03:43

 


2013-2-21 15:03:43

 

sendURCNative  为什么超过10s 没有返回?


  #00  pc 0000c978  /system/lib/libc.so (write+12)
  #01  pc 00079e15  /system/lib/libandroid_runtime.so
  #02  pc 0001f330  /system/lib/libdvm.so (dvmPlatformInvoke+112)
  #03  pc 0004e079  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+360)
  #04  pc 000287e0  /system/lib/libdvm.so
  #05  pc 0002cfa8  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+180)
  #06  pc 0005f93f  /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+374)
  #07  pc 000668e5  /system/lib/libdvm.so
  #08  pc 000287e0  /system/lib/libdvm.so
  #09  pc 0002cfa8  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+180)
  #10  pc 0005f695  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+272)
  #11  pc 0004a6a7  /system/lib/libdvm.so
  #12  pc 00048bfd  /system/lib/libandroid_runtime.so
  #13  pc 00049619  /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*)+368)
  #14  pc 00000dcf  /system/bin/app_process
  #15  pc 00017113  /system/lib/libc.so (__libc_init+38)
  #16  pc 00000b34  /system/bin/app_process
 
 
 
 
  502static jboolean sendURCNative(JNIEnv *env, jobject obj, jstring urc) {
503#ifdef HAVE_BLUETOOTH
504    native_data_t *nat = get_native_data(env, obj);
505    if (nat->rfcomm_connected) {
506        const char *c_urc = env->GetStringUTFChars(urc, NULL);
507        jboolean ret = send_line(nat->rfcomm_sock, c_urc) == 0 ? JNI_TRUE : JNI_FALSE;
508        if (ret == JNI_TRUE) pretty_log_urc(c_urc);
509        env->ReleaseStringUTFChars(urc, c_urc);
510        return ret;
511    }
512#endif
513    return JNI_FALSE;
514}


按line进行发送

也是属于网络的一种

kernel/net/bluetooth/af_bluetooth.c


------ SYSTEM LOG (logcat -v threadtime -d *:v) ------
--------- beginning of /dev/log/system
 
02-14 15:47:42.140   726 22837 E Bluetooth HS/HF: BluetoothSocket could not connect

02-14 15:47:52.770   440   455 W BroadcastQueue: Timeout of broadcast BroadcastRecord{41c03c70 android.intent.action.SCREEN_OFF} - receiver=android.os.BinderProxy@41ac3420, started 10000ms ago

02-14 15:47:52.770   440   455 W BroadcastQueue: Receiver during timeout: BroadcastFilter{41ac36d0 ReceiverList{41ac3630 726 com.android.phone/1001 remote:41ac3420}}

02-14 15:47:52.810   726   726 E BT HSHFP: write_error_check: write() failed: Interrupted system call (4)

BT 断了之后就不应该继续向下写

phone 还有个蓝牙耳机的问题

搜索设备后匹配

"BT EventLoop" prio=5 tid=57 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x419aaab0 self=0x51a8f9d8
  | sysTid=633 nice=0 sched=0/0 cgrp=apps handle=1339766944
  | schedstat=( 0 0 0 ) utm=9 stm=3 core=0
  #00  pc 0000dae8  /system/lib/libc.so (poll+12)
  #01  pc 00081abd  /system/lib/libandroid_runtime.so
  #02  pc 00012df0  /system/lib/libc.so (__thread_entry+48)
  #03  pc 00012548  /system/lib/libc.so (pthread_create+172)
  at dalvik.system.NativeStart.run(Native Method)
 
 

at android.bluetooth.HeadsetBase.sendURCNative(Native Method)
  at android.bluetooth.HeadsetBase.sendURC(HeadsetBase.java:272)
  at com.android.phone.BluetoothHandsfree.sendURC(BluetoothHandsfree.java:1937)
  at com.android.phone.BluetoothHandsfree.access$1900(BluetoothHandsfree.java:68)
  at com.android.phone.BluetoothHandsfree$BluetoothPhoneState.handlePreciseCallStateChange(BluetoothHandsfree.java:1468)
  at com.android.phone.BluetoothHandsfree$BluetoothPhoneState.access$2200(BluetoothHandsfree.java:779)
  at com.android.phone.BluetoothHandsfree$BluetoothPhoneState$1.handleMessage(BluetoothHandsfree.java:858)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:137)
  at android.app.ActivityThread.main(ActivityThread.java:4792)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:511)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:808)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:575)
  at dalvik.system.NativeStart.main(Native Method)


Unsolicited Result Code  URC 是主动返回码

phone 在主动发送URC 的时候被阻塞住了,call 状态发生了什么变化

以AT指令的形式来挂断BT 耳机

修改音量也是用同样的方式

修改xml来控制共享的文件类型

HFP 使用bt设备来控制手机

hsp bt设置作为耳机的模式存在

双工的串口需要3根数据线

A2DP 可以使用蓝牙支持立体声

org.bluez.intent.action.DISCOVERY_STARTED 开始探测

org.bluez.intent.action.REMOTE_DEVICE_FOUND 远程设备找到

org.bluez.intent.action.REMOTE_NAME_UPDATED获取远程设备名称

org.bluez.intent.action.DISCOVERY_COMPLETED完成SDP

获取server 适配器之后就可以开始扫描探测了

bluez 通过dbus 通知,system server 中有一个线程监听bt 事件,收到事件之后,接着广播各种intent ,本质上也就是一种回调


 

你可能感兴趣的:(2013-2-21 15:03:43)