#dac #emulator #laser #protocols #etherdream

ether-dream-dac-emulator

用于构建和运行自定义Ether Dream DAC模拟器的包

4个版本 (2个重大更新)

0.3.0 2020年5月19日
0.2.1 2020年4月1日
0.2.0 2018年5月20日
0.1.0 2018年5月19日

#dac中的第13

每月37次下载

MIT/Apache

110KB
2K SLoC

ether-dream-dac-emulator Crates.io Crates.io docs.rs

此包包含一个ether-dream-dac-emulator,可以用来构建和运行自定义的虚拟Ether Dream DAC,这可能会对测试和可视化很有用。

仿真包括所有网络功能(UDP广播、TCP监听、TCP流式传输)以及DAC中的全部状态机(光引擎、播放和源)。

由于虚拟DAC没有发射物理光的方法,它通过一个输出队列产生“帧”。可以通过指定DAC 描述中的frame_rate字段来控制将帧推送到此队列的速率。

./dac-emulator/examples演示了如何使用此包进行简单的命令行测试以及DAC模拟器输出的完整可视化。

extern crate ether_dream_dac_emulator;

fn main() {
    let dac_description = Default::default();
    println!("Creating an emulator for the following Ether Dream DAC:\n{:#?}", dac_description);
    let (broadcaster, mut listener) = ether_dream_dac_emulator::new(dac_description).unwrap();
    println!("Broadcasting DAC once per second...");
    let broadcaster_handle = broadcaster.spawn().unwrap();
    broadcaster_handle.spawn_once_per_second_timer().unwrap();
    println!("Listening for stream connection requests...");
    while let Ok((stream, addr)) = listener.accept() {
        println!("Connected to {}!", addr);
        let output = stream.output();
        loop {
            match output.next_frame() {
                Ok(frame) => println!("\tReceived frame with {} points", frame.len()),
                Err(_) => break,
            }
        }
        println!("Stream connection shutdown. Awaiting new requests...");
    }
}

致谢

此包基于Jacob Potter的工作,他是Ether Dream DAC的创建者。许多文档注释直接转录自他们的协议写作,而许多其他注释则是基于我对原始写作和源代码本身的理解所做的改编。

许可证

在以下许可证下获得许可

任你选择。

贡献

除非你明确声明,否则根据Apache-2.0许可证定义,你有意提交以包含在工作中的任何贡献,应双授权如上所述,不附加任何其他条款或条件。

依赖项

约3MB
约45K SLoC