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_ComPort.h"
PixArtHC 0:2a85075b8467 9
PixArtHC 0:2a85075b8467 10 Pixart_I2cComPort::Pixart_I2cComPort(I2C &i2c, int address): m_i2c(i2c), m_address(address)
PixArtHC 0:2a85075b8467 11 {
PixArtHC 0:2a85075b8467 12 m_i2c.frequency(400000);
PixArtHC 0:2a85075b8467 13 }
PixArtHC 0:2a85075b8467 14
PixArtHC 0:2a85075b8467 15 void Pixart_I2cComPort::writeRegister(uint8_t addr, uint8_t data)
PixArtHC 0:2a85075b8467 16 {
PixArtHC 0:2a85075b8467 17 char data_write[2];
PixArtHC 0:2a85075b8467 18
PixArtHC 0:2a85075b8467 19 data_write[0] = addr;
PixArtHC 0:2a85075b8467 20 data_write[1] = data;
PixArtHC 0:2a85075b8467 21 m_i2c.write(m_address, data_write, 2, 0);
PixArtHC 0:2a85075b8467 22 }
PixArtHC 0:2a85075b8467 23
PixArtHC 0:2a85075b8467 24 uint8_t Pixart_I2cComPort::readRegister(uint8_t addr)
PixArtHC 0:2a85075b8467 25 {
PixArtHC 0:2a85075b8467 26 char data_write[2];
PixArtHC 0:2a85075b8467 27 char data_read[2];
PixArtHC 0:2a85075b8467 28
PixArtHC 0:2a85075b8467 29 data_write[0] = addr;
PixArtHC 0:2a85075b8467 30 m_i2c.write(m_address, data_write, 1, 0);
PixArtHC 0:2a85075b8467 31 m_i2c.read(m_address, data_read, 1, 0);
PixArtHC 0:2a85075b8467 32
PixArtHC 0:2a85075b8467 33 return data_read[0];
PixArtHC 0:2a85075b8467 34 }
PixArtHC 0:2a85075b8467 35
PixArtHC 0:2a85075b8467 36
PixArtHC 0:2a85075b8467 37 Pixart_SpiComPort::Pixart_SpiComPort(SPI &spi, DigitalOut &cs): m_spi(spi), m_cs(cs)
PixArtHC 0:2a85075b8467 38 {
PixArtHC 0:2a85075b8467 39 m_spi.format(8, 3);
PixArtHC 0:2a85075b8467 40 m_spi.frequency(1000000);
PixArtHC 0:2a85075b8467 41
PixArtHC 0:2a85075b8467 42 m_cs = 1;
PixArtHC 0:2a85075b8467 43 }
PixArtHC 0:2a85075b8467 44
PixArtHC 0:2a85075b8467 45 void Pixart_SpiComPort::writeRegister(uint8_t addr, uint8_t data)
PixArtHC 0:2a85075b8467 46 {
PixArtHC 0:2a85075b8467 47 m_cs = 0;
PixArtHC 0:2a85075b8467 48 addr = addr | 0x80;
PixArtHC 0:2a85075b8467 49 m_spi.write(addr);
PixArtHC 0:2a85075b8467 50 m_spi.write(data);
PixArtHC 0:2a85075b8467 51 m_cs = 1;
PixArtHC 0:2a85075b8467 52 }
PixArtHC 0:2a85075b8467 53
PixArtHC 0:2a85075b8467 54 uint8_t Pixart_SpiComPort::readRegister(uint8_t addr)
PixArtHC 0:2a85075b8467 55 {
PixArtHC 0:2a85075b8467 56 m_cs = 0;
PixArtHC 0:2a85075b8467 57 addr = addr & 0x7F;
PixArtHC 0:2a85075b8467 58 m_spi.write(addr);
PixArtHC 1:95917b856631 59 //wait_us(1);
PixArtHC 0:2a85075b8467 60 uint8_t data_read = m_spi.write(0x00);
PixArtHC 0:2a85075b8467 61 m_cs = 1;
PixArtHC 0:2a85075b8467 62
PixArtHC 0:2a85075b8467 63 return data_read;
PixArtHC 0:2a85075b8467 64 }