#usb #bill-acceptor #bill-validator #events #bnr

bnr-xfs

BNR XFS USB的纯Rust实现

4个版本

0.1.3 2024年3月13日
0.1.2 2024年2月23日
0.1.1 2024年2月14日
0.1.0 2024年1月24日

133 in 金融

Download history 20/week @ 2024-04-01 21/week @ 2024-05-13 99/week @ 2024-05-20 38/week @ 2024-05-27 55/week @ 2024-06-03 31/week @ 2024-06-10 8/week @ 2024-06-17 36/week @ 2024-07-08 17/week @ 2024-07-15

每月下载量 54
bnr 中使用

MIT 许可证

535KB
11K SLoC

BNR XFS

此库用于与MEI/CPI BNR现金回收设备通信。

XFS协议是通过USB连接的XML编码的消息格式。

通信通过四个端点进行

  • XFS响应(设备到主机)
  • XFS调用(主机到设备)
  • XFS回调调用(设备到主机)
  • XFS回调响应(主机到设备)

用法

设备交互的主要接口是DeviceHandle

use bnr_xfs::{CallbackArg, DeviceHandle};

// Callback handler for when an async call completes
//
// See OperationCompletedFn for details.
fn op_com(_call_id: i32, _op_id: i32, _res: i32, _ext_res: i32, _cb_arg: &mut dyn CallbackArg) {
    // process the completion event...
}

// Callback handler for when an intermediate event occurs
//
// See IntermediateOccurredFn for details.
fn int_oc(_call_id: i32, _op_id: i32, _reason: i32, _cb_arg: &mut dyn CallbackArg) {
    // process the intermediate event...
}

// Callback handler for when a status event occurs
//
// See StatusOccurredFn for details.
fn st_oc(_call_id: i32, _op_id: i32, _reason: i32, _cb_arg: &mut dyn CallbackArg) {
    // process the status event...
}

let device_handle = DeviceHandle::open(Some(op_com), Some(int_oc), Some(st_oc)).unwrap();

let _status = device_handle.get_status().unwrap();

测试

端到端设备测试位于tests/e2e_tests 目录。

这些测试目前需要一个BNR设备连接到运行测试的计算机。

要运行测试

$ cargo test --all --features e2e_tests

进行中

仍有许多BNR XFS API表面需要从C库在Rust中实现。

实现应遵循现有函数的模式,并且任何额外的类型都需要实现转换为XFS XML。

存在辅助宏用于实现大多数基本XFS类型的转换。

如果您注意到未实现的数据类型,请提交合并请求!

依赖项

~2–15MB
~160K SLoC