sx9500 driver
Dependents: Senet NAMote scpi_sx127x NAMote72_Utility scpi_sx127x_firstTest
sx9500.cpp
00001 #include "sx9500.h" 00002 00003 #define SX9500_I2C_ADDRESS 0x50 //0x28 00004 00005 00006 SX9500::SX9500(I2C& r, PinName en_pin, PinName nirq_pin) : m_i2c(r), m_txen(en_pin), m_nirq(nirq_pin) 00007 { 00008 m_nirq.mode(PullUp); // no pullup on board? 00009 RegProxCtrl0.octet = read_single(SX9500_REG_PROXCTRL0); 00010 } 00011 00012 SX9500::~SX9500() 00013 { 00014 } 00015 00016 void SX9500::reset() 00017 { 00018 write(SX9500_REG_RESET, SX9500_RESET_CMD); 00019 } 00020 00021 void SX9500::print_sensor(char CSn) 00022 { 00023 uint8_t buf[2]; 00024 00025 write(SX9500_REG_SENSORSEL, CSn); 00026 00027 read(SX9500_REG_USEMSB, buf, 2); 00028 printf("%d useful:0x%02x%02x\r\n", CSn, buf[0], buf[1]); 00029 00030 read(SX9500_REG_AVGMSB, buf, 2); 00031 printf("%d avg:0x%02x%02x\r\n", CSn, buf[0], buf[1]); 00032 00033 read(SX9500_REG_DIFFMSB, buf, 2); 00034 printf("%d diff:0x%02x%02x\r\n", CSn, buf[0], buf[1]); 00035 } 00036 00037 void SX9500::write(uint8_t addr, uint8_t data) 00038 { 00039 uint8_t cmd[2]; 00040 00041 cmd[0] = addr; 00042 cmd[1] = data; 00043 00044 if (m_i2c.write(SX9500_I2C_ADDRESS, (char *)cmd, 2)) 00045 printf("SX9500 write-fail\n"); 00046 } 00047 00048 void SX9500::read(uint8_t addr, uint8_t *dst_buf, int length) 00049 { 00050 char cmd[2]; 00051 00052 cmd[0] = addr; 00053 if (m_i2c.write(SX9500_I2C_ADDRESS, cmd, 1, true)) 00054 printf("SX9500 write-fail\n"); 00055 if (m_i2c.read(SX9500_I2C_ADDRESS, (char *)dst_buf, length)) 00056 printf("SX9500 read-fail\n"); 00057 } 00058 00059 uint8_t SX9500::read_single(uint8_t addr) 00060 { 00061 char cmd[2]; 00062 00063 cmd[0] = addr; 00064 if (m_i2c.write(SX9500_I2C_ADDRESS, cmd, 1, true)) 00065 printf("SX9500 write-fail\n"); 00066 if (m_i2c.read(SX9500_I2C_ADDRESS, cmd, 1)) 00067 printf("SX9500 read-fail\n"); 00068 00069 return cmd[0]; 00070 } 00071 00072 bool SX9500::get_active() 00073 { 00074 if (m_txen.read()) 00075 return true; 00076 else 00077 return false; 00078 } 00079 00080 void SX9500::set_active(bool en) 00081 { 00082 if (en) { 00083 m_txen = 1; 00084 } else { 00085 /* lowest power (non)operation */ 00086 m_txen = 0; 00087 write(SX9500_REG_PROXCTRL0, 0); // turn off all sensor pins 00088 } 00089 } 00090 00091 void SX9500::service() 00092 { 00093 if (m_nirq.read()) 00094 return; 00095 00096 RegIrqSrc.octet = read_single(SX9500_REG_IRQSRC); 00097 printf("95irq:"); 00098 if (RegIrqSrc.bits.conv_done) { 00099 printf("conv_done:\r\n"); 00100 print_sensor(0); 00101 print_sensor(1); 00102 } 00103 if (RegIrqSrc.bits.comp_done) { 00104 printf("comp_done "); 00105 } 00106 if (RegIrqSrc.bits.far || RegIrqSrc.bits.close) { 00107 RegStat_t stat; 00108 printf("stat "); 00109 stat.octet = read_single(SX9500_REG_STAT); 00110 if (stat.bits.proxstat0) 00111 printf("cs0 "); 00112 if (stat.bits.proxstat1) 00113 printf("cs1 "); 00114 } 00115 00116 if (RegIrqSrc.bits.reset) { 00117 printf("reset "); 00118 } 00119 00120 printf("\r\n"); 00121 } 00122
Generated on Tue Jul 12 2022 22:51:26 by 1.7.2