]> git.0d.be Git - PanikSwitch.git/blobdiff - PanikSwitch.h
add files as found on server
[PanikSwitch.git] / PanikSwitch.h
diff --git a/PanikSwitch.h b/PanikSwitch.h
new file mode 100644 (file)
index 0000000..f3441c6
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+    Definition of new types for Switch Kontrol
+*/
+
+#include "avr/pgmspace.h"  // Needed for PROGMEM stuff
+
+
+/* declaration of relay postions
+*/
+typedef enum { RELAY_STATE_OPEN, RELAY_STATE_CLOSED } relayState_t;
+
+
+/* declaration of possible state selections for the switch (new enum type)
+*/
+typedef enum { nonstop, studio1, studio2, _NbrSwitchSelections } switchSelection_t;
+
+/* explicit conversions from int to switchSelection_t for +, ++, and += operators
+   this makes possible to increment values of type switchSelection_t like this:
+     switchSelection_t selection = studio1; // variable declaration & initialization
+     selection = selection + 1;             // => selection is studio2 (one way to do it)
+     selection += 1;                        // => selection is nonstop (that works, too)
+     selection++;                           // => selection is studio1 (other way)
+     ++selection;                           // => selection is studio2 (yet another way)
+   etc.
+*/
+// `+` operator in `selection = selection + i`
+switchSelection_t operator+(switchSelection_t lhs, int rhs) {
+  return static_cast<switchSelection_t>(
+    (static_cast<int>(lhs) + rhs) % _NbrSwitchSelections
+    );
+}
+// `+` operator in `selection = i + selection`
+switchSelection_t operator+(int lhs, switchSelection_t rhs) {
+  return static_cast<switchSelection_t>(
+    (lhs + static_cast<int>(rhs)) % _NbrSwitchSelections
+    );
+}
+// `++` operator in `++selection`
+switchSelection_t &operator++(switchSelection_t &s) {
+  s = static_cast<switchSelection_t>((s + 1) % _NbrSwitchSelections);
+  return s;
+}
+// `++` operator in `selection++`
+switchSelection_t operator++(switchSelection_t &s, int) {
+  return static_cast<switchSelection_t>(++s - 1);
+}
+// `+=` operator in `selection += i`
+switchSelection_t operator+=(switchSelection_t &lhs, int rhs) {
+  lhs = static_cast<switchSelection_t>(
+    (static_cast<int>(lhs) + rhs) % _NbrSwitchSelections
+    );
+  return lhs;
+}
+
+
+/* store switch state labels as an array in program memory
+   see http://arduino.cc/en/Reference/PROGMEM
+*/
+prog_char label_nonstop[] PROGMEM = "Non-Stop";
+prog_char label_studio1[] PROGMEM = "Studio 1";
+prog_char label_studio2[] PROGMEM = "Studio 2";
+
+PROGMEM const char *selection_labels[] = {
+  label_nonstop, label_studio1, label_studio2
+};
+