use crate::{
Error, Instruction, StatusCode, VersionInfo,
client::{AuthenticationState, Card, CardIoDefault},
io,
};
impl<'card, IoBackendT, AuthenticationStateT> Card<'card, IoBackendT, AuthenticationStateT>
where
AuthenticationStateT: AuthenticationState,
IoBackendT: io::Backend,
Self: CardIoDefault<IoBackendT>,
{
pub async fn get_version_info(&mut self) -> Result<VersionInfo, Error<IoBackendT::Error>> {
let mut out = [0; 0xff];
let (status_code, response) = self
.default_exchange(&mut out, &[Instruction::GetVersionInfo as u8])
.await?;
#[cfg(feature = "tracing")]
tracing::debug!(
method = "get_version_info",
status_code = format!("{:?}", status_code)
);
if status_code != StatusCode::Ack {
return Err(Error::BadStatusCode(status_code));
}
let response: &[u8; 28] = response.try_into().map_err(|_| Error::BadSize)?;
Ok(VersionInfo::parse(response))
}
}