blob: 871a1aa49e2c6d035efabcf30ced429a53e8e65f [file] [log] [blame]
// Copyright 2018 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
#include <sys/types.h>
#include <zircon/compiler.h>
#include <zircon/types.h>
#include <zircon/hw/usb.h>
__BEGIN_CDECLS;
typedef struct {
zx_status_t (*get_additional_descriptor_list)(void* ctx, void** out_descriptors,
size_t* out_length);
zx_status_t (*claim_interface)(void* ctx, usb_interface_descriptor_t* intf, size_t length);
} usb_composite_protocol_ops_t;
typedef struct {
usb_composite_protocol_ops_t* ops;
void* ctx;
} usb_composite_protocol_t;
// returns the USB descriptors following the interface's existing descriptors
// the returned value is de-allocated with free()
static inline zx_status_t usb_composite_get_additional_descriptor_list(
const usb_composite_protocol_t* comp,
void** out_descriptors,
size_t* out_length) {
return comp->ops->get_additional_descriptor_list(comp->ctx, out_descriptors, out_length);
}
// marks the interface as claimed and appends the interface descriptor to the
// interface's existing descriptors.
static inline zx_status_t usb_composite_claim_interface(const usb_composite_protocol_t* comp,
usb_interface_descriptor_t* intf,
size_t length) {
return comp->ops->claim_interface(comp->ctx, intf, length);
}
__END_CDECLS;