]> sigrok.org Git - libsigrok.git/blobdiff - bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp
C++: Wrap resource access API
[libsigrok.git] / bindings / cxx / include / libsigrokcxx / libsigrokcxx.hpp
index 0542a1be8e15132733e45a0bf77c040a93434efd..b9e8a4f268288ff0c1b916d15e9e22b6f6eb7ece 100644 (file)
@@ -70,7 +70,7 @@ raised, which provides access to the error code and description.
 #ifndef LIBSIGROKCXX_HPP
 #define LIBSIGROKCXX_HPP
 
-#include "libsigrok/libsigrok.h"
+#include <libsigrok/libsigrok.h>
 #include <glibmm.h>
 
 #include <stdexcept>
@@ -96,6 +96,7 @@ class SR_API Session;
 class SR_API ConfigKey;
 class SR_API InputFormat;
 class SR_API OutputFormat;
+class SR_API OutputFlag;
 class SR_API LogLevel;
 class SR_API ChannelGroup;
 class SR_API Trigger;
@@ -231,6 +232,29 @@ protected:
 /** Type of log callback */
 typedef function<void(const LogLevel *, string message)> LogCallbackFunction;
 
+/** Resource reader delegate. */
+class SR_API ResourceReader
+{
+public:
+       ResourceReader() {}
+       virtual ~ResourceReader();
+private:
+       /** Resource open hook. */
+       virtual void open(struct sr_resource *res, string name) = 0;
+       /** Resource close hook. */
+       virtual void close(struct sr_resource *res) = 0;
+       /** Resource read hook. */
+       virtual size_t read(const struct sr_resource *res, void *buf, size_t count) = 0;
+
+       static SR_PRIV int open_callback(struct sr_resource *res,
+                       const char *name, void *cb_data);
+       static SR_PRIV int close_callback(struct sr_resource *res,
+                       void *cb_data);
+       static SR_PRIV ssize_t read_callback(const struct sr_resource *res,
+                       void *buf, size_t count, void *cb_data);
+       friend class Context;
+};
+
 /** The global libsigrok context */
 class SR_API Context : public UserOwned<Context, struct sr_context>
 {
@@ -252,16 +276,14 @@ public:
        /** Set the log level.
         * @param level LogLevel to use. */
        void set_log_level(const LogLevel *level);
-       /** Current log domain. */
-       string log_domain();
-       /** Set the log domain.
-        * @param value Log domain prefix string. */
-       void set_log_domain(string value);
        /** Set the log callback.
         * @param callback Callback of the form callback(LogLevel, string). */
        void set_log_callback(LogCallbackFunction callback);
        /** Set the log callback to the default handler. */
        void set_log_callback_default();
+       /** Install a delegate for reading resource files.
+        * @param reader The resource reader delegate, or nullptr to unset. */
+       void set_resource_reader(ResourceReader *reader);
        /** Create a new session. */
        shared_ptr<Session> create_session();
        /** Create a new user device. */
@@ -700,11 +722,6 @@ public:
        /** Begin saving session to a file.
         * @param filename File name string. */
        void begin_save(string filename);
-       /** Append a packet to the session file being saved.
-        * @param packet Packet to append. */
-       void append(shared_ptr<Packet> packet);
-       /** Append raw logic data to the session file being saved. */
-       void append(void *data, size_t length, unsigned int unit_size);
        /** Get current trigger setting. */
        shared_ptr<Trigger> trigger();
        /** Get the context. */
@@ -725,10 +742,6 @@ protected:
        vector<DatafeedCallbackData *> _datafeed_callbacks;
        map<shared_ptr<EventSource>, SourceCallbackData *> _source_callbacks;
        string _filename;
-       bool _saving;
-       bool _save_initialized;
-       string _save_filename;
-       uint64_t _save_samplerate;
        shared_ptr<Trigger> _trigger;
        friend class Deleter;
        friend class Context;
@@ -888,8 +901,9 @@ public:
        /** Virtual device associated with this input. */
        shared_ptr<InputDevice> device();
        /** Send next stream data.
-        * @param data Next stream data. */
-       void send(string data);
+        * @param data Next stream data.
+        * @param length Length of data. */
+       void send(void *data, size_t length);
        /** Signal end of input data. */
        void end();
 protected:
@@ -948,14 +962,33 @@ public:
        string name();
        /** Description of this output format. */
        string description();
+       /** A list of preferred file name extensions for this file format.
+         * @note This list is a recommendation only. */
+       vector<string> extensions();
        /** Options supported by this output format. */
        map<string, shared_ptr<Option> > options();
        /** Create an output using this format.
         * @param device Device to output for.
         * @param options Mapping of (option name, value) pairs. */
-       shared_ptr<Output> create_output(shared_ptr<Device> device,
+       shared_ptr<Output> create_output(
+               shared_ptr<Device> device,
                map<string, Glib::VariantBase> options =
                        map<string, Glib::VariantBase>());
+       /** Create an output using this format.
+        * @param filename Name of destination file.
+        * @param device Device to output for.
+        * @param options Mapping of (option name, value) pairs. */
+       shared_ptr<Output> create_output(string filename,
+               shared_ptr<Device> device,
+               map<string, Glib::VariantBase> options =
+                       map<string, Glib::VariantBase>());
+       /**
+        * Checks whether a given flag is set.
+        * @param flag Flag to check
+        * @return true if flag is set for this module
+        * @see sr_output_flags
+        */
+       bool test_flag(const OutputFlag *flag);
 protected:
        OutputFormat(const struct sr_output_module *structure);
        ~OutputFormat();
@@ -974,6 +1007,8 @@ protected:
        Output(shared_ptr<OutputFormat> format, shared_ptr<Device> device);
        Output(shared_ptr<OutputFormat> format,
                shared_ptr<Device> device, map<string, Glib::VariantBase> options);
+       Output(string filename, shared_ptr<OutputFormat> format,
+               shared_ptr<Device> device, map<string, Glib::VariantBase> options);
        ~Output();
        const shared_ptr<OutputFormat> _format;
        const shared_ptr<Device> _device;
@@ -1024,7 +1059,7 @@ protected:
        const string _name;
 };
 
-#include "enums.hpp"
+#include <libsigrokcxx/enums.hpp>
 
 }