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. The prefix "mx" for element "mx:WindowedApplication" is not bound.

    <mx:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"  > ......出现了错误The p ...

  2. DG - 开启Active Data Guard

    在配置active data guard之前,phycial standby必须处于以下两个状态之一: (1)standby处于mount状态,并且redo apply正在运行中 (2)standby ...

  3. PAT 解题报告 1047. Student List for Course (25)

    1047. Student List for Course (25) Zhejiang University has 40000 students and provides 2500 courses. ...

  4. 从零开始PHP攻略(2)——操作符与迭代整理

    目录: 10.操作符整理 11.表单计算代码 12.优先级与结合性 13.可变函数 14.条件判断 15.循环迭代 16.跳出控制 17.可替换的控制结构 10.操作符 10.1 算术操作符 算术操作 ...

  5. java 线上问题定位工具

    在JDK的bin目录下有很多命令行工具: 我们可以看到各个工具的体积基本上都稳定在27kb左右,这个不是JDK开发团队刻意为之的,而是因为这些工具大多数是jdk\lib\tools.jar类库的一层薄 ...

  6. JAVA-封装-静态属性

    1.使用 1.static 2.用来修饰属性.方法.内部类.代码块 3.称为类属性,静态属性,类方法,静态方法 3.不需要实例化,直接用类名或静态成员名调用 2.特点 1.静态属性对于类的所有实例是共 ...

  7. jquery 数组求差集,并集

    var alpha = [1, 2, 3, 4, 5, 6], beta = [4, 5, 6, 7, 8, 9]; $.arrayIntersect = function(a, b){ return ...

  8. paper 7:支持向量机系列四:Outliers —— 介绍支持向量机使用松弛变量处理 outliers 方法。

    在最开始讨论支持向量机的时候,我们就假定,数据是线性可分的,亦即我们可以找到一个可行的超平面将数据完全分开.后来为了处理非线性数据,使用 Kernel 方法对原来的线性 SVM 进行了推广,使得非线性 ...

  9. Uploadify在MVC中使用方法案例(上传单张图片)

    在View视图中: <link href="/Scripts/uploadify-v3.2.1/uploadify.css" rel="stylesheet&quo ...

  10. PTPX Power Analysis Flow

    PrimeTime PX工具是PrimeTime工具内的一个feature. PTPX的功耗分析,可以报告出chip,block,cell的各个level的功耗. 使用PTPX可以分析的功耗的方式: ...