http://blog.csdn.net/zhengmeifu/article/details/7705172

前段时间移植神念系统需要使用到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蓝牙移植的更多相关文章

  1. 【转】Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析

    原文网址:http://blog.csdn.net/xubin341719/article/details/38584469 关键词:蓝牙blueZ  A2DP.SINK.sink_connect.s ...

  2. 【转】Android bluetooth介绍(二): android blueZ蓝牙代码架构及其uart 到rfcomm流程

    原文网址:http://blog.sina.com.cn/s/blog_602c72c50102uzoj.html 关键词:蓝牙blueZ  UART  HCI_UART H4  HCI  L2CAP ...

  3. Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址

    Android BLE与终端通信(一)--Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址 Hello,工作需要,也必须开始向BLE方向学习了,公司的核心技术就是BLE终端 ...

  4. 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 ...

  5. Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析

    关键词:蓝牙blueZ  A2DP.SINK.sink_connect.sink_disconnect.sink_suspend.sink_resume.sink_is_connected.sink_ ...

  6. Android bluetooth介绍(两): android 蓝牙源架构和uart 至rfcomm过程

    关键词:蓝牙blueZ  UART  HCI_UART H4  HCI  L2CAP RFCOMM  版本号:基于android4.2先前版本 bluez内核:linux/linux3.08系统:an ...

  7. Android BLE 蓝牙编程(四)

    接上篇,我们已经实现了短震,长震的功能了- 现在我们需要实现点击后一直震动的功能 开始我的想法是再循环中不断执行write方法,然而这个办法行不通. 系统会报错. 那要如何实现这个想法呢?其实很简单, ...

  8. Android BLE 蓝牙编程(三)

    上节我们已经可以连接上蓝牙设备了. 本节我们就要获取手环的电池电量和计步啦. 在介绍这个之前我们需要先了解下什么是 服务 什么是 UUID 我们记得上节中我们item监听事件的回调的返回值是Bluet ...

  9. Android BLE 蓝牙编程(二)

    大家中秋快乐啊--哈哈,今天继续工程项目吧! 上篇我们已经实现了蓝牙设备的扫描,本篇我们来通过list展示扫描到的设备并 实现点击连接. 先贴出上篇的完整的MainActivity的方法: packa ...

随机推荐

  1. openId 列表

    http://mp.weixin.qq.com/wiki/15/5380a4e6f02f2ffdc7981a8ed7a40753.html 根据OpenID列表群发[订阅号不可用,服务号认证后可用] ...

  2. Java NIO 开篇

    一些很好的blog(待更新): 1.NIO入门 2.NIO.2 入门,第 1 部分: 异步通道 API I- 就是从硬盘到内存 O- 就是从内存到硬盘 一.阻塞IO 第一种方式:我从硬盘读取数据,然后 ...

  3. wampserver2.6下UCenter1.6.0与UCenter Home2.0整合安装

    上一篇文章,我们已经安装了,ucenter1.6.0,所以此文介绍独立安装ucenter1.6.0与ucenter home2.0的整合安装. 1,)从官网下载UCenter_Home_2.0_SC_ ...

  4. XML工程配置文件的读写

    TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手.这个解析库的模型通过解析XML文件, ...

  5. Python学习总结16:时间模块datetime & time & calendar (三)

    calendar模块 常见函数及说明 1 calendar.calendar(year,w=2,l=1,c=6)   返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c. 每日宽度间隔为 ...

  6. Java基础(6):foreach 方法遍历数组

    foreach 并不是 Java 中的关键字,是 for 语句的特殊简化版本,在遍历数组.集合时, foreach 更简单便捷.从英文字面意思理解 foreach 也就是“ for 每一个”的意思,那 ...

  7. 创建一个web Test Plan

    1.添加ThreadGroup (1).线程组界面解析: 线程数:虚拟用户的个数 Ramp-up Period:开启每个用户的延迟时间,如果有5个虚拟用户,Ramp-up Period值是5,Jmet ...

  8. paper 87:行人检测资源(下)代码数据【转载,以后使用】

    这是行人检测相关资源的第二部分:源码和数据集.考虑到实际应用的实时性要求,源码主要是C/C++的.源码和数据集的网址,经过测试都可访问,并注明了这些网址最后更新的日期,供学习和研究进行参考.(欢迎补充 ...

  9. [php] How to debug PHP in the terminal

    Here I use Netbeans, xdebug to debug the PHP in the terminal of Ubuntu. 1. you have to install the x ...

  10. 开源软件free download manager在windows defender中报毒

    从官网上下载的fdm lite 3.9.6,从图片中可以看出安装包有数字签名,windows defender报毒,在线杀毒也检出木马,官网的程序更新到了3.9.6版本,在sourceforge上的源 ...