class pah8011 for mbed

pixart_pah8011.h

Committer:
bell_huang
Date:
2019-01-23
Revision:
6:d196b612b14a
Parent:
5:37451de228e4

File content as of revision 6:d196b612b14a:

#ifndef __pixart_pah8011_h__
#define __pixart_pah8011_h__


#include <mbed.h>

#include <cstdint>


namespace pixart {


    class pah8011 {
    public:
        typedef void (*DEBUG_PRINT_HANDLE)(const char *fmt, ...);
        
        struct task_result {
            // ppg
            int32_t     *data;
            uint32_t    num_per_ch;
            uint32_t    ch_num;
            
            // touch
            bool        is_touched;
        };
    
    public:
        pah8011(I2C &i2c, uint8_t slave_id = 0x15);
        pah8011(SPI &spi, DigitalOut &cs);
        ~pah8011();
        
        void    enable_debug_print(DEBUG_PRINT_HANDLE handler);
        
        bool    init();
        
        // operations
        bool    enable_ppg();
        bool    disable_ppg();
        bool    enable_touch();
        bool    disable_touch();
        
        // tasking
        bool    task();
        bool    get_result(task_result &result);
        
        // access
        I2C*        get_i2c() const;
        uint8_t     get_i2c_slave_id() const;
        SPI*        get_spi() const;
        DigitalOut* get_spi_cs() const;
    
    private:
        pah8011(const pah8011&); // = delete;
        pah8011& operator=(const pah8011&); // = delete;
    
        bool    select_mode();

    private:
        // i2c
        I2C         *m_i2c;
        uint8_t     m_i2c_slave_id;
        
        // spi
        SPI         *m_spi;
        DigitalOut  *m_spi_cs;
        
        // state
        bool        m_is_ppg_enabled;
        bool        m_is_touch_enabled;

    };
    
    
}


#endif // header guard