diff options
Diffstat (limited to 'drivers/sensors/cirque_pinnacle.c')
| -rw-r--r-- | drivers/sensors/cirque_pinnacle.c | 27 | 
1 files changed, 27 insertions, 0 deletions
| diff --git a/drivers/sensors/cirque_pinnacle.c b/drivers/sensors/cirque_pinnacle.c index 3131805c20..9afc9df804 100644 --- a/drivers/sensors/cirque_pinnacle.c +++ b/drivers/sensors/cirque_pinnacle.c @@ -216,6 +216,20 @@ void cirque_pinnacle_cursor_smoothing(bool enable) {      RAP_Write(HOSTREG__FEEDCONFIG3, feedconfig3);  } +// Check sensor is connected +bool cirque_pinnacle_connected(void) { +    uint8_t current_zidle = 0; +    uint8_t temp_zidle    = 0; +    RAP_ReadBytes(HOSTREG__ZIDLE, ¤t_zidle, 1); +    RAP_Write(HOSTREG__ZIDLE, HOSTREG__ZIDLE_DEFVAL); +    RAP_ReadBytes(HOSTREG__ZIDLE, &temp_zidle, 1); +    if (temp_zidle == HOSTREG__ZIDLE_DEFVAL) { +        RAP_Write(HOSTREG__ZIDLE, current_zidle); +        return true; +    } +    return false; +} +  /*  Pinnacle-based TM040040/TM035035/TM023023 Functions  */  void cirque_pinnacle_init(void) {  #if defined(POINTING_DEVICE_DRIVER_cirque_pinnacle_spi) @@ -274,6 +288,10 @@ void cirque_pinnacle_init(void) {      }      cirque_pinnacle_enable_feed(true); + +#ifndef CIRQUE_PINNACLE_SKIP_SENSOR_CHECK +    touchpad_init = cirque_pinnacle_connected(); +#endif  }  pinnacle_data_t cirque_pinnacle_read_data(void) { @@ -320,6 +338,15 @@ pinnacle_data_t cirque_pinnacle_read_data(void) {      result.wheelCount = ((int8_t*)data)[3];  #endif +#ifdef CIRQUE_PINNACLE_REACHABLE_CALIBRATION +    static uint16_t xMin = UINT16_MAX, yMin = UINT16_MAX, yMax = 0, xMax = 0; +    if (result.xValue < xMin) xMin = result.xValue; +    if (result.xValue > xMax) xMax = result.xValue; +    if (result.yValue < yMin) yMin = result.yValue; +    if (result.yValue > yMax) yMax = result.yValue; +    pd_dprintf("%s: xLo=%3d xHi=%3d yLo=%3d yHi=%3d\n", __FUNCTION__, xMin, xMax, yMin, yMax); +#endif +      result.valid = true;      return result;  } | 
