PixArt Optical Track Sensor, OTS, library initial release v1.0. Supports PAT9125, PAT9126, PAT9130, PAA5101. Future to support PAT9150.
Fork of Pixart_OTS by
Pixart_ComPort.cpp@1:95917b856631, 2019-03-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |