From 58a5030661b57f1dd05693053df2eddadc285f64 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sat, 21 Aug 2021 13:34:44 -0700 Subject: [Keymap] Drashna's Improve OLEDs and custom Split code (#14063) * Fill the oleds with right mods * Enable double mods on x32 oleds * Disable forced NKRO * Make oleds fancy only on good MCUs * Overhaul oled display * Further enhance oled, with kitty! * Final oled form * Not working transport * Transport id of woring * Add acceleration * fix button placement for accel macro * Fix accelartion location and behavior * Remove OLED sync code * Fix alignment issue * Remove audio hack * Fix up zima keymap * Add matrix slave scan function and cleanup drashna.h * Clean up user space * Allow userspace sync to be disable-able * Fix weird issue with audio * Fix alignment issue with user split sync * Disable second rgb matrix task * Disable additional animations * Change dynamic keymap settings * Hacky fix for borked corne * Add Blackpill (F411) support to tractyl manuform * remove manual via eeprom reset * Remove all references to rgblight twinkle * Fix issues with config processing --- keyboards/handwired/tractyl_manuform/tm_sync.c | 129 +++++++++++-------------- 1 file changed, 58 insertions(+), 71 deletions(-) (limited to 'keyboards/handwired/tractyl_manuform/tm_sync.c') diff --git a/keyboards/handwired/tractyl_manuform/tm_sync.c b/keyboards/handwired/tractyl_manuform/tm_sync.c index 0088fcc4f6..2a8847b3ef 100644 --- a/keyboards/handwired/tractyl_manuform/tm_sync.c +++ b/keyboards/handwired/tractyl_manuform/tm_sync.c @@ -14,86 +14,59 @@ * along with this program. If not, see . */ -#ifdef SPLIT_TRANSACTION_IDS_KB - -# include "tractyl_manuform.h" -# include "transactions.h" -# include -# include "drivers/sensors/pmw3360.h" - -kb_runtime_config_t kb_state; -kb_slave_data_t kb_slave; - -void slave_state_sync(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) { - if (target2initiator_buffer_size == sizeof(kb_slave)) { - memcpy(target2initiator_buffer, &kb_slave, sizeof(kb_slave)); - if (kb_slave.mouse_x > 127) { - kb_slave.mouse_x -= 127; - } else if (kb_slave.mouse_x < -127) { - kb_slave.mouse_x += 127; - } else { - kb_slave.mouse_x = 0; - } +#include "tractyl_manuform.h" +#include "transactions.h" +#include +#include "drivers/sensors/pmw3360.h" - if (kb_slave.mouse_y > 127) { - kb_slave.mouse_y -= 127; - } else if (kb_slave.mouse_y < -127) { - kb_slave.mouse_y += 127; - } else { - kb_slave.mouse_y = 0; - } +kb_config_data_t kb_config; +kb_pointer_data_t kb_pointer; + +void kb_config_sync_handler(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) { + if (initiator2target_buffer_size == sizeof(kb_config)) { + memcpy(&kb_config, initiator2target_buffer, sizeof(kb_config)); } } - -void pointer_state_sync(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) { - if (initiator2target_buffer_size == sizeof(kb_state)) { - memcpy(&kb_state, initiator2target_buffer, sizeof(kb_state)); +void kb_pointer_sync_handler(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) { + if (target2initiator_buffer_size == sizeof(kb_pointer)) { + memcpy(target2initiator_buffer, &kb_pointer, sizeof(kb_pointer)); } } +void keyboard_pre_init_sync(void) { + memset(&kb_config, 0, sizeof(kb_config)); + memset(&kb_pointer, 0, sizeof(kb_pointer)); +} + void keyboard_post_init_kb(void) { // Register keyboard state sync split transaction - transaction_register_rpc(RPC_ID_STATE_SYNC, pointer_state_sync); - transaction_register_rpc(RPC_ID_SLAVE_STATE, slave_state_sync); + transaction_register_rpc(RPC_ID_KB_CONFIG_SYNC, kb_config_sync_handler); + transaction_register_rpc(RPC_ID_POINTER_STATE_SYNC, kb_pointer_sync_handler); keyboard_post_init_user(); } -void kb_state_update(void) { -# ifdef POINTING_DEVICE_ENABLE +void kb_config_update(void) { if (is_keyboard_master()) { static uint16_t cpi = 0; - if (cpi != kb_state.device_cpi) { - cpi = kb_state.device_cpi; + if (cpi != kb_config.device_cpi) { + cpi = kb_config.device_cpi; pmw_set_cpi(cpi); } } -# endif } -void kb_post_state_update(void) { -# ifdef POINTING_DEVICE_ENABLE - if (is_keyboard_master() && is_keyboard_left()) { - report_mouse_t temp_report = pointing_device_get_report(); - temp_report.x = kb_slave.mouse_x; - temp_report.y = kb_slave.mouse_y; - pointing_device_set_report(temp_report); - } -# endif -} - -void kb_state_sync(void) { +void kb_config_sync(void) { if (is_keyboard_master()) { // Keep track of the last state, so that we can tell if we need to propagate to slave - static kb_runtime_config_t last_kb_state; - static uint32_t last_sync = 0; - static uint32_t mouse_sync = 0; - bool needs_sync = false; + static kb_config_data_t last_kb_config; + static uint32_t last_sync = 0; + bool needs_sync = false; // Check if the state values are different - if (memcmp(&kb_state, &last_kb_state, sizeof(kb_runtime_config_t))) { + if (memcmp(&kb_config, &last_kb_config, sizeof(kb_config))) { needs_sync = true; - memcpy(&last_kb_state, &kb_state, sizeof(kb_runtime_config_t)); + memcpy(&last_kb_config, &kb_config, sizeof(kb_config)); } // Send to slave every 500ms regardless of state change if (timer_elapsed32(last_sync) > 500) { @@ -102,31 +75,45 @@ void kb_state_sync(void) { // Perform the sync if requested if (needs_sync) { - if (transaction_rpc_send(RPC_ID_STATE_SYNC, sizeof(kb_runtime_config_t), &kb_state)) { + if (transaction_rpc_send(RPC_ID_KB_CONFIG_SYNC, sizeof(kb_config), &kb_config)) { last_sync = timer_read32(); } } + } +} - if (is_keyboard_left()) { - if (timer_elapsed32(mouse_sync) >= 5) { - // always sync slave data, since it may contain device reports. - if (transaction_rpc_recv(RPC_ID_SLAVE_STATE, sizeof(kb_slave_data_t), &kb_slave)) { - if (kb_slave.mouse_x >= -127 && kb_slave.mouse_x <= 127 && kb_slave.mouse_y >= -127 && kb_slave.mouse_y <= 127) { - mouse_sync = timer_read32(); - } - } +void kb_pointer_sync(void) { + if (is_keyboard_master() && is_keyboard_left()) { + // Keep track of the last state, so that we can tell if we need to propagate to slave + static uint32_t last_sync = 0; + + // Perform the sync if requested + if (timer_elapsed32(last_sync) >= 5) { + if (transaction_rpc_recv(RPC_ID_POINTER_STATE_SYNC, sizeof(kb_pointer), &kb_pointer)) { + last_sync = timer_read32(); } } } } void housekeeping_task_kb(void) { - // Update kb_state so we can send to slave - kb_state_update(); - + // Update kb_config so we can send to slave + kb_config_update(); // Data sync from master to slave - kb_state_sync(); + kb_config_sync(); + kb_pointer_sync(); +} + +void kb_pointer_sync_send(int8_t x, int8_t y) { + kb_pointer.mouse_x = x; + kb_pointer.mouse_y = y; +} - kb_post_state_update(); +kb_pointer_data_t kb_pointer_sync_get(void) { return (kb_pointer_data_t){.mouse_x = kb_pointer.mouse_x, .mouse_y = kb_pointer.mouse_y}; } + +void trackball_set_cpi(uint16_t cpi) { + kb_config.device_cpi = cpi; + if (!is_keyboard_left()) { + pmw_set_cpi(cpi); + } } -#endif -- cgit v1.2.3