Android Bluetooth 移植(上)

转载 2012年03月23日 18:53:55

原文链接地址:http://source.android.com/porting/bluetooth.html#androidBluetoothPorting

本文涵盖以下方面

·         移植

·        编译

·        疑难解答

·        工具

·        支持特性

 

Android 的蓝牙协议栈使用BlueZ实现来对GAP, SDP以及RFCOMM等应用规范的支持,并获得了SIG认证。由于Bluez使用GPL授权, 所以Android 框架通过D-BUS IPC来与bluez的用户空间代码交互以避免使用未经授权的代码。

Android 在应用框架framework中实现HSP和HFP(v1.5)规范,并且与电话应用(Phone App)配合紧密。

下图展示了蓝牙软件栈面向库的视图,在它下面是面向进程的视图。

图1 面向库的视图

图中使用实线的块是在android中实现的,而虚线的部分则由合作伙伴具体定制。

图2 面向进程的视图(基于1.0版本)

移植

BlueZ兼容bluetooth 2.1, 支持任意基于蓝牙2.1的芯片组, 并且后向兼容早期的版本。移植中有两个与芯片的结合点:

·        UART 驱动

·        蓝牙电源开关

UART 驱动

BlueZ内核子系统通过守护进程hciattach 与特定硬件的UART驱动进行绑定。

以MSM7201A为例,参考drivers/serial/msm_serial.c。你可能还需要编辑init.rc 中hciattach 的命令行选项。

蓝牙电源开关

Android V1.0与之前的版本采用不同的方式控制蓝牙芯片的电源开关。

1.0: Android 框架向/sys/modules/board_[PLATFORM]/parameters/bluetooth_power_on 写0或1.

Post 1.0: Android 框架使用linux中 rfkill 的API。

可以参考 arch/arm/mach-msm/board-trout-rfkill.c。

编译

为了使能Android的蓝牙功能,在编译时需要在 BoardConfig.mk中加入

BOARD_HAVE_BLUETOOTH := true

 

疑难解答

调试

在开始时,可以通过读log(adb logcat)并寻找蓝牙相关的 ERRROR 和 WARNING 信息来调试你的蓝牙实现, Bluez中也包含了一些十分有用的调试工具。下面按照推荐顺序提供了一些例子。

hciconfig -a                 #print BT chipset address and features. Useful to check if you can communicatewith your BT chipset.

hcidump -XVt                 #print live HCI UART traffic.

hcitool scan                 #scan for local devices. Useful to check if RX/TX works.

l2ping ADDRESS         #ping another BT device. Useful to check if RX/TX works.

sdptool records ADDRESS # request theSDP records of another BT device.

后台进程的Log

后台进程hcid (STDOUT)和 hciattach (STDERR)的log默认输出到/dev/null。可以编辑 init.rc 和 init.PLATFORM.rc 来使这些进程在 logwrapper下运行,从而将输出重定向到logcat.

hciconfig -a 和 hcitool

当使用你自己编译的system.img时, 如果 hciconfig -a 可以正常工作但hcitool 却不能正确扫描, 可以尝试为蓝牙芯片组安装固件。目前的开源代码库中并不提供该固件, 但是你可以通过使用 adb pull 然后 adb push从早期的T-MobileG1中获取 (位于 /etc/firmware/brf6300.bin).

工具

BlueZ 提供了一套丰富的基于命令行的工具用于调试与并与蓝牙子系统进行交互,其中包括:

·        hciconfig

·        hcitool

·        hcidump

·        sdptool

·        dbus-send

·        dbus-monitor


Android 蓝牙移植笔记

在android平台中,经常出现外围设备的移植,其中涉及到比较多模块的修改,比如kernnel, android(hardware, external, package)等模块都可能需求动。   ...
  • kehyuanyu
  • kehyuanyu
  • 2015年06月09日 15:53
  • 2045

android bluetooth蓝牙移植

前段时间移植神念系统需要使用到bluetooth功能,现将移植过程中碰到的问题简要列一下,备忘而已。 1、内核增加配置 make menuconfig -> Networking suppor...
  • zhengmeifu
  • zhengmeifu
  • 2012年06月30日 16:30
  • 7791

Android Bluetooth 移植(上)

本文涵盖以下方面·         移植·         编译·         疑难解答·         工具·         支持特性Android 的蓝牙协议栈使用BlueZ实现...
  • dinuliang
  • dinuliang
  • 2010年07月07日 03:46
  • 20295

android bluetooth 移植相关注意事项

移植过程 调试过程 uart驱动
  • xiaojsj111
  • xiaojsj111
  • 2013年10月12日 20:15
  • 14227

Android Bluetooth 移植(下)

支持特性下面这一节总结了Android各个release版本所支持得蓝牙特性的变化情况,并对未来可能支持的特性做了一个粗略的展望。Android 1.0 release平台特性(Platform fe...
  • dinuliang
  • dinuliang
  • 2010年07月13日 00:15
  • 4826

Android Bluetooth 移植

Android 的蓝牙协议栈使用BlueZ实现来对GAP, SDP以及RFCOMM等应用规范的支持,并获得了SIG认证。由于Bluez使用GPL授权, 所以Android 框架通过D-BUS IPC来...
  • cl11010
  • cl11010
  • 2013年02月02日 15:55
  • 1119

在mini2440上移植Bluetooth

在mini2440上移植Bluetooth (2013-07-24 20:37:09) (参考:http://blog.csdn.net/guoxiaojie_415/article/d...
  • yi412
  • yi412
  • 2014年09月18日 00:29
  • 1007

c++程序移植到android上问题记录

2013-5-30 第一个错误解决: 去掉改成#include  函数中并没有用到该头文件。 只有cout cin 会用到这个头文件 第二个错误: 改成#include  第三个错误...
  • Tan37Lu
  • Tan37Lu
  • 2014年04月18日 11:56
  • 1222

# Android6.0 之Bluetooth Enable流程分析

Android6.0 之Bluetooth Enable流程分析最近开始分析蓝牙模块代码,特在此记录一下,本文主要是基于Android6.0 代码的蓝牙系统服务的使能流程分析,涉及到的类有: fram...
  • u010093717
  • u010093717
  • 2017年03月09日 14:46
  • 566

ARM USB蓝牙,Bluez 移植。

标题:USB 蓝牙适配器在ARM 开发板下的使用: 关键字: dbus,bluez-lib, bluez-utils, USB 蓝牙,ARM 正文: 1、我的操作环境是   主机:xp + V...
  • ACanoe
  • ACanoe
  • 2012年05月26日 20:58
  • 7342
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Bluetooth 移植(上)
举报原因:
原因补充:

(最多只允许输入30个字)