Skip to content

Commit c50113d

Browse files
Merge pull request #177 from LedgerHQ/update-nbgl-status
Remove status screens at the end of reviews, add new structures
2 parents bd050f4 + a300b9d commit c50113d

File tree

9 files changed

+253
-82
lines changed

9 files changed

+253
-82
lines changed

ledger_device_sdk/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ledger_device_sdk"
3-
version = "1.13.1"
3+
version = "1.14.0"
44
authors = ["yhql", "yogh333", "agrojean-ledger", "kingofpayne"]
55
edition = "2021"
66
license.workspace = true

ledger_device_sdk/examples/nbgl_address.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,16 @@ use ledger_device_sdk as _;
66

77
use include_gif::include_gif;
88
use ledger_device_sdk::io::*;
9-
use ledger_device_sdk::nbgl::{init_comm, NbglAddressReview, NbglGlyph};
9+
use ledger_device_sdk::nbgl::{
10+
init_comm, NbglAddressReview, NbglGlyph, NbglReviewStatus, StatusType,
11+
};
1012
use ledger_secure_sdk_sys::*;
1113

14+
#[panic_handler]
15+
fn panic(_: &core::panic::PanicInfo) -> ! {
16+
exit_app(1);
17+
}
18+
1219
#[no_mangle]
1320
extern "C" fn sample_main() {
1421
unsafe {
@@ -26,5 +33,11 @@ extern "C" fn sample_main() {
2633
const FERRIS: NbglGlyph =
2734
NbglGlyph::from_include(include_gif!("examples/crab_64x64.gif", NBGL));
2835
// Display the address confirmation screen.
29-
NbglAddressReview::new().glyph(&FERRIS).show(addr_hex);
36+
let success = NbglAddressReview::new()
37+
.glyph(&FERRIS)
38+
.verify_str("Verify Address")
39+
.show(addr_hex);
40+
NbglReviewStatus::new()
41+
.status_type(StatusType::Address)
42+
.show(success);
3043
}

ledger_device_sdk/examples/nbgl_choice.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use ledger_device_sdk as _;
66

77
use include_gif::include_gif;
88
use ledger_device_sdk::io::*;
9-
use ledger_device_sdk::nbgl::{init_comm, NbglChoice, NbglGlyph};
9+
use ledger_device_sdk::nbgl::{init_comm, NbglChoice, NbglGlyph, NbglStatus};
1010
use ledger_secure_sdk_sys::*;
1111

1212
#[panic_handler]
@@ -29,23 +29,30 @@ extern "C" fn sample_main() {
2929
const WARNING: NbglGlyph =
3030
NbglGlyph::from_include(include_gif!("icons/Warning_64px.gif", NBGL));
3131

32-
let back_to_safety = NbglChoice::new().glyph(&WARNING)
33-
.status_text(Some("Transaction rejected"),None)
34-
.show(
32+
let back_to_safety = NbglChoice::new().glyph(&WARNING).show(
3533
"Security risk detected",
3634
"It may not be safe to sign this transaction. To continue, you'll need to review the risk.",
3735
"Back to safety",
3836
"Review risk",
3937
);
4038

41-
if !back_to_safety {
42-
NbglChoice::new()
43-
.status_text(Some("Transaction confirmed"), Some("Transaction rejected"))
44-
.show(
39+
if back_to_safety {
40+
NbglStatus::new().text("Transaction rejected").show(false);
41+
} else {
42+
let confirmed = NbglChoice::new()
43+
.show(
4544
"The transaction cannot be trusted",
4645
"Your Ledger cannot decode this transaction. If you sign it, you could be authorizing malicious actions that can drain your wallet.\n\nLearn more: ledger.com/e8",
4746
"I accept the risk",
4847
"Reject transaction"
4948
);
49+
50+
NbglStatus::new()
51+
.text(if confirmed {
52+
"Transaction confirmed"
53+
} else {
54+
"Transaction rejected"
55+
})
56+
.show(confirmed);
5057
}
5158
}

ledger_device_sdk/examples/nbgl_generic_review.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ use include_gif::include_gif;
88
use ledger_device_sdk::io::*;
99
use ledger_device_sdk::nbgl::{
1010
init_comm, CenteredInfo, CenteredInfoStyle, Field, InfoButton, InfoLongPress, InfosList,
11-
NbglGenericReview, NbglGlyph, NbglPageContent, TagValueConfirm, TagValueList, TuneIndex,
11+
NbglGenericReview, NbglGlyph, NbglPageContent, NbglStatus, TagValueConfirm, TagValueList,
12+
TuneIndex,
1213
};
1314
use ledger_secure_sdk_sys::*;
1415

@@ -86,5 +87,11 @@ extern "C" fn sample_main() {
8687
.add_content(NbglPageContent::TagValueConfirm(tag_value_confirm))
8788
.add_content(NbglPageContent::InfosList(infos_list));
8889

89-
review.show("Reject Example", "Example Confirmed", "Example Rejected");
90+
let success = review.show("Reject Example");
91+
let status_text = if success {
92+
"Example confirmed"
93+
} else {
94+
"Example rejected"
95+
};
96+
NbglStatus::new().text(status_text).show(success);
9097
}

ledger_device_sdk/examples/nbgl_home.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ use ledger_device_sdk::nvm::*;
1111
use ledger_device_sdk::NVMData;
1212
use ledger_secure_sdk_sys::*;
1313

14+
#[panic_handler]
15+
fn panic(_: &core::panic::PanicInfo) -> ! {
16+
exit_app(1);
17+
}
18+
1419
pub enum Instruction {
1520
GetVersion,
1621
GetAppName,

ledger_device_sdk/examples/nbgl_review.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ use ledger_device_sdk as _;
66

77
use include_gif::include_gif;
88
use ledger_device_sdk::io::*;
9-
use ledger_device_sdk::nbgl::{init_comm, Field, NbglGlyph, NbglReview};
9+
use ledger_device_sdk::nbgl::{
10+
init_comm, Field, NbglGlyph, NbglReview, NbglReviewStatus, StatusType,
11+
};
1012
use ledger_secure_sdk_sys::*;
1113

1214
#[panic_handler]
@@ -45,14 +47,14 @@ extern "C" fn sample_main() {
4547
NbglGlyph::from_include(include_gif!("examples/crab_64x64.gif", NBGL));
4648
// Create NBGL review. Maximum number of fields and string buffer length can be customised
4749
// with constant generic parameters of NbglReview. Default values are 32 and 1024 respectively.
48-
let mut review: NbglReview = NbglReview::new()
50+
let success = NbglReview::new()
4951
.titles(
5052
"Please review transaction",
5153
"To send CRAB",
5254
"Sign transaction\nto send CRAB",
5355
)
5456
.glyph(&FERRIS)
55-
.blind();
56-
57-
review.show(&my_fields);
57+
.blind()
58+
.show(&my_fields);
59+
NbglReviewStatus::new().show(success);
5860
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#![no_std]
2+
#![no_main]
3+
4+
// Force boot section to be embedded in
5+
use ledger_device_sdk as _;
6+
7+
use include_gif::include_gif;
8+
use ledger_device_sdk::io::*;
9+
use ledger_device_sdk::nbgl::{
10+
init_comm, Field, NbglGlyph, NbglReview, NbglReviewStatus, NbglSpinner, StatusType,
11+
};
12+
use ledger_device_sdk::testing::debug_print;
13+
use ledger_secure_sdk_sys::*;
14+
15+
#[panic_handler]
16+
fn panic(_: &core::panic::PanicInfo) -> ! {
17+
exit_app(1);
18+
}
19+
20+
// static spin_end: bool = false;
21+
22+
#[no_mangle]
23+
extern "C" fn sample_main() {
24+
unsafe {
25+
nbgl_refreshReset();
26+
}
27+
28+
let mut comm = Comm::new();
29+
// Initialize reference to Comm instance for NBGL
30+
// API calls.
31+
init_comm(&mut comm);
32+
33+
let my_field = [Field {
34+
name: "Amount",
35+
value: "111 CRAB",
36+
}];
37+
38+
// Load glyph from 64x64 4bpp gif file with include_gif macro. Creates an NBGL compatible glyph.
39+
const FERRIS: NbglGlyph =
40+
NbglGlyph::from_include(include_gif!("examples/crab_64x64.gif", NBGL));
41+
// Create NBGL review. Maximum number of fields and string buffer length can be customised
42+
// with constant generic parameters of NbglReview. Default values are 32 and 1024 respectively.
43+
let success = NbglReview::new()
44+
.titles(
45+
"Please review transaction",
46+
"To send CRAB",
47+
"Sign transaction\nto send CRAB",
48+
)
49+
.glyph(&FERRIS)
50+
.show(&my_field);
51+
52+
NbglSpinner::new().text("Please wait...").show();
53+
54+
// Simulate an idle state of the app where it just
55+
// waits for some event to happen (such as APDU reception), going through
56+
// the event loop to process TickerEvents so that the spinner can be animated
57+
// every 800ms.
58+
let mut loop_count = 50;
59+
while loop_count > 0 {
60+
comm.next_event::<ApduHeader>();
61+
loop_count -= 1;
62+
}
63+
NbglReviewStatus::new().show(success);
64+
}

ledger_device_sdk/examples/nbgl_streaming_review.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ use ledger_device_sdk as _;
66

77
use include_gif::include_gif;
88
use ledger_device_sdk::io::*;
9-
use ledger_device_sdk::nbgl::{init_comm, Field, NbglGlyph, NbglStreamingReview, TransactionType};
9+
use ledger_device_sdk::nbgl::{
10+
init_comm, Field, NbglGlyph, NbglReviewStatus, NbglStreamingReview, StatusType, TransactionType,
11+
};
1012
use ledger_secure_sdk_sys::*;
1113

1214
#[panic_handler]
@@ -33,7 +35,10 @@ extern "C" fn sample_main() {
3335
.glyph(&FERRIS)
3436
.tx_type(TransactionType::Message);
3537

36-
review.start("Example Title", "Example Subtitle");
38+
if !review.start("Streaming example", "Example Subtitle") {
39+
NbglReviewStatus::new().show(false);
40+
return;
41+
}
3742

3843
let fields = [
3944
Field {
@@ -59,8 +64,12 @@ extern "C" fn sample_main() {
5964
];
6065

6166
for i in 0..fields.len() {
62-
review.continue_review(&fields[i..i + 1]);
67+
if !review.continue_review(&fields[i..i + 1]) {
68+
NbglReviewStatus::new().show(false);
69+
return;
70+
}
6371
}
6472

65-
review.finish("Sign to send token\n");
73+
let success = review.finish("Sign to send token\n");
74+
NbglReviewStatus::new().show(success);
6675
}

0 commit comments

Comments
 (0)