summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <daniel.friesel@uos.de>2020-08-27 10:36:23 +0200
committerDaniel Friesel <daniel.friesel@uos.de>2020-08-27 10:36:23 +0200
commit09055b8baf90fd2c8c70304e0cd6fb12f9068a36 (patch)
tree1a9662f3a6989a005ebe0bc35b49b2e68fbca5d3
parent6d05ba3f8a214bd5a1da340e600734b062c0756b (diff)
Support xz-compressed files
-rwxr-xr-xbin/msp430-etv130
1 files changed, 69 insertions, 61 deletions
diff --git a/bin/msp430-etv b/bin/msp430-etv
index 504f4f1..28cc514 100755
--- a/bin/msp430-etv
+++ b/bin/msp430-etv
@@ -16,65 +16,6 @@ import time
opt = dict()
-def running_mean(x: np.ndarray, N: int) -> np.ndarray:
- """
- Compute `N` elements wide running average over `x`.
-
- :param x: 1-Dimensional NumPy array
- :param N: how many items to average. Should be even for optimal results.
- """
-
- # to ensure that output.shape == input.shape, we need to insert data
- # at the boundaries
- boundary_array = np.insert(x, 0, np.full((N // 2), x[0]))
- boundary_array = np.append(boundary_array, np.full((N // 2 + N % 2), x[-1]))
- print(boundary_array)
- cumsum = np.cumsum(boundary_array)
- return (cumsum[N:] - cumsum[:-N]) / N
-
-
-def measure_data(filename, duration):
- # libmsp430.so must be available
- if not "LD_LIBRARY_PATH" in os.environ:
- os.environ[
- "LD_LIBRARY_PATH"
- ] = "{}/var/projects/msp430/MSP430Flasher_1.3.15".format(os.environ["HOME"])
-
- # https://github.com/carrotIndustries/energytrace-util must be available
- energytrace_cmd = "energytrace"
- if which(energytrace_cmd) is None:
- energytrace_cmd = "{}/var/source/energytrace-util/energytrace64".format(
- os.environ["HOME"]
- )
-
- if filename is not None:
- output_handle = open(filename, "w+")
- else:
- output_handle = tempfile.TemporaryFile("w+")
-
- energytrace = subprocess.Popen(
- [energytrace_cmd, str(duration)], stdout=output_handle, universal_newlines=True
- )
-
- try:
- if duration:
- time.sleep(duration)
- else:
- print("Press Ctrl+C to stop measurement")
- while True:
- time.sleep(3600)
- except KeyboardInterrupt:
- energytrace.send_signal(subprocess.signal.SIGTERM)
-
- energytrace.communicate(timeout=5)
-
- output_handle.seek(0)
- output = output_handle.read()
- output_handle.close()
-
- return output
-
-
def show_help():
print(
"""msp430-etv - MSP430 EnergyTrace Visualizer
@@ -91,6 +32,8 @@ using MSP430 EnergyTrace technology. Measurements can be taken directly (by
specifying <measurement duration> in seconds) or loaded from a logfile using
--load <file>. Data can be plotted or aggregated on stdout.
+This program is not affiliated with Texas Instruments. Use at your own risk.
+
OPTIONS
--load <file>
@@ -134,6 +77,65 @@ LD library search path (e.g. LD_LIBRARY_PATH=../MSP430Flasher).
)
+def running_mean(x: np.ndarray, N: int) -> np.ndarray:
+ """
+ Compute `N` elements wide running average over `x`.
+
+ :param x: 1-Dimensional NumPy array
+ :param N: how many items to average. Should be even for optimal results.
+ """
+
+ # to ensure that output.shape == input.shape, we need to insert data
+ # at the boundaries
+ boundary_array = np.insert(x, 0, np.full((N // 2), x[0]))
+ boundary_array = np.append(boundary_array, np.full((N // 2 + N % 2), x[-1]))
+ print(boundary_array)
+ cumsum = np.cumsum(boundary_array)
+ return (cumsum[N:] - cumsum[:-N]) / N
+
+
+def measure_data(filename, duration):
+ # libmsp430.so must be available
+ if not "LD_LIBRARY_PATH" in os.environ:
+ os.environ[
+ "LD_LIBRARY_PATH"
+ ] = "{}/var/projects/msp430/MSP430Flasher_1.3.15".format(os.environ["HOME"])
+
+ # https://github.com/carrotIndustries/energytrace-util must be available
+ energytrace_cmd = "energytrace"
+ if which(energytrace_cmd) is None:
+ energytrace_cmd = "{}/var/source/energytrace-util/energytrace64".format(
+ os.environ["HOME"]
+ )
+
+ if filename is not None:
+ output_handle = open(filename, "w+")
+ else:
+ output_handle = tempfile.TemporaryFile("w+")
+
+ energytrace = subprocess.Popen(
+ [energytrace_cmd, str(duration)], stdout=output_handle, universal_newlines=True
+ )
+
+ try:
+ if duration:
+ time.sleep(duration)
+ else:
+ print("Press Ctrl+C to stop measurement")
+ while True:
+ time.sleep(3600)
+ except KeyboardInterrupt:
+ energytrace.send_signal(subprocess.signal.SIGTERM)
+
+ energytrace.communicate(timeout=5)
+
+ output_handle.seek(0)
+ output = output_handle.read()
+ output_handle.close()
+
+ return output
+
+
def peak_search(data, lower, upper, direction_function):
while upper - lower > 1e-6:
bs_test = np.mean([lower, upper])
@@ -201,8 +203,14 @@ if __name__ == "__main__":
sys.exit(2)
if "load" in opt:
- with open(opt["load"], "r") as f:
- log_data = f.read()
+ if ".xz" in opt["load"]:
+ import lzma
+
+ with lzma.open(opt["load"], "rt") as f:
+ log_data = f.read()
+ else:
+ with open(opt["load"], "r") as f:
+ log_data = f.read()
else:
log_data = measure_data(opt["save"], duration)