/* Copyright 2016 The Chromium OS Authors. All rights reserved. * 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);