From c0185e5835778cbbf4080dfbcbef59768c01aca8 Mon Sep 17 00:00:00 2001 From: Jérémy Dufour Date: Sat, 16 May 2009 01:22:59 +0200 Subject: * digital/avr/modules/twi: - return length of read data when using twi_sl_poll. --- digital/avr/modules/twi/twi.host.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'digital/avr/modules/twi/twi.host.c') diff --git a/digital/avr/modules/twi/twi.host.c b/digital/avr/modules/twi/twi.host.c index bec83892..69c4e0a8 100644 --- a/digital/avr/modules/twi/twi.host.c +++ b/digital/avr/modules/twi/twi.host.c @@ -46,6 +46,8 @@ static uint8_t twi_address; /** Received data. */ static uint8_t rcpt_buf_sl[AC_TWI_SL_RECV_BUFFER_SIZE]; +/** Received data size. */ +static uint8_t rcpt_size_sl; /** Whether new received data are ready. */ static uint8_t data_ready_sl; /** Data sent on master request. */ @@ -79,12 +81,15 @@ twi_init (uint8_t addr) uint8_t twi_sl_poll (uint8_t *buffer, uint8_t size) { + uint8_t i; if (data_ready_sl) { data_ready_sl = 0; - while (size--) - buffer[size] = rcpt_buf_sl[size]; - return 1; + if (size > rcpt_size_sl) + size = rcpt_size_sl; + for (i = 0; i < size; i++) + buffer[i] = rcpt_buf_sl[i]; + return size; } else return 0; @@ -124,6 +129,7 @@ twi_handle_WRITE (void *user, mex_msg_t *msg) size = mex_msg_len (msg); assert (size <= AC_TWI_SL_RECV_BUFFER_SIZE); memcpy (rcpt_buf_sl, mex_msg_pop_buffer (msg), size); + rcpt_size_sl = size; data_ready_sl = 1; } } -- cgit v1.2.3