devices/usb/backend/
error.rs1use base::TubeError;
6use remain::sorted;
7use thiserror::Error;
8use usb_util::Error as UsbUtilError;
9
10use crate::usb::backend::fido_backend::error::Error as FidoError;
11use crate::usb::xhci::scatter_gather_buffer::Error as BufferError;
12use crate::usb::xhci::xhci_transfer::Error as XhciTransferError;
13use crate::utils::Error as UtilsError;
14
15#[sorted]
16#[derive(Error, Debug)]
17pub enum Error {
18 #[error("failed to add to event loop: {0}")]
19 AddToEventLoop(UtilsError),
20 #[error("failed to alloc streams: {0}")]
21 AllocStreams(UsbUtilError),
22 #[error("backend provider is in a bad state")]
23 BadBackendProviderState,
24 #[error("xhci transfer is in a bad state")]
25 BadXhciTransferState,
26 #[error("failed to get buffer length: {0}")]
27 BufferLen(BufferError),
28 #[error("failed to clear halt: {0}")]
29 ClearHalt(UsbUtilError),
30 #[error("failed to create scatter gather buffer: {0}")]
31 CreateBuffer(XhciTransferError),
32 #[error("failed to create control tube: {0}")]
33 CreateControlTube(TubeError),
34 #[error("failed to create fido backend device: {0}")]
35 CreateFidoBackendDevice(FidoError),
36 #[error("failed to create host backend usb device: {0}")]
37 CreateHostUsbDevice(UsbUtilError),
38 #[error("failed to create libusb context: {0}")]
39 CreateLibUsbContext(UsbUtilError),
40 #[error("failed to create transfer: {0}")]
41 CreateTransfer(UsbUtilError),
42 #[error("failed to create USB request setup: {0}")]
43 CreateUsbRequestSetup(XhciTransferError),
44 #[error("failed to free streams: {0}")]
45 FreeStreams(UsbUtilError),
46 #[error("failed to get active config: {0}")]
47 GetActiveConfig(UsbUtilError),
48 #[error("failed to get config descriptor: {0}")]
49 GetConfigDescriptor(UsbUtilError),
50 #[error("failed to get device descriptor: {0}")]
51 GetDeviceDescriptor(UsbUtilError),
52 #[error("failed to get dma buffer")]
53 GetDmaBuffer,
54 #[error("failed to get endpoint descriptor for ep: {0}")]
55 GetEndpointDescriptor(u8),
56 #[error("failed to get endpoint type")]
57 GetEndpointType,
58 #[error("failed to get interface descriptor for interface {0}, alt setting {1}")]
60 GetInterfaceDescriptor(u8, u8),
61 #[error("failed to get xhci transfer type: {0}")]
62 GetXhciTransferType(XhciTransferError),
63 #[error("the backend received the wrong transfer request")]
64 MalformedBackendTransfer,
65 #[error("request missing required data buffer")]
66 MissingRequiredBuffer,
67 #[error("failed to proceed to next TD: {0}")]
68 Proceed(XhciTransferError),
69 #[error("failed to queue async job: {0}")]
70 QueueAsyncJob(UtilsError),
71 #[error("failed to read buffer: {0}")]
72 ReadBuffer(BufferError),
73 #[error("failed to read control tube: {0}")]
74 ReadControlTube(TubeError),
75 #[error("failed to release dma buffer")]
76 ReleaseDmaBuffer,
77 #[error("failed to remove device from event loop: {0}")]
78 RemoveFromEventLoop(UtilsError),
79 #[error("failed to reset: {0}")]
80 Reset(UsbUtilError),
81 #[error("failed to set active config: {0}")]
82 SetActiveConfig(UsbUtilError),
83 #[error("failed to set interface alt setting: {0}")]
84 SetInterfaceAltSetting(UsbUtilError),
85 #[error("failed to setup control tube: {0}")]
86 SetupControlTube(TubeError),
87 #[error("failed to start async job queue: {0}")]
88 StartAsyncJobQueue(UtilsError),
89 #[error("xhci transfer completed: {0}")]
90 TransferComplete(XhciTransferError),
91 #[error("failed to get max payload size for xhci transfer: {0}")]
92 TransferGetMaxPayload(XhciTransferError),
93 #[error("failed to cancel transfer: {0}")]
94 TransferHandle(UsbUtilError),
95 #[error("transfer has already completed when being cancelled")]
96 TransferHandleAlreadyComplete,
97 #[error("failed to write buffer: {0}")]
98 WriteBuffer(BufferError),
99 #[error("failed to write control tube: {0}")]
100 WriteControlTube(TubeError),
101}
102
103pub type Result<T> = std::result::Result<T, Error>;