3 个不稳定版本
0.2.1 | 2023年2月1日 |
---|---|
0.2.0 | 2023年1月18日 |
0.1.0 | 2023年1月12日 |
第519位在 硬件支持
57KB
857 行
MicroEM公司RFID读卡器库
该库通过实现这些读卡器使用的协议,允许控制MicroEM公司生产的RFID读卡器。
该包包含基本对象和用于与读卡器交互的send
方法。此方法中使用的字节序列应符合在MicroEM网站上可以找到的读卡器官方文档。
目前,该包已在Debian 11.5 x64和Windows 7x64上与LibUsb进行了测试。
请注意,为了在Windows上工作,您需要首先安装libusb驱动程序。
在Linux上,您需要添加对您想要使用的设备的写入权限,例如。
sudo chmod o+w /dev/bus/usb/002/008
用法
use uem_reader::{
reader::{
UemReaderInternal,
usb::find_usb_readers
},
commands::{
UemCommandsTrait,
reader::UemCommandsReaderTrait,
cards::{
UemCommandsCardsTrait,
UemActivateParameters,
mifare::{
UemCommandsCardsMifareTrait,
classic::UemCommandsCardsMifareClassicTrait
},
},
},
};
// Search system for USB readers
let mut uem_readers = find_usb_readers();
// Quit if no readers found
if uem_readers.is_empty() {
return;
}
// Pick the first reader in the vector
let uem_reader = uem_readers.get_mut(0);
// Check if the vector returned an option with valid reader object
if uem_reader.is_none() {
return;
}
// Unwrap the option
let uem_reader = uem_reader.unwrap();
// Open USB interface connection
if uem_reader.open().is_err() {
return;
}
// Beep 1 time using command byte vector
if uem_reader.send(&vec![0x05_u8, 0x01_u8]).is_err() {
return;
}
// Beep 5 times using command grouping objects as separate variables
let mut uem_cmds = uem_reader.commands();
let mut uem_cmds_reader = uem_cmds.reader();
if uem_cmds_reader.beep(5).is_err() {
return;
}
// Beep 3 times using command grouping objects inline
if uem_reader.commands().reader().beep(3).is_err() {
return;
}
let card = uem_reader.commands().cards().activate_a(&UemActivateParameters{
// switch_to_tcl: true,
..Default::default()
});
if card.is_err() {
uem_reader.close();
return;
}
let card = card.unwrap();
let res = uem_reader.commands().cards().mifare().classic()
.authenticate_key_a(
&card,
&[0xFF; 6],
1
);
if res.is_err() {
uem_reader.close();
return;
}
let res = uem_reader.commands().cards().mifare().classic()
.read(1, 1);
if res.is_err() {
uem_reader.close();
return;
}
let prev_data = res.unwrap();
let mut new_data = prev_data.clone();
new_data[0] = 0xFF;
let res = uem_reader.commands().cards().mifare().classic()
.write(new_data.clone(), 1, 1);
if res.is_err() {
uem_reader.close();
return;
}
let res = uem_reader.commands().cards().mifare().classic()
.read(1, 1);
if res.is_err() {
uem_reader.close();
return;
}
if res.unwrap() != new_data {
println!("error!");
uem_reader.close();
return;
}
let res = uem_reader.commands().cards().mifare().classic()
.write(prev_data.clone(), 1, 1);
if res.is_err() {
uem_reader.close();
return;
}
let res = uem_reader.commands().cards().mifare().classic()
.read(1, 1);
if res.is_err() {
uem_reader.close();
return;
}
if res.unwrap() != prev_data {
println!("error!");
uem_reader.close();
return;
}
if uem_reader.close().is_err() {
return;
};
许可证
此作品根据MIT或Apache 2.0双许可。如果您使用此作品,可以选择其中之一。
SPDX-许可证-标识符: MIT 或Apache-2.0
依赖关系
~2.2–3MB
~59K SLoC