24 #include "sw/device/lib/testing/pinmux_testutils.h"
25 #include "sw/device/lib/testing/test_framework/check.h"
27 #include "sw/device/lib/testing/usb_testutils.h"
28 #include "sw/device/lib/testing/usb_testutils_controlep.h"
29 #include "sw/device/lib/testing/usb_testutils_diags.h"
30 #include "sw/device/lib/testing/usb_testutils_simpleserial.h"
37 static const uint8_t config_descriptors[] = {
39 USB_CFG_DSCR_LEN + 2 * (USB_INTERFACE_DSCR_LEN + 2 * USB_EP_DSCR_LEN),
41 VEND_INTERFACE_DSCR(0, 2, 0x50, 1),
42 USB_BULK_EP_DSCR(0, 1, 32, 0),
43 USB_BULK_EP_DSCR(1, 1, 32, 4),
44 VEND_INTERFACE_DSCR(1, 2, 0x50, 1),
45 USB_BULK_EP_DSCR(0, 2, 32, 0),
46 USB_BULK_EP_DSCR(1, 2, 32, 4),
52 static const uint8_t test_descriptor[] = {
53 USB_TESTUTILS_TEST_DSCR(0, 0, 0, 0, 0)};
65 static dif_pinmux_t pinmux;
71 static char make_printable(
char c,
char replacement) {
72 if (c == 0xa || c == 0xd) {
76 if (c < ' ' || c >
'~') {
82 static const size_t kExpectedUsbCharsRecved = 6;
83 static const char kExpectedUsbRecved[7] =
"Hi!Hi!";
84 static size_t usb_chars_recved_total;
85 static char buffer[7];
90 static void usb_receipt_callback(uint8_t c) {
91 c = make_printable(c,
'?');
93 if (usb_chars_recved_total < kExpectedUsbCharsRecved) {
94 buffer[usb_chars_recved_total] = c;
95 ++usb_chars_recved_total;
99 OTTF_DEFINE_TEST_CONFIG();
104 CHECK_DIF_OK(dif_pinmux_init(
106 pinmux_testutils_init(&pinmux);
114 CHECK_STATUS_OK(usb_testutils_init(&usbdev,
false,
117 CHECK_STATUS_OK(usb_testutils_controlep_init(
118 &usbdev_control, &usbdev, 0, config_descriptors,
119 sizeof(config_descriptors), test_descriptor,
sizeof(test_descriptor)));
124 usb_testutils_controlep_config_wait(&usbdev_control, &usbdev));
127 CHECK_STATUS_OK(usb_testutils_simpleserial_init(&simple_serial, &usbdev, 1U,
128 usb_receipt_callback));
130 USBUTILS_USER_PROMPT(
"Echo characters now...eg. 'cat /dev/ttyUSB0'");
133 for (
int idx = 0; idx < kExpectedUsbCharsRecved; idx++) {
134 CHECK_STATUS_OK(usb_testutils_simpleserial_send_byte(
135 &simple_serial, kExpectedUsbRecved[idx]));
140 while (usb_chars_recved_total < kExpectedUsbCharsRecved) {
141 CHECK_STATUS_OK(usb_testutils_poll(&usbdev));
145 for (
int i = 0; i < kExpectedUsbCharsRecved; i++) {
146 CHECK(buffer[i] == kExpectedUsbRecved[i],
147 "Received char #%d mismatched: exp = %x, actual = %x", i,
148 kExpectedUsbRecved[i], buffer[i]);
150 LOG_INFO(
"USB received %d characters: %s", usb_chars_recved_total, buffer);
152 CHECK_STATUS_OK(usb_testutils_fin(&usbdev));