usb: Refactor usb_interface_config callback
Add interface parameter to interface configuration callback to be able to configure several instances of the same class. Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
This commit is contained in:
parent
b5786aded7
commit
9ef8ad412f
11 changed files with 46 additions and 16 deletions
|
@ -116,7 +116,8 @@ typedef int (*usb_request_handler)(struct usb_setup_packet *setup,
|
|||
/**
|
||||
* @brief Function for interface runtime configuration
|
||||
*/
|
||||
typedef void (*usb_interface_config)(u8_t bInterfaceNumber);
|
||||
typedef void (*usb_interface_config)(struct usb_desc_header *head,
|
||||
u8_t bInterfaceNumber);
|
||||
|
||||
/**
|
||||
* @brief USB Endpoint Configuration
|
||||
|
|
|
@ -269,8 +269,11 @@ static int bluetooth_class_handler(struct usb_setup_packet *setup,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void bluetooth_interface_config(u8_t bInterfaceNumber)
|
||||
static void bluetooth_interface_config(struct usb_desc_header *head,
|
||||
u8_t bInterfaceNumber)
|
||||
{
|
||||
ARG_UNUSED(head);
|
||||
|
||||
bluetooth_cfg.if0.bInterfaceNumber = bInterfaceNumber;
|
||||
}
|
||||
|
||||
|
|
|
@ -504,14 +504,19 @@ static void cdc_acm_dev_status_cb(enum usb_dc_status_code status,
|
|||
}
|
||||
}
|
||||
|
||||
static void cdc_interface_config(u8_t bInterfaceNumber)
|
||||
static void cdc_interface_config(struct usb_desc_header *head,
|
||||
u8_t bInterfaceNumber)
|
||||
{
|
||||
cdc_acm_cfg.if0.bInterfaceNumber = bInterfaceNumber;
|
||||
cdc_acm_cfg.if0_union.bControlInterface = bInterfaceNumber;
|
||||
cdc_acm_cfg.if1.bInterfaceNumber = bInterfaceNumber + 1;
|
||||
cdc_acm_cfg.if0_union.bSubordinateInterface0 = bInterfaceNumber + 1;
|
||||
struct usb_if_descriptor *if_desc = (struct usb_if_descriptor *) head;
|
||||
struct usb_cdc_acm_config *desc =
|
||||
CONTAINER_OF(if_desc, struct usb_cdc_acm_config, if0);
|
||||
|
||||
desc->if0.bInterfaceNumber = bInterfaceNumber;
|
||||
desc->if0_union.bControlInterface = bInterfaceNumber;
|
||||
desc->if1.bInterfaceNumber = bInterfaceNumber + 1;
|
||||
desc->if0_union.bSubordinateInterface0 = bInterfaceNumber + 1;
|
||||
#ifdef CONFIG_USB_COMPOSITE_DEVICE
|
||||
cdc_acm_cfg.iad_cdc.bFirstInterface = bInterfaceNumber;
|
||||
desc->iad_cdc.bFirstInterface = bInterfaceNumber;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -491,8 +491,11 @@ static struct usb_ep_cfg_data hid_ep_data[] = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static void hid_interface_config(u8_t bInterfaceNumber)
|
||||
static void hid_interface_config(struct usb_desc_header *head,
|
||||
u8_t bInterfaceNumber)
|
||||
{
|
||||
ARG_UNUSED(head);
|
||||
|
||||
hid_cfg.if0.bInterfaceNumber = bInterfaceNumber;
|
||||
hid_cfg.if0.bNumEndpoints = ARRAY_SIZE(hid_ep_data);
|
||||
}
|
||||
|
|
|
@ -158,8 +158,11 @@ static int loopback_vendor_handler(struct usb_setup_packet *setup,
|
|||
}
|
||||
/* usb.rst vendor handler end */
|
||||
|
||||
static void loopback_interface_config(u8_t bInterfaceNumber)
|
||||
static void loopback_interface_config(struct usb_desc_header *head,
|
||||
u8_t bInterfaceNumber)
|
||||
{
|
||||
ARG_UNUSED(head);
|
||||
|
||||
loopback_cfg.if0.bInterfaceNumber = bInterfaceNumber;
|
||||
}
|
||||
|
||||
|
|
|
@ -841,8 +841,11 @@ static void mass_storage_status_cb(enum usb_dc_status_code status,
|
|||
}
|
||||
}
|
||||
|
||||
static void mass_interface_config(u8_t bInterfaceNumber)
|
||||
static void mass_interface_config(struct usb_desc_header *head,
|
||||
u8_t bInterfaceNumber)
|
||||
{
|
||||
ARG_UNUSED(head);
|
||||
|
||||
mass_cfg.if0.bInterfaceNumber = bInterfaceNumber;
|
||||
}
|
||||
|
||||
|
|
|
@ -407,10 +407,13 @@ USBD_STRING_DESCR_DEFINE(primary) struct usb_cdc_ecm_mac_descr utf16le_mac = {
|
|||
.bString = CONFIG_USB_DEVICE_NETWORK_ECM_MAC
|
||||
};
|
||||
|
||||
static void ecm_interface_config(u8_t bInterfaceNumber)
|
||||
static void ecm_interface_config(struct usb_desc_header *head,
|
||||
u8_t bInterfaceNumber)
|
||||
{
|
||||
int idx = usb_get_str_descriptor_idx(&utf16le_mac);
|
||||
|
||||
ARG_UNUSED(head);
|
||||
|
||||
if (idx) {
|
||||
LOG_DBG("fixup string %d", idx);
|
||||
cdc_ecm_cfg.if0_netfun_ecm.iMACAddress = idx;
|
||||
|
|
|
@ -268,8 +268,11 @@ static void eem_status_cb(enum usb_dc_status_code status, const u8_t *param)
|
|||
}
|
||||
}
|
||||
|
||||
static void eem_interface_config(u8_t bInterfaceNumber)
|
||||
static void eem_interface_config(struct usb_desc_header *head,
|
||||
u8_t bInterfaceNumber)
|
||||
{
|
||||
ARG_UNUSED(head);
|
||||
|
||||
cdc_eem_cfg.if0.bInterfaceNumber = bInterfaceNumber;
|
||||
}
|
||||
|
||||
|
|
|
@ -1313,8 +1313,11 @@ static void rndis_status_cb(enum usb_dc_status_code status, const u8_t *param)
|
|||
}
|
||||
}
|
||||
|
||||
static void netusb_interface_config(u8_t bInterfaceNumber)
|
||||
static void netusb_interface_config(struct usb_desc_header *head,
|
||||
u8_t bInterfaceNumber)
|
||||
{
|
||||
ARG_UNUSED(head);
|
||||
|
||||
rndis_cfg.if0.bInterfaceNumber = bInterfaceNumber;
|
||||
rndis_cfg.if0_union.bControlInterface = bInterfaceNumber;
|
||||
rndis_cfg.if0_union.bSubordinateInterface0 = bInterfaceNumber + 1;
|
||||
|
|
|
@ -673,8 +673,11 @@ static int dfu_custom_handle_req(struct usb_setup_packet *pSetup,
|
|||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
static void dfu_interface_config(u8_t bInterfaceNumber)
|
||||
static void dfu_interface_config(struct usb_desc_header *head,
|
||||
u8_t bInterfaceNumber)
|
||||
{
|
||||
ARG_UNUSED(head);
|
||||
|
||||
dfu_cfg.if0.bInterfaceNumber = bInterfaceNumber;
|
||||
}
|
||||
|
||||
|
|
|
@ -367,7 +367,7 @@ static int usb_fix_descriptor(struct usb_desc_header *head)
|
|||
}
|
||||
|
||||
if (cfg_data->interface_config) {
|
||||
cfg_data->interface_config(
|
||||
cfg_data->interface_config(head,
|
||||
numof_ifaces);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue