Skip to content

Commit

Permalink
Merge pull request #52 from pmnxis/dev/i51_indicate_card_term_ver
Browse files Browse the repository at this point in the history
#51 Indicate warning once terminal version mismatch
  • Loading branch information
pmnxis committed Nov 11, 2023
2 parents a230821 + 7862693 commit 8253646
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 9 deletions.
2 changes: 1 addition & 1 deletion billmock-plug-card/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ impl CardTerminalRxParse for KiccEd785Plug {
&self,
_raw: &[u8],
_prev_terminal_id: &RawTerminalId,
) -> Result<(CardTerminalRxCmd, TerminalVersion, RawTerminalId), CardTerminalError> {
) -> Result<(CardTerminalRxCmd, RawTerminalId), CardTerminalError> {
// implement me for actual usage
Err(CardTerminalError::UnsupportedSpec)
}
Expand Down
6 changes: 4 additions & 2 deletions card-terminal-adapter/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ pub mod types;

use types::*;

#[derive(Debug, defmt::Format, Clone, Eq, PartialEq, Ord, PartialOrd)]
pub enum TerminalVersion {
ArcadeSpecificLatest,
ArcadeSpecificLegacy,
Expand Down Expand Up @@ -58,6 +59,7 @@ pub enum CardTerminalRxCmd {
Ack,
/// Nack signal
Nack,
/// Request device information that related this board and firmware
RequestDeviceInfo,
/// For generic credit card terminal (not arcade specific customized version)
AlertPaymentIncomePrice(RawU24Price),
Expand All @@ -69,7 +71,7 @@ pub enum CardTerminalRxCmd {
/// 0xFB 0x14 0x02
/// Detail pakcet data should be parsed with additional function call.
/// using additional function call for avoid queue size being huge.
ResponseTerminalInfo(TidStatus),
ResponseTerminalInfo(TidStatus, TerminalVersion),
}

#[derive(PartialEq, Eq, Clone, defmt::Format)]
Expand Down Expand Up @@ -134,7 +136,7 @@ pub trait CardTerminalRxParse {
&self,
raw: &[u8],
prev_terminal_id: &RawTerminalId,
) -> Result<(CardTerminalRxCmd, TerminalVersion, RawTerminalId), CardTerminalError>;
) -> Result<(CardTerminalRxCmd, RawTerminalId), CardTerminalError>;
}

pub trait CardTerminalTxGen {
Expand Down
35 changes: 31 additions & 4 deletions src/application/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ impl Application {
let mut income_backup: Option<PaymentReceive> = None; // for StartButtonDecideSerialToVend
let mut mutual_inhibit = MutualInhibit::new();
let mut did_we_ask: u8 = 0;
let mut did_we_alert_version_warning = false;
#[cfg(feature = "svc_button")]
let (mut last_svc_pressed, mut is_svc_pressed): (Instant, bool) = (Instant::now(), false);
#[cfg(feature = "svc_button")]
Expand Down Expand Up @@ -184,10 +185,36 @@ impl Application {
}
// read from lock_read for do something
// handle different TID/and something
CardTerminalRxCmd::ResponseTerminalInfo(TidStatus::Changed) => {
card_reader
.send(CardTerminalTxCmd::RequestSaleSlotInfo)
.await;
CardTerminalRxCmd::ResponseTerminalInfo(tid_status, terminal_ver) => {
if tid_status == TidStatus::Changed {
card_reader
.send(CardTerminalTxCmd::RequestSaleSlotInfo)
.await;
}

if !did_we_alert_version_warning {
if let Some(alert) = match terminal_ver {
TerminalVersion::ArcadeSpecificLatest => None,
TerminalVersion::ArcadeSpecificLegacy => {
Some(CardTerminalDisplayWarning::RequireLatestTerminalVersion)
}
TerminalVersion::GenericPriceIncomeType => {
Some(CardTerminalDisplayWarning::RequireArcadeSpecificVersion)
}
TerminalVersion::Experimental => {
Some(CardTerminalDisplayWarning::WarnExperimentalVesion)
}
TerminalVersion::Unknown => {
Some(CardTerminalDisplayWarning::WarnUnknown)
}
} {
card_reader
.send(CardTerminalTxCmd::DisplayWarning(alert))
.await;

did_we_alert_version_warning = true;
}
}
}

_ => {}
Expand Down
6 changes: 4 additions & 2 deletions src/components/serial_device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -198,16 +198,17 @@ impl CardReaderDevice {
Err(())
}
}
CardTerminalRxCmd::ResponseTerminalInfo(_) => {
CardTerminalRxCmd::ResponseTerminalInfo(_, _) => {
let prev_tid =
novella.lock_read(eeprom::select::TERMINAL_ID).await;

let result = plug
.post_parse_response_terminal_info(rx_source, &prev_tid);
match result {
Ok((ret, _t_ver, tid)) => match ret {
Ok((ret, tid)) => match ret {
CardTerminalRxCmd::ResponseTerminalInfo(
TidStatus::Changed,
_,
) => {
defmt::info!(
"tid : {=[u8]:a} -> {=[u8]:a}",
Expand All @@ -223,6 +224,7 @@ impl CardReaderDevice {
}
CardTerminalRxCmd::ResponseTerminalInfo(
TidStatus::Unchanged,
_,
) => {
defmt::info!(
"tid : {=[u8]:a} (Unchanged)",
Expand Down

0 comments on commit 8253646

Please sign in to comment.