Robert Oates / Mbed 2 deprecated Nottingham

Dependencies:   mbed

Committer:
DrCyberBob
Date:
Tue Dec 14 15:08:27 2010 +0000
Revision:
0:5de67898f1cc
Update to use constant for the servo ID (Robotis Servos default to 1)

Who changed what in which revision?

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