11 : ftdi(0), dev(0), open(false)
16 struct ftdi_context* ftdi;
17 struct usb_device* dev;
20 std::string description;
24 /*! \brief Constructor.
32 /*! \brief Destructor.
43 bool Context::is_open()
48 int Context::open(int vendor, int product, const std::string& description, const std::string& serial)
51 if(description.empty() && serial.empty())
52 ret = ftdi_usb_open(d->ftdi, vendor, product);
54 ret = ftdi_usb_open_desc(d->ftdi, vendor, product, description.c_str(), serial.c_str());
56 d->dev = usb_device(d->ftdi->usb_dev);
58 if((ret = ftdi_usb_open_dev(d->ftdi, d->dev)) >= 0)
67 int Context::open(struct usb_device *dev)
77 if((ret = ftdi_usb_open_dev(d->ftdi, d->dev)) >= 0)
89 return ftdi_usb_close(d->ftdi);
94 return ftdi_usb_reset(d->ftdi);
97 int Context::flush(int mask)
101 ret &= ftdi_usb_purge_rx_buffer(d->ftdi);
103 ret &= ftdi_usb_purge_tx_buffer(d->ftdi);
108 int Context::set_interface(enum ftdi_interface interface)
110 return ftdi_set_interface(d->ftdi, interface);
113 void Context::set_usb_device(struct usb_dev_handle *dev)
115 ftdi_set_usbdev(d->ftdi, dev);
116 d->dev = usb_device(dev);
119 int Context::set_baud_rate(int baudrate)
121 return ftdi_set_baudrate(d->ftdi, baudrate);
124 int Context::set_line_property(enum ftdi_bits_type bits, enum ftdi_stopbits_type sbit, enum ftdi_parity_type parity)
126 return ftdi_set_line_property(d->ftdi, bits, sbit, parity);
129 int Context::set_line_property(enum ftdi_bits_type bits, enum ftdi_stopbits_type sbit, enum ftdi_parity_type parity, enum ftdi_break_type break_type)
131 return ftdi_set_line_property2(d->ftdi, bits, sbit, parity, break_type);
134 int Context::read(unsigned char *buf, int size)
136 return ftdi_read_data(d->ftdi, buf, size);
139 int Context::set_read_chunk_size(unsigned int chunksize)
141 return ftdi_read_data_set_chunksize(d->ftdi, chunksize);
144 int Context::read_chunk_size()
147 if(ftdi_read_data_get_chunksize(d->ftdi, &chunk) < 0)
154 int Context::write(unsigned char *buf, int size)
156 return ftdi_write_data(d->ftdi, buf, size);
159 int Context::set_write_chunk_size(unsigned int chunksize)
161 return ftdi_write_data_set_chunksize(d->ftdi, chunksize);
164 int Context::write_chunk_size()
167 if(ftdi_write_data_get_chunksize(d->ftdi, &chunk) < 0)
173 int Context::set_flow_control(int flowctrl)
175 return ftdi_setflowctrl(d->ftdi, flowctrl);
178 int Context::set_modem_control(int mask)
180 int dtr = 0, rts = 0;
187 return ftdi_setdtr_rts(d->ftdi, dtr, rts);
190 int Context::set_dtr(bool state)
192 return ftdi_setdtr(d->ftdi, state);
195 int Context::set_rts(bool state)
197 return ftdi_setrts(d->ftdi, state);
200 int Context::set_latency(unsigned char latency)
202 return ftdi_set_latency_timer(d->ftdi, latency);
205 unsigned Context::latency()
207 unsigned char latency = 0;
208 ftdi_get_latency_timer(d->ftdi, &latency);
212 unsigned short Context::poll_modem_status()
214 unsigned short status = 0;
215 ftdi_poll_modem_status(d->ftdi, &status);
220 int Context::set_event_char(unsigned char eventch, unsigned char enable)
222 return ftdi_set_event_char(d->ftdi, eventch, enable);
225 int Context::set_error_char(unsigned char errorch, unsigned char enable)
227 return ftdi_set_error_char(d->ftdi, errorch, enable);
230 int Context::bitbang_enable(unsigned char bitmask)
232 return ftdi_enable_bitbang(d->ftdi, bitmask);
235 int Context::bitbang_disable()
237 return ftdi_disable_bitbang(d->ftdi);
240 int Context::set_bitmode(unsigned char bitmask, unsigned char mode)
242 return ftdi_set_bitmode(d->ftdi, bitmask, mode);
245 int Context::read_pins(unsigned char *pins)
247 return ftdi_read_pins(d->ftdi, pins);
250 char* Context::error_string()
252 return ftdi_get_error_string(d->ftdi);
255 int Context::get_strings()
258 char vendor[512], desc[512], serial[512];
260 int ret = ftdi_usb_get_strings(d->ftdi, d->dev, vendor, 512, desc, 512, serial, 512);
266 d->description = desc;
275 * \brief Device strings properties.
277 const std::string& Context::vendor()
282 const std::string& Context::description()
284 return d->description;
287 const std::string& Context::serial()
292 void Context::set_context(struct ftdi_context* context)
298 void Context::set_usb_device(struct usb_device *dev)
303 struct ftdi_context* Context::context()
308 class Eeprom::Private
315 struct ftdi_eeprom eeprom;
316 struct ftdi_context* context;
319 Eeprom::Eeprom(Context* parent)
320 : d ( new Private() )
322 d->context = parent->context();
330 void Eeprom::init_defaults()
332 return ftdi_eeprom_initdefaults(&d->eeprom);
335 void Eeprom::set_size(int size)
337 return ftdi_eeprom_setsize(d->context, &d->eeprom, size);
340 int Eeprom::size(unsigned char *eeprom, int maxsize)
342 return ftdi_read_eeprom_getsize(d->context, eeprom, maxsize);
345 int Eeprom::chip_id(unsigned int *chipid)
347 return ftdi_read_chipid(d->context, chipid);
350 int Eeprom::build(unsigned char *output)
352 return ftdi_eeprom_build(&d->eeprom, output);
355 int Eeprom::read(unsigned char *eeprom)
357 return ftdi_read_eeprom(d->context, eeprom);
360 int Eeprom::write(unsigned char *eeprom)
362 return ftdi_write_eeprom(d->context, eeprom);
367 return ftdi_erase_eeprom(d->context);
377 struct ftdi_device_list* list;
380 List::List(struct ftdi_device_list* devlist)
381 : ListBase(), d( new Private() )
387 for(d->list = devlist; d->list != 0; d->list = d->list->next)
390 c->set_usb_device(d->list->dev);
401 // Deallocate instances
402 for(iterator it = begin(); it != end(); it++)
407 ftdi_list_free(&d->list);
413 List* List::find_all(int vendor, int product)
415 struct ftdi_device_list* dlist = 0;
416 struct ftdi_context ftdi;
418 ftdi_usb_find_all(&ftdi, &dlist, vendor, product);
420 return new List(dlist);