blob: 6899edc9404fe604a3ae3fd0d2a09187d337c206 [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#pragma once
// clang-format off
#include <stdint.h>
#include <zircon/device/ioctl.h>
#include <zircon/device/ioctl-wrapper.h>
__BEGIN_CDECLS
// The maximum HCI ACL frame size used for data transactions
#define BT_HCI_MAX_FRAME_SIZE 1028 // (1024 + 4 bytes for the ACL header)
// Potential values for the flags bitfield in a snoop channel packet.
#define BT_HCI_SNOOP_FLAG_SENT 0x00 // Host -> Controller
#define BT_HCI_SNOOP_FLAG_RECEIVED 0x01 // Controller <- Host
#define BT_HCI_SNOOP_FLAG_DATA 0x02 // Data packet
// Get a channel handle for a two-way HCI command channel for sending and
// receiving HCI command and event packets, respectively.
// in: none
// out: handle to channel
#define IOCTL_BT_HCI_GET_COMMAND_CHANNEL \
IOCTL(IOCTL_KIND_GET_HANDLE, IOCTL_FAMILY_BT_HCI, 0)
// Get a channel handle for a two-way HCI ACL data channel for sending and receiving HCI ACL data
// packets.
// in: none
// out: handle to channel
#define IOCTL_BT_HCI_GET_ACL_DATA_CHANNEL \
IOCTL(IOCTL_KIND_GET_HANDLE, IOCTL_FAMILY_BT_HCI, 1)
// Get a uni-directional channel for sniffing HCI traffic. The format of each message is as follows:
//
// [1-octet flags][n-octet payload]
//
// The flags octet is a bitfield with the following values defined:
//
// - 0x00: The payload represents a command packet sent from the host to the
// controller.
// - 0x01: The payload represents an event packet sent by the controller.
//
// IOCTL parameters:
// in: none
// out: handle to channel
#define IOCTL_BT_HCI_GET_SNOOP_CHANNEL \
IOCTL(IOCTL_KIND_GET_HANDLE, IOCTL_FAMILY_BT_HCI, 2)
// ssize_t ioctl_bt_hci_get_command_channel(int fd, zx_handle_t* out);
IOCTL_WRAPPER_OUT(ioctl_bt_hci_get_command_channel, IOCTL_BT_HCI_GET_COMMAND_CHANNEL, zx_handle_t);
// ssize_t ioctl_bt_hci_get_acl_data_channel(int fd, zx_handle_t* out);
IOCTL_WRAPPER_OUT(ioctl_bt_hci_get_acl_data_channel, IOCTL_BT_HCI_GET_ACL_DATA_CHANNEL, zx_handle_t);
// ssize_t ioctl_bt_hci_get_snoop_channel(int fd, zx_handle_t* out);
IOCTL_WRAPPER_OUT(ioctl_bt_hci_get_snoop_channel, IOCTL_BT_HCI_GET_SNOOP_CHANNEL, zx_handle_t);
// TODO(armansito): Add ioctls for ACL and SCO
__END_CDECLS