bindings: Add UserDevice wrapping.

This commit is contained in:
Martin Ling 2014-11-12 02:23:02 +00:00 committed by Uwe Hermann
parent 0af636bed9
commit 9fa5b426ec
3 changed files with 63 additions and 0 deletions

View File

@ -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))

View File

@ -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;

View File

@ -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>;