1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#![allow(dead_code)]
use enum_iterator::Sequence;
#[repr(u8)]
#[derive(Debug, Default, PartialEq, Sequence, Clone, Copy)]
pub enum UemCardBaudrates {
#[default]
Baud106kbps = 0b00,
Baud212kbps = 0b01,
Baud424kbps = 0b10,
Baud848kbps = 0b11,
}
#[derive(Debug, Clone)]
pub struct UemCardIso14443A {
pub atq: Vec<u8>,
pub sak: u8,
pub uid: Vec<u8>,
pub ats: Vec<u8>,
}
#[derive(Debug, Clone)]
pub struct UemCardIso14443B {
pub mbli: u8,
pub pupi: Vec<u8>,
pub app_data: Vec<u8>,
pub prot_info: Vec<u8>,
pub atq: Vec<u8>,
}
pub enum UemCard {
Iso14443A(UemCardIso14443A),
Iso14443B(UemCardIso14443B),
}
impl UemCard {
pub fn uid(&self) -> &Vec<u8> {
match self {
Self::Iso14443A(card) => &card.uid,
Self::Iso14443B(card) => &card.pupi,
}
}
}