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:
Andrei Emeltchenko 2019-01-18 15:18:14 +02:00 committed by Anas Nashif
commit 9ef8ad412f
11 changed files with 46 additions and 16 deletions

View file

@ -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

View file

@ -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;
}

View file

@ -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
}

View file

@ -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);
}

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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;

View file

@ -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;
}

View file

@ -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;

View file

@ -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;
}

View file

@ -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);
}
}