@@ -122,14 +122,22 @@ size_t arduino::MbedI2C::write(const uint8_t* data, int len) {
122122}
123123
124124int arduino::MbedI2C::read () {
125+ int rv = -1 ;
126+ core_util_critical_section_enter ();
127+
125128 if (rxBuffer.available ()) {
126- return rxBuffer.read_char ();
129+
130+ rv = rxBuffer.read_char ();
127131 }
128- return -1 ;
132+ core_util_critical_section_exit ();
133+ return rv;
129134}
130135
131136int 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;
133141}
134142
135143int arduino::MbedI2C::peek () {
@@ -151,13 +159,16 @@ void arduino::MbedI2C::receiveThd() {
151159 onRequestCb ();
152160 }
153161 if (usedTxBuffer != 0 ) {
162+ core_util_critical_section_enter ();
154163 slave->write ((const char *) txBuffer, usedTxBuffer);
164+ core_util_critical_section_exit ();
155165 usedTxBuffer = 0 ;
156166 }
157167 // slave->stop();
158168 break ;
159169 case mbed::I2CSlave::WriteGeneral:
160170 case mbed::I2CSlave::WriteAddressed:
171+ core_util_critical_section_enter ();
161172 rxBuffer.clear ();
162173 char buf[240 ];
163174 c = slave->read (buf, sizeof (buf));
@@ -171,6 +182,7 @@ void arduino::MbedI2C::receiveThd() {
171182 if (rxBuffer.available () > 0 && onReceiveCb != NULL ) {
172183 onReceiveCb (rxBuffer.available ());
173184 }
185+ core_util_critical_section_exit ();
174186 // slave->stop();
175187 break ;
176188 case mbed::I2CSlave::NoData:
0 commit comments