Skip to content

Commit ab2ed90

Browse files
committed
Wire slave receiver with repeated starts working
1 parent 4efe39e commit ab2ed90

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

libraries/Wire/Wire.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -219,13 +219,26 @@ void TwoWire::onService(void)
219219
{
220220
if ( sercom->isSlaveWIRE() )
221221
{
222-
if(sercom->isAddressMatch()) //Address Match
222+
if(sercom->isStopDetectedWIRE() ||
223+
(sercom->isAddressMatch() && sercom->isRestartDetectedWIRE())) //Stop or Restart detected
223224
{
224225
sercom->prepareAckBitWIRE();
225226
sercom->prepareCommandBitsWire(0x03);
226227

227-
//Is a request ?
228-
if(sercom->isMasterReadOperationWIRE())
228+
//Calling onReceiveCallback, if exists
229+
if(onReceiveCallback)
230+
{
231+
onReceiveCallback(available());
232+
}
233+
234+
rxBuffer.clear();
235+
}
236+
else if(sercom->isAddressMatch()) //Address Match
237+
{
238+
sercom->prepareAckBitWIRE();
239+
sercom->prepareCommandBitsWire(0x03);
240+
241+
if(sercom->isMasterReadOperationWIRE()) //Is a request ?
229242
{
230243
//Calling onRequestCallback, if exists
231244
if(onRequestCallback)
@@ -247,19 +260,6 @@ void TwoWire::onService(void)
247260

248261
sercom->prepareCommandBitsWire(0x03);
249262
}
250-
else if(sercom->isStopDetectedWIRE() || sercom->isRestartDetectedWIRE()) //Stop or Restart detected
251-
{
252-
sercom->prepareAckBitWIRE();
253-
sercom->prepareCommandBitsWire(0x03);
254-
255-
//Calling onReceiveCallback, if exists
256-
if(onReceiveCallback)
257-
{
258-
onReceiveCallback(available());
259-
}
260-
261-
rxBuffer.clear();
262-
}
263263
}
264264
}
265265

0 commit comments

Comments
 (0)