device.h

00001 /*
00002  * Device functions of the IFD handler library
00003  *
00004  * Copyright (C) 2003, Olaf Kirch <okir@suse.de>
00005  */
00006 
00007 #ifndef OPENCT_DEVICE_H
00008 #define OPENCT_DEVICE_H
00009 
00010 #ifdef __cplusplus
00011 extern "C" {
00012 #endif
00013 
00014 #include <openct/ifd.h>
00015 
00016 struct pollfd; /* for poll_presence */
00017 
00018 /* Types of devices supported by libifd */
00019 enum {
00020         IFD_DEVICE_TYPE_SERIAL = 0,
00021         IFD_DEVICE_TYPE_USB,
00022         IFD_DEVICE_TYPE_PS2,
00023         IFD_DEVICE_TYPE_PCMCIA,
00024         IFD_DEVICE_TYPE_PCMCIA_BLOCK,
00025         IFD_DEVICE_TYPE_OTHER
00026 };
00027 
00028 union ifd_device_params {
00029         struct {
00030                 unsigned int    speed;
00031                 int             bits;
00032                 int             stopbits;
00033                 int             parity;
00034                 int             check_parity;
00035                 unsigned int    rts : 1,
00036                                 dtr : 1;
00037         } serial;
00038         struct {
00039                 int configuration;
00040                 int interface;
00041                 int altsetting;
00042                 int ep_o;
00043                 int ep_i;
00044                 int ep_intr;
00045         } usb;
00046 };
00047 
00048 enum {
00049         IFD_SERIAL_PARITY_NONE = 0,
00050         IFD_SERIAL_PARITY_ODD  = 1,
00051         IFD_SERIAL_PARITY_EVEN = 2
00052 };
00053 #define IFD_SERIAL_PARITY_TOGGLE(n)     ((n)? ((n) ^ 3) : 0)
00054 
00055 #define IFD_MAX_DEVID_PARTS     5
00056 typedef struct ifd_devid {
00057         int             type;
00058         unsigned int    num;
00059         unsigned int    val[IFD_MAX_DEVID_PARTS];
00060 } ifd_devid_t;
00061 
00062 /*
00063  * Control messages to be sent through
00064  * ifd_device_control must always have a guard word
00065  * that contains the device type.
00066  */
00067 enum {
00068         IFD_USB_URB_TYPE_ISO = 0,
00069         IFD_USB_URB_TYPE_INTERRUPT = 1,
00070         IFD_USB_URB_TYPE_CONTROL = 2,
00071         IFD_USB_URB_TYPE_BULK = 3
00072 };
00073 typedef struct ifd_usb_capture ifd_usb_capture_t;
00074 
00075 extern ifd_device_t *   ifd_device_open(const char *);
00076 extern void             ifd_device_close(ifd_device_t *);
00077 extern int              ifd_device_type(ifd_device_t *);
00078 extern int              ifd_device_reset(ifd_device_t *);
00079 extern void             ifd_device_flush(ifd_device_t *);
00080 extern void             ifd_device_send_break(ifd_device_t *, unsigned int);
00081 extern int              ifd_device_identify(const char *, char *, size_t);
00082 extern int              ifd_device_get_parameters(ifd_device_t *,
00083                                 ifd_device_params_t *);
00084 extern int              ifd_device_set_parameters(ifd_device_t *,
00085                                 const ifd_device_params_t *);
00086 extern int              ifd_device_transceive(ifd_device_t *,
00087                                 const void *, size_t,
00088                                 void *, size_t, long);
00089 extern int              ifd_device_send(ifd_device_t *, const unsigned char *, size_t);
00090 extern int              ifd_device_recv(ifd_device_t *, unsigned char *, size_t, long);
00091 extern int              ifd_device_control(ifd_device_t *, void *, size_t);
00092 extern void             ifd_device_set_hotplug(ifd_device_t *, int);
00093 extern int              ifd_device_get_eventfd(ifd_device_t *, short *events);
00094 extern int              ifd_device_poll_presence(ifd_device_t *,
00095                                 struct pollfd *);
00096 
00097 extern int              ifd_device_id_parse(const char *, ifd_devid_t *);
00098 extern int              ifd_device_id_match(const ifd_devid_t *,
00099                                 const ifd_devid_t *);
00100 
00101 extern int              ifd_usb_control(ifd_device_t *,
00102                                 unsigned int requesttype,
00103                                 unsigned int request,
00104                                 unsigned int value,
00105                                 unsigned int index,
00106                                 void *data, size_t len,
00107                                 long timeout);
00108 extern int              ifd_usb_begin_capture(ifd_device_t *,
00109                                 int type, int endpoint,
00110                                 size_t maxpacket,
00111                                 ifd_usb_capture_t **);
00112 extern int              ifd_usb_capture_event(ifd_device_t *,
00113                                 ifd_usb_capture_t *,
00114                                 void *buffer, size_t len);
00115 extern int              ifd_usb_capture(ifd_device_t *,
00116                                 ifd_usb_capture_t *,
00117                                 void *buffer, size_t len,
00118                                 long timeout);
00119 extern int              ifd_usb_end_capture(ifd_device_t *,
00120                                 ifd_usb_capture_t *);
00121 
00122 extern void             ifd_serial_send_break(ifd_device_t *, unsigned int usec);
00123 extern int              ifd_serial_get_cts(ifd_device_t *);
00124 extern int              ifd_serial_get_dsr(ifd_device_t *);
00125 extern int              ifd_serial_get_dtr(ifd_device_t *);
00126 
00127 #ifdef __cplusplus
00128 }
00129 #endif
00130 
00131 #endif /* OPENCT_DEVICE_H */

libp11, Copyright (C) 2005 Olaf Kirch <okir@lst.de>OpenSC-Project.org Logo