X-Git-Url: http://developer.intra2net.com/git/?p=libftdi;a=blobdiff_plain;f=src%2Fftdi.c;h=59a9eeaa6caa11fc287bf29ab776253a211ea4bb;hp=1f45e95cd481c9965b8801e1e768eef4449663e7;hb=1c5fa36b67bc30742eee94ed3e3648fcd4640f24;hpb=cd2ead2f23cea38de6fdbf2459c79cb4936fbf8d diff --git a/src/ftdi.c b/src/ftdi.c index 1f45e95..59a9eea 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -149,12 +149,23 @@ struct ftdi_context *ftdi_new(void) \retval 0: all fine \retval -1: unknown interface \retval -2: USB device unavailable + \retval -3: Device already open, interface can't be set in that state */ int ftdi_set_interface(struct ftdi_context *ftdi, enum ftdi_interface interface) { if (ftdi == NULL) ftdi_error_return(-2, "USB device unavailable"); + if (ftdi->usb_dev != NULL) + { + int check_interface = interface; + if (check_interface == INTERFACE_ANY) + check_interface = INTERFACE_A; + + if (ftdi->index != check_interface) + ftdi_error_return(-3, "Interface can not be changed on an already open device"); + } + switch (interface) { case INTERFACE_ANY: