Skip to content

Commit a946357

Browse files
Teo PerisanuTeo Perisanu
authored andcommitted
Digital: Retrieve trigger out.
Add the out trigger as an attribute inside m2k. Add getter inside digital interface for trigger out. Signed-off-by: Teo Perisanu <[email protected]>
1 parent 1211422 commit a946357

File tree

5 files changed

+32
-6
lines changed

5 files changed

+32
-6
lines changed

include/libm2k/digital/m2kdigital.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <libm2k/digital/enums.hpp>
2727
#include <libm2k/analog/enums.hpp>
2828
#include <libm2k/m2khardwaretrigger.hpp>
29+
#include <libm2k/m2kouthardwaretrigger.hpp>
2930
#include <string>
3031
#include <vector>
3132

@@ -352,6 +353,13 @@ class LIBM2K_API M2kDigital
352353
virtual libm2k::M2kHardwareTrigger* getTrigger() = 0;
353354

354355

356+
/**
357+
* @brief Get the hardware trigger out handler
358+
* @return the trigger object
359+
*/
360+
virtual libm2k::M2kOutHardwareTrigger* getOutTrigger() = 0;
361+
362+
355363
/**
356364
* @brief Set the kernel buffers for input to a specific value
357365
* @param count the number of kernel buffers

src/digital/m2kdigital_impl.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ std::vector<std::string> M2kDigitalImpl::m_output_mode = {
3838
"push-pull",
3939
};
4040

41-
M2kDigitalImpl::M2kDigitalImpl(struct iio_context *ctx, std::string logic_dev, bool sync, M2kHardwareTrigger *trigger)
41+
M2kDigitalImpl::M2kDigitalImpl(struct iio_context *ctx, std::string logic_dev, bool sync, M2kHardwareTrigger *trigger, M2kOutHardwareTrigger *trigger_out)
4242
{
4343
__try {
4444
m_dev_generic = make_shared<DeviceGeneric>(ctx, logic_dev);
@@ -48,6 +48,7 @@ M2kDigitalImpl::M2kDigitalImpl(struct iio_context *ctx, std::string logic_dev, b
4848
}
4949

5050
m_trigger = trigger;
51+
m_trigger_out = trigger_out;
5152
m_dev_name_write = logic_dev + "-tx";
5253
m_dev_name_read = logic_dev + "-rx";
5354

@@ -347,6 +348,14 @@ M2kHardwareTrigger* M2kDigitalImpl::getTrigger()
347348
return m_trigger;
348349
}
349350

351+
M2kOutHardwareTrigger* M2kDigitalImpl::getOutTrigger()
352+
{
353+
if (!m_trigger_out) {
354+
throw_exception(EXC_INVALID_PARAMETER, "Digital TX trigger is not available");
355+
}
356+
return m_trigger_out;
357+
}
358+
350359
void M2kDigitalImpl::setOutputMode(DIO_CHANNEL chn, DIO_MODE mode)
351360
{
352361
std::string output_mode = m_output_mode[mode];

src/digital/m2kdigital_impl.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ namespace digital {
3838
class M2kDigitalImpl : public M2kDigital
3939
{
4040
public:
41-
M2kDigitalImpl(struct iio_context* ctx, std::string logic_dev, bool sync, M2kHardwareTrigger *trigger);
41+
M2kDigitalImpl(struct iio_context* ctx, std::string logic_dev, bool sync, M2kHardwareTrigger *trigger, M2kOutHardwareTrigger *trigger_out);
4242
virtual ~M2kDigitalImpl();
4343

4444
void reset();
@@ -85,6 +85,7 @@ class M2kDigitalImpl : public M2kDigital
8585
void setCyclic(bool cyclic);
8686

8787
libm2k::M2kHardwareTrigger* getTrigger();
88+
libm2k::M2kOutHardwareTrigger* getOutTrigger() override;
8889

8990
void setKernelBuffersCountIn(unsigned int count);
9091
void setKernelBuffersCountOut(unsigned int count);
@@ -108,6 +109,7 @@ class M2kDigitalImpl : public M2kDigital
108109
std::vector<bool> m_tx_channels_enabled;
109110
std::vector<bool> m_rx_channels_enabled;
110111
libm2k::M2kHardwareTrigger *m_trigger;
112+
libm2k::M2kOutHardwareTrigger *m_trigger_out;
111113
static std::vector<std::string> m_output_mode;
112114

113115
void syncDevice();

src/m2k_impl.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "analog/m2kpowersupply_impl.hpp"
2626
#include "m2khardwaretrigger_impl.hpp"
2727
#include "m2khardwaretrigger_v0.24_impl.hpp"
28+
#include "m2kouthardwaretrigger_impl.hpp"
2829
#include "m2kcalibration_impl.hpp"
2930
#include <libm2k/analog/dmm.hpp>
3031
#include "utils/channel.hpp"
@@ -66,13 +67,17 @@ M2kImpl::M2kImpl(std::string uri, iio_context* ctx, std::string name, bool sync)
6667

6768
m_firmware_version = getFirmwareVersion();
6869

69-
int diff = Utils::compareVersions(m_firmware_version, "v0.24");
70-
if (diff < 0) { //m_firmware_version < 0.24
70+
int diff_v024 = Utils::compareVersions(m_firmware_version, "v0.24");
71+
if (diff_v024 < 0) { //m_firmware_version < 0.24
7172
m_trigger = new M2kHardwareTriggerImpl(ctx);
7273
} else {
7374
m_trigger = new M2kHardwareTriggerV024Impl(ctx);
7475
}
75-
76+
// TODO replace v0.25 -> v0.26 and change the comp condition
77+
int diff_v026 = Utils::compareVersions(m_firmware_version, "v0.25");
78+
if (diff_v026 < 0) {
79+
m_trigger_out = new M2kOutHardwareTriggerImpl(ctx);
80+
}
7681
if (!m_trigger) {
7782
throw_exception(EXC_INVALID_PARAMETER, "Can't instantiate M2K board; M2K trigger is invalid.");
7883
}
@@ -187,7 +192,7 @@ void M2kImpl::scanAllPowerSupply()
187192

188193
void M2kImpl::scanAllDigital()
189194
{
190-
libm2k::digital::M2kDigital* logic = new libm2k::digital::M2kDigitalImpl(m_context, "m2k-logic-analyzer", m_sync, m_trigger);
195+
libm2k::digital::M2kDigital* logic = new libm2k::digital::M2kDigitalImpl(m_context, "m2k-logic-analyzer", m_sync, m_trigger, m_trigger_out);
191196
m_instancesDigital.push_back(logic);
192197
}
193198

src/m2k_impl.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
namespace libm2k {
2929
class M2kHardwareTrigger;
30+
class M2kOutHardwareTrigger;
3031
class M2kCalibration;
3132

3233
namespace context {
@@ -73,6 +74,7 @@ class M2kImpl : public M2k, public ContextImpl
7374
private:
7475
M2kCalibration* m_calibration;
7576
libm2k::M2kHardwareTrigger *m_trigger;
77+
libm2k::M2kOutHardwareTrigger *m_trigger_out;
7678
std::vector<analog::M2kAnalogOut*> m_instancesAnalogOut;
7779
std::vector<analog::M2kAnalogIn*> m_instancesAnalogIn;
7880
std::vector<analog::M2kPowerSupply*> m_instancesPowerSupply;

0 commit comments

Comments
 (0)