dis_rs/common/signal/
writer.rs1use crate::common::model::length_padded_to_num;
2use crate::common::signal::model::{EncodingScheme, Signal};
3use crate::common::{Serialize, SerializePdu, SupportedVersion};
4use crate::constants::{FOUR_OCTETS, ONE_BYTE_IN_BITS};
5use bytes::{BufMut, BytesMut};
6
7impl SerializePdu for Signal {
8 fn serialize_pdu(&self, _version: SupportedVersion, buf: &mut BytesMut) -> u16 {
9 let radio_ref_id_bytes = self.radio_reference_id.serialize(buf);
10 buf.put_u16(self.radio_number);
11 let encoding_scheme_bytes = self.encoding_scheme.serialize(buf);
12 buf.put_u16(self.tdl_type.into());
13 buf.put_u32(self.sample_rate);
14 buf.put_u16((self.data.len() * ONE_BYTE_IN_BITS) as u16);
15 buf.put_u16(self.samples);
16 buf.put(&self.data[..]);
17 let padded_record_lengths = length_padded_to_num(self.data.len(), FOUR_OCTETS);
18 buf.put_bytes(0u8, padded_record_lengths.padding_length);
19
20 radio_ref_id_bytes
21 + 2
22 + encoding_scheme_bytes
23 + 10
24 + padded_record_lengths.record_length as u16
25 }
26}
27
28impl Serialize for EncodingScheme {
29 #[allow(clippy::match_same_arms)]
30 fn serialize(&self, buf: &mut BytesMut) -> u16 {
31 match self {
32 EncodingScheme::EncodedAudio {
33 encoding_class,
34 encoding_type,
35 } => {
36 let class_bits = u16::from(*encoding_class) << 14;
37 let type_bits = u16::from(*encoding_type);
38 buf.put_u16(class_bits | type_bits);
39 2
40 }
41 EncodingScheme::RawBinaryData {
42 encoding_class,
43 nr_of_messages,
44 } => {
45 let class_bits = u16::from(*encoding_class) << 14;
46 buf.put_u16(class_bits | *nr_of_messages);
47 2
48 }
49 EncodingScheme::ApplicationSpecificData { encoding_class, .. } => {
50 let class_bits = u16::from(*encoding_class) << 14;
51 buf.put_u16(class_bits);
52 2
53 }
54 EncodingScheme::DatabaseIndex { encoding_class, .. } => {
55 let class_bits = u16::from(*encoding_class) << 14;
56 buf.put_u16(class_bits);
57 2
58 }
59 EncodingScheme::Unspecified { encoding_class } => {
60 let class_bits = u16::from(*encoding_class) << 14;
61 buf.put_u16(class_bits);
62 2
63 }
64 }
65 }
66}