Skip to content

Commit e444f3c

Browse files
sandeepmistryfacchinm
authored andcommitted
Change slave_writeData to be pointer and use buffer inside Wire.cpp
1 parent e745280 commit e444f3c

File tree

3 files changed

+17
-32
lines changed

3 files changed

+17
-32
lines changed

libraries/Wire/src/Wire.cpp

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -181,39 +181,20 @@ uint8_t TwoWire::endTransmission(void)
181181
// or after beginTransmission(address)
182182
size_t TwoWire::write(uint8_t data)
183183
{
184-
/* If master transmitter */
185-
if(transmitting){
186-
187-
/* Check if buffer is full */
188-
if(txBufferLength >= BUFFER_LENGTH){
189-
setWriteError();
190-
return 0;
191-
}
192-
193-
/* Put byte in txBuffer */
194-
txBuffer[txBufferIndex] = data;
195-
txBufferIndex++;
196-
197-
/* Update buffer length */
198-
txBufferLength = txBufferIndex;
199-
184+
/* Check if buffer is full */
185+
if(txBufferLength >= BUFFER_LENGTH){
186+
setWriteError();
187+
return 0;
200188
}
201-
202-
/* If slave transmitter */
203-
else{
204-
205-
/* Check if buffer full */
206-
if(slave_bytesToWrite >= TWI_BUFFER_SIZE){
207-
setWriteError();
208-
return 0;
209-
}
210189

211-
slave_writeData[slave_bytesToWrite] = data;
212-
slave_bytesToWrite++;
190+
/* Put byte in txBuffer */
191+
txBuffer[txBufferIndex] = data;
192+
txBufferIndex++;
213193

214-
}
194+
/* Update buffer length */
195+
txBufferLength = txBufferIndex;
215196

216-
return 1;
197+
return 1;
217198
}
218199

219200
// must be called in:
@@ -324,10 +305,14 @@ void TwoWire::onRequestService(void)
324305
}
325306

326307
// reset slave write buffer iterator var
327-
slave_bytesToWrite = 0;
308+
txBufferIndex = 0;
309+
txBufferLength = 0;
328310

329311
// alert user program
330312
user_onRequest();
313+
314+
slave_bytesToWrite = txBufferLength;
315+
slave_writeData = txBuffer;
331316
}
332317

333318
// sets function called on slave write

libraries/Wire/src/utility/twi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ void TWI_SlaveWriteHandler(){
644644
/* If ACK, master expects more data */
645645
else {
646646

647-
if(slave_bytesWritten < TWI_BUFFER_SIZE){
647+
if(slave_bytesWritten < slave_bytesToWrite){
648648
uint8_t data = slave_writeData[slave_bytesWritten];
649649
TWI0.SDATA = data;
650650
slave_bytesWritten++;

libraries/Wire/src/utility/twi.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ register8_t master_result; /*!< Result of transactio
8787
/* Slave variables */
8888
static void (*TWI_onSlaveTransmit)(void) __attribute__((unused));
8989
static void (*TWI_onSlaveReceive)(volatile uint8_t*, int) __attribute__((unused));
90-
register8_t slave_writeData[TWI_BUFFER_SIZE];
90+
register8_t* slave_writeData;
9191
register8_t slave_readData[TWI_BUFFER_SIZE];
9292
register8_t slave_bytesToWrite;
9393
register8_t slave_bytesWritten;

0 commit comments

Comments
 (0)