Diff: sps30.cpp
- Revision:
- 2:549bee9a4cd0
- Parent:
- 0:9221dac25d3b
- Child:
- 4:7558ddc3c7d6
--- a/sps30.cpp Tue Mar 05 03:05:33 2019 +0000
+++ b/sps30.cpp Tue Mar 05 07:01:55 2019 +0000
@@ -15,10 +15,10 @@
}
//-----------------------------------------------------------------------------
-// start auto-measurement with barometer reading (in mB)
+// start auto-measurement
//
-uint8_t sps30::startMeasurement() // done
+uint8_t sps30::startMeasurement()
{
i2cBuff[0] = SPS30_CMMD_STRT_MEAS >> 8;
i2cBuff[1] = SPS30_CMMD_STRT_MEAS & 255;
@@ -33,7 +33,7 @@
//-----------------------------------------------------------------------------
// Stop auto-measurement
-uint8_t sps30::stopMeasurement() // done
+uint8_t sps30::stopMeasurement()
{
i2cBuff[0] = SPS30_CMMD_STOP_MEAS >> 8;
i2cBuff[1] = SPS30_CMMD_STOP_MEAS & 255;
@@ -45,7 +45,7 @@
//-----------------------------------------------------------------------------
// Get ready status value
-uint8_t sps30::getReadyStatus() // done
+uint8_t sps30::getReadyStatus()
{
i2cBuff[0] = SPS30_CMMD_GET_READY_STAT >> 8;
i2cBuff[1] = SPS30_CMMD_GET_READY_STAT & 255;
@@ -65,7 +65,7 @@
//-----------------------------------------------------------------------------
// Get all the measurement values, stick them into the array
-uint8_t sps30::readMeasurement() // editing
+uint8_t sps30::readMeasurement()
{
i2cBuff[0] = SPS30_CMMD_READ_MEAS >> 8;
i2cBuff[1] = SPS30_CMMD_READ_MEAS & 255;
@@ -74,7 +74,6 @@
_i2c.read(SPS30_I2C_ADDR | 1, i2cBuff, 60, false);
- /* TO DO: update the members used in the class */
uint16_t stat = (i2cBuff[0] << 8) | i2cBuff[1];
mass_1p0_m = stat;
uint8_t dat = sps30::checkCrc2b(stat, i2cBuff[2]);
@@ -315,6 +314,85 @@
}
//-----------------------------------------------------------------------------
+// Read Auto Cleaning Interval on the SPS30
+
+uint8_t sps30::readAutoCleanInterval()
+{
+ i2cBuff[0] = SPS30_CMMD_AUTO_CLEAN_INTV >> 8;
+ i2cBuff[1] = SPS30_CMMD_AUTO_CLEAN_INTV & 255;
+
+ int res = _i2c.write(SPS30_I2C_ADDR, i2cBuff, 2, false);
+ if(res) return SPSnoAckERROR;
+
+ _i2c.read(SPS30_I2C_ADDR | 1, i2cBuff, 6, false);
+
+ uint16_t stat = (i2cBuff[0] << 8) | i2cBuff[1];
+ clean_interval_m = stat;
+ uint8_t dat = sps30::checkCrc2b(stat, i2cBuff[2]);
+ if(dat == SPScrcERROR) return SPScrcERROR;
+
+ stat = (i2cBuff[3] << 8) | i2cBuff[4];
+ clean_interval_l = stat;
+ dat = sps30::checkCrc2b(stat, i2cBuff[5]);
+ if(dat == SPScrcERROR) return SPScrcERROR;
+
+ clean_interval_i = (clean_interval_m << 16) | clean_interval_l;
+
+ return SPSnoERROR;
+}
+
+//-----------------------------------------------------------------------------
+// Set Auto Cleaning Interval on the SPS30
+
+uint8_t sps30::setAutoCleanInterval(uint32_t set_interval)
+{
+ uint16_t set_interval_m = set_interval >> 16;
+ uint16_t set_interval_l = set_interval & 65535;
+
+ i2cBuff[0] = SPS30_CMMD_AUTO_CLEAN_INTV >> 8;
+ i2cBuff[1] = SPS30_CMMD_AUTO_CLEAN_INTV & 255;
+
+ i2cBuff[2] = set_interval_m >> 8;
+ i2cBuff[3] = set_interval_m & 255;
+ i2cBuff[4] = sps30::calcCrc2b(set_interval_m);
+
+ i2cBuff[5] = set_interval_l >> 8;
+ i2cBuff[6] = set_interval_l & 255;
+ i2cBuff[7] = sps30::calcCrc2b(set_interval_l);
+
+ int res = _i2c.write(SPS30_I2C_ADDR, i2cBuff, 8, false);
+ if(res) return SPSnoAckERROR;
+
+ _i2c.read(SPS30_I2C_ADDR | 1, i2cBuff, 6, false);
+
+ uint16_t stat = (i2cBuff[0] << 8) | i2cBuff[1];
+ clean_interval_m = stat;
+ uint8_t dat = sps30::checkCrc2b(stat, i2cBuff[2]);
+ if(dat == SPScrcERROR) return SPScrcERROR;
+
+ stat = (i2cBuff[3] << 8) | i2cBuff[4];
+ clean_interval_l = stat;
+ dat = sps30::checkCrc2b(stat, i2cBuff[5]);
+ if(dat == SPScrcERROR) return SPScrcERROR;
+
+ clean_interval_i = (clean_interval_m << 16) | clean_interval_l;
+
+ return SPSnoERROR;
+}
+
+//-----------------------------------------------------------------------------
+// Perform manual fan cleaning
+
+uint8_t sps30::startFanClean()
+{
+ i2cBuff[0] = SPS30_CMMD_START_FAN_CLEAN >> 8;
+ i2cBuff[1] = SPS30_CMMD_START_FAN_CLEAN & 255;
+ int res = _i2c.write(SPS30_I2C_ADDR, i2cBuff, 2, false);
+ if(res) return SPSnoAckERROR;
+ return SPSnoERROR;
+}
+
+//-----------------------------------------------------------------------------
// Perform a soft reset on the SPS30
uint8_t sps30::softReset()