alloc class name after the necessary commands are completed

This commit is contained in:
sakumisu
2022-05-22 17:09:47 +08:00
parent 16262f0575
commit 56364f2903
7 changed files with 61 additions and 28 deletions

View File

@@ -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)); 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->hport = hport;
cdc_acm_class->ctrl_intf = intf; cdc_acm_class->ctrl_intf = intf;
cdc_acm_class->data_intf = intf + 1; 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].priv = cdc_acm_class;
hport->config.intf[intf + 1].priv = NULL; 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; cdc_acm_class->linecoding->bCharFormat = 0;
ret = usbh_cdc_acm_set_line_coding(cdc_acm_class, cdc_acm_class->linecoding); ret = usbh_cdc_acm_set_line_coding(cdc_acm_class, cdc_acm_class->linecoding);
if (ret < 0) { if (ret < 0) {
USB_LOG_ERR("Fail to set linecoding\r\n");
return ret; return ret;
} }
ret = usbh_cdc_acm_set_line_state(cdc_acm_class, true, true); ret = usbh_cdc_acm_set_line_state(cdc_acm_class, true, true);
if (ret < 0) { if (ret < 0) {
USB_LOG_ERR("Fail to set line state\r\n");
return ret; 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); USB_LOG_INFO("Register CDC ACM Class:%s\r\n", hport->config.intf[intf].devname);
extern int cdc_acm_test(); 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_free(cdc_acm_class);
USB_LOG_INFO("Unregister CDC ACM Class:%s\r\n", hport->config.intf[intf].devname); if (hport->config.intf[intf].devname[0] != '\0')
memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN); 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].priv = NULL;
hport->config.intf[intf + 1].priv = NULL; hport->config.intf[intf + 1].priv = NULL;
} }

View File

@@ -139,11 +139,9 @@ int usbh_hid_connect(struct usbh_hubport *hport, uint8_t intf)
} }
memset(hid_class, 0, sizeof(struct usbh_hid)); memset(hid_class, 0, sizeof(struct usbh_hid));
usbh_hid_devno_alloc(hid_class);
hid_class->hport = hport; hid_class->hport = hport;
hid_class->intf = intf; 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; 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); USB_LOG_INFO("Register HID Class:%s\r\n", hport->config.intf[intf].devname);
extern int hid_test(); extern int hid_test();
@@ -206,7 +206,8 @@ int usbh_hid_disconnect(struct usbh_hubport *hport, uint8_t intf)
usb_free(hid_class); 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); memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
hport->config.intf[intf].priv = NULL; hport->config.intf[intf].priv = NULL;

View File

@@ -204,6 +204,7 @@ static int usbh_hub_connect(struct usbh_hubport *hport, uint8_t intf)
} }
memset(hub_class, 0, sizeof(struct usbh_hub)); memset(hub_class, 0, sizeof(struct usbh_hub));
usbh_hub_devno_alloc(hub_class);
hub_class->dev_addr = hport->dev_addr; hub_class->dev_addr = hport->dev_addr;
hub_class->parent = hport; hub_class->parent = hport;
@@ -213,9 +214,6 @@ static int usbh_hub_connect(struct usbh_hubport *hport, uint8_t intf)
return -ENOMEM; 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; hport->config.intf[intf].priv = hub_class;
uint8_t *hub_desc_buffer = usb_iomalloc(32); 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); 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); 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); usbh_hub_unregister(hub_class);
usb_free(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); memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
hport->config.intf[intf].priv = NULL; hport->config.intf[intf].priv = NULL;

View File

@@ -332,11 +332,9 @@ static int usbh_msc_connect(struct usbh_hubport *hport, uint8_t intf)
} }
memset(msc_class, 0, sizeof(struct usbh_msc)); memset(msc_class, 0, sizeof(struct usbh_msc));
usbh_msc_devno_alloc(msc_class);
msc_class->hport = hport; msc_class->hport = hport;
msc_class->intf = intf; 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; 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); 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); 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); 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"); if (msc_class->blocksize) {
USB_LOG_INFO("Block num:%d,block size:%d\r\n", (unsigned int)msc_class->blocknum, (unsigned int)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(); extern int msc_test();
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_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); memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
hport->config.intf[intf].priv = NULL; hport->config.intf[intf].priv = NULL;

View File

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

View File

@@ -85,7 +85,6 @@ static int usbh_printer_connect(struct usbh_hubport *hport, uint8_t intf)
printer_class->intf = intf; printer_class->intf = intf;
hport->config.intf[intf].priv = printer_class; 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++) { 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; 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); // uint8_t *device_id = usb_iomalloc(256);
// ret = usbh_printer_get_device_id(printer_class, device_id); // 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; return ret;
} }
@@ -130,9 +133,10 @@ static int usbh_printer_disconnect(struct usbh_hubport *hport, uint8_t intf)
usb_free(printer_class); usb_free(printer_class);
USB_LOG_INFO("Unregister Printer Class:%s\r\n", hport->config.intf[intf].devname); if (hport->config.intf[intf].devname[0] != '\0')
memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN); 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; hport->config.intf[intf].priv = NULL;
} }

View File

@@ -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].priv = rndis_class;
hport->config.intf[intf + 1].priv = NULL; hport->config.intf[intf + 1].priv = NULL;
strncpy(hport->config.intf[intf].devname, DEV_FORMAT, CONFIG_USBHOST_DEV_NAMELEN);
#ifdef CONFIG_USBHOST_RNDIS_NOTIFY #ifdef CONFIG_USBHOST_RNDIS_NOTIFY
ep_desc = &hport->config.intf[intf].ep[0].ep_desc; 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"); 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); USB_LOG_INFO("Register RNDIS Class:%s\r\n", hport->config.intf[intf].devname);
return ret; return ret;
query_errorout: query_errorout:
@@ -364,7 +365,8 @@ static int usbh_rndis_disconnect(struct usbh_hubport *hport, uint8_t intf)
usb_free(rndis_class); 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); memset(hport->config.intf[intf].devname, 0, CONFIG_USBHOST_DEV_NAMELEN);
hport->config.intf[intf].priv = NULL; hport->config.intf[intf].priv = NULL;