Struct probe_rs::probe::Probe

source ·
pub struct Probe { /* private fields */ }
Expand description

The Probe struct is a generic wrapper over the different probes supported.

§Examples

§Open the first probe found

The list_all and from_probe_info functions can be used to create a new Probe:

use probe_rs::probe::{Probe, list::Lister};

let lister = Lister::new();

let probe_list = lister.list_all();
let probe = probe_list[0].open();

Implementations§

source§

impl Probe

source

pub fn new(probe: impl DebugProbe + 'static) -> Self

Create a new probe from a more specific probe driver.

source

pub fn from_specific_probe(probe: Box<dyn DebugProbe>) -> Self

Same as Probe::new but without automatic boxing in case you already have a box.

source

pub fn get_name(&self) -> String

Get the human readable name for the probe.

source

pub fn attach( self, target: impl Into<TargetSelector>, permissions: Permissions ) -> Result<Session, Error>

Attach to the chip.

This runs all the necessary protocol init routines.

If this doesn’t work, you might want to try Probe::attach_under_reset

source

pub fn attach_to_unspecified(&mut self) -> Result<(), Error>

Attach to a target without knowing what target you have at hand. This can be used for automatic device discovery or performing operations on an unspecified target.

source

pub fn attach_to_unspecified_under_reset(&mut self) -> Result<(), Error>

source

pub fn attach_under_reset( self, target: impl Into<TargetSelector>, permissions: Permissions ) -> Result<Session, Error>

Attach to the chip under hard-reset.

This asserts the reset pin via the probe, plays the protocol init routines and deasserts the pin. This is necessary if the chip is not responding to the SWD reset sequence. For example this can happen if the chip has the SWDIO pin remapped.

source

pub fn select_protocol( &mut self, protocol: WireProtocol ) -> Result<(), DebugProbeError>

Selects the transport protocol to be used by the debug probe.

source

pub fn protocol(&self) -> Option<WireProtocol>

Get the currently selected protocol

Depending on the probe, this might not be available.

source

pub fn detach(&mut self) -> Result<(), Error>

Leave debug mode

source

pub fn target_reset(&mut self) -> Result<(), DebugProbeError>

Resets the target device.

source

pub fn target_reset_assert(&mut self) -> Result<(), DebugProbeError>

Asserts the reset of the target. This is always the hard reset which means the reset wire has to be connected to work.

This is not supported on all probes.

source

pub fn target_reset_deassert(&mut self) -> Result<(), DebugProbeError>

Deasserts the reset of the target. This is always the hard reset which means the reset wire has to be connected to work.

This is not supported on all probes.

source

pub fn set_speed(&mut self, speed_khz: u32) -> Result<u32, DebugProbeError>

Configure protocol speed to use in kHz

source

pub fn set_scan_chain( &mut self, scan_chain: Vec<ScanChainElement> ) -> Result<(), DebugProbeError>

Configure the scan chain to use for the attached target.

See DebugProbe::set_scan_chain for more information and usage

source

pub fn scan_chain(&self) -> Result<&[ScanChainElement], DebugProbeError>

Returns the JTAG scan chain

source

pub fn select_jtag_tap(&mut self, index: usize) -> Result<(), DebugProbeError>

Selects the JTAG TAP to be used for communication.

source

pub fn speed_khz(&self) -> u32

Get the currently used maximum speed for the debug protocol in kHz.

Not all probes report which speed is used, meaning this value is not always the actual speed used. However, the speed should not be any higher than this value.

source

pub fn has_xtensa_interface(&self) -> bool

Check if the probe has an interface to debug Xtensa chips.

source

pub fn try_get_xtensa_interface<'probe>( &'probe mut self, state: &'probe mut XtensaDebugInterfaceState ) -> Result<XtensaCommunicationInterface<'probe>, DebugProbeError>

Try to get a XtensaCommunicationInterface, which can can be used to communicate with chips using the Xtensa architecture.

The user is responsible for creating and managing the XtensaDebugInterfaceState state object.

If an error occurs while trying to connect, the probe is returned.

source

pub fn has_arm_interface(&self) -> bool

Check if the probe has an interface to debug ARM chips.

source

pub fn try_into_arm_interface<'probe>( self ) -> Result<Box<dyn UninitializedArmProbe + 'probe>, (Self, DebugProbeError)>

Try to get a trait object implementing UninitializedArmProbe, which can can be used to communicate with chips using the ARM architecture.

If an error occurs while trying to connect, the probe is returned.

source

pub fn has_riscv_interface(&self) -> bool

Check if the probe has an interface to debug RISC-V chips.

source

pub fn try_get_riscv_interface_builder<'probe>( &'probe mut self ) -> Result<Box<dyn RiscvInterfaceBuilder<'probe> + 'probe>, DebugProbeError>

Try to get a RiscvInterfaceBuilder object, which can be used to set up a communication interface with chips using the RISC-V architecture.

The returned object can be used to create the interface state, which is required to attach to the RISC-V target. The user is responsible for managing this state object.

If an error occurs while trying to connect, the probe is returned.

source

pub fn get_swo_interface(&self) -> Option<&dyn SwoAccess>

Gets a SWO interface from the debug probe.

This does not work on all probes.

source

pub fn get_swo_interface_mut(&mut self) -> Option<&mut dyn SwoAccess>

Gets a mutable SWO interface from the debug probe.

This does not work on all probes.

source

pub fn try_as_dap_probe(&mut self) -> Option<&mut dyn DapProbe>

Gets a DAP interface from the debug probe.

This does not work on all probes.

source

pub fn get_target_voltage(&mut self) -> Result<Option<f32>, DebugProbeError>

Try reading the target voltage of via the connected voltage pin.

This does not work on all probes.

Try to get a J-Link interface from the debug probe.

Trait Implementations§

source§

impl Debug for Probe

source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Probe

§

impl !RefUnwindSafe for Probe

§

impl Send for Probe

§

impl !Sync for Probe

§

impl Unpin for Probe

§

impl !UnwindSafe for Probe

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> Conv for T

source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
source§

impl<T> FmtForward for T

source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

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

source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> Tap for T

source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
source§

impl<T> TryConv for T

source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
source§

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

§

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>,

§

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.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more