#firewire #command #deserialize #serialization

ta1394-avc-general

1394贸易协会定义的AV/C协议和命令的纯Rust小型框架

2个不稳定版本

0.2.0 2023年4月18日
0.1.0 2022年7月29日

#380 in 硬件支持

Download history 15/week @ 2024-03-12 24/week @ 2024-03-19 28/week @ 2024-03-26 47/week @ 2024-04-02 62/week @ 2024-04-09 5/week @ 2024-04-16 11/week @ 2024-04-23 8/week @ 2024-04-30 4/week @ 2024-05-07 10/week @ 2024-05-14 9/week @ 2024-05-21 17/week @ 2024-05-28 12/week @ 2024-06-04 13/week @ 2024-06-11 12/week @ 2024-06-18 10/week @ 2024-06-25

51 每月下载量
用于 6 crates

MIT 许可证

96KB
2K SLoC

该crate包含1394贸易协会(1394 TA)定义的协议部分的Rust元素。

协议文档

实现的协议在以下文档中进行了说明

  • AV/C数字接口命令集通用规范版本4.2(2004年9月1日,1394贸易协会,文件编号2004006)
  • AV/C设备配置ROM 1.0(2000年12月12日,1394贸易协会,TA文件1999027)

1394 TA成立于1994年,并于2015年决定关闭其官方运营。截至2021年,它已被解散,并在年底关闭了网址为http://1394ta.org的网站。

当在http://1394ta.org/specifications/中搜索URL时,该文档本身可通过http://1394ta.org/specifications/在Internet Archive服务中找到,需要仔细考虑缓存日期。

结构和枚举

该crate由三部分组成;AV/C操作、一些AV/C命令以及文档中定义的配置ROM的典型布局。

AV/C操作

AV/C操作使用IEC 61883-1中定义的“功能控制协议(FCP)”发送命令帧和接收响应帧,具有两种事务模式:立即和延迟(见“6 AV/C操作”条款)。该帧包括命令类型和响应状态、地址、操作码及其操作数(见“5 AV/C帧”条款)。

地址指的是“8 AV/C模型”条款中描述的单元和子单元。

Ta1394Avc trait是使用该crate的好起点。应实现Ta1394Avc::transaction()以执行FCP以及处理延迟事务。该trait为执行AV/C控制、状态、特定查询和通知操作的方法提供了默认实现,该实现使用了上述实现。

遗憾的是,实际设备存在与规范中定义的设计不符的问题。实现者可以重写默认实现。

AV/C命令

AV/C命令的每个都表示为帧内操作数与任意结构之间的转换器。《AvcOp》、《AvcStatus》、《AvcControl》和《AvcNotify》特性用于转换。本库为以下文档化的AV/C命令提供了一些实现。

  • UnitInfo(条款“9.2 单元信息命令”)
  • SubunitInfo(条款“9.3 子单元信息命令”)
  • VendorDependent(条款“9.6 供应商相关命令”)
  • PlugInfo(条款“10.1 插头信息命令”)
  • InputPlugSignalFormat(条款“10.10 输入插头信号格式命令”)
  • OutputPlugSignalFormat(条款“10.11 输出插头信号格式命令”)

错误处理

通用的Ta1394AvcError枚举用于表示命令组合错误、通信失败和响应解析错误。实现《Avc1394》特性的实现者还应决定通信失败时错误的类型。

配置ROM的典型布局

在1394 TA定义的典型布局中,根目录按以下顺序包含以下条目。

  • 供应商ID的直接条目
  • 供应商名称文本描述符的叶条目
  • 模型ID的直接条目
  • 模型名称文本描述符的叶条目
  • 节点能力的直接条目
  • 单元目录条目

单元目录按以下顺序包含以下条目

  • 指定器ID的直接条目
  • 版本的直接条目
  • 模型ID的直接条目
  • 模型名称文本描述符的叶条目

指定器ID条目的值是0x00a02d,版本条目的值是0x010001。

要检测这些字段,实现了Ta1394ConfigRom特性,用于在ieee1212-config-rom存储库中的ConfigRom结构。目前,通过VendorDataUnitData可以检测到这些字段。

此外,我们可以在其他文档中看到类似但略有差异的规范

  • IEC 61883-1:1998
  • 基于1394的数字相机规范版本1.04(1996年8月9日,1394贸易协会)
  • 基于1394的数字相机规范版本1.20(1998年7月23日,1394贸易协会)
  • IIDC数字相机控制规范版本1.30(2000年7月25日,1394贸易协会)
  • IIDC数字相机控制规范版本1.31(2004年2月2日,1394贸易协会,TA文档2003017)
  • IIDC数字相机控制规范版本1.32(2008年7月24日,1394贸易协会,文档编号2007009)
  • IIDC2数字相机控制规范版本1.0.0(2012年1月26日,1394贸易协会,TS2011001)
  • IIDC2数字相机控制规范版本1.1.0(2015年5月19日,1394贸易协会,TS2015001)

此外,一些供应商为自身目的设计了特定的布局。

许可证

本库在MIT许可证下发布。

支持

如果在https://github.com/alsa-project/snd-firewire-ctl-services/中发现问题,请在那里提交。

贡献

在进行代码贡献之前,我希望用户和开发者注意以下几点。

众所周知,由几家供应商推广的协会倾向于出于多种原因发布过度设计的规范和文档;例如,商业或市场的竞争。随着代码库越来越大,包含错误的风险呈指数级增加。仅仅为了满足整个规范和文档的工作并不理想。

关键点是,确实需要新的代码。例如,本库包括一些AV/C命令,以满足snd-firewire-ctl-services项目的要求。您最好使用实际的应用程序来使用新的代码。

依赖关系