class SR_API Quantity;
class SR_API Unit;
class SR_API QuantityFlag;
-class SR_API InputFileDevice;
+class SR_API Input;
+class SR_API InputDevice;
class SR_API Output;
class SR_API DataType;
class SR_API Option;
/** Create a new trigger.
* @param name Name string for new trigger. */
shared_ptr<Trigger> create_trigger(string name);
+ /** Open an input file.
+ * @param filename File name string. */
+ shared_ptr<Input> open_file(string filename);
+ /** Open an input stream based on header data.
+ * @param header Initial data from stream. */
+ shared_ptr<Input> open_stream(string header);
protected:
struct sr_context *structure;
map<string, Driver *> drivers;
/** A generic device, either hardware or virtual */
class SR_API Device :
- public Configurable,
- public StructureWrapper<Context, struct sr_dev_inst>
+ public enable_shared_from_this<Device>,
+ public Configurable
{
public:
/** Description identifying this device. */
Device(struct sr_dev_inst *structure);
~Device();
shared_ptr<Channel> get_channel(struct sr_channel *ptr);
+ struct sr_dev_inst *structure;
map<struct sr_channel *, Channel *> channels;
map<string, ChannelGroup *> channel_groups;
/** Deleter needed to allow shared_ptr use with protected destructor. */
};
/** A real hardware device, connected via a driver */
-class SR_API HardwareDevice : public Device
+class SR_API HardwareDevice :
+ public StructureWrapper<Context, struct sr_dev_inst>,
+ public Device
{
public:
/** Driver providing this device. */
/** An input format supported by the library */
class SR_API InputFormat :
- public StructureWrapper<Context, struct sr_input_format>
+ public StructureWrapper<Context, const struct sr_input_module>
{
public:
/** Name of this input format. */
string get_name();
/** Description of this input format. */
string get_description();
- /** Check whether a given file matches this input format.
- * @param filename File name string. */
- bool format_match(string filename);
- /** Open a file using this input format.
- * @param filename File name string.
- * @param options Mapping of (option name, value) strings. */
- shared_ptr<InputFileDevice> open_file(string filename,
- map<string, string> options = {});
+ /** Options supported by this input format. */
+ map<string, shared_ptr<Option> > get_options();
+ /** Create an input using this input format.
+ * @param options Mapping of (option name, value) pairs. */
+ shared_ptr<Input> create_input(map<string, Glib::VariantBase> options = {});
protected:
- InputFormat(struct sr_input_format *structure);
+ InputFormat(const struct sr_input_module *structure);
~InputFormat();
friend class Context;
- friend class InputFileDevice;
+ friend class InputDevice;
};
-/** A virtual device associated with an input file */
-class SR_API InputFileDevice : public Device
+/** An input instance (an input format applied to a file or stream) */
+class SR_API Input : public enable_shared_from_this<Input>
{
public:
- /** Load data from file. */
- void load();
+ /** Virtual device associated with this input. */
+ shared_ptr<InputDevice> get_device();
+ /** Send next stream data.
+ * @param data Next stream data. */
+ void send(string data);
protected:
- InputFileDevice(shared_ptr<InputFormat> format,
- struct sr_input *input, string filename);
- ~InputFileDevice();
- struct sr_input *input;
- shared_ptr<InputFormat> format;
- string filename;
+ Input(shared_ptr<Context> context, const struct sr_input *structure);
+ ~Input();
+ const struct sr_input *structure;
+ shared_ptr<Context> context;
+ InputDevice *device;
/** Deleter needed to allow shared_ptr use with protected destructor. */
class Deleter
{
public:
- void operator()(InputFileDevice *device) { delete device; }
+ void operator()(Input *input) { delete input; }
};
friend class Deleter;
+ friend class Context;
friend class InputFormat;
};
+/** A virtual device associated with an input */
+class SR_API InputDevice :
+ public StructureWrapper<Input, struct sr_dev_inst>,
+ public Device
+{
+protected:
+ InputDevice(shared_ptr<Input> input, struct sr_dev_inst *sdi);
+ ~InputDevice();
+ shared_ptr<Input> input;
+ /** Deleter needed to allow shared_ptr use with protected destructor. */
+ class Deleter
+ {
+ public:
+ void operator()(InputDevice *device) { delete device; }
+ };
+ friend class Deleter;
+ friend class Input;
+};
+
/** An option used by an output format */
class SR_API Option
{
vector<Glib::VariantBase> get_values();
protected:
Option(const struct sr_option *structure,
- shared_ptr<const struct sr_option> structure_array);
+ shared_ptr<const struct sr_option *> structure_array);
~Option();
const struct sr_option *structure;
- shared_ptr<const struct sr_option> structure_array;
+ shared_ptr<const struct sr_option *> structure_array;
/** Deleter needed to allow shared_ptr use with protected destructor. */
class Deleter
{