summaryrefslogtreecommitdiff
path: root/include/btle_hci2.h
blob: dc59b72277b8af2633810f4da8f11b5dbac25817 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/* Copyright 2016 The ChromiumOS Authors
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

/*
 * Copied from NewBlue hci.c with permission from Dmitry Grinberg, the original
 * author.
 */

#include "btle_hci_int.h"

struct hciCmdHdr {
	uint16_t opcode;
	uint8_t paramLen;
} __packed;
#define CMD_MAKE_OPCODE(ogf, ocf) \
	((((uint16_t)((ogf)&0x3f)) << 10) | ((ocf)&0x03ff))
#define CMD_GET_OGF(opcode) (((opcode) >> 10) & 0x3f)
#define CMD_GET_OCF(opcode) ((opcode)&0x03ff)

struct hciAclHdr {
	uint16_t hdr;
	uint16_t len;
} __packed;
#define ACL_HDR_MASK_CONN_ID 0x0FFF
#define ACL_HDR_MASK_PB 0x3000
#define ACL_HDR_MASK_BC 0xC000
#define ACL_HDR_PB_FIRST_NONAUTO 0x0000
#define ACL_HDR_PB_CONTINUED 0x1000
#define ACL_HDR_PB_FIRST_AUTO 0x2000
#define ACL_HDR_PB_COMPLETE 0x3000

struct hciScoHdr {
	uint16_t hdr;
	uint8_t len;
} __packed;
#define SCO_HDR_MASK_CONN_ID 0x0FFF
#define SCO_HDR_MASK_STATUS 0x3000
#define SCO_STATUS_ALL_OK 0x0000
#define SCO_STATUS_UNKNOWN 0x1000
#define SCO_STATUS_NO_DATA 0x2000
#define SCO_STATUS_SOME_DATA 0x3000

struct hciEvtHdr {
	uint8_t code;
	uint8_t len;
} __packed;

void hci_cmd(uint8_t *hciCmdbuf);
void hci_acl_to_host(uint8_t *data, uint16_t hdr, uint16_t len);
void hci_acl_from_host(uint8_t *hciAclbuf);
void hci_event(uint8_t event_code, uint8_t len, uint8_t *params);