use heapless::{String, Vec};
use crate::limits::{ATR_ATS_MAX, OTHER_DETAIL_MAX, RAPDU_MAX};
pub trait Transport {
fn transmit(&mut self, capdu: &[u8]) -> Result<Vec<u8, RAPDU_MAX>, TransportError>;
fn capabilities(&self) -> TransportCaps;
fn reset(&mut self) -> Result<AtrAts, TransportError>;
fn protocol(&self) -> TransportProtocol;
fn is_connected(&self) -> bool;
}
#[derive(Debug, Clone)]
#[non_exhaustive]
pub enum TransportError {
CardRemoved,
ReaderGone,
Timeout,
ProtocolError,
Other(String<OTHER_DETAIL_MAX>),
}
#[derive(Debug, Clone)]
pub struct TransportCaps {
pub handles_t0_get_response: bool,
pub protocol: TransportProtocol,
pub contactless: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TransportProtocol {
T0,
T1,
TCl,
}
#[derive(Debug, Clone)]
pub struct AtrAts {
pub bytes: Vec<u8, ATR_ATS_MAX>,
pub protocol: TransportProtocol,
}