Skip to content

Commit 73ab85b

Browse files
committed
Support PureAnalogPin pins in AdvancedADC
1 parent 38836d5 commit 73ab85b

File tree

1 file changed

+34
-5
lines changed

1 file changed

+34
-5
lines changed

src/AdvancedADC.h

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
#define __ADVANCED_ADC_H__
2222

2323
#include "AdvancedAnalog.h"
24+
#if __has_include("pure_analog_pins.h")
25+
#include "pure_analog_pins.h"
26+
#endif
2427

2528
struct adc_descr_t;
2629

@@ -41,14 +44,25 @@ class AdvancedADC {
4144
adc_descr_t *descr;
4245
PinName adc_pins[AN_MAX_ADC_CHANNELS];
4346

47+
template <typename P>
48+
static inline PinName _toPinName(P p) {
49+
return analogPinToPinName(p);
50+
}
51+
#if __has_include("pure_analog_pins.h")
52+
static inline PinName _toPinName(PureAnalogPin p) {
53+
extern AnalogPinDescription g_pureAAnalogPinDescription[];
54+
return g_pureAAnalogPinDescription[p.get()].name;
55+
}
56+
#endif
57+
4458
public:
45-
template <typename ... T>
46-
AdvancedADC(pin_size_t p0, T ... args): n_channels(0), descr(nullptr) {
47-
static_assert(sizeof ...(args) < AN_MAX_ADC_CHANNELS,
59+
template <typename P0, typename ... P>
60+
AdvancedADC(P0 p0, P ... pins): n_channels(0), descr(nullptr) {
61+
static_assert(sizeof ...(pins) < AN_MAX_ADC_CHANNELS,
4862
"A maximum of 16 channels can be sampled successively.");
4963

50-
for (auto p : {p0, args...}) {
51-
adc_pins[n_channels++] = analogPinToPinName(p);
64+
for (PinName pin : { _toPinName(p0), _toPinName(pins)... }) {
65+
adc_pins[n_channels++] = pin;
5266
}
5367
}
5468
AdvancedADC(): n_channels(0), descr(nullptr) {
@@ -72,6 +86,21 @@ class AdvancedADC {
7286
n_channels = n_pins;
7387
return begin(resolution, sample_rate, n_samples, n_buffers, start, sample_time);
7488
}
89+
#if __has_include("pure_analog_pins.h")
90+
int begin(uint32_t resolution, uint32_t sample_rate, size_t n_samples,
91+
size_t n_buffers, size_t n_pins, PureAnalogPin *pins, bool start=true,
92+
adc_sample_time_t sample_time=AN_ADC_SAMPLETIME_8_5) {
93+
if (n_pins > AN_MAX_ADC_CHANNELS) {
94+
n_pins = AN_MAX_ADC_CHANNELS;
95+
}
96+
for (size_t i = 0; i < n_pins; ++i) {
97+
adc_pins[i] = _toPinName(pins[i]);
98+
}
99+
100+
n_channels = n_pins;
101+
return begin(resolution, sample_rate, n_samples, n_buffers, start, sample_time);
102+
}
103+
#endif
75104
int start(uint32_t sample_rate);
76105
int stop();
77106
void clear();

0 commit comments

Comments
 (0)