PixArt Optical Finger Navigation, OFN, library for A350 sensor. Initial release v1.0.

Fork of Pixart_OFN_A by Hill Chen

Pixart_OFN.h

Committer:
PixArtHC
Date:
2019-02-27
Revision:
0:4237dc1f43b4

File content as of revision 0:4237dc1f43b4:

/* PixArt Optical Finger Navigation, OFN, sensor driver.
 * By PixArt Imaging Inc.
 * Primary Engineer: Hill Chen (PixArt USA)
 *
 * License: Apache-2.0; http://www.apache.org/licenses/LICENSE-2.0
 */

#include "Build_info.h"

#ifdef DEBUG
    #define DEBUG_PRINT(...)    m_pc->printf(__VA_ARGS__)
#else
    #define DEBUG_PRINT(...)    {}
#endif

#define P_ADDR  (0x57 << 1) //A350 I2C address, A1/A0 = high
#define I2C_ADDR P_ADDR
#define PXI_WMI 0x88

class Pixart_OFN
{
    private:        
        Serial  *m_pc;
        I2C     *m_i2c;
        Ticker  m_ticker;
        float   m_Period;
        
        int8_t  deltaX, deltaY;
        int     totalX, totalY;
        
        bool    Sensor_Init();
        //void    periodicCallback();
       
        void    writeRegister(uint8_t addr, uint8_t data);
        uint8_t readRegister(uint8_t addr);
        
        void    load(const uint8_t array[][2], uint8_t arraySize);
        void    grabData(void);
        void    printData(void);
       
    public:
       Pixart_OFN(I2C *i2c, float Period, bool &Result);
       Pixart_OFN(I2C *i2c, Serial *pc, float Period, bool &Result);
       void periodicCallback();
       void print_build_info();
};

const uint8_t initialize[][2] = {
    { 0xC9, 0x61 },     //OFN Engine settings.
    //{ 0x6C, 0xA0 },     //Set GPIO pin as button input.
};
#define initialize_size (sizeof(initialize)/sizeof(initialize[0]))