Skip to content
Snippets Groups Projects
Commit c91b74c7 authored by fuchsi*'s avatar fuchsi* Committed by rahix
Browse files

fix performance problems with pulse logging (caching time string and...

fix performance problems with pulse logging (caching time string and approximating timestamp via samplecount)
parent ea9a5414
No related branches found
No related tags found
No related merge requests found
...@@ -28,8 +28,13 @@ COLOR_WRITE_FG = [255, 255, 255] ...@@ -28,8 +28,13 @@ COLOR_WRITE_FG = [255, 255, 255]
COLOR_WRITE_BG = [255, 0, 0] COLOR_WRITE_BG = [255, 0, 0]
history = [] history = []
# variables for file output
filebuffer = bytearray() filebuffer = bytearray()
write = 0 write = 0
write_time_string = ""
samples_since_start_of_write = 0
update_screen = 0 update_screen = 0
pause_screen = 0 pause_screen = 0
pause_graph = False pause_graph = False
...@@ -109,7 +114,6 @@ def detect_pulse(num_new_samples): ...@@ -109,7 +114,6 @@ def detect_pulse(num_new_samples):
): ):
# the full QRS complex is < 0.1s long, so the q and r spike in particular cannot be more than ecg_rate//10 samples apart # the full QRS complex is < 0.1s long, so the q and r spike in particular cannot be more than ecg_rate//10 samples apart
pulse = 60 * ecg_rate // samples_since_last_pulse pulse = 60 * ecg_rate // samples_since_last_pulse
samples_since_last_pulse = 0
q_spike = -ecg_rate q_spike = -ecg_rate
if pulse < 30 or pulse > 210: if pulse < 30 or pulse > 210:
pulse = -1 pulse = -1
...@@ -117,6 +121,7 @@ def detect_pulse(num_new_samples): ...@@ -117,6 +121,7 @@ def detect_pulse(num_new_samples):
write_pulse() write_pulse()
# we expect the next r-spike to be at least 60% as high as this one # we expect the next r-spike to be at least 60% as high as this one
r_threshold = (cur * 3) // 5 r_threshold = (cur * 3) // 5
samples_since_last_pulse = 0
elif samples_since_last_pulse > 2 * ecg_rate: elif samples_since_last_pulse > 2 * ecg_rate:
q_threshold = -1 q_threshold = -1
r_threshold = 1 r_threshold = 1
...@@ -124,8 +129,10 @@ def detect_pulse(num_new_samples): ...@@ -124,8 +129,10 @@ def detect_pulse(num_new_samples):
def callback_ecg(datasets): def callback_ecg(datasets):
global update_screen, history, filebuffer, write global update_screen, history, filebuffer, write, samples_since_start_of_write
update_screen += len(datasets) update_screen += len(datasets)
if write > 0:
samples_since_start_of_write += len(datasets)
# update graph datalist # update graph datalist
if not pause_graph: if not pause_graph:
...@@ -147,10 +154,7 @@ def callback_ecg(datasets): ...@@ -147,10 +154,7 @@ def callback_ecg(datasets):
def append_to_file(fileprefix, content): def append_to_file(fileprefix, content):
global write, pause_screen global write, pause_screen
# write to file # write to file
lt = utime.localtime(write) filename = "/ecg_logs/{}-{}.log".format(fileprefix, write_time_string)
filename = "/ecg_logs/{}-{:04d}-{:02d}-{:02d}_{:02d}{:02d}{:02d}.log".format(
fileprefix, *lt
)
# write stuff to disk # write stuff to disk
try: try:
...@@ -174,7 +178,9 @@ def append_to_file(fileprefix, content): ...@@ -174,7 +178,9 @@ def append_to_file(fileprefix, content):
def write_pulse(): def write_pulse():
append_to_file("pulse", struct.pack("ib", utime.time(), pulse)) # estimates timestamp as calls to utime.time() take too much time
approx_timestamp = write + samples_since_start_of_write // config.get_option("Rate")
append_to_file("pulse", struct.pack("ib", approx_timestamp, pulse))
def write_filebuffer(): def write_filebuffer():
...@@ -199,7 +205,7 @@ def close_sensor(): ...@@ -199,7 +205,7 @@ def close_sensor():
def toggle_write(): def toggle_write():
global write, disp, pause_screen global write, disp, pause_screen, filebuffer, samples_since_start_of_write, write_time_string
pause_screen = utime.time_ms() + 1000 pause_screen = utime.time_ms() + 1000
disp.clear(COLOR_BACKGROUND) disp.clear(COLOR_BACKGROUND)
if write > 0: if write > 0:
...@@ -210,6 +216,9 @@ def toggle_write(): ...@@ -210,6 +216,9 @@ def toggle_write():
else: else:
filebuffer = bytearray() filebuffer = bytearray()
write = utime.time() write = utime.time()
lt = utime.localtime(write)
write_time_string = "{:04d}-{:02d}-{:02d}_{:02d}{:02d}{:02d}".format(*lt)
samples_since_start_of_write = 0
try: try:
os.mkdir("ecg_logs") os.mkdir("ecg_logs")
except: except:
...@@ -426,9 +435,7 @@ def main(): ...@@ -426,9 +435,7 @@ def main():
button_pressed["BOTTOM_RIGHT"] = 1 button_pressed["BOTTOM_RIGHT"] = 1
if pause_graph: if pause_graph:
graph_offset -= config.get_option("Rate") / 2 graph_offset -= config.get_option("Rate") / 2
graph_offset -= graph_offset % ( graph_offset -= graph_offset % (config.get_option("Rate") / 2)
config.get_option("Rate") / 2
)
if graph_offset < 0: if graph_offset < 0:
graph_offset = 0 graph_offset = 0
else: else:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment