实战Linux Bluetooth编程(三) HCI层编程
http://www.ej38.com/showinfo/linux-111338.html
1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host
Controller Interface(HCI) 就是用来沟通Host和Module。Host通常就是PC,
Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议都是软件形式提出的(Bluez中是以kernel层程序)。在Module这一端:Link Manager, BB, 等协议都是硬件中firmware提供的。
而HCI则比较特殊,它一部分在软件中实现,用来给上层协议和程序提供访问接口(Bluez中,hci.c hci_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结构如下:
OpCode用来唯一标识HCI Command.它由2部分组成,10bit的Opcode Command. 6bit的Opcode Group。
1.1.1: OpCode Group:
Linux Kernel(BlueZ)中,~/include/net/bluetooth/hci.h中定义了OpCode Group。
#define OGF_LINK_CTL 0x01
#define OGF_LINK_POLICY 0x02
#define OGF_HOST_CTL 0x03
#define OGF_INFO_PARAM 0x04
#define OGF_STATUS_PARAM 0x05
它们代表了不同的Command Group:
OGF_LINK_CTL: Link control,这个Command Group中的Command允许Host控制与其它bluetooth device 的连接。
OGF_LINK_POLICY :Link Policy。这个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结构如下:
HCI Event分3种:Command complete Event, Command States Event,Command Subsequently Completend.
Command
complete Event:
如果Host发送的Command可以立刻有结果,则会发送此类Event。也就是说,如果发送的Command只与本地Modules有关,不与
remote设备打交道,则使用Command complete Event。例如:HCI
相关文档:
http://blog.csdn.net/dinitial/archive/2009/02/22/3923559.aspx
Gdb+gdbserver+insight环境的搭建
1. 下载gdb源代码 http://ftp.gnu.org/gnu/gdb/
2. 配置安装gdb+gdbser
$ tar jxvf gdb-6.6.tar.bz2
$ cd x/gdb
$ ./configure --target=arm-linux --prefix ......
建立ARM+Linux应用程序调试环境
Gdb+gdbserver+insight环境的搭建
1. 下载gdb源代码 http://ftp.gnu.org/gnu/gdb/
2. 配置安装gdb+gdbser
$ tar jxvf gdb-6.6.tar.bz2
$ cd x/gdb
$ ./configure --target=arm-linux --prefix=/usr/lo ......
打包: tar [-j] | [-z] [cv] [-f tar包文件] 要打入包的源文件
解包: tar [-j] | [-z] [xv] [-f tar包文件] [-C 指定解包的目录]
查看: tar [-j] | [-z] [tv] [-f tar包文件]
常用的打包选项:
选项
描述
-c
建立tar包文件
-t
查看tar包文件中的文件列表
-x
解开tar包文件
-C path
与解包选项(-x)配合使用,指定 ......
linux和unix下常用解压和压缩命令
.tar
解包: tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
---------------------------------------------
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz
解压:tar zxvf FileName.ta ......