From 56364f29036813ec698e4e93abd0f27db2b4e5cf Mon Sep 17 00:00:00 2001 From: sakumisu <1203593632@qq.com> Date: Sun, 22 May 2022 17:09:47 +0800 Subject: [PATCH] alloc class name after the necessary commands are completed --- class/cdc/usbh_cdc_acm.c | 13 ++++++++----- class/hid/usbh_hid.c | 9 +++++---- class/hub/usbh_hub.c | 8 ++++---- class/msc/usbh_msc.c | 34 ++++++++++++++++++++++++++-------- class/mtp/usbh_mtp.c | 9 +++++++-- class/printer/usbh_printer.c | 10 +++++++--- class/wireless/usbh_rndis.c | 6 ++++-- 7 files changed, 61 insertions(+), 28 deletions(-) diff --git a/class/cdc/usbh_cdc_acm.c b/class/cdc/usbh_cdc_acm.c index 47eff5de..71d46699 100644 --- a/class/cdc/usbh_cdc_acm.c +++ b/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; } diff --git a/class/hid/usbh_hid.c b/class/hid/usbh_hid.c index 36cc02a1..68a3f23a 100644 --- a/class/hid/usbh_hid.c +++ b/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; diff --git a/class/hub/usbh_hub.c b/class/hub/usbh_hub.c index 14fd7f0a..5d2af6c8 100644 --- a/class/hub/usbh_hub.c +++ b/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; diff --git a/class/msc/usbh_msc.c b/class/msc/usbh_msc.c index 472cf849..c044e1f0 100644 --- a/class/msc/usbh_msc.c +++ b/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; diff --git a/class/mtp/usbh_mtp.c b/class/mtp/usbh_mtp.c index 9f8ac25e..7257812e 100644 --- a/class/mtp/usbh_mtp.c +++ b/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; } diff --git a/class/printer/usbh_printer.c b/class/printer/usbh_printer.c index b64da8d8..87f783a7 100644 --- a/class/printer/usbh_printer.c +++ b/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; } diff --git a/class/wireless/usbh_rndis.c b/class/wireless/usbh_rndis.c index 6e5d54ac..453e00f3 100644 --- a/class/wireless/usbh_rndis.c +++ b/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;