PixArt Optical Track Sensor, OTS, library initial release v1.0. Supports PAT9125, PAT9126, PAT9130, PAA5101. Future to support PAT9150.

Fork of Pixart_OTS by Hill Chen

Committer:
PixArtHC
Date:
Tue Mar 26 22:32:06 2019 +0000
Revision:
1:95917b856631
Parent:
0:2a85075b8467
* V1.1 library changes:;  * Add support to 5101 LD/LED switching.;  * Add support to PAT9150.;  * Fixed bug on loading initialization setting.;  * Optimized register read timing.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
PixArtHC 0:2a85075b8467 1 /* PixArt Optical Finger Navigation, OFN, sensor driver.
PixArtHC 0:2a85075b8467 2 * By PixArt Imaging Inc.
PixArtHC 0:2a85075b8467 3 * Primary Engineer: Hill Chen (PixArt USA)
PixArtHC 0:2a85075b8467 4 *
PixArtHC 0:2a85075b8467 5 * License: Apache-2.0; http://www.apache.org/licenses/LICENSE-2.0
PixArtHC 0:2a85075b8467 6 */
PixArtHC 0:2a85075b8467 7
PixArtHC 0:2a85075b8467 8 #include "Pixart_OTS_GrabData.h"
PixArtHC 0:2a85075b8467 9
PixArtHC 0:2a85075b8467 10 Pixart_OTS_OtsData Pixart_OTS_GrabData_12bitXy::grab(Pixart_ComPort &com_port)
PixArtHC 0:2a85075b8467 11 {
PixArtHC 0:2a85075b8467 12 int16_t deltaX_low = com_port.readRegister(0x03);
PixArtHC 0:2a85075b8467 13 int16_t deltaY_low = com_port.readRegister(0x04);
PixArtHC 0:2a85075b8467 14 int16_t deltaX_high = 0, deltaY_high = 0;
PixArtHC 0:2a85075b8467 15
PixArtHC 0:2a85075b8467 16 int16_t deltaXY_h = com_port.readRegister(0x12);
PixArtHC 0:2a85075b8467 17 deltaX_high = (deltaXY_h << 4) & 0xF00;
PixArtHC 0:2a85075b8467 18 deltaY_high = (deltaXY_h << 8) & 0xF00;
PixArtHC 0:2a85075b8467 19
PixArtHC 0:2a85075b8467 20 if (deltaX_high & 0x800)
PixArtHC 0:2a85075b8467 21 deltaX_high |= 0xf000;
PixArtHC 0:2a85075b8467 22 if (deltaY_high & 0x800)
PixArtHC 0:2a85075b8467 23 deltaY_high |= 0xf000;
PixArtHC 0:2a85075b8467 24
PixArtHC 0:2a85075b8467 25 Pixart_OTS_OtsData otsData;
PixArtHC 0:2a85075b8467 26 otsData.x = deltaX_high | deltaX_low;
PixArtHC 0:2a85075b8467 27 otsData.y = deltaY_high | deltaY_low;
PixArtHC 0:2a85075b8467 28 return otsData;
PixArtHC 0:2a85075b8467 29 }
PixArtHC 0:2a85075b8467 30
PixArtHC 0:2a85075b8467 31 Pixart_OTS_OtsData Pixart_OTS_GrabData_16bitXy::grab(Pixart_ComPort &com_port)
PixArtHC 0:2a85075b8467 32 {
PixArtHC 0:2a85075b8467 33 int16_t deltaX_low = com_port.readRegister(0x03);
PixArtHC 0:2a85075b8467 34 int16_t deltaY_low = com_port.readRegister(0x04);
PixArtHC 0:2a85075b8467 35 int16_t deltaX_high = 0, deltaY_high = 0;
PixArtHC 0:2a85075b8467 36
PixArtHC 0:2a85075b8467 37 deltaX_high = com_port.readRegister(0x11) << 8;
PixArtHC 0:2a85075b8467 38 deltaY_high = com_port.readRegister(0x12) << 8;
PixArtHC 0:2a85075b8467 39
PixArtHC 0:2a85075b8467 40 Pixart_OTS_OtsData otsData;
PixArtHC 0:2a85075b8467 41 otsData.x = deltaX_high | deltaX_low;
PixArtHC 0:2a85075b8467 42 otsData.y = deltaY_high | deltaY_low;
PixArtHC 0:2a85075b8467 43 return otsData;
PixArtHC 0:2a85075b8467 44 }
PixArtHC 0:2a85075b8467 45
PixArtHC 0:2a85075b8467 46 Pixart_OTS_OtsData Pixart_OTS_GrabData_16bitXOnly::grab(Pixart_ComPort &com_port)
PixArtHC 0:2a85075b8467 47 {
PixArtHC 1:95917b856631 48 int16_t deltaX_low = com_port.readRegister(0x03);
PixArtHC 1:95917b856631 49 int16_t deltaX_high = 0;
PixArtHC 1:95917b856631 50 deltaX_high = com_port.readRegister(0x04) << 8;
PixArtHC 1:95917b856631 51
PixArtHC 0:2a85075b8467 52 Pixart_OTS_OtsData otsData;
PixArtHC 1:95917b856631 53 otsData.x = deltaX_high | deltaX_low;
PixArtHC 0:2a85075b8467 54 otsData.y = 0;
PixArtHC 0:2a85075b8467 55 return otsData;
PixArtHC 0:2a85075b8467 56 }