@@ -67,7 +67,7 @@ impl From<u8> for UsbEp {
67
67
/// FFI bindings to USBD functions inlined here for clarity
68
68
/// and also because some of the generated ones are incorrectly
69
69
/// assuming mutable pointers when they are not
70
- #[ repr( C ) ]
70
+ /* #[repr(C)]
71
71
#[derive(Copy, Clone)]
72
72
pub struct apdu_buffer_s {
73
73
pub buf: *mut u8,
@@ -104,25 +104,23 @@ extern "C" {
104
104
pub fn USBD_LL_Suspend(pdev: *mut USBD_HandleTypeDef) -> USBD_StatusTypeDef;
105
105
pub fn USBD_LL_Resume(pdev: *mut USBD_HandleTypeDef) -> USBD_StatusTypeDef;
106
106
pub fn USBD_LL_SOF(pdev: *mut USBD_HandleTypeDef) -> USBD_StatusTypeDef;
107
- }
107
+ }*/
108
108
109
109
/// Below is a straightforward translation of the corresponding functions
110
110
/// in the C SDK, they could be improved
111
111
pub fn handle_usb_event ( event : u8 ) {
112
112
match Events :: from ( event) {
113
- Events :: USBEventReset => {
114
- unsafe {
115
- USBD_LL_SetSpeed ( & mut USBD_Device , 1 /*USBD_SPEED_FULL*/ ) ;
116
- USBD_LL_Reset ( & mut USBD_Device ) ;
117
-
118
- if G_io_app . apdu_media != IO_APDU_MEDIA_NONE {
119
- return ;
120
- }
113
+ Events :: USBEventReset => unsafe {
114
+ USBD_LL_SetSpeed ( & mut USBD_Device , USBD_SPEED_FULL ) ;
115
+ USBD_LL_Reset ( & mut USBD_Device ) ;
121
116
122
- G_io_app . usb_ep_xfer_len = core :: mem :: zeroed ( ) ;
123
- G_io_app . usb_ep_timeouts = core :: mem :: zeroed ( ) ;
117
+ if G_io_app . apdu_media != IO_APDU_MEDIA_NONE {
118
+ return ;
124
119
}
125
- }
120
+
121
+ G_io_app . usb_ep_xfer_len = core:: mem:: zeroed ( ) ;
122
+ G_io_app . usb_ep_timeouts = core:: mem:: zeroed ( ) ;
123
+ } ,
126
124
Events :: USBEventSOF => unsafe {
127
125
USBD_LL_SOF ( & mut USBD_Device ) ;
128
126
} ,
@@ -136,29 +134,29 @@ pub fn handle_usb_event(event: u8) {
136
134
}
137
135
}
138
136
139
- pub fn handle_usb_ep_xfer_event ( apdu_buffer : & mut [ u8 ] , buffer : & [ u8 ] ) {
137
+ pub fn handle_usb_ep_xfer_event ( apdu_buffer : & mut [ u8 ] , buffer : & mut [ u8 ] ) {
140
138
let endpoint = buffer[ 3 ] & 0x7f ;
141
139
match UsbEp :: from ( buffer[ 4 ] ) {
142
140
UsbEp :: USBEpXFERSetup => unsafe {
143
- USBD_LL_SetupStage ( & mut USBD_Device , & buffer[ 6 ] ) ;
141
+ USBD_LL_SetupStage ( & mut USBD_Device , & mut buffer[ 6 ] ) ;
144
142
} ,
145
143
UsbEp :: USBEpXFERIn => {
146
144
if ( endpoint as u32 ) < IO_USB_MAX_ENDPOINTS {
147
145
unsafe {
148
146
G_io_app . usb_ep_timeouts [ endpoint as usize ] . timeout = 0 ;
149
- USBD_LL_DataInStage ( & mut USBD_Device , endpoint, & buffer[ 6 ] ) ;
147
+ USBD_LL_DataInStage ( & mut USBD_Device , endpoint, & mut buffer[ 6 ] ) ;
150
148
}
151
149
}
152
150
}
153
151
UsbEp :: USBEpXFEROut => {
154
152
if ( endpoint as u32 ) < IO_USB_MAX_ENDPOINTS {
155
153
unsafe {
156
154
G_io_app . usb_ep_xfer_len [ endpoint as usize ] = buffer[ 5 ] ;
157
- let mut apdu_buf = ApduBufferT {
155
+ let mut apdu_buf = apdu_buffer_s {
158
156
buf : apdu_buffer. as_mut_ptr ( ) ,
159
157
len : 260 ,
160
158
} ;
161
- USBD_LL_DataOutStage ( & mut USBD_Device , endpoint, & buffer[ 6 ] , & mut apdu_buf) ;
159
+ USBD_LL_DataOutStage ( & mut USBD_Device , endpoint, & mut buffer[ 6 ] , & mut apdu_buf) ;
162
160
}
163
161
}
164
162
}
@@ -183,7 +181,7 @@ pub fn handle_capdu_event(apdu_buffer: &mut [u8], buffer: &[u8]) {
183
181
}
184
182
}
185
183
186
- pub fn handle_event ( apdu_buffer : & mut [ u8 ] , spi_buffer : & [ u8 ] ) {
184
+ pub fn handle_event ( apdu_buffer : & mut [ u8 ] , spi_buffer : & mut [ u8 ] ) {
187
185
let len = u16:: from_be_bytes ( [ spi_buffer[ 1 ] , spi_buffer[ 2 ] ] ) ;
188
186
match Events :: from ( spi_buffer[ 0 ] ) {
189
187
Events :: USBEvent => {
0 commit comments