This crate provides low-level bindings to libnfc
, generated by bindgen
.
In contrast to nfc-sys
, this crate additionally provides:
- Metadata which allows dependent crates to find the nfc/nfc.h
header, compile native code that depends on libnfc
or link to it in Rust code.
- Vendored submodule copy of libnfc
(with build tweaks for x86_64-pc-windows-msvc
), which means you don't have to separately install libnfc
to use this crate. The vendoring is optional and can be disabled by removing the vendored
feature.
|Feature|Default?|Description| |---|---|---| |vendored|Yes|Use vendored libnfc, instead of installed one on the platform.| |drivers|Yes|Add chip or driver specific symbols from vendored libnfc.| |logging|No|Enables logging when using the vendored libnfc.| |conffiles|No|Enables config files on vendored libnfc.| |envvars|No|Enables environment variables on vendored libnfc.|
Add nfc1-sys
as a dependency in your project's Cargo.toml
file:
toml
[dependencies]
nfc1-sys = "0.2"
Import the nfc1_sys
crate in your project, then you can use all functions starting with nfc_
from libnfc
.
See the libnfc
wiki or libnfc
1.8.0 examples for information on how to use it. The API is the same, as this is just a binding.
Note that there is quite a lot of unsafe code here. This is because this is just a simple binding, not a safe wrapper.
```rust extern crate nfc1sys; use std::ffi::CStr; use std::mem::MaybeUninit; use nfc1sys::{nfccontext, nfcdevice, nfcversion, nfcinit, nfcopen, nfcdevicegetname, nfcclose, nfcexit};
fn main() { let version = unsafe { CStr::fromptr(nfcversion()) }.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);
}
} ```