parent
bf6de46d7f
commit
2cb35373c6
7 changed files with 82 additions and 37 deletions
|
@ -377,28 +377,28 @@ void pointing_device_set_cpi_on_side(bool left, uint16_t cpi) {
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief clamps int16_t to int8_t
|
||||
* @brief clamps int16_t to int8_t, or int32_t to int16_t
|
||||
*
|
||||
* @param[in] int16_t value
|
||||
* @return int8_t clamped value
|
||||
* @param[in] hv_clamp_range_t value
|
||||
* @return mouse_hv_report_t clamped value
|
||||
*/
|
||||
static inline int8_t pointing_device_hv_clamp(int16_t value) {
|
||||
if (value < INT8_MIN) {
|
||||
return INT8_MIN;
|
||||
} else if (value > INT8_MAX) {
|
||||
return INT8_MAX;
|
||||
static inline mouse_hv_report_t pointing_device_hv_clamp(hv_clamp_range_t value) {
|
||||
if (value < HV_REPORT_MIN) {
|
||||
return HV_REPORT_MIN;
|
||||
} else if (value > HV_REPORT_MAX) {
|
||||
return HV_REPORT_MAX;
|
||||
} else {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief clamps int16_t to int8_t
|
||||
* @brief clamps int16_t to int8_t, or int32_t to int16_t
|
||||
*
|
||||
* @param[in] clamp_range_t value
|
||||
* @param[in] xy_clamp_range_t value
|
||||
* @return mouse_xy_report_t clamped value
|
||||
*/
|
||||
static inline mouse_xy_report_t pointing_device_xy_clamp(clamp_range_t value) {
|
||||
static inline mouse_xy_report_t pointing_device_xy_clamp(xy_clamp_range_t value) {
|
||||
if (value < XY_REPORT_MIN) {
|
||||
return XY_REPORT_MIN;
|
||||
} else if (value > XY_REPORT_MAX) {
|
||||
|
@ -419,10 +419,10 @@ static inline mouse_xy_report_t pointing_device_xy_clamp(clamp_range_t value) {
|
|||
* @return combined report_mouse_t of left_report and right_report
|
||||
*/
|
||||
report_mouse_t pointing_device_combine_reports(report_mouse_t left_report, report_mouse_t right_report) {
|
||||
left_report.x = pointing_device_xy_clamp((clamp_range_t)left_report.x + right_report.x);
|
||||
left_report.y = pointing_device_xy_clamp((clamp_range_t)left_report.y + right_report.y);
|
||||
left_report.h = pointing_device_hv_clamp((int16_t)left_report.h + right_report.h);
|
||||
left_report.v = pointing_device_hv_clamp((int16_t)left_report.v + right_report.v);
|
||||
left_report.x = pointing_device_xy_clamp((xy_clamp_range_t)left_report.x + right_report.x);
|
||||
left_report.y = pointing_device_xy_clamp((xy_clamp_range_t)left_report.y + right_report.y);
|
||||
left_report.h = pointing_device_hv_clamp((hv_clamp_range_t)left_report.h + right_report.h);
|
||||
left_report.v = pointing_device_hv_clamp((hv_clamp_range_t)left_report.v + right_report.v);
|
||||
left_report.buttons |= right_report.buttons;
|
||||
return left_report;
|
||||
}
|
||||
|
|
|
@ -95,11 +95,21 @@ typedef enum {
|
|||
#ifdef MOUSE_EXTENDED_REPORT
|
||||
# define XY_REPORT_MIN INT16_MIN
|
||||
# define XY_REPORT_MAX INT16_MAX
|
||||
typedef int32_t clamp_range_t;
|
||||
typedef int32_t xy_clamp_range_t;
|
||||
#else
|
||||
# define XY_REPORT_MIN INT8_MIN
|
||||
# define XY_REPORT_MAX INT8_MAX
|
||||
typedef int16_t clamp_range_t;
|
||||
typedef int16_t xy_clamp_range_t;
|
||||
#endif
|
||||
|
||||
#ifdef WHEEL_EXTENDED_REPORT
|
||||
# define HV_REPORT_MIN INT16_MIN
|
||||
# define HV_REPORT_MAX INT16_MAX
|
||||
typedef int32_t hv_clamp_range_t;
|
||||
#else
|
||||
# define HV_REPORT_MIN INT8_MIN
|
||||
# define HV_REPORT_MAX INT8_MAX
|
||||
typedef int16_t hv_clamp_range_t;
|
||||
#endif
|
||||
|
||||
void pointing_device_init(void);
|
||||
|
|
|
@ -391,7 +391,7 @@ const pointing_device_driver_t pointing_device_driver = {
|
|||
};
|
||||
#elif defined(POINTING_DEVICE_DRIVER_pimoroni_trackball)
|
||||
|
||||
mouse_xy_report_t pimoroni_trackball_adapt_values(clamp_range_t* offset) {
|
||||
mouse_xy_report_t pimoroni_trackball_adapt_values(xy_clamp_range_t* offset) {
|
||||
if (*offset > XY_REPORT_MAX) {
|
||||
*offset -= XY_REPORT_MAX;
|
||||
return (mouse_xy_report_t)XY_REPORT_MAX;
|
||||
|
@ -406,10 +406,10 @@ mouse_xy_report_t pimoroni_trackball_adapt_values(clamp_range_t* offset) {
|
|||
}
|
||||
|
||||
report_mouse_t pimoroni_trackball_get_report(report_mouse_t mouse_report) {
|
||||
static uint16_t debounce = 0;
|
||||
static uint8_t error_count = 0;
|
||||
pimoroni_data_t pimoroni_data = {0};
|
||||
static clamp_range_t x_offset = 0, y_offset = 0;
|
||||
static uint16_t debounce = 0;
|
||||
static uint8_t error_count = 0;
|
||||
pimoroni_data_t pimoroni_data = {0};
|
||||
static xy_clamp_range_t x_offset = 0, y_offset = 0;
|
||||
|
||||
if (error_count < PIMORONI_TRACKBALL_ERROR_COUNT) {
|
||||
i2c_status_t status = read_pimoroni_trackball(&pimoroni_data);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue