• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2006-2008, Haiku Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #ifndef _USB_RAW_H_
7 #define _USB_RAW_H_
8 
9 #include <USB3.h>
10 
11 #define B_USB_RAW_PROTOCOL_VERSION	0x0015
12 #define B_USB_RAW_ACTIVE_ALTERNATE	0xffffffff
13 
14 typedef enum {
15 	B_USB_RAW_COMMAND_GET_VERSION = 0x1000,
16 
17 	B_USB_RAW_COMMAND_GET_DEVICE_DESCRIPTOR = 0x2000,
18 	B_USB_RAW_COMMAND_GET_CONFIGURATION_DESCRIPTOR,
19 	B_USB_RAW_COMMAND_GET_INTERFACE_DESCRIPTOR,
20 	B_USB_RAW_COMMAND_GET_ENDPOINT_DESCRIPTOR,
21 	B_USB_RAW_COMMAND_GET_STRING_DESCRIPTOR,
22 	B_USB_RAW_COMMAND_GET_GENERIC_DESCRIPTOR,
23 	B_USB_RAW_COMMAND_GET_ALT_INTERFACE_COUNT,
24 	B_USB_RAW_COMMAND_GET_ACTIVE_ALT_INTERFACE_INDEX,
25 	B_USB_RAW_COMMAND_GET_INTERFACE_DESCRIPTOR_ETC,
26 	B_USB_RAW_COMMAND_GET_ENDPOINT_DESCRIPTOR_ETC,
27 	B_USB_RAW_COMMAND_GET_GENERIC_DESCRIPTOR_ETC,
28 
29 	B_USB_RAW_COMMAND_SET_CONFIGURATION = 0x3000,
30 	B_USB_RAW_COMMAND_SET_FEATURE,
31 	B_USB_RAW_COMMAND_CLEAR_FEATURE,
32 	B_USB_RAW_COMMAND_GET_STATUS,
33 	B_USB_RAW_COMMAND_GET_DESCRIPTOR,
34 	B_USB_RAW_COMMAND_SET_ALT_INTERFACE,
35 
36 	B_USB_RAW_COMMAND_CONTROL_TRANSFER = 0x4000,
37 	B_USB_RAW_COMMAND_INTERRUPT_TRANSFER,
38 	B_USB_RAW_COMMAND_BULK_TRANSFER,
39 	B_USB_RAW_COMMAND_ISOCHRONOUS_TRANSFER
40 } usb_raw_command_id;
41 
42 
43 typedef enum {
44 	B_USB_RAW_STATUS_SUCCESS = 0,
45 
46 	B_USB_RAW_STATUS_FAILED,
47 	B_USB_RAW_STATUS_ABORTED,
48 	B_USB_RAW_STATUS_STALLED,
49 	B_USB_RAW_STATUS_CRC_ERROR,
50 	B_USB_RAW_STATUS_TIMEOUT,
51 
52 	B_USB_RAW_STATUS_INVALID_CONFIGURATION,
53 	B_USB_RAW_STATUS_INVALID_INTERFACE,
54 	B_USB_RAW_STATUS_INVALID_ENDPOINT,
55 	B_USB_RAW_STATUS_INVALID_STRING,
56 
57 	B_USB_RAW_STATUS_NO_MEMORY
58 } usb_raw_command_status;
59 
60 
61 typedef union {
62 	struct {
63 		status_t status;
64 	} version;
65 
66 	struct {
67 		status_t status;
68 		usb_device_descriptor *descriptor;
69 	} device;
70 
71 	struct {
72 		status_t status;
73 		usb_configuration_descriptor *descriptor;
74 		uint32 config_index;
75 	} config;
76 
77 	struct {
78 		status_t status;
79 		uint32 alternate_info;
80 		uint32 config_index;
81 		uint32 interface_index;
82 	} alternate;
83 
84 	struct {
85 		status_t status;
86 		usb_interface_descriptor *descriptor;
87 		uint32 config_index;
88 		uint32 interface_index;
89 	} interface;
90 
91 	struct {
92 		status_t status;
93 		usb_interface_descriptor *descriptor;
94 		uint32 config_index;
95 		uint32 interface_index;
96 		uint32 alternate_index;
97 	} interface_etc;
98 
99 	struct {
100 		status_t status;
101 		usb_endpoint_descriptor *descriptor;
102 		uint32 config_index;
103 		uint32 interface_index;
104 		uint32 endpoint_index;
105 	} endpoint;
106 
107 	struct {
108 		status_t status;
109 		usb_endpoint_descriptor *descriptor;
110 		uint32 config_index;
111 		uint32 interface_index;
112 		uint32 alternate_index;
113 		uint32 endpoint_index;
114 	} endpoint_etc;
115 
116 	struct {
117 		status_t status;
118 		usb_descriptor *descriptor;
119 		uint32 config_index;
120 		uint32 interface_index;
121 		uint32 generic_index;
122 		size_t length;
123 	} generic;
124 
125 	struct {
126 		status_t status;
127 		usb_descriptor *descriptor;
128 		uint32 config_index;
129 		uint32 interface_index;
130 		uint32 alternate_index;
131 		uint32 generic_index;
132 		size_t length;
133 	} generic_etc;
134 
135 	struct {
136 		status_t status;
137 		usb_string_descriptor *descriptor;
138 		uint32 string_index;
139 		size_t length;
140 	} string;
141 
142 	struct {
143 		status_t status;
144 		uint8 type;
145 		uint8 index;
146 		uint16 language_id;
147 		void *data;
148 		size_t length;
149 	} descriptor;
150 
151 	struct {
152 		status_t status;
153 		uint8 request_type;
154 		uint8 request;
155 		uint16 value;
156 		uint16 index;
157 		uint16 length;
158 		void *data;
159 	} control;
160 
161 	struct {
162 		status_t status;
163 		uint32 interface;
164 		uint32 endpoint;
165 		void *data;
166 		size_t length;
167 	} transfer;
168 
169 	struct {
170 		status_t status;
171 		uint32 interface;
172 		uint32 endpoint;
173 		void *data;
174 		size_t length;
175 		usb_iso_packet_descriptor *packet_descriptors;
176 		uint32 packet_count;
177 	} isochronous;
178 } usb_raw_command;
179 
180 #endif // _USB_RAW_H_
181