From: Martin Mares Date: Sun, 24 Jun 2018 13:34:03 +0000 (+0200) Subject: More USB debugging X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=4628d046ad479a2b7310bc598b663984742b9a22;hp=2d024d38ea3094cf50ef92e00589fb56a066ea9a;p=home-hw.git More USB debugging --- diff --git a/Inc/util.h b/Inc/util.h index 07a677b..388a1bd 100644 --- a/Inc/util.h +++ b/Inc/util.h @@ -12,7 +12,7 @@ typedef int32_t s32; // debug.c -#define DEBUG_SEMIHOSTING +#undef DEBUG_SEMIHOSTING void debug_printf(const char *fmt, ...); void debug_puts(const char *s); diff --git a/Src/usb.c b/Src/usb.c index ce0bddc..b7f7313 100644 --- a/Src/usb.c +++ b/Src/usb.c @@ -52,7 +52,7 @@ static const byte desc_config[] = { USB_DESC_TYPE_INTERFACE, // bDescriptorType 0x00, // bInterfaceNumber 0x00, // bAlternateSetting - 0x01, // bNumEndpoints + 0x02, // bNumEndpoints 0xff, // bInterfaceClass: vendor-defined 0x00, // bInterfaceSubClass 0x00, // nInterfaceProtocol @@ -74,7 +74,7 @@ static const byte desc_config[] = { }; static const char * const desc_string[] = { - "", // DESC_STR_NONE + NULL, // DESC_STR_NONE "United Computer Wizards", // DESC_STR_MANUFACTURER "Mysterious Gadget", // DESC_STR_PRODUCT "00000042", // DESC_STR_SERIAL @@ -82,6 +82,12 @@ static const char * const desc_string[] = { "Default Interface", // DESC_STR_INTERFACE }; +static const byte desc_languages[] = { + 4, // bLength + USB_DESC_TYPE_STRING, // bDescriptorType + DESC_U16(1033), // English +}; + void usb_init(struct usb *usb, PCD_HandleTypeDef *hpcd) { memset(usb, 0, sizeof(*usb)); @@ -117,13 +123,11 @@ static void usb_ctl_send_status(struct usb *usb) usb_ep_transmit(usb, 0x00, NULL, 0); } -#if 0 // FIXME static void usb_ctl_recv_status(struct usb *usb) { usb->ep0_state = USB_EP0_STATUS_OUT; usb_ep_receive(usb, 0x00, NULL, 0); } -#endif static void usb_ctl_send_data(struct usb *usb, const byte *data, uint len) { @@ -275,6 +279,8 @@ static void dev_get_descriptor(struct usb *usb, struct setup_request *setup) case USB_DESC_TYPE_CONFIGURATION: return dev_desc_send(usb, setup, desc_config, sizeof(desc_config)); case USB_DESC_TYPE_STRING: + if (!desc_index) + return dev_desc_send(usb, setup, desc_languages, sizeof(desc_languages)); if (desc_index < sizeof(desc_string) / sizeof(desc_string[0])) return dev_desc_send_string(usb, setup, desc_string[desc_index]); break; @@ -524,6 +530,7 @@ void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) if (!epnum) { // HAL/LL handle EP0 transfers in a completely different way, we have to do many things ourselves + usb_debug("Ep0 OUT: state=%u rem=%u total=%u\n", usb->ep0_state, usb->ep0_remaining_length, usb->ep0_total_length); if (usb->ep0_state != USB_EP0_DATA_OUT) return; if (usb->ep0_remaining_length > ep->maxpacket) @@ -557,6 +564,7 @@ void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) if (!epnum) { // HAL/LL handle EP0 transfers in a completely different way, we have to do many things ourselves + usb_debug("Ep0 IN: state=%u rem=%u total=%u want=%u\n", usb->ep0_state, usb->ep0_remaining_length, usb->ep0_total_length, usb->ep0_setup_data_length); if (usb->ep0_state != USB_EP0_DATA_IN) return; if (usb->ep0_remaining_length > ep->maxpacket) @@ -583,6 +591,7 @@ void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum) // FIXME: Custom data callback // All data have been sent } + usb_ctl_recv_status(usb); } } else