#![allow(dead_code)]
pub const CMD_MSB_DATA_OUT_BYTES_POS: u8 = 0x10;
pub const CMD_MSB_DATA_OUT_BYTES_NEG: u8 = 0x11;
pub const CMD_MSB_DATA_IN_BYTES_POS: u8 = 0x20; pub const CMD_MSB_DATA_IN_BYTES_NEG: u8 = 0x24; pub const CMD_MSB_DATA_IN_OUT_BYTES_POS: u8 = 0x31; pub const CMD_MSB_DATA_IN_OUT_BYTES_NEG: u8 = 0x34;
pub const CMD_MSB_DATA_OUT_BITS_POS: u8 = 0x12;
pub const CMD_MSB_DATA_OUT_BITS_NEG: u8 = 0x13;
pub const CMD_MSB_DATA_IN_BITS_POS: u8 = 0x22;
pub const CMD_MSB_DATA_IN_BITS_NEG: u8 = 0x26;
pub const CMD_MSB_DATA_IN_OUT_BITS_POS: u8 = 0x33;
pub const CMD_MSB_DATA_IN_OUT_BITS_NEG: u8 = 0x36;
pub const CMD_SET_BITS_LOW: u8 = 0x80; pub const CMD_SET_BITS_HIGH: u8 = 0x82; pub const CMD_READ_BITS_LOW: u8 = 0x81;
pub const CMD_READ_BITS_HIGH: u8 = 0x83;
pub const CMD_LOOPBACK_ON: u8 = 0x84;
pub const CMD_LOOPBACK_OFF: u8 = 0x85;
pub const CMD_SET_TCK_DIVISOR: u8 = 0x86;
pub const CMD_SEND_IMMEDIATE: u8 = 0x87; pub const CMD_WAIT_ON_IO_HIGH: u8 = 0x88;
pub const CMD_WAIT_ON_IO_LOW: u8 = 0x89;
pub fn build_set_divisor_cmd(divisor: u16) -> [u8; 3] {
[
CMD_SET_TCK_DIVISOR,
(divisor & 0xFF) as u8,
((divisor >> 8) & 0xFF) as u8,
]
}
pub fn build_set_low_gpio_cmd(value: u8, direction: u8) -> [u8; 3] {
[CMD_SET_BITS_LOW, value, direction]
}
pub fn build_set_high_gpio_cmd(value: u8, direction: u8) -> [u8; 3] {
[CMD_SET_BITS_HIGH, value, direction]
}
pub fn build_write_bytes_cmd(data: &[u8]) -> Vec<u8> {
let len = data.len();
if len == 0 {
return Vec::new();
}
let len_val = (len - 1) as u16;
let mut cmd = Vec::with_capacity(3 + len);
cmd.push(CMD_MSB_DATA_OUT_BYTES_NEG);
cmd.push((len_val & 0xFF) as u8);
cmd.push(((len_val >> 8) & 0xFF) as u8);
cmd.extend_from_slice(data);
cmd
}
pub fn build_read_bytes_cmd(len: usize) -> Vec<u8> {
if len == 0 {
return Vec::new();
}
let len_val = (len - 1) as u16;
vec![
CMD_MSB_DATA_IN_BYTES_POS,
(len_val & 0xFF) as u8,
((len_val >> 8) & 0xFF) as u8,
]
}
pub fn build_rw_bytes_cmd(data: &[u8]) -> Vec<u8> {
let len = data.len();
if len == 0 {
return Vec::new();
}
let len_val = (len - 1) as u16;
let mut cmd = Vec::with_capacity(3 + len);
cmd.push(CMD_MSB_DATA_IN_OUT_BYTES_POS); cmd.push((len_val & 0xFF) as u8);
cmd.push(((len_val >> 8) & 0xFF) as u8);
cmd.extend_from_slice(data);
cmd
}
pub fn build_loopback_cmd(enable: bool) -> u8 {
if enable {
CMD_LOOPBACK_ON
} else {
CMD_LOOPBACK_OFF
}
}