From 2d7e0605a35ec55d320d04c5c5ae276796a8717b Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Mon, 15 Oct 2012 23:13:28 +0200 Subject: digital/ucoolib/ucoolib/intf: add stream interface --- digital/ucoolib/ucoolib/intf/Module | 1 + digital/ucoolib/ucoolib/intf/stream.cc | 63 ++++++++++++++++++++++++++++++++++ digital/ucoolib/ucoolib/intf/stream.hh | 62 +++++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 digital/ucoolib/ucoolib/intf/Module create mode 100644 digital/ucoolib/ucoolib/intf/stream.cc create mode 100644 digital/ucoolib/ucoolib/intf/stream.hh (limited to 'digital') diff --git a/digital/ucoolib/ucoolib/intf/Module b/digital/ucoolib/ucoolib/intf/Module new file mode 100644 index 00000000..932933c8 --- /dev/null +++ b/digital/ucoolib/ucoolib/intf/Module @@ -0,0 +1 @@ +intf_SOURCES = stream.cc diff --git a/digital/ucoolib/ucoolib/intf/stream.cc b/digital/ucoolib/ucoolib/intf/stream.cc new file mode 100644 index 00000000..b3a28698 --- /dev/null +++ b/digital/ucoolib/ucoolib/intf/stream.cc @@ -0,0 +1,63 @@ +// ucoolib - Microcontroller object oriented library. {{{ +// +// Copyright (C) 2012 Nicolas Schodet +// +// APBTeam: +// Web: http://apbteam.org/ +// Email: team AT apbteam DOT org +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// }}} +#include "stream.hh" + +namespace ucoo { + +Stream::Stream () + : block_ (false) +{ +} + +void +Stream::block (bool block/*true*/) +{ + block_ = block; +} + +int +Stream::getc () +{ + int r; + char c; + r = read (&c, 1); + if (r == 1) + return c; + else + return -1; +} + +int +Stream::putc (int c) +{ + int r; + char b = c; + r = write (&b, 1); + if (r == 1) + return 0; + else + return -1; +} + +} // namespace ucoo diff --git a/digital/ucoolib/ucoolib/intf/stream.hh b/digital/ucoolib/ucoolib/intf/stream.hh new file mode 100644 index 00000000..d0c7638f --- /dev/null +++ b/digital/ucoolib/ucoolib/intf/stream.hh @@ -0,0 +1,62 @@ +#ifndef ucoolib_intf_stream_hh +#define ucoolib_intf_stream_hh +// ucoolib - Microcontroller object oriented library. {{{ +// +// Copyright (C) 2012 Nicolas Schodet +// +// APBTeam: +// Web: http://apbteam.org/ +// Email: team AT apbteam DOT org +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// }}} + +namespace ucoo { + +/// Interface to an object providing a stream oriented flow, like serial port, +/// connected socket, or higher encapsulated protocol. +class Stream +{ + public: + /// Default constructor. + Stream (); + /// Set whether operations on this stream should block when no data is + /// available. + virtual void block (bool block = true); + /// Read up to COUNT bytes of data from stream and store them in BUF. + /// Return the number of read bytes, -1 on error or -2 on EOF. + /// + /// If blocking, will return as soon as there is some data available. If + /// not blocking, may return 0 if no data is available. + virtual int read (char *buf, int count) = 0; + /// Write up to COUNT bytes of data from BUF to stream. Return the number + /// of written bytes or -1 on error. + /// + /// If blocking, will try its best to write all data provided. + virtual int write (const char *buf, int count) = 0; + /// Shortcut to read one character. Return -1 on error, on EOF, or if no + /// character is available. + int getc (); + /// Shortcut to write one character. Return -1 on error. + int putc (int c); + protected: + /// Current blocking operation flag. + bool block_; +}; + +} // namespace ucoo + +#endif // ucoolib_intf_stream_hh -- cgit v1.2.3