sx9500 driver
Dependents: Senet NAMote scpi_sx127x NAMote72_Utility scpi_sx127x_firstTest
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
Generated on Tue Jul 12 2022 22:51:26 by 1.7.2