Android中蓝牙是通过system/bluetooth/bluedroid/bluetooth.c启动的。在这个文件中主要的函数完成的功能为:
<1> 检查蓝牙电源状态,和打开蓝牙电源
<2> 启动蓝牙,其中调用了1
<3> 关闭蓝牙
电源的状态是通过rfkill文件状态来标示的。在我们的平台没有rfkill。 在文件中直接屏蔽掉和蓝牙电源相关的函数。 主要的函数就剩下 bt_enable 和 bt_disable了。
在bt_enable中,首先使用property_set函数开启hciattach服务。然后HCIDEVUP,最后执行property_set函数开启hcid服务。
hciattach在init.rc中是没有的,手动添加
service hciattach /system/bin/hciattach -n /dev/ttyS1 any 38400 flow
user root
disabled
oneshot
注意: -n 这个选项很重要必须添加。否则,hciattach服务是不能启动的。
现在通过UI界面就可以启动蓝牙了