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
2528struct 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