现在的位置: 首页 > 综合 > 正文

Android平台开发-Bluez function porting-蓝牙功能移植

2018年08月25日 ⁄ 综合 ⁄ 共 1713字 ⁄ 字号 评论关闭
一、Bluez编译配置支持

    

    在BoardConfig.mk中添加:

    BOARD_HAVE_BLUETOOTH := true。

    

二、启动hciattach
 
    BlueZ核心子系统使用hciattach守护进程添加指定的硬件串口驱动。

    修改init.rc来启动hciattach:
    service hciattach /system/bin/hciattch -n -s 115200 /dev/ttyS2 bcm2035 115200

            user bluetooth

            group bluetooth net_bt_admin

            disabled

     

     同时也要启动dbus daemon,因为bluez需要dbus与其它进程通讯的。
用户可以在代码中通过调用property_service.c 中函数
property_set("ctl.start",hciattach)
property_set("ctl.stop",hciattach)
来使得android property service 去开启或结束
hciattach
service.

当然用户也可以在控制台直接使用命令
#setprop ctl.start
hciattach

#setprop ctl.stop
hciattach

来做同样的事情
 
三、Bluez控制流程
 
     class bluetoothsetting是UI的入口,通过按button scan进入搜索状态,

     applicaton层调用bluetoothdevice, 接着就是bluetoothservice的调用, 

     bluetoothservice调用native方法,到此全部的java程序结束了。

     下面的调用都是JNI, cpp实现的。android_server_bluetoothservice.cpp里面实现了native
     方法,最终通过dbus封装,调用 HCID deamon 的function DiscoverDevice。
     Bluetooth的启动流程是:
        1.  打开蓝牙电源,通过rfkill来enable;(system/bluetooth/bluedroid/bluetooth.c)

        2.  启动service hciattch -n -s 115200 /dev/ttyS2 bcm2035 115200;

        3.  检测HCI是否成功(接受HCIDEVUP socket来判断或hciconfig hci0 up);

        4.  hcid deamon start up。
 
 
四、Bluetooth结构
 
    1、JAVA层
       frameworks/base/core/java/android/bluetooth/
       包含了bluetooth的JAVA类。
以及frameworks/base/core/java/android/server/
    2、JNI层
       frameworks/base/core/jni/android_bluetooth_开头的文件
       定义了bluez通过JNI到上层的接口。
       frameworks/base/core/jni/android_server_bluetoothservice.cpp
       调用硬件适配层的接口system/bluetooth/bluedroid/bluetooth.c
 
    3、bluez库
       external/bluez/
       这是bluez用户空间的库,开源的bluetooth代码,包括很多协议,生成libbluetooth.so。
 
    4、硬件适配层
       system/bluetooth/bluedroid/bluetooth.c
       包含了对硬件操作的接口
       system/bluetooth/data/*
       一些配置文件,复制到/etc/bluetooth/。
       还有其他一些测试代码和工具。

抱歉!评论已关闭.