Mark Norman / Mbed 2 deprecated Nottingham

Dependencies:   mbed

Committer:
merlinsystemscorp
Date:
Tue Dec 14 11:32:52 2010 +0000
Revision:
0:191698f11ceb
Nottingham Lab Warehouse Controller

Who changed what in which revision?

UserRevisionLine numberNew contents of line
merlinsystemscorp 0:191698f11ceb 1 #ifndef _BLOCKING_SERIAL
merlinsystemscorp 0:191698f11ceb 2 #define _BLOCKING_SERIAL
merlinsystemscorp 0:191698f11ceb 3
merlinsystemscorp 0:191698f11ceb 4 #include "mbed.h"
merlinsystemscorp 0:191698f11ceb 5
merlinsystemscorp 0:191698f11ceb 6 class BlockingSerial:public SerialHalfDuplex
merlinsystemscorp 0:191698f11ceb 7 {
merlinsystemscorp 0:191698f11ceb 8 public:
merlinsystemscorp 0:191698f11ceb 9
merlinsystemscorp 0:191698f11ceb 10 BlockingSerial(PinName tx, PinName rx, char * name = NULL): SerialHalfDuplex(tx, rx, name)
merlinsystemscorp 0:191698f11ceb 11 {
merlinsystemscorp 0:191698f11ceb 12 }
merlinsystemscorp 0:191698f11ceb 13
merlinsystemscorp 0:191698f11ceb 14 int putc(int c)
merlinsystemscorp 0:191698f11ceb 15 {
merlinsystemscorp 0:191698f11ceb 16 if (writeable())
merlinsystemscorp 0:191698f11ceb 17 {
merlinsystemscorp 0:191698f11ceb 18 //printf("++++"); // MPN: for some reason this needs to be here??
merlinsystemscorp 0:191698f11ceb 19 return Serial::putc(c);
merlinsystemscorp 0:191698f11ceb 20 }
merlinsystemscorp 0:191698f11ceb 21
merlinsystemscorp 0:191698f11ceb 22 return -1;
merlinsystemscorp 0:191698f11ceb 23 }
merlinsystemscorp 0:191698f11ceb 24
merlinsystemscorp 0:191698f11ceb 25 int getc( int timeout = 1)
merlinsystemscorp 0:191698f11ceb 26 {
merlinsystemscorp 0:191698f11ceb 27 // if infinite timeout or we have a character, call base getc()
merlinsystemscorp 0:191698f11ceb 28 if ( timeout == -1 || readable() )
merlinsystemscorp 0:191698f11ceb 29 return Serial::getc();
merlinsystemscorp 0:191698f11ceb 30
merlinsystemscorp 0:191698f11ceb 31 // no character yet
merlinsystemscorp 0:191698f11ceb 32 bool has_data = false;
merlinsystemscorp 0:191698f11ceb 33 // count elapsed time
merlinsystemscorp 0:191698f11ceb 34 Timer timer;
merlinsystemscorp 0:191698f11ceb 35 timer.start();
merlinsystemscorp 0:191698f11ceb 36 // loop until we have data or timeout elapses
merlinsystemscorp 0:191698f11ceb 37 while ( !has_data && timer.read_ms() < timeout )
merlinsystemscorp 0:191698f11ceb 38 {
merlinsystemscorp 0:191698f11ceb 39 // wait a short time
merlinsystemscorp 0:191698f11ceb 40 wait_ms(1);
merlinsystemscorp 0:191698f11ceb 41 // check again
merlinsystemscorp 0:191698f11ceb 42 has_data = readable();
merlinsystemscorp 0:191698f11ceb 43 }
merlinsystemscorp 0:191698f11ceb 44 // do we have anything?
merlinsystemscorp 0:191698f11ceb 45 if ( has_data )
merlinsystemscorp 0:191698f11ceb 46 // yes, read it
merlinsystemscorp 0:191698f11ceb 47 return Serial::getc();
merlinsystemscorp 0:191698f11ceb 48 else
merlinsystemscorp 0:191698f11ceb 49 // no, timed out
merlinsystemscorp 0:191698f11ceb 50 return -1;
merlinsystemscorp 0:191698f11ceb 51 };
merlinsystemscorp 0:191698f11ceb 52
merlinsystemscorp 0:191698f11ceb 53 };
merlinsystemscorp 0:191698f11ceb 54 #endif _BLOCKING_SERIAL