31 #include <libsigrokcxx/libsigrokcxx.hpp>
33 #include <boost/algorithm/string/join.hpp>
34 #include <boost/filesystem.hpp>
38 using boost::algorithm::join;
41 using std::dynamic_pointer_cast;
44 using std::placeholders::_1;
45 using std::placeholders::_2;
47 using std::runtime_error;
48 using std::shared_ptr;
52 using Glib::VariantBase;
54 using sigrok::ConfigKey;
55 using sigrok::Context;
57 using sigrok::SessionDevice;
64 for (
auto entry : context->drivers())
65 driver_scan(entry.second, map<const ConfigKey *, VariantBase>());
82 const list< shared_ptr<devices::HardwareDevice> >&
88 list< shared_ptr<devices::HardwareDevice> >
90 shared_ptr<Driver> driver, map<const ConfigKey *, VariantBase> drvopts)
92 list< shared_ptr<devices::HardwareDevice> > driver_devices;
98 devices_.remove_if([&](shared_ptr<devices::HardwareDevice> device) {
99 return device->hardware_device()->driver() == driver; });
102 auto devices = driver->scan(drvopts);
105 for (shared_ptr<sigrok::HardwareDevice> device :
devices) {
106 const shared_ptr<devices::HardwareDevice> d(
108 driver_devices.push_back(d);
112 driver_devices.end());
114 driver_devices.sort(bind(
117 return driver_devices;
121 shared_ptr<devices::Device> device)
123 map<string, string> result;
127 const shared_ptr<sigrok::Device> sr_dev = device->device();
128 if (sr_dev->vendor().length() > 0)
129 result[
"vendor"] = sr_dev->vendor();
130 if (sr_dev->model().length() > 0)
131 result[
"model"] = sr_dev->model();
132 if (sr_dev->version().length() > 0)
133 result[
"version"] = sr_dev->version();
134 if (sr_dev->serial_number().length() > 0)
135 result[
"serial_num"] = sr_dev->serial_number();
136 if (sr_dev->connection_id().length() > 0)
137 result[
"connection_id"] = sr_dev->connection_id();
143 const map<string, string> search_info)
145 shared_ptr<devices::HardwareDevice> last_resort_dev;
146 map<string, string> dev_info;
148 for (shared_ptr<devices::HardwareDevice> dev :
devices_) {
153 if (dev_info.count(
"vendor") > 0 && search_info.count(
"vendor") > 0)
154 if (dev_info.at(
"vendor") != search_info.at(
"vendor"))
157 if (dev_info.count(
"model") > 0 && search_info.count(
"model") > 0)
158 if (dev_info.at(
"model") != search_info.at(
"model"))
162 if ((dev_info.count(
"serial_num") > 0) && (dev_info.at(
"serial_num") !=
"0")
163 && search_info.count(
"serial_num") > 0)
164 if (dev_info.at(
"serial_num") == search_info.at(
"serial_num") &&
165 dev_info.at(
"serial_num") !=
"0")
169 if (dev_info.count(
"connection_id") > 0 &&
170 search_info.count(
"connection_id") > 0)
171 if (dev_info.at(
"connection_id") == search_info.at(
"connection_id"))
175 if (dev_info.count(
"version") > 0 &&
176 search_info.count(
"version") > 0)
177 if (dev_info.at(
"version") == search_info.at(
"version") &&
178 dev_info.at(
"version") !=
"0")
182 last_resort_dev = dev;
190 return last_resort_dev;
194 shared_ptr<devices::Device> b)
198 return a->display_name(*this).compare(b->display_name(*
this)) < 0;
bool compare_devices(std::shared_ptr< devices::Device > a, std::shared_ptr< devices::Device > b)
const std::shared_ptr< sigrok::Context > & context() const
const std::list< std::shared_ptr< devices::HardwareDevice > > & devices() const
const std::map< std::string, std::string > get_device_info(const std::shared_ptr< devices::Device > device)
DeviceManager(std::shared_ptr< sigrok::Context > context)
std::shared_ptr< sigrok::Context > context_
std::list< std::shared_ptr< devices::HardwareDevice > > devices_
const std::shared_ptr< devices::HardwareDevice > find_device_from_info(const std::map< std::string, std::string > search_info)
std::list< std::shared_ptr< devices::HardwareDevice > > driver_scan(std::shared_ptr< sigrok::Driver > driver, std::map< const sigrok::ConfigKey *, Glib::VariantBase > drvopts)