added init function from NXP Rapid ioT SDK, read_proximity_sensors function now works well.
Dependents: rIoTwear-touch rIoTwear-snake
Diff: sx9500.h
- Revision:
- 1:aa30dc96dc77
- Parent:
- 0:d46a1b9267a3
- Child:
- 2:f88a77463a32
diff -r d46a1b9267a3 -r aa30dc96dc77 sx9500.h --- a/sx9500.h Wed Mar 18 00:57:23 2015 +0000 +++ b/sx9500.h Fri May 08 01:32:54 2015 +0000 @@ -26,20 +26,71 @@ #define SX9500_RESET_CMD 0xDE +typedef union { + struct { // sx9500 register 0x09 + uint8_t txen_stat : 1; // 0 + uint8_t reserved : 2; // 1,2 + uint8_t conv_done : 1; // 3 + uint8_t comp_done : 1; // 4 + uint8_t far : 1; // 5 + uint8_t close : 1; // 6 + uint8_t reset : 1; // 7 + } bits; + uint8_t octet; +} RegIrqSrc_t; + +typedef union { + struct { // sx9500 register 0x09 + uint8_t compstat : 4; // 0,1,2,3 + uint8_t proxstat0 : 1; // 4 + uint8_t proxstat1 : 1; // 5 + uint8_t proxstat2 : 1; // 6 + uint8_t proxstat3 : 1; // 7 + } bits; + uint8_t octet; +} RegStat_t; + +typedef union { + struct { // sx9500 register 0x06 + uint8_t sensor_en : 4; // 0,1,2,3 + uint8_t scan_period : 3; // 4,5,6 + uint8_t reserved : 1; // 7 + } bits; + uint8_t octet; +} RegProxCtrl0_t; + +typedef union { + struct { // sx9500 register 0x09 + uint8_t raw_filt : 2; // 0,1 + uint8_t reserved : 2; // 2,3 + uint8_t doze_period : 2; // 4,5 + uint8_t doze_en : 1; // 6 + uint8_t res7 : 1; // 7 + } bits; + uint8_t octet; +} RegProxCtrl3_t; + class SX9500 { public: - SX9500(I2C& r, PinName en_pin); + SX9500(I2C& r, PinName en_pin, PinName nirq_pin); ~SX9500(); //void try_read(void); uint8_t read_single(uint8_t addr); void read(uint8_t addr, uint8_t *dst_buf, int length); void write(uint8_t addr, uint8_t data); void reset(void); - uint16_t get_sensor(void); - void standby(void); + //uint16_t get_sensor(char CSn); + void print_sensor(char CSn); + void set_active(bool); + bool get_active(void); + void service(void); + + RegIrqSrc_t RegIrqSrc; + RegProxCtrl0_t RegProxCtrl0; private: I2C& m_i2c; DigitalOut m_txen; + DigitalIn m_nirq; // polled irq pin, because i2c is shared };