Add imonlcd driver for SoundGraph iMON OEM LCD modules (by Dean Harding,

Christian Leuschen, Jonathan Kyler and Eric Pooch)
This commit is contained in:
mmdolze
2009-05-14 21:45:51 +00:00
parent f75e3600ad
commit 8bd28df1ee
13 changed files with 2273 additions and 6 deletions
+6
View File
@@ -211,6 +211,7 @@ Eric Pooch:
- Mac OS X / Darwin support
- serialPOS driver
- uss720 connection type for hd44780 driver
- driver for SoundGraph iMON OEM LCD Modules
Benjamin Wiedmann
- Added functionality for HITACHI SP14Q002 gLCD (320x240)
@@ -259,6 +260,11 @@ Phant0m / Aron Parsons
Malte Poeggel
- support for ST7036 controller in hd44780
Dean Harding,
Christian Leuschen,
Jonathan Kyler:
- driver for SoundGraph iMON OEM LCD Modules
Further developers in the sourceforge lcdproc team:
Mindaugas Idzelis aim4min
+2 -1
View File
@@ -69,7 +69,8 @@ v.0.5dev (ongoing development)
* Change drivers to start in background by default: bayrad, CFontz, ea65, glk
* imon driver: Change hbars to make last char in-/decrease vertically
+ hd44780 driver: port usblcd connection type from 0.4.5 to 0.5 (M. Dolze)
* server: Fix interpretation of named screen priorities
* server: Fix interpretation of named screen priorities
+ new driver imonlcd for SoundGraph iMON LCD (Dean Harding, Jonathan Kyler)
v.0.5.2
* fix switching on/off the Load screen in lcdproc client using the menu
+29 -2
View File
@@ -45,7 +45,7 @@ DriverPath=server/drivers/
#
# The following drivers are supported:
# bayrad, CFontz, CFontz633, CFontzPacket, curses, CwLnx, ea65,
# EyeboxOne, g15, glcdlib, glk, hd44780, icp_a106, imon, IOWarrior,
# EyeboxOne, g15, glcdlib, glk, hd44780, icp_a106, imon, imonlcd, IOWarrior,
# irman, joy, lb216, lcdm001, lcterm, lirc, lis, MD8800, ms6931, mtc_s16209x,
# MtxOrb, mx5000, NoritakeVFD, picolcd, pyramid, sed1330, sed1520, serialPOS,
# serialVFD, shuttleVFD, sli, stv5730, svga, t6963, text, tyan, ula200,
@@ -550,6 +550,34 @@ Size=16x2
## Soundgraph iMON LCD ##
[imonlcd]
# Specify which iMon protocol should be used [legal: 0=15c2:ffdc device,
# 1=15c2:0038 device; default: 0]
Protocol=0
# Set the exit behavior [legal: 0=leave shutdown message, 1=show the big clock,
# 2=blank device; default: 1]
#OnExit=2
# Select the output device to use [default: /dev/lcd0]
Device=/dev/lcd0
# Select the displays contrast [default: 200; legal: 0-1000]
Contrast=200
# Specify the size of the display in pixels [default: 96x16]
#Size=96x16
# Set the backlight state [default: on; legal: on, off]
#Backlight=on
# Set the disc mode [legal: 0=spin the "slim" disc - two disc segments,
# 1=their complement spinning; default: 0]
#DiscMode=0
## IrMan driver ##
[IrMan]
# in case of trouble with IrMan, try the Lirc emulator for IrMan
@@ -1063,5 +1091,4 @@ Offset=200x200
# X font to use, in XLFD format, as given by "xfontsel"
Font=-*-terminus-*-r-*-*-*-320-*-*-*-*-*
# EOF
+6 -2
View File
@@ -9,7 +9,7 @@ AC_ARG_ENABLE(drivers,
[ which is a comma-separated list of drivers.]
[ Possible drivers are:]
[ bayrad,CFontz,CFontz633,CFontzPacket,curses,CwLnx,ea65,]
[ EyeboxOne,g15,glcdlib,glk,hd44780,i2500vfd,icp_a106,imon,]
[ EyeboxOne,g15,glcdlib,glk,hd44780,i2500vfd,icp_a106,imon,imonlcd,]
[ IOWarrior,irman,irtrans,joy,lb216,lcdm001,lcterm,lirc,lis,]
[ MD8800,ms6931,mtc_s16209x,MtxOrb,mx5000,NoritakeVFD,picolcd,]
[ pyramid,sed1330,sed1520,serialPOS,serialVFD,shuttleVFD,sli,]
@@ -19,7 +19,7 @@ AC_ARG_ENABLE(drivers,
drivers="$enableval",
drivers=[bayrad,CFontz,CFontz633,curses,CwLnx,glk,lb216,lcdm001,MtxOrb,pyramid,text])
allDrivers=[bayrad,CFontz,CFontz633,CFontzPacket,curses,CwLnx,ea65,EyeboxOne,g15,glcdlib,glk,hd44780,i2500vfd,icp_a106,imon,IOWarrior,irman,irtrans,joy,lb216,lcdm001,lcterm,lirc,lis,MD8800,ms6931,mtc_s16209x,MtxOrb,mx5000,NoritakeVFD,picolcd,pyramid,sed1330,sed1520,serialPOS,serialVFD,shuttleVFD,sli,stv5730,svga,t6963,text,tyan,ula200,xosd]
allDrivers=[bayrad,CFontz,CFontz633,CFontzPacket,curses,CwLnx,ea65,EyeboxOne,g15,glcdlib,glk,hd44780,i2500vfd,icp_a106,imon,imonlcd,IOWarrior,irman,irtrans,joy,lb216,lcdm001,lcterm,lirc,lis,MD8800,ms6931,mtc_s16209x,MtxOrb,mx5000,NoritakeVFD,picolcd,pyramid,sed1330,sed1520,serialPOS,serialVFD,shuttleVFD,sli,stv5730,svga,t6963,text,tyan,ula200,xosd]
drivers=`echo $drivers | sed -e 's/,/ /g'`
@@ -224,6 +224,10 @@ dnl else
DRIVERS="$DRIVERS imon${SO}"
actdrivers=["$actdrivers imon"]
;;
imonlcd)
DRIVERS="$DRIVERS imonlcd${SO}"
actdrivers=["$actdrivers imonlcd"]
;;
IOWarrior)
if test "$enable_libusb" = yes ; then
DRIVERS="$DRIVERS IOWarrior${SO}"
+3
View File
@@ -150,6 +150,9 @@ credit_screen(int rep, int display, int *flags_ptr)
"Jack Cleaver",
"Aron Parsons",
"Malte Poeggel",
"Dean Harding",
"Christian Leuschen",
"Jonathan Kyler",
NULL
};
int contr_num = 0;
+3
View File
@@ -186,6 +186,9 @@ ICP A106 alarm/LCD board in 19" rack cases by ICP
.B imon
iMON IR/VFD modules in cases by Soundgraph/Ahanix/Silverstone/Uneed/Accent
.TP
.B imonlcd
iMON IR/LCD modules in cases by Soundgraph/Ahanix/Silverstone/Uneed/Accent/Antec
.TP
.B irtrans
IRTrans IR/VFD modules in cases by Ahanix (e.g. MCE303) and possibly others
May require irserver (http://www.irtrans.de/en/download/linux.php) to be running for connectivity.
+1
View File
@@ -21,6 +21,7 @@ well as the configuration of LCDd.
&hd44780;
&icp_a106;
&imon;
&imonlcd;
&IOWarrior;
&irman;
&irtrans;
+134
View File
@@ -0,0 +1,134 @@
<sect1 id="imonlcd-howto">
<title>The imonlcd Driver</title>
<sect2 id="imonlcd-general">
<title>General</title>
<para>
This section talks about using LCDproc with LCD devices manufactured by SoundGraph.
For example, <ulink url="http://www.soundgraph.com/Eng_/Products/oem3.aspx">the iMON OEM LCD</ulink>.
</para>
<para>
This driver currently supports versions 15c2:ffdc and 15c2:0038 of the device.
(You can find the version of your lcd via the lsusb command).
</para>
<para>
In many systems, the LCD backlight will remain on after the system is shutdown.
This behavior remains a mystery - somehow the lcd recieves a reset command (or
similar) AFTER LCDd is stopped.
</para>
<para id="imonlcd-kernelmodules">
This driver requires the iMON module included with LIRC v0.8.4a or newer,
available from the <ulink url="http://www.lirc.org">LIRC project</ulink>.
The 15c2:0038 device may require LIRC v0.8.5 or newer.
</para>
</sect2>
<sect2 id="imonlcd-config">
<title>Configuration in LCDd.conf</title>
<sect3 id="imonlcd-config-section">
<title>[imonlcd]</title>
<variablelist>
<varlistentry>
<term>
<command>Protocol</command> =
<arg choice="plain">
<replaceable>PROTOCOL</replaceable>
</arg>
</term>
<listitem><para>
Specify which version of iMON LCD is installed.
The default, <literal>0</literal> specifies the :ffdc device.
<literal>1</literal> should be used for the :0038 device.
</para></listitem>
</varlistentry>
<varlistentry>
<term>
<command>OnExit</command> =
<arg choice="plain"><replaceable>ONEXIT</replaceable></arg>
</term>
<listitem><para>
Specify the exit behavior.
The default is <literal>1</literal>, which turns on the big ugly clock upon
shutdown. <literal>0</literal> leaves the shutdown message on the screen.
<literal>2</literal> turns the LCD off.
</para></listitem>
</varlistentry>
<varlistentry>
<term>
<command>Device</command> =
<arg choice="plain"><replaceable>DEVICE</replaceable></arg>
</term>
<listitem><para>
Select the output device to use. Change this from the default
<filename>/dev/lcd0</filename> to the device file that gets created
when the kernel module (<link linkend="imonlcd-kernelmodules">see above</link>)
is loaded.
</para></listitem>
</varlistentry>
<varlistentry>
<term>
<command>Contrast</command> =
<arg choice="plain"><replaceable>CONTRAST</replaceable></arg>
</term>
<listitem><para>
Select the display's contrast <literal>200</literal> is the default.
Permissible values are in the range of <literal>0</literal>-<literal>1000</literal>.
</para></listitem>
</varlistentry>
<varlistentry>
<term>
<command>Size</command> =
<arg choice="plain">
<replaceable>WIDTH</replaceable>
<literal>x</literal>
<replaceable>HEIGHT</replaceable>
</arg>
</term>
<listitem><para>
Set the display size in pixels. The default <literal>96x16</literal> should
be safe for most if not all users, since the device seeems to be made only
with this one size.
</para></listitem>
</varlistentry>
<varlistentry>
<term>
<command>Backlight</command> =
<arg choice="plain"><replaceable>BACKLIGHT</replaceable></arg>
</term>
<listitem><para>
Set the backlight state. The default is <literal>1</literal>, which turns
the backlight on. <literal>0</literal> turns the backlight off.
</para></listitem>
</varlistentry>
<varlistentry>
<term>
<command>DiscMode</command> =
<arg choice="plain"><replaceable>DISCMODE</replaceable></arg>
</term>
<listitem><para>
Sets the disc mode. The default is <literal>0</literal> which spins the
"slim" disc. <literal>1</literal> spins their complement.
</para></listitem>
</varlistentry>
</variablelist>
</sect3>
</sect2>
</sect1>
+1
View File
@@ -28,6 +28,7 @@
<!ENTITY i2500vfd SYSTEM "drivers/i2500vfd.docbook">
<!ENTITY icp_a106 SYSTEM "drivers/icp_a106.docbook">
<!ENTITY imon SYSTEM "drivers/imon.docbook">
<!ENTITY imonlcd SYSTEM "drivers/imonlcd.docbook">
<!ENTITY IOWarrior SYSTEM "drivers/IOWarrior.docbook">
<!ENTITY irman SYSTEM "drivers/irman.docbook">
<!ENTITY irtrans SYSTEM "drivers/irtrans.docbook">
+3 -1
View File
@@ -19,7 +19,7 @@ AM_LDFLAGS = @LDSHARED@
#LIBS =
pkglib_PROGRAMS = @DRIVERS@
EXTRA_PROGRAMS = bayrad CFontz CFontz633 CFontzPacket curses CwLnx ea65 EyeboxOne g15 glcdlib glk hd44780 icp_a106 imon IOWarrior irman joy lb216 lcdm001 lcterm lirc lis MD8800 ms6931 mtc_s16209x MtxOrb mx5000 NoritakeVFD picolcd pyramid sed1330 sed1520 serialPOS serialVFD shuttleVFD stv5730 svga t6963 text tyan sli ula200 xosd i2500vfd irtrans
EXTRA_PROGRAMS = bayrad CFontz CFontz633 CFontzPacket curses CwLnx ea65 EyeboxOne g15 glcdlib glk hd44780 icp_a106 imon imonlcd IOWarrior irman joy lb216 lcdm001 lcterm lirc lis MD8800 ms6931 mtc_s16209x MtxOrb mx5000 NoritakeVFD picolcd pyramid sed1330 sed1520 serialPOS serialVFD shuttleVFD stv5730 svga t6963 text tyan sli ula200 xosd i2500vfd irtrans
noinst_LIBRARIES = libLCD.a libbignum.a
IOWarrior_CFLAGS = @LIBUSB_CFLAGS@ $(AM_CFLAGS)
@@ -42,6 +42,7 @@ hd44780_LDADD = libLCD.a @HD44780_DRIVERS@ @LIBUSB_LIBS@ @LIBFTDI_LIBS@ lib
hd44780_DEPENDENCIES = @HD44780_DRIVERS@
icp_a106_LDADD = libLCD.a
imon_LDADD = libLCD.a
imonlcd_LDADD = libLCD.a
IOWarrior_LDADD = @LIBUSB_LIBS@ libLCD.a libbignum.a
irman_LDADD = @LIBIRMAN@
lcterm_LDADD = libLCD.a
@@ -84,6 +85,7 @@ EXTRA_hd44780_SOURCES = hd44780-4bit.c hd44780-4bit.h hd44780-ext8bit.c hd44780-
icp_a106_SOURCES = lcd.h lcd_lib.h icp_a106.c icp_a106.h report.h
imon_SOURCES = lcd.h lcd_lib.h imon.h imon.c report.h
imonlcd_SOURCES = lcd.h lcd_lib.h imonlcd.h imonlcd_font.h imonlcd.c report.h
IOWarrior_SOURCES = lcd.h lcd_lib.h hd44780-charmap.h IOWarrior.c IOWarrior.h report.h adv_bignum.h
irman_SOURCES = lcd.h irmanin.c irmanin.h report.h
joy_SOURCES = lcd.h joy.c joy.h port.h report.h
File diff suppressed because it is too large Load Diff
+62
View File
@@ -0,0 +1,62 @@
/** \file server/drivers/imonlcd.h
* Driver for SoundGraph iMON OEM LCD Modules
*/
/*-
* Copyright (c) 2004, Venky Raju <dev (at) venky (dot) ws>
* 2007, Dean Harding <dean (at) codeka dotcom>
* 2007, Christian Leuschen <christian (dot) leuschen (at) gmx (dot) de>
* 2009, Jonathan Kyler <jkyler (at) users (dot) sourceforge (dot) net>
* 2009, Eric Pooch < epooch (at) cox (dot) net>
*
* This file is released under the GNU General Public License. Refer to the
* COPYING file distributed with this package.
*/
#ifndef IMONLCD_H
#define IMONLCD_H
#include "lcd.h"
/* mandatory functions (necessary for all drivers) */
MODULE_EXPORT int imonlcd_init (Driver *drvthis);
MODULE_EXPORT void imonlcd_close (Driver *drvthis);
/* essential output functions (necessary for output drivers) */
MODULE_EXPORT int imonlcd_width (Driver *drvthis);
MODULE_EXPORT int imonlcd_height (Driver *drvthis);
MODULE_EXPORT void imonlcd_clear (Driver *drvthis);
MODULE_EXPORT void imonlcd_flush (Driver *drvthis);
MODULE_EXPORT void imonlcd_string (Driver *drvthis, int x, int y, const char string[]);
MODULE_EXPORT void imonlcd_chr (Driver *drvthis, int x, int y, char c);
/* essential input functions (necessary for all input drivers) */
/* char *imonlcd_get_key NOT IMPLEMENTED */
/* extended output functions (optional; core provides alternatives) */
MODULE_EXPORT void imonlcd_vbar (Driver *drvthis, int x, int y, int len, int promille, int options);
MODULE_EXPORT void imonlcd_hbar (Driver *drvthis, int x, int y, int len, int promille, int options);
MODULE_EXPORT void imonlcd_num (Driver *drvthis, int x, int num);
/* MODULE_EXPORT void imonlcd_heartbeat (Driver *drvthis, int state); NOT IMPLEMENTED */
/* MODULE_EXPORT int imonlcd_icon (Driver *drvthis, int x, int y, int icon); NOT IMPLEMENTED */
/* MODULE_EXPORT void imonlcd_cursor (Driver *drvthis, int x, int y, int type); NOT IMPLEMENTED */
/* user-defined character functions, are those still supported ? */
/* MODULE_EXPORT void imonlcd_set_char (Driver *drvthis, int n, char *dat); NOT IMPLEMENTED */
/* MODULE_EXPORT int imonlcd_get_free_chars (Driver *drvthis); NOT IMPLEMENTED */
MODULE_EXPORT int imonlcd_cellwidth (Driver *drvthis);
MODULE_EXPORT int imonlcd_cellheight (Driver *drvthis);
/* Hardware functions */
MODULE_EXPORT int imonlcd_get_contrast (Driver *drvthis);
MODULE_EXPORT void imonlcd_set_contrast (Driver *drvthis, int promille);
/* MODULE_EXPORT int imonlcd_get_brightness (Driver *drvthis, int state); NOT IMPLEMENTED */
/* MODULE_EXPORT void imonlcd_set_brightness (Driver *drvthis, int state, int promille); NOT IMPLEMENTED */
MODULE_EXPORT void imonlcd_backlight(Driver *drvthis, int on);
MODULE_EXPORT void imonlcd_output (Driver *drvthis, int state);
/* informational functions */
MODULE_EXPORT const char *imonlcd_get_info (Driver *drvthis);
#endif
+630
View File
@@ -0,0 +1,630 @@
// -*- coding:iso-8859-15 -*-
/** \file server/drivers/imonlcd_font.h
* This is a definition of a font for use with the iMON LCD.
*
* The iMON LCD doesn't have a "text mode" - everthing is pixel-based.
* So we need to define our own font, basically.
*/
/*-
* Created March 2009 by Jonathan Kyler for inclusion in lcdproc
* Structure based on codeka's imonlcd patch by Dean Harding
* Font based on Toshiba T6963 based LCD display driver font by Manuel Stahl
*
* Copyright (c) 2009, Jonathan Kyler <jkyler (at) users (dot) sourceforge (dot) net>
*
* This file is released under the GNU General Public License. Refer to the
* COPYING file distributed with this package.
*/
#ifndef IMONLCD_EXTENDED_CHARACTERS
#define IMONLCD_EXTENDED_CHARACTERS
#define IMONLCD_FONT_FULL_HEART 3
#define IMONLCD_FONT_SMALL_HEART 4
#define IMONLCD_FONT_FULL_BLOCK 141
#define IMONLCD_FONT_LEFT_ARROW 155
#define IMONLCD_FONT_UP_ARROW 156
#define IMONLCD_FONT_RIGHT_ARROW 157
#define IMONLCD_FONT_DOWN_ARROW 158
#define IMONLCD_FONT_STOP 19
#define IMONLCD_FONT_PLAY 16
#define IMONLCD_FONT_PAUSE 18
#define IMONLCD_FONT_REVERSE 17
#define IMONLCD_FONT_FWD 21
#define IMONLCD_FONT_RWD 22
#define IMONLCD_FONT_RECORD 15
#define IMONLCD_FONT_START_VBAR_FULL 23
#define IMONLCD_FONT_START_VBAR_NARROW 127
#define IMONLCD_FONT_START_HBAR_NARROW 135
/**
* This structure holds the definition of the font.
*
* The characters we define here are 6x8 pixels in size, each byte in the
* 'pixels' array represents one column of pixels. The most significant bit
* is the top row, the least significant bit is the bottom row.
*/
typedef struct _imon_font {
unsigned char pixels[LCD_DEFAULT_CELL_WIDTH];
} imon_font;
/*
* Based on ISO 8859-15: http://en.wikipedia.org/wiki/ISO_8859-15
* Characters 0-14 are from the t6963 font, which is based on the
* CP437 character set. The diamond is replaced with a small heart
* for use in a heartbeat display.
* Characters 15-22 provide common play, record, stop, etc icons.
* Characters 23-29 provide a vertical progress bar display - using all
* 6 pixels in width
* Characters 30 & 31 are currently blank
* Characters 32-126 match ISO_8859-15 characters
* Characters 127-134 provide a vertical progress bar display, but only
* use 4 of the 6 characters in width
* Characters 135-140 provide a horizontal progress bar, using only
* 4 of the 8 characters in height
* Character 141 is a full block (all pixels used)
* Characters 142-152 provide some greek symbols
* Characters 153 & 154 make up a mail envelope icon
* Characters 155-159 are arrows
* Character 160 is currently blank
* Characters 161-255 match ISO_8859-15 characters
*/
static imon_font font[] = {
{ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 0 \u0020 space
{ {0x00, 0x7c, 0xa2, 0x8a, 0xa2, 0x7c } }, // 1 \u263a light smiley face
{ {0x00, 0x7c, 0xd6, 0xf6, 0xd6, 0x7c } }, // 2 \u263b dark smiley face
{ {0x00, 0x38, 0x7c, 0x3e, 0x7c, 0x38 } }, // 3 \u2665 full heart
{ {0x00, 0x00, 0x38, 0x1c, 0x38, 0x00 } }, // 4 small heart
{ {0x00, 0x0c, 0x6c, 0xfe, 0x6c, 0x0c } }, // 5 \u2660 club
{ {0x00, 0x18, 0x3a, 0x7e, 0x3a, 0x18 } }, // 6 \u2660 spade
{ {0x00, 0x00, 0x18, 0x18, 0x00, 0x00 } }, // 7 \u2022 bullet
{ {0xff, 0xff, 0xe7, 0xe7, 0xff, 0xff } }, // 8 \u25d8 big rectangle
{ {0x00, 0x3c, 0x24, 0x24, 0x3c, 0x00 } }, // 9 \u25cb small rectangle
{ {0xff, 0xc3, 0xdb, 0xdb, 0xc3, 0xff } }, // 10 \u25d9 filled rectangle
{ {0x00, 0x0c, 0x12, 0x52, 0x6c, 0x70 } }, // 11 \u2642 man symbol
{ {0x00, 0x60, 0x94, 0x9e, 0x94, 0x60 } }, // 12 \u2640 woman symbol
{ {0x00, 0x06, 0x0e, 0xfc, 0x40, 0x20 } }, // 13 \u266a musical note
{ {0x00, 0x06, 0x7e, 0x50, 0xac, 0xfc } }, // 14 \u266b double music note
{ {0x00, 0x18, 0x24, 0x24, 0x24, 0x18 } }, // 15 \u25cf record
{ {0x00, 0x00, 0xfe, 0x7c, 0x38, 0x10 } }, // 16 \u25b6 play
{ {0x00, 0x10, 0x38, 0x7c, 0xfe, 0x00 } }, // 17 \u25c0 play backwards
{ {0x00, 0x7e, 0x7e, 0x00, 0x7e, 0x7e } }, // 18 pause
{ {0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00 } }, // 19 \u25fe stop
{ {0x00, 0x0a, 0x3a, 0xfa, 0x3a, 0x0a } }, // 20 \u23cf eject
{ {0x00, 0xfe, 0x7c, 0x38, 0x10, 0xfe } }, // 21 fwd
{ {0x00, 0xfe, 0x10, 0x38, 0x7c, 0xfe } }, // 22 rev
{ {0x01, 0x01, 0x01, 0x01, 0x01, 0x01 } }, // 23 \u2581 lower 1/8 block (full)
{ {0x03, 0x03, 0x03, 0x03, 0x03, 0x03 } }, // 24 \u2582 lower 1/4 block (full)
{ {0x07, 0x07, 0x07, 0x07, 0x07, 0x07 } }, // 25 \u2583 lower 3/8 block (full)
{ {0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f } }, // 26 \u2584 lower 1/2 block (full)
{ {0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f } }, // 27 \u2585 lower 5/8 block (full)
{ {0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f } }, // 28 \u2586 lower 3/4 block (full)
{ {0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f } }, // 29 \u2587 lower 7/8 block (full)
{ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 30
{ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 31
{ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 32 \u0020 space
{ {0x00, 0x00, 0x60, 0xfa, 0x60, 0x00 } }, // 33 \u0021 !
{ {0x00, 0xe0, 0xc0, 0x00, 0xe0, 0xc0 } }, // 34 \u0022 "
{ {0x00, 0x24, 0x7e, 0x24, 0x7e, 0x24 } }, // 35 \u0023 #
{ {0x00, 0x24, 0x54, 0xd6, 0x48, 0x00 } }, // 36 \u0024 $
{ {0x00, 0xc6, 0xc8, 0x10, 0x26, 0xc6 } }, // 37 \u0025 %
{ {0x00, 0x6c, 0x92, 0x6a, 0x04, 0x0a } }, // 38 \u0026 &
{ {0x00, 0x00, 0xe0, 0xc0, 0x00, 0x00 } }, // 39 \u0027 '
{ {0x00, 0x00, 0x7c, 0x82, 0x00, 0x00 } }, // 40 \u0028 (
{ {0x00, 0x00, 0x82, 0x7c, 0x00, 0x00 } }, // 41 \u0029 )
{ {0x00, 0x10, 0x7c, 0x38, 0x7c, 0x10 } }, // 42 \u002a *
{ {0x00, 0x10, 0x10, 0x7c, 0x10, 0x10 } }, // 43 \u002b +
{ {0x00, 0x00, 0x07, 0x06, 0x00, 0x00 } }, // 44 \u002c ,
{ {0x00, 0x10, 0x10, 0x10, 0x10, 0x10 } }, // 45 \u002d -
{ {0x00, 0x00, 0x06, 0x06, 0x00, 0x00 } }, // 46 \u002e .
{ {0x00, 0x04, 0x08, 0x10, 0x20, 0x40 } }, // 47 \u002f /
{ {0x00, 0x7c, 0x8a, 0x92, 0xa2, 0x7c } }, // 48 \u0030 0
{ {0x00, 0x00, 0x42, 0xfe, 0x02, 0x00 } }, // 49 \u0031 1
{ {0x00, 0x46, 0x8a, 0x92, 0x92, 0x62 } }, // 50 \u0032 2
{ {0x00, 0x44, 0x92, 0x92, 0x92, 0x6c } }, // 51 \u0033 3
{ {0x00, 0x18, 0x28, 0x48, 0xfe, 0x08 } }, // 52 \u0034 4
{ {0x00, 0xf4, 0x92, 0x92, 0x92, 0x8c } }, // 53 \u0035 5
{ {0x00, 0x3c, 0x52, 0x92, 0x92, 0x0c } }, // 54 \u0036 6
{ {0x00, 0x80, 0x8e, 0x90, 0xa0, 0xc0 } }, // 55 \u0037 7
{ {0x00, 0x6c, 0x92, 0x92, 0x92, 0x6c } }, // 56 \u0038 8
{ {0x00, 0x60, 0x92, 0x92, 0x94, 0x78 } }, // 57 \u0039 9
{ {0x00, 0x00, 0x6c, 0x6c, 0x00, 0x00 } }, // 58 \u003a :
{ {0x00, 0x00, 0x37, 0x36, 0x00, 0x00 } }, // 59 \u003b ;
{ {0x00, 0x10, 0x28, 0x44, 0x82, 0x00 } }, // 60 \u003c <
{ {0x00, 0x24, 0x24, 0x24, 0x24, 0x24 } }, // 61 \u003d =
{ {0x00, 0x00, 0x82, 0x44, 0x28, 0x10 } }, // 62 \u003e >
{ {0x00, 0x40, 0x80, 0x9a, 0x90, 0x60 } }, // 63 \u003f ?
{ {0x00, 0x7c, 0x82, 0xba, 0xaa, 0x78 } }, // 64 \u0040 @
{ {0x00, 0x7e, 0x88, 0x88, 0x88, 0x7e } }, // 65 \u0041 A
{ {0x00, 0xfe, 0x92, 0x92, 0x92, 0x6c } }, // 66 \u0042 B
{ {0x00, 0x7c, 0x82, 0x82, 0x82, 0x44 } }, // 67 \u0043 C
{ {0x00, 0xfe, 0x82, 0x82, 0x82, 0x7c } }, // 68 \u0044 D
{ {0x00, 0xfe, 0x92, 0x92, 0x92, 0x82 } }, // 69 \u0045 E
{ {0x00, 0xfe, 0x90, 0x90, 0x90, 0x80 } }, // 70 \u0046 F
{ {0x00, 0x7c, 0x82, 0x92, 0x92, 0x5e } }, // 71 \u0047 G
{ {0x00, 0xfe, 0x10, 0x10, 0x10, 0xfe } }, // 72 \u0048 H
{ {0x00, 0x00, 0x82, 0xfe, 0x82, 0x00 } }, // 73 \u0049 I
{ {0x00, 0x0c, 0x02, 0x02, 0x02, 0xfc } }, // 74 \u004a J
{ {0x00, 0xfe, 0x10, 0x28, 0x44, 0x82 } }, // 75 \u004b K
{ {0x00, 0xfe, 0x02, 0x02, 0x02, 0x02 } }, // 76 \u004c L
{ {0x00, 0xfe, 0x40, 0x20, 0x40, 0xfe } }, // 77 \u004d M
{ {0x00, 0xfe, 0x40, 0x20, 0x10, 0xfe } }, // 78 \u004e N
{ {0x00, 0x7c, 0x82, 0x82, 0x82, 0x7c } }, // 79 \u004f O
{ {0x00, 0xfe, 0x90, 0x90, 0x90, 0x60 } }, // 80 \u0050 P
{ {0x00, 0x7c, 0x82, 0x8a, 0x84, 0x7a } }, // 81 \u0051 Q
{ {0x00, 0xfe, 0x90, 0x90, 0x98, 0x66 } }, // 82 \u0052 R
{ {0x00, 0x64, 0x92, 0x92, 0x92, 0x4c } }, // 83 \u0053 S
{ {0x00, 0x80, 0x80, 0xfe, 0x80, 0x80 } }, // 84 \u0054 T
{ {0x00, 0xfc, 0x02, 0x02, 0x02, 0xfc } }, // 85 \u0055 U
{ {0x00, 0xf8, 0x04, 0x02, 0x04, 0xf8 } }, // 86 \u0056 V
{ {0x00, 0xfc, 0x02, 0x3c, 0x02, 0xfc } }, // 87 \u0057 W
{ {0x00, 0xc6, 0x28, 0x10, 0x28, 0xc6 } }, // 88 \u0058 X
{ {0x00, 0xe0, 0x10, 0x0e, 0x10, 0xe0 } }, // 89 \u0059 Y
{ {0x00, 0x8e, 0x92, 0xa2, 0xc2, 0x00 } }, // 90 \u005a Z
{ {0x00, 0x00, 0xfe, 0x82, 0x82, 0x00 } }, // 91 \u005b [
{ {0x00, 0x40, 0x20, 0x10, 0x08, 0x04 } }, // 92 \u005c slash
{ {0x00, 0x00, 0x82, 0x82, 0xfe, 0x00 } }, // 93 \u005d ]
{ {0x00, 0x20, 0x40, 0x80, 0x40, 0x20 } }, // 94 \u005e ^
{ {0x01, 0x01, 0x01, 0x01, 0x01, 0x01 } }, // 95 \u005f _
{ {0x00, 0x00, 0xc0, 0xe0, 0x00, 0x00 } }, // 96 \u0060 `
{ {0x00, 0x04, 0x2a, 0x2a, 0x2a, 0x1e } }, // 97 \u0061 a
{ {0x00, 0xfe, 0x22, 0x22, 0x22, 0x1c } }, // 98 \u0062 b
{ {0x00, 0x1c, 0x22, 0x22, 0x22, 0x14 } }, // 99 \u0063 c
{ {0x00, 0x1c, 0x22, 0x22, 0x22, 0xfe } }, // 100 \u0064 d
{ {0x00, 0x1c, 0x2a, 0x2a, 0x2a, 0x10 } }, // 101 \u0065 e
{ {0x00, 0x10, 0x7e, 0x90, 0x90, 0x00 } }, // 102 \u0066 f
{ {0x00, 0x18, 0x25, 0x25, 0x25, 0x3e } }, // 103 \u0067 g
{ {0x00, 0xfe, 0x20, 0x20, 0x1e, 0x00 } }, // 104 \u0068 h
{ {0x00, 0x00, 0x00, 0xbe, 0x02, 0x00 } }, // 105 \u0069 i
{ {0x00, 0x02, 0x01, 0x21, 0xbe, 0x00 } }, // 106 \u006a j
{ {0x00, 0xfe, 0x08, 0x14, 0x22, 0x00 } }, // 107 \u006b k
{ {0x00, 0x00, 0x00, 0xfe, 0x02, 0x00 } }, // 108 \u006c l
{ {0x00, 0x3e, 0x20, 0x18, 0x20, 0x1e } }, // 109 \u006d m
{ {0x00, 0x3e, 0x20, 0x20, 0x1e, 0x00 } }, // 110 \u006e n
{ {0x00, 0x1c, 0x22, 0x22, 0x22, 0x1c } }, // 111 \u006f o
{ {0x00, 0x3f, 0x22, 0x22, 0x22, 0x1c } }, // 112 \u0070 p
{ {0x00, 0x1c, 0x22, 0x22, 0x22, 0x3f } }, // 113 \u0071 q
{ {0x00, 0x22, 0x1e, 0x22, 0x20, 0x10 } }, // 114 \u0072 r
{ {0x00, 0x10, 0x2a, 0x2a, 0x2a, 0x04 } }, // 115 \u0073 s
{ {0x00, 0x20, 0x7c, 0x22, 0x24, 0x00 } }, // 116 \u0074 t
{ {0x00, 0x3c, 0x02, 0x04, 0x3e, 0x00 } }, // 117 \u0075 u
{ {0x00, 0x38, 0x04, 0x02, 0x04, 0x38 } }, // 118 \u0076 v
{ {0x00, 0x3c, 0x06, 0x0c, 0x06, 0x3c } }, // 119 \u0077 w
{ {0x00, 0x36, 0x08, 0x08, 0x36, 0x00 } }, // 120 \u0078 x
{ {0x00, 0x39, 0x05, 0x06, 0x3c, 0x00 } }, // 121 \u0079 y
{ {0x00, 0x26, 0x2a, 0x2a, 0x32, 0x00 } }, // 122 \u007a z
{ {0x00, 0x10, 0x7c, 0x82, 0x82, 0x00 } }, // 123 \u007b {
{ {0x00, 0x00, 0x00, 0xff, 0x00, 0x00 } }, // 124 \u007c |
{ {0x00, 0x00, 0x82, 0x82, 0x7c, 0x10 } }, // 125 \u007d }
{ {0x00, 0x40, 0x80, 0x40, 0x80, 0x00 } }, // 126 \u007e ~
{ {0x00, 0x01, 0x01, 0x01, 0x01, 0x00 } }, // 127 \u2581 lower 1/8 block (trim)
{ {0x00, 0x03, 0x03, 0x03, 0x03, 0x00 } }, // 128 \u2582 lower 1/4 block (trim)
{ {0x00, 0x07, 0x07, 0x07, 0x07, 0x00 } }, // 129 \u2583 lower 3/8 block (trim)
{ {0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x00 } }, // 130 \u2584 lower 1/2 block (trim)
{ {0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x00 } }, // 131 \u2585 lower 5/8 block (trim)
{ {0x00, 0x3f, 0x3f, 0x3f, 0x3f, 0x00 } }, // 132 \u2586 lower 3/4 block (trim)
{ {0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x00 } }, // 133 \u2587 lower 7/8 block (trim)
{ {0x00, 0xff, 0xff, 0xff, 0xff, 0x00 } }, // 134 \u2588 full block (vert trim)
{ {0x3c, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 135 \u258f left 1/6 block (trim)
{ {0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00 } }, // 136 \u258e left 1/3 block (trim)
{ {0x3c, 0x3c, 0x3c, 0x00, 0x00, 0x00 } }, // 137 \u258c left 1/2 block (trim)
{ {0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00 } }, // 138 \u258b left 2/3 block (trim)
{ {0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x00 } }, // 139 \u258a left 5/6 block (trim)
{ {0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c } }, // 140 \u2588 full block (horiz trim)
{ {0xff, 0xff, 0xff, 0xff, 0xff, 0xff } }, // 141 \u2588 really full block
{ {0x00, 0x44, 0xaa, 0x9a, 0x0c, 0x00 } }, // 142 \u03b4 delta
{ {0x00, 0x38, 0x54, 0x54, 0x54, 0x00 } }, // 143 \u03b5 epsilon
{ {0x00, 0x40, 0x7e, 0x40, 0x7e, 0x40 } }, // 144 \u03c0 pi
{ {0x00, 0x18, 0x24, 0x24, 0x38, 0x20 } }, // 145 \u03c3 sigma
{ {0x00, 0x10, 0x20, 0x1e, 0x20, 0x00 } }, // 146 \u03c4 tau
{ {0x00, 0x18, 0x24, 0x7e, 0x24, 0x18 } }, // 147 \u03c6 phi
{ {0x00, 0x18, 0x24, 0x18, 0x24, 0x18 } }, // 148 \u221e infinity
{ {0x00, 0xfe, 0x80, 0x80, 0xc0, 0x00 } }, // 149 \u0393 Gamma
{ {0x00, 0x7c, 0x92, 0x92, 0x7c, 0x00 } }, // 150 \u0398 Theta
{ {0x00, 0x10, 0xaa, 0xee, 0xaa, 0x10 } }, // 151 \u03a6 Phi
{ {0x00, 0x32, 0x4e, 0x40, 0x4e, 0x32 } }, // 152 \u03a9 Omega
{ {0x3f, 0x31, 0x31, 0x29, 0x29, 0x25 } }, // 153 left half of mail icon
{ {0x25, 0x29, 0x29, 0x31, 0x31, 0x3f } }, // 154 right half of mail icon
{ {0x00, 0x10, 0x38, 0x54, 0x10, 0x10 } }, // 155 \u2190 left arrow
{ {0x00, 0x20, 0x40, 0xfe, 0x40, 0x20 } }, // 156 \u2191 up arrow
{ {0x00, 0x10, 0x10, 0x54, 0x38, 0x10 } }, // 157 \u2192 right arrow
{ {0x00, 0x08, 0x04, 0xfe, 0x04, 0x08 } }, // 158 \u2193 down arrow
{ {0x10, 0x38, 0x54, 0x54, 0x38, 0x10 } }, // 159 \u2194 left right arrrow
{ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, // 160
{ {0x00, 0x00, 0x0c, 0xbe, 0x0c, 0x00 } }, // 161 \u00a1 ¡ inverted exclamation mark
{ {0x00, 0x18, 0x24, 0x7e, 0x24, 0x00 } }, // 162 \u00a2 ¢ cent
{ {0x00, 0x12, 0x7c, 0x92, 0x92, 0x46 } }, // 163 \u00a3 £ pound
{ {0x00, 0x1c, 0x2a, 0x2a, 0x22, 0x14 } }, // 164 \u20ac ¤ euro
{ {0x00, 0x94, 0x54, 0x3e, 0x54, 0x94 } }, // 165 \u00a5 ¥ yen
{ {0x00, 0x12, 0xaa, 0x6a, 0xaa, 0x24 } }, // 166 \u0160 ¦ capital S with caron
{ {0x00, 0x44, 0xb2, 0xaa, 0x9a, 0x44 } }, // 167 \u00a7 § section
{ {0x00, 0x10, 0xaa, 0x6a, 0xaa, 0x04 } }, // 168 \u0161 ¨ small s with caron
{ {0x00, 0x1c, 0x3e, 0x36, 0x22, 0x1c } }, // 169 \u00a9 © copyright
{ {0x00, 0x10, 0xaa, 0xaa, 0xaa, 0x7a } }, // 170 \u00aa ª feminine ordinal
{ {0x00, 0x10, 0x28, 0x00, 0x10, 0x28 } }, // 171 \u00ab « left double angle
{ {0x20, 0x20, 0x20, 0x20, 0x20, 0x38 } }, // 172 \u00ac ¬ not
{ {0x00, 0x10, 0x10, 0x10, 0x10, 0x10 } }, // 173 \u00ad ­ hyphen
{ {0x00, 0x1c, 0x3e, 0x3a, 0x2e, 0x1c } }, // 174 \u00ae ® registered
{ {0x00, 0x80, 0x80, 0x80, 0x80, 0x80 } }, // 175 \u00af ¯ macron
{ {0x00, 0x60, 0x90, 0x90, 0x90, 0x60 } }, // 176 \u00b0 ° degree
{ {0x00, 0x24, 0x24, 0xfc, 0x24, 0x24 } }, // 177 \u00b1 ± plus-minus
{ {0x00, 0x90, 0xb0, 0x50, 0x00, 0x00 } }, // 178 \u00b2 ² superscript 2
{ {0x00, 0xa8, 0xa8, 0x50, 0x00, 0x00 } }, // 179 \u00b3 ³ superscript 3
{ {0x00, 0xa6, 0x6a, 0x72, 0xa2, 0x00 } }, // 180 \u017d ´ Z caron
{ {0x00, 0x3f, 0x04, 0x04, 0x38, 0x00 } }, // 181 \u00b5 µ micro
{ {0x00, 0x60, 0x90, 0xfe, 0x80, 0xfe } }, // 182 \u00b6 ¶ paragraph
{ {0x00, 0x00, 0x18, 0x18, 0x00, 0x00 } }, // 183 \u00b7 · middle dot
{ {0x00, 0xa6, 0x6a, 0x6a, 0xb2, 0x00 } }, // 184 \u017e ¸ z caron
{ {0x00, 0x48, 0xf8, 0x08, 0x00, 0x00 } }, // 185 \u00b9 ¹ superscript 1
{ {0x00, 0x72, 0x8a, 0x8a, 0x72, 0x00 } }, // 186 \u00ba º masculine ordinal
{ {0x00, 0x28, 0x10, 0x00, 0x28, 0x10 } }, // 187 \u00bb » right double angle
{ {0x00, 0xfe, 0x82, 0xfe, 0x92, 0x92 } }, // 188 \u0152 ¼ OE
{ {0x00, 0x3e, 0x22, 0x3e, 0x2a, 0x12 } }, // 189 \u0153 ½ oe
{ {0x00, 0x20, 0x90, 0x0e, 0x90, 0x20 } }, // 190 \u0178 ¾ Y diaeresis
{ {0x00, 0x0c, 0x12, 0xb2, 0x02, 0x04 } }, // 191 \u00bf ¿ inverted question mark
{ {0x00, 0x0e, 0x94, 0xa4, 0x54, 0x0e } }, // 192 \u00c0 À A grave
{ {0x00, 0x0e, 0x54, 0xa4, 0x94, 0x0e } }, // 193 \u00c1 Á A acute
{ {0x00, 0x0e, 0x54, 0xa4, 0x54, 0x0e } }, // 194 \u00c2 Â A circumflex
{ {0x00, 0x4e, 0x94, 0x64, 0x94, 0x0e } }, // 195 \u00c3 Ã A tilde
{ {0x00, 0x0e, 0x94, 0x24, 0x94, 0x0e } }, // 196 \u00c4 Ä A diaeresis
{ {0x00, 0x1e, 0xf4, 0xa4, 0xf4, 0x1e } }, // 197 \u00c5 Å A ring
{ {0x00, 0x7e, 0x90, 0xfe, 0x92, 0x92 } }, // 198 \u00c6 Æ AE
{ {0x00, 0x78, 0x85, 0x87, 0x84, 0x48 } }, // 199 \u00c7 Ç C cedilla
{ {0x00, 0x3e, 0xaa, 0xaa, 0x6a, 0x62 } }, // 200 \u00c8 È E grave
{ {0x00, 0x3e, 0x6a, 0x6a, 0xaa, 0xa2 } }, // 201 \u00c9 É E acute
{ {0x00, 0x7e, 0xaa, 0xaa, 0x6a, 0x22 } }, // 202 \u00ca Ê E circumflex
{ {0x00, 0x3e, 0xaa, 0x2a, 0x2a, 0xa2 } }, // 203 \u00cb Ë E diaeresis
{ {0x00, 0x00, 0xa2, 0xbe, 0x62, 0x00 } }, // 204 \u00cc Ì I grave
{ {0x00, 0x00, 0x62, 0xbe, 0xa2, 0x00 } }, // 205 \u00cd Í I acute
{ {0x00, 0x00, 0x62, 0xbe, 0x62, 0x00 } }, // 206 \u00ce Î I circumflex
{ {0x00, 0x00, 0xa2, 0x3e, 0xa2, 0x00 } }, // 207 \u00cf Ï I diaeresis
{ {0x00, 0xfe, 0x92, 0x92, 0x82, 0x7c } }, // 208 \u00d0 Ð Eth
{ {0x00, 0x5e, 0x88, 0x44, 0x9e, 0x00 } }, // 209 \u00d1 Ñ N tilde
{ {0x00, 0x9c, 0xa2, 0x62, 0x1c, 0x00 } }, // 210 \u00d2 Ò O grave
{ {0x00, 0x1c, 0x62, 0xa2, 0x9c, 0x00 } }, // 211 \u00d3 Ó O acute
{ {0x00, 0x1c, 0x62, 0xa2, 0x5c, 0x00 } }, // 212 \u00d4 Ô O circumflex
{ {0x00, 0x5c, 0xa2, 0x62, 0x9c, 0x00 } }, // 213 \u00d5 Õ O tilde
{ {0x00, 0x9c, 0x22, 0x22, 0x9c, 0x00 } }, // 214 \u00d6 Ö O diaeresis
{ {0x00, 0x14, 0x08, 0x08, 0x14, 0x00 } }, // 215 \u00d7 × multiplication
{ {0x00, 0x7c, 0x86, 0xba, 0xc2, 0x7c } }, // 216 \u00d8 Ø O slash
{ {0x00, 0x3c, 0x82, 0x82, 0x7c, 0x00 } }, // 217 \u00d9 Ù U grave
{ {0x00, 0x3c, 0x42, 0x82, 0xbc, 0x00 } }, // 218 \u00da Ú U acute
{ {0x00, 0x1c, 0x42, 0x82, 0x5c, 0x00 } }, // 219 \u00db Û U circumflex
{ {0x00, 0x3c, 0x82, 0x02, 0xbc, 0x00 } }, // 220 \u00dc Ü U diaeresis
{ {0x00, 0x20, 0x50, 0x8e, 0x90, 0x20 } }, // 221 \u00dd Ý Y acute
{ {0x00, 0xff, 0x22, 0x22, 0x22, 0x1c } }, // 222 \u00de Þ Thorn
{ {0x00, 0x7e, 0x50, 0x52, 0x2c, 0x00 } }, // 223 \u00df ß Eszett
{ {0x00, 0x04, 0xaa, 0xaa, 0x6a, 0x1e } }, // 224 \u00e0 à a grave
{ {0x00, 0x04, 0x6a, 0xaa, 0xaa, 0x1e } }, // 225 \u00e1 á a acute
{ {0x00, 0x04, 0x6a, 0xaa, 0x6a, 0x1e } }, // 226 \u00e2 â a circumplex
{ {0x00, 0x04, 0x6a, 0xaa, 0x6a, 0x9e } }, // 227 \u00e3 ã a tilde
{ {0x00, 0x04, 0xaa, 0x2a, 0xaa, 0x1e } }, // 228 \u00e4 ä a diaeresis
{ {0x00, 0x04, 0xea, 0xaa, 0xea, 0x1e } }, // 229 \u00e5 å a ring
{ {0x00, 0x2c, 0x2a, 0x3e, 0x2a, 0x1a } }, // 230 \u00e6 æ ae
{ {0x00, 0x38, 0x45, 0x47, 0x44, 0x28 } }, // 231 \u00e7 ç c cedilla
{ {0x00, 0x1c, 0xaa, 0xaa, 0x6a, 0x10 } }, // 232 \u00e8 è e grave
{ {0x00, 0x1c, 0x2a, 0x6a, 0xaa, 0x90 } }, // 233 \u00e9 é e acute
{ {0x00, 0x1c, 0x6a, 0xaa, 0x6a, 0x10 } }, // 234 \u00ea ê e circumflex
{ {0x00, 0x1c, 0xaa, 0x2a, 0xaa, 0x10 } }, // 235 \u00eb ë e diaeresis
{ {0x00, 0x00, 0x80, 0xbe, 0x42, 0x00 } }, // 236 \u00ec ì i grave
{ {0x00, 0x00, 0x40, 0xbe, 0x82, 0x00 } }, // 237 \u00ed í i acute
{ {0x00, 0x00, 0x40, 0x9e, 0x42, 0x00 } }, // 238 \u00ee î i circumflex
{ {0x00, 0x00, 0x80, 0x3e, 0x82, 0x00 } }, // 239 \u00ef ï i diaeresis
{ {0x00, 0x9c, 0xe2, 0xa2, 0xa2, 0x7c } }, // 240 \u00f0 ð eth
{ {0x00, 0x5e, 0x90, 0x50, 0x8e, 0x00 } }, // 241 \u00f1 ñ n tilde
{ {0x00, 0x9c, 0xa2, 0x62, 0x1c, 0x00 } }, // 242 \u00f2 ò o grave
{ {0x00, 0x1c, 0x62, 0xa2, 0x9c, 0x00 } }, // 243 \u00f3 ó o acute
{ {0x00, 0x1c, 0x62, 0xa2, 0x5c, 0x00 } }, // 244 \u00f4 ô o circumflex
{ {0x00, 0x5c, 0xa2, 0x62, 0x9c, 0x00 } }, // 245 \u00f5 õ o tilde
{ {0x00, 0x1c, 0xa2, 0x22, 0x9c, 0x00 } }, // 246 \u00f6 ö o diaeresis
{ {0x00, 0x10, 0x10, 0x54, 0x10, 0x10 } }, // 247 \u00f7 ÷ division
{ {0x00, 0x1d, 0x26, 0x2a, 0x32, 0x5c } }, // 248 \u00f8 ø o slash
{ {0x00, 0xbc, 0x82, 0x44, 0x3e, 0x00 } }, // 249 \u00f9 ù u grave
{ {0x00, 0x3c, 0x42, 0x84, 0xbe, 0x00 } }, // 250 \u00fa ú u acute
{ {0x00, 0x1c, 0x42, 0x84, 0x5e, 0x00 } }, // 251 \u00fb û u circumflex
{ {0x00, 0x3c, 0x82, 0x04, 0xbe, 0x00 } }, // 252 \u00fc ü u diaeresis
{ {0x00, 0x39, 0x45, 0x86, 0xbc, 0x00 } }, // 253 \u00fd ý y acute
{ {0x00, 0xff, 0x12, 0x12, 0x12, 0x0c } }, // 254 \u00fe þ thorn
{ {0x00, 0x39, 0x85, 0x06, 0xbc, 0x00 } } // 255 \u00ff ÿ y diaeresis
};
#endif
#ifdef IMONLCD_FONT_DESC
/* This char array is available for use when converting to and from the
* structure. It is not needed for normal LCD use.
*/
static char *desc[] = {
" 0 \\u0020 space",
" 1 \\u263a light smiley face",
" 2 \\u263b dark smiley face",
" 3 \\u2665 full heart",
" 4 small heart",
" 5 \\u2660 club",
" 6 \\u2660 spade",
" 7 \\u2022 bullet",
" 8 \\u25d8 big rectangle",
" 9 \\u25cb small rectangle",
" 10 \\u25d9 filled rectangle",
" 11 \\u2642 man symbol",
" 12 \\u2640 woman symbol",
" 13 \\u266a musical note",
" 14 \\u266b double music note",
" 15 \\u25cf record",
" 16 \\u25b6 play",
" 17 \\u25c0 play backwards",
" 18 pause",
" 19 \\u25fe stop",
" 20 \\u23cf eject",
" 21 fwd",
" 22 rev",
" 23 \\u2581 lower 1/8 block (full)",
" 24 \\u2582 lower 1/4 block (full)",
" 25 \\u2583 lower 3/8 block (full)",
" 26 \\u2584 lower 1/2 block (full)",
" 27 \\u2585 lower 5/8 block (full)",
" 28 \\u2586 lower 3/4 block (full)",
" 29 \\u2587 lower 7/8 block (full)",
" 30",
" 31",
" 32 \\u0020 space",
" 33 \\u0021 !",
" 34 \\u0022 \"",
" 35 \\u0023 #",
" 36 \\u0024 $",
" 37 \\u0025 %",
" 38 \\u0026 &",
" 39 \\u0027 '",
" 40 \\u0028 (",
" 41 \\u0029 )",
" 42 \\u002a *",
" 43 \\u002b +",
" 44 \\u002c ,",
" 45 \\u002d -",
" 46 \\u002e .",
" 47 \\u002f /",
" 48 \\u0030 0",
" 49 \\u0031 1",
" 50 \\u0032 2",
" 51 \\u0033 3",
" 52 \\u0034 4",
" 53 \\u0035 5",
" 54 \\u0036 6",
" 55 \\u0037 7",
" 56 \\u0038 8",
" 57 \\u0039 9",
" 58 \\u003a :",
" 59 \\u003b ;",
" 60 \\u003c <",
" 61 \\u003d =",
" 62 \\u003e >",
" 63 \\u003f ?",
" 64 \\u0040 @",
" 65 \\u0041 A",
" 66 \\u0042 B",
" 67 \\u0043 C",
" 68 \\u0044 D",
" 69 \\u0045 E",
" 70 \\u0046 F",
" 71 \\u0047 G",
" 72 \\u0048 H",
" 73 \\u0049 I",
" 74 \\u004a J",
" 75 \\u004b K",
" 76 \\u004c L",
" 77 \\u004d M",
" 78 \\u004e N",
" 79 \\u004f O",
" 80 \\u0050 P",
" 81 \\u0051 Q",
" 82 \\u0052 R",
" 83 \\u0053 S",
" 84 \\u0054 T",
" 85 \\u0055 U",
" 86 \\u0056 V",
" 87 \\u0057 W",
" 88 \\u0058 X",
" 89 \\u0059 Y",
" 90 \\u005a Z",
" 91 \\u005b [",
" 92 \\u005c \\",
" 93 \\u005d ]",
" 94 \\u005e ^",
" 95 \\u005f _",
" 96 \\u0060 `",
" 97 \\u0061 a",
" 98 \\u0062 b",
" 99 \\u0063 c",
"100 \\u0064 d",
"101 \\u0065 e",
"102 \\u0066 f",
"103 \\u0067 g",
"104 \\u0068 h",
"105 \\u0069 i",
"106 \\u006a j",
"107 \\u006b k",
"108 \\u006c l",
"109 \\u006d m",
"110 \\u006e n",
"111 \\u006f o",
"112 \\u0070 p",
"113 \\u0071 q",
"114 \\u0072 r",
"115 \\u0073 s",
"116 \\u0074 t",
"117 \\u0075 u",
"118 \\u0076 v",
"119 \\u0077 w",
"120 \\u0078 x",
"121 \\u0079 y",
"122 \\u007a z",
"123 \\u007b {",
"124 \\u007c |",
"125 \\u007d }",
"126 \\u007e ~",
"127 \\u2581 lower 1/8 block (trim)",
"128 \\u2582 lower 1/4 block (trim)",
"129 \\u2583 lower 3/8 block (trim)",
"130 \\u2584 lower 1/2 block (trim)",
"131 \\u2585 lower 5/8 block (trim)",
"132 \\u2586 lower 3/4 block (trim)",
"133 \\u2587 lower 7/8 block (trim)",
"134 \\u2588 full block (vert trim)",
"135 \\u258f left 1/6 block (trim)",
"136 \\u258e left 1/3 block (trim)",
"137 \\u258c left 1/2 block (trim)",
"138 \\u258b left 2/3 block (trim)",
"139 \\u258a left 5/6 block (trim)",
"140 \\u2588 full block (horiz trim)",
"141 \\u2588 really full block",
"142 \\u03b4 delta",
"143 \\u03b5 epsilon",
"144 \\u03c0 pi",
"145 \\u03c3 sigma",
"146 \\u03c4 tau",
"147 \\u03c6 phi",
"148 \\u221e infinity",
"149 \\u0393 Gamma",
"150 \\u0398 Theta",
"151 \\u03a6 Phi",
"152 \\u03a9 Omega",
"153 left half of mail icon",
"154 right half of mail icon",
"155 \\u2190 left arrow",
"156 \\u2191 up arrow",
"157 \\u2192 right arrow",
"158 \\u2193 down arrow",
"159 \\u2194 left right arrrow",
"160",
"161 \\u00a1 ¡ inverted exclamation mark",
"162 \\u00a2 ¢ cent",
"163 \\u00a3 £ pound",
"164 \\u20ac ¤ euro",
"165 \\u00a5 ¥ yen",
"166 \\u0160 ¦ capital S with caron",
"167 \\u00a7 § section",
"168 \\u0161 ¨ small s with caron",
"169 \\u00a9 © copyright",
"170 \\u00aa ª feminine ordinal",
"171 \\u00ab « left double angle",
"172 \\u00ac ¬ not",
"173 \\u00ad ­ hyphen",
"174 \\u00ae ® registered",
"175 \\u00af ¯ macron",
"176 \\u00b0 ° degree",
"177 \\u00b1 ± plus-minus",
"178 \\u00b2 ² superscript 2",
"179 \\u00b3 ³ superscript 3",
"180 \\u017d ´ Z caron",
"181 \\u00b5 µ micro",
"182 \\u00b6 ¶ paragraph",
"183 \\u00b7 · middle dot",
"184 \\u017e ¸ z caron",
"185 \\u00b9 ¹ superscript 1",
"186 \\u00ba º masculine ordinal",
"187 \\u00bb » right double angle",
"188 \\u0152 ¼ OE",
"189 \\u0153 ½ oe",
"190 \\u0178 ¾ Y diaeresis",
"191 \\u00bf ¿ inverted question mark",
"192 \\u00c0 À A grave",
"193 \\u00c1 Á A acute",
"194 \\u00c2 Â A circumflex",
"195 \\u00c3 Ã A tilde",
"196 \\u00c4 Ä A diaeresis",
"197 \\u00c5 Å A ring",
"198 \\u00c6 Æ AE",
"199 \\u00c7 Ç C cedilla",
"200 \\u00c8 È E grave",
"201 \\u00c9 É E acute",
"202 \\u00ca Ê E circumflex",
"203 \\u00cb Ë E diaeresis",
"204 \\u00cc Ì I grave",
"205 \\u00cd Í I acute",
"206 \\u00ce Î I circumflex",
"207 \\u00cf Ï I diaeresis",
"208 \\u00d0 Ð Eth",
"209 \\u00d1 Ñ N tilde",
"210 \\u00d2 Ò O grave",
"211 \\u00d3 Ó O acute",
"212 \\u00d4 Ô O circumflex",
"213 \\u00d5 Õ O tilde",
"214 \\u00d6 Ö O diaeresis",
"215 \\u00d7 × multiplication",
"216 \\u00d8 Ø O slash",
"217 \\u00d9 Ù U grave",
"218 \\u00da Ú U acute",
"219 \\u00db Û U circumflex",
"220 \\u00dc Ü U diaeresis",
"221 \\u00dd Ý Y acute",
"222 \\u00de Þ Thorn",
"223 \\u00df ß Eszett",
"224 \\u00e0 à a grave",
"225 \\u00e1 á a acute",
"226 \\u00e2 â a circumplex",
"227 \\u00e3 ã a tilde",
"228 \\u00e4 ä a diaeresis",
"229 \\u00e5 å a ring",
"230 \\u00e6 æ ae",
"231 \\u00e7 ç c cedilla",
"232 \\u00e8 è e grave",
"233 \\u00e9 é e acute",
"234 \\u00ea ê e circumflex",
"235 \\u00eb ë e diaeresis",
"236 \\u00ec ì i grave",
"237 \\u00ed í i acute",
"238 \\u00ee î i circumflex",
"239 \\u00ef ï i diaeresis",
"240 \\u00f0 ð eth",
"241 \\u00f1 ñ n tilde",
"242 \\u00f2 ò o grave",
"243 \\u00f3 ó o acute",
"244 \\u00f4 ô o circumflex",
"245 \\u00f5 õ o tilde",
"246 \\u00f6 ö o diaeresis",
"247 \\u00f7 ÷ division",
"248 \\u00f8 ø o slash",
"249 \\u00f9 ù u grave",
"250 \\u00fa ú u acute",
"251 \\u00fb û u circumflex",
"252 \\u00fc ü u diaeresis",
"253 \\u00fd ý y acute",
"254 \\u00fe þ thorn",
"255 \\u00ff ÿ y diaeresis"
};
#endif
/**
* This is the definition for a "big" font, which is a font that
* simply takes up twice as many pixels as the normal font.
* (12 col x 18 row pixels). It is only used for drawing numbers.
*/
typedef struct _imon_bigfont {
int ch;
unsigned short pixels[12];
} imon_bigfont;
/** Character data for the big font */
static imon_bigfont bigfont[] = {
{'0', {0x0000, 0x07E0, 0x1FF8, 0x3FFC, 0x7FFE, 0x4002, 0x4002, 0x4002, 0x3FFC, 0x3FFC, 0x1FF8, 0x07E0}},
{'1', {0x0000, 0x0000, 0x0000, 0x4002, 0x7FFE, 0x7FFE, 0x7FFE, 0x7FFE, 0x0002, 0x0000, 0x0000, 0x0000}},
{'2', {0x0000, 0x1806, 0x3C2C, 0x7C7C, 0x5C5C, 0x40DE, 0x7F9E, 0x7F8E, 0x3F0E, 0x1E0C, 0x0018, 0x0000}},
{'3', {0x0000, 0x001C, 0x3C3C, 0x7C3E, 0x7C1A, 0x0080, 0x4182, 0x7FFE, 0x7FFE, 0x3E7C, 0x1C38, 0x0000}},
{'4', {0x0000, 0x0030, 0x0050, 0x0190, 0x0610, 0x0002, 0x1FFE, 0x3FFE, 0x7FFE, 0x7FFE, 0x0012, 0x0002}},
{'5', {0x0000, 0x0018, 0x7FBC, 0x793E, 0x3B1A, 0x3800, 0x3B02, 0x3BFE, 0x31FE, 0x61FC, 0x00F8, 0x0000}},
{'6', {0x0000, 0x07E0, 0x1FF8, 0x3FFC, 0x7FFE, 0x4002, 0x0180, 0x5982, 0x7DFE, 0x3DFC, 0x18FC, 0x0078}},
{'7', {0x0000, 0x0800, 0x7000, 0x3000, 0x703C, 0x787E, 0x79FE, 0x7BFC, 0x3E00, 0x3000, 0x6000, 0x0000}},
{'8', {0x0000, 0x1C3C, 0x3E7E, 0x7FFE, 0x7FFE, 0x4182, 0x4182, 0x7FFE, 0x7FFE, 0x3E7E, 0x1C3C, 0x0000}},
{'9', {0x0000, 0x1E18, 0x3F3C, 0x7FBE, 0x7F9A, 0x0180, 0x4002, 0x7FFE, 0x3FFC, 0x1FF8, 0x07E0, 0x0000}},
{':', {0x0000, 0x030C, 0x079E, 0x079E, 0x030C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}},
/*
* Marks the end of the array, but also serves as the character that
* unknown inputs are mapped to (essentially, a "space")
*/
{'\0', {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
};