new Session(shared_from_this()), Session::Deleter());
}
+shared_ptr<UserDevice> Context::create_user_device(
+ string vendor, string model, string version)
+{
+ return shared_ptr<UserDevice>(
+ new UserDevice(vendor, model, version), UserDevice::Deleter());
+}
+
shared_ptr<Session> Context::load_session(string filename)
{
return shared_ptr<Session>(
return _driver;
}
+UserDevice::UserDevice(string vendor, string model, string version) :
+ UserOwned(sr_dev_inst_user_new(
+ vendor.c_str(), model.c_str(), version.c_str())),
+ Device(UserOwned::_structure)
+{
+}
+
+UserDevice::~UserDevice()
+{
+}
+
+shared_ptr<Device> UserDevice::get_shared_from_this()
+{
+ return static_pointer_cast<Device>(shared_from_this());
+}
+
+shared_ptr<Channel> UserDevice::add_channel(unsigned int index,
+ const ChannelType *type, string name)
+{
+ check(sr_dev_inst_channel_add(Device::_structure,
+ index, type->id(), name.c_str()));
+ struct sr_channel *structure = (struct sr_channel *)
+ g_slist_last(sr_dev_inst_channels_get(Device::_structure))->data;
+ Channel *channel = new Channel(structure);
+ _channels[structure] = channel;
+ return get_channel(structure);
+}
+
Channel::Channel(struct sr_channel *structure) :
ParentOwned(structure),
_type(ChannelType::get(_structure->type))
class SR_API Output;
class SR_API DataType;
class SR_API Option;
+class SR_API UserDevice;
/** Exception thrown when an error code is returned by any libsigrok call. */
class SR_API Error: public exception
void set_log_callback_default();
/** Create a new session. */
shared_ptr<Session> create_session();
+ /** Create a new user device. */
+ shared_ptr<UserDevice> create_user_device(
+ string vendor, string model, string version);
/** Load a saved session.
* @param filename File name string. */
shared_ptr<Session> load_session(string filename);
friend class ChannelGroup;
};
+/** A virtual device, created by the user */
+class SR_API UserDevice :
+ public UserOwned<UserDevice, struct sr_dev_inst>,
+ public Device
+{
+public:
+ /** Add a new channel to this device. */
+ shared_ptr<Channel> add_channel(unsigned int index, const ChannelType *type, string name);
+protected:
+ UserDevice(string vendor, string model, string version);
+ ~UserDevice();
+ shared_ptr<Device> get_shared_from_this();
+ /** Deleter needed to allow shared_ptr use with protected destructor. */
+ class Deleter
+ {
+ public:
+ void operator()(UserDevice *device) { delete device; }
+ };
+ friend class Context;
+ friend class Deleter;
+};
+
/** A channel on a device */
class SR_API Channel :
public ParentOwned<Channel, Device, struct sr_channel>
~Channel();
const ChannelType * const _type;
friend class Device;
+ friend class UserDevice;
friend class ChannelGroup;
friend class Session;
friend class TriggerStage;
%shared_ptr(sigrok::Trigger);
%shared_ptr(sigrok::TriggerStage);
%shared_ptr(sigrok::TriggerMatch);
+%shared_ptr(sigrok::UserDevice);
%template(StringMap) std::map<std::string, std::string>;