* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include <boost/foreach.hpp>
+#include <cassert>
+
+#include <libsigrok/libsigrok.h>
#include "connect.h"
#include "pv/devicemanager.h"
+#include "pv/device/device.h"
extern "C" {
/* __STDC_FORMAT_MACROS is required for PRIu64 and friends (in C++). */
#include <libsigrok/libsigrok.h>
}
-using namespace std;
+using std::list;
+using std::shared_ptr;
+using std::string;
extern sr_context *sr_ctx;
_layout.addWidget(&_button_box);
}
-struct sr_dev_inst* Connect::get_selected_device() const
+shared_ptr<device::Device> Connect::get_selected_device() const
{
const QListWidgetItem *const item = _device_list.currentItem();
if (!item)
- return NULL;
+ return shared_ptr<device::Device>();
+
+ const sr_dev_inst *const sdi = (sr_dev_inst*)item->data(
+ Qt::UserRole).value<void*>();
+ assert(sdi);
- return (sr_dev_inst*)item->data(Qt::UserRole).value<void*>();
+ const auto iter = _device_map.find(sdi);
+ assert(iter != _device_map.end());
+
+ return (*iter).second;
}
void Connect::populate_drivers()
void Connect::unset_connection()
{
_device_list.clear();
+ _device_map.clear();
_serial_device.hide();
_form_layout.labelForField(&_serial_device)->hide();
_button_box.button(QDialogButtonBox::Ok)->setDisabled(true);
void Connect::scan_pressed()
{
_device_list.clear();
+ _device_map.clear();
const int index = _drivers.currentIndex();
if (index == -1)
drvopts = g_slist_append(drvopts, src);
}
- const list<sr_dev_inst*> devices = _device_manager.driver_scan(
- driver, drvopts);
+ const list< shared_ptr<device::Device> > devices =
+ _device_manager.driver_scan(driver, drvopts);
g_slist_free_full(drvopts, (GDestroyNotify)free_drvopts);
- BOOST_FOREACH(sr_dev_inst *const sdi, devices)
+ for (shared_ptr<device::Device> dev_inst : devices)
{
- const string title = DeviceManager::format_device_title(sdi);
+ assert(dev_inst);
+ const sr_dev_inst *const sdi = dev_inst->dev_inst();
+ assert(sdi);
+
+ const string title = dev_inst->format_device_title();
QString text = QString::fromUtf8(title.c_str());
- if (sdi->probes) {
- text += QString(" with %1 probes").arg(
- g_slist_length(sdi->probes));
+
+ if (sdi->channels) {
+ text += QString(" with %1 channels").arg(
+ g_slist_length(sdi->channels));
}
QListWidgetItem *const item = new QListWidgetItem(text,
&_device_list);
item->setData(Qt::UserRole, qVariantFromValue((void*)sdi));
_device_list.addItem(item);
+ _device_map[sdi] = dev_inst;
}
_device_list.setCurrentRow(0);
- _button_box.button(QDialogButtonBox::Ok)->setDisabled(false);
+ _button_box.button(QDialogButtonBox::Ok)->setDisabled(_device_list.count() == 0);
}
void Connect::device_selected(int index)