linux 蓝牙hci,实战Linux Bluetooth编程(三) HCI层编程

作者:Sam (甄峰) sam_code@hotmail.com

(HCI协议简介,HCI在BlueZ中的实现以及HCI编程接口)

1. HCI层协议概述:

HCI提供一套统一的方法来访问Bluetooth底层。如图所示:

9297XcCAzzwBko4XBNau2tmfWlgXjfPJLTlnsmS1EKpetrY1H8K5Koc1cdIeJpp3e+Y84e7BLR0tin+FNa4X8oNpR01ARZIGncReks0

从图上可以看出,Host ControllerInterface(HCI)  就是用来沟通Host和Module。Host通常就是PC,Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。

在Host这一端:application,SDP,L2cap等协议都是软件形式提出的(Bluez中是以kernel层程序)。在Module这一端:LinkManager, BB, 等协议都是硬件中firmware提供的。

而HCI则比较特殊,它一部分在软件中实现,用来给上层协议和程序提供访问接口(Bluez中,hci.chci_usb.c,hci_sock.c等).另一部分也是在Firmware中实现,用来将软件部分的指令等用底层协议明白的方式传递给底层。

居于PC的上层程序与协议和居于Modules的下层协议之间通过HCI沟通,有4种不同形式的传输:Commands,Event, ACL Data, SCO/eSCO Data。

1.1. HCI Command:

HCI Command是Host向Modules发送命令的一种方式。HCI Command Packet结构如下:

9297XcCAzzwBko4XBNau2tmfWlgXjfPJLTlnsmS1EKpetrY1H8K5Koc1cdIeJpp3e+Y84e7BLR0tin+FNa4X8oNpR01ARZIGncReks0

OpCode用来唯一标识HCI Command.它由2部分组成,10bit的Opcode Command.6bit的Opcode Group。

1.1.1: OpCode Group:

Linux Kernel(BlueZ)中,~/include/net/bluetooth/hci.h中定义了OpCodeGroup。

#define OGF_LINK_CTL 0x01

#defineOGF_LINK_POLICY 0x02

#define OGF_HOST_CTL 0x03

#defineOGF_INFO_PARAM 0x04

#defineOGF_STATUS_PARAM 0x05

它们代表了不同的Command Group:

OGF_LINK_CTL: Link control,这个CommandGroup中的Command允许Host控制与其它bluetooth device 的连接。

OGF_LINK_POLICY :LinkPolicy。这个Command Group中的Command允许调整Link Manager control.

OGF_HOST_CTL: Control and Baseband.

1.1.2: Opcode Command:

用来在同一个Group内唯一识别Command。~/include/net/bluetooth/hci.h中定义。

1.2: HCI Event:

Modules向Host发送一些信息,使用HCI Event。Event Packet结构如下:

9297XcCAzzwBko4XBNau2tmfWlgXjfPJLTlnsmS1EKpetrY1H8K5Koc1cdIeJpp3e+Y84e7BLR0tin+FNa4X8oNpR01ARZIGncReks0

HCI Event分3种:Command complete Event, Command StatesEvent,Command Subsequently Completend.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值