X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=bindings%2Fcxx%2Fclasses.cpp;h=da21086c50510199456e8b0a18c2a85815be825c;hb=c8965e545957209652f0bc79f88a1b39d8ff7ce2;hp=1747bdff5f0c787545a80afa3f20b4efdfacbaa4;hpb=1411f7d8e9fa5d90d8140fc51eb44562dd626b7c;p=libsigrok.git diff --git a/bindings/cxx/classes.cpp b/bindings/cxx/classes.cpp index 1747bdff..da21086c 100644 --- a/bindings/cxx/classes.cpp +++ b/bindings/cxx/classes.cpp @@ -214,6 +214,77 @@ shared_ptr Context::create_session() new Session(shared_from_this()), Session::Deleter()); } +shared_ptr Context::create_user_device( + string vendor, string model, string version) +{ + return shared_ptr( + new UserDevice(vendor, model, version), UserDevice::Deleter()); +} + +shared_ptr Context::create_header_packet(Glib::TimeVal start_time) +{ + auto header = g_new(struct sr_datafeed_header, 1); + header->feed_version = 1; + header->starttime.tv_sec = start_time.tv_sec; + header->starttime.tv_usec = start_time.tv_usec; + auto packet = g_new(struct sr_datafeed_packet, 1); + packet->type = SR_DF_HEADER; + packet->payload = header; + return shared_ptr(new Packet(nullptr, packet), Packet::Deleter()); +} + +shared_ptr Context::create_meta_packet( + map config) +{ + auto meta = g_new0(struct sr_datafeed_meta, 1); + for (auto input : config) + { + auto key = input.first; + auto value = input.second; + auto output = g_new(struct sr_config, 1); + output->key = key->id(); + output->data = value.gobj(); + g_variant_ref(output->data); + meta->config = g_slist_append(meta->config, output); + } + auto packet = g_new(struct sr_datafeed_packet, 1); + packet->type = SR_DF_META; + packet->payload = meta; + return shared_ptr(new Packet(nullptr, packet), Packet::Deleter()); +} + +shared_ptr Context::create_logic_packet( + void *data_pointer, size_t data_length, unsigned int unit_size) +{ + auto logic = g_new(struct sr_datafeed_logic, 1); + logic->length = data_length; + logic->unitsize = unit_size; + logic->data = data_pointer; + auto packet = g_new(struct sr_datafeed_packet, 1); + packet->type = SR_DF_LOGIC; + packet->payload = logic; + return shared_ptr(new Packet(nullptr, packet), Packet::Deleter()); +} + +shared_ptr Context::create_analog_packet( + vector > channels, + float *data_pointer, unsigned int num_samples, const Quantity *mq, + const Unit *unit, vector mqflags) +{ + auto analog = g_new0(struct sr_datafeed_analog, 1); + for (auto channel : channels) + analog->channels = g_slist_append(analog->channels, channel->_structure); + analog->num_samples = num_samples; + analog->mq = mq->id(); + analog->unit = unit->id(); + analog->mqflags = QuantityFlag::mask_from_flags(mqflags); + analog->data = data_pointer; + auto packet = g_new(struct sr_datafeed_packet, 1); + packet->type = SR_DF_ANALOG; + packet->payload = analog; + return shared_ptr(new Packet(nullptr, packet), Packet::Deleter()); +} + shared_ptr Context::load_session(string filename) { return shared_ptr( @@ -400,7 +471,7 @@ bool Configurable::config_check(const ConfigKey *key, for (gsize i = 0; i < num_opts; i++) { - if ((opts[i] & SR_CONF_MASK) == key->id()) + if ((opts[i] & SR_CONF_MASK) == (uint32_t) key->id()) { g_variant_unref(gvar_opts); return true; @@ -413,16 +484,16 @@ bool Configurable::config_check(const ConfigKey *key, } Device::Device(struct sr_dev_inst *structure) : - Configurable(structure->driver, structure, NULL), + Configurable(sr_dev_inst_driver_get(structure), structure, NULL), _structure(structure) { - for (GSList *entry = structure->channels; entry; entry = entry->next) + for (GSList *entry = sr_dev_inst_channels_get(structure); entry; entry = entry->next) { auto channel = (struct sr_channel *) entry->data; _channels[channel] = new Channel(channel); } - for (GSList *entry = structure->channel_groups; entry; entry = entry->next) + for (GSList *entry = sr_dev_inst_channel_groups_get(structure); entry; entry = entry->next) { auto group = (struct sr_channel_group *) entry->data; _channel_groups[group->name] = new ChannelGroup(this, group); @@ -437,58 +508,35 @@ Device::~Device() delete entry.second; } -string Device::description() -{ - ostringstream s; - - vector parts = - {vendor(), model(), version(), serial_number()}; - - for (size_t i = 0; i < parts.size(); i++) - { - if (parts[i].length() > 0) - { - if (i != 0) - s << " "; - s << parts[i]; - } - } - - if (serial_number().length() == 0 && connection_id().length() > 0) - s << " " << connection_id(); - - return s.str(); -} - string Device::vendor() { - return valid_string(_structure->vendor); + return valid_string(sr_dev_inst_vendor_get(_structure)); } string Device::model() { - return valid_string(_structure->model); + return valid_string(sr_dev_inst_model_get(_structure)); } string Device::version() { - return valid_string(_structure->version); + return valid_string(sr_dev_inst_version_get(_structure)); } string Device::serial_number() { - return valid_string(_structure->serial_num); + return valid_string(sr_dev_inst_sernum_get(_structure)); } string Device::connection_id() { - return valid_string(_structure->connection_id); + return valid_string(sr_dev_inst_connid_get(_structure)); } vector> Device::channels() { vector> result; - for (auto channel = _structure->channels; channel; channel = channel->next) + for (auto channel = sr_dev_inst_channels_get(_structure); channel; channel = channel->next) result.push_back( _channels[(struct sr_channel *) channel->data]->get_shared_pointer( get_shared_from_this())); @@ -545,6 +593,34 @@ shared_ptr HardwareDevice::driver() return _driver; } +UserDevice::UserDevice(string vendor, string model, string version) : + UserOwned(sr_dev_inst_user_new( + vendor.c_str(), model.c_str(), version.c_str())), + Device(UserOwned::_structure) +{ +} + +UserDevice::~UserDevice() +{ +} + +shared_ptr UserDevice::get_shared_from_this() +{ + return static_pointer_cast(shared_from_this()); +} + +shared_ptr UserDevice::add_channel(unsigned int index, + const ChannelType *type, string name) +{ + check(sr_dev_inst_channel_add(Device::_structure, + index, type->id(), name.c_str())); + struct sr_channel *structure = (struct sr_channel *) + g_slist_last(sr_dev_inst_channels_get(Device::_structure))->data; + Channel *channel = new Channel(structure); + _channels[structure] = channel; + return get_channel(structure); +} + Channel::Channel(struct sr_channel *structure) : ParentOwned(structure), _type(ChannelType::get(_structure->type)) @@ -589,7 +665,7 @@ unsigned int Channel::index() ChannelGroup::ChannelGroup(Device *device, struct sr_channel_group *structure) : ParentOwned(structure), - Configurable(device->_structure->driver, device->_structure, structure) + Configurable(sr_dev_inst_driver_get(device->_structure), device->_structure, structure) { for (GSList *entry = structure->channels; entry; entry = entry->next) _channels.push_back(device->_channels[(struct sr_channel *)entry->data]); @@ -789,11 +865,6 @@ SessionDevice::~SessionDevice() { } -string SessionDevice::description() -{ - return _parent->_filename; -} - shared_ptr SessionDevice::get_shared_from_this() { return static_pointer_cast(shared_from_this()); @@ -925,7 +996,7 @@ void Session::append(shared_ptr packet) { GVariant *samplerate; - check(sr_config_get(packet->_device->_structure->driver, + check(sr_config_get(sr_dev_inst_driver_get(packet->_device->_structure), packet->_device->_structure, NULL, SR_CONF_SAMPLERATE, &samplerate)); @@ -1076,6 +1147,11 @@ string Session::filename() return _filename; } +shared_ptr Session::context() +{ + return _context; +} + Packet::Packet(shared_ptr device, const struct sr_datafeed_packet *structure) : UserOwned(structure), @@ -1365,11 +1441,6 @@ InputDevice::~InputDevice() { } -string InputDevice::description() -{ - return ""; -} - shared_ptr InputDevice::get_shared_from_this() { return static_pointer_cast(shared_from_this());