static void cmp_usb_set_config(usbd_device* usbd_dev, uint16_t wValue) { uint8_t i; /* Remove existing callbacks, to be re-registered by set-config callbacks below */ for (i=0; i < USB_MAX_CONTROL_CLASS_CALLBACKS; i++) { control_class_callbacks[i].interface = 0; control_class_callbacks[i].callback = NULL; } num_control_class_callbacks = 0; /* Register our class-specific control request dispatcher */ usbd_register_control_callback( usbd_dev, USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE, USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT, cmp_usb_dispatch_control_class_request); /* Record that we're configured */ configured = true; /* Run registered setup handlers */ for (i=0; i < num_set_config_callbacks; i++) { if (set_config_callbacks[i]) { set_config_callbacks[i](usbd_dev, wValue); } } }
void init_usb(void) { usbd_dev = usbd_init(&stm32f103_usb_driver, &dev, &config, usb_strings, 3, usbd_control_buffer, sizeof(usbd_control_buffer)); usbd_register_control_callback( usbd_dev, USB_REQ_TYPE_VENDOR, USB_REQ_TYPE_TYPE, control_request); }
static void usb_set_config(usbd_device *usbd_dev, uint16_t wValue) { (void)wValue; usbd_ep_setup(usbd_dev, 0x81, USB_ENDPOINT_ATTR_INTERRUPT, 4, NULL); usbd_register_control_callback( usbd_dev, USB_REQ_TYPE_VENDOR | USB_REQ_TYPE_INTERFACE, USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT, usb_control_request); }
static void __cdcacm_set_config(usbd_device *usbd_dev, uint16_t wValue) { (void)wValue; usbd_ep_setup(usbd_dev, 0x01, USB_ENDPOINT_ATTR_BULK, 64, __cdcacm_data_rx_cb); usbd_ep_setup(usbd_dev, 0x82, USB_ENDPOINT_ATTR_BULK, 64, NULL); usbd_ep_setup(usbd_dev, 0x83, USB_ENDPOINT_ATTR_INTERRUPT, 16, NULL); usbd_register_control_callback( usbd_dev, USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE, USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT, __cdcacm_control_request); }
static void hid_set_config(usbd_device* usbd_dev, uint16_t wValue) { (void)wValue; usbd_ep_setup(usbd_dev, ENDP_HID_REPORT_OUT, USB_ENDPOINT_ATTR_INTERRUPT, 64, &hid_interrupt_out); usbd_ep_setup(usbd_dev, ENDP_HID_REPORT_IN, USB_ENDPOINT_ATTR_INTERRUPT, 64, &hid_interrupt_in); usbd_register_control_callback( usbd_dev, USB_REQ_TYPE_STANDARD | USB_REQ_TYPE_INTERFACE, USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT, hid_control_standard_request); cmp_usb_register_control_class_callback(INTF_HID, hid_control_class_request); }
int main(void) { rcc_clock_setup_in_hse_8mhz_out_72mhz(); rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPAEN); rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPCEN); /* LED output */ gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO6); usbd_init(&stm32f107_usb_driver, &dev, &config, usb_strings); usbd_register_control_callback( USB_REQ_TYPE_VENDOR, USB_REQ_TYPE_TYPE, simple_control_callback); while (1) usbd_poll(); }
static void usbmanager_set_config(usbd_device *usbd_dev, u16 wValue) { (void) wValue; usbd_ep_setup(usbd_dev, CDC_RECEIVING_EP, USB_ENDPOINT_ATTR_BULK, CDC_ENDPOINT_PACKAGE_SIZE, cdcacm_data_rx_cb); usbd_ep_setup(usbd_dev, CDC_SENDING_EP, USB_ENDPOINT_ATTR_BULK, CDC_ENDPOINT_PACKAGE_SIZE, NULL); usbd_ep_setup(usbd_dev, CDC_INTERRUPT_EP, USB_ENDPOINT_ATTR_INTERRUPT, 16, NULL); usbd_ep_setup(usbd_dev, MSC_RECEIVING_EP, USB_ENDPOINT_ATTR_BULK, MSC_ENDPOINT_PACKAGE_SIZE, msc_data_rx_cb); usbd_ep_setup(usbd_dev, MSC_SENDING_EP, USB_ENDPOINT_ATTR_BULK, MSC_ENDPOINT_PACKAGE_SIZE, NULL); tx_ep_sizes[0] = USBMANAGER_FIFO0_SIZE; tx_ep_sizes[CDC_SENDING_EP & 0x7F] = CDC_ENDPOINT_PACKAGE_SIZE; tx_ep_sizes[CDC_INTERRUPT_EP & 0x7F] = 16; tx_ep_sizes[MSC_SENDING_EP & 0x7F] = MSC_ENDPOINT_PACKAGE_SIZE; usbd_register_control_callback( usbd_dev, USB_REQ_TYPE_CLASS | USB_REQ_TYPE_INTERFACE, USB_REQ_TYPE_TYPE | USB_REQ_TYPE_RECIPIENT, usbmanager_control_request); }
int main(void) { usbd_device *usbd_dev; rcc_clock_setup_in_hse_25mhz_out_72mhz(); rcc_periph_clock_enable(RCC_GPIOA); rcc_periph_clock_enable(RCC_GPIOC); rcc_periph_clock_enable(RCC_OTGFS); /* LED output */ gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_2_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO6); usbd_dev = usbd_init(&stm32f107_usb_driver, &dev, &config, usb_strings, 3, usbd_control_buffer, sizeof(usbd_control_buffer)); usbd_register_control_callback( usbd_dev, USB_REQ_TYPE_VENDOR, USB_REQ_TYPE_TYPE, simple_control_callback); while (1) usbd_poll(usbd_dev); }