From a57090ead973037c0de38aa67b55283e8dd776cb Mon Sep 17 00:00:00 2001 From: Dien-Nhung Nguyen-Phu Date: Thu, 11 Jul 2024 20:53:54 +0700 Subject: usb: enable debug log over uart --- src/usb/debug.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/usb/debug.c (limited to 'src/usb/debug.c') diff --git a/src/usb/debug.c b/src/usb/debug.c new file mode 100644 index 0000000..0c9f443 --- /dev/null +++ b/src/usb/debug.c @@ -0,0 +1,82 @@ +#include "CH58x_common.h" + +void print_setuppk(USB_SETUP_REQ *request) +{ + PRINT("Setup request:\n"); + + char *dir[] = {"OUT", "IN"}; + char *type[] = {"Standard", "Class", "Vendor", "Reserved Type"}; + char *recipient[] = { + "Device", "Interface", "Endpoint", "Other","Reserved Recipient" + }; + char *bRequest[] = { + "GET_STATUS", + "CLEAR_FEATURE", + "Reserved", + "SET_FEATURE", + "Reserved", + "SET_ADDRESS", + "GET_DESCRIPTOR", + "SET_DESCRIPTOR", + "GET_CONFIGURATION", + "SET_CONFIGURATION", + "GET_INTERFACE", + "SET_INTERFACE", + "SYNCH_FRAME", + }; + + uint8_t t = request->bRequestType; + uint8_t req = request->bRequest; + uint8_t type_val = (t & USB_REQ_TYP_MASK) >> 5; + uint8_t recip_val = t & USB_REQ_RECIP_MASK; + if (recip_val > 4) + recip_val = 4; + + PRINT("\t- bRequestType: 0x%02x (%s|%s|%s)\n", t, dir[t>>7], + type[type_val], + recipient[recip_val]); + + PRINT("\t- bRequest: 0x%02x (%s)\n", req, req > 12 ? + "N/A" : bRequest[req]); + PRINT("\t- wValue: 0x%04x\n", request->wValue); + + PRINT("\t- wIndex%s: 0x%04x\n", + recip_val == USB_REQ_RECIP_INTERF ? " (wInterfaceNumber)" : "", + request->wIndex); + + PRINT("\t- wLength: 0x%04x\n", request->wLength); +} + +void print_status_reg() +{ + char *token_type[] = { + "OUT", "SOF","IN", "SETUP", + }; + uint8_t reg = R8_USB_INT_ST; + uint8_t is_setup = reg & RB_UIS_SETUP_ACT; + uint8_t toggle = reg & RB_UIS_TOG_OK; + uint8_t token = (reg & MASK_UIS_TOKEN) >> 4; + uint8_t ep_num = reg & MASK_UIS_ENDP; + PRINT("usb: Status reg: 0x%02x (%s|%s|%s|EP:%d)\n", reg, + is_setup ? "SETUP??" : "0", + toggle ? "TOGGLE OK" : "0", token_type[token], ep_num); +} + +void print_intflag_reg() +{ + uint8_t reg = R8_USB_INT_FG; + uint8_t is_nak = reg & RB_U_IS_NAK; + uint8_t tog_ok = reg & RB_U_TOG_OK; + uint8_t sie = reg & RB_U_SIE_FREE; + uint8_t overflow = reg & RB_UIF_FIFO_OV; + uint8_t suspend = reg & RB_UIF_SUSPEND; + uint8_t xfer_complete = reg & RB_UIF_TRANSFER; + uint8_t bus_reset = reg & RB_UIF_BUS_RST; + PRINT("usb: Interrupt reg: 0x%02x (%s|%s|%s|%s|%s|%s)\n", reg, + is_nak ? "NAK received" : "0", + tog_ok ? "Toggle ok" : "0", + sie ? "SIE" : "0", + overflow ? "FIFO overflow" : "0", + suspend ? "Suspend" : "0", + xfer_complete ? "Xfer completed" : "0"); +} \ No newline at end of file -- cgit v1.2.3