]> sigrok.org Git - libsigrok.git/blobdiff - bindings/cxx/classes.cpp
sr_driver_list() now takes a context pointer.
[libsigrok.git] / bindings / cxx / classes.cpp
index 9dc003acae70ac863776b3a8be5c9273b59513f9..19b4f8f0c3c5c53ac5472d2faded5b2dc3043b75 100644 (file)
@@ -77,7 +77,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] =
@@ -652,8 +652,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 +667,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()
@@ -889,7 +888,7 @@ Session::Session(shared_ptr<Context> context) :
        _context(context),
        _saving(false)
 {
-       check(sr_session_new(&_structure));
+       check(sr_session_new(context->_structure, &_structure));
        _context->_session = this;
 }
 
@@ -899,7 +898,7 @@ Session::Session(shared_ptr<Context> context, string filename) :
        _filename(filename),
        _saving(false)
 {
-       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)
@@ -1385,15 +1384,27 @@ string InputFormat::description()
        return valid_string(sr_input_description_get(_structure));
 }
 
+vector<string> InputFormat::extensions()
+{
+       vector<string> exts;
+       for (const char *const *e = sr_input_extensions_get(_structure);
+               e && *e; e++)
+               exts.push_back(*e);
+       return exts;
+}
+
 map<string, shared_ptr<Option>> InputFormat::options()
 {
        const struct sr_option **options = sr_input_options_get(_structure);
-       auto option_array = shared_ptr<const struct sr_option *>(
-               options, sr_input_options_free);
        map<string, shared_ptr<Option>> result;
-       for (int i = 0; options[i]; i++)
-               result[options[i]->id] = shared_ptr<Option>(
-                       new Option(options[i], option_array), Option::Deleter());
+       if (options)
+       {
+               auto option_array = shared_ptr<const struct sr_option *>(
+                       options, sr_input_options_free);
+               for (int i = 0; options[i]; i++)
+                       result[options[i]->id] = shared_ptr<Option>(
+                               new Option(options[i], option_array), Option::Deleter());
+       }
        return result;
 }
 
@@ -1522,15 +1533,27 @@ string OutputFormat::description()
        return valid_string(sr_output_description_get(_structure));
 }
 
+vector<string> OutputFormat::extensions()
+{
+       vector<string> exts;
+       for (const char *const *e = sr_output_extensions_get(_structure);
+               e && *e; e++)
+               exts.push_back(*e);
+       return exts;
+}
+
 map<string, shared_ptr<Option>> OutputFormat::options()
 {
        const struct sr_option **options = sr_output_options_get(_structure);
-       auto option_array = shared_ptr<const struct sr_option *>(
-               options, sr_output_options_free);
        map<string, shared_ptr<Option>> result;
-       for (int i = 0; options[i]; i++)
-               result[options[i]->id] = shared_ptr<Option>(
-                       new Option(options[i], option_array), Option::Deleter());
+       if (options)
+       {
+               auto option_array = shared_ptr<const struct sr_option *>(
+                       options, sr_output_options_free);
+               for (int i = 0; options[i]; i++)
+                       result[options[i]->id] = shared_ptr<Option>(
+                               new Option(options[i], option_array), Option::Deleter());
+       }
        return result;
 }