aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras/adxl345.py
diff options
context:
space:
mode:
authorDmitry Butyugin <dmbutyugin@google.com>2021-09-26 01:54:50 +0200
committerKevinOConnor <kevin@koconnor.net>2021-10-13 11:56:52 -0400
commit91466ebd4351552f6d48cd07226427e3d9f27c32 (patch)
tree807047fbf92d308616363fd65aba921a13659939 /klippy/extras/adxl345.py
parentf72a2dc1abd3ba0be813d0da566a82251ec8097c (diff)
downloadkutter-91466ebd4351552f6d48cd07226427e3d9f27c32.tar.gz
kutter-91466ebd4351552f6d48cd07226427e3d9f27c32.tar.xz
kutter-91466ebd4351552f6d48cd07226427e3d9f27c32.zip
adxl345: Renamed decode_samples and fixed/added checks on empty data
Signed-off-by: Dmitry Butyugin <dmbutyugin@google.com>
Diffstat (limited to 'klippy/extras/adxl345.py')
-rw-r--r--klippy/extras/adxl345.py31
1 files changed, 27 insertions, 4 deletions
diff --git a/klippy/extras/adxl345.py b/klippy/extras/adxl345.py
index e331e33d..ad973698 100644
--- a/klippy/extras/adxl345.py
+++ b/klippy/extras/adxl345.py
@@ -36,14 +36,37 @@ class ADXL345QueryHelper:
self.cconn = cconn
print_time = printer.lookup_object('toolhead').get_last_move_time()
self.request_start_time = self.request_end_time = print_time
- self.samples = []
+ self.samples = self.raw_samples = []
def finish_measurements(self):
toolhead = self.printer.lookup_object('toolhead')
self.request_end_time = toolhead.get_last_move_time()
toolhead.wait_moves()
self.cconn.finalize()
- def decode_samples(self):
+ def _get_raw_samples(self):
raw_samples = self.cconn.get_messages()
+ if raw_samples:
+ self.raw_samples = raw_samples
+ return self.raw_samples
+ def has_valid_samples(self):
+ raw_samples = self._get_raw_samples()
+ for msg in raw_samples:
+ data = msg['params']['data']
+ first_sample_time = data[0][0]
+ last_sample_time = data[-1][0]
+ if (first_sample_time > self.request_end_time
+ or last_sample_time < self.request_start_time):
+ continue
+ # The time intervals [first_sample_time, last_sample_time]
+ # and [request_start_time, request_end_time] have non-zero
+ # intersection. It is still theoretically possible that none
+ # of the samples from raw_samples fall into the time interval
+ # [request_start_time, request_end_time] if it is too narrow
+ # or on very heavy data losses. In practice, that interval
+ # is at least 1 second, so this possibility is negligible.
+ return True
+ return False
+ def get_samples(self):
+ raw_samples = self._get_raw_samples()
if not raw_samples:
return self.samples
total = sum([len(m['params']['data']) for m in raw_samples])
@@ -68,7 +91,7 @@ class ADXL345QueryHelper:
pass
f = open(filename, "w")
f.write("#time,accel_x,accel_y,accel_z\n")
- samples = self.samples or self.decode_samples()
+ samples = self.samples or self.get_samples()
for t, accel_x, accel_y, accel_z in samples:
f.write("%.6f,%.6f,%.6f,%.6f\n" % (
t, accel_x, accel_y, accel_z))
@@ -129,7 +152,7 @@ class ADXLCommandHelper:
aclient = self.chip.start_internal_client()
self.printer.lookup_object('toolhead').dwell(1.)
aclient.finish_measurements()
- values = aclient.decode_samples()
+ values = aclient.get_samples()
if not values:
raise gcmd.error("No adxl345 measurements found")
_, accel_x, accel_y, accel_z = values[-1]