drivers/sps30: Add sleep mode
This commit is contained in:
parent
0b6394c55d
commit
a368b0bc36
@ -287,6 +287,24 @@ int sps30_read_serial_number(const sps30_t *dev, char *str, size_t len);
|
|||||||
*/
|
*/
|
||||||
int sps30_reset(const sps30_t *dev);
|
int sps30_reset(const sps30_t *dev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Put the sensor in sleep mode
|
||||||
|
*
|
||||||
|
* @param[in] dev Pointer to an SPS30 device handle
|
||||||
|
*
|
||||||
|
* @return #SPS30_OK on success, negative #sps30_error_code_t on error
|
||||||
|
*/
|
||||||
|
int sps30_sleep(const sps30_t *dev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Wake up sensor from sleep mode (returns sensor to Idle mode)
|
||||||
|
*
|
||||||
|
* @param[in] dev Pointer to an SPS30 device handle
|
||||||
|
*
|
||||||
|
* @return #SPS30_OK on success, negative #sps30_error_code_t on error
|
||||||
|
*/
|
||||||
|
int sps30_wakeup(const sps30_t *dev);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -50,6 +50,8 @@ typedef enum {
|
|||||||
SPS30_CMD_RD_ARTICLE = 0xD025, /**< Read article code */
|
SPS30_CMD_RD_ARTICLE = 0xD025, /**< Read article code */
|
||||||
SPS30_CMD_RD_SERIAL = 0xD033, /**< Read serial number */
|
SPS30_CMD_RD_SERIAL = 0xD033, /**< Read serial number */
|
||||||
SPS30_CMD_RESET = 0xD304, /**< Reset */
|
SPS30_CMD_RESET = 0xD304, /**< Reset */
|
||||||
|
SPS30_CMD_SLEEP = 0x1001, /**< Sleep */
|
||||||
|
SPS30_CMD_WAKE_UP = 0x1103 /**< Wake-up */
|
||||||
} sps30_cmd_t;
|
} sps30_cmd_t;
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
@ -283,3 +285,18 @@ int sps30_reset(const sps30_t *dev)
|
|||||||
assert(dev);
|
assert(dev);
|
||||||
return _rx_tx_data(dev, SPS30_CMD_RESET, NULL, 0, false);
|
return _rx_tx_data(dev, SPS30_CMD_RESET, NULL, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sps30_sleep(const sps30_t *dev)
|
||||||
|
{
|
||||||
|
assert(dev);
|
||||||
|
sps30_stop_measurement(dev);
|
||||||
|
return _rx_tx_data(dev, SPS30_CMD_SLEEP, NULL, 0, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
int sps30_wakeup(const sps30_t *dev)
|
||||||
|
{
|
||||||
|
assert(dev);
|
||||||
|
/* Send I2C start stop sequence to re-enable I2C interface on sensor */
|
||||||
|
i2c_write_bytes(dev->p.i2c_dev, SPS30_I2C_ADDR, NULL, 0, 0);
|
||||||
|
return _rx_tx_data(dev, SPS30_CMD_WAKE_UP, NULL, 0, false);
|
||||||
|
}
|
||||||
|
|||||||
@ -25,6 +25,7 @@
|
|||||||
#define TEST_START_DELAY_S (2U)
|
#define TEST_START_DELAY_S (2U)
|
||||||
#define SENSOR_RESET_DELAY_S (10U)
|
#define SENSOR_RESET_DELAY_S (10U)
|
||||||
#define SENSOR_STARTUP_DELAY_S (10U)
|
#define SENSOR_STARTUP_DELAY_S (10U)
|
||||||
|
#define SENSOR_SLEEP_WAKE_DELAY_S (5U)
|
||||||
#define POLL_FOR_READY_S (1U)
|
#define POLL_FOR_READY_S (1U)
|
||||||
#define NUM_OF_MEASUREMENTS (10U)
|
#define NUM_OF_MEASUREMENTS (10U)
|
||||||
|
|
||||||
@ -102,6 +103,16 @@ int main(void)
|
|||||||
|
|
||||||
xtimer_sleep(SENSOR_RESET_DELAY_S);
|
xtimer_sleep(SENSOR_RESET_DELAY_S);
|
||||||
|
|
||||||
|
/* Put the sensor in sleep */
|
||||||
|
ec = sps30_sleep(&dev);
|
||||||
|
error |= _print_error("sleep", ec);
|
||||||
|
xtimer_sleep(SENSOR_SLEEP_WAKE_DELAY_S);
|
||||||
|
|
||||||
|
/* Wake-up the sensor */
|
||||||
|
ec = sps30_wakeup(&dev);
|
||||||
|
error |= _print_error("wake-up", ec);
|
||||||
|
xtimer_sleep(SENSOR_SLEEP_WAKE_DELAY_S);
|
||||||
|
|
||||||
/* start the sensor again again... */
|
/* start the sensor again again... */
|
||||||
ec = sps30_start_measurement(&dev);
|
ec = sps30_start_measurement(&dev);
|
||||||
error |= _print_error("start_measurement", ec);
|
error |= _print_error("start_measurement", ec);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user