10 #include "sw/device/lib/testing/pinmux_testutils.h"
11 #include "sw/device/lib/testing/test_framework/check.h"
13 #include "sw/device/lib/testing/usb_testutils.h"
14 #include "sw/device/lib/testing/usb_testutils_controlep.h"
21 static const uint8_t config_descriptors[] = {
22 USB_CFG_DSCR_HEAD(USB_CFG_DSCR_LEN + USB_INTERFACE_DSCR_LEN, 1),
24 VEND_INTERFACE_DSCR(0, 0, 0x50, 0),
36 static dif_pinmux_t pinmux;
38 OTTF_DEFINE_TEST_CONFIG();
40 static void init_peripherals(
void) {
41 CHECK_DIF_OK(dif_pinmux_init(
43 pinmux_testutils_init(&pinmux);
48 CHECK_STATUS_OK(usb_testutils_init(&usbdev,
false,
51 CHECK_STATUS_OK(usb_testutils_controlep_init(
52 &usbdev_control, &usbdev, 0, config_descriptors,
53 sizeof(config_descriptors), NULL, 0));
77 return DEADLINE_EXCEEDED();
80 static status_t wait_until_configured(uint32_t timeout_micros) {
83 CHECK_STATUS_OK(usb_testutils_poll(&usbdev));
84 if (usbdev_control.device_state == kUsbTestutilsDeviceConfigured)
87 return DEADLINE_EXCEEDED();
90 static status_t wait_until_suspended(uint32_t timeout_micros) {
92 while (usbdev_control.device_state == kUsbTestutilsDeviceConfigured &&
94 CHECK_STATUS_OK(usb_testutils_poll(&usbdev));
97 if (link_state == kDifUsbdevLinkStateSuspended) {
101 return DEADLINE_EXCEEDED();
104 static status_t wait_until_aon_bus_reset(uint32_t timeout_micros) {
109 CHECK(
status.active,
"AON wake is not active?!");
110 CHECK(!
status.disconnected,
111 "device was disconnected while waiting for reset");
115 return DEADLINE_EXCEEDED();
119 uint32_t timeout_micros = 30 * 1000 * 1000u;
125 LOG_INFO(
"wait for host to configure device...");
126 CHECK_STATUS_OK(wait_until_configured(timeout_micros));
129 LOG_INFO(
"configured, waiting for suspend");
130 CHECK_STATUS_OK(wait_until_suspended(timeout_micros));
136 LOG_INFO(
"suspended, waiting for reset");
137 CHECK_STATUS_OK(wait_until_aon_bus_reset(timeout_micros));
139 LOG_INFO(
"reset, take control back from aon");
143 CHECK_STATUS_OK(usb_testutils_fin(&usbdev));