Skip to main content

StatusCode

Enum StatusCode 

Source
pub enum StatusCode {
    Success,
    NotImplemented,
    InvalidParameter,
    InvalidAddress,
    WriteProtect,
    BadAlignment,
    AccessDenied,
    Busy,
    GenericError,
    Unknown(u16),
}
Expand description

Status codes shared by the GVCP and GenCP acknowledgement tables.

Only the codes both protocols define identically live here: 0x0000, 0x80010x8007 and 0x8FFF. Above that the tables diverge, and at 0x800B they actively disagree — GVCP calls it NO_MSG (deprecated), GenCP calls it MSG_TIMEOUT — so a transport-specific code must be decoded by that transport, not here. See ADR-0020.

Values corroborated by Wireshark’s GVCP dissector (epan/dissectors/packet-gvcp.c, GEV_STATUS_*) and aravis (arvgvcpprivate.h, arvuvcpprivate.h), which agree with each other.

Variants§

§

Success

Command completed successfully.

§

NotImplemented

The requested command is not implemented by the device.

§

InvalidParameter

One of the command parameters was invalid or out of range.

§

InvalidAddress

The requested address does not exist on the device.

§

WriteProtect

Attempt to write to a read-only register.

A permanent condition: retrying cannot make it succeed.

§

BadAlignment

The access was not aligned as the underlying technology requires.

§

AccessDenied

Attempt to read a non-readable, or write a non-writable, register.

Distinct from StatusCode::WriteProtect: the register accepts writes in principle but the device is refusing this one, typically because a GenApi lock is engaged or control privilege is not held.

§

Busy

The device is busy and the command may succeed if retried.

The only status in this table worth a retry.

§

GenericError

The device reported a generic error with nothing more specific.

§

Unknown(u16)

A status code not known to this implementation, or specific to one transport. Carries the raw value so a caller can still report it.

Implementations§

Source§

impl StatusCode

Source

pub fn from_raw(raw: u16) -> Self

Convert from the raw status field in an acknowledgement header.

Source

pub const fn to_raw(self) -> u16

Convert to the raw value stored in the packet header.

Source

pub const fn name(self) -> &'static str

The specification’s name for this code, for diagnostics.

Source

pub const fn is_retryable(self) -> bool

Whether retrying the command could plausibly succeed.

True only for StatusCode::Busy. Notably not WriteProtect or AccessDenied, which are refusals rather than congestion.

Trait Implementations§

Source§

impl Clone for StatusCode

Source§

fn clone(&self) -> StatusCode

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for StatusCode

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for StatusCode

Prints the specification name and the raw hex value.

Both halves matter: the name is what makes an error actionable, and the raw value is what lets a reporter match it against a capture. A bare decimal — which is what {:?} on the old Unknown(32774) produced — sent a user to the issue tracker in #45 unable to tell us anything.

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for StatusCode

Source§

fn eq(&self, other: &StatusCode) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for StatusCode

Source§

impl Eq for StatusCode

Source§

impl StructuralPartialEq for StatusCode

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.