//! \brief Test 16 - Stall SET CONFIGURATION (with configuration in SELF + 300mA -> must be pass) static void main_test16(void) { uint8_t nb_fail; udd_attach_device(); nb_fail = 4; while (nb_fail--) { main_usb_enum_step1(); main_usb_enum_step2(); main_usb_enum_step3(); main_usb_enum_step4(); main_usb_enum_step5(); main_usb_enum_step6(); main_usb_enum_step7(); main_usb_enum_step8(); main_usb_enum_step9(); main_usb_enum_step10(); main_usb_enum_step11(); main_usb_enum_step12(); // Get configuration descriptor main_usb_wait_setup_packet(); main_conf_desc.conf.bDescriptorType = USB_DT_CONFIGURATION; main_conf_desc.conf.bMaxPower = USB_CONFIG_MAX_POWER(300), main_conf_desc.conf.bmAttributes = USB_CONFIG_ATTR_MUST_SET | USB_CONFIG_ATTR_SELF_POWERED; main_conf_desc.iface.bInterfaceProtocol = HID_PROTOCOL_MOUSE; main_conf_desc.ep.wMaxPacketSize = LE16(8); main_usb_send_in((uint8_t*)&main_conf_desc, sizeof(main_conf_desc)); main_usb_wait_out(NULL,0); // Set configuration main_usb_wait_setup_packet(); main_usb_stall_after_setup_packet(); } main_usb_wait_suspend(); main_detach(); }
//! \brief Test 15 - HID mouse with too large endpoint size (USBB hardware limit) static void main_test15(void) { udd_attach_device(); main_usb_enum_step1(); main_usb_enum_step2(); main_usb_enum_step3(); main_usb_enum_step4(); main_usb_enum_step5(); main_usb_enum_step6(); main_usb_enum_step7(); main_usb_enum_step8(); main_usb_enum_step9(); main_usb_enum_step10(); main_usb_enum_step11(); main_usb_enum_step12(); // Get configuration descriptor main_usb_wait_setup_packet(); main_conf_desc.conf.bDescriptorType = USB_DT_CONFIGURATION; main_conf_desc.conf.bMaxPower = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER), main_conf_desc.conf.bmAttributes = USB_CONFIG_ATTR_MUST_SET | USB_DEVICE_ATTR, main_conf_desc.iface.bInterfaceProtocol = HID_PROTOCOL_MOUSE; main_conf_desc.ep.wMaxPacketSize = LE16(1023); main_usb_send_in((uint8_t*)&main_conf_desc, sizeof(main_conf_desc)); main_usb_wait_out(NULL,0); main_usb_wait_suspend(); main_detach(); }
//! \brief Test 13 - To high power consumption in setup request get configuration 0 static void main_test13(void) { udd_attach_device(); main_usb_enum_step1(); main_usb_enum_step2(); main_usb_enum_step3(); main_usb_enum_step4(); main_usb_enum_step5(); main_usb_enum_step6(); main_usb_enum_step7(); main_usb_enum_step8(); main_usb_enum_step9(); main_usb_enum_step10(); main_usb_enum_step11(); // Get configuration descriptor main_usb_wait_setup_packet(); main_conf_desc.conf.bDescriptorType = USB_DT_CONFIGURATION; main_conf_desc.conf.bMaxPower = USB_CONFIG_MAX_POWER(300); main_conf_desc.conf.bmAttributes = USB_CONFIG_ATTR_MUST_SET | USB_DEVICE_ATTR, main_usb_send_in((uint8_t*)&main_conf_desc, sizeof(usb_conf_desc_t)); main_usb_wait_out(NULL,0); main_usb_wait_suspend(); main_detach(); }
//! \brief Test 11 - Wrong value in first setup request get configuration 0 static void main_test11(void) { uint8_t nb_fail; main_otg_init(); udd_attach_device(); nb_fail = 4; while (nb_fail--) { main_usb_enum_step1(); main_usb_enum_step2(); main_usb_enum_step3(); main_usb_enum_step4(); main_usb_enum_step5(); main_usb_enum_step6(); main_usb_enum_step7(); main_usb_enum_step8(); main_usb_enum_step9(); main_usb_enum_step10(); main_usb_enum_step11(); // Get configuration descriptor main_usb_wait_setup_packet(); main_conf_desc.conf.bDescriptorType = 0xFF; main_conf_desc.conf.bMaxPower = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER); main_conf_desc.conf.bmAttributes = USB_CONFIG_ATTR_MUST_SET | USB_DEVICE_ATTR, main_usb_send_in((uint8_t*)&main_conf_desc, sizeof(usb_conf_desc_t)); main_usb_wait_out(NULL,0); } main_usb_wait_suspend(); main_detach(); }
//! \brief step12 of enumeration - Get first struct of USB configuration descriptor static void main_usb_enum_step12(void) { main_usb_wait_setup_packet(); main_conf_desc.conf.bDescriptorType = USB_DT_CONFIGURATION; main_conf_desc.conf.bLength = sizeof(usb_conf_desc_t); main_conf_desc.conf.bMaxPower = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER); main_conf_desc.conf.bmAttributes = USB_CONFIG_ATTR_MUST_SET | USB_DEVICE_ATTR, main_usb_send_in((uint8_t*)&main_conf_desc, sizeof(usb_conf_desc_t)); main_usb_wait_out(NULL,0); }
//! \brief step13 of enumeration - Get all USB configuration descriptor static void main_usb_enum_step13(void) { // Get configuration descriptor main_usb_wait_setup_packet(); main_conf_desc.conf.bLength = sizeof(usb_conf_desc_t); main_conf_desc.conf.bDescriptorType = USB_DT_CONFIGURATION; main_conf_desc.conf.bMaxPower = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER), main_conf_desc.conf.bmAttributes = USB_CONFIG_ATTR_MUST_SET | USB_DEVICE_ATTR, main_conf_desc.iface.bInterfaceProtocol = HID_PROTOCOL_MOUSE; main_conf_desc.ep.wMaxPacketSize = LE16(8); main_usb_send_in((uint8_t*)&main_conf_desc, sizeof(main_conf_desc)); main_usb_wait_out(NULL,0); }
usb_conf_desc_t conf; udi_hid_multi_touch_desc_t hid_multi_touch; } udc_desc_t; COMPILER_PACK_RESET() //! USB Device Configuration Descriptor filled for FS and HS COMPILER_WORD_ALIGNED UDC_DESC_STORAGE udc_desc_t udc_desc = { .conf.bLength = sizeof(usb_conf_desc_t), .conf.bDescriptorType = USB_DT_CONFIGURATION, .conf.wTotalLength = LE16(sizeof(udc_desc_t)), .conf.bNumInterfaces = USB_DEVICE_NB_INTERFACE, .conf.bConfigurationValue = 1, .conf.iConfiguration = 0, .conf.bmAttributes = USB_CONFIG_ATTR_MUST_SET, .conf.bMaxPower = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER), .hid_multi_touch = UDI_HID_MULTI_TOUCH_DESC, }; /** * \name UDC structures which contains all USB Device definitions */ //@{ //! Associate an UDI for each USB interface UDC_DESC_STORAGE udi_api_t *udi_apis[USB_DEVICE_NB_INTERFACE] = { &udi_api_hid_multi_touch, }; //! Add UDI with USB Descriptors FS & HS