diff --git a/libraries/Wire/Wire.cpp b/libraries/Wire/Wire.cpp index bae7b9e6e..f3e07bff4 100644 --- a/libraries/Wire/Wire.cpp +++ b/libraries/Wire/Wire.cpp @@ -219,61 +219,60 @@ void TwoWire::onRequest(void(*function)(void)) void TwoWire::onService(void) { - if ( sercom->isSlaveWIRE() ) + if (sercom->isSlaveWIRE()) { - if(sercom->isStopDetectedWIRE() || - (sercom->isAddressMatch() && sercom->isRestartDetectedWIRE() && !sercom->isMasterReadOperationWIRE())) //Stop or Restart detected + if (sercom->isStopDetectedWIRE() || sercom->isAddressMatch()) { sercom->prepareAckBitWIRE(); sercom->prepareCommandBitsWire(0x03); - //Calling onReceiveCallback, if exists - if(onReceiveCallback) - { - onReceiveCallback(available()); + if (sercom->isStopDetectedWIRE() || + (sercom->isRestartDetectedWIRE() && available())) + { // Stop or Restart after Rx detected + + // Calling onReceiveCallback, if exists + if (onReceiveCallback) + { + onReceiveCallback(available()); + } + rxBuffer.clear(); } - - rxBuffer.clear(); - } - else if(sercom->isAddressMatch()) //Address Match - { - sercom->prepareAckBitWIRE(); - sercom->prepareCommandBitsWire(0x03); - if(sercom->isMasterReadOperationWIRE()) //Is a request ? - { + if (sercom->isMasterReadOperationWIRE()) + { // Is a request ? txBuffer.clear(); - transmissionBegun = true; - - //Calling onRequestCallback, if exists - if(onRequestCallback) + // Calling onRequestCallback, if exists + if (onRequestCallback) { onRequestCallback(); } } } - else if(sercom->isDataReadyWIRE()) + else if (sercom->isDataReadyWIRE()) { if (sercom->isMasterReadOperationWIRE()) { uint8_t c = 0xff; - - if( txBuffer.available() ) { + if (txBuffer.available()) + { c = txBuffer.read_char(); } - transmissionBegun = sercom->sendDataSlaveWIRE(c); - } else { //Received data - if (rxBuffer.isFull()) { - sercom->prepareNackBitWIRE(); - } else { - //Store data + } + else + { + // Received data + if (rxBuffer.isFull()) + { + sercom->prepareNackBitWIRE(); + } + else + { + // Store data rxBuffer.store_char(sercom->readDataWIRE()); - - sercom->prepareAckBitWIRE(); + sercom->prepareAckBitWIRE(); } - sercom->prepareCommandBitsWire(0x03); } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy