]> code.octet-stream.net Git - m17rt/blobdiff - m17codec2/src/lib.rs
Spruce up the high-level API for specifying addresses for transmission
[m17rt] / m17codec2 / src / lib.rs
index e33409f81b25f2176fd2bc78d9aa30b4f42f2d4d..5eb54a4d6d4f20b7c2721bc85b2f39e6afcb71d2 100755 (executable)
@@ -6,6 +6,8 @@ use cpal::{Sample, SampleFormat, SampleRate};
 use log::debug;
 use m17app::adapter::StreamAdapter;
 use m17app::app::TxHandle;
 use log::debug;
 use m17app::adapter::StreamAdapter;
 use m17app::app::TxHandle;
+use m17app::link_setup::LinkSetup;
+use m17app::link_setup::M17Address;
 use m17core::address::Address;
 use m17core::address::Callsign;
 use m17core::protocol::LsfFrame;
 use m17core::address::Address;
 use m17core::address::Callsign;
 use m17core::protocol::LsfFrame;
@@ -142,7 +144,7 @@ fn stream_thread(end: Receiver<()>, state: Arc<Mutex<AdapterState>>, output_card
     let stream = device
         .build_output_stream(
             &config.into(),
     let stream = device
         .build_output_stream(
             &config.into(),
-            move |data: &mut [i16], info: &cpal::OutputCallbackInfo| {
+            move |data: &mut [i16], _info: &cpal::OutputCallbackInfo| {
                 output_cb(data, &state);
             },
             |e| {
                 output_cb(data, &state);
             },
             |e| {
@@ -160,7 +162,13 @@ fn stream_thread(end: Receiver<()>, state: Arc<Mutex<AdapterState>>, output_card
 pub struct WavePlayer;
 
 impl WavePlayer {
 pub struct WavePlayer;
 
 impl WavePlayer {
-    pub fn play(path: PathBuf, tx: TxHandle) {
+    pub fn play(
+        path: PathBuf,
+        tx: TxHandle,
+        source: &M17Address,
+        destination: &M17Address,
+        channel_access_number: u8,
+    ) {
         let mut reader = hound::WavReader::open(path).unwrap();
         let mut samples = reader.samples::<i16>();
 
         let mut reader = hound::WavReader::open(path).unwrap();
         let mut samples = reader.samples::<i16>();
 
@@ -172,14 +180,9 @@ impl WavePlayer {
         let mut next_tick = Instant::now() + TICK;
         let mut frame_number = 0;
 
         let mut next_tick = Instant::now() + TICK;
         let mut frame_number = 0;
 
-        // TODO: need a better way to create addresses from std strings
-
-        let lsf = LsfFrame::new_voice(
-            &Address::Callsign(Callsign(b"VK7XT    ".clone())),
-            &Address::Broadcast,
-        );
-
-        tx.transmit_stream_start(lsf.clone());
+        let mut setup = LinkSetup::new_voice(source, destination);
+        setup.set_channel_access_number(channel_access_number);
+        tx.transmit_stream_start(&setup);
 
         loop {
             let mut last_one = false;
 
         loop {
             let mut last_one = false;
@@ -196,11 +199,9 @@ impl WavePlayer {
                 }
                 codec.encode(&mut out, &in_buf);
             }
                 }
                 codec.encode(&mut out, &in_buf);
             }
-            tx.transmit_stream_next(StreamFrame {
+            tx.transmit_stream_next(&StreamFrame {
                 lich_idx: lsf_chunk as u8,
                 lich_idx: lsf_chunk as u8,
-                lich_part: lsf.0[lsf_chunk * 5..(lsf_chunk + 1) * 5]
-                    .try_into()
-                    .unwrap(),
+                lich_part: setup.lich_part(lsf_chunk as u8),
                 frame_number,
                 end_of_stream: last_one,
                 stream_data: out_buf.clone(),
                 frame_number,
                 end_of_stream: last_one,
                 stream_data: out_buf.clone(),