aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2024-05-01 20:46:49 -0400
committerKevin O'Connor <kevin@koconnor.net>2024-05-21 20:16:31 -0400
commit4709f1fad50b642f744a8804608d55855d7d7b42 (patch)
tree64d97e8129e44bdae95e05a37fb31b2be5a2f156
parent04c562941c65c0f62f39179c0c2cf4f580c6960f (diff)
downloadkutter-4709f1fad50b642f744a8804608d55855d7d7b42.tar.gz
kutter-4709f1fad50b642f744a8804608d55855d7d7b42.tar.xz
kutter-4709f1fad50b642f744a8804608d55855d7d7b42.zip
sensor_ldc1612: Create new check_home() helper function
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
-rw-r--r--src/sensor_ldc1612.c37
1 files changed, 22 insertions, 15 deletions
diff --git a/src/sensor_ldc1612.c b/src/sensor_ldc1612.c
index 3db4de4b..f53b4e2f 100644
--- a/src/sensor_ldc1612.c
+++ b/src/sensor_ldc1612.c
@@ -111,6 +111,26 @@ command_query_ldc1612_home_state(uint32_t *args)
DECL_COMMAND(command_query_ldc1612_home_state,
"query_ldc1612_home_state oid=%c");
+// Check if a sample should trigger a homing event
+static void
+check_home(struct ldc1612 *ld, uint32_t data)
+{
+ uint8_t homing_flags = ld->homing_flags;
+ if (!(homing_flags & LH_CAN_TRIGGER))
+ return;
+ uint32_t time = timer_read_time();
+ if ((homing_flags & LH_AWAIT_HOMING)
+ && timer_is_before(time, ld->homing_clock))
+ return;
+ homing_flags &= ~LH_AWAIT_HOMING;
+ if (data > ld->trigger_threshold) {
+ homing_flags = 0;
+ ld->homing_clock = time;
+ trsync_do_trigger(ld->ts, ld->trigger_reason);
+ }
+ ld->homing_flags = homing_flags;
+}
+
// Chip registers
#define REG_DATA0_MSB 0x00
#define REG_DATA0_LSB 0x01
@@ -153,21 +173,8 @@ ldc1612_query(struct ldc1612 *ld, uint8_t oid)
ld->sb.data_count += BYTES_PER_SAMPLE;
// Check for endstop trigger
- uint8_t homing_flags = ld->homing_flags;
- if (homing_flags & LH_CAN_TRIGGER) {
- uint32_t time = timer_read_time();
- if (!(homing_flags & LH_AWAIT_HOMING)
- || !timer_is_before(time, ld->homing_clock)) {
- homing_flags &= ~LH_AWAIT_HOMING;
- uint32_t data = (d[0] << 24L) | (d[1] << 16L) | (d[2] << 8) | d[3];
- if (data > ld->trigger_threshold) {
- homing_flags = 0;
- ld->homing_clock = time;
- trsync_do_trigger(ld->ts, ld->trigger_reason);
- }
- ld->homing_flags = homing_flags;
- }
- }
+ uint32_t data = (d[0] << 24L) | (d[1] << 16L) | (d[2] << 8) | d[3];
+ check_home(ld, data);
// Flush local buffer if needed
if (ld->sb.data_count + BYTES_PER_SAMPLE > ARRAY_SIZE(ld->sb.data))