X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=bindings%2Fcxx%2Fclasses.cpp;h=41ded8522ba89c6d22aff03d74e9e6c122369674;hb=ce48b174da534120e7b725cd664743a6e9a75956;hp=549e07b0843d92be6a4cc4de2ae156b370821182;hpb=4c7c4194cbd1d172a8ea37206d6aff9a09c1fb91;p=libsigrok.git diff --git a/bindings/cxx/classes.cpp b/bindings/cxx/classes.cpp index 549e07b0..41ded852 100644 --- a/bindings/cxx/classes.cpp +++ b/bindings/cxx/classes.cpp @@ -437,20 +437,6 @@ Device::~Device() delete entry.second; } -string Device::description() -{ - ostringstream s; - - vector parts = - {vendor(), model(), version()}; - - for (string part : parts) - if (part.length() > 0) - s << part; - - return s.str(); -} - string Device::vendor() { return valid_string(_structure->vendor); @@ -466,6 +452,16 @@ string Device::version() return valid_string(_structure->version); } +string Device::serial_number() +{ + return valid_string(_structure->serial_num); +} + +string Device::connection_id() +{ + return valid_string(_structure->connection_id); +} + vector> Device::channels() { vector> result; @@ -706,7 +702,7 @@ DatafeedCallbackData::DatafeedCallbackData(Session *session, void DatafeedCallbackData::run(const struct sr_dev_inst *sdi, const struct sr_datafeed_packet *pkt) { - auto device = _session->_devices[sdi]; + auto device = _session->get_device(sdi); auto packet = shared_ptr(new Packet(device, pkt), Packet::Deleter()); _callback(device, packet); } @@ -787,6 +783,7 @@ Session::Session(shared_ptr context) : Session::Session(shared_ptr context, string filename) : UserOwned(_structure), _context(context), + _filename(filename), _saving(false) { check(sr_session_load(filename.c_str(), &_structure)); @@ -795,9 +792,7 @@ Session::Session(shared_ptr context, string filename) : for (GSList *dev = dev_list; dev; dev = dev->next) { auto sdi = (struct sr_dev_inst *) dev->data; - auto device = new SessionDevice(sdi); - _devices[sdi] = shared_ptr(device, - SessionDevice::Deleter()); + _owned_devices[sdi] = new SessionDevice(sdi); } _context->_session = this; } @@ -811,12 +806,26 @@ Session::~Session() for (auto entry : _source_callbacks) delete entry.second; + + for (auto entry : _owned_devices) + delete entry.second; +} + +shared_ptr Session::get_device(const struct sr_dev_inst *sdi) +{ + if (_owned_devices.count(sdi)) + return static_pointer_cast( + _owned_devices[sdi]->get_shared_pointer(this)); + else if (_other_devices.count(sdi)) + return _other_devices[sdi]; + else + throw Error(SR_ERR_BUG); } void Session::add_device(shared_ptr device) { check(sr_session_dev_add(_structure, device->_structure)); - _devices[device->_structure] = device; + _other_devices[device->_structure] = device; } vector> Session::devices() @@ -827,14 +836,14 @@ vector> Session::devices() for (GSList *dev = dev_list; dev; dev = dev->next) { auto sdi = (struct sr_dev_inst *) dev->data; - result.push_back(_devices[sdi]); + result.push_back(get_device(sdi)); } return result; } void Session::remove_devices() { - _devices.clear(); + _other_devices.clear(); check(sr_session_dev_remove_all(_structure)); } @@ -1034,6 +1043,11 @@ void Session::set_trigger(shared_ptr trigger) _trigger = trigger; } +string Session::filename() +{ + return _filename; +} + Packet::Packet(shared_ptr device, const struct sr_datafeed_packet *structure) : UserOwned(structure),