|
@@ -34,23 +34,21 @@ keyboard_config_t keyboard_config;
|
|
uint16_t dpi_array[] = TRACKBALL_DPI_OPTIONS;
|
|
uint16_t dpi_array[] = TRACKBALL_DPI_OPTIONS;
|
|
#define DPI_OPTION_SIZE (sizeof(dpi_array) / sizeof(uint16_t))
|
|
#define DPI_OPTION_SIZE (sizeof(dpi_array) / sizeof(uint16_t))
|
|
|
|
|
|
-bool BurstState = false; // init burst state for Trackball module
|
|
|
|
-uint16_t MotionStart = 0; // Timer for accel, 0 is resting state
|
|
|
|
|
|
+bool BurstState = false; // init burst state for Trackball module
|
|
|
|
+uint16_t MotionStart = 0; // Timer for accel, 0 is resting state
|
|
|
|
|
|
__attribute__((weak)) void process_mouse_user(report_mouse_t* mouse_report, int8_t x, int8_t y) {
|
|
__attribute__((weak)) void process_mouse_user(report_mouse_t* mouse_report, int8_t x, int8_t y) {
|
|
mouse_report->x = x;
|
|
mouse_report->x = x;
|
|
mouse_report->y = y;
|
|
mouse_report->y = y;
|
|
}
|
|
}
|
|
|
|
|
|
-__attribute__((weak)) kb_pointer_data_t process_mouse(void) {
|
|
|
|
- kb_pointer_data_t temp_data = {.mouse_x = 0, .mouse_y = 0};
|
|
|
|
-
|
|
|
|
|
|
+__attribute__((weak)) void process_mouse(void) {
|
|
report_pmw_t data = pmw_read_burst();
|
|
report_pmw_t data = pmw_read_burst();
|
|
- // Reset timer if stopped moving
|
|
|
|
- if (!data.isMotion) {
|
|
|
|
- if (MotionStart != 0) MotionStart = 0;
|
|
|
|
- return temp_data;
|
|
|
|
- }
|
|
|
|
|
|
+ // Reset timer if stopped moving
|
|
|
|
+ if (!data.isMotion) {
|
|
|
|
+ if (MotionStart != 0) MotionStart = 0;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
|
|
if (data.isOnSurface) {
|
|
if (data.isOnSurface) {
|
|
// Set timer if new motion
|
|
// Set timer if new motion
|
|
@@ -59,8 +57,12 @@ __attribute__((weak)) kb_pointer_data_t process_mouse(void) {
|
|
MotionStart = timer_read();
|
|
MotionStart = timer_read();
|
|
}
|
|
}
|
|
|
|
|
|
- if (debug_mouse) { dprintf("Delt] d: %d t: %u\n", abs(data.dx) + abs(data.dy), MotionStart); }
|
|
|
|
- if (debug_mouse) { dprintf("Pre ] X: %d, Y: %d\n", data.dx, data.dy); }
|
|
|
|
|
|
+ if (debug_mouse) {
|
|
|
|
+ dprintf("Delt] d: %d t: %u\n", abs(data.dx) + abs(data.dy), MotionStart);
|
|
|
|
+ }
|
|
|
|
+ if (debug_mouse) {
|
|
|
|
+ dprintf("Pre ] X: %d, Y: %d\n", data.dx, data.dy);
|
|
|
|
+ }
|
|
#if defined(PROFILE_LINEAR)
|
|
#if defined(PROFILE_LINEAR)
|
|
float scale = float(timer_elaspsed(MotionStart)) / 1000.0;
|
|
float scale = float(timer_elaspsed(MotionStart)) / 1000.0;
|
|
data.dx *= scale;
|
|
data.dx *= scale;
|
|
@@ -77,14 +79,15 @@ __attribute__((weak)) kb_pointer_data_t process_mouse(void) {
|
|
if (debug_mouse) dprintf("Cons] X: %d, Y: %d\n", data.dx, data.dy);
|
|
if (debug_mouse) dprintf("Cons] X: %d, Y: %d\n", data.dx, data.dy);
|
|
// dprintf("Elapsed:%u, X: %f Y: %\n", i, pgm_read_byte(firmware_data+i));
|
|
// dprintf("Elapsed:%u, X: %f Y: %\n", i, pgm_read_byte(firmware_data+i));
|
|
|
|
|
|
- temp_data.mouse_x = -data.dx;
|
|
|
|
- temp_data.mouse_y = data.dy;
|
|
|
|
|
|
+ sync_mouse_report.x = -data.dx;
|
|
|
|
+ sync_mouse_report.y = data.dy;
|
|
}
|
|
}
|
|
- return temp_data;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
|
|
bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
|
|
- if (!process_record_user(keycode, record)) { return false; }
|
|
|
|
|
|
+ if (!process_record_user(keycode, record)) {
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
|
|
#ifdef POINTING_DEVICE_ENABLE
|
|
#ifdef POINTING_DEVICE_ENABLE
|
|
if (keycode == DPI_CONFIG && record->event.pressed) {
|
|
if (keycode == DPI_CONFIG && record->event.pressed) {
|
|
@@ -119,29 +122,28 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
__attribute__((weak)) void keyboard_pre_init_sync(void) {}
|
|
__attribute__((weak)) void keyboard_pre_init_sync(void) {}
|
|
-
|
|
|
|
-// Hardware Setup
|
|
|
|
-void keyboard_pre_init_kb(void) {
|
|
|
|
|
|
+void keyboard_pre_init_kb(void) {
|
|
// debug_enable = true;
|
|
// debug_enable = true;
|
|
// debug_matrix = true;
|
|
// debug_matrix = true;
|
|
// debug_mouse = true;
|
|
// debug_mouse = true;
|
|
// debug_encoder = 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.
|
|
|
|
- */
|
|
|
|
-
|
|
|
|
// This is the debug LED.
|
|
// This is the debug LED.
|
|
#if defined(DEBUG_LED_PIN)
|
|
#if defined(DEBUG_LED_PIN)
|
|
setPinOutput(DEBUG_LED_PIN);
|
|
setPinOutput(DEBUG_LED_PIN);
|
|
- writePin(DEBUG_LED_PIN, debug_enable);
|
|
|
|
|
|
+ writePin(DEBUG_LED_PIN, !debug_enable);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
keyboard_pre_init_sync();
|
|
keyboard_pre_init_sync();
|
|
keyboard_pre_init_user();
|
|
keyboard_pre_init_user();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+__attribute__((weak)) void keyboard_post_init_sync(void) {}
|
|
|
|
+void keyboard_post_init_kb(void) {
|
|
|
|
+ keyboard_post_init_sync();
|
|
|
|
+ keyboard_post_init_user();
|
|
|
|
+}
|
|
|
|
+
|
|
#ifdef POINTING_DEVICE_ENABLE
|
|
#ifdef POINTING_DEVICE_ENABLE
|
|
void pointing_device_init(void) {
|
|
void pointing_device_init(void) {
|
|
if (!is_keyboard_left()) {
|
|
if (!is_keyboard_left()) {
|
|
@@ -153,18 +155,18 @@ void pointing_device_init(void) {
|
|
|
|
|
|
void pointing_device_task(void) {
|
|
void pointing_device_task(void) {
|
|
report_mouse_t mouse_report = pointing_device_get_report();
|
|
report_mouse_t mouse_report = pointing_device_get_report();
|
|
- kb_pointer_data_t data = {.mouse_x = mouse_report.x, .mouse_y = mouse_report.y};
|
|
|
|
|
|
+
|
|
if (is_keyboard_left()) {
|
|
if (is_keyboard_left()) {
|
|
if (is_keyboard_master()) {
|
|
if (is_keyboard_master()) {
|
|
- data = kb_pointer_sync_get();
|
|
|
|
- process_mouse_user(&mouse_report, data.mouse_x, data.mouse_y);
|
|
|
|
|
|
+ transaction_rpc_recv(RPC_ID_POINTER_STATE_SYNC, sizeof(sync_mouse_report), &sync_mouse_report);
|
|
|
|
+ process_mouse_user(&mouse_report, sync_mouse_report.x, sync_mouse_report.y);
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- data = process_mouse();
|
|
|
|
- if (!is_keyboard_master()) {
|
|
|
|
- kb_pointer_sync_send(data.mouse_x, data.mouse_y);
|
|
|
|
- } else {
|
|
|
|
- process_mouse_user(&mouse_report, data.mouse_x, data.mouse_y);
|
|
|
|
|
|
+ process_mouse();
|
|
|
|
+ if (is_keyboard_master()) {
|
|
|
|
+ process_mouse_user(&mouse_report, sync_mouse_report.x, sync_mouse_report.y);
|
|
|
|
+ sync_mouse_report.x = 0;
|
|
|
|
+ sync_mouse_report.y = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -183,11 +185,13 @@ void eeconfig_init_kb(void) {
|
|
}
|
|
}
|
|
|
|
|
|
__attribute__((weak)) void matrix_init_sub_kb(void) {}
|
|
__attribute__((weak)) void matrix_init_sub_kb(void) {}
|
|
-void matrix_init_kb(void) {
|
|
|
|
|
|
+void matrix_init_kb(void) {
|
|
// is safe to just read DPI setting since matrix init
|
|
// is safe to just read DPI setting since matrix init
|
|
// comes before pointing device init.
|
|
// comes before pointing device init.
|
|
keyboard_config.raw = eeconfig_read_kb();
|
|
keyboard_config.raw = eeconfig_read_kb();
|
|
- if (keyboard_config.dpi_config > DPI_OPTION_SIZE) { eeconfig_init_kb(); }
|
|
|
|
|
|
+ if (keyboard_config.dpi_config > DPI_OPTION_SIZE) {
|
|
|
|
+ eeconfig_init_kb();
|
|
|
|
+ }
|
|
matrix_init_sub_kb();
|
|
matrix_init_sub_kb();
|
|
matrix_init_user();
|
|
matrix_init_user();
|
|
}
|
|
}
|
|
@@ -198,6 +202,12 @@ void matrix_scan_kb(void) {
|
|
matrix_scan_user();
|
|
matrix_scan_user();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+__attribute__((weak)) void housekeeping_task_sync(void) {}
|
|
|
|
+void housekeeping_task_kb(void) {
|
|
|
|
+ housekeeping_task_sync();
|
|
|
|
+ // no need for user function, is called already
|
|
|
|
+}
|
|
|
|
+
|
|
#ifdef POINTING_DEVICE_ENABLE
|
|
#ifdef POINTING_DEVICE_ENABLE
|
|
void matrix_power_up(void) { pointing_device_task(); }
|
|
void matrix_power_up(void) { pointing_device_task(); }
|
|
#endif
|
|
#endif
|