From ab2ed909b3d04d3cc42c510d8252a42874240b06 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry <s.mistry@arduino.cc> Date: Tue, 22 Sep 2015 14:55:39 -0400 Subject: [PATCH] Wire slave receiver with repeated starts working --- libraries/Wire/Wire.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/libraries/Wire/Wire.cpp b/libraries/Wire/Wire.cpp index 273b03e7..8abfd3ac 100644 --- a/libraries/Wire/Wire.cpp +++ b/libraries/Wire/Wire.cpp @@ -219,13 +219,26 @@ void TwoWire::onService(void) { if ( sercom->isSlaveWIRE() ) { - if(sercom->isAddressMatch()) //Address Match + if(sercom->isStopDetectedWIRE() || + (sercom->isAddressMatch() && sercom->isRestartDetectedWIRE())) //Stop or Restart detected { sercom->prepareAckBitWIRE(); sercom->prepareCommandBitsWire(0x03); - //Is a request ? - if(sercom->isMasterReadOperationWIRE()) + //Calling onReceiveCallback, if exists + if(onReceiveCallback) + { + onReceiveCallback(available()); + } + + rxBuffer.clear(); + } + else if(sercom->isAddressMatch()) //Address Match + { + sercom->prepareAckBitWIRE(); + sercom->prepareCommandBitsWire(0x03); + + if(sercom->isMasterReadOperationWIRE()) //Is a request ? { //Calling onRequestCallback, if exists if(onRequestCallback) @@ -247,19 +260,6 @@ void TwoWire::onService(void) sercom->prepareCommandBitsWire(0x03); } - else if(sercom->isStopDetectedWIRE() || sercom->isRestartDetectedWIRE()) //Stop or Restart detected - { - sercom->prepareAckBitWIRE(); - sercom->prepareCommandBitsWire(0x03); - - //Calling onReceiveCallback, if exists - if(onReceiveCallback) - { - onReceiveCallback(available()); - } - - rxBuffer.clear(); - } } } -- GitLab