Define names for twi errors

Rebase of https://github.com/arduino/Arduino/pull/2152
This commit is contained in:
Mickael_Germain 2017-11-13 15:52:12 +01:00 committed by Martino Facchin
parent 6c861d8c70
commit 2d3ad65e6b
2 changed files with 24 additions and 16 deletions

View File

@ -17,6 +17,7 @@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Modified 2012 by Todd Krein (todd@krein.org) to implement repeated starts
Modified 2014 by Mickael Germain to define names for twi errors.
*/
#include <math.h>
@ -217,11 +218,11 @@ uint8_t twi_readFrom(uint8_t address, uint8_t* data, uint8_t length, uint8_t sen
* length: number of bytes in array
* wait: boolean indicating to wait for write or not
* sendStop: boolean indicating whether or not to send a stop at the end
* Output 0 .. success
* 1 .. length to long for buffer
* 2 .. address send, NACK received
* 3 .. data send, NACK received
* 4 .. other twi error (lost bus arbitration, bus error, ..)
* Output TWI_SUCCESS .. success
* TWI_DATA_TOO_LONG .. length to long for buffer
* TWI_NACK_ON_ADDR .. address send, NACK received
* TWI_NACK_ON_DATA .. data send, NACK received
* TWI_OTHER_ERROR .. other twi error (lost bus arbitration, bus error, ..)
*/
uint8_t twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait, uint8_t sendStop)
{
@ -229,7 +230,7 @@ uint8_t twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait
// ensure data will fit into buffer
if(TWI_BUFFER_LENGTH < length){
return 1;
return TWI_DATA_TOO_LONG;
}
// wait until twi is ready, become master transmitter
@ -280,13 +281,13 @@ uint8_t twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait
}
if (twi_error == 0xFF)
return 0; // success
return TWI_SUCCESS; // success
else if (twi_error == TW_MT_SLA_NACK)
return 2; // error: address send, nack received
return TWI_NACK_ON_ADDR; // error: address send, nack received
else if (twi_error == TW_MT_DATA_NACK)
return 3; // error: data send, nack received
return TWI_NACK_ON_DATA; // error: data send, nack received
else
return 4; // other twi error
return TWI_OTHER_ERROR; // other twi error
}
/*
@ -295,9 +296,9 @@ uint8_t twi_writeTo(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait
* must be called in slave tx event callback
* Input data: pointer to byte array
* length: number of bytes in array
* Output 1 length too long for buffer
* 2 not slave transmitter
* 0 ok
* Output TWI_DATA_TOO_LONG .. length too long for buffer
* TWI_NOT_SLAVE_TX .. not slave transmitter
* 0 .. ok
*/
uint8_t twi_transmit(const uint8_t* data, uint8_t length)
{
@ -305,12 +306,12 @@ uint8_t twi_transmit(const uint8_t* data, uint8_t length)
// ensure data will fit into buffer
if(TWI_BUFFER_LENGTH < (twi_txBufferLength+length)){
return 1;
return TWI_DATA_TOO_LONG;
}
// ensure we are currently a slave transmitter
if(TWI_STX != twi_state){
return 2;
return TWI_NOT_SLAVE_TX;
}
// set length and copy data into tx buffer

View File

@ -37,7 +37,14 @@
#define TWI_MTX 2
#define TWI_SRX 3
#define TWI_STX 4
#define TWI_SUCCESS 0
#define TWI_DATA_TOO_LONG 1
#define TWI_NACK_ON_ADDR 2
#define TWI_NOT_SLAVE_TX 2
#define TWI_NACK_ON_DATA 3
#define TWI_OTHER_ERROR 4
void twi_init(void);
void twi_disable(void);
void twi_setAddress(uint8_t);