summary refs log tree commit diff
path: root/keyboards/handwired/node5_1
diff options
context:
space:
mode:
authoruser <user@node5.net>2024-01-02 06:31:20 +0100
committeruser <user@node5.net>2024-01-02 06:31:20 +0100
commitbbc45101722fce098f576c381cd00815fba0f9e7 (patch)
treeb83412a81ccfc1420fd935862dd76e915e790ce0 /keyboards/handwired/node5_1
parenta5a573c9f5d128dd36ac73845e7c11f87c71a8ee (diff)
turn off leds on suspend
middle mouse button don't send if scrolled
Diffstat (limited to 'keyboards/handwired/node5_1')
-rw-r--r--keyboards/handwired/node5_1/keymaps/default/keymap.c101
-rw-r--r--keyboards/handwired/node5_1/rules.mk4
2 files changed, 87 insertions, 18 deletions
diff --git a/keyboards/handwired/node5_1/keymaps/default/keymap.c b/keyboards/handwired/node5_1/keymaps/default/keymap.c
index f36ae65bce..52cfe658b7 100644
--- a/keyboards/handwired/node5_1/keymaps/default/keymap.c
+++ b/keyboards/handwired/node5_1/keymaps/default/keymap.c
@@ -78,9 +78,33 @@ KC_LCTL, KC_LGUI, KC_LALT, KC_RALT,     KC_SPACE,         KC_BTN1, KC_BTN3, KC_B
 };
 */
 
+// Custom composite data type for holding colors
+struct color {
+    int red;
+    int green;
+    int blue;
+};
+
+const struct color trackball_normal_color = {
+	.red = 255, 
+	.green = 74, 
+	.blue = 0
+};
+
+bool scrolled = false;
+
+void set_trackball_normal_color(void) {
+	pimoroni_trackball_set_rgbw(
+			trackball_normal_color.red, 
+			trackball_normal_color.green,
+			trackball_normal_color.blue,
+			0
+	);
+}
+
 void keyboard_post_init_user(void) {
 	// Call the post init code.
-	pimoroni_trackball_set_rgbw(255, 127, 0, 0);
+	set_trackball_normal_color();
 	pointing_device_set_cpi(30000);
 
 	debug_enable=true;
@@ -89,7 +113,14 @@ void keyboard_post_init_user(void) {
 bool set_scrolling = false;
 
 report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
-	if (set_scrolling) {
+	if (set_scrolling)
+	{
+		if (mouse_report.x || mouse_report.y)
+		{
+			// Used for middle mouse button scroll logic
+			scrolled = true;
+			// dprintf("X: %d\nY: %d\n", mouse_report.x, mouse_report.y);
+		}
 		mouse_report.h = mouse_report.x;
 		mouse_report.v = mouse_report.y;
 		mouse_report.x = 0;
@@ -100,37 +131,71 @@ report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
 
 bool process_record_user(uint16_t keycode, keyrecord_t *record)
 {
+	//dprintf("keycode: %d\n", keycode);
 	if (keycode == KC_BTN3) {
 		if (record->event.pressed)
 		{
+			// Middle mouse button pressed
+			// Start scrolling mode
 			set_scrolling = true;
 			pointing_device_set_cpi(8000);
 			pimoroni_trackball_set_rgbw(0, 0, 255, 0);
+
+			// Don't send pressed to computer, as there's some logic 
+			// to check if scrolled. This logic is handled later
+			return false;
 		}
 		else
 		{
+			// Stop scrolling mode
 			set_scrolling = false;
 			pointing_device_set_cpi(30000);
-			pimoroni_trackball_set_rgbw(255, 127, 0, 0);
+			set_trackball_normal_color();
+
+			// Middle mouse button wasn't sent earlier, 
+			// send if not scrolled on mouse button up. 
+			// Similar to how ThinkPads handles it
+			if (!scrolled)
+			{
+				SEND_STRING(SS_TAP(X_MS_BTN3));
+			}
+			else
+			{
+				scrolled = false;
+			}
 		}
 	}
 	return true;
 }
 
+void suspend_power_down_user(void) {
+	// code will run multiple times while keyboard is suspended
+
+	// Turn off light when computer is suspended
+	pimoroni_trackball_set_rgbw(0, 0, 0, 0);
+}
+
+void suspend_wakeup_init_user(void) {
+	// code will run on keyboard wakeup
+
+	// Turn on light when computer is woken from sleep
+	set_trackball_normal_color();
+}
+
 /*
-   uint8_t pointing_device_handle_buttons(uint8_t buttons, bool pressed, pointing_device_buttons_t button)
-   {
-   if (pressed) {
-   buttons |= 1 << (button);
-   if (buttons)
-   {
-   dprintf("buttons: %d\npressed: %d\nbutton: %d\n", buttons, pressed, button);
-   }
-   } else {
-   buttons &= ~(1 << (button));
-   }
-
-   return buttons;
-   }
-   */
+uint8_t pointing_device_handle_buttons(uint8_t buttons, bool pressed, pointing_device_buttons_t button)
+{
+	if (pressed) {
+		buttons |= 1 << (button);
+		if (buttons)
+		{
+			dprintf("buttons: %d\npressed: %d\nbutton: %d\n", buttons, pressed, button);
+		}
+	} else {
+		buttons &= ~(1 << (button));
+	}
+
+	return buttons;
+}
+*/
 
diff --git a/keyboards/handwired/node5_1/rules.mk b/keyboards/handwired/node5_1/rules.mk
index f5b734bc85..94eda5fd52 100644
--- a/keyboards/handwired/node5_1/rules.mk
+++ b/keyboards/handwired/node5_1/rules.mk
@@ -11,3 +11,7 @@ POINTING_DEVICE_DRIVER = pimoroni_trackball
 # https://www.waveshare.com/img/devkit/RP2040-Zero/RP2040-Zero-details-7.jpg
 # RGBLIGHT_ENABLE = yes
 CONSOLE_ENABLE = yes
+
+# Enable user code to send keys
+SEND_STRING_ENABLE = yes
+