Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef __libftdi_hpp__
00030 #define __libftdi_hpp__
00031
00032 #include <list>
00033 #include <string>
00034 #include <boost/shared_ptr.hpp>
00035 #include "ftdi.h"
00036
00037 namespace Ftdi
00038 {
00039
00040
00041 class List;
00042 class Eeprom;
00043
00047 class Context
00048 {
00049
00050 friend class Eeprom;
00051 friend class List;
00052
00053 public:
00056 enum Direction
00057 {
00058 Input,
00059 Output
00060 };
00061
00064 enum ModemCtl
00065 {
00066 Dtr,
00067 Rts
00068 };
00069
00070
00071 Context();
00072 ~Context();
00073
00074
00075 Eeprom* eeprom();
00076 const std::string& vendor();
00077 const std::string& description();
00078 const std::string& serial();
00079
00080
00081 bool is_open();
00082 int open(struct usb_device *dev = 0);
00083 int open(int vendor, int product);
00084 int open(int vendor, int product, const std::string& description, const std::string& serial = std::string(), unsigned int index=0);
00085 int open(const std::string& description);
00086 int close();
00087 int reset();
00088 int flush(int mask = Input|Output);
00089 int set_interface(enum ftdi_interface interface);
00090 void set_usb_device(struct usb_dev_handle *dev);
00091
00092
00093 int set_baud_rate(int baudrate);
00094 int set_line_property(enum ftdi_bits_type bits, enum ftdi_stopbits_type sbit, enum ftdi_parity_type parity);
00095 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);
00096
00097
00098 int read(unsigned char *buf, int size);
00099 int write(unsigned char *buf, int size);
00100 int set_read_chunk_size(unsigned int chunksize);
00101 int set_write_chunk_size(unsigned int chunksize);
00102 int read_chunk_size();
00103 int write_chunk_size();
00104
00105
00106
00107
00108
00109
00110
00111
00112 int set_event_char(unsigned char eventch, unsigned char enable);
00113 int set_error_char(unsigned char errorch, unsigned char enable);
00114 int set_flow_control(int flowctrl);
00115 int set_modem_control(int mask = Dtr|Rts);
00116 int set_latency(unsigned char latency);
00117 int set_dtr(bool state);
00118 int set_rts(bool state);
00119
00120 unsigned short poll_modem_status();
00121 unsigned latency();
00122
00123
00124 int set_bitmode(unsigned char bitmask, unsigned char mode);
00125 int set_bitmode(unsigned char bitmask, enum ftdi_mpsse_mode mode);
00126 int DEPRECATED(bitbang_enable(unsigned char bitmask));
00127 int bitbang_disable();
00128 int read_pins(unsigned char *pins);
00129
00130
00131 char* error_string();
00132
00133 protected:
00134 int get_strings();
00135 int get_strings_and_reopen();
00136
00137
00138 struct ftdi_context* context();
00139 void set_context(struct ftdi_context* context);
00140 void set_usb_device(struct usb_device *dev);
00141
00142 private:
00143 class Private;
00144 boost::shared_ptr<Private> d;
00145 };
00146
00149 class Eeprom
00150 {
00151 public:
00152 Eeprom(Context* parent);
00153 ~Eeprom();
00154
00155 void init_defaults();
00156 void set_size(int size);
00157 int size(unsigned char *eeprom, int maxsize);
00158 int chip_id(unsigned int *chipid);
00159 int build(unsigned char *output);
00160
00161 int read(unsigned char *eeprom);
00162 int write(unsigned char *eeprom);
00163 int read_location(int eeprom_addr, unsigned short *eeprom_val);
00164 int write_location(int eeprom_addr, unsigned short eeprom_val);
00165 int erase();
00166
00167 private:
00168 class Private;
00169 boost::shared_ptr<Private> d;
00170 };
00171
00174 class List
00175 {
00176 public:
00177 List(struct ftdi_device_list* devlist = 0);
00178 ~List();
00179
00180 static List* find_all(int vendor, int product);
00181
00183 typedef std::list<Context> ListType;
00185 typedef ListType::iterator iterator;
00187 typedef ListType::const_iterator const_iterator;
00189 typedef ListType::reverse_iterator reverse_iterator;
00191 typedef ListType::const_reverse_iterator const_reverse_iterator;
00192
00193 iterator begin();
00194 iterator end();
00195 const_iterator begin() const;
00196 const_iterator end() const;
00197
00198 reverse_iterator rbegin();
00199 reverse_iterator rend();
00200 const_reverse_iterator rbegin() const;
00201 const_reverse_iterator rend() const;
00202
00203 ListType::size_type size() const;
00204 bool empty() const;
00205 void clear();
00206
00207 void push_back(const Context& element);
00208 void push_front(const Context& element);
00209
00210 iterator erase(iterator pos);
00211 iterator erase(iterator beg, iterator end);
00212
00213 private:
00214 class Private;
00215 boost::shared_ptr<Private> d;
00216 };
00217
00218 }
00219
00220 #endif