QList <DMXUSBWidget*> QLCFTDI::widgets() { QList <DMXUSBWidget*> widgetList; quint32 input_id = 0; struct ftdi_device_list* list = 0; struct ftdi_context ftdi; ftdi_init(&ftdi); ftdi_usb_find_all(&ftdi, &list, QLCFTDI::VID, QLCFTDI::PID); while (list != NULL) { #ifdef LIBFTDI1 struct libusb_device* dev = list->dev; #else struct usb_device* dev = list->dev; #endif Q_ASSERT(dev != NULL); char serial[256]; char name[256]; char vendor[256]; ftdi_usb_get_strings(&ftdi, dev, vendor, sizeof(vendor), name, sizeof(name), serial, sizeof(serial)); QString ser(serial); QString nme(name); QString ven(vendor); QMap <QString,QVariant> types(typeMap()); qDebug() << "serial: " << ser << "name:" << nme << "vendor:" << ven; if (types.contains(ser) == true) { // Force a widget with a specific serial to either type DMXUSBWidget::Type type = (DMXUSBWidget::Type) types[ser].toInt(); switch (type) { case DMXUSBWidget::OpenTX: widgetList << new EnttecDMXUSBOpen(serial, name, vendor); break; case DMXUSBWidget::ProRX: { EnttecDMXUSBProRX* prorx = new EnttecDMXUSBProRX(serial, name, vendor, input_id++); widgetList << prorx; break; } case DMXUSBWidget::ProMk2: { EnttecDMXUSBProTX* protx = new EnttecDMXUSBProTX(serial, name, vendor, 1); widgetList << protx; widgetList << new EnttecDMXUSBProTX(serial, name, vendor, 2, protx->ftdi()); EnttecDMXUSBProRX* prorx = new EnttecDMXUSBProRX(serial, name, vendor, input_id++, protx->ftdi()); widgetList << prorx; break; } case DMXUSBWidget::UltraProTx: { UltraDMXUSBProTx* protx = new UltraDMXUSBProTx(serial, name, vendor, 1); widgetList << protx; widgetList << new UltraDMXUSBProTx(serial, name, vendor, 2, protx->ftdi()); EnttecDMXUSBProRX* prorx = new EnttecDMXUSBProRX(serial, name, vendor, input_id++, protx->ftdi()); widgetList << prorx; break; } case DMXUSBWidget::VinceTX: widgetList << new VinceUSBDMX512TX(serial, name, vendor); break; default: case DMXUSBWidget::ProTX: widgetList << new EnttecDMXUSBProTX(serial, name, vendor); break; } } else if (nme.toUpper().contains("PRO MK2") == true) { EnttecDMXUSBProTX* protx = new EnttecDMXUSBProTX(serial, name, vendor, 1); widgetList << protx; widgetList << new EnttecDMXUSBProTX(serial, name, vendor, 2, protx->ftdi()); EnttecDMXUSBProRX* prorx = new EnttecDMXUSBProRX(serial, name, vendor, input_id++, protx->ftdi()); widgetList << prorx; } else if (nme.toUpper().contains("DMX USB PRO")) { /** Check if the device responds to label 77 and 78, so it might be a DMXking adapter */ int ESTAID = 0; int DEVID = 0; QString manName = readLabel(&ftdi, name, serial, USB_DEVICE_MANUFACTURER, &ESTAID); qDebug() << "--------> Device Manufacturer: " << manName; QString devName = readLabel(&ftdi, name, serial, USB_DEVICE_NAME, &DEVID); qDebug() << "--------> Device Name: " << devName; qDebug() << "--------> ESTA Code: " << QString::number(ESTAID, 16) << ", Device ID: " << QString::number(DEVID, 16); if (ESTAID == DMXKING_ESTA_ID) { if (DEVID == ULTRADMX_PRO_DEV_ID) { UltraDMXUSBProTx* protxP1 = new UltraDMXUSBProTx(serial, name, vendor, 1); protxP1->setRealName(devName); widgetList << protxP1; UltraDMXUSBProTx* protxP2 = new UltraDMXUSBProTx(serial, name, vendor, 2, protxP1->ftdi()); protxP2->setRealName(devName); widgetList << protxP2; EnttecDMXUSBProRX* prorx = new EnttecDMXUSBProRX(serial, name, vendor, input_id++, protxP1->ftdi()); prorx->setRealName(devName); widgetList << prorx; } else { EnttecDMXUSBProTX* protx = new EnttecDMXUSBProTX(serial, name, vendor); protx->setRealName(devName); widgetList << protx; } } else { /* This is probably a Enttec DMX USB Pro widget */ EnttecDMXUSBProTX* protx = new EnttecDMXUSBProTX(serial, name, vendor); widgetList << protx; EnttecDMXUSBProRX* prorx = new EnttecDMXUSBProRX(serial, name, vendor, input_id++, protx->ftdi()); widgetList << prorx; } } else if (nme.toUpper().contains("USB-DMX512 CONVERTER") == true) { widgetList << new VinceUSBDMX512TX(serial, name, vendor); } else { /* This is probably an Open DMX USB widget */ widgetList << new EnttecDMXUSBOpen(serial, name, vendor, 0); } list = list->next; } /* Search for DMX4ALL devices now */ ftdi_usb_find_all(&ftdi, &list, QLCFTDI::VID, QLCFTDI::DMX4ALLPID); while (list != NULL) { #ifdef LIBFTDI1 struct libusb_device* dev = list->dev; #else struct usb_device* dev = list->dev; #endif Q_ASSERT(dev != NULL); char serial[256]; char name[256]; char vendor[256]; ftdi_usb_get_strings(&ftdi, dev, vendor, sizeof(vendor), name, sizeof(name), serial, sizeof(serial)); QString ser(serial); QString nme(name); QString ven(vendor); qDebug() << "serial: " << ser << "name:" << nme << "vendor:" << ven; widgetList << new DMX4ALL(ser, nme, ven); list = list->next; } ftdi_deinit(&ftdi); return widgetList; }
QList <EnttecDMXUSBWidget*> QLCFTDI::widgets() { QList <EnttecDMXUSBWidget*> widgetList; struct ftdi_device_list* list = 0; struct ftdi_context ftdi; ftdi_init(&ftdi); ftdi_usb_find_all(&ftdi, &list, QLCFTDI::VID, QLCFTDI::PID); while (list != NULL) { struct usb_device* dev = list->dev; Q_ASSERT(dev != NULL); char serial[256]; char name[256]; char vendor[256]; ftdi_usb_get_strings(&ftdi, dev, vendor, sizeof(vendor), name, sizeof(name), serial, sizeof(serial)); QString ser(serial); QString ven(vendor); QMap <QString,QVariant> types(typeMap()); if (types.contains(ser) == true) { // Force a widget with a specific serial to either type EnttecDMXUSBWidget::Type type = (EnttecDMXUSBWidget::Type) types[ser].toInt(); switch (type) { case EnttecDMXUSBWidget::OpenTX: widgetList << new EnttecDMXUSBOpen(serial, name); break; case EnttecDMXUSBWidget::ProRX: { EnttecDMXUSBProRX* prorx = new EnttecDMXUSBProRX(serial, name, widgetList.size()); widgetList << prorx; break; } default: case EnttecDMXUSBWidget::ProTX: widgetList << new EnttecDMXUSBProTX(serial, name); break; } } else if (ven.toUpper().contains("FTDI") == true) { /* This is probably an Open DMX USB widget */ widgetList << new EnttecDMXUSBOpen(serial, name, 0); } else { /* This is probably a DMX USB Pro widget in TX mode */ widgetList << new EnttecDMXUSBProTX(serial, name); } list = list->next; } ftdi_deinit(&ftdi); return widgetList; }