bindings: Add UserDevice wrapping.
This commit is contained in:
parent
0af636bed9
commit
9fa5b426ec
|
@ -214,6 +214,13 @@ shared_ptr<Session> Context::create_session()
|
||||||
new Session(shared_from_this()), Session::Deleter());
|
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)
|
shared_ptr<Session> Context::load_session(string filename)
|
||||||
{
|
{
|
||||||
return shared_ptr<Session>(
|
return shared_ptr<Session>(
|
||||||
|
@ -522,6 +529,34 @@ shared_ptr<Driver> HardwareDevice::driver()
|
||||||
return _driver;
|
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) :
|
Channel::Channel(struct sr_channel *structure) :
|
||||||
ParentOwned(structure),
|
ParentOwned(structure),
|
||||||
_type(ChannelType::get(_structure->type))
|
_type(ChannelType::get(_structure->type))
|
||||||
|
|
|
@ -114,6 +114,7 @@ class SR_API InputDevice;
|
||||||
class SR_API Output;
|
class SR_API Output;
|
||||||
class SR_API DataType;
|
class SR_API DataType;
|
||||||
class SR_API Option;
|
class SR_API Option;
|
||||||
|
class SR_API UserDevice;
|
||||||
|
|
||||||
/** Exception thrown when an error code is returned by any libsigrok call. */
|
/** Exception thrown when an error code is returned by any libsigrok call. */
|
||||||
class SR_API Error: public exception
|
class SR_API Error: public exception
|
||||||
|
@ -263,6 +264,9 @@ public:
|
||||||
void set_log_callback_default();
|
void set_log_callback_default();
|
||||||
/** Create a new session. */
|
/** Create a new session. */
|
||||||
shared_ptr<Session> create_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.
|
/** Load a saved session.
|
||||||
* @param filename File name string. */
|
* @param filename File name string. */
|
||||||
shared_ptr<Session> load_session(string filename);
|
shared_ptr<Session> load_session(string filename);
|
||||||
|
@ -416,6 +420,28 @@ protected:
|
||||||
friend class ChannelGroup;
|
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 */
|
/** A channel on a device */
|
||||||
class SR_API Channel :
|
class SR_API Channel :
|
||||||
public ParentOwned<Channel, Device, struct sr_channel>
|
public ParentOwned<Channel, Device, struct sr_channel>
|
||||||
|
@ -440,6 +466,7 @@ protected:
|
||||||
~Channel();
|
~Channel();
|
||||||
const ChannelType * const _type;
|
const ChannelType * const _type;
|
||||||
friend class Device;
|
friend class Device;
|
||||||
|
friend class UserDevice;
|
||||||
friend class ChannelGroup;
|
friend class ChannelGroup;
|
||||||
friend class Session;
|
friend class Session;
|
||||||
friend class TriggerStage;
|
friend class TriggerStage;
|
||||||
|
|
|
@ -84,6 +84,7 @@ template< class T > class enable_shared_from_this;
|
||||||
%shared_ptr(sigrok::Trigger);
|
%shared_ptr(sigrok::Trigger);
|
||||||
%shared_ptr(sigrok::TriggerStage);
|
%shared_ptr(sigrok::TriggerStage);
|
||||||
%shared_ptr(sigrok::TriggerMatch);
|
%shared_ptr(sigrok::TriggerMatch);
|
||||||
|
%shared_ptr(sigrok::UserDevice);
|
||||||
|
|
||||||
%template(StringMap) std::map<std::string, std::string>;
|
%template(StringMap) std::map<std::string, std::string>;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue