blob: 0d9892c93b7f3299b62c8853d93ad72e83f58cf0 [file] [log] [blame]
// Copyright 2020 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.
library fuchsia.hardware.bt.vendor;
using zx;
/// The maximum buffer length an encoded command might require.
/// Update when adding new commands that might require a larger buffer.
const uint16 BT_VENDOR_MAX_COMMAND_BUFFER_LEN = 16;
/// Bitmask of features supported by the vendor.
enum BtVendorFeatures : uint32 {
SET_ACL_PRIORITY_COMMAND = 0x1;
// Bits 1-31 reserved.
};
enum BtVendorAclPriority : uint8 {
NORMAL = 0;
HIGH = 1;
};
enum BtVendorAclDirection : uint8 {
SOURCE = 0;
SINK = 1;
};
struct BtVendorSetAclPriorityParams {
uint16 connection_handle;
BtVendorAclPriority priority;
/// The direction data should be prioritized in. May not be supported by all
/// vendors. Ignored when priority is normal.
BtVendorAclDirection direction;
};
union BtVendorParams {
1: BtVendorSetAclPriorityParams set_acl_priority;
};
enum BtVendorCommand {
/// Marks a connection as normal or high priority.
/// Parameters: `BtVendorSetAclPriorityParams`
SET_ACL_PRIORITY = 0;
};
/// The BtVendor protocol may be implemented by vendor drivers to support feature interrogation
/// and vendor command encoding.
[Transport = "Banjo", BanjoLayout = "ddk-protocol"]
protocol BtVendor {
/// Returns bitmask of the features the vendor supports.
GetFeatures() -> (BtVendorFeatures features);
/// Encodes the vendor HCI command `command` using `params` and returns the encoded command as
/// a buffer. `params` must contain the parameter struct for the specified command, as
/// documented in `BtVendorCommand`.
/// Returns an error status if the command is not supported or the paramaters are invalid.
EncodeCommand(BtVendorCommand command, BtVendorParams params)
-> (zx.status status, [Buffer] vector<uint8>:BT_VENDOR_MAX_COMMAND_BUFFER_LEN encoded);
};