@@ -89,18 +89,20 @@ STATIC mp_obj_t usbd_make_new(const mp_obj_type_t *type, size_t n_args, size_t n
89
89
}
90
90
91
91
STATIC mp_obj_t usbd_submit_xfer (mp_obj_t self , mp_obj_t ep , mp_obj_t buffer ) {
92
- bool result ;
92
+ int epnum = mp_obj_get_int ( ep ) ;
93
93
mp_obj_usbd_t * usbd = (mp_obj_usbd_t * )MP_OBJ_TO_PTR (self );
94
94
mp_buffer_info_t buf_info = { 0 };
95
- if (!usbd_edpt_claim (USBD_RHPORT , mp_obj_get_int (ep ))) {
95
+ bool result ;
96
+
97
+ if (!usbd_edpt_claim (USBD_RHPORT , epnum )) {
96
98
assert (0 ); // TODO: raise a runtime error here or something
97
99
}
98
100
99
101
// TODO: arg checking
100
102
101
- mp_get_buffer_raise (buffer , & buf_info , MP_BUFFER_READ );
103
+ mp_get_buffer_raise (buffer , & buf_info , epnum & TUSB_DIR_IN_MASK ? MP_BUFFER_READ : MP_BUFFER_RW );
102
104
103
- result = usbd_edpt_xfer (USBD_RHPORT , mp_obj_get_int ( ep ) , buf_info .buf , buf_info .len );
105
+ result = usbd_edpt_xfer (USBD_RHPORT , epnum , buf_info .buf , buf_info .len );
104
106
105
107
if (result ) {
106
108
// Store the buffer object until the transfer completes
@@ -137,7 +139,8 @@ STATIC mp_obj_t usbd_control_xfer(mp_obj_t self, mp_obj_t request_obj, mp_obj_t
137
139
138
140
// TODO: What happens if we raise exceptions in TinyUSB callbacks?
139
141
if (buffer != mp_const_none ) {
140
- mp_get_buffer_raise (buffer , & buf_info , MP_BUFFER_READ );
142
+ mp_get_buffer_raise (buffer , & buf_info ,
143
+ request .bmRequestType_bit .direction == TUSB_DIR_IN ? MP_BUFFER_READ : MP_BUFFER_RW );
141
144
} else {
142
145
buf_info .buf = NULL ;
143
146
buf_info .len = 0 ;
0 commit comments