X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=bindings%2Fcxx%2Fclasses.cpp;h=25ac45b6235d166eeb735b50e7b49ac399969e45;hb=5e1fb33469841b194e606752b865fa0d08b99067;hp=bb709fe2613092a2a78c2ff7af7810ec4204b95c;hpb=48d92e2c2e6291412e8a4d2218184112ebf0fad9;p=libsigrok.git diff --git a/bindings/cxx/classes.cpp b/bindings/cxx/classes.cpp index bb709fe2..25ac45b6 100644 --- a/bindings/cxx/classes.cpp +++ b/bindings/cxx/classes.cpp @@ -17,7 +17,13 @@ * along with this program. If not, see . */ -#include "libsigrokcxx/libsigrokcxx.hpp" +/* Needed for isascii(), as used in the GNU libstdc++ headers */ +#ifndef _XOPEN_SOURCE +#define _XOPEN_SOURCE 600 +#endif + +#include +#include #include #include @@ -77,7 +83,7 @@ Context::Context() : { check(sr_init(&_structure)); - struct sr_dev_driver **driver_list = sr_driver_list(); + struct sr_dev_driver **driver_list = sr_driver_list(_structure); if (driver_list) for (int i = 0; driver_list[i]; i++) _drivers[driver_list[i]->name] = @@ -161,16 +167,6 @@ void Context::set_log_level(const LogLevel *level) check(sr_log_loglevel_set(level->id())); } -string Context::log_domain() -{ - return valid_string(sr_log_logdomain_get()); -} - -void Context::set_log_domain(string value) -{ - check(sr_log_logdomain_set(value.c_str())); -} - static int call_log_callback(void *cb_data, int loglevel, const char *format, va_list args) { va_list args_copy; @@ -652,8 +648,7 @@ string Channel::name() void Channel::set_name(string name) { - check(sr_dev_channel_name_set(_parent->_structure, - _structure->index, name.c_str())); + check(sr_dev_channel_name_set(_structure, name.c_str())); } const ChannelType *Channel::type() @@ -668,7 +663,7 @@ bool Channel::enabled() void Channel::set_enabled(bool value) { - check(sr_dev_channel_enable(_parent->_structure, _structure->index, value)); + check(sr_dev_channel_enable(_structure, value)); } unsigned int Channel::index() @@ -886,20 +881,18 @@ shared_ptr SessionDevice::get_shared_from_this() Session::Session(shared_ptr context) : UserOwned(_structure), - _context(context), - _saving(false) + _context(context) { - check(sr_session_new(&_structure)); + check(sr_session_new(context->_structure, &_structure)); _context->_session = this; } Session::Session(shared_ptr context, string filename) : UserOwned(_structure), _context(context), - _filename(filename), - _saving(false) + _filename(filename) { - check(sr_session_load(filename.c_str(), &_structure)); + check(sr_session_load(context->_structure, filename.c_str(), &_structure)); GSList *dev_list; check(sr_session_dev_list(_structure, &dev_list)); for (GSList *dev = dev_list; dev; dev = dev->next) @@ -975,93 +968,6 @@ void Session::stop() check(sr_session_stop(_structure)); } -void Session::begin_save(string filename) -{ - _saving = true; - _save_initialized = false; - _save_filename = filename; - _save_samplerate = 0; -} - -void Session::append(shared_ptr packet) -{ - if (!_saving) - throw Error(SR_ERR); - - switch (packet->_structure->type) - { - case SR_DF_META: - { - auto meta = (const struct sr_datafeed_meta *) - packet->_structure->payload; - - for (auto l = meta->config; l; l = l->next) - { - auto config = (struct sr_config *) l->data; - if (config->key == SR_CONF_SAMPLERATE) - _save_samplerate = g_variant_get_uint64(config->data); - } - - break; - } - case SR_DF_LOGIC: - { - if (_save_samplerate == 0) - { - GVariant *samplerate; - - check(sr_config_get(sr_dev_inst_driver_get(packet->_device->_structure), - packet->_device->_structure, NULL, SR_CONF_SAMPLERATE, - &samplerate)); - - _save_samplerate = g_variant_get_uint64(samplerate); - - g_variant_unref(samplerate); - } - - if (!_save_initialized) - { - vector> save_channels; - - for (auto channel : packet->_device->channels()) - if (channel->_structure->enabled && - channel->_structure->type == SR_CHANNEL_LOGIC) - save_channels.push_back(channel); - - auto channels = g_new(char *, save_channels.size()); - - int i = 0; - for (auto channel : save_channels) - channels[i++] = channel->_structure->name; - channels[i] = NULL; - - int ret = sr_session_save_init(_structure, _save_filename.c_str(), - _save_samplerate, channels); - - g_free(channels); - - if (ret != SR_OK) - throw Error(ret); - - _save_initialized = true; - } - - auto logic = (const struct sr_datafeed_logic *) - packet->_structure->payload; - - check(sr_session_append(_structure, _save_filename.c_str(), - (uint8_t *) logic->data, logic->unitsize, - logic->length / logic->unitsize)); - } - } -} - -void Session::append(void *data, size_t length, unsigned int unit_size) -{ - check(sr_session_append(_structure, _save_filename.c_str(), - (uint8_t *) data, unit_size, length)); -} - static void datafeed_callback(const struct sr_dev_inst *sdi, const struct sr_datafeed_packet *pkt, void *cb_data) { @@ -1385,6 +1291,15 @@ string InputFormat::description() return valid_string(sr_input_description_get(_structure)); } +vector InputFormat::extensions() +{ + vector exts; + for (const char *const *e = sr_input_extensions_get(_structure); + e && *e; e++) + exts.push_back(*e); + return exts; +} + map> InputFormat::options() { const struct sr_option **options = sr_input_options_get(_structure); @@ -1430,9 +1345,9 @@ shared_ptr Input::device() return _device->get_shared_pointer(shared_from_this()); } -void Input::send(string data) +void Input::send(void *data, size_t length) { - auto gstr = g_string_new(data.c_str()); + auto gstr = g_string_new_len((gchar *)data, length); auto ret = sr_input_send(_structure, gstr); g_string_free(gstr, false); check(ret); @@ -1525,6 +1440,15 @@ string OutputFormat::description() return valid_string(sr_output_description_get(_structure)); } +vector OutputFormat::extensions() +{ + vector exts; + for (const char *const *e = sr_output_extensions_get(_structure); + e && *e; e++) + exts.push_back(*e); + return exts; +} + map> OutputFormat::options() { const struct sr_option **options = sr_output_options_get(_structure); @@ -1548,10 +1472,33 @@ shared_ptr OutputFormat::create_output( Output::Deleter()); } +shared_ptr OutputFormat::create_output(string filename, + shared_ptr device, map options) +{ + return shared_ptr( + new Output(filename, shared_from_this(), device, options), + Output::Deleter()); +} + +bool OutputFormat::test_flag(const OutputFlag *flag) +{ + return sr_output_test_flag(_structure, flag->id()); +} + Output::Output(shared_ptr format, shared_ptr device, map options) : UserOwned(sr_output_new(format->_structure, - map_to_hash_variant(options), device->_structure)), + map_to_hash_variant(options), device->_structure, NULL)), + _format(format), + _device(device), + _options(options) +{ +} + +Output::Output(string filename, shared_ptr format, + shared_ptr device, map options) : + UserOwned(sr_output_new(format->_structure, + map_to_hash_variant(options), device->_structure, filename.c_str())), _format(format), _device(device), _options(options) @@ -1579,6 +1526,6 @@ string Output::receive(shared_ptr packet) } } -#include "enums.cpp" +#include }