const FT8_GRAY: [u8; 8] = [0, 1, 3, 2, 5, 6, 4, 7];
const FT8_GRAY_INV: [u8; 8] = {
let mut inv = [0u8; 8];
let mut i = 0u8;
loop {
inv[FT8_GRAY[i as usize] as usize] = i;
i += 1;
if i == 8 {
break;
}
}
inv
};
const FT4_GRAY: [u8; 4] = [0, 1, 3, 2];
const FT4_GRAY_INV: [u8; 4] = {
let mut inv = [0u8; 4];
let mut i = 0u8;
loop {
inv[FT4_GRAY[i as usize] as usize] = i;
i += 1;
if i == 4 {
break;
}
}
inv
};
#[inline]
pub fn gray8_encode(bin_idx: u8) -> u8 {
FT8_GRAY[(bin_idx & 0x7) as usize]
}
#[inline]
pub fn gray8_decode(tone: u8) -> u8 {
FT8_GRAY_INV[(tone & 0x7) as usize]
}
#[inline]
pub fn gray4_encode(bin_idx: u8) -> u8 {
FT4_GRAY[(bin_idx & 0x3) as usize]
}
#[inline]
pub fn gray4_decode(tone: u8) -> u8 {
FT4_GRAY_INV[(tone & 0x3) as usize]
}