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

Apache-2.0

32KB
678

ax25

crates.io crates.io docs.rs docs.rs

本项目旨在为使用Rust编写跨平台包电台软件提供所需的一切。

crate ax25 提供

  • AX.25帧的编码和解码(目前支持v2.0)
  • 支持 no_std 环境

crate ax25_tnc 提供

  • KISS协议
  • 通过多种方法连接到TNC,无需更改您的代码

快速入门

大多数开发人员将专注于 tnc::TncAddresstnc::Tnc

  1. 生成或要求用户提供一个地址字符串。其形式为
    tnc:tcpkiss:192.168.0.1:8001
    tnc:linuxif:vk7ntk-2
  2. 将该地址解析为: let addr = string.parse::<TncAddress>()?;
  3. 尝试打开TNC: let tnc = Tnc::open(&addr)?;
  4. 使用 send_frame()receive_frame() 在无线电上进行通信。
  5. 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"

以上是 DisplayAx25Frame 的实现 - 完整的协议信息可以通过其字段获得,这些字段在此未打印。

路线图

计划中的功能

  • 支持串行 KISS TNCs(物理,TNC-Pi,Dire Wolf 伪终端)
  • Paclen 管理
  • 更方便的发送/接收接口,用于与 UI 帧交互
  • 无需 kissattach 直接使用 linux axports 接口

无运行时依赖

特性