Skip to content

Commit

Permalink
Update NBGL spinner: previous and new strings shall be stored to enab…
Browse files Browse the repository at this point in the history
…le recurrent calls
  • Loading branch information
yogh333 committed Jan 29, 2025
1 parent 9277831 commit c476847
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 14 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion ledger_device_sdk/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "ledger_device_sdk"
version = "1.19.6"
version = "1.20.0"
authors = ["yhql", "yogh333", "agrojean-ledger", "kingofpayne"]
edition = "2021"
license.workspace = true
Expand Down
2 changes: 1 addition & 1 deletion ledger_device_sdk/examples/nbgl_spinner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ extern "C" fn sample_main() {
.glyph(&FERRIS)
.show(&my_field);

NbglSpinner::new().text("Please wait...").show();
NbglSpinner::new().show("Please wait...");

// Simulate an idle state of the app where it just
// waits for some event to happen (such as APDU reception), going through
Expand Down
2 changes: 1 addition & 1 deletion ledger_device_sdk/src/libcall/swap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ pub fn sign_tx_params(arg0: u32) -> CreateTxParams {
}

#[cfg(any(target_os = "stax", target_os = "flex"))]
NbglSpinner::new().text("Signing").show();
NbglSpinner::new().show("Signing");

create_tx_params
}
Expand Down
28 changes: 18 additions & 10 deletions ledger_device_sdk/src/nbgl/nbgl_spinner.rs
Original file line number Diff line number Diff line change
@@ -1,28 +1,36 @@
use super::*;
extern crate alloc;
use alloc::ffi::CString;

/// A wrapper around the asynchronous NBGL nbgl_useCaseSpinner C API binding.
/// Draws a spinner page with the given parameters. The spinner will "turn" automatically every
/// 800 ms, provided the IO event loop is running to process TickerEvents.
#[derive(Debug, Default)]
pub struct NbglSpinner {
text: CString,
text: [Option<CString>; 2],
write_idx: usize,
read_idx: usize,
}

impl NbglSpinner {
pub fn new() -> NbglSpinner {
NbglSpinner {
text: CString::new("").unwrap(),
text: [None, None],
write_idx: 0,
read_idx: 0,
}
}

pub fn text(self, text: &str) -> NbglSpinner {
NbglSpinner {
text: CString::new(text).unwrap(),
}
}

pub fn show(&self) {
/// Shows the spinner with the current text.
/// Every call make the spinner "turn" to the next text.
pub fn show(&mut self, text: &str) {
self.text[self.write_idx] = Some(CString::new(text).unwrap());
self.read_idx = self.write_idx;
self.write_idx = (self.write_idx + 1) % 2;
unsafe {
nbgl_useCaseSpinner(self.text.as_ptr() as *const c_char);
nbgl_useCaseSpinner(
self.text[self.read_idx].as_ref().unwrap().as_ptr() as *const c_char
);
}
}
}

0 comments on commit c476847

Please sign in to comment.