summaryrefslogtreecommitdiff
path: root/keyboards/rubi/rubi.h
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/rubi/rubi.h')
-rw-r--r--keyboards/rubi/rubi.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/keyboards/rubi/rubi.h b/keyboards/rubi/rubi.h
new file mode 100644
index 0000000000..472ce8e000
--- /dev/null
+++ b/keyboards/rubi/rubi.h
@@ -0,0 +1,102 @@
+/* Copyright 2021 gregorio
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define CALC_DIGITS 12
+
+enum rubi_keycodes {
+ ENC_PRESS = SAFE_RANGE,
+ CL_PLUS,
+ CL_STAR,
+ CL_TYPE,
+ NEW_SAFE_RANGE
+};
+
+enum oled_modes {
+ OLED_MODE_DEFAULT,
+ OLED_MODE_CALC,
+ OLED_MODE_OFF,
+ _NUM_OLED_MODES
+};
+
+enum encoder_modes {
+ ENC_MODE_VOLUME,
+ ENC_MODE_MEDIA,
+ ENC_MODE_BRIGHTNESS,
+ _NUM_ENCODER_MODES
+};
+
+extern uint8_t current_layer;
+extern uint8_t oled_mode;
+extern uint8_t encoder_mode;
+
+extern char calc_result_display[CALC_DIGITS+1];
+extern char calc_operator_display;
+extern char calc_status_display[CALC_DIGITS+1];
+extern uint8_t calc_display_lines;
+
+bool process_record_user_oled(uint16_t keycode, keyrecord_t *record);
+void change_oled_mode(void);
+
+void change_encoder_mode(bool reverse);
+uint16_t handle_encoder_cw(void);
+uint16_t handle_encoder_ccw(void);
+uint16_t handle_encoder_press(void);
+
+void calcUpdate(void);
+void calcInput(char input);
+void calcOperands(void);
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+/* Rubi matrix layout
+ * ,---------------.
+ * | 23|
+ * |---------------|
+ * | 00| 01| 02| 03|
+ * |---------------|
+ * | 10| 11| 12| |
+ * |-----------| 13|
+ * | 20| 21| 22| |
+ * |---------------|
+ * | 30| 31| 32| |
+ * |-----------| 33|
+ * | 41 | 42| |
+ * `---------------'
+ */
+#define LAYOUT( \
+ k23, \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, \
+ k30, k31, k32, k33, \
+ k41, k42 \
+) { \
+ { k00, k01, k02, k03 }, \
+ { k10, k11, k12, k13 }, \
+ { k20, k21, k22, k23 }, \
+ { k30, k31, k32, k33 }, \
+ { KC_NO, k41, k42, KC_NO } \
+}