void MainWindow::on_actionScan_triggered() { int ret, i; QString s; struct logic_analyzer la; statusBar()->showMessage(tr("Scanning for logic analyzers...")); ret = flosslogic_scan_for_devices(&ctx); if (ret < 0) { s = tr("No supported logic analyzer found."); statusBar()->showMessage(s); return; } else { s = tr("Found supported logic analyzer: "); s.append(flosslogic_logic_analyzers[ret].shortname); statusBar()->showMessage(s); } setCurrentLA(ret); setNumChannels(flosslogic_logic_analyzers[ret].numchannels); ui->comboBoxLA->clear(); ui->comboBoxLA->addItem(flosslogic_logic_analyzers[ret].shortname); ui->labelChannels->setText(s.sprintf("Channels: %d", flosslogic_logic_analyzers[ret].numchannels)); i = 0; la = flosslogic_logic_analyzers[getCurrentLA()]; while (la.samplerates[i].string != NULL) { ui->comboBoxSampleRate->addItem(la.samplerates[i].string, la.samplerates[i].samplerate); i++; } /* FIXME */ ui->comboBoxNumSamples->addItem("3000000", 3000000); ui->comboBoxNumSamples->addItem("2000000", 2000000); ui->comboBoxNumSamples->addItem("1000000", 1000000); ui->comboBoxNumSamples->setEditable(true); ret = flosslogic_hw_init(getCurrentLA(), &ctx); if (ret < 0) statusBar()->showMessage(tr("ERROR: LA init failed.")); if (getCurrentLA() >= 0) setupDockWidgets(); /* Enable all relevant fields now (i.e. make them non-gray). */ ui->comboBoxSampleRate->setEnabled(true); ui->comboBoxNumSamples->setEnabled(true); ui->labelChannels->setEnabled(true); ui->action_Get_samples->setEnabled(true); }
void MainWindow::on_actionScan_triggered() { QString s; GSList *devs = NULL; int num_devs, pos; struct sr_dev *dev; char *di_num_probes, *str; struct sr_samplerates *samplerates; const static float mult[] = { 2.f, 2.5f, 2.f }; statusBar()->showMessage(tr("Scanning for logic analyzers..."), 2000); sr_dev_scan(); devs = sr_dev_list(); num_devs = g_slist_length(devs); ui->comboBoxLA->clear(); for (int i = 0; i < num_devs; ++i) { dev = (struct sr_dev *)g_slist_nth_data(devs, i); ui->comboBoxLA->addItem(dev->driver->name); /* TODO: Full name */ } if (num_devs == 0) { s = tr("No supported logic analyzer found."); statusBar()->showMessage(s, 2000); return; } else if (num_devs == 1) { s = tr("Found supported logic analyzer: "); s.append(dev->driver->name); statusBar()->showMessage(s, 2000); } else { /* TODO: Allow user to select one of the devices. */ s = tr("Found multiple logic analyzers: "); for (int i = 0; i < num_devs; ++i) { dev = (struct sr_dev *)g_slist_nth_data(devs, i); s.append(dev->driver->name); if (i != num_devs - 1) s.append(", "); } statusBar()->showMessage(s, 2000); // return; } dev = (struct sr_dev *)g_slist_nth_data(devs, 0 /* opt_dev */); setCurrentLA(0 /* TODO */); di_num_probes = (char *)dev->driver->dev_info_get( dev->driver_index, SR_DI_NUM_PROBES); if (di_num_probes != NULL) { setNumChannels(GPOINTER_TO_INT(di_num_probes)); } else { setNumChannels(8); /* FIXME: Error handling. */ } ui->comboBoxLA->clear(); ui->comboBoxLA->addItem(dev->driver->name); /* TODO: Full name */ s = QString(tr("Channels: %1")).arg(getNumChannels()); ui->labelChannels->setText(s); samplerates = (struct sr_samplerates *)dev->driver->dev_info_get( dev->driver_index, SR_DI_SAMPLERATES); if (!samplerates) { /* TODO: Error handling. */ } /* Populate the combobox with supported samplerates. */ ui->comboBoxSampleRate->clear(); if (!samplerates) { ui->comboBoxSampleRate->addItem("No samplerate"); ui->comboBoxSampleRate->setEnabled(false); } else if (samplerates->list != NULL) { for (int i = 0; samplerates->list[i]; ++i) { str = sr_samplerate_string(samplerates->list[i]); s = QString(str); free(str); ui->comboBoxSampleRate->insertItem(0, s, QVariant::fromValue(samplerates->list[i])); } ui->comboBoxSampleRate->setEnabled(true); } else { pos = 0; for (uint64_t r = samplerates->low; r <= samplerates->high; ) { str = sr_samplerate_string(r); s = QString(str); free(str); ui->comboBoxSampleRate->insertItem(0, s, QVariant::fromValue(r)); r *= mult[pos++]; pos %= 3; } ui->comboBoxSampleRate->setEnabled(true); } ui->comboBoxSampleRate->setCurrentIndex(0); /* FIXME */ ui->comboBoxNumSamples->clear(); ui->comboBoxNumSamples->addItem("100", 100); /* For testing... */ ui->comboBoxNumSamples->addItem("3000000", 3000000); ui->comboBoxNumSamples->addItem("2000000", 2000000); ui->comboBoxNumSamples->addItem("1000000", 1000000); ui->comboBoxNumSamples->setEditable(true); if (getCurrentLA() >= 0) setupDockWidgets(); /* Enable all relevant fields now (i.e. make them non-gray). */ ui->comboBoxNumSamples->setEnabled(true); ui->labelChannels->setEnabled(true); ui->action_Get_samples->setEnabled(true); }