X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fdevice%2Fdevice.cpp;h=546ce391869f81c52a86116326e034972ebb2df2;hp=be25b5cb1cd017abb7ae0dd46f55650aeeb31878;hb=87b79835014a386fb51b52bc993dbb693bd27197;hpb=29efe92a807a93572b44369d2703f572778ebb15 diff --git a/pv/device/device.cpp b/pv/device/device.cpp index be25b5cb..546ce391 100644 --- a/pv/device/device.cpp +++ b/pv/device/device.cpp @@ -18,12 +18,16 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include #include #include "device.h" +using std::list; +using std::make_pair; +using std::map; using std::ostringstream; using std::string; @@ -41,30 +45,79 @@ sr_dev_inst* Device::dev_inst() const return _sdi; } +void Device::use(SigSession *owner) throw(QString) +{ + DevInst::use(owner); + + sr_session_new(&SigSession::_sr_session); + + assert(_sdi); + sr_dev_open(_sdi); + if (sr_session_dev_add(SigSession::_sr_session, _sdi) != SR_OK) + throw QString(tr("Failed to use device.")); +} + +void Device::release() +{ + if (_owner) { + DevInst::release(); + sr_session_destroy(SigSession::_sr_session); + } + + sr_dev_close(_sdi); +} + std::string Device::format_device_title() const { ostringstream s; assert(_sdi); - if (_sdi->vendor && _sdi->vendor[0]) { - s << _sdi->vendor; - if ((_sdi->model && _sdi->model[0]) || - (_sdi->version && _sdi->version[0])) - s << ' '; - } + if (_sdi->vendor && _sdi->vendor[0]) + s << _sdi->vendor << " "; - if (_sdi->model && _sdi->model[0]) { - s << _sdi->model; - if (_sdi->version && _sdi->version[0]) - s << ' '; - } + if (_sdi->model && _sdi->model[0]) + s << _sdi->model << " "; if (_sdi->version && _sdi->version[0]) - s << _sdi->version; + s << _sdi->version << " "; + + // Show connection string only if no serial number is present. + if (_sdi->serial_num && _sdi->serial_num[0]) + s << "(" << _sdi->serial_num << ") "; + else if (_sdi->connection_id && _sdi->connection_id[0]) + s << "[" << _sdi->connection_id << "] "; + + // Remove trailing space. + s.seekp(-1, std::ios_base::end); + s << std::ends; return s.str(); } +map Device::get_device_info() const +{ + map result; + + assert(_sdi); + + if (_sdi->vendor && _sdi->vendor[0]) + result.insert(make_pair("vendor", _sdi->vendor)); + + if (_sdi->model && _sdi->model[0]) + result.insert(make_pair("model", _sdi->model)); + + if (_sdi->version && _sdi->version[0]) + result.insert(make_pair("version", _sdi->version)); + + if (_sdi->serial_num && _sdi->serial_num[0]) + result.insert(make_pair("serial_num", _sdi->serial_num)); + + if (_sdi->connection_id && _sdi->connection_id[0]) + result.insert(make_pair("connection_id", _sdi->connection_id)); + + return result; +} + } // device } // pv