找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

查看: 6519|回复: 18

[其他] 【转载】和菜鸟一起学android4.0.3源码之bluetooth移植心得

[复制链接]
连续签到天数:1天
签到总天数:95天
签到总奖励:592金币
发表于 2013-5-2 17:46:27 | 显示全部楼层 |阅读模式
本帖最后由 bluetooth 于 2013-5-2 17:47 编辑

近几周一直在移植bluetooth和wifi,看书的时间也没,也没有时间思考一些问题,总结一些移植碰到的困难之类的。前天,终于蓝牙也可以传输文件,通过a2dp播放音乐了,wifi也可以扫描到网络,并可以连接了,因为平台中有本地的一个nfs挂载,所以要上外网,必须要sd卡启动才可以。
昨天的台风“海葵”在家乡登陆,虽然家里没出什么事,但是家乡遭受到这14级台风,肯定损失惨重啊。在此只能默默地祝福了。昨天还知道了一件事,早上通过验证了,不知为何心里空空的,也不想去实验室了,只想默默地听听音乐,静静地呆在,什么也不想做。说的有点多了,只是我知道了,慢慢来,总会可以的,不用太在意这些。给人打工,永远是被剥削的。学长说的对,给多少工资,干多少活,再怎么努力,公司也不会给你太多的报酬,何必呢。所以把其他的时间都用来学习,用来创造美好的未来。好了,抱怨的够多了,下面还是开始谈谈我对android上bluetooth的移植吧。
对于bluetooth,linux底层驱动已经有了现成的驱动了,这里只要选上相应的就好了,在


中的选上相应的bluetooth和RF的两个选项


然后对于RF,选上两个就好


这里主要是bluetooth中有个RFKILL,用于判断那个按钮的开关状态的。
然后对于bluetooth

对于bluetooth device driver选上


因为开发的是uart的蓝牙,所以选上这个,又用了BCSP的协议。还有就是要准备好uart,如果只是用来传输文件的话,不用太高波特率的话,那么普通的uart就可以了,但是要达到上M的速度的话,必须要准备好高速uart。这里,要得到一个高速uart的节点,用于bluetooth的通信。好了,准备好了内核,接着就是android的事情了。
这里还有一个RFKILL的小小的说明,因为在创建android服务的时候才创建了rfkill0这个节点,然后就是节点里有个state和type,是在android中的蓝牙的硬件抽象层中要打开的,而这个有权限,所以后来在创建的时候就给他最高的权限了。具体在net/rfkill/core.c中,有个rfkill_dev_attrs,然后只要把修改为__ATTR(state, S_IRWXUGO, rfkill_state_show, rfkill_state_store), 和_ATTR(type, S_IRWXUGO, rfkill_state_show, NULL),这样就可以了。
接下来是android源码中的事情了,首先就是要在相应的平台下把蓝牙这个宏定义给选上。举个例子,比如说你的平台是samsung的Tuna平台,那么在device/Samsung/Tuna/BoardConfig.mk中有两个宏必须选上
BOARD_HAVE_BLUETOOTH := trueBOARD_HAVE_BLUETOOTH_BCM := true
这样再编译就可以了。
接着再看下android源码中对于bluetooth的一些代码主要的路径。
1、 Bluez的部分 /external/bluetooth/下
2、 bluez的适配层,也就是android上层通过jni往下调用驱动的硬件抽象曾。
/system/Bluetooth
3、 蓝牙的jni和java部分
这部分不用管太多,几乎不用去看,因为android上层一般都是木有问题的。
下面主要是对于那个选上的宏然后进行编译。首先是Bluez部分吧。主要是生成以下一个.so和应用程序
Libbluetoothd.so audio.a2dp.default.so bluetoothd hciconfig hcitool hciattach bccmd
然后再bluez的适配层了,mm后得到了libbluedroid.so。
最后就是那个jni层也是定义了相关的宏的。
frameworks/base/core/jni/android_server_BluetoothService.cpp中,可能已经编译过后会出问题,只要把所有的.o删除了重新mm后就可以了。这时会重新生成一个libandroid_runtime.so
编译基本上这样就OK了,剩下的就是去调试了。
在init.rc中添加hciattach的服务,因为是用bcsp协议的,所以服务格式如下。
setvice hciattach system/bin/hciattach –n –s 115200 /dev/ttyDMA1 bcsp 115200 class main disabled oneshot
接着就可以起来了,然后可以运行hciconfig就可以得到hci0这个设备了,如果不出现什么奇怪的事情的话,那么蓝牙就可以用了。
由于要用到a2dp,那么波特率115200是远远不够的,于是要用到921600的波特率,但是对于bcsp协议没有修改蓝牙内部的波特率的代码。而bcsp是基于csr的,所以可以用bccmd来修改波特率。
首先可以读取蓝牙内部的pskey的寄存器中波特率的值,默认的是115200,可以通过修改这个值来修改波特率的。
bccmd –t bcsp –d /dev/ttyDMA1 –b 115200 psget –r 0x01be
然后可以得到寄存器中的值472,对应于波特率是115200.所以我要设置波特率为921600的话,那么那个寄存器中的值应该是x=921600*472/115200=0xec0.
然后就可以用bccmd来设置波特率了
bccmd –t bcsp –d /dev/ttyDMA1 –b 115200 psset –r 0x01be 0xec0
这样,基本上就可以用bluetooth了。
至于a2dp这条路的话。主要上面的bluez中也已经有了audio.a2dp.default.so这个.so了,接着就是硬件抽象层中有个a2dp的接口,具体目录在/hardware/libhardware_legacy/audio/下,mm后得到audio_policy.default.so这个policy主要是处理音频通路的,因为这个策略是在有蓝牙连接的时候就使用蓝牙,否则是通过alsa出声音的。这样,只要连接上蓝牙的音频设备那么就可以播放音乐了。至此,android的bluetooth的移植到此就差不多完结了。剩下的就是优化和测试了。

原文地址:http://blog.csdn.net/eastmoon502136/article/details/7846796

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册  

×
楼主热帖
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!

暂无签到数据

发表于 2013-9-3 11:31:30 | 显示全部楼层
好好学习,天天向上
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:15天
签到总天数:3185天
签到总奖励:113320金币
发表于 2013-9-30 14:58:35 | 显示全部楼层
这个是bluez了
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:3天
签到总天数:141天
签到总奖励:794金币
发表于 2013-10-17 18:10:58 | 显示全部楼层
谢谢楼主分享
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:14天
签到总天数:3152天
签到总奖励:107725金币
发表于 2013-11-4 14:18:10 | 显示全部楼层
希望有用。。。
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:110天
签到总奖励:1169金币
发表于 2013-11-4 16:29:11 | 显示全部楼层
路过  学习下
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:2天
签到总天数:151天
签到总奖励:3879金币
发表于 2013-11-4 16:43:01 | 显示全部楼层
感谢分享,学习中
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:2天
签到总天数:67天
签到总奖励:479金币
发表于 2013-11-12 08:54:13 | 显示全部楼层
好好学习天天向上
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

暂无签到数据

发表于 2013-11-21 22:59:21 | 显示全部楼层
这个要多学习学习
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

连续签到天数:1天
签到总天数:7天
签到总奖励:26金币
发表于 2013-11-22 09:09:34 | 显示全部楼层
路过参观。
积分商城 - 让您的金币更有价值!||官方Q群 - 让您的沟通更加及时!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2024-4-20 10:40 , Processed in 0.629125 second(s), 25 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表