aboutsummaryrefslogtreecommitdiff
path: root/src/usb/debug.c
blob: 0c9f443bc03f358d7040cb4c2093b63ea2f0bbf0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "CH58x_common.h"

void print_setuppk(USB_SETUP_REQ *request)
{
	PRINT("Setup request:\n");

	char *dir[] = {"OUT", "IN"};
	char *type[] = {"Standard", "Class", "Vendor", "Reserved Type"};
	char *recipient[] = {
		"Device", "Interface", "Endpoint", "Other","Reserved Recipient"
	};
	char *bRequest[] = {
		"GET_STATUS",
		"CLEAR_FEATURE",
		"Reserved",
		"SET_FEATURE",
		"Reserved",
		"SET_ADDRESS",
		"GET_DESCRIPTOR",
		"SET_DESCRIPTOR",
		"GET_CONFIGURATION",
		"SET_CONFIGURATION",
		"GET_INTERFACE",
		"SET_INTERFACE",
		"SYNCH_FRAME",
	};

	uint8_t t = request->bRequestType;
	uint8_t req = request->bRequest;
	uint8_t type_val = (t & USB_REQ_TYP_MASK) >> 5;
	uint8_t recip_val = t & USB_REQ_RECIP_MASK;
	if (recip_val > 4)
		recip_val = 4;

	PRINT("\t- bRequestType: 0x%02x (%s|%s|%s)\n", t, dir[t>>7], 
				type[type_val],
				recipient[recip_val]);

	PRINT("\t- bRequest: 0x%02x (%s)\n", req, req > 12 ?
				"N/A" : bRequest[req]);
	PRINT("\t- wValue: 0x%04x\n", request->wValue);

	PRINT("\t- wIndex%s: 0x%04x\n", 
				recip_val == USB_REQ_RECIP_INTERF ? " (wInterfaceNumber)" : "",
				request->wIndex);

	PRINT("\t- wLength: 0x%04x\n", request->wLength);
}

void print_status_reg()
{
	char *token_type[] = {
		"OUT", "SOF","IN", "SETUP",
	};
	uint8_t reg = R8_USB_INT_ST;
	uint8_t is_setup = reg & RB_UIS_SETUP_ACT;
	uint8_t toggle = reg & RB_UIS_TOG_OK;
	uint8_t token = (reg & MASK_UIS_TOKEN) >> 4;
	uint8_t ep_num = reg & MASK_UIS_ENDP;
	PRINT("usb: Status reg: 0x%02x (%s|%s|%s|EP:%d)\n", reg, 
				is_setup ? "SETUP??" : "0",
				toggle ? "TOGGLE OK" : "0", token_type[token], ep_num);
}

void print_intflag_reg()
{
	uint8_t reg = R8_USB_INT_FG;
	uint8_t is_nak = reg & RB_U_IS_NAK;
	uint8_t tog_ok = reg & RB_U_TOG_OK;
	uint8_t sie = reg & RB_U_SIE_FREE;
	uint8_t overflow = reg & RB_UIF_FIFO_OV;
	uint8_t suspend = reg & RB_UIF_SUSPEND;
	uint8_t xfer_complete = reg & RB_UIF_TRANSFER;
	uint8_t bus_reset = reg & RB_UIF_BUS_RST;
	PRINT("usb: Interrupt reg: 0x%02x (%s|%s|%s|%s|%s|%s)\n", reg, 
				is_nak ? "NAK received" : "0",
				tog_ok ? "Toggle ok" : "0",
				sie ? "SIE" : "0",
				overflow ? "FIFO overflow" : "0",
				suspend ? "Suspend" : "0",
				xfer_complete ? "Xfer completed" : "0");
}