summaryrefslogtreecommitdiffstats
path: root/keyboards/40percentclub
diff options
context:
space:
mode:
authorDrashna Jaelre <drashna@live.com>2021-11-14 22:03:24 -0800
committerGitHub <noreply@github.com>2021-11-14 22:03:24 -0800
commit56e3f06a26851976e559aacf7a096c61403304be (patch)
tree1e9ec98ad239fdd241e77ac4c4822fc2721a9cea /keyboards/40percentclub
parent462c3a615113e84ac3ca837a5caeb928c0ec8505 (diff)
Rework and expand Pointing Device support (#14343)
Co-authored-by: Dasky <32983009+daskygit@users.noreply.github.com>
Diffstat (limited to 'keyboards/40percentclub')
-rw-r--r--keyboards/40percentclub/nano/keymaps/drashna/config.h22
-rw-r--r--keyboards/40percentclub/nano/keymaps/drashna/keymap.c95
-rw-r--r--keyboards/40percentclub/nano/keymaps/drashna/rules.mk11
3 files changed, 27 insertions, 101 deletions
diff --git a/keyboards/40percentclub/nano/keymaps/drashna/config.h b/keyboards/40percentclub/nano/keymaps/drashna/config.h
new file mode 100644
index 0000000000..411ee8a81b
--- /dev/null
+++ b/keyboards/40percentclub/nano/keymaps/drashna/config.h
@@ -0,0 +1,22 @@
+/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
+ *
+ * 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
+
+#define ANALOG_JOYSTICK_X_AXIS_PIN B4
+#define ANALOG_JOYSTICK_Y_AXIS_PIN B5
+
+#define ANALOG_JOYSTICK_CLICK_PIN E6
diff --git a/keyboards/40percentclub/nano/keymaps/drashna/keymap.c b/keyboards/40percentclub/nano/keymaps/drashna/keymap.c
index 13f89dd53d..cc5991d7a2 100644
--- a/keyboards/40percentclub/nano/keymaps/drashna/keymap.c
+++ b/keyboards/40percentclub/nano/keymaps/drashna/keymap.c
@@ -29,98 +29,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
// clang-format on
-
-// Joystick
-// Set Pins
-// uint8_t xPin = 8; // VRx / /B4
-// uint8_t yPin = 7; // VRy // B5
-uint8_t swPin = E6; // SW
-
-// Set Parameters
-uint16_t minAxisValue = 0;
-uint16_t maxAxisValue = 1023;
-
-uint8_t maxCursorSpeed = 2;
-uint8_t precisionSpeed = 1;
-uint8_t speedRegulator = 20; // Lower Values Create Faster Movement
-
-int8_t xPolarity = 1;
-int8_t yPolarity = 1;
-
-uint8_t cursorTimeout = 10;
-
-int16_t xOrigin, yOrigin;
-
-uint16_t lastCursor = 0;
-
-int16_t axisCoordinate(uint8_t pin, uint16_t origin) {
- int8_t direction;
- int16_t distanceFromOrigin;
- int16_t range;
-
- int16_t position = analogReadPin(pin);
-
- if (origin == position) {
- return 0;
- } else if (origin > position) {
- distanceFromOrigin = origin - position;
- range = origin - minAxisValue;
- direction = -1;
- } else {
- distanceFromOrigin = position - origin;
- range = maxAxisValue - origin;
- direction = 1;
- }
-
- float percent = (float)distanceFromOrigin / range;
- int16_t coordinate = (int16_t)(percent * 100);
- if (coordinate < 0) {
- return 0;
- } else if (coordinate > 100) {
- return 100 * direction;
- } else {
- return coordinate * direction;
- }
-}
-
-int8_t axisToMouseComponent(uint8_t pin, int16_t origin, uint8_t maxSpeed, int8_t polarity) {
- int coordinate = axisCoordinate(pin, origin);
- if (coordinate != 0) {
- float percent = (float)coordinate / 100;
- if (get_mods() & MOD_BIT(KC_LSFT)) {
- return percent * precisionSpeed * polarity * (abs(coordinate) / speedRegulator);
- } else {
- return percent * maxCursorSpeed * polarity * (abs(coordinate) / speedRegulator);
- }
- } else {
- return 0;
- }
-}
-
-void pointing_device_task(void) {
- report_mouse_t report = pointing_device_get_report();
-
- // todo read as one vector
- if (timer_elapsed(lastCursor) > cursorTimeout) {
- lastCursor = timer_read();
- report.x = axisToMouseComponent(B4, xOrigin, maxCursorSpeed, xPolarity);
- report.y = axisToMouseComponent(B5, yOrigin, maxCursorSpeed, yPolarity);
- }
- //
- if (!readPin(E6)) {
- report.buttons |= MOUSE_BTN1;
- } else {
- report.buttons &= ~MOUSE_BTN1;
- }
-
- pointing_device_set_report(report);
- pointing_device_send();
-}
-
-void matrix_init_keymap(void) {
- // init pin? Is needed?
- setPinInputHigh(E6);
- // Account for drift
- xOrigin = analogReadPin(B4);
- yOrigin = analogReadPin(B5);
-}
diff --git a/keyboards/40percentclub/nano/keymaps/drashna/rules.mk b/keyboards/40percentclub/nano/keymaps/drashna/rules.mk
index 2b72a112b0..aa7966a8b5 100644
--- a/keyboards/40percentclub/nano/keymaps/drashna/rules.mk
+++ b/keyboards/40percentclub/nano/keymaps/drashna/rules.mk
@@ -1,7 +1,6 @@
-POINTING_DEVICE_ENABLE = yes
-RGBLIGHT_ENABLE = no
-CONSOLE_ENABLE = no
+POINTING_DEVICE_ENABLE = yes
+POINTING_DEVICE_DRIVER = analog_joystick
+RGBLIGHT_ENABLE = no
+CONSOLE_ENABLE = no
-BOOTLOADER = qmk-dfu
-
-SRC += analog.c
+BOOTLOADER = qmk-dfu