[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:
Drashna Jaelre
2021-09-08 16:52:43 -07:00
committed by GitHub
parent 8f8411a98a
commit 4294aa0f1e
11 changed files with 140 additions and 117 deletions

View File

@@ -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