From 0c020cbe52aab0c79c4ccb33d219e54ad916f864 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Mon, 29 Nov 2010 23:08:10 +0100 Subject: digital/avr/modules/twi: merge several similar states code, refs #29 --- digital/avr/modules/twi/twi_hard.avr.c | 29 +++++++---------------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/digital/avr/modules/twi/twi_hard.avr.c b/digital/avr/modules/twi/twi_hard.avr.c index 9a36d85a..d93deace 100644 --- a/digital/avr/modules/twi/twi_hard.avr.c +++ b/digital/avr/modules/twi/twi_hard.avr.c @@ -286,7 +286,6 @@ SIGNAL (SIG_2WIRE_SERIAL) /* Arbitration lost, same as TW_MR_ARB_LOST. */ /* TODO */ break; - /*** Master transmitter mode. ***/ case TW_MT_DATA_ACK: case TW_MT_SLA_ACK: /* Address or data acknowledged, send more data or stop. */ @@ -303,22 +302,23 @@ SIGNAL (SIG_2WIRE_SERIAL) TWI_MASTER_DONE (); } break; + case TW_MR_DATA_NACK: + /* Data not acknowledged, last byte, stop transfer. */ + ctx.master_transfer_buffer[index++] = TWDR; + /* no break; */ + case TW_MR_SLA_NACK: + /* Address not acknowledged, stop. */ case TW_MT_SLA_NACK: /* Address not acknowledged, stop. */ - TWCR = TWCR_OK | _BV (TWSTO); - ctx.master_current_status = TWI_MASTER_ERROR; - /* Call master done callback. */ - TWI_MASTER_DONE (); - break; case TW_MT_DATA_NACK: /* Data not acknowledged, there is no more room in slave device, * stop. */ + /* Same code, index is 0 for SLA + NACK. */ TWCR = TWCR_OK | _BV (TWSTO); ctx.master_current_status = index; /* Call master done callback. */ TWI_MASTER_DONE (); break; - /*** Master receiver mode. ***/ case TW_MR_SLA_ACK: /* Address acknowledged, receive first data. */ if (ctx.master_transfer_buffer_size <= 1) @@ -326,13 +326,6 @@ SIGNAL (SIG_2WIRE_SERIAL) else TWCR = TWCR_OK | _BV (TWEA); break; - case TW_MR_SLA_NACK: - /* Address not acknowledged, stop. */ - TWCR = TWCR_OK | _BV (TWSTO); - ctx.master_current_status = TWI_MASTER_ERROR; - /* Call master done callback. */ - TWI_MASTER_DONE (); - break; case TW_MR_DATA_ACK: /* Data acknowledged, receive next data. */ ctx.master_transfer_buffer[index++] = TWDR; @@ -341,14 +334,6 @@ SIGNAL (SIG_2WIRE_SERIAL) else TWCR = TWCR_OK | _BV (TWEA); break; - case TW_MR_DATA_NACK: - /* Data not acknowledged, last byte, stop transfer. */ - ctx.master_transfer_buffer[index++] = TWDR; - TWCR = TWCR_OK | _BV (TWSTO); - ctx.master_current_status = index; - /* Call master done callback. */ - TWI_MASTER_DONE (); - break; # endif/* AC_TWI_MASTER_ENABLE */ } } -- cgit v1.2.3