Skip to main content

Blaster

Struct Blaster 

Source
pub struct Blaster<'a, B: UsbBus, E, TDI: OutputPin<Error = E>, TCK: OutputPin<Error = E>, TMS: OutputPin<Error = E>, TDO: InputPin<Error = E>> { /* private fields */ }
Expand description

Blaster device class

Implementations§

Source§

impl<'a, B: UsbBus, E, TDI: OutputPin<Error = E>, TCK: OutputPin<Error = E>, TMS: OutputPin<Error = E>, TDO: InputPin<Error = E>> Blaster<'a, B, E, TDI, TCK, TMS, TDO>

Source

pub fn new( alloc: &'a UsbBusAllocator<B>, tdi: TDI, tck: TCK, tms: TMS, tdo: TDO, ) -> Blaster<'a, B, E, TDI, TCK, TMS, TDO>

Allocate a Blaster on the USB bus. Takes control of the four JTAG pins. The JTAG pins can be any pins you want, just make sure you assign them correctly.

Source

pub fn read(&mut self) -> Result<usize>

Read data from the host output endpoint into the Blaster’s internal read buffer.

Source

pub fn write(&mut self, heartbeat: bool) -> Result<usize>

Write data to the host input endpoint from the Blaster’s internal write buffer. The heartbeat parameter must be true at least once every 10 milliseconds, so that the blaster can output the modem status. See libftdi ftdi.c for more on this. Otherwise, a BSOD could occur on Windows A safe default for the heartbeat seems to be true all the time. This will output the modem status whenever the host reads the device.

Source

pub fn handle(&mut self) -> Result<(), E>

Runs all pending operations from the internal read buffer until either no operations are left or the internal write buffer is full. If a GPIO error occurs, the JTAG state machine will enter an undefined state requiring a forced USB bus reset.

Trait Implementations§

Source§

impl<B, E, TDI: OutputPin<Error = E>, TCK: OutputPin<Error = E>, TMS: OutputPin<Error = E>, TDO: InputPin<Error = E>> UsbClass<B> for Blaster<'_, B, E, TDI, TCK, TMS, TDO>
where B: UsbBus, E: Debug,

Source§

fn get_configuration_descriptors( &self, writer: &mut DescriptorWriter<'_>, ) -> Result<()>

Called when a GET_DESCRIPTOR request is received for a configuration descriptor. When called, the implementation should write its interface, endpoint and any extra class descriptors into writer. The configuration descriptor itself will be written by UsbDevice and shouldn’t be written by classes. Read more
Source§

fn reset(&mut self)

Called after a USB reset after the bus reset sequence is complete.
Source§

fn control_in(&mut self, xfer: ControlIn<'_, '_, '_, B>)

Called when a control request is received with direction DeviceToHost. Read more
Source§

fn control_out(&mut self, xfer: ControlOut<'_, '_, '_, B>)

Called when a control request is received with direction HostToDevice. Read more
Source§

fn get_bos_descriptors( &self, writer: &mut BosWriter<'_, '_>, ) -> Result<(), UsbError>

Called when a GET_DESCRIPTOR request is received for a BOS descriptor. When called, the implementation should write its blobs such as capability descriptors into writer. The BOS descriptor itself will be written by UsbDevice and shouldn’t be written by classes.
Source§

fn get_string(&self, index: StringIndex, lang_id: u16) -> Option<&str>

Gets a class-specific string descriptor. Read more
Source§

fn poll(&mut self)

Called whenever the UsbDevice is polled.
Source§

fn endpoint_setup(&mut self, addr: EndpointAddress)

Called when endpoint with address addr has received a SETUP packet. Implementing this shouldn’t be necessary in most cases, but is provided for completeness’ sake. Read more
Source§

fn endpoint_out(&mut self, addr: EndpointAddress)

Called when endpoint with address addr has received data (OUT packet). Read more
Source§

fn endpoint_in_complete(&mut self, addr: EndpointAddress)

Called when endpoint with address addr has completed transmitting data (IN packet). Read more

Auto Trait Implementations§

§

impl<'a, B, E, TDI, TCK, TMS, TDO> Freeze for Blaster<'a, B, E, TDI, TCK, TMS, TDO>
where TDI: Freeze, TCK: Freeze, TMS: Freeze, TDO: Freeze,

§

impl<'a, B, E, TDI, TCK, TMS, TDO> RefUnwindSafe for Blaster<'a, B, E, TDI, TCK, TMS, TDO>

§

impl<'a, B, E, TDI, TCK, TMS, TDO> Send for Blaster<'a, B, E, TDI, TCK, TMS, TDO>
where TDI: Send, TCK: Send, TMS: Send, TDO: Send,

§

impl<'a, B, E, TDI, TCK, TMS, TDO> Sync for Blaster<'a, B, E, TDI, TCK, TMS, TDO>
where TDI: Sync, TCK: Sync, TMS: Sync, TDO: Sync,

§

impl<'a, B, E, TDI, TCK, TMS, TDO> Unpin for Blaster<'a, B, E, TDI, TCK, TMS, TDO>
where TDI: Unpin, TCK: Unpin, TMS: Unpin, TDO: Unpin,

§

impl<'a, B, E, TDI, TCK, TMS, TDO> UnsafeUnpin for Blaster<'a, B, E, TDI, TCK, TMS, TDO>
where TDI: UnsafeUnpin, TCK: UnsafeUnpin, TMS: UnsafeUnpin, TDO: UnsafeUnpin,

§

impl<'a, B, E, TDI, TCK, TMS, TDO> UnwindSafe for Blaster<'a, B, E, TDI, TCK, TMS, TDO>
where TDI: UnwindSafe, TCK: UnwindSafe, TMS: UnwindSafe, TDO: UnwindSafe,

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