X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=bindings%2Fcxx%2Finclude%2Flibsigrokcxx%2Flibsigrokcxx.hpp;h=d76f9b8758023cd015a14a553fa7d809eb77e78a;hb=dd13d47a9ef6c9a5c1c1920d8ac57e22bd1d9960;hp=b9395a7109b5c60507a3a0107d579193e6550b16;hpb=8b2a184327900fd7d08bb09f58699d62e2578eea;p=libsigrok.git diff --git a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp index b9395a71..d76f9b87 100644 --- a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp +++ b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp @@ -91,7 +91,6 @@ class SR_API Driver; class SR_API Device; class SR_API HardwareDevice; class SR_API Channel; -class SR_API EventSource; class SR_API Session; class SR_API ConfigKey; class SR_API InputFormat; @@ -232,6 +231,29 @@ protected: /** Type of log callback */ typedef function 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 { @@ -253,16 +275,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 create_session(); /** Create a new user device. */ @@ -568,6 +588,9 @@ protected: friend class TriggerStage; }; +/** Type of session stopped callback */ +typedef function SessionStoppedCallback; + /** Type of datafeed callback */ typedef function, shared_ptr)> DatafeedCallbackFunction; @@ -586,71 +609,6 @@ protected: friend class Session; }; -/** Type of source callback */ -typedef function - SourceCallbackFunction; - -/* Data required for C callback function to call a C++ source callback */ -class SR_PRIV SourceCallbackData -{ -public: - bool run(int revents); -protected: - SourceCallbackData(shared_ptr source); - shared_ptr _source; - friend class Session; -}; - -/** An I/O event source */ -class SR_API EventSource -{ -public: - /** Create an event source from a file descriptor. - * @param fd File descriptor. - * @param events GLib IOCondition event mask. - * @param timeout Timeout in milliseconds. - * @param callback Callback of the form callback(events) */ - static shared_ptr create(int fd, Glib::IOCondition events, - int timeout, SourceCallbackFunction callback); - /** Create an event source from a GLib PollFD - * @param pollfd GLib PollFD - * @param timeout Timeout in milliseconds. - * @param callback Callback of the form callback(events) */ - static shared_ptr create(Glib::PollFD pollfd, int timeout, - SourceCallbackFunction callback); - /** Create an event source from a GLib IOChannel - * @param channel GLib IOChannel. - * @param events GLib IOCondition event mask. - * @param timeout Timeout in milliseconds. - * @param callback Callback of the form callback(events) */ - static shared_ptr create( - Glib::RefPtr channel, Glib::IOCondition events, - int timeout, SourceCallbackFunction callback); -protected: - EventSource(int timeout, SourceCallbackFunction callback); - ~EventSource(); - enum source_type { - SOURCE_FD, - SOURCE_POLLFD, - SOURCE_IOCHANNEL - } _type; - int _fd; - Glib::PollFD _pollfd; - Glib::RefPtr _channel; - Glib::IOCondition _events; - int _timeout; - SourceCallbackFunction _callback; - /** Deleter needed to allow shared_ptr use with protected destructor. */ - class Deleter - { - public: - void operator()(EventSource *source) { delete source; } - }; - friend class Deleter; - friend class Session; - friend class SourceCallbackData; -}; - /** A virtual device associated with a stored session */ class SR_API SessionDevice : public ParentOwned, @@ -686,26 +644,16 @@ public: void add_datafeed_callback(DatafeedCallbackFunction callback); /** Remove all datafeed callbacks from this session. */ void remove_datafeed_callbacks(); - /** Add an I/O event source. - * @param source EventSource to add. */ - void add_source(shared_ptr source); - /** Remove an event source. - * @param source EventSource to remove. */ - void remove_source(shared_ptr source); /** Start the session. */ void start(); /** Run the session event loop. */ 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); - /** 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(); /** Get the context. */ @@ -724,12 +672,8 @@ protected: map _owned_devices; map > _other_devices; vector _datafeed_callbacks; - map, SourceCallbackData *> _source_callbacks; + SessionStoppedCallback _stopped_callback; string _filename; - bool _saving; - bool _save_initialized; - string _save_filename; - uint64_t _save_samplerate; shared_ptr _trigger; friend class Deleter; friend class Context; @@ -839,9 +783,9 @@ class SR_API Analog : { public: /** Pointer to data. */ - float *data_pointer(); + void *data_pointer(); /** Number of samples in this packet. */ - unsigned int num_samples(); + uint32_t num_samples(); /** Channels for which this packet contains data. */ vector > channels(); /** Measured quantity of the samples in this packet. */