summaryrefslogtreecommitdiff
path: root/esds/plugins
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2022-09-09 13:16:42 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2022-09-09 13:16:42 +0200
commitcfa677a0c678f742203aea601c6368768e5467da (patch)
treebe42cf52fc912a6ca78d334039d47cfb591e9e43 /esds/plugins
parent57f020e09d738e283520e8cfc88b4cdd1aeaa551 (diff)
Debug synchronization + add return code
Diffstat (limited to 'esds/plugins')
-rw-r--r--esds/plugins/node_plugin.py6
-rw-r--r--esds/plugins/power_states.py45
2 files changed, 27 insertions, 24 deletions
diff --git a/esds/plugins/node_plugin.py b/esds/plugins/node_plugin.py
index 1b62d60..2e6c8e4 100644
--- a/esds/plugins/node_plugin.py
+++ b/esds/plugins/node_plugin.py
@@ -26,6 +26,12 @@ class NodePlugin:
def on_communication_end(self,time,com_event):
pass
+
+ def on_turn_on(self):
+ pass
+
+ def on_turn_off(self):
+ pass
def log(self,msg):
self.api.log(self.plugin_name+"(NP) "+msg)
diff --git a/esds/plugins/power_states.py b/esds/plugins/power_states.py
index e5a0e19..3c97c4f 100644
--- a/esds/plugins/power_states.py
+++ b/esds/plugins/power_states.py
@@ -110,10 +110,7 @@ class PowerStatesComms(NodePlugin):
def __init__(self,api):
super().__init__("PowerStatesComms",api)
- self.energy_dynamic=0.0 # Store the dynamic part of the energy consumption
self.power=dict() # Store the power states
- self.tx_clock=0 # Dynamic clock (store the time at which a the last tx starts
- self.idle_clock=api.read("clock") # Store the start time (to compute the idle part of the energy consumption)
def on_communication_end(self,time,com_event):
content=com_event[2]
@@ -121,39 +118,39 @@ class PowerStatesComms(NodePlugin):
duration=time-content[7]
interface=content[2]
mode= "tx" if content[0] == self.api.node_id else "rx"
- self.energy_dynamic+=self.power[interface][mode]*duration
+ self.power[interface]["consumption_dynamic"]+=self.power[interface][mode]*duration
+ if self.api.node_id==0:
+ print("called with +{}J".format(self.power[interface][mode]*duration))
def set_power(self,interface,idle,tx,rx):
self.power[interface]=dict()
self.power[interface]["idle"]=idle
self.power[interface]["rx"]=rx
self.power[interface]["tx"]=tx
+ self.power[interface]["on_at"]=self.api.read("clock")
+ self.power[interface]["consumption_idle"]=0
+ self.power[interface]["consumption_dynamic"]=0
- def get_idle(self):
+ def on_turn_on(self):
+ for interface in self.power.keys():
+ self.power[interface]["on_at"]=self.api.read("clock")
+
+ def on_turn_off(self):
+ self.sync_idle()
+ self.log("Consumes "+str(self.get_energy()))
+
+ def sync_idle(self):
clock=self.api.read("clock")
- idle=0
for interface in self.power.keys():
- idle+=(clock-self.idle_clock)*self.power[interface]["idle"]
- return idle
-
- def get_receive_queue_energy(self,interface):
- """
- Not that call to on_receive_return may not have happened yet (or never).
- Thus we should manually compute the energy consumption stored in each queues of the node.
- """
- energy=0
- # For each interface we should check if there is received data that has not been consumed
- for data in list(self.api["interfaces"][interface].queue):
- start_at=float(data[1])
- end_at=float(data[2])
- energy+=(end_at-start_at)*self.power[interface]["rx"]
- return energy
+ self.power[interface]["consumption_idle"]+=(clock-self.power[interface]["on_at"])*self.power[interface]["idle"]
+ self.power[interface]["on_at"]=clock
def get_energy(self):
- queue_energy=0
+ self.sync_idle()
+ consumption=0
for interface in self.power.keys():
- queue_energy+=self.get_receive_queue_energy(interface)
- return self.get_idle()+self.energy_dynamic+queue_energy
+ consumption+=self.power[interface]["consumption_idle"]+self.power[interface]["consumption_dynamic"]
+ return consumption
def report_energy(self):
self.log("Communications consumed "+str(round(self.get_energy(),2))+"J")