1 // Copyright 2019 The Chromium OS Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 use crate::usb::xhci::scatter_gather_buffer::Error as BufferError; 6 use crate::usb::xhci::xhci_transfer::Error as XhciTransferError; 7 use crate::utils::Error as UtilsError; 8 9 use base::TubeError; 10 use remain::sorted; 11 use thiserror::Error; 12 use usb_util::Error as UsbUtilError; 13 14 #[sorted] 15 #[derive(Error, Debug)] 16 pub enum Error { 17 #[error("failed to add to event loop: {0}")] 18 AddToEventLoop(UtilsError), 19 #[error("backend provider is in a bad state")] 20 BadBackendProviderState, 21 #[error("xhci transfer is in a bad state")] 22 BadXhciTransferState, 23 #[error("failed to get buffer length: {0}")] 24 BufferLen(BufferError), 25 #[error("failed to clear halt: {0}")] 26 ClearHalt(UsbUtilError), 27 #[error("failed to create contro tube: {0}")] 28 CreateControlTube(TubeError), 29 #[error("failed to create libusb context: {0}")] 30 CreateLibUsbContext(UsbUtilError), 31 #[error("failed to create transfer: {0}")] 32 CreateTransfer(UsbUtilError), 33 #[error("failed to get active config: {0}")] 34 GetActiveConfig(UsbUtilError), 35 #[error("failed to get config descriptor: {0}")] 36 GetConfigDescriptor(UsbUtilError), 37 #[error("failed to get device descriptor: {0}")] 38 GetDeviceDescriptor(UsbUtilError), 39 #[error("failed to get endpoint descriptor for ep: {0}")] 40 GetEndpointDescriptor(u8), 41 #[error("failed to get endpoint type")] 42 GetEndpointType, 43 /// Cannot get interface descriptor for (interface, altsetting). 44 #[error("failed to get interface descriptor for interface {0}, alt setting {1}")] 45 GetInterfaceDescriptor(u8, u8), 46 #[error("failed to get xhci transfer type: {0}")] 47 GetXhciTransferType(XhciTransferError), 48 #[error("request missing required data buffer")] 49 MissingRequiredBuffer, 50 #[error("failed to queue async job: {0}")] 51 QueueAsyncJob(UtilsError), 52 #[error("failed to read buffer: {0}")] 53 ReadBuffer(BufferError), 54 #[error("failed to read control tube: {0}")] 55 ReadControlTube(TubeError), 56 #[error("failed to reset: {0}")] 57 Reset(UsbUtilError), 58 #[error("failed to set active config: {0}")] 59 SetActiveConfig(UsbUtilError), 60 #[error("failed to set interface alt setting: {0}")] 61 SetInterfaceAltSetting(UsbUtilError), 62 #[error("failed to setup control tube: {0}")] 63 SetupControlTube(TubeError), 64 #[error("failed to start async job queue: {0}")] 65 StartAsyncJobQueue(UtilsError), 66 #[error("xhci transfer completed: {0}")] 67 TransferComplete(XhciTransferError), 68 #[error("failed to write buffer: {0}")] 69 WriteBuffer(BufferError), 70 #[error("failed to write control tube: {0}")] 71 WriteControlTube(TubeError), 72 } 73 74 pub type Result<T> = std::result::Result<T, Error>; 75