File: usbdrv.h

package info (click to toggle)
baycomusb 0.10-12.1
  • links: PTS
  • area: main
  • in suites: squeeze, wheezy
  • size: 6,928 kB
  • ctags: 9,413
  • sloc: ansic: 49,182; asm: 17,572; sh: 3,637; makefile: 585; pascal: 183; sed: 93; perl: 31
file content (173 lines) | stat: -rw-r--r-- 5,859 bytes parent folder | download | duplicates (9)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
/*****************************************************************************/

/*
 *	usbdrv.h  --  Linux USB driver interface.
 *
 *	Copyright (C) 1999-2001
 *          Thomas Sailer (t.sailer@alumni.ethz.ch)
 *
 *	This program is free software; you can redistribute it and/or modify
 *	it under the terms of the GNU General Public License as published by
 *	the Free Software Foundation; either version 2 of the License, or
 *	(at your option) any later version.
 *
 *	This program is distributed in the hope that it will be useful,
 *	but WITHOUT ANY WARRANTY; without even the implied warranty of
 *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *	GNU General Public License for more details.
 *
 *	You should have received a copy of the GNU General Public License
 *	along with this program; if not, write to the Free Software
 *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *  Please note that the GPL allows you to use the driver, NOT the radio.
 *  In order to use the radio, you need a license from the communications
 *  authority of your country.
 *
 *  $Id: usbdrv.h,v 1.3 2000/01/11 11:07:50 tom Exp $	 
 *
 *  History:
 *   0.1  07.01.2000  Created
 *
 */

/*****************************************************************************/

#ifndef _USBDRV_H
#define _USBDRV_H

/* --------------------------------------------------------------------- */

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#define _GNU_SOURCE
#include <sys/types.h>
#include <stdio.h>

/*
 * needed for the URB definition
 */

#ifdef WIN32

struct usbdevfs_iso_packet_desc {
        unsigned int length;
        unsigned int actual_length;
        unsigned int status;
};

struct usbdevfs_urb {
        unsigned char type;
        unsigned char endpoint;
        int status;
        unsigned int flags;
        void *buffer;
        int buffer_length;
        int actual_length;
        int start_frame;
        int number_of_packets;
        int error_count;
        unsigned int signr;  /* signal to be sent on error, -1 if none should be sent */
        void *usercontext;
        struct usbdevfs_iso_packet_desc iso_frame_desc[0];
};

#define USBDEVFS_URB_DISABLE_SPD         0x0001
#define USBDEVFS_URB_ISO_ASAP            0x0002
#define USBDEVFS_URB_QUEUE_BULK          0x0010
#define USBDEVFS_URB_NO_FSBR             0x0020
#define USBDEVFS_URB_ZERO_PACKET         0x0040

#define USBDEVFS_URB_TYPE_ISO              0
#define USBDEVFS_URB_TYPE_INTERRUPT        1
#define USBDEVFS_URB_TYPE_CONTROL          2
#define USBDEVFS_URB_TYPE_BULK             3

#else

#ifdef HAVE_LINUX_USBDEVICE_FS_H
#include <linux/types.h>
#include <linux/usbdevice_fs.h>
#else
#include "usbdevice_fs.h"
#endif

#ifndef USBDEVFS_URB_ZERO_PACKET
#define USBDEVFS_URB_ZERO_PACKET         0x0040
#endif

#endif

/* --------------------------------------------------------------------- */

/*
 * provided externally!
 */

extern int lprintf(unsigned vl, const char *format, ...) __attribute__ ((format (printf, 2, 3)));

/* --------------------------------------------------------------------- */

struct usb_device_descriptor {
        u_int8_t  bLength;
        u_int8_t  bDescriptorType;
        u_int8_t  bcdUSB[2];
        u_int8_t  bDeviceClass;
        u_int8_t  bDeviceSubClass;
        u_int8_t  bDeviceProtocol;
        u_int8_t  bMaxPacketSize0;
        u_int8_t  idVendor[2];
        u_int8_t  idProduct[2];
        u_int8_t  bcdDevice[2];
        u_int8_t  iManufacturer;
        u_int8_t  iProduct;
        u_int8_t  iSerialNumber;
        u_int8_t  bNumConfigurations;
};

#define USB_DT_DEVICE_SIZE sizeof(struct usb_device_descriptor)

struct usb_control_request {
        u_int8_t  requesttype;
        u_int8_t  request;
	u_int8_t  value[2];
	u_int8_t  index[2];
	u_int8_t  length[2];
} __attribute__ ((packed));

#define USB_CONTROL_REQUEST_SIZE sizeof(struct usb_control_request)

/* --------------------------------------------------------------------- */

struct usbdevice;

extern void usb_setmountpoint(const char *mnt);
extern const char *usb_getmountpoint(void);
extern void usb_show_device_descriptor(FILE *f, struct usb_device_descriptor *desc);
extern void usb_close(struct usbdevice *dev);
extern struct usbdevice *usb_open_bynumber(unsigned int busnum, unsigned int devnum, int vendorid, int productid);
extern struct usbdevice *usb_open(int vendorid, int productid, unsigned int timeout, unsigned int index);
extern int usb_control_msg(struct usbdevice *dev, unsigned char requesttype, unsigned char request,
			  unsigned short value, unsigned short index, unsigned short length, void *data, unsigned int timeout);
extern int usb_bulk_msg(struct usbdevice *dev, unsigned int ep, unsigned int dlen, void *data, unsigned int timeout);
extern int usb_resetep(struct usbdevice *dev, unsigned int ep);
extern int usb_setconfiguration(struct usbdevice *dev, unsigned int configuration);
extern int usb_setinterface(struct usbdevice *dev, unsigned int intf, unsigned int altsetting);
extern int usb_getdevicedescriptor(struct usbdevice *dev, struct usb_device_descriptor *desc);
extern int usb_claiminterface(struct usbdevice *dev, unsigned int intf);
extern int usb_releaseinterface(struct usbdevice *dev, unsigned int intf);
extern int usb_discsignal(struct usbdevice *dev, unsigned int signr, void *context);
extern int usb_submiturb(struct usbdevice *dev, struct usbdevfs_urb *urb);
extern int usb_discardurb(struct usbdevice *dev, struct usbdevfs_urb *urb);
extern struct usbdevfs_urb *usb_reapurb(struct usbdevice *dev, int timeout); /* timeout: -1 infinity, 0 nonblocking, otherwise ms */

#if defined(WIN32)
extern HANDLE usb_getfd(struct usbdevice *dev);
#else
extern int usb_getfd(struct usbdevice *dev);
#endif

/* ---------------------------------------------------------------------- */
#endif /* _USBDRV_H */