use pcsc::*;
fn main() {
let ctx = Context::establish(Scope::User).expect("failed to establish context");
let mut readers_buf = [0; 2048];
let mut reader_states = vec![
ReaderState::new(PNP_NOTIFICATION(), State::UNAWARE),
];
loop {
fn is_dead(rs: &ReaderState) -> bool {
rs.event_state().intersects(State::UNKNOWN | State::IGNORE)
}
for rs in &reader_states {
if is_dead(rs) {
println!("Removing {:?}", rs.name());
}
}
reader_states.retain(|rs| !is_dead(rs));
let names = ctx.list_readers(&mut readers_buf).expect("failed to list readers");
for name in names {
if !reader_states.iter().any(|rs| rs.name() == name) {
println!("Adding {:?}", name);
reader_states.push(ReaderState::new(name, State::UNAWARE));
}
}
for rs in &mut reader_states {
rs.sync_current_state();
}
ctx.get_status_change(None, &mut reader_states)
.expect("failed to get status change");
println!();
for rs in &reader_states {
if rs.name() != PNP_NOTIFICATION() {
println!("{:?} {:?} {:?}", rs.name(), rs.event_state(), rs.atr());
}
}
}
}