From 7bd977afc2d1f833ca6adb10b742527df43d3370 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Mon, 4 May 2015 16:57:10 +0200 Subject: ucoo/{intf,dev/lcd}: add text LCD support --- ucoo/intf/Module | 2 +- ucoo/intf/lcd.cc | 44 ++++++++++++++++++++++++++++++++++++++++++++ ucoo/intf/lcd.hh | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 ucoo/intf/lcd.cc create mode 100644 ucoo/intf/lcd.hh (limited to 'ucoo/intf') diff --git a/ucoo/intf/Module b/ucoo/intf/Module index 7477f00..fb0aec1 100644 --- a/ucoo/intf/Module +++ b/ucoo/intf/Module @@ -1 +1 @@ -intf_SOURCES = stream.cc spi_master.cc +intf_SOURCES = stream.cc spi_master.cc lcd.cc diff --git a/ucoo/intf/lcd.cc b/ucoo/intf/lcd.cc new file mode 100644 index 0000000..ab85630 --- /dev/null +++ b/ucoo/intf/lcd.cc @@ -0,0 +1,44 @@ +// ucoolib - Microcontroller object oriented library. {{{ +// +// Copyright (C) 2015 Nicolas Schodet +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. +// +// }}} +#include "lcd.hh" +#include +#include + +namespace ucoo { + +/// Helper for formated output. +void +Lcd::printf (const char *fmt, ...) +{ + // Buffer needs extra bytes for '\0' & '\n'. + va_list ap; + va_start (ap, fmt); + char buf[get_lines() * (get_columns() + 1) + 1]; + vsnprintf (buf, sizeof (buf), fmt, ap); + buf[sizeof (buf) - 1] = '\0'; + va_end (ap); + puts (buf); +} + +} // namespace ucoo diff --git a/ucoo/intf/lcd.hh b/ucoo/intf/lcd.hh new file mode 100644 index 0000000..6ad8074 --- /dev/null +++ b/ucoo/intf/lcd.hh @@ -0,0 +1,53 @@ +#ifndef ucoo_intf_lcd_hh +#define ucoo_intf_lcd_hh +// ucoolib - Microcontroller object oriented library. {{{ +// +// Copyright (C) 2013 Nicolas Schodet +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. +// +// }}} + +namespace ucoo { + +/// Character based LCD. +class Lcd +{ + public: + /// Output a string. Accept '\n' to go to next line and '\r' to return to + /// start of line. + virtual void puts (const char *str) = 0; + /// Move cursor to given position. + virtual void go (int line, int column) = 0; + /// Clear the screen. + virtual void clear () = 0; + /// Get number of lines. + virtual int get_lines () const = 0; + /// Get number of columns. + virtual int get_columns () const = 0; + /// Helper for formated output. + void printf (const char *fmt, ...) __attribute__ ((format (printf, 2, 3))); + protected: + /// Default constructor. + Lcd () { } +}; + +} // namespace ucoo + +#endif // ucoo_intf_lcd_hh -- cgit v1.2.3