mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-01 08:48:49 +00:00
We now store the device descriptor obtained from the device during enumeration in the device's object in memory instead of exposing all of the different members contained within it.
59 lines
1.7 KiB
C++
59 lines
1.7 KiB
C++
/*
|
|
* Copyright (c) 2021, Jesse Buhagiar <jooster669@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/OwnPtr.h>
|
|
#include <AK/Types.h>
|
|
#include <Kernel/Devices/USB/USBPipe.h>
|
|
|
|
namespace Kernel::USB {
|
|
|
|
//
|
|
// Some nice info from FTDI on device enumeration and how some of this
|
|
// glues together:
|
|
//
|
|
// https://www.ftdichip.com/Support/Documents/TechnicalNotes/TN_113_Simplified%20Description%20of%20USB%20Device%20Enumeration.pdf
|
|
class Device : public RefCounted<Device> {
|
|
public:
|
|
enum class PortNumber : u8 {
|
|
Port1 = 0,
|
|
Port2
|
|
};
|
|
|
|
enum class DeviceSpeed : u8 {
|
|
FullSpeed = 0,
|
|
LowSpeed
|
|
};
|
|
|
|
public:
|
|
static KResultOr<NonnullRefPtr<Device>> try_create(PortNumber, DeviceSpeed);
|
|
|
|
Device(PortNumber, DeviceSpeed, NonnullOwnPtr<Pipe> default_pipe);
|
|
~Device();
|
|
|
|
KResult enumerate();
|
|
|
|
PortNumber port() const { return m_device_port; }
|
|
DeviceSpeed speed() const { return m_device_speed; }
|
|
|
|
u8 address() const { return m_address; }
|
|
|
|
const USBDeviceDescriptor& device_descriptor() const { return m_device_descriptor; }
|
|
|
|
private:
|
|
PortNumber m_device_port; // What port is this device attached to
|
|
DeviceSpeed m_device_speed; // What speed is this device running at
|
|
u8 m_address { 0 }; // USB address assigned to this device
|
|
|
|
// Device description
|
|
u16 m_vendor_id { 0 }; // This device's vendor ID assigned by the USB group
|
|
u16 m_product_id { 0 }; // This device's product ID assigned by the USB group
|
|
USBDeviceDescriptor m_device_descriptor; // Device Descriptor obtained from USB Device
|
|
|
|
NonnullOwnPtr<Pipe> m_default_pipe; // Default communication pipe (endpoint0) used during enumeration
|
|
};
|
|
}
|