#include "main.h" #include "action.h" #include "led_display.h" #include "layer.h" #include "usb_interfaces/usb_interface_mouse.h" #include "current_keymap.h" static uint8_t activeLayer = LAYER_ID_BASE; static uint8_t mouseWheelDivisorCounter = 0; static uint8_t mouseSpeedAccelDivisorCounter = 0; static uint8_t mouseSpeed = 3; static bool wasPreviousMouseActionWheelAction = false; void processMouseAction(key_action_t action) { bool isWheelAction = action.mouse.scrollActions && !action.mouse.moveActions && !action.mouse.buttonActions; if (isWheelAction && wasPreviousMouseActionWheelAction) { mouseWheelDivisorCounter++; } if (action.mouse.scrollActions) { if (mouseWheelDivisorCounter == MOUSE_WHEEL_DIVISOR) { mouseWheelDivisorCounter = 0; if (action.mouse.scrollActions & MOUSE_SCROLL_UP) { UsbMouseReport.wheelX = 1; } if (action.mouse.scrollActions & MOUSE_SCROLL_DOWN) { UsbMouseReport.wheelX = -1; } } } if (action.mouse.moveActions & MOUSE_ACCELERATE || action.mouse.moveActions & MOUSE_DECELERATE) { mouseSpeedAccelDivisorCounter++; if (mouseSpeedAccelDivisorCounter == MOUSE_SPEED_ACCEL_DIVISOR) { mouseSpeedAccelDivisorCounter = 0; if (action.mouse.moveActions & MOUSE_ACCELERATE) { if (mouseSpeed < MOUSE_MAX_SPEED) { mouseSpeed++; } } if (action.mouse.moveActions & MOUSE_DECELERATE) { if (mouseSpeed > 1) { mouseSpeed--; } } } } else if (action.mouse.moveActions) { if (action.mouse.moveActions & MOUSE_MOVE_LEFT) { UsbMouseReport.x = -mouseSpeed; } if (action.mouse.moveActions & MOUSE_MOVE_RIGHT) { UsbMouseReport.x = mouseSpeed; } if (action.mouse.moveActions & MOUSE_MOVE_UP) { UsbMouseReport.y = -mouseSpeed; } if (action.mouse.moveActions & MOUSE_MOVE_DOWN) { UsbMouseReport.y = mouseSpeed; } } UsbMouseReport.buttons |= action.mouse.buttonActions; wasPreviousMouseActionWheelAction = isWheelAction; } void UpdateActiveUsbReports() { bzero(&UsbMouseReport, sizeof(usb_mouse_report_t)); uint8_t scancodeIdx = 0; activeLayer = LAYER_ID_BASE; for (uint8_t slotId=0; slotIdscancodes[scancodeIdx++] = action.keystroke.scancode; ActiveUsbBasicKeyboardReport->modifiers |= action.keystroke.modifiers; break; case KEY_ACTION_MEDIA_KEYSTROKE: ActiveUsbMediaKeyboardReport->scancodes[scancodeIdx++] = action.keystroke.scancode; break; case KEY_ACTION_MOUSE: processMouseAction(action); break; } } } }