uem_reader/card.rs
1//! Crate card related structures
2//!
3
4#![allow(dead_code)]
5
6use enum_iterator::Sequence;
7
8// #[repr(u8)]
9// #[derive(Debug, Default, PartialEq, Sequence, Clone)]
10// pub enum UemCardStandard {
11// #[default]
12// Iso14443a = 0x00,
13// Iso14443b = 0x01,
14// Iso15693 = 0x02,
15// }
16
17#[repr(u8)]
18#[derive(Debug, Default, PartialEq, Sequence, Clone, Copy)]
19pub enum UemCardBaudrates {
20 #[default]
21 Baud106kbps = 0b00,
22 Baud212kbps = 0b01,
23 Baud424kbps = 0b10,
24 Baud848kbps = 0b11,
25}
26
27#[derive(Debug, Clone)]
28/// ISO14443A card type object
29pub struct UemCardIso14443A {
30 /// Answer to request - 2 bytes
31 pub atq: Vec<u8>,
32 /// Select Acknowledge byte
33 pub sak: u8,
34 /// Unique identifier - 4/7/10 bytes
35 pub uid: Vec<u8>,
36 /// Answer to select - returned after switching
37 /// to T=CL mode
38 pub ats: Vec<u8>,
39}
40
41#[derive(Debug, Clone)]
42/// ISO14443B card type object
43pub struct UemCardIso14443B {
44 /// Buffer length identifier
45 pub mbli: u8,
46 /// Unique identifier - 4 bytes
47 pub pupi: Vec<u8>,
48 /// Application data - 4 bytes
49 pub app_data: Vec<u8>,
50 /// Protocol information - 3 bytes
51 pub prot_info: Vec<u8>,
52 /// Answer to request
53 pub atq: Vec<u8>,
54}
55
56/// General placeholder for a card object
57pub enum UemCard {
58 Iso14443A(UemCardIso14443A),
59 Iso14443B(UemCardIso14443B),
60}
61
62impl UemCard {
63 /// Returns unique identifier of a card
64 pub fn uid(&self) -> &Vec<u8> {
65 match self {
66 Self::Iso14443A(card) => &card.uid,
67 Self::Iso14443B(card) => &card.pupi,
68 }
69 }
70}