readme/
readme.rs

1use pcsc::*;
2
3fn main() {
4    // Establish a PC/SC context.
5    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    // List available readers.
14    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    // Use the first reader.
24    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    // Connect to the card.
34    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    // Send an APDU command.
47    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}