libftdi: (tomj) increase version, add BOOST_CPPFLAGS/BOOST_LDFLAGS to ftdipp
[libftdi] / ftdipp / ftdi.hpp
CommitLineData
cdf448f6
TJ
1/***************************************************************************
2 ftdi.hpp - C++ wrapper for libftdi
3 -------------------
4 begin : Mon Oct 13 2008
5 copyright : (C) 2008 by Marek VavruĊĦa
6 email : opensource@intra2net.com and marek@vavrusa.com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU Lesser General Public License *
13 * version 2.1 as published by the Free Software Foundation; *
14 * *
15 ***************************************************************************/
16
17#ifndef __libftdi_hpp__
18#define __libftdi_hpp__
20b1459a
TJ
19
20#include <list>
21#include <string>
22#include "ftdi.h"
23
24namespace Ftdi
25{
26
27/* Forward declarations*/
28class List;
29class Eeprom;
30
31/*! \brief FTDI device context.
32 * Represents single FTDI device context.
33 */
34class Context
35{
cdf448f6
TJ
36 /* Friends */
37 friend class Eeprom;
38 friend class List;
39
40public:
41 /*! \brief Direction flags for flush().
42 */
43 enum Direction
44 {
45 Input,
46 Output
47 };
48
49 /*! \brief Modem control flags.
50 */
51 enum ModemCtl
52 {
53 Dtr,
54 Rts
55 };
56
57 /* Constructor, Destructor */
58 Context();
59 ~Context();
60
61 /* Properties */
62 Eeprom* eeprom();
63 const std::string& vendor();
64 const std::string& description();
65 const std::string& serial();
66
67 /* Device manipulators */
68 bool is_open();
69 int open(struct usb_device *dev = 0);
70 int open(int vendor, int product, const std::string& description = std::string(), const std::string& serial = std::string());
71 int close();
72 int reset();
73 int flush(int mask = Input|Output);
74 int set_interface(enum ftdi_interface interface);
75 void set_usb_device(struct usb_dev_handle *dev);
76
77 /* Line manipulators */
78 int set_baud_rate(int baudrate);
79 int set_line_property(enum ftdi_bits_type bits, enum ftdi_stopbits_type sbit, enum ftdi_parity_type parity);
80 int set_line_property(enum ftdi_bits_type bits, enum ftdi_stopbits_type sbit, enum ftdi_parity_type parity, enum ftdi_break_type break_type);
81
82 /* I/O */
83 int read(unsigned char *buf, int size);
84 int write(unsigned char *buf, int size);
85 int set_read_chunk_size(unsigned int chunksize);
86 int set_write_chunk_size(unsigned int chunksize);
87 int read_chunk_size();
88 int write_chunk_size();
89
90 /* Async IO
91 TODO: should wrap?
92 int writeAsync(unsigned char *buf, int size);
93 void asyncComplete(int wait_for_more);
94 */
95
96 /* Flow control */
97 int set_event_char(unsigned char eventch, unsigned char enable);
98 int set_error_char(unsigned char errorch, unsigned char enable);
99 int set_flow_control(int flowctrl);
100 int set_modem_control(int mask = Dtr|Rts);
101 int set_latency(unsigned char latency);
102 int set_dtr(bool state);
103 int set_rts(bool state);
104
105 unsigned short poll_modem_status();
106 unsigned latency();
107
108 /* BitBang mode */
109 int set_bitmode(unsigned char bitmask, unsigned char mode);
110 int bitbang_enable(unsigned char bitmask);
111 int bitbang_disable();
112 int read_pins(unsigned char *pins);
113
114 /* Misc */
115 char* error_string();
116
117protected:
118 int get_strings();
119
120 /* Properties */
121 struct ftdi_context* context();
122 void set_context(struct ftdi_context* context);
123 void set_usb_device(struct usb_device *dev);
124
125private:
126 class Private;
127 Private *d;
128
129 /* Disable copy constructor */
130 Context(const Context &) {}
131 Context& operator=(const Context &) {}
20b1459a
TJ
132};
133
134/*! \brief Device EEPROM.
135 */
136class Eeprom
137{
cdf448f6
TJ
138public:
139 Eeprom(Context* parent);
140 ~Eeprom();
141
142 void init_defaults();
143 void set_size(int size);
144 int size(unsigned char *eeprom, int maxsize);
145 int chip_id(unsigned int *chipid);
146 int build(unsigned char *output);
147 int read(unsigned char *eeprom);
148 int write(unsigned char *eeprom);
149 int erase();
150
151private:
152 class Private;
153 Private *d;
20b1459a
TJ
154};
155
156typedef std::list<Context*> ListBase;
157
158/*! \brief Device list.
159 */
160class List : public ListBase
161{
cdf448f6
TJ
162public:
163 List(struct ftdi_device_list* devlist = 0);
164 ~List();
20b1459a 165
cdf448f6 166 static List* find_all(int vendor, int product);
20b1459a 167
cdf448f6
TJ
168private:
169 class Private;
170 Private *d;
20b1459a
TJ
171};
172
173}
174
175#endif