Trait probe_rs::DebugProbe

source ·
pub trait DebugProbe: Send + Debug {
Show 23 methods // Required methods fn new_from_selector( selector: impl Into<DebugProbeSelector> ) -> Result<Box<Self>, DebugProbeError> where Self: Sized; fn get_name(&self) -> &str; fn speed_khz(&self) -> u32; fn set_speed(&mut self, speed_khz: u32) -> Result<u32, DebugProbeError>; fn set_scan_chain( &mut self, scan_chain: Vec<ScanChainElement> ) -> Result<(), DebugProbeError>; fn attach(&mut self) -> Result<(), DebugProbeError>; fn detach(&mut self) -> Result<(), Error>; fn target_reset(&mut self) -> Result<(), DebugProbeError>; fn target_reset_assert(&mut self) -> Result<(), DebugProbeError>; fn target_reset_deassert(&mut self) -> Result<(), DebugProbeError>; fn select_protocol( &mut self, protocol: WireProtocol ) -> Result<(), DebugProbeError>; fn active_protocol(&self) -> Option<WireProtocol>; fn into_probe(self: Box<Self>) -> Box<dyn DebugProbe>; // Provided methods fn has_arm_interface(&self) -> bool { ... } fn try_get_arm_interface<'probe>( self: Box<Self> ) -> Result<Box<dyn UninitializedArmProbe + 'probe>, (Box<dyn DebugProbe>, DebugProbeError)> { ... } fn try_get_riscv_interface( self: Box<Self> ) -> Result<RiscvCommunicationInterface, (Box<dyn DebugProbe>, RiscvError)> { ... } fn has_riscv_interface(&self) -> bool { ... } fn try_get_xtensa_interface( self: Box<Self> ) -> Result<XtensaCommunicationInterface, (Box<dyn DebugProbe>, DebugProbeError)> { ... } fn has_xtensa_interface(&self) -> bool { ... } fn get_swo_interface(&self) -> Option<&dyn SwoAccess> { ... } fn get_swo_interface_mut(&mut self) -> Option<&mut dyn SwoAccess> { ... } fn try_as_dap_probe(&mut self) -> Option<&mut dyn DapProbe> { ... } fn get_target_voltage(&mut self) -> Result<Option<f32>, DebugProbeError> { ... }
}
Expand description

An abstraction over general debug probe functionality.

This trait has to be implemented by ever debug probe driver.

Required Methods§

source

fn new_from_selector( selector: impl Into<DebugProbeSelector> ) -> Result<Box<Self>, DebugProbeError>
where Self: Sized,

Creates a new boxed DebugProbe from a given DebugProbeSelector. This will be called for all available debug drivers when discovering probes. When opening, it will open the first probe which succeeds during this call.

source

fn get_name(&self) -> &str

Get human readable name for the probe.

source

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

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

Set the speed in kHz used for communication with the target device.

The desired speed might not be supported by the probe. If the desired speed is not directly supported, a lower speed will be selected if possible.

If possible, the actual speed used is returned by the function. Some probes cannot report this, so the value may be inaccurate.

If the requested speed is not supported, DebugProbeError::UnsupportedSpeed will be returned.

source

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

Set the JTAG scan chain information for the target under debug.

This allows the probe to know which TAPs are in the scan chain and their position and IR lengths.

If the scan chain is provided, and the selected protocol is JTAG, the probe will automatically configure the JTAG interface to match the scan chain configuration without trying to determine the chain at runtime.

This is called by the Session when attaching to a target. So this does not need to be called manually, unless you want to modify the scan chain. You must be attached to a target to set the scan_chain since the scan chain only applies to the attached target.

source

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

Attach to the chip.

This should run all the necessary protocol init routines.

source

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

Detach from the chip.

This should run all the necessary protocol deinit routines.

If the probe uses batched commands, this will also cause all remaining commands to be executed. If an error occurs during this execution, the probe might remain in the attached state.

source

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

This should hard reset the target device.

source

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

This should assert the reset pin of the target via debug probe.

source

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

This should deassert the reset pin of the target via debug probe.

source

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

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

source

fn active_protocol(&self) -> Option<WireProtocol>

Get the transport protocol currently in active use by the debug probe.

source

fn into_probe(self: Box<Self>) -> Box<dyn DebugProbe>

Boxes itself.

Provided Methods§

source

fn has_arm_interface(&self) -> bool

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

source

fn try_get_arm_interface<'probe>( self: Box<Self> ) -> Result<Box<dyn UninitializedArmProbe + 'probe>, (Box<dyn DebugProbe>, DebugProbeError)>

Get the dedicated interface to debug ARM chips. To check that the probe actually supports this, call DebugProbe::has_arm_interface first.

source

fn try_get_riscv_interface( self: Box<Self> ) -> Result<RiscvCommunicationInterface, (Box<dyn DebugProbe>, RiscvError)>

Get the dedicated interface to debug RISC-V chips. Ensure that the probe actually supports this by calling DebugProbe::has_riscv_interface first.

source

fn has_riscv_interface(&self) -> bool

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

source

fn try_get_xtensa_interface( self: Box<Self> ) -> Result<XtensaCommunicationInterface, (Box<dyn DebugProbe>, DebugProbeError)>

Get the dedicated interface to debug Xtensa chips. Ensure that the probe actually supports this by calling DebugProbe::has_xtensa_interface first.

source

fn has_xtensa_interface(&self) -> bool

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

source

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

Get a SWO interface from the debug probe.

This is not available on all debug probes.

source

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

Get a mutable SWO interface from the debug probe.

This is not available on all debug probes.

source

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

Try creating a DAP interface for the given probe.

This is not available on all probes.

source

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

Reads the target voltage in Volts, if possible. Returns Ok(None) if the probe doesn’t support reading the target voltage.

Implementors§