@@ -122,14 +122,23 @@ 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;
141
+
133
142
}
134
143
135
144
int arduino::MbedI2C::peek () {
@@ -151,13 +160,16 @@ void arduino::MbedI2C::receiveThd() {
151
160
onRequestCb ();
152
161
}
153
162
if (usedTxBuffer != 0 ) {
163
+ core_util_critical_section_enter ();
154
164
slave->write ((const char *) txBuffer, usedTxBuffer);
165
+ core_util_critical_section_exit ();
155
166
usedTxBuffer = 0 ;
156
167
}
157
168
// slave->stop();
158
169
break ;
159
170
case mbed::I2CSlave::WriteGeneral:
160
171
case mbed::I2CSlave::WriteAddressed:
172
+ core_util_critical_section_enter ();
161
173
rxBuffer.clear ();
162
174
char buf[240 ];
163
175
c = slave->read (buf, sizeof (buf));
@@ -171,6 +183,7 @@ void arduino::MbedI2C::receiveThd() {
171
183
if (rxBuffer.available () > 0 && onReceiveCb != NULL ) {
172
184
onReceiveCb (rxBuffer.available ());
173
185
}
186
+ core_util_critical_section_exit ();
174
187
// slave->stop();
175
188
break ;
176
189
case mbed::I2CSlave::NoData:
0 commit comments