From cbebe3742e0d9aebac63e8eab13c22546e94422b Mon Sep 17 00:00:00 2001
From: Aaron Patterson <tenderlove@ruby-lang.org>
Date: Sat, 20 Aug 2022 13:38:29 -0700
Subject: [PATCH] simplify predicate definition

---
 firmware/components/shifter/include/shifter.h | 24 ++++++++++---------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/firmware/components/shifter/include/shifter.h b/firmware/components/shifter/include/shifter.h
index 3d120b0..52f6988 100644
--- a/firmware/components/shifter/include/shifter.h
+++ b/firmware/components/shifter/include/shifter.h
@@ -9,25 +9,27 @@
 extern "C" {
 #endif
 
-static inline bool
-SHIFTER_BACK_P(twai_message_t message)
-{
-    return message.identifier == 0x197 && message.data[2] == 0x3e;
+#define POSITION_PREDICATE(name, byte) \
+static inline bool SHIFTER_##name##_P(twai_message_t message) \
+{ \
+    return message.identifier == 0x197 && message.data[2] == byte; \
 }
 
+POSITION_PREDICATE(CENTER, 0x0e);
+POSITION_PREDICATE(UP, 0x1e);
+POSITION_PREDICATE(UP_UP, 0x2e);
+POSITION_PREDICATE(DOWN, 0x3e);
+POSITION_PREDICATE(DOWN_DOWN, 0x4e);
+POSITION_PREDICATE(SIDE_UP, 0x5e);
+POSITION_PREDICATE(SIDE_DOWN, 0x6e);
+POSITION_PREDICATE(SIDE, 0x7e);
+
 static inline bool
 SHIFTER_PARK_P(twai_message_t message)
 {
     return message.identifier == 0x197 && message.data[3] == 0xd5;
 }
 
-static inline bool
-SHIFTER_CENTER_P(twai_message_t message)
-{
-    return message.identifier == 0x197 && message.data[2] == 0x0e &&
-      message.data[3] == 0xc0;
-}
-
 void shifter_send_park(void);
 void shifter_send_drive(bool moveable);
 void shifter_send_reset(void);