确认Android中是否有windows 蓝牙调试工具的工具hciconfig

11659人阅读
协议(14)
关键词:hciconfig& hcitool&hcidump作者:xubin341719(欢迎转载,请注明作者,请尊重版权,谢谢!)欢迎指正错误,共同学习、共同进步!!一、Hcitool1、这部分代码和hciconfig命令比较相似,不做详细分析命令对应执行函数、解释数据表:比如:hci scan命令,对应执行cmd_scan函数Idh.code\external\bluetooth\bluez\tools\hcitool.cstatic struct {
void (*func)(int dev_id, int argc, char **argv);
} command[] = {//命令定义描述
&Display local devices&
&Inquire remote devices&
&Scan for remote devices&
&Get name from remote device&
&Get information from remote device&
{ &spinq&,
cmd_spinq,
&Start periodic inquiry&
{ &epinq&,
cmd_epinq,
&Exit periodic inquiry&
&Submit arbitrary HCI commands&
&Display active connections&
&Create connection to remote device&
&Disconnect from remote device&
&Switch master/slave role&
&Change connection packet type&
&Display connection RSSI&
&Display link quality&
&Display transmit power level&
&Display AFH channel map&
&Set/display link policy settings&
&Set/display link supervision timeout& },
&Request authentication&
&Set connection encryption&
&Change connection link key&
{ &clkoff&, cmd_clkoff, &Read clock offset&
{ &clock&,
cmd_clock,
&Read local or remote clock&
{ &lescan&, cmd_lescan, &Start LE scan&
&Create a LE Connection&,
&Disconnect a LE Connection&,
&Try to get rid of scatternets&,
{ NULL, NULL, 0 }
2、 hcitool常用方法(1)、hcitool帮助命令hcitool –h(2)、hcitool dev 显示本机MAC地址root@android:/ # hcitool dev
hcitool dev
00:16:53:96:22:53
(3)、hcitool inqroot@android:/ # hcitool inq
hcitool inq
Inquiring ...
C4:6A:B7:21:79:C8
clock offset: 0x7e48
class: 0x5a020c
1C:66:AA:66:68:2E
clock offset: 0x5e27
class: 0x5a020c
AC:72:89:85:90:2A
clock offset: 0x13ec
class: 0x4a0100
68:17:29:78:37:4A
clock offset: 0x5185
class: 0xff0104
B0:C4:E7:65:A7:3A
clock offset: 0x267e
class: 0x5a020c
(4)、hcitool scan扫描周围设备(5)、hcitool name 8C:71:F8:AE:2A:C0(对应要获取名字的BT mac地址)(6)、hcitool info 8C:71:F8:AE:2A:C0(对应要获取名字的BT mac地址)(7)、hci clock1|root@android:/ # hcitool clock
hcitool clock
Accuracy: 0.00 msec
二、hcidump常用方法1、 hcidump& -Xt 终端下显示相应HCI信息。1、& hcidump –Bw /data/bt1.cfa(android2.3下)/data/bt1.cfa为文件路径hcidump& –w& /data/bt1.cfa(android 4.0下)用capture file viewer打开(frontline comprobe protocol analysis system 13.8)入下图就可以分析相应的协议。(2)、hcidump -tr bt_0.log 显示bt hci log信息(3)、hcidump -r bt_0.log(4)、hcidump –Rtw&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1361197次
积分:9778
积分:9778
排名:第1903名
原创:68篇
评论:486条
(3)(7)(4)(5)(3)(1)(2)(3)(1)(5)(9)(11)(1)(1)(2)(11)(2)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'4426人阅读
【Android之Bluetooth】(5)
android4.2以后,增加了bludroid,在做测试时,会发现与之前的bluez的测试,有着较大的变动。下面罗列一些bluedroid的不同点,以及之前bluez的测试命令验证(该部分是用bluez做的测试,针对bluedroid的测试后续会补充)。
对蓝牙栈bluedroid的测试变动:
1. 已经没有 bttest 的测试工具,也就说没有bt_enable(), bt_disable()的功能来打开和关闭蓝牙
2. 一些Bluedroid中没有的测试功能。
hcitool, hciconfig,rctest, l2test,Sdptool。而蓝牙 FTM 的测试工具还是有的。
3. bluedroid中所有的log均可以在log cat中查看,不像之前的bluez,一部分在log cat中,一部分在 kernel log中。并且,bluedroid对不同的profile和层次的log进行了分类(对BTM, HCI, L2CAP, RFCOMM, OBEX),在bt_stack.conf中可以进行配置 ,并想android中的Log一样,可以对输出的log做输出等级的调整(0-6来表示)。
对bluez的测试命令:
网上已经有很多资料了,找到一篇不错的资料:
原文地址:http://blog.chinaunix.net/uid--id-3554423.html&&&&& 这里感谢作者的分享!
由于原文作者虽说明了蓝牙是用的BlueZ的蓝牙栈,但未注明所使用的手机版本和型号,为了保险起见,下面是针对里面的命令做下测试。
我的环境:Android 4.1.1 蓝牙栈:BlueZ
命令行测试蓝牙
1. 命令行控制蓝牙开关
cd /data/data/com.android.providers.settings/databases
sqlite3 settings.db
select * from secure where name=&bluetooth_on&; (查看是否打开)
update secure set value=1 where name=&bluetooth_on&;& (这里的value=1是打开,0是关闭)
select * from secure where name=&bluetooth_on&; (确认是否更改成功)
reboot &重启手机生效&
2. 命令行操作蓝牙
Android原生包括高通QRD用的是blueZ的蓝牙协议栈,有提供两个工具:hciconfig和hcitool用于调试蓝牙,开始调试前首先需要将这些工具Push到手机上:
adb remount
adb push hciconfig /system/xbin
adb push hcitool /system/xbin
chmod -R 777 /system/xbin
要注意的是,这些工具只适用于blueZ,象MTK用的是bluetoothangel就不适用了
常用的一些命令:
hciconfig -a (查看蓝牙地址,芯片状态等等)
hcitool scan (进行蓝牙搜索,并列出搜索到的设备名称和设备地址)
hciconfig hciX piscan (开启Inquiry Scan和Page Scan,使手机处于可被搜索和可连接状态)
可以使用hciconfig --help以及hcitool --help来查询其它的功能,尤其要提的是hcitool cmd这个命令,通过这个命令可以发送任何的HCI Command,大部分蓝牙功能都可以通过发送HCI Command来实现,具体HCI Command格式可以查询蓝牙Spec
进入测试模式的命令:
hcitool cmd 0x06 0x0003 (Enter Test Mode)
hcitool cmd 0x03 0x 0x00 0x02 (Auto Accept All Connections)
hcitool cmd 0x03 0x001A 0x03 (Page Inquiry Scans)
hcitool cmd 0x03 0x (Disable Authentication)
hcitool cmd 0x03 0x (Disable Encryption)
Qualcomm bt test :
the follow commands to bring up bt through adb shell:
&#echo 1 & /sys/class/rfkill/rfkill0/state
#hci_qcomm_init -vvv -e
#hciattach /dev/ttyHS0 qualcomm-ibs 3000000
#hciconfig hci0 up
#hcitool scan
The follow commands are used to enter test mode.
&#bttest disable
#bttest enable
#bttest enable_dut_mode
测试后,均可正常使用。对bluedroid的实际测试,之后会回来补充。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:469655次
积分:8619
积分:8619
排名:第2377名
原创:214篇
转载:308篇
译文:10篇
评论:44条
(7)(1)(5)(2)(2)(5)(4)(28)(1)(1)(5)(2)(1)(2)(1)(2)(6)(2)(7)(3)(2)(3)(3)(1)(1)(16)(2)(3)(8)(4)(9)(9)(12)(17)(5)(39)(26)(14)(6)(4)(9)(25)(74)(152)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'&>&android shell下调试wifi/bluetooth的工具iwlist/hciconfig
android shell下调试wifi/bluetooth的工具iwlist/hciconfig
上传大小:806KB
android shell下调试wifi/蓝牙的工具iwlist iwconfig iwpriv hciconfig hcitool
综合评分:4.3(71位用户评分)
所需积分/C币:
下载个数:345
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有54条
解了燃眉之急,提示需要xxx.so库,无法运行,请同事处理一下,可以运行了!
听好的,刚好可以参考
hcitool在三星SIII的4.2版本上能用,谢天谢地。3分拿去吧
我放到android5.1上会报错,运行不了。。。。
1|root@rk3288:/system/bin # hciconfig --help
hciconfig --help
error: only position independent executables (PIE) are supported.
1|root@rk3288:/system/bin #
不错,wifi相关指令运行正常
不错,可在android上直接运行。
还我的分数!!!
android5.1 用不了。
提示需要xxx.so库,无法运行。
非常好!!!
审核通过送C币
电子书《Linux Perf Master》
创建者:zijingshanke
创建者:lijunhu
创建者:chenhongxin
上传者其他资源上传者专辑
华为mu609 specification
updater-script自制升级包
home web server
手动拨号工具chat
Google应用套件
操作系统热门标签
VIP会员动态
找不到资源?发布悬赏任务百万程序猿帮你提供!
下载频道部分积分规则调整公告
开通VIP,海量IT资源任性下载
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
android shell下调试wifi/bluetooth的工具iwlist/hciconfig
会员到期时间:
剩余下载个数:
剩余C币:0
剩余积分:6726
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
全站1200个资源免积分下载
资源所需积分/C币
当前拥有积分
当前拥有C币
全站1200个资源免积分下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
全站1200个资源免积分下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
android shell下调试wifi/bluetooth的工具iwlist/hciconfigandroid&4.0&蓝牙服务开启流程分析
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。博客访问: 2788634
博文数量: 1027
博客积分: 12961
博客等级: 上将
技术积分: 11209
注册时间:
偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头).
信息爆炸的时代, 学习是一项持续的工作.
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
Bluez的官方网址:http://www.bluez.org/ 这里提供最新的源码下载&Bluez开发者&关于如何使用和配置Bluez? 硬件平台:基于ARM的嵌入式板子&? 蓝牙芯片:CSR BC4 ROM 版本芯片,不带eeprom&? 软件环境:Linux 2.6.21 ,自制文件系统&? Bluez版本:bluez-libs 3.22 bluez-utils 3.22&2 编译&2.1 内核&相信多数人使用的都是2.6的内核了,在2.6的内核中要支持Bluez,只要你的内核版本不是太旧,无需打Patch,直接配置好就OK了,内 核里面的代码相对比较稳定了。当然,Bluez对一些Bluetooth协议栈新特性的支持,还是需要更新kernel代码的。你应该确认你使用的 kernel版本是否以及包含了对应的支持。&内核的配置,基本上把 networking下 --- Bluetooth subsystem support 里的以下几项全部选上即可:&L2CAP protocol support&SCO links support&RFCOMM protocol support&RFCOMM TTY support&BNEP protocol support&HIDP protocol support&此外,在Bluetooth device drivers里选上你所需要支持的Bluetooth设备。我使用的CSR的chip是我们直接build在板子上,通过串口和cpu通讯的,芯片默认使用BCSP作为通讯协议,所以我选择了:&HCI UART driver&BCSP protocol support&如果你是通过usb接口使用蓝牙适配器,需要选择&HCI USB driver&2.2 Bluez Lib / Utils&Bluez Lib的编译比较简单,而Bluez-Utils所依赖的库就比较多了,大体包括 dbus alsa hal gstreamer openobex xml等等,仔细观察./configure 的输出,将所需要的包先安装或者build好。&值得注意的一点是:&如果你需要打开所有的功能模块的支持,需要在 ./configure 参数中添加 --enable-all --enable-audio --enable-input --enable-network –enable-serial 等,在3.22版本中 --enable-all 居然不包括 audio等相关模块的service的编译,不知道是否是因为还保留了daemon和service等不同方案的缘故。不过,这至少与他的 configure --help 对于 --enable-all 的描述是不符合的。&3 蓝牙硬件初始化及基础服务启动&如果在PC环境下,使用Ubuntu,调用 /etc/init.d/bluetooth start 应该就能完成这一步的工作了。下面叙述一下在我的嵌入式环境下,如何手动完成这一步骤。&3.1 何谓硬件初始化&硬件初始化,指的是配置蓝牙芯片,将其置于一个能够正常通讯的状态。&对于CSR的芯片来说,就是通过设置PSKEY,设置其晶振频率,UART波特率等等一些关键参数。 如果使用的是USB形式的适配器,因为其EEPROM存储了相关的默认参数,这一步很可能不需要做,而我使用的是不带EEPROM的ROM版本芯片,如何 正确完成初始化工作着实让我折腾了一阵。&对于其它芯片,没有太多研究,不过,据我有限的了解,TI的芯片在hciattach时也需要完成一些额外的初始化工作,其它如ST的芯片则可能需要下载firmware。&3.2 硬件初始化步骤&通常蓝牙芯片的初始化和协议绑定可以通过 hciattach 来完成(通过配置bluez的启动脚本,可以不需要使用hciattach,标准发行版应该都是不用hciattach,如何配置,还没有研究 。。。 8 )&Hciattach 需要的参数主要包括 TTY节点,设备类型,波特率等。多数类型的设备的初始化工作,在选择了正确的设备类型参数后,都由hciattach在init_uart函数中调用具体的初始化函数所完成。&很遗憾的是,因为要重新设置晶振频率和波特率,并同步BCSP协议,这种方式好像处理不了我所使用的芯片(不排除我没有找到正确的解决方案的可能 性),我最终的解决办法是在hciattach之前,使用Bluez-utils里的BCCMD工具先完成这些PSKEY的设置工作。&具体命令是:&bccmd -t bcsp -d /dev/ttyS1 psload -r csr.psr&在这时,由于HCI接口还没有启动,所以只能使用BCSP协议来进行通讯,我的设备是暴露在ttyS1下,你的可能不一样,-r参数指明在psload完成 PSKEY的批量加载操作之后,对芯片进行Warmreset,否则这些参数的修改不会起作用。&Csr.psr的内容取决与你的芯片,我的大致如下:&// PSKEY_ANA_FREQ&&01fe = 9C40 // 相当于40M的晶振&// PSKEY_UART_BAUD_RATE&&01be = 0EBF // 921600的波特率&// PSKEY_UART_SEQ_WINSIZE&&0407 = 0006&// BDADDR&&0001 = 66 7788&。。。&这里有个问题,你会发现,通过bccmd -t bcsp psset 命令理论上应该是可以单步设置每一个PSKEY的,但是从我实践看来,单步的操作在两次对bccmd的调用过程中,上一次对PSKEY的修改,都会在下一 次调用之前被复位,从代码上看估计和BCSP协议的同步过程有关。&3.2.1 关于PSKEY的获取&如何获得正确的完整的PSKEY参数,大概会有几个途径:&? 通过CSR的网站下载boot_strap包,这是CSR自己的BCHS协议栈所使用的初始化代码,在里面找到你所需要的pskey值。&? 下载CSR的bluesuite工具,里面包含了一个叫pstool的工具,可以用它来读写CSR的Casira开发板或其它BT设备的PSKEY设置,试验并找出你能用的参数。&? 找CSR或模组厂商支持 8 )&不过,基本上来说,如果只是要让芯片通过串口能够和Bluez协议栈正常通讯上,只需要设置PSKEY_ANA_FREQ 和 PSKEY_UART_BAUD_RATE 这两个PSKEY就可以了。&3.3 Daemon进程的启动&早先的版本里,Bluez的Daemon很多,但是最近的版本,很多daemon都转为service的形式来做了,3.22 里面包括了以下这几个Service,其它profile貌似还保留着daemon的形式。&bluetoothd-service-serial&bluetoothd-service-network&bluetoothd-service-audio&bluetoothd-service-input&这几个Service的启动依赖于hcid的启动以及相关的配置文件&主要配置文件位于:/etc/bluetooth/&此外,通常还需要启动SDP来提供服务查询,另外,Bluez本身还依赖于Dbus daemon的运行。&所以,整体上来说,我的手动启动Bluez的全过程如下:(其中内核代码是以模块形式编译的)&insmod bluetooth.ko&insmod hci_uart.ko&insmod l2cap.ko&insmod rfcomm.ko&insmod sco.ko&insmod hidp.ko&/etc/rc2.d/S20dbus start&bccmd -t bcsp -d /dev/ttyS1 psload -r csr.psr&hciattach -s 921600 /dev/ttyS1 bcsp 921600&hciconfig hci0 up&sdpd&hcid –d&4 Paring配对&4.1 Passkey_agent&在正常使用一个蓝牙设备前,通常都需要对该设备进行配对绑定的操作。&Bluez的配对机制貌似也修改了几次,2.x版本中通过pin_helper来处理pin code的应答,3.22版本里使用的配对机制,其API是基于Dbus来实现的,需要向dbus注册一个agent,PC的发行版通常都会有一些基于各 种图形库的passkey_agent,对于嵌入式系统,这部分代码可以想象,应该是要按照相应的API自己实现一个,为了测试,我直接使用了 bluez-utils/daemon 目录下的passkey-agent&这是一个命令行下的可以使用预先设定的pin code进行配对的程序&为了使用它,我的文件系统里 /etc/Bluetooth/hcid.conf 中 option一节类似如下 :&# HCId options&options {&# Automatically initialize new devices&&# Security Manager mode&# none - Security manager disabled&# auto - Use local PIN for incoming connections&# user - Always ask user for a PIN&#&&# Pairing mode&&# Do the same as "hciconfig hci0 down" when SetMode("off")&# is called.&&# Default PIN code for incoming connections&passkey "1234";&}&4.2 关于自动配对和请求的发起&配对的发起,这里主要是从请求的发起者是谁的角度来说。&通常可能不需要关心配对请求是由本地还是由远端发起的,使用passkey_agent都能够正确处理。&不过如果在hcid.conf中将 Security Manager mode 设置为 auto,则Bluez会将passkey后面的字符串作为默认的Pin code,自动答复远端发起的配对请求。这是在没有使用passkey_agent的情况下的一种配对方式。&在这种情况下,Bluez可以处理远端的配对请求,但是对于本地发起的配对请求,将无法正确处理,我没有仔细的分析原因,或许是代码特意设计成这 种工作方式。所以在无法明确知道谁将会主动先发起配对请求的情况下,使用Atuo模式,可能就会出现有些时候设备能绑定有些时候不能绑定的现象。&通常如果是由本地设备搜索发现的新设备,配对绑定的操作应该也是由本地发起。&另外可以观察到,对远端一个非PC类的蓝牙设备,如蓝牙耳机,如果上次绑定过,在耳机启动时会主动发起连接请求,如果本地的link key丢失了,也就会再走一次绑定的流程,这种情况下配对请求就是由远端设备发起的。&5 A2DP&A2DP蓝牙立体声应该是蓝牙最常见的Profile之一。&2.x版本的Bluez,对A2DP的支持是通过BTSCO来实现的,3.22的版本通过bluetoothd-service-audio来支持。&对Bluez A2DP profile的支持,还依赖于Alsa或Gstreamer。&5.1 配置&测试A2DP的时候,我使用的是aplay,同时在相关的配置文件里面写死了蓝牙耳机的地址&主要的配置文件包括:&/etc/asound.conf :&pcm.bluetooth{&type bluetooth&device 00:02:5B:00:C1:A0&profile "hifi"&}&/etc/bluetooth/audio.conf :&[General]&# disable=Sink&SCORouting=PCM&[Headset]&DisableHFP=true&[A2DP]&SourceCount=2&配置好这些以后,使用 aplay -D bluetooth sample.wav 进行测试。&值得注意的是,使用Aplay打开蓝牙设备进行播放,需要有如下两个Alsa的plugin:&/usr/lib/alsa-lib/libasound_module_pcm_bluetooth.so&/usr/lib/alsa-lib/libasound_module_ctl_bluetooth.so&这两个so文件可以在bluez-utils 里面找到。需要注意他们和libasound 的版本匹配。&5.2 问题&在测试中发现,如果连接的耳机是由PC上的蓝牙适配器提供的AV耳机服务,那么配对可以完成,但是连接会失败,真正的耳机则没有这个问题,不知道 是否是因为以上的方法还存在缺陷?尝试使用由DBUS发起命令的形式来连接PC的AV耳机服务,也是一样的问题。是否连接PC模拟的AV耳机服务,首先要 切换设备的role?&没有测试Ctl接口&如何动态选择不同的耳机,而不是写死在脚本里?(这个想来估计是要自己基于Alsa的API编程处理,aplay无法直接完成测试)&播放大文件会出现under run错误,需要测试是由与波特率设置不够高造成,还是SBC编码效率不够,还是这个版本里存在的bug。&6 DUN的使用&Dun profile运行于rfcomm之上,主要是通过蓝牙接口暴露一个Modem的接口,用于提供拨号上网服务。&在这里所讨论的不是提供拨号上网服务本身,而是使用外部设备所提供的这个服务,进行网络连接。&6.1 系统配置&通常为了使用DUN,或者任何一个其它类型的Modem,我们会通过PPP协议来拨号和建立网络连接。&首先需要内核的支持,可以简单的把 device drivers -& Network device support 下面的PPP相关的内容全部选上。&其次,要编译应用层的PPP包,我的测试是基于ppp-2.4.4&主要的两个ppp配置文件:&/etc/ppp/peers/gprs:&/dev/rfcomm0&115200&defaultroute&usepeerdns&nodetach&noauth&local&debug&connect "/usr/sbin/chat -v -f /etc/ppp/chat-gprs"&/etc/ppp/chat-gprs:&TIMEOUT 10&ABORT 'BUSY'&ABORT 'NO ANSWER'&ABORT 'ERROR'&"" 'ATZ'&SAY 'Init....\n'&OK 'AT+CGDCONT=1,"IP","CMWAP"'&ABORT 'NO CARRIER'&SAY 'Dialing....\n'&OK 'ATD*99***1#'&CONNECT ''&前面一个配置文件基本就是那样了,后面一个,这两句要根据你的SIM卡的实际情况来处理:&OK 'AT+CGDCONT=1,"IP","CMWAP"'&OK 'ATD*99***1#'&这里我设置的是使用中国移动的CMWAP。&此外,使用CMWAP还需要设置你的浏览器的代理服务器:10.0.0.172 端口9201&6.2 连接步骤&首先是要查找提供dun服务的设备,将服务提供在哪个channel通道上。这可以通过sdptool来查看,在我的设备上查询的结果是在channel 1上:&~ # ./sdptool browse 00:08:C6:77:A0:6C&Browsing 00:08:C6:77:A0:6C ...&Service Name: Dial-upnetworking&Service RecHandle: 0x10000&Service Class ID List:&"Dialup Networking" (0x1103)&"Generic Networking" (0x1201)&Protocol Descriptor List:&"L2CAP" (0x0100)&"RFCOMM" (0x0003)&Channel: 1&Profile Descriptor List:&"Dialup Networking" (0x1103)&Version: 0x0100&其次,如果rfcomm所需设备节点不存在,将其创建:&mknod -m 666 /dev/rfcomm0 c 216 0&然后就是拨号了,如果该设备之前没有绑定,这过程中会自动发起绑定操作:&pppd debug dump call gprs &&完成以后就可以看到 ppp0这样一个网络接口了。&~ # ifconfig&ppp0 Link encap:Point-to-Point Protocol&inet addr:10.154.76.82 P-t-P:192.200.1.21 Mask:255.255.255.255&UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1&RX packets:4 errors:0 dropped:0 overruns:0 frame:0&TX packets:6 errors:0 dropped:0 overruns:0 carrier:0&collisions:0 txqueuelen:3&RX bytes:64 (64.0 B) TX bytes:101 (101.0 B)&7 Bluez相关的各种tools的使用&在这一段折腾Bluez的时间里,越来越发现Bluez相关的许多工具做得还是挺好用的,主要在Bluez-utils/tools 目录下。只是有一点让我很遗憾,除了man以外很难找到更多的帮助文档,而man文档本身对一些功能的描述也不是很详细。&其中有些选项,如果你不了解蓝牙协议栈,或者没有查阅过相关蓝牙芯片的一些文档,很难搞明白是什么意思,甚至有些选项的具体参数值的设定,如果不读源码你都无从得知有哪些备选值。。。。&能力有限,下面所写的只是我所用过的有限的几个工具的一些使用经验,希望能有所帮助。&7.1 Bccmd&Bccmd是用来和CSR的芯片进行BCCMD(Bluecore command protocol)通讯的一个工具。BCCMD并非蓝牙协议栈的标准,而是CSR芯片的专属协议&Bccmd的调用格式为:bccmd [-t &transport&] [-d &device&] &command& [&args&]&Tansport类型包括 HCI USB BCSP H4等,常用的估计就是HCI和BCSP两种。需要注意一下他们的使用场合:&HCI是一个抽象的标准的蓝牙通讯接口,在基于HCI协议调用BCCMD时,需要在Bluez已经建立好hci接口的基础上使用。&BCSP(Bluecore Serial Protocol)是CSR自己制定的传输层协议,主要目的是用来加强在没有使用CTS、RTS进行流量控制的情况下进行可靠的数据传输的能力。其概念是 相对H3 , H4而言,( 具体分析,请参考下面杂项一章中相应的小节 )&BCCMD的主要用途就是用来读写pskey,这里以 psset 这个command来介绍一下格式:&Psset 格式如下: psset [-r] [-s &stores&] &key& &value&&其它都好理解,关键是-s参数之后跟的store具体的含义。这个参数可以是数值也可以是字符串&查询CSR的BCCMD相关的文档,可以找到具体的含义如下:&0x0000 Default&0x0008 psram&0x0001 psi&0x0002 psf&0x0004 psrom&0x0003 psi then psf&0x0007 psi, psf then psrom&0x0009 psram then psi&0x000b psram, psi then psf&0x000f psram, psi, psf then psrom&CSR的蓝牙芯片中,PSKEY可能存储在 rom flash eeprom ram等介质里,这里的数值指明了psset/get命令操作PSKEY时所针对的存储介质及其优先顺序,通常我们会用 –s 0x0 或 –s “default” 来使用该命令,0x0的含义与0xf一样。&值得注意的是,哪个参数是有效的,还取决于哪一类的存储介质实际存在于蓝牙芯片中,此外,只读类的介质对写操作类的命令也是无效的。&基本上来说,所修改的都是位于psram中的pskey,此外,pskey修改以后要起作用,还要一并使用 –r参数,或直接用warmreset命令将蓝牙芯片进行warm reset。&7.2 Hciattach&Hciattach主要用来初始化蓝牙设备,它的命令格式如下:&hciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] &tty& &type | id& [speed] [flow|noflow] [bdaddr]&其中最重要的参数就是 type和speed,type决定了要初始化的设备的型号,可以使用 hciattach –l 来列出所支持的设备型号。&并不是所有的参数对所有的设备都是适用的,有些设备会忽略一些参数设置,例如:查看hciattach的代码就可以看到,多数设备都忽略bdaddr参数。&Hciattach命令内部的工作步骤是:首先打开制定的tty设备,然后做一些通用的设置,如flow等,然后设置波特率为 initial_speed,然后根据type调用各自的初始化代码,最后将波特率重新设置为speed。所以调用hciattach时,要根据你的实际 情况,设置好initial_speed和speed。&对于type BCSP来说,它的初始化代码只做了一件事,就是完成BCSP协议的同步操作,它并不对蓝牙芯片做任何的pskey的设置。同步操作的具体流程和规范可以参考CSR的相关文档: BCSP Link Establishment Protocol&7.3 其它&下面几个,使用了,但是没有太多研究&7.3.1 Hcidump&Hcidump不在bluez-utils包里,而是在单独的hcidump包里。主要用来分析捕获和分析HCI数据包,如果使用bluez过程 中出了什么问题,用hcidump往往可以发现一些出错的线索,原因。 参数很多,基本上hcidump –X –V 就可以帮你获得详细的经过格式解析的数据包。&7.3.2 Hcitool&主要用hcitool来scan远端的设备,显示设备地址,名称等。&例如:Hcitool scan, hcitool inq&7.3.3 Sdptool&主要用来浏览远端设备SDP服务,或者管理本地的SDPD维护的数据库。&常用的应该就是查找远端设备的服务了&例如:&sdptool browse 00:02:72:B0:00:26 浏览地址为00:02:72:B0:00:26的设备所提供的服务&sdptool search 0x:72:B0:00:26 查找地址为00:02:72:B0:00:26的设备上的Headset Audio Gateway服务。&./sdptool search 0x:72:B0:00:26&Class 0x1112&Inquiring ...&Searching for 0x1112 on 00:02:72:B0:00:26 ...&Service Name: Headset Audio Gateway&Service RecHandle: 0x1001d&Service Class ID List:&"Headset Audio Gateway" (0x1112)&"Generic Audio" (0x1203)&。。。&7.3.4 Hciconfig&这个就不用多说了,格式上很类似于ifconfig,用来设置HCI设备的参数&例如&hciconfig hci0 up 启动hci0接口&hciconfig hci0 iscan 使能位于hci0接口的蓝牙芯片的inquery scan模式(使得设备能被其它蓝牙设备发现)&8 杂项&8.1 使用Dbus-send进行测试&由于Bluez使用dbus进行进程间通讯,所以我们可以使用dbus-send命令直接发送命令进行一些查询,试验的工作。&Bluez每个Daemon或service所支持的Dbus接口API描述文本,可以在各自的目录下找到,例如Audio的API写在 audio/audio-api.txt中。&以Audio为例,可以参考&&中的描述&8.2 HCI、H4、USB、BCSP 之间的关系&个人理解,严格的说HCI和其它几种protocol并不是可以对比的同一层次的东西。&HCI protocol 并不考虑在实际传输载体以及其中的纠错等问题,只是一个抽象的传输层或叫做接口。USB,H3,H4等才是具体的transport layer(此外还有SD Transport layer)。HCI数据包需要附着在这些具体的Transport Layer的协议包中。&以BCSP为例,4种类型的HCI数据包各自使用了一个BCSP通道,做为这些通道的payload封装在BCSP的协议包里,需要通过TTY 的lldsic层走一次,并由hci_uart模块做相应的封装工作。而BCSP还通过其它通道支持其它的一些自定的Protocol。BCSP作为一个 具体的传输层协议,还支持了校验,同步等功能。&H4机制类似,SD和USB transport好像区别比较大一点。具体可以参考 Bluetooth Specification Volume 4.&8.3 BCSP数据包结构&HCI数据包的结构,在bluetooth的spec里面有详细定义,不过,CSR自己的BCSP,BCCMD等一系列协议,又添加了一堆的东 西,其中,HCI数据包是作为BCSP的payload,而BCCMD又是作为HCI的payload,所以测试过程中,发觉要分析清楚bluez通过 kernel最后到底往蓝牙芯片的串口发送了什么数据,特别是想要自己手工构建一串数据,着实要看上一堆spec,拼凑起来才能完成。&要具体学习分析一串命令,最好的办法,我能想到的就是修改bccmd的代码,将它传给串口的每一个字符串都打印出来,这样对照这spec看,事半功倍。&例如下面这条,是使用我修改后的bccmd指令。所做的操作是读取串口波特率的pskey:&./bccmd.dbg -t bcsp -d /dev/ttyS1 psget -s 0x0 0x01be&cmd : 00 fc 13 c2 00 00 09 00 01 00 03 70 00 00 be 01 01 00 00 00 00 00&c0 d1 65 01 c8 00 fc 13 c2 00 00 09 00 01 00 03 70 00 00 be 01 01 00 00 00 00 69 a6 c0&在这里 HCI的数据包是第一行,具体解释一下:&头4个字节是HCI Head,其中&00 fc :整体代表这是一个制造商自定义的命令。&13 :HCI命令长度为0x13。&C2 :包的内容是唯一的一个BCCMD数据包。&后面是BCCMD的Head&00 00 :这是一个GetReq命令&09 00 :BCCMD的命令9个word长度,及18字节&01 00 :seqno, 包的顺序标记 包1&03 70 :varid 7003, 表示这是对PSKEY的操作&00 00 :状态标志&再下来是BCCMD的payload&be 01 :0x01be 波特率PSKEY的index&01 00 :该PSKEY的长度为1&00 00 :strore 为 00&00 00 :该PSKEY的值,这里是发送读命令,所以填0&第二行的数据是将HCI包封装在了BCSP数据包里:&前面部分:c0 d1 65 01 c8 :&C0 :是BCSP数据包的分割符&D1 :类型为可靠链接数据流,有CRC校验&65 01 :channel 5 ( HCI CMD ), 长度为0x16&C8 :包头的校验&后面部分:69 a6 c0:&69 a6 :整个BCSP包的CRC校验&C0 :分隔符&其它命令类似的分析可得。&如果只是希望看到HCI命令本身,也可以用hcidump来看。这是上面的读pskey操作通过HCI接口操作的dump:&& HCI Command: Vendor (0x3f|0x0000) plen 19&BCCMD: Get req: len 9 seqno 1 varid 0x7003 status 0&PSKEY: key 0x01be len 1 stores 0x0000&UART_BAUDRATE: value 0 (0x0000)&8.4 Hid / Serial / HF / OBEX&这几个比较常用的profile!&8.5 总的遗留问题&整体上,PC上实现的自动识别,自动启动服务的一整套脚本等。
阅读(1520) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 android 蓝牙调试工具 的文章

 

随机推荐