use crate::{
io_seph_is_status_sent, io_seph_recv, io_seph_send, SEPROXYHAL_TAG_GENERAL_STATUS,
SEPROXYHAL_TAG_RAPDU, SEPROXYHAL_TAG_SCREEN_DISPLAY_STATUS,
};
pub fn seph_send(buffer: &[u8]) {
unsafe { io_seph_send(buffer.as_ptr(), buffer.len() as u16) };
}
pub fn seph_recv(buffer: &mut [u8], flags: u32) -> u16 {
unsafe { io_seph_recv(buffer.as_mut_ptr(), buffer.len() as u16, flags) }
}
pub fn is_status_sent() -> bool {
let status = unsafe { io_seph_is_status_sent() };
status == 1
}
pub fn send_general_status() {
if !is_status_sent() {
let status = [SEPROXYHAL_TAG_GENERAL_STATUS as u8, 0, 2, 0, 0];
seph_send(&status);
}
}
#[repr(u8)]
pub enum SephTags {
ScreenDisplayStatus = SEPROXYHAL_TAG_SCREEN_DISPLAY_STATUS as u8,
GeneralStatus = SEPROXYHAL_TAG_GENERAL_STATUS as u8,
RawAPDU = SEPROXYHAL_TAG_RAPDU as u8,
Unknown,
}
impl From<u8> for SephTags {
fn from(v: u8) -> SephTags {
match v as u32 {
SEPROXYHAL_TAG_SCREEN_DISPLAY_STATUS => SephTags::ScreenDisplayStatus,
SEPROXYHAL_TAG_GENERAL_STATUS => SephTags::GeneralStatus,
_ => SephTags::Unknown,
}
}
}