Make ir_uart more robust to self echoed signals
This commit is contained in:
+20
-2
@@ -7,6 +7,7 @@
|
||||
#include "usart1.h"
|
||||
#include "timer0.h"
|
||||
#include "pio.h"
|
||||
#include "delay.h"
|
||||
|
||||
|
||||
/* Return non-zero if there is a character ready to be read. */
|
||||
@@ -51,8 +52,25 @@ ir_uart_putc (char ch)
|
||||
|
||||
/* Gobble echoed character. The echoing is due to an electrical
|
||||
common-path interference problem caused by a poor PCB layout of the
|
||||
track powering the IR receiver. */
|
||||
ir_uart_getc ();
|
||||
track powering the IR receiver. Unfortunately, it does not always
|
||||
occur with some combination of UCFK4 boards and laptops. Perhaps
|
||||
some laptops are more miserly with their current allocation and
|
||||
some IR LEDs do not draw as much current? So as a workaround
|
||||
we need to wait until the transmission has finished and then check
|
||||
if something was immediately received.
|
||||
|
||||
Having said all this, it is possible to get an optical reflection
|
||||
of the transmitted signal. The following code should handle this
|
||||
as well. */
|
||||
|
||||
while (! ir_uart_write_finished_p ())
|
||||
continue;
|
||||
|
||||
/* Play safe and wait for receive complete flag to be set. */
|
||||
DELAY_US (1);
|
||||
|
||||
if (ir_uart_read_ready_p ())
|
||||
ir_uart_getc ();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user