waverave_hackrf/
error.rs

1use std::ops::Range;
2
3use crate::HackRf;
4
5#[derive(Debug, thiserror::Error)]
6pub enum Error {
7    #[error("I/O error")]
8    Io(#[from] std::io::Error),
9    #[error("USB transfer error")]
10    Transfer(#[from] nusb::transfer::TransferError),
11    #[error("Address (0x{addr:x}) out of range (0x{}..0x{})", .range.start, .range.end)]
12    AddressRange { range: Range<u32>, addr: u32 },
13    #[error("Value (0x{val:x}) out of range (0x{}..0x{})", .range.start, .range.end)]
14    ValueRange { range: Range<u32>, val: u32 },
15    #[error("Tuning Value ({val:x} Hz) out of range ({}..{} Hz)", .range.start, .range.end)]
16    TuningRange { range: Range<u64>, val: u64 },
17    #[error("Invalid return data")]
18    ReturnData,
19    #[error("Requires API >= 0x{:x}, but device has API 0x{:x}", needed, actual)]
20    ApiVersion { needed: u16, actual: u16 },
21    #[error("Invalid Parameter: {0}")]
22    InvalidParameter(&'static str),
23    #[error("USB transfer pipe is full of pending transfers")]
24    TransferBusy,
25}
26
27/// An error from trying to change HackRF states and failing.
28///
29/// Always contains the HackRF instance, but in an unknown state. To try and
30/// return to a known state, try calling [`HackRf::turn_off`].
31pub struct StateChangeError {
32    /// The error that occurred while trying to change state.
33    pub err: Error,
34    /// The HackRF instance.
35    pub rf: HackRf,
36}
37
38impl core::error::Error for StateChangeError {
39    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
40        Some(&self.err)
41    }
42}
43
44impl core::fmt::Display for StateChangeError {
45    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
46        f.write_str("Failed to change state")
47    }
48}
49
50impl core::fmt::Debug for StateChangeError {
51    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
52        f.debug_struct("StateChangeError")
53            .field("err", &self.err)
54            .finish_non_exhaustive()
55    }
56}