1use pcsc::*;
2
3fn main() {
4 let ctx = match Context::establish(Scope::User) {
6 Ok(ctx) => ctx,
7 Err(err) => {
8 eprintln!("Failed to establish context: {}", err);
9 std::process::exit(1);
10 }
11 };
12
13 let mut readers_buf = [0; 2048];
15 let mut readers = match ctx.list_readers(&mut readers_buf) {
16 Ok(readers) => readers,
17 Err(err) => {
18 eprintln!("Failed to list readers: {}", err);
19 std::process::exit(1);
20 }
21 };
22
23 let reader = match readers.next() {
25 Some(reader) => reader,
26 None => {
27 println!("No readers are connected.");
28 return;
29 }
30 };
31 println!("Using reader: {:?}", reader);
32
33 let card = match ctx.connect(reader, ShareMode::Shared, Protocols::ANY) {
35 Ok(card) => card,
36 Err(Error::NoSmartcard) => {
37 println!("A smartcard is not present in the reader.");
38 return;
39 }
40 Err(err) => {
41 eprintln!("Failed to connect to card: {}", err);
42 std::process::exit(1);
43 }
44 };
45
46 let apdu = b"\x00\xa4\x04\x00\x0A\xA0\x00\x00\x00\x62\x03\x01\x0C\x06\x01";
48 println!("Sending APDU: {:?}", apdu);
49 let mut rapdu_buf = [0; MAX_BUFFER_SIZE];
50 let rapdu = match card.transmit(apdu, &mut rapdu_buf) {
51 Ok(rapdu) => rapdu,
52 Err(err) => {
53 eprintln!("Failed to transmit APDU command to card: {}", err);
54 std::process::exit(1);
55 }
56 };
57 println!("APDU response: {:?}", rapdu);
58}