simple CCS811 driver

Dependencies:   AMS_ENS210_temp_humid_sensor

Dependents:   TBSense2_Sensor_Demo

Fork of AMS_CCS811_gas_sensor by Marcus Lee

Revision:
2:e394671ef5f6
Parent:
1:acfca1d3256d
Child:
4:a6b8881eae87
--- a/AMS_CCS811.h	Thu Jan 19 12:46:58 2017 +0000
+++ b/AMS_CCS811.h	Thu Jan 19 13:23:21 2017 +0000
@@ -14,6 +14,7 @@
 #define CONFIG_OP_MODE      TEN_SECOND              // Every 10 seconds
 #define CONFIG_INTR         0                       // Interupt off
 #define CONFIG_ADDR_DIR     0                       // ADDR n_wake_pin pulled low
+#define CONFIG_ENS210_POLL  3000                    // ENS210 is polled every 3 seconds
 
 /* Library Constants */
 #define SLAVE_ADDR_RAW_H    0x5B
@@ -43,7 +44,8 @@
             SECOND,         /**< Measurement every second */
             TEN_SECOND,     /**< Measurement every 10 seconds */
             SIXTY_SECOND,   /**< Measurement every 60 seconds */
-            CONSTANT        /**< Measurement every 250ms - Only raw data available */
+            CONSTANT,       /**< Measurement every 250ms - Only raw data available */
+            INVALID         /**< Invalid bit configuration */
         };
     
         /** Data collection status.
@@ -98,7 +100,7 @@
          *
          * @return The current OP_MODES mode
          */
-        OP_MODES mode();
+        AMS_CCS811::OP_MODES mode();
         
         /** Set the ADDR mode \n
          *
@@ -154,7 +156,7 @@
          *
          * @return Current collection state
          */
-        DATA_STATUS has_new_data();
+        AMS_CCS811::DATA_STATUS has_new_data();
     
         /** Get the most recent CO2 measurement.
          *  Must call has_new_data() first when when interupts are disabled otherwise the same data will be returned
@@ -194,10 +196,7 @@
          */
         bool attach(void (*func_ptr)(void), PinName pin) {
             _isr_data_fp.attach(func_ptr);
-            _int_data_active = true;
-            _int_data(pin);
-            _int_data.fall(this, &AMS_CCS811::_isr_data());
-    
+            interrupt_pin(pin);
             return enable_interupt(true);
         }
     
@@ -212,11 +211,8 @@
          */
         template<typename T>
         bool attach(T *type_ptr, void (T::*mem_ptr)(void), PinName pin) {
-            _isr_data_fp.attach(type_ptr, mem_ptr);
-            //_int_data_active = true;
-            //_int_data(pin);
-            //_int_data.fall(this, &AMS_CCS811::_isr_data());
-    
+            _isr_data_fp.attach(callback(type_ptr, mem_ptr));
+            interrupt_pin(pin);
             return enable_interupt(true);
         }
     
@@ -254,11 +250,17 @@
     
     private:
         I2C* _i2c;
+        I2C* _ens210_i2c;
+        
         bool _addr_dir;
         int slave_addr;
-        I2C* _ens210_i2c;
+        void update_slave_addr();
+        
         bool _ens210_enable;
+        int _ens210_poll_split;
+        
         OP_MODES _mode;
+        
         bool set_defaults();
         
         DigitalOut *_n_wake_out;
@@ -275,8 +277,12 @@
         struct read_config_result {
             bool success;
             uint8_t byte;
-        }
+            read_config_result() : success(false), byte(0) {}
+        };
         read_config_result read_config();
+        
+        int i2c_read(char reg_addr, char* output, int len);
+        int i2c_write(char reg_addr, char* input, int len);
 
 };