diff options
| author | Clément Zrounba <clement.zrounba@ec-lyon.fr> | 2023-12-21 13:08:07 +0000 |
|---|---|---|
| committer | Clément Zrounba <clement.zrounba@ec-lyon.fr> | 2023-12-21 13:08:07 +0000 |
| commit | 0bb001dec03b295713ef9867e1de933136382d2c (patch) | |
| tree | 59f5df2a50b025d5c50045a82eea060cf6fee9c2 /src/devices/power_meter.cpp | |
| parent | 0e4b33a965e8eabb687ba07580be749e5f0ffe4c (diff) | |
| download | specs-dev.tar.gz specs-dev.zip | |
Add source files missing from previous commitdev
Diffstat (limited to 'src/devices/power_meter.cpp')
| -rw-r--r-- | src/devices/power_meter.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/devices/power_meter.cpp b/src/devices/power_meter.cpp new file mode 100644 index 0000000..ad3976d --- /dev/null +++ b/src/devices/power_meter.cpp @@ -0,0 +1,36 @@ +#include "specs.h" +#include <power_meter.h> +#include <cstdlib> // system() +#include <random> +#include <complex> + +using namespace std; + +void PowerMeter::trace(sc_trace_file *Tf) const +{ + sc_trace(Tf, m_cur_power, (string(name()) + ".power").c_str()); +} + +void PowerMeter::on_port_in_changed() +{ + // always initialize memory + m_memory_in[0] = 0; + + while (true) { + // Wait for a new input signal + wait(); + + const auto &p_in_read = p_in->read(); + + auto cur_wavelength_id = p_in_read.m_wavelength_id; + // Updating the field memory + m_memory_in[cur_wavelength_id] = p_in_read.m_field; + + double total_power = 0; + for (auto field : m_memory_in) + { + total_power += norm(field.second); + } + m_cur_power = total_power; + } +} |
