Serenity Operating System
1/*
2 * Copyright (c) 2022, Jesse Buhagiar <jesse.buhagiar@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/Vector.h>
10
11namespace Kernel::USB {
12
13class USBConfiguration;
14
15class USBInterface final {
16public:
17 USBInterface() = delete;
18 USBInterface(USBConfiguration const& configuration, USBInterfaceDescriptor const descriptor, Vector<USBEndpointDescriptor> const& endpoint_descriptors)
19 : m_configuration(configuration)
20 , m_descriptor(descriptor)
21 , m_endpoint_descriptors(endpoint_descriptors)
22 {
23 m_endpoint_descriptors.ensure_capacity(descriptor.number_of_endpoints);
24 }
25
26 Vector<USBEndpointDescriptor> const& endpoints() const { return m_endpoint_descriptors; }
27
28 USBInterfaceDescriptor const& descriptor() const { return m_descriptor; }
29
30private:
31 USBConfiguration const& m_configuration; // Configuration that this interface belongs to
32 USBInterfaceDescriptor const m_descriptor; // Descriptor backing this interface
33 Vector<USBEndpointDescriptor> m_endpoint_descriptors; // Endpoint descriptors for this interface (that we can use to open an endpoint)
34};
35
36}