10 个版本
0.3.5 | 2023 年 5 月 23 日 |
---|---|
0.3.4 | 2023 年 3 月 11 日 |
0.3.1 | 2023 年 1 月 13 日 |
0.3.0 |
|
0.1.4 | 2021 年 4 月 27 日 |
1275 在 硬件支持
103 每月下载量
在 4 个 crate 中使用(通过 nfc1)
1MB
20K SLoC
包含 (模糊的 autoconf 代码, 7KB) vendor/nfc/configure.ac, (模糊的 autoconf 代码, 3KB) vendor/usb-compat-0.1/configure.ac
nfc1-sys
此 crate 为 libnfc
提供 low-level 绑定,由 bindgen
生成。
与 nfc-sys
相比,此 crate 还提供
- 元数据,允许依赖的 crate 找到
nfc/nfc.h
头文件,编译依赖于libnfc
的本地代码或将其链接到 Rust 代码中。 - 带有针对
x86_64-pc-windows-msvc
的构建调整的libnfc
的供应商子模块副本(这意味着您不需要单独安装libnfc
就可以使用此 crate。供应商是可选的,可以通过删除vendored
功能来禁用它。
功能
功能 | 默认? | 描述 |
---|---|---|
vendored | 是 | 使用供应商 libnfc,而不是平台上的已安装版本。 |
drivers | 是 | 添加来自供应商 libnfc 的芯片或驱动程序特定符号。 |
logging | 否 | 启用使用供应商 libnfc 时的日志记录。 |
conffiles | 否 | 启用供应商 libnfc 上的配置文件。 |
envvars | 否 | 启用供应商 libnfc 上的环境变量。 |
用法
将 nfc1-sys
添加到项目 Cargo.toml
文件中的依赖项
[dependencies]
nfc1-sys = "0.3"
在项目中导入 nfc1_sys
crate,然后您可以使用来自 libnfc
的所有以 nfc_
开头的函数。
请参阅libnfc
维基或libnfc
1.8.0 示例,了解如何使用它。由于这是一个绑定,API 是相同的。
使用示例
请注意,这里有很多不安全的代码。这是因为这只是一个简单的绑定,而不是安全的包装。
extern crate nfc1_sys;
use std::ffi::CStr;
use std::mem::MaybeUninit;
use nfc1_sys::{nfc_context, nfc_device, nfc_version, nfc_init, nfc_open, nfc_device_get_name, nfc_close, nfc_exit};
fn main() {
let version = unsafe { CStr::from_ptr(nfc_version()) }.to_str().unwrap();
println!("libnfc v{}", version);
let context: *mut nfc_context = unsafe {
let mut ctx = MaybeUninit::uninit();
nfc_init(ctx.as_mut_ptr());
ctx.assume_init()
};
let device: *mut nfc_device = unsafe {
let pnd = nfc_open(context, std::ptr::null_mut());
if pnd.as_ref().is_none() {
nfc_exit(context);
panic!("Error opening NFC reader");
}
pnd
};
let device_name = unsafe { CStr::from_ptr(nfc_device_get_name(device)) }.to_str().unwrap();
println!("NFC reader: {} opened", device_name);
unsafe {
nfc_close(device);
nfc_exit(context);
}
}
依赖关系
~0–2.3MB
~46K SLoC