前段时间移植神念系统需要使用到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 配置选项:

[*]Networkingsupport--->

<M>Bluetoothsubsystemsupport--->//蓝牙子系统必须选择

<M>L2CAPprotocolsuppor //逻辑链路控制和适配协议。

<M>SCOlinkssupport //蓝牙语音和耳机支持

<M>RFCOMMprotocolsuppor //面向流的传输协议,支持拨号网络等

[*]RFCOMMTTYsupport

<*>BNEPprotocolsupport //蓝牙网络封装协议,自组网支持

[*]Multicastfiltersupport //蓝牙多播,支持支持BNEP

[*]Protocolfiltersupport //蓝牙多播,支持支持支持BNEP

<*>HIDPprotocolsupport //基本支持协议

Bluetoothdevicedrivers--->

<*>HCIUSBdriver //USB蓝牙模块支持

<M>HCIUARTdriver //基于串口,CF卡或PCMCIA的蓝牙

<*>HCIBlueFRITZ!USBdriver

<*>HCIVHCI(VirtualHCIdevice)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

888messageb2928Sdbus-daemon--config-file=/usr/share/bluetooth/etc/d

889root3000Sshbluetoothd_server

900root4364Sbluetoothd–udev

可以看到有这三个进程,表示dbus服务启动了。

3.耳机使用

2.1 把耳机置于可搜索状态,(长按耳机开关键约10S左右,蓝色背景灯会闪三下后,处于长亮状态)

2.2 连接成功后蓝色背景灯会变成闪烁状态。

2.3耳机处于开机状态里,蓝色背景灯会不停的闪烁;若电量不足时,闪烁几下就会停止;长时间不用的话,也会停止闪烁,处于休眠状态,此时需要再次开机,才可使用。

4.测试命令:

3.1设备状态/system/xbin/

命令:hciconfig

返回信息:

hci0:Type:BR/EDRBus:USB

BDAddress:00:15:83:4D:F8:51ACLMTU:310:10SCOMTU:64:8

DOWN

RXbytes:2410acl:21sco:0events:119errors:0

TXbytes:1155acl:21sco:0commands:39errors:0

说明:DOWN表示设备没有启动。添加-a选项查看更多信息。

3.1.启动设备

命令:先执行hciconfighci0up,再执行hciconfig.

返回信息:

hci0:Type:BR/EDRBus:USB

BDAddress:00:15:83:4D:F8:51ACLMTU:310:10SCOMTU:64:8

UPRUNNINGPSCAN

RXbytes:3097acl:21sco:0events:144errors:0

TXbytes:1749acl:21sco:0commands:64errors:0

说明:UPRUNNING表示设备已经启动,PSCAN表设备处于可见状态。

3.2.扫描可用接入点

命令:hcitoolscan

返回信息:

00:23:78:D9:0B:ABBT2035

00:1D:FD:2E:AB:C1Nokia3110c

说明:00:23:78:D9:0B:AB即为蓝牙耳机地址,BT2035为设备名字。

3.3.配对。

命令:agent-ahci0000000:23:78:D9:0B:AB

返回信息:

Pincoderequestfordevice/org/bluez/897/hci0/dev_00_23_78_D9_0B_AB

Agenthasbeenreleased

__io_canceled=0,__io_terminated=1

说明:__io_canceled=0,__io_terminated=1表示配对成功。若失败则值为相反。

__io_canceled=1,__io_terminated=0

3.4.搜索服务。

命令:sdptoolbrowse00:23:78:D9:0B:AB

3.5.获取蓝牙适配器dbus服务地址。

命令:dbus-send--system--dest=org.bluez--print-reply/org.bluez.Manager.DefaultAdapter

返回信息:

methodreturnsender=:1.0->dest=:1.2reply_serial=2

objectpath"/org/bluez/872/hci0"

说明:/org/bluez/872/hci0是蓝牙适配器的路径。该路径并不是固定的。删除的时候会用到该路径。

3.6.查询蓝牙适配器下已经完成配对的设备。

命令:dbus-send--system--dest=org.bluez--print-reply/org/bluez/897/hci0org.bluez.Adapter.GetProperties

返回信息:

dictentry(

string"Devices"

variantarray[

objectpath"/org/bluez/897/hci0/dev_00_23_78_D9_0B_AB"

]

)

说明:若有objectpath"/org/bluez/897/hci0/dev_00_23_78_D9_0B_AB"该路径,表示蓝牙连接成功。

3.7.配对删除命令:

命令:dbus-send--system--dest=org.bluez--print-reply/org/bluez/897/hci0org.bluez.Adapter.RemoveDeviceobjpath:/org/bluez/897/hci0/dev_00_23_78_D9_0B_AB

返回信息:

methodreturnsender=:1.0->dest=:1.4reply_serial=2

3.8.录音测试

命令:arecord-d10-fcd-r8000-c1-twav-Dbluetooth/root/bluez_cap.wav或者hstestrecord/root/bluez_cap.wav00:23:78:D9:0B:AB1

3.9.ALSA放音测试

命令:aplay-Dbluetooth-c1/root/bluez_cap.wav或者hstestplay/root/bluez_cap.wav00:23:78:D9:0B:AB1

arecordaplay两个命令的参数说明如下:

-Dbluetooth:设备名,与单板“/root/.asoundrc”文件中的“pcm.bluetooth”对应。

-c1:通道数,蓝牙耳机通常只支持单声道。

-d10:录音时间为10秒。

-fcd:录音格式。

-r8000:采样率。

-twav:输出文件格式。

具体参数细节可通过“aplayh”或“arecordh”命令查询。

更多相关文章

  1. android 调用系统命令实现关机
  2. Recovery模式的命令行参数
  3. android系统执行命令权限问题(permission denied)
  4. Android开发中用到的命令—整理贴
  5. 蓝牙API
  6. Mac 配置Android(安卓)studio 环境变量
  7. Android(安卓)NDK C++ 开发利器:Android(安卓)Studio
  8. Android垂直tab导航栏、左侧竖直tab导航栏,支持viewpager,不依赖v
  9. [React-Native]Android(安卓)命令打包

随机推荐

  1. android DatePicker和TimePicke用法
  2. Android中将assets中的文件拷贝到sd卡
  3. Android音量调节
  4. WindowManger
  5. Android通过手势实现的缩放处理
  6. Android(安卓)-- App生成快捷方式
  7. Android核心技术-day02-03-获取手机内部
  8. Android(安卓)TabHost
  9. IntentService 和ResultReceiver
  10. Android圆形图片--自定义控件