]> mj.ucw.cz Git - home-hw.git/commitdiff
Experiments with USB
authorMartin Mares <mj@ucw.cz>
Fri, 22 Jun 2018 22:23:32 +0000 (00:23 +0200)
committerMartin Mares <mj@ucw.cz>
Fri, 22 Jun 2018 22:23:32 +0000 (00:23 +0200)
Makefile
Src/usb_device.c
Src/usbd_desc.c
testusb.ioc

index fe19fd2a571097c44526d11e1e3233ca798dfb3c..639ca7f7866d12a4b327eb46b36641d941d0f4bd 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
 ##########################################################################################################################
 ##########################################################################################################################
-# File automatically-generated by tool: [projectgenerator] version: [2.27.0] date: [Fri Jun 22 21:02:51 CEST 2018] 
+# File automatically-generated by tool: [projectgenerator] version: [2.27.0] date: [Fri Jun 22 21:45:40 CEST 2018] 
 ##########################################################################################################################
 
 # ------------------------------------------------
 ##########################################################################################################################
 
 # ------------------------------------------------
index cf6223bb11a168d08bb1a0f763bc219925eeccc6..d9bbefe15b9ccf52fb36ae21cf11a2c6b8525fd1 100644 (file)
@@ -84,6 +84,191 @@ USBD_HandleTypeDef hUsbDeviceFS;
  */
 /* USER CODE BEGIN 1 */
 
  */
 /* USER CODE BEGIN 1 */
 
+static uint8_t xxx_rx_buf[64];
+
+static uint8_t xxx_init(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
+{
+  USBD_LL_OpenEP(pdev, 0x01, USBD_EP_TYPE_BULK, 64);
+  pdev->ep_out[1].maxpacket = 64;
+
+  USBD_LL_OpenEP(pdev, 0x81, USBD_EP_TYPE_BULK, 64);
+  pdev->ep_in[1].maxpacket = 64;
+
+  // USBD_LL_PrepareReceive(pdev, 0x01, xxx_rx_buf, 64);
+  USBD_LL_Transmit(pdev, 0x81, "brum", 4);
+
+  return USBD_OK;
+}
+
+static uint8_t xxx_deinit(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
+{
+  USBD_LL_CloseEP(pdev, 0x01);
+  USBD_LL_CloseEP(pdev, 0x81);
+  return USBD_OK;
+}
+
+static uint8_t xxx_zero;
+
+static uint8_t xxx_setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
+{
+  switch (req->bmRequest & USB_REQ_TYPE_MASK)
+    {
+    case USB_REQ_TYPE_STANDARD:
+      switch (req->bRequest)
+       {
+       case USB_REQ_GET_DESCRIPTOR:
+         {
+           USBD_CtlSendData(pdev, NULL, 0);
+           return USBD_OK;
+         }
+       case USB_REQ_GET_INTERFACE:
+         {
+           USBD_CtlSendData(pdev, &xxx_zero, 1);
+           return USBD_OK;
+         }
+       case USB_REQ_SET_INTERFACE:
+         if ((uint8_t) req->wValue == 0)
+           return USBD_OK;
+         break;
+       case USB_REQ_SET_FEATURE:
+       case USB_REQ_CLEAR_FEATURE:
+         // Handled by USBD, we are only notified
+         return USBD_OK;
+       }
+      break;
+    }
+
+  USBD_CtlError(pdev, req);
+  return USBD_FAIL;
+}
+
+static uint8_t xxx_ep0_rx_ready(USBD_HandleTypeDef *pdev)
+{
+  return USBD_OK;
+}
+
+static uint8_t xxx_ep0_tx_ready(USBD_HandleTypeDef *pdev)
+{
+  return USBD_OK;
+}
+
+static uint8_t xxx_data_in(USBD_HandleTypeDef *pdev, uint8_t epnum)
+{
+  USBD_EndpointTypeDef *pep = &pdev->ep_in[1];
+  return USBD_OK;
+}
+
+static uint8_t xxx_data_out(USBD_HandleTypeDef *pdev, uint8_t epnum)
+{
+  USBD_EndpointTypeDef *pep = &pdev->ep_out[1];
+  unsigned int len = USBD_LL_GetRxDataSize(pdev, 0x01);
+  return USBD_OK;
+}
+
+static uint8_t xxx_sof(USBD_HandleTypeDef *pdev)
+{
+  return USBD_OK;
+}
+
+static uint8_t xxx_iso_in_incomplete(USBD_HandleTypeDef *pdev, uint8_t epnum)
+{
+  return USBD_OK;
+}
+
+static uint8_t xxx_iso_out_incomplete(USBD_HandleTypeDef *pdev, uint8_t epnum)
+{
+  return USBD_OK;
+}
+
+// FIXME: constify
+static uint8_t xxx_cfg_desc[] = {
+  // Configuration descriptor
+  9,                           // bLength
+  USB_DESC_TYPE_CONFIGURATION, // bDescriptorType
+  32,                          // wTotalLength
+  0,
+  0x01,                                // bNumInterfaces
+  0x01,                                // bConfigurationValue
+  USBD_IDX_CONFIG_STR,         // iConfiguration: index of string descriptor
+  0xc0,                                // bmAttributes: bus-powered, supports remote wakeup
+  0x32,                                // Max power: 100 mA
+  // Interface descriptor
+  9,                           // bLength
+  USB_DESC_TYPE_INTERFACE,     // bDescriptorType
+  0x00,                                // bInterfaceNumber
+  0x00,                                // bAlternateSetting
+  0x01,                                // bNumEndpoints
+  0xff,                                // bInterfaceClass: vendor-defined
+  0x00,                                // bInterfaceSubClass
+  0x00,                                // nInterfaceProtocol
+  USBD_IDX_INTERFACE_STR,      // iInterface: index of string descriptor
+  // End-point descriptor
+  7,                           // bLength
+  USB_DESC_TYPE_ENDPOINT,      // bDescriptorType
+  0x01,                                // bEndpointAddress
+  USBD_EP_TYPE_BULK,           // bmAttributes
+  0x40, 0x00,                  // wMaxPacketSize
+  0x00,                                // bInterval: unused
+  // End-point descriptor
+  7,                           // bLength
+  USB_DESC_TYPE_ENDPOINT,      // bDescriptorType
+  0x81,                                // bEndpointAddress
+  USBD_EP_TYPE_BULK,           // bmAttributes
+  0x40, 0x00,                  // wMaxPacketSize
+  0x00,                                // bInterval: unused
+};
+
+static uint8_t *xxx_get_cfg_desc(uint16_t *len)
+{
+  *len = sizeof(xxx_cfg_desc);
+  return xxx_cfg_desc;
+}
+
+// FIXME: constify
+static uint8_t xxx_qual_desc[] = {
+  10,                          // bLength
+  USB_DESC_TYPE_DEVICE_QUALIFIER,      // bDescriptorType
+  0x00, 0x02,                  // bcdUSB
+  0x00,                                // bDeviceClass
+  0x00,                                // bDeviceSubClass
+  0x00,                                // bDeviceProtocol
+  0x40,                                // bMaxPacketSize0
+  0x01,                                // bNumConfigurations
+  0x00,                                // bReserved
+};
+
+static uint8_t *xxx_get_dev_qual_desc(uint16_t *len)
+{
+  *len = sizeof(xxx_qual_desc);
+  return xxx_qual_desc;
+}
+
+static uint8_t *xxx_get_usr_string_desc(USBD_HandleTypeDef *pdev, uint8_t index, uint16_t *len)
+{
+  *len = 0;
+  return NULL;
+}
+
+USBD_ClassTypeDef xxx_class = {
+  xxx_init,
+  xxx_deinit,
+  xxx_setup,
+  xxx_ep0_tx_ready,
+  xxx_ep0_rx_ready,
+  xxx_data_in,
+  xxx_data_out,
+  xxx_sof,
+  xxx_iso_in_incomplete,
+  xxx_iso_out_incomplete,
+  xxx_get_cfg_desc,
+  xxx_get_cfg_desc,
+  xxx_get_cfg_desc,
+  xxx_get_dev_qual_desc,
+#if USBD_SUPPORT_USER_STRING == 1
+  xxx_get_usr_string_desc,
+#endif
+};
+
 /* USER CODE END 1 */
 
 /**
 /* USER CODE END 1 */
 
 /**
@@ -99,9 +284,13 @@ void MX_USB_DEVICE_Init(void)
   /* Init Device Library, add supported class and start the library. */
   USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS);
 
   /* Init Device Library, add supported class and start the library. */
   USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS);
 
+#if 0
   USBD_RegisterClass(&hUsbDeviceFS, &USBD_DFU);
 
   USBD_DFU_RegisterMedia(&hUsbDeviceFS, &USBD_DFU_fops_FS);
   USBD_RegisterClass(&hUsbDeviceFS, &USBD_DFU);
 
   USBD_DFU_RegisterMedia(&hUsbDeviceFS, &USBD_DFU_fops_FS);
+#else
+  USBD_RegisterClass(&hUsbDeviceFS, &xxx_class);
+#endif
 
   USBD_Start(&hUsbDeviceFS);
 
 
   USBD_Start(&hUsbDeviceFS);
 
index a4bd3e28a32661022f7a6967dcad84a3fd2c1a18..0dbceadcc19814559cc61dec80eb3c9de1f9dffb 100644 (file)
   * @{
   */
 
   * @{
   */
 
-#define USBD_VID     1155
+#define USBD_VID     0x4242
 #define USBD_LANGID_STRING     1033
 #define USBD_MANUFACTURER_STRING     "UCW"
 #define USBD_LANGID_STRING     1033
 #define USBD_MANUFACTURER_STRING     "UCW"
-#define USBD_PID_FS     57105
+#define USBD_PID_FS     0x0001
 #define USBD_PRODUCT_STRING_FS     "Mysterious Gadget"
 #define USBD_SERIALNUMBER_STRING_FS     "00000000002A"
 #define USBD_PRODUCT_STRING_FS     "Mysterious Gadget"
 #define USBD_SERIALNUMBER_STRING_FS     "00000000002A"
-#define USBD_CONFIGURATION_STRING_FS     "DFU Config"
-#define USBD_INTERFACE_STRING_FS     "DFU Interface"
+#define USBD_CONFIGURATION_STRING_FS     "Default Config"
+#define USBD_INTERFACE_STRING_FS     "Default Interface"
 
 /* USER CODE BEGIN PRIVATE_DEFINES */
 
 
 /* USER CODE BEGIN PRIVATE_DEFINES */
 
index e3d878a185f907f544b70654fda90368bc2cf0cf..55317193805196ac73cbf09ff12e254845d7d846 100644 (file)
@@ -144,10 +144,14 @@ RCC.VCOOutput2Freq_Value=8000000
 USB.IPParameters=ep0_mps
 USB.ep0_mps=DEP0CTL_MPS_64
 USB_DEVICE.CLASS_NAME_FS=DFU
 USB.IPParameters=ep0_mps
 USB.ep0_mps=DEP0CTL_MPS_64
 USB_DEVICE.CLASS_NAME_FS=DFU
-USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS,MANUFACTURER_STRING,PRODUCT_STRING_DFU_FS,SERIALNUMBER_STRING_DFU_FS
+USB_DEVICE.CONFIGURATION_STRING_DFU_FS=Default Config
+USB_DEVICE.INTERFACE_STRING_DFU_FS=Default Interface
+USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS,MANUFACTURER_STRING,PRODUCT_STRING_DFU_FS,SERIALNUMBER_STRING_DFU_FS,VID,PID_DFU_FS,CONFIGURATION_STRING_DFU_FS,INTERFACE_STRING_DFU_FS
 USB_DEVICE.MANUFACTURER_STRING=UCW
 USB_DEVICE.MANUFACTURER_STRING=UCW
+USB_DEVICE.PID_DFU_FS=0x0001
 USB_DEVICE.PRODUCT_STRING_DFU_FS=Mysterious Gadget
 USB_DEVICE.SERIALNUMBER_STRING_DFU_FS=00000000002A
 USB_DEVICE.PRODUCT_STRING_DFU_FS=Mysterious Gadget
 USB_DEVICE.SERIALNUMBER_STRING_DFU_FS=00000000002A
+USB_DEVICE.VID=0x4242
 USB_DEVICE.VirtualMode=Dfu
 USB_DEVICE.VirtualModeFS=Dfu_FS
 VP_SYS_VS_Systick.Mode=SysTick
 USB_DEVICE.VirtualMode=Dfu
 USB_DEVICE.VirtualModeFS=Dfu_FS
 VP_SYS_VS_Systick.Mode=SysTick