]> sigrok.org Git - libsigrok.git/commitdiff
bindings: wrap sr_input_scan_file() in the C++ language binding
authorGerhard Sittig <redacted>
Sun, 13 May 2018 06:56:09 +0000 (08:56 +0200)
committerUwe Hermann <redacted>
Thu, 17 May 2018 20:31:27 +0000 (22:31 +0200)
Allow C++ applications to have the input format automatically detected,
and get a corresponding InputFormat instance. This makes the format match
logic available to PulseView.

bindings/cxx/classes.cpp
bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp

index d25c53cf13e4a909809faacf73e6ffe46d1df514..bf826e3c73b809f07eb7441825eb309b404dc5f2 100644 (file)
@@ -177,6 +177,32 @@ map<string, shared_ptr<InputFormat>> Context::input_formats()
        return result;
 }
 
+shared_ptr<InputFormat> 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<InputFormat>{new InputFormat{imod}, default_delete<InputFormat>{}};
+}
+
 map<string, shared_ptr<OutputFormat>> Context::output_formats()
 {
        map<string, shared_ptr<OutputFormat>> result;
index de54630ffabe74c16f06f5b481aed1b1b07f2509..80888af61c5064a81c97110af4e6568740126371 100644 (file)
@@ -252,6 +252,8 @@ public:
        map<string, shared_ptr<Driver> > drivers();
        /** Available input formats, indexed by name. */
        map<string, shared_ptr<InputFormat> > input_formats();
+       /** Lookup the responsible input module for an input file. */
+       shared_ptr<InputFormat> input_format_match(string filename);
        /** Available output formats, indexed by name. */
        map<string, shared_ptr<OutputFormat> > output_formats();
        /** Current log level. */