bnr_xfs/error/
usb_error.rs

1use std::fmt;
2
3const BXR_USB_ERROR_OFFSET: u32 = 10_000;
4const BXR_USB_CRC: u32 = BXR_USB_ERROR_OFFSET + 0x01;
5const BXR_USB_BTSTUFF: u32 = BXR_USB_ERROR_OFFSET + 0x02;
6const BXR_USB_DATA_TOGGLE_MISMATCH: u32 = BXR_USB_ERROR_OFFSET + 0x03;
7const BXR_USB_STALL_PID: u32 = BXR_USB_ERROR_OFFSET + 0x04;
8const BXR_USB_DEV_NOT_RESPONDING: u32 = BXR_USB_ERROR_OFFSET + 0x05;
9const BXR_USB_PID_CHECK_FAILURE: u32 = BXR_USB_ERROR_OFFSET + 0x06;
10const BXR_USB_UNEXPECTED_PID: u32 = BXR_USB_ERROR_OFFSET + 0x07;
11const BXR_USB_DATA_OVERRUN: u32 = BXR_USB_ERROR_OFFSET + 0x08;
12const BXR_USB_DATA_UNDERRUN: u32 = BXR_USB_ERROR_OFFSET + 0x09;
13const BXR_USB_BUFFER_OVERRUN: u32 = BXR_USB_ERROR_OFFSET + 0x0C;
14const BXR_USB_BUFFER_UNDERRUN: u32 = BXR_USB_ERROR_OFFSET + 0x0D;
15const BXR_USB_NOT_ACCESSED: u32 = BXR_USB_ERROR_OFFSET + 0x0F;
16const BXR_USB_FIFO: u32 = BXR_USB_ERROR_OFFSET + 0x10;
17const BXR_USB_ENDPOINT_HALTED: u32 = BXR_USB_ERROR_OFFSET + 0x30;
18const BXR_USB_NO_MEMORY: u32 = BXR_USB_ERROR_OFFSET + 0x100;
19const BXR_USB_INVALID_URB_FUNCTION: u32 = BXR_USB_ERROR_OFFSET + 0x101;
20const BXR_USB_INVALID_PARAMETER: u32 = BXR_USB_ERROR_OFFSET + 0x102;
21const BXR_USB_ERROR_BUSY: u32 = BXR_USB_ERROR_OFFSET + 0x103;
22const BXR_USB_REQUEST_FAILED: u32 = BXR_USB_ERROR_OFFSET + 0x104;
23const BXR_USB_INVALID_PIPE_HANDLE: u32 = BXR_USB_ERROR_OFFSET + 0x105;
24const BXR_USB_NO_BANDWIDTH: u32 = BXR_USB_ERROR_OFFSET + 0x106;
25const BXR_USB_INTERNAL_HC_ERROR: u32 = BXR_USB_ERROR_OFFSET + 0x107;
26const BXR_USB_ERROR_SHORT_TRANSFER: u32 = BXR_USB_ERROR_OFFSET + 0x108;
27const BXR_USB_BAD_START_FRAME: u32 = BXR_USB_ERROR_OFFSET + 0x109;
28const BXR_USB_ISOCH_REQUEST_FAILED: u32 = BXR_USB_ERROR_OFFSET + 0x10A;
29const BXR_USB_FRAME_CONTROL_OWNED: u32 = BXR_USB_ERROR_OFFSET + 0x10B;
30const BXR_USB_FRAME_CONTROL_NOT_OWNED: u32 = BXR_USB_ERROR_OFFSET + 0x10C;
31const BXR_USB_CANCELED: u32 = BXR_USB_ERROR_OFFSET + 0x200;
32const BXR_USB_CANCELING: u32 = BXR_USB_ERROR_OFFSET + 0x201;
33const BXR_USB_ALREADY_CONFIGURED: u32 = BXR_USB_ERROR_OFFSET + 0x202;
34const BXR_USB_UNCONFIGURED: u32 = BXR_USB_ERROR_OFFSET + 0x203;
35const BXR_USB_NO_SUCH_DEVICE: u32 = BXR_USB_ERROR_OFFSET + 0x204;
36const BXR_USB_DEVICE_NOT_FOUND: u32 = BXR_USB_ERROR_OFFSET + 0x205;
37const BXR_USB_NOT_SUPPORTED: u32 = BXR_USB_ERROR_OFFSET + 0x206;
38const BXR_USB_IO_PENDING: u32 = BXR_USB_ERROR_OFFSET + 0x207;
39const BXR_USB_IO_TIMEOUT: u32 = BXR_USB_ERROR_OFFSET + 0x208;
40const BXR_USB_DEVICE_REMOVED: u32 = BXR_USB_ERROR_OFFSET + 0x209;
41const BXR_USB_PIPE_NOT_LINKED: u32 = BXR_USB_ERROR_OFFSET + 0x20A;
42const BXR_USB_CONNECTED_PIPES: u32 = BXR_USB_ERROR_OFFSET + 0x20B;
43const BXR_USB_DEVICE_LOCKED: u32 = BXR_USB_ERROR_OFFSET + 0x20C;
44
45/// Represents USB error codes.
46#[repr(u32)]
47#[derive(Clone, Copy, Debug, PartialEq, serde::Deserialize, serde::Serialize)]
48pub enum UsbError {
49    CRC = BXR_USB_CRC,
50    BTStuff = BXR_USB_BTSTUFF,
51    DataToggleMismatch = BXR_USB_DATA_TOGGLE_MISMATCH,
52    StallPid = BXR_USB_STALL_PID,
53    DevNotResponding = BXR_USB_DEV_NOT_RESPONDING,
54    PidCheckFailure = BXR_USB_PID_CHECK_FAILURE,
55    UnexpectedPid = BXR_USB_UNEXPECTED_PID,
56    DataOverrun = BXR_USB_DATA_OVERRUN,
57    DataUnderrun = BXR_USB_DATA_UNDERRUN,
58    BufferOverrun = BXR_USB_BUFFER_OVERRUN,
59    BufferUnderrun = BXR_USB_BUFFER_UNDERRUN,
60    NotAccessed = BXR_USB_NOT_ACCESSED,
61    Fifo = BXR_USB_FIFO,
62    EndpointHalted = BXR_USB_ENDPOINT_HALTED,
63    NoMemory = BXR_USB_NO_MEMORY,
64    InvalidUrbFunction = BXR_USB_INVALID_URB_FUNCTION,
65    InvalidParameter = BXR_USB_INVALID_PARAMETER,
66    ErrorBusy = BXR_USB_ERROR_BUSY,
67    RequestFailed = BXR_USB_REQUEST_FAILED,
68    InvalidPipeHandle = BXR_USB_INVALID_PIPE_HANDLE,
69    NoBandwidth = BXR_USB_NO_BANDWIDTH,
70    InternalHcError = BXR_USB_INTERNAL_HC_ERROR,
71    ErrorShortTransfer = BXR_USB_ERROR_SHORT_TRANSFER,
72    BadStartFrame = BXR_USB_BAD_START_FRAME,
73    IsochRequestFailed = BXR_USB_ISOCH_REQUEST_FAILED,
74    FrameControlOwned = BXR_USB_FRAME_CONTROL_OWNED,
75    FrameControlNotOwned = BXR_USB_FRAME_CONTROL_NOT_OWNED,
76    Canceled = BXR_USB_CANCELED,
77    Canceling = BXR_USB_CANCELING,
78    AlreadyConfigured = BXR_USB_ALREADY_CONFIGURED,
79    Unconfigured = BXR_USB_UNCONFIGURED,
80    NoSuchDevice = BXR_USB_NO_SUCH_DEVICE,
81    DeviceNotFound = BXR_USB_DEVICE_NOT_FOUND,
82    NotSupported = BXR_USB_NOT_SUPPORTED,
83    IoPending = BXR_USB_IO_PENDING,
84    IoTimeout = BXR_USB_IO_TIMEOUT,
85    DeviceRemoved = BXR_USB_DEVICE_REMOVED,
86    PipeNotLinked = BXR_USB_PIPE_NOT_LINKED,
87    ConnectedPipes = BXR_USB_CONNECTED_PIPES,
88    DeviceLocked = BXR_USB_DEVICE_LOCKED,
89}
90
91impl From<u32> for UsbError {
92    fn from(val: u32) -> Self {
93        match val {
94            BXR_USB_CRC => Self::CRC,
95            BXR_USB_BTSTUFF => Self::BTStuff,
96            BXR_USB_DATA_TOGGLE_MISMATCH => Self::DataToggleMismatch,
97            BXR_USB_STALL_PID => Self::StallPid,
98            BXR_USB_DEV_NOT_RESPONDING => Self::DevNotResponding,
99            BXR_USB_PID_CHECK_FAILURE => Self::PidCheckFailure,
100            BXR_USB_UNEXPECTED_PID => Self::UnexpectedPid,
101            BXR_USB_DATA_OVERRUN => Self::DataOverrun,
102            BXR_USB_DATA_UNDERRUN => Self::DataUnderrun,
103            BXR_USB_BUFFER_OVERRUN => Self::BufferOverrun,
104            BXR_USB_BUFFER_UNDERRUN => Self::BufferUnderrun,
105            BXR_USB_NOT_ACCESSED => Self::NotAccessed,
106            BXR_USB_FIFO => Self::Fifo,
107            BXR_USB_ENDPOINT_HALTED => Self::EndpointHalted,
108            BXR_USB_NO_MEMORY => Self::NoMemory,
109            BXR_USB_INVALID_URB_FUNCTION => Self::InvalidUrbFunction,
110            BXR_USB_INVALID_PARAMETER => Self::InvalidParameter,
111            BXR_USB_ERROR_BUSY => Self::ErrorBusy,
112            BXR_USB_REQUEST_FAILED => Self::RequestFailed,
113            BXR_USB_INVALID_PIPE_HANDLE => Self::InvalidPipeHandle,
114            BXR_USB_NO_BANDWIDTH => Self::NoBandwidth,
115            BXR_USB_INTERNAL_HC_ERROR => Self::InternalHcError,
116            BXR_USB_ERROR_SHORT_TRANSFER => Self::ErrorShortTransfer,
117            BXR_USB_BAD_START_FRAME => Self::BadStartFrame,
118            BXR_USB_ISOCH_REQUEST_FAILED => Self::IsochRequestFailed,
119            BXR_USB_FRAME_CONTROL_OWNED => Self::FrameControlOwned,
120            BXR_USB_FRAME_CONTROL_NOT_OWNED => Self::FrameControlNotOwned,
121            BXR_USB_CANCELED => Self::Canceled,
122            BXR_USB_CANCELING => Self::Canceling,
123            BXR_USB_ALREADY_CONFIGURED => Self::AlreadyConfigured,
124            BXR_USB_UNCONFIGURED => Self::Unconfigured,
125            BXR_USB_NO_SUCH_DEVICE => Self::NoSuchDevice,
126            BXR_USB_DEVICE_NOT_FOUND => Self::DeviceNotFound,
127            BXR_USB_NOT_SUPPORTED => Self::NotSupported,
128            BXR_USB_IO_PENDING => Self::IoPending,
129            BXR_USB_IO_TIMEOUT => Self::IoTimeout,
130            BXR_USB_DEVICE_REMOVED => Self::DeviceRemoved,
131            BXR_USB_PIPE_NOT_LINKED => Self::PipeNotLinked,
132            BXR_USB_CONNECTED_PIPES => Self::ConnectedPipes,
133            BXR_USB_DEVICE_LOCKED => Self::DeviceLocked,
134            _ => Self::NotSupported,
135        }
136    }
137}
138
139impl From<UsbError> for u32 {
140    fn from(err: UsbError) -> Self {
141        err as u32
142    }
143}
144
145impl From<&UsbError> for u32 {
146    fn from(err: &UsbError) -> Self {
147        (*err).into()
148    }
149}
150
151impl From<UsbError> for &'static str {
152    fn from(err: UsbError) -> Self {
153        match err {
154            UsbError::CRC => "CRC",
155            UsbError::BTStuff => "BTStuff",
156            UsbError::DataToggleMismatch => "DataToggleMismatch",
157            UsbError::StallPid => "StallPid",
158            UsbError::DevNotResponding => "DevNotResponding",
159            UsbError::PidCheckFailure => "PidCheckFailure",
160            UsbError::UnexpectedPid => "UnexpectedPid",
161            UsbError::DataOverrun => "DataOverrun",
162            UsbError::DataUnderrun => "DataUnderrun",
163            UsbError::BufferOverrun => "BufferOverrun",
164            UsbError::BufferUnderrun => "BufferUnderrun",
165            UsbError::NotAccessed => "NotAccessed",
166            UsbError::Fifo => "Fifo",
167            UsbError::EndpointHalted => "EndpointHalted",
168            UsbError::NoMemory => "NoMemory",
169            UsbError::InvalidUrbFunction => "InvalidUrbFunction",
170            UsbError::InvalidParameter => "InvalidParameter",
171            UsbError::ErrorBusy => "ErrorBusy",
172            UsbError::RequestFailed => "RequestFailed",
173            UsbError::InvalidPipeHandle => "InvalidPipeHandle",
174            UsbError::NoBandwidth => "NoBandwidth",
175            UsbError::InternalHcError => "InternalHcError",
176            UsbError::ErrorShortTransfer => "ErrorShortTransfer",
177            UsbError::BadStartFrame => "BadStartFrame",
178            UsbError::IsochRequestFailed => "IsochRequestFailed",
179            UsbError::FrameControlOwned => "FrameControlOwned",
180            UsbError::FrameControlNotOwned => "FrameControlNotOwned",
181            UsbError::Canceled => "Canceled",
182            UsbError::Canceling => "Canceling",
183            UsbError::AlreadyConfigured => "AlreadyConfigured",
184            UsbError::Unconfigured => "Unconfigured",
185            UsbError::NoSuchDevice => "NoSuchDevice",
186            UsbError::DeviceNotFound => "DeviceNotFound",
187            UsbError::NotSupported => "NotSupported",
188            UsbError::IoPending => "IoPending",
189            UsbError::IoTimeout => "IoTimeout",
190            UsbError::DeviceRemoved => "DeviceRemoved",
191            UsbError::PipeNotLinked => "PipeNotLinked",
192            UsbError::ConnectedPipes => "ConnectedPipes",
193            UsbError::DeviceLocked => "DeviceLocked",
194        }
195    }
196}
197
198impl From<&UsbError> for &'static str {
199    fn from(err: &UsbError) -> Self {
200        (*err).into()
201    }
202}
203
204impl fmt::Display for UsbError {
205    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
206        write!(f, r#""{}""#, <&str>::from(self))
207    }
208}