Library for the AMS CC811 digitial gas sensor

Dependencies:   AMS_ENS210_temp_humid_sensor

Committer:
UHSLMarcus
Date:
Thu Jan 19 12:46:58 2017 +0000
Revision:
1:acfca1d3256d
Parent:
0:5edbf3550350
Child:
2:e394671ef5f6
simple members implimented

Who changed what in which revision?

UserRevisionLine numberNew contents of line
UHSLMarcus 0:5edbf3550350 1
UHSLMarcus 0:5edbf3550350 2 #include "AMS_CSS811.h"
UHSLMarcus 0:5edbf3550350 3
UHSLMarcus 0:5edbf3550350 4
UHSLMarcus 0:5edbf3550350 5 AMS_CCS811::AMS_CCS811(I2C * i2c, PinName n_wake_pin) {
UHSLMarcus 1:acfca1d3256d 6 _n_wake_out = new (std::nothrow) DigitalOut(n_wake_pin);
UHSLMarcus 0:5edbf3550350 7 _i2c = i2c;
UHSLMarcus 0:5edbf3550350 8
UHSLMarcus 0:5edbf3550350 9 set_defaults();
UHSLMarcus 0:5edbf3550350 10 }
UHSLMarcus 0:5edbf3550350 11
UHSLMarcus 0:5edbf3550350 12 AMS_CCS811::AMS_CCS811(I2C * i2c, PinName n_wake_pin, I2C * ens210_i2c) {
UHSLMarcus 1:acfca1d3256d 13 _n_wake_out = new (std::nothrow) DigitalOut(n_wake_pin);
UHSLMarcus 0:5edbf3550350 14 _i2c = i2c;
UHSLMarcus 0:5edbf3550350 15 _ens210_i2c = ens210_i2c;
UHSLMarcus 0:5edbf3550350 16
UHSLMarcus 0:5edbf3550350 17 set_defaults();
UHSLMarcus 0:5edbf3550350 18
UHSLMarcus 0:5edbf3550350 19 }
UHSLMarcus 0:5edbf3550350 20
UHSLMarcus 1:acfca1d3256d 21 AMS_CCS811::~AMS_CCS811() {
UHSLMarcus 1:acfca1d3256d 22 delete _n_wake_out;
UHSLMarcus 1:acfca1d3256d 23 delete _addr_out;
UHSLMarcus 1:acfca1d3256d 24 delete _int_data;
UHSLMarcus 1:acfca1d3256d 25 }
UHSLMarcus 1:acfca1d3256d 26
UHSLMarcus 1:acfca1d3256d 27 bool AMS_CCS811::init() {
UHSLMarcus 1:acfca1d3256d 28
UHSLMarcus 1:acfca1d3256d 29 }
UHSLMarcus 1:acfca1d3256d 30
UHSLMarcus 1:acfca1d3256d 31 bool AMS_CCS811::mode(OP_MODES mode) {
UHSLMarcus 1:acfca1d3256d 32 OP_MODES old = _mode; // incase the write fails, to roll back
UHSLMarcus 1:acfca1d3256d 33 _mode = mode;
UHSLMarcus 1:acfca1d3256d 34
UHSLMarcus 1:acfca1d3256d 35 bool success = write_config();
UHSLMarcus 1:acfca1d3256d 36 if (!success)
UHSLMarcus 1:acfca1d3256d 37 _mode = old;
UHSLMarcus 1:acfca1d3256d 38
UHSLMarcus 1:acfca1d3256d 39 return success;
UHSLMarcus 1:acfca1d3256d 40 }
UHSLMarcus 1:acfca1d3256d 41
UHSLMarcus 1:acfca1d3256d 42 AMS_CCS811::OP_MODES AMS_CCS811::mode() {
UHSLMarcus 1:acfca1d3256d 43 OP_MODES result = _mode; // rather not rely on this, but just incase the read fails
UHSLMarcus 1:acfca1d3256d 44
UHSLMarcus 1:acfca1d3256d 45 read_config_result read_result = read_config();
UHSLMarcus 1:acfca1d3256d 46 if (read_result.success) {
UHSLMarcus 1:acfca1d3256d 47 int mode = (read_result.byte >> 4) & 0b111;
UHSLMarcus 1:acfca1d3256d 48 result = mode > 4 ? INVALID : mode;
UHSLMarcus 1:acfca1d3256d 49 } // todo ... add a new "last error" here
UHSLMarcus 1:acfca1d3256d 50
UHSLMarcus 1:acfca1d3256d 51 return mode;
UHSLMarcus 1:acfca1d3256d 52 }
UHSLMarcus 1:acfca1d3256d 53
UHSLMarcus 1:acfca1d3256d 54 bool AMS_CCS811::addr_mode(bool high) {
UHSLMarcus 1:acfca1d3256d 55 _addr_dir = high;
UHSLMarcus 1:acfca1d3256d 56 if (_addr_out != NULL) *_addr_out = _addr_dir;
UHSLMarcus 1:acfca1d3256d 57
UHSLMarcus 1:acfca1d3256d 58 return addr_mode() == high;
UHSLMarcus 1:acfca1d3256d 59 }
UHSLMarcus 1:acfca1d3256d 60
UHSLMarcus 1:acfca1d3256d 61 bool AMS_CCS811::addr_mode() {
UHSLMarcus 1:acfca1d3256d 62 if (_addr_out != NULL) {
UHSLMarcus 1:acfca1d3256d 63 _addr_dir = *_addr_out;
UHSLMarcus 1:acfca1d3256d 64 }
UHSLMarcus 1:acfca1d3256d 65
UHSLMarcus 1:acfca1d3256d 66 return _addr_dir;
UHSLMarcus 1:acfca1d3256d 67 }
UHSLMarcus 1:acfca1d3256d 68
UHSLMarcus 1:acfca1d3256d 69 bool AMS_CCS811::addr_pin(PinName pin) {
UHSLMarcus 1:acfca1d3256d 70 _addr_out = _addr_out == NULL ? new (std::nothrow) DigitalOut(pin) : new (_addr_out) DigitalOut(pin);
UHSLMarcus 1:acfca1d3256d 71 addr_mode(_addr_dir);
UHSLMarcus 1:acfca1d3256d 72
UHSLMarcus 1:acfca1d3256d 73 return _addr_out != NULL;
UHSLMarcus 1:acfca1d3256d 74 }
UHSLMarcus 1:acfca1d3256d 75
UHSLMarcus 1:acfca1d3256d 76 bool AMS_CCS811::n_wake_pin(PinName pin) {
UHSLMarcus 1:acfca1d3256d 77 _n_wake_out = _n_wake_out == NULL ? new (std::nothrow) DigitalOut(pin) : new (_n_wake_out) DigitalOut(pin);
UHSLMarcus 1:acfca1d3256d 78 return _n_wake_out != NULL;
UHSLMarcus 1:acfca1d3256d 79 }
UHSLMarcus 1:acfca1d3256d 80
UHSLMarcus 1:acfca1d3256d 81 bool eAMS_CCS811::env_data(float humid, float temp) {
UHSLMarcus 1:acfca1d3256d 82 return true;
UHSLMarcus 1:acfca1d3256d 83 }
UHSLMarcus 1:acfca1d3256d 84
UHSLMarcus 1:acfca1d3256d 85
UHSLMarcus 1:acfca1d3256d 86 AMS_CCS811::DATA_STATUS AMS_CCS811::has_new_data() {
UHSLMarcus 1:acfca1d3256d 87 return (DATA_STATUS) 0;
UHSLMarcus 1:acfca1d3256d 88 }
UHSLMarcus 1:acfca1d3256d 89
UHSLMarcus 1:acfca1d3256d 90 uint16_t AMS_CCS811::co2_read() {
UHSLMarcus 1:acfca1d3256d 91 return 0;
UHSLMarcus 1:acfca1d3256d 92
UHSLMarcus 1:acfca1d3256d 93 uint16_t AMS_CCS811::tvoc_read() {
UHSLMarcus 1:acfca1d3256d 94 return 0;
UHSLMarcus 1:acfca1d3256d 95 }
UHSLMarcus 1:acfca1d3256d 96
UHSLMarcus 1:acfca1d3256d 97 uint16_t AMS_CCS811::raw_read() {
UHSLMarcus 1:acfca1d3256d 98 return 0;
UHSLMarcus 1:acfca1d3256d 99 }
UHSLMarcus 1:acfca1d3256d 100
UHSLMarcus 1:acfca1d3256d 101 const char * AMS_CCS811::last_error() {
UHSLMarcus 1:acfca1d3256d 102 return "";
UHSLMarcus 1:acfca1d3256d 103 }
UHSLMarcus 1:acfca1d3256d 104
UHSLMarcus 1:acfca1d3256d 105 bool AMS_CCS811::enable_interupt(bool enable) {
UHSLMarcus 1:acfca1d3256d 106 bool old = _int_data_enabled; // incase the write fails, to roll back
UHSLMarcus 1:acfca1d3256d 107 _int_data_enabled = enable;
UHSLMarcus 1:acfca1d3256d 108
UHSLMarcus 1:acfca1d3256d 109 bool success = write_config();
UHSLMarcus 1:acfca1d3256d 110 if (!success)
UHSLMarcus 1:acfca1d3256d 111 _int_data_enabled = old;
UHSLMarcus 1:acfca1d3256d 112
UHSLMarcus 1:acfca1d3256d 113 return success;
UHSLMarcus 1:acfca1d3256d 114
UHSLMarcus 1:acfca1d3256d 115 }
UHSLMarcus 1:acfca1d3256d 116
UHSLMarcus 1:acfca1d3256d 117 bool AMS_CCS811::interupt_enabled() {
UHSLMarcus 1:acfca1d3256d 118 bool enabled = _int_data_enabled; // rather not rely on this, but just incase the read fails
UHSLMarcus 1:acfca1d3256d 119
UHSLMarcus 1:acfca1d3256d 120 read_config_result read_result = read_config();
UHSLMarcus 1:acfca1d3256d 121 if (read_result.success) {
UHSLMarcus 1:acfca1d3256d 122 enabled = (read_result.byte >> 3) & 1;
UHSLMarcus 1:acfca1d3256d 123 } // todo ... add a new "last error" here? or maybe the read method itself should set that.
UHSLMarcus 1:acfca1d3256d 124
UHSLMarcus 1:acfca1d3256d 125 return mode;
UHSLMarcus 1:acfca1d3256d 126 }
UHSLMarcus 1:acfca1d3256d 127
UHSLMarcus 1:acfca1d3256d 128 bool AMS_CCS811::interrupt_pin(PinName pin) {
UHSLMarcus 1:acfca1d3256d 129 bool success = false;
UHSLMarcus 1:acfca1d3256d 130
UHSLMarcus 1:acfca1d3256d 131 _int_data = _int_data == NULL ? new (std::nothrow) DigitalOut(pin) : new (_int_data) DigitalOut(pin);
UHSLMarcus 1:acfca1d3256d 132 if (_int_data != NULL) {
UHSLMarcus 1:acfca1d3256d 133 _int_data->fall(this, &AMS_CCS811::_isr_data);
UHSLMarcus 1:acfca1d3256d 134 success = true;
UHSLMarcus 1:acfca1d3256d 135 }
UHSLMarcus 1:acfca1d3256d 136
UHSLMarcus 1:acfca1d3256d 137 return success;
UHSLMarcus 1:acfca1d3256d 138 }
UHSLMarcus 0:5edbf3550350 139
UHSLMarcus 0:5edbf3550350 140
UHSLMarcus 0:5edbf3550350 141
UHSLMarcus 1:acfca1d3256d 142
UHSLMarcus 1:acfca1d3256d 143 /** Private **/
UHSLMarcus 1:acfca1d3256d 144
UHSLMarcus 1:acfca1d3256d 145 bool AMS_CCS811::set_defaults() {
UHSLMarcus 1:acfca1d3256d 146 if (_mode == NULL)
UHSLMarcus 1:acfca1d3256d 147 _mode = CONFIG_OP_MODE;
UHSLMarcus 1:acfca1d3256d 148 if (_addr_dir == NULL)
UHSLMarcus 1:acfca1d3256d 149 _addr_dir = CONFIG_ADDR_DIR;
UHSLMarcus 1:acfca1d3256d 150 if (_int_data_enabled == NULL)
UHSLMarcus 1:acfca1d3256d 151 _int_data_enabled = CONFIG_INTR;
UHSLMarcus 1:acfca1d3256d 152
UHSLMarcus 1:acfca1d3256d 153 return write_config();
UHSLMarcus 1:acfca1d3256d 154 }
UHSLMarcus 1:acfca1d3256d 155
UHSLMarcus 1:acfca1d3256d 156 void AMS_CCS811::_isr_data() {
UHSLMarcus 1:acfca1d3256d 157 }
UHSLMarcus 1:acfca1d3256d 158
UHSLMarcus 1:acfca1d3256d 159 bool AMS_CCS811::write_config() {
UHSLMarcus 1:acfca1d3256d 160 }
UHSLMarcus 1:acfca1d3256d 161
UHSLMarcus 1:acfca1d3256d 162 read_config_result AMS_CCS811::read_config() {
UHSLMarcus 1:acfca1d3256d 163 }