| 
									
										
										
										
											2017-11-02 03:30:54 +01:00
										 |  |  | ///////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							| 
									
										
										
										
											2023-11-19 13:31:45 +01:00
										 |  |  | // Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany //
 | 
					
						
							|  |  |  | // written by Christian Daniel                                                   //
 | 
					
						
							|  |  |  | // Copyright (C) 2015-2017, 2019-2020, 2022 Edouard Griffiths, F4EXB <f4exb06@gmail.com> //
 | 
					
						
							|  |  |  | // Copyright (C) 2015 John Greb <hexameron@spam.no>                              //
 | 
					
						
							|  |  |  | // Copyright (C) 2022-2023 Jon Beniston, M7RCE <jon@beniston.com>                //
 | 
					
						
							| 
									
										
										
										
											2017-11-02 03:30:54 +01:00
										 |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // OpenGL interface modernization.                                               //
 | 
					
						
							|  |  |  | // See: http://doc.qt.io/qt-5/qopenglshaderprogram.html                          //
 | 
					
						
							|  |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // This program is free software; you can redistribute it and/or modify          //
 | 
					
						
							|  |  |  | // it under the terms of the GNU General Public License as published by          //
 | 
					
						
							|  |  |  | // the Free Software Foundation as version 3 of the License, or                  //
 | 
					
						
							| 
									
										
										
										
											2019-04-11 14:43:33 +02:00
										 |  |  | // (at your option) any later version.                                           //
 | 
					
						
							| 
									
										
										
										
											2017-11-02 03:30:54 +01:00
										 |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // This program is distributed in the hope that it will be useful,               //
 | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 | 
					
						
							|  |  |  | // GNU General Public License V3 for more details.                               //
 | 
					
						
							|  |  |  | //                                                                               //
 | 
					
						
							|  |  |  | // You should have received a copy of the GNU General Public License             //
 | 
					
						
							|  |  |  | // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | 
					
						
							|  |  |  | ///////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-04 15:22:41 +00:00
										 |  |  | #include <QThread>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-02 03:30:54 +01:00
										 |  |  | #include "samplingdevicedialog.h"
 | 
					
						
							|  |  |  | #include "ui_samplingdevicedialog.h"
 | 
					
						
							|  |  |  | #include "device/deviceenumerator.h"
 | 
					
						
							| 
									
										
										
										
											2022-12-20 21:06:39 +00:00
										 |  |  | #include "maincore.h"
 | 
					
						
							| 
									
										
										
										
											2017-11-02 03:30:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-07 16:32:03 +02:00
										 |  |  | SamplingDeviceDialog::SamplingDeviceDialog(int deviceType, QWidget* parent) : | 
					
						
							| 
									
										
										
										
											2017-11-02 03:30:54 +01:00
										 |  |  |     QDialog(parent), | 
					
						
							|  |  |  |     ui(new Ui::SamplingDeviceDialog), | 
					
						
							| 
									
										
										
										
											2019-05-16 18:39:13 +02:00
										 |  |  |     m_deviceType(deviceType), | 
					
						
							| 
									
										
										
										
											2020-09-13 17:50:24 +02:00
										 |  |  |     m_selectedDeviceIndex(-1), | 
					
						
							| 
									
										
										
										
											2023-05-24 08:32:57 +01:00
										 |  |  |     m_hasChanged(false), | 
					
						
							|  |  |  |     m_progressDialog(nullptr) | 
					
						
							| 
									
										
										
										
											2017-11-02 03:30:54 +01:00
										 |  |  | { | 
					
						
							|  |  |  |     ui->setupUi(this); | 
					
						
							| 
									
										
										
										
											2023-01-04 15:22:41 +00:00
										 |  |  |     // Don't automatically call on_refreshDevices_clicked(), some drivers can be slow to enumerate
 | 
					
						
							|  |  |  |     displayDevices(); | 
					
						
							| 
									
										
										
										
											2023-05-24 08:32:57 +01:00
										 |  |  |     connect(DeviceEnumerator::instance(), &DeviceEnumerator::enumeratingDevices, this, &SamplingDeviceDialog::enumeratingDevice); | 
					
						
							| 
									
										
										
										
											2017-11-02 03:30:54 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SamplingDeviceDialog::~SamplingDeviceDialog() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2023-05-24 08:32:57 +01:00
										 |  |  |     disconnect(DeviceEnumerator::instance(), &DeviceEnumerator::enumeratingDevices, this, &SamplingDeviceDialog::enumeratingDevice); | 
					
						
							| 
									
										
										
										
											2017-11-02 03:30:54 +01:00
										 |  |  |     delete ui; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-13 17:50:24 +02:00
										 |  |  | int SamplingDeviceDialog::exec() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_hasChanged = false; | 
					
						
							|  |  |  |     return QDialog::exec(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-20 21:06:39 +00:00
										 |  |  | void SamplingDeviceDialog::displayDevices() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     QList<QString> deviceDisplayNames; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     m_deviceIndexes.clear(); | 
					
						
							|  |  |  |     if (m_deviceType == 0) { // Single Rx
 | 
					
						
							|  |  |  |         DeviceEnumerator::instance()->listRxDeviceNames(deviceDisplayNames, m_deviceIndexes); | 
					
						
							|  |  |  |     } else if (m_deviceType == 1) { // Single Tx
 | 
					
						
							|  |  |  |         DeviceEnumerator::instance()->listTxDeviceNames(deviceDisplayNames, m_deviceIndexes); | 
					
						
							|  |  |  |     } else if (m_deviceType == 2) { // MIMO
 | 
					
						
							|  |  |  |         DeviceEnumerator::instance()->listMIMODeviceNames(deviceDisplayNames, m_deviceIndexes); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ui->deviceSelect->clear(); | 
					
						
							|  |  |  |     ui->deviceSelect->addItems(deviceDisplayNames); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-13 17:50:24 +02:00
										 |  |  | void SamplingDeviceDialog::setSelectedDeviceIndex(int deviceIndex) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     ui->deviceSelect->blockSignals(true); | 
					
						
							|  |  |  |     ui->deviceSelect->setCurrentIndex(deviceIndex); | 
					
						
							|  |  |  |     m_selectedDeviceIndex = deviceIndex; | 
					
						
							|  |  |  |     ui->deviceSelect->blockSignals(false); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void SamplingDeviceDialog::getDeviceId(QString& id) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     id  = ui->deviceSelect->currentText(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void SamplingDeviceDialog::on_deviceSelect_currentIndexChanged(int index) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     (void) index; | 
					
						
							|  |  |  |     m_hasChanged = true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-20 21:06:39 +00:00
										 |  |  | void SamplingDeviceDialog::on_refreshDevices_clicked() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2023-05-24 08:32:57 +01:00
										 |  |  |     m_progressDialog = new QProgressDialog("Enumerating devices", "", 0, 0, this); | 
					
						
							|  |  |  |     m_progressDialog->setWindowModality(Qt::WindowModal); | 
					
						
							|  |  |  |     m_progressDialog->setCancelButton(nullptr); | 
					
						
							|  |  |  |     m_progressDialog->setWindowFlag(Qt::WindowCloseButtonHint, false); | 
					
						
							|  |  |  |     m_progressDialog->show(); | 
					
						
							|  |  |  |     SamplingDeviceDialogWorker *worker = new SamplingDeviceDialogWorker(m_deviceType); | 
					
						
							| 
									
										
										
										
											2023-01-04 15:22:41 +00:00
										 |  |  |     QThread *thread = new QThread(); | 
					
						
							|  |  |  |     worker->moveToThread(thread); | 
					
						
							|  |  |  |     connect(thread, &QThread::started, worker, &SamplingDeviceDialogWorker::enumerateDevices); | 
					
						
							|  |  |  |     connect(worker, &SamplingDeviceDialogWorker::finishedWork, thread, &QThread::quit); | 
					
						
							| 
									
										
										
										
											2023-05-24 08:32:57 +01:00
										 |  |  |     connect(worker, &SamplingDeviceDialogWorker::finishedWork, m_progressDialog, &QProgressDialog::close); | 
					
						
							|  |  |  |     connect(worker, &SamplingDeviceDialogWorker::finishedWork, m_progressDialog, &QProgressDialog::deleteLater); | 
					
						
							| 
									
										
										
										
											2023-01-04 15:22:41 +00:00
										 |  |  |     connect(worker, &SamplingDeviceDialogWorker::finishedWork, this, &SamplingDeviceDialog::displayDevices); | 
					
						
							|  |  |  |     connect(worker, &SamplingDeviceDialogWorker::finishedWork, worker, &SamplingDeviceDialog::deleteLater); | 
					
						
							|  |  |  |     connect(thread, &QThread::finished, thread, &QThread::deleteLater); | 
					
						
							|  |  |  |     thread->start(); | 
					
						
							| 
									
										
										
										
											2022-12-20 21:06:39 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-02 03:30:54 +01:00
										 |  |  | void SamplingDeviceDialog::accept() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_selectedDeviceIndex = m_deviceIndexes[ui->deviceSelect->currentIndex()]; | 
					
						
							|  |  |  |     QDialog::accept(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2020-09-13 17:50:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | void SamplingDeviceDialog::reject() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     m_hasChanged = false; | 
					
						
							|  |  |  |     QDialog::reject(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2023-01-04 15:22:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-24 08:32:57 +01:00
										 |  |  | void SamplingDeviceDialog::enumeratingDevice(const QString &deviceId) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (m_progressDialog) { | 
					
						
							|  |  |  |         m_progressDialog->setLabelText("Enumerating " + deviceId); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-04 15:22:41 +00:00
										 |  |  | void SamplingDeviceDialogWorker::enumerateDevices() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     PluginManager *pluginManager = MainCore::instance()->getPluginManager(); | 
					
						
							|  |  |  |     if (m_deviceType == 0) { | 
					
						
							|  |  |  |         DeviceEnumerator::instance()->enumerateRxDevices(pluginManager); | 
					
						
							|  |  |  |     } else if (m_deviceType == 1) { | 
					
						
							|  |  |  |         DeviceEnumerator::instance()->enumerateTxDevices(pluginManager); | 
					
						
							|  |  |  |     } else if (m_deviceType == 2) { | 
					
						
							|  |  |  |         DeviceEnumerator::instance()->enumerateMIMODevices(pluginManager); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     emit finishedWork(); | 
					
						
							|  |  |  | } |