3 个不稳定版本

0.2.1 2023年2月1日
0.2.0 2023年1月18日
0.1.0 2023年1月12日

519位在 硬件支持

MIT/Apache

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