X-Git-Url: https://sigrok.org/gitweb/?p=libsigrok.git;a=blobdiff_plain;f=bindings%2Fcxx%2Fclasses.cpp;h=8316b9bd1944c7a3c37ab77f111f50f6a154fcf3;hp=d25c53cf13e4a909809faacf73e6ffe46d1df514;hb=ea7a83a437e60168d396fac20ff1eda04a06d100;hpb=79034d4f39f76415e463f02d6b60f5269481da9f diff --git a/bindings/cxx/classes.cpp b/bindings/cxx/classes.cpp index d25c53cf..8316b9bd 100644 --- a/bindings/cxx/classes.cpp +++ b/bindings/cxx/classes.cpp @@ -177,6 +177,32 @@ map> Context::input_formats() return result; } +shared_ptr Context::input_format_match(string filename) +{ + const struct sr_input *input; + const struct sr_input_module *imod; + int rc; + + /* + * Have the input module looked up for the specified file. + * Failed lookup (or "successful lookup" with an empty result) + * are non-fatal. Free the sr_input that was created by the + * lookup routine, but grab the input module kind and return an + * InputFormat instance to the application. This works because + * the application passes a filename, no input data got buffered + * in the sr_input that we release. + */ + input = NULL; + rc = sr_input_scan_file(filename.c_str(), &input); + if (rc != SR_OK) + return nullptr; + if (!input) + return nullptr; + imod = sr_input_module_get(input); + sr_input_free(input); + return shared_ptr{new InputFormat{imod}, default_delete{}}; +} + map> Context::output_formats() { map> result; @@ -213,7 +239,7 @@ static int call_log_callback(void *cb_data, int loglevel, try { (*callback)(LogLevel::get(loglevel), message.get()); - } catch (Error e) { + } catch (Error &e) { return e.result; } @@ -351,6 +377,14 @@ shared_ptr Context::create_analog_packet( return shared_ptr{new Packet{nullptr, packet}, default_delete{}}; } +shared_ptr Context::create_end_packet() +{ + auto packet = g_new(struct sr_datafeed_packet, 1); + packet->type = SR_DF_END; + return shared_ptr{new Packet{nullptr, packet}, + default_delete{}}; +} + shared_ptr Context::load_session(string filename) { return shared_ptr{ @@ -910,6 +944,7 @@ Session::Session(shared_ptr context, string filename) : _owned_devices.emplace(sdi, move(device)); } _context->_session = this; + g_slist_free(dev_list); } Session::~Session() @@ -944,6 +979,7 @@ vector> Session::devices() auto *const sdi = static_cast(dev->data); result.push_back(get_device(sdi)); } + g_slist_free(dev_list); return result; } @@ -1625,6 +1661,11 @@ Output::~Output() check(sr_output_free(_structure)); } +shared_ptr Output::format() +{ + return _format; +} + string Output::receive(shared_ptr packet) { GString *out;