00001
00002
00003
00004
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;
00017
00018
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
00064
00065
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