zoukankan      html  css  js  c++  java
  • 蓝牙Host Controller Interface笔记

    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。
  • 相关阅读:
    redis问题排查
    javassist介绍
    Idea创建父子工程
    sentry的配置
    Redis的基本操作以及info命令
    es~日期类型需要注意的
    jboss~静态文件路由和自定义日志
    java~RMI引起的log4j漏洞
    链路跟踪~对接阿里ARMS
    navicat~导出数据库密码
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/9842332.html
Copyright © 2011-2022 走看看