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:191698f11ceb, 2010-12-14 (annotated)
- Committer:
- merlinsystemscorp
- Date:
- Tue Dec 14 11:32:52 2010 +0000
- Revision:
- 0:191698f11ceb
Nottingham Lab Warehouse Controller
Who changed what in which revision?
| User | Revision | Line number | New 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 |