实战Linux Bluetooth编程(三) HCI层编程
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_Read_Buffer_Size.
Command States Event:如果Host发送
相关文档:
Linux不需要磁盘碎片整理。
以下引自linux官方网站对碎片的解说:来源于
http://www.linux.org/docs/ldp/howto/Partition/appendix.html#fragmentation
引用:
10.4. Some facts about file systems and fragmentation
Disk
space is administered by the operating system in units of ......
什么是 LVM
LVM 是逻辑盘卷管理(Logical Volume Manager)的简称,它是 Linux 环境下对磁盘分区进行管理的一种机制,LVM
是建立在硬盘和分区之上的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,从而提高磁盘分区管理的灵活性。通过 LVM
系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组 ......
1. man 对你熟悉或不熟悉的命令提供帮助解释
eg:man ls 就可以查看ls相关的用法
注:按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前程序运行。
2. ls 查看目录或者文件的属*,列举出任一目录下面的文件
eg: ls /usr/man
ls -l
a.d表示目录(directory),如果是一个"-"表示是文件,如果是l则表示是一个连接文件 ......
学的快忘的也快,好,把它记下来。
(一) 用户
1. 作为root登录
2. 给你要添加的用户设置用户目录, mkdir /home/yang
3. useradd yang -g users -G 100 -d /home/yang
-->指定组用 -g,要查看系统目前有哪些组,可以 cat /etc/group
-->如果不设置 -g, -d useradd将使用 /etc/default/useradd 脚本指定的 ......
Sam一年前在Linux下写了一个类似Windows下BTW的库--BTX。现在需要添加新功能时发现很多知识点都忘记了。所以决定在这次学习中,把一些bluez API记录下来。这几天又想,这样还不够,不如把Linux下的Bluetooth编程基础给记录下来吧。
前言:随着嵌入式系统的飞速发展,很多嵌入式平台上需要Bluetooth设备和应用。但在Linux下 ......