V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
stdying
V2EX  ›  Android

Android 6.0 蓝牙 和低功耗蓝牙

  •  
  •   stdying · 2017-06-07 17:01:21 +08:00 · 9280 次点击
    这是一个创建于 2726 天前的主题,其中的信息可能已经有所发展或是发生改变。
    蓝牙有标准蓝牙 和低功耗蓝牙;
    这两个在 android 中是不是都同时支持,在哪里可以看到,
    在 java 层和 JNI 层是不是都有相关代码
    12 条回复    2017-06-08 20:27:21 +08:00
    GaoMjun
        1
    GaoMjun  
       2017-06-07 17:25:34 +08:00 via Android
    mxi1
        2
    mxi1  
       2017-06-07 17:26:11 +08:00
    之所以有标准蓝牙和低功耗蓝牙的区别,是因为它们的物理层实现不一样。Android 从 4.4 就支持低功耗蓝牙了,在 Android Frameworks 和 Natvie 层都能看到对应的代码,协议栈在 system/bt 目录下面; Java 和 JNI 的代码,你可以按照 Android 开发文档里面提到的 Class 名称去 AOSP 代码里面找。
    uleh
        3
    uleh  
       2017-06-07 17:44:33 +08:00
    蓝牙的物理层面是一样的,最大功率由硬件决定。
    但是蓝牙 4.0 支持不同的 Profile,对发射功率、频率、数据包等进行调节。低功耗蓝牙就是特别注重功耗的一个 Profile,但是连接距离、发射频率、数据传输带宽等都有很大限制。
    uleh
        4
    uleh  
       2017-06-07 17:46:41 +08:00
    回到 lz 问题,Android 这一块源码我还没有仔细读过,不过蓝牙在驱动层应该是一样的,应该是在 HAL 或者 Framework 层向上做了区别。你可以重点看下 Connectivity 模块,我印象里 LE 的封装应该是在这块或者更底层一点。
    stdying
        5
    stdying  
    OP
       2017-06-08 10:20:24 +08:00
    @GaoMjun 这个看过,没找到区别在哪,太愚钝了。
    @mxi1 java 层看到一些 gatt 相关的,在 JNI 里面就分不清了
    @uleh 你的意思我大概明白了一点,还需要了解一下协议; HAL 层的话可能还需要一些时间好好区分
    mxi1
        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 层涉及到的函数,就很容易对应上了
    stdying
        7
    stdying  
    OP
       2017-06-08 10:51:35 +08:00
    @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 部分
    mxi1
        8
    mxi1  
       2017-06-08 10:56:14 +08:00
    @stdying 比如,你读一下 bt_gatt_client.h 里面的函数定义,然后在 JNI 里面可以搜索的到,就可以对应到 Java 代码了。我理解 JNI 起的一个作用就是把 C 定义的函数给映射到了 Java 代码里面。
    mxi1
        9
    mxi1  
       2017-06-08 10:57:29 +08:00
    @uleh BLE 和 BT 的物理层是不一样的,但是复用了 BT 上面的协议层。
    stdying
        10
    stdying  
    OP
       2017-06-08 14:34:39 +08:00
    @mxi1 和 gatt 相关的都可以认为是和 BLE 有关
    @mxi1 还是需要看看协议,现在主要是在看代码,协议只是简单看过,需要认真看看协议
    mxi1
        11
    mxi1  
       2017-06-08 17:18:05 +08:00 via iPhone
    @stdying 协议的话,可以去 BT SIG 官网下载对应的说明文档,详细到令人发指的程度
    stdying
        12
    stdying  
    OP
       2017-06-08 20:27:21 +08:00
    @mxi1 主要是希望有人指点一下,这样更好些。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2812 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 07:22 · PVG 15:22 · LAX 23:22 · JFK 02:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.