summaryrefslogtreecommitdiffstats
path: root/keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.c')
-rw-r--r--keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.c78
1 files changed, 78 insertions, 0 deletions
diff --git a/keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.c b/keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.c
new file mode 100644
index 0000000000..afccb8c7ed
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.c
@@ -0,0 +1,78 @@
+#include "trackpad.h"
+
+// bool isScrollingMode = false;
+bool isScrollMode = false;
+
+void pointing_device_init(void){
+
+ SPI_Init(SPI_SPEED_FCPU_DIV_8 | SPI_MODE_MASTER);
+
+ // Set as output
+ TP_RESET_INIT;
+ TP_SHUTDOWN_INIT;
+ TP_CS_INIT;
+ LVL_SHIFT_EN_INIT;
+
+ // Reset level shifter
+ LVL_SHIFT_EN_LO;
+ wait_ms(100);
+ LVL_SHIFT_EN_HI;
+
+ // Force a BB-8520 reset
+ TP_RESET_HI;
+ wait_ms(100);
+ TP_RESET_LO;
+
+ // Turn on BB-8520 trackpad
+ TP_SHUTDOWN_LO;
+
+ TP_CS_HI;
+}
+
+uint8_t readRegister(uint8_t address) {
+ uint8_t data;
+
+ TP_CS_LO;
+
+ // Read the data
+ SPI_TransferByte(address);
+ data = SPI_TransferByte(0x00);
+
+ TP_CS_HI;
+
+ return data;
+}
+
+void pointing_device_task(void){
+ uint8_t motion = readRegister(0x02);
+
+ // Motion has occurred on the trackpad
+ if (motion > 127) {
+
+ int8_t dx, dy;
+
+ if(TRACKPAD_CONNECTOR_VER == 1) {
+ dx = readRegister(0x03);
+ dy = -readRegister(0x04);
+ }
+ else {
+ dy = -readRegister(0x03);
+ dx = -readRegister(0x04);
+ }
+
+ report_mouse_t currentReport = pointing_device_get_report();
+ if (isScrollMode)
+ {
+ currentReport.h = dx/SCROLL_SPEED_DIVIDER;
+ currentReport.v = dy/SCROLL_SPEED_DIVIDER;
+ }
+ else
+ {
+ currentReport.x = dx * POINTER_SPEED_MULTIPLIER;
+ currentReport.y = dy * POINTER_SPEED_MULTIPLIER;
+ }
+
+ pointing_device_set_report(currentReport);
+ pointing_device_send();
+ }
+}