1// Copyright 2016 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#pragma once 6 7#include <ddk/device.h> 8#include <zircon/hw/usb.h> 9 10#include "usb-composite.h" 11 12// Represents an interface within a composite device 13typedef struct { 14 zx_device_t* zxdev; 15 usb_composite_t* comp; 16 17 // ID of the last interface in the descriptor list. 18 uint8_t last_interface_id; 19 usb_descriptor_header_t* descriptor; 20 size_t descriptor_length; 21 // descriptors for currently active endpoints 22 usb_endpoint_descriptor_t* active_endpoints[USB_MAX_EPS]; 23 24 // node for usb_composite_t "children" list 25 list_node_t node; 26} usb_interface_t; 27 28extern usb_protocol_ops_t usb_device_protocol; 29extern usb_composite_protocol_ops_t usb_composite_device_protocol; 30extern zx_protocol_device_t usb_interface_proto; 31 32bool usb_interface_contains_interface(usb_interface_t* intf, uint8_t interface_id); 33 34zx_status_t usb_interface_set_alt_setting(usb_interface_t* intf, uint8_t interface_id, 35 uint8_t alt_setting); 36 37zx_status_t usb_interface_configure_endpoints(usb_interface_t* intf, uint8_t interface_id, 38 uint8_t alt_setting); 39