Use correct angle tune range of +/-30 on PMW33XX (#17693)
Co-authored-by: Daniel Kao <daniel.m.kao@gmail.com> Co-authored-by: Daniel Kao <daniel.m.kao@gmail.com>
This commit is contained in:
		| @@ -22,11 +22,11 @@ POINTING_DEVICE_DRIVER = adns5050 | ||||
|  | ||||
| The ADNS 5050 sensor uses a serial type protocol for communication, and requires an additional light source.  | ||||
|  | ||||
| | Setting            | Description                                                         | | ||||
| |--------------------|---------------------------------------------------------------------| | ||||
| |`ADNS5050_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor.        | | ||||
| |`ADNS5050_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor.         | | ||||
| |`ADNS5050_CS_PIN`   | (Required) The pin connected to the cable select pin of the sensor. | | ||||
| | Setting             | Description                                                         | | ||||
| | ------------------- | ------------------------------------------------------------------- | | ||||
| | `ADNS5050_SCLK_PIN` | (Required) The pin connected to the clock pin of the sensor.        | | ||||
| | `ADNS5050_SDIO_PIN` | (Required) The pin connected to the data pin of the sensor.         | | ||||
| | `ADNS5050_CS_PIN`   | (Required) The pin connected to the cable select pin of the sensor. | | ||||
|  | ||||
| The CPI range is 125-1375, in increments of 125. Defaults to 500 CPI. | ||||
|  | ||||
| @@ -40,13 +40,13 @@ POINTING_DEVICE_DRIVER = adns9800 | ||||
|  | ||||
| The ADNS 9800 is an SPI driven optical sensor, that uses laser output for surface tracking.  | ||||
|  | ||||
| | Setting                        | Description                                                            | Default       | | ||||
| |--------------------------------|------------------------------------------------------------------------|---------------| | ||||
| |`ADNS9800_CLOCK_SPEED`          | (Optional) Sets the clock speed that the sensor runs at.               | `2000000`     | | ||||
| |`ADNS9800_SPI_LSBFIRST`         | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false`       | | ||||
| |`ADNS9800_SPI_MODE`             | (Optional) Sets the SPI Mode for the sensor.                           | `3`           | | ||||
| |`ADNS9800_SPI_DIVISOR`          | (Optional) Sets the SPI Divisor used for SPI communication.            | _varies_      | | ||||
| |`ADNS9800_CS_PIN`               | (Required) Sets the Cable Select pin connected to the sensor.          | _not defined_ | | ||||
| | Setting                 | Description                                                            | Default       | | ||||
| | ----------------------- | ---------------------------------------------------------------------- | ------------- | | ||||
| | `ADNS9800_CLOCK_SPEED`  | (Optional) Sets the clock speed that the sensor runs at.               | `2000000`     | | ||||
| | `ADNS9800_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false`       | | ||||
| | `ADNS9800_SPI_MODE`     | (Optional) Sets the SPI Mode for the sensor.                           | `3`           | | ||||
| | `ADNS9800_SPI_DIVISOR`  | (Optional) Sets the SPI Divisor used for SPI communication.            | _varies_      | | ||||
| | `ADNS9800_CS_PIN`       | (Required) Sets the Cable Select pin connected to the sensor.          | _not defined_ | | ||||
|  | ||||
|  | ||||
| The CPI range is 800-8200, in increments of 200. Defaults to 1800 CPI.  | ||||
| @@ -61,16 +61,16 @@ POINTING_DEVICE_DRIVER = analog_joystick | ||||
|  | ||||
| The Analog Joystick is an analog (ADC) driven sensor.  There are a variety of joysticks that you can use for this. | ||||
|  | ||||
| | Setting                          | Description                                                                | Default       | | ||||
| |----------------------------------|----------------------------------------------------------------------------|---------------| | ||||
| |`ANALOG_JOYSTICK_X_AXIS_PIN`      | (Required) The pin used for the vertical/X axis.                           | _not defined_ | | ||||
| |`ANALOG_JOYSTICK_Y_AXIS_PIN`      | (Required) The pin used for the horizontal/Y axis.                         | _not defined_ | | ||||
| |`ANALOG_JOYSTICK_AXIS_MIN`        | (Optional) Sets the lower range to be considered movement.                 | `0`           | | ||||
| |`ANALOG_JOYSTICK_AXIS_MAX`        | (Optional) Sets the upper range to be considered movement.                 | `1023`        | | ||||
| |`ANALOG_JOYSTICK_SPEED_REGULATOR` | (Optional) The divisor used to slow down movement. (lower makes it faster) | `20`          | | ||||
| |`ANALOG_JOYSTICK_READ_INTERVAL`   | (Optional) The interval in milliseconds between reads.                     | `10`          | | ||||
| |`ANALOG_JOYSTICK_SPEED_MAX`       | (Optional) The maximum value used for motion.                              | `2`           | | ||||
| |`ANALOG_JOYSTICK_CLICK_PIN`       | (Optional) The pin wired up to the press switch of the analog stick.       | _not defined_ | | ||||
| | Setting                           | Description                                                                | Default       | | ||||
| | --------------------------------- | -------------------------------------------------------------------------- | ------------- | | ||||
| | `ANALOG_JOYSTICK_X_AXIS_PIN`      | (Required) The pin used for the vertical/X axis.                           | _not defined_ | | ||||
| | `ANALOG_JOYSTICK_Y_AXIS_PIN`      | (Required) The pin used for the horizontal/Y axis.                         | _not defined_ | | ||||
| | `ANALOG_JOYSTICK_AXIS_MIN`        | (Optional) Sets the lower range to be considered movement.                 | `0`           | | ||||
| | `ANALOG_JOYSTICK_AXIS_MAX`        | (Optional) Sets the upper range to be considered movement.                 | `1023`        | | ||||
| | `ANALOG_JOYSTICK_SPEED_REGULATOR` | (Optional) The divisor used to slow down movement. (lower makes it faster) | `20`          | | ||||
| | `ANALOG_JOYSTICK_READ_INTERVAL`   | (Optional) The interval in milliseconds between reads.                     | `10`          | | ||||
| | `ANALOG_JOYSTICK_SPEED_MAX`       | (Optional) The maximum value used for motion.                              | `2`           | | ||||
| | `ANALOG_JOYSTICK_CLICK_PIN`       | (Optional) The pin wired up to the press switch of the analog stick.       | _not defined_ | | ||||
|  | ||||
| ### Cirque Trackpad | ||||
|  | ||||
| @@ -89,15 +89,15 @@ POINTING_DEVICE_DRIVER = cirque_pinnacle_spi | ||||
|  | ||||
| This supports the Cirque Pinnacle 1CA027 Touch Controller, which is used in the TM040040, TM035035 and the TM023023 trackpads. These are I2C or SPI compatible, and both configurations are supported. | ||||
|  | ||||
| | Setting                         | Description                                                | Default            | | ||||
| |-------------------------------- |------------------------------------------------------------|--------------------| | ||||
| |`CIRQUE_PINNACLE_X_LOWER`        | (Optional) The minimum reachable X value on the sensor.    | `127`              | | ||||
| |`CIRQUE_PINNACLE_X_UPPER`        | (Optional) The maximum reachable X value on the sensor.    | `1919`             | | ||||
| |`CIRQUE_PINNACLE_Y_LOWER`        | (Optional) The minimum reachable Y value on the sensor.    | `63`               | | ||||
| |`CIRQUE_PINNACLE_Y_UPPER`        | (Optional) The maximum reachable Y value on the sensor.    | `1471`             | | ||||
| |`CIRQUE_PINNACLE_DIAMETER_MM`    | (Optional) Diameter of the trackpad sensor in millimeters. | `40`               | | ||||
| |`CIRQUE_PINNACLE_ATTENUATION`    | (Optional) Sets the attenuation of the sensor data.        | `ADC_ATTENUATE_4X` | | ||||
| |`CIRQUE_PINNACLE_CURVED_OVERLAY` | (Optional) Applies settings tuned for curved overlay.      | _not defined_      | | ||||
| | Setting                          | Description                                                | Default            | | ||||
| | -------------------------------- | ---------------------------------------------------------- | ------------------ | | ||||
| | `CIRQUE_PINNACLE_X_LOWER`        | (Optional) The minimum reachable X value on the sensor.    | `127`              | | ||||
| | `CIRQUE_PINNACLE_X_UPPER`        | (Optional) The maximum reachable X value on the sensor.    | `1919`             | | ||||
| | `CIRQUE_PINNACLE_Y_LOWER`        | (Optional) The minimum reachable Y value on the sensor.    | `63`               | | ||||
| | `CIRQUE_PINNACLE_Y_UPPER`        | (Optional) The maximum reachable Y value on the sensor.    | `1471`             | | ||||
| | `CIRQUE_PINNACLE_DIAMETER_MM`    | (Optional) Diameter of the trackpad sensor in millimeters. | `40`               | | ||||
| | `CIRQUE_PINNACLE_ATTENUATION`    | (Optional) Sets the attenuation of the sensor data.        | `ADC_ATTENUATE_4X` | | ||||
| | `CIRQUE_PINNACLE_CURVED_OVERLAY` | (Optional) Applies settings tuned for curved overlay.      | _not defined_      | | ||||
|  | ||||
| **`CIRQUE_PINNACLE_ATTENUATION`** is a measure of how much data is suppressed in regards to sensitivity. The higher the attenuation, the less sensitive the touchpad will be.  | ||||
|  | ||||
| @@ -107,18 +107,18 @@ Default attenuation is set to 4X, although if you are using a thicker overlay (s | ||||
| * `ADC_ATTENUATE_2X` | ||||
| * `ADC_ATTENUATE_1X`: Most sensitive | ||||
|  | ||||
| | I2C Setting              | Description                                                                     | Default | | ||||
| |--------------------------|---------------------------------------------------------------------------------|---------| | ||||
| |`CIRQUE_PINNACLE_ADDR`    | (Required) Sets the I2C Address for the Cirque Trackpad                         | `0x2A`  | | ||||
| |`CIRQUE_PINNACLE_TIMEOUT` | (Optional) The timeout for i2c communication with the trackpad in milliseconds. | `20`    | | ||||
| | I2C Setting               | Description                                                                     | Default | | ||||
| | ------------------------- | ------------------------------------------------------------------------------- | ------- | | ||||
| | `CIRQUE_PINNACLE_ADDR`    | (Required) Sets the I2C Address for the Cirque Trackpad                         | `0x2A`  | | ||||
| | `CIRQUE_PINNACLE_TIMEOUT` | (Optional) The timeout for i2c communication with the trackpad in milliseconds. | `20`    | | ||||
|  | ||||
| | SPI Setting                   | Description                                                            | Default        | | ||||
| |-------------------------------|------------------------------------------------------------------------|----------------| | ||||
| |`CIRQUE_PINNACLE_CLOCK_SPEED`  | (Optional) Sets the clock speed that the sensor runs at.               | `1000000`      | | ||||
| |`CIRQUE_PINNACLE_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false`        | | ||||
| |`CIRQUE_PINNACLE_SPI_MODE`     | (Optional) Sets the SPI Mode for the sensor.                           | `1`            | | ||||
| |`CIRQUE_PINNACLE_SPI_DIVISOR`  | (Optional) Sets the SPI Divisor used for SPI communication.            | _varies_       | | ||||
| |`CIRQUE_PINNACLE_SPI_CS_PIN`   | (Required) Sets the Cable Select pin connected to the sensor.          | _not defined_  | | ||||
| | SPI Setting                    | Description                                                            | Default       | | ||||
| | ------------------------------ | ---------------------------------------------------------------------- | ------------- | | ||||
| | `CIRQUE_PINNACLE_CLOCK_SPEED`  | (Optional) Sets the clock speed that the sensor runs at.               | `1000000`     | | ||||
| | `CIRQUE_PINNACLE_SPI_LSBFIRST` | (Optional) Sets the Least/Most Significant Byte First setting for SPI. | `false`       | | ||||
| | `CIRQUE_PINNACLE_SPI_MODE`     | (Optional) Sets the SPI Mode for the sensor.                           | `1`           | | ||||
| | `CIRQUE_PINNACLE_SPI_DIVISOR`  | (Optional) Sets the SPI Divisor used for SPI communication.            | _varies_      | | ||||
| | `CIRQUE_PINNACLE_SPI_CS_PIN`   | (Required) Sets the Cable Select pin connected to the sensor.          | _not defined_ | | ||||
|  | ||||
| Default Scaling is 1024. Actual CPI depends on trackpad diameter. | ||||
|  | ||||
| @@ -126,13 +126,13 @@ Also see the `POINTING_DEVICE_TASK_THROTTLE_MS`, which defaults to 10ms when usi | ||||
|  | ||||
| #### Cirque Trackpad gestures | ||||
|  | ||||
| | Gesture Setting                               | Description                                                                                                                                                                                      | Default              | | ||||
| |-----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------| | ||||
| |`POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE` | (Optional) Enable inertial cursor. Cursor continues moving after a flick gesture and slows down by kinetic friction                                                                              | _not defined_        | | ||||
| |`CIRQUE_PINNACLE_CIRCULAR_SCROLL_ENABLE`       | (Optional) Enable circular scroll. Touch originating in outer ring can trigger scroll by moving along the perimeter. Near side triggers vertical scroll and far side triggers horizontal scroll. | _not defined_        | | ||||
| |`CIRQUE_PINNACLE_TAP_ENABLE`                   | (Optional) Enable tap to click. This currently only works on the master side.                                                                                                                    | _not defined_        | | ||||
| |`CIRQUE_PINNACLE_TAPPING_TERM`                 | (Optional) Length of time that a touch can be to be considered a tap.                                                                                                                            | `TAPPING_TERM`/`200` | | ||||
| |`CIRQUE_PINNACLE_TOUCH_DEBOUNCE`               | (Optional) Length of time that a touch can be to be considered a tap.                                                                                                                            | `TAPPING_TERM`/`200` | | ||||
| | Gesture Setting                                | Description                                                                                                                                                                                      | Default              | | ||||
| | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------- | | ||||
| | `POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE` | (Optional) Enable inertial cursor. Cursor continues moving after a flick gesture and slows down by kinetic friction                                                                              | _not defined_        | | ||||
| | `CIRQUE_PINNACLE_CIRCULAR_SCROLL_ENABLE`       | (Optional) Enable circular scroll. Touch originating in outer ring can trigger scroll by moving along the perimeter. Near side triggers vertical scroll and far side triggers horizontal scroll. | _not defined_        | | ||||
| | `CIRQUE_PINNACLE_TAP_ENABLE`                   | (Optional) Enable tap to click. This currently only works on the master side.                                                                                                                    | _not defined_        | | ||||
| | `CIRQUE_PINNACLE_TAPPING_TERM`                 | (Optional) Length of time that a touch can be to be considered a tap.                                                                                                                            | `TAPPING_TERM`/`200` | | ||||
| | `CIRQUE_PINNACLE_TOUCH_DEBOUNCE`               | (Optional) Length of time that a touch can be to be considered a tap.                                                                                                                            | `TAPPING_TERM`/`200` | | ||||
|  | ||||
| **`POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE`** is not specific to Cirque trackpad; any pointing device with a lift/contact status can integrate this gesture into its driver. e.g. PMW3360 can use Lift_Stat from Motion register. Note that `POINTING_DEVICE_MOTION_PIN` cannot be used with this feature; continuous polling of `pointing_device_get_report()` is needed to generate glide reports. | ||||
|  | ||||
| @@ -146,13 +146,13 @@ POINTING_DEVICE_DRIVER = pimoroni_trackball | ||||
|  | ||||
| The Pimoroni Trackball module is a I2C based breakout board with an RGB enable trackball.  | ||||
|  | ||||
| | Setting                             | Description                                                                        | Default | | ||||
| |-------------------------------------|------------------------------------------------------------------------------------|---------| | ||||
| |`PIMORONI_TRACKBALL_ADDRESS`         | (Required) Sets the I2C Address for the Pimoroni Trackball.                        | `0x0A`  | | ||||
| |`PIMORONI_TRACKBALL_TIMEOUT`         | (Optional) The timeout for i2c communication with the trackball in milliseconds.   | `100`   | | ||||
| |`PIMORONI_TRACKBALL_SCALE`           | (Optional) The multiplier used to generate reports from the sensor.                | `5`     | | ||||
| |`PIMORONI_TRACKBALL_DEBOUNCE_CYCLES` | (Optional) The number of scan cycles used for debouncing on the ball press.        | `20`    | | ||||
| |`PIMORONI_TRACKBALL_ERROR_COUNT`     | (Optional) Specifies the number of read/write errors until the sensor is disabled. | `10`    | | ||||
| | Setting                              | Description                                                                        | Default | | ||||
| | ------------------------------------ | ---------------------------------------------------------------------------------- | ------- | | ||||
| | `PIMORONI_TRACKBALL_ADDRESS`         | (Required) Sets the I2C Address for the Pimoroni Trackball.                        | `0x0A`  | | ||||
| | `PIMORONI_TRACKBALL_TIMEOUT`         | (Optional) The timeout for i2c communication with the trackball in milliseconds.   | `100`   | | ||||
| | `PIMORONI_TRACKBALL_SCALE`           | (Optional) The multiplier used to generate reports from the sensor.                | `5`     | | ||||
| | `PIMORONI_TRACKBALL_DEBOUNCE_CYCLES` | (Optional) The number of scan cycles used for debouncing on the ball press.        | `20`    | | ||||
| | `PIMORONI_TRACKBALL_ERROR_COUNT`     | (Optional) Specifies the number of read/write errors until the sensor is disabled. | `10`    | | ||||
|  | ||||
| ### PMW 3360 and PMW 3389 Sensor | ||||
|  | ||||
| @@ -176,15 +176,15 @@ The CPI range is 50-16000, in increments of 50. Defaults to 2000 CPI. | ||||
|  | ||||
| Both PMW 3360 and PMW 3389 are SPI driven optical sensors, that use a built in IR LED for surface tracking. | ||||
|  | ||||
| | Setting                      | Description                                                                                 | Default       | | ||||
| | ---------------------------- | ------------------------------------------------------------------------------------------- | ------------- | | ||||
| | `PMW33XX_CS_PIN`             | (Required) Sets the Cable Select pin connected to the sensor.                               | _not defined_ | | ||||
| | `PMW33XX_CS_PINS`            | (Alternative) Sets the Cable Select pins connected to multiple sensors.                     | _not defined_ | | ||||
| | `PMW33XX_CPI`                | (Optional) Sets counts per inch sensitivity of the sensor.                                  | _varies_      | | ||||
| | `PMW33XX_CLOCK_SPEED`        | (Optional) Sets the clock speed that the sensor runs at.                                    | `2000000`     | | ||||
| | `PMW33XX_SPI_DIVISOR`        | (Optional) Sets the SPI Divisor used for SPI communication.                                 | _varies_      | | ||||
| | `PMW33XX_LIFTOFF_DISTANCE`   | (Optional) Sets the lift off distance at run time                                           | `0x02`        | | ||||
| | `ROTATIONAL_TRANSFORM_ANGLE` | (Optional) Allows for the sensor data to be rotated +/- 127 degrees directly in the sensor. | `0`           | | ||||
| | Setting                      | Description                                                                                | Default       | | ||||
| | ---------------------------- | ------------------------------------------------------------------------------------------ | ------------- | | ||||
| | `PMW33XX_CS_PIN`             | (Required) Sets the Cable Select pin connected to the sensor.                              | _not defined_ | | ||||
| | `PMW33XX_CS_PINS`            | (Alternative) Sets the Cable Select pins connected to multiple sensors.                    | _not defined_ | | ||||
| | `PMW33XX_CPI`                | (Optional) Sets counts per inch sensitivity of the sensor.                                 | _varies_      | | ||||
| | `PMW33XX_CLOCK_SPEED`        | (Optional) Sets the clock speed that the sensor runs at.                                   | `2000000`     | | ||||
| | `PMW33XX_SPI_DIVISOR`        | (Optional) Sets the SPI Divisor used for SPI communication.                                | _varies_      | | ||||
| | `PMW33XX_LIFTOFF_DISTANCE`   | (Optional) Sets the lift off distance at run time                                          | `0x02`        | | ||||
| | `ROTATIONAL_TRANSFORM_ANGLE` | (Optional) Allows for the sensor data to be rotated +/- 30 degrees directly in the sensor. | `0`           | | ||||
|  | ||||
| To use multiple sensors, instead of setting `PMW33XX_CS_PIN` you need to set `PMW33XX_CS_PINS` and also handle and merge the read from this sensor in user code. | ||||
| Note that different (per sensor) values of CPI, speed liftoff, rotational angle or flipping of X/Y is not currently supported. | ||||
| @@ -237,15 +237,15 @@ void           pointing_device_driver_set_cpi(uint16_t cpi) {} | ||||
|  | ||||
| ## Common Configuration | ||||
|  | ||||
| | Setting                          | Description                                                           | Default           | | ||||
| |----------------------------------|-----------------------------------------------------------------------|-------------------| | ||||
| |`POINTING_DEVICE_ROTATION_90`     | (Optional) Rotates the X and Y data by  90 degrees.                   | _not defined_     | | ||||
| |`POINTING_DEVICE_ROTATION_180`    | (Optional) Rotates the X and Y data by 180 degrees.                   | _not defined_     | | ||||
| |`POINTING_DEVICE_ROTATION_270`    | (Optional) Rotates the X and Y data by 270 degrees.                   | _not defined_     | | ||||
| |`POINTING_DEVICE_INVERT_X`        | (Optional) Inverts the X axis report.                                 | _not defined_     | | ||||
| |`POINTING_DEVICE_INVERT_Y`        | (Optional) Inverts the Y axis report.                                 | _not defined_     | | ||||
| |`POINTING_DEVICE_MOTION_PIN`      | (Optional) If supported, will only read from sensor if pin is active. | _not defined_     | | ||||
| |`POINTING_DEVICE_TASK_THROTTLE_MS`      | (Optional) Limits the frequency that the sensor is polled for motion. | _not defined_     | | ||||
| | Setting                            | Description                                                           | Default       | | ||||
| | ---------------------------------- | --------------------------------------------------------------------- | ------------- | | ||||
| | `POINTING_DEVICE_ROTATION_90`      | (Optional) Rotates the X and Y data by  90 degrees.                   | _not defined_ | | ||||
| | `POINTING_DEVICE_ROTATION_180`     | (Optional) Rotates the X and Y data by 180 degrees.                   | _not defined_ | | ||||
| | `POINTING_DEVICE_ROTATION_270`     | (Optional) Rotates the X and Y data by 270 degrees.                   | _not defined_ | | ||||
| | `POINTING_DEVICE_INVERT_X`         | (Optional) Inverts the X axis report.                                 | _not defined_ | | ||||
| | `POINTING_DEVICE_INVERT_Y`         | (Optional) Inverts the Y axis report.                                 | _not defined_ | | ||||
| | `POINTING_DEVICE_MOTION_PIN`       | (Optional) If supported, will only read from sensor if pin is active. | _not defined_ | | ||||
| | `POINTING_DEVICE_TASK_THROTTLE_MS` | (Optional) Limits the frequency that the sensor is polled for motion. | _not defined_ | | ||||
|  | ||||
| !> When using `SPLIT_POINTING_ENABLE` the `POINTING_DEVICE_MOTION_PIN` functionality is not supported and `POINTING_DEVICE_TASK_THROTTLE_MS` will default to `1`. Increasing this value will increase transport performance at the cost of possible mouse responsiveness. | ||||
|  | ||||
| @@ -254,25 +254,25 @@ void           pointing_device_driver_set_cpi(uint16_t cpi) {} | ||||
|  | ||||
| The following configuration options are only available when using `SPLIT_POINTING_ENABLE` see [data sync options](feature_split_keyboard.md?id=data-sync-options). The rotation and invert `*_RIGHT` options are only used with `POINTING_DEVICE_COMBINED`. If using `POINTING_DEVICE_LEFT` or `POINTING_DEVICE_RIGHT` use the common configuration above to configure your pointing device. | ||||
|  | ||||
| | Setting                                | Description                                                           | Default       | | ||||
| |----------------------------------------|-----------------------------------------------------------------------|---------------| | ||||
| |`POINTING_DEVICE_LEFT`                  | Pointing device on the left side (Required - pick one only)           | _not defined_ | | ||||
| |`POINTING_DEVICE_RIGHT`                 | Pointing device on the right side (Required - pick one only)          | _not defined_ | | ||||
| |`POINTING_DEVICE_COMBINED`              | Pointing device on both sides (Required - pick one only)              | _not defined_ | | ||||
| |`POINTING_DEVICE_ROTATION_90_RIGHT`     | (Optional) Rotates the X and Y data by  90 degrees.                   | _not defined_ | | ||||
| |`POINTING_DEVICE_ROTATION_180_RIGHT`    | (Optional) Rotates the X and Y data by 180 degrees.                   | _not defined_ | | ||||
| |`POINTING_DEVICE_ROTATION_270_RIGHT`    | (Optional) Rotates the X and Y data by 270 degrees.                   | _not defined_ | | ||||
| |`POINTING_DEVICE_INVERT_X_RIGHT`        | (Optional) Inverts the X axis report.                                 | _not defined_ | | ||||
| |`POINTING_DEVICE_INVERT_Y_RIGHT`        | (Optional) Inverts the Y axis report.                                 | _not defined_ | | ||||
| |`MOUSE_EXTENDED_REPORT`                 | (Optional) Enables support for extended mouse reports. (-32767 to 32767, instead of just -127 to 127) | | ||||
| | Setting                              | Description                                                                                           | Default       | | ||||
| | ------------------------------------ | ----------------------------------------------------------------------------------------------------- | ------------- | | ||||
| | `POINTING_DEVICE_LEFT`               | Pointing device on the left side (Required - pick one only)                                           | _not defined_ | | ||||
| | `POINTING_DEVICE_RIGHT`              | Pointing device on the right side (Required - pick one only)                                          | _not defined_ | | ||||
| | `POINTING_DEVICE_COMBINED`           | Pointing device on both sides (Required - pick one only)                                              | _not defined_ | | ||||
| | `POINTING_DEVICE_ROTATION_90_RIGHT`  | (Optional) Rotates the X and Y data by  90 degrees.                                                   | _not defined_ | | ||||
| | `POINTING_DEVICE_ROTATION_180_RIGHT` | (Optional) Rotates the X and Y data by 180 degrees.                                                   | _not defined_ | | ||||
| | `POINTING_DEVICE_ROTATION_270_RIGHT` | (Optional) Rotates the X and Y data by 270 degrees.                                                   | _not defined_ | | ||||
| | `POINTING_DEVICE_INVERT_X_RIGHT`     | (Optional) Inverts the X axis report.                                                                 | _not defined_ | | ||||
| | `POINTING_DEVICE_INVERT_Y_RIGHT`     | (Optional) Inverts the Y axis report.                                                                 | _not defined_ | | ||||
| | `MOUSE_EXTENDED_REPORT`              | (Optional) Enables support for extended mouse reports. (-32767 to 32767, instead of just -127 to 127) | | ||||
|  | ||||
| !> If there is a `_RIGHT` configuration option or callback, the [common configuration](feature_pointing_device.md?id=common-configuration) option will work for the left. For correct left/right detection you should setup a [handedness option](feature_split_keyboard?id=setting-handedness), `EE_HANDS` is usually a good option for an existing board that doesn't do handedness by hardware. | ||||
|  | ||||
|  | ||||
| ## Callbacks and Functions  | ||||
|  | ||||
| | Function                          | Description                                                                                                                            | | ||||
| |-----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------| | ||||
| | Function                                                   | Description                                                                                                   | | ||||
| | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | | ||||
| | `pointing_device_init_kb(void)`                            | Callback to allow for keyboard level initialization. Useful for additional hardware sensors.                  | | ||||
| | `pointing_device_init_user(void)`                          | Callback to allow for user level initialization. Useful for additional hardware sensors.                      | | ||||
| | `pointing_device_task_kb(mouse_report)`                    | Callback that sends sensor data, so keyboard code can intercept and modify the data.  Returns a mouse report. | | ||||
| @@ -280,11 +280,11 @@ The following configuration options are only available when using `SPLIT_POINTIN | ||||
| | `pointing_device_handle_buttons(buttons, pressed, button)` | Callback to handle hardware button presses. Returns a `uint8_t`.                                              | | ||||
| | `pointing_device_get_cpi(void)`                            | Gets the current CPI/DPI setting from the sensor, if supported.                                               | | ||||
| | `pointing_device_set_cpi(uint16_t)`                        | Sets the CPI/DPI, if supported.                                                                               | | ||||
| | `pointing_device_get_report(void)`                         | Returns the current mouse report (as a `mouse_report_t` data structure).                                      |  | ||||
| | `pointing_device_set_report(mouse_report)`                 | Sets the mouse report to the assigned `mouse_report_t` data structured passed to the function.                |  | ||||
| | `pointing_device_send(void)`                               | Sends the current mouse report to the host system.  Function can be replaced.                                 |  | ||||
| | `pointing_device_get_report(void)`                         | Returns the current mouse report (as a `mouse_report_t` data structure).                                      | | ||||
| | `pointing_device_set_report(mouse_report)`                 | Sets the mouse report to the assigned `mouse_report_t` data structured passed to the function.                | | ||||
| | `pointing_device_send(void)`                               | Sends the current mouse report to the host system.  Function can be replaced.                                 | | ||||
| | `has_mouse_report_changed(new_report, old_report)`         | Compares the old and new `mouse_report_t` data and returns true only if it has changed.                       | | ||||
| | `pointing_device_adjust_by_defines(mouse_report)`          | Applies rotations and invert configurations to a raw mouse report.                                             | | ||||
| | `pointing_device_adjust_by_defines(mouse_report)`          | Applies rotations and invert configurations to a raw mouse report.                                            | | ||||
|  | ||||
|  | ||||
| ## Split Keyboard Callbacks and Functions | ||||
| @@ -292,7 +292,7 @@ The following configuration options are only available when using `SPLIT_POINTIN | ||||
| The combined functions below are only available when using `SPLIT_POINTING_ENABLE` and `POINTING_DEVICE_COMBINED`. The 2 callbacks `pointing_device_task_combined_*` replace the single sided equivalents above. See the [combined pointing devices example](feature_pointing_device.md?id=combined-pointing-devices) | ||||
|  | ||||
| | Function                                                        | Description                                                                                                              | | ||||
| |-----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------| | ||||
| | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | ||||
| | `pointing_device_set_shared_report(mouse_report)`               | Sets the shared mouse report to the assigned `mouse_report_t` data structured passed to the function.                    | | ||||
| | `pointing_device_set_cpi_on_side(bool, uint16_t)`               | Sets the CPI/DPI of one side, if supported. Passing `true` will set the left and `false` the right`                      | | ||||
| | `pointing_device_combine_reports(left_report, right_report)`    | Returns a combined mouse_report of left_report and right_report (as a `mouse_report_t` data structure)                   | | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| // Copyright 2022 Daniel Kao (dkao) | ||||
| // Copyright 2022 Stefan Kerkmann (KarlK90) | ||||
| // Copyright 2022 Ulrich Spörlein (@uqs) | ||||
| // Copyright 2021 Alabastard (@Alabastard-64) | ||||
| @@ -165,7 +166,7 @@ bool pmw33xx_init(uint8_t sensor) { | ||||
|     wait_ms(1); | ||||
|  | ||||
|     pmw33xx_write(sensor, REG_Config2, 0x00); | ||||
|     pmw33xx_write(sensor, REG_Angle_Tune, CONSTRAIN(ROTATIONAL_TRANSFORM_ANGLE, -127, 127)); | ||||
|     pmw33xx_write(sensor, REG_Angle_Tune, CONSTRAIN(ROTATIONAL_TRANSFORM_ANGLE, -30, 30)); | ||||
|     pmw33xx_write(sensor, REG_Lift_Config, PMW33XX_LIFTOFF_DISTANCE); | ||||
|  | ||||
|     if (!pmw33xx_check_signature(sensor)) { | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| // Copyright 2022 Daniel Kao (dkao) | ||||
| // Copyright 2022 Stefan Kerkmann (KarlK90) | ||||
| // Copyright 2022 Ulrich Spörlein (@uqs) | ||||
| // Copyright 2021 Alabastard (@Alabastard-64) | ||||
| @@ -58,6 +59,10 @@ _Static_assert(sizeof((pmw33xx_report_t){0}.motion) == 1, "pmw33xx_report_t.moti | ||||
| #    define ROTATIONAL_TRANSFORM_ANGLE 0x00 | ||||
| #endif | ||||
|  | ||||
| #if ROTATIONAL_TRANSFORM_ANGLE > 30 || ROTATIONAL_TRANSFORM_ANGLE < (-30) | ||||
| #    error ROTATIONAL_TRANSFORM_ANGLE has to be in the range of +/- 30 for all PMW33XX sensors. | ||||
| #endif | ||||
|  | ||||
| // Support single and plural spellings | ||||
| #ifndef PMW33XX_CS_PINS | ||||
| #    ifndef PMW33XX_CS_PIN | ||||
|   | ||||
		Reference in New Issue
	
	Block a user