From a98ba0d8c72d94946bf752c85f0654177c5be62b Mon Sep 17 00:00:00 2001 From: XIVN1987 Date: Wed, 19 Feb 2025 11:46:35 +0800 Subject: [PATCH 1/2] machine_usb_device: Add optional data length parameters to submit_xfer. Signed-off-by: XIVN1987 --- extmod/machine_usb_device.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/extmod/machine_usb_device.c b/extmod/machine_usb_device.c index 5c4e84c38d1fe..49c381398617d 100644 --- a/extmod/machine_usb_device.c +++ b/extmod/machine_usb_device.c @@ -87,8 +87,8 @@ static void usb_device_check_active(mp_obj_usb_device_t *usbd) { } } -static mp_obj_t usb_device_submit_xfer(mp_obj_t self, mp_obj_t ep, mp_obj_t buffer) { - mp_obj_usb_device_t *usbd = (mp_obj_usb_device_t *)MP_OBJ_TO_PTR(self); +static mp_obj_t usb_device_submit_xfer(size_t n_args, const mp_obj_t *args) { + mp_obj_usb_device_t *usbd = (mp_obj_usb_device_t *)MP_OBJ_TO_PTR(args[0]); int ep_addr; mp_buffer_info_t buf_info = { 0 }; bool result; @@ -96,8 +96,8 @@ static mp_obj_t usb_device_submit_xfer(mp_obj_t self, mp_obj_t ep, mp_obj_t buff usb_device_check_active(usbd); // Unmarshal arguments, raises TypeError if invalid - ep_addr = mp_obj_get_int(ep); - mp_get_buffer_raise(buffer, &buf_info, ep_addr & TUSB_DIR_IN_MASK ? MP_BUFFER_READ : MP_BUFFER_RW); + ep_addr = mp_obj_get_int(args[1]); + mp_get_buffer_raise(args[2], &buf_info, ep_addr & TUSB_DIR_IN_MASK ? MP_BUFFER_READ : MP_BUFFER_RW); uint8_t ep_num = tu_edpt_number(ep_addr); 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 mp_raise_OSError(MP_EBUSY); } - result = usbd_edpt_xfer(USBD_RHPORT, ep_addr, buf_info.buf, buf_info.len); + uint len = (n_args == 3) ? buf_info.len : mp_obj_get_int(args[3]); + result = usbd_edpt_xfer(USBD_RHPORT, ep_addr, buf_info.buf, len); if (result) { // Store the buffer object until the transfer completes - usbd->xfer_data[ep_num][ep_dir] = buffer; + usbd->xfer_data[ep_num][ep_dir] = args[2]; } return mp_obj_new_bool(result); } -static MP_DEFINE_CONST_FUN_OBJ_3(usb_device_submit_xfer_obj, usb_device_submit_xfer); +static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(usb_device_submit_xfer_obj, 3, 4, usb_device_submit_xfer); static mp_obj_t usb_device_active(size_t n_args, const mp_obj_t *args) { mp_obj_usb_device_t *usbd = (mp_obj_usb_device_t *)MP_OBJ_TO_PTR(args[0]); From e277f579ab6f6950f95288ad86dd629effef718b Mon Sep 17 00:00:00 2001 From: XIVN1987 Date: Wed, 19 Feb 2025 22:11:35 +0800 Subject: [PATCH 2/2] docs/machine: Document USBDevice.submit_xfer optional nbytes parameter. Signed-off-by: XIVN1987 --- docs/library/machine.USBDevice.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/library/machine.USBDevice.rst b/docs/library/machine.USBDevice.rst index 5291679ac1258..555c17fd8028e 100644 --- a/docs/library/machine.USBDevice.rst +++ b/docs/library/machine.USBDevice.rst @@ -223,12 +223,15 @@ Methods and on the host. Returns ``True`` if remote wakeup was enabled and active and the host was woken up. -.. method:: USBDevice.submit_xfer(self, ep, buffer /) +.. method:: USBDevice.submit_xfer(self, ep, buffer, [nbytes] /) Submit a USB transfer on endpoint number ``ep``. ``buffer`` must be an object implementing the buffer interface, with read access for ``IN`` endpoints and write access for ``OUT`` endpoints. + The optional ``nbytes`` parameter can be used to specify the number + of bytes to submit from the buffer. + .. note:: ``ep`` cannot be the control Endpoint number 0. Control transfers are built up through successive executions of ``control_xfer_cb``, see above. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy