summaryrefslogtreecommitdiff
path: root/src/device/dcd.h
diff options
context:
space:
mode:
authorhathach <[email protected]>2026-04-28 22:08:28 +0700
committerhathach <[email protected]>2026-04-28 22:08:28 +0700
commit7d556a3ae108fcc43515e1ef2c5ea613ec324551 (patch)
tree5e02238c6b8cad4880b2ba2a9fa9983bc79e4a6e /src/device/dcd.h
parentd3107be360b45c4b8dbc223dcc5e5f57b582c5ff (diff)
parent4a4420cd070f4460f6f5ed3c17011d78c325d7c0 (diff)
Merge branch 'master' into fork/kira-live/master
# Conflicts: # src/device/usbd_control.c
Diffstat (limited to 'src/device/dcd.h')
-rw-r--r--src/device/dcd.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/device/dcd.h b/src/device/dcd.h
index 850c37bc2..f861eb258 100644
--- a/src/device/dcd.h
+++ b/src/device/dcd.h
@@ -219,6 +219,11 @@ TU_ATTR_ALWAYS_INLINE static inline void dcd_event_setup_received(uint8_t rhport
event.rhport = rhport;
event.event_id = DCD_EVENT_SETUP_RECEIVED;
(void) memcpy(&event.setup_received, setup, sizeof(tusb_control_request_t));
+ // USB wire format is little-endian. Convert multi-byte fields to host byte order
+ // so the stack always sees correct values regardless of CPU endianness.
+ event.setup_received.wValue = tu_le16toh(event.setup_received.wValue);
+ event.setup_received.wIndex = tu_le16toh(event.setup_received.wIndex);
+ event.setup_received.wLength = tu_le16toh(event.setup_received.wLength);
dcd_event_handler(&event, in_isr);
}