android bluetooth蓝牙移植
1、内核增加配置
make menuconfig -> Networking support -> Bluetooth subsystem support -->
进行选择BT选项,至少选择如下几项:
CONFIG_BT=y
CONFIG_BT_RFCOMM=y
#
# Bluetooth device drivers
#
CONFIG_BT_HCIBTUSB=y
ONFIG_BT_HCIBFUSB=y
其它的根据平台特性增减
此内核是否配置成功,可以在代码 system\bluetooth\bluedroid下的bluetooth.c文件
中加打印:
init_rfkill() 函数
如果没有配置ok的话则:
snprintf(path, sizeof(path), "/sys/class/rfkill/rfkill%d/type", id);
fd = open(path, O_RDONLY);
if (fd < 0) {
LOGW("open(%s) failed: %s (%d)\n", path, strerror(errno), errno);
return -1;
}
会打开文件失败的。
2、android系统配置
build\target\board\generic下面的generic.mk增加:
BOARD_HAVE_BLUETOOTH := true
这个是由于编译相关蓝牙代码时需要这个宏,请看:\system\bluetooth\android.mk
ifeq ($(BOARD_HAVE_BLUETOOTH),true)
include $(all-subdir-makefiles)
endif
在 external\bluetooth 也同样存在此宏起作用
3、启动项修改 init.rc
system\core\rootdir下init.rc文件增加:
service hciattach /system/bin/hciattach -n -s 115200 /dev/ttyS2 bcm2035 115200
user bluetooth
group bluetooth net_bt_admin
disabled
oneshot
请放在 service bluetoothd /system/bin/bluetoothd -n 类似这种语句的后面任意位置即可
4、代码修改
system\bluetooth\bluedroid下的bluetooth.c文件
这里由于在机顶盒上没有电源管理这块,所以对于power的操作代码需要屏蔽掉
简单的方法就是注掉函数:set_bluetooth_power 及 check_bluetooth_power
=====================================================================================================
附加在linux平台上调试及开发详细步骤:
1. 驱动配置与安装
1.1 配置选项:
[*] Networking support --->
<M> Bluetooth subsystem support ---> //蓝牙子系统必须选择
<M> L2CAP protocol suppor //逻辑链路控制和适配协议。
<M> SCO links support //蓝牙语音和耳机支持
<M> RFCOMM protocol suppor //面向流的传输协议,支持拨号网络等
[*] RFCOMM TTY support
<*> BNEP protocol support //蓝牙网络封装协议,自组网支持
[*] Multicast filter support //蓝牙多播,支持支持BNEP
[*] Protocol filter support //蓝牙多播,支持支持支持BNEP
<*> HIDP protocol support //基本支持协议
Bluetooth device drivers --->
<*> HCI USB driver //USB蓝牙模块支持
<M>HCI UART driver //基于串口,CF卡或PCMCIA的蓝牙
<*> HCI BlueFRITZ! USB driver
<*> HCI VHCI (Virtual HCI device) driver
其余的选项,根据自己的蓝牙设备进行调整。
!!!注意:将选项置于M,才可编译出ko
1.2 安装与卸载:
命令:insmod,rmmod
!!!注意:驱动需顺序安装 hci.ko -> btusb.ko -> l2cap.ko ->rfcomm.ko -> sco.ko
2. 配置文件
2.1 将配置文件复制到相应的目录下。
install目录下的文件复制到根文件系统下对应的目录。
主要的库文件:libbluetooth.so,libdbus-1.so,libexpat.so,libglib-2.0.so,libusb.so
2.2 需要开机启动dbus服务。
在/kmod/load 添加 . bluez_init
!!!注意“.”与”bluez_init”之间有空格。
重启后,执行ps
888 messageb 2928 S dbus-daemon --config-file=/usr/share/bluetooth/etc/d
889 root 3000 S sh bluetoothd_server
900 root 4364 S bluetoothd –udev
可以看到有这三个进程,表示dbus服务启动了。
3. 耳机使用
2.1 把耳机置于可搜索状态,(长按耳机开关键约10S左右,蓝色背景灯会闪三下后,处于长亮状态)
2.2 连接成功后蓝色背景灯会变成闪烁状态。
2.3耳机处于开机状态里,蓝色背景灯会不停的闪烁;若电量不足时,闪烁几下就会停止;长时间不用的话,也会停止闪烁,处于休眠状态,此时需要再次开机,才可使用。
4. 测试命令:
3.1设备状态 /system/xbin/
命令:hciconfig
返回信息:
hci0: Type: BR/EDR Bus: USB
BD Address: 00:15:83:4D:F8:51 ACL MTU: 310:10 SCO MTU: 64:8
DOWN
RX bytes:2410 acl:21 sco:0 events:119 errors:0
TX bytes:1155 acl:21 sco:0 commands:39 errors:0
说明:DOWN表示设备没有启动。添加-a选项查看更多信息。
3.1.启动设备
命令:先执行hciconfig hci0 up,再执行hciconfig.
返回信息:
hci0: Type: BR/EDR Bus: USB
BD Address: 00:15:83:4D:F8:51 ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING PSCAN
RX bytes:3097 acl:21 sco:0 events:144 errors:0
TX bytes:1749 acl:21 sco:0 commands:64 errors:0
说明:UP RUNNING 表示设备已经启动,PSCAN表设备处于可见状态。
3.2.扫描可用接入点
命令:hcitool scan
返回信息:
00:23:78:D9:0B:AB BT2035
00:1D:FD:2E:AB:C1 Nokia 3110c
说明:00:23:78:D9:0B:AB即为蓝牙耳机地址,BT2035为设备名字。
3.3.配对。
命令:agent -a hci0 0000 00:23:78:D9:0B:AB
返回信息:
Pincode request for device /org/bluez/897/hci0/dev_00_23_78_D9_0B_AB
Agent has been released
__io_canceled=0,__io_terminated=1
说明:__io_canceled=0,__io_terminated=1表示配对成功。若失败则值为相反。
__io_canceled=1,__io_terminated=0
3.4.搜索服务。
命令:sdptool browse 00:23:78:D9:0B:AB
3.5.获取蓝牙适配器 dbus服务地址。
命令:dbus-send --system --dest=org.bluez --print-reply / org.bluez.Manager.DefaultAdapter
返回信息:
method return sender=:1.0 -> dest=:1.2 reply_serial=2
object path "/org/bluez/872/hci0"
说明:/org/bluez/872/hci0 是蓝牙适配器的路径。该路径并不是固定的。删除的时候会用到该路径。
3.6.查询蓝牙适配器下已经完成配对的设备。
命令:dbus-send --system --dest=org.bluez --print-reply /org/bluez/897/hci0 org.bluez.Adapter.GetProperties
返回信息:
…
dict entry(
string "Devices"
variant array [
object path "/org/bluez/897/hci0/dev_00_23_78_D9_0B_AB"
]
)
…
说明:若有object path "/org/bluez/897/hci0/dev_00_23_78_D9_0B_AB"该路径,表示蓝牙连接成功。
3.7.配对删除命令:
命令:dbus-send --system --dest=org.bluez --print-reply /org/bluez/897/hci0 org.bluez.Adapter.RemoveDevice objpath:/org/bluez/897/hci0/dev_00_23_78_D9_0B_AB
返回信息:
method return sender=:1.0 -> dest=:1.4 reply_serial=2
3.8.录音测试
命令:arecord -d 10 -f cd -r 8000 -c 1 -t wav -D bluetooth /root/bluez_cap.wav或者 hstest record /root/bluez_cap.wav 00:23:78:D9:0B:AB 1
3.9.ALSA放音测试
命令:aplay -D bluetooth -c 1 /root/bluez_cap.wav 或者 hstest play /root/bluez_cap.wav 00:23:78:D9:0B:AB 1
arecord和aplay两个命令的参数说明如下:
-D bluetooth:设备名,与单板“/root/.asoundrc”文件中的“pcm.bluetooth”对应。
-c 1:通道数,蓝牙耳机通常只支持单声道。
-d 10:录音时间为 10 秒。
-f cd:录音格式。
-r 8000:采样率。
-t wav:输出文件格式。
具体参数细节可通过“aplay –h”或“arecord –h”命令查询。
android bluetooth蓝牙移植的更多相关文章
- 【转】Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
原文网址:http://blog.csdn.net/xubin341719/article/details/38584469 关键词:蓝牙blueZ A2DP.SINK.sink_connect.s ...
- 【转】Android bluetooth介绍(二): android blueZ蓝牙代码架构及其uart 到rfcomm流程
原文网址:http://blog.sina.com.cn/s/blog_602c72c50102uzoj.html 关键词:蓝牙blueZ UART HCI_UART H4 HCI L2CAP ...
- Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址
Android BLE与终端通信(一)--Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址 Hello,工作需要,也必须开始向BLE方向学习了,公司的核心技术就是BLE终端 ...
- vue app混合开发蓝牙串口连接(报错java.io.IOException: read failed, socket might closed or timeout, read ret: -1;at android.bluetooth.BluetoothSocket.connect at js/BluetoothTool.js:329)
我使用的uni-app <template> <view class="bluetooth"> <!-- 发送数据 --> <view c ...
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
关键词:蓝牙blueZ A2DP.SINK.sink_connect.sink_disconnect.sink_suspend.sink_resume.sink_is_connected.sink_ ...
- Android bluetooth介绍(两): android 蓝牙源架构和uart 至rfcomm过程
关键词:蓝牙blueZ UART HCI_UART H4 HCI L2CAP RFCOMM 版本号:基于android4.2先前版本 bluez内核:linux/linux3.08系统:an ...
- Android BLE 蓝牙编程(四)
接上篇,我们已经实现了短震,长震的功能了- 现在我们需要实现点击后一直震动的功能 开始我的想法是再循环中不断执行write方法,然而这个办法行不通. 系统会报错. 那要如何实现这个想法呢?其实很简单, ...
- Android BLE 蓝牙编程(三)
上节我们已经可以连接上蓝牙设备了. 本节我们就要获取手环的电池电量和计步啦. 在介绍这个之前我们需要先了解下什么是 服务 什么是 UUID 我们记得上节中我们item监听事件的回调的返回值是Bluet ...
- Android BLE 蓝牙编程(二)
大家中秋快乐啊--哈哈,今天继续工程项目吧! 上篇我们已经实现了蓝牙设备的扫描,本篇我们来通过list展示扫描到的设备并 实现点击连接. 先贴出上篇的完整的MainActivity的方法: packa ...
随机推荐
- js markdown chart flow
http://knsv.github.io/mermaid/#example-of-a-marked-renderer
- 使用dbms_system追踪其它session
dbms_system是内部包,建议在官方指导下使用该包. SQL> desc dbms_system PROCEDURE ADD_PARAMETER_VALUE Argument Name T ...
- runcluvfy.sh运行结果
$ ./runcluvfy.sh stage -pre crsinst -n rac11g1,rac11g2 -verbose Performing pre-checks for cluster se ...
- Hdu-3487 Splay树,删除,添加,Lazy延迟标记操作
HDU_3487 题意:给出n和q,n代表1-n的序列,接下来q有两种操作,Cut a b c:表示把区间[a,b]截掉然后放在第c个数的后面,Flip a b 表示把区间[a,b]反转,经过一系列的 ...
- gson使用注意事项
public static Object toBean(String jsonString, Class<?> beanclass) { GsonBuilder gsonb = new G ...
- Java获取当前内存及硬盘使用情况
import java.io.File; import java.lang.management.ManagementFactory; import com.sun.management.Operat ...
- Codeforces Round #284 (Div. 1)
A. Crazy Town 这一题只需要考虑是否经过所给的线,如果起点和终点都在其中一条线的一侧,那么很明显从起点走点终点是不需要穿过这条线的,否则则一定要经过这条线,并且步数+1.用叉积判断即可. ...
- 【cube】SSAS(分析服务)优化手册
优化前注意事项 1.数据质量.数据仓库中维度表的数据质量要严格保证.比如店仓的大区.省区.管理城市等属性和店仓代码没有一对多的上下级关系,这样在设计店仓维度时,就无法建立有效的层次结构.这会拖慢查询时 ...
- android fragment+ FragmentTabHost+viewpager 切换状态不保存的问题
转载请注明出处:http://blog.csdn.net/djy1992/article/details/46674169 @author dujinyang 难得有时间上来写博客. fragment ...
- paper 73 :HDR(High Dynamic Range Imaging)在摄影中指高动态范围成像
HDR(High Dynamic Range Imaging)在摄影中指高动态范围成像.国内的教程基本语焉不详,找到一篇比较详尽的国外教程翻译出来,希望对大家有帮助.^_^ 原文地址:http://p ...