Browse Source

Use Dasky's mouse report syncing

pull/15328/head
Drashna Jael're 2 years ago
parent
commit
7b07b67889
No known key found for this signature in database GPG Key ID: DBA1FD3A860D1B11
3 changed files with 98 additions and 26 deletions
  1. +3
    -0
      keyboards/handwired/tractyl_manuform/5x6_right/config.h
  2. +93
    -10
      keyboards/handwired/tractyl_manuform/tm_sync.c
  3. +2
    -16
      keyboards/handwired/tractyl_manuform/tractyl_manuform.c

+ 3
- 0
keyboards/handwired/tractyl_manuform/5x6_right/config.h View File

@ -51,3 +51,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define NO_ACTION_FUNCTION
#define OLED_DISPLAY_128X64
#define POINTING_DEVICE_TASK_THROTTLE
#define POINTING_DEVICE_RIGHT

+ 93
- 10
keyboards/handwired/tractyl_manuform/tm_sync.c View File

@ -17,16 +17,21 @@
#include "tractyl_manuform.h"
#include "transactions.h"
#include <string.h>
#ifdef MOUSEKEY_ENABLE
# include "mousekey.h"
#endif
kb_config_data_t kb_config;
kb_mouse_report_t sync_mouse_report;
uint16_t transport_mouse_report;
kb_config_data_t kb_config;
static report_mouse_t shared_mouse_report;
extern const pointing_device_driver_t pointing_device_driver;
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(transport_mouse_report)) {
memcpy(target2initiator_buffer, &transport_mouse_report, sizeof(transport_mouse_report));
}
sync_mouse_report.raw = transport_mouse_report;
shared_mouse_report = pointing_device_driver.get_report(shared_mouse_report);
memcpy(target2initiator_buffer, &shared_mouse_report, sizeof(report_mouse_t));
shared_mouse_report.x = 0;
shared_mouse_report.y = 0;
shared_mouse_report.h = 0;
shared_mouse_report.v = 0;
}
void kb_config_sync_handler(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) {
@ -44,9 +49,7 @@ void kb_config_sync_handler(uint8_t initiator2target_buffer_size, const void* in
}
}
void keyboard_pre_init_sync(void) {
memset(&kb_config, 0, sizeof(kb_config));
}
void keyboard_pre_init_sync(void) { memset(&kb_config, 0, sizeof(kb_config)); }
void keyboard_post_init_sync(void) {
// Register keyboard state sync split transaction
@ -86,3 +89,83 @@ void trackball_set_cpi(uint16_t cpi) {
pointing_device_set_cpi(cpi);
}
}
void pointing_device_task(void) {
if (!is_keyboard_master()) {
return;
}
#if defined(POINTING_DEVICE_TASK_THROTTLE)
static uint32_t last_exec = 0;
if (timer_elapsed32(last_exec) < 1) {
return;
}
last_exec = timer_read32();
#endif
report_mouse_t local_report = pointing_device_get_report();
// Gather report info
#ifdef POINTING_DEVICE_MOTION_PIN
if (!readPin(POINTING_DEVICE_MOTION_PIN))
#endif
#if defined(POINTING_DEVICE_COMBINED)
local_report = pointing_device_driver.get_report(local_report);
transaction_rpc_recv(RPC_ID_POINTER_STATE_SYNC, sizeof(report_mouse_t), &shared_mouse_report);
local_report.x = local_report.x | shared_mouse_report.x;
local_report.y = local_report.y | shared_mouse_report.y;
local_report.h = local_report.h | shared_mouse_report.h;
local_report.v = local_report.v | shared_mouse_report.v;
#elif defined(POINTING_DEVICE_LEFT)
if (is_keyboard_left()) {
local_report = pointing_device_driver.get_report(local_report);
} else {
transaction_rpc_recv(RPC_ID_POINTER_STATE_SYNC, sizeof(report_mouse_t), &local_report);
}
#elif defined(POINTING_DEVICE_RIGHT)
if (!is_keyboard_left()) {
local_report = pointing_device_driver.get_report(local_report);
} else {
transaction_rpc_recv(RPC_ID_POINTER_STATE_SYNC, sizeof(report_mouse_t), &local_report);
}
#else
# error "You need to define the side(s) the pointing device is on. POINTING_DEVICE_COMBINED / POINTING_DEVICE_LEFT / POINTING_DEVICE_RIGHT"
#endif
// Support rotation of the sensor data
#if defined(POINTING_DEVICE_ROTATION_90) || defined(POINTING_DEVICE_ROTATION_180) || defined(POINTING_DEVICE_ROTATION_270)
int8_t x = local_report.x, y = local_report.y;
# if defined(POINTING_DEVICE_ROTATION_90)
local_report.x = y;
local_report.y = -x;
# elif defined(POINTING_DEVICE_ROTATION_180)
local_report.x = -x;
local_report.y = -y;
# elif defined(POINTING_DEVICE_ROTATION_270)
local_report.x = -y;
local_report.y = x;
# else
# error "How the heck did you get here?!"
# endif
#endif
// Support Inverting the X and Y Axises
#if defined(POINTING_DEVICE_INVERT_X)
local_report.x = -local_report.x;
#endif
#if defined(POINTING_DEVICE_INVERT_Y)
local_report.y = -local_report.y;
#endif
// allow kb to intercept and modify report
local_report = pointing_device_task_kb(local_report);
// combine with mouse report to ensure that the combined is sent correctly
#ifdef MOUSEKEY_ENABLE
report_mouse_t mousekey_report = mousekey_get_report();
local_report.buttons = local_report.buttons | mousekey_report.buttons;
#endif
#if defined(POINTING_DEVICE_COMBINED)
local_report.buttons = local_report.buttons | shared_mouse_report.buttons;
#endif
pointing_device_set_report(local_report);
pointing_device_send();
}

+ 2
- 16
keyboards/handwired/tractyl_manuform/tractyl_manuform.c View File

@ -99,22 +99,8 @@ void pointing_device_init_kb(void) {
}
report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) {
if (is_keyboard_left()) {
if (is_keyboard_master()) {
transaction_rpc_recv(RPC_ID_POINTER_STATE_SYNC, sizeof(sync_mouse_report), &sync_mouse_report);
mouse_report.x = sync_mouse_report.x;
mouse_report.y = sync_mouse_report.y;
pointing_device_task_user(mouse_report);
}
} else {
if (is_keyboard_master()) {
pointing_device_task_user(mouse_report);
} else {
sync_mouse_report.x = mouse_report.x;
sync_mouse_report.y = mouse_report.y;
}
sync_mouse_report.x = 0;
sync_mouse_report.y = 0;
if (is_keyboard_master()) {
mouse_report = pointing_device_task_user(mouse_report);
}
return mouse_report;
}


Loading…
Cancel
Save