Skip to content

Commit 3318347

Browse files
Merge pull request LedgerHQ#131 from LedgerHQ/tdj/flex_porting
flex porting
2 parents 6dd470c + ee1500f commit 3318347

File tree

64 files changed

+157
-84
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+157
-84
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,9 @@ build/
2323
dist/
2424
*.manifest
2525
*.spec
26+
27+
# Temporary directory with snapshots taken during test runs
28+
tests/snapshots-tmp/
29+
30+
# Virtual env for sideload (macOS and Windows)
31+
ledger/

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## 2.0.0 - 2024-05-01
6+
7+
- Support of Flex device
8+
59
## 1.7.6 - 2021-03-30
610

711
- Support of Monero client version `0.17.2.*`

Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ include $(BOLOS_SDK)/Makefile.defines
2727
APPNAME = "Monero"
2828

2929
# Application version
30-
APPVERSION_M = 1
31-
APPVERSION_N = 9
30+
APPVERSION_M = 2
31+
APPVERSION_N = 0
3232
APPVERSION_P = 0
3333
APPVERSION = "$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)"
3434

@@ -43,6 +43,7 @@ ICON_NANOS = icons/app_monero_16px.gif
4343
ICON_NANOX = icons/app_monero_14px.gif
4444
ICON_NANOSP = icons/app_monero_14px.gif
4545
ICON_STAX = icons/app_monero_32px.gif
46+
ICON_FLEX = icons/app_monero_40px.gif
4647

4748
# Application allowed derivation curves.
4849
CURVE_APP_LOAD_PARAMS = secp256k1

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Monero Ledger App
22

3-
Monero wallet application for Ledger Nano S and Nano X.
3+
Monero wallet application for all Ledger devices.
44

55
## Install
66

icons/app_monero_40px.gif

536 Bytes
Loading

ledger_app.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[app]
22
build_directory = "./"
33
sdk = "C"
4-
devices = ["nanos", "nanox", "nanos+", "stax"]
4+
devices = ["nanos", "nanox", "nanos+", "stax", "flex"]
55

66
[tests]
77
pytest_directory = "./tests/"

src/monero_nvram.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
#include "monero_api.h"
2323
#include "monero_vars.h"
2424

25-
#if defined(TARGET_NANOX) || defined(TARGET_NANOS2) || defined(TARGET_STAX)
26-
const monero_nv_state_t N_state_pic;
27-
#else
25+
#if defined(TARGET_NANOS)
2826
monero_nv_state_t N_state_pic;
27+
#else
28+
const monero_nv_state_t N_state_pic;
2929
#endif

src/monero_prehash.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ int monero_apdu_mlsag_prehash_init() {
5656
// fee str
5757
monero_vamount2str(G_monero_vstate.io_buffer + G_monero_vstate.io_offset,
5858
G_monero_vstate.ux_amount, 15);
59+
60+
snprintf(G_monero_vstate.ux_amount + strlen(G_monero_vstate.ux_amount),
61+
sizeof(G_monero_vstate.ux_amount) - strlen(G_monero_vstate.ux_amount), " XMR");
5962
// ask user
6063
monero_io_discard(1);
6164
ui_menu_fee_validation_display(0);
@@ -212,6 +215,8 @@ int monero_apdu_mlsag_prehash_update() {
212215
amount = monero_bamount2uint64(v, sizeof(v));
213216
if (amount) {
214217
monero_amount2str(amount, G_monero_vstate.ux_amount, 15);
218+
snprintf(G_monero_vstate.ux_amount + strlen(G_monero_vstate.ux_amount),
219+
sizeof(G_monero_vstate.ux_amount) - strlen(G_monero_vstate.ux_amount), " XMR");
215220

216221
if ((G_monero_vstate.options & IN_OPTION_MORE_COMMAND) == 0) {
217222
if (!is_change) {

src/monero_ux_nano.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ UX_STEP_NOCB(ux_menu_validation_timelock_1_step, bn,
181181
UX_STEP_CB(ux_menu_validation_cf_2_step, pb, ui_menu_amount_validation_action(ACCEPT),
182182
{
183183
&C_icon_validate_14,
184-
"Accept",
184+
"Sign transaction",
185185
});
186186

187187
UX_STEP_CB(ux_menu_validation_cf_3_step, pb, ui_menu_amount_validation_action(REJECT),
@@ -241,7 +241,7 @@ UX_STEP_NOCB(ux_menu_validation_2_step,
241241
{"Destination", G_monero_vstate.ux_address});
242242

243243
UX_STEP_CB(ux_menu_validation_3_step, pb, ui_menu_validation_action(ACCEPT),
244-
{&C_icon_validate_14, "Accept"});
244+
{&C_icon_validate_14, "Sign transaction"});
245245

246246
UX_STEP_CB(ux_menu_validation_4_step, pb, ui_menu_validation_action(REJECT),
247247
{&C_icon_crossmark, "Reject"});

src/monero_ux_stax.c renamed to src/monero_ux_nbgl.c

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ static void release_context(void) {
5959
/* -------------------------------- INFO UX --------------------------------- */
6060

6161
void ui_menu_show_tx_aborted(void) {
62-
nbgl_useCaseStatus("Transaction\ncancelled", false, ui_menu_main_display);
62+
nbgl_useCaseReviewStatus(STATUS_TYPE_TRANSACTION_REJECTED, ui_menu_main_display);
6363
}
6464

6565
void ui_menu_show_security_error(void) {
@@ -103,7 +103,7 @@ unsigned int ui_menu_transaction_start(void) {
103103
}
104104

105105
unsigned int ui_menu_transaction_signed(void) {
106-
nbgl_useCaseStatus("TRANSACTION\nSIGNED", true, ui_menu_main_display);
106+
nbgl_useCaseReviewStatus(STATUS_TYPE_TRANSACTION_SIGNED, ui_menu_main_display);
107107
return 0;
108108
}
109109

@@ -160,13 +160,13 @@ void ui_menu_change_validation_display_last(unsigned int value __attribute__((un
160160
transactionContext.tagValueList.nbPairs++;
161161

162162
transactionContext.infoLongPress.icon = &C_Monero_64px;
163-
transactionContext.infoLongPress.longPressText = "Approve";
163+
transactionContext.infoLongPress.longPressText = "Hold to sign";
164164
transactionContext.infoLongPress.longPressToken = 0;
165165
transactionContext.infoLongPress.tuneId = TUNE_TAP_CASUAL;
166-
transactionContext.infoLongPress.text = "Hold to confirm";
166+
transactionContext.infoLongPress.text = "Sign transaction";
167167

168168
nbgl_useCaseStaticReview(&transactionContext.tagValueList, &transactionContext.infoLongPress,
169-
"Cancel", ui_menu_validation_action);
169+
"Reject transaction", ui_menu_validation_action);
170170
}
171171

172172
static void timelock_callback(void) {
@@ -193,6 +193,13 @@ void ui_menu_timelock_validation_display(unsigned int value __attribute__((unuse
193193
}
194194

195195
/* ----------------------------- USER DEST/AMOUNT VALIDATION ----------------------------- */
196+
197+
#ifdef TARGET_FLEX
198+
#define NEXT_PAGE_TEXT ("Swipe to continue")
199+
#else
200+
#define NEXT_PAGE_TEXT ("Tap to continue")
201+
#endif
202+
196203
static void fill_amount_and_destination(void) {
197204
transactionContext.tagValuePair[0].item = "Amount";
198205
transactionContext.tagValuePair[0].value = G_monero_vstate.ux_amount;
@@ -225,9 +232,9 @@ static void continue_display(int token, unsigned char index) {
225232
.navType = NAV_WITH_TAP,
226233
.progressIndicator = true,
227234
.navWithTap.backButton = false,
228-
.navWithTap.nextPageText = "Tap to continue",
235+
.navWithTap.nextPageText = NEXT_PAGE_TEXT,
229236
.navWithTap.nextPageToken = CONTINUE_TOKEN,
230-
.navWithTap.quitText = "Cancel",
237+
.navWithTap.quitText = "Reject transaction",
231238
.quitToken = QUIT_TOKEN,
232239
.tuneId = TUNE_TAP_CASUAL};
233240

@@ -248,13 +255,13 @@ static void continue_display_last(int token, unsigned char index) {
248255

249256
fill_amount_and_destination();
250257
transactionContext.infoLongPress.icon = &C_Monero_64px;
251-
transactionContext.infoLongPress.longPressText = "Approve";
258+
transactionContext.infoLongPress.longPressText = "Hold to sign";
252259
transactionContext.infoLongPress.longPressToken = 0;
253260
transactionContext.infoLongPress.tuneId = TUNE_TAP_CASUAL;
254-
transactionContext.infoLongPress.text = "Hold to confirm";
261+
transactionContext.infoLongPress.text = "Sign transaction";
255262

256263
nbgl_useCaseStaticReview(&transactionContext.tagValueList, &transactionContext.infoLongPress,
257-
"Cancel", ui_menu_validation_action);
264+
"Reject transaction", ui_menu_validation_action);
258265
}
259266

260267
static void display_previous_infos(bool last) {
@@ -265,9 +272,9 @@ static void display_previous_infos(bool last) {
265272
.navType = NAV_WITH_TAP,
266273
.progressIndicator = true,
267274
.navWithTap.backButton = false,
268-
.navWithTap.nextPageText = "Tap to continue",
275+
.navWithTap.nextPageText = NEXT_PAGE_TEXT,
269276
.navWithTap.nextPageToken = CONTINUE_TOKEN,
270-
.navWithTap.quitText = "Cancel",
277+
.navWithTap.quitText = "Reject transaction",
271278
.quitToken = QUIT_TOKEN,
272279
.tuneId = TUNE_TAP_CASUAL};
273280

@@ -315,7 +322,7 @@ static void ui_menu_pubaddr_action_cancelled(void) {
315322
monero_io_do(IO_RETURN_AFTER_TX);
316323
}
317324
G_monero_vstate.disp_addr_mode = 0;
318-
nbgl_useCaseStatus("Address display\ncancelled", false, ui_menu_main_display);
325+
nbgl_useCaseReviewStatus(STATUS_TYPE_ADDRESS_REJECTED, ui_menu_main_display);
319326
}
320327

321328
void ui_menu_pubaddr_action(bool confirm) {
@@ -325,7 +332,7 @@ void ui_menu_pubaddr_action(bool confirm) {
325332
monero_io_do(IO_RETURN_AFTER_TX);
326333
}
327334
G_monero_vstate.disp_addr_mode = 0;
328-
nbgl_useCaseStatus("ADDRESS\nVERIFIED", true, ui_menu_main_display);
335+
nbgl_useCaseReviewStatus(STATUS_TYPE_ADDRESS_VERIFIED, ui_menu_main_display);
329336
} else {
330337
ui_menu_pubaddr_action_cancelled();
331338
}
@@ -372,8 +379,9 @@ void display_account(void) {
372379

373380
transactionContext.tagValueList.pairs = transactionContext.tagValuePair;
374381

375-
nbgl_useCaseAddressConfirmationExt(G_monero_vstate.ux_address, ui_menu_pubaddr_action,
376-
&transactionContext.tagValueList);
382+
nbgl_useCaseAddressReview(G_monero_vstate.ux_address, &transactionContext.tagValueList,
383+
&C_Monero_64px, "Verify Monero\naddress", NULL,
384+
ui_menu_pubaddr_action);
377385
}
378386

379387
int ui_menu_any_pubaddr_display(unsigned int value __attribute__((unused)), unsigned char* pub_view,
@@ -388,8 +396,8 @@ int ui_menu_any_pubaddr_display(unsigned int value __attribute__((unused)), unsi
388396
return error;
389397
}
390398

391-
nbgl_useCaseReviewStart(&C_Monero_64px, "Review Address", "", "Cancel", display_account,
392-
ui_menu_pubaddr_action_cancelled);
399+
display_account();
400+
393401
return 0;
394402
}
395403

0 commit comments

Comments
 (0)