fix(ltr390): stuck ALS values when configured for ALS+UV readings (#6723)

This commit is contained in:
Marcin Krasowski 2024-05-13 01:25:41 +02:00 committed by Jesse Hills
parent 448b4f5cb6
commit 4ec2ef27a8
No known key found for this signature in database
GPG key ID: BEAAE804EFD8E83A

View file

@ -8,6 +8,9 @@ namespace ltr390 {
static const char *const TAG = "ltr390"; static const char *const TAG = "ltr390";
static const uint8_t LTR390_WAKEUP_TIME = 10;
static const uint8_t LTR390_SETTLE_TIME = 5;
static const uint8_t LTR390_MAIN_CTRL = 0x00; static const uint8_t LTR390_MAIN_CTRL = 0x00;
static const uint8_t LTR390_MEAS_RATE = 0x04; static const uint8_t LTR390_MEAS_RATE = 0x04;
static const uint8_t LTR390_GAIN = 0x05; static const uint8_t LTR390_GAIN = 0x05;
@ -101,10 +104,12 @@ void LTR390Component::read_mode_(int mode_index) {
std::bitset<8> ctrl = this->reg(LTR390_MAIN_CTRL).get(); std::bitset<8> ctrl = this->reg(LTR390_MAIN_CTRL).get();
ctrl[LTR390_CTRL_MODE] = mode; ctrl[LTR390_CTRL_MODE] = mode;
ctrl[LTR390_CTRL_EN] = true;
this->reg(LTR390_MAIN_CTRL) = ctrl.to_ulong(); this->reg(LTR390_MAIN_CTRL) = ctrl.to_ulong();
// After the sensor integration time do the following // After the sensor integration time do the following
this->set_timeout(((uint32_t) RESOLUTIONVALUE[this->res_]) * 100, [this, mode_index]() { this->set_timeout(((uint32_t) RESOLUTIONVALUE[this->res_]) * 100 + LTR390_WAKEUP_TIME + LTR390_SETTLE_TIME,
[this, mode_index]() {
// Read from the sensor // Read from the sensor
std::get<1>(this->mode_funcs_[mode_index])(); std::get<1>(this->mode_funcs_[mode_index])();
@ -113,6 +118,10 @@ void LTR390Component::read_mode_(int mode_index) {
if (mode_index + 1 < (int) this->mode_funcs_.size()) { if (mode_index + 1 < (int) this->mode_funcs_.size()) {
this->read_mode_(mode_index + 1); this->read_mode_(mode_index + 1);
} else { } else {
// put sensor in standby
std::bitset<8> ctrl = this->reg(LTR390_MAIN_CTRL).get();
ctrl[LTR390_CTRL_EN] = false;
this->reg(LTR390_MAIN_CTRL) = ctrl.to_ulong();
this->reading_ = false; this->reading_ = false;
} }
}); });