source: trunk/src/ifd/usb-descriptors.h @ 660

Revision 660, 4.2 KB checked in by aj, 7 years ago (diff)

Lindent for consistent style

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1/*
2 * USB Descriptor parsing functions
3 *
4 * Copyright (c) 2000-2001 Johannes Erdfelt <johannes@erdfelt.com>
5 * Copyright 2003, Chaskiel Grundman <cg2v@andrew.cmu.edu>
6 *
7 * This header file is purely internal to OpenCT.
8 */
9#ifndef __USB_DESCRIPTORS_H__
10#define __USB_DESCRIPTORS_H__
11
12#include <openct/types.h>
13
14/*
15 * Descriptor types
16 */
17#define IFD_USB_DT_DEVICE                   0x01
18#define IFD_USB_DT_CONFIG                   0x02
19#define IFD_USB_DT_STRING                   0x03
20#define IFD_USB_DT_INTERFACE                0x04
21#define IFD_USB_DT_ENDPOINT                 0x05
22
23/*
24 * Descriptor sizes per descriptor type
25 */
26#define IFD_USB_DT_DEVICE_SIZE              18
27#define IFD_USB_DT_CONFIG_SIZE              9
28#define IFD_USB_DT_INTERFACE_SIZE           9
29#define IFD_USB_DT_ENDPOINT_SIZE            7
30#define IFD_USB_DT_ENDPOINT_AUDIO_SIZE      9   /* Audio extension */
31#define IFD_USB_DT_HUB_NONVAR_SIZE          7
32
33struct ifd_usb_descriptor_header {
34        uint8_t bLength;
35        uint8_t bDescriptorType;
36};
37
38/* String descriptor */
39struct ifd_usb_string_descriptor {
40        uint8_t bLength;
41        uint8_t bDescriptorType;
42        uint16_t wData[1];
43};
44
45/* Endpoint descriptor */
46#define IFD_USB_MAXENDPOINTS        32
47struct ifd_usb_endpoint_descriptor {
48        uint8_t bLength;
49        uint8_t bDescriptorType;
50        uint8_t bEndpointAddress;
51        uint8_t bmAttributes;
52        uint16_t wMaxPacketSize;
53        uint8_t bInterval;
54        uint8_t bRefresh;
55        uint8_t bSynchAddress;
56
57        unsigned char *extra;   /* Extra descriptors */
58        int extralen;
59};
60#define IFD_USB_ENDPOINT_ADDRESS_MASK       0x0f        /* in bEndpointAddress */
61#define IFD_USB_ENDPOINT_DIR_MASK           0x80
62
63#define IFD_USB_ENDPOINT_TYPE_MASK          0x03        /* in bmAttributes */
64#define IFD_USB_ENDPOINT_TYPE_CONTROL       0
65#define IFD_USB_ENDPOINT_TYPE_ISOCHRONOUS   1
66#define IFD_USB_ENDPOINT_TYPE_BULK          2
67#define IFD_USB_ENDPOINT_TYPE_INTERRUPT     3
68
69/* Interface descriptor */
70#define IFD_USB_MAXINTERFACES       32
71struct ifd_usb_interface_descriptor {
72        uint8_t bLength;
73        uint8_t bDescriptorType;
74        uint8_t bInterfaceNumber;
75        uint8_t bAlternateSetting;
76        uint8_t bNumEndpoints;
77        uint8_t bInterfaceClass;
78        uint8_t bInterfaceSubClass;
79        uint8_t bInterfaceProtocol;
80        uint8_t iInterface;
81
82        struct ifd_usb_endpoint_descriptor *endpoint;
83
84        unsigned char *extra;   /* Extra descriptors */
85        int extralen;
86};
87
88#define IFD_USB_MAXALTSETTING       128 /* Hard limit */
89struct ifd_usb_interface {
90        struct ifd_usb_interface_descriptor *altsetting;
91
92        int num_altsetting;
93};
94
95/* Configuration descriptor information.. */
96#define IFD_USB_MAXCONFIG           8
97struct ifd_usb_config_descriptor {
98        uint8_t bLength;
99        uint8_t bDescriptorType;
100        uint16_t wTotalLength;
101        uint8_t bNumInterfaces;
102        uint8_t bConfigurationValue;
103        uint8_t iConfiguration;
104        uint8_t bmAttributes;
105        uint8_t MaxPower;
106
107        struct ifd_usb_interface *interface;
108
109        unsigned char *extra;   /* Extra descriptors */
110        int extralen;
111};
112
113/* Device descriptor */
114struct ifd_usb_device_descriptor {
115        uint8_t bLength;
116        uint8_t bDescriptorType;
117        uint16_t bcdUSB;
118        uint8_t bDeviceClass;
119        uint8_t bDeviceSubClass;
120        uint8_t bDeviceProtocol;
121        uint8_t bMaxPacketSize0;
122        uint16_t idVendor;
123        uint16_t idProduct;
124        uint16_t bcdDevice;
125        uint8_t iManufacturer;
126        uint8_t iProduct;
127        uint8_t iSerialNumber;
128        uint8_t bNumConfigurations;
129};
130#define IFD_USB_REQ_GET_DESCRIPTOR          0x06
131
132#define IFD_USB_TYPE_STANDARD               (0x00 << 5)
133#define IFD_USB_TYPE_CLASS                  (0x01 << 5)
134#define IFD_USB_TYPE_VENDOR                 (0x02 << 5)
135#define IFD_USB_TYPE_RESERVED               (0x03 << 5)
136
137#define IFD_USB_RECIP_DEVICE                0x00
138#define IFD_USB_RECIP_INTERFACE             0x01
139#define IFD_USB_RECIP_ENDPOINT              0x02
140#define IFD_USB_RECIP_OTHER                 0x03
141
142#define IFD_USB_ENDPOINT_IN                 0x80
143#define IFD_USB_ENDPOINT_OUT                0x00
144
145#define IFD_USB_LE16_TO_CPU(x) do { unsigned char *y=(unsigned char *)(&x); x = (y[1]  << 8) | y[0] ; } while(0)
146
147extern int ifd_usb_get_device(ifd_device_t * dev,
148                              struct ifd_usb_device_descriptor *d);
149
150extern int ifd_usb_get_config(ifd_device_t * dev,
151                              int n, struct ifd_usb_config_descriptor *c);
152extern void ifd_usb_free_configuration(struct ifd_usb_config_descriptor *c);
153
154#endif
Note: See TracBrowser for help on using the repository browser.