summaryrefslogtreecommitdiff
path: root/ucoo/intf
diff options
context:
space:
mode:
authorNicolas Schodet2015-05-04 16:57:10 +0200
committerNicolas Schodet2019-10-07 00:44:50 +0200
commit7bd977afc2d1f833ca6adb10b742527df43d3370 (patch)
treefd44090542c766214a163c9505c1310aaa6025cd /ucoo/intf
parente43de81bf8c58029521fd8eaeaa9c2b7cd638244 (diff)
ucoo/{intf,dev/lcd}: add text LCD support
Diffstat (limited to 'ucoo/intf')
-rw-r--r--ucoo/intf/Module2
-rw-r--r--ucoo/intf/lcd.cc44
-rw-r--r--ucoo/intf/lcd.hh53
3 files changed, 98 insertions, 1 deletions
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 <cstdio>
+#include <cstdarg>
+
+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