//! \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 Test 20 - Test upstream resume (from USB device)
static void main_test20(void)
{
	main_otg_init();
	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();
	main_usb_enum_step13();
	main_usb_enum_step14();

	// Setup set remotewakeup
	main_usb_wait_setup_packet();
	main_usb_send_in(NULL,0);

	main_usb_wait_suspend();
	delay_ms(100);

	udd_initiate_remote_wake_up();
	main_usb_wait_wakeup();
	main_usb_wait_sof();

	// Setup clear remotewakeup
	main_usb_wait_setup_packet();
	main_usb_send_in(NULL,0);
}
Ejemplo n.º 3
0
//! \brief Test 4  - No response data (NACK IN) after first setup packet
static void main_test4(void)
{
	main_otg_init();
	udd_attach_device();
	main_usb_enum_step1();
	main_usb_enum_step2();
	main_usb_enum_step3();
	main_usb_enum_step4();
	main_usb_wait_setup_packet();
	main_usb_enum_step1();
	main_usb_enum_step2();
	main_detach();
}
//! \brief Test 9  - Detach after reset after first setup request get descriptor
static void main_test9(void)
{
	main_otg_init();
	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_wait_sof();
	main_detach();
}
//! \brief Test 5  - Detach after IN data phase of first setup request
static void main_test5(void)
{
	main_otg_init();
	udd_attach_device();
	main_usb_enum_step1();
	main_usb_enum_step2();
	main_usb_enum_step3();
	main_usb_enum_step4();

	// Get Device Descriptor
	main_usb_wait_setup_packet();
	main_device_desc.bDescriptorType = USB_DT_DEVICE;
	main_device_desc.bMaxPacketSize0 = (speed==0)?8:64;
	main_usb_send_in((uint8_t*)&main_device_desc,8);
	main_detach();
}
Ejemplo n.º 6
0
/*! \brief Main function. Execution starts here.
 */
int main(void)
{
	sysclk_init();
	board_init();
	delay_init(sysclk_get_cpu_hz());

	sysclk_enable_usb();

	// Enable USB hardware
#if SAM
	pmc_enable_periph_clk(ID_UOTGHS);
#endif

	// Execute all USB core tests for each USB speed (low, full and high)
	for (speed = 0; speed < 3; speed++) {

		main_otg_init();

		main_test1();
		main_test2();
		main_test3();
		main_test4();
		main_test5();
		main_test6();
		main_test7();
		main_test8();
		main_test9();
		main_test10();
		main_test11();
		main_test12();
		main_test13();
		main_test14();
#ifndef TST_15_DIS
		main_test15();
#endif
		main_test16();
		main_test17();
#ifndef TST_18_DIS
		main_test18();
#endif
		main_test19();
		main_test20();
		main_test21();
	}
	while(1);
}
//! \brief Test 10 - No send ZLP (NAK IN) after second setup packet (set address)
static void main_test10(void)
{
	main_otg_init();
	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_enable_ctrl_ep(0, (speed==0)?8:64);
	main_usb_wait_setup_packet();
	main_usb_enum_step1();
	main_usb_enum_step2();
	main_detach();
}
//! \brief Test 8  - Detach during reset after first setup request get descriptor
static void main_test8(void)
{
	main_otg_init();
	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();
	if (Is_udd_low_speed_enable()) {
		delay_ms(25);
	} else {
		main_usb_wait_reset_start();
	}
	main_detach();
	udd_ack_reset(); // Ack previous reset finish by detach
}
//! \brief Test 6  - Wrong value in first setup request get descriptor
static void main_test6(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();

		// Get Device Descriptor
		main_usb_wait_setup_packet();
		main_device_desc.bDescriptorType = 0xFF;
		main_device_desc.bMaxPacketSize0 = 0xFF;
		main_usb_send_in((uint8_t*)&main_device_desc,8);
		main_usb_wait_out(NULL,0);
	}
	main_usb_wait_suspend();
	main_detach();
}