use crate::command::EmapiCommand;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EmapiRfidAuthFailurePolicy {
AllowPrint,
ForbidPrint,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EmapiWifiConnectionState {
NotConnected,
HotspotConnected,
IotConnected,
Unknown,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct EmapiRfidCardInfo {
pub paper_model: Option<String>,
pub paper_length: Option<String>,
pub paper_width: Option<String>,
pub paper_color: Option<String>,
pub paper_material_number: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct EmapiWifiHotspotInfo {
pub ssid: Option<String>,
pub rssi: Option<i16>,
pub ip: Option<String>,
pub port: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct EmapiPrinterParams {
pub print_size: Option<u32>,
pub resolution: Option<u32>,
pub dots_per_byte: Option<u32>,
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct EmapiPrintStatus {
pub paper_status: Option<u8>,
pub cover_status: Option<u8>,
pub low_battery: Option<u8>,
pub overheat: Option<u8>,
pub battery_percent: Option<u8>,
pub battery_voltage: Option<u16>,
pub tph_temperature: Option<i8>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum EmapiReport {
PrintResult {
command: EmapiCommand,
result: u8,
},
PrinterStatus {
command: EmapiCommand,
paper_status: Option<u8>,
cover_status: Option<u8>,
battery_state: Option<u8>,
overheat: Option<u8>,
nfc_paper_recognition: Option<u8>,
},
FlowControl {
command: EmapiCommand,
state: u8,
},
UpgradeStatus {
command: EmapiCommand,
status: u8,
},
BluetoothConnection {
command: EmapiCommand,
state: u8,
},
WifiConfigStatus {
command: EmapiCommand,
ssid: Option<String>,
state: Option<u8>,
},
Unknown {
command: EmapiCommand,
},
}
impl EmapiReport {
pub fn command(&self) -> &EmapiCommand {
match self {
Self::PrintResult { command, .. }
| Self::PrinterStatus { command, .. }
| Self::FlowControl { command, .. }
| Self::UpgradeStatus { command, .. }
| Self::BluetoothConnection { command, .. }
| Self::WifiConfigStatus { command, .. }
| Self::Unknown { command } => command,
}
}
pub fn is_flow_busy(&self) -> bool {
matches!(self, Self::FlowControl { state: 1, .. })
}
}