bindings: Support get_channel_groups() on base Device class.
This commit is contained in:
parent
2928f47d64
commit
6be7a7f287
|
@ -346,12 +346,20 @@ Device::Device(struct sr_dev_inst *structure) :
|
||||||
auto channel = (struct sr_channel *) entry->data;
|
auto channel = (struct sr_channel *) entry->data;
|
||||||
channels[channel] = new Channel(channel);
|
channels[channel] = new Channel(channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (GSList *entry = structure->channel_groups; entry; entry = entry->next)
|
||||||
|
{
|
||||||
|
auto group = (struct sr_channel_group *) entry->data;
|
||||||
|
channel_groups[group->name] = new ChannelGroup(this, group);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Device::~Device()
|
Device::~Device()
|
||||||
{
|
{
|
||||||
for (auto entry : channels)
|
for (auto entry : channels)
|
||||||
delete entry.second;
|
delete entry.second;
|
||||||
|
for (auto entry : channel_groups)
|
||||||
|
delete entry.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
string Device::get_vendor()
|
string Device::get_vendor()
|
||||||
|
@ -384,6 +392,20 @@ shared_ptr<Channel> Device::get_channel(struct sr_channel *ptr)
|
||||||
channels[ptr]->get_shared_pointer(this));
|
channels[ptr]->get_shared_pointer(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
map<string, shared_ptr<ChannelGroup>>
|
||||||
|
Device::get_channel_groups()
|
||||||
|
{
|
||||||
|
map<string, shared_ptr<ChannelGroup>> result;
|
||||||
|
for (auto entry: channel_groups)
|
||||||
|
{
|
||||||
|
auto name = entry.first;
|
||||||
|
auto channel_group = entry.second;
|
||||||
|
result[name] = static_pointer_cast<ChannelGroup>(
|
||||||
|
channel_group->get_shared_pointer(this));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void Device::open()
|
void Device::open()
|
||||||
{
|
{
|
||||||
check(sr_dev_open(structure));
|
check(sr_dev_open(structure));
|
||||||
|
@ -398,17 +420,10 @@ HardwareDevice::HardwareDevice(Driver *driver, struct sr_dev_inst *structure) :
|
||||||
Device(structure),
|
Device(structure),
|
||||||
driver(driver)
|
driver(driver)
|
||||||
{
|
{
|
||||||
for (GSList *entry = structure->channel_groups; entry; entry = entry->next)
|
|
||||||
{
|
|
||||||
auto group = (struct sr_channel_group *) entry->data;
|
|
||||||
channel_groups[group->name] = new ChannelGroup(this, group);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HardwareDevice::~HardwareDevice()
|
HardwareDevice::~HardwareDevice()
|
||||||
{
|
{
|
||||||
for (auto entry : channel_groups)
|
|
||||||
delete entry.second;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
shared_ptr<Driver> HardwareDevice::get_driver()
|
shared_ptr<Driver> HardwareDevice::get_driver()
|
||||||
|
@ -416,20 +431,6 @@ shared_ptr<Driver> HardwareDevice::get_driver()
|
||||||
return static_pointer_cast<Driver>(driver->get_shared_pointer(parent));
|
return static_pointer_cast<Driver>(driver->get_shared_pointer(parent));
|
||||||
}
|
}
|
||||||
|
|
||||||
map<string, shared_ptr<ChannelGroup>>
|
|
||||||
HardwareDevice::get_channel_groups()
|
|
||||||
{
|
|
||||||
map<string, shared_ptr<ChannelGroup>> result;
|
|
||||||
for (auto entry: channel_groups)
|
|
||||||
{
|
|
||||||
auto name = entry.first;
|
|
||||||
auto channel_group = entry.second;
|
|
||||||
result[name] = static_pointer_cast<ChannelGroup>(
|
|
||||||
channel_group->get_shared_pointer(this));
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
Channel::Channel(struct sr_channel *structure) :
|
Channel::Channel(struct sr_channel *structure) :
|
||||||
StructureWrapper<Device, struct sr_channel>(structure),
|
StructureWrapper<Device, struct sr_channel>(structure),
|
||||||
type(ChannelType::get(structure->type))
|
type(ChannelType::get(structure->type))
|
||||||
|
@ -465,9 +466,9 @@ void Channel::set_enabled(bool value)
|
||||||
check(sr_dev_channel_enable(parent->structure, structure->index, value));
|
check(sr_dev_channel_enable(parent->structure, structure->index, value));
|
||||||
}
|
}
|
||||||
|
|
||||||
ChannelGroup::ChannelGroup(HardwareDevice *device,
|
ChannelGroup::ChannelGroup(Device *device,
|
||||||
struct sr_channel_group *structure) :
|
struct sr_channel_group *structure) :
|
||||||
StructureWrapper<HardwareDevice, struct sr_channel_group>(structure),
|
StructureWrapper<Device, struct sr_channel_group>(structure),
|
||||||
Configurable(device->structure->driver, device->structure, structure)
|
Configurable(device->structure->driver, device->structure, structure)
|
||||||
{
|
{
|
||||||
for (GSList *entry = structure->channels; entry; entry = entry->next)
|
for (GSList *entry = structure->channels; entry; entry = entry->next)
|
||||||
|
|
|
@ -284,6 +284,8 @@ public:
|
||||||
string get_version();
|
string get_version();
|
||||||
/** List of the channels available on this device. */
|
/** List of the channels available on this device. */
|
||||||
vector<shared_ptr<Channel> > get_channels();
|
vector<shared_ptr<Channel> > get_channels();
|
||||||
|
/** Channel groups available on this device, indexed by name. */
|
||||||
|
map<string, shared_ptr<ChannelGroup> > get_channel_groups();
|
||||||
/** Open device. */
|
/** Open device. */
|
||||||
void open();
|
void open();
|
||||||
/** Close device. */
|
/** Close device. */
|
||||||
|
@ -293,6 +295,7 @@ protected:
|
||||||
~Device();
|
~Device();
|
||||||
shared_ptr<Channel> get_channel(struct sr_channel *ptr);
|
shared_ptr<Channel> get_channel(struct sr_channel *ptr);
|
||||||
map<struct sr_channel *, Channel *> channels;
|
map<struct sr_channel *, Channel *> channels;
|
||||||
|
map<string, ChannelGroup *> channel_groups;
|
||||||
/** Deleter needed to allow shared_ptr use with protected destructor. */
|
/** Deleter needed to allow shared_ptr use with protected destructor. */
|
||||||
class Deleter
|
class Deleter
|
||||||
{
|
{
|
||||||
|
@ -313,13 +316,10 @@ class SR_API HardwareDevice : public Device
|
||||||
public:
|
public:
|
||||||
/** Driver providing this device. */
|
/** Driver providing this device. */
|
||||||
shared_ptr<Driver> get_driver();
|
shared_ptr<Driver> get_driver();
|
||||||
/** Channel groups available on this device, indexed by name. */
|
|
||||||
map<string, shared_ptr<ChannelGroup> > get_channel_groups();
|
|
||||||
protected:
|
protected:
|
||||||
HardwareDevice(Driver *driver, struct sr_dev_inst *structure);
|
HardwareDevice(Driver *driver, struct sr_dev_inst *structure);
|
||||||
~HardwareDevice();
|
~HardwareDevice();
|
||||||
Driver *driver;
|
Driver *driver;
|
||||||
map<string, ChannelGroup *> channel_groups;
|
|
||||||
friend class Driver;
|
friend class Driver;
|
||||||
friend class ChannelGroup;
|
friend class ChannelGroup;
|
||||||
};
|
};
|
||||||
|
@ -350,7 +350,7 @@ protected:
|
||||||
|
|
||||||
/** A group of channels on a device, which share some configuration */
|
/** A group of channels on a device, which share some configuration */
|
||||||
class SR_API ChannelGroup :
|
class SR_API ChannelGroup :
|
||||||
public StructureWrapper<HardwareDevice, struct sr_channel_group>,
|
public StructureWrapper<Device, struct sr_channel_group>,
|
||||||
public Configurable
|
public Configurable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -359,10 +359,10 @@ public:
|
||||||
/** List of the channels in this group. */
|
/** List of the channels in this group. */
|
||||||
vector<shared_ptr<Channel> > get_channels();
|
vector<shared_ptr<Channel> > get_channels();
|
||||||
protected:
|
protected:
|
||||||
ChannelGroup(HardwareDevice *device, struct sr_channel_group *structure);
|
ChannelGroup(Device *device, struct sr_channel_group *structure);
|
||||||
~ChannelGroup();
|
~ChannelGroup();
|
||||||
vector<Channel *> channels;
|
vector<Channel *> channels;
|
||||||
friend class HardwareDevice;
|
friend class Device;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** A trigger configuration */
|
/** A trigger configuration */
|
||||||
|
|
|
@ -188,14 +188,14 @@ typedef std::map<const sigrok::ConfigKey *, Glib::VariantBase>
|
||||||
std::vector<std::shared_ptr<sigrok::Channel> >,
|
std::vector<std::shared_ptr<sigrok::Channel> >,
|
||||||
channels, get_channels);
|
channels, get_channels);
|
||||||
|
|
||||||
|
%attributeval(sigrok::Device, map_string_ChannelGroup,
|
||||||
|
channel_groups, get_channel_groups);
|
||||||
|
|
||||||
/* Using %attributestring for shared_ptr attribute. See
|
/* Using %attributestring for shared_ptr attribute. See
|
||||||
http://sourceforge.net/p/swig/mailman/message/31832070/ */
|
http://sourceforge.net/p/swig/mailman/message/31832070/ */
|
||||||
%attributestring(sigrok::HardwareDevice,
|
%attributestring(sigrok::HardwareDevice,
|
||||||
std::shared_ptr<sigrok::Driver>, driver, get_driver);
|
std::shared_ptr<sigrok::Driver>, driver, get_driver);
|
||||||
|
|
||||||
%attributeval(sigrok::HardwareDevice, map_string_ChannelGroup,
|
|
||||||
channel_groups, get_channel_groups);
|
|
||||||
|
|
||||||
%attributestring(sigrok::Channel, std::string, name, get_name, set_name);
|
%attributestring(sigrok::Channel, std::string, name, get_name, set_name);
|
||||||
%attribute(sigrok::Channel, bool, enabled, get_enabled, set_enabled);
|
%attribute(sigrok::Channel, bool, enabled, get_enabled, set_enabled);
|
||||||
%attribute(sigrok::Channel, const sigrok::ChannelType *, type, get_type);
|
%attribute(sigrok::Channel, const sigrok::ChannelType *, type, get_type);
|
||||||
|
|
Loading…
Reference in New Issue