use log::debug;
use m17app::adapter::StreamAdapter;
use m17app::app::TxHandle;
-use m17core::address::Address;
-use m17core::address::Callsign;
-use m17core::protocol::LsfFrame;
-use m17core::protocol::StreamFrame;
+use m17app::link_setup::LinkSetup;
+use m17app::link_setup::M17Address;
+use m17app::StreamFrame;
use std::collections::VecDeque;
use std::fs::File;
use std::io::Write;
}
}
+impl Default for Codec2Adapter {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
struct AdapterState {
tx: Option<TxHandle>,
/// Circular buffer of output samples for playback
fn tnc_closed(&self) {}
- fn stream_began(&self, _lsf: LsfFrame) {
+ fn stream_began(&self, _link_setup: LinkSetup) {
// for now we will assume:
// - unencrypted
// - data type is Voice (Codec2 3200), not Voice+Data
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 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;
- for mut out in out_buf.chunks_mut(8) {
- for i in 0..160 {
+ for out in out_buf.chunks_mut(8) {
+ for i in in_buf.iter_mut() {
let sample = match samples.next() {
Some(Ok(sample)) => sample,
_ => {
0
}
};
- in_buf[i] = sample;
+ *i = sample;
}
- codec.encode(&mut out, &in_buf);
+ codec.encode(out, &in_buf);
}
- tx.transmit_stream_next(StreamFrame {
+ tx.transmit_stream_next(&StreamFrame {
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(),
+ stream_data: out_buf,
});
frame_number += 1;
lsf_chunk = (lsf_chunk + 1) % 6;