[Keyboard] Tractyl Manuform - configuration updates (#14314)
* [Keyboard] Tractyl Manuform - configuration updates * Update readmes * Add more details * Fix issues with encoder pins * Additional fixes for pin config * Fix up some comments
This commit is contained in:
@@ -34,23 +34,21 @@ keyboard_config_t keyboard_config;
|
||||
uint16_t dpi_array[] = TRACKBALL_DPI_OPTIONS;
|
||||
#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) {
|
||||
mouse_report->x = x;
|
||||
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();
|
||||
// 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) {
|
||||
// Set timer if new motion
|
||||
@@ -59,8 +57,12 @@ __attribute__((weak)) kb_pointer_data_t process_mouse(void) {
|
||||
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)
|
||||
float scale = float(timer_elaspsed(MotionStart)) / 1000.0;
|
||||
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);
|
||||
// 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) {
|
||||
if (!process_record_user(keycode, record)) { return false; }
|
||||
if (!process_record_user(keycode, record)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
#ifdef POINTING_DEVICE_ENABLE
|
||||
if (keycode == DPI_CONFIG && record->event.pressed) {
|
||||
@@ -119,29 +122,28 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
|
||||
return true;
|
||||
}
|
||||
__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_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.
|
||||
*/
|
||||
|
||||
// This is the debug LED.
|
||||
#if defined(DEBUG_LED_PIN)
|
||||
setPinOutput(DEBUG_LED_PIN);
|
||||
writePin(DEBUG_LED_PIN, debug_enable);
|
||||
writePin(DEBUG_LED_PIN, !debug_enable);
|
||||
#endif
|
||||
|
||||
keyboard_pre_init_sync();
|
||||
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
|
||||
void pointing_device_init(void) {
|
||||
if (!is_keyboard_left()) {
|
||||
@@ -153,18 +155,18 @@ void pointing_device_init(void) {
|
||||
|
||||
void pointing_device_task(void) {
|
||||
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_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 {
|
||||
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) {}
|
||||
void matrix_init_kb(void) {
|
||||
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(); }
|
||||
if (keyboard_config.dpi_config > DPI_OPTION_SIZE) {
|
||||
eeconfig_init_kb();
|
||||
}
|
||||
matrix_init_sub_kb();
|
||||
matrix_init_user();
|
||||
}
|
||||
@@ -198,6 +202,12 @@ void matrix_scan_kb(void) {
|
||||
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
|
||||
void matrix_power_up(void) { pointing_device_task(); }
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user