android bluetooth蓝牙移植,androidbluetooth

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

Bluetooth subsystem support  ---> //蓝牙子系统必须选择

L2CAP protocol suppor        //逻辑链路控制和适配协议。

SCO links support            //蓝牙语音和耳机支持

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蓝牙模块支持

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”命令查询。

http://www.dengb.com/fwqyw/1341340.htmlwww.dengb.comtruehttp://www.dengb.com/fwqyw/1341340.htmlTechArticleandroid bluetooth蓝牙移植,androidbluetooth 前段时间移植神念系统需要使用到bluetooth功能,现将移植过程中碰到的问题简要列一下,备忘而已。...

Linux内核配置蓝牙驱动,android bluetooth蓝牙移植,androidbluetooth相关推荐

  1. Linux内核配置网口驱动,linux内核编译,配置本机驱动

    1.前言 编译linux内核失败的原因很多时候就是驱动选错,适合自己本机的驱动没编译进去.面对特殊平台(或者有些洁癖者,我就是^_^),要编译精简内核,只要本机驱动,其他都不需要.面对内核里面这么多驱 ...

  2. linux驱动基础开发3——linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解-转

    前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式--在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢? ...

  3. Android Bluetooth蓝牙开发:发现Bluetooth蓝牙设备(1)

     Android Bluetooth蓝牙开发:发现Bluetooth蓝牙设备(1) Android Bluetooth蓝牙作为设备,要与其他蓝牙设备互联,那么先决条件就是已经被发现,本文先简介An ...

  4. arm linux 内核配置,Linux + ARM驱动开发环境配置(内核配置与编译)

    要想编写驱动,首先是建立内核目录树. ** 1.查看ARM开发板的内核版本 ** uname -a 我的arm开发板的版本是3.4.39 ** 2.安装必要的软件包 ** sudo apt-get i ...

  5. Android Bluetooth蓝牙enable过程

    Android Bluetooth蓝牙enable过程 Android Bluetooth框架 enable的追踪从settings app开始,一直到最底层的driver,基本按照上图的框架,把函数 ...

  6. Linux内核配置(转)

    2.5  Linux内核配置选项 下面以最新的Linux 2.6.20内核为例,介绍比较常用的一些Linux内核配置选项,其他选项读者可以参考系统提供的帮助信息. 需要说明的是,在内核配置中,某项选择 ...

  7. Linux 内核配置选项

    Linux 内核配置选项 第一部分 01.Code maturity level options ---> 代码成熟等级选项 01.01. [ ] Prompt for development ...

  8. Linux 内核配置选项(转)

    Linux 内核配置选项 from http://www.mitbbs.com/mitbbs_article_t.php?board=Linux&gid=10715608&ftype= ...

  9. linux内核配置大全

    linux内核配置选项大全 Posted by isnull  on December 20, 2010  in SHELL | 0 Comment Code maturity level optio ...

  10. Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

    前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式--在一个独立的文件夹通过makefile配合内核源码路径完成   那么如何将驱动直接编译进内核 ...

最新文章

  1. Hadoop概念学习系列之为什么hadoop/spark执行作业时,输出路径必须要不存在?(三十九)...
  2. NLP 新宠:谈Prompt的前世今生
  3. Python:在列表中查找
  4. rtp协议详解/rtcp协议详解
  5. proximinty
  6. cs文件中控制页面table的大小、title名称(.aspx)
  7. 全景摄像技术大有可为
  8. android 常用短语的添加,操作方法:使用Android上的百度输入法提供的导入词库和个性化短语,批量创建单词便于输入...
  9. linux中的变量前加__user,linux中的环境变量,别名,变量传递和函数块
  10. [模拟] leetcode 14 最长公共前缀
  11. Linux 配置网络
  12. oracle——expdp与impdp备份使用方法
  13. 卷积法求解光斑质心(附源码,C++、opencv)
  14. C/C++变量在内存中的位置及初始化问题
  15. 一维最大熵阈值分割法原理及实现
  16. 电脑计算机配置应用程序兼容性,电脑怎么打开兼容模式怎么办
  17. 2012共享文件服务器,win server2012 r2 服务器共享文件夹设置
  18. 瑞克和莫蒂 第三季6集
  19. 如何辩证看待技术与业务的关系
  20. 国产系统银河麒麟(龙芯MIPS)远程访问自研windows程序

热门文章

  1. 【机器视觉硬件】机器视觉硬件学习笔记2——工业相机
  2. java发送邮件被退回,从Java应用程序发送电子邮件中的异常:中继被拒绝
  3. 优动漫PAINT入门宝典(图层篇)——混合模式
  4. java web 注册登录_javaweb实现登录注册功能实例
  5. 微型计算机设计总结报告,微机课程设计心得体会范文
  6. php网站登录界面验证码打不开,php网站无法显示验证码
  7. ppt流程图箭头分叉_箭头循环图ppt模板_PPT结构图制作中箭头跟着目标走的技巧_ppt箭头流程图模板_ppt箭头循环图...
  8. CTF_crypto常见加密密文特征
  9. python将密文解密为明文_三分钟教你学会如何将密文解码成明文
  10. 【本科毕业设计】基于单片机的智能家居防火防盗报警系统