-use crate::address::{encode_address, Address};
+use crate::{
+ address::{encode_address, Address},
+ bits::BitsMut,
+};
pub(crate) const LSF_SYNC: [i8; 8] = [1, 1, 1, 1, -1, -1, 1, -1];
pub(crate) const BERT_SYNC: [i8; 8] = [-1, 1, -1, -1, 1, 1, 1, 1];
pub(crate) const STREAM_SYNC: [i8; 8] = [-1, -1, -1, -1, 1, 1, -1, 1];
pub(crate) const PACKET_SYNC: [i8; 8] = [1, -1, 1, 1, -1, -1, -1, -1];
+pub(crate) const PREAMBLE: [i8; 8] = [1, -1, 1, -1, 1, -1, 1, -1];
+pub(crate) const END_OF_TRANSMISSION: [i8; 8] = [1, 1, 1, 1, 1, 1, -1, 1];
#[derive(Debug, Clone, PartialEq, Eq, Copy)]
pub enum Mode {
}
pub fn set_destination(&mut self, destination: &Address) {
- self.0[0..6].copy_from_slice(&encode_address(&destination));
+ self.0[0..6].copy_from_slice(&encode_address(destination));
self.recalculate_crc();
}
pub fn set_source(&mut self, source: &Address) {
- self.0[6..12].copy_from_slice(&encode_address(&source));
+ self.0[6..12].copy_from_slice(&encode_address(source));
self.recalculate_crc();
}
self.recalculate_crc();
}
+ pub fn set_channel_access_number(&mut self, number: u8) {
+ let mut bits = BitsMut::new(&mut self.0);
+ bits.set_bit(12 * 8 + 5, (number >> 3) & 1);
+ bits.set_bit(12 * 8 + 6, (number >> 2) & 1);
+ bits.set_bit(12 * 8 + 7, (number >> 1) & 1);
+ bits.set_bit(13 * 8, number & 1);
+ self.recalculate_crc();
+ }
+
fn recalculate_crc(&mut self) {
let new_crc = crate::crc::m17_crc(&self.0[0..28]);
self.0[28..30].copy_from_slice(&new_crc.to_be_bytes());
Self::new()
}
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn set_can() {
+ let mut frame = LsfFrame([0u8; 30]);
+ frame.set_channel_access_number(11);
+ assert_eq!(frame.channel_access_number(), 11);
+ }
+}