@@ -11,8 +11,8 @@ pub use ledger_secure_sdk_sys::BOLOS_UX_IGNORE;
11
11
pub use ledger_secure_sdk_sys:: BOLOS_UX_OK ;
12
12
pub use ledger_secure_sdk_sys:: BOLOS_UX_REDRAW ;
13
13
14
- fn os_ux_rs ( params : & bolos_ux_params_t ) {
15
- unsafe { os_ux ( params as * const bolos_ux_params_t as * mut bolos_ux_params_t ) } ;
14
+ unsafe extern "C" {
15
+ pub unsafe static mut G_ux_params : bolos_ux_params_t ;
16
16
}
17
17
18
18
#[ repr( u8 ) ]
@@ -21,31 +21,46 @@ pub enum UxEvent {
21
21
Keyboard = BOLOS_UX_KEYBOARD ,
22
22
WakeUp = BOLOS_UX_WAKE_UP ,
23
23
ValidatePIN = BOLOS_UX_VALIDATE_PIN ,
24
- LastID = BOLOS_UX_VALIDATE_PIN + 1 ,
24
+ DelayLock = BOLOS_UX_DELAY_LOCK ,
25
+ LastID = BOLOS_UX_DELAY_LOCK + 1 ,
25
26
}
26
27
27
28
impl UxEvent {
28
- pub fn request ( & self ) -> u32 {
29
- let mut params = bolos_ux_params_t:: default ( ) ;
30
- params. ux_id = match self {
31
- Self :: Event => Self :: Event as u8 ,
32
- Self :: Keyboard => Self :: Keyboard as u8 ,
33
- Self :: WakeUp => Self :: WakeUp as u8 ,
34
- Self :: ValidatePIN => {
35
- // Perform pre-wake up
36
- params. ux_id = Self :: WakeUp as u8 ;
37
- os_ux_rs ( & params) ;
29
+ #[ allow( unused) ]
30
+ pub fn request ( & self , val : Option < u32 > ) -> u32 {
31
+ unsafe {
32
+ //let mut params = bolos_ux_params_t::default();
33
+ G_ux_params . ux_id = match self {
34
+ Self :: Event => Self :: Event as u8 ,
35
+ Self :: Keyboard => Self :: Keyboard as u8 ,
36
+ Self :: WakeUp => Self :: WakeUp as u8 ,
37
+ Self :: ValidatePIN => {
38
+ // Perform pre-wake up
39
+ G_ux_params . ux_id = Self :: WakeUp as u8 ;
40
+ os_ux ( & raw mut G_ux_params as * mut bolos_ux_params_t ) ;
38
41
39
- Self :: ValidatePIN as u8
40
- }
41
- Self :: LastID => panic ! ( "Unknown UX Event" ) ,
42
- } ;
42
+ Self :: ValidatePIN as u8
43
+ }
44
+ Self :: DelayLock => {
45
+ #[ cfg( any( target_os = "stax" , target_os = "flex" , feature = "nano_nbgl" ) ) ]
46
+ {
47
+ G_ux_params . u = bolos_ux_params_s__bindgen_ty_1 {
48
+ lock_delay : bolos_ux_params_s__bindgen_ty_1__bindgen_ty_3 {
49
+ delay_ms : val. unwrap_or ( 10000 ) ,
50
+ } ,
51
+ } ;
52
+ }
53
+ Self :: DelayLock as u8
54
+ }
55
+ Self :: LastID => panic ! ( "Unknown UX Event" ) ,
56
+ } ;
43
57
44
- os_ux_rs ( & params ) ;
58
+ os_ux ( & raw mut G_ux_params as * mut bolos_ux_params_t ) ;
45
59
46
- match self {
47
- Self :: ValidatePIN => Self :: block ( ) ,
48
- _ => unsafe { os_sched_last_status ( TASK_BOLOS_UX as u32 ) as u32 } ,
60
+ match self {
61
+ Self :: ValidatePIN => Self :: block ( ) ,
62
+ _ => os_sched_last_status ( TASK_BOLOS_UX as u32 ) as u32 ,
63
+ }
49
64
}
50
65
}
51
66
@@ -58,7 +73,7 @@ impl UxEvent {
58
73
let mut spi_buffer = [ 0u8 ; 256 ] ;
59
74
sys_seph:: send_general_status ( ) ;
60
75
sys_seph:: seph_recv ( & mut spi_buffer, 0 ) ;
61
- UxEvent :: Event . request ( ) ;
76
+ UxEvent :: Event . request ( None ) ;
62
77
} else {
63
78
unsafe { os_sched_yield ( BOLOS_UX_OK as u8 ) } ;
64
79
}
@@ -83,7 +98,7 @@ impl UxEvent {
83
98
seph:: seph_recv ( & mut spi_buffer, 0 ) ;
84
99
event = comm. decode_event ( & mut spi_buffer) ;
85
100
86
- UxEvent :: Event . request ( ) ;
101
+ UxEvent :: Event . request ( None ) ;
87
102
88
103
if let Option :: Some ( Event :: Command ( _) ) = event {
89
104
return ( ret, event) ;
0 commit comments