X-Git-Url: https://sigrok.org/gitweb/?p=pulseview.git;a=blobdiff_plain;f=pv%2Fsession.cpp;h=00eb7ad0142716e6eac7aaf4749f694ecd9cdfe5;hp=aa528d191fe6750958bd2cbf8491fe8bb35383d0;hb=3083cda853bd12d73b741c3bc97b70f5d395a15a;hpb=f23c46921d031dba4c96062164cc9f3ca3c4809c diff --git a/pv/session.cpp b/pv/session.cpp index aa528d19..00eb7ad0 100644 --- a/pv/session.cpp +++ b/pv/session.cpp @@ -434,26 +434,76 @@ void Session::set_default_device() set_device((iter == devices.end()) ? devices.front() : *iter); } +/** + * Convert generic options to data types that are specific to InputFormat. + * + * @param[in] user_spec Vector of tokenized words, string format. + * @param[in] fmt_opts Input format's options, result of InputFormat::options(). + * + * @return Map of options suitable for InputFormat::create_input(). + */ +map +Session::input_format_options(vector user_spec, + map> fmt_opts) +{ + map result; + + for (auto entry : user_spec) { + /* + * Split key=value specs. Accept entries without separator + * (for simplified boolean specifications). + */ + string key, val; + size_t pos = entry.find("="); + if (pos == std::string::npos) { + key = entry; + val = ""; + } else { + key = entry.substr(0, pos); + val = entry.substr(pos + 1); + } + + /* + * Skip user specifications that are not a member of the + * format's set of supported options. Have the text input + * spec converted to the required input format specific + * data type. + */ + auto found = fmt_opts.find(key); + if (found == fmt_opts.end()) + continue; + shared_ptr