在 lib/Hci.h 头文件中定义了很的我 HCI Commands,这些命令是分组的,每个组下面又提供了具体的命令,如:

其中
OGF 为 OpCode Group Flag,表明命令级别
OCF 为 OpCode Command Flag,表明要执行的命令
Hci.h 头文件里提供的命令级别一共有 8 个,分别为:
1,OGF_LINK_CTL /* Link Control */
2,OGF_LINK_POLICY /* Link Policy */
3,OGF_HOST_CTL /* Host Controller and Baseband */
4,OGF_INFO_PARAM /* Informational Parameters */
5,OGF_STATUS_PARAM /* Status params */
6,OGF_TESTING_CMD /* Testing commands */
7, OGF_LE_CTL /* LE commands */
8, OGF_VENDOR_CMD /* Vendor specific commands */
每组命令下提供了很多的具体的命令,可以详看Hci.h头文件。 可以从提供的命令看出 :
1,OGF_LINK_CTL 主要用于控制蓝牙设备的,如 查询、链接创建、链接断开等操作。
2,OGF_LINK_POLICY 主要用于控制蓝牙设备的模式或是角色,如读写模式、发现模式,主/从模式等。其他的可以自己看看了,当要向一个蓝牙设备发送指令时,则根据需要指定OGF和OCF,如链接函数:
int hci_create_connection(int dd, const bdaddr_t *bdaddr, uint16_t ptype,
				uint16_t clkoffset, uint8_t rswitch,
				uint16_t *handle, int to)
{
	evt_conn_complete rp;
	create_conn_cp cp;
	struct hci_request rq;
	memset(&cp, 0, sizeof(cp));
	bacpy(&cp.bdaddr, bdaddr);
	cp.pkt_type       = ptype;
	cp.pscan_rep_mode = 0x02;
	cp.clock_offset   = clkoffset;
	cp.role_switch    = rswitch;
	memset(&rq, 0, sizeof(rq));
	rq.ogf    = OGF_LINK_CTL;
	rq.ocf    = OCF_CREATE_CONN;
	rq.event  = EVT_CONN_COMPLETE;
	rq.cparam = &cp;
	rq.clen   = CREATE_CONN_CP_SIZE;
	rq.rparam = &rp;
	rq.rlen   = EVT_CONN_COMPLETE_SIZE;
	if (hci_send_req(dd, &rq, to) < 0)
		return -1;
	if (rp.status) {
		errno = EIO;
		return -1;
	}
	*handle = rp.handle;
	return 0;
}


















