From 5abaa0d2b25d10a6b93b24a86eab8cf1ec85e35b Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 12 Sep 2023 16:47:00 -0400 Subject: [PATCH 01/10] added madromys --- keyboards/ploopyco/madromys/config.h | 33 +++ keyboards/ploopyco/madromys/info.json | 35 ++++ .../madromys/keymaps/default/config.h | 21 ++ .../madromys/keymaps/default/keymap.c | 29 +++ .../madromys/keymaps/default/readme.md | 1 + .../madromys/keymaps/default/rules.mk | 1 + keyboards/ploopyco/madromys/madromys.c | 190 ++++++++++++++++++ keyboards/ploopyco/madromys/madromys.h | 40 ++++ keyboards/ploopyco/madromys/post_rules.mk | 4 + keyboards/ploopyco/madromys/readme.md | 44 ++++ keyboards/ploopyco/madromys/rev1_001/config.h | 25 +++ .../ploopyco/madromys/rev1_001/info.json | 23 +++ .../ploopyco/madromys/rev1_001/readme.md | 3 + keyboards/ploopyco/madromys/rev1_001/rules.mk | 0 keyboards/ploopyco/madromys/rules.mk | 3 + 15 files changed, 452 insertions(+) create mode 100644 keyboards/ploopyco/madromys/config.h create mode 100644 keyboards/ploopyco/madromys/info.json create mode 100644 keyboards/ploopyco/madromys/keymaps/default/config.h create mode 100644 keyboards/ploopyco/madromys/keymaps/default/keymap.c create mode 100644 keyboards/ploopyco/madromys/keymaps/default/readme.md create mode 100644 keyboards/ploopyco/madromys/keymaps/default/rules.mk create mode 100644 keyboards/ploopyco/madromys/madromys.c create mode 100644 keyboards/ploopyco/madromys/madromys.h create mode 100644 keyboards/ploopyco/madromys/post_rules.mk create mode 100644 keyboards/ploopyco/madromys/readme.md create mode 100644 keyboards/ploopyco/madromys/rev1_001/config.h create mode 100644 keyboards/ploopyco/madromys/rev1_001/info.json create mode 100644 keyboards/ploopyco/madromys/rev1_001/readme.md create mode 100644 keyboards/ploopyco/madromys/rev1_001/rules.mk create mode 100644 keyboards/ploopyco/madromys/rules.mk diff --git a/keyboards/ploopyco/madromys/config.h b/keyboards/ploopyco/madromys/config.h new file mode 100644 index 000000000000..384c7e271751 --- /dev/null +++ b/keyboards/ploopyco/madromys/config.h @@ -0,0 +1,33 @@ +/* Copyright 2023 Colin Lam (Ploopy Corporation) + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * Copyright 2019 Sunjun Kim + * + * 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 . + */ + +#pragma once + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT + +// #define ROTATIONAL_TRANSFORM_ANGLE 0 +#define POINTING_DEVICE_INVERT_Y + +/* PMW3360 Settings */ +#define PMW33XX_CS_PIN GP5 +#define SPI_SCK_PIN GP2 +#define SPI_MISO_PIN GP0 +#define SPI_MOSI_PIN GP7 \ No newline at end of file diff --git a/keyboards/ploopyco/madromys/info.json b/keyboards/ploopyco/madromys/info.json new file mode 100644 index 000000000000..285a7bfa5572 --- /dev/null +++ b/keyboards/ploopyco/madromys/info.json @@ -0,0 +1,35 @@ +{ + "keyboard_name": "Ploopy Madromys Trackball", + "url": "www.ploopy.co", + "maintainer": "ploopyco", + "manufacturer": "Ploopy Corporation", + "processor": "RP2040", + "bootloader": "rp2040", + "usb": { + "vid": "0x5043", + "pid": "0x5C46", + "max_power": 100 + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "pointing_device": true, + "encoder": false + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 1], "label":"Top Left Left", "x":0, "y":0, "h":2}, + {"matrix": [0, 2], "label":"Top Left", "x":1.25, "y":0, "h":1.25}, + {"matrix": [0, 3], "label":"Top Right", "x":2.5, "y":0, "h":1.25}, + {"matrix": [0, 4], "label":"Top Right Right", "x":3.75, "y":0, "h":2}, + {"matrix": [0, 0], "label":"Bottom Left", "x":0, "y":2.25, "w":1.75, "h":2}, + {"matrix": [0, 5], "label":"Bottom Right", "x":3, "y":2.25, "w":1.75, "h":2} + ] + } + } +} diff --git a/keyboards/ploopyco/madromys/keymaps/default/config.h b/keyboards/ploopyco/madromys/keymaps/default/config.h new file mode 100644 index 000000000000..e0ca9bc60293 --- /dev/null +++ b/keyboards/ploopyco/madromys/keymaps/default/config.h @@ -0,0 +1,21 @@ +/* Copyright 2023 Colin Lam (Ploopy Corporation) + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * Copyright 2019 Sunjun Kim + * + * 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 . + */ + +#pragma once + +#define DYNAMIC_KEYMAP_LAYER_COUNT 8 diff --git a/keyboards/ploopyco/madromys/keymaps/default/keymap.c b/keyboards/ploopyco/madromys/keymaps/default/keymap.c new file mode 100644 index 000000000000..4e34fa160eb9 --- /dev/null +++ b/keyboards/ploopyco/madromys/keymaps/default/keymap.c @@ -0,0 +1,29 @@ +/* Copyright 2023 Colin Lam (Ploopy Corporation) + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * Copyright 2019 Sunjun Kim + * + * 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 . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( KC_BTN1, DRAG_SCROLL, KC_BTN3, KC_BTN5, KC_BTN2, KC_BTN4 ), + [1] = LAYOUT( _______, _______, _______, _______, _______, _______ ), + [2] = LAYOUT( _______, _______, _______, _______, _______, _______ ), + [3] = LAYOUT( _______, _______, _______, _______, _______, _______ ), + [4] = LAYOUT( _______, _______, _______, _______, _______, _______ ), + [5] = LAYOUT( _______, _______, _______, _______, _______, _______ ), + [6] = LAYOUT( _______, _______, _______, _______, _______, _______ ), + [7] = LAYOUT( _______, _______, _______, _______, _______, _______ ) +}; diff --git a/keyboards/ploopyco/madromys/keymaps/default/readme.md b/keyboards/ploopyco/madromys/keymaps/default/readme.md new file mode 100644 index 000000000000..9322964599cf --- /dev/null +++ b/keyboards/ploopyco/madromys/keymaps/default/readme.md @@ -0,0 +1 @@ +This is the default keymap for Ploopyco Madromys Trackball. VIA is enabled by default, and can be used to customise the key layout. See [the VIA online app](https://usevia.app/) for how to do this. diff --git a/keyboards/ploopyco/madromys/keymaps/default/rules.mk b/keyboards/ploopyco/madromys/keymaps/default/rules.mk new file mode 100644 index 000000000000..1e5b99807cb7 --- /dev/null +++ b/keyboards/ploopyco/madromys/keymaps/default/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/ploopyco/madromys/madromys.c b/keyboards/ploopyco/madromys/madromys.c new file mode 100644 index 000000000000..72db639d91ba --- /dev/null +++ b/keyboards/ploopyco/madromys/madromys.c @@ -0,0 +1,190 @@ +/* Copyright 2023 Colin Lam (Ploopy Corporation) + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * Copyright 2019 Sunjun Kim + * + * 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 . + */ + +#include "madromys.h" + +#ifndef PLOOPY_DPI_OPTIONS +# define PLOOPY_DPI_OPTIONS \ + { 600, 900, 1200, 1600 } +# ifndef PLOOPY_DPI_DEFAULT +# define PLOOPY_DPI_DEFAULT 1 +# endif +#endif +#ifndef PLOOPY_DPI_DEFAULT +# define PLOOPY_DPI_DEFAULT 0 +#endif +#ifndef PLOOPY_DRAGSCROLL_DPI +# define PLOOPY_DRAGSCROLL_DPI 100 // Fixed-DPI Drag Scroll +#endif +#ifndef PLOOPY_DRAGSCROLL_FIXED +# define PLOOPY_DRAGSCROLL_FIXED 1 +#endif +#ifndef PLOOPY_DRAGSCROLL_MULTIPLIER +# define PLOOPY_DRAGSCROLL_MULTIPLIER 0.75 // Variable-DPI Drag Scroll +#endif + +keyboard_config_t keyboard_config; +uint16_t dpi_array[] = PLOOPY_DPI_OPTIONS; +#define DPI_OPTION_SIZE (sizeof(dpi_array) / sizeof(uint16_t)) + +// TODO: Implement libinput profiles +// https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html +// Compile time accel selection +// Valid options are ACC_NONE, ACC_LINEAR, ACC_CUSTOM, ACC_QUADRATIC + +// Trackball State +bool is_scroll_clicked = false; +uint16_t last_scroll = 0; // Previous confirmed wheel event +uint16_t last_mid_click = 0; // Stops scrollwheel from being read if it was pressed; +bool debug_encoder = false; +bool is_drag_scroll = false; + +// require, since core encoder.c (where is is normally defined isn't present +__attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) { return true; } + +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { + return false; + } +#ifdef MOUSEKEY_ENABLE + tap_code(clockwise ? KC_WH_U : KC_WH_D); +#else + report_mouse_t mouse_report = pointing_device_get_report(); + mouse_report.v = clockwise ? 1 : -1; + pointing_device_set_report(mouse_report); + pointing_device_send(); +#endif + return true; +} + +void encoder_init(void) { + return; +} + +bool encoder_read(void) { + return false; +} + +report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { + if (is_drag_scroll) { + mouse_report.h = mouse_report.x; +#ifdef PLOOPY_DRAGSCROLL_INVERT + // Invert vertical scroll direction + mouse_report.v = -mouse_report.y; +#else + mouse_report.v = mouse_report.y; +#endif + mouse_report.x = 0; + mouse_report.y = 0; + } + + return pointing_device_task_user(mouse_report); +} + +bool process_record_kb(uint16_t keycode, keyrecord_t* record) { + // Update Timer to prevent accidental scrolls + if ((record->event.key.col == 1) && (record->event.key.row == 0)) { + last_mid_click = timer_read(); + is_scroll_clicked = record->event.pressed; + } + + if (!process_record_user(keycode, record)) { + return false; + } + + if (keycode == DPI_CONFIG && record->event.pressed) { + keyboard_config.dpi_config = (keyboard_config.dpi_config + 1) % DPI_OPTION_SIZE; + eeconfig_update_kb(keyboard_config.raw); + pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); + } + + if (keycode == DRAG_SCROLL) { +#ifndef PLOOPY_DRAGSCROLL_MOMENTARY + if (record->event.pressed) +#endif + { + is_drag_scroll ^= 1; + } +#ifdef PLOOPY_DRAGSCROLL_FIXED + pointing_device_set_cpi(is_drag_scroll ? PLOOPY_DRAGSCROLL_DPI : dpi_array[keyboard_config.dpi_config]); +#else + pointing_device_set_cpi(is_drag_scroll ? (dpi_array[keyboard_config.dpi_config] * PLOOPY_DRAGSCROLL_MULTIPLIER) : dpi_array[keyboard_config.dpi_config]); +#endif + } + +/* If Mousekeys is disabled, then use handle the mouse button + * keycodes. This makes things simpler, and allows usage of + * the keycodes in a consistent manner. But only do this if + * Mousekeys is not enable, so it's not handled twice. + */ +#ifndef MOUSEKEY_ENABLE + if (IS_MOUSEKEY_BUTTON(keycode)) { + report_mouse_t currentReport = pointing_device_get_report(); + if (record->event.pressed) { + currentReport.buttons |= 1 << (keycode - KC_MS_BTN1); + } else { + currentReport.buttons &= ~(1 << (keycode - KC_MS_BTN1)); + } + pointing_device_set_report(currentReport); + pointing_device_send(); + } +#endif + + return true; +} + +// Hardware Setup +void keyboard_pre_init_kb(void) { + // debug_enable = true; + // debug_matrix = true; + // debug_mouse = true; + // debug_encoder = true; + + /* Ground all output pins connected to ground. This provides additional + * pathways to ground. If you're messing with this, know this: driving ANY + * of these pins high will cause a short. On the MCU. Ka-blooey. + */ +#ifdef UNUSABLE_PINS + const pin_t unused_pins[] = UNUSABLE_PINS; + + for (uint8_t i = 0; i < (sizeof(unused_pins) / sizeof(pin_t)); i++) { + setPinOutput(unused_pins[i]); + writePinLow(unused_pins[i]); + } +#endif + + keyboard_pre_init_user(); +} + +void pointing_device_init_kb(void) { pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); } + +void eeconfig_init_kb(void) { + keyboard_config.dpi_config = PLOOPY_DPI_DEFAULT; + eeconfig_update_kb(keyboard_config.raw); + eeconfig_init_user(); +} + +void matrix_init_kb(void) { + // is safe to just read DPI setting since matrix init + // comes before pointing device init. + keyboard_config.raw = eeconfig_read_kb(); + if (keyboard_config.dpi_config > DPI_OPTION_SIZE) { + eeconfig_init_kb(); + } + matrix_init_user(); +} diff --git a/keyboards/ploopyco/madromys/madromys.h b/keyboards/ploopyco/madromys/madromys.h new file mode 100644 index 000000000000..e5e5f27d9244 --- /dev/null +++ b/keyboards/ploopyco/madromys/madromys.h @@ -0,0 +1,40 @@ +/* Copyright 2023 Colin Lam (Ploopy Corporation) + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * Copyright 2019 Sunjun Kim + * + * 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 . + */ + +#pragma once + +#include "quantum.h" + +bool encoder_update_kb(uint8_t index, bool clockwise); +bool encoder_update_user(uint8_t index, bool clockwise); + +typedef union { + uint32_t raw; + struct { + uint8_t dpi_config; + }; +} keyboard_config_t; +_Static_assert(sizeof(keyboard_config_t) == sizeof(uint32_t), "keyboard_config_t size mismatch compared to EEPROM area"); + +extern keyboard_config_t keyboard_config; +extern uint16_t dpi_array[]; + +enum ploopy_keycodes { + DPI_CONFIG = QK_KB_0, + DRAG_SCROLL, +}; diff --git a/keyboards/ploopyco/madromys/post_rules.mk b/keyboards/ploopyco/madromys/post_rules.mk new file mode 100644 index 000000000000..d922afd9cd76 --- /dev/null +++ b/keyboards/ploopyco/madromys/post_rules.mk @@ -0,0 +1,4 @@ +# Force encoder to be disabled +# But enable the defines for it +ENCODER_ENABLE := no +OPT_DEFS += -DENCODER_ENABLE diff --git a/keyboards/ploopyco/madromys/readme.md b/keyboards/ploopyco/madromys/readme.md new file mode 100644 index 000000000000..995b9f0614bf --- /dev/null +++ b/keyboards/ploopyco/madromys/readme.md @@ -0,0 +1,44 @@ + +# Ploopyco Madromys Trackball + +It's a DIY, QMK-powered trackball! + +* Keyboard Maintainer: [PloopyCo](https://github.com/ploopyco) +* Hardware Supported: RP2040 +* Hardware Availability: [Store](https://ploopy.co), [GitHub](https://github.com/ploopyco) + +Make example for this keyboard (after setting up your build environment): + + qmk compile -kb ploopyco/madromys -km default + +# Triggering the Bootloader + +![bootloader pic](boot.jpg) + +Do you see those two golden holes in the board? Those are called **vias**. They act exactly like a switch does. Right now, that switch is OFF. However, if you take a paperclip or a pair of metal tweezers and touch those two vias, the two vias will form an electrical connection. Effectively, that switch turns ON. + +Go ahead and connect the two vias, and then (while the vias are connected) plug in the Madromys board into your computer. + +The computer should recognise that a mass storage device was just plugged in. Once this is done, you should be able to drag and drop files onto the Madromys board, as if the board was a USB drive. Feel free to remove the tweezers or paperclip at this point. + +If you want to upload a new firmware file (a ".uf2" file, like "madromys_awesome_version.uf2" or something), just drag it into the folder, and it'll automatically install on the Madromys board and restart itself, in normal operating mode. You're done! + +**TIP**: If your firmware is in some kind of strange state and uploading new firmware isn't fixing it, try uploading [a flash nuke](https://learn.adafruit.com/getting-started-with-raspberry-pi-pico-circuitpython/circuitpython#flash-resetting-uf2-3083182) to the Madromys board before flashing the new firmware. It wipes the memory of the Madromys board completely clean, which can help clear a few types of errors. + +# Building Firmware + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +# Drag Scroll + +Drag Scroll is a custom keycode for Ploopy devices that allows you to hold or tap a button and have the mouse movement translate into scrolling instead. + +Nothing needs to be enabled to use this functionality; it's enabled on Madromys by default. + +### Drag Scroll Configuration + +* `#define PLOOPY_DRAGSCROLL_MOMENTARY` - Makes the key into a momentary key, rather than a toggle. +* `#define PLOOPY_DRAGSCROLL_MULTIPLIER 0.75` - Sets the DPI multiplier to use when drag scroll is enabled. +* `#define PLOOPY_DRAGSCROLL_FIXED` - Normally, when activating Drag Scroll, it uses a fraction of the current DPI. You can define this to use a specific, set DPI rather than a fraction of the current DPI. + * `#define PLOOPY_DRAGSCROLL_DPI 100` - When the fixed DPI option is enabled, this sets the DPI to be used for Drag Scroll. +* `#define PLOOPY_DRAGSCROLL_INVERT` - This reverses the direction that the scroll is performed. diff --git a/keyboards/ploopyco/madromys/rev1_001/config.h b/keyboards/ploopyco/madromys/rev1_001/config.h new file mode 100644 index 000000000000..5a8d76532910 --- /dev/null +++ b/keyboards/ploopyco/madromys/rev1_001/config.h @@ -0,0 +1,25 @@ +/* Copyright 2023 Colin Lam (Ploopy Corporation) + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * Copyright 2019 Sunjun Kim + * + * 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 . + */ + +#pragma once + +// These pins are not broken out, and cannot be used normally. +// They are set as output and pulled high, by default +#define UNUSABLE_PINS \ + { GP1, GP3, GP4, GP6, GP8, GP10, GP14, GP16, GP18, \ + GP20, GP22, GP24, GP25, GP26, GP27, GP28, GP29 } diff --git a/keyboards/ploopyco/madromys/rev1_001/info.json b/keyboards/ploopyco/madromys/rev1_001/info.json new file mode 100644 index 000000000000..5cb4ee393811 --- /dev/null +++ b/keyboards/ploopyco/madromys/rev1_001/info.json @@ -0,0 +1,23 @@ +{ + "usb": { + "device_version": "1.0.0" + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "direct": [ + ["GP15", "GP17", "GP19", "GP21", "GP23", "GP11"] + ] + }, + "rgblight": { + "led_count": 3, + "max_brightness": 40, + "animations": { + "breathing": true, + "rainbow_mood": true, + "rainbow_swirl": true + } + }, + "ws2812": { + "pin": "GP12" + } +} diff --git a/keyboards/ploopyco/madromys/rev1_001/readme.md b/keyboards/ploopyco/madromys/rev1_001/readme.md new file mode 100644 index 000000000000..b9a2e106dbd5 --- /dev/null +++ b/keyboards/ploopyco/madromys/rev1_001/readme.md @@ -0,0 +1,3 @@ +This is the R1.001+ version of Madromys. Future versions may have other features. + +See the [main readme](../readme.md) for more details. diff --git a/keyboards/ploopyco/madromys/rev1_001/rules.mk b/keyboards/ploopyco/madromys/rev1_001/rules.mk new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/keyboards/ploopyco/madromys/rules.mk b/keyboards/ploopyco/madromys/rules.mk new file mode 100644 index 000000000000..b7e33d92f92c --- /dev/null +++ b/keyboards/ploopyco/madromys/rules.mk @@ -0,0 +1,3 @@ +POINTING_DEVICE_DRIVER = pmw3360 + +DEFAULT_FOLDER = ploopyco/madromys/rev1_001 From fa2ab88a687abfeec1c1eb2e75c4bace092ff0ef Mon Sep 17 00:00:00 2001 From: ploopyco <54917504+ploopyco@users.noreply.github.com> Date: Thu, 14 Sep 2023 15:00:47 -0400 Subject: [PATCH 02/10] Update keyboards/ploopyco/madromys/config.h Co-authored-by: Drashna Jaelre --- keyboards/ploopyco/madromys/config.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/keyboards/ploopyco/madromys/config.h b/keyboards/ploopyco/madromys/config.h index 384c7e271751..aad2444db197 100644 --- a/keyboards/ploopyco/madromys/config.h +++ b/keyboards/ploopyco/madromys/config.h @@ -18,11 +18,6 @@ #pragma once -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT - // #define ROTATIONAL_TRANSFORM_ANGLE 0 #define POINTING_DEVICE_INVERT_Y From 41a834f9b1d993a40a52e9ae7e616de1dc879e84 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 15 Sep 2023 10:58:40 -0400 Subject: [PATCH 03/10] fixes --- keyboards/ploopyco/madromys/config.h | 5 -- .../madromys/keymaps/default/keymap.c | 2 +- keyboards/ploopyco/madromys/madromys.c | 47 ------------------- keyboards/ploopyco/madromys/readme.md | 2 - 4 files changed, 1 insertion(+), 55 deletions(-) diff --git a/keyboards/ploopyco/madromys/config.h b/keyboards/ploopyco/madromys/config.h index 384c7e271751..aad2444db197 100644 --- a/keyboards/ploopyco/madromys/config.h +++ b/keyboards/ploopyco/madromys/config.h @@ -18,11 +18,6 @@ #pragma once -/* disable action features */ -//#define NO_ACTION_LAYER -//#define NO_ACTION_TAPPING -//#define NO_ACTION_ONESHOT - // #define ROTATIONAL_TRANSFORM_ANGLE 0 #define POINTING_DEVICE_INVERT_Y diff --git a/keyboards/ploopyco/madromys/keymaps/default/keymap.c b/keyboards/ploopyco/madromys/keymaps/default/keymap.c index 4e34fa160eb9..7264ac5c99f3 100644 --- a/keyboards/ploopyco/madromys/keymaps/default/keymap.c +++ b/keyboards/ploopyco/madromys/keymaps/default/keymap.c @@ -18,7 +18,7 @@ #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( KC_BTN1, DRAG_SCROLL, KC_BTN3, KC_BTN5, KC_BTN2, KC_BTN4 ), + [0] = LAYOUT( KC_BTN4, KC_BTN5, DRAG_SCROLL, KC_BTN2, KC_BTN1, KC_BTN3 ), [1] = LAYOUT( _______, _______, _______, _______, _______, _______ ), [2] = LAYOUT( _______, _______, _______, _______, _______, _______ ), [3] = LAYOUT( _______, _______, _______, _______, _______, _______ ), diff --git a/keyboards/ploopyco/madromys/madromys.c b/keyboards/ploopyco/madromys/madromys.c index 72db639d91ba..6ec51c3e805e 100644 --- a/keyboards/ploopyco/madromys/madromys.c +++ b/keyboards/ploopyco/madromys/madromys.c @@ -48,34 +48,11 @@ uint16_t dpi_array[] = PLOOPY_DPI_OPTIONS; // Valid options are ACC_NONE, ACC_LINEAR, ACC_CUSTOM, ACC_QUADRATIC // Trackball State -bool is_scroll_clicked = false; -uint16_t last_scroll = 0; // Previous confirmed wheel event -uint16_t last_mid_click = 0; // Stops scrollwheel from being read if it was pressed; -bool debug_encoder = false; bool is_drag_scroll = false; -// require, since core encoder.c (where is is normally defined isn't present -__attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) { return true; } - -bool encoder_update_kb(uint8_t index, bool clockwise) { - if (!encoder_update_user(index, clockwise)) { - return false; - } -#ifdef MOUSEKEY_ENABLE - tap_code(clockwise ? KC_WH_U : KC_WH_D); -#else - report_mouse_t mouse_report = pointing_device_get_report(); - mouse_report.v = clockwise ? 1 : -1; - pointing_device_set_report(mouse_report); - pointing_device_send(); -#endif - return true; -} - void encoder_init(void) { return; } - bool encoder_read(void) { return false; } @@ -97,12 +74,6 @@ report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { } bool process_record_kb(uint16_t keycode, keyrecord_t* record) { - // Update Timer to prevent accidental scrolls - if ((record->event.key.col == 1) && (record->event.key.row == 0)) { - last_mid_click = timer_read(); - is_scroll_clicked = record->event.pressed; - } - if (!process_record_user(keycode, record)) { return false; } @@ -127,24 +98,6 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) { #endif } -/* If Mousekeys is disabled, then use handle the mouse button - * keycodes. This makes things simpler, and allows usage of - * the keycodes in a consistent manner. But only do this if - * Mousekeys is not enable, so it's not handled twice. - */ -#ifndef MOUSEKEY_ENABLE - if (IS_MOUSEKEY_BUTTON(keycode)) { - report_mouse_t currentReport = pointing_device_get_report(); - if (record->event.pressed) { - currentReport.buttons |= 1 << (keycode - KC_MS_BTN1); - } else { - currentReport.buttons &= ~(1 << (keycode - KC_MS_BTN1)); - } - pointing_device_set_report(currentReport); - pointing_device_send(); - } -#endif - return true; } diff --git a/keyboards/ploopyco/madromys/readme.md b/keyboards/ploopyco/madromys/readme.md index 995b9f0614bf..6584eaf16ada 100644 --- a/keyboards/ploopyco/madromys/readme.md +++ b/keyboards/ploopyco/madromys/readme.md @@ -13,8 +13,6 @@ Make example for this keyboard (after setting up your build environment): # Triggering the Bootloader -![bootloader pic](boot.jpg) - Do you see those two golden holes in the board? Those are called **vias**. They act exactly like a switch does. Right now, that switch is OFF. However, if you take a paperclip or a pair of metal tweezers and touch those two vias, the two vias will form an electrical connection. Effectively, that switch turns ON. Go ahead and connect the two vias, and then (while the vias are connected) plug in the Madromys board into your computer. From 28ba3e6931c4fa8929f73b9d164b1f684f51e32b Mon Sep 17 00:00:00 2001 From: ploopyco Date: Fri, 15 Sep 2023 15:08:16 -0400 Subject: [PATCH 04/10] fixes --- keyboards/ploopyco/madromys/info.json | 5 ++++- .../madromys/keymaps/default/keymap.c | 9 +------- .../madromys/keymaps/default/readme.md | 1 - .../ploopyco/madromys/keymaps/via/config.h | 21 ++++++++++++++++++ .../ploopyco/madromys/keymaps/via/keymap.c | 22 +++++++++++++++++++ .../ploopyco/madromys/keymaps/via/readme.md | 1 + .../keymaps/{default => via}/rules.mk | 0 keyboards/ploopyco/madromys/madromys.c | 7 ------ keyboards/ploopyco/madromys/madromys.h | 3 --- keyboards/ploopyco/madromys/post_rules.mk | 4 ---- 10 files changed, 49 insertions(+), 24 deletions(-) delete mode 100644 keyboards/ploopyco/madromys/keymaps/default/readme.md create mode 100644 keyboards/ploopyco/madromys/keymaps/via/config.h create mode 100644 keyboards/ploopyco/madromys/keymaps/via/keymap.c create mode 100644 keyboards/ploopyco/madromys/keymaps/via/readme.md rename keyboards/ploopyco/madromys/keymaps/{default => via}/rules.mk (100%) delete mode 100644 keyboards/ploopyco/madromys/post_rules.mk diff --git a/keyboards/ploopyco/madromys/info.json b/keyboards/ploopyco/madromys/info.json index 285a7bfa5572..190f048b82d9 100644 --- a/keyboards/ploopyco/madromys/info.json +++ b/keyboards/ploopyco/madromys/info.json @@ -31,5 +31,8 @@ {"matrix": [0, 5], "label":"Bottom Right", "x":3, "y":2.25, "w":1.75, "h":2} ] } - } + }, + "dynamic_keymap": { + "layer_count": 8 + }, } diff --git a/keyboards/ploopyco/madromys/keymaps/default/keymap.c b/keyboards/ploopyco/madromys/keymaps/default/keymap.c index 7264ac5c99f3..bc8265b39d03 100644 --- a/keyboards/ploopyco/madromys/keymaps/default/keymap.c +++ b/keyboards/ploopyco/madromys/keymaps/default/keymap.c @@ -18,12 +18,5 @@ #include QMK_KEYBOARD_H const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [0] = LAYOUT( KC_BTN4, KC_BTN5, DRAG_SCROLL, KC_BTN2, KC_BTN1, KC_BTN3 ), - [1] = LAYOUT( _______, _______, _______, _______, _______, _______ ), - [2] = LAYOUT( _______, _______, _______, _______, _______, _______ ), - [3] = LAYOUT( _______, _______, _______, _______, _______, _______ ), - [4] = LAYOUT( _______, _______, _______, _______, _______, _______ ), - [5] = LAYOUT( _______, _______, _______, _______, _______, _______ ), - [6] = LAYOUT( _______, _______, _______, _______, _______, _______ ), - [7] = LAYOUT( _______, _______, _______, _______, _______, _______ ) + [0] = LAYOUT( KC_BTN4, KC_BTN5, DRAG_SCROLL, KC_BTN2, KC_BTN1, KC_BTN3 ) }; diff --git a/keyboards/ploopyco/madromys/keymaps/default/readme.md b/keyboards/ploopyco/madromys/keymaps/default/readme.md deleted file mode 100644 index 9322964599cf..000000000000 --- a/keyboards/ploopyco/madromys/keymaps/default/readme.md +++ /dev/null @@ -1 +0,0 @@ -This is the default keymap for Ploopyco Madromys Trackball. VIA is enabled by default, and can be used to customise the key layout. See [the VIA online app](https://usevia.app/) for how to do this. diff --git a/keyboards/ploopyco/madromys/keymaps/via/config.h b/keyboards/ploopyco/madromys/keymaps/via/config.h new file mode 100644 index 000000000000..e0ca9bc60293 --- /dev/null +++ b/keyboards/ploopyco/madromys/keymaps/via/config.h @@ -0,0 +1,21 @@ +/* Copyright 2023 Colin Lam (Ploopy Corporation) + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * Copyright 2019 Sunjun Kim + * + * 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 . + */ + +#pragma once + +#define DYNAMIC_KEYMAP_LAYER_COUNT 8 diff --git a/keyboards/ploopyco/madromys/keymaps/via/keymap.c b/keyboards/ploopyco/madromys/keymaps/via/keymap.c new file mode 100644 index 000000000000..bc8265b39d03 --- /dev/null +++ b/keyboards/ploopyco/madromys/keymaps/via/keymap.c @@ -0,0 +1,22 @@ +/* Copyright 2023 Colin Lam (Ploopy Corporation) + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * Copyright 2019 Sunjun Kim + * + * 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 . + */ +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( KC_BTN4, KC_BTN5, DRAG_SCROLL, KC_BTN2, KC_BTN1, KC_BTN3 ) +}; diff --git a/keyboards/ploopyco/madromys/keymaps/via/readme.md b/keyboards/ploopyco/madromys/keymaps/via/readme.md new file mode 100644 index 000000000000..c8717fe1f74a --- /dev/null +++ b/keyboards/ploopyco/madromys/keymaps/via/readme.md @@ -0,0 +1 @@ +This is the VIA keymap for Ploopyco Madromys Trackball, which can be used to customise the key layout. See [the VIA online app](https://usevia.app/) for how to do this. diff --git a/keyboards/ploopyco/madromys/keymaps/default/rules.mk b/keyboards/ploopyco/madromys/keymaps/via/rules.mk similarity index 100% rename from keyboards/ploopyco/madromys/keymaps/default/rules.mk rename to keyboards/ploopyco/madromys/keymaps/via/rules.mk diff --git a/keyboards/ploopyco/madromys/madromys.c b/keyboards/ploopyco/madromys/madromys.c index 6ec51c3e805e..d8652cfa7b62 100644 --- a/keyboards/ploopyco/madromys/madromys.c +++ b/keyboards/ploopyco/madromys/madromys.c @@ -50,13 +50,6 @@ uint16_t dpi_array[] = PLOOPY_DPI_OPTIONS; // Trackball State bool is_drag_scroll = false; -void encoder_init(void) { - return; -} -bool encoder_read(void) { - return false; -} - report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { if (is_drag_scroll) { mouse_report.h = mouse_report.x; diff --git a/keyboards/ploopyco/madromys/madromys.h b/keyboards/ploopyco/madromys/madromys.h index e5e5f27d9244..944cce937b47 100644 --- a/keyboards/ploopyco/madromys/madromys.h +++ b/keyboards/ploopyco/madromys/madromys.h @@ -20,9 +20,6 @@ #include "quantum.h" -bool encoder_update_kb(uint8_t index, bool clockwise); -bool encoder_update_user(uint8_t index, bool clockwise); - typedef union { uint32_t raw; struct { diff --git a/keyboards/ploopyco/madromys/post_rules.mk b/keyboards/ploopyco/madromys/post_rules.mk deleted file mode 100644 index d922afd9cd76..000000000000 --- a/keyboards/ploopyco/madromys/post_rules.mk +++ /dev/null @@ -1,4 +0,0 @@ -# Force encoder to be disabled -# But enable the defines for it -ENCODER_ENABLE := no -OPT_DEFS += -DENCODER_ENABLE From 8487e096e9d0a3c702ff4bb76750104fef4fd231 Mon Sep 17 00:00:00 2001 From: ploopyco Date: Mon, 18 Sep 2023 16:22:37 -0400 Subject: [PATCH 05/10] fixes --- keyboards/ploopyco/madromys/info.json | 3 --- .../madromys/keymaps/default/config.h | 21 ---------------- .../ploopyco/madromys/keymaps/via/config.h | 21 ---------------- keyboards/ploopyco/madromys/madromys.c | 5 ++-- keyboards/ploopyco/madromys/rev1_001/config.h | 25 ------------------- 5 files changed, 2 insertions(+), 73 deletions(-) delete mode 100644 keyboards/ploopyco/madromys/keymaps/default/config.h delete mode 100644 keyboards/ploopyco/madromys/keymaps/via/config.h delete mode 100644 keyboards/ploopyco/madromys/rev1_001/config.h diff --git a/keyboards/ploopyco/madromys/info.json b/keyboards/ploopyco/madromys/info.json index 190f048b82d9..6164b2f2dd01 100644 --- a/keyboards/ploopyco/madromys/info.json +++ b/keyboards/ploopyco/madromys/info.json @@ -12,13 +12,10 @@ }, "features": { "bootmagic": true, - "command": false, - "console": false, "extrakey": true, "mousekey": true, "nkro": true, "pointing_device": true, - "encoder": false }, "layouts": { "LAYOUT": { diff --git a/keyboards/ploopyco/madromys/keymaps/default/config.h b/keyboards/ploopyco/madromys/keymaps/default/config.h deleted file mode 100644 index e0ca9bc60293..000000000000 --- a/keyboards/ploopyco/madromys/keymaps/default/config.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright 2023 Colin Lam (Ploopy Corporation) - * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) - * Copyright 2019 Sunjun Kim - * - * 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 . - */ - -#pragma once - -#define DYNAMIC_KEYMAP_LAYER_COUNT 8 diff --git a/keyboards/ploopyco/madromys/keymaps/via/config.h b/keyboards/ploopyco/madromys/keymaps/via/config.h deleted file mode 100644 index e0ca9bc60293..000000000000 --- a/keyboards/ploopyco/madromys/keymaps/via/config.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright 2023 Colin Lam (Ploopy Corporation) - * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) - * Copyright 2019 Sunjun Kim - * - * 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 . - */ - -#pragma once - -#define DYNAMIC_KEYMAP_LAYER_COUNT 8 diff --git a/keyboards/ploopyco/madromys/madromys.c b/keyboards/ploopyco/madromys/madromys.c index d8652cfa7b62..1f2de2be3eba 100644 --- a/keyboards/ploopyco/madromys/madromys.c +++ b/keyboards/ploopyco/madromys/madromys.c @@ -105,14 +105,13 @@ void keyboard_pre_init_kb(void) { * pathways to ground. If you're messing with this, know this: driving ANY * of these pins high will cause a short. On the MCU. Ka-blooey. */ -#ifdef UNUSABLE_PINS - const pin_t unused_pins[] = UNUSABLE_PINS; + const pin_t unused_pins[] = { GP1, GP3, GP4, GP6, GP8, GP10, GP14, GP16, + GP18, GP20, GP22, GP24, GP25, GP26, GP27, GP28, GP29 }; for (uint8_t i = 0; i < (sizeof(unused_pins) / sizeof(pin_t)); i++) { setPinOutput(unused_pins[i]); writePinLow(unused_pins[i]); } -#endif keyboard_pre_init_user(); } diff --git a/keyboards/ploopyco/madromys/rev1_001/config.h b/keyboards/ploopyco/madromys/rev1_001/config.h deleted file mode 100644 index 5a8d76532910..000000000000 --- a/keyboards/ploopyco/madromys/rev1_001/config.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright 2023 Colin Lam (Ploopy Corporation) - * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) - * Copyright 2019 Sunjun Kim - * - * 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 . - */ - -#pragma once - -// These pins are not broken out, and cannot be used normally. -// They are set as output and pulled high, by default -#define UNUSABLE_PINS \ - { GP1, GP3, GP4, GP6, GP8, GP10, GP14, GP16, GP18, \ - GP20, GP22, GP24, GP25, GP26, GP27, GP28, GP29 } From a887d4ce57d36c2b63ca584fdcba7fc032fdabae Mon Sep 17 00:00:00 2001 From: ploopyco Date: Wed, 20 Sep 2023 13:02:49 -0400 Subject: [PATCH 06/10] pid fix --- keyboards/ploopyco/madromys/info.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/ploopyco/madromys/info.json b/keyboards/ploopyco/madromys/info.json index 6164b2f2dd01..adc6616d6f58 100644 --- a/keyboards/ploopyco/madromys/info.json +++ b/keyboards/ploopyco/madromys/info.json @@ -7,7 +7,7 @@ "bootloader": "rp2040", "usb": { "vid": "0x5043", - "pid": "0x5C46", + "pid": "0x5C47", "max_power": 100 }, "features": { From 3913a74be8814936960e3bab17bca20a432a2c9a Mon Sep 17 00:00:00 2001 From: ploopyco Date: Fri, 22 Sep 2023 17:06:32 -0400 Subject: [PATCH 07/10] fixed readme --- keyboards/ploopyco/madromys/readme.md | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/keyboards/ploopyco/madromys/readme.md b/keyboards/ploopyco/madromys/readme.md index 6584eaf16ada..339e057e1eca 100644 --- a/keyboards/ploopyco/madromys/readme.md +++ b/keyboards/ploopyco/madromys/readme.md @@ -11,18 +11,6 @@ Make example for this keyboard (after setting up your build environment): qmk compile -kb ploopyco/madromys -km default -# Triggering the Bootloader - -Do you see those two golden holes in the board? Those are called **vias**. They act exactly like a switch does. Right now, that switch is OFF. However, if you take a paperclip or a pair of metal tweezers and touch those two vias, the two vias will form an electrical connection. Effectively, that switch turns ON. - -Go ahead and connect the two vias, and then (while the vias are connected) plug in the Madromys board into your computer. - -The computer should recognise that a mass storage device was just plugged in. Once this is done, you should be able to drag and drop files onto the Madromys board, as if the board was a USB drive. Feel free to remove the tweezers or paperclip at this point. - -If you want to upload a new firmware file (a ".uf2" file, like "madromys_awesome_version.uf2" or something), just drag it into the folder, and it'll automatically install on the Madromys board and restart itself, in normal operating mode. You're done! - -**TIP**: If your firmware is in some kind of strange state and uploading new firmware isn't fixing it, try uploading [a flash nuke](https://learn.adafruit.com/getting-started-with-raspberry-pi-pico-circuitpython/circuitpython#flash-resetting-uf2-3083182) to the Madromys board before flashing the new firmware. It wipes the memory of the Madromys board completely clean, which can help clear a few types of errors. - # Building Firmware See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). From b1fec0a97392536ee64328804beb40a0fba27c18 Mon Sep 17 00:00:00 2001 From: ploopyco Date: Wed, 27 Sep 2023 15:44:58 -0400 Subject: [PATCH 08/10] added drag scroll divisor; updated name --- keyboards/ploopyco/madromys/info.json | 2 +- keyboards/ploopyco/madromys/madromys.c | 23 ++++++++++++++++++++--- keyboards/ploopyco/madromys/readme.md | 1 + 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/keyboards/ploopyco/madromys/info.json b/keyboards/ploopyco/madromys/info.json index adc6616d6f58..e39f593df9fe 100644 --- a/keyboards/ploopyco/madromys/info.json +++ b/keyboards/ploopyco/madromys/info.json @@ -1,5 +1,5 @@ { - "keyboard_name": "Ploopy Madromys Trackball", + "keyboard_name": "Ploopy Adept Trackball", "url": "www.ploopy.co", "maintainer": "ploopyco", "manufacturer": "Ploopy Corporation", diff --git a/keyboards/ploopyco/madromys/madromys.c b/keyboards/ploopyco/madromys/madromys.c index 1f2de2be3eba..6d1bc79df800 100644 --- a/keyboards/ploopyco/madromys/madromys.c +++ b/keyboards/ploopyco/madromys/madromys.c @@ -37,6 +37,9 @@ #ifndef PLOOPY_DRAGSCROLL_MULTIPLIER # define PLOOPY_DRAGSCROLL_MULTIPLIER 0.75 // Variable-DPI Drag Scroll #endif +#ifndef PLOOPY_DRAGSCROLL_SEMAPHORE +# define PLOOPY_DRAGSCROLL_SEMAPHORE 0 +#endif keyboard_config_t keyboard_config; uint16_t dpi_array[] = PLOOPY_DPI_OPTIONS; @@ -50,15 +53,29 @@ uint16_t dpi_array[] = PLOOPY_DPI_OPTIONS; // Trackball State bool is_drag_scroll = false; +// drag scroll divisor state +int8_t drag_scroll_x_semaphore = PLOOPY_DRAGSCROLL_SEMAPHORE; +int8_t drag_scroll_y_semaphore = PLOOPY_DRAGSCROLL_SEMAPHORE; + report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { if (is_drag_scroll) { - mouse_report.h = mouse_report.x; + drag_scroll_x_semaphore -= abs(mouse_report.x); + drag_scroll_y_semaphore -= abs(mouse_report.y); + + if (drag_scroll_x_semaphore <= 0) { + mouse_report.h = mouse_report.x; + drag_scroll_x_semaphore = PLOOPY_DRAGSCROLL_SEMAPHORE; + } + + if (drag_scroll_y_semaphore <= 0) { #ifdef PLOOPY_DRAGSCROLL_INVERT // Invert vertical scroll direction - mouse_report.v = -mouse_report.y; + mouse_report.v = -mouse_report.y; #else - mouse_report.v = mouse_report.y; + mouse_report.v = mouse_report.y; #endif + drag_scroll_y_semaphore = PLOOPY_DRAGSCROLL_SEMAPHORE; + } mouse_report.x = 0; mouse_report.y = 0; } diff --git a/keyboards/ploopyco/madromys/readme.md b/keyboards/ploopyco/madromys/readme.md index 339e057e1eca..80330f40c77b 100644 --- a/keyboards/ploopyco/madromys/readme.md +++ b/keyboards/ploopyco/madromys/readme.md @@ -28,3 +28,4 @@ Nothing needs to be enabled to use this functionality; it's enabled on Madromys * `#define PLOOPY_DRAGSCROLL_FIXED` - Normally, when activating Drag Scroll, it uses a fraction of the current DPI. You can define this to use a specific, set DPI rather than a fraction of the current DPI. * `#define PLOOPY_DRAGSCROLL_DPI 100` - When the fixed DPI option is enabled, this sets the DPI to be used for Drag Scroll. * `#define PLOOPY_DRAGSCROLL_INVERT` - This reverses the direction that the scroll is performed. +* `#define PLOOPY_DRAGSCROLL_SEMAPHORE` - This is a divisor on the drag scroll sensitivity. The default is 0, which means that the drag scroll is at maximum sensitivity. A value of 4 would mean that the drag scroll is 4 times less sensitive. \ No newline at end of file From 840c8ae9845018dec6c408502eed470441060523 Mon Sep 17 00:00:00 2001 From: ploopyco Date: Thu, 28 Sep 2023 12:12:11 -0400 Subject: [PATCH 09/10] fixed drag scroll semaphore code --- keyboards/ploopyco/madromys/madromys.c | 47 +++++++++++++++++++------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/keyboards/ploopyco/madromys/madromys.c b/keyboards/ploopyco/madromys/madromys.c index 6d1bc79df800..ffd09e5112e7 100644 --- a/keyboards/ploopyco/madromys/madromys.c +++ b/keyboards/ploopyco/madromys/madromys.c @@ -38,7 +38,10 @@ # define PLOOPY_DRAGSCROLL_MULTIPLIER 0.75 // Variable-DPI Drag Scroll #endif #ifndef PLOOPY_DRAGSCROLL_SEMAPHORE -# define PLOOPY_DRAGSCROLL_SEMAPHORE 0 +# define PLOOPY_DRAGSCROLL_SEMAPHORE 4 +#endif +#ifndef PLOOPY_DRAGSCROLL_INVERT +# define PLOOPY_DRAGSCROLL_INVERT 1 #endif keyboard_config_t keyboard_config; @@ -54,28 +57,46 @@ uint16_t dpi_array[] = PLOOPY_DPI_OPTIONS; bool is_drag_scroll = false; // drag scroll divisor state -int8_t drag_scroll_x_semaphore = PLOOPY_DRAGSCROLL_SEMAPHORE; -int8_t drag_scroll_y_semaphore = PLOOPY_DRAGSCROLL_SEMAPHORE; +int8_t drag_scroll_x_semaphore = 0; +int8_t drag_scroll_y_semaphore = 0; report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { if (is_drag_scroll) { - drag_scroll_x_semaphore -= abs(mouse_report.x); - drag_scroll_y_semaphore -= abs(mouse_report.y); + int16_t mouse_report_x_temp = mouse_report.x; + int16_t mouse_report_y_temp = mouse_report.y; + int16_t mouse_report_x_calc = 0; + int16_t mouse_report_y_calc = 0; + int16_t valx = (mouse_report_x_temp > 0) ? -1 : 1; + int16_t valy = (mouse_report_y_temp > 0) ? -1 : 1; + + while (mouse_report_x_temp != 0) { + mouse_report_x_temp += valx; + drag_scroll_x_semaphore -= valx; + + if (abs(drag_scroll_x_semaphore) >= PLOOPY_DRAGSCROLL_SEMAPHORE) { + mouse_report_x_calc -= valx; + drag_scroll_x_semaphore = 0; + } + } + + while (mouse_report_y_temp != 0) { + mouse_report_y_temp += valy; + drag_scroll_y_semaphore -= valy; - if (drag_scroll_x_semaphore <= 0) { - mouse_report.h = mouse_report.x; - drag_scroll_x_semaphore = PLOOPY_DRAGSCROLL_SEMAPHORE; + if (abs(drag_scroll_y_semaphore) >= PLOOPY_DRAGSCROLL_SEMAPHORE) { + mouse_report_y_calc -= valy; + drag_scroll_y_semaphore = 0; + } } - if (drag_scroll_y_semaphore <= 0) { + mouse_report.h = mouse_report_x_calc; + #ifdef PLOOPY_DRAGSCROLL_INVERT // Invert vertical scroll direction - mouse_report.v = -mouse_report.y; + mouse_report.v = -mouse_report_y_calc; #else - mouse_report.v = mouse_report.y; + mouse_report.v = mouse_report_y_calc; #endif - drag_scroll_y_semaphore = PLOOPY_DRAGSCROLL_SEMAPHORE; - } mouse_report.x = 0; mouse_report.y = 0; } From cb93979b8cc002c13a68ea800ad72e9e94b44458 Mon Sep 17 00:00:00 2001 From: ploopyco Date: Fri, 10 Nov 2023 11:21:59 -0500 Subject: [PATCH 10/10] fixes --- keyboards/ploopyco/madromys/config.h | 1 + keyboards/ploopyco/madromys/madromys.c | 3 +++ keyboards/ploopyco/madromys/readme.md | 12 ++++++++++++ 3 files changed, 16 insertions(+) diff --git a/keyboards/ploopyco/madromys/config.h b/keyboards/ploopyco/madromys/config.h index aad2444db197..19fa1fada400 100644 --- a/keyboards/ploopyco/madromys/config.h +++ b/keyboards/ploopyco/madromys/config.h @@ -22,6 +22,7 @@ #define POINTING_DEVICE_INVERT_Y /* PMW3360 Settings */ +#define PMW33XX_LIFTOFF_DISTANCE 0x00 #define PMW33XX_CS_PIN GP5 #define SPI_SCK_PIN GP2 #define SPI_MISO_PIN GP0 diff --git a/keyboards/ploopyco/madromys/madromys.c b/keyboards/ploopyco/madromys/madromys.c index ffd09e5112e7..8ea1bcdbd784 100644 --- a/keyboards/ploopyco/madromys/madromys.c +++ b/keyboards/ploopyco/madromys/madromys.c @@ -40,6 +40,9 @@ #ifndef PLOOPY_DRAGSCROLL_SEMAPHORE # define PLOOPY_DRAGSCROLL_SEMAPHORE 4 #endif +#ifndef PLOOPY_DRAGSCROLL_MOMENTARY +# define PLOOPY_DRAGSCROLL_MOMENTARY 1 +#endif #ifndef PLOOPY_DRAGSCROLL_INVERT # define PLOOPY_DRAGSCROLL_INVERT 1 #endif diff --git a/keyboards/ploopyco/madromys/readme.md b/keyboards/ploopyco/madromys/readme.md index 80330f40c77b..456a3c7db20c 100644 --- a/keyboards/ploopyco/madromys/readme.md +++ b/keyboards/ploopyco/madromys/readme.md @@ -15,6 +15,18 @@ Make example for this keyboard (after setting up your build environment): See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). +# Triggering the Bootloader + +[Do you see those two golden holes in the board](https://ploopy.co/wp-content/uploads/2023/11/boot.jpg)? Those are called **vias**. They act exactly like a switch does. Right now, that switch is OFF. However, if you take a paperclip or a pair of metal tweezers and touch those two vias, the two vias will form an electrical connection. Effectively, that switch turns ON. + +Go ahead and connect the two vias, and then (while the vias are connected) plug in the Madromys board into your computer. + +The computer should recognise that a mass storage device was just plugged in. Once this is done, you should be able to drag and drop files onto the Madromys board, as if the board was a USB drive. Feel free to remove the tweezers or paperclip at this point. + +If you want to upload a new firmware file (a ".uf2" file, like "madromys_awesome_version.uf2" or something), just drag it into the folder, and it'll automatically install on the Madromys board and restart itself, in normal operating mode. You're done! + +**TIP**: If your firmware is in some kind of strange state and uploading new firmware isn't fixing it, try uploading [a flash nuke](https://learn.adafruit.com/getting-started-with-raspberry-pi-pico-circuitpython/circuitpython#flash-resetting-uf2-3083182) to the Madromys board before flashing the new firmware. It wipes the memory of the Madromys board completely clean, which can help clear a few types of errors. + # Drag Scroll Drag Scroll is a custom keycode for Ploopy devices that allows you to hold or tap a button and have the mouse movement translate into scrolling instead.