aboutsummaryrefslogtreecommitdiff
path: root/src/devices/power_meter.cpp
diff options
context:
space:
mode:
authorClément Zrounba <clement.zrounba@ec-lyon.fr>2023-12-21 13:08:07 +0000
committerClément Zrounba <clement.zrounba@ec-lyon.fr>2023-12-21 13:08:07 +0000
commit0bb001dec03b295713ef9867e1de933136382d2c (patch)
tree59f5df2a50b025d5c50045a82eea060cf6fee9c2 /src/devices/power_meter.cpp
parent0e4b33a965e8eabb687ba07580be749e5f0ffe4c (diff)
downloadspecs-0bb001dec03b295713ef9867e1de933136382d2c.tar.gz
specs-0bb001dec03b295713ef9867e1de933136382d2c.zip
Add source files missing from previous commitdev
Diffstat (limited to 'src/devices/power_meter.cpp')
-rw-r--r--src/devices/power_meter.cpp36
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;
+ }
+}