蓝牙Host Controller Interface笔记

摘要:
HANDLES标识主机和控制器之间的不同通道。有三种类型:ConnectionHandlesLogicalLinkHandlesPhysicalLinkHandles,其中ConnectionHandles用于主控制器,其他两种用于AMPController。一旦建立了LogicalLink,主控制器将向主机分配ConnectionHandle。以下是Commandpacket、EventPacket和Datapacket。DataPacket分为HCIACLPacket和HCISynchronousDataPacket。HCIACL数据包有两种类型:自动可清洗和非自动可清洗。此组包含七个命令,包括ReadLocalVersionInformationCommand。此组包含10个命令,例如ReadFailedContactCounterCommand。

1.概述

    HCI提供了一个统一的使用蓝牙控制器(BR/EDR Controller,BR/EDR/LE Controller,LE Controller,AMP Controller等)的方法,它屏蔽了蓝牙的基带部分,提供了统一的数据进入基带的方法。
    首先,蓝牙的BaseBand部分有以下几种控制器:
• BR/EDR Controller
• BR/EDR/LE Controller
• LE Controller
• AMP Controller
前三种称为primary Controller,AMP是蓝牙3.0后加上的,支持High Speed传输。
 
下图为简单的架构:
蓝牙Host <wbr>Controller <wbr>Interface笔记
两个设备间数据的流向如下图:
蓝牙Host <wbr>Controller <wbr>Interface笔记

2.COMMANDS AND EVENTS
   通过HCI接口,Host与controller通过Command和Event的形式进行通信,其中command是Host传给controller的,Event是controller反馈给Host的,如下图所示:
蓝牙Host <wbr>Controller <wbr>Interface笔记
Command和Event根据不同的类型进行了以下分组,具有以下几种:
蓝牙Host <wbr>Controller <wbr>Interface笔记
每一组内有一个或者对个Command和Event,举例如下:
蓝牙Host <wbr>Controller <wbr>Interface笔记

蓝牙Host <wbr>Controller <wbr>Interface笔记
可以看出,Generic event组内有三种Event,Device SetUp组内只有一种reset Command。Command和Event的种类很多,这里不具体介绍,参考Spec704-1000的具体说明。
 
3.HCI Data Format
    由上可知,HCI有三种数据,Command、Event和Data,这三种类型的HCI Data分别有不同的格式。需要注意的是,HCI Data都是Little Endian formats的,负数的存储形式为2进制补码。
   在Host和Controller之间由HANDLES来识别不同的通道,一共有三种:
• Connection Handles
• Logical Link Handles
• Physical Link Handles
其中,Connection Handles用于primary controller(除AMP外),另外两用用于AMP Controller。一旦一条Logical Link建立,primary controller会给Host分配一个Connection Handle。
下面分别是Command packet、Event Packet和Data packet,其中Data Packet分为HCI ACL Data Packet和HCI Synchronous Data Packet,HCI ACL Data Packet有Automatically-Flushable和Non-Automatically-Flushable两种类型。具体说明如下:
 
(1) HCI Command packet
蓝牙Host <wbr>Controller <wbr>Interface笔记
OpCode Field分为两个Field:OCF和OGF:
OGF Range (6 bits): 0x00-0x3F (0x3F reserved for vendor-specific debug commands)
OCF Range (10 bits): 0x0000-0x03FF
 
(2) HCI ACL Data Packet
蓝牙Host <wbr>Controller <wbr>Interface笔记
参数HANDLE的定义如下:
蓝牙Host <wbr>Controller <wbr>Interface笔记
参数PB的定义如下:
蓝牙Host <wbr>Controller <wbr>Interface笔记
参数Broadcast_Flag的定义如下:
蓝牙Host <wbr>Controller <wbr>Interface笔记

蓝牙Host <wbr>Controller <wbr>Interface笔记

(3)HCI Synchronous Data Packets
蓝牙Host <wbr>Controller <wbr>Interface笔记
Packet_Status_Flag参数定义如下:
蓝牙Host <wbr>Controller <wbr>Interface笔记

(4)HCI Event Packet
蓝牙Host <wbr>Controller <wbr>Interface笔记
注意,LE控制器使用的是sub-event Code。
4.HCI Configuration parameters
主要用来对HCI连接进行一些必要的配置,种类比较多,参考Spec681-703。
 
5.常见的Command和Event
(1) Link Control commands(OGF = 0x01),用来进行连接。
该组包含Inquiry Command等44个Command,具体参考Spec。
(2)LINK POLICY COMMANDS(OGF = 0x02),对连接进行配置,如park、sniff、Roll Switch等
该组包含14个command
(3)CONTROLLER & BASEBAND COMMANDS(OGF = 0x03),改变本地Controller的行为。
该组包含Set Event Mask Command等79个command
(4)INFORMATIONAL PARAMETERS(OGF = 0x04),用来读取本地的设备商的控制器、LM等的信息,这些信息无法改变。
该组包含Read Local Version Information Command等7个command。
(5)STATUS PARAMETERS(OGF = 0x05),状态参数是由controller来修改的,Host可以通过一些特定的参数来进行修改。
该组包含Read Failed Contact Counter Command等10个Command。
(6)TESTING COMMANDS(OGF = 0x06),对Host提供对蓝牙硬件的测试用的。
该组包括Read Loopback Mode Command等7个Command。
(7)LE CONTROLLER COMMANDS(OGF = 0x07),Host通过这些命令来影响LE的工作。
该组包括LE Set Event Mask Command等30个Command。
常见的Event:
包括Inquiry Complete Event等65种Event。

免责声明:文章转载自《蓝牙Host Controller Interface笔记》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iis下项目绑定ip、域名以及443端口号之后项目启动不起来,iis提示“另一个程序正在使用此文件,进程无法访问。(异常来自HRESULT:0x80070020) ”【自制工具类】Java删除字符串中的元素下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android webkit 事件传递流程详解

前言:基于android webview 上定制自己使用的可移植浏览器apk,遇到好多按键处理的问题。所以索性研究了一下keyevent 事件的传递流程。 frameworks 层 keyevent 事件开始是从/frameworks/base/core/java/android/webkit目录下WebViewClassic.java 中的onKeyDo...

容器监控告警方案(cAdvisor + nodeExporter + alertmanager + prometheus +grafana)

一、prometheus基本架构 Prometheus 是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computi...

浏览器的统一指针事件:Pointer Event

 在早期的浏览器,输入的事件其实相对单纯,只有考虑到鼠标和键盘两种;而当时的鼠标事件,其实就是 click、mousedown、mouseup 等等的事件。但是当手机、平板开始流行时候,再移动装置上的主要操作界面,已经从鼠标变成是触控了~ 由于触控和鼠标的操作逻辑,算是有根本上的差异的,再加上大部分的装置又支持多点触控,所以虽然浏览器大多会把触控的事件对应...

Python——pyHook监听鼠标键盘事件

pyHook包为Windows中的全局鼠标和键盘事件提供回调。底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等。而正常工作需要pythoncom等操作系统的API的支持。 先链上一篇《pyHook和pythoncom的安装》。 然后开始讲pyHook的使用。 关于pyHook的使用,网上现存的大多教程如下: import p...

nginx 获取源IP 获取经过N层Nginx转发的访问来源真实IP

1. nginx 配置文件中获取源IP的配置项proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr; #一般的web服务器用这个 X-Real-IP 来获取源IPproxy_set_header x-forwarded-for $proxy_add_x_forwarded_f...

div拖拽, onmousedown ,onmousemove, onmouseup

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style type="text/css"> 7...