+ pub fn transmit_packet(
+ &self,
+ link_setup: &LinkSetup,
+ packet_type: PacketType,
+ payload: &[u8],
+ ) -> Result<(), M17Error> {
+ let (pack_type, pack_type_len) = packet_type.as_proto();
+ if pack_type_len + payload.len() > 823 {
+ return Err(M17Error::PacketTooLarge {
+ provided: payload.len(),
+ capacity: 823 - pack_type_len,
+ });
+ }
+ let mut full_payload = vec![];
+ full_payload.extend_from_slice(&pack_type[0..pack_type_len]);
+ full_payload.extend_from_slice(payload);
+ let crc = m17core::crc::m17_crc(&full_payload);
+ full_payload.extend_from_slice(&crc.to_be_bytes());
+ let kiss_frame = KissFrame::new_full_packet(&link_setup.raw.0, &full_payload).unwrap();
+ let _ = self.event_tx.send(TncControlEvent::Kiss(kiss_frame));
+ Ok(())
+ }