#ifndef LIBSIGROKCXX_HPP
#define LIBSIGROKCXX_HPP
-#include "libsigrok/libsigrok.h"
+#include <libsigrok/libsigrok.h>
#include <glibmm.h>
#include <stdexcept>
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;
/** 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>
{
/** 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. */
friend class TriggerStage;
};
+/** Type of session stopped callback */
+typedef function<void()> SessionStoppedCallback;
+
/** Type of datafeed callback */
typedef function<void(shared_ptr<Device>, shared_ptr<Packet>)>
DatafeedCallbackFunction;
void run();
/** Stop the session. */
void stop();
- /** 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);
+ /** Return whether the session is running. */
+ bool is_running() const;
+ /** Set callback to be invoked on session stop. */
+ void set_stopped_callback(SessionStoppedCallback callback);
/** Get current trigger setting. */
shared_ptr<Trigger> trigger();
/** Get the context. */
map<const struct sr_dev_inst *, SessionDevice *> _owned_devices;
map<const struct sr_dev_inst *, shared_ptr<Device> > _other_devices;
vector<DatafeedCallbackData *> _datafeed_callbacks;
+ SessionStoppedCallback _stopped_callback;
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;
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();
const string _name;
};
-#include "enums.hpp"
+#include <libsigrokcxx/enums.hpp>
}