jtag 0.0.3

Rust JTAG abstraction library
Documentation
use crate::*;

use bitvec::prelude::*;

struct TestBitbangJTAGAdapter {
    jtag_state: JTAGAdapterState,
    chunkshift_state: ChunkShifterJTAGAdapterState,
    bitbang_state: BitbangJTAGAdapterState,
}
impl AsMut<JTAGAdapterState> for TestBitbangJTAGAdapter {
    fn as_mut(&mut self) -> &mut JTAGAdapterState {
        &mut self.jtag_state
    }
}
impl AsMut<ChunkShifterJTAGAdapterState> for TestBitbangJTAGAdapter {
    fn as_mut(&mut self) -> &mut ChunkShifterJTAGAdapterState {
        &mut self.chunkshift_state
    }
}
impl AsMut<BitbangJTAGAdapterState> for TestBitbangJTAGAdapter {
    fn as_mut(&mut self) -> &mut BitbangJTAGAdapterState {
        &mut self.bitbang_state
    }
}
impl TestBitbangJTAGAdapter {
    fn new() -> Self {
        Self {
            jtag_state: JTAGAdapterState::new(),
            chunkshift_state: ChunkShifterJTAGAdapterState::new(),
            bitbang_state: BitbangJTAGAdapterState::new(),
        }
    }
}

impl BitbangJTAGAdapter for TestBitbangJTAGAdapter {
    fn set_clk_speed(&mut self, _clk_hz: u64) -> u64 {
        todo!()
    }

    fn shift_one_bit(&mut self, _tms: bool, _tdi: bool) -> bool {
        todo!()
    }
}

struct TestChunkJTAGAdapter {
    jtag_state: JTAGAdapterState,
    chunkshift_state: ChunkShifterJTAGAdapterState,
}
impl AsMut<JTAGAdapterState> for TestChunkJTAGAdapter {
    fn as_mut(&mut self) -> &mut JTAGAdapterState {
        &mut self.jtag_state
    }
}
impl AsMut<ChunkShifterJTAGAdapterState> for TestChunkJTAGAdapter {
    fn as_mut(&mut self) -> &mut ChunkShifterJTAGAdapterState {
        &mut self.chunkshift_state
    }
}
impl TestChunkJTAGAdapter {
    fn new() -> Self {
        Self {
            jtag_state: JTAGAdapterState::new(),
            chunkshift_state: ChunkShifterJTAGAdapterState::new(),
        }
    }
}

impl ChunkShifterJTAGAdapter for TestChunkJTAGAdapter {
    fn delay_ns(&mut self, _ns: u64) -> u64 {
        todo!()
    }
    fn set_clk_speed(&mut self, _clk_hz: u64) -> u64 {
        todo!()
    }

    fn shift_tms_chunk(&mut self, _tms_chunk: &BitSlice) {
        todo!()
    }
    fn shift_tdi_chunk(&mut self, _tdi_chunk: &BitSlice, _tms_exit: bool) {
        todo!()
    }
    fn shift_tditdo_chunk(&mut self, _tdi_chunk: &BitSlice, _tms_exit: bool) -> BitVec {
        todo!()
    }
}

struct TestStateJTAGAdapter {
    jtag_state: JTAGAdapterState,
}
impl AsMut<JTAGAdapterState> for TestStateJTAGAdapter {
    fn as_mut(&mut self) -> &mut JTAGAdapterState {
        &mut self.jtag_state
    }
}
impl TestStateJTAGAdapter {
    fn new() -> Self {
        Self {
            jtag_state: JTAGAdapterState::new(),
        }
    }
}

impl StateTrackingJTAGAdapter for TestStateJTAGAdapter {
    fn execute_stjtag_action(&mut self, _action: &JTAGAction) -> JTAGOutput {
        todo!()
    }
}

#[test]
fn test_bitbang_adapter() {
    let mut testadapter = TestBitbangJTAGAdapter::new();

    testadapter.reset_to_tlr();
}

#[test]
fn test_chunked_adapter() {
    let mut testadapter = TestChunkJTAGAdapter::new();

    testadapter.reset_to_tlr();
}

#[test]
fn test_state_tracking_adapter() {
    let mut testadapter = TestStateJTAGAdapter::new();

    testadapter.reset_to_tlr();
}