First working version of CDM7160 library

Committer:
MichalKozlowski
Date:
Mon May 04 11:33:36 2020 +0000
Revision:
2:207717b5eaee
Parent:
1:4a0a9c03afba
Atmospheric pressure and altitude compensation switched to ON by default

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MichalKozlowski 0:8fe9c25985e5 1 /**
MichalKozlowski 0:8fe9c25985e5 2 * Project: CDM7160
MichalKozlowski 0:8fe9c25985e5 3 * Company: yosensi.io
MichalKozlowski 0:8fe9c25985e5 4 * CodeWriter: Michal Kozlowski
MichalKozlowski 0:8fe9c25985e5 5 * File: CDM7160.h
MichalKozlowski 0:8fe9c25985e5 6 * Date: 09-09-2019
MichalKozlowski 0:8fe9c25985e5 7 * Description: CDM7160 Driver Header File
MichalKozlowski 0:8fe9c25985e5 8 */
MichalKozlowski 0:8fe9c25985e5 9
MichalKozlowski 0:8fe9c25985e5 10 /**
MichalKozlowski 0:8fe9c25985e5 11 * #include "mbed.h"
MichalKozlowski 0:8fe9c25985e5 12 * #include "CDM7160.h"
MichalKozlowski 0:8fe9c25985e5 13 *
MichalKozlowski 0:8fe9c25985e5 14 * DigitalIn busy(PC_8);
MichalKozlowski 0:8fe9c25985e5 15 * CDM7160 CO2(PB_9, PB_8);
MichalKozlowski 0:8fe9c25985e5 16 * InterruptIn sw(USER_BUTTON);
MichalKozlowski 0:8fe9c25985e5 17 * InterruptIn irq(PC_9);
MichalKozlowski 0:8fe9c25985e5 18 *
MichalKozlowski 0:8fe9c25985e5 19 * volatile bool button, isIrq;
MichalKozlowski 0:8fe9c25985e5 20 *
MichalKozlowski 0:8fe9c25985e5 21 * void buttonCallback(){
MichalKozlowski 0:8fe9c25985e5 22 * button = true;
MichalKozlowski 0:8fe9c25985e5 23 * }
MichalKozlowski 0:8fe9c25985e5 24 *
MichalKozlowski 0:8fe9c25985e5 25 * void irqCallback(){
MichalKozlowski 0:8fe9c25985e5 26 * isIrq = true;
MichalKozlowski 0:8fe9c25985e5 27 * }
MichalKozlowski 0:8fe9c25985e5 28 *
MichalKozlowski 0:8fe9c25985e5 29 * int main()
MichalKozlowski 0:8fe9c25985e5 30 * {
MichalKozlowski 1:4a0a9c03afba 31 * int i=0; // Number of measurement
MichalKozlowski 0:8fe9c25985e5 32 * irq.rise(&irqCallback);
MichalKozlowski 0:8fe9c25985e5 33 * //irq.fall(&irqCallback);
MichalKozlowski 0:8fe9c25985e5 34 * sw.rise(&buttonCallback);
MichalKozlowski 0:8fe9c25985e5 35 *
MichalKozlowski 0:8fe9c25985e5 36 *
MichalKozlowski 1:4a0a9c03afba 37 * if(CO2.initIntegrated() == CDM7160_I2C_ADDR){
MichalKozlowski 0:8fe9c25985e5 38 * printf("Initialization Success\r\n\n");
MichalKozlowski 0:8fe9c25985e5 39 * }
MichalKozlowski 0:8fe9c25985e5 40 * if(CO2.setAlarmLimits(1500,1450) == CDM7160_SUCCESS){
MichalKozlowski 0:8fe9c25985e5 41 * printf("Alarm Limits has been set!\r\n");
MichalKozlowski 0:8fe9c25985e5 42 * }
MichalKozlowski 0:8fe9c25985e5 43 *
MichalKozlowski 0:8fe9c25985e5 44 * while (true) {
MichalKozlowski 0:8fe9c25985e5 45 * if(button){
MichalKozlowski 0:8fe9c25985e5 46 * if(CO2.getAlarmLimits() == CDM7160_SUCCESS){
MichalKozlowski 0:8fe9c25985e5 47 * printf("High Alert Limit = %d Low Alert Limit = %d\r\n", CO2.cdm7160.highAlertLimit, CO2.cdm7160.lowAlertLimit);
MichalKozlowski 0:8fe9c25985e5 48 * }
MichalKozlowski 0:8fe9c25985e5 49 * if(CO2.getAirPressureAndAltitude() == CDM7160_SUCCESS){
MichalKozlowski 0:8fe9c25985e5 50 * printf("Atmosferic Pressure = %d [hPa] Altitude = %d [m]\r\n", CO2.cdm7160.atmosferic_pressure, CO2.cdm7160.altitude);
MichalKozlowski 0:8fe9c25985e5 51 * }
MichalKozlowski 0:8fe9c25985e5 52 * button = false;
MichalKozlowski 0:8fe9c25985e5 53 * }
MichalKozlowski 0:8fe9c25985e5 54 *
MichalKozlowski 0:8fe9c25985e5 55 * if(busy == 0){
MichalKozlowski 0:8fe9c25985e5 56 * if(i==0){
MichalKozlowski 0:8fe9c25985e5 57 * wait(2);
MichalKozlowski 0:8fe9c25985e5 58 * isIrq = false;
MichalKozlowski 0:8fe9c25985e5 59 * }else{
MichalKozlowski 0:8fe9c25985e5 60 * printf("CO2 = %d [ppm]\r\n", CO2.getCO2());
MichalKozlowski 1:4a0a9c03afba 61 * wait(2);
MichalKozlowski 0:8fe9c25985e5 62 * if(isIrq){
MichalKozlowski 0:8fe9c25985e5 63 * printf("Interrupt !!!\r\n");
MichalKozlowski 0:8fe9c25985e5 64 * isIrq = false;
MichalKozlowski 0:8fe9c25985e5 65 * }
MichalKozlowski 0:8fe9c25985e5 66 * }
MichalKozlowski 0:8fe9c25985e5 67 * i++;
MichalKozlowski 0:8fe9c25985e5 68 * }
MichalKozlowski 0:8fe9c25985e5 69 * }
MichalKozlowski 0:8fe9c25985e5 70 * }
MichalKozlowski 0:8fe9c25985e5 71 *
MichalKozlowski 0:8fe9c25985e5 72 */
MichalKozlowski 0:8fe9c25985e5 73
MichalKozlowski 0:8fe9c25985e5 74 #include "mbed.h"
MichalKozlowski 0:8fe9c25985e5 75
MichalKozlowski 0:8fe9c25985e5 76 #ifndef CDM7160_H
MichalKozlowski 0:8fe9c25985e5 77 #define CDM7160_H
MichalKozlowski 0:8fe9c25985e5 78
MichalKozlowski 0:8fe9c25985e5 79 #include "mbed.h"
MichalKozlowski 0:8fe9c25985e5 80
MichalKozlowski 0:8fe9c25985e5 81 /**
MichalKozlowski 0:8fe9c25985e5 82 * Sensor I2C address
MichalKozlowski 0:8fe9c25985e5 83 */
MichalKozlowski 0:8fe9c25985e5 84 //#define CDM7160_I2C_ADDR 0x68 // CAD0 pin to low logic
MichalKozlowski 0:8fe9c25985e5 85 #define CDM7160_I2C_ADDR 0x69 // CAD0 pin to high logic (left floating)
MichalKozlowski 0:8fe9c25985e5 86
MichalKozlowski 0:8fe9c25985e5 87 #define DIR_BIT_WRITE 0x00
MichalKozlowski 0:8fe9c25985e5 88 #define DIR_BIT_READ 0x01
MichalKozlowski 0:8fe9c25985e5 89
MichalKozlowski 0:8fe9c25985e5 90 /**
MichalKozlowski 0:8fe9c25985e5 91 * Sensor name
MichalKozlowski 0:8fe9c25985e5 92 */
MichalKozlowski 0:8fe9c25985e5 93 #define CDM7160_NAME "CDM7160"
MichalKozlowski 0:8fe9c25985e5 94 #define CDM7160_NAME_LEN 8
MichalKozlowski 0:8fe9c25985e5 95
MichalKozlowski 0:8fe9c25985e5 96 /**
MichalKozlowski 0:8fe9c25985e5 97 * Measurements number
MichalKozlowski 0:8fe9c25985e5 98 */
MichalKozlowski 0:8fe9c25985e5 99 #define CDM7160_MEASURE_NBR 1
MichalKozlowski 0:8fe9c25985e5 100
MichalKozlowski 0:8fe9c25985e5 101 #define CDM7160_CRC_POLYNOMIAL 0x31
MichalKozlowski 0:8fe9c25985e5 102 #define CDM7160_CRC8_INIT 0xFF
MichalKozlowski 0:8fe9c25985e5 103
MichalKozlowski 0:8fe9c25985e5 104
MichalKozlowski 0:8fe9c25985e5 105 /**
MichalKozlowski 0:8fe9c25985e5 106 * Conditions on I2C bus.
MichalKozlowski 0:8fe9c25985e5 107 */
MichalKozlowski 0:8fe9c25985e5 108 #define CDM7160_SUCCESS 0
MichalKozlowski 0:8fe9c25985e5 109 #define CDM7160_ERROR -1
MichalKozlowski 0:8fe9c25985e5 110
MichalKozlowski 0:8fe9c25985e5 111 /** Macros - Build 2-Byte data
MichalKozlowski 0:8fe9c25985e5 112 */
MichalKozlowski 0:8fe9c25985e5 113 #define CDM7160_2B_BUILD(hiByte, loByte) ((uint16_t)(((loByte) & 0x00FF) | (((hiByte) & 0x00FF) << 8)))
MichalKozlowski 0:8fe9c25985e5 114
MichalKozlowski 0:8fe9c25985e5 115 /** Macros - Split 2-Byte data
MichalKozlowski 0:8fe9c25985e5 116 */
MichalKozlowski 0:8fe9c25985e5 117 #define CDM7160_HI_BYTE(reg) (((reg) >> 8) & 0xFF)
MichalKozlowski 0:8fe9c25985e5 118 #define CDM7160_LO_BYTE(reg) ((reg) & 0xFF)
MichalKozlowski 0:8fe9c25985e5 119
MichalKozlowski 0:8fe9c25985e5 120 /**
MichalKozlowski 0:8fe9c25985e5 121 * @class CDM7160
MichalKozlowski 0:8fe9c25985e5 122 * @brief Implementation of CDM7160 sensor CO2 library
MichalKozlowski 0:8fe9c25985e5 123 */
MichalKozlowski 0:8fe9c25985e5 124 class CDM7160{
MichalKozlowski 0:8fe9c25985e5 125
MichalKozlowski 0:8fe9c25985e5 126 public:
MichalKozlowski 0:8fe9c25985e5 127
MichalKozlowski 0:8fe9c25985e5 128 /** eReg read/write commands
MichalKozlowski 0:8fe9c25985e5 129 */
MichalKozlowski 0:8fe9c25985e5 130 enum eReg {
MichalKozlowski 0:8fe9c25985e5 131 RST = 0x00, // software reset
MichalKozlowski 0:8fe9c25985e5 132 CTL = 0x01, // operating mode
MichalKozlowski 0:8fe9c25985e5 133 ST1 = 0x02, // status register
MichalKozlowski 0:8fe9c25985e5 134 DAL = 0x03, // LSB CO2 data
MichalKozlowski 0:8fe9c25985e5 135 DAH = 0x04, // MSB CO2 data
MichalKozlowski 0:8fe9c25985e5 136 HPA = 0x09, // atmosferic pressure
MichalKozlowski 0:8fe9c25985e5 137 HIT = 0x0A, // altitude
MichalKozlowski 0:8fe9c25985e5 138 ALHI = 0x0C, // upper limit treshold for alarm
MichalKozlowski 0:8fe9c25985e5 139 ALLO = 0x0D, // lower limit treshold for alarm
MichalKozlowski 0:8fe9c25985e5 140 FUNC = 0x0F, // PWM output
MichalKozlowski 0:8fe9c25985e5 141 ERR = 0x10 // Self-test
MichalKozlowski 0:8fe9c25985e5 142 };
MichalKozlowski 0:8fe9c25985e5 143
MichalKozlowski 0:8fe9c25985e5 144 /** Reg: CTL / Addr: 0x01 / Permission: RW / Bits:2-0
MichalKozlowski 0:8fe9c25985e5 145 */
MichalKozlowski 0:8fe9c25985e5 146 enum eControlMode {
MichalKozlowski 0:8fe9c25985e5 147 PWR_DOWN = 0x00,
MichalKozlowski 0:8fe9c25985e5 148 CONTIN = 0x06
MichalKozlowski 0:8fe9c25985e5 149 };
MichalKozlowski 0:8fe9c25985e5 150
MichalKozlowski 0:8fe9c25985e5 151 /** Reg: FUNC / Addr: 0x0F / Permission: RW / Bits: 3, 2, 0
MichalKozlowski 0:8fe9c25985e5 152 */
MichalKozlowski 0:8fe9c25985e5 153 enum eFunctionSetting {
MichalKozlowski 0:8fe9c25985e5 154 PWME_ON = 1 << 0,
MichalKozlowski 0:8fe9c25985e5 155 PWME_OFF = 0 << 0,
MichalKozlowski 0:8fe9c25985e5 156 HPAE_ON = 1 << 2,
MichalKozlowski 0:8fe9c25985e5 157 HPAE_OFF = 0 << 2,
MichalKozlowski 0:8fe9c25985e5 158 PWMR_LOW = 1 << 3,
MichalKozlowski 0:8fe9c25985e5 159 PWMR_HIGH = 0 << 3
MichalKozlowski 0:8fe9c25985e5 160 };
MichalKozlowski 0:8fe9c25985e5 161
MichalKozlowski 0:8fe9c25985e5 162 /** cdm7160 stuct prototype
MichalKozlowski 0:8fe9c25985e5 163 */
MichalKozlowski 0:8fe9c25985e5 164 struct cdm7160_t {
MichalKozlowski 0:8fe9c25985e5 165 uint8_t addr;
MichalKozlowski 0:8fe9c25985e5 166 int co2;
MichalKozlowski 0:8fe9c25985e5 167 uint8_t control;
MichalKozlowski 0:8fe9c25985e5 168 uint8_t status;
MichalKozlowski 0:8fe9c25985e5 169 uint16_t highAlertLimit;
MichalKozlowski 0:8fe9c25985e5 170 uint16_t lowAlertLimit;
MichalKozlowski 0:8fe9c25985e5 171 uint16_t atmosferic_pressure;
MichalKozlowski 0:8fe9c25985e5 172 uint16_t altitude;
MichalKozlowski 0:8fe9c25985e5 173 uint8_t settings;
MichalKozlowski 0:8fe9c25985e5 174 uint8_t selfDiag;
MichalKozlowski 0:8fe9c25985e5 175 };
MichalKozlowski 0:8fe9c25985e5 176 cdm7160_t cdm7160;
MichalKozlowski 0:8fe9c25985e5 177
MichalKozlowski 0:8fe9c25985e5 178 /** Create an CDM7160 instance
MichalKozlowski 0:8fe9c25985e5 179 * which is connected to specified I2C pins with specified address
MichalKozlowski 0:8fe9c25985e5 180 *
MichalKozlowski 0:8fe9c25985e5 181 * @param sda I2C-bus SDA pin
MichalKozlowski 0:8fe9c25985e5 182 * @param scl I2C-bus SCL pin
MichalKozlowski 0:8fe9c25985e5 183 * @param addr (option) I2C-bus address (default: 0x4A)
MichalKozlowski 0:8fe9c25985e5 184 */
MichalKozlowski 0:8fe9c25985e5 185 CDM7160(PinName sda, PinName scl, uint8_t addr = CDM7160_I2C_ADDR);
MichalKozlowski 0:8fe9c25985e5 186
MichalKozlowski 0:8fe9c25985e5 187 /** Create a CDM7160 instance
MichalKozlowski 0:8fe9c25985e5 188 * which is connected to specified I2C pins with specified address
MichalKozlowski 0:8fe9c25985e5 189 *
MichalKozlowski 0:8fe9c25985e5 190 * @param i2c_obj I2C object (instance)
MichalKozlowski 0:8fe9c25985e5 191 * @param addr (option) I2C-bus address (default: 0x4A)
MichalKozlowski 0:8fe9c25985e5 192 */
MichalKozlowski 0:8fe9c25985e5 193 /** Constructor of CDM7160
MichalKozlowski 0:8fe9c25985e5 194 */
MichalKozlowski 0:8fe9c25985e5 195 CDM7160(I2C &i2c_obj, uint8_t addr = CDM7160_I2C_ADDR);
MichalKozlowski 0:8fe9c25985e5 196
MichalKozlowski 0:8fe9c25985e5 197 /** Destructor of CDM7160
MichalKozlowski 0:8fe9c25985e5 198 */
MichalKozlowski 0:8fe9c25985e5 199 ~CDM7160();
MichalKozlowski 0:8fe9c25985e5 200
MichalKozlowski 0:8fe9c25985e5 201
MichalKozlowski 0:8fe9c25985e5 202 /** Initialize the CDM7160
MichalKozlowski 0:8fe9c25985e5 203 * Calling function control() and set sensor in continuous mode
MichalKozlowski 0:8fe9c25985e5 204 * @return CDM7160 address if successful. CDM7160_ERROR if fail
MichalKozlowski 0:8fe9c25985e5 205 */
MichalKozlowski 0:8fe9c25985e5 206 int8_t init();
MichalKozlowski 0:8fe9c25985e5 207
MichalKozlowski 1:4a0a9c03afba 208 /** Integrated Initialize the CDM7160 sensor
MichalKozlowski 1:4a0a9c03afba 209 * By default: set Atmospheric pressure and altitude, set sensor in countinous mode,
MichalKozlowski 1:4a0a9c03afba 210 * enable atm. pressure and altitude correction in measurement and
MichalKozlowski 1:4a0a9c03afba 211 * disable PWM output PIN
MichalKozlowski 1:4a0a9c03afba 212 * @return CDM7160 address if successful. CDM7160_ERROR if fail
MichalKozlowski 1:4a0a9c03afba 213 */
MichalKozlowski 1:4a0a9c03afba 214 int8_t initIntegrated( uint16_t hpa = 1005, uint16_t height = 130,
MichalKozlowski 1:4a0a9c03afba 215 eControlMode mode = CONTIN,
MichalKozlowski 2:207717b5eaee 216 eFunctionSetting atm_alt_correct= HPAE_ON,
MichalKozlowski 1:4a0a9c03afba 217 eFunctionSetting pwm_conce = PWMR_LOW,
MichalKozlowski 1:4a0a9c03afba 218 eFunctionSetting pwm_pin = PWME_OFF);
MichalKozlowski 1:4a0a9c03afba 219
MichalKozlowski 0:8fe9c25985e5 220 /** Measure CO2 in ppm
MichalKozlowski 0:8fe9c25985e5 221 * Measurement is stored in struct variable: int co2
MichalKozlowski 0:8fe9c25985e5 222 * @return co2 if sucessful. CDM7160_ERROR if fail
MichalKozlowski 0:8fe9c25985e5 223 */
MichalKozlowski 0:8fe9c25985e5 224 int getCO2();
MichalKozlowski 0:8fe9c25985e5 225
MichalKozlowski 0:8fe9c25985e5 226
MichalKozlowski 0:8fe9c25985e5 227 /** Periodic Measurement mode of the CDM7160
MichalKozlowski 0:8fe9c25985e5 228 * CDM7160 goes into idle state
MichalKozlowski 0:8fe9c25985e5 229 * @param mode - operation mode (Power down or continuous)
MichalKozlowski 0:8fe9c25985e5 230 * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail
MichalKozlowski 0:8fe9c25985e5 231 */
MichalKozlowski 0:8fe9c25985e5 232 int8_t control(eControlMode mode = CONTIN);
MichalKozlowski 0:8fe9c25985e5 233
MichalKozlowski 0:8fe9c25985e5 234 /** Soft reset command
MichalKozlowski 0:8fe9c25985e5 235 * soft reset for CDM7160 sensor
MichalKozlowski 0:8fe9c25985e5 236 * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail
MichalKozlowski 0:8fe9c25985e5 237 */
MichalKozlowski 0:8fe9c25985e5 238 int8_t softReset();
MichalKozlowski 0:8fe9c25985e5 239
MichalKozlowski 0:8fe9c25985e5 240 /** Read Status Register
MichalKozlowski 0:8fe9c25985e5 241 * status information of busy, alarm, connection on CAD0 and MSEL
MichalKozlowski 0:8fe9c25985e5 242 * Data stored in variable: uint8_t status
MichalKozlowski 0:8fe9c25985e5 243 * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail
MichalKozlowski 0:8fe9c25985e5 244 */
MichalKozlowski 0:8fe9c25985e5 245 int8_t getStatus();
MichalKozlowski 0:8fe9c25985e5 246
MichalKozlowski 0:8fe9c25985e5 247 /** Set Alert High and Low Limit
MichalKozlowski 0:8fe9c25985e5 248 * @param high_limit - high limit value
MichalKozlowski 0:8fe9c25985e5 249 * @param low_limit - low limit value
MichalKozlowski 0:8fe9c25985e5 250 * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail
MichalKozlowski 0:8fe9c25985e5 251 */
MichalKozlowski 0:8fe9c25985e5 252 int8_t setAlarmLimits(uint16_t high_limit = 1000, uint16_t low_limit = 400);
MichalKozlowski 0:8fe9c25985e5 253
MichalKozlowski 0:8fe9c25985e5 254 /** Read Alert High and Low Limit
MichalKozlowski 0:8fe9c25985e5 255 * Data stored in variable: uint16_t highAlertLimit, uint16_t lowAlertLimit
MichalKozlowski 0:8fe9c25985e5 256 * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail
MichalKozlowski 0:8fe9c25985e5 257 */
MichalKozlowski 0:8fe9c25985e5 258 int8_t getAlarmLimits();
MichalKozlowski 0:8fe9c25985e5 259
MichalKozlowski 0:8fe9c25985e5 260 /** Set Atmospheric Pressure and Altitude - to correct calculation CO2
MichalKozlowski 0:8fe9c25985e5 261 * @param hpa - atmospheric pressure value in [hPa]
MichalKozlowski 0:8fe9c25985e5 262 * @param height - altitude value in [m]
MichalKozlowski 0:8fe9c25985e5 263 * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail
MichalKozlowski 0:8fe9c25985e5 264 */
MichalKozlowski 0:8fe9c25985e5 265 int8_t setAirPressureAndAltitude(uint16_t hpa = 1005, uint16_t height = 130);
MichalKozlowski 0:8fe9c25985e5 266
MichalKozlowski 0:8fe9c25985e5 267 /** Read Atmospheric Pressure and Altitude - correction value calculation CO2
MichalKozlowski 0:8fe9c25985e5 268 * Data stored in variable: uint16_t atmosferic_pressure, uint16_t altitude
MichalKozlowski 0:8fe9c25985e5 269 * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail
MichalKozlowski 0:8fe9c25985e5 270 */
MichalKozlowski 0:8fe9c25985e5 271 int8_t getAirPressureAndAltitude();
MichalKozlowski 0:8fe9c25985e5 272
MichalKozlowski 0:8fe9c25985e5 273 /** Read Setting Register
MichalKozlowski 0:8fe9c25985e5 274 * settings information of PWM pin enable/disable, concentration range and
MichalKozlowski 0:8fe9c25985e5 275 * atmospheric pressure and altitude correction enable/disable
MichalKozlowski 0:8fe9c25985e5 276 * Data stored in variable: uint8_t settings
MichalKozlowski 0:8fe9c25985e5 277 * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail
MichalKozlowski 0:8fe9c25985e5 278 */
MichalKozlowski 0:8fe9c25985e5 279 int8_t getSettings();
MichalKozlowski 0:8fe9c25985e5 280
MichalKozlowski 0:8fe9c25985e5 281 /** Set Atmospheric Pressure and Altitude - to correct calculation CO2
MichalKozlowski 0:8fe9c25985e5 282 * @param atm_alt_correct - atm. pressure and altitude correction Enable/Disable
MichalKozlowski 0:8fe9c25985e5 283 * @param pwm_conce - PWM output contrntration High/Low
MichalKozlowski 0:8fe9c25985e5 284 * @param pwm_pin - PWM pin enable/disable
MichalKozlowski 0:8fe9c25985e5 285 * @return CDM7160_SUCCESS if successful. CDM7160_ERROR if fail
MichalKozlowski 0:8fe9c25985e5 286 */
MichalKozlowski 0:8fe9c25985e5 287 int8_t setSettings(eFunctionSetting atm_alt_correct= HPAE_OFF,
MichalKozlowski 0:8fe9c25985e5 288 eFunctionSetting pwm_conce = PWMR_LOW,
MichalKozlowski 0:8fe9c25985e5 289 eFunctionSetting pwm_pin = PWME_OFF);
MichalKozlowski 0:8fe9c25985e5 290
MichalKozlowski 0:8fe9c25985e5 291 /** Self-test - diagnosis errors
MichalKozlowski 0:8fe9c25985e5 292 * Data stored in variable: uint8_t selfDiag
MichalKozlowski 0:8fe9c25985e5 293 * @return CDM7160 address if successful. CDM7160_ERROR if fail
MichalKozlowski 0:8fe9c25985e5 294 */
MichalKozlowski 0:8fe9c25985e5 295 int8_t selfDiagnosis();
MichalKozlowski 0:8fe9c25985e5 296
MichalKozlowski 0:8fe9c25985e5 297 private:
MichalKozlowski 0:8fe9c25985e5 298
MichalKozlowski 0:8fe9c25985e5 299 /**
MichalKozlowski 0:8fe9c25985e5 300 * Pointers to classes.
MichalKozlowski 0:8fe9c25985e5 301 */
MichalKozlowski 0:8fe9c25985e5 302 I2C *pI2C;
MichalKozlowski 0:8fe9c25985e5 303
MichalKozlowski 0:8fe9c25985e5 304 /**
MichalKozlowski 0:8fe9c25985e5 305 * References to classes.
MichalKozlowski 0:8fe9c25985e5 306 */
MichalKozlowski 0:8fe9c25985e5 307 I2C &_I2C;
MichalKozlowski 0:8fe9c25985e5 308
MichalKozlowski 0:8fe9c25985e5 309 /*
MichalKozlowski 0:8fe9c25985e5 310 * ----- PRIVATE I2C FUNCTIONS -----
MichalKozlowski 0:8fe9c25985e5 311 */
MichalKozlowski 0:8fe9c25985e5 312
MichalKozlowski 0:8fe9c25985e5 313 /** I2C read function.
MichalKozlowski 0:8fe9c25985e5 314 * @param data[] Data array to read from I2C
MichalKozlowski 0:8fe9c25985e5 315 * @param len Data length to read
MichalKozlowski 0:8fe9c25985e5 316 * @return Read status - 0 on success, non-0 on failure.
MichalKozlowski 0:8fe9c25985e5 317 */
MichalKozlowski 0:8fe9c25985e5 318 int8_t read(char data[], uint8_t len);
MichalKozlowski 0:8fe9c25985e5 319
MichalKozlowski 0:8fe9c25985e5 320 /**
MichalKozlowski 0:8fe9c25985e5 321 * Write I2C register.
MichalKozlowski 0:8fe9c25985e5 322 * @param reg Register (1-Byte) to write
MichalKozlowski 0:8fe9c25985e5 323 * @returns Write status - 0 on success, non-0 on failure.
MichalKozlowski 0:8fe9c25985e5 324 */
MichalKozlowski 0:8fe9c25985e5 325 int8_t write(uint8_t reg);
MichalKozlowski 0:8fe9c25985e5 326
MichalKozlowski 0:8fe9c25985e5 327 /** I2C write function.
MichalKozlowski 0:8fe9c25985e5 328 * @param reg Register (1-Byte) to Write
MichalKozlowski 0:8fe9c25985e5 329 * @param data[] Data array to write
MichalKozlowski 0:8fe9c25985e5 330 * @param len Data length to write
MichalKozlowski 0:8fe9c25985e5 331 * @return Write status - 0 on success, non-0 on failure.
MichalKozlowski 0:8fe9c25985e5 332 */
MichalKozlowski 0:8fe9c25985e5 333 int8_t write(uint8_t reg, char data[], uint8_t len);
MichalKozlowski 0:8fe9c25985e5 334
MichalKozlowski 0:8fe9c25985e5 335
MichalKozlowski 0:8fe9c25985e5 336 };
MichalKozlowski 0:8fe9c25985e5 337 #endif // CDM7160_H