From 27402be20ddf544c9acc5362c550e127bc548e93 Mon Sep 17 00:00:00 2001 From: demonchy Date: Sun, 1 May 2005 17:07:34 +0000 Subject: Modif doubl buffer --- n/avr/twi-slave/twi_slave.c | 55 +++++++++++---------------------------------- 1 file changed, 13 insertions(+), 42 deletions(-) diff --git a/n/avr/twi-slave/twi_slave.c b/n/avr/twi-slave/twi_slave.c index 4aa03f9..777400f 100644 --- a/n/avr/twi-slave/twi_slave.c +++ b/n/avr/twi-slave/twi_slave.c @@ -32,13 +32,11 @@ static volatile uint8_t twi_rcpt_tail; static volatile uint8_t send_idx; static volatile uint8_t data_ready; -static volatile uint8_t buf_rcpt1[SIZE_BUF_RCPT]; -static volatile uint8_t buf_rcpt2[SIZE_BUF_RCPT]; +static volatile uint8_t buf_rcpt[SIZE_BUF_RCPT]; static volatile uint8_t buf_send1[SIZE_BUF_SEND]; static volatile uint8_t buf_send2[SIZE_BUF_SEND]; static volatile uint8_t *buf_send_sys, *buf_send_user; -static volatile uint8_t *buf_rcpt_sys, *buf_rcpt_user; -static volatile int8_t send_switch, rcpt_switch; +static volatile int8_t send_switch; static volatile int8_t state; void @@ -46,11 +44,8 @@ twi_init (uint8_t addr) { state = 0; send_switch = 0; - rcpt_switch = 0; buf_send_sys = buf_send1; buf_send_user = buf_send2; - buf_rcpt_sys = buf_rcpt1; - buf_rcpt_user = buf_rcpt2; TWAR = addr; TWSR = 0x00; TWCR = _BV(TWEA) | _BV(TWEN) | _BV(TWIE); @@ -98,7 +93,7 @@ SIGNAL (SIG_2WIRE_SERIAL) case TW_SR_DATA_ACK: case TW_SR_GCALL_DATA_ACK: rs232_putc ('y'); - buf_rcpt_sys[twi_rcpt_tail++] = TWDR; + buf_rcpt[twi_rcpt_tail++] = TWDR; if (SIZE_BUF_RCPT - twi_rcpt_tail == 1) TWCR &= ~_BV(TWEA); break; @@ -106,37 +101,22 @@ SIGNAL (SIG_2WIRE_SERIAL) case TW_SR_DATA_NACK: case TW_SR_GCALL_DATA_NACK: rs232_putc ('x'); - buf_rcpt_sys[twi_rcpt_tail++] = TWDR; + buf_rcpt[twi_rcpt_tail++] = TWDR; /* no break */ /* STOP */ case TW_SR_STOP: rs232_putc ('w'); data_ready = 1; - if (state == 1) /* send */ + if (state && send_switch) /* send */ { - if (send_switch == 1) - { - volatile uint8_t *tmp; - /* Thibault paye son coup */ - tmp = buf_send_user; - buf_send_user = buf_send_sys; - buf_send_sys = tmp; - send_switch = 0; - } + volatile uint8_t *tmp; + /* Thibault paye son coup */ + tmp = buf_send_user; + buf_send_user = buf_send_sys; + buf_send_sys = tmp; + send_switch = 0; + state = 0; } - else if (state == 2) - { - if (!rcpt_switch) - { - volatile uint8_t *tmp; - tmp = buf_rcpt_user; - buf_rcpt_user = buf_rcpt_sys; - buf_rcpt_sys = tmp; - } - else - rcpt_switch = 1; - } - state = 0; break; } TWCR |= _BV(TWINT); @@ -147,20 +127,11 @@ SIGNAL (SIG_2WIRE_SERIAL) uint8_t twi_poll (uint8_t buf[], uint8_t size) { - if (rcpt_switch) - { - volatile uint8_t *tmp; - tmp = buf_rcpt_user; - buf_rcpt_user = buf_rcpt_sys; - buf_rcpt_sys = tmp; - rcpt_switch = 0; - } if (data_ready) { - rcpt_switch = 1; data_ready = 0; while (size --) - buf[size] = buf_rcpt_user[size]; + buf[size] = buf_rcpt[size]; TWCR |= _BV (TWEA); return 1; } -- cgit v1.2.3