diff --git a/libraries/Wire/Wire.cpp b/libraries/Wire/Wire.cpp index ddd3a3ce4..d34ad83b0 100644 --- a/libraries/Wire/Wire.cpp +++ b/libraries/Wire/Wire.cpp @@ -122,14 +122,22 @@ size_t arduino::MbedI2C::write(const uint8_t* data, int len) { } int arduino::MbedI2C::read() { + int rv = -1; + core_util_critical_section_enter(); + if (rxBuffer.available()) { - return rxBuffer.read_char(); + + rv = rxBuffer.read_char(); } - return -1; + core_util_critical_section_exit(); + return rv; } int arduino::MbedI2C::available() { - return rxBuffer.available(); + core_util_critical_section_enter(); + int rv = rxBuffer.available(); + core_util_critical_section_exit(); + return rv; } int arduino::MbedI2C::peek() { @@ -151,13 +159,16 @@ void arduino::MbedI2C::receiveThd() { onRequestCb(); } if (usedTxBuffer != 0) { + core_util_critical_section_enter(); slave->write((const char *) txBuffer, usedTxBuffer); + core_util_critical_section_exit(); usedTxBuffer = 0; } //slave->stop(); break; case mbed::I2CSlave::WriteGeneral: case mbed::I2CSlave::WriteAddressed: + core_util_critical_section_enter(); rxBuffer.clear(); char buf[240]; c = slave->read(buf, sizeof(buf)); @@ -171,6 +182,7 @@ void arduino::MbedI2C::receiveThd() { if (rxBuffer.available() > 0 && onReceiveCb != NULL) { onReceiveCb(rxBuffer.available()); } + core_util_critical_section_exit(); //slave->stop(); break; case mbed::I2CSlave::NoData:
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: