@@ -122,14 +122,22 @@ size_t arduino::MbedI2C::write(const uint8_t* data, int len) {
122
122
}
123
123
124
124
int arduino::MbedI2C::read () {
125
+ int rv = -1 ;
126
+ core_util_critical_section_enter ();
127
+
125
128
if (rxBuffer.available ()) {
126
- return rxBuffer.read_char ();
129
+
130
+ rv = rxBuffer.read_char ();
127
131
}
128
- return -1 ;
132
+ core_util_critical_section_exit ();
133
+ return rv;
129
134
}
130
135
131
136
int arduino::MbedI2C::available () {
132
- return rxBuffer.available ();
137
+ core_util_critical_section_enter ();
138
+ int rv = rxBuffer.available ();
139
+ core_util_critical_section_exit ();
140
+ return rv;
133
141
}
134
142
135
143
int arduino::MbedI2C::peek () {
@@ -151,13 +159,16 @@ void arduino::MbedI2C::receiveThd() {
151
159
onRequestCb ();
152
160
}
153
161
if (usedTxBuffer != 0 ) {
162
+ core_util_critical_section_enter ();
154
163
slave->write ((const char *) txBuffer, usedTxBuffer);
164
+ core_util_critical_section_exit ();
155
165
usedTxBuffer = 0 ;
156
166
}
157
167
// slave->stop();
158
168
break ;
159
169
case mbed::I2CSlave::WriteGeneral:
160
170
case mbed::I2CSlave::WriteAddressed:
171
+ core_util_critical_section_enter ();
161
172
rxBuffer.clear ();
162
173
char buf[240 ];
163
174
c = slave->read (buf, sizeof (buf));
@@ -171,6 +182,7 @@ void arduino::MbedI2C::receiveThd() {
171
182
if (rxBuffer.available () > 0 && onReceiveCb != NULL ) {
172
183
onReceiveCb (rxBuffer.available ());
173
184
}
185
+ core_util_critical_section_exit ();
174
186
// slave->stop();
175
187
break ;
176
188
case mbed::I2CSlave::NoData:
0 commit comments