5个版本 (3个重大更改)

0.5.0 2024年4月1日
0.4.0 2024年3月16日
0.3.1 2024年3月8日
0.3.0 2024年3月8日
0.2.0 2024年3月3日

#161 in 嵌入式开发

MIT许可证

230KB
5.5K SLoC

MIL STD 1553B

tests passing docs passing crates.io code coverage

此库实现了一套完整的Rust结构体,用于解析或构建符合MIL STD 1553B通信协议的消息。

功能

以下功能使得该库适用于受限制的嵌入式系统,可用于政府、商业或军事项目,这些项目不能使用病毒式许可的依赖项。

  • 不使用标准库 (no_std)
  • 不分配动态内存
  • 无依赖项 *
  • MIT授权

* 无运行时依赖项。如果您使用derive功能标志,您将需要构建proc-macro依赖项,但这些依赖项是在主机上构建和使用的,而不是在目标系统上。

基本用法

创建消息

消息可以使用Message、CommandWord、StatusWord和数据Word的构造函数方法构建。

    use mil_std_1553b::*;

    let message = Message::<3>::new()
        .with_command(CommandWord::new()
            .with_address(Address::Value(12))
            .with_subaddress(SubAddress::Value(5))
            .with_word_count(2)
            .build().unwrap()
        )
        .with_data(DataWord::new())
        .with_data(DataWord::new())
        .build()
        .unwrap();

    assert_eq!(message.length(),3);

解析消息

命令消息

消息可以解析为命令消息,前面的命令字将确定从缓冲区解析多少个数据字。

    use mil_std_1553b::*;

    let message: Message = Message::read_command(&[
        0b10000011, 
        0b00001100, 
        0b00100010, 
        0b11010000, 
        0b11010010
    ])
    .unwrap();

    assert_eq!(message.length(),2);

状态消息

    use mil_std_1553b::*;

    let message: Message = Message::read_status(&[
        0b10000011, 
        0b00001100, 
        0b01000010, 
        0b11010000, 
        0b11010010
    ])
    .unwrap();

    assert_eq!(message.length(), 2);

解析字

可以从两个字节的字节数组或u16s解析字。数据字也可以从字符串创建。

    use mil_std_1553b::*;

    let word = DataWord::new()
        .with_bytes([0b01001000, 0b01001001])
        .with_calculated_parity()
        .build()
        .unwrap();

    assert_eq!(word.as_string(),Ok("HI"));

路线图

1.0.0

  • 实现的字
    • 创建命令、状态和数据字
    • 可以从二进制中解析字
    • 可以将字转换为二进制
    • 字具有解析测试
    • 字具有转换测试
    • 为字存在文档
  • 实现的消息
    • 创建消息结构体
    • 可以从字构造消息
    • 可以从二进制解析消息
    • 消息具有解析测试
    • 消息具有转换测试
    • 为消息存在文档
  • 便利性、标准化、文档
    • 为消息创建自定义字和宏的derive/macro
    • 对枚举和标志标准化的小型修复
    • 全面文档化的代码库
    • 强制执行最大lint并无不安全代码
  • 实现了集成测试
    • 为所有主机构建 CI/CD 管道 -> 跨编译目标
    • 消息存在双向测试(二进制 -> 结构体 -> 二进制)
    • 单词存在双向测试(二进制 -> 结构体 -> 二进制)
    • 单词存在配置测试(JSON)
    • 消息存在配置测试(JSON)

2.0.0

  • 消息模式构造器已设计
  • 有向模式构造器已实现
    • BC - RT 模式已实现
    • BC - RT 模式测试已实现
    • RT - BC 模式已实现
    • RT - BC 模式测试已实现
    • RT - RT 模式已实现
    • RT - RT 模式测试已实现
    • 无数据模式(T)已实现
    • 无数据模式(T)测试已实现
    • 带数据模式(T)已实现
    • 带数据模式(T)测试已实现
    • 带数据模式(R)已实现
    • 带数据模式(R)测试已实现
  • 广播模式构造器已实现
    • BC - RT 模式已实现
    • BC - RT 模式测试已实现
    • RT - RT 模式已实现
    • RT - RT 模式测试已实现
    • 无数据模式已实现
    • 无数据模式测试已实现
    • 带数据模式已实现
    • 带数据模式测试已实现

备注

单词

在 1553B 标准中,“单词”由二十位组成。包括三个同步位,16位数据(三种不同格式之一),以及一个尾随奇偶校验位 ^1。这意味着有两种方式引用特定的位——要么从“单词数据”开始的位索引偏移,要么从包括同步位在内的单词开始的“位时间”偏移。

索引 同步1 同步2 同步3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 奇偶校验
时间 - - - 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 -
偏移 - - - 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -

标准中使用了位时间参考,但由于我们在这个项目中只处理每个单词中的16位数据,所以实际代码中将使用零索引参考。

依赖关系

~225KB