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_poll_presence(ifd_device_t *,
00094 struct pollfd *);
00095
00096 extern int ifd_device_id_parse(const char *, ifd_devid_t *);
00097 extern int ifd_device_id_match(const ifd_devid_t *,
00098 const ifd_devid_t *);
00099
00100 extern int ifd_usb_control(ifd_device_t *,
00101 unsigned int requesttype,
00102 unsigned int request,
00103 unsigned int value,
00104 unsigned int index,
00105 void *data, size_t len,
00106 long timeout);
00107 extern int ifd_usb_begin_capture(ifd_device_t *,
00108 int type, int endpoint,
00109 size_t maxpacket,
00110 ifd_usb_capture_t **);
00111 extern int ifd_usb_capture(ifd_device_t *,
00112 ifd_usb_capture_t *,
00113 void *buffer, size_t len,
00114 long timeout);
00115 extern int ifd_usb_end_capture(ifd_device_t *,
00116 ifd_usb_capture_t *);
00117
00118 extern void ifd_serial_send_break(ifd_device_t *, unsigned int usec);
00119 extern int ifd_serial_get_cts(ifd_device_t *);
00120 extern int ifd_serial_get_dsr(ifd_device_t *);
00121 extern int ifd_serial_get_dtr(ifd_device_t *);
00122
00123 #ifdef __cplusplus
00124 }
00125 #endif
00126
00127 #endif