Просмотр исходного кода

alloc class name after the necessary commands are completed

sakumisu 3 лет назад
Родитель
Сommit
56364f2903

+ 8 - 5
class/cdc/usbh_cdc_acm.c

@@ -147,13 +147,11 @@ static int usbh_cdc_acm_connect(struct usbh_hubport *hport, uint8_t intf)
     }
 
     memset(cdc_acm_class, 0, sizeof(struct usbh_cdc_acm));
+    usbh_cdc_acm_devno_alloc(cdc_acm_class);
     cdc_acm_class->hport = hport;
     cdc_acm_class->ctrl_intf = intf;
     cdc_acm_class->data_intf = intf + 1;
 
-    usbh_cdc_acm_devno_alloc(cdc_acm_class);
-    snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, cdc_acm_class->minor);
-
     hport->config.intf[intf].priv = cdc_acm_class;
     hport->config.intf[intf + 1].priv = NULL;
 
@@ -169,11 +167,13 @@ static int usbh_cdc_acm_connect(struct usbh_hubport *hport, uint8_t intf)
     cdc_acm_class->linecoding->bCharFormat = 0;
     ret = usbh_cdc_acm_set_line_coding(cdc_acm_class, cdc_acm_class->linecoding);
     if (ret < 0) {
+        USB_LOG_ERR("Fail to set linecoding\r\n");
         return ret;
     }
 
     ret = usbh_cdc_acm_set_line_state(cdc_acm_class, true, true);
     if (ret < 0) {
+        USB_LOG_ERR("Fail to set line state\r\n");
         return ret;
     }
 
@@ -202,6 +202,8 @@ static int usbh_cdc_acm_connect(struct usbh_hubport *hport, uint8_t intf)
         }
     }
 
+    snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, cdc_acm_class->minor);
+
     USB_LOG_INFO("Register CDC ACM Class:%s\r\n", hport->config.intf[intf].devname);
 
     extern int cdc_acm_test();
@@ -237,9 +239,10 @@ static int usbh_cdc_acm_disconnect(struct usbh_hubport *hport, uint8_t intf)
 
         usb_free(cdc_acm_class);
 
-        USB_LOG_INFO("Unregister CDC ACM Class:%s\r\n", hport->config.intf[intf].devname);
-        memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
+        if (hport->config.intf[intf].devname[0] != '\0')
+            USB_LOG_INFO("Unregister CDC ACM Class:%s\r\n", hport->config.intf[intf].devname);
 
+        memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
         hport->config.intf[intf].priv = NULL;
         hport->config.intf[intf + 1].priv = NULL;
     }

+ 5 - 4
class/hid/usbh_hid.c

@@ -139,11 +139,9 @@ int usbh_hid_connect(struct usbh_hubport *hport, uint8_t intf)
     }
 
     memset(hid_class, 0, sizeof(struct usbh_hid));
+    usbh_hid_devno_alloc(hid_class);
     hid_class->hport = hport;
     hid_class->intf = intf;
-    
-    usbh_hid_devno_alloc(hid_class);
-    snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, hid_class->minor);
 
     hport->config.intf[intf].priv = hid_class;
 
@@ -174,6 +172,8 @@ int usbh_hid_connect(struct usbh_hubport *hport, uint8_t intf)
         }
     }
 
+    snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, hid_class->minor);
+
     USB_LOG_INFO("Register HID Class:%s\r\n", hport->config.intf[intf].devname);
 
     extern int hid_test();
@@ -206,7 +206,8 @@ int usbh_hid_disconnect(struct usbh_hubport *hport, uint8_t intf)
 
         usb_free(hid_class);
 
-        USB_LOG_INFO("Unregister HID Class:%s\r\n", hport->config.intf[intf].devname);
+        if (hport->config.intf[intf].devname[0] != '\0')
+            USB_LOG_INFO("Unregister HID Class:%s\r\n", hport->config.intf[intf].devname);
 
         memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
         hport->config.intf[intf].priv = NULL;

+ 4 - 4
class/hub/usbh_hub.c

@@ -204,6 +204,7 @@ static int usbh_hub_connect(struct usbh_hubport *hport, uint8_t intf)
     }
 
     memset(hub_class, 0, sizeof(struct usbh_hub));
+    usbh_hub_devno_alloc(hub_class);
     hub_class->dev_addr = hport->dev_addr;
     hub_class->parent = hport;
 
@@ -213,9 +214,6 @@ static int usbh_hub_connect(struct usbh_hubport *hport, uint8_t intf)
         return -ENOMEM;
     }
 
-    usbh_hub_devno_alloc(hub_class);
-    snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, hub_class->index);
-
     hport->config.intf[intf].priv = hub_class;
 
     uint8_t *hub_desc_buffer = usb_iomalloc(32);
@@ -267,6 +265,7 @@ static int usbh_hub_connect(struct usbh_hubport *hport, uint8_t intf)
         }
     }
 
+    snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, hub_class->index);
     USB_LOG_INFO("Register HUB Class:%s\r\n", hport->config.intf[intf].devname);
 
     ret = usbh_ep_intr_async_transfer(hub_class->intin, hub_class->int_buffer, USBH_HUB_INTIN_BUFSIZE, usbh_external_hub_callback, hub_class);
@@ -309,7 +308,8 @@ static int usbh_hub_disconnect(struct usbh_hubport *hport, uint8_t intf)
         usbh_hub_unregister(hub_class);
         usb_free(hub_class);
 
-        USB_LOG_INFO("Unregister HUB Class:%s\r\n", hport->config.intf[intf].devname);
+        if (hport->config.intf[intf].devname[0] != '\0')
+            USB_LOG_INFO("Unregister HUB Class:%s\r\n", hport->config.intf[intf].devname);
 
         memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
         hport->config.intf[intf].priv = NULL;

+ 26 - 8
class/msc/usbh_msc.c

@@ -332,11 +332,9 @@ static int usbh_msc_connect(struct usbh_hubport *hport, uint8_t intf)
     }
 
     memset(msc_class, 0, sizeof(struct usbh_msc));
+    usbh_msc_devno_alloc(msc_class);
     msc_class->hport = hport;
     msc_class->intf = intf;
-    
-    usbh_msc_devno_alloc(msc_class);
-    snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, msc_class->sdchar);
 
     hport->config.intf[intf].priv = msc_class;
 
@@ -368,14 +366,33 @@ static int usbh_msc_connect(struct usbh_hubport *hport, uint8_t intf)
         }
     }
 
-    USB_LOG_INFO("Register MSC Class:%s\r\n", hport->config.intf[intf].devname);
-
     ret = usbh_msc_scsi_testunitready(msc_class);
+    if (ret < 0) {
+        USB_LOG_ERR("Fail to scsi_testunitready\r\n");
+        return ret;
+    }
     ret = usbh_msc_scsi_inquiry(msc_class);
+    if (ret < 0) {
+        USB_LOG_ERR("Fail to scsi_inquiry\r\n");
+        return ret;
+    }
     ret = usbh_msc_scsi_readcapacity10(msc_class);
+    if (ret < 0) {
+        USB_LOG_ERR("Fail to scsi_readcapacity10\r\n");
+        return ret;
+    }
 
-    USB_LOG_INFO("Capacity info:\r\n");
-    USB_LOG_INFO("Block num:%d,block size:%d\r\n", (unsigned int)msc_class->blocknum, (unsigned int)msc_class->blocksize);
+    if (msc_class->blocksize) {
+        USB_LOG_INFO("Capacity info:\r\n");
+        USB_LOG_INFO("Block num:%d,block size:%d\r\n", (unsigned int)msc_class->blocknum, (unsigned int)msc_class->blocksize);
+    } else {
+        USB_LOG_ERR("Fail to read capacity10\r\n");
+        return -ERANGE;
+    }
+
+    snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, msc_class->sdchar);
+
+    USB_LOG_INFO("Register MSC Class:%s\r\n", hport->config.intf[intf].devname);
 
     extern int msc_test();
     msc_test();
@@ -410,7 +427,8 @@ static int usbh_msc_disconnect(struct usbh_hubport *hport, uint8_t intf)
 
         usb_free(msc_class);
 
-        USB_LOG_INFO("Unregister MSC Class:%s\r\n", hport->config.intf[intf].devname);
+        if (hport->config.intf[intf].devname[0] != '\0')
+            USB_LOG_INFO("Unregister MSC Class:%s\r\n", hport->config.intf[intf].devname);
 
         memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
         hport->config.intf[intf].priv = NULL;

+ 7 - 2
class/mtp/usbh_mtp.c

@@ -72,6 +72,10 @@ static int usbh_mtp_connect(struct usbh_hubport *hport, uint8_t intf)
         }
     }
 
+    strncpy(hport->config.intf[intf].devname, DEV_FORMAT, CONFIG_USBHOST_DEV_NAMELEN);
+
+    USB_LOG_INFO("Register MTP Class:%s\r\n", hport->config.intf[intf].devname);
+
     return ret;
 }
 
@@ -98,9 +102,10 @@ static int usbh_mtp_disconnect(struct usbh_hubport *hport, uint8_t intf)
 
         usb_free(mtp_class);
 
-        USB_LOG_INFO("Unregister MTP Class:%s\r\n", hport->config.intf[intf].devname);
-        memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
+        if (hport->config.intf[intf].devname[0] != '\0')
+            USB_LOG_INFO("Unregister MTP Class:%s\r\n", hport->config.intf[intf].devname);
 
+        memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
         hport->config.intf[intf].priv = NULL;
         hport->config.intf[intf + 1].priv = NULL;
     }

+ 7 - 3
class/printer/usbh_printer.c

@@ -85,7 +85,6 @@ static int usbh_printer_connect(struct usbh_hubport *hport, uint8_t intf)
     printer_class->intf = intf;
 
     hport->config.intf[intf].priv = printer_class;
-    strncpy(hport->config.intf[intf].devname, DEV_FORMAT, CONFIG_USBHOST_DEV_NAMELEN);
 
     for (uint8_t i = 0; i < hport->config.intf[intf + 1].intf_desc.bNumEndpoints; i++) {
         ep_desc = &hport->config.intf[intf + 1].ep[i].ep_desc;
@@ -104,6 +103,10 @@ static int usbh_printer_connect(struct usbh_hubport *hport, uint8_t intf)
 
     // uint8_t *device_id = usb_iomalloc(256);
     // ret = usbh_printer_get_device_id(printer_class, device_id);
+    strncpy(hport->config.intf[intf].devname, DEV_FORMAT, CONFIG_USBHOST_DEV_NAMELEN);
+
+    USB_LOG_INFO("Register Printer Class:%s\r\n", hport->config.intf[intf].devname);
+
     return ret;
 }
 
@@ -130,9 +133,10 @@ static int usbh_printer_disconnect(struct usbh_hubport *hport, uint8_t intf)
 
         usb_free(printer_class);
 
-        USB_LOG_INFO("Unregister Printer Class:%s\r\n", hport->config.intf[intf].devname);
-        memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
+        if (hport->config.intf[intf].devname[0] != '\0')
+            USB_LOG_INFO("Unregister Printer Class:%s\r\n", hport->config.intf[intf].devname);
 
+        memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
         hport->config.intf[intf].priv = NULL;
     }
 

+ 4 - 2
class/wireless/usbh_rndis.c

@@ -221,7 +221,6 @@ static int usbh_rndis_connect(struct usbh_hubport *hport, uint8_t intf)
 
     hport->config.intf[intf].priv = rndis_class;
     hport->config.intf[intf + 1].priv = NULL;
-    strncpy(hport->config.intf[intf].devname, DEV_FORMAT, CONFIG_USBHOST_DEV_NAMELEN);
 
 #ifdef CONFIG_USBHOST_RNDIS_NOTIFY
     ep_desc = &hport->config.intf[intf].ep[0].ep_desc;
@@ -333,6 +332,8 @@ static int usbh_rndis_connect(struct usbh_hubport *hport, uint8_t intf)
     }
     USB_LOG_INFO("rndis set OID_802_3_MULTICAST_LIST success\r\n");
 
+    strncpy(hport->config.intf[intf].devname, DEV_FORMAT, CONFIG_USBHOST_DEV_NAMELEN);
+
     USB_LOG_INFO("Register RNDIS Class:%s\r\n", hport->config.intf[intf].devname);
     return ret;
 query_errorout:
@@ -364,7 +365,8 @@ static int usbh_rndis_disconnect(struct usbh_hubport *hport, uint8_t intf)
 
         usb_free(rndis_class);
 
-        USB_LOG_INFO("Unregister RNDIS Class:%s\r\n", hport->config.intf[intf].devname);
+        if (hport->config.intf[intf].devname[0] != '\0')
+            USB_LOG_INFO("Unregister RNDIS Class:%s\r\n", hport->config.intf[intf].devname);
         memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
 
         hport->config.intf[intf].priv = NULL;