Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
BlockingSerial.h@0:5de67898f1cc, 2010-12-14 (annotated)
- 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?
| User | Revision | Line number | New 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 |