1*129a2703SSascha Wildner /* $FreeBSD: head/tools/tools/usbtest/usbtest.c 254159 2013-08-09 20:08:42Z hselasky $ */
257bed822SMarkus Pfeiffer /*-
357bed822SMarkus Pfeiffer * Copyright (c) 2010 Hans Petter Selasky. All rights reserved.
457bed822SMarkus Pfeiffer *
557bed822SMarkus Pfeiffer * Redistribution and use in source and binary forms, with or without
657bed822SMarkus Pfeiffer * modification, are permitted provided that the following conditions
757bed822SMarkus Pfeiffer * are met:
857bed822SMarkus Pfeiffer * 1. Redistributions of source code must retain the above copyright
957bed822SMarkus Pfeiffer * notice, this list of conditions and the following disclaimer.
1057bed822SMarkus Pfeiffer * 2. Redistributions in binary form must reproduce the above copyright
1157bed822SMarkus Pfeiffer * notice, this list of conditions and the following disclaimer in the
1257bed822SMarkus Pfeiffer * documentation and/or other materials provided with the distribution.
1357bed822SMarkus Pfeiffer *
1457bed822SMarkus Pfeiffer * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1557bed822SMarkus Pfeiffer * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1657bed822SMarkus Pfeiffer * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1757bed822SMarkus Pfeiffer * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1857bed822SMarkus Pfeiffer * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1957bed822SMarkus Pfeiffer * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2057bed822SMarkus Pfeiffer * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2157bed822SMarkus Pfeiffer * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2257bed822SMarkus Pfeiffer * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2357bed822SMarkus Pfeiffer * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2457bed822SMarkus Pfeiffer * SUCH DAMAGE.
2557bed822SMarkus Pfeiffer */
2657bed822SMarkus Pfeiffer
2757bed822SMarkus Pfeiffer #include <stdio.h>
2857bed822SMarkus Pfeiffer #include <stdint.h>
2957bed822SMarkus Pfeiffer #include <err.h>
3057bed822SMarkus Pfeiffer #include <string.h>
3157bed822SMarkus Pfeiffer #include <errno.h>
3257bed822SMarkus Pfeiffer #include <stdarg.h>
3357bed822SMarkus Pfeiffer #include <stdlib.h>
3457bed822SMarkus Pfeiffer
3557bed822SMarkus Pfeiffer #include <sys/types.h>
3657bed822SMarkus Pfeiffer #include <sys/sysctl.h>
3757bed822SMarkus Pfeiffer
38*129a2703SSascha Wildner #include <bus/u4b/usb_ioctl.h>
3957bed822SMarkus Pfeiffer
4057bed822SMarkus Pfeiffer #include "usbtest.h"
4157bed822SMarkus Pfeiffer
4257bed822SMarkus Pfeiffer #include <g_keyboard.h>
4357bed822SMarkus Pfeiffer #include <g_mouse.h>
4457bed822SMarkus Pfeiffer #include <g_modem.h>
4557bed822SMarkus Pfeiffer #include <g_audio.h>
4657bed822SMarkus Pfeiffer
4757bed822SMarkus Pfeiffer static uint8_t usb_ts_select[USB_TS_MAX_LEVELS];
4857bed822SMarkus Pfeiffer
4957bed822SMarkus Pfeiffer const char *indent[USB_TS_MAX_LEVELS] = {
5057bed822SMarkus Pfeiffer " ",
5157bed822SMarkus Pfeiffer " ",
5257bed822SMarkus Pfeiffer " ",
5357bed822SMarkus Pfeiffer " ",
5457bed822SMarkus Pfeiffer " ",
5557bed822SMarkus Pfeiffer " ",
5657bed822SMarkus Pfeiffer " ",
5757bed822SMarkus Pfeiffer " ",
5857bed822SMarkus Pfeiffer };
5957bed822SMarkus Pfeiffer
6057bed822SMarkus Pfeiffer /* a perceptual white noise generator (after HPS' invention) */
6157bed822SMarkus Pfeiffer
6257bed822SMarkus Pfeiffer int32_t
usb_ts_rand_noise(void)6357bed822SMarkus Pfeiffer usb_ts_rand_noise(void)
6457bed822SMarkus Pfeiffer {
6557bed822SMarkus Pfeiffer uint32_t temp;
6657bed822SMarkus Pfeiffer const uint32_t prime = 0xFFFF1D;
6757bed822SMarkus Pfeiffer static uint32_t noise_rem = 1;
6857bed822SMarkus Pfeiffer
6957bed822SMarkus Pfeiffer if (noise_rem & 1) {
7057bed822SMarkus Pfeiffer noise_rem += prime;
7157bed822SMarkus Pfeiffer }
7257bed822SMarkus Pfeiffer noise_rem /= 2;
7357bed822SMarkus Pfeiffer
7457bed822SMarkus Pfeiffer temp = noise_rem;
7557bed822SMarkus Pfeiffer
7657bed822SMarkus Pfeiffer /* unsigned to signed conversion */
7757bed822SMarkus Pfeiffer
7857bed822SMarkus Pfeiffer temp ^= 0x800000;
7957bed822SMarkus Pfeiffer if (temp & 0x800000) {
8057bed822SMarkus Pfeiffer temp |= (-0x800000);
8157bed822SMarkus Pfeiffer }
8257bed822SMarkus Pfeiffer return temp;
8357bed822SMarkus Pfeiffer }
8457bed822SMarkus Pfeiffer
8557bed822SMarkus Pfeiffer uint8_t
usb_ts_show_menu(uint8_t level,const char * title,const char * fmt,...)8657bed822SMarkus Pfeiffer usb_ts_show_menu(uint8_t level, const char *title, const char *fmt,...)
8757bed822SMarkus Pfeiffer {
8857bed822SMarkus Pfeiffer va_list args;
8957bed822SMarkus Pfeiffer uint8_t x;
9057bed822SMarkus Pfeiffer uint8_t retval;
9157bed822SMarkus Pfeiffer char *pstr;
9257bed822SMarkus Pfeiffer char buf[16];
9357bed822SMarkus Pfeiffer char menu[80 * 20];
9457bed822SMarkus Pfeiffer
9557bed822SMarkus Pfeiffer va_start(args, fmt);
9657bed822SMarkus Pfeiffer vsnprintf(menu, sizeof(menu), fmt, args);
9757bed822SMarkus Pfeiffer va_end(args);
9857bed822SMarkus Pfeiffer
9957bed822SMarkus Pfeiffer printf("[");
10057bed822SMarkus Pfeiffer
10157bed822SMarkus Pfeiffer for (x = 0; x != level; x++) {
10257bed822SMarkus Pfeiffer if ((x + 1) == level)
10357bed822SMarkus Pfeiffer printf("%d", usb_ts_select[x]);
10457bed822SMarkus Pfeiffer else
10557bed822SMarkus Pfeiffer printf("%d.", usb_ts_select[x]);
10657bed822SMarkus Pfeiffer }
10757bed822SMarkus Pfeiffer
10857bed822SMarkus Pfeiffer printf("] - %s:\n\n", title);
10957bed822SMarkus Pfeiffer
11057bed822SMarkus Pfeiffer x = 1;
11157bed822SMarkus Pfeiffer for (pstr = menu; *pstr; pstr++) {
11257bed822SMarkus Pfeiffer if (x != 0) {
11357bed822SMarkus Pfeiffer printf("%s", indent[level]);
11457bed822SMarkus Pfeiffer x = 0;
11557bed822SMarkus Pfeiffer }
11657bed822SMarkus Pfeiffer printf("%c", *pstr);
11757bed822SMarkus Pfeiffer
11857bed822SMarkus Pfeiffer if (*pstr == '\n')
11957bed822SMarkus Pfeiffer x = 1;
12057bed822SMarkus Pfeiffer }
12157bed822SMarkus Pfeiffer
12257bed822SMarkus Pfeiffer printf("\n>");
12357bed822SMarkus Pfeiffer
12457bed822SMarkus Pfeiffer if (fgets(buf, sizeof(buf), stdin) == NULL)
12557bed822SMarkus Pfeiffer err(1, "Cannot read input");
12657bed822SMarkus Pfeiffer
12757bed822SMarkus Pfeiffer if (buf[0] == 'x')
12857bed822SMarkus Pfeiffer retval = 255;
12957bed822SMarkus Pfeiffer else
13057bed822SMarkus Pfeiffer retval = atoi(buf);
13157bed822SMarkus Pfeiffer
13257bed822SMarkus Pfeiffer usb_ts_select[level] = retval;
13357bed822SMarkus Pfeiffer
13457bed822SMarkus Pfeiffer return (retval);
13557bed822SMarkus Pfeiffer }
13657bed822SMarkus Pfeiffer
13757bed822SMarkus Pfeiffer void
get_string(char * ptr,int size)13857bed822SMarkus Pfeiffer get_string(char *ptr, int size)
13957bed822SMarkus Pfeiffer {
14057bed822SMarkus Pfeiffer printf("\nEnter string>");
14157bed822SMarkus Pfeiffer
14257bed822SMarkus Pfeiffer if (fgets(ptr, size, stdin) == NULL)
14357bed822SMarkus Pfeiffer err(1, "Cannot read input");
14457bed822SMarkus Pfeiffer
14557bed822SMarkus Pfeiffer ptr[size - 1] = 0;
14657bed822SMarkus Pfeiffer
14757bed822SMarkus Pfeiffer size = strlen(ptr);
14857bed822SMarkus Pfeiffer
14957bed822SMarkus Pfeiffer /* strip trailing newline, if any */
15057bed822SMarkus Pfeiffer if (size == 0)
15157bed822SMarkus Pfeiffer return;
15257bed822SMarkus Pfeiffer else if (ptr[size - 1] == '\n')
15357bed822SMarkus Pfeiffer ptr[size - 1] = 0;
15457bed822SMarkus Pfeiffer }
15557bed822SMarkus Pfeiffer
15657bed822SMarkus Pfeiffer int
get_integer(void)15757bed822SMarkus Pfeiffer get_integer(void)
15857bed822SMarkus Pfeiffer {
15957bed822SMarkus Pfeiffer char buf[32];
16057bed822SMarkus Pfeiffer
16157bed822SMarkus Pfeiffer printf("\nEnter integer value>");
16257bed822SMarkus Pfeiffer
16357bed822SMarkus Pfeiffer if (fgets(buf, sizeof(buf), stdin) == NULL)
16457bed822SMarkus Pfeiffer err(1, "Cannot read input");
16557bed822SMarkus Pfeiffer
16657bed822SMarkus Pfeiffer if (strcmp(buf, "x\n") == 0)
16757bed822SMarkus Pfeiffer return (-1);
16857bed822SMarkus Pfeiffer if (strcmp(buf, "r\n") == 0)
16957bed822SMarkus Pfeiffer return (-2);
17057bed822SMarkus Pfeiffer
17157bed822SMarkus Pfeiffer return ((int)strtol(buf, 0, 0));
17257bed822SMarkus Pfeiffer }
17357bed822SMarkus Pfeiffer
17457bed822SMarkus Pfeiffer static void
set_template(int template)17557bed822SMarkus Pfeiffer set_template(int template)
17657bed822SMarkus Pfeiffer {
17757bed822SMarkus Pfeiffer int error;
17857bed822SMarkus Pfeiffer
17957bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.template", NULL, NULL,
18057bed822SMarkus Pfeiffer &template, sizeof(template));
18157bed822SMarkus Pfeiffer
18257bed822SMarkus Pfeiffer if (error != 0) {
18357bed822SMarkus Pfeiffer printf("WARNING: Could not set USB template "
18457bed822SMarkus Pfeiffer "to %d (error=%d)\n", template, errno);
18557bed822SMarkus Pfeiffer }
18657bed822SMarkus Pfeiffer }
18757bed822SMarkus Pfeiffer
18857bed822SMarkus Pfeiffer static void
show_default_audio_select(uint8_t level)18957bed822SMarkus Pfeiffer show_default_audio_select(uint8_t level)
19057bed822SMarkus Pfeiffer {
19157bed822SMarkus Pfeiffer int error;
19257bed822SMarkus Pfeiffer int retval;
19357bed822SMarkus Pfeiffer int mode = 0;
19457bed822SMarkus Pfeiffer int pattern_interval = 128;
19557bed822SMarkus Pfeiffer int throughput = 0;
19657bed822SMarkus Pfeiffer size_t len;
19757bed822SMarkus Pfeiffer char pattern[G_AUDIO_MAX_STRLEN] = {"0123456789abcdef"};
19857bed822SMarkus Pfeiffer
19957bed822SMarkus Pfeiffer set_template(USB_TEMP_AUDIO);
20057bed822SMarkus Pfeiffer
20157bed822SMarkus Pfeiffer while (1) {
20257bed822SMarkus Pfeiffer
20357bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_audio.mode", NULL, NULL,
20457bed822SMarkus Pfeiffer &mode, sizeof(mode));
20557bed822SMarkus Pfeiffer
20657bed822SMarkus Pfeiffer if (error != 0) {
20757bed822SMarkus Pfeiffer printf("WARNING: Could not set audio mode "
20857bed822SMarkus Pfeiffer "to %d (error=%d)\n", mode, errno);
20957bed822SMarkus Pfeiffer }
21057bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_audio.pattern_interval", NULL, NULL,
21157bed822SMarkus Pfeiffer &pattern_interval, sizeof(pattern_interval));
21257bed822SMarkus Pfeiffer
21357bed822SMarkus Pfeiffer if (error != 0) {
21457bed822SMarkus Pfeiffer printf("WARNING: Could not set pattern interval "
21557bed822SMarkus Pfeiffer "to %d (error=%d)\n", pattern_interval, errno);
21657bed822SMarkus Pfeiffer }
21757bed822SMarkus Pfeiffer len = sizeof(throughput);
21857bed822SMarkus Pfeiffer
21957bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_audio.throughput",
22057bed822SMarkus Pfeiffer &throughput, &len, 0, 0);
22157bed822SMarkus Pfeiffer
22257bed822SMarkus Pfeiffer if (error != 0) {
22357bed822SMarkus Pfeiffer printf("WARNING: Could not get throughput "
22457bed822SMarkus Pfeiffer "(error=%d)\n", errno);
22557bed822SMarkus Pfeiffer }
22657bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_audio.pattern", NULL, NULL,
22757bed822SMarkus Pfeiffer &pattern, strlen(pattern));
22857bed822SMarkus Pfeiffer
22957bed822SMarkus Pfeiffer if (error != 0) {
23057bed822SMarkus Pfeiffer printf("WARNING: Could not set audio pattern "
23157bed822SMarkus Pfeiffer "to '%s' (error=%d)\n", pattern, errno);
23257bed822SMarkus Pfeiffer }
23357bed822SMarkus Pfeiffer retval = usb_ts_show_menu(level, "Default Audio Settings",
23457bed822SMarkus Pfeiffer "1) Set Silent mode %s\n"
23557bed822SMarkus Pfeiffer "2) Set Dump mode %s\n"
23657bed822SMarkus Pfeiffer "3) Set Loop mode %s\n"
23757bed822SMarkus Pfeiffer "4) Set Pattern mode %s\n"
23857bed822SMarkus Pfeiffer "5) Change DTMF pattern: '%s'\n"
23957bed822SMarkus Pfeiffer "6) Change pattern advance interval: %d ms\n"
24057bed822SMarkus Pfeiffer "x) Return to previous menu\n"
24157bed822SMarkus Pfeiffer "s: Ready for enumeration\n"
24257bed822SMarkus Pfeiffer "t: Throughput: %d bytes/second\n",
24357bed822SMarkus Pfeiffer (mode == G_AUDIO_MODE_SILENT) ? "(selected)" : "",
24457bed822SMarkus Pfeiffer (mode == G_AUDIO_MODE_DUMP) ? "(selected)" : "",
24557bed822SMarkus Pfeiffer (mode == G_AUDIO_MODE_LOOP) ? "(selected)" : "",
24657bed822SMarkus Pfeiffer (mode == G_AUDIO_MODE_PATTERN) ? "(selected)" : "",
24757bed822SMarkus Pfeiffer pattern, pattern_interval, throughput);
24857bed822SMarkus Pfeiffer
24957bed822SMarkus Pfeiffer switch (retval) {
25057bed822SMarkus Pfeiffer case 0:
25157bed822SMarkus Pfeiffer break;
25257bed822SMarkus Pfeiffer case 1:
25357bed822SMarkus Pfeiffer mode = G_AUDIO_MODE_SILENT;
25457bed822SMarkus Pfeiffer break;
25557bed822SMarkus Pfeiffer case 2:
25657bed822SMarkus Pfeiffer mode = G_AUDIO_MODE_DUMP;
25757bed822SMarkus Pfeiffer break;
25857bed822SMarkus Pfeiffer case 3:
25957bed822SMarkus Pfeiffer mode = G_AUDIO_MODE_LOOP;
26057bed822SMarkus Pfeiffer break;
26157bed822SMarkus Pfeiffer case 4:
26257bed822SMarkus Pfeiffer mode = G_AUDIO_MODE_PATTERN;
26357bed822SMarkus Pfeiffer break;
26457bed822SMarkus Pfeiffer case 5:
26557bed822SMarkus Pfeiffer get_string(pattern, sizeof(pattern));
26657bed822SMarkus Pfeiffer break;
26757bed822SMarkus Pfeiffer case 6:
26857bed822SMarkus Pfeiffer pattern_interval = get_integer();
26957bed822SMarkus Pfeiffer break;
27057bed822SMarkus Pfeiffer default:
27157bed822SMarkus Pfeiffer return;
27257bed822SMarkus Pfeiffer }
27357bed822SMarkus Pfeiffer }
27457bed822SMarkus Pfeiffer }
27557bed822SMarkus Pfeiffer
27657bed822SMarkus Pfeiffer static void
show_device_audio_select(uint8_t level)27757bed822SMarkus Pfeiffer show_device_audio_select(uint8_t level)
27857bed822SMarkus Pfeiffer {
27957bed822SMarkus Pfeiffer uint8_t retval;
28057bed822SMarkus Pfeiffer
28157bed822SMarkus Pfeiffer while (1) {
28257bed822SMarkus Pfeiffer
28357bed822SMarkus Pfeiffer retval = usb_ts_show_menu(level, "Select Audio Device Model",
28457bed822SMarkus Pfeiffer "1) Generic Audio Device\n"
28557bed822SMarkus Pfeiffer "x) Return to previous menu\n");
28657bed822SMarkus Pfeiffer
28757bed822SMarkus Pfeiffer switch (retval) {
28857bed822SMarkus Pfeiffer case 0:
28957bed822SMarkus Pfeiffer break;
29057bed822SMarkus Pfeiffer case 1:
29157bed822SMarkus Pfeiffer show_default_audio_select(level + 1);
29257bed822SMarkus Pfeiffer break;
29357bed822SMarkus Pfeiffer default:
29457bed822SMarkus Pfeiffer return;
29557bed822SMarkus Pfeiffer }
29657bed822SMarkus Pfeiffer }
29757bed822SMarkus Pfeiffer }
29857bed822SMarkus Pfeiffer
29957bed822SMarkus Pfeiffer static void
show_device_msc_select(uint8_t level)30057bed822SMarkus Pfeiffer show_device_msc_select(uint8_t level)
30157bed822SMarkus Pfeiffer {
30257bed822SMarkus Pfeiffer set_template(USB_TEMP_MSC);
30357bed822SMarkus Pfeiffer }
30457bed822SMarkus Pfeiffer
30557bed822SMarkus Pfeiffer static void
show_device_ethernet_select(uint8_t level)30657bed822SMarkus Pfeiffer show_device_ethernet_select(uint8_t level)
30757bed822SMarkus Pfeiffer {
30857bed822SMarkus Pfeiffer set_template(USB_TEMP_CDCE);
30957bed822SMarkus Pfeiffer }
31057bed822SMarkus Pfeiffer
31157bed822SMarkus Pfeiffer static void
show_default_keyboard_select(uint8_t level)31257bed822SMarkus Pfeiffer show_default_keyboard_select(uint8_t level)
31357bed822SMarkus Pfeiffer {
31457bed822SMarkus Pfeiffer int error;
31557bed822SMarkus Pfeiffer int retval;
31657bed822SMarkus Pfeiffer int mode = 0;
31757bed822SMarkus Pfeiffer int interval = 1023;
31857bed822SMarkus Pfeiffer char pattern[G_KEYBOARD_MAX_STRLEN] = {"abcdefpattern"};
31957bed822SMarkus Pfeiffer
32057bed822SMarkus Pfeiffer set_template(USB_TEMP_KBD);
32157bed822SMarkus Pfeiffer
32257bed822SMarkus Pfeiffer while (1) {
32357bed822SMarkus Pfeiffer
32457bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_keyboard.mode", NULL, NULL,
32557bed822SMarkus Pfeiffer &mode, sizeof(mode));
32657bed822SMarkus Pfeiffer
32757bed822SMarkus Pfeiffer if (error != 0) {
32857bed822SMarkus Pfeiffer printf("WARNING: Could not set keyboard mode "
32957bed822SMarkus Pfeiffer " to %d (error=%d) \n", mode, errno);
33057bed822SMarkus Pfeiffer }
33157bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_keyboard.key_press_interval", NULL, NULL,
33257bed822SMarkus Pfeiffer &interval, sizeof(interval));
33357bed822SMarkus Pfeiffer
33457bed822SMarkus Pfeiffer if (error != 0) {
33557bed822SMarkus Pfeiffer printf("WARNING: Could not set key press interval "
33657bed822SMarkus Pfeiffer "to %d (error=%d)\n", interval, errno);
33757bed822SMarkus Pfeiffer }
33857bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_keyboard.key_press_pattern", NULL, NULL,
33957bed822SMarkus Pfeiffer &pattern, strlen(pattern));
34057bed822SMarkus Pfeiffer
34157bed822SMarkus Pfeiffer if (error != 0) {
34257bed822SMarkus Pfeiffer printf("WARNING: Could not set key pattern "
34357bed822SMarkus Pfeiffer "to '%s' (error=%d)\n", pattern, errno);
34457bed822SMarkus Pfeiffer }
34557bed822SMarkus Pfeiffer retval = usb_ts_show_menu(level, "Default Keyboard Settings",
34657bed822SMarkus Pfeiffer "1) Set silent mode %s\n"
34757bed822SMarkus Pfeiffer "2) Set pattern mode %s\n"
34857bed822SMarkus Pfeiffer "3) Change pattern: '%s'\n"
34957bed822SMarkus Pfeiffer "4) Change key press interval: %d ms\n"
35057bed822SMarkus Pfeiffer "x) Return to previous menu\n"
35157bed822SMarkus Pfeiffer "s: Ready for enumeration\n",
35257bed822SMarkus Pfeiffer (mode == G_KEYBOARD_MODE_SILENT) ? "(selected)" : "",
35357bed822SMarkus Pfeiffer (mode == G_KEYBOARD_MODE_PATTERN) ? "(selected)" : "",
35457bed822SMarkus Pfeiffer pattern, interval);
35557bed822SMarkus Pfeiffer
35657bed822SMarkus Pfeiffer switch (retval) {
35757bed822SMarkus Pfeiffer case 0:
35857bed822SMarkus Pfeiffer break;
35957bed822SMarkus Pfeiffer case 1:
36057bed822SMarkus Pfeiffer mode = G_KEYBOARD_MODE_SILENT;
36157bed822SMarkus Pfeiffer break;
36257bed822SMarkus Pfeiffer case 2:
36357bed822SMarkus Pfeiffer mode = G_KEYBOARD_MODE_PATTERN;
36457bed822SMarkus Pfeiffer break;
36557bed822SMarkus Pfeiffer case 3:
36657bed822SMarkus Pfeiffer get_string(pattern, sizeof(pattern));
36757bed822SMarkus Pfeiffer break;
36857bed822SMarkus Pfeiffer case 4:
36957bed822SMarkus Pfeiffer interval = get_integer();
37057bed822SMarkus Pfeiffer break;
37157bed822SMarkus Pfeiffer default:
37257bed822SMarkus Pfeiffer return;
37357bed822SMarkus Pfeiffer }
37457bed822SMarkus Pfeiffer }
37557bed822SMarkus Pfeiffer }
37657bed822SMarkus Pfeiffer
37757bed822SMarkus Pfeiffer static void
show_device_keyboard_select(uint8_t level)37857bed822SMarkus Pfeiffer show_device_keyboard_select(uint8_t level)
37957bed822SMarkus Pfeiffer {
38057bed822SMarkus Pfeiffer uint8_t retval;
38157bed822SMarkus Pfeiffer
38257bed822SMarkus Pfeiffer while (1) {
38357bed822SMarkus Pfeiffer
38457bed822SMarkus Pfeiffer retval = usb_ts_show_menu(level, "Select Keyboard Model",
38557bed822SMarkus Pfeiffer "1) Generic Keyboard \n"
38657bed822SMarkus Pfeiffer "x) Return to previous menu \n");
38757bed822SMarkus Pfeiffer
38857bed822SMarkus Pfeiffer switch (retval) {
38957bed822SMarkus Pfeiffer case 0:
39057bed822SMarkus Pfeiffer break;
39157bed822SMarkus Pfeiffer case 1:
39257bed822SMarkus Pfeiffer show_default_keyboard_select(level + 1);
39357bed822SMarkus Pfeiffer break;
39457bed822SMarkus Pfeiffer default:
39557bed822SMarkus Pfeiffer return;
39657bed822SMarkus Pfeiffer }
39757bed822SMarkus Pfeiffer }
39857bed822SMarkus Pfeiffer }
39957bed822SMarkus Pfeiffer
40057bed822SMarkus Pfeiffer static void
show_default_mouse_select(uint8_t level)40157bed822SMarkus Pfeiffer show_default_mouse_select(uint8_t level)
40257bed822SMarkus Pfeiffer {
40357bed822SMarkus Pfeiffer int error;
40457bed822SMarkus Pfeiffer int retval;
40557bed822SMarkus Pfeiffer int mode = 0;
40657bed822SMarkus Pfeiffer int cursor_interval = 128;
40757bed822SMarkus Pfeiffer int cursor_radius = 75;
40857bed822SMarkus Pfeiffer int button_interval = 0;
40957bed822SMarkus Pfeiffer
41057bed822SMarkus Pfeiffer set_template(USB_TEMP_MOUSE);
41157bed822SMarkus Pfeiffer
41257bed822SMarkus Pfeiffer while (1) {
41357bed822SMarkus Pfeiffer
41457bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_mouse.mode", NULL, NULL,
41557bed822SMarkus Pfeiffer &mode, sizeof(mode));
41657bed822SMarkus Pfeiffer
41757bed822SMarkus Pfeiffer if (error != 0) {
41857bed822SMarkus Pfeiffer printf("WARNING: Could not set mouse mode "
41957bed822SMarkus Pfeiffer "to %d (error=%d)\n", mode, errno);
42057bed822SMarkus Pfeiffer }
42157bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_mouse.cursor_update_interval", NULL, NULL,
42257bed822SMarkus Pfeiffer &cursor_interval, sizeof(cursor_interval));
42357bed822SMarkus Pfeiffer
42457bed822SMarkus Pfeiffer if (error != 0) {
42557bed822SMarkus Pfeiffer printf("WARNING: Could not set cursor update interval "
42657bed822SMarkus Pfeiffer "to %d (error=%d)\n", cursor_interval, errno);
42757bed822SMarkus Pfeiffer }
42857bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_mouse.button_press_interval", NULL, NULL,
42957bed822SMarkus Pfeiffer &button_interval, sizeof(button_interval));
43057bed822SMarkus Pfeiffer
43157bed822SMarkus Pfeiffer if (error != 0) {
43257bed822SMarkus Pfeiffer printf("WARNING: Could not set button press interval "
43357bed822SMarkus Pfeiffer "to %d (error=%d)\n", button_interval, errno);
43457bed822SMarkus Pfeiffer }
43557bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_mouse.cursor_radius", NULL, NULL,
43657bed822SMarkus Pfeiffer &cursor_radius, sizeof(cursor_radius));
43757bed822SMarkus Pfeiffer
43857bed822SMarkus Pfeiffer if (error != 0) {
43957bed822SMarkus Pfeiffer printf("WARNING: Could not set cursor radius "
44057bed822SMarkus Pfeiffer "to %d (error=%d)\n", cursor_radius, errno);
44157bed822SMarkus Pfeiffer }
44257bed822SMarkus Pfeiffer retval = usb_ts_show_menu(level, "Default Mouse Settings",
44357bed822SMarkus Pfeiffer "1) Set Silent mode %s\n"
44457bed822SMarkus Pfeiffer "2) Set Circle mode %s\n"
44557bed822SMarkus Pfeiffer "3) Set Square mode %s\n"
44657bed822SMarkus Pfeiffer "4) Set Spiral mode %s\n"
44757bed822SMarkus Pfeiffer "5) Change cursor radius: %d pixels\n"
44857bed822SMarkus Pfeiffer "6) Change cursor update interval: %d ms\n"
44957bed822SMarkus Pfeiffer "7) Change button[0] press interval: %d ms\n"
45057bed822SMarkus Pfeiffer "x) Return to previous menu\n"
45157bed822SMarkus Pfeiffer "s: Ready for enumeration\n",
45257bed822SMarkus Pfeiffer (mode == G_MOUSE_MODE_SILENT) ? "(selected)" : "",
45357bed822SMarkus Pfeiffer (mode == G_MOUSE_MODE_CIRCLE) ? "(selected)" : "",
45457bed822SMarkus Pfeiffer (mode == G_MOUSE_MODE_BOX) ? "(selected)" : "",
45557bed822SMarkus Pfeiffer (mode == G_MOUSE_MODE_SPIRAL) ? "(selected)" : "",
45657bed822SMarkus Pfeiffer cursor_radius, cursor_interval, button_interval);
45757bed822SMarkus Pfeiffer
45857bed822SMarkus Pfeiffer switch (retval) {
45957bed822SMarkus Pfeiffer case 0:
46057bed822SMarkus Pfeiffer break;
46157bed822SMarkus Pfeiffer case 1:
46257bed822SMarkus Pfeiffer mode = G_MOUSE_MODE_SILENT;
46357bed822SMarkus Pfeiffer break;
46457bed822SMarkus Pfeiffer case 2:
46557bed822SMarkus Pfeiffer mode = G_MOUSE_MODE_CIRCLE;
46657bed822SMarkus Pfeiffer break;
46757bed822SMarkus Pfeiffer case 3:
46857bed822SMarkus Pfeiffer mode = G_MOUSE_MODE_BOX;
46957bed822SMarkus Pfeiffer break;
47057bed822SMarkus Pfeiffer case 4:
47157bed822SMarkus Pfeiffer mode = G_MOUSE_MODE_SPIRAL;
47257bed822SMarkus Pfeiffer break;
47357bed822SMarkus Pfeiffer case 5:
47457bed822SMarkus Pfeiffer cursor_radius = get_integer();
47557bed822SMarkus Pfeiffer break;
47657bed822SMarkus Pfeiffer case 6:
47757bed822SMarkus Pfeiffer cursor_interval = get_integer();
47857bed822SMarkus Pfeiffer break;
47957bed822SMarkus Pfeiffer case 7:
48057bed822SMarkus Pfeiffer button_interval = get_integer();
48157bed822SMarkus Pfeiffer break;
48257bed822SMarkus Pfeiffer default:
48357bed822SMarkus Pfeiffer return;
48457bed822SMarkus Pfeiffer }
48557bed822SMarkus Pfeiffer }
48657bed822SMarkus Pfeiffer }
48757bed822SMarkus Pfeiffer
48857bed822SMarkus Pfeiffer static void
show_device_mouse_select(uint8_t level)48957bed822SMarkus Pfeiffer show_device_mouse_select(uint8_t level)
49057bed822SMarkus Pfeiffer {
49157bed822SMarkus Pfeiffer uint8_t retval;
49257bed822SMarkus Pfeiffer
49357bed822SMarkus Pfeiffer while (1) {
49457bed822SMarkus Pfeiffer
49557bed822SMarkus Pfeiffer retval = usb_ts_show_menu(level, "Select Mouse Model",
49657bed822SMarkus Pfeiffer "1) Generic Mouse\n"
49757bed822SMarkus Pfeiffer "x) Return to previous menu\n");
49857bed822SMarkus Pfeiffer
49957bed822SMarkus Pfeiffer switch (retval) {
50057bed822SMarkus Pfeiffer case 0:
50157bed822SMarkus Pfeiffer break;
50257bed822SMarkus Pfeiffer case 1:
50357bed822SMarkus Pfeiffer show_default_mouse_select(level + 1);
50457bed822SMarkus Pfeiffer break;
50557bed822SMarkus Pfeiffer default:
50657bed822SMarkus Pfeiffer return;
50757bed822SMarkus Pfeiffer }
50857bed822SMarkus Pfeiffer }
50957bed822SMarkus Pfeiffer }
51057bed822SMarkus Pfeiffer
51157bed822SMarkus Pfeiffer static void
show_device_mtp_select(uint8_t level)51257bed822SMarkus Pfeiffer show_device_mtp_select(uint8_t level)
51357bed822SMarkus Pfeiffer {
51457bed822SMarkus Pfeiffer set_template(USB_TEMP_MTP);
51557bed822SMarkus Pfeiffer }
51657bed822SMarkus Pfeiffer
51757bed822SMarkus Pfeiffer static void
show_default_modem_select(uint8_t level)51857bed822SMarkus Pfeiffer show_default_modem_select(uint8_t level)
51957bed822SMarkus Pfeiffer {
52057bed822SMarkus Pfeiffer int error;
52157bed822SMarkus Pfeiffer int retval;
52257bed822SMarkus Pfeiffer int mode = 0;
52357bed822SMarkus Pfeiffer int pattern_interval = 128;
52457bed822SMarkus Pfeiffer int throughput = 0;
52557bed822SMarkus Pfeiffer size_t len;
52657bed822SMarkus Pfeiffer char pattern[G_MODEM_MAX_STRLEN] = {"abcdefpattern"};
52757bed822SMarkus Pfeiffer
52857bed822SMarkus Pfeiffer set_template(USB_TEMP_MODEM);
52957bed822SMarkus Pfeiffer
53057bed822SMarkus Pfeiffer while (1) {
53157bed822SMarkus Pfeiffer
53257bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_modem.mode", NULL, NULL,
53357bed822SMarkus Pfeiffer &mode, sizeof(mode));
53457bed822SMarkus Pfeiffer
53557bed822SMarkus Pfeiffer if (error != 0) {
53657bed822SMarkus Pfeiffer printf("WARNING: Could not set modem mode "
53757bed822SMarkus Pfeiffer "to %d (error=%d)\n", mode, errno);
53857bed822SMarkus Pfeiffer }
53957bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_modem.pattern_interval", NULL, NULL,
54057bed822SMarkus Pfeiffer &pattern_interval, sizeof(pattern_interval));
54157bed822SMarkus Pfeiffer
54257bed822SMarkus Pfeiffer if (error != 0) {
54357bed822SMarkus Pfeiffer printf("WARNING: Could not set pattern interval "
54457bed822SMarkus Pfeiffer "to %d (error=%d)\n", pattern_interval, errno);
54557bed822SMarkus Pfeiffer }
54657bed822SMarkus Pfeiffer len = sizeof(throughput);
54757bed822SMarkus Pfeiffer
54857bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_modem.throughput",
54957bed822SMarkus Pfeiffer &throughput, &len, 0, 0);
55057bed822SMarkus Pfeiffer
55157bed822SMarkus Pfeiffer if (error != 0) {
55257bed822SMarkus Pfeiffer printf("WARNING: Could not get throughput "
55357bed822SMarkus Pfeiffer "(error=%d)\n", errno);
55457bed822SMarkus Pfeiffer }
55557bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.g_modem.pattern", NULL, NULL,
55657bed822SMarkus Pfeiffer &pattern, strlen(pattern));
55757bed822SMarkus Pfeiffer
55857bed822SMarkus Pfeiffer if (error != 0) {
55957bed822SMarkus Pfeiffer printf("WARNING: Could not set modem pattern "
56057bed822SMarkus Pfeiffer "to '%s' (error=%d)\n", pattern, errno);
56157bed822SMarkus Pfeiffer }
56257bed822SMarkus Pfeiffer retval = usb_ts_show_menu(level, "Default Modem Settings",
56357bed822SMarkus Pfeiffer "1) Set Silent mode %s\n"
56457bed822SMarkus Pfeiffer "2) Set Dump mode %s\n"
56557bed822SMarkus Pfeiffer "3) Set Loop mode %s\n"
56657bed822SMarkus Pfeiffer "4) Set Pattern mode %s\n"
56757bed822SMarkus Pfeiffer "5) Change test pattern: '%s'\n"
56857bed822SMarkus Pfeiffer "6) Change data transmit interval: %d ms\n"
56957bed822SMarkus Pfeiffer "x) Return to previous menu\n"
57057bed822SMarkus Pfeiffer "s: Ready for enumeration\n"
57157bed822SMarkus Pfeiffer "t: Throughput: %d bytes/second\n",
57257bed822SMarkus Pfeiffer (mode == G_MODEM_MODE_SILENT) ? "(selected)" : "",
57357bed822SMarkus Pfeiffer (mode == G_MODEM_MODE_DUMP) ? "(selected)" : "",
57457bed822SMarkus Pfeiffer (mode == G_MODEM_MODE_LOOP) ? "(selected)" : "",
57557bed822SMarkus Pfeiffer (mode == G_MODEM_MODE_PATTERN) ? "(selected)" : "",
57657bed822SMarkus Pfeiffer pattern, pattern_interval, throughput);
57757bed822SMarkus Pfeiffer
57857bed822SMarkus Pfeiffer switch (retval) {
57957bed822SMarkus Pfeiffer case 0:
58057bed822SMarkus Pfeiffer break;
58157bed822SMarkus Pfeiffer case 1:
58257bed822SMarkus Pfeiffer mode = G_MODEM_MODE_SILENT;
58357bed822SMarkus Pfeiffer break;
58457bed822SMarkus Pfeiffer case 2:
58557bed822SMarkus Pfeiffer mode = G_MODEM_MODE_DUMP;
58657bed822SMarkus Pfeiffer break;
58757bed822SMarkus Pfeiffer case 3:
58857bed822SMarkus Pfeiffer mode = G_MODEM_MODE_LOOP;
58957bed822SMarkus Pfeiffer break;
59057bed822SMarkus Pfeiffer case 4:
59157bed822SMarkus Pfeiffer mode = G_MODEM_MODE_PATTERN;
59257bed822SMarkus Pfeiffer break;
59357bed822SMarkus Pfeiffer case 5:
59457bed822SMarkus Pfeiffer get_string(pattern, sizeof(pattern));
59557bed822SMarkus Pfeiffer break;
59657bed822SMarkus Pfeiffer case 6:
59757bed822SMarkus Pfeiffer pattern_interval = get_integer();
59857bed822SMarkus Pfeiffer break;
59957bed822SMarkus Pfeiffer default:
60057bed822SMarkus Pfeiffer return;
60157bed822SMarkus Pfeiffer }
60257bed822SMarkus Pfeiffer }
60357bed822SMarkus Pfeiffer }
60457bed822SMarkus Pfeiffer
60557bed822SMarkus Pfeiffer static void
show_device_modem_select(uint8_t level)60657bed822SMarkus Pfeiffer show_device_modem_select(uint8_t level)
60757bed822SMarkus Pfeiffer {
60857bed822SMarkus Pfeiffer uint8_t retval;
60957bed822SMarkus Pfeiffer
61057bed822SMarkus Pfeiffer while (1) {
61157bed822SMarkus Pfeiffer
61257bed822SMarkus Pfeiffer retval = usb_ts_show_menu(level, "Select Modem Model",
61357bed822SMarkus Pfeiffer "1) Generic Modem\n"
61457bed822SMarkus Pfeiffer "x) Return to previous menu\n");
61557bed822SMarkus Pfeiffer
61657bed822SMarkus Pfeiffer switch (retval) {
61757bed822SMarkus Pfeiffer case 0:
61857bed822SMarkus Pfeiffer break;
61957bed822SMarkus Pfeiffer case 1:
62057bed822SMarkus Pfeiffer show_default_modem_select(level + 1);
62157bed822SMarkus Pfeiffer break;
62257bed822SMarkus Pfeiffer default:
62357bed822SMarkus Pfeiffer return;
62457bed822SMarkus Pfeiffer }
62557bed822SMarkus Pfeiffer }
62657bed822SMarkus Pfeiffer }
62757bed822SMarkus Pfeiffer
62857bed822SMarkus Pfeiffer static void
show_device_generic_select(uint8_t level)62957bed822SMarkus Pfeiffer show_device_generic_select(uint8_t level)
63057bed822SMarkus Pfeiffer {
63157bed822SMarkus Pfeiffer }
63257bed822SMarkus Pfeiffer
63357bed822SMarkus Pfeiffer static void
show_device_select(uint8_t level)63457bed822SMarkus Pfeiffer show_device_select(uint8_t level)
63557bed822SMarkus Pfeiffer {
63657bed822SMarkus Pfeiffer uint8_t retval;
63757bed822SMarkus Pfeiffer
63857bed822SMarkus Pfeiffer while (1) {
63957bed822SMarkus Pfeiffer
64057bed822SMarkus Pfeiffer retval = usb_ts_show_menu(level, "Select Device Mode Test Group",
64157bed822SMarkus Pfeiffer "1) Audio (UAUDIO)\n"
64257bed822SMarkus Pfeiffer "2) Mass Storage (MSC)\n"
64357bed822SMarkus Pfeiffer "3) Ethernet (CDCE)\n"
64457bed822SMarkus Pfeiffer "4) Keyboard Input Device (UKBD)\n"
64557bed822SMarkus Pfeiffer "5) Mouse Input Device (UMS)\n"
64657bed822SMarkus Pfeiffer "6) Message Transfer Protocol (MTP)\n"
64757bed822SMarkus Pfeiffer "7) Modem (CDC)\n"
64857bed822SMarkus Pfeiffer "8) Generic Endpoint Loopback (GENERIC)\n"
64957bed822SMarkus Pfeiffer "x) Return to previous menu\n");
65057bed822SMarkus Pfeiffer
65157bed822SMarkus Pfeiffer switch (retval) {
65257bed822SMarkus Pfeiffer case 0:
65357bed822SMarkus Pfeiffer break;
65457bed822SMarkus Pfeiffer case 1:
65557bed822SMarkus Pfeiffer show_device_audio_select(level + 1);
65657bed822SMarkus Pfeiffer break;
65757bed822SMarkus Pfeiffer case 2:
65857bed822SMarkus Pfeiffer show_device_msc_select(level + 1);
65957bed822SMarkus Pfeiffer break;
66057bed822SMarkus Pfeiffer case 3:
66157bed822SMarkus Pfeiffer show_device_ethernet_select(level + 1);
66257bed822SMarkus Pfeiffer break;
66357bed822SMarkus Pfeiffer case 4:
66457bed822SMarkus Pfeiffer show_device_keyboard_select(level + 1);
66557bed822SMarkus Pfeiffer break;
66657bed822SMarkus Pfeiffer case 5:
66757bed822SMarkus Pfeiffer show_device_mouse_select(level + 1);
66857bed822SMarkus Pfeiffer break;
66957bed822SMarkus Pfeiffer case 6:
67057bed822SMarkus Pfeiffer show_device_mtp_select(level + 1);
67157bed822SMarkus Pfeiffer break;
67257bed822SMarkus Pfeiffer case 7:
67357bed822SMarkus Pfeiffer show_device_modem_select(level + 1);
67457bed822SMarkus Pfeiffer break;
67557bed822SMarkus Pfeiffer case 8:
67657bed822SMarkus Pfeiffer show_device_generic_select(level + 1);
67757bed822SMarkus Pfeiffer break;
67857bed822SMarkus Pfeiffer default:
67957bed822SMarkus Pfeiffer return;
68057bed822SMarkus Pfeiffer }
68157bed822SMarkus Pfeiffer }
68257bed822SMarkus Pfeiffer }
68357bed822SMarkus Pfeiffer
68457bed822SMarkus Pfeiffer static void
show_host_select(uint8_t level)68557bed822SMarkus Pfeiffer show_host_select(uint8_t level)
68657bed822SMarkus Pfeiffer {
68757bed822SMarkus Pfeiffer int force_fs = 0;
68857bed822SMarkus Pfeiffer int error;
68957bed822SMarkus Pfeiffer uint32_t duration = 60;
69057bed822SMarkus Pfeiffer
69157bed822SMarkus Pfeiffer uint16_t dev_vid = 0;
69257bed822SMarkus Pfeiffer uint16_t dev_pid = 0;
69357bed822SMarkus Pfeiffer uint8_t retval;
69457bed822SMarkus Pfeiffer
69557bed822SMarkus Pfeiffer while (1) {
69657bed822SMarkus Pfeiffer
69757bed822SMarkus Pfeiffer error = sysctlbyname("hw.usb.ehci.no_hs", NULL, NULL,
69857bed822SMarkus Pfeiffer &force_fs, sizeof(force_fs));
69957bed822SMarkus Pfeiffer
70057bed822SMarkus Pfeiffer if (error != 0) {
70157bed822SMarkus Pfeiffer printf("WARNING: Could not set non-FS mode "
70257bed822SMarkus Pfeiffer "to %d (error=%d)\n", force_fs, errno);
70357bed822SMarkus Pfeiffer }
70457bed822SMarkus Pfeiffer retval = usb_ts_show_menu(level, "Select Host Mode Test (via LibUSB)",
70557bed822SMarkus Pfeiffer " 1) Select USB device (VID=0x%04x, PID=0x%04x)\n"
70657bed822SMarkus Pfeiffer " 2) Manually enter USB vendor and product ID\n"
70757bed822SMarkus Pfeiffer " 3) Force FULL speed operation: <%s>\n"
70857bed822SMarkus Pfeiffer " 4) Mass Storage (UMASS)\n"
70957bed822SMarkus Pfeiffer " 5) Modem (UMODEM)\n"
71057bed822SMarkus Pfeiffer "10) Start String Descriptor Test\n"
71157bed822SMarkus Pfeiffer "11) Start Port Reset Test\n"
71257bed822SMarkus Pfeiffer "12) Start Set Config Test\n"
71357bed822SMarkus Pfeiffer "13) Start Get Descriptor Test\n"
71457bed822SMarkus Pfeiffer "14) Start Suspend and Resume Test\n"
71557bed822SMarkus Pfeiffer "15) Start Set and Clear Endpoint Stall Test\n"
71657bed822SMarkus Pfeiffer "16) Start Set Alternate Interface Setting Test\n"
71757bed822SMarkus Pfeiffer "17) Start Invalid Control Request Test\n"
71857bed822SMarkus Pfeiffer "30) Duration: <%d> seconds\n"
71957bed822SMarkus Pfeiffer "x) Return to previous menu\n",
72057bed822SMarkus Pfeiffer dev_vid, dev_pid,
72157bed822SMarkus Pfeiffer force_fs ? "YES" : "NO",
72257bed822SMarkus Pfeiffer (int)duration);
72357bed822SMarkus Pfeiffer
72457bed822SMarkus Pfeiffer switch (retval) {
72557bed822SMarkus Pfeiffer case 0:
72657bed822SMarkus Pfeiffer break;
72757bed822SMarkus Pfeiffer case 1:
72857bed822SMarkus Pfeiffer show_host_device_selection(level + 1, &dev_vid, &dev_pid);
72957bed822SMarkus Pfeiffer break;
73057bed822SMarkus Pfeiffer case 2:
73157bed822SMarkus Pfeiffer dev_vid = get_integer() & 0xFFFF;
73257bed822SMarkus Pfeiffer dev_pid = get_integer() & 0xFFFF;
73357bed822SMarkus Pfeiffer break;
73457bed822SMarkus Pfeiffer case 3:
73557bed822SMarkus Pfeiffer force_fs ^= 1;
73657bed822SMarkus Pfeiffer break;
73757bed822SMarkus Pfeiffer case 4:
73857bed822SMarkus Pfeiffer show_host_msc_test(level + 1, dev_vid, dev_pid, duration);
73957bed822SMarkus Pfeiffer break;
74057bed822SMarkus Pfeiffer case 5:
74157bed822SMarkus Pfeiffer show_host_modem_test(level + 1, dev_vid, dev_pid, duration);
74257bed822SMarkus Pfeiffer break;
74357bed822SMarkus Pfeiffer case 10:
74457bed822SMarkus Pfeiffer usb_get_string_desc_test(dev_vid, dev_pid);
74557bed822SMarkus Pfeiffer break;
74657bed822SMarkus Pfeiffer case 11:
74757bed822SMarkus Pfeiffer usb_port_reset_test(dev_vid, dev_pid, duration);
74857bed822SMarkus Pfeiffer break;
74957bed822SMarkus Pfeiffer case 12:
75057bed822SMarkus Pfeiffer usb_set_config_test(dev_vid, dev_pid, duration);
75157bed822SMarkus Pfeiffer break;
75257bed822SMarkus Pfeiffer case 13:
75357bed822SMarkus Pfeiffer usb_get_descriptor_test(dev_vid, dev_pid, duration);
75457bed822SMarkus Pfeiffer break;
75557bed822SMarkus Pfeiffer case 14:
75657bed822SMarkus Pfeiffer usb_suspend_resume_test(dev_vid, dev_pid, duration);
75757bed822SMarkus Pfeiffer break;
75857bed822SMarkus Pfeiffer case 15:
75957bed822SMarkus Pfeiffer usb_set_and_clear_stall_test(dev_vid, dev_pid);
76057bed822SMarkus Pfeiffer break;
76157bed822SMarkus Pfeiffer case 16:
76257bed822SMarkus Pfeiffer usb_set_alt_interface_test(dev_vid, dev_pid);
76357bed822SMarkus Pfeiffer break;
76457bed822SMarkus Pfeiffer case 17:
76557bed822SMarkus Pfeiffer usb_control_ep_error_test(dev_vid, dev_pid);
76657bed822SMarkus Pfeiffer break;
76757bed822SMarkus Pfeiffer case 30:
76857bed822SMarkus Pfeiffer duration = get_integer();
76957bed822SMarkus Pfeiffer break;
77057bed822SMarkus Pfeiffer default:
77157bed822SMarkus Pfeiffer return;
77257bed822SMarkus Pfeiffer }
77357bed822SMarkus Pfeiffer }
77457bed822SMarkus Pfeiffer }
77557bed822SMarkus Pfeiffer
77657bed822SMarkus Pfeiffer static void
show_mode_select(uint8_t level)77757bed822SMarkus Pfeiffer show_mode_select(uint8_t level)
77857bed822SMarkus Pfeiffer {
77957bed822SMarkus Pfeiffer uint8_t retval;
78057bed822SMarkus Pfeiffer
78157bed822SMarkus Pfeiffer while (1) {
78257bed822SMarkus Pfeiffer
78357bed822SMarkus Pfeiffer retval = usb_ts_show_menu(level, "Select Computer Mode",
78457bed822SMarkus Pfeiffer "1) This computer is Running the Device Side\n"
78557bed822SMarkus Pfeiffer "2) This computer is Running the Host Side\n"
78657bed822SMarkus Pfeiffer "x) Return to previous menu\n");
78757bed822SMarkus Pfeiffer
78857bed822SMarkus Pfeiffer switch (retval) {
78957bed822SMarkus Pfeiffer case 0:
79057bed822SMarkus Pfeiffer break;
79157bed822SMarkus Pfeiffer case 1:
79257bed822SMarkus Pfeiffer show_device_select(level + 1);
79357bed822SMarkus Pfeiffer break;
79457bed822SMarkus Pfeiffer case 2:
79557bed822SMarkus Pfeiffer show_host_select(level + 1);
79657bed822SMarkus Pfeiffer break;
79757bed822SMarkus Pfeiffer default:
79857bed822SMarkus Pfeiffer return;
79957bed822SMarkus Pfeiffer }
80057bed822SMarkus Pfeiffer }
80157bed822SMarkus Pfeiffer }
80257bed822SMarkus Pfeiffer
80357bed822SMarkus Pfeiffer int
main(int argc,char ** argv)80457bed822SMarkus Pfeiffer main(int argc, char **argv)
80557bed822SMarkus Pfeiffer {
80657bed822SMarkus Pfeiffer show_mode_select(1);
80757bed822SMarkus Pfeiffer
80857bed822SMarkus Pfeiffer return (0);
80957bed822SMarkus Pfeiffer }
810