pub struct Config { /* private fields */ }Implementations§
Source§impl Config
impl Config
pub const WORD_COUNT: usize = 64
pub fn new() -> Self
pub fn from_words(words: [u16; 64]) -> Self
pub fn words(&self) -> &[u16; 64]
pub fn vericomm_clock_high_delay(&self) -> u16
pub fn set_vericomm_clock_high_delay(&mut self, delay: u16)
pub fn vericomm_clock_low_delay(&self) -> u16
pub fn set_vericomm_clock_low_delay(&mut self, delay: u16)
pub fn vericomm_isv(&self) -> u8
pub fn set_vericomm_isv(&mut self, value: u8)
pub fn vericomm_clock_check_enabled(&self) -> bool
pub fn set_vericomm_clock_check_enabled(&mut self, enabled: bool)
pub fn veri_sdk_channel_selector(&self) -> u8
pub fn set_veri_sdk_channel_selector(&mut self, channel: u8)
pub fn mode_selector(&self) -> u8
pub fn set_mode_selector(&mut self, mode: u8)
pub fn flash_begin_block_addr(&self) -> u16
pub fn set_flash_begin_block_addr(&mut self, addr: u16)
pub fn flash_begin_cluster_addr(&self) -> u16
pub fn set_flash_begin_cluster_addr(&mut self, addr: u16)
pub fn flash_read_end_block_addr(&self) -> u16
pub fn set_flash_read_end_block_addr(&mut self, addr: u16)
pub fn flash_read_end_cluster_addr(&self) -> u16
pub fn set_flash_read_end_cluster_addr(&mut self, addr: u16)
pub fn licence_key(&self) -> u16
Sourcepub fn security_key(&self) -> u16
pub fn security_key(&self) -> u16
The hardware exposes the security key through the same configuration word used for the active license key.
pub fn set_licence_key(&mut self, key: u16)
Sourcepub fn smims_version_raw(&self) -> u16
pub fn smims_version_raw(&self) -> u16
Examples found in repository?
examples/stress_abort.rs (line 62)
12fn real_main() -> Result<(), Box<dyn Error>> {
13 let mut iterations = 10usize;
14 let mut words = 512usize;
15 let mut window = 4usize;
16 let mut clock_high = 4u16;
17 let mut clock_low = 4u16;
18 let mut settle_ms = 0u64;
19
20 let mut args = env::args().skip(1);
21 while let Some(flag) = args.next() {
22 match flag.as_str() {
23 "--iterations" => {
24 iterations = args
25 .next()
26 .ok_or("missing value for --iterations")?
27 .parse()?
28 }
29 "--words" => words = args.next().ok_or("missing value for --words")?.parse()?,
30 "--window" => window = args.next().ok_or("missing value for --window")?.parse()?,
31 "--clock-high" => {
32 clock_high = args
33 .next()
34 .ok_or("missing value for --clock-high")?
35 .parse()?
36 }
37 "--clock-low" => {
38 clock_low = args
39 .next()
40 .ok_or("missing value for --clock-low")?
41 .parse()?
42 }
43 "--settle-ms" => {
44 settle_ms = args
45 .next()
46 .ok_or("missing value for --settle-ms")?
47 .parse()?
48 }
49 other => return Err(format!("unknown flag `{other}`").into()),
50 }
51 }
52
53 let tx = vec![0x1234u16; words];
54
55 for iteration in 0..iterations {
56 println!("iter={iteration} phase=open");
57 let mut board = Board::open()?;
58 println!(
59 "iter={iteration} config programmed={} fifo_words={} version=0x{:04x}",
60 board.config().is_programmed(),
61 board.config().fifo_size_words(),
62 board.config().smims_version_raw()
63 );
64
65 let mut io = board.configure_io(&IoConfig {
66 clock_high_delay: clock_high,
67 clock_low_delay: clock_low,
68 ..IoConfig::default()
69 })?;
70
71 {
72 let mut rolling = io.transfer_window(words, window)?;
73 for submit_index in 0..window {
74 rolling.submit(&tx)?;
75 println!("iter={iteration} submit={submit_index}");
76 }
77 if settle_ms > 0 {
78 thread::sleep(Duration::from_millis(settle_ms));
79 }
80 }
81
82 io.finish()?;
83 board.close()?;
84
85 println!("iter={iteration} phase=reopen");
86 let reopened = Board::open()?;
87 println!(
88 "iter={iteration} reopened programmed={} fifo_words={} version=0x{:04x}",
89 reopened.config().is_programmed(),
90 reopened.config().fifo_size_words(),
91 reopened.config().smims_version_raw()
92 );
93 reopened.close()?;
94 }
95
96 Ok(())
97}pub fn smims_major_version(&self) -> u8
pub fn smims_sub_version(&self) -> u8
pub fn smims_patch_version(&self) -> u8
Sourcepub fn fifo_size_words(&self) -> u16
pub fn fifo_size_words(&self) -> u16
Returns the FIFO capacity in 16-bit words.
This matches the legacy C++ implementation, where CFG[33] is passed
directly to SMIMS_FIFO_Write / SMIMS_FIFO_Read as a word count.
Examples found in repository?
examples/bench_transfer.rs (line 149)
147fn run_device_bench(options: &Options) -> Result<(), Box<dyn Error>> {
148 let mut board = Board::open_with_transport(options.transport)?;
149 let max_cycles_per_transfer = usize::from(board.config().fifo_size_words()) / WORDS_PER_CYCLE;
150 let mut io = board.configure_io(&IoConfig {
151 clock_high_delay: options.clock_high_delay,
152 clock_low_delay: options.clock_low_delay,
153 ..IoConfig::default()
154 })?;
155
156 if options.window == 0 {
157 return Err("window must be at least 1".into());
158 }
159
160 let template = vec![0x1234u16; options.words];
161 let mut rx = vec![0u16; options.words];
162 let mut outputs = vec![vec![0u16; options.words]; options.window];
163 let mut stage_profile = TransferStageProfile::default();
164
165 let started = Instant::now();
166 if options.window == 1 {
167 if options.profile_stages {
168 for _ in 0..options.iterations {
169 let profile = io.transfer_profiled_into(&template, &mut rx)?;
170 stage_profile.merge(&profile);
171 }
172 } else {
173 for _ in 0..options.iterations {
174 io.transfer(&template, &mut rx)?;
175 }
176 }
177 } else {
178 let mut window = io.transfer_window(options.words, options.window)?;
179 let initial = options.iterations.min(options.window);
180 for _ in 0..initial {
181 if options.profile_stages {
182 let profile = window.submit_profiled(&template)?;
183 stage_profile.merge(&profile);
184 } else {
185 window.submit(&template)?;
186 }
187 }
188
189 let mut submitted = initial;
190 let mut completed = 0usize;
191 while completed < options.iterations {
192 let output = outputs[completed % options.window].as_mut_slice();
193 if options.profile_stages {
194 let profile = window.receive_into_profiled(output)?;
195 stage_profile.merge(&profile);
196 } else {
197 window.receive_into(output)?;
198 }
199 completed += 1;
200
201 if submitted < options.iterations {
202 if options.profile_stages {
203 let profile = window.submit_profiled(&template)?;
204 stage_profile.merge(&profile);
205 } else {
206 window.submit(&template)?;
207 }
208 submitted += 1;
209 }
210 }
211 }
212 let elapsed = started.elapsed();
213 io.finish()?;
214
215 print_summary(
216 "device",
217 options.words,
218 options.iterations,
219 elapsed,
220 Some(max_cycles_per_transfer),
221 );
222 if options.profile_stages {
223 print_stage_profile(&stage_profile, elapsed);
224 }
225 Ok(())
226}More examples
examples/stress_abort.rs (line 61)
12fn real_main() -> Result<(), Box<dyn Error>> {
13 let mut iterations = 10usize;
14 let mut words = 512usize;
15 let mut window = 4usize;
16 let mut clock_high = 4u16;
17 let mut clock_low = 4u16;
18 let mut settle_ms = 0u64;
19
20 let mut args = env::args().skip(1);
21 while let Some(flag) = args.next() {
22 match flag.as_str() {
23 "--iterations" => {
24 iterations = args
25 .next()
26 .ok_or("missing value for --iterations")?
27 .parse()?
28 }
29 "--words" => words = args.next().ok_or("missing value for --words")?.parse()?,
30 "--window" => window = args.next().ok_or("missing value for --window")?.parse()?,
31 "--clock-high" => {
32 clock_high = args
33 .next()
34 .ok_or("missing value for --clock-high")?
35 .parse()?
36 }
37 "--clock-low" => {
38 clock_low = args
39 .next()
40 .ok_or("missing value for --clock-low")?
41 .parse()?
42 }
43 "--settle-ms" => {
44 settle_ms = args
45 .next()
46 .ok_or("missing value for --settle-ms")?
47 .parse()?
48 }
49 other => return Err(format!("unknown flag `{other}`").into()),
50 }
51 }
52
53 let tx = vec![0x1234u16; words];
54
55 for iteration in 0..iterations {
56 println!("iter={iteration} phase=open");
57 let mut board = Board::open()?;
58 println!(
59 "iter={iteration} config programmed={} fifo_words={} version=0x{:04x}",
60 board.config().is_programmed(),
61 board.config().fifo_size_words(),
62 board.config().smims_version_raw()
63 );
64
65 let mut io = board.configure_io(&IoConfig {
66 clock_high_delay: clock_high,
67 clock_low_delay: clock_low,
68 ..IoConfig::default()
69 })?;
70
71 {
72 let mut rolling = io.transfer_window(words, window)?;
73 for submit_index in 0..window {
74 rolling.submit(&tx)?;
75 println!("iter={iteration} submit={submit_index}");
76 }
77 if settle_ms > 0 {
78 thread::sleep(Duration::from_millis(settle_ms));
79 }
80 }
81
82 io.finish()?;
83 board.close()?;
84
85 println!("iter={iteration} phase=reopen");
86 let reopened = Board::open()?;
87 println!(
88 "iter={iteration} reopened programmed={} fifo_words={} version=0x{:04x}",
89 reopened.config().is_programmed(),
90 reopened.config().fifo_size_words(),
91 reopened.config().smims_version_raw()
92 );
93 reopened.close()?;
94 }
95
96 Ok(())
97}Sourcepub fn fifo_size(&self) -> u16
pub fn fifo_size(&self) -> u16
Legacy alias for Self::fifo_size_words.
pub fn flash_total_block(&self) -> u16
pub fn flash_block_size(&self) -> u16
pub fn flash_cluster_size(&self) -> u16
pub fn vericomm_ability(&self) -> bool
pub fn veri_instrument_ability(&self) -> bool
pub fn veri_link_ability(&self) -> bool
pub fn veri_soc_ability(&self) -> bool
pub fn vericomm_pro_ability(&self) -> bool
pub fn veri_sdk_ability(&self) -> bool
Sourcepub fn is_programmed(&self) -> bool
pub fn is_programmed(&self) -> bool
Examples found in repository?
examples/stress_abort.rs (line 60)
12fn real_main() -> Result<(), Box<dyn Error>> {
13 let mut iterations = 10usize;
14 let mut words = 512usize;
15 let mut window = 4usize;
16 let mut clock_high = 4u16;
17 let mut clock_low = 4u16;
18 let mut settle_ms = 0u64;
19
20 let mut args = env::args().skip(1);
21 while let Some(flag) = args.next() {
22 match flag.as_str() {
23 "--iterations" => {
24 iterations = args
25 .next()
26 .ok_or("missing value for --iterations")?
27 .parse()?
28 }
29 "--words" => words = args.next().ok_or("missing value for --words")?.parse()?,
30 "--window" => window = args.next().ok_or("missing value for --window")?.parse()?,
31 "--clock-high" => {
32 clock_high = args
33 .next()
34 .ok_or("missing value for --clock-high")?
35 .parse()?
36 }
37 "--clock-low" => {
38 clock_low = args
39 .next()
40 .ok_or("missing value for --clock-low")?
41 .parse()?
42 }
43 "--settle-ms" => {
44 settle_ms = args
45 .next()
46 .ok_or("missing value for --settle-ms")?
47 .parse()?
48 }
49 other => return Err(format!("unknown flag `{other}`").into()),
50 }
51 }
52
53 let tx = vec![0x1234u16; words];
54
55 for iteration in 0..iterations {
56 println!("iter={iteration} phase=open");
57 let mut board = Board::open()?;
58 println!(
59 "iter={iteration} config programmed={} fifo_words={} version=0x{:04x}",
60 board.config().is_programmed(),
61 board.config().fifo_size_words(),
62 board.config().smims_version_raw()
63 );
64
65 let mut io = board.configure_io(&IoConfig {
66 clock_high_delay: clock_high,
67 clock_low_delay: clock_low,
68 ..IoConfig::default()
69 })?;
70
71 {
72 let mut rolling = io.transfer_window(words, window)?;
73 for submit_index in 0..window {
74 rolling.submit(&tx)?;
75 println!("iter={iteration} submit={submit_index}");
76 }
77 if settle_ms > 0 {
78 thread::sleep(Duration::from_millis(settle_ms));
79 }
80 }
81
82 io.finish()?;
83 board.close()?;
84
85 println!("iter={iteration} phase=reopen");
86 let reopened = Board::open()?;
87 println!(
88 "iter={iteration} reopened programmed={} fifo_words={} version=0x{:04x}",
89 reopened.config().is_programmed(),
90 reopened.config().fifo_size_words(),
91 reopened.config().smims_version_raw()
92 );
93 reopened.close()?;
94 }
95
96 Ok(())
97}pub fn is_pcb_connected(&self) -> bool
pub fn vericomm_clock_continues(&self) -> bool
Trait Implementations§
impl Eq for Config
impl StructuralPartialEq for Config
Auto Trait Implementations§
impl Freeze for Config
impl RefUnwindSafe for Config
impl Send for Config
impl Sync for Config
impl Unpin for Config
impl UnsafeUnpin for Config
impl UnwindSafe for Config
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more