blob: 72afa1d29093a89405d3775d82fd2b842ff56ce7 [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 BT_VENDOR_MAX_COMMAND_BUFFER_LEN uint16 = 16;
/// Bitmask of features supported by the vendor.
type BtVendorFeatures = strict enum : uint32 {
SET_ACL_PRIORITY_COMMAND = 0x1;
ANDROID_VENDOR_EXTENSIONS = 0x2;
// Bits 2-31 reserved.
};
type BtVendorAclPriority = strict enum : uint8 {
NORMAL = 0;
HIGH = 1;
};
type BtVendorAclDirection = strict enum : uint8 {
SOURCE = 0;
SINK = 1;
};
type BtVendorSetAclPriorityParams = struct {
connection_handle uint16;
priority BtVendorAclPriority;
/// The direction data should be prioritized in. May not be supported by all
/// vendors. Ignored when priority is normal.
direction BtVendorAclDirection;
};
type BtVendorParams = strict union {
1: set_acl_priority BtVendorSetAclPriorityParams;
};
type BtVendorCommand = strict enum {
/// 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")
@banjo_layout("ddk-protocol")
closed protocol BtVendor {
/// Returns bitmask of the features the vendor supports.
strict GetFeatures() -> (struct {
features BtVendorFeatures;
});
/// 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.
strict EncodeCommand(struct {
command BtVendorCommand;
params BtVendorParams;
}) -> (struct {
status zx.Status;
@buffer
encoded vector<uint8>:BT_VENDOR_MAX_COMMAND_BUFFER_LEN;
});
};