int verbose_device_search(char *s) { int i, device_count, device, offset; char *s2; char vendor[256], product[256], serial[256]; device_count = mirisdr_get_device_count(); if (!device_count) { fprintf(stderr, "No supported devices found.\n"); return -1; } fprintf(stderr, "Found %d device(s):\n", device_count); for (i = 0; i < device_count; i++) { mirisdr_get_device_usb_strings(i, vendor, product, serial); fprintf(stderr, " %d: %s, %s, SN: %s\n", i, vendor, product, serial); } fprintf(stderr, "\n"); /* does string look like raw id number */ device = (int)strtol(s, &s2, 0); if (s2[0] == '\0' && device >= 0 && device < device_count) { fprintf(stderr, "Using device %d: %s\n", device, mirisdr_get_device_name((uint32_t)device)); return device; } /* does string exact match a serial */ for (i = 0; i < device_count; i++) { mirisdr_get_device_usb_strings(i, vendor, product, serial); if (strcmp(s, serial) != 0) { continue;} device = i; fprintf(stderr, "Using device %d: %s\n", device, mirisdr_get_device_name((uint32_t)device)); return device; } /* does string prefix match a serial */ for (i = 0; i < device_count; i++) { mirisdr_get_device_usb_strings(i, vendor, product, serial); if (strncmp(s, serial, strlen(s)) != 0) { continue;} device = i; fprintf(stderr, "Using device %d: %s\n", device, mirisdr_get_device_name((uint32_t)device)); return device; } /* does string suffix match a serial */ for (i = 0; i < device_count; i++) { mirisdr_get_device_usb_strings(i, vendor, product, serial); offset = strlen(serial) - strlen(s); if (offset < 0) { continue;} if (strncmp(s, serial+offset, strlen(s)) != 0) { continue;} device = i; fprintf(stderr, "Using device %d: %s\n", device, mirisdr_get_device_name((uint32_t)device)); return device; } fprintf(stderr, "No matching devices found.\n"); return -1; }
PluginInterface::SamplingDevices SDRPlayPlugin::enumSampleSources() { SamplingDevices result; int count = mirisdr_get_device_count(); char vendor[256]; char product[256]; char serial[256]; for(int i = 0; i < count; i++) { vendor[0] = '\0'; product[0] = '\0'; serial[0] = '\0'; if (mirisdr_get_device_usb_strings((uint32_t)i, vendor, product, serial) != 0) { continue; } qDebug("SDRPlayPlugin::enumSampleSources: found %s:%s (%s)", vendor, product, serial); QString displayedName(QString("SDRPlay[%1] %2").arg(i).arg(serial)); result.append(SamplingDevice(displayedName, m_deviceTypeID, QString(serial), i)); } return result; }
bool SDRPlayInput::openDevice() { m_devNumber = m_deviceAPI->getSampleSourceSequence(); if (m_dev != 0) { closeDevice(); } int res; //int numberOfGains; if (!m_sampleFifo.setSize(96000 * 4)) { qCritical("SDRPlayInput::openDevice: could not allocate SampleFifo"); return false; } if ((res = mirisdr_open(&m_dev, MIRISDR_HW_SDRPLAY, m_devNumber)) < 0) { qCritical("SDRPlayInput::openDevice: could not open SDRPlay #%d: %s", m_devNumber, strerror(errno)); return false; } char vendor[256]; char product[256]; char serial[256]; vendor[0] = '\0'; product[0] = '\0'; serial[0] = '\0'; if ((res = mirisdr_get_device_usb_strings(m_devNumber, vendor, product, serial)) < 0) { qCritical("SDRPlayInput::openDevice: error accessing USB device"); stop(); return false; } qWarning("SDRPlayInput::openDevice: %s %s, SN: %s", vendor, product, serial); m_deviceDescription = QString("%1 (SN %2)").arg(product).arg(serial); if (QString(product) == "RSP1A") { m_variant = SDRPlayRSP1A; } else if (QString(product) == "RSP2") { m_variant = SDRPlayRSP2; } else { m_variant = SDRPlayRSP1; } qDebug("SDRPlayInput::openDevice: m_variant: %d", (int) m_variant); return true; }