50 lines
1.0 KiB
Rust
50 lines
1.0 KiB
Rust
use yggdrasil_abi::error::Error;
|
|
|
|
#[derive(Debug, Clone, Copy)]
|
|
pub enum TransferError {
|
|
InvalidTransfer,
|
|
ShortPacket(usize),
|
|
BufferError,
|
|
UsbTransactionError,
|
|
Stall,
|
|
Other(u8),
|
|
}
|
|
|
|
#[derive(Debug)]
|
|
pub enum UsbError {
|
|
/// Could not allocate memory for some device structure
|
|
MemoryError(Error),
|
|
/// Other system errors
|
|
SystemError(Error),
|
|
// HC-side init stage errors
|
|
OutOfAddresses,
|
|
HostControllerCommandFailed(u8, u32),
|
|
PortResetFailed,
|
|
PortInitFailed,
|
|
// Setup stage errors
|
|
InvalidConfiguration,
|
|
InvalidDescriptorField,
|
|
// Runtime errors
|
|
TimedOut,
|
|
DeviceBusy,
|
|
DeviceDisconnected,
|
|
TransferFailed(TransferError),
|
|
// Driver errors
|
|
DriverError,
|
|
}
|
|
|
|
impl From<TransferError> for UsbError {
|
|
fn from(value: TransferError) -> Self {
|
|
Self::TransferFailed(value)
|
|
}
|
|
}
|
|
|
|
impl From<UsbError> for Error {
|
|
fn from(value: UsbError) -> Self {
|
|
match value {
|
|
UsbError::MemoryError(e) => e,
|
|
_ => Error::InvalidOperation,
|
|
}
|
|
}
|
|
}
|