1
GaoMjun 2017-06-07 17:25:34 +08:00 via Android
|
2
mxi1 2017-06-07 17:26:11 +08:00
之所以有标准蓝牙和低功耗蓝牙的区别,是因为它们的物理层实现不一样。Android 从 4.4 就支持低功耗蓝牙了,在 Android Frameworks 和 Natvie 层都能看到对应的代码,协议栈在 system/bt 目录下面; Java 和 JNI 的代码,你可以按照 Android 开发文档里面提到的 Class 名称去 AOSP 代码里面找。
|
3
uleh 2017-06-07 17:44:33 +08:00
蓝牙的物理层面是一样的,最大功率由硬件决定。
但是蓝牙 4.0 支持不同的 Profile,对发射功率、频率、数据包等进行调节。低功耗蓝牙就是特别注重功耗的一个 Profile,但是连接距离、发射频率、数据传输带宽等都有很大限制。 |
4
uleh 2017-06-07 17:46:41 +08:00
回到 lz 问题,Android 这一块源码我还没有仔细读过,不过蓝牙在驱动层应该是一样的,应该是在 HAL 或者 Framework 层向上做了区别。你可以重点看下 Connectivity 模块,我印象里 LE 的封装应该是在这块或者更底层一点。
|
5
stdying OP |
6
mxi1 2017-06-08 10:46:40 +08:00
@stdying HAL 层的头文件在 hardware/libhardware/include/hardware ( https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware)里面。你可以在 JNI 里面搜一下 HAL 层涉及到的函数,就很容易对应上了
|
7
stdying OP @mxi1 源代码已经下载下来了
activity_recognition.h bt_gatt_types.h camera3.h hdmi_cec.h memtrack.h audio_alsaops.h bt_hf_client.h camera_common.h hw_auth_token.h nfc.h audio_effect.h bt_hf.h camera.h hwcomposer_defs.h nfc_tag.h audio.h bt_hh.h consumerir.h hwcomposer.h power.h audio_policy.h bt_hl.h fb.h input.h qemud.h bluetooth.h bt_mce.h fingerprint.h keymaster0.h qemu_pipe.h bt_av.h bt_pan.h fused_location.h keymaster1.h radio.h bt_common_types.h bt_rc.h gatekeeper.h keymaster_common.h sensors.h bt_gatt_client.h bt_sdp.h gps.h keymaster_defs.h sound_trigger.h bt_gatt.h bt_sock.h gralloc.h lights.h tv_input.h bt_gatt_server.h camera2.h hardware.h local_time_hal.h vibrator.h 在函数名称上就可以区分出来? 目前正在看 JNI 部分 |
8
mxi1 2017-06-08 10:56:14 +08:00
@stdying 比如,你读一下 bt_gatt_client.h 里面的函数定义,然后在 JNI 里面可以搜索的到,就可以对应到 Java 代码了。我理解 JNI 起的一个作用就是把 C 定义的函数给映射到了 Java 代码里面。
|
10
stdying OP |