@@ -122,14 +122,23 @@ 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+
125128if (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;
141+
133142}
134143
135144int arduino::MbedI2C::peek () {
@@ -151,13 +160,16 @@ void arduino::MbedI2C::receiveThd() {
151160onRequestCb ();
152161}
153162if (usedTxBuffer !=0 ) {
163+ core_util_critical_section_enter ();
154164slave->write ((const char *) txBuffer, usedTxBuffer);
165+ core_util_critical_section_exit ();
155166usedTxBuffer =0 ;
156167}
157168// slave->stop();
158169break ;
159170case mbed::I2CSlave::WriteGeneral:
160171case mbed::I2CSlave::WriteAddressed:
172+ core_util_critical_section_enter ();
161173rxBuffer.clear ();
162174char buf[240 ];
163175c = slave->read (buf,sizeof (buf));
@@ -171,6 +183,7 @@ void arduino::MbedI2C::receiveThd() {
171183if (rxBuffer.available () >0 && onReceiveCb !=NULL ) {
172184onReceiveCb (rxBuffer.available ());
173185}
186+ core_util_critical_section_exit ();
174187// slave->stop();
175188break ;
176189case mbed::I2CSlave::NoData: