sx9500 driver

Dependents:   Senet NAMote scpi_sx127x NAMote72_Utility scpi_sx127x_firstTest

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers sx9500.h Source File

sx9500.h

00001 #include "mbed.h"
00002 
00003 
00004 #define SX9500_REG_IRQSRC                           0x00
00005 #define SX9500_REG_STAT                             0x01
00006 #define SX9500_REG_IRQMSK                           0x03
00007 #define SX9500_REG_PROXCTRL0                        0x06
00008 #define SX9500_REG_PROXCTRL1                        0x07
00009 #define SX9500_REG_PROXCTRL2                        0x08
00010 #define SX9500_REG_PROXCTRL3                        0x09
00011 #define SX9500_REG_PROXCTRL4                        0x0A
00012 #define SX9500_REG_PROXCTRL5                        0x0B
00013 #define SX9500_REG_PROXCTRL6                        0x0C
00014 #define SX9500_REG_PROXCTRL7                        0x0D
00015 #define SX9500_REG_PROXCTRL8                        0x0E
00016 #define SX9500_REG_SENSORSEL                        0x20
00017 #define SX9500_REG_USEMSB                           0x21
00018 #define SX9500_REG_USELSB                           0x22
00019 #define SX9500_REG_AVGMSB                           0x23
00020 #define SX9500_REG_AVGLSB                           0x24
00021 #define SX9500_REG_DIFFMSB                          0x25
00022 #define SX9500_REG_DIFFLSB                          0x26
00023 #define SX9500_REG_OFFSETMSB                        0x27
00024 #define SX9500_REG_OFFSETLSB                        0x28
00025 #define SX9500_REG_RESET                            0x7F
00026 
00027 #define SX9500_RESET_CMD                            0xDE
00028 
00029 typedef union {
00030     struct {    // sx9500 register 0x09
00031         uint8_t txen_stat   : 1;    // 0
00032         uint8_t reserved    : 2;    // 1,2
00033         uint8_t conv_done   : 1;    // 3
00034         uint8_t comp_done   : 1;    // 4
00035         uint8_t far         : 1;    // 5
00036         uint8_t close       : 1;    // 6
00037         uint8_t reset       : 1;    // 7
00038     } bits;
00039     uint8_t octet;
00040 } RegIrqSrc_t;
00041 
00042 typedef union {
00043     struct {    // sx9500 register 0x09
00044         uint8_t compstat         : 4;    // 0,1,2,3
00045         uint8_t proxstat0        : 1;    // 4
00046         uint8_t proxstat1        : 1;    // 5
00047         uint8_t proxstat2        : 1;    // 6
00048         uint8_t proxstat3        : 1;    // 7
00049     } bits;
00050     uint8_t octet;
00051 } RegStat_t;
00052 
00053 typedef union {
00054     struct {    // sx9500 register 0x06
00055         uint8_t sensor_en   : 4;    // 0,1,2,3
00056         uint8_t scan_period : 3;    // 4,5,6
00057         uint8_t reserved    : 1;    // 7
00058     } bits;
00059     uint8_t octet;
00060 } RegProxCtrl0_t;
00061 
00062 typedef union {
00063     struct {    // sx9500 register 0x09
00064         uint8_t raw_filt    : 2;    // 0,1
00065         uint8_t reserved    : 2;    // 2,3
00066         uint8_t doze_period : 2;    // 4,5
00067         uint8_t doze_en     : 1;    // 6
00068         uint8_t res7        : 1;    // 7
00069     } bits;
00070     uint8_t octet;
00071 } RegProxCtrl3_t;
00072 
00073 class SX9500 {
00074     public:
00075         SX9500(I2C& r, PinName en_pin, PinName nirq_pin);
00076         ~SX9500();
00077         //void try_read(void);
00078         uint8_t read_single(uint8_t addr);
00079         void read(uint8_t addr, uint8_t *dst_buf, int length);
00080         void write(uint8_t addr, uint8_t data);
00081         void reset(void);
00082         //uint16_t get_sensor(char CSn);
00083         void print_sensor(char CSn);
00084         void set_active(bool);
00085         bool get_active(void);
00086         void service(void);
00087         
00088         RegIrqSrc_t RegIrqSrc;
00089         RegProxCtrl0_t RegProxCtrl0;
00090         
00091     private:
00092         I2C& m_i2c;
00093         DigitalOut m_txen;
00094         DigitalIn m_nirq; // polled irq pin, because i2c is shared
00095 };
00096