Skip to content

Commit 512d8fa

Browse files
committed
extmod/machine_usb_device: Add optional data length parameters to usb_device_submit_xfer()
1 parent 8987b39 commit 512d8fa

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

extmod/machine_usb_device.c

+8-7
Original file line numberDiff line numberDiff line change
@@ -87,17 +87,17 @@ static void usb_device_check_active(mp_obj_usb_device_t *usbd) {
8787
}
8888
}
8989

90-
static mp_obj_t usb_device_submit_xfer(mp_obj_t self, mp_obj_t ep, mp_obj_t buffer) {
91-
mp_obj_usb_device_t *usbd = (mp_obj_usb_device_t *)MP_OBJ_TO_PTR(self);
90+
static mp_obj_t usb_device_submit_xfer(size_t n_args, const mp_obj_t *args) {
91+
mp_obj_usb_device_t *usbd = (mp_obj_usb_device_t *)MP_OBJ_TO_PTR(args[0]);
9292
int ep_addr;
9393
mp_buffer_info_t buf_info = { 0 };
9494
bool result;
9595

9696
usb_device_check_active(usbd);
9797

9898
// Unmarshal arguments, raises TypeError if invalid
99-
ep_addr = mp_obj_get_int(ep);
100-
mp_get_buffer_raise(buffer, &buf_info, ep_addr & TUSB_DIR_IN_MASK ? MP_BUFFER_READ : MP_BUFFER_RW);
99+
ep_addr = mp_obj_get_int(args[1]);
100+
mp_get_buffer_raise(args[2], &buf_info, ep_addr & TUSB_DIR_IN_MASK ? MP_BUFFER_READ : MP_BUFFER_RW);
101101

102102
uint8_t ep_num = tu_edpt_number(ep_addr);
103103
uint8_t ep_dir = tu_edpt_dir(ep_addr);
@@ -115,16 +115,17 @@ static mp_obj_t usb_device_submit_xfer(mp_obj_t self, mp_obj_t ep, mp_obj_t buff
115115
mp_raise_OSError(MP_EBUSY);
116116
}
117117

118-
result = usbd_edpt_xfer(USBD_RHPORT, ep_addr, buf_info.buf, buf_info.len);
118+
uint len = (n_args == 3) ? buf_info.len : mp_obj_get_int(args[3]);
119+
result = usbd_edpt_xfer(USBD_RHPORT, ep_addr, buf_info.buf, len);
119120

120121
if (result) {
121122
// Store the buffer object until the transfer completes
122-
usbd->xfer_data[ep_num][ep_dir] = buffer;
123+
usbd->xfer_data[ep_num][ep_dir] = args[2];
123124
}
124125

125126
return mp_obj_new_bool(result);
126127
}
127-
static MP_DEFINE_CONST_FUN_OBJ_3(usb_device_submit_xfer_obj, usb_device_submit_xfer);
128+
static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(usb_device_submit_xfer_obj, 3, 4, usb_device_submit_xfer);
128129

129130
static mp_obj_t usb_device_active(size_t n_args, const mp_obj_t *args) {
130131
mp_obj_usb_device_t *usbd = (mp_obj_usb_device_t *)MP_OBJ_TO_PTR(args[0]);

0 commit comments

Comments
 (0)