1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
pub fn convert_to_12bit_signed(value: i32) -> u16 {
let value = match value < 0 {
true => !value + 1,
false => value,
};
(value << 3) as u16
}
pub fn convert_from_12bit_signed(value: u16) -> i32 {
let value = match value & 0x8000 > 0 {
true => !value + 1,
false => value,
};
(value >> 3) as i32
}