]> sigrok.org Git - libsigrok.git/blobdiff - bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp
SR_DF_ANALOG_OLD and sr_datafeed_analog_old renames.
[libsigrok.git] / bindings / cxx / include / libsigrokcxx / libsigrokcxx.hpp
index f96901f335ffbeef4be67262fbf428f895ab3ccb..3c8e7276b13a6b7a563eaf7fc265f829a1d56384 100644 (file)
@@ -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<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>
 {
@@ -258,6 +280,9 @@ public:
        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. */
@@ -272,7 +297,7 @@ public:
        shared_ptr<Packet> create_logic_packet(
                void *data_pointer, size_t data_length, unsigned int unit_size);
        /** Create an analog packet. */
-       shared_ptr<Packet> create_analog_packet(
+       shared_ptr<Packet> create_analog_old_packet(
                vector<shared_ptr<Channel> > channels,
                float *data_pointer, unsigned int num_samples, const Quantity *mq,
                const Unit *unit, vector<const QuantityFlag *> mqflags);
@@ -403,7 +428,7 @@ protected:
        friend class Channel;
        friend class ChannelGroup;
        friend class Output;
-       friend class Analog;
+       friend class AnalogOld;
 };
 
 /** A real hardware device, connected via a driver */
@@ -563,6 +588,9 @@ protected:
        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;
@@ -581,71 +609,6 @@ protected:
        friend class Session;
 };
 
-/** Type of source callback */
-typedef function<bool(Glib::IOCondition)>
-       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<EventSource> source);
-       shared_ptr<EventSource> _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<EventSource> 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<EventSource> 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<EventSource> create(
-               Glib::RefPtr<Glib::IOChannel> 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<Glib::IOChannel> _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<SessionDevice, Session, struct sr_dev_inst>,
@@ -681,21 +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<EventSource> source);
-       /** Remove an event source.
-        * @param source EventSource to remove. */
-       void remove_source(shared_ptr<EventSource> 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);
+       /** 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. */
@@ -714,7 +672,7 @@ protected:
        map<const struct sr_dev_inst *, SessionDevice *> _owned_devices;
        map<const struct sr_dev_inst *, shared_ptr<Device> > _other_devices;
        vector<DatafeedCallbackData *> _datafeed_callbacks;
-       map<shared_ptr<EventSource>, SourceCallbackData *> _source_callbacks;
+       SessionStoppedCallback _stopped_callback;
        string _filename;
        shared_ptr<Trigger> _trigger;
        friend class Deleter;
@@ -744,7 +702,7 @@ protected:
        friend class Header;
        friend class Meta;
        friend class Logic;
-       friend class Analog;
+       friend class AnalogOld;
        friend class Context;
 };
 
@@ -819,8 +777,8 @@ protected:
 };
 
 /** Payload of a datafeed packet with analog data */
-class SR_API Analog :
-       public ParentOwned<Analog, Packet, const struct sr_datafeed_analog>,
+class SR_API AnalogOld :
+       public ParentOwned<AnalogOld, Packet, const struct sr_datafeed_analog_old>,
        public PacketPayload
 {
 public:
@@ -837,8 +795,8 @@ public:
        /** Measurement flags associated with the samples in this packet. */
        vector<const QuantityFlag *> mq_flags();
 protected:
-       Analog(const struct sr_datafeed_analog *structure);
-       ~Analog();
+       AnalogOld(const struct sr_datafeed_analog_old *structure);
+       ~AnalogOld();
        shared_ptr<PacketPayload> get_shared_pointer(Packet *parent);
        friend class Packet;
 };