Skip to content

Commit 58a8c25

Browse files
authored
fix(adc): Add mutex to oneshot adc public APIs (#338)
1 parent f1cbaf3 commit 58a8c25

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

components/adc/include/continuous_adc.hpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -342,11 +342,11 @@ class ContinuousAdc : public espp::BaseComponent {
342342

343343
#if ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED
344344
logger_.info("calibration scheme version is {}", "Curve Fitting");
345-
adc_cali_curve_fitting_config_t cali_config = {
346-
.unit_id = unit,
347-
.atten = atten,
348-
.bitwidth = bitwidth,
349-
};
345+
adc_cali_curve_fitting_config_t cali_config;
346+
memset(&cali_config, 0, sizeof(cali_config));
347+
cali_config.unit_id = unit;
348+
cali_config.atten = atten;
349+
cali_config.bitwidth = bitwidth;
350350
ret = adc_cali_create_scheme_curve_fitting(&cali_config, &handle);
351351
if (ret == ESP_OK) {
352352
calibrated = true;
@@ -357,11 +357,11 @@ class ContinuousAdc : public espp::BaseComponent {
357357
// cppcheck-suppress knownConditionTrueFalse
358358
if (!calibrated) {
359359
logger_.info("calibration scheme version is {}", "Line Fitting");
360-
adc_cali_line_fitting_config_t cali_config = {
361-
.unit_id = unit,
362-
.atten = atten,
363-
.bitwidth = bitwidth,
364-
};
360+
adc_cali_line_fitting_config_t cali_config;
361+
memset(&cali_config, 0, sizeof(cali_config));
362+
cali_config.unit_id = unit;
363+
cali_config.atten = atten;
364+
cali_config.bitwidth = bitwidth;
365365
ret = adc_cali_create_scheme_line_fitting(&cali_config, &handle);
366366
if (ret == ESP_OK) {
367367
calibrated = true;

components/adc/include/oneshot_adc.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <algorithm>
44
#include <atomic>
5+
#include <mutex>
56
#include <optional>
67
#include <unordered_map>
78

@@ -76,6 +77,7 @@ class OneshotAdc : public BaseComponent {
7677
std::vector<int> read_all_mv() {
7778
std::vector<int> values;
7879
values.reserve(configs_.size());
80+
std::lock_guard<std::recursive_mutex> lock(mutex_);
7981
for (const auto &config : configs_) {
8082
int raw = 0;
8183
auto err = adc_oneshot_read(adc_handle_, config.channel, &raw);
@@ -96,6 +98,7 @@ class OneshotAdc : public BaseComponent {
9698
* it was configured).
9799
*/
98100
std::optional<int> read_raw(const AdcConfig &config) {
101+
std::lock_guard<std::recursive_mutex> lock(mutex_);
99102
if (std::find(configs_.begin(), configs_.end(), config) != configs_.end()) {
100103
int raw;
101104
auto err = adc_oneshot_read(adc_handle_, config.channel, &raw);
@@ -120,6 +123,7 @@ class OneshotAdc : public BaseComponent {
120123
* (if it was configured).
121124
*/
122125
std::optional<int> read_mv(const AdcConfig &config) {
126+
std::lock_guard<std::recursive_mutex> lock(mutex_);
123127
auto maybe_raw = read_raw(config);
124128
if (maybe_raw.has_value()) {
125129
return raw_to_mv(maybe_raw.value());
@@ -205,6 +209,7 @@ class OneshotAdc : public BaseComponent {
205209
}
206210
}
207211

212+
std::recursive_mutex mutex_;
208213
std::vector<AdcConfig> configs_;
209214
adc_oneshot_unit_handle_t adc_handle_;
210215
adc_cali_handle_t adc_cali_handle_;

0 commit comments

Comments
 (0)