diff --git a/sources/leddevice/dev_ftdi/LedDeviceAPA102_ftdi.cpp b/sources/leddevice/dev_ftdi/LedDeviceAPA102_ftdi.cpp index 2b0cd94f5..69a6165c8 100644 --- a/sources/leddevice/dev_ftdi/LedDeviceAPA102_ftdi.cpp +++ b/sources/leddevice/dev_ftdi/LedDeviceAPA102_ftdi.cpp @@ -40,14 +40,6 @@ void LedDeviceAPA102_ftdi::CreateHeader() int LedDeviceAPA102_ftdi::write(const std::vector &ledValues) { - if (_ledCount != ledValues.size()) - { - Warning(_log, "APA102 led's number has changed (old: %d, new: %d). Rebuilding buffer.", _ledCount, ledValues.size()); - _ledCount = ledValues.size(); - - CreateHeader(); - } - for (signed iLed = 0; iLed < static_cast(_ledCount); ++iLed) { const ColorRgb &rgb = ledValues[iLed]; diff --git a/sources/leddevice/dev_ftdi/LedDeviceSk6812_ftdi.cpp b/sources/leddevice/dev_ftdi/LedDeviceSk6812_ftdi.cpp index b52c0667a..1a81e169c 100644 --- a/sources/leddevice/dev_ftdi/LedDeviceSk6812_ftdi.cpp +++ b/sources/leddevice/dev_ftdi/LedDeviceSk6812_ftdi.cpp @@ -52,15 +52,6 @@ int LedDeviceSk6812_ftdi::write(const std::vector &ledValues) unsigned spi_ptr = 0; const int SPI_BYTES_PER_LED = sizeof(ColorRgbw) * SPI_BYTES_PER_COLOUR; - if (_ledCount != ledValues.size()) - { - Warning(_log, "Sk6812SPI led's number has changed (old: %d, new: %d). Rebuilding buffer.", _ledCount, ledValues.size()); - _ledCount = ledValues.size(); - - const int SPI_FRAME_END_LATCH_BYTES = 3; - _ledBuffer.resize(0, 0x00); - _ledBuffer.resize(_ledRGBWCount * SPI_BYTES_PER_COLOUR + SPI_FRAME_END_LATCH_BYTES, 0x00); - } ColorRgbw temp_rgbw; ColorRgb scaled_color; for (const ColorRgb &color : ledValues) diff --git a/sources/leddevice/dev_ftdi/ProviderFtdi.cpp b/sources/leddevice/dev_ftdi/ProviderFtdi.cpp index 83caad621..6f1159728 100644 --- a/sources/leddevice/dev_ftdi/ProviderFtdi.cpp +++ b/sources/leddevice/dev_ftdi/ProviderFtdi.cpp @@ -24,8 +24,6 @@ namespace Pin // Use these pins as outputs const unsigned char pinDirection = Pin::SK | Pin::DO | Pin::CS | Pin::L0; -const QString ProviderFtdi::AUTO_SETTING = QString("auto"); - ProviderFtdi::ProviderFtdi(const QJsonObject &deviceConfig) : LedDevice(deviceConfig), _ftdic(NULL), @@ -40,7 +38,7 @@ bool ProviderFtdi::init(const QJsonObject &deviceConfig) if (LedDevice::init(deviceConfig)) { _baudRate_Hz = deviceConfig["rate"].toInt(_baudRate_Hz); - _deviceName = deviceConfig["output"].toString(AUTO_SETTING); + _deviceName = deviceConfig["output"].toString(""); Debug(_log, "_baudRate_Hz [%d]", _baudRate_Hz); Debug(_log, "_deviceName [%s]", QSTRING_CSTR(_deviceName)); @@ -50,55 +48,19 @@ bool ProviderFtdi::init(const QJsonObject &deviceConfig) return isInitOK; } -int ProviderFtdi::openDevice() -{ - _ftdic = ftdi_new(); - - bool autoDiscovery = (QString::compare(_deviceName, ProviderFtdi::AUTO_SETTING, Qt::CaseInsensitive) == 0); - Debug(_log, "Opening FTDI device=%s autoDiscovery=%s", QSTRING_CSTR(_deviceName), autoDiscovery ? "true" : "false"); - if (autoDiscovery) - { - struct ftdi_device_list *devlist; - int devicesDetected = 0; - if ((devicesDetected = ftdi_usb_find_all(_ftdic, &devlist, ANY_FTDI_VENDOR, ANY_FTDI_PRODUCT)) < 0) - { - setInError(ftdi_get_error_string(_ftdic)); - return -1; - } - if (devicesDetected == 0) - { - setInError("No ftdi devices detected"); - return 0; - } - - if (ftdi_usb_open_dev(_ftdic, devlist[0].dev) < 0) - { - setInError(ftdi_get_error_string(_ftdic)); - ftdi_list_free(&devlist); - return -1; - } - - ftdi_list_free(&devlist); - return 1; - } - else - { - if (ftdi_usb_open_string(_ftdic, QSTRING_CSTR(_deviceName)) < 0) - { - setInError(ftdi_get_error_string(_ftdic)); - return -1; - } - return 1; - } -} int ProviderFtdi::open() { int rc = 0; - if ((rc = openDevice()) != 1) - { - return -1; - } + _ftdic = ftdi_new(); + + Debug(_log, "Opening FTDI device=%s", QSTRING_CSTR(_deviceName)); + + if ((rc = ftdi_usb_open_string(_ftdic, QSTRING_CSTR(_deviceName))) < 0) + { + setInError(ftdi_get_error_string(_ftdic)); + return rc; + } /* doing this disable resets things if they were in a bad state */ if ((rc = ftdi_disable_bitbang(_ftdic)) < 0) @@ -208,9 +170,6 @@ QJsonObject ProviderFtdi::discover(const QJsonObject & /*params*/) struct ftdi_device_list *devlist; struct ftdi_context *ftdic; - QJsonObject autoDevice = QJsonObject{{"value", AUTO_SETTING}, {"name", "Auto"}}; - deviceList.push_back(autoDevice); - ftdic = ftdi_new(); if (ftdi_usb_find_all(ftdic, &devlist, ANY_FTDI_VENDOR, ANY_FTDI_PRODUCT) > 0) @@ -218,19 +177,25 @@ QJsonObject ProviderFtdi::discover(const QJsonObject & /*params*/) struct ftdi_device_list *curdev = devlist; while (curdev) { - char manufacturer[128], description[128]; - ftdi_usb_get_strings(ftdic, curdev->dev, manufacturer, 128, description, 128, NULL, 0); + char manufacturer[128]; + ftdi_usb_get_strings(ftdic, curdev->dev, manufacturer, 128, NULL, 0, NULL, 0); + + uint8_t bus_number = libusb_get_bus_number(curdev->dev); + uint8_t device_address = libusb_get_device_address(curdev->dev); + + QString value = QString("d:%1/%2") + .arg(bus_number, 3, 10, QChar{'0'}) + .arg(device_address, 3, 10, QChar{'0'}); + - libusb_device_descriptor desc; - libusb_get_device_descriptor(curdev->dev, &desc); - QString value = QString("i:0x%1:0x%2") - .arg(desc.idVendor, 4, 16, QChar{'0'}) - .arg(desc.idProduct, 4, 16, QChar{'0'}); + QString displayLabel = QString("%1 (%2)") + .arg(value) + .arg(manufacturer); - QString name = QString("%1 (%2)").arg(manufacturer, description); deviceList.push_back(QJsonObject{ {"value", value}, - {"name", name}}); + {"name", displayLabel} + }); curdev = curdev->next; } diff --git a/sources/leddevice/dev_ftdi/ProviderFtdi.h b/sources/leddevice/dev_ftdi/ProviderFtdi.h index 72fbd2488..205b1a41b 100644 --- a/sources/leddevice/dev_ftdi/ProviderFtdi.h +++ b/sources/leddevice/dev_ftdi/ProviderFtdi.h @@ -71,9 +71,6 @@ protected slots: /// @param errorMsg The error message to be logged /// void setInError(const QString& errorMsg) override; - -private: - int openDevice(); }; #endif // PROVIDERFtdi_H diff --git a/sources/leddevice/dev_spi/LedDeviceAPA102.cpp b/sources/leddevice/dev_spi/LedDeviceAPA102.cpp index 9f5dd5512..776ec883f 100644 --- a/sources/leddevice/dev_spi/LedDeviceAPA102.cpp +++ b/sources/leddevice/dev_spi/LedDeviceAPA102.cpp @@ -41,14 +41,6 @@ void LedDeviceAPA102::CreateHeader() int LedDeviceAPA102::write(const std::vector& ledValues) { - if (_ledCount != ledValues.size()) - { - Warning(_log, "APA102 led's number has changed (old: %d, new: %d). Rebuilding buffer.", _ledCount, ledValues.size()); - _ledCount = ledValues.size(); - - CreateHeader(); - } - for (signed iLed = 0; iLed < static_cast(_ledCount); ++iLed) { const ColorRgb& rgb = ledValues[iLed]; _ledBuffer[4 + iLed * 4] = 0xFF; diff --git a/sources/leddevice/schemas/schema-apa102_ftdi.json b/sources/leddevice/schemas/schema-apa102_ftdi.json index 69fd380c1..1ddec51b7 100644 --- a/sources/leddevice/schemas/schema-apa102_ftdi.json +++ b/sources/leddevice/schemas/schema-apa102_ftdi.json @@ -5,7 +5,7 @@ "output": { "type": "string", "title":"edt_dev_spec_outputPath_title", - "default":"auto" + "required" : true }, "rate": { "type": "integer", diff --git a/sources/leddevice/schemas/schema-sk6812_ftdi.json b/sources/leddevice/schemas/schema-sk6812_ftdi.json index 526f440c0..aa3abfb19 100644 --- a/sources/leddevice/schemas/schema-sk6812_ftdi.json +++ b/sources/leddevice/schemas/schema-sk6812_ftdi.json @@ -5,7 +5,6 @@ "output": { "type": "string", "title": "edt_dev_spec_outputPath_title", - "default": "auto", "required": true, "propertyOrder": 1 }, diff --git a/sources/leddevice/schemas/schema-ws2812_ftdi.json b/sources/leddevice/schemas/schema-ws2812_ftdi.json index f8c9e04ec..09ee7a79b 100644 --- a/sources/leddevice/schemas/schema-ws2812_ftdi.json +++ b/sources/leddevice/schemas/schema-ws2812_ftdi.json @@ -5,7 +5,7 @@ "output": { "type": "string", "title": "edt_dev_spec_outputPath_title", - "default": "auto" + "required" : true }, "rate": { "type": "integer",