opentitanlib/transport/
errors.rs1use serde::{Deserialize, Serialize};
6use thiserror::Error;
7
8use super::Capability;
9use crate::impl_serializable_error;
10
11#[derive(Error, Debug, Serialize, Deserialize)]
15pub enum TransportError {
16 #[error("Found no USB device. Search criteria was: {0}")]
17 NoDevice(String),
18 #[error("Found multiple USB devices ({0}), use --usb-serial. Search criteria was: {1}")]
19 MultipleDevices(String, String),
20 #[error("USB error: {0}")]
21 UsbGenericError(String),
22 #[error("Error opening USB device: {0}")]
23 UsbOpenError(String),
24 #[error("Transport does not support {0:?}")]
25 InvalidInterface(TransportInterfaceType),
26 #[error("Transport does not support {0:?} instance {1}")]
27 InvalidInstance(TransportInterfaceType, String),
28 #[error("Encountered non-unicode device path")]
29 UnicodePathError,
30 #[error("Error opening {0}: {1}")]
31 OpenError(String, String),
32 #[error("Error reading from {0}: {1}")]
33 ReadError(String, String),
34 #[error("FPGA programming failed: {0}")]
35 FpgaProgramFailed(String),
36 #[error("Firmware programming failed: {0}")]
37 FirmwareProgramFailed(String),
38 #[error("Error clearing FPGA bitstream")]
39 ClearBitstreamFailed(),
40 #[error("PLL programming failed: {0}")]
41 PllProgramFailed(String),
42 #[error("Invalid pin strapping name \"{0}\"")]
43 InvalidStrappingName(String),
44 #[error("Invalid IO expander name \"{0}\"")]
45 InvalidIoExpanderName(String),
46 #[error("Invalid pin {1} for IO expander \"{0}\"")]
47 InvalidIoExpanderPinNo(String, u32),
48 #[error("Transport does not support the requested operation")]
49 UnsupportedOperation,
50 #[error("Requested operation invalid at this time")]
51 InvalidOperation,
52 #[error("Error communicating with FTDI: {0}")]
53 FtdiError(String),
54 #[error("Error communicating with debugger: {0}")]
55 CommunicationError(String),
56 #[error("Proxy unable to connect to `{0}`: {1}")]
57 ProxyConnectError(String, String),
58 #[error("Requested capabilities {0:?}, but capabilities {1:?} are supplied")]
59 MissingCapabilities(Capability, Capability),
60 #[error("Inconsistent configuration for {0:?} instance \"{1}\"")]
61 InconsistentConf(TransportInterfaceType, String),
62 #[error("Inconsistent configuration of transport interface \"{0}\" vs. \"{1}\"")]
63 InconsistentInterfaceConf(String, String),
64 #[error("Strapping \"{0}\" pin \"{1}\" cannot declare \"alias_of\"")]
65 InvalidConfStrapAlias(String, String),
66 #[error("Strapping \"{0}\" pin \"{1}\" cannot declare \"invert\"")]
67 InvalidConfStrapInvert(String, String),
68 #[error("Expected value \"{1}\" for key \"{0}\", found \"{2}\"")]
69 RequiresUnequal(String, String, String),
70 #[error("Expected value \"{1}\" for key \"{0}\", found none")]
71 RequiresMissing(String, String),
72}
73impl_serializable_error!(TransportError);
74
75#[derive(Debug, serde::Serialize, serde::Deserialize)]
77pub enum TransportInterfaceType {
78 Gpio,
79 Uart,
80 Spi,
81 I2c,
82 Jtag,
83 Emulator,
84 FpgaOps,
85 ProxyOps,
86 GpioMonitoring,
87 GpioBitbanging,
88 IoExpander,
89 Provides,
90}