Library for the AMS CC811 digitial gas sensor

Dependencies:   AMS_ENS210_temp_humid_sensor

Revision:
4:a6b8881eae87
Parent:
3:782a719f47a5
Child:
5:41e97348e9e7
--- a/AMS_CCS811.cpp	Thu Jan 19 13:25:08 2017 +0000
+++ b/AMS_CCS811.cpp	Thu Jan 19 14:27:44 2017 +0000
@@ -4,18 +4,13 @@
 
 AMS_CCS811::AMS_CCS811(I2C * i2c, PinName n_wake_pin) { 
     _n_wake_out = new (std::nothrow) DigitalOut(n_wake_pin);
-    _i2c = i2c;
-    
-    set_defaults();
+    _i2c = i2c; 
 }
             
 AMS_CCS811::AMS_CCS811(I2C * i2c, PinName n_wake_pin, I2C * ens210_i2c) {
     _n_wake_out = new (std::nothrow) DigitalOut(n_wake_pin);
     _i2c = i2c;
     _ens210_i2c = ens210_i2c;
-    
-    set_defaults();
-    
 }
               
 AMS_CCS811::~AMS_CCS811() {
@@ -25,7 +20,39 @@
 }
 
 bool AMS_CCS811::init() {
-    return true;
+   enable_ens210(true);
+   
+   return set_defaults();
+}
+
+void AMS_CCS811::i2c_interface(I2C * i2c) {
+    _i2c = i2c;
+}
+        
+void AMS_CCS811::ens210_i2c_interface(I2C * i2c) {
+    _ens210_i2c = i2c;
+}
+
+bool AMS_CCS811::enable_ens210(bool enable) {
+    
+    _ens210_enabled = false;
+    if (_ens210_i2c != NULL) _ens210_enabled = enable;
+    update_ens210_timer();
+
+    return _ens210_enabled;
+}
+
+bool AMS_CCS811::ens210_is_enabled() {
+    return _ens210_enabled;
+}
+        
+void AMS_CCS811::ens210_poll_interval(int poll_ms) {
+    _ens210_poll_split = poll_ms;
+    update_ens210_timer();
+}
+
+int AMS_CCS811::ens210_poll_interval() {
+    return _ens210_poll_split;
 }
 
 bool AMS_CCS811::mode(OP_MODES mode) {
@@ -102,7 +129,7 @@
 }
 
 const char * AMS_CCS811::last_error() {
-    return "";
+    return "TODO";
 }
 
 bool AMS_CCS811::enable_interupt(bool enable) {
@@ -160,6 +187,15 @@
     return write_config();
 }
 
+void AMS_CCS811::update_ens210_timer() {
+    _ens210_poll_t.detach();
+    if (_ens210_enabled)
+        _ens210_poll_t.attach_us(callback(this, &AMS_CCS811::ens210_isr), _ens210_poll_split*1000);
+}
+
+void AMS_CCS811::ens210_isr() {
+}
+
 void AMS_CCS811::update_slave_addr() {
     slave_addr = addr_mode() ? SLAVE_ADDR_RAW_H : SLAVE_ADDR_RAW_L; 
 }