@@ -29,6 +29,7 @@ extern "C" {
29
29
}
30
30
31
31
extern " C" uint16_t *g_pcmbuf;
32
+ static PDMClass *_instance = NULL ;
32
33
33
34
PDMClass::PDMClass (int dinPin, int clkPin, int pwrPin) :
34
35
_dinPin(dinPin),
@@ -40,10 +41,12 @@ PDMClass::PDMClass(int dinPin, int clkPin, int pwrPin) :
40
41
_samplerate(-1 ),
41
42
_init(-1 )
42
43
{
44
+ _instance = this ;
43
45
}
44
46
45
47
PDMClass::~PDMClass ()
46
48
{
49
+ _instance = NULL ;
47
50
}
48
51
49
52
int PDMClass::begin (int channels, int sampleRate) {
@@ -63,6 +66,10 @@ int PDMClass::begin(int channels, int sampleRate) {
63
66
i2c.write (8 << 1 , data, sizeof (data));
64
67
}
65
68
69
+ if (_instance != this ) {
70
+ return 0 ;
71
+ }
72
+
66
73
_channels = channels;
67
74
_samplerate = sampleRate;
68
75
@@ -102,6 +109,9 @@ int PDMClass::read(void* buffer, size_t size)
102
109
void PDMClass::onReceive (void (*function)(void ))
103
110
{
104
111
_onReceive = function;
112
+ if (_instance != this ) {
113
+ _instance = this ;
114
+ }
105
115
}
106
116
107
117
void PDMClass::setGain (int gain)
@@ -146,15 +156,15 @@ void PDMClass::IrqHandler(bool halftranfer)
146
156
extern " C" {
147
157
void PDMIrqHandler (bool halftranfer)
148
158
{
149
- PDM. IrqHandler (halftranfer);
159
+ _instance-> IrqHandler (halftranfer);
150
160
}
151
161
152
162
void PDMsetBufferSize (int size) {
153
- PDM. setBufferSize (size);
163
+ _instance-> setBufferSize (size);
154
164
}
155
165
156
166
size_t PDMgetBufferSize () {
157
- return PDM .getBufferSize ();
167
+ return _instance .getBufferSize ();
158
168
}
159
169
}
160
170
0 commit comments