Skip to content

Commit e040e8f

Browse files
committed
feat(ads1x15): update to use pure read function and protect internal read_two function with mutex to make API more consistent with the other analog expander classes
1 parent e2d5c8f commit e040e8f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+201
-195
lines changed

components/ads1x15/example/main/ads1x15_example.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,9 @@ extern "C" void app_main(void) {
4343
I2C_TIMEOUT_MS / portTICK_PERIOD_MS);
4444
return err == ESP_OK;
4545
};
46-
auto ads_read = [](uint8_t dev_addr, uint8_t reg_addr, uint8_t *data, size_t data_len) {
47-
auto err = i2c_master_write_read_device(I2C_NUM, dev_addr, &reg_addr,
48-
1, // size of addr
49-
data, data_len, I2C_TIMEOUT_MS / portTICK_PERIOD_MS);
46+
auto ads_read = [](uint8_t dev_addr, uint8_t *data, size_t data_len) {
47+
auto err = i2c_master_read_from_device(I2C_NUM, dev_addr,
48+
data, data_len, I2C_TIMEOUT_MS / portTICK_PERIOD_MS);
5049
return err == ESP_OK;
5150
};
5251
// make the actual ads class

components/ads1x15/include/ads1x15.hpp

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

33
#include <chrono>
44
#include <functional>
5+
#include <mutex>
56
#include <thread>
67

78
#include "logger.hpp"
@@ -29,12 +30,11 @@ class Ads1x15 {
2930
/**
3031
* @brief Function to read bytes from the device.
3132
* @param dev_addr Address of the device to write to.
32-
* @param reg_addr Register address to read from.
3333
* @param data Pointer to array of bytes to read into.
3434
* @param data_len Number of data bytes to read.
3535
* @return True if the read was successful.
3636
*/
37-
typedef std::function<bool(uint8_t dev_addr, uint8_t reg_addr, uint8_t *data, size_t data_len)>
37+
typedef std::function<bool(uint8_t dev_addr, uint8_t *data, size_t data_len)>
3838
read_fn;
3939

4040
/**
@@ -167,8 +167,18 @@ class Ads1x15 {
167167
}
168168

169169
uint16_t read_two_(uint8_t reg_addr, std::error_code &ec) {
170+
// lock the mutex so that we don't have multiple threads trying to read
171+
// from the device at the same time
172+
std::lock_guard<std::mutex> lock(mutex_);
173+
// write the reg addr we want to read from
174+
bool success = write_(address_, &reg_addr, 1);
175+
if (!success) {
176+
ec = std::make_error_code(std::errc::io_error);
177+
return 0;
178+
}
179+
// then read the two bytes
170180
uint8_t data[2];
171-
bool success = read_(address_, reg_addr, data, 2);
181+
success = read_(address_, data, 2);
172182
if (!success) {
173183
ec = std::make_error_code(std::errc::io_error);
174184
return 0;
@@ -202,6 +212,7 @@ class Ads1x15 {
202212
uint8_t address_;
203213
write_fn write_;
204214
read_fn read_;
215+
std::mutex mutex_;
205216
espp::Logger logger_;
206217
};
207218
} // namespace espp

docs/adc/adc_types.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@
145145
<li><a href="index.html">ADC APIs</a> &raquo;</li>
146146
<li>ADC Types</li>
147147
<li class="wy-breadcrumbs-aside">
148-
<a href="https://github.com/esp-cpp/espp/blob/57b5b0c/docs/en/adc/adc_types.rst" class="fa fa-github"> Edit on GitHub</a>
148+
<a href="https://github.com/esp-cpp/espp/blob/e2d5c8f/docs/en/adc/adc_types.rst" class="fa fa-github"> Edit on GitHub</a>
149149
</li>
150150
</ul>
151151
<hr/>
@@ -162,7 +162,7 @@ <h2>API Reference<a class="headerlink" href="#api-reference" title="Permalink to
162162
<section id="header-file">
163163
<h3>Header File<a class="headerlink" href="#header-file" title="Permalink to this headline"></a></h3>
164164
<ul class="simple">
165-
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/57b5b0c/components/adc/include/adc_types.hpp">components/adc/include/adc_types.hpp</a></p></li>
165+
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/e2d5c8f/components/adc/include/adc_types.hpp">components/adc/include/adc_types.hpp</a></p></li>
166166
</ul>
167167
</section>
168168
</section>

docs/adc/ads1x15.html

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@
146146
<li><a href="index.html">ADC APIs</a> &raquo;</li>
147147
<li>ADS1x15 I2C ADC</li>
148148
<li class="wy-breadcrumbs-aside">
149-
<a href="https://github.com/esp-cpp/espp/blob/57b5b0c/docs/en/adc/ads1x15.rst" class="fa fa-github"> Edit on GitHub</a>
149+
<a href="https://github.com/esp-cpp/espp/blob/e2d5c8f/docs/en/adc/ads1x15.rst" class="fa fa-github"> Edit on GitHub</a>
150150
</li>
151151
</ul>
152152
<hr/>
@@ -163,7 +163,7 @@ <h2>API Reference<a class="headerlink" href="#api-reference" title="Permalink to
163163
<section id="header-file">
164164
<h3>Header File<a class="headerlink" href="#header-file" title="Permalink to this headline"></a></h3>
165165
<ul class="simple">
166-
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/57b5b0c/components/ads1x15/include/ads1x15.hpp">components/ads1x15/include/ads1x15.hpp</a></p></li>
166+
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/e2d5c8f/components/ads1x15/include/ads1x15.hpp">components/ads1x15/include/ads1x15.hpp</a></p></li>
167167
</ul>
168168
</section>
169169
<section id="classes">
@@ -196,10 +196,9 @@ <h4>ADS1X15 Example<a class="headerlink" href="#classespp_1_1_ads1x15_1ads1x15_e
196196
<span class="w"> </span><span class="n">I2C_TIMEOUT_MS</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">portTICK_PERIOD_MS</span><span class="p">);</span>
197197
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">err</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">ESP_OK</span><span class="p">;</span>
198198
<span class="w"> </span><span class="p">};</span>
199-
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">ads_read</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[](</span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">dev_addr</span><span class="p">,</span><span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">reg_addr</span><span class="p">,</span><span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="o">*</span><span class="n">data</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">data_len</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
200-
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">i2c_master_write_read_device</span><span class="p">(</span><span class="n">I2C_NUM</span><span class="p">,</span><span class="w"> </span><span class="n">dev_addr</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">reg_addr</span><span class="p">,</span>
201-
<span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="c1">// size of addr</span>
202-
<span class="w"> </span><span class="n">data</span><span class="p">,</span><span class="w"> </span><span class="n">data_len</span><span class="p">,</span><span class="w"> </span><span class="n">I2C_TIMEOUT_MS</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">portTICK_PERIOD_MS</span><span class="p">);</span>
199+
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">ads_read</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[](</span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">dev_addr</span><span class="p">,</span><span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="o">*</span><span class="n">data</span><span class="p">,</span><span class="w"> </span><span class="kt">size_t</span><span class="w"> </span><span class="n">data_len</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
200+
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">err</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">i2c_master_read_from_device</span><span class="p">(</span><span class="n">I2C_NUM</span><span class="p">,</span><span class="w"> </span><span class="n">dev_addr</span><span class="p">,</span>
201+
<span class="w"> </span><span class="n">data</span><span class="p">,</span><span class="w"> </span><span class="n">data_len</span><span class="p">,</span><span class="w"> </span><span class="n">I2C_TIMEOUT_MS</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">portTICK_PERIOD_MS</span><span class="p">);</span>
203202
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">err</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">ESP_OK</span><span class="p">;</span>
204203
<span class="w"> </span><span class="p">};</span>
205204
<span class="w"> </span><span class="c1">// make the actual ads class</span>
@@ -412,23 +411,20 @@ <h4>ADS1X15 Example<a class="headerlink" href="#classespp_1_1_ads1x15_1ads1x15_e
412411

413412
<dl class="cpp type">
414413
<dt class="sig sig-object cpp" id="_CPPv4N4espp7Ads1x157read_fnE">
415-
<span id="_CPPv3N4espp7Ads1x157read_fnE"></span><span id="_CPPv2N4espp7Ads1x157read_fnE"></span><span id="espp::Ads1x15::read_fn"></span><span class="target" id="classespp_1_1_ads1x15_1aecd513e77ac87d7ebae9f5564271d8b0"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">function</span></span><span class="p"><span class="pre">&lt;</span></span><span class="kt"><span class="pre">bool</span></span><span class="p"><span class="pre">(</span></span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n"><span class="pre">dev_addr</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n"><span class="pre">reg_addr</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n"><span class="pre">data_len</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">read_fn</span></span></span><a class="headerlink" href="#_CPPv4N4espp7Ads1x157read_fnE" title="Permalink to this definition"></a><br /></dt>
414+
<span id="_CPPv3N4espp7Ads1x157read_fnE"></span><span id="_CPPv2N4espp7Ads1x157read_fnE"></span><span id="espp::Ads1x15::read_fn"></span><span class="target" id="classespp_1_1_ads1x15_1a0cf2985d72eef846708a709cfffc75a6"></span><span class="k"><span class="pre">typedef</span></span><span class="w"> </span><span class="n"><span class="pre">std</span></span><span class="p"><span class="pre">::</span></span><span class="n"><span class="pre">function</span></span><span class="p"><span class="pre">&lt;</span></span><span class="kt"><span class="pre">bool</span></span><span class="p"><span class="pre">(</span></span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="n"><span class="pre">dev_addr</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="n"><span class="pre">uint8_t</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="n"><span class="pre">size_t</span></span><span class="w"> </span><span class="n"><span class="pre">data_len</span></span><span class="p"><span class="pre">)</span></span><span class="p"><span class="pre">&gt;</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">read_fn</span></span></span><a class="headerlink" href="#_CPPv4N4espp7Ads1x157read_fnE" title="Permalink to this definition"></a><br /></dt>
416415
<dd><p>Function to read bytes from the device. </p>
417416
<dl class="field-list simple">
418417
<dt class="field-odd">Param dev_addr</dt>
419418
<dd class="field-odd"><p>Address of the device to write to. </p>
420419
</dd>
421-
<dt class="field-even">Param reg_addr</dt>
422-
<dd class="field-even"><p>Register address to read from. </p>
423-
</dd>
424-
<dt class="field-odd">Param data</dt>
425-
<dd class="field-odd"><p>Pointer to array of bytes to read into. </p>
420+
<dt class="field-even">Param data</dt>
421+
<dd class="field-even"><p>Pointer to array of bytes to read into. </p>
426422
</dd>
427-
<dt class="field-even">Param data_len</dt>
428-
<dd class="field-even"><p>Number of data bytes to read. </p>
423+
<dt class="field-odd">Param data_len</dt>
424+
<dd class="field-odd"><p>Number of data bytes to read. </p>
429425
</dd>
430-
<dt class="field-odd">Return</dt>
431-
<dd class="field-odd"><p>True if the read was successful. </p>
426+
<dt class="field-even">Return</dt>
427+
<dd class="field-even"><p>True if the read was successful. </p>
432428
</dd>
433429
</dl>
434430
</dd></dl>

docs/adc/ads7138.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@
146146
<li><a href="index.html">ADC APIs</a> &raquo;</li>
147147
<li>ADS7138 I2C ADC</li>
148148
<li class="wy-breadcrumbs-aside">
149-
<a href="https://github.com/esp-cpp/espp/blob/57b5b0c/docs/en/adc/ads7138.rst" class="fa fa-github"> Edit on GitHub</a>
149+
<a href="https://github.com/esp-cpp/espp/blob/e2d5c8f/docs/en/adc/ads7138.rst" class="fa fa-github"> Edit on GitHub</a>
150150
</li>
151151
</ul>
152152
<hr/>
@@ -168,7 +168,7 @@ <h2>API Reference<a class="headerlink" href="#api-reference" title="Permalink to
168168
<section id="header-file">
169169
<h3>Header File<a class="headerlink" href="#header-file" title="Permalink to this headline"></a></h3>
170170
<ul class="simple">
171-
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/57b5b0c/components/ads7138/include/ads7138.hpp">components/ads7138/include/ads7138.hpp</a></p></li>
171+
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/e2d5c8f/components/ads7138/include/ads7138.hpp">components/ads7138/include/ads7138.hpp</a></p></li>
172172
</ul>
173173
</section>
174174
<section id="classes">

docs/adc/continuous_adc.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@
146146
<li><a href="index.html">ADC APIs</a> &raquo;</li>
147147
<li>Continuous ADC</li>
148148
<li class="wy-breadcrumbs-aside">
149-
<a href="https://github.com/esp-cpp/espp/blob/57b5b0c/docs/en/adc/continuous_adc.rst" class="fa fa-github"> Edit on GitHub</a>
149+
<a href="https://github.com/esp-cpp/espp/blob/e2d5c8f/docs/en/adc/continuous_adc.rst" class="fa fa-github"> Edit on GitHub</a>
150150
</li>
151151
</ul>
152152
<hr/>
@@ -168,7 +168,7 @@ <h2>API Reference<a class="headerlink" href="#api-reference" title="Permalink to
168168
<section id="header-file">
169169
<h3>Header File<a class="headerlink" href="#header-file" title="Permalink to this headline"></a></h3>
170170
<ul class="simple">
171-
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/57b5b0c/components/adc/include/continuous_adc.hpp">components/adc/include/continuous_adc.hpp</a></p></li>
171+
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/e2d5c8f/components/adc/include/continuous_adc.hpp">components/adc/include/continuous_adc.hpp</a></p></li>
172172
</ul>
173173
</section>
174174
<section id="classes">

docs/adc/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@
138138
<li><a href="../index.html" class="icon icon-home"></a> &raquo;</li>
139139
<li>ADC APIs</li>
140140
<li class="wy-breadcrumbs-aside">
141-
<a href="https://github.com/esp-cpp/espp/blob/57b5b0c/docs/en/adc/index.rst" class="fa fa-github"> Edit on GitHub</a>
141+
<a href="https://github.com/esp-cpp/espp/blob/e2d5c8f/docs/en/adc/index.rst" class="fa fa-github"> Edit on GitHub</a>
142142
</li>
143143
</ul>
144144
<hr/>

docs/adc/oneshot_adc.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@
146146
<li><a href="index.html">ADC APIs</a> &raquo;</li>
147147
<li>Oneshot ADC</li>
148148
<li class="wy-breadcrumbs-aside">
149-
<a href="https://github.com/esp-cpp/espp/blob/57b5b0c/docs/en/adc/oneshot_adc.rst" class="fa fa-github"> Edit on GitHub</a>
149+
<a href="https://github.com/esp-cpp/espp/blob/e2d5c8f/docs/en/adc/oneshot_adc.rst" class="fa fa-github"> Edit on GitHub</a>
150150
</li>
151151
</ul>
152152
<hr/>
@@ -167,7 +167,7 @@ <h2>API Reference<a class="headerlink" href="#api-reference" title="Permalink to
167167
<section id="header-file">
168168
<h3>Header File<a class="headerlink" href="#header-file" title="Permalink to this headline"></a></h3>
169169
<ul class="simple">
170-
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/57b5b0c/components/adc/include/oneshot_adc.hpp">components/adc/include/oneshot_adc.hpp</a></p></li>
170+
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/e2d5c8f/components/adc/include/oneshot_adc.hpp">components/adc/include/oneshot_adc.hpp</a></p></li>
171171
</ul>
172172
</section>
173173
<section id="classes">

docs/adc/tla2528.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@
146146
<li><a href="index.html">ADC APIs</a> &raquo;</li>
147147
<li>TLA2528 I2C ADC</li>
148148
<li class="wy-breadcrumbs-aside">
149-
<a href="https://github.com/esp-cpp/espp/blob/57b5b0c/docs/en/adc/tla2528.rst" class="fa fa-github"> Edit on GitHub</a>
149+
<a href="https://github.com/esp-cpp/espp/blob/e2d5c8f/docs/en/adc/tla2528.rst" class="fa fa-github"> Edit on GitHub</a>
150150
</li>
151151
</ul>
152152
<hr/>
@@ -168,7 +168,7 @@ <h2>API Reference<a class="headerlink" href="#api-reference" title="Permalink to
168168
<section id="header-file">
169169
<h3>Header File<a class="headerlink" href="#header-file" title="Permalink to this headline"></a></h3>
170170
<ul class="simple">
171-
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/57b5b0c/components/tla2528/include/tla2528.hpp">components/tla2528/include/tla2528.hpp</a></p></li>
171+
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/e2d5c8f/components/tla2528/include/tla2528.hpp">components/tla2528/include/tla2528.hpp</a></p></li>
172172
</ul>
173173
</section>
174174
<section id="classes">

docs/bldc/bldc_driver.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@
142142
<li><a href="index.html">BLDC APIs</a> &raquo;</li>
143143
<li>BLDC Driver</li>
144144
<li class="wy-breadcrumbs-aside">
145-
<a href="https://github.com/esp-cpp/espp/blob/57b5b0c/docs/en/bldc/bldc_driver.rst" class="fa fa-github"> Edit on GitHub</a>
145+
<a href="https://github.com/esp-cpp/espp/blob/e2d5c8f/docs/en/bldc/bldc_driver.rst" class="fa fa-github"> Edit on GitHub</a>
146146
</li>
147147
</ul>
148148
<hr/>
@@ -159,7 +159,7 @@ <h2>API Reference<a class="headerlink" href="#api-reference" title="Permalink to
159159
<section id="header-file">
160160
<h3>Header File<a class="headerlink" href="#header-file" title="Permalink to this headline"></a></h3>
161161
<ul class="simple">
162-
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/57b5b0c/components/bldc_driver/include/bldc_driver.hpp">components/bldc_driver/include/bldc_driver.hpp</a></p></li>
162+
<li><p><a class="reference external" href="https://github.com/esp-cpp/espp/blob/e2d5c8f/components/bldc_driver/include/bldc_driver.hpp">components/bldc_driver/include/bldc_driver.hpp</a></p></li>
163163
</ul>
164164
</section>
165165
<section id="classes">

0 commit comments

Comments
 (0)