3个版本 (破坏性更新)
0.3.0 | 2023年8月21日 |
---|---|
0.2.0 | 2020年2月2日 |
0.1.0 | 2017年8月19日 |
#2 in #amateur-radio
每月42次下载
用于 ax25_tnc
32KB
678 行
ax25
本项目旨在为使用Rust编写跨平台包电台软件提供所需的一切。
crate ax25
提供
- AX.25帧的编码和解码(目前支持v2.0)
- 支持
no_std
环境
crate ax25_tnc
提供
- KISS协议
- 通过多种方法连接到TNC,无需更改您的代码
快速入门
大多数开发人员将专注于 tnc::TncAddress
和 tnc::Tnc
。
- 生成或要求用户提供一个地址字符串。其形式为
tnc:tcpkiss:192.168.0.1:8001
或
tnc:linuxif:vk7ntk-2
- 将该地址解析为:
let addr = string.parse::<TncAddress>()?;
- 尝试打开TNC:
let tnc = Tnc::open(&addr)?;
- 使用
send_frame()
和receive_frame()
在无线电上进行通信。 Tnc
可以用于多线程。
如果您的应用程序需要直接编码/解码AX.25数据,请参阅 frame
模块。
示例
以下是一个包含的示例程序之一,listen.rs
。它是 axlisten
的拙劣模仿。
use ax25_tnc::tnc::{Tnc, TncAddress};
use std::env;
use time::OffsetDateTime;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let args: Vec<String> = env::args().collect();
if args.len() != 2 {
println!("Usage: {} <tnc-address>", args[0]);
println!("where tnc-address is something like");
println!(" tnc:linuxif:vk7ntk-2");
println!(" tnc:tcpkiss:192.168.0.1:8001");
std::process::exit(1);
}
let addr = args[1].parse::<TncAddress>()?;
let tnc = Tnc::open(&addr)?;
let receiver = tnc.incoming();
while let Ok(frame) = receiver.recv().unwrap() {
println!("{}", OffsetDateTime::now_utc());
println!("{}", frame);
}
Ok(())
}
它产生的输出如下。请注意,在使用 Linux 接口时必须用 sudo
运行。
$ sudo ./target/debug/examples/listen tnc:linuxif:vk7ntk-2
2020-02-02 21:51:11.017220715 +11:00
Source VK7NTK-1
Destination IDENT
Data "hello this is a test"
以上是 Display
对 Ax25Frame
的实现 - 完整的协议信息可以通过其字段获得,这些字段在此未打印。
路线图
计划中的功能
- 支持串行 KISS TNCs(物理,TNC-Pi,Dire Wolf 伪终端)
- Paclen 管理
- 更方便的发送/接收接口,用于与 UI 帧交互
- 无需
kissattach
直接使用 linux axports 接口