@@ -389,7 +389,7 @@ static void useCaseHomeExt(const char *appName,
389
389
nbgl_callback_t quitCallback );
390
390
static void displayDetails (const char * tag , const char * value , bool wrapping );
391
391
392
- static void reset_callbacks (void )
392
+ static void reset_callbacks_and_context (void )
393
393
{
394
394
onQuit = NULL ;
395
395
onContinue = NULL ;
@@ -398,10 +398,10 @@ static void reset_callbacks(void)
398
398
onControls = NULL ;
399
399
onContentAction = NULL ;
400
400
onChoice = NULL ;
401
- onModalConfirm = NULL ;
402
401
#ifdef NBGL_KEYPAD
403
402
onValidatePin = NULL ;
404
403
#endif
404
+ memset (& genericContext , 0 , sizeof (genericContext ));
405
405
}
406
406
407
407
// Helper to set genericContext page info
@@ -648,6 +648,7 @@ static void pageModalCallback(int token, uint8_t index)
648
648
if (index == 0 ) {
649
649
if (onModalConfirm != NULL ) {
650
650
onModalConfirm ();
651
+ onModalConfirm = NULL ;
651
652
}
652
653
}
653
654
else {
@@ -1810,7 +1811,7 @@ static void keypadGenericUseCase(const char *title,
1810
1811
return ;
1811
1812
}
1812
1813
1813
- reset_callbacks ();
1814
+ reset_callbacks_and_context ();
1814
1815
// reset the keypad context
1815
1816
memset (& keypadContext , 0 , sizeof (KeypadContext_t ));
1816
1817
@@ -2650,8 +2651,7 @@ static void useCaseReview(nbgl_operationType_t operationType,
2650
2651
bool isLight ,
2651
2652
bool playNotifSound )
2652
2653
{
2653
- reset_callbacks ();
2654
- memset (& genericContext , 0 , sizeof (genericContext ));
2654
+ reset_callbacks_and_context ();
2655
2655
2656
2656
bundleNavContext .review .operationType = operationType ;
2657
2657
bundleNavContext .review .choiceCallback = choiceCallback ;
@@ -2715,8 +2715,7 @@ static void useCaseReviewStreamingStart(nbgl_operationType_t operationType
2715
2715
nbgl_choiceCallback_t choiceCallback ,
2716
2716
bool playNotifSound )
2717
2717
{
2718
- reset_callbacks ();
2719
- memset (& genericContext , 0 , sizeof (genericContext ));
2718
+ reset_callbacks_and_context ();
2720
2719
2721
2720
bundleNavContext .reviewStreaming .operationType = operationType ;
2722
2721
bundleNavContext .reviewStreaming .choiceCallback = choiceCallback ;
@@ -2780,8 +2779,6 @@ static void useCaseHomeExt(const char *appName,
2780
2779
nbgl_callback_t topRightCallback ,
2781
2780
nbgl_callback_t quitCallback )
2782
2781
{
2783
- reset_callbacks ();
2784
-
2785
2782
nbgl_pageInfoDescription_t info = {.centeredInfo .icon = appIcon ,
2786
2783
.centeredInfo .text1 = appName ,
2787
2784
.centeredInfo .text3 = NULL ,
@@ -2793,6 +2790,8 @@ static void useCaseHomeExt(const char *appName,
2793
2790
.topRightStyle = withSettings ? SETTINGS_ICON : INFO_ICON ,
2794
2791
.topRightToken = CONTINUE_TOKEN ,
2795
2792
.tuneId = TUNE_TAP_CASUAL };
2793
+ reset_callbacks_and_context ();
2794
+
2796
2795
if ((homeAction -> text != NULL ) || (homeAction -> icon != NULL )) {
2797
2796
// trick to use ACTION_BUTTON_TOKEN for action and quit, with index used to distinguish
2798
2797
info .bottomButtonsToken = ACTION_BUTTON_TOKEN ;
@@ -3215,7 +3214,7 @@ void nbgl_useCaseNavigableContent(const char *title,
3215
3214
nbgl_navCallback_t navCallback ,
3216
3215
nbgl_layoutTouchCallback_t controlsCallback )
3217
3216
{
3218
- reset_callbacks ();
3217
+ reset_callbacks_and_context ();
3219
3218
3220
3219
// memorize context
3221
3220
onQuit = quitCallback ;
@@ -3266,8 +3265,7 @@ void nbgl_useCaseGenericSettings(const char *appName,
3266
3265
const nbgl_contentInfoList_t * infosList ,
3267
3266
nbgl_callback_t quitCallback )
3268
3267
{
3269
- reset_callbacks ();
3270
- memset (& genericContext , 0 , sizeof (genericContext ));
3268
+ reset_callbacks_and_context ();
3271
3269
3272
3270
// memorize context
3273
3271
onQuit = quitCallback ;
@@ -3343,6 +3341,8 @@ void nbgl_useCaseHomeAndSettings(
3343
3341
{
3344
3342
nbgl_homeAndSettingsContext_t * context = & bundleNavContext .homeAndSettings ;
3345
3343
3344
+ reset_callbacks_and_context ();
3345
+
3346
3346
context -> appName = appName ;
3347
3347
context -> appIcon = appIcon ;
3348
3348
context -> tagline = tagline ;
@@ -3373,12 +3373,12 @@ void nbgl_useCaseHomeAndSettings(
3373
3373
*/
3374
3374
void nbgl_useCaseStatus (const char * message , bool isSuccess , nbgl_callback_t quitCallback )
3375
3375
{
3376
- reset_callbacks ();
3377
-
3378
3376
nbgl_screenTickerConfiguration_t ticker = {.tickerCallback = & tickerCallback ,
3379
3377
.tickerIntervale = 0 , // not periodic
3380
3378
.tickerValue = STATUS_SCREEN_DURATION };
3381
3379
3380
+ reset_callbacks_and_context ();
3381
+
3382
3382
onQuit = quitCallback ;
3383
3383
if (isSuccess ) {
3384
3384
#ifdef HAVE_PIEZO_SOUND
@@ -3477,23 +3477,22 @@ void nbgl_useCaseChoice(const nbgl_icon_details_t *icon,
3477
3477
const char * cancelText ,
3478
3478
nbgl_choiceCallback_t callback )
3479
3479
{
3480
- reset_callbacks ();
3481
-
3482
- nbgl_pageConfirmationDescription_t info = {.cancelText = cancelText ,
3483
- .centeredInfo .text1 = message ,
3484
- .centeredInfo .text2 = subMessage ,
3485
- .centeredInfo .text3 = NULL ,
3486
- .centeredInfo .style = LARGE_CASE_INFO ,
3487
- .centeredInfo .icon = icon ,
3488
- .centeredInfo .offsetY = 0 ,
3489
- .confirmationText = confirmText ,
3490
- .confirmationToken = CHOICE_TOKEN ,
3491
- .tuneId = TUNE_TAP_CASUAL ,
3492
- .modal = false};
3480
+ nbgl_pageConfirmationDescription_t info = {0 };
3493
3481
// check params
3494
3482
if ((confirmText == NULL ) || (cancelText == NULL )) {
3495
3483
return ;
3496
3484
}
3485
+ reset_callbacks_and_context ();
3486
+
3487
+ info .cancelText = cancelText ;
3488
+ info .centeredInfo .text1 = message ;
3489
+ info .centeredInfo .text2 = subMessage ;
3490
+ info .centeredInfo .style = LARGE_CASE_INFO ;
3491
+ info .centeredInfo .icon = icon ;
3492
+ info .confirmationText = confirmText ;
3493
+ info .confirmationToken = CHOICE_TOKEN ;
3494
+ info .tuneId = TUNE_TAP_CASUAL ;
3495
+
3497
3496
onChoice = callback ;
3498
3497
pageContext = nbgl_pageDrawConfirmation (& pageCallback , & info );
3499
3498
nbgl_refreshSpecial (FULL_COLOR_PARTIAL_REFRESH );
@@ -3556,6 +3555,7 @@ void nbgl_useCaseAction(const nbgl_icon_details_t *icon,
3556
3555
{
3557
3556
nbgl_pageContent_t content = {0 };
3558
3557
3558
+ reset_callbacks_and_context ();
3559
3559
// memorize callback
3560
3560
onAction = callback ;
3561
3561
@@ -3588,8 +3588,6 @@ void nbgl_useCaseReviewStart(const nbgl_icon_details_t *icon,
3588
3588
nbgl_callback_t continueCallback ,
3589
3589
nbgl_callback_t rejectCallback )
3590
3590
{
3591
- reset_callbacks ();
3592
-
3593
3591
nbgl_pageInfoDescription_t info = {.footerText = rejectText ,
3594
3592
.footerToken = QUIT_TOKEN ,
3595
3593
.tapActionText = NULL ,
@@ -3598,14 +3596,17 @@ void nbgl_useCaseReviewStart(const nbgl_icon_details_t *icon,
3598
3596
.topRightStyle = NO_BUTTON_STYLE ,
3599
3597
.actionButtonText = NULL ,
3600
3598
.tuneId = TUNE_TAP_CASUAL };
3601
- info .centeredInfo .icon = icon ;
3602
- info .centeredInfo .text1 = reviewTitle ;
3603
- info .centeredInfo .text2 = reviewSubTitle ;
3604
- info .centeredInfo .text3 = "Swipe to review" ;
3605
- info .centeredInfo .style = LARGE_CASE_GRAY_INFO ;
3606
- info .centeredInfo .offsetY = 0 ;
3607
- onQuit = rejectCallback ;
3608
- onContinue = continueCallback ;
3599
+
3600
+ reset_callbacks_and_context ();
3601
+
3602
+ info .centeredInfo .icon = icon ;
3603
+ info .centeredInfo .text1 = reviewTitle ;
3604
+ info .centeredInfo .text2 = reviewSubTitle ;
3605
+ info .centeredInfo .text3 = "Swipe to review" ;
3606
+ info .centeredInfo .style = LARGE_CASE_GRAY_INFO ;
3607
+ info .centeredInfo .offsetY = 0 ;
3608
+ onQuit = rejectCallback ;
3609
+ onContinue = continueCallback ;
3609
3610
3610
3611
#ifdef HAVE_PIEZO_SOUND
3611
3612
// Play notification sound
@@ -3627,7 +3628,7 @@ void nbgl_useCaseRegularReview(uint8_t initPage,
3627
3628
nbgl_navCallback_t navCallback ,
3628
3629
nbgl_choiceCallback_t choiceCallback )
3629
3630
{
3630
- reset_callbacks ();
3631
+ reset_callbacks_and_context ();
3631
3632
3632
3633
// memorize context
3633
3634
onChoice = choiceCallback ;
@@ -3662,8 +3663,7 @@ void nbgl_useCaseStaticReview(const nbgl_contentTagValueList_t *tagValueList,
3662
3663
{
3663
3664
uint8_t offset = 0 ;
3664
3665
3665
- reset_callbacks ();
3666
- memset (& genericContext , 0 , sizeof (genericContext ));
3666
+ reset_callbacks_and_context ();
3667
3667
3668
3668
// memorize context
3669
3669
onChoice = callback ;
@@ -3719,8 +3719,7 @@ void nbgl_useCaseStaticReviewLight(const nbgl_contentTagValueList_t *tagValueLis
3719
3719
{
3720
3720
uint8_t offset = 0 ;
3721
3721
3722
- reset_callbacks ();
3723
- memset (& genericContext , 0 , sizeof (genericContext ));
3722
+ reset_callbacks_and_context ();
3724
3723
3725
3724
// memorize context
3726
3725
onChoice = callback ;
@@ -3863,7 +3862,9 @@ void nbgl_useCaseAdvancedReview(nbgl_operationType_t operationType,
3863
3862
const nbgl_warning_t * warning ,
3864
3863
nbgl_choiceCallback_t choiceCallback )
3865
3864
{
3865
+ reset_callbacks_and_context ();
3866
3866
memset (& reviewWithWarnCtx , 0 , sizeof (reviewWithWarnCtx ));
3867
+
3867
3868
// memorize tipBox because it can be in the call stack of the caller
3868
3869
if (tipBox != NULL ) {
3869
3870
memcpy (& activeTipBox , tipBox , sizeof (activeTipBox ));
@@ -3973,8 +3974,7 @@ void nbgl_useCaseGenericReview(const nbgl_genericContents_t *contents,
3973
3974
const char * rejectText ,
3974
3975
nbgl_callback_t rejectCallback )
3975
3976
{
3976
- reset_callbacks ();
3977
- memset (& genericContext , 0 , sizeof (genericContext ));
3977
+ reset_callbacks_and_context ();
3978
3978
3979
3979
// memorize context
3980
3980
onQuit = rejectCallback ;
@@ -4220,8 +4220,7 @@ void nbgl_useCaseAddressConfirmationExt(const char *addres
4220
4220
nbgl_choiceCallback_t callback ,
4221
4221
const nbgl_contentTagValueList_t * tagValueList )
4222
4222
{
4223
- reset_callbacks ();
4224
- memset (& genericContext , 0 , sizeof (genericContext ));
4223
+ reset_callbacks_and_context ();
4225
4224
memset (& addressConfirmationContext , 0 , sizeof (addressConfirmationContext ));
4226
4225
4227
4226
// save context
@@ -4271,8 +4270,8 @@ void nbgl_useCaseAddressReview(const char *address,
4271
4270
const char * reviewSubTitle ,
4272
4271
nbgl_choiceCallback_t choiceCallback )
4273
4272
{
4274
- reset_callbacks ();
4275
- memset ( & genericContext , 0 , sizeof ( genericContext ));
4273
+ reset_callbacks_and_context ();
4274
+
4276
4275
// release a potential modal
4277
4276
if (addressConfirmationContext .modalLayout ) {
4278
4277
nbgl_layoutRelease (addressConfirmationContext .modalLayout );
0 commit comments