Bluez java_Bluez相关的各种tools的使用

Bluez java_Bluez相关的各种tools的使用7.1BccmdBccmd是用来和CSR的芯片进行BCCMD(Bluecorecommandprotocol)通讯的一个工具。BCCMD并非蓝牙协议栈的标准,而是CSR芯片的专属协议Bccmd的调用格式为:bccmd[-t][-d][]Tansport类型包括HCIUSBBCSPH4等,常用的估计就是HCI和BCSP两种。需要注意一下他们的使用场合:HCI是…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

7.1        Bccmd

Bccmd是用来和CSR的芯片进行BCCMD(Bluecore command protocol)通讯的一个工具。BCCMD并非蓝牙协议栈的标准,而是CSR芯片的专属协议

Bccmd的调用格式为:bccmd [-t ] [-d ] []

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 ]

其它都好理解,关键是-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] [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 0x1112 00:02:72:B0:00:26 查找地址为00:02:72:B0:00:26的设备上的Headset Audio Gateway服务。

./sdptool search 0x1112 00:02: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模式(使得设备能被其它蓝牙设备发现)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234989.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • heap和stack的区别

    heap和stack的区别heap和stack的区别

    2022年10月28日
  • navicat15万能激活码-激活码分享

    (navicat15万能激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlFZP9ED60OK-eyJsa…

  • 修改RAC环境中的ASM DG名称

    修改RAC环境中的ASM DG名称

  • Linux下定时执行脚本实例

    Linux下定时执行脚本实例在Linux下我们用crontab来实现定期执行脚本。查看crontab    输入命令:cat/etc/crontabcrontab-u//设定特定用户的定时服务crontab-l//列出当前用户定时服务内容crontab-r//删除当前用户的定时服务crontab-e//编辑当前用户的定时服务在设定编辑之前都建议列出服务查看一下:crontab-l显示有一个已经设定好的…

  • 事务隔离级别与锁的对应关系_X与XS区别

    事务隔离级别与锁的对应关系_X与XS区别隔离级别org.springframework.transaction.annotation.Isolationpublic enum Isolation { DEFAULT(-1), READ_UNCOMMITTED(1), READ_COMMITTED(2), REPEATABLE_READ(4), SERIALIZABLE(8);}DEFAULT :这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是: READ_CO..

  • “DropDownList1“有一个无效 SelectedValue,因为它不在项目列表中。

    “DropDownList1“有一个无效 SelectedValue,因为它不在项目列表中。今天用FormView做一个网页,其中用到了DropDownList控件,代码是这样写的:写好之后怎么弄也不行,后来google了一下,找到了很多答案,看完之后我认为DataValueField的值必须从零开始,于是我就改了改sql语句,但是还是不行。又想了一会,茅塞顿开原来是SelectedValue和DataValueField的类型必须一致,困扰我好长时间的问题终于解决正确代码:

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号