* add DFI driver to provide hardware-based memory controller load
* adapted DRAM Memory Controller driver from rk3328, add necessary headers
* provide device tree overlays to enable DDR3 clock scaling
* adapted rk322x-box to allow DDR speed bin selection to user
* add ipb900 board gpio configuration
* add rtl8723cs driver to linux-current kernel
* use ddrbin v1.10 set to 330 Mhz at boot
* provide overlays for ddr3 at 330, 528, 660 and 800 mhz
* split emmc overlays to enable options by user choice
* modified rk322x-config to support dmc, emmc overlays
* remove optee trust os in favor of rockchip proprietary blob
for dmc functionality
8299 lines
552 KiB
Plaintext
8299 lines
552 KiB
Plaintext
From 1d1449abcdd208f816bef9f08c571c1453b11622 Mon Sep 17 00:00:00 2001
|
||
From: Paolo Sabatino <paolo.sabatino@gmail.com>
|
||
Date: Thu, 6 May 2021 17:08:52 +0000
|
||
Subject: [PATCH] Add OpenVFD driver for FD628 led chip and clones
|
||
|
||
---
|
||
drivers/leds/Kconfig | 1 +
|
||
drivers/leds/Makefile | 2 +
|
||
drivers/leds/vfd/Kconfig | 5 +
|
||
drivers/leds/vfd/LICENSE | 674 +++++++++++
|
||
drivers/leds/vfd/Makefile | 15 +
|
||
drivers/leds/vfd/controllers/controller.h | 28 +
|
||
.../leds/vfd/controllers/controller_list.h | 12 +
|
||
drivers/leds/vfd/controllers/dummy.c | 99 ++
|
||
drivers/leds/vfd/controllers/dummy.h | 8 +
|
||
drivers/leds/vfd/controllers/fd628.c | 374 ++++++
|
||
drivers/leds/vfd/controllers/fd628.h | 8 +
|
||
drivers/leds/vfd/controllers/fd650.c | 296 +++++
|
||
drivers/leds/vfd/controllers/fd650.h | 8 +
|
||
.../vfd/controllers/fonts/Grotesk16x32_h.h | 112 ++
|
||
.../vfd/controllers/fonts/Grotesk16x32_v.h | 107 ++
|
||
.../vfd/controllers/fonts/Grotesk24x48_v.h | 107 ++
|
||
.../vfd/controllers/fonts/Grotesk32x64_h.h | 112 ++
|
||
.../leds/vfd/controllers/fonts/Retro8x16_v.h | 107 ++
|
||
.../leds/vfd/controllers/fonts/icons16x16_h.h | 23 +
|
||
.../leds/vfd/controllers/fonts/icons16x16_v.h | 23 +
|
||
.../leds/vfd/controllers/fonts/icons32x32_h.h | 23 +
|
||
.../leds/vfd/controllers/fonts/icons32x32_v.h | 23 +
|
||
.../fonts/icons_source/16/00none.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/01channel.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/02temp.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/03calendar.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/04media.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/05tv.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/10eth.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/11wifi.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/12play.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/13pause.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/14usb.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/15sd.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/16bt.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/17apps.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/16/18setup.bmp | Bin 0 -> 126 bytes
|
||
.../fonts/icons_source/32/00none.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/01channel.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/02temp.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/03calendar.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/04media.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/05tv.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/10eth.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/11wifi.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/12play.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/13pause.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/14usb.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/15sd.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/16bt.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/17apps.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/32/18setup.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/degree16x32.bmp | Bin 0 -> 190 bytes
|
||
.../fonts/icons_source/degree24x48.bmp | Bin 0 -> 254 bytes
|
||
.../fonts/icons_source/degree32x64.bmp | Bin 0 -> 318 bytes
|
||
drivers/leds/vfd/controllers/gfx_mono_ctrl.c | 963 +++++++++++++++
|
||
drivers/leds/vfd/controllers/gfx_mono_ctrl.h | 58 +
|
||
drivers/leds/vfd/controllers/hd44780.c | 760 ++++++++++++
|
||
drivers/leds/vfd/controllers/hd44780.h | 8 +
|
||
drivers/leds/vfd/controllers/il3829.c | 513 ++++++++
|
||
drivers/leds/vfd/controllers/il3829.h | 8 +
|
||
drivers/leds/vfd/controllers/pcd8544.c | 210 ++++
|
||
drivers/leds/vfd/controllers/pcd8544.h | 8 +
|
||
drivers/leds/vfd/controllers/seg7_ctrl.c | 103 ++
|
||
drivers/leds/vfd/controllers/ssd1306.c | 353 ++++++
|
||
drivers/leds/vfd/controllers/ssd1306.h | 8 +
|
||
drivers/leds/vfd/glyphs.h | 339 ++++++
|
||
drivers/leds/vfd/openvfd_drv.c | 1036 +++++++++++++++++
|
||
drivers/leds/vfd/openvfd_drv.h | 302 +++++
|
||
drivers/leds/vfd/protocols/i2c_hw.c | 161 +++
|
||
drivers/leds/vfd/protocols/i2c_hw.h | 8 +
|
||
drivers/leds/vfd/protocols/i2c_sw.c | 257 ++++
|
||
drivers/leds/vfd/protocols/i2c_sw.h | 13 +
|
||
drivers/leds/vfd/protocols/protocol.h | 25 +
|
||
drivers/leds/vfd/protocols/spi_sw.c | 194 +++
|
||
drivers/leds/vfd/protocols/spi_sw.h | 14 +
|
||
76 files changed, 7508 insertions(+)
|
||
create mode 100644 drivers/leds/vfd/Kconfig
|
||
create mode 100644 drivers/leds/vfd/LICENSE
|
||
create mode 100644 drivers/leds/vfd/Makefile
|
||
create mode 100644 drivers/leds/vfd/controllers/controller.h
|
||
create mode 100644 drivers/leds/vfd/controllers/controller_list.h
|
||
create mode 100644 drivers/leds/vfd/controllers/dummy.c
|
||
create mode 100644 drivers/leds/vfd/controllers/dummy.h
|
||
create mode 100644 drivers/leds/vfd/controllers/fd628.c
|
||
create mode 100644 drivers/leds/vfd/controllers/fd628.h
|
||
create mode 100644 drivers/leds/vfd/controllers/fd650.c
|
||
create mode 100644 drivers/leds/vfd/controllers/fd650.h
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/Grotesk16x32_h.h
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/Grotesk16x32_v.h
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/Grotesk24x48_v.h
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/Grotesk32x64_h.h
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/Retro8x16_v.h
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons16x16_h.h
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons16x16_v.h
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons32x32_h.h
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons32x32_v.h
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/00none.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/01channel.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/02temp.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/03calendar.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/04media.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/05tv.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/10eth.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/11wifi.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/12play.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/13pause.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/14usb.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/15sd.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/16bt.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/17apps.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/16/18setup.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/00none.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/01channel.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/02temp.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/03calendar.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/04media.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/05tv.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/10eth.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/11wifi.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/12play.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/13pause.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/14usb.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/15sd.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/16bt.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/17apps.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/32/18setup.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/degree16x32.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/degree24x48.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/fonts/icons_source/degree32x64.bmp
|
||
create mode 100644 drivers/leds/vfd/controllers/gfx_mono_ctrl.c
|
||
create mode 100644 drivers/leds/vfd/controllers/gfx_mono_ctrl.h
|
||
create mode 100644 drivers/leds/vfd/controllers/hd44780.c
|
||
create mode 100644 drivers/leds/vfd/controllers/hd44780.h
|
||
create mode 100644 drivers/leds/vfd/controllers/il3829.c
|
||
create mode 100644 drivers/leds/vfd/controllers/il3829.h
|
||
create mode 100644 drivers/leds/vfd/controllers/pcd8544.c
|
||
create mode 100644 drivers/leds/vfd/controllers/pcd8544.h
|
||
create mode 100644 drivers/leds/vfd/controllers/seg7_ctrl.c
|
||
create mode 100644 drivers/leds/vfd/controllers/ssd1306.c
|
||
create mode 100644 drivers/leds/vfd/controllers/ssd1306.h
|
||
create mode 100644 drivers/leds/vfd/glyphs.h
|
||
create mode 100644 drivers/leds/vfd/openvfd_drv.c
|
||
create mode 100644 drivers/leds/vfd/openvfd_drv.h
|
||
create mode 100644 drivers/leds/vfd/protocols/i2c_hw.c
|
||
create mode 100644 drivers/leds/vfd/protocols/i2c_hw.h
|
||
create mode 100644 drivers/leds/vfd/protocols/i2c_sw.c
|
||
create mode 100644 drivers/leds/vfd/protocols/i2c_sw.h
|
||
create mode 100644 drivers/leds/vfd/protocols/protocol.h
|
||
create mode 100644 drivers/leds/vfd/protocols/spi_sw.c
|
||
create mode 100644 drivers/leds/vfd/protocols/spi_sw.h
|
||
|
||
diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
|
||
index 849d3c5f9..655c296f8 100644
|
||
--- a/drivers/leds/Kconfig
|
||
+++ b/drivers/leds/Kconfig
|
||
@@ -930,5 +930,6 @@ config LEDS_ACER_A500
|
||
|
||
comment "LED Triggers"
|
||
source "drivers/leds/trigger/Kconfig"
|
||
+source "drivers/leds/vfd/Kconfig"
|
||
|
||
endif # NEW_LEDS
|
||
diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
|
||
index 73e603e17..3ab0bf141 100644
|
||
--- a/drivers/leds/Makefile
|
||
+++ b/drivers/leds/Makefile
|
||
@@ -105,3 +105,5 @@ obj-$(CONFIG_LEDS_USER) += uleds.o
|
||
|
||
# LED Triggers
|
||
obj-$(CONFIG_LEDS_TRIGGERS) += trigger/
|
||
+
|
||
+obj-$(CONFIG_LEDS_CLASS) += vfd/
|
||
diff --git a/drivers/leds/vfd/Kconfig b/drivers/leds/vfd/Kconfig
|
||
new file mode 100644
|
||
index 000000000..6d77779c3
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/Kconfig
|
||
@@ -0,0 +1,5 @@
|
||
+config LEDS_FD628
|
||
+ tristate "FD628 and clones LED support"
|
||
+ help
|
||
+ This options enabled FD628 driver and clones
|
||
+
|
||
diff --git a/drivers/leds/vfd/LICENSE b/drivers/leds/vfd/LICENSE
|
||
new file mode 100644
|
||
index 000000000..f288702d2
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/LICENSE
|
||
@@ -0,0 +1,674 @@
|
||
+ GNU GENERAL PUBLIC LICENSE
|
||
+ Version 3, 29 June 2007
|
||
+
|
||
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||
+ Everyone is permitted to copy and distribute verbatim copies
|
||
+ of this license document, but changing it is not allowed.
|
||
+
|
||
+ Preamble
|
||
+
|
||
+ The GNU General Public License is a free, copyleft license for
|
||
+software and other kinds of works.
|
||
+
|
||
+ The licenses for most software and other practical works are designed
|
||
+to take away your freedom to share and change the works. By contrast,
|
||
+the GNU General Public License is intended to guarantee your freedom to
|
||
+share and change all versions of a program--to make sure it remains free
|
||
+software for all its users. We, the Free Software Foundation, use the
|
||
+GNU General Public License for most of our software; it applies also to
|
||
+any other work released this way by its authors. You can apply it to
|
||
+your programs, too.
|
||
+
|
||
+ When we speak of free software, we are referring to freedom, not
|
||
+price. Our General Public Licenses are designed to make sure that you
|
||
+have the freedom to distribute copies of free software (and charge for
|
||
+them if you wish), that you receive source code or can get it if you
|
||
+want it, that you can change the software or use pieces of it in new
|
||
+free programs, and that you know you can do these things.
|
||
+
|
||
+ To protect your rights, we need to prevent others from denying you
|
||
+these rights or asking you to surrender the rights. Therefore, you have
|
||
+certain responsibilities if you distribute copies of the software, or if
|
||
+you modify it: responsibilities to respect the freedom of others.
|
||
+
|
||
+ For example, if you distribute copies of such a program, whether
|
||
+gratis or for a fee, you must pass on to the recipients the same
|
||
+freedoms that you received. You must make sure that they, too, receive
|
||
+or can get the source code. And you must show them these terms so they
|
||
+know their rights.
|
||
+
|
||
+ Developers that use the GNU GPL protect your rights with two steps:
|
||
+(1) assert copyright on the software, and (2) offer you this License
|
||
+giving you legal permission to copy, distribute and/or modify it.
|
||
+
|
||
+ For the developers' and authors' protection, the GPL clearly explains
|
||
+that there is no warranty for this free software. For both users' and
|
||
+authors' sake, the GPL requires that modified versions be marked as
|
||
+changed, so that their problems will not be attributed erroneously to
|
||
+authors of previous versions.
|
||
+
|
||
+ Some devices are designed to deny users access to install or run
|
||
+modified versions of the software inside them, although the manufacturer
|
||
+can do so. This is fundamentally incompatible with the aim of
|
||
+protecting users' freedom to change the software. The systematic
|
||
+pattern of such abuse occurs in the area of products for individuals to
|
||
+use, which is precisely where it is most unacceptable. Therefore, we
|
||
+have designed this version of the GPL to prohibit the practice for those
|
||
+products. If such problems arise substantially in other domains, we
|
||
+stand ready to extend this provision to those domains in future versions
|
||
+of the GPL, as needed to protect the freedom of users.
|
||
+
|
||
+ Finally, every program is threatened constantly by software patents.
|
||
+States should not allow patents to restrict development and use of
|
||
+software on general-purpose computers, but in those that do, we wish to
|
||
+avoid the special danger that patents applied to a free program could
|
||
+make it effectively proprietary. To prevent this, the GPL assures that
|
||
+patents cannot be used to render the program non-free.
|
||
+
|
||
+ The precise terms and conditions for copying, distribution and
|
||
+modification follow.
|
||
+
|
||
+ TERMS AND CONDITIONS
|
||
+
|
||
+ 0. Definitions.
|
||
+
|
||
+ "This License" refers to version 3 of the GNU General Public License.
|
||
+
|
||
+ "Copyright" also means copyright-like laws that apply to other kinds of
|
||
+works, such as semiconductor masks.
|
||
+
|
||
+ "The Program" refers to any copyrightable work licensed under this
|
||
+License. Each licensee is addressed as "you". "Licensees" and
|
||
+"recipients" may be individuals or organizations.
|
||
+
|
||
+ To "modify" a work means to copy from or adapt all or part of the work
|
||
+in a fashion requiring copyright permission, other than the making of an
|
||
+exact copy. The resulting work is called a "modified version" of the
|
||
+earlier work or a work "based on" the earlier work.
|
||
+
|
||
+ A "covered work" means either the unmodified Program or a work based
|
||
+on the Program.
|
||
+
|
||
+ To "propagate" a work means to do anything with it that, without
|
||
+permission, would make you directly or secondarily liable for
|
||
+infringement under applicable copyright law, except executing it on a
|
||
+computer or modifying a private copy. Propagation includes copying,
|
||
+distribution (with or without modification), making available to the
|
||
+public, and in some countries other activities as well.
|
||
+
|
||
+ To "convey" a work means any kind of propagation that enables other
|
||
+parties to make or receive copies. Mere interaction with a user through
|
||
+a computer network, with no transfer of a copy, is not conveying.
|
||
+
|
||
+ An interactive user interface displays "Appropriate Legal Notices"
|
||
+to the extent that it includes a convenient and prominently visible
|
||
+feature that (1) displays an appropriate copyright notice, and (2)
|
||
+tells the user that there is no warranty for the work (except to the
|
||
+extent that warranties are provided), that licensees may convey the
|
||
+work under this License, and how to view a copy of this License. If
|
||
+the interface presents a list of user commands or options, such as a
|
||
+menu, a prominent item in the list meets this criterion.
|
||
+
|
||
+ 1. Source Code.
|
||
+
|
||
+ The "source code" for a work means the preferred form of the work
|
||
+for making modifications to it. "Object code" means any non-source
|
||
+form of a work.
|
||
+
|
||
+ A "Standard Interface" means an interface that either is an official
|
||
+standard defined by a recognized standards body, or, in the case of
|
||
+interfaces specified for a particular programming language, one that
|
||
+is widely used among developers working in that language.
|
||
+
|
||
+ The "System Libraries" of an executable work include anything, other
|
||
+than the work as a whole, that (a) is included in the normal form of
|
||
+packaging a Major Component, but which is not part of that Major
|
||
+Component, and (b) serves only to enable use of the work with that
|
||
+Major Component, or to implement a Standard Interface for which an
|
||
+implementation is available to the public in source code form. A
|
||
+"Major Component", in this context, means a major essential component
|
||
+(kernel, window system, and so on) of the specific operating system
|
||
+(if any) on which the executable work runs, or a compiler used to
|
||
+produce the work, or an object code interpreter used to run it.
|
||
+
|
||
+ The "Corresponding Source" for a work in object code form means all
|
||
+the source code needed to generate, install, and (for an executable
|
||
+work) run the object code and to modify the work, including scripts to
|
||
+control those activities. However, it does not include the work's
|
||
+System Libraries, or general-purpose tools or generally available free
|
||
+programs which are used unmodified in performing those activities but
|
||
+which are not part of the work. For example, Corresponding Source
|
||
+includes interface definition files associated with source files for
|
||
+the work, and the source code for shared libraries and dynamically
|
||
+linked subprograms that the work is specifically designed to require,
|
||
+such as by intimate data communication or control flow between those
|
||
+subprograms and other parts of the work.
|
||
+
|
||
+ The Corresponding Source need not include anything that users
|
||
+can regenerate automatically from other parts of the Corresponding
|
||
+Source.
|
||
+
|
||
+ The Corresponding Source for a work in source code form is that
|
||
+same work.
|
||
+
|
||
+ 2. Basic Permissions.
|
||
+
|
||
+ All rights granted under this License are granted for the term of
|
||
+copyright on the Program, and are irrevocable provided the stated
|
||
+conditions are met. This License explicitly affirms your unlimited
|
||
+permission to run the unmodified Program. The output from running a
|
||
+covered work is covered by this License only if the output, given its
|
||
+content, constitutes a covered work. This License acknowledges your
|
||
+rights of fair use or other equivalent, as provided by copyright law.
|
||
+
|
||
+ You may make, run and propagate covered works that you do not
|
||
+convey, without conditions so long as your license otherwise remains
|
||
+in force. You may convey covered works to others for the sole purpose
|
||
+of having them make modifications exclusively for you, or provide you
|
||
+with facilities for running those works, provided that you comply with
|
||
+the terms of this License in conveying all material for which you do
|
||
+not control copyright. Those thus making or running the covered works
|
||
+for you must do so exclusively on your behalf, under your direction
|
||
+and control, on terms that prohibit them from making any copies of
|
||
+your copyrighted material outside their relationship with you.
|
||
+
|
||
+ Conveying under any other circumstances is permitted solely under
|
||
+the conditions stated below. Sublicensing is not allowed; section 10
|
||
+makes it unnecessary.
|
||
+
|
||
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||
+
|
||
+ No covered work shall be deemed part of an effective technological
|
||
+measure under any applicable law fulfilling obligations under article
|
||
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||
+similar laws prohibiting or restricting circumvention of such
|
||
+measures.
|
||
+
|
||
+ When you convey a covered work, you waive any legal power to forbid
|
||
+circumvention of technological measures to the extent such circumvention
|
||
+is effected by exercising rights under this License with respect to
|
||
+the covered work, and you disclaim any intention to limit operation or
|
||
+modification of the work as a means of enforcing, against the work's
|
||
+users, your or third parties' legal rights to forbid circumvention of
|
||
+technological measures.
|
||
+
|
||
+ 4. Conveying Verbatim Copies.
|
||
+
|
||
+ You may convey verbatim copies of the Program's source code as you
|
||
+receive it, in any medium, provided that you conspicuously and
|
||
+appropriately publish on each copy an appropriate copyright notice;
|
||
+keep intact all notices stating that this License and any
|
||
+non-permissive terms added in accord with section 7 apply to the code;
|
||
+keep intact all notices of the absence of any warranty; and give all
|
||
+recipients a copy of this License along with the Program.
|
||
+
|
||
+ You may charge any price or no price for each copy that you convey,
|
||
+and you may offer support or warranty protection for a fee.
|
||
+
|
||
+ 5. Conveying Modified Source Versions.
|
||
+
|
||
+ You may convey a work based on the Program, or the modifications to
|
||
+produce it from the Program, in the form of source code under the
|
||
+terms of section 4, provided that you also meet all of these conditions:
|
||
+
|
||
+ a) The work must carry prominent notices stating that you modified
|
||
+ it, and giving a relevant date.
|
||
+
|
||
+ b) The work must carry prominent notices stating that it is
|
||
+ released under this License and any conditions added under section
|
||
+ 7. This requirement modifies the requirement in section 4 to
|
||
+ "keep intact all notices".
|
||
+
|
||
+ c) You must license the entire work, as a whole, under this
|
||
+ License to anyone who comes into possession of a copy. This
|
||
+ License will therefore apply, along with any applicable section 7
|
||
+ additional terms, to the whole of the work, and all its parts,
|
||
+ regardless of how they are packaged. This License gives no
|
||
+ permission to license the work in any other way, but it does not
|
||
+ invalidate such permission if you have separately received it.
|
||
+
|
||
+ d) If the work has interactive user interfaces, each must display
|
||
+ Appropriate Legal Notices; however, if the Program has interactive
|
||
+ interfaces that do not display Appropriate Legal Notices, your
|
||
+ work need not make them do so.
|
||
+
|
||
+ A compilation of a covered work with other separate and independent
|
||
+works, which are not by their nature extensions of the covered work,
|
||
+and which are not combined with it such as to form a larger program,
|
||
+in or on a volume of a storage or distribution medium, is called an
|
||
+"aggregate" if the compilation and its resulting copyright are not
|
||
+used to limit the access or legal rights of the compilation's users
|
||
+beyond what the individual works permit. Inclusion of a covered work
|
||
+in an aggregate does not cause this License to apply to the other
|
||
+parts of the aggregate.
|
||
+
|
||
+ 6. Conveying Non-Source Forms.
|
||
+
|
||
+ You may convey a covered work in object code form under the terms
|
||
+of sections 4 and 5, provided that you also convey the
|
||
+machine-readable Corresponding Source under the terms of this License,
|
||
+in one of these ways:
|
||
+
|
||
+ a) Convey the object code in, or embodied in, a physical product
|
||
+ (including a physical distribution medium), accompanied by the
|
||
+ Corresponding Source fixed on a durable physical medium
|
||
+ customarily used for software interchange.
|
||
+
|
||
+ b) Convey the object code in, or embodied in, a physical product
|
||
+ (including a physical distribution medium), accompanied by a
|
||
+ written offer, valid for at least three years and valid for as
|
||
+ long as you offer spare parts or customer support for that product
|
||
+ model, to give anyone who possesses the object code either (1) a
|
||
+ copy of the Corresponding Source for all the software in the
|
||
+ product that is covered by this License, on a durable physical
|
||
+ medium customarily used for software interchange, for a price no
|
||
+ more than your reasonable cost of physically performing this
|
||
+ conveying of source, or (2) access to copy the
|
||
+ Corresponding Source from a network server at no charge.
|
||
+
|
||
+ c) Convey individual copies of the object code with a copy of the
|
||
+ written offer to provide the Corresponding Source. This
|
||
+ alternative is allowed only occasionally and noncommercially, and
|
||
+ only if you received the object code with such an offer, in accord
|
||
+ with subsection 6b.
|
||
+
|
||
+ d) Convey the object code by offering access from a designated
|
||
+ place (gratis or for a charge), and offer equivalent access to the
|
||
+ Corresponding Source in the same way through the same place at no
|
||
+ further charge. You need not require recipients to copy the
|
||
+ Corresponding Source along with the object code. If the place to
|
||
+ copy the object code is a network server, the Corresponding Source
|
||
+ may be on a different server (operated by you or a third party)
|
||
+ that supports equivalent copying facilities, provided you maintain
|
||
+ clear directions next to the object code saying where to find the
|
||
+ Corresponding Source. Regardless of what server hosts the
|
||
+ Corresponding Source, you remain obligated to ensure that it is
|
||
+ available for as long as needed to satisfy these requirements.
|
||
+
|
||
+ e) Convey the object code using peer-to-peer transmission, provided
|
||
+ you inform other peers where the object code and Corresponding
|
||
+ Source of the work are being offered to the general public at no
|
||
+ charge under subsection 6d.
|
||
+
|
||
+ A separable portion of the object code, whose source code is excluded
|
||
+from the Corresponding Source as a System Library, need not be
|
||
+included in conveying the object code work.
|
||
+
|
||
+ A "User Product" is either (1) a "consumer product", which means any
|
||
+tangible personal property which is normally used for personal, family,
|
||
+or household purposes, or (2) anything designed or sold for incorporation
|
||
+into a dwelling. In determining whether a product is a consumer product,
|
||
+doubtful cases shall be resolved in favor of coverage. For a particular
|
||
+product received by a particular user, "normally used" refers to a
|
||
+typical or common use of that class of product, regardless of the status
|
||
+of the particular user or of the way in which the particular user
|
||
+actually uses, or expects or is expected to use, the product. A product
|
||
+is a consumer product regardless of whether the product has substantial
|
||
+commercial, industrial or non-consumer uses, unless such uses represent
|
||
+the only significant mode of use of the product.
|
||
+
|
||
+ "Installation Information" for a User Product means any methods,
|
||
+procedures, authorization keys, or other information required to install
|
||
+and execute modified versions of a covered work in that User Product from
|
||
+a modified version of its Corresponding Source. The information must
|
||
+suffice to ensure that the continued functioning of the modified object
|
||
+code is in no case prevented or interfered with solely because
|
||
+modification has been made.
|
||
+
|
||
+ If you convey an object code work under this section in, or with, or
|
||
+specifically for use in, a User Product, and the conveying occurs as
|
||
+part of a transaction in which the right of possession and use of the
|
||
+User Product is transferred to the recipient in perpetuity or for a
|
||
+fixed term (regardless of how the transaction is characterized), the
|
||
+Corresponding Source conveyed under this section must be accompanied
|
||
+by the Installation Information. But this requirement does not apply
|
||
+if neither you nor any third party retains the ability to install
|
||
+modified object code on the User Product (for example, the work has
|
||
+been installed in ROM).
|
||
+
|
||
+ The requirement to provide Installation Information does not include a
|
||
+requirement to continue to provide support service, warranty, or updates
|
||
+for a work that has been modified or installed by the recipient, or for
|
||
+the User Product in which it has been modified or installed. Access to a
|
||
+network may be denied when the modification itself materially and
|
||
+adversely affects the operation of the network or violates the rules and
|
||
+protocols for communication across the network.
|
||
+
|
||
+ Corresponding Source conveyed, and Installation Information provided,
|
||
+in accord with this section must be in a format that is publicly
|
||
+documented (and with an implementation available to the public in
|
||
+source code form), and must require no special password or key for
|
||
+unpacking, reading or copying.
|
||
+
|
||
+ 7. Additional Terms.
|
||
+
|
||
+ "Additional permissions" are terms that supplement the terms of this
|
||
+License by making exceptions from one or more of its conditions.
|
||
+Additional permissions that are applicable to the entire Program shall
|
||
+be treated as though they were included in this License, to the extent
|
||
+that they are valid under applicable law. If additional permissions
|
||
+apply only to part of the Program, that part may be used separately
|
||
+under those permissions, but the entire Program remains governed by
|
||
+this License without regard to the additional permissions.
|
||
+
|
||
+ When you convey a copy of a covered work, you may at your option
|
||
+remove any additional permissions from that copy, or from any part of
|
||
+it. (Additional permissions may be written to require their own
|
||
+removal in certain cases when you modify the work.) You may place
|
||
+additional permissions on material, added by you to a covered work,
|
||
+for which you have or can give appropriate copyright permission.
|
||
+
|
||
+ Notwithstanding any other provision of this License, for material you
|
||
+add to a covered work, you may (if authorized by the copyright holders of
|
||
+that material) supplement the terms of this License with terms:
|
||
+
|
||
+ a) Disclaiming warranty or limiting liability differently from the
|
||
+ terms of sections 15 and 16 of this License; or
|
||
+
|
||
+ b) Requiring preservation of specified reasonable legal notices or
|
||
+ author attributions in that material or in the Appropriate Legal
|
||
+ Notices displayed by works containing it; or
|
||
+
|
||
+ c) Prohibiting misrepresentation of the origin of that material, or
|
||
+ requiring that modified versions of such material be marked in
|
||
+ reasonable ways as different from the original version; or
|
||
+
|
||
+ d) Limiting the use for publicity purposes of names of licensors or
|
||
+ authors of the material; or
|
||
+
|
||
+ e) Declining to grant rights under trademark law for use of some
|
||
+ trade names, trademarks, or service marks; or
|
||
+
|
||
+ f) Requiring indemnification of licensors and authors of that
|
||
+ material by anyone who conveys the material (or modified versions of
|
||
+ it) with contractual assumptions of liability to the recipient, for
|
||
+ any liability that these contractual assumptions directly impose on
|
||
+ those licensors and authors.
|
||
+
|
||
+ All other non-permissive additional terms are considered "further
|
||
+restrictions" within the meaning of section 10. If the Program as you
|
||
+received it, or any part of it, contains a notice stating that it is
|
||
+governed by this License along with a term that is a further
|
||
+restriction, you may remove that term. If a license document contains
|
||
+a further restriction but permits relicensing or conveying under this
|
||
+License, you may add to a covered work material governed by the terms
|
||
+of that license document, provided that the further restriction does
|
||
+not survive such relicensing or conveying.
|
||
+
|
||
+ If you add terms to a covered work in accord with this section, you
|
||
+must place, in the relevant source files, a statement of the
|
||
+additional terms that apply to those files, or a notice indicating
|
||
+where to find the applicable terms.
|
||
+
|
||
+ Additional terms, permissive or non-permissive, may be stated in the
|
||
+form of a separately written license, or stated as exceptions;
|
||
+the above requirements apply either way.
|
||
+
|
||
+ 8. Termination.
|
||
+
|
||
+ You may not propagate or modify a covered work except as expressly
|
||
+provided under this License. Any attempt otherwise to propagate or
|
||
+modify it is void, and will automatically terminate your rights under
|
||
+this License (including any patent licenses granted under the third
|
||
+paragraph of section 11).
|
||
+
|
||
+ However, if you cease all violation of this License, then your
|
||
+license from a particular copyright holder is reinstated (a)
|
||
+provisionally, unless and until the copyright holder explicitly and
|
||
+finally terminates your license, and (b) permanently, if the copyright
|
||
+holder fails to notify you of the violation by some reasonable means
|
||
+prior to 60 days after the cessation.
|
||
+
|
||
+ Moreover, your license from a particular copyright holder is
|
||
+reinstated permanently if the copyright holder notifies you of the
|
||
+violation by some reasonable means, this is the first time you have
|
||
+received notice of violation of this License (for any work) from that
|
||
+copyright holder, and you cure the violation prior to 30 days after
|
||
+your receipt of the notice.
|
||
+
|
||
+ Termination of your rights under this section does not terminate the
|
||
+licenses of parties who have received copies or rights from you under
|
||
+this License. If your rights have been terminated and not permanently
|
||
+reinstated, you do not qualify to receive new licenses for the same
|
||
+material under section 10.
|
||
+
|
||
+ 9. Acceptance Not Required for Having Copies.
|
||
+
|
||
+ You are not required to accept this License in order to receive or
|
||
+run a copy of the Program. Ancillary propagation of a covered work
|
||
+occurring solely as a consequence of using peer-to-peer transmission
|
||
+to receive a copy likewise does not require acceptance. However,
|
||
+nothing other than this License grants you permission to propagate or
|
||
+modify any covered work. These actions infringe copyright if you do
|
||
+not accept this License. Therefore, by modifying or propagating a
|
||
+covered work, you indicate your acceptance of this License to do so.
|
||
+
|
||
+ 10. Automatic Licensing of Downstream Recipients.
|
||
+
|
||
+ Each time you convey a covered work, the recipient automatically
|
||
+receives a license from the original licensors, to run, modify and
|
||
+propagate that work, subject to this License. You are not responsible
|
||
+for enforcing compliance by third parties with this License.
|
||
+
|
||
+ An "entity transaction" is a transaction transferring control of an
|
||
+organization, or substantially all assets of one, or subdividing an
|
||
+organization, or merging organizations. If propagation of a covered
|
||
+work results from an entity transaction, each party to that
|
||
+transaction who receives a copy of the work also receives whatever
|
||
+licenses to the work the party's predecessor in interest had or could
|
||
+give under the previous paragraph, plus a right to possession of the
|
||
+Corresponding Source of the work from the predecessor in interest, if
|
||
+the predecessor has it or can get it with reasonable efforts.
|
||
+
|
||
+ You may not impose any further restrictions on the exercise of the
|
||
+rights granted or affirmed under this License. For example, you may
|
||
+not impose a license fee, royalty, or other charge for exercise of
|
||
+rights granted under this License, and you may not initiate litigation
|
||
+(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||
+any patent claim is infringed by making, using, selling, offering for
|
||
+sale, or importing the Program or any portion of it.
|
||
+
|
||
+ 11. Patents.
|
||
+
|
||
+ A "contributor" is a copyright holder who authorizes use under this
|
||
+License of the Program or a work on which the Program is based. The
|
||
+work thus licensed is called the contributor's "contributor version".
|
||
+
|
||
+ A contributor's "essential patent claims" are all patent claims
|
||
+owned or controlled by the contributor, whether already acquired or
|
||
+hereafter acquired, that would be infringed by some manner, permitted
|
||
+by this License, of making, using, or selling its contributor version,
|
||
+but do not include claims that would be infringed only as a
|
||
+consequence of further modification of the contributor version. For
|
||
+purposes of this definition, "control" includes the right to grant
|
||
+patent sublicenses in a manner consistent with the requirements of
|
||
+this License.
|
||
+
|
||
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||
+patent license under the contributor's essential patent claims, to
|
||
+make, use, sell, offer for sale, import and otherwise run, modify and
|
||
+propagate the contents of its contributor version.
|
||
+
|
||
+ In the following three paragraphs, a "patent license" is any express
|
||
+agreement or commitment, however denominated, not to enforce a patent
|
||
+(such as an express permission to practice a patent or covenant not to
|
||
+sue for patent infringement). To "grant" such a patent license to a
|
||
+party means to make such an agreement or commitment not to enforce a
|
||
+patent against the party.
|
||
+
|
||
+ If you convey a covered work, knowingly relying on a patent license,
|
||
+and the Corresponding Source of the work is not available for anyone
|
||
+to copy, free of charge and under the terms of this License, through a
|
||
+publicly available network server or other readily accessible means,
|
||
+then you must either (1) cause the Corresponding Source to be so
|
||
+available, or (2) arrange to deprive yourself of the benefit of the
|
||
+patent license for this particular work, or (3) arrange, in a manner
|
||
+consistent with the requirements of this License, to extend the patent
|
||
+license to downstream recipients. "Knowingly relying" means you have
|
||
+actual knowledge that, but for the patent license, your conveying the
|
||
+covered work in a country, or your recipient's use of the covered work
|
||
+in a country, would infringe one or more identifiable patents in that
|
||
+country that you have reason to believe are valid.
|
||
+
|
||
+ If, pursuant to or in connection with a single transaction or
|
||
+arrangement, you convey, or propagate by procuring conveyance of, a
|
||
+covered work, and grant a patent license to some of the parties
|
||
+receiving the covered work authorizing them to use, propagate, modify
|
||
+or convey a specific copy of the covered work, then the patent license
|
||
+you grant is automatically extended to all recipients of the covered
|
||
+work and works based on it.
|
||
+
|
||
+ A patent license is "discriminatory" if it does not include within
|
||
+the scope of its coverage, prohibits the exercise of, or is
|
||
+conditioned on the non-exercise of one or more of the rights that are
|
||
+specifically granted under this License. You may not convey a covered
|
||
+work if you are a party to an arrangement with a third party that is
|
||
+in the business of distributing software, under which you make payment
|
||
+to the third party based on the extent of your activity of conveying
|
||
+the work, and under which the third party grants, to any of the
|
||
+parties who would receive the covered work from you, a discriminatory
|
||
+patent license (a) in connection with copies of the covered work
|
||
+conveyed by you (or copies made from those copies), or (b) primarily
|
||
+for and in connection with specific products or compilations that
|
||
+contain the covered work, unless you entered into that arrangement,
|
||
+or that patent license was granted, prior to 28 March 2007.
|
||
+
|
||
+ Nothing in this License shall be construed as excluding or limiting
|
||
+any implied license or other defenses to infringement that may
|
||
+otherwise be available to you under applicable patent law.
|
||
+
|
||
+ 12. No Surrender of Others' Freedom.
|
||
+
|
||
+ If conditions are imposed on you (whether by court order, agreement or
|
||
+otherwise) that contradict the conditions of this License, they do not
|
||
+excuse you from the conditions of this License. If you cannot convey a
|
||
+covered work so as to satisfy simultaneously your obligations under this
|
||
+License and any other pertinent obligations, then as a consequence you may
|
||
+not convey it at all. For example, if you agree to terms that obligate you
|
||
+to collect a royalty for further conveying from those to whom you convey
|
||
+the Program, the only way you could satisfy both those terms and this
|
||
+License would be to refrain entirely from conveying the Program.
|
||
+
|
||
+ 13. Use with the GNU Affero General Public License.
|
||
+
|
||
+ Notwithstanding any other provision of this License, you have
|
||
+permission to link or combine any covered work with a work licensed
|
||
+under version 3 of the GNU Affero General Public License into a single
|
||
+combined work, and to convey the resulting work. The terms of this
|
||
+License will continue to apply to the part which is the covered work,
|
||
+but the special requirements of the GNU Affero General Public License,
|
||
+section 13, concerning interaction through a network will apply to the
|
||
+combination as such.
|
||
+
|
||
+ 14. Revised Versions of this License.
|
||
+
|
||
+ The Free Software Foundation may publish revised and/or new versions of
|
||
+the GNU General Public License from time to time. Such new versions will
|
||
+be similar in spirit to the present version, but may differ in detail to
|
||
+address new problems or concerns.
|
||
+
|
||
+ Each version is given a distinguishing version number. If the
|
||
+Program specifies that a certain numbered version of the GNU General
|
||
+Public License "or any later version" applies to it, you have the
|
||
+option of following the terms and conditions either of that numbered
|
||
+version or of any later version published by the Free Software
|
||
+Foundation. If the Program does not specify a version number of the
|
||
+GNU General Public License, you may choose any version ever published
|
||
+by the Free Software Foundation.
|
||
+
|
||
+ If the Program specifies that a proxy can decide which future
|
||
+versions of the GNU General Public License can be used, that proxy's
|
||
+public statement of acceptance of a version permanently authorizes you
|
||
+to choose that version for the Program.
|
||
+
|
||
+ Later license versions may give you additional or different
|
||
+permissions. However, no additional obligations are imposed on any
|
||
+author or copyright holder as a result of your choosing to follow a
|
||
+later version.
|
||
+
|
||
+ 15. Disclaimer of Warranty.
|
||
+
|
||
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||
+
|
||
+ 16. Limitation of Liability.
|
||
+
|
||
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||
+SUCH DAMAGES.
|
||
+
|
||
+ 17. Interpretation of Sections 15 and 16.
|
||
+
|
||
+ If the disclaimer of warranty and limitation of liability provided
|
||
+above cannot be given local legal effect according to their terms,
|
||
+reviewing courts shall apply local law that most closely approximates
|
||
+an absolute waiver of all civil liability in connection with the
|
||
+Program, unless a warranty or assumption of liability accompanies a
|
||
+copy of the Program in return for a fee.
|
||
+
|
||
+ END OF TERMS AND CONDITIONS
|
||
+
|
||
+ How to Apply These Terms to Your New Programs
|
||
+
|
||
+ If you develop a new program, and you want it to be of the greatest
|
||
+possible use to the public, the best way to achieve this is to make it
|
||
+free software which everyone can redistribute and change under these terms.
|
||
+
|
||
+ To do so, attach the following notices to the program. It is safest
|
||
+to attach them to the start of each source file to most effectively
|
||
+state the exclusion of warranty; and each file should have at least
|
||
+the "copyright" line and a pointer to where the full notice is found.
|
||
+
|
||
+ <one line to give the program's name and a brief idea of what it does.>
|
||
+ Copyright (C) <year> <name of author>
|
||
+
|
||
+ 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 3 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, see <https://www.gnu.org/licenses/>.
|
||
+
|
||
+Also add information on how to contact you by electronic and paper mail.
|
||
+
|
||
+ If the program does terminal interaction, make it output a short
|
||
+notice like this when it starts in an interactive mode:
|
||
+
|
||
+ <program> Copyright (C) <year> <name of author>
|
||
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||
+ This is free software, and you are welcome to redistribute it
|
||
+ under certain conditions; type `show c' for details.
|
||
+
|
||
+The hypothetical commands `show w' and `show c' should show the appropriate
|
||
+parts of the General Public License. Of course, your program's commands
|
||
+might be different; for a GUI interface, you would use an "about box".
|
||
+
|
||
+ You should also get your employer (if you work as a programmer) or school,
|
||
+if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||
+For more information on this, and how to apply and follow the GNU GPL, see
|
||
+<https://www.gnu.org/licenses/>.
|
||
+
|
||
+ The GNU General Public License does not permit incorporating your program
|
||
+into proprietary programs. If your program is a subroutine library, you
|
||
+may consider it more useful to permit linking proprietary applications with
|
||
+the library. If this is what you want to do, use the GNU Lesser General
|
||
+Public License instead of this License. But first, please read
|
||
+<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||
diff --git a/drivers/leds/vfd/Makefile b/drivers/leds/vfd/Makefile
|
||
new file mode 100644
|
||
index 000000000..fce805e3e
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/Makefile
|
||
@@ -0,0 +1,15 @@
|
||
+obj-$(CONFIG_LEDS_FD628) := openvfd.o
|
||
+
|
||
+openvfd-objs += protocols/i2c_sw.o \
|
||
+ protocols/i2c_hw.o \
|
||
+ protocols/spi_sw.o \
|
||
+ controllers/dummy.o \
|
||
+ controllers/seg7_ctrl.o \
|
||
+ controllers/fd628.o \
|
||
+ controllers/fd650.o \
|
||
+ controllers/hd44780.o \
|
||
+ controllers/gfx_mono_ctrl.o \
|
||
+ controllers/ssd1306.o \
|
||
+ controllers/pcd8544.o \
|
||
+ controllers/il3829.o \
|
||
+ openvfd_drv.o
|
||
diff --git a/drivers/leds/vfd/controllers/controller.h b/drivers/leds/vfd/controllers/controller.h
|
||
new file mode 100644
|
||
index 000000000..ad3a210fd
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/controller.h
|
||
@@ -0,0 +1,28 @@
|
||
+#ifndef __CONTROLLERH__
|
||
+#define __CONTROLLERH__
|
||
+
|
||
+#include "../openvfd_drv.h"
|
||
+
|
||
+struct controller_interface {
|
||
+ unsigned char (*init)(void);
|
||
+
|
||
+ unsigned short (*get_brightness_levels_count)(void);
|
||
+ unsigned short (*get_brightness_level)(void);
|
||
+ unsigned char (*set_brightness_level)(unsigned short level);
|
||
+
|
||
+ unsigned char (*get_power)(void);
|
||
+ void (*set_power)(unsigned char state);
|
||
+ void (*power_suspend)(void);
|
||
+ void (*power_resume)(void);
|
||
+
|
||
+ struct vfd_display *(*get_display_type)(void);
|
||
+ unsigned char (*set_display_type)(struct vfd_display *display);
|
||
+
|
||
+ void (*set_icon)(const char *name, unsigned char state);
|
||
+
|
||
+ size_t (*read_data)(unsigned char *data, size_t length);
|
||
+ size_t (*write_data)(const unsigned char *data, size_t length);
|
||
+ size_t (*write_display_data)(const struct vfd_display_data *data);
|
||
+};
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/controllers/controller_list.h b/drivers/leds/vfd/controllers/controller_list.h
|
||
new file mode 100644
|
||
index 000000000..6af7f3706
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/controller_list.h
|
||
@@ -0,0 +1,12 @@
|
||
+#ifndef __CONTROLLER_LIST_H__
|
||
+#define __CONTROLLER_LIST_H__
|
||
+
|
||
+#include "dummy.h"
|
||
+#include "fd628.h"
|
||
+#include "fd650.h"
|
||
+#include "hd44780.h"
|
||
+#include "ssd1306.h"
|
||
+#include "pcd8544.h"
|
||
+#include "il3829.h"
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/controllers/dummy.c b/drivers/leds/vfd/controllers/dummy.c
|
||
new file mode 100644
|
||
index 000000000..8090c2714
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/dummy.c
|
||
@@ -0,0 +1,99 @@
|
||
+#include "dummy.h"
|
||
+
|
||
+static unsigned char dummy_init(void);
|
||
+static unsigned short dummy_get_brightness_levels_count(void);
|
||
+static unsigned short dummy_get_brightness_level(void);
|
||
+static unsigned char dummy_set_brightness_level(unsigned short level);
|
||
+static unsigned char dummy_get_power(void);
|
||
+static void dummy_set_power(unsigned char state);
|
||
+static struct vfd_display *dummy_get_display_type(void);
|
||
+static unsigned char dummy_set_display_type(struct vfd_display *display);
|
||
+static void dummy_set_icon(const char *name, unsigned char state);
|
||
+static size_t dummy_read_data(unsigned char *data, size_t length);
|
||
+static size_t dummy_write_data(const unsigned char *data, size_t length);
|
||
+static size_t dummy_write_display_data(const struct vfd_display_data *data);
|
||
+
|
||
+static struct controller_interface dummy_interface = {
|
||
+ .init = dummy_init,
|
||
+ .get_brightness_levels_count = dummy_get_brightness_levels_count,
|
||
+ .get_brightness_level = dummy_get_brightness_level,
|
||
+ .set_brightness_level = dummy_set_brightness_level,
|
||
+ .get_power = dummy_get_power,
|
||
+ .set_power = dummy_set_power,
|
||
+ .get_display_type = dummy_get_display_type,
|
||
+ .set_display_type = dummy_set_display_type,
|
||
+ .set_icon = dummy_set_icon,
|
||
+ .read_data = dummy_read_data,
|
||
+ .write_data = dummy_write_data,
|
||
+ .write_display_data = dummy_write_display_data,
|
||
+};
|
||
+
|
||
+static struct vfd_dev *dev = NULL;
|
||
+
|
||
+struct controller_interface *init_dummy(struct vfd_dev *_dev)
|
||
+{
|
||
+ dev = _dev;
|
||
+ return &dummy_interface;
|
||
+}
|
||
+
|
||
+static unsigned char dummy_init(void)
|
||
+{
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+static unsigned short dummy_get_brightness_levels_count(void)
|
||
+{
|
||
+ return 8;
|
||
+}
|
||
+
|
||
+static unsigned short dummy_get_brightness_level(void)
|
||
+{
|
||
+ return dev->brightness;
|
||
+}
|
||
+
|
||
+static unsigned char dummy_set_brightness_level(unsigned short level)
|
||
+{
|
||
+ dev->brightness = level & 0x7;
|
||
+ dev->power = 1;
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+static unsigned char dummy_get_power(void)
|
||
+{
|
||
+ return dev->power;
|
||
+}
|
||
+
|
||
+static void dummy_set_power(unsigned char state)
|
||
+{
|
||
+ dev->power = state;
|
||
+}
|
||
+
|
||
+static struct vfd_display *dummy_get_display_type(void)
|
||
+{
|
||
+ return &dev->dtb_active.display;
|
||
+}
|
||
+
|
||
+static unsigned char dummy_set_display_type(struct vfd_display *display)
|
||
+{
|
||
+ dev->dtb_active.display = *display;
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+static void dummy_set_icon(const char *name, unsigned char state)
|
||
+{
|
||
+}
|
||
+
|
||
+static size_t dummy_read_data(unsigned char *data, size_t length)
|
||
+{
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+static size_t dummy_write_data(const unsigned char *_data, size_t length)
|
||
+{
|
||
+ return length;
|
||
+}
|
||
+
|
||
+static size_t dummy_write_display_data(const struct vfd_display_data *data)
|
||
+{
|
||
+ return sizeof(*data);
|
||
+}
|
||
diff --git a/drivers/leds/vfd/controllers/dummy.h b/drivers/leds/vfd/controllers/dummy.h
|
||
new file mode 100644
|
||
index 000000000..8f4a3ae07
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/dummy.h
|
||
@@ -0,0 +1,8 @@
|
||
+#ifndef __DUMMYH__
|
||
+#define __DUMMYH__
|
||
+
|
||
+#include "controller.h"
|
||
+
|
||
+struct controller_interface *init_dummy(struct vfd_dev *dev);
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/controllers/fd628.c b/drivers/leds/vfd/controllers/fd628.c
|
||
new file mode 100644
|
||
index 000000000..f087be275
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/fd628.c
|
||
@@ -0,0 +1,374 @@
|
||
+#include "../protocols/i2c_sw.h"
|
||
+#include "../protocols/spi_sw.h"
|
||
+#include "fd628.h"
|
||
+
|
||
+/* ****************************** Define FD628 Commands ****************************** */
|
||
+#define FD628_KEY_RDCMD 0x42 /* Read keys command */
|
||
+#define FD628_4DIG_CMD 0x00 /* Set FD628 to work in 4-digit mode */
|
||
+#define FD628_5DIG_CMD 0x01 /* Set FD628 to work in 5-digit mode */
|
||
+#define FD628_6DIG_CMD 0x02 /* Set FD628 to work in 6-digit mode */
|
||
+#define FD628_7DIG_CMD 0x03 /* Set FD628 to work in 7-digit mode */
|
||
+#define FD628_DIGADDR_WRCMD 0xC0 /* Write FD628 address */
|
||
+#define FD628_ADDR_INC_DIGWR_CMD 0x40 /* Set Address Increment Mode */
|
||
+#define FD628_ADDR_STATIC_DIGWR_CMD 0x44 /* Set Static Address Mode */
|
||
+#define FD628_DISP_STATUE_WRCMD 0x80 /* Set display brightness command */
|
||
+/* *********************************************************************************** */
|
||
+
|
||
+static unsigned char fd628_init(void);
|
||
+static unsigned short fd628_get_brightness_levels_count(void);
|
||
+static unsigned short fd628_get_brightness_level(void);
|
||
+static unsigned char fd628_set_brightness_level(unsigned short level);
|
||
+static unsigned char fd628_get_power(void);
|
||
+static void fd628_set_power(unsigned char state);
|
||
+static void fd628_power_suspend(void) { fd628_set_power(0); }
|
||
+static void fd628_power_resume(void) { fd628_set_power(1); }
|
||
+static struct vfd_display *fd628_get_display_type(void);
|
||
+static unsigned char fd628_set_display_type(struct vfd_display *display);
|
||
+static void fd628_set_icon(const char *name, unsigned char state);
|
||
+static size_t fd628_read_data(unsigned char *data, size_t length);
|
||
+static size_t fd628_write_data(const unsigned char *data, size_t length);
|
||
+static size_t fd628_write_display_data(const struct vfd_display_data *data);
|
||
+
|
||
+static struct controller_interface fd628_interface = {
|
||
+ .init = fd628_init,
|
||
+ .get_brightness_levels_count = fd628_get_brightness_levels_count,
|
||
+ .get_brightness_level = fd628_get_brightness_level,
|
||
+ .set_brightness_level = fd628_set_brightness_level,
|
||
+ .get_power = fd628_get_power,
|
||
+ .set_power = fd628_set_power,
|
||
+ .power_suspend = fd628_power_suspend,
|
||
+ .power_resume = fd628_power_resume,
|
||
+ .get_display_type = fd628_get_display_type,
|
||
+ .set_display_type = fd628_set_display_type,
|
||
+ .set_icon = fd628_set_icon,
|
||
+ .read_data = fd628_read_data,
|
||
+ .write_data = fd628_write_data,
|
||
+ .write_display_data = fd628_write_display_data,
|
||
+};
|
||
+
|
||
+size_t seg7_write_display_data(const struct vfd_display_data *data, unsigned short *raw_wdata, size_t sz);
|
||
+
|
||
+static struct vfd_dev *dev = NULL;
|
||
+static struct protocol_interface *protocol = NULL;
|
||
+static unsigned char ram_grid_size = 2;
|
||
+static unsigned char ram_grid_count = 7;
|
||
+static unsigned char ram_size = 14;
|
||
+static struct vfd_display_data vfd_display_data;
|
||
+extern const led_bitmap *ledCodes;
|
||
+extern unsigned char ledDot;
|
||
+
|
||
+struct controller_interface *init_fd628(struct vfd_dev *_dev)
|
||
+{
|
||
+ dev = _dev;
|
||
+ return &fd628_interface;
|
||
+}
|
||
+
|
||
+static size_t fd628_write_data_real(unsigned char address, const unsigned char *data, size_t length)
|
||
+{
|
||
+ unsigned char cmd = FD628_DIGADDR_WRCMD | address;
|
||
+ if (length + address > ram_size)
|
||
+ return (-1);
|
||
+
|
||
+ protocol->write_byte(FD628_ADDR_INC_DIGWR_CMD);
|
||
+ protocol->write_cmd_data(&cmd, 1, data, length);
|
||
+ return (0);
|
||
+}
|
||
+
|
||
+static unsigned char fd628_init(void)
|
||
+{
|
||
+ unsigned char slow_freq = dev->dtb_active.display.flags & DISPLAY_FLAG_LOW_FREQ;
|
||
+ protocol = dev->dtb_active.display.controller == CONTROLLER_HBS658 ?
|
||
+ init_sw_i2c(0, LSB_FIRST, 1, dev->clk_pin, dev->dat_pin, slow_freq ? I2C_DELAY_20KHz : I2C_DELAY_100KHz, NULL) :
|
||
+ init_sw_spi_3w(LSB_FIRST, dev->clk_pin, dev->dat_pin, dev->stb_pin, slow_freq ? SPI_DELAY_20KHz : SPI_DELAY_100KHz);
|
||
+ if (!protocol)
|
||
+ return 0;
|
||
+
|
||
+ switch(dev->dtb_active.display.type) {
|
||
+ case DISPLAY_TYPE_5D_7S_T95:
|
||
+ ledCodes = LED_decode_tab1;
|
||
+ break;
|
||
+ case DISPLAY_TYPE_5D_7S_G9SX:
|
||
+ ledCodes = LED_decode_tab3;
|
||
+ break;
|
||
+ case DISPLAY_TYPE_5D_7S_TAP1:
|
||
+ ledCodes = LED_decode_tab5;
|
||
+ break;
|
||
+ default:
|
||
+ ledCodes = LED_decode_tab2;
|
||
+ break;
|
||
+ }
|
||
+ switch (dev->dtb_active.display.controller) {
|
||
+ case CONTROLLER_FD628:
|
||
+ default:
|
||
+ ram_grid_size = 2;
|
||
+ ram_grid_count = 7;
|
||
+ protocol->write_byte(FD628_7DIG_CMD);
|
||
+ break;
|
||
+ case CONTROLLER_FD620:
|
||
+ ram_grid_size = 2;
|
||
+ ram_grid_count = 5;
|
||
+ switch (dev->dtb_active.display.type) {
|
||
+ case DISPLAY_TYPE_FD620_REF:
|
||
+ protocol->write_byte(FD628_4DIG_CMD);
|
||
+ break;
|
||
+ default:
|
||
+ protocol->write_byte(FD628_5DIG_CMD);
|
||
+ break;
|
||
+ }
|
||
+ break;
|
||
+ case CONTROLLER_TM1618:
|
||
+ ram_grid_size = 2;
|
||
+ ram_grid_count = 7;
|
||
+ switch (dev->dtb_active.display.type) {
|
||
+ case DISPLAY_TYPE_4D_7S_COL:
|
||
+ protocol->write_byte(FD628_7DIG_CMD);
|
||
+ break;
|
||
+ case DISPLAY_TYPE_FD620_REF:
|
||
+ protocol->write_byte(FD628_4DIG_CMD);
|
||
+ break;
|
||
+ default:
|
||
+ protocol->write_byte(FD628_5DIG_CMD);
|
||
+ break;
|
||
+ }
|
||
+ break;
|
||
+ case CONTROLLER_HBS658:
|
||
+ ram_grid_size = 1;
|
||
+ ram_grid_count = 5;
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ ram_size = ram_grid_size * ram_grid_count;
|
||
+ fd628_set_brightness_level(dev->brightness);
|
||
+ memset(dev->wbuf, 0x00, sizeof(dev->wbuf));
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+static unsigned short fd628_get_brightness_levels_count(void)
|
||
+{
|
||
+ return 8;
|
||
+}
|
||
+
|
||
+static unsigned short fd628_get_brightness_level(void)
|
||
+{
|
||
+ return dev->brightness;
|
||
+}
|
||
+
|
||
+static unsigned char fd628_set_brightness_level(unsigned short level)
|
||
+{
|
||
+ dev->brightness = level & 0x7;
|
||
+ protocol->write_byte(FD628_DISP_STATUE_WRCMD | dev->brightness | FD628_DISP_ON);
|
||
+ dev->power = 1;
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+static unsigned char fd628_get_power(void)
|
||
+{
|
||
+ return dev->power;
|
||
+}
|
||
+
|
||
+static void fd628_set_power(unsigned char state)
|
||
+{
|
||
+ dev->power = state;
|
||
+ if (state)
|
||
+ fd628_set_brightness_level(dev->brightness);
|
||
+ else
|
||
+ protocol->write_byte(FD628_DISP_STATUE_WRCMD | FD628_DISP_OFF);
|
||
+}
|
||
+
|
||
+static struct vfd_display *fd628_get_display_type(void)
|
||
+{
|
||
+ return &dev->dtb_active.display;
|
||
+}
|
||
+
|
||
+static unsigned char fd628_set_display_type(struct vfd_display *display)
|
||
+{
|
||
+ unsigned char ret = 0;
|
||
+ if (display->type < DISPLAY_TYPE_MAX && display->controller < CONTROLLER_7S_MAX && display->controller == CONTROLLER_FD650)
|
||
+ {
|
||
+ dev->dtb_active.display = *display;
|
||
+ fd628_init();
|
||
+ ret = 1;
|
||
+ }
|
||
+
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static void fd628_set_icon(const char *name, unsigned char state)
|
||
+{
|
||
+ struct vfd_dtb_config *dtb = &dev->dtb_active;
|
||
+ switch (dtb->display.type) {
|
||
+ case DISPLAY_TYPE_5D_7S_NORMAL:
|
||
+ case DISPLAY_TYPE_5D_7S_T95:
|
||
+ case DISPLAY_TYPE_5D_7S_G9SX:
|
||
+ default:
|
||
+ if (strncmp(name,"alarm",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_ALARM]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_ALARM]);
|
||
+ } else if (strncmp(name,"usb",3) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_USB]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_USB]);
|
||
+ } else if (strncmp(name,"play",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_PLAY]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_PLAY]);
|
||
+ } else if (strncmp(name,"pause",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_PAUSE]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_PAUSE]);
|
||
+ } else if (strncmp(name,"colon",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_SEC]);
|
||
+ } else if (strncmp(name,"eth",3) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_ETH]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_ETH]);
|
||
+ } else if (strncmp(name,"wifi",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_WIFI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_WIFI]);
|
||
+ }
|
||
+ break;
|
||
+ case DISPLAY_TYPE_5D_7S_X92:
|
||
+ if (strncmp(name,"apps",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_APPS]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_APPS]);
|
||
+ } else if (strncmp(name,"setup",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_SETUP]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_SETUP]);
|
||
+ } else if (strncmp(name,"usb",3) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_USB]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_USB]);
|
||
+ } else if (strncmp(name,"sd",2) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_CARD]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_CARD]);
|
||
+ } else if (strncmp(name,"colon",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_SEC]);
|
||
+ } else if (strncmp(name,"hdmi",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_HDMI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_HDMI]);
|
||
+ } else if (strncmp(name,"cvbs",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_CVBS]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_CVBS]);
|
||
+ }
|
||
+ break;
|
||
+ case DISPLAY_TYPE_5D_7S_ABOX:
|
||
+ if (strncmp(name,"power",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_POWER]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT3_POWER]);
|
||
+ } else if (strncmp(name,"eth",3) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_LAN]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT3_LAN]);
|
||
+ } else if (strncmp(name,"colon",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT3_SEC]);
|
||
+ } else if (strncmp(name,"wifi",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_WIFIHI] | dtb->led_dots[LED_DOT3_WIFILO]) : (dev->status_led_mask & ~(dtb->led_dots[LED_DOT3_WIFIHI] | dtb->led_dots[LED_DOT3_WIFILO]));
|
||
+ }
|
||
+ break;
|
||
+ case DISPLAY_TYPE_5D_7S_M9_PRO:
|
||
+ if (strncmp(name,"b-t",3) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_BT]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_BT]);
|
||
+ } else if (strncmp(name,"eth",3) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_ETH]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_ETH]);
|
||
+ } else if (strncmp(name,"wifi",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_WIFI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_WIFI]);
|
||
+ } else if (strncmp(name,"spdif",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_SPDIF]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_SPDIF]);
|
||
+ } else if (strncmp(name,"colon",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_SEC]);
|
||
+ } else if (strncmp(name,"hdmi",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_HDMI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_HDMI]);
|
||
+ } else if (strncmp(name,"cvbs",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_AV]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_AV]);
|
||
+ }
|
||
+ break;
|
||
+ }
|
||
+}
|
||
+
|
||
+static size_t fd628_read_data(unsigned char *data, size_t length)
|
||
+{
|
||
+ protocol->write_byte(FD628_KEY_RDCMD);
|
||
+ return protocol->read_data(data, length) == 0 ? length : -1;
|
||
+}
|
||
+
|
||
+extern void transpose8rS64(unsigned char* A, unsigned char* B);
|
||
+
|
||
+static size_t fd628_write_data(const unsigned char *_data, size_t length)
|
||
+{
|
||
+ size_t i;
|
||
+ struct vfd_dtb_config *dtb = &dev->dtb_active;
|
||
+ unsigned short *data = (unsigned short *)_data;
|
||
+
|
||
+ memset(dev->wbuf, 0x00, sizeof(dev->wbuf));
|
||
+ length = length > ram_size ? ram_grid_count : (length / sizeof(unsigned short));
|
||
+ if (data[0] & ledDots[LED_DOT_SEC]) {
|
||
+ data[0] &= ~ledDots[LED_DOT_SEC];
|
||
+ data[0] |= dtb->led_dots[LED_DOT_SEC];
|
||
+ }
|
||
+ // Apply LED indicators mask (usb, eth, wifi etc.)
|
||
+ if (vfd_display_data.mode == DISPLAY_MODE_CLOCK)
|
||
+ data[0] |= dev->status_led_mask;
|
||
+ else
|
||
+ data[0] |= (dev->status_led_mask & ~dtb->led_dots[LED_DOT_SEC]);
|
||
+
|
||
+ switch (dtb->display.type) {
|
||
+ case DISPLAY_TYPE_5D_7S_NORMAL:
|
||
+ case DISPLAY_TYPE_5D_7S_T95:
|
||
+ case DISPLAY_TYPE_5D_7S_X92:
|
||
+ case DISPLAY_TYPE_5D_7S_ABOX:
|
||
+ case DISPLAY_TYPE_4D_7S_COL:
|
||
+ case DISPLAY_TYPE_5D_7S_M9_PRO:
|
||
+ case DISPLAY_TYPE_5D_7S_G9SX:
|
||
+ default:
|
||
+ for (i = 0; i < length; i++)
|
||
+ dev->wbuf[dtb->dat_index[i]] = data[i];
|
||
+ break;
|
||
+ case DISPLAY_TYPE_FD620_REF:
|
||
+ case DISPLAY_TYPE_4D_7S_FREESATGTC:
|
||
+ for (i = 1; i < length; i++) {
|
||
+ dev->wbuf[dtb->dat_index[i]] = data[i];
|
||
+ if (data[0] & dtb->led_dots[LED_DOT_SEC])
|
||
+ dev->wbuf[dtb->dat_index[i]] |= ledDot; // DP is the colon.
|
||
+ }
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ if (dtb->display.flags & DISPLAY_FLAG_TRANSPOSED) {
|
||
+ unsigned char trans[8];
|
||
+ length = ram_grid_count;
|
||
+ memset(trans, 0, sizeof(trans));
|
||
+ for (i = 0; i < length; i++)
|
||
+ trans[i] = (unsigned char)dev->wbuf[i] << 1;
|
||
+ trans[ram_grid_count] = trans[0];
|
||
+ transpose8rS64(trans, trans);
|
||
+ memset(dev->wbuf, 0x00, sizeof(dev->wbuf));
|
||
+ for (i = 0; i < ram_grid_count; i++)
|
||
+ dev->wbuf[i] = trans[i+1];
|
||
+ }
|
||
+
|
||
+ switch (dtb->display.controller) {
|
||
+ case CONTROLLER_FD628:
|
||
+ // Memory map:
|
||
+ // S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 xx S12 S13 S14 xx xx
|
||
+ // b0 b1 b2 b3 b4 b5 b6 b7 b0 b1 b2 b3 b4 b5 b6 b7
|
||
+ for (i = 0; i < length; i++)
|
||
+ dev->wbuf[i] |= (dev->wbuf[i] & 0xFC00) << 1;
|
||
+ break;
|
||
+ case CONTROLLER_FD620:
|
||
+ // Memory map:
|
||
+ // S1 S2 S3 S4 S5 S6 S7 xx xx xx xx xx xx S8 xx xx
|
||
+ // b0 b1 b2 b3 b4 b5 b6 b7 b0 b1 b2 b3 b4 b5 b6 b7
|
||
+ for (i = 0; i < length; i++)
|
||
+ dev->wbuf[i] |= (dev->wbuf[i] & 0x80) ? 0x2000 : 0;
|
||
+ break;
|
||
+ case CONTROLLER_TM1618:
|
||
+ // Memory map:
|
||
+ // S1 S2 S3 S4 S5 xx xx xx xx xx xx S12 S13 S14 xx xx
|
||
+ // b0 b1 b2 b3 b4 b5 b6 b7 b0 b1 b2 b3 b4 b5 b6 b7
|
||
+ for (i = 0; i < length; i++)
|
||
+ dev->wbuf[i] |= (dev->wbuf[i] & 0x00E0) << 6;
|
||
+ break;
|
||
+ case CONTROLLER_HBS658: {
|
||
+ // Memory map:
|
||
+ // S1 S2 S3 S4 S5 S6 S7 xx
|
||
+ // b0 b1 b2 b3 b4 b5 b6 b7
|
||
+ unsigned char *tempBuf = (unsigned char *)dev->wbuf;
|
||
+ for (i = 1; i < length; i++)
|
||
+ tempBuf[i] = (unsigned char)(dev->wbuf[i] & 0xFF);
|
||
+ }
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ length *= ram_grid_size;
|
||
+ return fd628_write_data_real(0, (unsigned char *)dev->wbuf, length) == 0 ? length : 0;
|
||
+}
|
||
+
|
||
+static size_t fd628_write_display_data(const struct vfd_display_data *data)
|
||
+{
|
||
+ unsigned short wdata[7];
|
||
+ size_t status = seg7_write_display_data(data, wdata, sizeof(wdata));
|
||
+ vfd_display_data = *data;
|
||
+ if (status && !fd628_write_data((unsigned char*)wdata, 5*sizeof(wdata[0])))
|
||
+ status = 0;
|
||
+ return status;
|
||
+}
|
||
diff --git a/drivers/leds/vfd/controllers/fd628.h b/drivers/leds/vfd/controllers/fd628.h
|
||
new file mode 100644
|
||
index 000000000..50e3f823c
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/fd628.h
|
||
@@ -0,0 +1,8 @@
|
||
+#ifndef __FD628H__
|
||
+#define __FD628H__
|
||
+
|
||
+#include "controller.h"
|
||
+
|
||
+struct controller_interface *init_fd628(struct vfd_dev *dev);
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/controllers/fd650.c b/drivers/leds/vfd/controllers/fd650.c
|
||
new file mode 100644
|
||
index 000000000..e3f8ddc01
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/fd650.c
|
||
@@ -0,0 +1,296 @@
|
||
+#include "../protocols/i2c_sw.h"
|
||
+#include "fd650.h"
|
||
+
|
||
+/* ****************************** Define FD650 Commands ****************************** */
|
||
+#define FD650_KEY_RDCMD 0x4F /* Read keys command */
|
||
+#define FD650_MODE_WRCMD 0x48 /* Write mode command */
|
||
+#define FD650_DISP_ON 0x01 /* FD650 Display On */
|
||
+#define FD650_DISP_OFF 0x00 /* FD650 Display Off */
|
||
+#define FD650_7SEG_CMD 0x40 /* Set FD650 to work in 7-segment mode */
|
||
+#define FD650_8SEG_CMD 0x00 /* Set FD650 to work in 8-segment mode */
|
||
+#define FD650_BASE_ADDR 0x68 /* Base data address */
|
||
+#define FD655_BASE_ADDR 0x66 /* Base data address */
|
||
+#define FD650_DISP_STATE_WRCMD 0x00 /* Set display modw command */
|
||
+/* *********************************************************************************** */
|
||
+
|
||
+static unsigned char fd650_init(void);
|
||
+static unsigned short fd650_get_brightness_levels_count(void);
|
||
+static unsigned short fd650_get_brightness_level(void);
|
||
+static unsigned char fd650_set_brightness_level(unsigned short level);
|
||
+static unsigned char fd650_get_power(void);
|
||
+static void fd650_set_power(unsigned char state);
|
||
+static void fd650_power_suspend(void) { fd650_set_power(0); }
|
||
+static void fd650_power_resume(void) { fd650_set_power(1); }
|
||
+static struct vfd_display *fd650_get_display_type(void);
|
||
+static unsigned char fd650_set_display_type(struct vfd_display *display);
|
||
+static void fd650_set_icon(const char *name, unsigned char state);
|
||
+static size_t fd650_read_data(unsigned char *data, size_t length);
|
||
+static size_t fd650_write_data(const unsigned char *data, size_t length);
|
||
+static size_t fd650_write_display_data(const struct vfd_display_data *data);
|
||
+
|
||
+static struct controller_interface fd650_interface = {
|
||
+ .init = fd650_init,
|
||
+ .get_brightness_levels_count = fd650_get_brightness_levels_count,
|
||
+ .get_brightness_level = fd650_get_brightness_level,
|
||
+ .set_brightness_level = fd650_set_brightness_level,
|
||
+ .get_power = fd650_get_power,
|
||
+ .set_power = fd650_set_power,
|
||
+ .power_suspend = fd650_power_suspend,
|
||
+ .power_resume = fd650_power_resume,
|
||
+ .get_display_type = fd650_get_display_type,
|
||
+ .set_display_type = fd650_set_display_type,
|
||
+ .set_icon = fd650_set_icon,
|
||
+ .read_data = fd650_read_data,
|
||
+ .write_data = fd650_write_data,
|
||
+ .write_display_data = fd650_write_display_data,
|
||
+};
|
||
+
|
||
+size_t seg7_write_display_data(const struct vfd_display_data *data, unsigned short *raw_wdata, size_t sz);
|
||
+
|
||
+static struct vfd_dev *dev = NULL;
|
||
+static struct protocol_interface *protocol = NULL;
|
||
+static unsigned char ram_grid_count = 5;
|
||
+static unsigned char ram_size = 10;
|
||
+static struct vfd_display_data vfd_display_data;
|
||
+extern const led_bitmap *ledCodes;
|
||
+extern unsigned char ledDot;
|
||
+
|
||
+struct controller_interface *init_fd650(struct vfd_dev *_dev)
|
||
+{
|
||
+ dev = _dev;
|
||
+ return &fd650_interface;
|
||
+}
|
||
+
|
||
+inline static void fd650_write_cmd_data(unsigned char cmd, unsigned char data)
|
||
+{
|
||
+ protocol->write_cmd_data(&cmd, 1, &data, 1);
|
||
+}
|
||
+
|
||
+static size_t fd650_write_data_real(unsigned char address, const unsigned char *data, size_t length)
|
||
+{
|
||
+ unsigned char cmd = FD655_BASE_ADDR | (address & 0x07), i;
|
||
+ if (length + address > ram_grid_count)
|
||
+ return (-1);
|
||
+
|
||
+ for (i = 0; i < length; i++, cmd += 2)
|
||
+ fd650_write_cmd_data(cmd, *data++);
|
||
+ return (0);
|
||
+}
|
||
+
|
||
+static unsigned char fd650_init(void)
|
||
+{
|
||
+ unsigned char slow_freq = dev->dtb_active.display.flags & DISPLAY_FLAG_LOW_FREQ;
|
||
+ protocol = init_sw_i2c(0, MSB_FIRST, 0, dev->clk_pin, dev->dat_pin, slow_freq ? I2C_DELAY_20KHz : I2C_DELAY_100KHz, NULL);
|
||
+ if (!protocol)
|
||
+ return 0;
|
||
+
|
||
+ memset(dev->wbuf, 0x00, sizeof(dev->wbuf));
|
||
+ fd650_set_brightness_level(dev->brightness);
|
||
+ switch(dev->dtb_active.display.type) {
|
||
+ case DISPLAY_TYPE_5D_7S_T95:
|
||
+ ledCodes = LED_decode_tab1;
|
||
+ break;
|
||
+ case DISPLAY_TYPE_4D_7S_FREESATGTC:
|
||
+ ledCodes = LED_decode_tab4;
|
||
+ ledDot = p4;
|
||
+ break;
|
||
+ default:
|
||
+ ledCodes = LED_decode_tab2;
|
||
+ break;
|
||
+ }
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+inline static unsigned char is_fd650(void)
|
||
+{
|
||
+ return dev->dtb_active.display.controller == CONTROLLER_FD650;
|
||
+}
|
||
+
|
||
+inline static unsigned char is_fd655(void)
|
||
+{
|
||
+ return dev->dtb_active.display.controller == CONTROLLER_FD655;
|
||
+}
|
||
+
|
||
+inline static unsigned char is_fd6551(void)
|
||
+{
|
||
+ return dev->dtb_active.display.controller == CONTROLLER_FD6551;
|
||
+}
|
||
+
|
||
+static unsigned short fd650_get_brightness_levels_count(void)
|
||
+{
|
||
+ return is_fd655() ? 3 : 8;
|
||
+}
|
||
+
|
||
+static unsigned short fd650_get_brightness_level(void)
|
||
+{
|
||
+ return dev->brightness;
|
||
+}
|
||
+
|
||
+static unsigned char get_actual_brightness(void)
|
||
+{
|
||
+ unsigned char brightness = 0;
|
||
+ if (is_fd655())
|
||
+ brightness = min(2, (dev->brightness + 1) & 0x3) << 5; // 11B disables current limit.
|
||
+ else if (is_fd6551())
|
||
+ brightness = min(7, 7 - dev->brightness) << 1;
|
||
+ else
|
||
+ brightness = (dev->brightness + 1) << 4; // 000B => 8/8 Duty cycle, 001B - 111B => 1/8 - 7/8 Duty cycle
|
||
+ return brightness;
|
||
+}
|
||
+
|
||
+static unsigned char fd650_set_brightness_level(unsigned short level)
|
||
+{
|
||
+ dev->brightness = level & 0x7;
|
||
+ fd650_write_cmd_data(FD650_MODE_WRCMD, FD650_DISP_STATE_WRCMD | get_actual_brightness() | FD650_DISP_ON);
|
||
+ dev->power = 1;
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+static unsigned char fd650_get_power(void)
|
||
+{
|
||
+ return dev->power;
|
||
+}
|
||
+
|
||
+static void fd650_set_power(unsigned char state)
|
||
+{
|
||
+ dev->power = state;
|
||
+ if (state)
|
||
+ fd650_set_brightness_level(dev->brightness);
|
||
+ else
|
||
+ fd650_write_cmd_data(FD650_MODE_WRCMD, FD650_DISP_STATE_WRCMD | FD650_DISP_OFF);
|
||
+}
|
||
+
|
||
+static struct vfd_display *fd650_get_display_type(void)
|
||
+{
|
||
+ return &dev->dtb_active.display;
|
||
+}
|
||
+
|
||
+static unsigned char fd650_set_display_type(struct vfd_display *display)
|
||
+{
|
||
+ unsigned char ret = 0;
|
||
+ if (display->type < DISPLAY_TYPE_MAX && (is_fd650() || is_fd655() || is_fd6551()))
|
||
+ {
|
||
+ dev->dtb_active.display = *display;
|
||
+ fd650_init();
|
||
+ ret = 1;
|
||
+ }
|
||
+
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static void fd650_set_icon(const char *name, unsigned char state)
|
||
+{
|
||
+ struct vfd_dtb_config *dtb = &dev->dtb_active;
|
||
+ switch (dtb->display.type) {
|
||
+ case DISPLAY_TYPE_5D_7S_NORMAL:
|
||
+ case DISPLAY_TYPE_5D_7S_T95:
|
||
+ case DISPLAY_TYPE_5D_7S_G9SX:
|
||
+ if (strncmp(name,"alarm",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_ALARM]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_ALARM]);
|
||
+ } else if (strncmp(name,"usb",3) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_USB]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_USB]);
|
||
+ } else if (strncmp(name,"play",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_PLAY]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_PLAY]);
|
||
+ } else if (strncmp(name,"pause",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_PAUSE]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_PAUSE]);
|
||
+ } else if (strncmp(name,"colon",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_SEC]);
|
||
+ } else if (strncmp(name,"eth",3) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_ETH]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_ETH]);
|
||
+ } else if (strncmp(name,"wifi",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT1_WIFI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT1_WIFI]);
|
||
+ }
|
||
+ break;
|
||
+ case DISPLAY_TYPE_5D_7S_X92:
|
||
+ if (strncmp(name,"apps",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_APPS]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_APPS]);
|
||
+ } else if (strncmp(name,"setup",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_SETUP]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_SETUP]);
|
||
+ } else if (strncmp(name,"usb",3) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_USB]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_USB]);
|
||
+ } else if (strncmp(name,"sd",2) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_CARD]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_CARD]);
|
||
+ } else if (strncmp(name,"colon",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_SEC]);
|
||
+ } else if (strncmp(name,"hdmi",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_HDMI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_HDMI]);
|
||
+ } else if (strncmp(name,"cvbs",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT2_CVBS]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT2_CVBS]);
|
||
+ }
|
||
+ break;
|
||
+ case DISPLAY_TYPE_5D_7S_ABOX:
|
||
+ if (strncmp(name,"power",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_POWER]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT3_POWER]);
|
||
+ } else if (strncmp(name,"eth",3) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_LAN]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT3_LAN]);
|
||
+ } else if (strncmp(name,"colon",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT3_SEC]);
|
||
+ } else if (strncmp(name,"wifi",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT3_WIFIHI] | dtb->led_dots[LED_DOT3_WIFILO]) : (dev->status_led_mask & ~(dtb->led_dots[LED_DOT3_WIFIHI] | dtb->led_dots[LED_DOT3_WIFILO]));
|
||
+ }
|
||
+ break;
|
||
+ case DISPLAY_TYPE_5D_7S_M9_PRO:
|
||
+ if (strncmp(name,"b-t",3) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_BT]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_BT]);
|
||
+ } else if (strncmp(name,"eth",3) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_ETH]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_ETH]);
|
||
+ } else if (strncmp(name,"wifi",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_WIFI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_WIFI]);
|
||
+ } else if (strncmp(name,"spdif",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_SPDIF]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_SPDIF]);
|
||
+ } else if (strncmp(name,"colon",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_SEC]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_SEC]);
|
||
+ } else if (strncmp(name,"hdmi",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_HDMI]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_HDMI]);
|
||
+ } else if (strncmp(name,"cvbs",4) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | dtb->led_dots[LED_DOT4_AV]) : (dev->status_led_mask & ~dtb->led_dots[LED_DOT4_AV]);
|
||
+ }
|
||
+ break;
|
||
+ default:
|
||
+ if (strncmp(name,"colon",5) == 0)
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | ledDots[LED_DOT_SEC]) : (dev->status_led_mask & ~ledDots[LED_DOT_SEC]);
|
||
+ break;
|
||
+ }
|
||
+}
|
||
+
|
||
+static size_t fd650_read_data(unsigned char *data, size_t length)
|
||
+{
|
||
+ unsigned char cmd = FD650_KEY_RDCMD;
|
||
+ return protocol->read_cmd_data(&cmd, 1, data, length > 1 ? 1 : length) == 0 ? 1 : -1;
|
||
+}
|
||
+
|
||
+static size_t fd650_write_data(const unsigned char *_data, size_t length)
|
||
+{
|
||
+ size_t i;
|
||
+ struct vfd_dtb_config *dtb = &dev->dtb_active;
|
||
+ unsigned short *data = (unsigned short *)_data;
|
||
+ unsigned char *tempBuf = (unsigned char *)dev->wbuf;
|
||
+
|
||
+ memset(dev->wbuf, 0x00, sizeof(dev->wbuf));
|
||
+ length = min(length, (size_t)ram_size) / sizeof(unsigned short);
|
||
+ if (data[0] & ledDots[LED_DOT_SEC]) {
|
||
+ data[0] &= ~ledDots[LED_DOT_SEC];
|
||
+ data[0] |= dtb->led_dots[LED_DOT_SEC];
|
||
+ }
|
||
+ // Apply LED indicators mask (usb, eth, wifi etc.)
|
||
+ if (vfd_display_data.mode == DISPLAY_MODE_CLOCK)
|
||
+ data[0] |= dev->status_led_mask;
|
||
+ else
|
||
+ data[0] |= (dev->status_led_mask & ~dtb->led_dots[LED_DOT_SEC]);
|
||
+ for (i = 0; i <= length; i++)
|
||
+ tempBuf[dtb->dat_index[i]] = (unsigned char)(data[i] & 0xFF);
|
||
+ if (is_fd650())
|
||
+ tempBuf[dtb->dat_index[0]] |= ((data[0] | dev->status_led_mask) & ledDots[LED_DOT_SEC]) ? ledDot : 0x00;
|
||
+
|
||
+ return fd650_write_data_real(0, tempBuf, length) == 0 ? length : 0;
|
||
+}
|
||
+
|
||
+static size_t fd650_write_display_data(const struct vfd_display_data *data)
|
||
+{
|
||
+ unsigned short wdata[7];
|
||
+ size_t status = seg7_write_display_data(data, wdata, sizeof(wdata));
|
||
+ vfd_display_data = *data;
|
||
+ if (status && !fd650_write_data((unsigned char*)wdata, 5*sizeof(wdata[0])))
|
||
+ status = 0;
|
||
+ return status;
|
||
+}
|
||
diff --git a/drivers/leds/vfd/controllers/fd650.h b/drivers/leds/vfd/controllers/fd650.h
|
||
new file mode 100644
|
||
index 000000000..cbfd06e96
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/fd650.h
|
||
@@ -0,0 +1,8 @@
|
||
+#ifndef __FD650H__
|
||
+#define __FD650H__
|
||
+
|
||
+#include "controller.h"
|
||
+
|
||
+struct controller_interface *init_fd650(struct vfd_dev *dev);
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/Grotesk16x32_h.h b/drivers/leds/vfd/controllers/fonts/Grotesk16x32_h.h
|
||
new file mode 100644
|
||
index 000000000..7e1a8044c
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/fonts/Grotesk16x32_h.h
|
||
@@ -0,0 +1,112 @@
|
||
+// Grotesk16x32_h.h
|
||
+// Font type : Full (96 characters)
|
||
+// Font size : 16x32 pixels
|
||
+// Memory usage : 6148 bytes
|
||
+
|
||
+// Origin: http://www.rinkydinkelectronics.com/r_fonts.php
|
||
+// Modified by Arthur Liberman for compatibility with the OpenVFD driver.
|
||
+
|
||
+const unsigned char Grotesk16x32_H[6148] = {
|
||
+0x10,0x20,0x20,0x60,
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <space>
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // !
|
||
+0x00,0x00,0x00,0x00,0x06,0x18,0x06,0x18,0x0E,0x38,0x0E,0x38,0x1E,0x78,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // "
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x8C,0x03,0x8C,0x03,0x8C,0x03,0x1C,0x03,0x18,0x03,0x18,0x3F,0xFF,0x3F,0xFF,0x3F,0xFF,0x06,0x38,0x06,0x30,0x06,0x30,0x0E,0x30,0x0C,0x70,0x0C,0x60,0xFF,0xFC,0xFF,0xFE,0xFF,0xFE,0x1C,0xE0,0x18,0xE0,0x18,0xC0,0x18,0xC0,0x38,0xC0,0x39,0xC0,0x31,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // #
|
||
+0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x03,0xF0,0x0F,0xF8,0x1F,0xFC,0x1C,0x8C,0x18,0x80,0x38,0x80,0x38,0x80,0x38,0x80,0x1C,0x80,0x1F,0x80,0x0F,0xF0,0x07,0xF8,0x01,0xFC,0x00,0x9C,0x00,0x8E,0x00,0x8E,0x00,0x8E,0x00,0x8E,0x30,0x8C,0x38,0x9C,0x3F,0xF8,0x1F,0xF0,0x01,0xC0,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80, // $
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x7F,0x00,0x77,0x00,0xE3,0x80,0xC1,0x80,0xC1,0x80,0xC1,0x80,0x63,0x82,0x7F,0x0F,0x3E,0x3E,0x1C,0xF8,0x03,0xE0,0x0F,0x80,0x3E,0x38,0x78,0x7C,0xE0,0xFE,0x01,0xC6,0x01,0x83,0x01,0x83,0x01,0x83,0x01,0xC7,0x00,0xEE,0x00,0xFC,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // %
|
||
+0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xF0,0x0F,0xF0,0x1E,0x30,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x1F,0x00,0x3B,0x87,0x71,0xC7,0x71,0xC7,0x60,0xE7,0x60,0xE7,0x60,0x76,0x60,0x7E,0x70,0x3E,0x70,0x1C,0x78,0x1C,0x3C,0x7E,0x1F,0xFE,0x0F,0xE7,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // &
|
||
+0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '
|
||
+0x00,0x60,0x00,0xE0,0x00,0xC0,0x00,0xC0,0x01,0xC0,0x01,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x03,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x03,0x00,0x03,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x01,0x80,0x01,0xC0,0x01,0xC0,0x00,0xC0,0x00,0xE0,0x00,0x60,0x00,0x00, // (
|
||
+0x06,0x00,0x07,0x00,0x03,0x00,0x03,0x00,0x03,0x80,0x01,0x80,0x01,0x80,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x80,0x01,0x80,0x03,0x80,0x03,0x00,0x03,0x00,0x07,0x00,0x06,0x00,0x00,0x00, // )
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x61,0x86,0x79,0x8E,0x3D,0x9C,0x0F,0xF8,0x07,0xE0,0x03,0xC0,0x07,0xE0,0x0F,0xF8,0x3D,0xBC,0x79,0x8E,0x71,0x86,0x01,0x82,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // *
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x7F,0xFE,0x7F,0xFE,0x3F,0xFE,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // +
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x07,0x80,0x07,0x80,0x07,0x00,0x07,0x00,0x07,0x00,0x0E,0x00, // ,
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x07,0xC0,0x07,0xC0,0x07,0xC0,0x07,0xC0,0x07,0xC0,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x1C,0x00,0x18,0x00,0x38,0x00,0x38,0x00,0x70,0x00,0x70,0x00,0xE0,0x00,0xE0,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x03,0x80,0x03,0x80,0x03,0x00,0x07,0x00,0x06,0x00,0x0E,0x00,0x0E,0x00,0x1C,0x00,0x1C,0x00,0x18,0x00,0x38,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // /
|
||
+
|
||
+0x00,0x00,0x00,0x00,0x01,0xC0,0x07,0xE0,0x0F,0xF0,0x1E,0x78,0x1C,0x38,0x1C,0x1C,0x38,0x3C,0x38,0x3C,0x38,0x7C,0x38,0x7C,0x38,0xCC,0x38,0xCE,0x39,0xCE,0x39,0x8E,0x3B,0x8E,0x3B,0x0C,0x3F,0x0C,0x3E,0x1C,0x3E,0x1C,0x3C,0x1C,0x3C,0x1C,0x1C,0x1C,0x1C,0x38,0x0E,0x78,0x0F,0xF0,0x07,0xE0,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // 0
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x07,0xE0,0x1F,0xE0,0x1F,0xE0,0x1C,0xE0,0x10,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xC0,0x00,0xC0,0x0F,0xFC,0x1F,0xFE,0x0F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 1
|
||
+0x00,0x00,0x00,0x00,0x07,0xC0,0x1F,0xF0,0x3F,0xF8,0x3C,0x3C,0x30,0x1C,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1C,0x00,0x1C,0x00,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1E,0x00,0x3C,0x00,0x3F,0xFE,0x3F,0xFE,0x3F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 2
|
||
+0x00,0x00,0x00,0x00,0x07,0xC0,0x1F,0xF0,0x3F,0xF8,0x3C,0x78,0x00,0x3C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x38,0x07,0xF0,0x07,0xE0,0x07,0xF0,0x00,0x38,0x00,0x1C,0x00,0x1C,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1C,0x20,0x3C,0x3F,0xFC,0x3F,0xF8,0x3F,0xF0,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // 3
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0xF0,0x00,0xF0,0x01,0xF0,0x01,0xB0,0x03,0x30,0x03,0x30,0x07,0x70,0x06,0x70,0x0E,0x70,0x0C,0x70,0x1C,0x70,0x18,0x70,0x38,0x70,0x30,0x30,0x70,0x30,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x00,0x70,0x00,0x30,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 4
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x1F,0xF8,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xC0,0x1F,0xF0,0x1F,0xF8,0x18,0x7C,0x00,0x3C,0x00,0x1C,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1C,0x20,0x3C,0x3F,0xF8,0x3F,0xF8,0x3F,0xE0,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // 5
|
||
+0x00,0x00,0x00,0x00,0x01,0xF0,0x07,0xF8,0x0F,0xF8,0x0F,0x18,0x1C,0x00,0x1C,0x00,0x18,0x00,0x38,0x00,0x38,0x00,0x39,0xE0,0x33,0xF0,0x3F,0xF8,0x3E,0x3C,0x3C,0x1C,0x38,0x1C,0x38,0x0C,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0C,0x18,0x1C,0x1C,0x1C,0x1E,0x38,0x0F,0xF8,0x07,0xF0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // 6
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFE,0x3F,0xFE,0x3F,0xFC,0x00,0x1C,0x00,0x1C,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x07,0x00,0x07,0x00,0x07,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7
|
||
+0x00,0x00,0x00,0x00,0x03,0xC0,0x0F,0xF0,0x1F,0xF8,0x1E,0x38,0x1C,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x1C,0x1C,0x1C,0x38,0x0F,0xF0,0x07,0xE0,0x0F,0xF0,0x1E,0x78,0x1C,0x1C,0x38,0x1C,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1C,0x3C,0x1C,0x1E,0x7C,0x1F,0xF8,0x0F,0xF0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // 8
|
||
+0x00,0x00,0x00,0x00,0x03,0xC0,0x0F,0xF0,0x1F,0xF0,0x1C,0x78,0x38,0x38,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x30,0x1C,0x30,0x1C,0x38,0x1C,0x38,0x1E,0x38,0x1E,0x38,0x3E,0x1E,0x7E,0x1F,0xEC,0x0F,0xCC,0x03,0x8C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x38,0x00,0x38,0x1F,0xF0,0x1F,0xF0,0x1F,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // :
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0x80,0x07,0x80,0x07,0x80,0x07,0x00,0x07,0x00,0x00,0x00, // ;
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x0E,0x00,0x3E,0x00,0xFC,0x03,0xF0,0x0F,0xC0,0x3F,0x00,0x7C,0x00,0x78,0x00,0x7E,0x00,0x3F,0x80,0x0F,0xE0,0x03,0xF8,0x00,0xFE,0x00,0x3E,0x00,0x0E,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // =
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x78,0x00,0x7E,0x00,0x3F,0x80,0x0F,0xE0,0x03,0xF8,0x00,0xFE,0x00,0x3E,0x00,0x0E,0x00,0x3E,0x00,0xFC,0x03,0xF0,0x0F,0xC0,0x3F,0x00,0x7C,0x00,0x70,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // >
|
||
+0x00,0x00,0x00,0x00,0x03,0xE0,0x0F,0xF0,0x1F,0xF8,0x1C,0x3C,0x18,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x38,0x00,0x78,0x00,0xF0,0x00,0xE0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x80,0x01,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ?
|
||
+
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0x0F,0xF8,0x1E,0x3C,0x1C,0x0C,0x38,0x0E,0x30,0x06,0x70,0x06,0x60,0xF6,0x61,0xFE,0xE3,0xFE,0xC3,0x0E,0xC7,0x06,0xC6,0x06,0xC6,0x06,0xC6,0x06,0xC6,0x06,0xC7,0x06,0xC7,0x0E,0xE3,0x9E,0x63,0xFE,0x61,0xF6,0x70,0x60,0x30,0x00,0x38,0x00,0x1C,0x00,0x1E,0x00,0x0F,0xFC,0x07,0xFE,0x00,0xFC, // @
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x07,0xC0,0x07,0xC0,0x06,0xE0,0x06,0xE0,0x0E,0x60,0x0E,0x60,0x0E,0x70,0x0C,0x70,0x0C,0x70,0x1C,0x30,0x1C,0x38,0x1C,0x38,0x18,0x38,0x3F,0xF8,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x70,0x1C,0x70,0x0C,0x70,0x0E,0x70,0x0E,0xE0,0x0E,0xE0,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // A
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x3F,0xF0,0x3F,0xF8,0x38,0x3C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x38,0x3F,0xF8,0x3F,0xF0,0x3F,0xF0,0x38,0x78,0x38,0x1C,0x38,0x1C,0x38,0x0C,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1C,0x38,0x3C,0x3F,0xF8,0x3F,0xF8,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // B
|
||
+0x00,0x00,0x00,0x00,0x01,0xF0,0x07,0xF8,0x0F,0xFC,0x0F,0x1C,0x1C,0x04,0x1C,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x78,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x1C,0x00,0x1E,0x0C,0x0F,0x3C,0x07,0xFC,0x03,0xF8,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00, // C
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x7F,0xE0,0x7F,0xF0,0x70,0x78,0x70,0x38,0x70,0x3C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x38,0x70,0x38,0x70,0xF8,0x7F,0xF0,0x7F,0xE0,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // D
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x3F,0xF8,0x3F,0xFC,0x3F,0xFC,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x3F,0xFC,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // E
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFC,0x1F,0xFC,0x1F,0xFC,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xF8,0x1F,0xFC,0x1F,0xFC,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // F
|
||
+0x00,0x00,0x00,0x00,0x01,0xE0,0x07,0xF8,0x0F,0xFC,0x1E,0x1C,0x1C,0x0C,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x7C,0x70,0x7C,0x70,0x7C,0x70,0x0C,0x70,0x0C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0C,0x1C,0x1C,0x1F,0x3C,0x0F,0xFC,0x07,0xF8,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // G
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x7F,0xFC,0x7F,0xFC,0x7F,0xFC,0x78,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x30,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // H
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x3F,0xF8,0x3F,0xF8,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x3F,0xF8,0x3F,0xF8,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // I
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x0F,0xF0,0x07,0xF0,0x00,0x30,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x30,0x00,0x70,0x00,0x70,0x40,0x70,0x60,0x70,0x79,0xF0,0x7F,0xE0,0x3F,0xC0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // J
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x0E,0x70,0x1C,0x70,0x3C,0x70,0x38,0x70,0x70,0x70,0xE0,0x71,0xE0,0x71,0xC0,0x73,0x80,0x77,0x00,0x7F,0x00,0x7F,0x80,0x7F,0x80,0x79,0xC0,0x79,0xC0,0x70,0xE0,0x70,0xE0,0x70,0x70,0x70,0x70,0x70,0x38,0x70,0x3C,0x70,0x1C,0x70,0x1E,0x70,0x0E,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // K
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x3F,0xFE,0x3F,0xFE,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // L
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x3C,0xF0,0x3C,0xF8,0x3C,0xF8,0x3C,0xF8,0x7C,0xF8,0x6C,0xEC,0x6C,0xEC,0xCC,0xEC,0xCC,0xEC,0xCC,0xE6,0xCC,0xE7,0xCC,0xE7,0x8C,0xE7,0x8C,0xE3,0x8C,0xE3,0x0C,0xE0,0x0C,0xE0,0x0C,0xE0,0x0C,0xE0,0x0C,0xE0,0x0C,0xE0,0x0C,0xE0,0x0C,0xE0,0x0C,0xE0,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // M
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x1C,0xF0,0x1C,0xF8,0x1C,0xF8,0x1C,0xFC,0x1C,0xFC,0x1C,0xEC,0x1C,0xEE,0x1C,0xEE,0x1C,0xE6,0x1C,0xE7,0x1C,0xE7,0x1C,0xE3,0x9C,0xE3,0x9C,0xE1,0x9C,0xE1,0xDC,0xE1,0xDC,0xE0,0xDC,0xE0,0xFC,0xE0,0xFC,0xE0,0x7C,0xE0,0x7C,0xE0,0x7C,0xE0,0x3C,0xE0,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // N
|
||
+0x00,0x00,0x00,0x00,0x03,0xC0,0x0F,0xE0,0x1F,0xF0,0x1E,0x78,0x3C,0x38,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x30,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0x70,0x1E,0x70,0x1E,0x70,0x1E,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x1C,0x38,0x1E,0x78,0x0F,0xF0,0x07,0xE0,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // O
|
||
+
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x3F,0xF8,0x3F,0xFC,0x38,0x1C,0x38,0x1E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1C,0x38,0x3C,0x3F,0xFC,0x3F,0xF8,0x3F,0xE0,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // P
|
||
+0x00,0x00,0x00,0x00,0x03,0xC0,0x0F,0xF0,0x1F,0xF0,0x1C,0x78,0x38,0x38,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0x70,0x1E,0x70,0x1E,0x70,0x0E,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x38,0x1C,0x78,0x1F,0xF0,0x0F,0xE0,0x03,0xE0,0x00,0x70,0x00,0x38,0x00,0x38,0x00,0x10, // Q
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x3F,0xF0,0x3F,0xF8,0x30,0x38,0x38,0x3C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x30,0x38,0x3F,0xF8,0x3F,0xF0,0x3F,0xE0,0x3F,0xF0,0x30,0x70,0x38,0x38,0x38,0x38,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x30,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // R
|
||
+0x00,0x00,0x00,0x00,0x03,0xE0,0x0F,0xF8,0x1F,0xF8,0x3C,0x38,0x38,0x08,0x38,0x00,0x30,0x00,0x70,0x00,0x70,0x00,0x38,0x00,0x3C,0x00,0x3F,0x80,0x1F,0xE0,0x0F,0xF0,0x03,0xF8,0x00,0x7C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x0C,0x00,0x1C,0x00,0x1C,0x30,0x3C,0x3C,0x78,0x3F,0xF8,0x1F,0xF0,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // S
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x7F,0xFE,0x01,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // T
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x1E,0x78,0x1F,0xF8,0x0F,0xF0,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // U
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x18,0x18,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0C,0x30,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x06,0x60,0x06,0x60,0x06,0x60,0x07,0xE0,0x07,0xE0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // V
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0x60,0x06,0x61,0x86,0x63,0xC6,0x63,0xC6,0x73,0xCE,0x73,0xCE,0x73,0xCE,0x72,0xCE,0x76,0x6E,0x36,0x6C,0x36,0x6C,0x36,0x6C,0x36,0x6C,0x3E,0x7C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x1C,0x38,0x1C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // W
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x0E,0x38,0x0E,0x38,0x1C,0x1C,0x1C,0x1C,0x38,0x0E,0x38,0x0E,0x70,0x06,0x70,0x07,0xE0,0x03,0xE0,0x03,0xC0,0x01,0xC0,0x03,0xC0,0x03,0xE0,0x07,0xE0,0x07,0x60,0x0E,0x70,0x0E,0x30,0x1C,0x38,0x1C,0x38,0x38,0x1C,0x38,0x1C,0x70,0x0E,0x70,0x0E,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // X
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x0E,0x70,0x0E,0x30,0x1C,0x38,0x1C,0x38,0x18,0x1C,0x38,0x1C,0x38,0x0E,0x70,0x0E,0x70,0x06,0x60,0x07,0xE0,0x03,0xC0,0x03,0xC0,0x03,0x80,0x01,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Y
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFE,0x3F,0xFE,0x3F,0xFE,0x00,0x1C,0x00,0x1C,0x00,0x38,0x00,0x38,0x00,0x70,0x00,0x70,0x00,0xE0,0x00,0xE0,0x01,0xC0,0x01,0xC0,0x03,0x80,0x03,0x80,0x07,0x00,0x07,0x00,0x0E,0x00,0x0E,0x00,0x1C,0x00,0x1C,0x00,0x38,0x00,0x3F,0xFE,0x3F,0xFE,0x3F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Z
|
||
+0x01,0xF8,0x01,0xF8,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xF8,0x01,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // [
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x38,0x00,0x38,0x00,0x1C,0x00,0x1C,0x00,0x0C,0x00,0x0E,0x00,0x0E,0x00,0x07,0x00,0x07,0x00,0x03,0x80,0x03,0x80,0x01,0x80,0x01,0xC0,0x01,0xC0,0x00,0xE0,0x00,0xE0,0x00,0x70,0x00,0x70,0x00,0x30,0x00,0x38,0x00,0x38,0x00,0x1C,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <backslash>
|
||
+0x0F,0x80,0x0F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x0F,0xC0,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ]
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x07,0xE0,0x07,0xF0,0x0E,0x70,0x1E,0x78,0x1C,0x38,0x38,0x1C,0x70,0x0E,0x70,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // _
|
||
+
|
||
+0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // `
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x1F,0xE0,0x3F,0xF0,0x3C,0x78,0x30,0x38,0x00,0x18,0x00,0x1C,0x00,0x1C,0x07,0xFC,0x1F,0xFC,0x3F,0xFC,0x38,0x1C,0x30,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x3C,0x38,0x3C,0x3C,0xFC,0x3F,0xDC,0x1F,0xDC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // a
|
||
+0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x80,0x3B,0xE0,0x3F,0xF0,0x3E,0x78,0x3C,0x38,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0C,0x38,0x0C,0x38,0x0C,0x38,0x0C,0x38,0x0C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x3C,0x38,0x3E,0x78,0x3F,0xF0,0x3B,0xF0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // b
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x03,0xF8,0x07,0xFC,0x0F,0x1C,0x1E,0x0C,0x1C,0x00,0x18,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x18,0x00,0x1C,0x00,0x1E,0x04,0x0F,0x1C,0x07,0xFC,0x03,0xF8,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00, // c
|
||
+0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x01,0x1C,0x0F,0xDC,0x1F,0xFC,0x1E,0xFC,0x38,0x3C,0x38,0x3C,0x38,0x1C,0x30,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x30,0x1C,0x30,0x1C,0x38,0x3C,0x38,0x3C,0x1C,0x7C,0x1F,0xFC,0x0F,0xDC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // d
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0xE0,0x0F,0xF0,0x1E,0x78,0x1C,0x1C,0x38,0x1C,0x38,0x0C,0x30,0x0E,0x7F,0xFE,0x7F,0xFE,0x7F,0xFC,0x70,0x00,0x70,0x00,0x30,0x00,0x38,0x00,0x38,0x00,0x1C,0x04,0x1E,0x3C,0x0F,0xFC,0x07,0xF8,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // e
|
||
+0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0xFC,0x01,0xF8,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x3F,0xFC,0x3F,0xFC,0x1F,0xF8,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // f
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x0F,0xDC,0x1F,0xFC,0x1C,0x7C,0x38,0x3C,0x38,0x1C,0x30,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x30,0x1C,0x30,0x1C,0x38,0x3C,0x3C,0x3C,0x1F,0xFC,0x0F,0xDC,0x07,0x9C,0x00,0x1C,0x00,0x18,0x00,0x38,0x1C,0xF0,0x1F,0xF0,0x0F,0xC0, // g
|
||
+0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x40,0x3B,0xF0,0x3B,0xF0,0x3F,0xF8,0x3C,0x38,0x38,0x18,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // h
|
||
+0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x0F,0xC0,0x0F,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x0F,0xFC,0x1F,0xFE,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // i
|
||
+0x00,0x00,0x00,0x00,0x00,0x80,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x1F,0xC0,0x01,0xC0,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x1F,0x80,0x3F,0x80,0x3F,0x00, // j
|
||
+0x00,0x00,0x00,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x1C,0x1C,0x3C,0x1C,0x38,0x1C,0x70,0x1C,0xE0,0x19,0xC0,0x19,0xC0,0x1F,0x80,0x1F,0xC0,0x1F,0xC0,0x1C,0xE0,0x1C,0xE0,0x18,0x70,0x1C,0x70,0x1C,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x0E,0x18,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // k
|
||
+0x00,0x00,0x0F,0x80,0x1F,0x80,0x1F,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0xC0,0x01,0xC0,0x00,0xFC,0x00,0xFE,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // l
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x6F,0x78,0x7F,0xFC,0x7B,0xDC,0x73,0x8E,0x71,0x8E,0x71,0x8E,0x61,0x8E,0x71,0x8E,0x71,0x8E,0x71,0x8E,0x71,0x8E,0x71,0x8E,0x71,0x8E,0x71,0x8E,0x71,0x8E,0x71,0x8E,0x71,0x8E,0x71,0x8E,0x61,0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // m
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x3B,0xF0,0x3B,0xF0,0x3F,0xF8,0x3C,0x38,0x38,0x18,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // n
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x07,0xE0,0x0F,0xF0,0x1E,0x78,0x3C,0x38,0x38,0x1C,0x38,0x1C,0x30,0x1C,0x30,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0C,0x30,0x1C,0x30,0x1C,0x38,0x1C,0x38,0x1C,0x3C,0x38,0x1E,0x78,0x0F,0xF0,0x0F,0xE0,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // o
|
||
+
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3B,0xF0,0x3F,0xF8,0x3E,0x38,0x3C,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0C,0x38,0x0C,0x38,0x0C,0x38,0x0C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x3C,0x38,0x3E,0x78,0x3F,0xF0,0x3B,0xE0,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00, // p
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x0F,0xDC,0x1F,0xFC,0x1C,0x7C,0x38,0x3C,0x38,0x1C,0x30,0x1C,0x30,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x30,0x1C,0x38,0x1C,0x38,0x3C,0x38,0x3C,0x1E,0xFC,0x0F,0xFC,0x07,0x9C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C, // q
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x06,0x7E,0x0E,0xFE,0x0F,0xFE,0x0F,0x82,0x0F,0x00,0x0F,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // r
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x07,0xF0,0x0F,0xF8,0x1E,0x38,0x1C,0x08,0x18,0x00,0x18,0x00,0x1C,0x00,0x1E,0x00,0x1F,0xE0,0x0F,0xF0,0x03,0xF8,0x00,0x78,0x00,0x18,0x00,0x1C,0x00,0x18,0x10,0x38,0x1C,0x78,0x1F,0xF0,0x1F,0xE0,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // s
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x3F,0xF8,0x7F,0xF8,0x3F,0xF8,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x03,0x80,0x03,0xF8,0x03,0xF8,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // t
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x18,0x1C,0x1C,0x3C,0x1E,0x7C,0x1F,0xFC,0x0F,0xDC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // u
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x0E,0x70,0x0C,0x30,0x1C,0x38,0x1C,0x38,0x1C,0x18,0x18,0x1C,0x38,0x1C,0x38,0x1C,0x30,0x0C,0x30,0x0E,0x70,0x0E,0x70,0x06,0x60,0x06,0x60,0x07,0xE0,0x07,0xE0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // v
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xE0,0x07,0xE0,0x07,0xE0,0x07,0x60,0x06,0x61,0x86,0x71,0x8E,0x73,0xCE,0x73,0xCE,0x33,0xCC,0x33,0xCC,0x32,0x4C,0x32,0x4C,0x3E,0x7C,0x3E,0x7C,0x1E,0x78,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // w
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x0C,0x38,0x1C,0x1C,0x38,0x1C,0x38,0x0E,0x70,0x0E,0x70,0x07,0xE0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x07,0xE0,0x06,0x60,0x0E,0x70,0x1C,0x38,0x1C,0x38,0x38,0x1C,0x38,0x1C,0x70,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // x
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x0E,0x30,0x0E,0x38,0x0C,0x38,0x1C,0x18,0x1C,0x1C,0x18,0x1C,0x38,0x0C,0x38,0x0E,0x30,0x0E,0x70,0x06,0x70,0x07,0x60,0x03,0xE0,0x03,0xE0,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x80,0x03,0x80,0x03,0x00,0x1F,0x00,0x3E,0x00,0x3C,0x00, // y
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFC,0x1F,0xFC,0x1F,0xFC,0x00,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x00,0xE0,0x01,0xC0,0x01,0xC0,0x03,0x80,0x07,0x00,0x07,0x00,0x0E,0x00,0x0E,0x00,0x1C,0x00,0x3F,0xF8,0x3F,0xFC,0x1F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // z
|
||
+0x00,0x78,0x00,0xFC,0x01,0xE0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x03,0x80,0x3F,0x00,0x3E,0x00,0x1F,0x00,0x03,0x80,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xE0,0x00,0xFC,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // {
|
||
+0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // |
|
||
+0x1E,0x00,0x1F,0x00,0x07,0x80,0x03,0x80,0x01,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x01,0x80,0x01,0xC0,0x01,0xC0,0x00,0xFC,0x00,0x7C,0x00,0xFC,0x01,0xC0,0x01,0xC0,0x01,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x01,0x80,0x03,0x80,0x07,0x80,0x1F,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // }
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x3E,0x00,0x3F,0x00,0x7F,0x02,0x63,0x87,0xE1,0xC7,0xC1,0xCE,0x40,0xFE,0x00,0x7C,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~
|
||
+0x00,0x00,0x00,0x00,0x07,0xC0,0x0F,0xE0,0x1C,0x70,0x38,0x38,0x30,0x18,0x30,0x18,0x30,0x18,0x38,0x38,0x1C,0x70,0x0F,0xE0,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <20>
|
||
+};
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/Grotesk16x32_v.h b/drivers/leds/vfd/controllers/fonts/Grotesk16x32_v.h
|
||
new file mode 100644
|
||
index 000000000..07cfa2971
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/fonts/Grotesk16x32_v.h
|
||
@@ -0,0 +1,107 @@
|
||
+// Grotesk16x32_v.h
|
||
+// Font type : Full (96 characters)
|
||
+// Font size : 16x32 pixels
|
||
+// Memory usage : 6148 bytes
|
||
+
|
||
+// Origin: http://www.rinkydinkelectronics.com/r_fonts.php
|
||
+// Modified by Arthur Liberman for compatibility with the OpenVFD driver.
|
||
+
|
||
+const unsigned char Grotesk16x32_V[6148] = {
|
||
+0x10,0x20,0x20,0x60,
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <space>
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, // !
|
||
+0x00,0x00,0x00,0xC0,0xF0,0xFC,0x7C,0x00,0x00,0xC0,0xF0,0xFC,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // "
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF8,0x38,0x00,0x00,0xC0,0xF8,0x78,0x00,0x00,0x00,0x00,0x0E,0x0E,0x8E,0xFE,0xFF,0x0F,0x0E,0x0E,0xFE,0xFF,0x1F,0x0E,0x0E,0x0E,0x1C,0x1C,0x1C,0xFC,0xFF,0x3F,0x1C,0x1C,0xFC,0xFF,0x7F,0x1D,0x1C,0x1C,0x18,0x00,0x00,0x00,0x0E,0x0F,0x07,0x00,0x00,0x0C,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, // #
|
||
+0x00,0x00,0x00,0xC0,0xE0,0xE0,0x70,0x70,0xFF,0x70,0x70,0x70,0xE0,0xC0,0x00,0x00,0x00,0x00,0x0E,0x3F,0x7F,0xF0,0xE0,0xE0,0xFF,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x80,0x00,0x00,0x01,0xFF,0x01,0x01,0x83,0xFF,0xFF,0x3C,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x07,0xFF,0x07,0x03,0x03,0x01,0x00,0x00,0x00, // $
|
||
+0x80,0xE0,0xF0,0x70,0x30,0x70,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x38,0x70,0x70,0x70,0xB8,0x9F,0xCF,0xC0,0xE0,0x60,0x70,0x30,0x38,0x10,0x08,0x0C,0x0E,0x06,0x07,0x03,0x03,0xF1,0xF9,0x1C,0x0E,0x0E,0x0E,0x1C,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x0E,0x0C,0x0E,0x07,0x03,0x01, // %
|
||
+0x00,0x00,0x00,0xE0,0xF0,0xF8,0x3C,0x1C,0x1C,0x1C,0x38,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE7,0xFF,0x7F,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0xFF,0xFF,0xC3,0x00,0x00,0x00,0x03,0x0F,0x3F,0x7C,0xF0,0xE0,0xFF,0x7F,0x0F,0x00,0x01,0x03,0x07,0x0F,0x0E,0x1C,0x1C,0x0C,0x0E,0x0E,0x07,0x07,0x0F,0x0E,0x08, // &
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFC,0x7C,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFE,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x3F,0x7C,0x60,0x00,0x00,0x00,0x00,0x00, // (
|
||
+0x00,0x00,0x00,0x00,0x00,0x03,0x1F,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x7C,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // )
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1C,0x18,0x38,0x70,0xE0,0xFF,0xFF,0xE0,0x60,0x30,0x38,0x1C,0x0C,0x00,0x00,0x18,0x1C,0x1C,0x0E,0x07,0x03,0xFF,0xFF,0x03,0x07,0x06,0x0E,0x1C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // *
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // +
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFC,0xFF,0x7F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00, // ,
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, // .
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFE,0x1F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0x7F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // /
|
||
+0x00,0x00,0x00,0xE0,0xF0,0xF8,0x38,0x1C,0x1C,0x3C,0x78,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0xC0,0xF0,0x7C,0x0F,0x0F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFC,0x1F,0x07,0x01,0x00,0x00,0xF8,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x0E,0x1C,0x1C,0x0E,0x0F,0x07,0x03,0x00,0x00,0x00, // 0
|
||
+0x00,0x00,0x00,0xE0,0xE0,0xF0,0x70,0x78,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0E,0x0E,0x0E,0x0E,0x0F,0x0F,0x0E,0x0E,0x0E,0x0E,0x04,0x00, // 1
|
||
+0x00,0x00,0x70,0x78,0x38,0x3C,0x1C,0x1C,0x1C,0x1C,0x38,0x78,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFF,0x3F,0x0F,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0x3C,0x1E,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x00, // 2
|
||
+0x00,0x00,0x30,0x38,0x38,0x3C,0x1C,0x1C,0x1C,0x3C,0x78,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0xE0,0xE0,0xF0,0xBF,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x87,0xFF,0xFE,0x78,0x00,0x00,0x00,0x0F,0x0E,0x0E,0x0E,0x1E,0x1E,0x1E,0x0E,0x0F,0x0F,0x07,0x03,0x00,0x00, // 3
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x78,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x7C,0x1F,0x07,0x00,0xFC,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3C,0x3F,0x3F,0x39,0x38,0x38,0x38,0x38,0x79,0xFF,0xFF,0x38,0x38,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x00,0x00,0x00,0x00, // 4
|
||
+0x00,0x00,0x00,0xF8,0xF8,0xF8,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x3F,0x38,0x38,0x38,0x78,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xFF,0xFF,0x7E,0x00,0x00,0x00,0x0F,0x0E,0x0E,0x1E,0x1E,0x1E,0x1E,0x0E,0x0F,0x07,0x07,0x01,0x00,0x00, // 5
|
||
+0x00,0x00,0x00,0xC0,0xF0,0xF8,0x38,0x3C,0x1C,0x1C,0x1C,0x3C,0x38,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xEF,0xE0,0x70,0x38,0x38,0x38,0x78,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xFF,0xFF,0x3C,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0E,0x1C,0x1C,0x1C,0x0E,0x0F,0x07,0x01,0x00,0x00, // 6
|
||
+0x00,0x00,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0xF8,0xF8,0xF8,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xFF,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFC,0xFF,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7
|
||
+0x00,0x00,0x80,0xF0,0xF8,0x78,0x3C,0x1C,0x1C,0x1C,0x38,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,0x07,0x1F,0xBF,0xF8,0xE0,0xE0,0xE0,0xE0,0xF0,0xBF,0x1F,0x0F,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x03,0x01,0x00,0x00,0x01,0x01,0x87,0xFF,0xFE,0x78,0x00,0x00,0x00,0x01,0x07,0x0F,0x0F,0x0E,0x1C,0x1C,0x1E,0x0E,0x0F,0x07,0x03,0x00,0x00, // 8
|
||
+0x00,0x00,0xC0,0xF0,0xF8,0x38,0x1C,0x1C,0x1C,0x3C,0x78,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xF3,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x0F,0x0E,0x0E,0x07,0x83,0xF1,0xFF,0x7F,0x01,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x1E,0x1E,0x0E,0x0E,0x0F,0x07,0x01,0x00,0x00,0x00, // 9
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00, // :
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x7F,0x7F,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00, // ;
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0xC0,0xE0,0xE0,0xF0,0x70,0x38,0x38,0x1C,0x1C,0x0E,0x0E,0x07,0x07,0x03,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x0F,0x0E,0x1E,0x1C,0x3C,0x38,0x78,0x70,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // =
|
||
+0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x0F,0x0E,0x1E,0x1C,0x3C,0x38,0x78,0x70,0xF0,0xE0,0xE0,0x00,0x00,0xE0,0xF0,0x70,0x38,0x38,0x1C,0x1C,0x0E,0x0E,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // >
|
||
+0x00,0x00,0x00,0x70,0x78,0x38,0x1C,0x1C,0x1C,0x1C,0x3C,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0x78,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ?
|
||
+0x00,0x00,0x80,0xE0,0xF0,0x70,0x38,0x18,0x18,0x18,0x38,0x38,0xF0,0xE0,0x80,0x00,0xF0,0xFE,0x1F,0x03,0x00,0xC0,0xF0,0x78,0x1C,0x1C,0x1C,0x1C,0x38,0xFF,0xFF,0x00,0x3F,0xFF,0xE0,0x00,0x00,0x1F,0x7F,0xF8,0xE0,0xC0,0xC0,0xE0,0x70,0xFF,0xFF,0x00,0x00,0x01,0x07,0x1F,0x3C,0x78,0x70,0x60,0xE0,0xE1,0xE1,0xE0,0xE0,0xE0,0x40,0x00, // @
|
||
+0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x78,0xF8,0xF8,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFE,0xFF,0x0F,0x00,0x01,0x3F,0xFF,0xF8,0x80,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0x3F,0x3D,0x3C,0x3C,0x3C,0x3C,0x3F,0x7F,0xFF,0xF8,0x00,0x00,0x0C,0x0F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00, // A
|
||
+0x00,0x00,0xF8,0xF8,0xF8,0x38,0x38,0x38,0x38,0x38,0x78,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x70,0x70,0x70,0x70,0xF0,0xF8,0xFF,0x9F,0x07,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0xFF,0xFF,0x78,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0E,0x0E,0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x01,0x00,0x00, // B
|
||
+0x00,0x00,0x00,0xC0,0xF0,0xF8,0x38,0x3C,0x1C,0x1C,0x1C,0x3C,0x38,0x70,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x7F,0xFF,0xFC,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0E,0x1C,0x1C,0x1E,0x0E,0x0F,0x07,0x00,0x00, // C
|
||
+0x00,0xF8,0xF8,0xF8,0x38,0x38,0x38,0x38,0x38,0x78,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x07,0x0F,0x0F,0x0E,0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00, // D
|
||
+0x00,0x00,0xF8,0xF8,0xF8,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x60,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x00,0x00, // E
|
||
+0x00,0x00,0x00,0xF8,0xF8,0xF8,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x60,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // F
|
||
+0x00,0x00,0x80,0xE0,0xF0,0x78,0x38,0x1C,0x1C,0x1C,0x1C,0x38,0x78,0x70,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x03,0x03,0x73,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0E,0x0E,0x1C,0x1C,0x0E,0x0F,0x0F,0x07,0x00,0x00, // G
|
||
+0x00,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xF0,0x70,0x70,0x70,0x70,0x70,0x70,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x07,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00, // H
|
||
+0x00,0x00,0x38,0x38,0x38,0x38,0xF8,0xF8,0xF8,0x38,0x38,0x38,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x0E,0x0F,0x0F,0x0F,0x0E,0x0E,0x0E,0x0E,0x00,0x00,0x00, // I
|
||
+0x00,0x00,0x00,0x00,0x18,0x38,0x38,0x38,0x38,0xB8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0E,0x0E,0x1C,0x1C,0x1E,0x0E,0x0F,0x07,0x03,0x00,0x00,0x00,0x00, // J
|
||
+0x00,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0x78,0x38,0x08,0x00,0x00,0xFF,0xFF,0xFF,0xE0,0xF0,0xF8,0xFE,0xCF,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x03,0x0F,0x3F,0xFC,0xF0,0xC0,0x80,0x00,0x00,0x00,0x07,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x0F,0x0E,0x08, // K
|
||
+0x00,0x00,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x00, // L
|
||
+0xF8,0xF8,0xF8,0xF8,0xE0,0x00,0x00,0x00,0x00,0x80,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x1F,0xFE,0xE0,0xC0,0xFC,0x7F,0x03,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x01,0x07,0x07,0x03,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00, // M
|
||
+0xF8,0xF8,0xF8,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x0F,0x7F,0xFC,0xE0,0x80,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x01,0x0F,0x7F,0xFC,0xE0,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x0F,0x0F,0x0F,0x00,0x00, // N
|
||
+0x00,0x00,0xC0,0xF0,0xF8,0x78,0x3C,0x1C,0x1C,0x3C,0x78,0xF0,0xE0,0x80,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0xFF,0xFF,0xE0,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0E,0x1C,0x1C,0x0E,0x0F,0x07,0x03,0x00,0x00,0x00, // O
|
||
+0x00,0x00,0xF8,0xF8,0xF8,0x38,0x38,0x38,0x38,0x38,0x38,0xF8,0xF0,0xE0,0x80,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0xC0,0xE0,0xFF,0xFF,0x1F,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // P
|
||
+0x00,0x00,0xC0,0xF0,0xF8,0x38,0x1C,0x1C,0x1C,0x3C,0x78,0xF8,0xE0,0x80,0x00,0x00,0x00,0xFC,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xDF,0xFF,0xFF,0xE0,0x00,0x00,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x80,0xFE,0xFF,0x7F,0x01,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x0E,0x0E,0x0E,0x1F,0x7F,0xF3,0x61,0x00,0x00,0x00, // Q
|
||
+0x00,0x00,0xF8,0xF8,0xB8,0x38,0x38,0x38,0x38,0x38,0xF8,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xDF,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xFF,0x7F,0x1F,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFB,0x03,0x03,0x03,0x03,0x07,0x1F,0xFE,0xF8,0xE0,0x00,0x00,0x00,0x00,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x08, // R
|
||
+0x00,0x00,0xE0,0xF0,0xF8,0x38,0x1C,0x1C,0x1C,0x1C,0x3C,0x38,0x78,0x00,0x00,0x00,0x00,0x06,0x3F,0x7F,0xF8,0xF0,0xE0,0xE0,0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0xDF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x07,0x0F,0x0E,0x0E,0x1C,0x1C,0x1C,0x0E,0x0F,0x0F,0x07,0x01,0x00,0x00, // S
|
||
+0x18,0x38,0x38,0x38,0x38,0x38,0xB8,0xF8,0xF8,0x38,0x38,0x38,0x38,0x38,0x38,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // T
|
||
+0x00,0x00,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x0E,0x0E,0x1C,0x1C,0x0E,0x0E,0x0F,0x07,0x01,0x00,0x00, // U
|
||
+0x00,0x78,0xF8,0xF8,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xF8,0x78,0x00,0x00,0x00,0x07,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFE,0x80,0x80,0xFE,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x0F,0x0F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00, // V
|
||
+0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0x00,0xFF,0xFF,0xF0,0x00,0x00,0xFC,0x7E,0xFE,0xFC,0x00,0x00,0xF0,0xFF,0xFF,0x00,0x00,0x01,0xFF,0xFF,0xE0,0xFF,0x3F,0x00,0x00,0x3F,0xFF,0xE0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x03,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x03,0x00,0x00, // W
|
||
+0x00,0x08,0x38,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0x78,0x18,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0xBF,0xF8,0xF8,0xFE,0x1F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0x7E,0x1F,0x07,0x03,0x0F,0x7F,0xF8,0xE0,0x80,0x00,0x00,0x08,0x0E,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x0E,0x08, // X
|
||
+0x00,0x18,0xF8,0xF8,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x78,0x18,0x00,0x00,0x00,0x00,0x03,0x0F,0x3F,0xFC,0xE0,0xE0,0xFC,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFD,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Y
|
||
+0x00,0x00,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0xF8,0xF8,0xF8,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x00, // Z
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0C,0x0C,0x0C,0x00,0x00,0x00, // [
|
||
+0x00,0x10,0x70,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x3F,0xFC,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x7E,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x0F,0x0C,0x00,0x00, // <backslash>
|
||
+0x00,0x00,0x00,0x00,0x03,0x03,0x03,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x0C,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x00, // ]
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0x7C,0x3F,0x0F,0x0F,0x3F,0x7C,0xF8,0xE0,0x80,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E, // _
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFC,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // `
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1E,0x0E,0x0E,0x06,0x07,0x06,0x0E,0x1E,0xFC,0xF8,0xC0,0x00,0x00,0x00,0xE0,0xFC,0xFE,0x0E,0x07,0x07,0x07,0x07,0x07,0x87,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x1E,0x1C,0x1C,0x0E,0x0E,0x03,0x0F,0x0F,0x0F,0x00,0x00, // a
|
||
+0x00,0x00,0xFC,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x1C,0x0E,0x06,0x07,0x0E,0x1E,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x07,0x0E,0x1C,0x1C,0x1E,0x0F,0x0F,0x03,0x00,0x00,0x00, // b
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xF8,0x3C,0x1E,0x0E,0x06,0x07,0x06,0x0E,0x1E,0x1C,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0E,0x1C,0x1C,0x1C,0x0E,0x0E,0x07,0x00,0x00, // c
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0x00,0x00,0x00,0x00,0xF0,0xFC,0x7E,0x0E,0x0E,0x07,0x0E,0x0E,0x3C,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x1F,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x0E,0x1C,0x1C,0x0C,0x0E,0x07,0x0F,0x0F,0x0F,0x00,0x00, // d
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x7C,0x1E,0x0E,0x06,0x07,0x0E,0x0E,0x3C,0xF8,0xF0,0x80,0x00,0x00,0x1F,0xFF,0xFF,0xC7,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0E,0x1C,0x1C,0x1C,0x0E,0x0E,0x0E,0x07,0x00,0x00, // e
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0xFC,0x1C,0x1C,0x1C,0x1C,0x0C,0x00,0x00,0x00,0x00,0x06,0x0E,0x0E,0x0E,0xFF,0xFF,0xFF,0x0E,0x0E,0x0E,0x0E,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // f
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFC,0x3E,0x0E,0x06,0x07,0x06,0x0E,0x1C,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x07,0x7F,0xFF,0xE0,0xC0,0x80,0x80,0x80,0x80,0xE0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x60,0xE1,0xE3,0xC3,0xC3,0xE3,0xE1,0x70,0x7F,0x1F,0x07,0x00,0x00, // g
|
||
+0x00,0x00,0xFC,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x18,0x0E,0x0E,0x0E,0x0F,0x1E,0xFE,0xF8,0xC0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00, // h
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x0E,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0E,0x0E,0x0E,0x0E,0x0F,0x0F,0x0E,0x0E,0x0E,0x0E,0x0C,0x00, // i
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x3C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0xEE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xFB,0x7F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00, // j
|
||
+0x00,0x00,0x00,0xFC,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x3F,0x00,0xC0,0xE0,0xF0,0x3C,0x1E,0x0E,0x06,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xDF,0x07,0x07,0x1F,0x7E,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x0F,0x0C,0x00, // k
|
||
+0x00,0x00,0x00,0x0C,0x0E,0x0E,0x0E,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x0E,0x0E,0x0E,0x0E,0x04,0x00, // l
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0x7C,0x0E,0x06,0x1E,0xFE,0xFC,0x0E,0x06,0x0F,0xFE,0xFC,0xF0,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0x0F,0x07,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00, // m
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0x18,0x0E,0x0E,0x0E,0x0F,0x1E,0xFE,0xF8,0xC0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00, // n
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF8,0x7C,0x1E,0x0E,0x07,0x06,0x0E,0x1E,0xFC,0xF8,0xE0,0x00,0x00,0x00,0x0E,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xF7,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x03,0x0F,0x0F,0x0E,0x1C,0x1C,0x0E,0x0F,0x07,0x03,0x00,0x00,0x00, // o
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0x1C,0x0E,0x06,0x07,0x06,0x0E,0x7E,0xFC,0xF0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC0,0x80,0x00,0x00,0x80,0xC0,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x01,0x03,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00, // p
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFC,0x3E,0x0E,0x06,0x07,0x06,0x0E,0x1C,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x07,0x7F,0xFF,0xF0,0x80,0x80,0x00,0x80,0x80,0xE0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x01,0x01,0xFF,0xFF,0xFF,0x00,0x00, // q
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFE,0xFE,0x78,0x1C,0x0E,0x0E,0x0F,0x0E,0x0E,0x1E,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // r
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0x9E,0x0E,0x06,0x07,0x06,0x0E,0x0E,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x0F,0x0E,0x0E,0x1E,0x1E,0xFC,0xF8,0x40,0x00,0x00,0x00,0x00,0x00,0x0F,0x0E,0x0E,0x1C,0x1C,0x1C,0x0E,0x0F,0x07,0x03,0x00,0x00,0x00, // s
|
||
+0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0E,0x0E,0x0E,0xFF,0xFF,0xFF,0x0E,0x0E,0x0E,0x0E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x0F,0x0E,0x0E,0x0E,0x0E,0x00,0x00,0x00, // t
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x1E,0x1C,0x0C,0x0E,0x07,0x0F,0x0F,0x0F,0x00,0x00, // u
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x3E,0xFE,0xF0,0x80,0x00,0x00,0x00,0x00,0x80,0xF8,0xFE,0x3E,0x02,0x00,0x00,0x00,0x00,0x03,0x1F,0xFF,0xF8,0x80,0x80,0xF8,0xFF,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x0F,0x0F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00, // v
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0xFE,0xFC,0x80,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x80,0xFC,0xFE,0x1E,0x00,0x03,0xFF,0xFF,0xC0,0xC0,0xFF,0x0F,0x0F,0xFF,0xC0,0xC0,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x01,0x00,0x00,0x01,0x0F,0x0F,0x0F,0x00,0x00,0x00, // w
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x1E,0x7C,0xF8,0xE0,0x80,0x80,0xE0,0xF8,0x7C,0x1E,0x06,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0x7F,0x1F,0x1F,0x7F,0xF0,0xC0,0x80,0x00,0x00,0x00,0x00,0x08,0x0E,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x0E,0x08,0x00, // x
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x1E,0xFE,0xF8,0xC0,0x00,0x00,0x00,0x00,0x80,0xF0,0xFE,0x3E,0x06,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0xFE,0xF0,0xE0,0xFC,0x7F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0x78,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00, // y
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x0E,0x0E,0x0E,0x0E,0x8E,0xCE,0xFE,0x7E,0x3E,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xF8,0x3E,0x0F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x0F,0x0F,0x0F,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0E,0x0C,0x00,0x00, // z
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFE,0xFF,0x07,0x03,0x03,0x02,0x00,0x00,0x00,0x00,0x60,0xE0,0xE0,0xE0,0xF0,0xBF,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0E,0x0C,0x0C,0x0C,0x00,0x00, // {
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00, // |
|
||
+0x00,0x00,0x00,0x03,0x03,0x07,0xEF,0xFE,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x1F,0xBF,0xF8,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x0E,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // }
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x7C,0x1C,0x1E,0x1E,0x3C,0xF8,0xE0,0xC0,0x00,0x00,0x80,0xE0,0xF0,0x60,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~
|
||
+0x00,0x00,0x00,0xC0,0xF0,0x38,0x1C,0x0C,0x0C,0x0C,0x1C,0x38,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0E,0x1C,0x18,0x18,0x18,0x1C,0x0E,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // °
|
||
+};
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/Grotesk24x48_v.h b/drivers/leds/vfd/controllers/fonts/Grotesk24x48_v.h
|
||
new file mode 100644
|
||
index 000000000..7c510d38c
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/fonts/Grotesk24x48_v.h
|
||
@@ -0,0 +1,107 @@
|
||
+// Grotesk24x48_v.h
|
||
+// Font type : Full (96 characters)
|
||
+// Font size : 24x48 pixels
|
||
+// Memory usage : 13828 bytes
|
||
+
|
||
+// Origin: http://www.rinkydinkelectronics.com/r_fonts.php
|
||
+// Modified by Arthur Liberman for compatibility with the OpenVFD driver.
|
||
+
|
||
+const unsigned char Grotesk24x48_V[13828] = {
|
||
+0x18,0x30,0x20,0x60,
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <space>
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // !
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xF8,0xF8,0x38,0x00,0x00,0x00,0x00,0x80,0xF0,0xF8,0xF8,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFE,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0xF0,0xFE,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // "
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xFF,0xFF,0xFF,0xC3,0xC0,0xC0,0xC0,0xE0,0xFF,0xFF,0xFF,0xC3,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0xFB,0xFF,0xFF,0x1F,0x03,0x03,0x03,0x03,0xFB,0xFF,0xFF,0x0F,0x03,0x03,0x03,0x03,0x03,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xFF,0xFF,0xFF,0xFB,0xF8,0xF8,0xF8,0xF8,0xFF,0xFF,0xFF,0xF9,0xF8,0xF8,0xF8,0x70,0x00,0x00,0x00,0x00,0x00,0x80,0xFC,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x80,0xFC,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // #
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xC0,0xC0,0xFF,0xFF,0xC0,0xC0,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFF,0x3F,0x0F,0x07,0x03,0x03,0xFF,0xFF,0x03,0x03,0x03,0x07,0x07,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x3F,0x7F,0xFC,0xF8,0xF0,0xF0,0xFF,0xFF,0xE0,0xE0,0xE0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x01,0x03,0x03,0x07,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x3C,0x78,0x78,0xF8,0xF0,0xF0,0xF0,0xFF,0xFF,0xF0,0xF0,0x78,0x7C,0x3F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // $
|
||
+0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xFC,0xFF,0x9F,0x07,0x03,0x01,0x01,0x03,0x07,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x3E,0x3C,0x3C,0x3C,0x3C,0x9E,0x9F,0xCF,0xC3,0xE0,0xE0,0xF0,0x70,0x78,0x38,0x3C,0x1C,0x1E,0x0E,0x00,0x00,0x78,0x78,0x38,0x3C,0x1E,0x1E,0x0F,0x07,0x07,0x03,0xC3,0xF1,0xF9,0x78,0x3C,0x1C,0x1C,0x3C,0x3C,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xE0,0xC0,0x80,0x80,0xC0,0xC0,0xF0,0xFF,0x7F,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00, // %
|
||
+0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xFB,0x7F,0x3F,0xFF,0xFC,0xF0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0xF8,0xFF,0xFF,0xFF,0x07,0x01,0x00,0x00,0x00,0x01,0x07,0x1F,0x7F,0xFE,0xF8,0xE0,0x80,0x00,0x00,0xFF,0xFF,0xFF,0x07,0x00,0x07,0x1F,0x7F,0xFF,0xFE,0xF0,0xE0,0xC0,0xC0,0x80,0x80,0x80,0xC0,0xC1,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xC7,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x03,0x03,0x03,0x03,0x02, // &
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xF8,0xF8,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0xFE,0x7F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x7F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x7F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x3F,0x7F,0x78,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // (
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x7F,0xFE,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x7F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x7F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x78,0x7F,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // )
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x80,0x00,0x00,0x02,0x03,0x07,0x0F,0x0F,0x1E,0x3C,0x38,0x78,0xF0,0xFF,0xFF,0xFF,0xF0,0x78,0x3C,0x3E,0x1E,0x0F,0x07,0x07,0x03,0x00,0x00,0x20,0xE0,0xF0,0x78,0x7C,0x3C,0x1E,0x0F,0x07,0x07,0xFF,0xFF,0xFF,0x07,0x0F,0x1E,0x1E,0x3C,0x78,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // *
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xFF,0xFF,0xFF,0xF0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // +
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x3F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ,
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0xFE,0xFF,0x3F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFC,0xFF,0x7F,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFE,0xFF,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFF,0xFF,0x1F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // /
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xF0,0xF0,0xF8,0xF8,0xF0,0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFF,0xFF,0x7F,0x07,0x01,0x00,0x00,0x00,0x00,0x81,0xF3,0xFF,0xFF,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFE,0x1F,0x07,0x01,0x05,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xE0,0xF8,0xFE,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x7F,0xFF,0xFF,0xF3,0xE0,0xC0,0xC0,0x80,0xC0,0xC0,0xF0,0xFC,0xFF,0x7F,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, // 0
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xE0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x1F,0x1F,0x0F,0x07,0x07,0x03,0x03,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00, // 1
|
||
+0x00,0x00,0x00,0xC0,0xE0,0xE0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xF0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xFC,0xFF,0x7F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF8,0xFC,0x7E,0x3F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF8,0xFC,0xFF,0xFF,0xCF,0xC7,0xC1,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x00, // 2
|
||
+0x00,0x00,0x00,0x00,0xE0,0xF0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x07,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xFC,0xFE,0x9F,0x8F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x1F,0xFF,0xFF,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0xF0,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xF0,0xFC,0xFF,0x7F,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, // 3
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF0,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFE,0x1F,0x07,0xF7,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFE,0x3F,0x0F,0x03,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFC,0xFF,0xFF,0xE7,0xE1,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00, // 4
|
||
+0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x3F,0x3F,0x3E,0x1E,0x1E,0x1E,0x3E,0x3E,0x3E,0x7E,0xFC,0xF8,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0xF0,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xF0,0xFC,0xFF,0x7F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, // 5
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFE,0xFF,0x3F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xE7,0xF0,0xF8,0x3C,0x3E,0x1E,0x1E,0x1E,0x1E,0x3E,0x7C,0xFC,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x01,0x1F,0x7F,0xFF,0xFE,0xF0,0xE0,0xC0,0x80,0x80,0x80,0xC0,0xC0,0xF0,0xFC,0xFF,0x7F,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00, // 6
|
||
+0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xC1,0xFD,0xFF,0xFF,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFE,0xFF,0xFF,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFC,0xFF,0xFF,0x7F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFE,0xFF,0xFF,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7
|
||
+0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xE0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xFF,0xFF,0xFF,0xFF,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x9F,0x9F,0xFC,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xFE,0x9F,0x8F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFF,0xFF,0x0F,0x03,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x03,0x1F,0xFF,0xFF,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xF8,0xE0,0xC0,0xC0,0x80,0x80,0x80,0xC0,0xC0,0xE0,0xFC,0xFF,0xFF,0x3F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00, // 8
|
||
+0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x0F,0x1F,0x1E,0x1E,0x1E,0x1E,0x1E,0x1F,0x0F,0x07,0xC3,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xF0,0xFC,0xFF,0x3F,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // :
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x7F,0x7F,0x7F,0x3F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ;
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xE0,0xF0,0xF0,0xF8,0xF8,0x7C,0x00,0x00,0x00,0xE0,0xF0,0xF0,0xF8,0xF8,0x3C,0x3C,0x3E,0x1E,0x1F,0x0F,0x0F,0x07,0x07,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x07,0x07,0x0F,0x0F,0x1F,0x1E,0x3E,0x3C,0x7C,0x78,0xF8,0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x07,0x07,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // =
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0xF8,0xF8,0xF0,0xE0,0xE0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x07,0x07,0x0F,0x0F,0x1F,0x1E,0x3E,0x3C,0x7C,0xF8,0xF8,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xE0,0xF0,0xF0,0xF8,0xF8,0x78,0x7C,0x3C,0x3E,0x1E,0x1F,0x0F,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x0F,0x07,0x07,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // >
|
||
+0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x87,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF8,0xFC,0x7E,0x3F,0x1F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ?
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xE0,0xE0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFE,0x3F,0x0F,0x07,0x03,0x01,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x81,0x07,0x1F,0xFF,0xFC,0xF0,0x00,0xF0,0xFF,0xFF,0x7F,0x01,0x00,0x00,0x00,0xF0,0xFC,0xFE,0x3F,0x0F,0x07,0x07,0x07,0x07,0x07,0x1F,0x7E,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xFF,0xFF,0xFF,0x00,0x00,0x0F,0x7F,0xFF,0xF8,0xE0,0x80,0x00,0x00,0x01,0x07,0x0F,0x0F,0x1F,0x1E,0x1E,0x1E,0x0F,0x0F,0x03,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x3E,0x3C,0x78,0x78,0x78,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00, // @
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x7F,0x03,0x0F,0xFF,0xFF,0xFE,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x03,0x3F,0xFF,0xFF,0xFC,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF3,0xFF,0xFF,0xFF,0xFC,0x80,0x00,0x00,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFC,0x80,0x00,0x02,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00, // A
|
||
+0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x07,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x78,0x78,0x78,0x78,0x78,0x78,0x7C,0xFC,0xFE,0xFF,0xEF,0xCF,0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xF0,0xFC,0xFF,0x7F,0x3F,0x0F,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, // B
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFC,0xFF,0xFF,0x3F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x3F,0x7F,0xFF,0xF8,0xF0,0xE0,0xC0,0xC0,0x80,0x80,0xC0,0xC0,0xC0,0xE0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x03,0x01,0x00,0x00,0x00, // C
|
||
+0x00,0x00,0xE0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xE0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x07,0x0F,0x7F,0xFF,0xFE,0xF8,0xC0,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xF0,0xF0,0xFC,0xFF,0x7F,0x1F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // D
|
||
+0x00,0x00,0x00,0xE0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00, // E
|
||
+0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // F
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xE0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFC,0xFF,0xFF,0x1F,0x07,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x7F,0xFF,0xFC,0xF0,0xE0,0xC0,0xC0,0xC0,0x80,0x80,0xC0,0xC0,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00, // G
|
||
+0x00,0x00,0xE0,0xF0,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00, // H
|
||
+0x00,0x00,0x00,0xE0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00, // I
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF0,0xE0,0xE0,0xC0,0xC0,0x80,0x80,0x80,0xC0,0xC0,0xF0,0xFF,0xFF,0xFF,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // J
|
||
+0x00,0x00,0xE0,0xF0,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF0,0xF0,0x70,0x30,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF8,0xFC,0x7F,0x3F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF7,0xF0,0xFC,0xFE,0xFF,0xFF,0xE7,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x01,0x07,0x1F,0x7F,0xFF,0xFC,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x1F,0x7F,0xFF,0xFC,0xF0,0xC0,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x02, // K
|
||
+0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00, // L
|
||
+0xE0,0xF0,0xF0,0xF0,0xF0,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x07,0x3F,0xFF,0xFC,0xC0,0x00,0x00,0x00,0x00,0xE0,0xFC,0xFF,0x1F,0x07,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x03,0x3F,0xFF,0xFC,0xC0,0xC0,0xFE,0xFF,0x1F,0x03,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x0F,0x1F,0x1F,0x0F,0x01,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00, // M
|
||
+0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x3F,0xFF,0xFE,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x01,0x0F,0x3F,0xFF,0xFE,0xF0,0xC0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x01,0x0F,0x7F,0xFF,0xFE,0xF0,0x80,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0x7F,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00, // N
|
||
+0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xE0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xFF,0xFF,0xFF,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x1F,0xFF,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x0F,0x3F,0xFF,0xFF,0xF8,0xE0,0xC0,0xC0,0x80,0x80,0xC0,0xC0,0xF0,0xFE,0xFF,0x7F,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, // O
|
||
+0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x0F,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xE0,0xF8,0xFF,0xFF,0x7F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // P
|
||
+0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFC,0xFF,0xFF,0xFF,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x1F,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x7F,0xFF,0xFC,0xF0,0xE0,0xE0,0xC0,0xC0,0xE0,0xE0,0xF8,0xFE,0xFF,0x3F,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x03,0x03,0x07,0x0F,0x3F,0x7F,0xFC,0x78,0x30,0x00,0x00,0x00,0x00, // Q
|
||
+0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xE0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x07,0xFF,0xFF,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0xF0,0xFF,0x7F,0x3F,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x07,0x07,0x1F,0x7F,0xFE,0xFC,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x7F,0xFF,0xFE,0xF8,0xC0,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x02, // R
|
||
+0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFE,0xFF,0xFF,0x9F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x3F,0x7F,0x7F,0xFC,0xF8,0xF8,0xF0,0xF0,0xF0,0xE0,0xE0,0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x03,0x07,0x0F,0xFF,0xFF,0xFE,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF0,0xE0,0xE0,0xC0,0xC0,0xC0,0x80,0x80,0xC0,0xC0,0xC0,0xE0,0xF0,0xFF,0xFF,0x7F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, // S
|
||
+0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // T
|
||
+0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x7F,0xFF,0xFF,0xF0,0xE0,0xC0,0xC0,0x80,0x80,0xC0,0xC0,0xE0,0xF0,0xFF,0xFF,0x7F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, // U
|
||
+0x00,0x30,0xF0,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF0,0xF0,0x70,0x00,0x00,0x00,0x03,0x7F,0xFF,0xFF,0xFC,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0xC0,0xFE,0xFF,0xFF,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x1F,0xFF,0xFF,0xF8,0xF0,0xFF,0xFF,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // V
|
||
+0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x01,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0x03,0x00,0x03,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x80,0xFE,0xFF,0x7F,0x3F,0xFF,0xFF,0xC0,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0x1F,0x00,0x00,0x1F,0xFF,0xFF,0xE0,0x00,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xFE,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00, // W
|
||
+0x00,0x00,0x30,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF0,0xF0,0x30,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x3F,0xFF,0xFC,0xF0,0xC0,0x00,0x00,0x00,0xC0,0xF8,0xFE,0xFF,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x9F,0xFF,0xFF,0xFC,0xFF,0xFF,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFE,0xFF,0x3F,0x0F,0x03,0x1F,0x7F,0xFF,0xFC,0xF0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFF,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x3F,0xFF,0xFE,0xF8,0xE0,0x80,0x00,0x00,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x02, // X
|
||
+0x00,0x30,0xF0,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF0,0xF0,0x30,0x00,0x00,0x00,0x01,0x07,0x1F,0x7F,0xFF,0xFC,0xF0,0x80,0x00,0x00,0x00,0x00,0x80,0xF0,0xFC,0xFF,0x7F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x3F,0xFF,0xFE,0xF0,0xF0,0xFE,0xFF,0x3F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Y
|
||
+0x00,0x00,0x00,0xE0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x81,0xE1,0xF9,0xFF,0xFF,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFE,0xFF,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFE,0x7F,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0xFE,0xFF,0xFF,0xC7,0xC1,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00, // Z
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00, // [
|
||
+0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x3F,0xFF,0xFE,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x1F,0xFF,0xFF,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x7F,0xFF,0xFC,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x3F,0xFF,0xFE,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00, // <backslash>
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ]
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF0,0xF0,0xF0,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFC,0xFF,0x3F,0x1F,0x07,0x03,0x03,0x07,0x1F,0x3F,0x7F,0xFC,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x04,0x07,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, // _
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xF8,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // `
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x03,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x07,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xF8,0xFC,0x7E,0x1E,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x8F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xF0,0xC0,0xC0,0x80,0x80,0x80,0xC0,0xC0,0xE0,0xF8,0x7F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00, // a
|
||
+0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x80,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x7F,0x0F,0x03,0x03,0x01,0x01,0x01,0x03,0x07,0x0F,0xFF,0xFF,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xFF,0xFF,0xFF,0x7E,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFE,0xF0,0xC0,0xC0,0x80,0x80,0x80,0xC0,0xE0,0xF8,0xFF,0xFF,0x3F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, // b
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFC,0xFE,0xFF,0x1F,0x07,0x03,0x03,0x01,0x01,0x01,0x01,0x01,0x03,0x07,0x07,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x81,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x3F,0x7F,0xFF,0xF8,0xE0,0xC0,0xC0,0x80,0x80,0x80,0x80,0xC0,0xC0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00, // c
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xFE,0xFF,0x7F,0x0F,0x03,0x01,0x01,0x01,0x01,0x03,0x07,0x0F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xF0,0xE0,0xC0,0x80,0x80,0x80,0xC0,0xE0,0xF8,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00, // d
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFC,0xFF,0xFF,0x1F,0x07,0x03,0x01,0x01,0x01,0x01,0x01,0x03,0x07,0x1F,0xFF,0xFE,0xF8,0xC0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x8F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x0F,0x3F,0x7F,0xFF,0xF8,0xE0,0xC0,0xC0,0x80,0x80,0x80,0x80,0xC0,0xC0,0xC0,0xE0,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x01,0x00,0x00,0x00, // e
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xF8,0xF8,0x78,0x78,0x78,0x78,0x78,0x78,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFE,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // f
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFE,0xFF,0x3F,0x07,0x03,0x01,0x01,0x01,0x01,0x01,0x03,0x07,0x7F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x3E,0x3C,0x78,0x78,0x78,0x78,0x38,0x3C,0x1F,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x78,0xF0,0xF0,0xF0,0xE0,0xE0,0xF0,0xF0,0xF0,0x78,0x7F,0x3F,0x1F,0x07,0x00,0x00,0x00,0x00, // g
|
||
+0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x7E,0x0F,0x03,0x03,0x01,0x01,0x01,0x03,0x07,0x3F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00, // h
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC1,0xC1,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x03,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x00, // i
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC1,0xC1,0xC1,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0x7F,0x7F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // j
|
||
+0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xC0,0xE0,0xF0,0xF8,0x7E,0x3F,0x1F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x3E,0x1F,0x0F,0x1F,0x7F,0xFF,0xFC,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x3F,0xFF,0xFE,0xF8,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x00, // k
|
||
+0x00,0x00,0x00,0x00,0x38,0x3C,0x3C,0x3C,0x3C,0x3C,0xFC,0xFC,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0xFF,0xFF,0xF0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00, // l
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x80,0xC0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x0F,0x03,0x01,0x01,0x03,0xFF,0xFF,0xFF,0xFF,0x03,0x01,0x01,0x01,0x1F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00, // m
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x7E,0x0F,0x03,0x03,0x01,0x01,0x01,0x03,0x07,0x3F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x00,0x00, // n
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFE,0xFF,0xFF,0x0F,0x07,0x03,0x01,0x01,0x01,0x01,0x03,0x07,0x1F,0xFF,0xFF,0xFC,0xE0,0x00,0x00,0x00,0x00,0x00,0x7E,0xFF,0xFF,0xFF,0xC1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x3F,0xFF,0xFF,0xF8,0xE0,0xC0,0x80,0x80,0x80,0xC0,0xC0,0xE0,0xF8,0xFF,0xFF,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, // o
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x7F,0x07,0x03,0x01,0x01,0x01,0x01,0x01,0x03,0x07,0xFF,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x1E,0x3C,0x78,0x78,0x70,0x78,0x78,0x7C,0x3E,0x3F,0x1F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // p
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFE,0xFF,0xFF,0x07,0x03,0x01,0x01,0x01,0x01,0x01,0x03,0x07,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x1F,0x3F,0x3E,0x7C,0x78,0x78,0x70,0x78,0x78,0x3C,0x1E,0x0F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00, // q
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x80,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFE,0x3E,0x0F,0x07,0x03,0x03,0x01,0x01,0x01,0x03,0x03,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // r
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0x87,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x03,0x03,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x0F,0x1F,0x1F,0x1E,0x3E,0x3E,0x3C,0x7C,0xFC,0xF8,0xF8,0xF0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xE0,0xE0,0xC0,0xC0,0x80,0x80,0x80,0x80,0xC0,0xC0,0xE0,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, // s
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x7F,0xFF,0xFF,0xF0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00, // t
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFE,0xE0,0xC0,0xC0,0x80,0x80,0xC0,0xE0,0xF0,0x7E,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x07,0x07,0x07,0x03,0x03,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00, // u
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x7F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x7F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x80,0xF0,0xFF,0xFF,0x7F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0xFF,0xFF,0xF0,0xF0,0xFF,0xFF,0x3F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // v
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x01,0x7F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0x7F,0x01,0x00,0x00,0x0F,0xFF,0xFF,0xFE,0xC0,0x00,0x80,0xFC,0xFF,0x1F,0x0F,0xFF,0xFC,0xC0,0x00,0x80,0xFE,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0x00,0x03,0x7F,0xFF,0xFF,0xF8,0xFF,0x7F,0x03,0x00,0x00,0x03,0x3F,0xFF,0xF8,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00, // w
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x1F,0x7F,0xFC,0xF8,0xE0,0x80,0x80,0xE0,0xF8,0xFC,0x7F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC1,0xF3,0xFF,0xFF,0x7F,0xFF,0xF7,0xC1,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xFE,0x7F,0x1F,0x07,0x03,0x00,0x00,0x01,0x07,0x1F,0x7F,0xFE,0xF8,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x03,0x00,0x00, // x
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x40,0x00,0x00,0x00,0x00,0x03,0x1F,0xFF,0xFF,0xFC,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xFE,0xFF,0x7F,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x3F,0xFF,0xFF,0xF8,0xC0,0x00,0xE0,0xFC,0xFF,0xFF,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0xFF,0xFF,0xFF,0xFF,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xF0,0xF0,0xF0,0xF0,0xF8,0x7E,0x7F,0x1F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // y
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xC1,0xF1,0xF9,0xFF,0x7F,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF8,0xFE,0x7F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0xFC,0xFF,0xDF,0xCF,0xC3,0xC1,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00, // z
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0xFE,0xFE,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x70,0xF0,0xF8,0xF8,0xDF,0x9F,0x8F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0F,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xC0,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00, // {
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // |
|
||
+0x00,0x00,0x00,0x00,0x07,0x0F,0x0F,0x0F,0x0F,0x1E,0xFE,0xFE,0xFC,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x9F,0xDF,0xDC,0xF8,0xF0,0xF0,0x70,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0xC0,0xE0,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // }
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xF8,0xFE,0xFF,0x1F,0x07,0x07,0x07,0x07,0x1F,0x3F,0xFE,0xF8,0xF0,0xC0,0x80,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xF8,0x10,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x1F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~
|
||
+0x00,0x00,0x00,0x00,0xC0,0xC0,0xE0,0xF8,0xF8,0x38,0x38,0x38,0x38,0xF8,0xF8,0xE0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xC1,0x80,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0xC1,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x0F,0x0F,0x0E,0x0E,0x0E,0x0E,0x0F,0x0F,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // °
|
||
+};
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/Grotesk32x64_h.h b/drivers/leds/vfd/controllers/fonts/Grotesk32x64_h.h
|
||
new file mode 100644
|
||
index 000000000..2831a2ac6
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/fonts/Grotesk32x64_h.h
|
||
@@ -0,0 +1,112 @@
|
||
+// Grotesk32x64_h.h
|
||
+// Font type : Full (96 characters)
|
||
+// Font size : 32x64 pixels
|
||
+// Memory usage : 24580 bytes
|
||
+
|
||
+// Origin: http://www.rinkydinkelectronics.com/r_fonts.php
|
||
+// Modified by Arthur Liberman for compatibility with the OpenVFD driver.
|
||
+
|
||
+const unsigned char Grotesk32x64_H[24580] = {
|
||
+0x20,0x40,0x20,0x60,
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <space>
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // !
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x01,0xE0,0x00,0x3E,0x03,0xE0,0x00,0x3E,0x03,0xE0,0x00,0x7C,0x07,0xC0,0x00,0x7C,0x07,0xC0,0x00,0x7C,0x07,0xC0,0x00,0xFC,0x0F,0xC0,0x00,0xFC,0x0F,0xC0,0x00,0xF8,0x0F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x03,0xF8,0x3F,0x80,0x03,0xF8,0x3F,0x80,0x03,0xF0,0x3F,0x00,0x03,0xF0,0x3F,0x00,0x03,0xF0,0x3F,0x00,0x03,0xF0,0x3F,0x00,0x03,0xF0,0x3F,0x00,0x03,0xF0,0x3F,0x00,0x03,0xF0,0x3F,0x00,0x03,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // "
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0xF0,0x00,0x07,0xC0,0xF0,0x00,0x07,0x80,0xF0,0x00,0x07,0x81,0xF0,0x00,0x07,0x81,0xF0,0x00,0x07,0x81,0xF0,0x00,0x0F,0x81,0xE0,0x00,0x0F,0x81,0xE0,0x00,0x0F,0x01,0xE0,0x00,0x0F,0x03,0xE0,0x00,0x0F,0x03,0xE0,0x00,0x1F,0x03,0xC0,0x0F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0x00,0x3C,0x07,0x80,0x00,0x3C,0x0F,0x80,0x00,0x3C,0x0F,0x80,0x00,0x7C,0x0F,0x00,0x00,0x7C,0x0F,0x00,0x00,0x78,0x0F,0x00,0x00,0x78,0x1F,0x00,0x00,0x78,0x1F,0x00,0x00,0xF8,0x1E,0x00,0x00,0xF8,0x1E,0x00,0x00,0xF8,0x1E,0x00,0x00,0xF0,0x1E,0x00,0x01,0xF0,0x3E,0x00,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xF8,0x01,0xE0,0x7C,0x00,0x03,0xE0,0x78,0x00,0x03,0xE0,0x78,0x00,0x03,0xC0,0xF8,0x00,0x03,0xC0,0xF8,0x00,0x03,0xC0,0xF8,0x00,0x07,0xC0,0xF0,0x00,0x07,0xC0,0xF0,0x00,0x07,0x80,0xF0,0x00,0x07,0x81,0xF0,0x00,0x07,0x81,0xF0,0x00,0x0F,0x81,0xE0,0x00,0x0F,0x81,0xE0,0x00,0x0F,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // #
|
||
+0x00,0x00,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x07,0xF8,0x00,0x00,0x1F,0xFF,0x80,0x00,0x7F,0xFF,0xE0,0x00,0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xE0,0x01,0xFD,0xC7,0xE0,0x03,0xF1,0xC0,0xE0,0x03,0xE1,0xC0,0x20,0x07,0xC1,0xC0,0x00,0x07,0xC1,0xC0,0x00,0x07,0xC1,0xC0,0x00,0x07,0xC1,0xC0,0x00,0x07,0xC1,0xC0,0x00,0x07,0xC1,0xC0,0x00,0x07,0xC1,0xC0,0x00,0x07,0xE1,0xC0,0x00,0x07,0xE1,0xC0,0x00,0x03,0xF1,0xC0,0x00,0x03,0xFD,0xC0,0x00,0x01,0xFF,0xE0,0x00,0x01,0xFF,0xFC,0x00,0x00,0xFF,0xFF,0x00,0x00,0x3F,0xFF,0x80,0x00,0x1F,0xFF,0xC0,0x00,0x03,0xFF,0xE0,0x00,0x01,0xFF,0xF0,0x00,0x01,0xC7,0xF0,0x00,0x01,0xC3,0xF8,0x00,0x01,0xC1,0xF8,0x00,0x01,0xC0,0xF8,0x00,0x01,0xC0,0xF8,0x00,0x01,0xC0,0xF8,0x00,0x01,0xC0,0xF8,0x00,0x01,0xC0,0xF8,0x00,0x01,0xC0,0xF8,0x00,0x01,0xC0,0xF8,0x04,0x01,0xC0,0xF8,0x06,0x01,0xC1,0xF0,0x07,0x81,0xC3,0xF0,0x07,0xF1,0xCF,0xF0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0x80,0x00,0xFF,0xFF,0x00,0x00,0x1F,0xF8,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00, // $
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0x00,0x00,0x0F,0xFC,0x00,0x00,0x1F,0xFE,0x00,0x00,0x1F,0xFF,0x00,0x00,0x3F,0x3F,0x00,0x00,0x3C,0x0F,0x80,0x00,0x78,0x07,0x80,0x00,0x78,0x07,0x80,0x00,0x78,0x03,0x80,0x00,0x70,0x03,0xC0,0x00,0x70,0x03,0xC0,0x00,0x70,0x03,0xC0,0x00,0x78,0x03,0xC0,0x00,0x78,0x07,0x80,0x00,0x78,0x07,0x80,0x04,0x3C,0x0F,0x80,0x1E,0x3F,0x3F,0x00,0x7E,0x1F,0xFF,0x01,0xFE,0x1F,0xFE,0x07,0xFE,0x0F,0xFC,0x0F,0xF8,0x03,0xF8,0x3F,0xE0,0x00,0x00,0xFF,0x80,0x00,0x03,0xFE,0x00,0x00,0x0F,0xF8,0x00,0x00,0x3F,0xE0,0x00,0x00,0xFF,0x80,0x00,0x03,0xFE,0x07,0x00,0x0F,0xF8,0x1F,0xE0,0x3F,0xE0,0x3F,0xF0,0x7F,0xC0,0x7F,0xF8,0x7F,0x00,0xFF,0xF8,0x3C,0x00,0xF8,0xFC,0x30,0x01,0xF0,0x3C,0x00,0x01,0xE0,0x1E,0x00,0x01,0xE0,0x1E,0x00,0x03,0xC0,0x1E,0x00,0x03,0xC0,0x0E,0x00,0x03,0xC0,0x0E,0x00,0x03,0xC0,0x0E,0x00,0x01,0xC0,0x1E,0x00,0x01,0xE0,0x1E,0x00,0x01,0xE0,0x3E,0x00,0x01,0xF0,0x7C,0x00,0x00,0xFF,0xFC,0x00,0x00,0xFF,0xF8,0x00,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // %
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x1F,0xFC,0x00,0x00,0x3F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFE,0x00,0x01,0xFC,0x0E,0x00,0x01,0xF8,0x06,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xFE,0x00,0x00,0x01,0xFE,0x00,0x00,0x03,0xFF,0x00,0x00,0x03,0xFF,0x00,0x00,0x07,0xEF,0x80,0x00,0x0F,0xCF,0xC0,0x1E,0x0F,0x87,0xC0,0x1E,0x1F,0x87,0xE0,0x1E,0x1F,0x03,0xE0,0x1E,0x3F,0x03,0xF0,0x1E,0x3E,0x01,0xF0,0x1E,0x3E,0x01,0xF8,0x1E,0x3E,0x00,0xF8,0x1E,0x7E,0x00,0x7C,0x1E,0x7E,0x00,0x7E,0x1E,0x7E,0x00,0x3E,0x3E,0x7E,0x00,0x3F,0x3C,0x7E,0x00,0x1F,0x3C,0x7E,0x00,0x1F,0xFC,0x3E,0x00,0x0F,0xF8,0x3F,0x00,0x0F,0xF8,0x3F,0x00,0x07,0xF0,0x3F,0x80,0x07,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0xC0,0x07,0xF0,0x0F,0xE0,0x1F,0xF8,0x0F,0xFC,0x7F,0xF8,0x07,0xFF,0xFF,0xFC,0x03,0xFF,0xFE,0x7C,0x01,0xFF,0xFC,0x7E,0x00,0xFF,0xF8,0x3F,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // &
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '
|
||
+0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // (
|
||
+0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // )
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x18,0x03,0xC0,0x0C,0x1C,0x03,0xC0,0x1C,0x3E,0x03,0xC0,0x7C,0x3F,0x83,0xC0,0xFE,0x3F,0xC3,0xC1,0xFE,0x0F,0xE3,0xC3,0xF8,0x07,0xF3,0xCF,0xF0,0x01,0xFB,0xDF,0xC0,0x00,0xFF,0xFF,0x80,0x00,0x7F,0xFE,0x00,0x00,0x1F,0xFC,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x1F,0xFC,0x00,0x00,0x3F,0xFE,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0xC0,0x03,0xFB,0xCF,0xE0,0x0F,0xE3,0xC7,0xF8,0x1F,0xC3,0xC1,0xFC,0x3F,0x83,0xC0,0xFE,0x3F,0x03,0xC0,0x7E,0x1C,0x03,0xC0,0x3C,0x18,0x03,0xC0,0x0C,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // *
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x03,0xE0,0x00,0x1F,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFE,0x0F,0xFF,0xFF,0xFC,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // +
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x3F,0x80,0x00,0x00,0x3F,0x80,0x00,0x00,0x3F,0x80,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7C,0x00,0x00, // ,
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFE,0x1F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // .
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // /
|
||
+
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x3F,0xFC,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFF,0x00,0x00,0xFF,0xFF,0x80,0x01,0xFE,0x7F,0x80,0x01,0xF8,0x1F,0xC0,0x03,0xF0,0x0F,0xC0,0x03,0xF0,0x07,0xE0,0x03,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xF0,0x07,0xC0,0x0F,0xF0,0x07,0xC0,0x0F,0xF0,0x0F,0xC0,0x1F,0xF0,0x0F,0xC0,0x1F,0xF0,0x0F,0xC0,0x3F,0xF0,0x0F,0xC0,0x3D,0xF0,0x0F,0x80,0x7D,0xF8,0x0F,0x80,0x79,0xF8,0x0F,0x80,0xF9,0xF8,0x0F,0x80,0xF1,0xF8,0x0F,0x81,0xF1,0xF8,0x0F,0x81,0xE1,0xF8,0x0F,0x83,0xE1,0xF8,0x0F,0x83,0xC1,0xF8,0x0F,0x87,0xC1,0xF8,0x0F,0x87,0x81,0xF8,0x0F,0x8F,0x81,0xF8,0x0F,0x8F,0x01,0xF8,0x0F,0x8F,0x01,0xF8,0x0F,0x9E,0x01,0xF8,0x0F,0x9E,0x01,0xF8,0x0F,0xBC,0x01,0xF8,0x0F,0xFC,0x01,0xF0,0x0F,0xF8,0x01,0xF0,0x0F,0xF8,0x01,0xF0,0x0F,0xF0,0x01,0xF0,0x07,0xF0,0x03,0xF0,0x07,0xE0,0x03,0xF0,0x07,0xE0,0x03,0xE0,0x07,0xE0,0x03,0xE0,0x03,0xE0,0x07,0xE0,0x03,0xF0,0x07,0xC0,0x03,0xF8,0x0F,0xC0,0x01,0xFC,0x1F,0xC0,0x01,0xFF,0xFF,0x80,0x00,0xFF,0xFF,0x00,0x00,0x7F,0xFF,0x00,0x00,0x3F,0xFE,0x00,0x00,0x1F,0xFC,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF8,0x00,0x00,0x0F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x7F,0xF8,0x00,0x00,0xFF,0xF8,0x00,0x03,0xFF,0xF8,0x00,0x03,0xFF,0xF8,0x00,0x03,0xFC,0xF8,0x00,0x03,0xF1,0xF8,0x00,0x03,0xC1,0xF8,0x00,0x03,0x81,0xF8,0x00,0x02,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x01,0xFF,0xFF,0xF8,0x01,0xFF,0xFF,0xF8,0x01,0xFF,0xFF,0xF8,0x01,0xFF,0xFF,0xF8,0x01,0xFF,0xFF,0xF8,0x01,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 1
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,0x7F,0xFC,0x00,0x01,0xFF,0xFF,0x00,0x07,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0xE0,0x0F,0xFE,0x3F,0xE0,0x0F,0xE0,0x07,0xF0,0x0F,0x80,0x03,0xF0,0x0E,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x1F,0x80,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x3F,0x80,0x00,0x00,0x3F,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xFC,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 2
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0xFF,0xF8,0x00,0x07,0xFF,0xFE,0x00,0x07,0xFF,0xFF,0x00,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0xC0,0x07,0xF8,0x7F,0xC0,0x07,0x80,0x0F,0xE0,0x04,0x00,0x07,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x3F,0xC0,0x00,0x1F,0xFF,0x80,0x00,0x3F,0xFF,0x00,0x00,0x3F,0xFC,0x00,0x00,0x3F,0xFC,0x00,0x00,0x3F,0xFF,0x00,0x00,0x1F,0xFF,0x80,0x00,0x00,0x3F,0xC0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xF0,0x08,0x00,0x07,0xF0,0x0E,0x00,0x0F,0xF0,0x0F,0xC0,0x3F,0xE0,0x0F,0xFF,0xFF,0xE0,0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0x00,0x03,0xFF,0xFC,0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 3
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x80,0x00,0x00,0x7F,0x80,0x00,0x00,0x7F,0x80,0x00,0x00,0xFF,0x80,0x00,0x00,0xFF,0x80,0x00,0x01,0xFF,0x80,0x00,0x01,0xFF,0x80,0x00,0x01,0xDF,0x80,0x00,0x03,0xDF,0x80,0x00,0x03,0xDF,0x80,0x00,0x07,0x9F,0x80,0x00,0x07,0x9F,0x80,0x00,0x0F,0x1F,0x80,0x00,0x0F,0x1F,0x80,0x00,0x1E,0x1F,0x80,0x00,0x1E,0x1F,0x80,0x00,0x3C,0x1F,0x80,0x00,0x3C,0x1F,0x80,0x00,0x7C,0x1F,0x80,0x00,0x78,0x1F,0x80,0x00,0xF8,0x1F,0x80,0x00,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xE0,0x1F,0x80,0x03,0xE0,0x1F,0x80,0x03,0xC0,0x1F,0x80,0x07,0xC0,0x1F,0x80,0x07,0xC0,0x1F,0x80,0x0F,0x80,0x1F,0x80,0x0F,0x80,0x1F,0x80,0x1F,0x00,0x1F,0x80,0x1F,0x00,0x1F,0x80,0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 4
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE3,0xC0,0x00,0x03,0xFF,0xF8,0x00,0x03,0xFF,0xFE,0x00,0x03,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0xC0,0x03,0xF0,0xFF,0xE0,0x03,0x00,0x1F,0xE0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xF0,0x08,0x00,0x07,0xF0,0x0E,0x00,0x0F,0xE0,0x0F,0xC0,0x3F,0xE0,0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0x80,0x0F,0xFF,0xFE,0x00,0x07,0xFF,0xFC,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 5
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x07,0xFF,0x00,0x00,0x0F,0xFF,0xC0,0x00,0x3F,0xFF,0xC0,0x00,0x7F,0xFF,0xC0,0x00,0x7F,0xFF,0xC0,0x00,0xFF,0x8F,0xC0,0x01,0xFE,0x00,0xC0,0x01,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0xE0,0x00,0x0F,0x87,0xFC,0x00,0x0F,0x8F,0xFF,0x00,0x0F,0x9F,0xFF,0x80,0x0F,0x3F,0xFF,0xC0,0x0F,0x7F,0xFF,0xC0,0x0F,0xFC,0x1F,0xE0,0x0F,0xF8,0x07,0xE0,0x0F,0xF0,0x03,0xF0,0x0F,0xE0,0x03,0xF0,0x0F,0xE0,0x01,0xF0,0x0F,0xC0,0x01,0xF8,0x0F,0xC0,0x01,0xF8,0x0F,0xC0,0x01,0xF8,0x0F,0xC0,0x01,0xF8,0x0F,0xC0,0x00,0xF8,0x0F,0xC0,0x00,0xF8,0x0F,0xC0,0x00,0xF8,0x0F,0xC0,0x00,0xF8,0x0F,0xC0,0x00,0xF8,0x0F,0xC0,0x00,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xE0,0x01,0xF0,0x03,0xE0,0x03,0xF0,0x03,0xF0,0x03,0xF0,0x03,0xF0,0x07,0xF0,0x01,0xF8,0x0F,0xE0,0x01,0xFF,0x3F,0xE0,0x00,0xFF,0xFF,0xC0,0x00,0x7F,0xFF,0x80,0x00,0x3F,0xFF,0x00,0x00,0x1F,0xFE,0x00,0x00,0x07,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 6
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x1F,0xFC,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0xC0,0x03,0xFC,0x1F,0xE0,0x03,0xF0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x03,0xF0,0x07,0xE0,0x03,0xF0,0x07,0xC0,0x03,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x03,0xF0,0x07,0xE0,0x03,0xE0,0x03,0xE0,0x03,0xE0,0x03,0xF0,0x07,0xE0,0x01,0xF8,0x0F,0xC0,0x01,0xFE,0x3F,0x80,0x00,0xFF,0xFF,0x00,0x00,0x3F,0xFE,0x00,0x00,0x1F,0xFC,0x00,0x00,0x7F,0xFF,0x00,0x00,0xFF,0xFF,0x80,0x01,0xFE,0x3F,0xC0,0x03,0xF0,0x0F,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x03,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0xC0,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0xC0,0x01,0xF8,0x0F,0xC0,0x01,0xF8,0x0F,0xE0,0x03,0xF0,0x07,0xE0,0x07,0xF0,0x07,0xF0,0x0F,0xE0,0x03,0xFE,0x3F,0xE0,0x03,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0xC0,0x00,0xFF,0xFF,0x00,0x00,0x3F,0xFE,0x00,0x00,0x0F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 8
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x3F,0xF8,0x00,0x00,0x7F,0xFC,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x03,0xF8,0x3F,0x80,0x07,0xF0,0x0F,0xC0,0x07,0xE0,0x07,0xC0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x03,0xE0,0x0F,0xC0,0x03,0xE0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x03,0xF8,0x0F,0x80,0x03,0xF8,0x0F,0xC0,0x03,0xF8,0x0F,0xC0,0x03,0xF8,0x07,0xC0,0x07,0xF8,0x07,0xE0,0x0F,0xF8,0x07,0xF0,0x1F,0xF8,0x03,0xFE,0x7F,0xF8,0x01,0xFF,0xFE,0xF8,0x01,0xFF,0xFC,0xF8,0x00,0xFF,0xFC,0xF8,0x00,0x3F,0xF0,0xF8,0x00,0x0F,0xE1,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xC0,0x03,0x00,0x1F,0x80,0x03,0xC0,0x7F,0x80,0x03,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x00,0x03,0xFF,0xFE,0x00,0x03,0xFF,0xFC,0x00,0x01,0xFF,0xF0,0x00,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // :
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x3F,0x80,0x00,0x00,0x3F,0x80,0x00,0x00,0x3F,0x80,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ;
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x7C,0x00,0x00,0x01,0xFC,0x00,0x00,0x07,0xFC,0x00,0x00,0x1F,0xFC,0x00,0x00,0x7F,0xF8,0x00,0x01,0xFF,0xE0,0x00,0x07,0xFF,0x80,0x00,0x1F,0xFE,0x00,0x00,0x7F,0xF8,0x00,0x01,0xFF,0xE0,0x00,0x07,0xFF,0x80,0x00,0x1F,0xFE,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x1F,0xFC,0x00,0x00,0x0F,0xFF,0x00,0x00,0x03,0xFF,0xC0,0x00,0x00,0xFF,0xF0,0x00,0x00,0x3F,0xFC,0x00,0x00,0x0F,0xFF,0x00,0x00,0x03,0xFF,0xC0,0x00,0x00,0xFF,0xF0,0x00,0x00,0x3F,0xFC,0x00,0x00,0x0F,0xFC,0x00,0x00,0x03,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // =
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x1F,0xFC,0x00,0x00,0x0F,0xFF,0x00,0x00,0x03,0xFF,0xC0,0x00,0x00,0xFF,0xF0,0x00,0x00,0x3F,0xFC,0x00,0x00,0x0F,0xFF,0x00,0x00,0x03,0xFF,0xC0,0x00,0x00,0xFF,0xF0,0x00,0x00,0x3F,0xFC,0x00,0x00,0x0F,0xFC,0x00,0x00,0x03,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xFC,0x00,0x00,0x07,0xFC,0x00,0x00,0x1F,0xFC,0x00,0x00,0x7F,0xF8,0x00,0x01,0xFF,0xE0,0x00,0x07,0xFF,0x80,0x00,0x1F,0xFE,0x00,0x00,0x7F,0xF8,0x00,0x01,0xFF,0xE0,0x00,0x07,0xFF,0x80,0x00,0x1F,0xFE,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0x80,0x00,0x00,0x1E,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // >
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x0F,0xFC,0x00,0x00,0x3F,0xFF,0x00,0x00,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0xC0,0x01,0xFC,0x3F,0xE0,0x01,0xF0,0x0F,0xE0,0x01,0xC0,0x07,0xE0,0x01,0x80,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0x80,0x00,0x00,0x3F,0x80,0x00,0x00,0x7F,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ?
|
||
+
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x07,0xFE,0x00,0x00,0x1F,0xFF,0x80,0x00,0x7F,0xFF,0xC0,0x00,0xFF,0xFF,0xE0,0x01,0xFF,0x9F,0xE0,0x03,0xF8,0x03,0xF0,0x03,0xF0,0x01,0xF0,0x07,0xE0,0x00,0xF8,0x0F,0xC0,0x00,0x78,0x0F,0x80,0x00,0x7C,0x1F,0x00,0x00,0x3C,0x1F,0x00,0x00,0x3C,0x1E,0x00,0x00,0x3C,0x3E,0x00,0x00,0x3C,0x3C,0x00,0xFE,0x3C,0x3C,0x01,0xFF,0xBC,0x7C,0x03,0xFF,0x9C,0x78,0x07,0xFF,0xFC,0x78,0x07,0xFF,0xFC,0x78,0x0F,0xC1,0xFC,0x78,0x0F,0x80,0xFC,0xF8,0x1F,0x00,0x7C,0xF8,0x1E,0x00,0x7C,0xF8,0x1E,0x00,0x3C,0xF8,0x3E,0x00,0x3C,0xF0,0x3E,0x00,0x3C,0xF0,0x3C,0x00,0x3C,0xF0,0x3C,0x00,0x3C,0xF0,0x3C,0x00,0x3C,0xF0,0x3C,0x00,0x3C,0xF0,0x3C,0x00,0x3C,0xF0,0x3E,0x00,0x3C,0xF8,0x3E,0x00,0x3C,0xF8,0x1E,0x00,0x3C,0xF8,0x1F,0x00,0x7C,0x78,0x1F,0x00,0x7C,0x78,0x0F,0x80,0xFC,0x78,0x0F,0xE3,0xFC,0x78,0x07,0xFF,0xFC,0x7C,0x07,0xFF,0xFC,0x3C,0x03,0xFF,0x9C,0x3C,0x01,0xFF,0x3C,0x3E,0x00,0x7E,0x00,0x1E,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF8,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0xFF,0xF8,0x00,0x00,0x7F,0xFF,0xF8,0x00,0x3F,0xFF,0xF8,0x00,0x0F,0xFF,0xF8,0x00,0x03,0xFF,0xF8,0x00,0x00,0x3F,0xF8, // @
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x1F,0xF8,0x00,0x00,0x3E,0xF8,0x00,0x00,0x3E,0xF8,0x00,0x00,0x3E,0xF8,0x00,0x00,0x3E,0x7C,0x00,0x00,0x7C,0x7C,0x00,0x00,0x7C,0x7C,0x00,0x00,0x7C,0x7C,0x00,0x00,0x7C,0x7E,0x00,0x00,0xFC,0x3E,0x00,0x00,0xF8,0x3E,0x00,0x00,0xF8,0x3E,0x00,0x00,0xF8,0x3E,0x00,0x00,0xF8,0x3F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF0,0x1F,0x00,0x01,0xF0,0x1F,0x00,0x01,0xF0,0x1F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xE0,0x0F,0x80,0x03,0xE0,0x0F,0x80,0x03,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x07,0xC0,0x07,0xC0,0x07,0xC0,0x07,0xFF,0xFF,0xE0,0x0F,0xFF,0xFF,0xE0,0x0F,0xFF,0xFF,0xE0,0x0F,0xFF,0xFF,0xE0,0x0F,0xFF,0xFF,0xE0,0x0F,0xFF,0xFF,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x00,0x01,0xF0,0x1F,0x00,0x01,0xF0,0x1F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x00,0xF8,0x3E,0x00,0x00,0xF8,0x3E,0x00,0x00,0xFC,0x7E,0x00,0x00,0xFC,0x7E,0x00,0x00,0xFC,0x7E,0x00,0x00,0x7C,0x7C,0x00,0x00,0x7E,0xFC,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // A
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xC0,0x00,0x0F,0xFF,0xF8,0x00,0x0F,0xFF,0xFE,0x00,0x0F,0xFF,0xFF,0x00,0x0F,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xC0,0x0F,0x80,0x3F,0xC0,0x0F,0x80,0x0F,0xE0,0x0F,0x80,0x07,0xE0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xE0,0x0F,0x80,0x07,0xE0,0x0F,0x80,0x0F,0xE0,0x0F,0x80,0x3F,0xC0,0x0F,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0x00,0x0F,0xFF,0xFC,0x00,0x0F,0xFF,0xFE,0x00,0x0F,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xC0,0x0F,0x80,0x0F,0xE0,0x0F,0x80,0x07,0xE0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x07,0xF0,0x0F,0x80,0x0F,0xF0,0x0F,0xFF,0xFF,0xE0,0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0x80,0x0F,0xFF,0xFE,0x00,0x0F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // B
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x07,0xFF,0x00,0x00,0x1F,0xFF,0xC0,0x00,0x3F,0xFF,0xE0,0x00,0x7F,0xFF,0xE0,0x00,0xFF,0xFF,0xE0,0x00,0xFF,0x07,0xE0,0x01,0xFC,0x00,0xE0,0x03,0xF8,0x00,0x60,0x03,0xF0,0x00,0x20,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF8,0x00,0x30,0x01,0xFC,0x00,0x60,0x01,0xFE,0x01,0xE0,0x00,0xFF,0xFF,0xE0,0x00,0x7F,0xFF,0xE0,0x00,0x3F,0xFF,0xE0,0x00,0x1F,0xFF,0xE0,0x00,0x0F,0xFF,0x80,0x00,0x03,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // C
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFC,0x00,0x00,0x1F,0xFF,0xC0,0x00,0x1F,0xFF,0xF0,0x00,0x1F,0xFF,0xF8,0x00,0x1F,0xFF,0xFE,0x00,0x1F,0xFF,0xFF,0x00,0x1F,0x81,0xFF,0x00,0x1F,0x80,0x7F,0x80,0x1F,0x80,0x1F,0x80,0x1F,0x80,0x0F,0xC0,0x1F,0x80,0x0F,0xC0,0x1F,0x80,0x07,0xE0,0x1F,0x80,0x07,0xE0,0x1F,0x80,0x03,0xE0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xE0,0x1F,0x80,0x07,0xE0,0x1F,0x80,0x07,0xE0,0x1F,0x80,0x07,0xE0,0x1F,0x80,0x0F,0xC0,0x1F,0x80,0x1F,0xC0,0x1F,0x80,0x3F,0x80,0x1F,0x80,0xFF,0x80,0x1F,0xFF,0xFF,0x00,0x1F,0xFF,0xFE,0x00,0x1F,0xFF,0xFC,0x00,0x1F,0xFF,0xF8,0x00,0x1F,0xFF,0xE0,0x00,0x1F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // D
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xF0,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // E
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xF0,0x03,0xFF,0xFF,0xF8,0x03,0xFF,0xFF,0xF8,0x03,0xFF,0xFF,0xF8,0x03,0xFF,0xFF,0xF8,0x03,0xFF,0xFF,0xF8,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // F
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x07,0xFF,0x00,0x00,0x1F,0xFF,0x80,0x00,0x3F,0xFF,0xE0,0x00,0x7F,0xFF,0xE0,0x00,0xFF,0xFF,0xE0,0x01,0xFF,0x07,0xE0,0x01,0xFC,0x01,0xE0,0x03,0xF8,0x00,0x60,0x07,0xF0,0x00,0x20,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x3F,0xF0,0x3F,0x00,0x7F,0xF8,0x3F,0x00,0x7F,0xF8,0x3F,0x00,0x7F,0xF8,0x3F,0x00,0x7F,0xF8,0x1F,0x00,0x3F,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0xC0,0x01,0xF8,0x0F,0xC0,0x01,0xF8,0x0F,0xC0,0x01,0xF8,0x07,0xE0,0x01,0xF8,0x07,0xE0,0x01,0xF8,0x03,0xF0,0x01,0xF8,0x03,0xF8,0x01,0xF8,0x01,0xFC,0x03,0xF8,0x01,0xFF,0xFF,0xF8,0x00,0xFF,0xFF,0xF0,0x00,0x7F,0xFF,0xE0,0x00,0x3F,0xFF,0xC0,0x00,0x0F,0xFF,0x00,0x00,0x03,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // G
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // H
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x00,0x07,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x07,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // I
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0x00,0x00,0x7F,0xFF,0x80,0x00,0x7F,0xFF,0x80,0x00,0x7F,0xFF,0x80,0x00,0x7F,0xFF,0x80,0x00,0x7F,0xFF,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x30,0x00,0x3F,0x00,0x38,0x00,0x3F,0x00,0x3E,0x00,0x7E,0x00,0x3F,0x00,0xFE,0x00,0x3F,0xFF,0xFE,0x00,0x3F,0xFF,0xFC,0x00,0x3F,0xFF,0xF8,0x00,0x1F,0xFF,0xF8,0x00,0x07,0xFF,0xE0,0x00,0x00,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // J
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x7E,0x1F,0x80,0x00,0xFE,0x1F,0x80,0x01,0xFC,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x07,0xF0,0x1F,0x80,0x0F,0xE0,0x1F,0x80,0x0F,0xC0,0x1F,0x80,0x1F,0x80,0x1F,0x80,0x3F,0x80,0x1F,0x80,0x3F,0x00,0x1F,0x80,0x7E,0x00,0x1F,0x80,0xFC,0x00,0x1F,0x81,0xFC,0x00,0x1F,0x81,0xF8,0x00,0x1F,0x83,0xF0,0x00,0x1F,0x87,0xE0,0x00,0x1F,0x8F,0xE0,0x00,0x1F,0x8F,0xC0,0x00,0x1F,0x9F,0x80,0x00,0x1F,0xBF,0x80,0x00,0x1F,0x3F,0x00,0x00,0x1F,0xFF,0x80,0x00,0x1F,0xFF,0x80,0x00,0x1F,0xFF,0xC0,0x00,0x1F,0xFF,0xC0,0x00,0x1F,0xF7,0xE0,0x00,0x1F,0xE7,0xE0,0x00,0x1F,0xE3,0xF0,0x00,0x1F,0xC3,0xF0,0x00,0x1F,0x81,0xF8,0x00,0x1F,0x81,0xF8,0x00,0x1F,0x80,0xFC,0x00,0x1F,0x80,0xFC,0x00,0x1F,0x80,0x7E,0x00,0x1F,0x80,0x7F,0x00,0x1F,0x80,0x3F,0x00,0x1F,0x80,0x3F,0x80,0x1F,0x80,0x1F,0x80,0x1F,0x80,0x1F,0xC0,0x1F,0x80,0x0F,0xC0,0x1F,0x80,0x0F,0xE0,0x1F,0x80,0x07,0xE0,0x1F,0x80,0x07,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xFC,0x1F,0x80,0x00,0xFC,0x1F,0x80,0x00,0xFE,0x1F,0x80,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // K
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xFF,0xFF,0xF8,0x07,0xFF,0xFF,0xF8,0x07,0xFF,0xFF,0xF8,0x07,0xFF,0xFF,0xF8,0x07,0xFF,0xFF,0xF8,0x07,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // L
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x07,0xF0,0x7F,0x00,0x07,0xF0,0x7F,0x80,0x0F,0xF0,0x7F,0x80,0x0F,0xF0,0x7F,0x80,0x0F,0xF0,0x7F,0x80,0x0F,0xF0,0x7F,0xC0,0x1F,0xF0,0x7F,0xC0,0x1F,0xF0,0x7F,0xC0,0x1F,0xF0,0x79,0xC0,0x3C,0xF0,0x79,0xE0,0x3C,0xF0,0x7D,0xE0,0x3D,0xF0,0x7D,0xE0,0x3D,0xF0,0x7D,0xF0,0x7D,0xF0,0x7C,0xF0,0x79,0xF0,0x7C,0xF0,0x79,0xF0,0x7C,0xF0,0x79,0xF0,0x7C,0x78,0xF9,0xF0,0x7C,0x78,0xF1,0xF0,0x7C,0x78,0xF1,0xF0,0x7C,0x78,0xF1,0xF0,0x7C,0x3D,0xE1,0xF0,0x7C,0x3D,0xE1,0xF0,0x7C,0x3D,0xE1,0xF0,0x7C,0x3F,0xE1,0xF0,0x7C,0x1F,0xC1,0xF0,0x7C,0x1F,0xC1,0xF0,0x7C,0x1F,0xC1,0xF0,0x7C,0x1F,0xC1,0xF0,0x7C,0x0F,0x81,0xF0,0x7C,0x0F,0x81,0xF0,0x7C,0x0F,0x81,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x7C,0x00,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // M
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x01,0xF0,0xFF,0x00,0x01,0xF0,0xFF,0x80,0x01,0xF0,0xFF,0x80,0x01,0xF0,0xFF,0x80,0x01,0xF0,0xFF,0xC0,0x01,0xF0,0xFF,0xC0,0x01,0xF0,0xFF,0xC0,0x01,0xF0,0xFF,0xE0,0x01,0xF0,0xFF,0xE0,0x01,0xF0,0xFF,0xF0,0x01,0xF0,0xFD,0xF0,0x01,0xF0,0xFD,0xF0,0x01,0xF0,0xFD,0xF8,0x01,0xF0,0xFC,0xF8,0x01,0xF0,0xFC,0xF8,0x01,0xF0,0xFC,0x7C,0x01,0xF0,0xFC,0x7C,0x01,0xF0,0xFC,0x7E,0x01,0xF0,0xFC,0x3E,0x01,0xF0,0xFC,0x3E,0x01,0xF0,0xFC,0x3F,0x01,0xF0,0xFC,0x1F,0x01,0xF0,0xFC,0x1F,0x01,0xF0,0xFC,0x0F,0x81,0xF0,0xFC,0x0F,0x81,0xF0,0xFC,0x0F,0x81,0xF0,0xFC,0x07,0xC1,0xF0,0xFC,0x07,0xC1,0xF0,0xFC,0x07,0xE1,0xF0,0xFC,0x03,0xE1,0xF0,0xFC,0x03,0xE1,0xF0,0xFC,0x03,0xF1,0xF0,0xFC,0x01,0xF1,0xF0,0xFC,0x01,0xF1,0xF0,0xFC,0x00,0xF9,0xF0,0xFC,0x00,0xF9,0xF0,0xFC,0x00,0xF9,0xF0,0xFC,0x00,0x7D,0xF0,0xFC,0x00,0x7F,0xF0,0xFC,0x00,0x7F,0xF0,0xFC,0x00,0x3F,0xF0,0xFC,0x00,0x3F,0xF0,0xFC,0x00,0x1F,0xF0,0xFC,0x00,0x1F,0xF0,0xFC,0x00,0x1F,0xF0,0xFC,0x00,0x0F,0xF0,0xFC,0x00,0x0F,0xF0,0xFC,0x00,0x0F,0xF0,0xFC,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // N
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x1F,0xF8,0x00,0x00,0x7F,0xFC,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x80,0x03,0xFC,0x3F,0x80,0x03,0xF0,0x1F,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x03,0xE0,0x0F,0xC0,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0xC0,0x03,0xE0,0x0F,0xC0,0x07,0xE0,0x07,0xC0,0x07,0xE0,0x07,0xE0,0x07,0xC0,0x07,0xF0,0x0F,0xC0,0x03,0xF8,0x1F,0xC0,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x7F,0xFE,0x00,0x00,0x3F,0xF8,0x00,0x00,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // O
|
||
+
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xE0,0x00,0x07,0xFF,0xFC,0x00,0x07,0xFF,0xFF,0x00,0x07,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xE0,0x07,0xC0,0x1F,0xF0,0x07,0xC0,0x07,0xF0,0x07,0xC0,0x03,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x00,0xF8,0x07,0xC0,0x00,0xFC,0x07,0xC0,0x00,0xFC,0x07,0xC0,0x00,0xFC,0x07,0xC0,0x00,0xFC,0x07,0xC0,0x00,0xFC,0x07,0xC0,0x00,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x03,0xF8,0x07,0xC0,0x07,0xF0,0x07,0xC0,0x1F,0xF0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFE,0x00,0x07,0xFF,0xF0,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // P
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x00,0x3F,0xF8,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x80,0x03,0xF8,0x3F,0xC0,0x07,0xF0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x03,0xE0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0xC0,0x03,0xE0,0x0F,0xC0,0x07,0xE0,0x07,0xC0,0x07,0xE0,0x07,0xE0,0x0F,0xC0,0x07,0xF0,0x0F,0xC0,0x03,0xF8,0x3F,0xC0,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x7F,0xFC,0x00,0x00,0x3F,0xFC,0x00,0x00,0x07,0xFE,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x03,0x80,0x00,0x00,0x02,0x00, // Q
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x80,0x00,0x1F,0xFF,0xF0,0x00,0x1F,0xFF,0xFC,0x00,0x1F,0xFF,0xFF,0x00,0x1F,0xFF,0xFF,0x00,0x1F,0xFF,0xFF,0x80,0x1F,0x80,0x7F,0xC0,0x1F,0x80,0x1F,0xC0,0x1F,0x80,0x0F,0xE0,0x1F,0x80,0x07,0xE0,0x1F,0x80,0x07,0xE0,0x1F,0x80,0x07,0xE0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xE0,0x1F,0x80,0x07,0xE0,0x1F,0x80,0x07,0xE0,0x1F,0x80,0x0F,0xE0,0x1F,0x80,0x1F,0xC0,0x1F,0x80,0x3F,0x80,0x1F,0xFF,0xFF,0x80,0x1F,0xFF,0xFF,0x00,0x1F,0xFF,0xFC,0x00,0x1F,0xFF,0xF0,0x00,0x1F,0xFF,0xFC,0x00,0x1F,0xFF,0xFE,0x00,0x1F,0x80,0x7F,0x00,0x1F,0x80,0x3F,0x00,0x1F,0x80,0x1F,0x80,0x1F,0x80,0x1F,0x80,0x1F,0x80,0x0F,0xC0,0x1F,0x80,0x0F,0xC0,0x1F,0x80,0x07,0xC0,0x1F,0x80,0x07,0xE0,0x1F,0x80,0x03,0xE0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x03,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x00,0xF8,0x1F,0x80,0x00,0xFC,0x1F,0x80,0x00,0xFC,0x1F,0x80,0x00,0x7E,0x1F,0x80,0x00,0x7E,0x1F,0x80,0x00,0x3E,0x1F,0x80,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // R
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x1F,0xFC,0x00,0x00,0x7F,0xFF,0x80,0x00,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0xC0,0x07,0xFC,0x1F,0xC0,0x07,0xF0,0x03,0xC0,0x0F,0xC0,0x00,0xC0,0x0F,0xC0,0x00,0x40,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0xC0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xF8,0x00,0x00,0x07,0xFE,0x00,0x00,0x07,0xFF,0xE0,0x00,0x03,0xFF,0xF8,0x00,0x01,0xFF,0xFE,0x00,0x00,0xFF,0xFF,0x00,0x00,0x7F,0xFF,0x80,0x00,0x0F,0xFF,0xC0,0x00,0x01,0xFF,0xC0,0x00,0x00,0x3F,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x07,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x18,0x00,0x03,0xF0,0x0C,0x00,0x07,0xF0,0x0F,0x00,0x0F,0xE0,0x0F,0xC0,0x1F,0xE0,0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0x00,0x01,0xFF,0xFC,0x00,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // S
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFC,0x7F,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFE,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // T
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0xC0,0x03,0xF0,0x07,0xC0,0x03,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xF0,0x0F,0xE0,0x03,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x00,0xFF,0xFF,0x00,0x00,0x3F,0xFC,0x00,0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // U
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x7C,0x7E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3F,0x00,0x00,0xFC,0x3F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0xC0,0x03,0xF0,0x0F,0xC0,0x03,0xF0,0x0F,0xC0,0x03,0xF0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF8,0x1F,0x80,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x1E,0x78,0x00,0x00,0x1E,0x78,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // V
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xFC,0x00,0x00,0x3F,0xFC,0x00,0x00,0x3F,0xFC,0x00,0x00,0x3F,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7E,0x07,0xE0,0x7E,0x3E,0x07,0xE0,0x7C,0x3E,0x07,0xE0,0x7C,0x3E,0x07,0xE0,0x7C,0x3E,0x0F,0xF0,0x7C,0x3E,0x0F,0xF0,0x7C,0x3E,0x0F,0xF0,0x7C,0x3E,0x0F,0xF0,0x7C,0x3E,0x0F,0xF0,0x7C,0x3E,0x0E,0x70,0x7C,0x1E,0x1E,0x78,0x78,0x1F,0x1E,0x78,0xF8,0x1F,0x1E,0x78,0xF8,0x1F,0x1E,0x78,0xF8,0x1F,0x1E,0x78,0xF8,0x1F,0x1E,0x78,0xF8,0x1F,0x3C,0x3C,0xF8,0x1F,0x3C,0x3C,0xF8,0x0F,0x3C,0x3C,0xF0,0x0F,0x3C,0x3C,0xF0,0x0F,0x3C,0x3C,0xF0,0x0F,0x3C,0x3C,0xF0,0x0F,0x38,0x1C,0xF0,0x0F,0x38,0x1C,0xF0,0x0F,0x78,0x1E,0xF0,0x0F,0xF8,0x1F,0xF0,0x0F,0xF8,0x1F,0xF0,0x07,0xF8,0x1F,0xE0,0x07,0xF0,0x0F,0xE0,0x07,0xF0,0x0F,0xE0,0x07,0xF0,0x0F,0xE0,0x07,0xF0,0x0F,0xE0,0x07,0xF0,0x0F,0xE0,0x07,0xF0,0x0F,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x03,0xE0,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // W
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x7C,0x3F,0x00,0x00,0x7E,0x1F,0x80,0x00,0xFC,0x0F,0x80,0x00,0xF8,0x0F,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF0,0x07,0xE0,0x03,0xF0,0x07,0xE0,0x03,0xE0,0x03,0xF0,0x07,0xE0,0x03,0xF0,0x07,0xC0,0x01,0xF0,0x0F,0xC0,0x01,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x00,0xFC,0x1F,0x00,0x00,0x7C,0x1F,0x00,0x00,0x7E,0x3E,0x00,0x00,0x3E,0x3E,0x00,0x00,0x3F,0x7C,0x00,0x00,0x1F,0x7C,0x00,0x00,0x1F,0xFC,0x00,0x00,0x0F,0xF8,0x00,0x00,0x0F,0xF8,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xFC,0x00,0x00,0x3F,0x7C,0x00,0x00,0x3E,0x7E,0x00,0x00,0x7E,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x0F,0x80,0x03,0xF0,0x0F,0xC0,0x03,0xF0,0x07,0xC0,0x03,0xE0,0x07,0xE0,0x07,0xE0,0x03,0xE0,0x07,0xC0,0x03,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x00,0x00,0xFC,0x3F,0x00,0x00,0xFC,0x3E,0x00,0x00,0x7C,0x7E,0x00,0x00,0x7E,0x7C,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // X
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x3E,0x7E,0x00,0x00,0x7E,0x3E,0x00,0x00,0xFC,0x3F,0x00,0x00,0xFC,0x3F,0x00,0x00,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0xC0,0x03,0xF0,0x07,0xC0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x03,0xE0,0x07,0xC0,0x03,0xF0,0x0F,0xC0,0x03,0xF0,0x0F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF8,0x1F,0x00,0x00,0xF8,0x3F,0x00,0x00,0xFC,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7E,0x7E,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Y
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x00,0x00,0x01,0xFC,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Z
|
||
+0x00,0x01,0xFF,0xC0,0x00,0x01,0xFF,0xC0,0x00,0x01,0xFF,0xC0,0x00,0x01,0xFF,0xC0,0x00,0x01,0xFF,0x80,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xFF,0x80,0x00,0x01,0xFF,0xC0,0x00,0x01,0xFF,0xC0,0x00,0x01,0xFF,0xC0,0x00,0x01,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // [
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <backslash>
|
||
+0x00,0xFF,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ]
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x3F,0xFC,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7E,0x7E,0x00,0x00,0xFE,0x7F,0x00,0x00,0xFC,0x3F,0x80,0x01,0xF8,0x1F,0x80,0x03,0xF8,0x1F,0xC0,0x03,0xF0,0x0F,0xC0,0x07,0xE0,0x07,0xE0,0x0F,0xE0,0x03,0xF0,0x0F,0xC0,0x03,0xF0,0x1F,0x80,0x01,0xF8,0x3F,0x00,0x00,0xFC,0x3F,0x00,0x00,0xFC,0x7E,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // _
|
||
+
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // `
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0xFF,0xF8,0x00,0x03,0xFF,0xFE,0x00,0x07,0xFF,0xFF,0x00,0x07,0xFF,0xFF,0x00,0x07,0xFF,0xFF,0x80,0x07,0xC0,0x1F,0xC0,0x07,0x00,0x0F,0xC0,0x04,0x00,0x07,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x1F,0xFF,0xE0,0x00,0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xF0,0x03,0xE0,0x0F,0xC0,0x03,0xE0,0x0F,0x80,0x03,0xE0,0x1F,0x80,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x07,0xE0,0x1F,0x00,0x07,0xE0,0x1F,0x00,0x07,0xE0,0x1F,0x00,0x0F,0xE0,0x1F,0x80,0x0F,0xE0,0x1F,0x80,0x1F,0xE0,0x0F,0xC0,0x3F,0xE0,0x0F,0xF9,0xFF,0xE0,0x07,0xFF,0xFB,0xE0,0x07,0xFF,0xF3,0xE0,0x03,0xFF,0xF3,0xE0,0x01,0xFF,0xC3,0xE0,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // a
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x81,0xF0,0x00,0x0F,0x87,0xFC,0x00,0x0F,0x9F,0xFE,0x00,0x0F,0x9F,0xFF,0x00,0x0F,0xBF,0xFF,0x80,0x0F,0xFF,0xFF,0xC0,0x0F,0xF8,0x1F,0xC0,0x0F,0xF0,0x0F,0xE0,0x0F,0xF0,0x07,0xE0,0x0F,0xE0,0x03,0xE0,0x0F,0xE0,0x03,0xF0,0x0F,0xC0,0x03,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0xC0,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0xC0,0x01,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0xC0,0x03,0xF0,0x0F,0xE0,0x03,0xF0,0x0F,0xE0,0x03,0xE0,0x0F,0xE0,0x07,0xE0,0x0F,0xF0,0x07,0xE0,0x0F,0xF8,0x0F,0xC0,0x0F,0xFE,0x3F,0xC0,0x0F,0xFF,0xFF,0x80,0x0F,0x9F,0xFF,0x00,0x0F,0x9F,0xFF,0x00,0x0F,0x8F,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // b
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x00,0x07,0xFF,0x80,0x00,0x1F,0xFF,0xC0,0x00,0x3F,0xFF,0xE0,0x00,0x7F,0xFF,0xE0,0x00,0xFF,0xFF,0xE0,0x00,0xFE,0x01,0xE0,0x01,0xFC,0x00,0xE0,0x01,0xF8,0x00,0x20,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x20,0x01,0xF8,0x00,0x60,0x01,0xFE,0x01,0xE0,0x00,0xFF,0x8F,0xE0,0x00,0x7F,0xFF,0xE0,0x00,0x3F,0xFF,0xE0,0x00,0x1F,0xFF,0xE0,0x00,0x0F,0xFF,0x80,0x00,0x03,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // c
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x0F,0x83,0xE0,0x00,0x3F,0xE3,0xE0,0x00,0xFF,0xF3,0xE0,0x01,0xFF,0xFB,0xE0,0x01,0xFF,0xFB,0xE0,0x03,0xFF,0xFF,0xE0,0x07,0xF0,0x3F,0xE0,0x07,0xE0,0x1F,0xE0,0x07,0xC0,0x0F,0xE0,0x0F,0xC0,0x0F,0xE0,0x0F,0x80,0x07,0xE0,0x0F,0x80,0x07,0xE0,0x1F,0x80,0x07,0xE0,0x1F,0x80,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x80,0x03,0xE0,0x1F,0x80,0x07,0xE0,0x0F,0x80,0x07,0xE0,0x0F,0x80,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x0F,0xE0,0x07,0xE0,0x1F,0xE0,0x07,0xF0,0x3F,0xE0,0x03,0xFC,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x01,0xFF,0xFB,0xE0,0x00,0xFF,0xF3,0xE0,0x00,0x7F,0xE3,0xE0,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // d
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0x00,0x00,0x1F,0xFC,0x00,0x00,0x3F,0xFE,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0xC0,0x03,0xF8,0x0F,0xC0,0x03,0xF0,0x07,0xE0,0x07,0xE0,0x03,0xE0,0x07,0xC0,0x01,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x00,0xF8,0x1F,0x80,0x00,0xF8,0x1F,0x80,0x00,0xF8,0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xE0,0x00,0x30,0x07,0xF0,0x00,0x70,0x03,0xF8,0x01,0xF0,0x01,0xFF,0x1F,0xF0,0x01,0xFF,0xFF,0xF0,0x00,0xFF,0xFF,0xF0,0x00,0x7F,0xFF,0xE0,0x00,0x1F,0xFF,0x80,0x00,0x07,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // e
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x7F,0xE0,0x00,0x01,0xFF,0xE0,0x00,0x01,0xFF,0xE0,0x00,0x03,0xFF,0xE0,0x00,0x07,0xFF,0xE0,0x00,0x07,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // f
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x7F,0xE3,0xE0,0x00,0xFF,0xF3,0xE0,0x01,0xFF,0xFB,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xF8,0x3F,0xE0,0x07,0xE0,0x1F,0xE0,0x07,0xC0,0x0F,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0x80,0x07,0xE0,0x0F,0x80,0x07,0xE0,0x1F,0x80,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x80,0x03,0xE0,0x1F,0x80,0x03,0xE0,0x0F,0x80,0x07,0xE0,0x0F,0x80,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x07,0xE0,0x0F,0xE0,0x07,0xF0,0x1F,0xE0,0x03,0xF8,0x7F,0xE0,0x03,0xFF,0xFB,0xE0,0x01,0xFF,0xFB,0xE0,0x00,0xFF,0xF3,0xE0,0x00,0x3F,0xE3,0xE0,0x00,0x07,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x03,0x00,0x0F,0xC0,0x03,0xC0,0x1F,0x80,0x03,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x00,0x03,0xFF,0xFE,0x00,0x01,0xFF,0xF8,0x00,0x00,0x1F,0xC0,0x00, // g
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC1,0xF8,0x00,0x07,0xC7,0xFE,0x00,0x07,0xCF,0xFF,0x00,0x07,0xDF,0xFF,0x80,0x07,0x9F,0xFF,0x80,0x07,0xFF,0xFF,0xC0,0x07,0xFC,0x1F,0xC0,0x07,0xF8,0x0F,0xC0,0x07,0xF0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // h
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0xFF,0xF0,0x00,0x00,0xFF,0xF0,0x00,0x00,0xFF,0xF0,0x00,0x00,0xFF,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x03,0xFF,0xFF,0xFC,0x03,0xFF,0xFF,0xFC,0x03,0xFF,0xFF,0xFC,0x03,0xFF,0xFF,0xFC,0x03,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // i
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xF0,0x00,0x01,0xFF,0xF0,0x00,0x01,0xFF,0xF0,0x00,0x01,0xFF,0xF0,0x00,0x01,0xFF,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x07,0xFF,0xC0,0x00,0x0F,0xFF,0xC0,0x00,0x0F,0xFF,0x80,0x00,0x0F,0xFF,0x00,0x00,0x07,0xFC,0x00,0x00, // j
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x01,0xF8,0x03,0xE0,0x03,0xF0,0x03,0xE0,0x07,0xF0,0x03,0xE0,0x07,0xE0,0x03,0xE0,0x0F,0xC0,0x03,0xE0,0x1F,0x80,0x03,0xE0,0x3F,0x00,0x03,0xE0,0x7E,0x00,0x03,0xE0,0x7E,0x00,0x03,0xE0,0xFC,0x00,0x03,0xE1,0xF8,0x00,0x03,0xE3,0xF0,0x00,0x03,0xE7,0xE0,0x00,0x03,0xE7,0xE0,0x00,0x03,0xEF,0xC0,0x00,0x03,0xFF,0xC0,0x00,0x03,0xFF,0xE0,0x00,0x03,0xFF,0xE0,0x00,0x03,0xFF,0xF0,0x00,0x03,0xF9,0xF8,0x00,0x03,0xF9,0xF8,0x00,0x03,0xF0,0xFC,0x00,0x03,0xE0,0xFC,0x00,0x03,0xE0,0x7E,0x00,0x03,0xE0,0x3E,0x00,0x03,0xE0,0x3F,0x00,0x03,0xE0,0x1F,0x80,0x03,0xE0,0x1F,0x80,0x03,0xE0,0x0F,0xC0,0x03,0xE0,0x0F,0xC0,0x03,0xE0,0x07,0xE0,0x03,0xE0,0x07,0xE0,0x03,0xE0,0x03,0xF0,0x03,0xE0,0x01,0xF8,0x03,0xE0,0x01,0xF8,0x03,0xE0,0x00,0xFC,0x03,0xE0,0x00,0xFC,0x03,0xE0,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // k
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xC0,0x00,0x03,0xFF,0xE0,0x00,0x03,0xFF,0xE0,0x00,0x03,0xFF,0xE0,0x00,0x03,0xFF,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xFC,0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0xFF,0xF8,0x00,0x00,0x7F,0xF8,0x00,0x00,0x3F,0xF8,0x00,0x00,0x0F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // l
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x07,0x80,0x1E,0x7E,0x1F,0xC0,0x3E,0xFF,0x3F,0xE0,0x3F,0xFF,0xBF,0xF0,0x3F,0xFF,0xFF,0xF0,0x3F,0xFF,0xFF,0xF0,0x3F,0x0F,0xF0,0xF8,0x3F,0x07,0xE0,0xF8,0x3E,0x07,0xE0,0xF8,0x3E,0x07,0xC0,0x78,0x3E,0x07,0xC0,0x78,0x3E,0x07,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x3E,0x03,0xC0,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // m
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF8,0x00,0x07,0x87,0xFE,0x00,0x07,0xCF,0xFF,0x00,0x07,0xDF,0xFF,0x80,0x07,0x9F,0xFF,0x80,0x07,0xFF,0xFF,0xC0,0x07,0xFC,0x1F,0xC0,0x07,0xF8,0x0F,0xC0,0x07,0xF0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // n
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x00,0x3F,0xF8,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0x80,0x03,0xF8,0x1F,0xC0,0x07,0xF0,0x0F,0xC0,0x07,0xE0,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x03,0xE0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x00,0x01,0xF0,0x1F,0x00,0x01,0xF0,0x1F,0x00,0x01,0xF0,0x1F,0x00,0x01,0xF0,0x1F,0x00,0x01,0xF0,0x1F,0x00,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0xC0,0x03,0xE0,0x0F,0xC0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x0F,0xC0,0x03,0xF0,0x1F,0xC0,0x03,0xFE,0x7F,0x80,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x3F,0xFC,0x00,0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // o
|
||
+
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x07,0xC7,0xFC,0x00,0x07,0xDF,0xFF,0x00,0x07,0x9F,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFC,0x1F,0xC0,0x07,0xF8,0x0F,0xC0,0x07,0xF0,0x07,0xE0,0x07,0xE0,0x03,0xE0,0x07,0xE0,0x03,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF8,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xE0,0x03,0xF0,0x07,0xE0,0x03,0xE0,0x07,0xF0,0x03,0xE0,0x07,0xF0,0x07,0xE0,0x07,0xF8,0x0F,0xC0,0x07,0xFF,0xFF,0xC0,0x07,0xBF,0xFF,0x80,0x07,0xDF,0xFF,0x00,0x07,0xCF,0xFE,0x00,0x07,0xC3,0xF8,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0x80,0x00,0x00, // p
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x7F,0xE3,0xE0,0x00,0xFF,0xF3,0xE0,0x01,0xFF,0xFB,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xF8,0x3F,0xE0,0x07,0xE0,0x1F,0xE0,0x07,0xC0,0x0F,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0x80,0x07,0xE0,0x0F,0x80,0x07,0xE0,0x0F,0x80,0x03,0xE0,0x1F,0x80,0x03,0xE0,0x1F,0x80,0x03,0xE0,0x1F,0x80,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x80,0x03,0xE0,0x1F,0x80,0x03,0xE0,0x0F,0x80,0x03,0xE0,0x0F,0x80,0x07,0xE0,0x0F,0x80,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x07,0xC0,0x0F,0xE0,0x07,0xE0,0x1F,0xE0,0x03,0xF0,0x3F,0xE0,0x03,0xFF,0xFF,0xE0,0x01,0xFF,0xFB,0xE0,0x00,0xFF,0xFB,0xE0,0x00,0x7F,0xF3,0xE0,0x00,0x1F,0xC3,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0, // q
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x7C,0x1F,0xF8,0x00,0x7C,0x7F,0xFC,0x00,0x7C,0xFF,0xFC,0x00,0x7C,0xFF,0xFC,0x00,0x7D,0xFF,0xFC,0x00,0x7D,0xF8,0x3C,0x00,0x7F,0xE0,0x0C,0x00,0x7F,0x80,0x04,0x00,0x7F,0x80,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // r
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x00,0x3F,0xFE,0x00,0x00,0x7F,0xFF,0x80,0x00,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x03,0xF8,0x07,0x80,0x03,0xE0,0x01,0xC0,0x03,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xFF,0x00,0x00,0x01,0xFF,0xE0,0x00,0x01,0xFF,0xFC,0x00,0x00,0xFF,0xFF,0x00,0x00,0x3F,0xFF,0x80,0x00,0x0F,0xFF,0x80,0x00,0x01,0xFF,0xC0,0x00,0x00,0x3F,0xC0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x07,0x00,0x07,0xC0,0x07,0xC0,0x0F,0xC0,0x07,0xFC,0x7F,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x00,0x07,0xFF,0xFE,0x00,0x01,0xFF,0xFC,0x00,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // s
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x1F,0xFF,0xFF,0xC0,0x1F,0xFF,0xFF,0xE0,0x1F,0xFF,0xFF,0xE0,0x1F,0xFF,0xFF,0xE0,0x1F,0xFF,0xFF,0xE0,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xFF,0xE0,0x00,0x07,0xFF,0xE0,0x00,0x07,0xFF,0xE0,0x00,0x03,0xFF,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // t
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x01,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x03,0xF0,0x0F,0xE0,0x03,0xF8,0x1F,0xE0,0x03,0xFF,0xFF,0xE0,0x01,0xFF,0xF9,0xE0,0x01,0xFF,0xFB,0xE0,0x00,0xFF,0xF3,0xE0,0x00,0x7F,0xE3,0xE0,0x00,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // u
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x07,0xE0,0x07,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x78,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // v
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x3C,0x00,0x00,0x3C,0x3E,0x00,0x00,0x7C,0x3E,0x03,0xC0,0x7C,0x3E,0x03,0xC0,0x7C,0x3E,0x07,0xE0,0x7C,0x3E,0x07,0xE0,0x7C,0x1E,0x07,0xE0,0x78,0x1F,0x07,0xE0,0xF8,0x1F,0x07,0xF0,0xF8,0x1F,0x0F,0xF0,0xF8,0x1F,0x0E,0x70,0xF8,0x0F,0x0E,0x70,0xF0,0x0F,0x0E,0x70,0xF0,0x0F,0x9E,0x79,0xF0,0x0F,0x9E,0x79,0xF0,0x0F,0x9C,0x39,0xF0,0x0F,0x9C,0x39,0xF0,0x07,0x9C,0x39,0xE0,0x07,0xBC,0x3D,0xE0,0x07,0xBC,0x3D,0xE0,0x07,0xF8,0x1F,0xE0,0x07,0xF8,0x1F,0xE0,0x07,0xF8,0x1F,0xE0,0x03,0xF8,0x1F,0xC0,0x03,0xF8,0x1F,0xC0,0x03,0xF0,0x0F,0xC0,0x03,0xF0,0x0F,0xC0,0x03,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // w
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x0F,0xC0,0x03,0xF0,0x07,0xC0,0x03,0xE0,0x07,0xE0,0x07,0xE0,0x03,0xE0,0x07,0xC0,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x1F,0x80,0x00,0xF8,0x1F,0x00,0x00,0xFC,0x3F,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7E,0x7E,0x00,0x00,0x3E,0x7C,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x1F,0xF8,0x00,0x00,0x1F,0xF8,0x00,0x00,0x3F,0xFC,0x00,0x00,0x3E,0x7C,0x00,0x00,0x7E,0x7E,0x00,0x00,0x7C,0x3E,0x00,0x00,0xF8,0x1F,0x00,0x01,0xF8,0x1F,0x80,0x01,0xF0,0x0F,0x80,0x03,0xF0,0x0F,0xC0,0x03,0xE0,0x07,0xC0,0x07,0xE0,0x07,0xE0,0x07,0xC0,0x03,0xE0,0x0F,0xC0,0x03,0xF0,0x1F,0x80,0x01,0xF8,0x1F,0x00,0x00,0xF8,0x3F,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // x
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x7C,0x1F,0x00,0x00,0xFC,0x1F,0x80,0x00,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0xC0,0x01,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x03,0xF0,0x03,0xE0,0x03,0xE0,0x03,0xE0,0x03,0xE0,0x03,0xE0,0x07,0xE0,0x01,0xF0,0x07,0xC0,0x01,0xF0,0x07,0xC0,0x01,0xF0,0x0F,0xC0,0x00,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0x80,0x00,0xF8,0x1F,0x80,0x00,0x7C,0x1F,0x00,0x00,0x7C,0x1F,0x00,0x00,0x7C,0x3E,0x00,0x00,0x3E,0x3E,0x00,0x00,0x3E,0x3E,0x00,0x00,0x3E,0x7C,0x00,0x00,0x1F,0x7C,0x00,0x00,0x1F,0x7C,0x00,0x00,0x1F,0xF8,0x00,0x00,0x0F,0xF8,0x00,0x00,0x0F,0xF8,0x00,0x00,0x0F,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x3F,0x00,0x00,0x07,0xFF,0x00,0x00,0x07,0xFE,0x00,0x00,0x07,0xFC,0x00,0x00,0x07,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00, // y
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // z
|
||
+0x00,0x00,0x0F,0xE0,0x00,0x00,0x3F,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x01,0xFF,0xC0,0x00,0x01,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x7F,0x80,0x00,0x0F,0xFF,0x00,0x00,0x0F,0xF8,0x00,0x00,0x0F,0xF8,0x00,0x00,0x0F,0xFF,0x00,0x00,0x00,0x3F,0x80,0x00,0x00,0x0F,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0xFF,0xE0,0x00,0x00,0xFF,0xE0,0x00,0x00,0x7F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // {
|
||
+0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // |
|
||
+0x03,0xF0,0x00,0x00,0x03,0xFE,0x00,0x00,0x03,0xFF,0x00,0x00,0x03,0xFF,0x80,0x00,0x03,0xFF,0x80,0x00,0x00,0x0F,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xF8,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x1F,0xF0,0x00,0x00,0xFF,0xF0,0x00,0x01,0xFE,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x7F,0xC0,0x00,0x03,0xFF,0x80,0x00,0x03,0xFF,0x00,0x00,0x03,0xFE,0x00,0x00,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // }
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xFC,0x00,0x00,0x0F,0xFC,0x00,0x00,0x0F,0xFE,0x00,0x00,0x1F,0xFF,0x00,0x00,0x3F,0xFF,0x00,0x08,0x3E,0x1F,0x80,0x0E,0x3C,0x0F,0xC0,0x1E,0x7C,0x07,0xC0,0x1F,0x7C,0x07,0xE0,0x3E,0x78,0x03,0xE0,0x3E,0xF8,0x03,0xF0,0x7C,0x70,0x01,0xF8,0xFC,0x30,0x00,0xFF,0xF8,0x00,0x00,0xFF,0xF8,0x00,0x00,0x7F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0xF0,0x00,0x00,0xFF,0xFC,0x00,0x01,0xF8,0x7E,0x00,0x01,0xE0,0x1E,0x00,0x03,0xC0,0x0F,0x00,0x03,0x80,0x07,0x00,0x07,0x80,0x07,0x80,0x07,0x00,0x03,0x80,0x07,0x00,0x03,0x80,0x07,0x00,0x03,0x80,0x07,0x00,0x03,0x80,0x07,0x80,0x07,0x80,0x03,0x80,0x07,0x00,0x03,0xC0,0x0F,0x00,0x01,0xE0,0x1E,0x00,0x00,0xF8,0x7E,0x00,0x00,0x7F,0xFC,0x00,0x00,0x3F,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <20>
|
||
+};
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/Retro8x16_v.h b/drivers/leds/vfd/controllers/fonts/Retro8x16_v.h
|
||
new file mode 100644
|
||
index 000000000..bf3d42fef
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/fonts/Retro8x16_v.h
|
||
@@ -0,0 +1,107 @@
|
||
+// Retro8x16_v.h
|
||
+// Font type : Full (96 characters)
|
||
+// Font size : 8x16 pixels
|
||
+// Memory usage : 1540 bytes
|
||
+
|
||
+// Origin: http://www.rinkydinkelectronics.com/r_fonts.php
|
||
+// Modified by Arthur Liberman for compatibility with the OpenVFD driver.
|
||
+
|
||
+const unsigned char Retro8x16_V[1540] = {
|
||
+0x08,0x10,0x20,0x60,
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // <space>
|
||
+0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00, // !
|
||
+0x00,0x00,0x3F,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // "
|
||
+0x00,0x30,0xFF,0x30,0x30,0xFF,0x30,0x00,0x00,0x03,0x3F,0x03,0x03,0x3F,0x03,0x00, // #
|
||
+0x00,0x30,0xCC,0xFF,0xCC,0x0C,0x00,0x00,0x00,0x0C,0x0C,0x3F,0x0C,0x03,0x00,0x00, // $
|
||
+0x00,0x3C,0x3C,0x00,0xC0,0x30,0x0C,0x00,0x00,0x30,0x0C,0x03,0x00,0x3C,0x3C,0x00, // %
|
||
+0x00,0x3C,0xC3,0xC3,0x3C,0x00,0x00,0x00,0x00,0x0F,0x30,0x30,0x33,0x0C,0x33,0x00, // &
|
||
+0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '
|
||
+0x00,0xF0,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x30,0x00,0x00,0x00,0x00, // (
|
||
+0x00,0x00,0x00,0x03,0x0C,0xF0,0x00,0x00,0x00,0x00,0x00,0x30,0x0C,0x03,0x00,0x00, // )
|
||
+0x00,0x0C,0x30,0xFF,0x30,0x0C,0x00,0x00,0x00,0x0C,0x03,0x3F,0x03,0x0C,0x00,0x00, // *
|
||
+0x00,0xC0,0xC0,0xFC,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00, // +
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x0F,0x00,0x00,0x00, // ,
|
||
+0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00, // .
|
||
+0x00,0x00,0x00,0x00,0xC0,0x30,0x0C,0x00,0x00,0x30,0x0C,0x03,0x00,0x00,0x00,0x00, // /
|
||
+0x00,0xFC,0x03,0xC3,0xC3,0x33,0xFC,0x00,0x00,0x0F,0x33,0x30,0x30,0x30,0x0F,0x00, // 0
|
||
+0x00,0x00,0x00,0x0C,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x3F,0x30,0x00,0x00, // 1
|
||
+0x00,0x0C,0x03,0xC3,0xC3,0xC3,0x3C,0x00,0x00,0x3C,0x33,0x30,0x30,0x30,0x30,0x00, // 2
|
||
+0x00,0x03,0x03,0xC3,0xC3,0xF3,0x0F,0x00,0x00,0x0C,0x30,0x30,0x30,0x30,0x0F,0x00, // 3
|
||
+0x00,0x00,0xC0,0x30,0x0C,0xFF,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x3F,0x03,0x00, // 4
|
||
+0x00,0x3F,0x33,0x33,0x33,0x33,0xC3,0x00,0x00,0x0C,0x30,0x30,0x30,0x30,0x0F,0x00, // 5
|
||
+0x00,0xF0,0xCC,0xC3,0xC3,0xC3,0x03,0x00,0x00,0x0F,0x30,0x30,0x30,0x30,0x0F,0x00, // 6
|
||
+0x00,0x03,0x03,0x03,0xC3,0x33,0x0F,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, // 7
|
||
+0x00,0x3C,0xC3,0xC3,0xC3,0xC3,0x3C,0x00,0x00,0x0F,0x30,0x30,0x30,0x30,0x0F,0x00, // 8
|
||
+0x00,0x3C,0xC3,0xC3,0xC3,0xC3,0xFC,0x00,0x00,0x30,0x30,0x30,0x30,0x0C,0x03,0x00, // 9
|
||
+0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00, // :
|
||
+0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0F,0x00,0x00,0x00, // ;
|
||
+0x00,0x00,0xC0,0x30,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x30,0x00,0x00, // <
|
||
+0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03,0x00, // =
|
||
+0x00,0x00,0x03,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x30,0x0C,0x03,0x00,0x00,0x00, // >
|
||
+0x00,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ?
|
||
+0x00,0xFC,0x03,0xC3,0x33,0xC3,0xFC,0x00,0x00,0x0F,0x30,0x30,0x33,0x33,0x30,0x00, // @
|
||
+0x00,0xF0,0x0C,0x03,0x03,0x0C,0xF0,0x00,0x00,0x3F,0x03,0x03,0x03,0x03,0x3F,0x00, // A
|
||
+0x00,0xFF,0xC3,0xC3,0xC3,0xC3,0x3C,0x00,0x00,0x3F,0x30,0x30,0x30,0x30,0x0F,0x00, // B
|
||
+0x00,0xFC,0x03,0x03,0x03,0x03,0x0C,0x00,0x00,0x0F,0x30,0x30,0x30,0x30,0x0C,0x00, // C
|
||
+0x00,0xFF,0x03,0x03,0x03,0x03,0xFC,0x00,0x00,0x3F,0x30,0x30,0x30,0x30,0x0F,0x00, // D
|
||
+0x00,0xFF,0xC3,0xC3,0xC3,0xC3,0x03,0x00,0x00,0x3F,0x30,0x30,0x30,0x30,0x30,0x00, // E
|
||
+0x00,0xFF,0xC3,0xC3,0xC3,0xC3,0x03,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00, // F
|
||
+0x00,0xFC,0x03,0x03,0x83,0x83,0x83,0x00,0x00,0x0F,0x30,0x30,0x31,0x31,0x3F,0x00, // G
|
||
+0x00,0xFF,0xC0,0xC0,0xC0,0xC0,0xFF,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x3F,0x00, // H
|
||
+0x00,0x00,0x03,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x30,0x3F,0x30,0x00,0x00,0x00, // I
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x0C,0x30,0x30,0x30,0x30,0x0F,0x00, // J
|
||
+0x00,0xFF,0xC0,0xC0,0x30,0x0C,0x03,0x00,0x00,0x3F,0x00,0x00,0x03,0x0C,0x30,0x00, // K
|
||
+0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x30,0x30,0x30,0x30,0x30,0x00, // L
|
||
+0x00,0xFF,0x0C,0xF0,0xF0,0x0C,0xFF,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x3F,0x00, // M
|
||
+0x00,0xFF,0x0C,0xF0,0xC0,0x00,0xFF,0x00,0x00,0x3F,0x00,0x00,0x03,0x0C,0x3F,0x00, // N
|
||
+0x00,0xFC,0x03,0x03,0x03,0x03,0xFC,0x00,0x00,0x0F,0x30,0x30,0x30,0x30,0x0F,0x00, // O
|
||
+0x00,0xFF,0xC3,0xC3,0xC3,0xC3,0x3C,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00, // P
|
||
+0x00,0xFC,0x03,0x03,0x03,0x03,0xFC,0x00,0x00,0x0F,0x30,0x30,0x33,0x0C,0x33,0x00, // Q
|
||
+0x00,0xFF,0xC3,0xC3,0xC3,0xC3,0x3C,0x00,0x00,0x3F,0x00,0x00,0x03,0x0C,0x30,0x00, // R
|
||
+0x00,0x3C,0xC3,0xC3,0xC3,0xC3,0x0C,0x00,0x00,0x0C,0x30,0x30,0x30,0x30,0x0F,0x00, // S
|
||
+0x00,0x03,0x03,0xFF,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, // T
|
||
+0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x0F,0x30,0x30,0x30,0x30,0x0F,0x00, // U
|
||
+0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x03,0x0C,0x30,0x30,0x0C,0x03,0x00, // V
|
||
+0x00,0xFF,0x00,0xC0,0xC0,0x00,0xFF,0x00,0x00,0x3F,0x0C,0x03,0x03,0x0C,0x3F,0x00, // W
|
||
+0x00,0x0F,0x30,0xC0,0xC0,0x30,0x0F,0x00,0x00,0x3C,0x03,0x00,0x00,0x03,0x3C,0x00, // X
|
||
+0x00,0x0F,0x30,0xC0,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, // Y
|
||
+0x00,0x03,0x03,0xC3,0xC3,0x33,0x0F,0x00,0x00,0x3C,0x33,0x30,0x30,0x30,0x30,0x00, // Z
|
||
+0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x00, // [
|
||
+0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x30,0x00, // <backslash>
|
||
+0x00,0x03,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00, // ]
|
||
+0x00,0x00,0xC0,0x30,0xC0,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00, // ^
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,0x30,0x30,0x00, // _
|
||
+0x00,0x00,0x03,0x0C,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // `
|
||
+0x00,0x00,0x30,0x30,0x30,0x30,0xC0,0x00,0x00,0x0C,0x33,0x33,0x33,0x33,0x3F,0x00, // a
|
||
+0x00,0xFF,0x30,0x30,0x30,0x30,0xC0,0x00,0x00,0x3F,0x30,0x30,0x30,0x30,0x0F,0x00, // b
|
||
+0x00,0xC0,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x0F,0x30,0x30,0x30,0x30,0x30,0x00, // c
|
||
+0x00,0xC0,0x30,0x30,0x30,0x30,0xFF,0x00,0x00,0x0F,0x30,0x30,0x30,0x30,0x3F,0x00, // d
|
||
+0x00,0xC0,0x30,0x30,0x30,0x30,0xC0,0x00,0x00,0x0F,0x33,0x33,0x33,0x33,0x33,0x00, // e
|
||
+0x00,0xC0,0xFC,0xC3,0xC3,0xC3,0x0C,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00, // f
|
||
+0x00,0xC0,0x30,0x30,0x30,0x30,0xC0,0x00,0x00,0x03,0xCC,0xCC,0xCC,0xCC,0x3F,0x00, // g
|
||
+0x00,0xFF,0x30,0x30,0x30,0x30,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x3F,0x00, // h
|
||
+0x00,0x00,0x30,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x3F,0x30,0x00,0x00,0x00, // i
|
||
+0x00,0x00,0x30,0x30,0x30,0xF3,0x00,0x00,0x00,0x30,0xC0,0xC0,0xC0,0x3F,0x00,0x00, // j
|
||
+0x00,0xFF,0x00,0x00,0x00,0xC0,0x30,0x00,0x00,0x3F,0x03,0x03,0x03,0x0C,0x30,0x00, // k
|
||
+0x00,0x00,0x03,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x3F,0x30,0x00,0x00,0x00, // l
|
||
+0x00,0xF0,0x30,0xC0,0xC0,0x30,0xF0,0x00,0x00,0x3F,0x00,0x0F,0x0F,0x00,0x3F,0x00, // m
|
||
+0x00,0xF0,0x30,0x30,0x30,0x30,0xC0,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x3F,0x00, // n
|
||
+0x00,0xC0,0x30,0x30,0x30,0x30,0xC0,0x00,0x00,0x0F,0x30,0x30,0x30,0x30,0x0F,0x00, // o
|
||
+0x00,0xF0,0x30,0x30,0x30,0x30,0xC0,0x00,0x00,0xFF,0x0C,0x0C,0x0C,0x0C,0x03,0x00, // p
|
||
+0x00,0xC0,0x30,0x30,0x30,0x30,0xF0,0x00,0x00,0x03,0x0C,0x0C,0x0C,0x0C,0xFF,0x00, // q
|
||
+0x00,0xF0,0xC0,0x30,0x30,0x30,0x30,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00, // r
|
||
+0x00,0xC0,0x30,0x30,0x30,0x30,0x30,0x00,0x00,0x30,0x33,0x33,0x33,0x33,0x0C,0x00, // s
|
||
+0x00,0x30,0x30,0xFF,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x0F,0x30,0x30,0x0C,0x00, // t
|
||
+0x00,0xF0,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0x30,0x30,0x30,0x0C,0x3F,0x00, // u
|
||
+0x00,0xF0,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0x0C,0x30,0x30,0x0C,0x03,0x00, // v
|
||
+0x00,0xF0,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x3F,0x30,0x0F,0x0F,0x30,0x3F,0x00, // w
|
||
+0x00,0x30,0xC0,0x00,0x00,0xC0,0x30,0x00,0x00,0x30,0x0C,0x03,0x03,0x0C,0x30,0x00, // x
|
||
+0x00,0xF0,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x03,0xCC,0xCC,0xCC,0xCC,0x3F,0x00, // y
|
||
+0x00,0x30,0x30,0x30,0x30,0xF0,0x30,0x00,0x00,0x30,0x3C,0x33,0x33,0x30,0x30,0x00, // z
|
||
+0x00,0xC0,0xC0,0xFC,0x3F,0x03,0x03,0x00,0x00,0x00,0x00,0x0F,0x3F,0x30,0x30,0x00, // {
|
||
+0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, // |
|
||
+0x00,0x03,0x03,0x3F,0xFC,0xC0,0xC0,0x00,0x00,0x30,0x30,0x3F,0x0F,0x00,0x00,0x00, // }
|
||
+0x00,0xC0,0x30,0xC0,0x00,0xF0,0x00,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x00, // ~
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x30,0x00, // ...
|
||
+};
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons16x16_h.h b/drivers/leds/vfd/controllers/fonts/icons16x16_h.h
|
||
new file mode 100644
|
||
index 000000000..4062959a7
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/fonts/icons16x16_h.h
|
||
@@ -0,0 +1,23 @@
|
||
+// icons16x16_h.h
|
||
+// Font type : Full (15 characters)
|
||
+// Font size : 16x16 pixels
|
||
+// Memory usage : 484 bytes
|
||
+
|
||
+const unsigned char icons16x16_H[484] = {
|
||
+0x10,0x10,0x01,0x0F,
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Empty
|
||
+0x00,0x00,0x20,0x08,0x18,0x30,0x04,0x40,0x03,0x80,0x7F,0xFC,0x80,0x02,0x80,0x02,0xBF,0xFA,0x80,0x02,0xBF,0xFA,0x80,0x02,0xBF,0xFA,0x80,0x02,0x80,0x02,0x7F,0xFC, // TV Channel
|
||
+0x38,0x00,0x00,0x00,0x38,0x00,0x01,0x80,0x39,0x9C,0x01,0x80,0x01,0x9C,0x01,0x80,0x01,0x9C,0x01,0x80,0x03,0xC0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x03,0xC0, // Temperaature
|
||
+0x0C,0x60,0x14,0x50,0x3F,0xF8,0x40,0x04,0x80,0x02,0x86,0xDA,0x86,0xDA,0x80,0x02,0xB6,0xDA,0xB6,0xDA,0x80,0x02,0xB6,0xC2,0xB6,0xC2,0x80,0x02,0x40,0x04,0x3F,0xF8, // Calendar
|
||
+0xFF,0xFE,0xAA,0xAA,0xFF,0xFE,0xA0,0x0A,0xA2,0x0A,0xA3,0x0A,0xA3,0x8A,0xA3,0xCA,0xA3,0x8A,0xA3,0x0A,0xA2,0x0A,0xA0,0x0A,0xFF,0xFE,0xAA,0xAA,0xFF,0xFE,0x00,0x00, // Media
|
||
+0x00,0x00,0x18,0x00,0x0C,0x00,0x06,0x60,0x03,0xC0,0x7F,0xFC,0xFF,0xFE,0xF8,0x06,0x98,0x02,0x90,0x02,0xF0,0x02,0x90,0x02,0x90,0x02,0xF8,0x06,0xFF,0xFE,0x7F,0xFC, // TV
|
||
+0x07,0xC0,0x04,0x40,0x04,0x40,0x04,0x40,0x07,0xC0,0x01,0x00,0x01,0x00,0x3F,0xF8,0x20,0x08,0x20,0x08,0xF8,0x3E,0x88,0x22,0x88,0x22,0x88,0x22,0xF8,0x3E,0x00,0x00, // Eth
|
||
+0x00,0x00,0x00,0x00,0x03,0xC0,0x1F,0xF8,0x3C,0x3C,0x71,0x8E,0x67,0xE6,0x0F,0xF0,0x1E,0x78,0x18,0x18,0x01,0x80,0x03,0xC0,0x03,0xC0,0x01,0x80,0x00,0x00,0x00,0x00, // Wifi
|
||
+0x08,0x00,0x0C,0x00,0x0E,0x00,0x0F,0x00,0x0F,0x80,0x0F,0xC0,0x0F,0xE0,0x0F,0xF0,0x0F,0xE0,0x0F,0xC0,0x0F,0x80,0x0F,0x00,0x0E,0x00,0x0C,0x00,0x08,0x00,0x00,0x00, // Play
|
||
+0x1C,0x38,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x3E,0x7C,0x1C,0x38,0x00,0x00, // Pause
|
||
+0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x0D,0x80,0x0D,0xA0,0x0D,0xB0,0x05,0xA0,0x07,0xA0,0x03,0xE0,0x01,0xC0,0x01,0x80,0x01,0x80,0x03,0xC0,0x03,0xC0,0x01,0x80, // USB
|
||
+0x03,0xFC,0x04,0x04,0x09,0x54,0x11,0x54,0x21,0x54,0x21,0x54,0x20,0x04,0x20,0x04,0x2E,0xE4,0x28,0x94,0x2E,0x94,0x22,0x94,0x2E,0xE4,0x20,0x04,0x3F,0xFC,0x00,0x00, // SD
|
||
+0x00,0x00,0x01,0x00,0x01,0x80,0x01,0x40,0x09,0x20,0x05,0x20,0x03,0x40,0x01,0x80,0x01,0x80,0x03,0x40,0x05,0x20,0x09,0x20,0x01,0x40,0x01,0x80,0x01,0x00,0x00,0x00, // BT
|
||
+0x3F,0xF8,0x40,0x04,0x80,0x02,0x9E,0xF2,0x9E,0xF2,0x9E,0xF2,0x9E,0xF2,0x80,0x02,0x9E,0xF2,0x9E,0xF2,0x9E,0xF2,0x9E,0xF2,0x80,0x02,0x40,0x04,0x3F,0xF8,0x00,0x00, // Apps
|
||
+0x03,0xC0,0x23,0xC4,0x7F,0xFE,0x3F,0xFC,0x3F,0xFC,0x3E,0x7C,0xFC,0x3F,0xF8,0x1F,0xF8,0x1F,0xFC,0x3F,0x3E,0x7C,0x3F,0xFC,0x3F,0xFC,0x7F,0xFE,0x23,0xC4,0x03,0xC0, // Setup
|
||
+};
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons16x16_v.h b/drivers/leds/vfd/controllers/fonts/icons16x16_v.h
|
||
new file mode 100644
|
||
index 000000000..0ce317220
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/fonts/icons16x16_v.h
|
||
@@ -0,0 +1,23 @@
|
||
+// icons16x16_v.h
|
||
+// Font type : Full (15 characters)
|
||
+// Font size : 16x16 pixels
|
||
+// Memory usage : 484 bytes
|
||
+
|
||
+const unsigned char icons16x16_V[484] = {
|
||
+0x10,0x10,0x01,0x0F,
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Empty
|
||
+0xC0,0x20,0x22,0x24,0x24,0x28,0x30,0x30,0x30,0x28,0x24,0x24,0x22,0x20,0xC0,0x00,0x7F,0x80,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x80,0x7F,0x00, // TV Channel
|
||
+0x00,0x00,0x15,0x15,0x15,0x00,0x00,0xF8,0xF8,0x00,0x00,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xFC,0xFF,0xFF,0xFC,0x78,0x01,0x01,0x01,0x00,0x00, // Temperaature
|
||
+0xF0,0x08,0x04,0x06,0x05,0x67,0x64,0x04,0x64,0x67,0x05,0x66,0x64,0x08,0xF0,0x00,0x3F,0x40,0x9B,0x9B,0x80,0x9B,0x9B,0x80,0x9B,0x9B,0x80,0x83,0x83,0x40,0x3F,0x00, // Calendar
|
||
+0xFF,0x05,0xFF,0x05,0x07,0x05,0xF7,0xE5,0xC7,0x85,0x07,0x05,0xFF,0x05,0xFF,0x00,0x7F,0x50,0x7F,0x50,0x70,0x50,0x77,0x53,0x71,0x50,0x70,0x50,0x7F,0x50,0x7F,0x00, // Media
|
||
+0xC0,0xE0,0xE0,0xE2,0xE6,0x6C,0x78,0x70,0x70,0x78,0x68,0x60,0x60,0xE0,0xC0,0x00,0x7F,0xE4,0xE4,0xFF,0xE1,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0x7F,0x00, // TV
|
||
+0x00,0x00,0x80,0x80,0x80,0x9F,0x91,0xF1,0x91,0x9F,0x80,0x80,0x80,0x00,0x00,0x00,0x7C,0x44,0x47,0x44,0x7C,0x00,0x00,0x00,0x00,0x00,0x7C,0x44,0x47,0x44,0x7C,0x00, // Eth
|
||
+0x00,0x60,0x70,0x38,0x98,0xD8,0xCC,0xEC,0xEC,0xCC,0xD8,0x98,0x38,0x70,0x60,0x00,0x00,0x00,0x00,0x03,0x03,0x01,0x19,0x3C,0x3C,0x19,0x01,0x03,0x03,0x00,0x00,0x00, // Wifi
|
||
+0x00,0x00,0x00,0x00,0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00, // Play
|
||
+0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x3F,0x7F,0x7F,0x7F,0x3F,0x00,0x00,0x3F,0x7F,0x7F,0x7F,0x3F,0x00,0x00, // Pause
|
||
+0x00,0x00,0x00,0x00,0x70,0xF0,0x00,0xFE,0xFE,0x00,0xE0,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x63,0xFF,0xFF,0x66,0x03,0x00,0x00,0x00,0x00,0x00, // USB
|
||
+0x00,0x00,0xF0,0x08,0x04,0x02,0x01,0x3D,0x01,0x3D,0x01,0x3D,0x01,0xFF,0x00,0x00,0x00,0x00,0x7F,0x40,0x57,0x55,0x5D,0x40,0x5F,0x51,0x51,0x4E,0x40,0x7F,0x00,0x00, // SD
|
||
+0x00,0x00,0x00,0x00,0x10,0x20,0x40,0xFE,0x84,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x04,0x02,0x7F,0x21,0x12,0x0C,0x00,0x00,0x00,0x00,0x00, // BT
|
||
+0xFC,0x02,0x01,0x79,0x79,0x79,0x79,0x01,0x79,0x79,0x79,0x79,0x01,0x02,0xFC,0x00,0x1F,0x20,0x40,0x4F,0x4F,0x4F,0x4F,0x40,0x4F,0x4F,0x4F,0x4F,0x40,0x20,0x1F,0x00, // Apps
|
||
+0xC0,0xC4,0xFE,0xFC,0xFC,0x7C,0x3F,0x1F,0x1F,0x3F,0x7C,0xFC,0xFC,0xFE,0xC4,0xC0,0x03,0x23,0x7F,0x3F,0x3F,0x3E,0xFC,0xF8,0xF8,0xFC,0x3E,0x3F,0x3F,0x7F,0x23,0x03, // Setup
|
||
+};
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons32x32_h.h b/drivers/leds/vfd/controllers/fonts/icons32x32_h.h
|
||
new file mode 100644
|
||
index 000000000..b18cf4807
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/fonts/icons32x32_h.h
|
||
@@ -0,0 +1,23 @@
|
||
+// icons32x32_h.h
|
||
+// Font type : Full (15 characters)
|
||
+// Font size : 32x32 pixels
|
||
+// Memory usage : 1924 bytes
|
||
+
|
||
+const unsigned char icons32x32_H[1924] = {
|
||
+0x20,0x20,0x01,0x0F,
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Empty
|
||
+0x01,0x80,0x00,0xC0,0x00,0xC0,0x01,0x80,0x00,0x60,0x03,0x00,0x00,0x30,0x06,0x00,0x00,0x18,0x0C,0x00,0x00,0x0C,0x18,0x00,0x00,0x06,0x30,0x00,0x00,0x03,0x60,0x00,0x00,0x01,0xC0,0x00,0x03,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xF0,0x0E,0x00,0x00,0x38,0x0C,0x00,0x00,0x18,0x0C,0x00,0x00,0x18,0x0C,0x00,0x00,0x18,0x0C,0xFF,0xFF,0x98,0x0C,0xFF,0xFF,0x98,0x0C,0x00,0x00,0x18,0x0C,0x00,0x00,0x18,0x0C,0xFF,0xFF,0x98,0x0C,0xFF,0xFF,0x98,0x0C,0x00,0x00,0x18,0x0C,0x00,0x00,0x18,0x0C,0xFF,0xFF,0x98,0x0C,0xFF,0xFF,0x98,0x0C,0x00,0x00,0x18,0x0E,0x00,0x00,0x18,0x07,0x00,0x00,0x70,0x03,0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // TV Channel
|
||
+0x00,0x01,0xC0,0x00,0x00,0x03,0x60,0x00,0x00,0x06,0x30,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x10,0x00,0x00,0x04,0x90,0x00,0x00,0x05,0xD0,0x00,0x00,0x05,0xD0,0x00,0x00,0x05,0xD0,0x00,0x00,0x05,0xD0,0x00,0x00,0x05,0xD0,0x00,0x00,0x05,0xD0,0x00,0x00,0x05,0xD0,0x00,0x00,0x0D,0xD8,0x00,0x00,0x19,0xCC,0x00,0x00,0x13,0xE4,0x00,0x00,0x37,0xF6,0x00,0x00,0x27,0xF2,0x00,0x00,0x27,0xF2,0x00,0x00,0x27,0xF2,0x00,0x00,0x37,0xF6,0x00,0x00,0x13,0xE4,0x00,0x00,0x18,0x0C,0x00,0x00,0x0E,0x38,0x00,0x00,0x03,0xE0,0x00,0x00,0x00,0x00,0x00, // Temperaature
|
||
+0x07,0xC0,0x0F,0x80,0x0F,0xC0,0x0F,0xC0,0x0E,0xC0,0x0D,0xC0,0x0C,0xC0,0x0C,0xC0,0x3C,0xFF,0xFC,0xF0,0x7C,0xFF,0xFC,0xF8,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFC,0xE0,0x00,0x00,0x1C,0xC0,0x00,0x00,0x0C,0xC0,0x00,0x00,0x0C,0xC0,0x00,0x00,0x0C,0xC0,0x3C,0xF3,0xCC,0xC0,0x3C,0xF3,0xCC,0xC0,0x3C,0xF3,0xCC,0xC0,0x3C,0xF3,0xCC,0xC0,0x00,0x00,0x0C,0xC0,0x00,0x00,0x0C,0xCF,0x3C,0xF3,0xCC,0xCF,0x3C,0xF3,0xCC,0xCF,0x3C,0xF3,0xCC,0xCF,0x3C,0xF3,0xCC,0xC0,0x00,0x00,0x0C,0xC0,0x00,0x00,0x0C,0xCF,0x3C,0xF0,0x0C,0xCF,0x3C,0xF0,0x0C,0xCF,0x3C,0xF0,0x0C,0xCF,0x3C,0xF0,0x0C,0xC0,0x00,0x00,0x0C,0xE0,0x00,0x00,0x1C,0x7F,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0xF0, // Calendar
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC6,0x31,0x8C,0x63,0xC6,0x31,0x8C,0x63,0xC6,0x31,0x8C,0x63,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC3,0x00,0x00,0xC3,0xC3,0x18,0x00,0xC3,0xC3,0x1E,0x00,0xC3,0xC3,0x1F,0x80,0xC3,0xC3,0x1F,0xE0,0xC3,0xC3,0x1F,0xF0,0xC3,0xC3,0x1F,0xF8,0xC3,0xC3,0x1F,0xF0,0xC3,0xC3,0x1F,0xE0,0xC3,0xC3,0x1F,0x80,0xC3,0xC3,0x1E,0x00,0xC3,0xC3,0x18,0x00,0xC3,0xC3,0x00,0x00,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC6,0x31,0x8C,0x63,0xC6,0x31,0x8C,0x63,0xC6,0x31,0x8C,0x63,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Media
|
||
+0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0xF0,0x08,0x00,0x00,0x78,0x1C,0x00,0x00,0x3C,0x3C,0x00,0x00,0x1E,0x78,0x00,0x00,0x0F,0xF0,0x00,0x00,0x07,0xE0,0x00,0x1F,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0xFC,0x7F,0xFF,0xFF,0xFE,0x7F,0xF0,0x00,0x3E,0x7F,0xC0,0x00,0x1E,0x7F,0xC0,0x00,0x0E,0x73,0xC0,0x00,0x0E,0x71,0x80,0x00,0x0E,0x73,0x80,0x00,0x0E,0x7F,0x80,0x00,0x0E,0x7F,0x80,0x00,0x0E,0x73,0x80,0x00,0x0E,0x71,0x80,0x00,0x0E,0x73,0x80,0x00,0x0E,0x7F,0x80,0x00,0x0E,0x7F,0xC0,0x00,0x0E,0x7F,0xC0,0x00,0x1E,0x7F,0xE0,0x00,0x1E,0x7F,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00, // TV
|
||
+0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0xC0,0x0C,0x00,0x00,0xC0,0x0C,0x00,0x00,0xC0,0x0C,0x00,0x00,0xC0,0x0C,0x00,0x00,0xC0,0xFF,0xC0,0x0F,0xFC,0xFF,0xC0,0x0F,0xFC,0xC0,0xC0,0x0C,0x0C,0xC0,0xC0,0x0C,0x0C,0xC0,0xC0,0x0C,0x0C,0xC0,0xC0,0x0C,0x0C,0xC0,0xC0,0x0C,0x0C,0xC0,0xC0,0x0C,0x0C,0xFF,0xC0,0x0F,0xFC,0xFF,0xC0,0x0F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Eth
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x00,0x00,0x1F,0xF8,0x00,0x00,0x7F,0xFE,0x00,0x01,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xE0,0x0F,0xF8,0x1F,0xF0,0x1F,0xE0,0x07,0xF8,0x3F,0x80,0x01,0xFC,0x3F,0x07,0xE0,0xFC,0x3E,0x1F,0xF8,0x7C,0x1C,0x3F,0xFC,0x38,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFC,0x3F,0x80,0x03,0xF8,0x1F,0xC0,0x03,0xE0,0x07,0xC0,0x01,0xC3,0xC3,0x80,0x00,0x07,0xE0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Wifi
|
||
+0x00,0xC0,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0xFF,0x80,0x00,0x00,0xFF,0xC0,0x00,0x00,0xFF,0xE0,0x00,0x00,0xFF,0xF0,0x00,0x00,0xFF,0xF8,0x00,0x00,0xFF,0xFC,0x00,0x00,0xFF,0xFE,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0xFF,0xFC,0x00,0x00,0xFF,0xF8,0x00,0x00,0xFF,0xF0,0x00,0x00,0xFF,0xE0,0x00,0x00,0xFF,0xC0,0x00,0x00,0xFF,0x80,0x00,0x00,0xFF,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Play
|
||
+0x03,0xF0,0x0F,0xC0,0x07,0xF8,0x1F,0xE0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x0F,0xFC,0x3F,0xF0,0x07,0xF8,0x1F,0xE0,0x03,0xF0,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Pause
|
||
+0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x60,0x06,0x00,0x00,0x66,0x66,0x00,0x00,0x66,0x66,0x00,0x00,0x66,0x66,0x00,0x00,0x66,0x66,0x00,0x00,0x60,0x06,0x00,0x00,0x60,0x06,0x00,0x01,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0xC0,0x06,0x00,0x00,0x60,0x06,0x07,0x70,0x60,0x06,0x08,0x88,0x60,0x06,0x08,0x88,0x60,0x06,0x08,0x88,0x60,0x06,0x0F,0xF8,0x60,0x06,0x00,0x00,0x60,0x06,0x08,0x70,0x60,0x06,0x08,0x88,0x60,0x06,0x08,0x88,0x60,0x06,0x08,0x88,0x60,0x06,0x07,0x08,0x60,0x06,0x00,0x00,0x60,0x06,0x0F,0xF0,0x60,0x06,0x00,0x08,0x60,0x06,0x00,0x08,0x60,0x06,0x00,0x08,0x60,0x06,0x0F,0xF0,0x60,0x06,0x00,0x00,0x60,0x07,0xFF,0xFF,0xE0,0x03,0xFF,0xFF,0xC0, // USB
|
||
+0x00,0x0F,0xFF,0xF0,0x00,0x1F,0xFF,0xF0,0x00,0x38,0x00,0x30,0x00,0x70,0x00,0x30,0x00,0xE3,0x33,0x30,0x01,0xC3,0x33,0x30,0x03,0x83,0x33,0x30,0x07,0x03,0x33,0x30,0x0E,0x03,0x33,0x30,0x0C,0x03,0x33,0x30,0x0C,0x03,0x33,0x30,0x0C,0x03,0x33,0x30,0x0C,0x00,0x00,0x30,0x0C,0x00,0x00,0x30,0x0C,0x00,0x00,0x30,0x0C,0x00,0x00,0x30,0x0C,0xFC,0xFC,0x30,0x0C,0xFC,0xFE,0x30,0x0C,0xC0,0xC7,0x30,0x0C,0xC0,0xC3,0x30,0x0C,0xFC,0xC3,0x30,0x0C,0xFC,0xC3,0x30,0x0C,0x0C,0xC3,0x30,0x0C,0x0C,0xC7,0x30,0x0C,0xFC,0xFE,0x30,0x0C,0xFC,0xFC,0x30,0x0C,0x00,0x00,0x30,0x0C,0x00,0x00,0x30,0x0F,0xFF,0xFF,0xF0,0x0F,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // SD
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0x70,0x00,0x00,0x03,0x38,0x00,0x00,0xC3,0x1C,0x00,0x00,0xE3,0x0E,0x00,0x00,0x73,0x0E,0x00,0x00,0x3B,0x1C,0x00,0x00,0x1F,0x38,0x00,0x00,0x0F,0x70,0x00,0x00,0x07,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0x70,0x00,0x00,0x1F,0x38,0x00,0x00,0x3B,0x1C,0x00,0x00,0x73,0x0E,0x00,0x00,0xE3,0x0E,0x00,0x00,0xC3,0x1C,0x00,0x00,0x03,0x38,0x00,0x00,0x03,0x70,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // BT
|
||
+0x0F,0xFF,0xFF,0xC0,0x1F,0xFF,0xFF,0xE0,0x38,0x00,0x00,0x70,0x70,0x00,0x00,0x38,0xE0,0x00,0x00,0x1C,0xC0,0x00,0x00,0x0C,0xC1,0xFC,0xFE,0x0C,0xC3,0xFC,0xFF,0x0C,0xC3,0xFC,0xFF,0x0C,0xC3,0xFC,0xFF,0x0C,0xC3,0xFC,0xFF,0x0C,0xC3,0xFC,0xFF,0x0C,0xC3,0xFC,0xFF,0x0C,0xC3,0xFC,0xFF,0x0C,0xC0,0x00,0x00,0x0C,0xC0,0x00,0x00,0x0C,0xC3,0xFC,0xFF,0x0C,0xC3,0xFC,0xFF,0x0C,0xC3,0xFC,0xFF,0x0C,0xC3,0xFC,0xFF,0x0C,0xC3,0xFC,0xFF,0x0C,0xC3,0xFC,0xFF,0x0C,0xC3,0xFC,0xFF,0x0C,0xC1,0xFC,0xFE,0x0C,0xC0,0x00,0x00,0x0C,0xE0,0x00,0x00,0x1C,0x70,0x00,0x00,0x38,0x38,0x00,0x00,0x70,0x1F,0xFF,0xFF,0xE0,0x0F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Apps
|
||
+0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x03,0x07,0xF0,0xC0,0x07,0xCF,0xF1,0xE0,0x0F,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xF8,0x1F,0xE0,0x0F,0xF0,0x0F,0xF8,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0x1F,0xF0,0x0F,0xF0,0x07,0xF8,0x1F,0xE0,0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x0F,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF0,0x07,0x8F,0xF1,0xE0,0x03,0x0F,0xE0,0xC0,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x07,0xE0,0x00, // Setup
|
||
+};
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons32x32_v.h b/drivers/leds/vfd/controllers/fonts/icons32x32_v.h
|
||
new file mode 100644
|
||
index 000000000..001ce8060
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/fonts/icons32x32_v.h
|
||
@@ -0,0 +1,23 @@
|
||
+// icons32x32_v.h
|
||
+// Font type : Full (15 characters)
|
||
+// Font size : 32x32 pixels
|
||
+// Memory usage : 1924 bytes
|
||
+
|
||
+const unsigned char icons32x32_V[1924] = {
|
||
+0x20,0x20,0x01,0x0F,
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Empty
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00,0x80,0xC0,0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0x0E,0x06,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x87,0x87,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x06,0x0E,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x0F,0x1C,0x38,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x38,0x18,0x0F,0x07,0x00,0x00,0x00, // TV Channel
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x06,0x03,0x01,0x03,0x06,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xF0,0xF8,0xF0,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x70,0x18,0xCF,0xE0,0xFF,0xFF,0xFF,0xE0,0xCF,0x18,0x70,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1C,0x30,0x27,0x6F,0x4F,0x4F,0x4F,0x6F,0x27,0x30,0x1C,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Temperaature
|
||
+0xC0,0xE0,0xF0,0xF0,0xFE,0xFF,0xC7,0xC3,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xFF,0xFF,0xC3,0xC7,0xFF,0xFE,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0xF0,0xF0,0xF0,0xF0,0x00,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x7F,0xE0,0xC0,0xCF,0xCF,0xCF,0xCF,0xC0,0xC0,0xCF,0xCF,0xCF,0xCF,0xC0,0xC0,0xCF,0xCF,0xCF,0xCF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0x7F,0x3F,0x00,0x00, // Calendar
|
||
+0xFC,0xFC,0x8C,0x8C,0x8C,0xFC,0xFC,0x8C,0x8C,0x8C,0xFC,0xFC,0x8C,0x8C,0x8C,0xFC,0xFC,0x8C,0x8C,0x8C,0xFC,0xFC,0x8C,0x8C,0x8C,0xFC,0xFC,0x8C,0x8C,0x8C,0xFC,0xFC,0xFF,0xFF,0x01,0x01,0x01,0x01,0xFF,0xFF,0x01,0x01,0x01,0xFD,0xFD,0xF9,0xF9,0xF1,0xF1,0xE1,0xE1,0xC1,0x81,0x01,0x01,0x01,0xFF,0xFF,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0xC0,0xC0,0xC0,0xDF,0xDF,0xCF,0xCF,0xC7,0xC7,0xC3,0xC3,0xC1,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0x1F,0x1F,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18,0x1F,0x1F, // Media
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x1E,0x3C,0x78,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x80,0xC0,0xE0,0xF0,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0x3C,0x3C,0x1D,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1D,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x3C,0x7C,0xFC,0xF8,0xF0,0x00,0x00,0xFF,0xFF,0xFF,0x18,0x18,0xBD,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x3F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7E,0x78,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x7C,0x7F,0x3F,0x1F,0x00, // TV
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC3,0xC3,0xC3,0xC3,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x30,0x30,0x3F,0x3F,0x30,0x30,0xF0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF0,0x30,0x30,0x3F,0x3F,0x30,0x30,0xF0,0xF0,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x3F,0x3F,0x00,0x00, // Eth
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xE0,0xE0,0xF0,0xF0,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x7C,0x7E,0x7F,0x3F,0x1F,0x0F,0x87,0xC7,0xE3,0xE3,0xF1,0xF1,0xF1,0xF1,0xF1,0xF1,0xE3,0xE3,0xC7,0x87,0x0F,0x1F,0x3F,0x7F,0x7E,0x7C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1E,0x1F,0x1F,0x0F,0x07,0xC7,0xE3,0xF1,0xF1,0xF1,0xF1,0xE3,0xC7,0x07,0x0F,0x1F,0x1F,0x1E,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0F,0x0F,0x0F,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Wifi
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Play
|
||
+0x00,0x00,0x00,0x00,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0x00,0x00,0x00,0x00,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x0F,0x00,0x00,0x00,0x00,0x0F,0x1F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1F,0x0F,0x00,0x00,0x00,0x00, // Pause
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x03,0x03,0x7B,0x7B,0x03,0x03,0x7B,0x7B,0x03,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFC,0x06,0x06,0x07,0x07,0x06,0xE6,0x16,0x16,0x16,0xE6,0x16,0x16,0x16,0xE6,0x07,0x07,0x06,0x06,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x3D,0x41,0x41,0x41,0x39,0x05,0x05,0x05,0x79,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xD1,0xD1,0xD1,0xD1,0xD1,0xD1,0xD1,0xD1,0xCE,0xC0,0xC0,0xC0,0xC0,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00, // USB
|
||
+0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0x03,0xF3,0xF3,0x03,0x03,0xF3,0xF3,0x03,0x03,0xF3,0xF3,0x03,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x3F,0x3F,0x33,0x33,0xF3,0xF3,0x00,0x00,0xFF,0xFF,0x03,0x03,0x03,0x87,0xFE,0xFC,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x30,0x30,0x33,0x33,0x33,0x33,0x33,0x33,0x30,0x30,0x33,0x33,0x33,0x33,0x33,0x33,0x31,0x30,0x30,0x30,0x3F,0x3F,0x00,0x00,0x00,0x00, // SD
|
||
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0E,0x1C,0x38,0x70,0xFF,0xFF,0xC0,0xE0,0x70,0x39,0x1F,0x0F,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0xFF,0xFF,0x03,0x07,0x0E,0x9C,0xF8,0xF0,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // BT
|
||
+0xF0,0xF8,0x1C,0x0E,0x07,0x03,0x83,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x83,0x03,0x07,0x0E,0x1C,0xF8,0xF0,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x03,0x07,0x0E,0x1C,0x38,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x1C,0x0E,0x07,0x03,0x00,0x00, // Apps
|
||
+0x00,0x00,0x00,0xC0,0xE0,0xF0,0xF8,0xF8,0xF0,0xF0,0xE0,0xE0,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xE0,0xE0,0xE0,0xF0,0xF8,0xF8,0xF0,0xE0,0xC0,0x00,0x00,0x00,0xE0,0xE0,0xE0,0xE0,0xF1,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x0F,0x07,0x07,0x07,0x07,0x07,0x07,0x0F,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF1,0xF0,0xE0,0xE0,0xE0,0x07,0x07,0x07,0x0F,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xF0,0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xF0,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x8F,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x03,0x07,0x0F,0x1F,0x1F,0x0F,0x07,0x07,0x07,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x07,0x07,0x07,0x0F,0x1F,0x1F,0x0F,0x07,0x03,0x00,0x00,0x00, // Setup
|
||
+};
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/00none.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/00none.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..3245df4a86e17aa2e5cea2657ae5dc5061bf9465
|
||
GIT binary patch
|
||
literal 126
|
||
lcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>QF$GB!0RWzV1k(Tj
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/01channel.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/01channel.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..7a3cc5b631af74bf00291c0923e03a298f9147f4
|
||
GIT binary patch
|
||
literal 126
|
||
zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q!Ga1L3=9$m3=Awlh0F~M4E28)7#f%$
|
||
Nc>gc#G)Nw#4glm_5jOw;
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/02temp.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/02temp.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..28b5f7400924b5567e1322f07f14e0c0bb73e62a
|
||
GIT binary patch
|
||
literal 126
|
||
zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q87!c}Aeym(fx&VPgl0senGY~9us=Y>
|
||
GATa=(jt+PL
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/03calendar.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/03calendar.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..fdcf03742025d8855739372decb9a5bbcc27ed32
|
||
GIT binary patch
|
||
literal 126
|
||
zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q8F&&H7(@aX80>#AFgUO<Ff=eRFtpu*
|
||
XU=Vv7kPX6M_8}k}h(T<ST96(9WmOY#
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/04media.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/04media.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..9de7ab50e0e984cccff16d424bc55648fab2526c
|
||
GIT binary patch
|
||
literal 126
|
||
zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q8UFucU|6+^0ZcF8VqjPV#EU_=3y4oa
|
||
PX&@gY4w6S!4>Az|E(#Ys
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/05tv.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/05tv.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..3d6f017363f81f5f3e2debd608cf4d46b4af0351
|
||
GIT binary patch
|
||
literal 126
|
||
zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q!GaP%k_U*{5*Qem4=^y)|6ySG|Br#;
|
||
Z2O9&!3?>GK2|)Y-N`u%SagaPn9RUA)5>5aB
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/10eth.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/10eth.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..a13e4095196e47fb13b266f20f61bccece0b1df7
|
||
GIT binary patch
|
||
literal 126
|
||
zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q8Q2dnFt7j>z%Ymp(gniyKNuJkI3V~3
|
||
N(C`i=1P1Xz005dK4Ilsj
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/11wifi.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/11wifi.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..8067df68b01637d2b294abfb1c3083aaae7ba2bb
|
||
GIT binary patch
|
||
literal 126
|
||
zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q;eyNu7#QS#FfiEIFfbJMF)*Y*V_@L_
|
||
az`!6^!N4FP!N9=Sz`y`f1HvFS3;+PyLJhtE
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/12play.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/12play.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..5ba5a4712b22bc46f20342ae37befaff8037ec5b
|
||
GIT binary patch
|
||
literal 126
|
||
zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q890E#JV49`#QY%K0K^A?_yG`qfYKm7
|
||
ONSpzp4x}EW4+H>kstV2k
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/13pause.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/13pause.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..a3a1299cb341b845942184ae3cc73c157ae63793
|
||
GIT binary patch
|
||
literal 126
|
||
tcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q8DuON80>0D#~^(m000At4($K{
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/14usb.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/14usb.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..33d344327790ff573f65018ea893f389c22e4589
|
||
GIT binary patch
|
||
literal 126
|
||
zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&4=_#hZ8044ta{|{y{HZU;2FfWkJy8wtcFfgzJ
|
||
VX?7rHegKp|fKbB>WP>nB4**9g59$B_
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/15sd.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/15sd.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..308195a99c14fca77a762879e274dcdbaa4b6dc0
|
||
GIT binary patch
|
||
literal 126
|
||
zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q8JPbtFtD&NFmQ%2FbD#%A`~kC#Xwl^
|
||
W3DC?bKpKdZKs1mK61NBH0|5Z4$_<48
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/16bt.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/16bt.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..8724944f102bd46f80d1440b807d20c48d759f0c
|
||
GIT binary patch
|
||
literal 126
|
||
zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q!Ga)Fj155Sz`($%z`(!?#LPf8SgZlU
|
||
P28n^>Kx)9^3=jYS7orG#
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/17apps.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/17apps.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..a6a7517e7c22a623a77b837fc920f93022763d74
|
||
GIT binary patch
|
||
literal 126
|
||
zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q8SH;BFgUO<Ff=eRFwFaeigAg7)PwYa
|
||
F008)Z70&<w
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/16/18setup.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/16/18setup.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..543d838ed38a3e34e72fbd4fc4b12ea1cdf559a3
|
||
GIT binary patch
|
||
literal 126
|
||
zcmZ?rtz&=yJ0PV2!~#&v$iN7eZ~&8-#Q*>Q8JG_+Feo2kV5tAcz+nFeg6(P;82;EZ
|
||
VF#M2*U=SN529pP=1?d6l1pwgL79{`x
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/00none.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/00none.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..6066e1b32a55670d779e65752ae9073ed1bd45f1
|
||
GIT binary patch
|
||
literal 190
|
||
ncmZ?r-Nyg{c0fu4h!voik%1A&Vqj<hlbFQ+|Nk)s=_~>OKAi<~
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/01channel.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/01channel.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..9309fd344925f6a3860231d9acea04d38d7bfd88
|
||
GIT binary patch
|
||
literal 190
|
||
zcma)!u?>YV3`Cz537UvHB_$;#6$L#zFv1^!F_;Er6h>f!!vQ*)f6_bK^4Zh8^Jw(a
|
||
zIqi#K-obkN*Cb&pne4s<=qpGOVuGrNuz+QPbkx$>z~I}Gc#yVO_+$3lRKu_QGAZ-w
|
||
E0{fOHbpQYW
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/02temp.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/02temp.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..2b4f8281ff2e024e640ca330e57ad0ba406b97e0
|
||
GIT binary patch
|
||
literal 190
|
||
zcmZ?r-Nyg{c0fu4h!voik%1A&Vqj<hlbFQ+|Nj{n7!NQoFeflDuo*Bgum}*q6Brm+
|
||
rFW|<!Hy9Ws&oD3uKVe`n|Hi<e{t1CWe2};V4+8_A1<=k13?Kji82}i5
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/03calendar.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/03calendar.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..9950c54ad04a2c1e149d6a273b4b569b1f372e1b
|
||
GIT binary patch
|
||
literal 190
|
||
zcmZ?r-Nyg{c0fu4h!voik%1A&Vqj<hlbFQ+|Nj}-5AZkeAK*X0cYyZ*4-ne?|MQ{d
|
||
z|DPW~xj!KMfPq2g00RRL9NT<8a{w7b<<0}ekTFdCd7BSB$QUI40BC0Y|NlSi|Ns90
|
||
E00$^XOaK4?
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/04media.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/04media.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..9bfc2f06564e8a14c687daf9f58a64e463b3493e
|
||
GIT binary patch
|
||
literal 190
|
||
zcmZ?r-Nyg{c0fu4h!voik%1A&Vqj<hlbFQ+|Nr5FKsFd0Gwex*VVKxq28P3jC4g8C
|
||
mh~*oA_yG`q0OB7|8pH>RgXBT#fa+m-VP=77m>AqrAOiquflFcl
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/05tv.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/05tv.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..a070256966905ec748a0d9ac9fa42d63551004ef
|
||
GIT binary patch
|
||
literal 190
|
||
zcmY+-u?@m75QX926;xpX6et-Y3KBiTAewacWXJ`Bcm$Uz5RYdP3QqcTclP;wxjtB8
|
||
zbUN8_6$q{%*|S@;{uh$IWk?XR6}NQ@(;kKa`U!RwHid&UpQTrn-mx;qOmE%YZpqo=
|
||
Us?~pI*>`QeSbOh1-ZlF-KGst+lK=n!
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/10eth.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/10eth.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..e151b42c22b648d2a566b010b68d96ecbc82f73c
|
||
GIT binary patch
|
||
literal 190
|
||
zcmZ?r-Nyg{c0fu4h!voik%1A&Vqj<hlbFQ+|Nj{n>_0%TfdK;pHVl(z2I@z`{Qv(S
|
||
Z0AU^m1{4ew{R6@W4)E|`!!UW6YXH3<Dg6Kd
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/11wifi.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/11wifi.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..e5c9624fc9402309f22a436fa9c351c449f0ad9e
|
||
GIT binary patch
|
||
literal 190
|
||
zcmZXMF$w}v3`8gVBIRB{h~*w(tNmc_jRbQt`LGws5w=Y6G3Kky>cE=`Lzv6;fsfXV
|
||
zIXQnJP+ow({of+uSh4})!2Jn|&=S!&!X}qpjJ+!L%GOu$+o|?t{2@28)#B2MaieWh
|
||
NjGbveGP=_6s~3s;Ewlgt
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/12play.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/12play.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..cb8374d3bfffdf5785a32ab84025a053b381c637
|
||
GIT binary patch
|
||
literal 190
|
||
zcmZXNu?>JQ3<N)$P%;GtJv(_alu<GQB?ZFVC+V<sw&j1@`*CW-Mp<E*6csutdj6-(
|
||
tlq&NE7u@i`3rNa<3JowMhQyE<yxVc_nKgUt^-h4sE#E}$KN_{dj1R>GFlPV&
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/13pause.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/13pause.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..06f1de82ebc6a52282defae7cb56a0afc3f845c8
|
||
GIT binary patch
|
||
literal 190
|
||
zcmZ?r-Nyg{c0fu4h!voik%1A&Vqj<hlbFQ+|Nj}7Kky%5{~`Z?|Bw9#dSH-UAUk2M
|
||
F0RW>YM%MrU
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/14usb.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/14usb.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..3e8e8ec5af7b4f32915347a25d84c6816098ac0b
|
||
GIT binary patch
|
||
literal 190
|
||
zcmZ?r-Nyg{c0fu4h!voik%1A&Vqj<hlbFQ+|Nj{n>i<D-0viKES{f<_i2*U=|Njll
|
||
t|NkEV^Vka#*f=^6nEwYv6$hF)I|oFZ{{xT)v7s2uXGmcG|NjBVOaL^{Cc*#!
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/15sd.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/15sd.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..fecbe0838b49cecd089a67f264191da180232d2e
|
||
GIT binary patch
|
||
literal 190
|
||
zcmZ?r-Nyg{c0fu4h!voik%1A&Vqj<hlbFQ+|Nj{n`2T-kkOyK51_OoyAbxCYz<Ai$
|
||
zfVtV&fSuXcfDedykTC;;0S_|%^T&Ya&p!j61IK~*Fpv$!JV2TUC<c-Pse$U@|Ns93
|
||
I2*X?h0HwVt+yDRo
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/16bt.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/16bt.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..6524fc44634ba8c04d20c64d7eb5f9828544ac13
|
||
GIT binary patch
|
||
literal 190
|
||
zcmZ?r-Nyg{c0fu4h!voik%1A&Vqj<hlbFQ+|Njw!%s?h{0}vko;s-!n0K^sy42NYH
|
||
z7#{O6Fcbr^HIOY26ypcVv4hkcfM5_CBnFZLsR5}4=>h2lnE^HnroI8lXMh6$MHLly
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/17apps.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/17apps.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..631d77c31447fe6ff8a68ecb302d52615f121fc2
|
||
GIT binary patch
|
||
literal 190
|
||
zcmZ?r-Nyg{c0fu4h!voik%1A&Vqj<hlbFQ+|Nj~I|NlQA|Ns933kHUQ0tN<)2Mi1{
|
||
q2N)Q54*vPabNJ7HoEW4Agz>2XnE_Js0B9!2Y>*uwyFhj_Kmh=7C`D-i
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/32/18setup.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/32/18setup.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..ebd36fd2b4c614ccaa9227798bb25673fb9b8bc1
|
||
GIT binary patch
|
||
literal 190
|
||
zcmZ?r-Nyg{c0fu4h!voik%1A&Vqj<hlbFQ+|Nj{n*dM?#Gy8`F?B_o|;Q#;sgZ%&h
|
||
xKR_77X8-^H0T};~f588N{|A%@6NS_AANW781J%IPW0=$b@c}dcg9FHR0sthoP@w<-
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/degree16x32.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/degree16x32.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..3faf901d0ea4753ace00c39524c2bd878ed7b2ee
|
||
GIT binary patch
|
||
literal 190
|
||
zcmZ?r-Nyg{c0fu4hy{RH0f-ra5Cj^)Bqs6y|9`k3`vC?9{s#;UG6f6_78VQ)1`-Gi
|
||
N;)BFN@*s881OT3s3!eZ0
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/degree24x48.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/degree24x48.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..49ffbbc70e989ab4adf2946eacfbe02891391ba1
|
||
GIT binary patch
|
||
literal 254
|
||
zcmZ?r{l@?Sc0fu4h$Vp70EiiZ5Cjf@NlfDZ|Nkh0j6j1xm>DR{-+lm$<rp6@$S`1H
|
||
RkT^^YNIgt1ih*?C004~z7(D<0
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/fonts/icons_source/degree32x64.bmp b/drivers/leds/vfd/controllers/fonts/icons_source/degree32x64.bmp
|
||
new file mode 100644
|
||
index 0000000000000000000000000000000000000000..ba4dbf2e02180af02bcdef67701f1011ae6438f9
|
||
GIT binary patch
|
||
literal 318
|
||
zcmZ?rwPR!e13Mt80mKSG>;S}!KnMm<3c^8<|Ns9-aFAL22N)RaKQJ)-|HHueqmF^`
|
||
sfgA(#0e%MN26hJa1|S5pKs+c0ih)@`H6XPNKs^lge;{Un%o@Z10NPy_?f?J)
|
||
|
||
literal 0
|
||
HcmV?d00001
|
||
|
||
diff --git a/drivers/leds/vfd/controllers/gfx_mono_ctrl.c b/drivers/leds/vfd/controllers/gfx_mono_ctrl.c
|
||
new file mode 100644
|
||
index 000000000..ce5c2db6d
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/gfx_mono_ctrl.c
|
||
@@ -0,0 +1,963 @@
|
||
+#include "gfx_mono_ctrl.h"
|
||
+#include "fonts/Grotesk16x32_h.h"
|
||
+#include "fonts/Grotesk16x32_v.h"
|
||
+#include "fonts/Grotesk24x48_v.h"
|
||
+#include "fonts/Grotesk32x64_h.h"
|
||
+#include "fonts/Retro8x16_v.h"
|
||
+#include "fonts/icons16x16_v.h"
|
||
+#include "fonts/icons32x32_h.h"
|
||
+#include "fonts/icons32x32_v.h"
|
||
+
|
||
+static unsigned char gfx_mono_ctrl_init(void);
|
||
+static unsigned short gfx_mono_ctrl_get_brightness_levels_count(void);
|
||
+static unsigned short gfx_mono_ctrl_get_brightness_level(void);
|
||
+static unsigned char gfx_mono_ctrl_set_brightness_level(unsigned short level);
|
||
+static unsigned char gfx_mono_ctrl_get_power(void);
|
||
+static void gfx_mono_ctrl_set_power(unsigned char state);
|
||
+static void gfx_mono_ctrl_power_suspend(void) { gfx_mono_ctrl_set_power(0); }
|
||
+static void gfx_mono_ctrl_power_resume(void) { gfx_mono_ctrl_init(); }
|
||
+static struct vfd_display *gfx_mono_ctrl_get_display_type(void);
|
||
+static unsigned char gfx_mono_ctrl_set_display_type(struct vfd_display *display);
|
||
+static void gfx_mono_ctrl_set_icon(const char *name, unsigned char state);
|
||
+static size_t gfx_mono_ctrl_read_data(unsigned char *data, size_t length);
|
||
+static size_t gfx_mono_ctrl_write_data(const unsigned char *data, size_t length);
|
||
+static size_t gfx_mono_ctrl_write_display_data(const struct vfd_display_data *data);
|
||
+
|
||
+static struct controller_interface gfx_mono_ctrl_interface = {
|
||
+ .init = gfx_mono_ctrl_init,
|
||
+ .get_brightness_levels_count = gfx_mono_ctrl_get_brightness_levels_count,
|
||
+ .get_brightness_level = gfx_mono_ctrl_get_brightness_level,
|
||
+ .set_brightness_level = gfx_mono_ctrl_set_brightness_level,
|
||
+ .get_power = gfx_mono_ctrl_get_power,
|
||
+ .set_power = gfx_mono_ctrl_set_power,
|
||
+ .power_suspend = gfx_mono_ctrl_power_suspend,
|
||
+ .power_resume = gfx_mono_ctrl_power_resume,
|
||
+ .get_display_type = gfx_mono_ctrl_get_display_type,
|
||
+ .set_display_type = gfx_mono_ctrl_set_display_type,
|
||
+ .set_icon = gfx_mono_ctrl_set_icon,
|
||
+ .read_data = gfx_mono_ctrl_read_data,
|
||
+ .write_data = gfx_mono_ctrl_write_data,
|
||
+ .write_display_data = gfx_mono_ctrl_write_display_data,
|
||
+};
|
||
+
|
||
+#define MAX_INDICATORS 4
|
||
+
|
||
+enum display_modes {
|
||
+ DISPLAY_MODE_296x128,
|
||
+ DISPLAY_MODE_200x200,
|
||
+ DISPLAY_MODE_128x32,
|
||
+ DISPLAY_MODE_96x32,
|
||
+ DISPLAY_MODE_80x32,
|
||
+ DISPLAY_MODE_80x48,
|
||
+ DISPLAY_MODE_64x48,
|
||
+ DISPLAY_MODE_128x64,
|
||
+ DISPLAY_MODE_96x64,
|
||
+ DISPLAY_MODE_80x64,
|
||
+ DISPLAY_MODE_64x64,
|
||
+};
|
||
+
|
||
+enum indicator_icons {
|
||
+ INDICATOR_ICON_NONE = 1,
|
||
+ INDICATOR_ICON_CHANNEL,
|
||
+ INDICATOR_ICON_TEMP,
|
||
+ INDICATOR_ICON_CALENDAR,
|
||
+ INDICATOR_ICON_MEDIA,
|
||
+ INDICATOR_ICON_TV,
|
||
+ INDICATOR_ICON_ETH,
|
||
+ INDICATOR_ICON_WIFI,
|
||
+ INDICATOR_ICON_PLAY,
|
||
+ INDICATOR_ICON_PAUSE,
|
||
+ INDICATOR_ICON_USB,
|
||
+ INDICATOR_ICON_SD,
|
||
+ INDICATOR_ICON_BT,
|
||
+ INDICATOR_ICON_APPS,
|
||
+ INDICATOR_ICON_SETUP,
|
||
+};
|
||
+
|
||
+struct gfx_mono_ctrl_display {
|
||
+ unsigned char columns : 3;
|
||
+ unsigned char rows : 3;
|
||
+ unsigned char offset : 2;
|
||
+
|
||
+ unsigned char reserved1;
|
||
+
|
||
+ unsigned char flags_secs : 1;
|
||
+ unsigned char reserved2 : 1;
|
||
+ unsigned char flags_transpose : 1;
|
||
+ unsigned char reserved3 : 5;
|
||
+
|
||
+ unsigned char controller;
|
||
+};
|
||
+
|
||
+struct indicators {
|
||
+ unsigned int usb : 1;
|
||
+ unsigned int sd : 1;
|
||
+ unsigned int play : 1;
|
||
+ unsigned int pause : 1;
|
||
+ unsigned int eth : 1;
|
||
+ unsigned int wifi : 1;
|
||
+ unsigned int bt : 1;
|
||
+ unsigned int apps : 1;
|
||
+ unsigned int setup : 1;
|
||
+ unsigned int reserved : 23;
|
||
+};
|
||
+
|
||
+static void setup_fonts(void);
|
||
+static void init_font(struct font *font_struct, const unsigned char *font_bitmaps);
|
||
+static void init_rect(struct rect *rect, const struct font *font, const char *str, unsigned char x, unsigned char y, unsigned char transposed);
|
||
+static unsigned char print_icon(unsigned char ch);
|
||
+static void print_indicator(unsigned char ch, unsigned char state, unsigned char index);
|
||
+static void print_clock(const struct vfd_display_data *data, unsigned char print_seconds);
|
||
+static void print_channel(const struct vfd_display_data *data);
|
||
+static void print_playback_time(const struct vfd_display_data *data);
|
||
+static void print_title(const struct vfd_display_data *data);
|
||
+static void print_date(const struct vfd_display_data *data);
|
||
+static void print_temperature(const struct vfd_display_data *data);
|
||
+static void print_char(char ch, const struct font *font_struct, unsigned char x, unsigned char y);
|
||
+
|
||
+static struct vfd_dev *dev = NULL;
|
||
+static unsigned char columns = 128;
|
||
+static unsigned char rows = 32 / 8;
|
||
+static unsigned char col_offset = 0;
|
||
+static unsigned char show_colon = 1;
|
||
+static unsigned char show_icons = 1;
|
||
+static unsigned char swap_banks_orientation = 0;
|
||
+static enum display_modes display_mode = DISPLAY_MODE_128x32;
|
||
+static unsigned char icon_x_offset = 0;
|
||
+static unsigned char indicators_on_screen[MAX_INDICATORS] = { 0 };
|
||
+static unsigned char ram_buffer[5000] = { 0 };
|
||
+static struct vfd_display_data old_data;
|
||
+static struct font font_text = { 0 };
|
||
+static struct font font_icons = { 0 };
|
||
+static struct font font_indicators = { 0 };
|
||
+static struct font font_small_text = { 0 };
|
||
+static struct indicators indicators = { 0 };
|
||
+static struct gfx_mono_ctrl_display gfx_mono_ctrl_display;
|
||
+
|
||
+static struct specific_gfx_mono_ctrl specific_gfx_mono_ctrl;
|
||
+
|
||
+struct controller_interface *init_gfx_mono_ctrl(struct vfd_dev *_dev, const struct specific_gfx_mono_ctrl *_specific_gfx_mono_ctrl)
|
||
+{
|
||
+ dev = _dev;
|
||
+ specific_gfx_mono_ctrl = *_specific_gfx_mono_ctrl;
|
||
+ memcpy(&gfx_mono_ctrl_display, &dev->dtb_active.display, sizeof(gfx_mono_ctrl_display));
|
||
+ if (specific_gfx_mono_ctrl.screen_view) {
|
||
+ columns = specific_gfx_mono_ctrl.screen_view->columns;
|
||
+ rows = specific_gfx_mono_ctrl.screen_view->rows;
|
||
+ col_offset = specific_gfx_mono_ctrl.screen_view->colomn_offset;
|
||
+ swap_banks_orientation = specific_gfx_mono_ctrl.screen_view->swap_banks_orientation;
|
||
+ } else {
|
||
+ columns = (gfx_mono_ctrl_display.columns + 1) * 16;
|
||
+ rows = gfx_mono_ctrl_display.rows + 1;
|
||
+ col_offset = gfx_mono_ctrl_display.offset << 1;
|
||
+ }
|
||
+ memset(&old_data, 0, sizeof(old_data));
|
||
+
|
||
+ setup_fonts();
|
||
+ if (specific_gfx_mono_ctrl.init)
|
||
+ gfx_mono_ctrl_interface.init = specific_gfx_mono_ctrl.init;
|
||
+ if (specific_gfx_mono_ctrl.set_display_type)
|
||
+ gfx_mono_ctrl_interface.set_display_type = specific_gfx_mono_ctrl.set_display_type;
|
||
+ if (!specific_gfx_mono_ctrl.print_char)
|
||
+ specific_gfx_mono_ctrl.print_char = print_char;
|
||
+ return &gfx_mono_ctrl_interface;
|
||
+}
|
||
+
|
||
+static void print_char(char ch, const struct font *font_struct, unsigned char x, unsigned char y)
|
||
+{
|
||
+ unsigned short offset = 0, i;
|
||
+ if (x >= columns || y >= rows || ch < font_struct->font_offset || ch >= font_struct->font_offset + font_struct->font_char_count)
|
||
+ return;
|
||
+
|
||
+ ch -= font_struct->font_offset;
|
||
+ offset = ch * font_struct->font_char_size;
|
||
+ offset += 4;
|
||
+ for (i = 0; i < font_struct->font_height; i++) {
|
||
+ specific_gfx_mono_ctrl.set_xy(x, y + i);
|
||
+ specific_gfx_mono_ctrl.write_ctrl_data_buf(&font_struct->font_bitmaps[offset], font_struct->font_width);
|
||
+ offset += font_struct->font_width;
|
||
+ }
|
||
+}
|
||
+
|
||
+extern void transpose8rS64(unsigned char* A, unsigned char* B);
|
||
+
|
||
+#define GFX_MONO_CTRL_PRINT_DEBUG 0
|
||
+
|
||
+#if GFX_MONO_CTRL_PRINT_DEBUG
|
||
+unsigned char print_buffer_cnt = 30;
|
||
+char txt_buf[204800] = { 0 };
|
||
+static void print_buffer(unsigned char *buf, const struct rect *rect, unsigned char rotate)
|
||
+{
|
||
+ char *t = txt_buf;
|
||
+ if (!print_buffer_cnt)
|
||
+ return;
|
||
+ print_buffer_cnt--;
|
||
+ if (rotate)
|
||
+ pr_dbg2("Transposed Buffer:\n");
|
||
+ else
|
||
+ pr_dbg2("Non-Transposed Buffer:\n");
|
||
+ if (swap_banks_orientation) {
|
||
+ unsigned char height = rotate ? rect->width : rect->height;
|
||
+ unsigned char width = rotate ? rect->height : rect->width;
|
||
+ for (int j = 0; j < height; j++) {
|
||
+ t = txt_buf;
|
||
+ for (int i = 0; i < width; i++) {
|
||
+ for (int k = 0; k < 8; k++) {
|
||
+ *t++ = (buf[j * width + i] & (0x80 >> k)) ? '#' : ' ';
|
||
+ }
|
||
+ *t++ = ' ';
|
||
+ }
|
||
+ *t++ = '\0';
|
||
+ printk(KERN_DEBUG "%s\n", txt_buf);
|
||
+ }
|
||
+ } else {
|
||
+ unsigned char height = rotate ? rect->height : rect->width / 8;
|
||
+ unsigned char width = rotate ? rect->width : rect->height * 8;
|
||
+ for (int j = 0; j < height; j++) {
|
||
+ for (int k = 0; k < 8; k++) {
|
||
+ t = txt_buf;
|
||
+ for (int i = 0; i < width; i++) {
|
||
+ if (i % 8 == 0)
|
||
+ *t++ = ' ';
|
||
+ *t++ = (buf[j * width + i] & (1 << k)) ? '#' : ' ';
|
||
+ }
|
||
+ *t++ = '\n';
|
||
+ *t++ = '\0';
|
||
+ printk(KERN_DEBUG "%s", txt_buf);
|
||
+ }
|
||
+ printk(KERN_DEBUG "\n");
|
||
+ }
|
||
+ }
|
||
+
|
||
+ printk(KERN_DEBUG "\n\n");
|
||
+}
|
||
+#else
|
||
+static void print_buffer(unsigned char *buf, const struct rect *rect, unsigned char rotate) { }
|
||
+#endif
|
||
+
|
||
+unsigned char t_buf[sizeof(ram_buffer)] = { 0 };
|
||
+void transpose_buffer(unsigned char *buffer, const struct rect *rect)
|
||
+{
|
||
+ unsigned short i;
|
||
+ if (!rect->width || !rect->height)
|
||
+ return;
|
||
+
|
||
+ print_buffer(buffer, rect, 0);
|
||
+ if (swap_banks_orientation) {
|
||
+ unsigned char tmp[8];
|
||
+ unsigned short x, y;
|
||
+ for (y = 0; y < rect->height; y += 8) {
|
||
+ for (x = 0; x < rect->width; x++) {
|
||
+ int s = x + y * rect->width;
|
||
+ int d = 8 * (rect->width - 1 - x) * (rect->height / 8) + (y / 8);
|
||
+ for (i = 0; i < 8; i++)
|
||
+ tmp[i] = buffer[s + (i * rect->width)];
|
||
+ transpose8rS64(tmp, tmp);
|
||
+ for (i = 0; i < 8; i++)
|
||
+ t_buf[d + (i * rect->height / 8)] = tmp[i];
|
||
+ }
|
||
+ }
|
||
+ } else {
|
||
+ for (i = 0; i < (rect->height * rect->width) / 8; i++) {
|
||
+ int d = (rect->height - 1 - i % rect->height) * (rect->width / 8) + (i / rect->height);
|
||
+ transpose8rS64(&buffer[i * 8], &t_buf[d * 8]);
|
||
+ }
|
||
+ }
|
||
+ memcpy(buffer, t_buf, rect->height * rect->width);
|
||
+ print_buffer(buffer, rect, 1);
|
||
+}
|
||
+
|
||
+static void print_string(const char *str, const struct font *font_struct, unsigned char x, unsigned char y)
|
||
+{
|
||
+ unsigned char ch = 0;
|
||
+ unsigned short soffset = 0, doffset = 0, i, j, k;
|
||
+ struct rect rect;
|
||
+ unsigned char rect_width = 0, text_width = 0;
|
||
+ init_rect(&rect, font_struct, str, x, y, gfx_mono_ctrl_display.flags_transpose);
|
||
+ if (rect.length == 0)
|
||
+ return;
|
||
+
|
||
+ if (gfx_mono_ctrl_display.flags_transpose) {
|
||
+ rect_width = rect.height * 8;
|
||
+ text_width = rect.text_height;
|
||
+ } else {
|
||
+ rect_width = rect.width;
|
||
+ text_width = rect.text_width;
|
||
+ }
|
||
+ for (k = 0; k < rect.length; k += text_width) {
|
||
+ for (i = 0; i < font_struct->font_height; i++) {
|
||
+ for (j = 0; j < text_width; j++) {
|
||
+ doffset = k + j;
|
||
+ ch = doffset < rect.length ? str[doffset] : ' ';
|
||
+ if (ch < font_struct->font_offset || ch >= font_struct->font_offset + font_struct->font_char_count)
|
||
+ ch = ' ';
|
||
+ ch -= font_struct->font_offset;
|
||
+ soffset = ch * font_struct->font_char_size + i * font_struct->font_width;
|
||
+ soffset += 4;
|
||
+ memcpy(&ram_buffer[i * rect_width + (k * font_struct->font_height + j) * font_struct->font_width], &font_struct->font_bitmaps[soffset], font_struct->font_width);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+
|
||
+ rect.length = rect.text_height * rect.text_width;
|
||
+ if (gfx_mono_ctrl_display.flags_transpose)
|
||
+ transpose_buffer(ram_buffer, &rect);
|
||
+ else
|
||
+ print_buffer(ram_buffer, &rect, 0);
|
||
+ specific_gfx_mono_ctrl.print_string(ram_buffer, &rect);
|
||
+}
|
||
+
|
||
+static void setup_fonts(void)
|
||
+{
|
||
+ init_font(&font_indicators, icons16x16_V);
|
||
+ init_font(&font_small_text, Retro8x16_V);
|
||
+ switch (rows) {
|
||
+ case 128:
|
||
+ init_font(&font_text, Grotesk32x64_H);
|
||
+ init_font(&font_small_text, Grotesk16x32_H);
|
||
+ init_font(&font_icons, icons32x32_H);
|
||
+ init_font(&font_indicators, icons32x32_H);
|
||
+ display_mode = DISPLAY_MODE_296x128;
|
||
+ break;
|
||
+ case 200:
|
||
+ init_font(&font_text, Grotesk32x64_H);
|
||
+ init_font(&font_small_text, Grotesk16x32_H);
|
||
+ init_font(&font_icons, icons32x32_H);
|
||
+ init_font(&font_indicators, icons32x32_H);
|
||
+ display_mode = DISPLAY_MODE_200x200;
|
||
+ break;
|
||
+ case 6:
|
||
+ init_font(&font_text, Grotesk16x32_V);
|
||
+ init_font(&font_icons, icons16x16_V);
|
||
+ if (columns >= 80) {
|
||
+ display_mode = DISPLAY_MODE_80x48;
|
||
+ } else {
|
||
+ show_colon = 0;
|
||
+ display_mode = DISPLAY_MODE_64x48;
|
||
+ }
|
||
+ break;
|
||
+ case 8:
|
||
+ if (columns >= 96) {
|
||
+ init_font(&font_text, Grotesk24x48_V);
|
||
+ init_font(&font_icons, icons16x16_V);
|
||
+ if (columns >= 120) {
|
||
+ display_mode = DISPLAY_MODE_128x64;
|
||
+ } else {
|
||
+ show_colon = 0;
|
||
+ display_mode = DISPLAY_MODE_96x64;
|
||
+ }
|
||
+ } else {
|
||
+ init_font(&font_text, Grotesk16x32_V);
|
||
+ init_font(&font_icons, icons32x32_V);
|
||
+ if (columns >= 80) {
|
||
+ display_mode = DISPLAY_MODE_80x64;
|
||
+ } else {
|
||
+ show_colon = 0;
|
||
+ display_mode = DISPLAY_MODE_64x64;
|
||
+ }
|
||
+ }
|
||
+ break;
|
||
+ case 4:
|
||
+ default:
|
||
+ init_font(&font_text, Grotesk16x32_V);
|
||
+ if (columns >= 120) {
|
||
+ display_mode = DISPLAY_MODE_128x32;
|
||
+ init_font(&font_icons, icons32x32_V);
|
||
+ } else if (columns >= 96) {
|
||
+ display_mode = DISPLAY_MODE_96x32;
|
||
+ init_font(&font_icons, icons16x16_V);
|
||
+ } else if (columns >= 80) {
|
||
+ display_mode = DISPLAY_MODE_80x32;
|
||
+ show_icons = 0;
|
||
+ } else {
|
||
+ show_colon = 0;
|
||
+ show_icons = 0;
|
||
+ }
|
||
+ break;
|
||
+ }
|
||
+}
|
||
+
|
||
+static unsigned char gfx_mono_ctrl_init(void)
|
||
+{
|
||
+ old_data.mode = DISPLAY_MODE_NONE;
|
||
+ if (gfx_mono_ctrl_interface.init != gfx_mono_ctrl_init)
|
||
+ return gfx_mono_ctrl_interface.init();
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+static unsigned short gfx_mono_ctrl_get_brightness_levels_count(void)
|
||
+{
|
||
+ return 8;
|
||
+}
|
||
+
|
||
+static unsigned short gfx_mono_ctrl_get_brightness_level(void)
|
||
+{
|
||
+ return dev->brightness;
|
||
+}
|
||
+
|
||
+static unsigned char gfx_mono_ctrl_set_brightness_level(unsigned short level)
|
||
+{
|
||
+ unsigned char tmp = dev->brightness = level & 0x7;
|
||
+ dev->power = 1;
|
||
+ specific_gfx_mono_ctrl.set_contrast(tmp * 36); // ruonds to 0 - 252.
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+static unsigned char gfx_mono_ctrl_get_power(void)
|
||
+{
|
||
+ return dev->power;
|
||
+}
|
||
+
|
||
+static void gfx_mono_ctrl_set_power(unsigned char state)
|
||
+{
|
||
+ specific_gfx_mono_ctrl.set_power(state);
|
||
+ dev->power = state;
|
||
+}
|
||
+
|
||
+static struct vfd_display *gfx_mono_ctrl_get_display_type(void)
|
||
+{
|
||
+ return &dev->dtb_active.display;
|
||
+}
|
||
+
|
||
+static unsigned char gfx_mono_ctrl_set_display_type(struct vfd_display *display)
|
||
+{
|
||
+ pr_dbg2("gfx_mono_ctrl_set_display_type - not implemented\n");
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+static void gfx_mono_ctrl_set_icon(const char *name, unsigned char state)
|
||
+{
|
||
+ enum indicator_icons icon = INDICATOR_ICON_NONE;
|
||
+ if (strncmp(name,"usb",3) == 0 && indicators.usb != state) {
|
||
+ icon = INDICATOR_ICON_USB;
|
||
+ indicators.usb = state;
|
||
+ } else if (strncmp(name,"sd",2) == 0 && indicators.sd != state) {
|
||
+ icon = INDICATOR_ICON_SD;
|
||
+ indicators.sd = state;
|
||
+ } else if (strncmp(name,"play",4) == 0 && indicators.play != state) {
|
||
+ icon = INDICATOR_ICON_PLAY;
|
||
+ indicators.play = state;
|
||
+ } else if (strncmp(name,"pause",5) == 0 && indicators.pause != state) {
|
||
+ icon = INDICATOR_ICON_PAUSE;
|
||
+ indicators.pause = state;
|
||
+ } else if (strncmp(name,"eth",3) == 0 && indicators.eth != state) {
|
||
+ icon = INDICATOR_ICON_ETH;
|
||
+ indicators.eth = state;
|
||
+ } else if (strncmp(name,"wifi",4) == 0 && indicators.wifi != state) {
|
||
+ icon = INDICATOR_ICON_WIFI;
|
||
+ indicators.wifi = state;
|
||
+ } else if (strncmp(name,"b-t",3) == 0 && indicators.bt != state) {
|
||
+ icon = INDICATOR_ICON_BT;
|
||
+ indicators.bt = state;
|
||
+ } else if (strncmp(name,"apps",4) == 0 && indicators.apps != state) {
|
||
+ icon = INDICATOR_ICON_APPS;
|
||
+ indicators.apps = state;
|
||
+ } else if (strncmp(name,"setup",5) == 0 && indicators.setup != state) {
|
||
+ icon = INDICATOR_ICON_SETUP;
|
||
+ indicators.setup = state;
|
||
+ } else if (strncmp(name,"colon",5) == 0) {
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | ledDots[LED_DOT_SEC]) : (dev->status_led_mask & ~ledDots[LED_DOT_SEC]);
|
||
+ }
|
||
+
|
||
+ switch (icon) {
|
||
+ case INDICATOR_ICON_USB:
|
||
+ if (!indicators.usb && indicators.sd)
|
||
+ print_indicator(INDICATOR_ICON_SD, 1, 2);
|
||
+ else
|
||
+ print_indicator(INDICATOR_ICON_USB, indicators.usb, 2);
|
||
+ break;
|
||
+ case INDICATOR_ICON_SD:
|
||
+ if (!indicators.usb)
|
||
+ print_indicator(INDICATOR_ICON_SD, indicators.sd, 2);
|
||
+ break;
|
||
+ case INDICATOR_ICON_PLAY:
|
||
+ if (!indicators.play && indicators.pause)
|
||
+ print_indicator(INDICATOR_ICON_PAUSE, 1, 1);
|
||
+ else
|
||
+ print_indicator(INDICATOR_ICON_PLAY, indicators.play, 1);
|
||
+ break;
|
||
+ case INDICATOR_ICON_PAUSE:
|
||
+ if (!indicators.pause && indicators.play)
|
||
+ print_indicator(INDICATOR_ICON_PLAY, 1, 1);
|
||
+ else
|
||
+ print_indicator(INDICATOR_ICON_PAUSE, indicators.pause, 1);
|
||
+ break;
|
||
+ case INDICATOR_ICON_ETH:
|
||
+ if (!indicators.eth && indicators.wifi)
|
||
+ print_indicator(INDICATOR_ICON_WIFI, 1, 0);
|
||
+ else
|
||
+ print_indicator(INDICATOR_ICON_ETH, indicators.eth, 0);
|
||
+ break;
|
||
+ case INDICATOR_ICON_WIFI:
|
||
+ if (!indicators.eth)
|
||
+ print_indicator(INDICATOR_ICON_WIFI, indicators.wifi, 0);
|
||
+ break;
|
||
+ case INDICATOR_ICON_BT:
|
||
+ case INDICATOR_ICON_APPS:
|
||
+ case INDICATOR_ICON_SETUP:
|
||
+ if (indicators.setup)
|
||
+ print_indicator(INDICATOR_ICON_SETUP, indicators.setup, 3);
|
||
+ else if (indicators.apps)
|
||
+ print_indicator(INDICATOR_ICON_APPS, indicators.apps, 3);
|
||
+ else
|
||
+ print_indicator(INDICATOR_ICON_BT, indicators.bt, 3);
|
||
+ break;
|
||
+ default:
|
||
+ break;
|
||
+ }
|
||
+}
|
||
+
|
||
+static size_t gfx_mono_ctrl_read_data(unsigned char *data, size_t length)
|
||
+{
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+static size_t gfx_mono_ctrl_write_data(const unsigned char *_data, size_t length)
|
||
+{
|
||
+ return length;
|
||
+}
|
||
+
|
||
+static size_t gfx_mono_ctrl_write_display_data(const struct vfd_display_data *data)
|
||
+{
|
||
+ size_t status = sizeof(*data);
|
||
+ if (data->mode != old_data.mode) {
|
||
+ unsigned char i;
|
||
+ icon_x_offset = 0;
|
||
+ memset(&old_data, 0, sizeof(old_data));
|
||
+ specific_gfx_mono_ctrl.clear();
|
||
+ switch (data->mode) {
|
||
+ case DISPLAY_MODE_CLOCK:
|
||
+ old_data.mode = DISPLAY_MODE_CLOCK;
|
||
+ for (i = 0; i < MAX_INDICATORS; i++)
|
||
+ print_indicator(indicators_on_screen[i], 1, i);
|
||
+ old_data.mode = 0;
|
||
+ break;
|
||
+ case DISPLAY_MODE_DATE:
|
||
+ if (show_icons)
|
||
+ icon_x_offset = print_icon(INDICATOR_ICON_CALENDAR);
|
||
+ break;
|
||
+ case DISPLAY_MODE_CHANNEL:
|
||
+ if (show_icons)
|
||
+ icon_x_offset = print_icon(INDICATOR_ICON_CHANNEL);
|
||
+ break;
|
||
+ case DISPLAY_MODE_PLAYBACK_TIME:
|
||
+ if (show_icons)
|
||
+ icon_x_offset = print_icon(INDICATOR_ICON_MEDIA);
|
||
+ break;
|
||
+ case DISPLAY_MODE_TITLE:
|
||
+ break;
|
||
+ case DISPLAY_MODE_TEMPERATURE:
|
||
+ if (show_icons)
|
||
+ icon_x_offset = print_icon(INDICATOR_ICON_TEMP);
|
||
+ break;
|
||
+ default:
|
||
+ status = 0;
|
||
+ break;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ switch (data->mode) {
|
||
+ case DISPLAY_MODE_CLOCK:
|
||
+ print_clock(data, 1);
|
||
+ break;
|
||
+ case DISPLAY_MODE_DATE:
|
||
+ print_date(data);
|
||
+ break;
|
||
+ case DISPLAY_MODE_CHANNEL:
|
||
+ print_channel(data);
|
||
+ break;
|
||
+ case DISPLAY_MODE_PLAYBACK_TIME:
|
||
+ print_playback_time(data);
|
||
+ break;
|
||
+ case DISPLAY_MODE_TITLE:
|
||
+ print_title(data);
|
||
+ break;
|
||
+ case DISPLAY_MODE_TEMPERATURE:
|
||
+ print_temperature(data);
|
||
+ break;
|
||
+ default:
|
||
+ status = 0;
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ old_data = *data;
|
||
+ return status;
|
||
+}
|
||
+
|
||
+static unsigned char print_icon(unsigned char ch)
|
||
+{
|
||
+ char str[] = { ch, 0 };
|
||
+ unsigned char offset_x = 0;
|
||
+ unsigned char x, y;
|
||
+ switch (display_mode) {
|
||
+ case DISPLAY_MODE_128x32:
|
||
+ y = (rows - font_icons.font_height) / 2;
|
||
+ print_string(str, &font_icons, 0, y);
|
||
+ offset_x = font_icons.font_width + font_text.font_width / 2;
|
||
+ break;
|
||
+ case DISPLAY_MODE_96x32 :
|
||
+ y = (rows - font_icons.font_height) / 2;
|
||
+ print_string(str, &font_icons, 0, y);
|
||
+ offset_x = font_icons.font_width;
|
||
+ break;
|
||
+ case DISPLAY_MODE_80x32 :
|
||
+ break;
|
||
+ case DISPLAY_MODE_64x48 :
|
||
+ case DISPLAY_MODE_64x64 :
|
||
+ case DISPLAY_MODE_96x64 :
|
||
+ print_string(str, &font_icons, 0, font_text.font_height);
|
||
+ break;
|
||
+ case DISPLAY_MODE_296x128:
|
||
+ case DISPLAY_MODE_200x200:
|
||
+ case DISPLAY_MODE_80x48 :
|
||
+ case DISPLAY_MODE_128x64:
|
||
+ case DISPLAY_MODE_80x64 :
|
||
+ x = (columns - font_icons.font_width) / 2;
|
||
+ print_string(str, &font_icons, x, font_text.font_height);
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ return offset_x;
|
||
+}
|
||
+
|
||
+static void print_indicator(unsigned char ch, unsigned char state, unsigned char index)
|
||
+{
|
||
+ char str[] = { state ? ch : INDICATOR_ICON_NONE, 0 };
|
||
+ unsigned char x, y;
|
||
+ if (index >= MAX_INDICATORS)
|
||
+ return;
|
||
+
|
||
+ indicators_on_screen[index] = str[0];
|
||
+ if (old_data.mode == DISPLAY_MODE_CLOCK) {
|
||
+ switch (display_mode) {
|
||
+ case DISPLAY_MODE_296x128:
|
||
+ case DISPLAY_MODE_128x32:
|
||
+ {
|
||
+ char size = (columns - (font_text.font_width * 5)) / 2;
|
||
+ x = (size - font_indicators.font_width) / 2;
|
||
+ if (index >= 2)
|
||
+ x += size + (font_text.font_width * 5);
|
||
+ y = font_indicators.font_height * (index % 2);
|
||
+ print_string(str, &font_indicators, x, y);
|
||
+ break;
|
||
+ }
|
||
+ case DISPLAY_MODE_96x32 :
|
||
+ case DISPLAY_MODE_80x32 :
|
||
+ break;
|
||
+ case DISPLAY_MODE_64x48 :
|
||
+ case DISPLAY_MODE_64x64 :
|
||
+ case DISPLAY_MODE_96x64 :
|
||
+ case DISPLAY_MODE_80x48 :
|
||
+ case DISPLAY_MODE_128x64:
|
||
+ case DISPLAY_MODE_80x64 :
|
||
+ x = columns / MAX_INDICATORS;
|
||
+ x = (x - font_indicators.font_width) / 2 + index * x;
|
||
+ print_string(str, &font_indicators, x, font_text.font_height);
|
||
+ break;
|
||
+ case DISPLAY_MODE_200x200:
|
||
+ x = columns / MAX_INDICATORS;
|
||
+ x = (x - font_indicators.font_width) / 2 + index * x;
|
||
+ print_string(str, &font_indicators, x, font_text.font_height + ((font_small_text.font_height * 5) / 2));
|
||
+ break;
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_clock_date(const struct vfd_display_data *data, unsigned char force_print)
|
||
+{
|
||
+ if ((rows == 128 || rows == 200) && !gfx_mono_ctrl_display.flags_transpose)
|
||
+ {
|
||
+ force_print |= data->time_date.day != old_data.time_date.day || data->time_date.month != old_data.time_date.month || data->time_date.year != old_data.time_date.year;
|
||
+ if (force_print)
|
||
+ {
|
||
+ char buffer[20];
|
||
+ const char *days[7] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
|
||
+ const char *months[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
|
||
+ int len = scnprintf(buffer, sizeof(buffer), "%s %02d, %04d", months[data->time_date.month], data->time_date.day, data->time_date.year);
|
||
+ unsigned char offset = (columns - (len * font_small_text.font_width)) / 2;
|
||
+ print_string(buffer, &font_small_text, offset, font_text.font_height);
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%s", days[data->time_date.day_of_week]);
|
||
+ offset = (columns - (len * font_small_text.font_width)) / 2;
|
||
+ print_string(buffer, &font_small_text, offset, font_text.font_height + font_small_text.font_height);
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_clock(const struct vfd_display_data *data, unsigned char print_seconds)
|
||
+{
|
||
+ char buffer[10];
|
||
+ unsigned char force_print = old_data.mode == DISPLAY_MODE_NONE;
|
||
+ unsigned char offset = 0;
|
||
+ unsigned char colon_on = data->colon_on || dev->status_led_mask & ledDots[LED_DOT_SEC] ? 1 : 0;
|
||
+ print_seconds &= gfx_mono_ctrl_display.flags_secs & show_colon;
|
||
+ if (gfx_mono_ctrl_display.flags_transpose) {
|
||
+ if (force_print || data->time_date.minutes != old_data.time_date.minutes ||
|
||
+ data->time_date.hours != old_data.time_date.hours) {
|
||
+ offset = (columns - (font_text.font_height * 8 * 2 + show_colon * font_text.font_width)) / 2;
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.hours);
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.minutes);
|
||
+ print_string(buffer, &font_text, offset + show_colon * font_text.font_width + (font_text.font_height * 8), 0);
|
||
+ }
|
||
+ if (colon_on != old_data.colon_on && show_colon) {
|
||
+ unsigned char offset = (columns - font_text.font_width) / 2;
|
||
+ specific_gfx_mono_ctrl.print_char(colon_on ? ':' : ' ', &font_text, offset, rows - font_text.font_height);
|
||
+ }
|
||
+ } else if (!force_print) {
|
||
+ const int len = print_seconds ? 8 : 5;
|
||
+ offset = (columns - (font_text.font_width * len)) / 2;
|
||
+ if (data->time_date.hours != old_data.time_date.hours) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.hours);
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ }
|
||
+ offset += 2 * font_text.font_width;
|
||
+ if (show_colon) {
|
||
+ if (colon_on != old_data.colon_on)
|
||
+ specific_gfx_mono_ctrl.print_char(colon_on ? ':' : ' ', &font_text, offset, 0);
|
||
+ offset += font_text.font_width;
|
||
+ }
|
||
+ if (data->time_date.minutes != old_data.time_date.minutes) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.minutes);
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ }
|
||
+ offset += 2 * font_text.font_width;
|
||
+ if (print_seconds) {
|
||
+ if (colon_on != old_data.colon_on)
|
||
+ specific_gfx_mono_ctrl.print_char(colon_on ? ':' : ' ', &font_text, offset, 0);
|
||
+ offset += font_text.font_width;
|
||
+ if (data->time_date.seconds != old_data.time_date.seconds) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.seconds);
|
||
+ print_string(buffer, &font_text, offset + (6 * font_text.font_width), 0);
|
||
+ }
|
||
+ }
|
||
+ } else if (print_seconds) {
|
||
+ int len = scnprintf(buffer, sizeof(buffer), "%02d%c%02d%c%02d", data->time_date.hours, colon_on ? ':' : ' ', data->time_date.minutes,
|
||
+ colon_on ? ':' : ' ', data->time_date.seconds);
|
||
+ offset = (columns - (font_text.font_width * len)) / 2;
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ } else {
|
||
+ int len;
|
||
+ if (show_colon)
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%02d%c%02d", data->time_date.hours, colon_on ? ':' : ' ', data->time_date.minutes);
|
||
+ else
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%02d%02d", data->time_date.hours, data->time_date.minutes);
|
||
+ offset = (columns - (font_text.font_width * len)) / 2;
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ }
|
||
+ print_clock_date(data, force_print);
|
||
+}
|
||
+
|
||
+static void print_channel(const struct vfd_display_data *data)
|
||
+{
|
||
+ char buffer[10];
|
||
+ scnprintf(buffer, sizeof(buffer), "%*d", 4, data->channel_data.channel % 10000);
|
||
+ print_string(buffer, &font_text, font_icons.font_width + (font_text.font_width / 2), 0);
|
||
+}
|
||
+
|
||
+static void print_playback_time(const struct vfd_display_data *data)
|
||
+{
|
||
+ char buffer[20];
|
||
+ unsigned char offset = icon_x_offset ? icon_x_offset : (columns - (show_colon * font_text.font_width + font_text.font_width * 4)) / 2;
|
||
+ unsigned char force_print = old_data.mode == DISPLAY_MODE_NONE || data->time_date.hours != old_data.time_date.hours;
|
||
+ if (gfx_mono_ctrl_display.flags_transpose) {
|
||
+ if (data->time_date.hours > 0) {
|
||
+ if (force_print || data->time_date.minutes != old_data.time_date.minutes ||
|
||
+ data->time_date.hours != old_data.time_date.hours) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.hours);
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.minutes);
|
||
+ print_string(buffer, &font_text, offset + show_colon * font_text.font_width + (font_text.font_height * 8), 0);
|
||
+ }
|
||
+ } else {
|
||
+ if (force_print || data->time_date.seconds != old_data.time_date.seconds ||
|
||
+ data->time_date.minutes != old_data.time_date.minutes) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.minutes);
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.seconds);
|
||
+ print_string(buffer, &font_text, offset + show_colon * font_text.font_width + (font_text.font_height * 8), 0);
|
||
+ }
|
||
+ }
|
||
+ if (show_colon)
|
||
+ specific_gfx_mono_ctrl.print_char(data->colon_on ? ':' : ' ', &font_text, offset + (font_text.font_height * 8), rows - font_text.font_height);
|
||
+ } else if (!force_print) {
|
||
+ if (data->colon_on != old_data.colon_on && show_colon) {
|
||
+ specific_gfx_mono_ctrl.print_char(data->colon_on ? ':' : ' ', &font_text, offset + (2 * font_text.font_width), 0);
|
||
+ }
|
||
+ if (data->time_date.hours > 0) {
|
||
+ if (data->time_date.hours != old_data.time_date.hours) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.hours);
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ }
|
||
+ if (data->time_date.minutes != old_data.time_date.minutes) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.minutes);
|
||
+ print_string(buffer, &font_text, offset + (show_colon * font_text.font_width + 2 * font_text.font_width), 0);
|
||
+ }
|
||
+ } else {
|
||
+ if (data->time_date.minutes != old_data.time_date.minutes) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.minutes);
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ }
|
||
+ if (data->time_date.seconds != old_data.time_date.seconds) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.seconds);
|
||
+ print_string(buffer, &font_text, offset + (show_colon * font_text.font_width + 2 * font_text.font_width), 0);
|
||
+ }
|
||
+ }
|
||
+ } else {
|
||
+ unsigned char pos0, pos1;
|
||
+ if (data->time_date.hours > 0) {
|
||
+ pos0 = data->time_date.hours;
|
||
+ pos1 = data->time_date.minutes;
|
||
+ } else {
|
||
+ pos0 = data->time_date.minutes;
|
||
+ pos1 = data->time_date.seconds;
|
||
+ }
|
||
+ if (show_colon)
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d%c%02d", pos0, data->colon_on ? ':' : ' ', pos1);
|
||
+ else
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d%02d", pos0, pos1);
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ }
|
||
+ if (rows >= 6 && !gfx_mono_ctrl_display.flags_transpose && strcmp(data->string_main, old_data.string_main)) {
|
||
+ struct rect rect;
|
||
+ offset = show_icons * font_icons.font_width;
|
||
+ init_rect(&rect, &font_small_text, data->string_main, offset, font_text.font_height, 0);
|
||
+ if (rect.length > 0) {
|
||
+ if (show_icons) {
|
||
+ print_icon(INDICATOR_ICON_NONE);
|
||
+ buffer[0] = INDICATOR_ICON_MEDIA;
|
||
+ buffer[1] = '\0';
|
||
+ print_string(buffer, &font_icons, 0, font_text.font_height);
|
||
+ }
|
||
+ if (rect.length < strlen(data->string_main)) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%s", data->string_main);
|
||
+ buffer[rect.length - 1] = 0x7F; // 0x7F = position of ellipsis.
|
||
+ buffer[rect.length] = '\0';
|
||
+ print_string(buffer, &font_small_text, offset, font_text.font_height);
|
||
+ } else {
|
||
+ print_string(data->string_main, &font_small_text, offset, font_text.font_height);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_title(const struct vfd_display_data *data)
|
||
+{
|
||
+}
|
||
+
|
||
+static void print_date(const struct vfd_display_data *data)
|
||
+{
|
||
+ char buffer[10];
|
||
+ unsigned char force_print = old_data.mode == DISPLAY_MODE_NONE || data->time_date.day != old_data.time_date.day || data->time_date.month != old_data.time_date.month;
|
||
+ unsigned char offset = icon_x_offset ? icon_x_offset : (columns - (show_colon * font_text.font_width + font_text.font_width * 4)) / 2;
|
||
+ if (force_print) {
|
||
+ if (gfx_mono_ctrl_display.flags_transpose) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_secondary._reserved ? data->time_date.month + 1 : data->time_date.day);
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_secondary._reserved ? data->time_date.day : data->time_date.month + 1);
|
||
+ print_string(buffer, &font_text, offset + show_colon * font_text.font_width + (font_text.font_height * 8), 0);
|
||
+ if (show_colon)
|
||
+ specific_gfx_mono_ctrl.print_char('|', &font_text, offset + font_text.font_height * 8, rows - font_text.font_height);
|
||
+ } else {
|
||
+ unsigned char day, month;
|
||
+ if (data->time_secondary._reserved) {
|
||
+ day = data->time_date.month + 1;
|
||
+ month = data->time_date.day;
|
||
+ } else {
|
||
+ day = data->time_date.day;
|
||
+ month = data->time_date.month + 1;
|
||
+ }
|
||
+ if (show_colon)
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d/%02d", day, month);
|
||
+ else
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d%02d", day, month);
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_temperature(const struct vfd_display_data *data)
|
||
+{
|
||
+ char buffer[10];
|
||
+ if (data->temperature != old_data.temperature) {
|
||
+ if (gfx_mono_ctrl_display.flags_transpose) {
|
||
+ unsigned char offset = icon_x_offset ? icon_x_offset : (columns - (2 * 8 * font_text.font_height)) / 2;
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->temperature % 100);
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ scnprintf(buffer, sizeof(buffer), "%cC", 0x7F); // 0x7F = position of degree.
|
||
+ print_string(buffer, &font_text, offset + 8 * font_text.font_height, 0);
|
||
+ } else {
|
||
+ size_t len = scnprintf(buffer, sizeof(buffer), "%d%cC", data->temperature % 1000, 0x7F); // 0x7F = position of degree.
|
||
+ unsigned char offset = icon_x_offset ? icon_x_offset : (columns - (len * font_text.font_width)) / 2;
|
||
+ print_string(buffer, &font_text, offset, 0);
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+static void init_font(struct font *font_struct, const unsigned char *font_bitmaps)
|
||
+{
|
||
+ if (swap_banks_orientation) {
|
||
+ font_struct->font_width = font_bitmaps[0] / 8;
|
||
+ font_struct->font_height = font_bitmaps[1];
|
||
+ } else {
|
||
+ font_struct->font_width = font_bitmaps[0];
|
||
+ font_struct->font_height = font_bitmaps[1] / 8;
|
||
+ }
|
||
+ font_struct->font_offset = font_bitmaps[2];
|
||
+ font_struct->font_char_size = font_struct->font_height * font_struct->font_width;
|
||
+ font_struct->font_char_count = font_bitmaps[3];
|
||
+ font_struct->font_bitmaps = font_bitmaps;
|
||
+#if GFX_MONO_CTRL_PRINT_DEBUG
|
||
+ pr_dbg2("font_width = %d, font_height = %d, font_offset = %d, font_char_size = %d, font_char_count = %d\n",
|
||
+ font_struct->font_width, font_struct->font_height, font_struct->font_offset, font_struct->font_char_size, font_struct->font_char_count);
|
||
+#endif
|
||
+}
|
||
+
|
||
+static void init_rect(struct rect *rect, const struct font *font, const char *str, unsigned char x, unsigned char y, unsigned char transposed)
|
||
+{
|
||
+ unsigned char c_width = 0, c_height = 0;
|
||
+ memset(rect, 0, sizeof(*rect));
|
||
+ if (x < columns && y < rows) {
|
||
+ rect->font = font;
|
||
+ if (!transposed) {
|
||
+ rect->x1 = x;
|
||
+ rect->y1 = y;
|
||
+ rect->width = columns - x;
|
||
+ rect->height = rows - y;
|
||
+ c_width = rect->width / font->font_width;
|
||
+ c_height = rect->height / font->font_height;
|
||
+ rect->length = (unsigned char)min(strlen(str), (size_t)(c_width * c_height));
|
||
+ rect->text_width = min(c_width, rect->length);
|
||
+ for (rect->text_height = 0; rect->text_height < c_height; rect->text_height++)
|
||
+ if (rect->text_width * rect->text_height >= rect->length)
|
||
+ break;
|
||
+ rect->width = rect->text_width * font->font_width;
|
||
+ rect->height = rect->text_height * font->font_height;
|
||
+ rect->x2 = x + rect->width - 1;
|
||
+ rect->y2 = y + rect->height - 1;
|
||
+ } else {
|
||
+ const unsigned short font_height = font->font_height * 8;
|
||
+ const unsigned short font_width = font->font_width / 8;
|
||
+ rect->width = columns - x;
|
||
+ rect->height = rows - y;
|
||
+ c_width = rect->width / font_height;
|
||
+ c_height = rect->height / font_width;
|
||
+ rect->length = (unsigned char)min(strlen(str), (size_t)(c_width * c_height));
|
||
+ rect->text_height = min(rect->length, c_height);
|
||
+ for (rect->text_width = 0; rect->text_width < c_width; rect->text_width++)
|
||
+ if (rect->text_width * rect->text_height >= rect->length)
|
||
+ break;
|
||
+ rect->width = rect->text_width * font_height;
|
||
+ rect->height = rect->text_height * font_width;
|
||
+ rect->x1 = x;
|
||
+ rect->y2 = rows - 1 - y;
|
||
+ rect->x2 = rect->x1 + rect->width - 1;
|
||
+ rect->y1 = rect->y2 - rect->height + 1;
|
||
+ }
|
||
+ }
|
||
+
|
||
+#if GFX_MONO_CTRL_PRINT_DEBUG
|
||
+ pr_dbg2("str = %s, x = %d, y = %d, transposed = %d, c_width = %d, c_height = %d, length = %d, xy1 = (%d,%d), xy2 = (%d,%d), size = (%d,%d), text size = (%d,%d)\n",
|
||
+ str, x, y, transposed, c_width, c_height, rect->length, rect->x1, rect->y1, rect->x2, rect->y2, rect->width, rect->height, rect->text_width, rect->text_height);
|
||
+#endif
|
||
+}
|
||
diff --git a/drivers/leds/vfd/controllers/gfx_mono_ctrl.h b/drivers/leds/vfd/controllers/gfx_mono_ctrl.h
|
||
new file mode 100644
|
||
index 000000000..43570ad10
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/gfx_mono_ctrl.h
|
||
@@ -0,0 +1,58 @@
|
||
+#ifndef __GFXMONOCTRLH__
|
||
+#define __GFXMONOCTRLH__
|
||
+
|
||
+#include "controller.h"
|
||
+
|
||
+struct font {
|
||
+ unsigned char font_height;
|
||
+ unsigned char font_width;
|
||
+ unsigned short font_char_size;
|
||
+ unsigned char font_offset;
|
||
+ unsigned char font_char_count;
|
||
+ const unsigned char *font_bitmaps;
|
||
+};
|
||
+
|
||
+struct rect {
|
||
+ unsigned short x1;
|
||
+ unsigned short y1;
|
||
+ unsigned short x2;
|
||
+ unsigned short y2;
|
||
+ unsigned short width;
|
||
+ unsigned short height;
|
||
+ unsigned char text_width;
|
||
+ unsigned char text_height;
|
||
+ unsigned char length;
|
||
+ const struct font *font;
|
||
+};
|
||
+
|
||
+struct screen_view {
|
||
+ unsigned short columns;
|
||
+ unsigned short rows;
|
||
+ unsigned char colomn_offset;
|
||
+ unsigned char swap_banks_orientation : 1;
|
||
+ unsigned char reserved : 7;
|
||
+};
|
||
+
|
||
+struct specific_gfx_mono_ctrl
|
||
+{
|
||
+ unsigned char (*init)(void);
|
||
+ unsigned char (*set_display_type)(struct vfd_display *display);
|
||
+
|
||
+ void (*clear)(void);
|
||
+ void (*set_power)(unsigned char state);
|
||
+ void (*set_contrast)(unsigned char value);
|
||
+ unsigned char (*set_xy)(unsigned short x, unsigned short y);
|
||
+ void (*print_char)(char ch, const struct font *font_struct, unsigned char x, unsigned char y);
|
||
+ void (*print_string)(const unsigned char *buffer, const struct rect *rect);
|
||
+
|
||
+ void (*write_ctrl_command_buf)(const unsigned char *buf, unsigned int length);
|
||
+ void (*write_ctrl_command)(unsigned char cmd);
|
||
+ void (*write_ctrl_data_buf)(const unsigned char *buf, unsigned int length);
|
||
+ void (*write_ctrl_data)(unsigned char data);
|
||
+
|
||
+ const struct screen_view *screen_view;
|
||
+};
|
||
+
|
||
+struct controller_interface *init_gfx_mono_ctrl(struct vfd_dev *_dev, const struct specific_gfx_mono_ctrl *specific_gfx_mono_ctrl);
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/controllers/hd44780.c b/drivers/leds/vfd/controllers/hd44780.c
|
||
new file mode 100644
|
||
index 000000000..24dbbbdc9
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/hd44780.c
|
||
@@ -0,0 +1,760 @@
|
||
+#include "../protocols/i2c_sw.h"
|
||
+#include "hd44780.h"
|
||
+
|
||
+/* **************************** Define HD44780 Constants ****************************** */
|
||
+#define HD44780_CLEAR_RAM 0x01 /* Write mode command */
|
||
+#define HD44780_HOME 0x02 /* Increment or decrement address */
|
||
+#define HD44780_ENTRY_MODE 0x04 /* Write mode command */
|
||
+#define HD44780_EM_ID 0x02 /* Increment or decrement address */
|
||
+#define HD44780_EM_S 0x01 /* Accompanies display shift */
|
||
+#define HD44780_DISPLAY_CONTROL 0x08 /* Write mode command */
|
||
+#define HD44780_DC_D 0x04 /* Increment or decrement address */
|
||
+#define HD44780_DC_C 0x02 /* Accompanies display shift */
|
||
+#define HD44780_DC_B 0x01 /* Accompanies display shift */
|
||
+#define HD44780_CURESOR_SHIFT 0x10 /* Write mode command */
|
||
+#define HD44780_CS 0x08 /* FD650 Display On */
|
||
+#define HD44780_RL 0x04 /* FD650 Display Off */
|
||
+#define HD44780_FUNCTION 0x20 /* Set FD650 to work in 7-segment mode */
|
||
+#define HD44780_F_DL 0x10 /* Set FD650 to work in 8-segment mode */
|
||
+#define HD44780_F_N 0x08 /* Base data address */
|
||
+#define HD44780_F_F 0x04 /* Set display brightness command */
|
||
+#define HD44780_CGRA 0x40 /* Set CGRAM Address */
|
||
+#define HD44780_DDRA 0x80 /* Set DDRAM Address */
|
||
+/* ************************************************************************************ */
|
||
+#define BACKPACK_BACKLIGHT 0x08
|
||
+#define BACKPACK_ENABLE 0x04
|
||
+#define BACKPACK_READ 0x02
|
||
+#define BACKPACK_RS 0x01
|
||
+#define BACKPACK_CMD 0x00
|
||
+
|
||
+#define FLAGS_SHOW_SEC 0x01
|
||
+
|
||
+#define BIG_2L_DOT 0xA5
|
||
+#define BIG_4L_DOT 0x07
|
||
+#define CUSTOM_ELLIPSIS 0x07
|
||
+
|
||
+static const unsigned char cgram_4l_chars[8][8] = {
|
||
+ { 0x03, 0x07, 0x0F, 0x1F, 0x00, 0x00, 0x00, 0x00 }, // 0 - Top left
|
||
+ { 0x18, 0x1C, 0x1E, 0x1F, 0x00, 0x00, 0x00, 0x00 }, // 1 - Top right
|
||
+ { 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00 }, // 2 - Top center
|
||
+ { 0x1F, 0x0F, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00 }, // 3 - Bottom left
|
||
+ { 0x1F, 0x1E, 0x1C, 0x18, 0x00, 0x00, 0x00, 0x00 }, // 4 - Bottom right
|
||
+ { 0x03, 0x07, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F }, // 5 - Long left
|
||
+ { 0x18, 0x1C, 0x1E, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F }, // 6 - Long right
|
||
+ { 0x00, 0x00, 0x0E, 0x1F, 0x1F, 0x1F, 0x0E, 0x00 }, // 7 - Dot
|
||
+};
|
||
+
|
||
+static const unsigned char big_4l_chars[11][9] = {
|
||
+ { 5, 2, 6, 255, ' ', 255, 3, 2, 4 }, // 0
|
||
+ { 0, 255, ' ', ' ', 255, ' ', 2, 2, 2 }, // 1
|
||
+ { 0, 2, 6, 5, 2, 4, 3, 2, 4 }, // 2
|
||
+ { 0, 2, 6, ' ', 2, 255, 3, 2, 4 }, // 3
|
||
+ { 255, ' ', 255, 3, 2, 255, ' ', ' ', 2 }, // 4
|
||
+ { 255, 2, 4, 2, 2, 6, 3, 2, 4 }, // 5
|
||
+ { 5, 2, 1, 255, 2, 6, 3, 2, 4 }, // 6
|
||
+ { 3, 2, 255, ' ', 5, 4, ' ', 2, ' ' }, // 7
|
||
+ { 5, 2, 6, 255, 2, 255, 3, 2, 4 }, // 8
|
||
+ { 5, 2, 6, 3, 2, 255, 3, 2, 4 }, // 9
|
||
+
|
||
+ { 5, 2, 1, 255, ' ', ' ', 3, 2, 4 }, // C
|
||
+};
|
||
+
|
||
+static const unsigned char cgram_2l_chars[8][8] = {
|
||
+ { 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00 }, // char 1
|
||
+ { 0x18, 0x1C, 0x1E, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F }, // char 2
|
||
+ { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0F, 0x07, 0x03 }, // char 3
|
||
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F }, // char 4
|
||
+ { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1E, 0x1C, 0x18 }, // char 5
|
||
+ { 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x1F }, // char 6
|
||
+ { 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F }, // char 7
|
||
+ { 0x03, 0x07, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F }, // char 8
|
||
+};
|
||
+
|
||
+static const unsigned char big_2l_chars[11][6] = {
|
||
+ { 0x07, 0x00, 0x01, 0x02, 0x03, 0x04 }, // 0
|
||
+ { 0x08, 0x01, 0x20, 0x03, 0xFF, 0x03 }, // 1
|
||
+ { 0x05, 0x05, 0x01, 0xFF, 0x06, 0x06 }, // 2
|
||
+ { 0x00, 0x05, 0x01, 0x03, 0x06, 0x04 }, // 3
|
||
+ { 0x02, 0x03, 0xFF, 0x20, 0x20, 0xFF }, // 4
|
||
+ { 0xFF, 0x05, 0x05, 0x06, 0x06, 0x04 }, // 5
|
||
+ { 0x07, 0x05, 0x05, 0x02, 0x06, 0x04 }, // 6
|
||
+ { 0x00, 0x00, 0x01, 0x20, 0x07, 0x20 }, // 7
|
||
+ { 0x07, 0x05, 0x01, 0x02, 0x06, 0x04 }, // 8
|
||
+ { 0x07, 0x05, 0x01, 0x06, 0x06, 0x04 }, // 9
|
||
+
|
||
+ { 0x07, 0x00, 0x00, 0x02, 0x03, 0x03 }, // C
|
||
+};
|
||
+
|
||
+static const unsigned char cgram_ellipsis_chars[8] = {
|
||
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00
|
||
+};
|
||
+
|
||
+static unsigned char hd47780_init(void);
|
||
+static unsigned short hd47780_get_brightness_levels_count(void);
|
||
+static unsigned short hd47780_get_brightness_level(void);
|
||
+static unsigned char hd47780_set_brightness_level(unsigned short level);
|
||
+static unsigned char hd47780_get_power(void);
|
||
+static void hd47780_set_power(unsigned char state);
|
||
+static void hd47780_power_suspend(void) { hd47780_set_power(0); }
|
||
+static void hd47780_power_resume(void) { hd47780_init(); }
|
||
+static struct vfd_display *hd47780_get_display_type(void);
|
||
+static unsigned char hd47780_set_display_type(struct vfd_display *display);
|
||
+static void hd47780_set_icon(const char *name, unsigned char state);
|
||
+static size_t hd47780_read_data(unsigned char *data, size_t length);
|
||
+static size_t hd47780_write_data(const unsigned char *data, size_t length);
|
||
+static size_t hd47780_write_display_data(const struct vfd_display_data *data);
|
||
+
|
||
+static struct controller_interface hd47780_interface = {
|
||
+ .init = hd47780_init,
|
||
+ .get_brightness_levels_count = hd47780_get_brightness_levels_count,
|
||
+ .get_brightness_level = hd47780_get_brightness_level,
|
||
+ .set_brightness_level = hd47780_set_brightness_level,
|
||
+ .get_power = hd47780_get_power,
|
||
+ .set_power = hd47780_set_power,
|
||
+ .power_suspend = hd47780_power_suspend,
|
||
+ .power_resume = hd47780_power_resume,
|
||
+ .get_display_type = hd47780_get_display_type,
|
||
+ .set_display_type = hd47780_set_display_type,
|
||
+ .set_icon = hd47780_set_icon,
|
||
+ .read_data = hd47780_read_data,
|
||
+ .write_data = hd47780_write_data,
|
||
+ .write_display_data = hd47780_write_display_data,
|
||
+};
|
||
+
|
||
+static void print_2l_char(unsigned short ch, unsigned char pos, unsigned char is_clock);
|
||
+static void print_4l_char(unsigned short ch, unsigned char pos, unsigned char is_clock);
|
||
+static void print_clock(const struct vfd_display_data *data, unsigned char print_seconds);
|
||
+static void print_channel(const struct vfd_display_data *data);
|
||
+static void print_playback_time(const struct vfd_display_data *data);
|
||
+static void print_title(const struct vfd_display_data *data);
|
||
+static void print_date(const struct vfd_display_data *data);
|
||
+static void print_temperature(const struct vfd_display_data *data);
|
||
+
|
||
+static struct vfd_dev *dev = NULL;
|
||
+static struct protocol_interface *protocol = NULL;
|
||
+static unsigned char columns = 16;
|
||
+static unsigned char rows = 2;
|
||
+static unsigned char backlight = BACKPACK_BACKLIGHT;
|
||
+static unsigned char big_dot = BIG_2L_DOT;
|
||
+static struct vfd_display_data old_data;
|
||
+
|
||
+const char *days[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
|
||
+const char *months[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||
+ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
|
||
+
|
||
+struct controller_interface *init_hd47780(struct vfd_dev *_dev)
|
||
+{
|
||
+ dev = _dev;
|
||
+ memset(&old_data, 0, sizeof(old_data));
|
||
+ return &hd47780_interface;
|
||
+}
|
||
+
|
||
+static void write_4_bits(unsigned char data) {
|
||
+ unsigned char buffer[3] = { data, (unsigned char)(data | BACKPACK_ENABLE), data };
|
||
+ protocol->write_data(buffer, 3);
|
||
+}
|
||
+
|
||
+static void write_lcd(unsigned char data, unsigned char mode) {
|
||
+ unsigned char lo = (data & 0x0F) << 4;
|
||
+ unsigned char hi = (data & 0xF0);
|
||
+ mode |= backlight;
|
||
+ write_4_bits(hi | mode);
|
||
+ write_4_bits(lo | mode);
|
||
+}
|
||
+
|
||
+static void write_buf_lcd(const unsigned char *buf, unsigned int length)
|
||
+{
|
||
+ while (length--) {
|
||
+ write_lcd(*buf, BACKPACK_RS);
|
||
+ buf++;
|
||
+ }
|
||
+}
|
||
+
|
||
+static unsigned char read_4_bits(unsigned char mode) {
|
||
+ unsigned char data[2] = { (unsigned char)(mode | 0xF0), (unsigned char)(mode | 0xF0 | BACKPACK_ENABLE) };
|
||
+ protocol->write_data(data, 2);
|
||
+ protocol->read_byte(data + 1);
|
||
+ protocol->write_data(&mode, 1);
|
||
+ return data[1];
|
||
+}
|
||
+
|
||
+static unsigned char read_lcd(unsigned char mode) {
|
||
+ unsigned char lo;
|
||
+ unsigned char hi;
|
||
+ mode &= ~BACKPACK_ENABLE;
|
||
+ mode |= backlight | BACKPACK_READ;
|
||
+ hi = read_4_bits(mode);
|
||
+ lo = read_4_bits(mode);
|
||
+ return ((hi & 0xF0) | (lo >> 4));
|
||
+}
|
||
+
|
||
+static unsigned char hd47780_init(void)
|
||
+{
|
||
+ unsigned char cmd = 0;
|
||
+ protocol = init_sw_i2c(dev->dtb_active.display.reserved & 0x7F, MSB_FIRST, 1, dev->clk_pin, dev->dat_pin, I2C_DELAY_500KHz, NULL);
|
||
+ if (!protocol)
|
||
+ return 0;
|
||
+
|
||
+ old_data.mode = DISPLAY_MODE_NONE;
|
||
+ columns = (dev->dtb_active.display.type & 0x1F) << 1;
|
||
+ rows = (dev->dtb_active.display.type >> 5) & 0x07;
|
||
+ rows++;
|
||
+ big_dot = rows > 2 ? BIG_4L_DOT : BIG_2L_DOT;
|
||
+
|
||
+ write_4_bits(0x03 << 4);
|
||
+ usleep_range(4300, 5000);
|
||
+ write_4_bits(0x03 << 4);
|
||
+ udelay(150);
|
||
+ write_4_bits(0x03 << 4);
|
||
+ udelay(150);
|
||
+ write_4_bits(0x02 << 4);
|
||
+ udelay(150);
|
||
+ cmd = HD44780_FUNCTION;
|
||
+ if (rows > 1)
|
||
+ cmd |= HD44780_F_N | HD44780_F_F;
|
||
+ write_lcd(cmd, BACKPACK_CMD);
|
||
+ udelay(150);
|
||
+ write_lcd(HD44780_DISPLAY_CONTROL, BACKPACK_CMD);
|
||
+ write_lcd(HD44780_CLEAR_RAM, BACKPACK_CMD);
|
||
+ usleep_range(1600, 2000);
|
||
+ write_lcd(HD44780_ENTRY_MODE | HD44780_EM_ID, BACKPACK_CMD);
|
||
+ write_lcd(HD44780_DISPLAY_CONTROL | HD44780_DC_D, BACKPACK_CMD);
|
||
+
|
||
+ if (rows >= 3) {
|
||
+ write_lcd(HD44780_CGRA, BACKPACK_CMD);
|
||
+ write_buf_lcd((const unsigned char *)cgram_4l_chars, 64);
|
||
+ } else if (rows == 2) {
|
||
+ write_lcd(HD44780_CGRA, BACKPACK_CMD);
|
||
+ write_buf_lcd((const unsigned char *)cgram_2l_chars, 64);
|
||
+ }
|
||
+
|
||
+ hd47780_set_brightness_level(dev->brightness);
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+static unsigned short hd47780_get_brightness_levels_count(void)
|
||
+{
|
||
+ return 2;
|
||
+}
|
||
+
|
||
+static unsigned short hd47780_get_brightness_level(void)
|
||
+{
|
||
+ return dev->brightness;
|
||
+}
|
||
+
|
||
+static unsigned char hd47780_set_brightness_level(unsigned short level)
|
||
+{
|
||
+ dev->brightness = level;
|
||
+ dev->power = 1;
|
||
+ backlight = dev->power && dev->brightness > 0 ? BACKPACK_BACKLIGHT : 0;
|
||
+ write_lcd(HD44780_DISPLAY_CONTROL | HD44780_DC_D, BACKPACK_CMD);
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+static unsigned char hd47780_get_power(void)
|
||
+{
|
||
+ return dev->power;
|
||
+}
|
||
+
|
||
+static void hd47780_set_power(unsigned char state)
|
||
+{
|
||
+ dev->power = state;
|
||
+ if (state)
|
||
+ hd47780_set_brightness_level(dev->brightness);
|
||
+ else {
|
||
+ backlight = 0;
|
||
+ write_lcd(HD44780_DISPLAY_CONTROL, BACKPACK_CMD);
|
||
+ }
|
||
+}
|
||
+
|
||
+static struct vfd_display *hd47780_get_display_type(void)
|
||
+{
|
||
+ return &dev->dtb_active.display;
|
||
+}
|
||
+
|
||
+static unsigned char hd47780_set_display_type(struct vfd_display *display)
|
||
+{
|
||
+ unsigned char ret = 0;
|
||
+ if (display->controller == CONTROLLER_HD44780)
|
||
+ {
|
||
+ dev->dtb_active.display = *display;
|
||
+ hd47780_init();
|
||
+ ret = 1;
|
||
+ }
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static void hd47780_set_icon(const char *name, unsigned char state)
|
||
+{
|
||
+ if (strncmp(name,"colon",5) == 0)
|
||
+ dev->status_led_mask = state ? (dev->status_led_mask | ledDots[LED_DOT_SEC]) : (dev->status_led_mask & ~ledDots[LED_DOT_SEC]);
|
||
+}
|
||
+
|
||
+static size_t hd47780_read_data(unsigned char *data, size_t length)
|
||
+{
|
||
+ size_t count = length;
|
||
+ write_lcd(HD44780_HOME, BACKPACK_CMD);
|
||
+ while (count--) {
|
||
+ *data = read_lcd(BACKPACK_RS);
|
||
+ data++;
|
||
+ }
|
||
+ return length;
|
||
+}
|
||
+
|
||
+static size_t hd47780_write_data(const unsigned char *data, size_t length)
|
||
+{
|
||
+ size_t i;
|
||
+ if (length == 0)
|
||
+ return 0;
|
||
+
|
||
+ if (rows >= 3) {
|
||
+ unsigned char dot;
|
||
+ const unsigned short *wdata = (const unsigned short *)data;
|
||
+ length /= 2;
|
||
+ for (i = 1; i < length; i++)
|
||
+ print_4l_char(wdata[i] - 0x30, i-1, 1);
|
||
+ if ((data[0] | dev->status_led_mask) & ledDots[LED_DOT_SEC])
|
||
+ dot = big_dot;
|
||
+ else
|
||
+ dot = ' ';
|
||
+ write_lcd(HD44780_DDRA + 0x06, BACKPACK_CMD);
|
||
+ write_lcd(dot, BACKPACK_RS);
|
||
+ write_lcd(HD44780_DDRA + 0x46, BACKPACK_CMD);
|
||
+ write_lcd(dot, BACKPACK_RS);
|
||
+ }
|
||
+ else {
|
||
+ write_lcd(HD44780_HOME, BACKPACK_CMD);
|
||
+ usleep_range(1600, 2000);
|
||
+ if (length > 2)
|
||
+ write_lcd(data[2], BACKPACK_RS);
|
||
+ if (length > 4)
|
||
+ write_lcd(data[4], BACKPACK_RS);
|
||
+ if ((data[0] | dev->status_led_mask) & ledDots[LED_DOT_SEC])
|
||
+ write_lcd(':', BACKPACK_RS);
|
||
+ else
|
||
+ write_lcd(' ', BACKPACK_RS);
|
||
+ if (length > 6)
|
||
+ write_lcd(data[6], BACKPACK_RS);
|
||
+ if (length > 8)
|
||
+ write_lcd(data[8], BACKPACK_RS);
|
||
+ }
|
||
+
|
||
+ return length;
|
||
+}
|
||
+
|
||
+static size_t hd47780_write_display_data(const struct vfd_display_data *data)
|
||
+{
|
||
+ size_t status = sizeof(*data);
|
||
+ if (data->mode != old_data.mode) {
|
||
+ memset(&old_data, 0, sizeof(old_data));
|
||
+ write_lcd(HD44780_CLEAR_RAM, BACKPACK_CMD);
|
||
+ usleep_range(2000, 2500);
|
||
+ switch (data->mode) {
|
||
+ case DISPLAY_MODE_CLOCK:
|
||
+ case DISPLAY_MODE_PLAYBACK_TIME:
|
||
+ case DISPLAY_MODE_DATE:
|
||
+ write_lcd(HD44780_CGRA | 0x38, BACKPACK_CMD);
|
||
+ if (rows != 2)
|
||
+ write_buf_lcd(cgram_4l_chars[7], 8);
|
||
+ else
|
||
+ write_buf_lcd(cgram_2l_chars[7], 8);
|
||
+ break;
|
||
+ case DISPLAY_MODE_CHANNEL:
|
||
+ write_lcd(HD44780_CGRA | 0x38, BACKPACK_CMD);
|
||
+ if (rows != 2)
|
||
+ write_buf_lcd(cgram_ellipsis_chars, 8);
|
||
+ else
|
||
+ write_buf_lcd(cgram_2l_chars[7], 8);
|
||
+ break;
|
||
+ case DISPLAY_MODE_TITLE:
|
||
+ write_lcd(HD44780_CGRA | 0x38, BACKPACK_CMD);
|
||
+ write_buf_lcd(cgram_ellipsis_chars, 8);
|
||
+ break;
|
||
+ case DISPLAY_MODE_TEMPERATURE:
|
||
+ if (rows == 2) {
|
||
+ write_lcd(HD44780_CGRA | 0x38, BACKPACK_CMD);
|
||
+ write_buf_lcd(cgram_2l_chars[7], 8);
|
||
+ }
|
||
+ break;
|
||
+ default:
|
||
+ break;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ switch (data->mode) {
|
||
+ case DISPLAY_MODE_CLOCK:
|
||
+ print_clock(data, 1);
|
||
+ break;
|
||
+ case DISPLAY_MODE_DATE:
|
||
+ print_date(data);
|
||
+ break;
|
||
+ case DISPLAY_MODE_CHANNEL:
|
||
+ write_lcd(HD44780_CLEAR_RAM, BACKPACK_CMD);
|
||
+ usleep_range(2000, 2500);
|
||
+ print_channel(data);
|
||
+ break;
|
||
+ case DISPLAY_MODE_PLAYBACK_TIME:
|
||
+ print_playback_time(data);
|
||
+ break;
|
||
+ case DISPLAY_MODE_TITLE:
|
||
+ print_title(data);
|
||
+ break;
|
||
+ case DISPLAY_MODE_TEMPERATURE:
|
||
+ print_temperature(data);
|
||
+ break;
|
||
+ default:
|
||
+ status = 0;
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ old_data = *data;
|
||
+ return status;
|
||
+}
|
||
+
|
||
+static void set_xy(unsigned short row, unsigned char column)
|
||
+{
|
||
+ unsigned char offset = 0x00;
|
||
+ if (column < columns && row < rows) {
|
||
+ switch (rows) {
|
||
+ case 2:
|
||
+ if (row == 1)
|
||
+ offset = 0x40;
|
||
+ break;
|
||
+ case 4:
|
||
+ if (row % 2)
|
||
+ offset = 0x40;
|
||
+ if (row >= 2)
|
||
+ offset += columns;
|
||
+ break;
|
||
+ };
|
||
+
|
||
+ offset += column;
|
||
+ write_lcd(HD44780_DDRA | offset, BACKPACK_CMD);
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_2l_char(unsigned short ch, unsigned char pos, unsigned char is_clock)
|
||
+{
|
||
+ unsigned char i;
|
||
+ if (ch >= 10) {
|
||
+ pr_dbg2("print_2l_char: ch = %d, out of bounds\n", ch);
|
||
+ return;
|
||
+ }
|
||
+ pos *= 3;
|
||
+ if (is_clock) {
|
||
+ if (pos >= 6)
|
||
+ pos++;
|
||
+ if (pos >= 12)
|
||
+ pos++;
|
||
+ }
|
||
+ for (i = 0; i < 2; i++) {
|
||
+ set_xy(i, pos);
|
||
+ write_buf_lcd(big_2l_chars[ch] + (i * 3), 3);
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_4l_char(unsigned short ch, unsigned char pos, unsigned char is_clock)
|
||
+{
|
||
+ unsigned char i;
|
||
+ if (ch >= 10) {
|
||
+ pr_dbg2("print_4l_char: ch = %d, out of bounds\n", ch);
|
||
+ return;
|
||
+ }
|
||
+ pos *= 3;
|
||
+ if (is_clock) {
|
||
+ if (pos >= 6)
|
||
+ pos++;
|
||
+ if (pos >= 12)
|
||
+ pos++;
|
||
+ }
|
||
+ for (i = 0; i < 3; i++) {
|
||
+ set_xy(i, pos);
|
||
+ write_buf_lcd(big_4l_chars[ch] + (i * 3), 3);
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_colon(unsigned char colon_on, unsigned char print_seconds)
|
||
+{
|
||
+ unsigned char dot;
|
||
+ if (colon_on != old_data.colon_on) {
|
||
+ if (rows >= 2) {
|
||
+ dot = colon_on ? big_dot : ' ';
|
||
+ write_lcd(HD44780_DDRA + 6, BACKPACK_CMD);
|
||
+ write_lcd(dot, BACKPACK_RS);
|
||
+ write_lcd(HD44780_DDRA + 0x40 + 6, BACKPACK_CMD);
|
||
+ write_lcd(dot, BACKPACK_RS);
|
||
+ if (print_seconds) {
|
||
+ write_lcd(HD44780_DDRA + 13, BACKPACK_CMD);
|
||
+ write_lcd(dot, BACKPACK_RS);
|
||
+ write_lcd(HD44780_DDRA + 0x40 + 13, BACKPACK_CMD);
|
||
+ write_lcd(dot, BACKPACK_RS);
|
||
+ }
|
||
+ } else {
|
||
+ dot = colon_on ? ':' : ' ';
|
||
+ write_lcd(HD44780_DDRA + 2, BACKPACK_CMD);
|
||
+ write_lcd(dot, BACKPACK_RS);
|
||
+ if (print_seconds) {
|
||
+ write_lcd(HD44780_DDRA + 5, BACKPACK_CMD);
|
||
+ write_lcd(dot, BACKPACK_RS);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_number(const char *buffer, size_t length, unsigned char start_index, unsigned char is_clock)
|
||
+{
|
||
+ unsigned char i;
|
||
+ if (rows > 2) {
|
||
+ for (i = 0; i < length; i++)
|
||
+ print_4l_char(buffer[i] - 0x30, i + start_index, is_clock);
|
||
+ } else if (rows == 2) {
|
||
+ for (i = 0; i < length; i++)
|
||
+ print_2l_char(buffer[i] - 0x30, i + start_index, is_clock);
|
||
+ } else {
|
||
+ if (is_clock) {
|
||
+ if (start_index >= 2)
|
||
+ start_index++;
|
||
+ if (start_index >= 4)
|
||
+ start_index++;
|
||
+ }
|
||
+ write_lcd(HD44780_DDRA + start_index, BACKPACK_CMD);
|
||
+ for (i = 0; i < length; i++)
|
||
+ write_lcd(buffer[i], BACKPACK_RS);
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_clock(const struct vfd_display_data *data, unsigned char print_seconds)
|
||
+{
|
||
+ char buffer[10];
|
||
+ unsigned char force_print = old_data.mode == DISPLAY_MODE_NONE;
|
||
+ print_seconds &= (dev->dtb_active.display.flags & FLAGS_SHOW_SEC) && columns >= 20;
|
||
+ print_colon(data->colon_on, print_seconds);
|
||
+ if (data->time_date.hours != old_data.time_date.hours || force_print) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.hours);
|
||
+ print_number(buffer, 2, 0, TRUE);
|
||
+ }
|
||
+ if (data->time_date.minutes != old_data.time_date.minutes || force_print) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.minutes);
|
||
+ print_number(buffer, 2, 2, TRUE);
|
||
+ }
|
||
+ if (print_seconds && (data->time_date.seconds != old_data.time_date.seconds || force_print)) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.seconds);
|
||
+ print_number(buffer, 2, 4, TRUE);
|
||
+ }
|
||
+ if (rows >= 2 && columns >= 20 && (data->time_date.day != old_data.time_date.day ||
|
||
+ data->time_date.month != old_data.time_date.month || data->time_date.year != old_data.time_date.year)) {
|
||
+ size_t len;
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%s %02d", months[data->time_date.month], data->time_date.day);
|
||
+ set_xy(0, columns - len);
|
||
+ write_buf_lcd(buffer, len);
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%d", data->time_date.year);
|
||
+ set_xy(1, columns - len);
|
||
+ write_buf_lcd(buffer, len);
|
||
+ if (rows >= 3) {
|
||
+ len = strlen(days[data->time_date.day_of_week]);
|
||
+ set_xy(2, columns - len);
|
||
+ write_buf_lcd(days[data->time_date.day_of_week], len);
|
||
+ }
|
||
+ if (rows >= 4) {
|
||
+ set_xy(3, 0);
|
||
+ write_buf_lcd(data->string_main, min(strlen(data->string_main), (size_t)columns));
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_channel(const struct vfd_display_data *data)
|
||
+{
|
||
+ size_t len, max_len = (columns / 3);
|
||
+ char buffer[81];
|
||
+ if (rows >= 2) {
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%d", data->channel_data.channel);
|
||
+ if (len > max_len) {
|
||
+ print_number(buffer + (len - max_len), max_len, 0, FALSE);
|
||
+ len = max_len;
|
||
+ } else
|
||
+ print_number(buffer, len, 0, FALSE);
|
||
+ len *= 3;
|
||
+ if (columns - len >= 7) {
|
||
+ unsigned char row = 0;
|
||
+ if (rows > 2 && data->channel_data.channel_count > 0) {
|
||
+ len = scnprintf(buffer, sizeof(buffer), "/%d", data->channel_data.channel_count);
|
||
+ if (len <= 7) {
|
||
+ set_xy(row++, columns - len);
|
||
+ write_buf_lcd(buffer, len);
|
||
+ }
|
||
+ }
|
||
+ if (data->time_date.hours < 24 && data->time_secondary.hours < 24) {
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%02d:%02d-", data->time_date.hours, data->time_date.minutes);
|
||
+ set_xy(row++, columns - len);
|
||
+ write_buf_lcd(buffer, len);
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%02d:%02d ", data->time_secondary.hours, data->time_secondary.minutes);
|
||
+ set_xy(row++, columns - len);
|
||
+ write_buf_lcd(buffer, len);
|
||
+ }
|
||
+ if (rows >= 4) {
|
||
+ set_xy(3, 0);
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%s", data->string_main);
|
||
+ if (len > columns) {
|
||
+ len = columns;
|
||
+ buffer[len - 1] = CUSTOM_ELLIPSIS;
|
||
+ }
|
||
+ write_buf_lcd(buffer, len);
|
||
+ }
|
||
+ }
|
||
+ } else {
|
||
+ write_lcd(HD44780_DDRA, BACKPACK_CMD);
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%d/%d", data->channel_data.channel, data->channel_data.channel_count);
|
||
+ if (len > columns) {
|
||
+ len = columns;
|
||
+ buffer[len - 1] = CUSTOM_ELLIPSIS;
|
||
+ }
|
||
+ write_buf_lcd(buffer, len);
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_playback_time(const struct vfd_display_data *data)
|
||
+{
|
||
+ char buffer[21];
|
||
+ unsigned char force_print = old_data.mode == DISPLAY_MODE_NONE || data->time_date.hours != old_data.time_date.hours;
|
||
+ print_colon(data->colon_on, FALSE);
|
||
+ if (data->time_date.hours > 0) {
|
||
+ if (data->time_date.hours != old_data.time_date.hours || force_print) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.hours);
|
||
+ print_number(buffer, 2, 0, TRUE);
|
||
+ if (rows >= 3)
|
||
+ write_lcd('H', BACKPACK_RS);
|
||
+ }
|
||
+ if (data->time_date.minutes != old_data.time_date.minutes || force_print) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.minutes);
|
||
+ print_number(buffer, 2, 2, TRUE);
|
||
+ write_lcd('M', BACKPACK_RS);
|
||
+ }
|
||
+ } else {
|
||
+ if (data->time_date.minutes != old_data.time_date.minutes || force_print) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.minutes);
|
||
+ print_number(buffer, 2, 0, TRUE);
|
||
+ if (rows >= 3)
|
||
+ write_lcd('M', BACKPACK_RS);
|
||
+ }
|
||
+ if (data->time_date.seconds != old_data.time_date.seconds || force_print) {
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d", data->time_date.seconds);
|
||
+ print_number(buffer, 2, 2, TRUE);
|
||
+ write_lcd('S', BACKPACK_RS);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ if (rows >= 2 && columns >= 20) {
|
||
+ size_t len = 0;
|
||
+ unsigned char mins = data->time_secondary.minutes + ((data->time_secondary.seconds >= 30) ? 1 : 0);
|
||
+ unsigned char hours = data->time_secondary.hours;
|
||
+ if (mins >= 60) {
|
||
+ mins %= 60;
|
||
+ hours++;
|
||
+ }
|
||
+ len = scnprintf(buffer, sizeof(buffer), "/%02d:%02d", hours, mins);
|
||
+ set_xy(0, columns - len);
|
||
+ write_buf_lcd(buffer, len);
|
||
+ }
|
||
+
|
||
+ if (rows >= 4) {
|
||
+ set_xy(3, 0);
|
||
+ write_buf_lcd(data->string_main, min(strlen(data->string_main), (size_t)columns));
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_title(const struct vfd_display_data *data)
|
||
+{
|
||
+ size_t len;
|
||
+ char buffer[81];
|
||
+ if (rows >= 2) {
|
||
+ unsigned char i, row, max_len = columns * (rows - 1);
|
||
+ set_xy(0, 0);
|
||
+ write_buf_lcd(data->string_secondary, min(strlen(data->string_secondary), (size_t)columns));
|
||
+
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%s", data->string_main);
|
||
+ if (len > max_len) {
|
||
+ len = max_len;
|
||
+ buffer[len - 1] = CUSTOM_ELLIPSIS;
|
||
+ }
|
||
+ for (i = 0, row = 1; i < len; i += columns, row++) {
|
||
+ set_xy(row, 0);
|
||
+ write_buf_lcd(buffer + i, min(len - i, (size_t)columns));
|
||
+ }
|
||
+ } else {
|
||
+ set_xy(0, 0);
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%s", data->string_main);
|
||
+ if (len > columns) {
|
||
+ len = columns;
|
||
+ buffer[len - 1] = CUSTOM_ELLIPSIS;
|
||
+ }
|
||
+ write_buf_lcd(buffer, len);
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_date(const struct vfd_display_data *data)
|
||
+{
|
||
+ char buffer[21];
|
||
+ size_t len;
|
||
+ unsigned char i = 0;
|
||
+ unsigned char force_print = old_data.mode == DISPLAY_MODE_NONE || data->time_date.month != old_data.time_date.month || data->time_date.day != old_data.time_date.day;
|
||
+ if (force_print) {
|
||
+ if (rows >= 2) {
|
||
+ if (data->time_secondary._reserved)
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d%02d", data->time_date.month + 1, data->time_date.day);
|
||
+ else
|
||
+ scnprintf(buffer, sizeof(buffer), "%02d%02d", data->time_date.day, data->time_date.month + 1);
|
||
+ for (i = 0; i < min(rows, (unsigned char)3); i++) {
|
||
+ set_xy(i, 6);
|
||
+ write_lcd('|', BACKPACK_RS);
|
||
+ }
|
||
+ print_number(buffer, 4, 0, 1);
|
||
+ if (rows >= 4) {
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%04d, %s, %s", data->time_date.year, months[data->time_date.month], days[data->time_date.day_of_week]);
|
||
+ set_xy(3, 0);
|
||
+ write_buf_lcd(buffer, min((size_t)columns, len));
|
||
+ }
|
||
+ } else {
|
||
+ if (data->time_secondary._reserved)
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%02d/%02d", data->time_date.month + 1, data->time_date.day);
|
||
+ else
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%02d/%02d", data->time_date.day, data->time_date.month + 1);
|
||
+ if (columns <= 8)
|
||
+ len += scnprintf(buffer + len, sizeof(buffer) - len, "/%02d", data->time_date.year % 100);
|
||
+ else
|
||
+ len += scnprintf(buffer + len, sizeof(buffer) - len, "/%04d", data->time_date.year);
|
||
+ set_xy(0, 0);
|
||
+ write_buf_lcd(buffer, min((size_t)columns, len));
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+static void print_temperature(const struct vfd_display_data *data)
|
||
+{
|
||
+ unsigned char i;
|
||
+ char buffer[10];
|
||
+ if (data->temperature != old_data.temperature) {
|
||
+ size_t len = scnprintf(buffer, sizeof(buffer), "%d", data->temperature);
|
||
+ print_number(buffer, len, 0, FALSE);
|
||
+ if (rows >= 2) {
|
||
+ len *= 3;
|
||
+ set_xy(0, len);
|
||
+ write_lcd('o', BACKPACK_RS);
|
||
+ len++;
|
||
+ if (rows > 2) {
|
||
+ for (i = 0; i < 3; i++) {
|
||
+ set_xy(i, len);
|
||
+ write_buf_lcd(big_4l_chars[10] + (i * 3), 3);
|
||
+ }
|
||
+ }
|
||
+ else {
|
||
+ for (i = 0; i < 2; i++) {
|
||
+ set_xy(i, len);
|
||
+ write_buf_lcd(big_2l_chars[10] + (i * 3), 3);
|
||
+ }
|
||
+ }
|
||
+ } else {
|
||
+ size_t len = scnprintf(buffer, sizeof(buffer), "%cC", 0xDF);
|
||
+ write_buf_lcd(buffer, len);
|
||
+ }
|
||
+ }
|
||
+}
|
||
diff --git a/drivers/leds/vfd/controllers/hd44780.h b/drivers/leds/vfd/controllers/hd44780.h
|
||
new file mode 100644
|
||
index 000000000..a276e873c
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/hd44780.h
|
||
@@ -0,0 +1,8 @@
|
||
+#ifndef __HD44780H__
|
||
+#define __HD44780H__
|
||
+
|
||
+#include "controller.h"
|
||
+
|
||
+struct controller_interface *init_hd47780(struct vfd_dev *dev);
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/controllers/il3829.c b/drivers/leds/vfd/controllers/il3829.c
|
||
new file mode 100644
|
||
index 000000000..8bab4e8e6
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/il3829.c
|
||
@@ -0,0 +1,513 @@
|
||
+#include <linux/gpio.h>
|
||
+#include <linux/list.h>
|
||
+#include <linux/jiffies.h>
|
||
+#include <linux/kthread.h>
|
||
+#include "../protocols/i2c_hw.h"
|
||
+#include "../protocols/i2c_sw.h"
|
||
+#include "../protocols/spi_sw.h"
|
||
+#include "il3829.h"
|
||
+#include "gfx_mono_ctrl.h"
|
||
+
|
||
+static unsigned char il3829_init(void);
|
||
+static unsigned char il3829_set_display_type(struct vfd_display *display);
|
||
+static void il3829_clear(void);
|
||
+static void il3829_set_power(unsigned char state);
|
||
+static void il3829_set_contrast(unsigned char value);
|
||
+static unsigned char il3829_set_xy(unsigned short x, unsigned short y);
|
||
+static void il3829_set_area(const struct rect *rect);
|
||
+static void il3829_print_char(char ch, const struct font *font_struct, unsigned char x, unsigned char y);
|
||
+static void il3829_print_string(const unsigned char *buffer, const struct rect *rect);
|
||
+static void il3829_write_ctrl_command_data_buf(const unsigned char *buf, unsigned int length);
|
||
+static void il3829_write_ctrl_command(unsigned char cmd);
|
||
+static void il3829_write_ctrl_data_buf(const unsigned char *buf, unsigned int length);
|
||
+static void il3829_write_ctrl_data(unsigned char data);
|
||
+
|
||
+static struct screen_view screen_view = { 0 };
|
||
+
|
||
+static struct specific_gfx_mono_ctrl il3829_gfx_mono_ctrl = {
|
||
+ .init = il3829_init,
|
||
+ .set_display_type = il3829_set_display_type,
|
||
+ .clear = il3829_clear,
|
||
+ .set_power = il3829_set_power,
|
||
+ .set_contrast = il3829_set_contrast,
|
||
+ .set_xy = il3829_set_xy,
|
||
+ .print_char = il3829_print_char,
|
||
+ .print_string = il3829_print_string,
|
||
+ .write_ctrl_command_buf = il3829_write_ctrl_command_data_buf,
|
||
+ .write_ctrl_command = il3829_write_ctrl_command,
|
||
+ .write_ctrl_data_buf = il3829_write_ctrl_data_buf,
|
||
+ .write_ctrl_data = il3829_write_ctrl_data,
|
||
+ .screen_view = &screen_view,
|
||
+};
|
||
+
|
||
+enum {
|
||
+ TYPE_IL3829,
|
||
+ TYPE_IL3820,
|
||
+};
|
||
+
|
||
+struct il3829_display {
|
||
+ unsigned char columns : 3;
|
||
+ unsigned char banks : 3;
|
||
+ unsigned char offset : 2;
|
||
+
|
||
+ union {
|
||
+ struct {
|
||
+ unsigned char address : 7;
|
||
+ unsigned char not_i2c : 1;
|
||
+ } i2c;
|
||
+ struct {
|
||
+ unsigned char disp_type : 4;
|
||
+ unsigned char reserved1 : 3;
|
||
+ unsigned char is_spi : 1;
|
||
+ } spi;
|
||
+ };
|
||
+
|
||
+ unsigned char flags_secs : 1;
|
||
+ unsigned char flags_invert : 1;
|
||
+ unsigned char flags_transpose : 1;
|
||
+ unsigned char flags_rotate : 1;
|
||
+ unsigned char flags_ext_vcc : 1;
|
||
+ unsigned char flags_alt_com_conf : 1;
|
||
+ unsigned char flags_low_freq : 1;
|
||
+ unsigned char reserved2 : 1;
|
||
+
|
||
+ unsigned char controller;
|
||
+};
|
||
+
|
||
+struct write_list {
|
||
+ struct rect rect;
|
||
+ unsigned short buffer_length;
|
||
+ unsigned char *buffer;
|
||
+ struct list_head list;
|
||
+};
|
||
+
|
||
+static void il3829_init_display(unsigned char is_full_mode);
|
||
+
|
||
+#define GxGDEP015OC1_POWER_DELAY 150
|
||
+#define GxGDEP015OC1_PU_DELAY 325
|
||
+#define GxGDEP015OC1_FU_DELAY 1300
|
||
+
|
||
+const unsigned char LUTDefault_full[] =
|
||
+{
|
||
+ 0x32, // command
|
||
+ 0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x22, 0x22, 0x66, 0x69, 0x69, 0x59, 0x58, 0x99, 0x99,
|
||
+ 0x88, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xB4, 0x13, 0x51, 0x35, 0x51, 0x51, 0x19, 0x01, 0x00
|
||
+};
|
||
+
|
||
+const unsigned char LUTDefault_part[] =
|
||
+{
|
||
+ 0x32, // command
|
||
+ 0x10, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x44, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||
+};
|
||
+
|
||
+static struct vfd_dev *dev = NULL;
|
||
+static struct protocol_interface *protocol;
|
||
+static unsigned short rows = 200;
|
||
+static unsigned short banks = 200 / 8;
|
||
+static unsigned char row_offset = 0;
|
||
+static const unsigned char ram_buffer_blank[] = { [0 ... ((200 * 200 / 8) - 1)] = 0xFF };
|
||
+static const unsigned char is_full_mode = 1;
|
||
+static int pin_rst = -1;
|
||
+static int pin_dc = -1;
|
||
+static int pin_busy = -1;
|
||
+static struct il3829_display il3829_display;
|
||
+static struct write_list write_list;
|
||
+static unsigned char power_state = 0;
|
||
+
|
||
+static unsigned char is_needs_transpose(void)
|
||
+{
|
||
+ return il3829_display.spi.disp_type == TYPE_IL3820;
|
||
+}
|
||
+
|
||
+struct controller_interface *init_il3829(struct vfd_dev *_dev)
|
||
+{
|
||
+ dev = _dev;
|
||
+ INIT_LIST_HEAD(&write_list.list);
|
||
+ memcpy(&il3829_display, &dev->dtb_active.display, sizeof(il3829_display));
|
||
+ switch (il3829_display.spi.disp_type) {
|
||
+ case TYPE_IL3820:
|
||
+ banks = 128 / 8;
|
||
+ rows = 296;
|
||
+ break;
|
||
+ case TYPE_IL3829:
|
||
+ banks = 200 / 8;
|
||
+ rows = 200;
|
||
+ break;
|
||
+ }
|
||
+ if (is_needs_transpose()) {
|
||
+ screen_view.columns = rows / 8;
|
||
+ screen_view.rows = banks * 8;
|
||
+ } else {
|
||
+ screen_view.columns = banks;
|
||
+ screen_view.rows = rows;
|
||
+ }
|
||
+ screen_view.colomn_offset = 0;
|
||
+ screen_view.swap_banks_orientation = 1;
|
||
+ return init_gfx_mono_ctrl(_dev, &il3829_gfx_mono_ctrl);
|
||
+}
|
||
+
|
||
+static void il3829_write_ctrl_buf(unsigned char dc, const unsigned char *buf, unsigned int length)
|
||
+{
|
||
+ if (il3829_display.spi.is_spi) {
|
||
+ gpio_direction_output(pin_dc, dc ? 1 : 0);
|
||
+ protocol->write_data(buf, length);
|
||
+ } else {
|
||
+ protocol->write_cmd_data(&dc, 1, buf, length);
|
||
+ }
|
||
+}
|
||
+
|
||
+static void il3829_write_ctrl_command(unsigned char cmd)
|
||
+{
|
||
+ il3829_write_ctrl_buf(0x00, &cmd, 1);
|
||
+}
|
||
+
|
||
+static void il3829_write_ctrl_command_data_buf(const unsigned char *buf, unsigned int length)
|
||
+{
|
||
+ length--;
|
||
+ il3829_write_ctrl_command(*buf++);
|
||
+ il3829_write_ctrl_buf(0x40, buf, length);
|
||
+}
|
||
+
|
||
+static void il3829_write_ctrl_data_buf(const unsigned char *buf, unsigned int length)
|
||
+{
|
||
+ il3829_write_ctrl_buf(0x40, buf, length);
|
||
+}
|
||
+
|
||
+static void il3829_write_ctrl_data(unsigned char data)
|
||
+{
|
||
+ il3829_write_ctrl_buf(0x40, &data, 1);
|
||
+}
|
||
+
|
||
+static void il3829_wait_busy(unsigned short max_delay)
|
||
+{
|
||
+ if (pin_busy >= 0) {
|
||
+ unsigned short delay_count = 0;
|
||
+ while (delay_count < max_delay && gpio_get_value(pin_busy)) {
|
||
+ msleep(10);
|
||
+ delay_count += 10;
|
||
+ }
|
||
+ } else {
|
||
+ msleep(max_delay);
|
||
+ }
|
||
+}
|
||
+
|
||
+static void il3829_full_update(void)
|
||
+{
|
||
+ il3829_write_ctrl_command(0x22);
|
||
+ il3829_write_ctrl_data(0xC4);
|
||
+ il3829_write_ctrl_command(0x20);
|
||
+ il3829_write_ctrl_command(0xFF);
|
||
+ il3829_wait_busy(GxGDEP015OC1_FU_DELAY);
|
||
+}
|
||
+
|
||
+static void il3829_part_update(void)
|
||
+{
|
||
+ il3829_write_ctrl_command(0x22);
|
||
+ il3829_write_ctrl_data(0x04);
|
||
+ il3829_write_ctrl_command(0x20);
|
||
+ il3829_write_ctrl_command(0xFF);
|
||
+ il3829_wait_busy(GxGDEP015OC1_PU_DELAY);
|
||
+}
|
||
+
|
||
+inline static void il3829_update(unsigned char is_full_mode)
|
||
+{
|
||
+ if (is_full_mode)
|
||
+ il3829_full_update();
|
||
+ else
|
||
+ il3829_part_update();
|
||
+}
|
||
+
|
||
+struct task_struct *refresh_thread = NULL;
|
||
+
|
||
+static int refresh_thread_loop(void *data)
|
||
+{
|
||
+ unsigned int prev_msecs, delay;
|
||
+ while (!kthread_should_stop())
|
||
+ {
|
||
+ if (!mutex_trylock(dev->mutex)) {
|
||
+ msleep(1);
|
||
+ continue;
|
||
+ }
|
||
+ prev_msecs = jiffies_to_msecs(jiffies);
|
||
+ if (power_state) {
|
||
+ if (!list_empty(&write_list.list)) {
|
||
+ struct write_list *item, *tmp;
|
||
+ il3829_update(!is_full_mode);
|
||
+ list_for_each_entry_safe(item, tmp, &write_list.list, list) {
|
||
+ il3829_set_area(&item->rect);
|
||
+ il3829_set_xy(item->rect.x1, item->rect.y1);
|
||
+ il3829_write_ctrl_command(0x24);
|
||
+ il3829_write_ctrl_data_buf(item->buffer, item->buffer_length);
|
||
+ list_del(&item->list);
|
||
+ kfree(item->buffer);
|
||
+ kfree(item);
|
||
+ }
|
||
+ }
|
||
+ }
|
||
+ delay = min((unsigned int)500, (jiffies_to_msecs(jiffies) - prev_msecs));
|
||
+ mutex_unlock(dev->mutex);
|
||
+ if (!kthread_should_stop())
|
||
+ msleep(500 - delay);
|
||
+ }
|
||
+
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+static void stop_refresh_thread(void)
|
||
+{
|
||
+ if (refresh_thread)
|
||
+ {
|
||
+ kthread_stop(refresh_thread);
|
||
+ refresh_thread = NULL;
|
||
+ }
|
||
+}
|
||
+
|
||
+static void start_refresh_thread(void)
|
||
+{
|
||
+ if (!refresh_thread)
|
||
+ {
|
||
+ refresh_thread = kthread_create(refresh_thread_loop, NULL, "%s_e-ink_refresh_thread_loop", DEV_NAME);
|
||
+ wake_up_process(refresh_thread);
|
||
+ }
|
||
+}
|
||
+
|
||
+static void clear_write_list(void)
|
||
+{
|
||
+ struct write_list *item, *tmp;
|
||
+ list_for_each_entry_safe(item, tmp, &write_list.list, list) {
|
||
+ list_del(&item->list);
|
||
+ kfree(item->buffer);
|
||
+ kfree(item);
|
||
+ }
|
||
+}
|
||
+
|
||
+static void clear(unsigned char is_full_mode)
|
||
+{
|
||
+ struct rect full_rect = {
|
||
+ .x1 = 0x00, .x2 = banks - 1, .y1 = 0x00, .y2 = rows - 1
|
||
+ };
|
||
+ il3829_set_area(&full_rect);
|
||
+ il3829_set_xy(0, 0);
|
||
+ il3829_write_ctrl_command(0x24);
|
||
+ il3829_write_ctrl_data_buf(ram_buffer_blank, sizeof(ram_buffer_blank));
|
||
+ il3829_update(is_full_mode);
|
||
+}
|
||
+
|
||
+static void il3829_clear(void)
|
||
+{
|
||
+ clear_write_list();
|
||
+ il3829_init_display(is_full_mode);
|
||
+ clear(is_full_mode);
|
||
+ clear(is_full_mode);
|
||
+ il3829_init_display(!is_full_mode);
|
||
+}
|
||
+
|
||
+static void il3829_set_power(unsigned char state)
|
||
+{
|
||
+ power_state = state;
|
||
+ if (state) {
|
||
+ start_refresh_thread();
|
||
+ il3829_init_display(!is_full_mode);
|
||
+ } else {
|
||
+ stop_refresh_thread();
|
||
+ il3829_init_display(is_full_mode);
|
||
+ il3829_update(is_full_mode);
|
||
+ clear_write_list();
|
||
+ }
|
||
+
|
||
+ il3829_write_ctrl_command(0x22);
|
||
+ il3829_write_ctrl_data(state ? 0xC0 : 0xC3);
|
||
+ il3829_write_ctrl_command(0x20);
|
||
+ il3829_wait_busy(GxGDEP015OC1_POWER_DELAY);
|
||
+}
|
||
+
|
||
+static void il3829_set_contrast(unsigned char value)
|
||
+{
|
||
+}
|
||
+
|
||
+static unsigned char il3829_set_xy(unsigned short x, unsigned short y)
|
||
+{
|
||
+ unsigned char ret = 0;
|
||
+ y += row_offset;
|
||
+ if (x < banks || y < rows + row_offset) {
|
||
+ unsigned char x_buf[] = { 0x4E, x };
|
||
+ unsigned char y_buf[] = { 0x4F, (y & 0xFF), y >> 8 };
|
||
+ il3829_write_ctrl_command_data_buf(x_buf, sizeof(x_buf));
|
||
+ il3829_write_ctrl_command_data_buf(y_buf, sizeof(y_buf));
|
||
+ ret = 1;
|
||
+ }
|
||
+
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static void il3829_set_area(const struct rect *rect)
|
||
+{
|
||
+ unsigned char x_buf[] = { 0x44, rect->x1, rect->x2 };
|
||
+ unsigned char y_buf[] = { 0x45, rect->y1 & 0xFF, rect->y1 >> 8, rect->y2 & 0xFF, rect->y2 >> 8 };
|
||
+ il3829_write_ctrl_command_data_buf(x_buf, sizeof(x_buf));
|
||
+ il3829_write_ctrl_command_data_buf(y_buf, sizeof(y_buf));
|
||
+}
|
||
+
|
||
+static void il3829_print_char(char ch, const struct font *font_struct, unsigned char x, unsigned char y)
|
||
+{
|
||
+ unsigned short offset = 0;
|
||
+ struct rect rect = {
|
||
+ .x1 = x, .x2 = x + font_struct->font_width - 1, .y1 = y, .y2 = y + font_struct->font_height - 1,
|
||
+ .font = font_struct, .length = 1, .width = font_struct->font_width, .height = font_struct->font_height,
|
||
+ };
|
||
+ if (is_needs_transpose())
|
||
+ swap(x, y);
|
||
+ if (x >= banks || y >= rows || ch < font_struct->font_offset || ch >= font_struct->font_offset + font_struct->font_char_count)
|
||
+ return;
|
||
+
|
||
+ ch -= font_struct->font_offset;
|
||
+ offset = ch * font_struct->font_char_size;
|
||
+ offset += 4;
|
||
+ il3829_print_string(&font_struct->font_bitmaps[offset], &rect);
|
||
+}
|
||
+
|
||
+static inline void il3829_adjust_buffer(const struct write_list *item)
|
||
+{
|
||
+ unsigned short i;
|
||
+ for (i = 0; i < item->buffer_length; i++)
|
||
+ item->buffer[i] = ~item->buffer[i];
|
||
+}
|
||
+
|
||
+static void transpose_rect(struct rect *rect)
|
||
+{
|
||
+ struct rect tmp = *rect;
|
||
+ rect->x1 = (tmp.y1 / 8);
|
||
+ rect->x2 = (tmp.y2 / 8);
|
||
+ rect->y1 = rows - 8 - (tmp.x2 * 8);
|
||
+ rect->y2 = rows - (tmp.x1 * 8);
|
||
+ rect->width = tmp.height / 8;
|
||
+ rect->height = tmp.width * 8;
|
||
+}
|
||
+
|
||
+extern void transpose_buffer(unsigned char *buffer, const struct rect *rect);
|
||
+static void il3829_print_string(const unsigned char *buffer, const struct rect *_rect)
|
||
+{
|
||
+ struct write_list *new_write;
|
||
+
|
||
+ if (!power_state)
|
||
+ return;
|
||
+
|
||
+ new_write = kmalloc(sizeof(*new_write), GFP_KERNEL);
|
||
+ if (new_write) {
|
||
+ new_write->rect = *_rect;
|
||
+ new_write->buffer_length = _rect->length * _rect->font->font_char_size;
|
||
+ new_write->buffer = kmalloc(new_write->buffer_length, GFP_KERNEL);
|
||
+ if (new_write->buffer) {
|
||
+ list_add_tail(&new_write->list, &write_list.list);
|
||
+ memcpy(new_write->buffer, buffer, new_write->buffer_length);
|
||
+ il3829_adjust_buffer(new_write);
|
||
+
|
||
+ if (is_needs_transpose()) {
|
||
+ transpose_buffer(new_write->buffer, &new_write->rect);
|
||
+ transpose_rect(&new_write->rect);
|
||
+ }
|
||
+ il3829_set_area(&new_write->rect);
|
||
+ il3829_set_xy(new_write->rect.x1, new_write->rect.y1);
|
||
+ il3829_write_ctrl_command(0x24);
|
||
+ il3829_write_ctrl_data_buf(new_write->buffer, new_write->buffer_length);
|
||
+ } else {
|
||
+ kfree(new_write);
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+static void il3829_init_display(unsigned char is_full_mode)
|
||
+{
|
||
+ unsigned char gate_buf[] = {
|
||
+ 0x01, // [00] Gate setting
|
||
+ 0xC7, // [01] MUX [7:0] *x200 (200-1)
|
||
+ 0x00, // [02] MUX [8]
|
||
+ 0x00, // [03] Gate scan direction, order, output
|
||
+ };
|
||
+ unsigned char bssc_buf[] = {
|
||
+ 0x0C, // [04] Booster Soft start Control
|
||
+ 0xD7, // [05] Phase1
|
||
+ 0xD6, // [06] Phase2
|
||
+ 0x9D, // [07] Phase3
|
||
+ };
|
||
+ unsigned char vcom_buf[] = {
|
||
+ 0x2C, // [08] VCOM
|
||
+ 0x9B, // [09]
|
||
+ };
|
||
+ unsigned char dummy_buf[] = {
|
||
+ 0x3A, // [10] Set dummy line period
|
||
+ 0x1A, // [11] 4 dummy line per gate
|
||
+ };
|
||
+ unsigned char gate_line_buf[] = {
|
||
+ 0x3B, // [12] Set Gate line width
|
||
+ 0x08, // [13] 2us per line
|
||
+ };
|
||
+ unsigned char data_entry_buf[] = {
|
||
+ 0x11, // [1] Data Entry mode setting
|
||
+ 0x03, // [1] Y increment, X increment
|
||
+ };
|
||
+
|
||
+ if (il3829_display.spi.disp_type == TYPE_IL3820) {
|
||
+ gate_buf[1] = 0x27;
|
||
+ gate_buf[2] = 0x01;
|
||
+ }
|
||
+ il3829_write_ctrl_command_data_buf(gate_buf, sizeof(gate_buf));
|
||
+ il3829_write_ctrl_command_data_buf(bssc_buf, sizeof(bssc_buf));
|
||
+ il3829_write_ctrl_command_data_buf(vcom_buf, sizeof(vcom_buf));
|
||
+ il3829_write_ctrl_command_data_buf(dummy_buf, sizeof(dummy_buf));
|
||
+ il3829_write_ctrl_command_data_buf(gate_line_buf, sizeof(gate_line_buf));
|
||
+ il3829_write_ctrl_command_data_buf(data_entry_buf, sizeof(data_entry_buf));
|
||
+ if (is_full_mode)
|
||
+ il3829_write_ctrl_command_data_buf(LUTDefault_full, sizeof(LUTDefault_full));
|
||
+ else
|
||
+ il3829_write_ctrl_command_data_buf(LUTDefault_part, sizeof(LUTDefault_part));
|
||
+}
|
||
+
|
||
+static unsigned char il3829_init(void)
|
||
+{
|
||
+ if (il3829_display.spi.is_spi) {
|
||
+ if (dev->gpio1_pin.pin >= 0) {
|
||
+ protocol = init_sw_spi_3w(MSB_FIRST, dev->clk_pin, dev->dat_pin, dev->stb_pin, il3829_display.flags_low_freq ? SPI_DELAY_100KHz : SPI_DELAY_500KHz);
|
||
+ if (protocol) {
|
||
+ pin_rst = dev->gpio0_pin.pin;
|
||
+ pin_dc = dev->gpio1_pin.pin;
|
||
+ pin_busy = dev->gpio2_pin.pin;
|
||
+ if (pin_rst >= 0) {
|
||
+ gpio_direction_output(pin_rst, 0);
|
||
+ udelay(5);
|
||
+ gpio_direction_output(pin_rst, 1);
|
||
+ }
|
||
+ if (pin_busy >= 0)
|
||
+ gpio_direction_input(pin_busy);
|
||
+ }
|
||
+ } else {
|
||
+ pr_dbg2("IL3829 controller failed to intialize. Invalid DC (%d) pin\n", dev->gpio1_pin.pin);
|
||
+ }
|
||
+ } else {
|
||
+ if (dev->hw_protocol.protocol == PROTOCOL_I2C)
|
||
+ protocol = init_hw_i2c(il3829_display.i2c.address, dev->hw_protocol.device_id);
|
||
+ else
|
||
+ protocol = init_sw_i2c(il3829_display.i2c.address, MSB_FIRST, 1, dev->clk_pin, dev->dat_pin, il3829_display.flags_low_freq ? I2C_DELAY_100KHz : I2C_DELAY_500KHz, NULL);
|
||
+ }
|
||
+ if (!protocol)
|
||
+ return 0;
|
||
+
|
||
+ il3829_write_ctrl_command(0x12); // SW Reset.
|
||
+ il3829_clear();
|
||
+ il3829_wait_busy(GxGDEP015OC1_PU_DELAY);
|
||
+
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+static unsigned char il3829_set_display_type(struct vfd_display *display)
|
||
+{
|
||
+ unsigned char ret = 0;
|
||
+ if (display->controller == CONTROLLER_IL3829) {
|
||
+ dev->dtb_active.display = *display;
|
||
+ il3829_init();
|
||
+ ret = 1;
|
||
+ }
|
||
+
|
||
+ return ret;
|
||
+}
|
||
diff --git a/drivers/leds/vfd/controllers/il3829.h b/drivers/leds/vfd/controllers/il3829.h
|
||
new file mode 100644
|
||
index 000000000..f81202a55
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/il3829.h
|
||
@@ -0,0 +1,8 @@
|
||
+#ifndef __il3829H__
|
||
+#define __il3829H__
|
||
+
|
||
+#include "controller.h"
|
||
+
|
||
+struct controller_interface *init_il3829(struct vfd_dev *_dev);
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/controllers/pcd8544.c b/drivers/leds/vfd/controllers/pcd8544.c
|
||
new file mode 100644
|
||
index 000000000..117be9c03
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/pcd8544.c
|
||
@@ -0,0 +1,210 @@
|
||
+#include <linux/gpio.h>
|
||
+#include "../protocols/i2c_hw.h"
|
||
+#include "../protocols/i2c_sw.h"
|
||
+#include "../protocols/spi_sw.h"
|
||
+#include "pcd8544.h"
|
||
+#include "gfx_mono_ctrl.h"
|
||
+
|
||
+static unsigned char pcd8544_init(void);
|
||
+static unsigned char pcd8544_set_display_type(struct vfd_display *display);
|
||
+static void pcd8544_clear(void);
|
||
+static void pcd8544_set_power(unsigned char state);
|
||
+static void pcd8544_set_contrast(unsigned char value);
|
||
+static unsigned char pcd8544_set_xy(unsigned short x, unsigned short y);
|
||
+static void pcd8544_print_string(const unsigned char *buffer, const struct rect *rect);
|
||
+static void pcd8544_write_ctrl_command_buf(const unsigned char *buf, unsigned int length);
|
||
+static void pcd8544_write_ctrl_command(unsigned char cmd);
|
||
+static void pcd8544_write_ctrl_data_buf(const unsigned char *buf, unsigned int length);
|
||
+static void pcd8544_write_ctrl_data(unsigned char data);
|
||
+
|
||
+static struct specific_gfx_mono_ctrl pcd8544_gfx_mono_ctrl = {
|
||
+ .init = pcd8544_init,
|
||
+ .set_display_type = pcd8544_set_display_type,
|
||
+ .clear = pcd8544_clear,
|
||
+ .set_power = pcd8544_set_power,
|
||
+ .set_contrast = pcd8544_set_contrast,
|
||
+ .set_xy = pcd8544_set_xy,
|
||
+ .print_char = NULL,
|
||
+ .print_string = pcd8544_print_string,
|
||
+ .write_ctrl_command_buf = pcd8544_write_ctrl_command_buf,
|
||
+ .write_ctrl_command = pcd8544_write_ctrl_command,
|
||
+ .write_ctrl_data_buf = pcd8544_write_ctrl_data_buf,
|
||
+ .write_ctrl_data = pcd8544_write_ctrl_data,
|
||
+ .screen_view = NULL,
|
||
+};
|
||
+
|
||
+struct pcd8544_display {
|
||
+ unsigned char columns : 3;
|
||
+ unsigned char banks : 3;
|
||
+ unsigned char offset : 2;
|
||
+
|
||
+ union {
|
||
+ struct {
|
||
+ unsigned char address : 7;
|
||
+ unsigned char not_i2c : 1;
|
||
+ } i2c;
|
||
+ struct {
|
||
+ unsigned char reserved1 : 7;
|
||
+ unsigned char is_spi : 1;
|
||
+ } spi;
|
||
+ };
|
||
+
|
||
+ unsigned char flags_secs : 1;
|
||
+ unsigned char flags_invert : 1;
|
||
+ unsigned char flags_transpose : 1;
|
||
+ unsigned char flags_rotate : 1;
|
||
+ unsigned char flags_ext_vcc : 1;
|
||
+ unsigned char flags_alt_com_conf : 1;
|
||
+ unsigned char flags_low_freq : 1;
|
||
+ unsigned char reserved2 : 1;
|
||
+
|
||
+ unsigned char controller;
|
||
+};
|
||
+
|
||
+static struct vfd_dev *dev = NULL;
|
||
+static struct protocol_interface *protocol;
|
||
+static unsigned char columns = 80;
|
||
+static unsigned char banks = 6;
|
||
+static unsigned char col_offset = 2;
|
||
+static const unsigned char ram_buffer_blank[504] = { 0 };
|
||
+static int pin_rst = 0;
|
||
+static int pin_dc = 0;
|
||
+struct pcd8544_display pcd8544_display;
|
||
+
|
||
+struct controller_interface *init_pcd8544(struct vfd_dev *_dev)
|
||
+{
|
||
+ dev = _dev;
|
||
+ memcpy(&pcd8544_display, &dev->dtb_active.display, sizeof(pcd8544_display));
|
||
+ columns = (pcd8544_display.columns + 1) * 16;
|
||
+ banks = pcd8544_display.banks + 1;
|
||
+ col_offset = pcd8544_display.offset << 1;
|
||
+ return init_gfx_mono_ctrl(_dev, &pcd8544_gfx_mono_ctrl);
|
||
+}
|
||
+
|
||
+static void pcd8544_write_ctrl_buf(unsigned char dc, const unsigned char *buf, unsigned int length)
|
||
+{
|
||
+ if (pcd8544_display.spi.is_spi) {
|
||
+ gpio_direction_output(pin_dc, dc ? 1 : 0);
|
||
+ protocol->write_data(buf, length);
|
||
+ } else {
|
||
+ protocol->write_cmd_data(&dc, 1, buf, length);
|
||
+ }
|
||
+}
|
||
+
|
||
+static void pcd8544_write_ctrl_command_buf(const unsigned char *buf, unsigned int length)
|
||
+{
|
||
+ pcd8544_write_ctrl_buf(0x00, buf, length);
|
||
+}
|
||
+
|
||
+static void pcd8544_write_ctrl_command(unsigned char cmd)
|
||
+{
|
||
+ pcd8544_write_ctrl_buf(0x00, &cmd, 1);
|
||
+}
|
||
+
|
||
+static void pcd8544_write_ctrl_data_buf(const unsigned char *buf, unsigned int length)
|
||
+{
|
||
+ pcd8544_write_ctrl_buf(0x40, buf, length);
|
||
+}
|
||
+
|
||
+static void pcd8544_write_ctrl_data(unsigned char data)
|
||
+{
|
||
+ pcd8544_write_ctrl_buf(0x40, &data, 1);
|
||
+}
|
||
+
|
||
+static void pcd8544_clear(void)
|
||
+{
|
||
+ unsigned char cmd_buf[] = { 0x40, 0x80, 0x08 };
|
||
+ pcd8544_write_ctrl_command_buf(cmd_buf, sizeof(cmd_buf));
|
||
+ pcd8544_write_ctrl_data_buf(ram_buffer_blank, sizeof(ram_buffer_blank));
|
||
+ pcd8544_write_ctrl_command(0x0C | pcd8544_display.flags_invert);
|
||
+}
|
||
+
|
||
+static void pcd8544_set_power(unsigned char state)
|
||
+{
|
||
+ if (state)
|
||
+ pcd8544_write_ctrl_command(0x0C | pcd8544_display.flags_invert); // Set display On
|
||
+ else
|
||
+ pcd8544_write_ctrl_command(0x08); // Set display OFF
|
||
+}
|
||
+
|
||
+static void pcd8544_set_contrast(unsigned char value)
|
||
+{
|
||
+ unsigned char cmd_buf[] = { 0x21, 0x80 | (value >> 1), 0x20 };
|
||
+ pcd8544_write_ctrl_command_buf(cmd_buf, sizeof(cmd_buf));
|
||
+}
|
||
+
|
||
+static unsigned char pcd8544_set_xy(unsigned short x, unsigned short y)
|
||
+{
|
||
+ unsigned char ret = 0;
|
||
+ x += col_offset;
|
||
+ if (x < columns + col_offset || y < banks) {
|
||
+ unsigned char cmd_buf[] = { 0x40 | (y & 0x7), 0x80 | (x & 0x7F) };
|
||
+ pcd8544_write_ctrl_command_buf(cmd_buf, sizeof(cmd_buf));
|
||
+ ret = 1;
|
||
+ }
|
||
+
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static void pcd8544_print_string(const unsigned char *buffer, const struct rect *rect)
|
||
+{
|
||
+ unsigned char i;
|
||
+ for (i = 0; i < rect->height; i++) {
|
||
+ pcd8544_set_xy(rect->x1, rect->y1 + i);
|
||
+ pcd8544_write_ctrl_data_buf(buffer + (i * rect->width), rect->width);
|
||
+ }
|
||
+}
|
||
+
|
||
+static unsigned char pcd8544_init(void)
|
||
+{
|
||
+ unsigned char cmd_buf[] = {
|
||
+ 0x21, // [00] Enable extended instruction set
|
||
+ 0xB1, // [01] Set LCD Vop (Contrast)
|
||
+ 0x06, // [02] Set Temp coefficent
|
||
+ 0x12, // [03] LCD bias mode
|
||
+
|
||
+ 0x20, // [04] Disable extended instruction set
|
||
+ 0x0C, // [05] Set display On
|
||
+ };
|
||
+
|
||
+ if (pcd8544_display.spi.is_spi) {
|
||
+ if (dev->gpio0_pin.pin >= 0 && dev->gpio1_pin.pin >= 0) {
|
||
+ protocol = init_sw_spi_3w(MSB_FIRST, dev->clk_pin, dev->dat_pin, dev->stb_pin, pcd8544_display.flags_low_freq ? SPI_DELAY_100KHz : SPI_DELAY_500KHz);
|
||
+ if (protocol) {
|
||
+ pin_rst = dev->gpio0_pin.pin;
|
||
+ pin_dc = dev->gpio1_pin.pin;
|
||
+ gpio_direction_output(pin_rst, 0);
|
||
+ udelay(5);
|
||
+ gpio_direction_output(pin_rst, 1);
|
||
+ }
|
||
+ } else {
|
||
+ pr_dbg2("PCD8544 controller failed to intialize. Invalid RESET (%d) and/or DC (%d) pins\n", dev->gpio0_pin.pin, dev->gpio1_pin.pin);
|
||
+ }
|
||
+ } else {
|
||
+ if (dev->hw_protocol.protocol == PROTOCOL_I2C)
|
||
+ protocol = init_hw_i2c(pcd8544_display.i2c.address, dev->hw_protocol.device_id);
|
||
+ else
|
||
+ protocol = init_sw_i2c(pcd8544_display.i2c.address, MSB_FIRST, 1, dev->clk_pin, dev->dat_pin, pcd8544_display.flags_low_freq ? I2C_DELAY_100KHz : I2C_DELAY_500KHz, NULL);
|
||
+ }
|
||
+ if (!protocol)
|
||
+ return 0;
|
||
+
|
||
+ cmd_buf[01] = (dev->brightness * 36) + 1; // [01] Contrast
|
||
+ cmd_buf[05] |= pcd8544_display.flags_invert ? 0x01 : 0x00; // [05] Set display inverted state
|
||
+ pcd8544_write_ctrl_command_buf(cmd_buf, sizeof(cmd_buf));
|
||
+ pcd8544_clear();
|
||
+
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+static unsigned char pcd8544_set_display_type(struct vfd_display *display)
|
||
+{
|
||
+ unsigned char ret = 0;
|
||
+ if (display->controller == CONTROLLER_PCD8544) {
|
||
+ dev->dtb_active.display = *display;
|
||
+ pcd8544_init();
|
||
+ ret = 1;
|
||
+ }
|
||
+
|
||
+ return ret;
|
||
+}
|
||
diff --git a/drivers/leds/vfd/controllers/pcd8544.h b/drivers/leds/vfd/controllers/pcd8544.h
|
||
new file mode 100644
|
||
index 000000000..a32f82a87
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/pcd8544.h
|
||
@@ -0,0 +1,8 @@
|
||
+#ifndef __PCD8544H__
|
||
+#define __PCD8544H__
|
||
+
|
||
+#include "controller.h"
|
||
+
|
||
+struct controller_interface *init_pcd8544(struct vfd_dev *_dev);
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/controllers/seg7_ctrl.c b/drivers/leds/vfd/controllers/seg7_ctrl.c
|
||
new file mode 100644
|
||
index 000000000..80e09720a
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/seg7_ctrl.c
|
||
@@ -0,0 +1,103 @@
|
||
+#include "controller.h"
|
||
+
|
||
+#define LEDCODES_LEN (sizeof(LED_decode_tab1)/sizeof(LED_decode_tab1[0]))
|
||
+const led_bitmap *ledCodes = LED_decode_tab1;
|
||
+unsigned char ledDot = p1;
|
||
+
|
||
+/**
|
||
+ * Source for the transpose algorithm:
|
||
+ http://www.hackersdelight.org/hdcodetxt/transpose8.c.txt
|
||
+ */
|
||
+void transpose8rS64(unsigned char* A, unsigned char* B) {
|
||
+ unsigned long long x = 0, t;
|
||
+ int i;
|
||
+
|
||
+ for (i = 0; i <= 7; i++) // Load 8 bytes from the input
|
||
+ x = x << 8 | A[i]; // array and pack them into x.
|
||
+
|
||
+ t = (x ^ (x >> 7)) & 0x00AA00AA00AA00AALL;
|
||
+ x = x ^ t ^ (t << 7);
|
||
+ t = (x ^ (x >> 14)) & 0x0000CCCC0000CCCCLL;
|
||
+ x = x ^ t ^ (t << 14);
|
||
+ t = (x ^ (x >> 28)) & 0x00000000F0F0F0F0LL;
|
||
+ x = x ^ t ^ (t << 28);
|
||
+
|
||
+ memcpy(B, &x, sizeof(x)); // Store result into output array B.
|
||
+}
|
||
+
|
||
+static unsigned char char_to_mask(unsigned char ch)
|
||
+{
|
||
+ unsigned int index = 0;
|
||
+ for (index = 0; index < LEDCODES_LEN; index++) {
|
||
+ if (ledCodes[index].character == ch) {
|
||
+ return ledCodes[index].bitmap;
|
||
+ }
|
||
+ }
|
||
+
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+size_t seg7_write_display_data(const struct vfd_display_data *data, unsigned short *raw_wdata, size_t sz)
|
||
+{
|
||
+ size_t i, len;
|
||
+ char buffer[8];
|
||
+ size_t status = sizeof(*data);
|
||
+
|
||
+ if (sz < sizeof(unsigned char[7]))
|
||
+ return 0;
|
||
+
|
||
+ memset(raw_wdata, 0, sz);
|
||
+ switch (data->mode) {
|
||
+ case DISPLAY_MODE_CLOCK:
|
||
+ case DISPLAY_MODE_PLAYBACK_TIME:
|
||
+ raw_wdata[0] = data->colon_on ? ledDots[LED_DOT_SEC] : 0;
|
||
+ if (data->mode == DISPLAY_MODE_PLAYBACK_TIME && data->time_date.hours == 0) {
|
||
+ raw_wdata[1] = char_to_mask(data->time_date.minutes / 10);
|
||
+ raw_wdata[2] = char_to_mask(data->time_date.minutes % 10);
|
||
+ raw_wdata[3] = char_to_mask(data->time_date.seconds / 10);
|
||
+ raw_wdata[4] = char_to_mask(data->time_date.seconds % 10);
|
||
+ } else {
|
||
+ raw_wdata[1] = char_to_mask(data->time_date.hours / 10);
|
||
+ raw_wdata[2] = char_to_mask(data->time_date.hours % 10);
|
||
+ raw_wdata[3] = char_to_mask(data->time_date.minutes / 10);
|
||
+ raw_wdata[4] = char_to_mask(data->time_date.minutes % 10);
|
||
+ }
|
||
+ break;
|
||
+ case DISPLAY_MODE_CHANNEL:
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%*d", 4, data->channel_data.channel % 10000);
|
||
+ for (i = 0; i < len; i++)
|
||
+ raw_wdata[i + 1] = char_to_mask(buffer[i]);
|
||
+ break;
|
||
+ case DISPLAY_MODE_TITLE:
|
||
+ break;
|
||
+ case DISPLAY_MODE_TEMPERATURE:
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%d%c%c", data->temperature % 1000, 0xB0, 'c'); // ascii 176 = degree
|
||
+ if (len > 4)
|
||
+ len = 4;
|
||
+ for (i = 0; i < len; i++)
|
||
+ raw_wdata[i + 1] = char_to_mask(buffer[i]);
|
||
+ break;
|
||
+ case DISPLAY_MODE_DATE:
|
||
+ {
|
||
+ unsigned char day = data->time_date.day;
|
||
+ unsigned char month = data->time_date.month + 1;
|
||
+ if (data->time_secondary._reserved) {
|
||
+ raw_wdata[1] = char_to_mask(month / 10);
|
||
+ raw_wdata[2] = char_to_mask(month % 10);
|
||
+ raw_wdata[3] = char_to_mask(day / 10);
|
||
+ raw_wdata[4] = char_to_mask(day % 10);
|
||
+ } else {
|
||
+ raw_wdata[1] = char_to_mask(day / 10);
|
||
+ raw_wdata[2] = char_to_mask(day % 10);
|
||
+ raw_wdata[3] = char_to_mask(month / 10);
|
||
+ raw_wdata[4] = char_to_mask(month % 10);
|
||
+ }
|
||
+ }
|
||
+ break;
|
||
+ default:
|
||
+ status = 0;
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ return status;
|
||
+}
|
||
diff --git a/drivers/leds/vfd/controllers/ssd1306.c b/drivers/leds/vfd/controllers/ssd1306.c
|
||
new file mode 100644
|
||
index 000000000..98c75a278
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/ssd1306.c
|
||
@@ -0,0 +1,353 @@
|
||
+#include <linux/gpio.h>
|
||
+#include "../protocols/i2c_hw.h"
|
||
+#include "../protocols/i2c_sw.h"
|
||
+#include "../protocols/spi_sw.h"
|
||
+#include "ssd1306.h"
|
||
+#include "gfx_mono_ctrl.h"
|
||
+
|
||
+static unsigned char sh1106_init(void);
|
||
+static unsigned char ssd1306_init(void);
|
||
+static unsigned char ssd1306_set_display_type(struct vfd_display *display);
|
||
+static void sh1106_clear(void);
|
||
+static void ssd1306_clear(void);
|
||
+static void ssd1306_set_power(unsigned char state);
|
||
+static void ssd1306_set_contrast(unsigned char value);
|
||
+static unsigned char ssd1306_set_xy(unsigned short x, unsigned short y);
|
||
+static void ssd1306_print_string(const unsigned char *buffer, const struct rect *rect);
|
||
+static void ssd1306_write_ctrl_command_buf(const unsigned char *buf, unsigned int length);
|
||
+static void ssd1306_write_ctrl_command(unsigned char cmd);
|
||
+static void ssd1306_write_ctrl_data_buf(const unsigned char *buf, unsigned int length);
|
||
+static void ssd1306_write_ctrl_data(unsigned char data);
|
||
+
|
||
+static struct specific_gfx_mono_ctrl ssd1306_gfx_mono_ctrl = {
|
||
+ .init = ssd1306_init,
|
||
+ .set_display_type = ssd1306_set_display_type,
|
||
+ .clear = ssd1306_clear,
|
||
+ .set_power = ssd1306_set_power,
|
||
+ .set_contrast = ssd1306_set_contrast,
|
||
+ .set_xy = ssd1306_set_xy,
|
||
+ .print_char = NULL,
|
||
+ .print_string = ssd1306_print_string,
|
||
+ .write_ctrl_command_buf = ssd1306_write_ctrl_command_buf,
|
||
+ .write_ctrl_command = ssd1306_write_ctrl_command,
|
||
+ .write_ctrl_data_buf = ssd1306_write_ctrl_data_buf,
|
||
+ .write_ctrl_data = ssd1306_write_ctrl_data,
|
||
+ .screen_view = NULL,
|
||
+};
|
||
+
|
||
+struct ssd1306_display {
|
||
+ unsigned char columns : 3;
|
||
+ unsigned char banks : 3;
|
||
+ unsigned char offset : 2;
|
||
+
|
||
+ union {
|
||
+ struct {
|
||
+ unsigned char address : 7;
|
||
+ unsigned char not_i2c : 1;
|
||
+ } i2c;
|
||
+ struct {
|
||
+ unsigned char is_4w : 1;
|
||
+ unsigned char reserved1 : 6;
|
||
+ unsigned char is_spi : 1;
|
||
+ } spi;
|
||
+ };
|
||
+
|
||
+ unsigned char flags_secs : 1;
|
||
+ unsigned char flags_invert : 1;
|
||
+ unsigned char flags_transpose : 1;
|
||
+ unsigned char flags_rotate : 1;
|
||
+ unsigned char flags_ext_vcc : 1;
|
||
+ unsigned char flags_alt_com_conf : 1;
|
||
+ unsigned char flags_low_freq : 1;
|
||
+ unsigned char reserved2 : 1;
|
||
+
|
||
+ unsigned char controller;
|
||
+};
|
||
+
|
||
+static struct vfd_dev *dev = NULL;
|
||
+static struct protocol_interface *protocol;
|
||
+static unsigned char columns = 128;
|
||
+static unsigned char rows = 32;
|
||
+static unsigned char banks = 32 / 8;
|
||
+static unsigned char col_offset = 0;
|
||
+static const unsigned char ram_buffer_blank[1024] = { 0 };
|
||
+static int pin_rst = 0;
|
||
+static int pin_dc = 0;
|
||
+static struct ssd1306_display ssd1306_display;
|
||
+
|
||
+static void (*clear)(void);
|
||
+
|
||
+struct controller_interface *init_ssd1306(struct vfd_dev *_dev)
|
||
+{
|
||
+ dev = _dev;
|
||
+ memcpy(&ssd1306_display, &dev->dtb_active.display, sizeof(ssd1306_display));
|
||
+ columns = (ssd1306_display.columns + 1) * 16;
|
||
+ banks = ssd1306_display.banks + 1;
|
||
+ rows = banks * 8;
|
||
+ col_offset = ssd1306_display.offset << 1;
|
||
+ switch (ssd1306_display.controller) {
|
||
+ case CONTROLLER_SH1106:
|
||
+ clear = sh1106_clear;
|
||
+ ssd1306_gfx_mono_ctrl.init = sh1106_init;
|
||
+ break;
|
||
+ case CONTROLLER_SSD1306:
|
||
+ default:
|
||
+ clear = ssd1306_clear;
|
||
+ ssd1306_gfx_mono_ctrl.init = ssd1306_init;
|
||
+ break;
|
||
+ }
|
||
+ ssd1306_gfx_mono_ctrl.clear = clear;
|
||
+ return init_gfx_mono_ctrl(_dev, &ssd1306_gfx_mono_ctrl);
|
||
+}
|
||
+
|
||
+static void ssd1306_write_ctrl_buf(unsigned char dc, const unsigned char *buf, unsigned int length)
|
||
+{
|
||
+ if (ssd1306_display.spi.is_spi && ssd1306_display.spi.is_4w) {
|
||
+ gpio_direction_output(pin_dc, dc ? 1 : 0);
|
||
+ protocol->write_data(buf, length);
|
||
+ } else {
|
||
+ protocol->write_cmd_data(&dc, 1, buf, length);
|
||
+ }
|
||
+}
|
||
+
|
||
+static void ssd1306_write_ctrl_command_buf(const unsigned char *buf, unsigned int length)
|
||
+{
|
||
+ ssd1306_write_ctrl_buf(0x00, buf, length);
|
||
+}
|
||
+
|
||
+static void ssd1306_write_ctrl_command(unsigned char cmd)
|
||
+{
|
||
+ ssd1306_write_ctrl_buf(0x00, &cmd, 1);
|
||
+}
|
||
+
|
||
+static void ssd1306_write_ctrl_data_buf(const unsigned char *buf, unsigned int length)
|
||
+{
|
||
+ ssd1306_write_ctrl_buf(0x40, buf, length);
|
||
+}
|
||
+
|
||
+static void ssd1306_write_ctrl_data(unsigned char data)
|
||
+{
|
||
+ ssd1306_write_ctrl_buf(0x40, &data, 1);
|
||
+}
|
||
+
|
||
+static void ssd1306_clear(void)
|
||
+{
|
||
+ unsigned char cmd_buf[] = { 0x21, col_offset, col_offset + columns - 1, 0x22, 0x00, banks - 1, 0xAE };
|
||
+ ssd1306_write_ctrl_command_buf(cmd_buf, sizeof(cmd_buf));
|
||
+ ssd1306_write_ctrl_data_buf(ram_buffer_blank, min((size_t)(columns * banks), sizeof(ram_buffer_blank)));
|
||
+ ssd1306_write_ctrl_command(0xAF);
|
||
+}
|
||
+
|
||
+static void sh1106_clear(void)
|
||
+{
|
||
+ unsigned char i;
|
||
+ ssd1306_write_ctrl_command(0xAE);
|
||
+ for (i = 0; i < banks; i++) {
|
||
+ ssd1306_set_xy(0, i);
|
||
+ ssd1306_write_ctrl_data_buf(ram_buffer_blank, columns);
|
||
+ }
|
||
+ ssd1306_write_ctrl_command(0xAF);
|
||
+}
|
||
+
|
||
+static void ssd1306_set_power(unsigned char state)
|
||
+{
|
||
+ if (state)
|
||
+ ssd1306_write_ctrl_command(0xAF); // Set display On
|
||
+ else
|
||
+ ssd1306_write_ctrl_command(0xAE); // Set display OFF
|
||
+}
|
||
+
|
||
+static void ssd1306_set_contrast(unsigned char value)
|
||
+{
|
||
+ unsigned char cmd_buf[] = { 0x81, ++value };
|
||
+ ssd1306_write_ctrl_command_buf(cmd_buf, sizeof(cmd_buf));
|
||
+}
|
||
+
|
||
+static unsigned char ssd1306_set_xy(unsigned short x, unsigned short y)
|
||
+{
|
||
+ unsigned char ret = 0;
|
||
+ x += col_offset;
|
||
+ if (x < columns + col_offset || y < banks) {
|
||
+ unsigned char cmd_buf[] = { 0xB0 | (y & 0xF), x & 0xF, 0x10 | (x >> 4) };
|
||
+ ssd1306_write_ctrl_command_buf(cmd_buf, sizeof(cmd_buf));
|
||
+ ret = 1;
|
||
+ }
|
||
+
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static void ssd1306_print_string(const unsigned char *buffer, const struct rect *rect)
|
||
+{
|
||
+ unsigned char i;
|
||
+ if (ssd1306_display.controller == CONTROLLER_SH1106) {
|
||
+ for (i = 0; i < rect->height; i++) {
|
||
+ ssd1306_set_xy(rect->x1, rect->y1 + i);
|
||
+ ssd1306_write_ctrl_data_buf(buffer + (i * rect->width), rect->width);
|
||
+ }
|
||
+ } else {
|
||
+ unsigned char cmd_set_addr_range[] = { 0x21, rect->x1 + col_offset, rect->x2 + col_offset, 0x22, rect->y1, rect->y2 };
|
||
+ unsigned char cmd_reset_addr_range[] = { 0x21, col_offset, col_offset + columns - 1, 0x22, 0x00, banks - 1 };
|
||
+ ssd1306_write_ctrl_command_buf(cmd_set_addr_range, sizeof(cmd_set_addr_range));
|
||
+ ssd1306_write_ctrl_data_buf(buffer, rect->length * rect->font->font_char_size);
|
||
+ ssd1306_write_ctrl_command_buf(cmd_reset_addr_range, sizeof(cmd_reset_addr_range));
|
||
+ }
|
||
+}
|
||
+
|
||
+static void init_protocol(void)
|
||
+{
|
||
+ if (ssd1306_display.spi.is_spi) {
|
||
+ if (dev->gpio0_pin.pin >= 0 && (!ssd1306_display.spi.is_4w || dev->gpio1_pin.pin >= 0)) {
|
||
+ protocol = init_sw_spi_3w(MSB_FIRST, dev->clk_pin, dev->dat_pin, dev->stb_pin, ssd1306_display.flags_low_freq ? SPI_DELAY_100KHz : SPI_DELAY_500KHz);
|
||
+ if (protocol) {
|
||
+ pin_rst = dev->gpio0_pin.pin;
|
||
+ pin_dc = dev->gpio1_pin.pin;
|
||
+ gpio_direction_output(pin_rst, 0);
|
||
+ udelay(5);
|
||
+ gpio_direction_output(pin_rst, 1);
|
||
+ }
|
||
+ } else {
|
||
+ pr_dbg2("SSD1306 controller failed to intialize. Invalid RESET (%d) and/or DC (%d) pins\n", dev->gpio0_pin.pin, dev->gpio1_pin.pin);
|
||
+ }
|
||
+ } else {
|
||
+ if (dev->hw_protocol.protocol == PROTOCOL_I2C)
|
||
+ protocol = init_hw_i2c(ssd1306_display.i2c.address, dev->hw_protocol.device_id);
|
||
+ else
|
||
+ protocol = init_sw_i2c(ssd1306_display.i2c.address, MSB_FIRST, 1, dev->clk_pin, dev->dat_pin, ssd1306_display.flags_low_freq ? I2C_DELAY_100KHz : I2C_DELAY_500KHz, NULL);
|
||
+ }
|
||
+}
|
||
+
|
||
+static unsigned char sh1106_init(void)
|
||
+{
|
||
+ unsigned char cmd_buf[] = {
|
||
+ 0xAE, // [00] Set display OFF
|
||
+
|
||
+ 0xA0, // [01] Set Segment Re-Map
|
||
+
|
||
+ 0xDA, // [02] Set COM Hardware Configuration
|
||
+ 0x02, // [03] COM Hardware Configuration
|
||
+
|
||
+ 0xC0, // [04] Set Com Output Scan Direction
|
||
+
|
||
+ 0xA8, // [05] Set Multiplex Ratio
|
||
+ 0x3F, // [06] Multiplex Ratio for 128x64 (64-1)
|
||
+
|
||
+ 0xD5, // [07] Set Display Clock Divide Ratio / OSC Frequency
|
||
+ 0x80, // [08] Display Clock Divide Ratio / OSC Frequency
|
||
+
|
||
+ 0xDB, // [09] Set VCOMH Deselect Level
|
||
+ 0x35, // [10] VCOMH Deselect Level
|
||
+
|
||
+ 0x81, // [11] Set Contrast
|
||
+ 0x8F, // [12] Contrast
|
||
+
|
||
+ 0x30, // [13] Set Vpp
|
||
+
|
||
+ 0xAD, // [14] Set DC-DC
|
||
+ 0x8A, // [15] DC-DC ON/OFF
|
||
+
|
||
+ 0x40, // [16] Set Display Start Line
|
||
+
|
||
+ 0xA4, // [17] Set all pixels OFF
|
||
+ 0xA6, // [18] Set display not inverted
|
||
+ 0xAF, // [19] Set display On
|
||
+ };
|
||
+
|
||
+ init_protocol();
|
||
+ if (!protocol)
|
||
+ return 0;
|
||
+
|
||
+ cmd_buf[1] |= ssd1306_display.flags_rotate ? 0x01 : 0x00; // [01] Set Segment Re-Map
|
||
+ cmd_buf[3] |= ssd1306_display.flags_alt_com_conf ? 0x10 : 0x00; // [03] COM Hardware Configuration
|
||
+ cmd_buf[4] |= ssd1306_display.flags_rotate ? 0x08 : 0x00; // [04] Set Com Output Scan Direction
|
||
+ cmd_buf[6] = max(min(rows-1, 63), 15); // [06] Multiplex Ratio for 128 x rows (rows-1)
|
||
+ cmd_buf[12] = (dev->brightness * 36) + 1; // [12] Contrast
|
||
+ cmd_buf[15] |= ssd1306_display.flags_ext_vcc ? 0x00 : 0x01; // [15] DC-DC ON/OFF
|
||
+ cmd_buf[18] |= ssd1306_display.flags_invert ? 0x01 : 0x00; // [18] Set display not inverted
|
||
+ ssd1306_write_ctrl_command_buf(cmd_buf, sizeof(cmd_buf));
|
||
+ clear();
|
||
+
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+static unsigned char ssd1306_init(void)
|
||
+{
|
||
+ unsigned char cmd_buf[] = {
|
||
+ 0xAE, // [00] Set display OFF
|
||
+
|
||
+ 0xD5, // [01] Set Display Clock Divide Ratio / OSC Frequency
|
||
+ 0x80, // [02] Display Clock Divide Ratio / OSC Frequency
|
||
+
|
||
+ 0xA8, // [03] Set Multiplex Ratio
|
||
+ 0x3F, // [04] Multiplex Ratio for 128x64 (64-1)
|
||
+
|
||
+ 0xD3, // [05] Set Display Offset
|
||
+ 0x00, // [06] Display Offset
|
||
+
|
||
+ 0x8D, // [07] Set Charge Pump
|
||
+ 0x14, // [08] Charge Pump (0x10 External, 0x14 Internal DC/DC)
|
||
+
|
||
+ 0xA0, // [09] Set Segment Re-Map
|
||
+ 0xC0, // [10] Set Com Output Scan Direction
|
||
+
|
||
+ 0xDA, // [11] Set COM Hardware Configuration
|
||
+ 0x02, // [12] COM Hardware Configuration
|
||
+
|
||
+ 0x81, // [13] Set Contrast
|
||
+ 0x8F, // [14] Contrast
|
||
+
|
||
+ 0xD9, // [15] Set Pre-Charge Period
|
||
+ 0xF1, // [16] Set Pre-Charge Period (0x22 External, 0xF1 Internal)
|
||
+
|
||
+ 0xDB, // [17] Set VCOMH Deselect Level
|
||
+ 0x30, // [18] VCOMH Deselect Level
|
||
+
|
||
+ 0x40, // [19] Set Display Start Line
|
||
+
|
||
+ 0x20, // [20] Set Memory Addressing Mode
|
||
+ 0x00, // [21] Set Horizontal Mode
|
||
+
|
||
+ 0x21, // [22] Set Column Address
|
||
+ 0x00, // [23] First column
|
||
+ 0x7F, // [24] Last column
|
||
+
|
||
+ 0x22, // [25] Set Page Address
|
||
+ 0x00, // [26] First page
|
||
+ 0x07, // [27] Last page
|
||
+
|
||
+ 0xA4, // [28] Set all pixels OFF
|
||
+ 0xA6, // [29] Set display not inverted
|
||
+ 0xAF, // [30] Set display On
|
||
+ };
|
||
+
|
||
+ init_protocol();
|
||
+ if (!protocol)
|
||
+ return 0;
|
||
+
|
||
+ cmd_buf[4] = max(min(rows-1, 63), 15); // [04] Multiplex Ratio for 128 x rows (rows-1)
|
||
+ cmd_buf[8] = ssd1306_display.flags_ext_vcc ? 0x10 : 0x14; // [08] Charge Pump (0x10 External, 0x14 Internal DC/DC)
|
||
+ cmd_buf[9] |= ssd1306_display.flags_rotate ? 0x01 : 0x00; // [09] Set Segment Re-Map
|
||
+ cmd_buf[10] |= ssd1306_display.flags_rotate ? 0x08 : 0x00; // [10] Set Com Output Scan Direction
|
||
+ cmd_buf[12] |= ssd1306_display.flags_alt_com_conf ? 0x10 : 0x00; // [12] COM Hardware Configuration
|
||
+ cmd_buf[14] = (dev->brightness * 36) + 1; // [14] Contrast
|
||
+ cmd_buf[16] = ssd1306_display.flags_ext_vcc ? 0x22 : 0xF1; // [16] Set Pre-Charge Period (0x22 External, 0xF1 Internal)
|
||
+ cmd_buf[23] = col_offset; // [23] First column
|
||
+ cmd_buf[24] = col_offset + columns - 1; // [24] Last column
|
||
+ cmd_buf[27] = banks - 1; // [27] Last page
|
||
+ cmd_buf[29] |= ssd1306_display.flags_invert ? 0x01 : 0x00; // [29] Set display not inverted
|
||
+ ssd1306_write_ctrl_command_buf(cmd_buf, sizeof(cmd_buf));
|
||
+ clear();
|
||
+
|
||
+ return 1;
|
||
+}
|
||
+
|
||
+static unsigned char ssd1306_set_display_type(struct vfd_display *display)
|
||
+{
|
||
+ unsigned char ret = 0;
|
||
+ if (display->controller == CONTROLLER_SSD1306 || display->controller == CONTROLLER_SH1106) {
|
||
+ dev->dtb_active.display = *display;
|
||
+ ssd1306_init();
|
||
+ ret = 1;
|
||
+ }
|
||
+
|
||
+ return ret;
|
||
+}
|
||
diff --git a/drivers/leds/vfd/controllers/ssd1306.h b/drivers/leds/vfd/controllers/ssd1306.h
|
||
new file mode 100644
|
||
index 000000000..1169caaf8
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/controllers/ssd1306.h
|
||
@@ -0,0 +1,8 @@
|
||
+#ifndef __SSD1306H__
|
||
+#define __SSD1306H__
|
||
+
|
||
+#include "controller.h"
|
||
+
|
||
+struct controller_interface *init_ssd1306(struct vfd_dev *_dev);
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/glyphs.h b/drivers/leds/vfd/glyphs.h
|
||
new file mode 100644
|
||
index 000000000..2e3badfa4
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/glyphs.h
|
||
@@ -0,0 +1,339 @@
|
||
+#ifndef __GLYPHS__
|
||
+#define __GLYPHS__
|
||
+
|
||
+typedef unsigned char u_int8;
|
||
+typedef unsigned short u_int16;
|
||
+typedef unsigned long u_int32;
|
||
+
|
||
+/** Character conversion of digital tube display code*/
|
||
+typedef struct _led_bitmap {
|
||
+ u_int8 character;
|
||
+ u_int8 bitmap;
|
||
+}led_bitmap;
|
||
+
|
||
+/** Character conversion of digital tube display code array*/
|
||
+
|
||
+#define a1 0x01
|
||
+#define b1 0x02
|
||
+#define c1 0x04
|
||
+#define d1 0x08
|
||
+#define e1 0x10
|
||
+#define f1 0x20
|
||
+#define g1 0x40
|
||
+#define p1 0x80
|
||
+
|
||
+static const led_bitmap LED_decode_tab1[] = {
|
||
+/*
|
||
+ * Most displays have 5 sections, 1 - 4 are the digits,
|
||
+ * the 5th is mapped to indicators (5A-5G).
|
||
+ * The 7 segment sequences are shown below.
|
||
+ *
|
||
+ * dp
|
||
+ * +--d/08--+
|
||
+ * | |
|
||
+ * c/04 | | e/10
|
||
+ * +--g/40--+
|
||
+ * | |
|
||
+ * b/02 | | f/20
|
||
+ * +--a/01--+
|
||
+ *
|
||
+ */
|
||
+
|
||
+ {0, a1|b1|c1|d1|e1|f1 }, {1, e1|f1 },
|
||
+ {2, a1|b1|d1|e1|g1 }, {3, a1|d1|e1|f1|g1 },
|
||
+ {4, c1|e1|f1|g1 }, {5, a1|c1|d1|f1|g1 },
|
||
+ {6, a1|b1|c1|d1|f1|g1 }, {7, d1|e1|f1 },
|
||
+ {8, a1|b1|c1|d1|e1|f1|g1}, {9, a1|c1|d1|e1|f1|g1 },
|
||
+
|
||
+ {'0', a1|b1|c1|d1|e1|f1 }, {'1', e1|f1 },
|
||
+ {'2', a1|b1|d1|e1|g1 }, {'3', a1|d1|e1|f1|g1 },
|
||
+ {'4', c1|e1|f1|g1 }, {'5', a1|c1|d1|f1|g1 },
|
||
+ {'6', a1|b1|c1|d1|f1|g1 }, {'7', d1|e1|f1 },
|
||
+ {'8', a1|b1|c1|d1|e1|f1|g1}, {'9', a1|c1|d1|e1|f1|g1 },
|
||
+
|
||
+ {'a', b1|c1|d1|e1|f1|g1 }, {'A', b1|c1|d1|e1|f1|g1 },
|
||
+ {'b', a1|b1|c1|f1|g1 }, {'B', a1|b1|c1|f1|g1 },
|
||
+ {'c', a1|b1|c1|d1 }, {'C', a1|b1|c1|d1 },
|
||
+ {'d', a1|b1|e1|f1|g1 }, {'D', a1|b1|e1|f1|g1 },
|
||
+ {'e', a1|b1|c1|d1|g1 }, {'E', a1|b1|c1|d1|g1 },
|
||
+ {'f', b1|c1|d1|g1 }, {'F', b1|c1|d1|g1 },
|
||
+ {'g', a1|b1|c1|d1|f1 }, {'G', a1|b1|c1|d1|f1 },
|
||
+ {'h', b1|c1|f1|g1 }, {'H', b1|c1|f1|g1 },
|
||
+ {'i', b1|c1 }, {'I', b1|c1 },
|
||
+ {'j', a1|b1|e1|f1 }, {'J', a1|b1|e1|f1 },
|
||
+ {'k', b1|c1|d1|f1|g1 }, {'K', b1|c1|d1|f1|g1 },
|
||
+ {'l', a1|b1|c1 }, {'L', a1|b1|c1 },
|
||
+ {'m', b1|d1|f1 }, {'M', b1|d1|f1 },
|
||
+ {'n', b1|c1|d1|e1|f1 }, {'N', b1|c1|d1|e1|f1 },
|
||
+ {'o', a1|b1|f1|g1 }, {'O', a1|b1|f1|g1 },
|
||
+ {'p', b1|c1|d1|e1|g1 }, {'P', b1|c1|d1|e1|g1 },
|
||
+ {'q', c1|d1|e1|f1|g1 }, {'Q', c1|d1|e1|f1|g1 },
|
||
+ {'r', b1|g1 }, {'R', b1|g1 },
|
||
+ {'s', a1|c1|d1|f1|g1 }, {'S', a1|c1|d1|f1|g1 },
|
||
+ {'t', a1|b1|c1|g1 }, {'T', a1|b1|c1|g1 },
|
||
+ {'u', a1|b1|f1 }, {'U', a1|b1|f1 },
|
||
+ {'v', a1|b1|c1|e1|f1 }, {'V', a1|b1|c1|e1|f1 },
|
||
+ {'w', a1|c1|e1 }, {'W', a1|c1|e1 },
|
||
+ {'x', b1|c1|e1|f1|g1 }, {'X', b1|c1|e1|f1|g1 },
|
||
+ {'y', a1|c1|e1|f1|g1 }, {'Y', a1|c1|e1|f1|g1 },
|
||
+ {'z', a1|b1|d1|e1|g1 }, {'Z', a1|b1|d1|e1|g1 },
|
||
+ {'_', a1}, {'-', g1}, {' ', 0}, { 0xB0, c1|d1|e1|g1 }
|
||
+};
|
||
+
|
||
+#define a2 0x08
|
||
+#define b2 0x10
|
||
+#define c2 0x20
|
||
+#define d2 0x01
|
||
+#define e2 0x02
|
||
+#define f2 0x04
|
||
+#define g2 0x40
|
||
+#define p2 0x80
|
||
+
|
||
+static const led_bitmap LED_decode_tab2[] = {
|
||
+/*
|
||
+ *
|
||
+ * dp
|
||
+ * +--d/01--+
|
||
+ * | |
|
||
+ * c/20 | | e/02
|
||
+ * +--g/40--+
|
||
+ * | |
|
||
+ * b/10 | | f/04
|
||
+ * +--a/08--+
|
||
+ *
|
||
+ */
|
||
+
|
||
+ {0, a2|b2|c2|d2|e2|f2 }, {1, e2|f2 },
|
||
+ {2, a2|b2|d2|e2|g2 }, {3, a2|d2|e2|f2|g2 },
|
||
+ {4, c2|e2|f2|g2 }, {5, a2|c2|d2|f2|g2 },
|
||
+ {6, a2|b2|c2|d2|f2|g2 }, {7, d2|e2|f2 },
|
||
+ {8, a2|b2|c2|d2|e2|f2|g2}, {9, a2|c2|d2|e2|f2|g2 },
|
||
+
|
||
+ {'0', a2|b2|c2|d2|e2|f2 }, {'1', e2|f2 },
|
||
+ {'2', a2|b2|d2|e2|g2 }, {'3', a2|d2|e2|f2|g2 },
|
||
+ {'4', c2|e2|f2|g2 }, {'5', a2|c2|d2|f2|g2 },
|
||
+ {'6', a2|b2|c2|d2|f2|g2 }, {'7', d2|e2|f2 },
|
||
+ {'8', a2|b2|c2|d2|e2|f2|g2}, {'9', a2|c2|d2|e2|f2|g2 },
|
||
+
|
||
+ {'a', b2|c2|d2|e2|f2|g2 }, {'A', b2|c2|d2|e2|f2|g2 },
|
||
+ {'b', a2|b2|c2|f2|g2 }, {'B', a2|b2|c2|f2|g2 },
|
||
+ {'c', a2|b2|c2|d2 }, {'C', a2|b2|c2|d2 },
|
||
+ {'d', a2|b2|e2|f2|g2 }, {'D', a2|b2|e2|f2|g2 },
|
||
+ {'e', a2|b2|c2|d2|g2 }, {'E', a2|b2|c2|d2|g2 },
|
||
+ {'f', b2|c2|d2|g2 }, {'F', b2|c2|d2|g2 },
|
||
+ {'g', a2|b2|c2|d2|f2 }, {'G', a2|b2|c2|d2|f2 },
|
||
+ {'h', b2|c2|f2|g2 }, {'H', b2|c2|f2|g2 },
|
||
+ {'i', b2|c2 }, {'I', b2|c2 },
|
||
+ {'j', a2|b2|e2|f2 }, {'J', a2|b2|e2|f2 },
|
||
+ {'k', b2|c2|d2|f2|g2 }, {'K', b2|c2|d2|f2|g2 },
|
||
+ {'l', a2|b2|c2 }, {'L', a2|b2|c2 },
|
||
+ {'m', b2|d2|f2 }, {'M', b2|d2|f2 },
|
||
+ {'n', b2|c2|d2|e2|f2 }, {'N', b2|c2|d2|e2|f2 },
|
||
+ {'o', a2|b2|f2|g2 }, {'O', a2|b2|f2|g2 },
|
||
+ {'p', b2|c2|d2|e2|g2 }, {'P', b2|c2|d2|e2|g2 },
|
||
+ {'q', c2|d2|e2|f2|g2 }, {'Q', c2|d2|e2|f2|g2 },
|
||
+ {'r', b2|g2 }, {'R', b2|g2 },
|
||
+ {'s', a2|c2|d2|f2|g2 }, {'S', a2|c2|d2|f2|g2 },
|
||
+ {'t', a2|b2|c2|g2 }, {'T', a2|b2|c2|g2 },
|
||
+ {'u', a2|b2|f2 }, {'U', a2|b2|f2 },
|
||
+ {'v', a2|b2|c2|e2|f2 }, {'V', a2|b2|c2|e2|f2 },
|
||
+ {'w', a2|c2|e2 }, {'W', a2|c2|e2 },
|
||
+ {'x', b2|c2|e2|f2|g2 }, {'X', b2|c2|e2|f2|g2 },
|
||
+ {'y', a2|c2|e2|f2|g2 }, {'Y', a2|c2|e2|f2|g2 },
|
||
+ {'z', a2|b2|d2|e2|g2 }, {'Z', a2|b2|d2|e2|g2 },
|
||
+ {'_', a2}, {'-', g2}, {' ', 0}, { 0xB0, c2|d2|e2|g2 }
|
||
+};
|
||
+
|
||
+#define a3 0x01
|
||
+#define b3 0x08
|
||
+#define c3 0x20
|
||
+#define d3 0x02
|
||
+#define e3 0x10
|
||
+#define f3 0x04
|
||
+#define g3 0x40
|
||
+#define p3 0x80
|
||
+
|
||
+static const led_bitmap LED_decode_tab3[] = {
|
||
+/*
|
||
+ *
|
||
+ * dp
|
||
+ * +--d/02--+
|
||
+ * | |
|
||
+ * c/20 | | e/10
|
||
+ * +--g/40--+
|
||
+ * | |
|
||
+ * b/08 | | f/04
|
||
+ * +--a/01--+
|
||
+ *
|
||
+ */
|
||
+
|
||
+ {0, a3|b3|c3|d3|e3|f3 }, {1, e3|f3 },
|
||
+ {2, a3|b3|d3|e3|g3 }, {3, a3|d3|e3|f3|g3 },
|
||
+ {4, c3|e3|f3|g3 }, {5, a3|c3|d3|f3|g3 },
|
||
+ {6, a3|b3|c3|d3|f3|g3 }, {7, d3|e3|f3 },
|
||
+ {8, a3|b3|c3|d3|e3|f3|g3}, {9, a3|c3|d3|e3|f3|g3 },
|
||
+
|
||
+ {'0', a3|b3|c3|d3|e3|f3 }, {'1', e3|f3 },
|
||
+ {'2', a3|b3|d3|e3|g3 }, {'3', a3|d3|e3|f3|g3 },
|
||
+ {'4', c3|e3|f3|g3 }, {'5', a3|c3|d3|f3|g3 },
|
||
+ {'6', a3|b3|c3|d3|f3|g3 }, {'7', d3|e3|f3 },
|
||
+ {'8', a3|b3|c3|d3|e3|f3|g3}, {'9', a3|c3|d3|e3|f3|g3 },
|
||
+
|
||
+ {'a', b3|c3|d3|e3|f3|g3 }, {'A', b3|c3|d3|e3|f3|g3 },
|
||
+ {'b', a3|b3|c3|f3|g3 }, {'B', a3|b3|c3|f3|g3 },
|
||
+ {'c', a3|b3|c3|d3 }, {'C', a3|b3|c3|d3 },
|
||
+ {'d', a3|b3|e3|f3|g3 }, {'D', a3|b3|e3|f3|g3 },
|
||
+ {'e', a3|b3|c3|d3|g3 }, {'E', a3|b3|c3|d3|g3 },
|
||
+ {'f', b3|c3|d3|g3 }, {'F', b3|c3|d3|g3 },
|
||
+ {'g', a3|b3|c3|d3|f3 }, {'G', a3|b3|c3|d3|f3 },
|
||
+ {'h', b3|c3|f3|g3 }, {'H', b3|c3|f3|g3 },
|
||
+ {'i', b3|c3 }, {'I', b3|c3 },
|
||
+ {'j', a3|b3|e3|f3 }, {'J', a3|b3|e3|f3 },
|
||
+ {'k', b3|c3|d3|f3|g3 }, {'K', b3|c3|d3|f3|g3 },
|
||
+ {'l', a3|b3|c3 }, {'L', a3|b3|c3 },
|
||
+ {'m', b3|d3|f3 }, {'M', b3|d3|f3 },
|
||
+ {'n', b3|c3|d3|e3|f3 }, {'N', b3|c3|d3|e3|f3 },
|
||
+ {'o', a3|b3|f3|g3 }, {'O', a3|b3|f3|g3 },
|
||
+ {'p', b3|c3|d3|e3|g3 }, {'P', b3|c3|d3|e3|g3 },
|
||
+ {'q', c3|d3|e3|f3|g3 }, {'Q', c3|d3|e3|f3|g3 },
|
||
+ {'r', b3|g3 }, {'R', b3|g3 },
|
||
+ {'s', a3|c3|d3|f3|g3 }, {'S', a3|c3|d3|f3|g3 },
|
||
+ {'t', a3|b3|c3|g3 }, {'T', a3|b3|c3|g3 },
|
||
+ {'u', a3|b3|f3 }, {'U', a3|b3|f3 },
|
||
+ {'v', a3|b3|c3|e3|f3 }, {'V', a3|b3|c3|e3|f3 },
|
||
+ {'w', a3|c3|e3 }, {'W', a3|c3|e3 },
|
||
+ {'x', b3|c3|e3|f3|g3 }, {'X', b3|c3|e3|f3|g3 },
|
||
+ {'y', a3|c3|e3|f3|g3 }, {'Y', a3|c3|e3|f3|g3 },
|
||
+ {'z', a3|b3|d3|e3|g3 }, {'Z', a3|b3|d3|e3|g3 },
|
||
+ {'_', a3}, {'-', g3}, {' ', 0}, { 0xB0, c3|d3|e3|g3 }
|
||
+};
|
||
+
|
||
+#define a4 0x04
|
||
+#define b4 0x02
|
||
+#define c4 0x80
|
||
+#define d4 0x01
|
||
+#define e4 0x40
|
||
+#define f4 0x10
|
||
+#define g4 0x20
|
||
+#define p4 0x08
|
||
+
|
||
+static const led_bitmap LED_decode_tab4[] = {
|
||
+/*
|
||
+ *
|
||
+ * dp
|
||
+ * +--d/01--+
|
||
+ * | |
|
||
+ * c/80 | | e/40
|
||
+ * +--g/20--+
|
||
+ * | |
|
||
+ * b/02 | | f/10
|
||
+ * +--a/04--+.p/08
|
||
+ *
|
||
+ */
|
||
+
|
||
+ {0, a4|b4|c4|d4|e4|f4 }, {1, e4|f4 },
|
||
+ {2, a4|b4|d4|e4|g4 }, {3, a4|d4|e4|f4|g4 },
|
||
+ {4, c4|e4|f4|g4 }, {5, a4|c4|d4|f4|g4 },
|
||
+ {6, a4|b4|c4|d4|f4|g4 }, {7, d4|e4|f4 },
|
||
+ {8, a4|b4|c4|d4|e4|f4|g4}, {9, a4|c4|d4|e4|f4|g4 },
|
||
+
|
||
+ {'0', a4|b4|c4|d4|e4|f4 }, {'1', e4|f4 },
|
||
+ {'2', a4|b4|d4|e4|g4 }, {'3', a4|d4|e4|f4|g4 },
|
||
+ {'4', c4|e4|f4|g4 }, {'5', a4|c4|d4|f4|g4 },
|
||
+ {'6', a4|b4|c4|d4|f4|g4 }, {'7', d4|e4|f4 },
|
||
+ {'8', a4|b4|c4|d4|e4|f4|g4}, {'9', a4|c4|d4|e4|f4|g4 },
|
||
+
|
||
+ {'a', b4|c4|d4|e4|f4|g4 }, {'A', b4|c4|d4|e4|f4|g4 },
|
||
+ {'b', a4|b4|c4|f4|g4 }, {'B', a4|b4|c4|f4|g4 },
|
||
+ {'c', a4|b4|c4|d4 }, {'C', a4|b4|c4|d4 },
|
||
+ {'d', a4|b4|e4|f4|g4 }, {'D', a4|b4|e4|f4|g4 },
|
||
+ {'e', a4|b4|c4|d4|g4 }, {'E', a4|b4|c4|d4|g4 },
|
||
+ {'f', b4|c4|d4|g4 }, {'F', b4|c4|d4|g4 },
|
||
+ {'g', a4|b4|c4|d4|f4 }, {'G', a4|b4|c4|d4|f4 },
|
||
+ {'h', b4|c4|f4|g4 }, {'H', b4|c4|f4|g4 },
|
||
+ {'i', b4|c4 }, {'I', b4|c4 },
|
||
+ {'j', a4|b4|e4|f4 }, {'J', a4|b4|e4|f4 },
|
||
+ {'k', b4|c4|d4|f4|g4 }, {'K', b4|c4|d4|f4|g4 },
|
||
+ {'l', a4|b4|c4 }, {'L', a4|b4|c4 },
|
||
+ {'m', b4|d4|f4 }, {'M', b4|d4|f4 },
|
||
+ {'n', b4|c4|d4|e4|f4 }, {'N', b4|c4|d4|e4|f4 },
|
||
+ {'o', a4|b4|f4|g4 }, {'O', a4|b4|f4|g4 },
|
||
+ {'p', b4|c4|d4|e4|g4 }, {'P', b4|c4|d4|e4|g4 },
|
||
+ {'q', c4|d4|e4|f4|g4 }, {'Q', c4|d4|e4|f4|g4 },
|
||
+ {'r', b4|g4 }, {'R', b4|g4 },
|
||
+ {'s', a4|c4|d4|f4|g4 }, {'S', a4|c4|d4|f4|g4 },
|
||
+ {'t', a4|b4|c4|g4 }, {'T', a4|b4|c4|g4 },
|
||
+ {'u', a4|b4|f4 }, {'U', a4|b4|f4 },
|
||
+ {'v', a4|b4|c4|e4|f4 }, {'V', a4|b4|c4|e4|f4 },
|
||
+ {'w', a4|c4|e4 }, {'W', a4|c4|e4 },
|
||
+ {'x', b4|c4|e4|f4|g4 }, {'X', b4|c4|e4|f4|g4 },
|
||
+ {'y', a4|c4|e4|f4|g4 }, {'Y', a4|c4|e4|f4|g4 },
|
||
+ {'z', a4|b4|d4|e4|g4 }, {'Z', a4|b4|d4|e4|g4 },
|
||
+ {'_', a4}, {'-', g4}, {' ', 0}, { 0xB0, c4|d4|e4|g4 }
|
||
+};
|
||
+
|
||
+#define a5 0x40
|
||
+#define b5 0x20
|
||
+#define c5 0x10
|
||
+#define d5 0x01
|
||
+#define e5 0x02
|
||
+#define f5 0x04
|
||
+#define g5 0x08
|
||
+#define p5 0x80
|
||
+
|
||
+static const led_bitmap LED_decode_tab5[] = {
|
||
+/*
|
||
+ *
|
||
+ * dp
|
||
+ * +--d/01--+
|
||
+ * | |
|
||
+ * c/10 | | e/02
|
||
+ * +--g/08--+
|
||
+ * | |
|
||
+ * b/20 | | f/04
|
||
+ * +--a/40--+
|
||
+ *
|
||
+ */
|
||
+
|
||
+ {0, a5|b5|c5|d5|e5|f5 }, {1, e5|f5 },
|
||
+ {2, a5|b5|d5|e5|g5 }, {3, a5|d5|e5|f5|g5 },
|
||
+ {4, c5|e5|f5|g5 }, {5, a5|c5|d5|f5|g5 },
|
||
+ {6, a5|b5|c5|d5|f5|g5 }, {7, d5|e5|f5 },
|
||
+ {8, a5|b5|c5|d5|e5|f5|g5}, {9, a5|c5|d5|e5|f5|g5 },
|
||
+
|
||
+ {'0', a5|b5|c5|d5|e5|f5 }, {'1', e5|f5 },
|
||
+ {'2', a5|b5|d5|e5|g5 }, {'3', a5|d5|e5|f5|g5 },
|
||
+ {'4', c5|e5|f5|g5 }, {'5', a5|c5|d5|f5|g5 },
|
||
+ {'6', a5|b5|c5|d5|f5|g5 }, {'7', d5|e5|f5 },
|
||
+ {'8', a5|b5|c5|d5|e5|f5|g5}, {'9', a5|c5|d5|e5|f5|g5 },
|
||
+
|
||
+ {'a', b5|c5|d5|e5|f5|g5 }, {'A', b5|c5|d5|e5|f5|g5 },
|
||
+ {'b', a5|b5|c5|f5|g5 }, {'B', a5|b5|c5|f5|g5 },
|
||
+ {'c', a5|b5|c5|d5 }, {'C', a5|b5|c5|d5 },
|
||
+ {'d', a5|b5|e5|f5|g5 }, {'D', a5|b5|e5|f5|g5 },
|
||
+ {'e', a5|b5|c5|d5|g5 }, {'E', a5|b5|c5|d5|g5 },
|
||
+ {'f', b5|c5|d5|g5 }, {'F', b5|c5|d5|g5 },
|
||
+ {'g', a5|b5|c5|d5|f5 }, {'G', a5|b5|c5|d5|f5 },
|
||
+ {'h', b5|c5|f5|g5 }, {'H', b5|c5|f5|g5 },
|
||
+ {'i', b5|c5 }, {'I', b5|c5 },
|
||
+ {'j', a5|b5|e5|f5 }, {'J', a5|b5|e5|f5 },
|
||
+ {'k', b5|c5|d5|f5|g5 }, {'K', b5|c5|d5|f5|g5 },
|
||
+ {'l', a5|b5|c5 }, {'L', a5|b5|c5 },
|
||
+ {'m', b5|d5|f5 }, {'M', b5|d5|f5 },
|
||
+ {'n', b5|c5|d5|e5|f5 }, {'N', b5|c5|d5|e5|f5 },
|
||
+ {'o', a5|b5|f5|g5 }, {'O', a5|b5|f5|g5 },
|
||
+ {'p', b5|c5|d5|e5|g5 }, {'P', b5|c5|d5|e5|g5 },
|
||
+ {'q', c5|d5|e5|f5|g5 }, {'Q', c5|d5|e5|f5|g5 },
|
||
+ {'r', b5|g5 }, {'R', b5|g5 },
|
||
+ {'s', a5|c5|d5|f5|g5 }, {'S', a5|c5|d5|f5|g5 },
|
||
+ {'t', a5|b5|c5|g5 }, {'T', a5|b5|c5|g5 },
|
||
+ {'u', a5|b5|f5 }, {'U', a5|b5|f5 },
|
||
+ {'v', a5|b5|c5|e5|f5 }, {'V', a5|b5|c5|e5|f5 },
|
||
+ {'w', a5|c5|e5 }, {'W', a5|c5|e5 },
|
||
+ {'x', b5|c5|e5|f5|g5 }, {'X', b5|c5|e5|f5|g5 },
|
||
+ {'y', a5|c5|e5|f5|g5 }, {'Y', a5|c5|e5|f5|g5 },
|
||
+ {'z', a5|b5|d5|e5|g5 }, {'Z', a5|b5|d5|e5|g5 },
|
||
+ {'_', a5}, {'-', g5}, {' ', 0}, { 0xB0, c5|d5|e5|g5 }
|
||
+};
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/openvfd_drv.c b/drivers/leds/vfd/openvfd_drv.c
|
||
new file mode 100644
|
||
index 000000000..98559dccb
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/openvfd_drv.c
|
||
@@ -0,0 +1,1036 @@
|
||
+/*
|
||
+ * Open VFD Driver
|
||
+ *
|
||
+ * Copyright (C) 2018 Arthur Liberman (arthur_liberman (at) hotmail.com)
|
||
+ *
|
||
+ *
|
||
+ * 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
|
||
+ */
|
||
+
|
||
+#include <linux/version.h>
|
||
+#include <linux/module.h>
|
||
+#include <linux/init.h>
|
||
+#include <linux/types.h>
|
||
+#include <linux/kernel.h>
|
||
+#include <linux/platform_device.h>
|
||
+#include <linux/errno.h>
|
||
+#include <linux/leds.h>
|
||
+#include <linux/string.h>
|
||
+#include <linux/ioctl.h>
|
||
+#include <linux/device.h>
|
||
+#include <linux/miscdevice.h>
|
||
+#include <linux/fs.h>
|
||
+#include <linux/poll.h>
|
||
+#include <linux/gpio.h>
|
||
+#include <linux/of_gpio.h>
|
||
+#include "openvfd_drv.h"
|
||
+#include "controllers/controller_list.h"
|
||
+
|
||
+#ifdef CONFIG_HAS_EARLYSUSPEND
|
||
+#include <linux/earlysuspend.h>
|
||
+static struct early_suspend openvfd_early_suspend;
|
||
+#elif CONFIG_AMLOGIC_LEGACY_EARLY_SUSPEND
|
||
+#include <linux/amlogic/pm.h>
|
||
+static struct early_suspend openvfd_early_suspend;
|
||
+#endif
|
||
+
|
||
+unsigned char vfd_display_auto_power = 1;
|
||
+
|
||
+static struct vfd_platform_data *pdata = NULL;
|
||
+struct kp {
|
||
+ struct led_classdev cdev;
|
||
+};
|
||
+
|
||
+static struct kp *kp;
|
||
+
|
||
+static struct controller_interface *controller = NULL;
|
||
+static struct mutex mutex;
|
||
+
|
||
+/****************************************************************
|
||
+ * Function Name: FD628_GetKey
|
||
+ * Description: Read key code value
|
||
+ * Parameters: void
|
||
+ * Return value: INT32U returns the key value
|
||
+ **************************************************************************************************************************************
|
||
+Key value encoding
|
||
+ | 0 | 0 | 0 | 0 | 0 | 0 | KS10 | KS9 | KS8 | KS7 | KS6 | KS5 | KS4 | KS3 | KS2 | KS1 |
|
||
+KEYI1 | bit15 | bit14 | bit13 | bit12 | bit11 | bit10 | bit9 | bit8 | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
|
||
+KEYI2 | bit31 | bit30 | bit29 | bit28 | bit27 | bit26 | bit25 | bit24 | bit23 | bit22 | bit21 | bit20 | bit19 | bit18 | bit17 | bit16 |
|
||
+***************************************************************************************************************************************/
|
||
+static u_int32 FD628_GetKey(struct vfd_dev *dev)
|
||
+{
|
||
+ u_int8 i, keyDataBytes[5];
|
||
+ u_int32 FD628_KeyData = 0;
|
||
+ mutex_lock(&mutex);
|
||
+ controller->read_data(keyDataBytes, sizeof(keyDataBytes));
|
||
+ mutex_unlock(&mutex);
|
||
+ for (i = 0; i != 5; i++) { /* Pack 5 bytes of key code values into 2 words */
|
||
+ if (keyDataBytes[i] & 0x01)
|
||
+ FD628_KeyData |= (0x00000001 << i * 2);
|
||
+ if (keyDataBytes[i] & 0x02)
|
||
+ FD628_KeyData |= (0x00010000 << i * 2);
|
||
+ if (keyDataBytes[i] & 0x08)
|
||
+ FD628_KeyData |= (0x00000002 << i * 2);
|
||
+ if (keyDataBytes[i] & 0x10)
|
||
+ FD628_KeyData |= (0x00020000 << i * 2);
|
||
+ }
|
||
+
|
||
+ return (FD628_KeyData);
|
||
+}
|
||
+
|
||
+static void unlocked_set_power(unsigned char state)
|
||
+{
|
||
+ if (vfd_display_auto_power && controller) {
|
||
+ controller->set_power(state);
|
||
+ if (state && pdata)
|
||
+ controller->set_brightness_level(pdata->dev->brightness);
|
||
+ }
|
||
+}
|
||
+
|
||
+static void set_power(unsigned char state)
|
||
+{
|
||
+ mutex_lock(&mutex);
|
||
+ unlocked_set_power(state);
|
||
+ mutex_unlock(&mutex);
|
||
+}
|
||
+
|
||
+static void init_controller(struct vfd_dev *dev)
|
||
+{
|
||
+ struct controller_interface *temp_ctlr;
|
||
+
|
||
+ switch (dev->dtb_active.display.controller) {
|
||
+ case CONTROLLER_FD628:
|
||
+ case CONTROLLER_FD620:
|
||
+ case CONTROLLER_TM1618:
|
||
+ pr_dbg2("Select FD628 controller\n");
|
||
+ temp_ctlr = init_fd628(dev);
|
||
+ break;
|
||
+ case CONTROLLER_HBS658:
|
||
+ pr_dbg2("Select HBS658 controller\n");
|
||
+ temp_ctlr = init_fd628(dev);
|
||
+ break;
|
||
+ case CONTROLLER_FD650:
|
||
+ pr_dbg2("Select FD650 controller\n");
|
||
+ temp_ctlr = init_fd650(dev);
|
||
+ break;
|
||
+ case CONTROLLER_FD655:
|
||
+ pr_dbg2("Select FD655 controller\n");
|
||
+ temp_ctlr = init_fd650(dev);
|
||
+ break;
|
||
+ case CONTROLLER_FD6551:
|
||
+ pr_dbg2("Select FD6551 controller\n");
|
||
+ temp_ctlr = init_fd650(dev);
|
||
+ break;
|
||
+ case CONTROLLER_IL3829:
|
||
+ pr_dbg2("Select IL3829 controller\n");
|
||
+ temp_ctlr = init_il3829(dev);
|
||
+ break;
|
||
+ case CONTROLLER_PCD8544:
|
||
+ pr_dbg2("Select PCD8544 controller\n");
|
||
+ temp_ctlr = init_pcd8544(dev);
|
||
+ break;
|
||
+ case CONTROLLER_SH1106:
|
||
+ pr_dbg2("Select SH1106 controller\n");
|
||
+ temp_ctlr = init_ssd1306(dev);
|
||
+ break;
|
||
+ case CONTROLLER_SSD1306:
|
||
+ pr_dbg2("Select SSD1306 controller\n");
|
||
+ temp_ctlr = init_ssd1306(dev);
|
||
+ break;
|
||
+ case CONTROLLER_HD44780:
|
||
+ pr_dbg2("Select HD44780 controller\n");
|
||
+ temp_ctlr = init_hd47780(dev);
|
||
+ break;
|
||
+ default:
|
||
+ pr_dbg2("Select Dummy controller\n");
|
||
+ temp_ctlr = init_dummy(dev);
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ if (controller != temp_ctlr) {
|
||
+ unlocked_set_power(0);
|
||
+ controller = temp_ctlr;
|
||
+ if (!controller->init()) {
|
||
+ pr_dbg2("Failed to initialize the controller, reverting to Dummy controller\n");
|
||
+ controller = init_dummy(dev);
|
||
+ dev->dtb_active.display.controller = CONTROLLER_7S_MAX;
|
||
+ }
|
||
+ }
|
||
+}
|
||
+
|
||
+static int openvfd_dev_open(struct inode *inode, struct file *file)
|
||
+{
|
||
+ struct vfd_dev *dev = NULL;
|
||
+ file->private_data = pdata->dev;
|
||
+ dev = file->private_data;
|
||
+ memset(dev->wbuf, 0x00, sizeof(dev->wbuf));
|
||
+ set_power(1);
|
||
+ pr_dbg("openvfd_dev_open now.............................\r\n");
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+static int openvfd_dev_release(struct inode *inode, struct file *file)
|
||
+{
|
||
+ set_power(0);
|
||
+ file->private_data = NULL;
|
||
+ pr_dbg("succes to close openvfd_dev.............\n");
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+static ssize_t openvfd_dev_read(struct file *filp, char __user * buf,
|
||
+ size_t count, loff_t * f_pos)
|
||
+{
|
||
+ __u32 disk = 0;
|
||
+ struct vfd_dev *dev = filp->private_data;
|
||
+ __u32 diskvalue = 0;
|
||
+ int ret = 0;
|
||
+ int rbuf[2] = { 0 };
|
||
+ //pr_dbg("start read keyboard value...............\r\n");
|
||
+ if (dev->Keyboard_diskstatus == 1) {
|
||
+ diskvalue = FD628_GetKey(dev);
|
||
+ if (diskvalue == 0)
|
||
+ return 0;
|
||
+ }
|
||
+ dev->key_respond_status = 0;
|
||
+ rbuf[1] = dev->key_fg;
|
||
+ if (dev->key_fg)
|
||
+ rbuf[0] = disk;
|
||
+ else
|
||
+ rbuf[0] = diskvalue;
|
||
+ //pr_dbg("Keyboard value:%d\n, status : %d\n",rbuf[0],rbuf[1]);
|
||
+ ret = copy_to_user(buf, rbuf, sizeof(rbuf));
|
||
+ if (ret == 0)
|
||
+ return sizeof(rbuf);
|
||
+ else
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+/**
|
||
+ * @param buf: Incoming LED codes.
|
||
+ * [0] Display indicators mask (wifi, eth, usb, etc.)
|
||
+ * [1-4] 7 segment characters, to be displayed left to right.
|
||
+ * @return
|
||
+ */
|
||
+static ssize_t openvfd_dev_write(struct file *filp, const char __user * buf,
|
||
+ size_t count, loff_t * f_pos)
|
||
+{
|
||
+ ssize_t status = 0;
|
||
+ unsigned long missing;
|
||
+ static struct vfd_display_data data;
|
||
+
|
||
+ if (count == sizeof(data)) {
|
||
+ missing = copy_from_user(&data, buf, count);
|
||
+ if (missing == 0 && count > 0) {
|
||
+ mutex_lock(&mutex);
|
||
+ if (controller->write_display_data(&data))
|
||
+ pr_dbg("openvfd_dev_write count : %ld\n", count);
|
||
+ else {
|
||
+ status = -1;
|
||
+ pr_error("openvfd_dev_write failed to write %ld bytes (display_data)\n", count);
|
||
+ }
|
||
+ mutex_unlock(&mutex);
|
||
+ }
|
||
+ } else if (count > 0) {
|
||
+ unsigned char *raw_data;
|
||
+ pr_dbg2("openvfd_dev_write: count = %ld, sizeof(data) = %ld\n", count, sizeof(data));
|
||
+ raw_data = kzalloc(count, GFP_KERNEL);
|
||
+ if (raw_data) {
|
||
+ missing = copy_from_user(raw_data, buf, count);
|
||
+ mutex_lock(&mutex);
|
||
+ if (controller->write_data((unsigned char*)raw_data, count))
|
||
+ pr_dbg("openvfd_dev_write count : %ld\n", count);
|
||
+ else {
|
||
+ status = -1;
|
||
+ pr_error("openvfd_dev_write failed to write %ld bytes (raw_data)\n", count);
|
||
+ }
|
||
+ mutex_unlock(&mutex);
|
||
+ kfree(raw_data);
|
||
+ }
|
||
+ else {
|
||
+ status = -1;
|
||
+ pr_error("openvfd_dev_write failed to allocate %ld bytes (raw_data)\n", count);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ return status;
|
||
+}
|
||
+
|
||
+static int set_display_brightness(struct vfd_dev *dev, u_int8 new_brightness)
|
||
+{
|
||
+ return controller->set_brightness_level(new_brightness);
|
||
+}
|
||
+
|
||
+static void set_display_type(struct vfd_dev *dev, int new_display_type)
|
||
+{
|
||
+ memcpy(&dev->dtb_active.display, &new_display_type, sizeof(struct vfd_display));
|
||
+ init_controller(dev);
|
||
+}
|
||
+
|
||
+static long openvfd_dev_ioctl(struct file *filp, unsigned int cmd,
|
||
+ unsigned long arg)
|
||
+{
|
||
+ int err = 0, ret = 0, temp = 0;
|
||
+ struct vfd_dev *dev;
|
||
+ __u8 val = 1;
|
||
+ __u8 temp_chars_order[sizeof(dev->dtb_active.dat_index)];
|
||
+ dev = filp->private_data;
|
||
+
|
||
+ if (_IOC_TYPE(cmd) != VFD_IOC_MAGIC)
|
||
+ return -ENOTTY;
|
||
+ if (_IOC_NR(cmd) >= VFD_IOC_MAXNR)
|
||
+ return -ENOTTY;
|
||
+ if (_IOC_DIR(cmd) & _IOC_READ)
|
||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0))
|
||
+ err = !access_ok((void __user *)arg, _IOC_SIZE(cmd));
|
||
+#else
|
||
+ err = !access_ok(VERIFY_WRITE, (void __user *)arg, _IOC_SIZE(cmd));
|
||
+#endif
|
||
+ else if (_IOC_DIR(cmd) & _IOC_WRITE)
|
||
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0))
|
||
+ err = !access_ok((void __user *)arg, _IOC_SIZE(cmd));
|
||
+#else
|
||
+ err = !access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd));
|
||
+#endif
|
||
+ if (err)
|
||
+ return -EFAULT;
|
||
+
|
||
+ mutex_lock(&mutex);
|
||
+ switch (cmd) {
|
||
+ case VFD_IOC_USE_DTB_CONFIG:
|
||
+ dev->dtb_active = dev->dtb_default;
|
||
+ init_controller(dev);
|
||
+ break;
|
||
+ case VFD_IOC_GDISPLAY_TYPE:
|
||
+ memcpy(&temp, &dev->dtb_active.display, sizeof(int));
|
||
+ ret = __put_user(temp, (int __user *)arg);
|
||
+ break;
|
||
+ case VFD_IOC_SDISPLAY_TYPE:
|
||
+ ret = __get_user(temp, (int __user *)arg);
|
||
+ if (!ret)
|
||
+ set_display_type(dev, temp);
|
||
+ break;
|
||
+ case VFD_IOC_SCHARS_ORDER:
|
||
+ ret = __copy_from_user(temp_chars_order, (__u8 __user *)arg, sizeof(dev->dtb_active.dat_index));
|
||
+ if (!ret)
|
||
+ memcpy(dev->dtb_active.dat_index, temp_chars_order, sizeof(dev->dtb_active.dat_index));
|
||
+ break;
|
||
+ case VFD_IOC_SMODE: /* Set: arg points to the value */
|
||
+ ret = __get_user(dev->mode, (int __user *)arg);
|
||
+ //FD628_SET_DISPLAY_MODE(dev->mode, dev);
|
||
+ break;
|
||
+ case VFD_IOC_GMODE: /* Get: arg is pointer to result */
|
||
+ ret = __put_user(dev->mode, (int __user *)arg);
|
||
+ break;
|
||
+ case VFD_IOC_GVER:
|
||
+ ret =
|
||
+ copy_to_user((unsigned char __user *)arg,
|
||
+ OPENVFD_DRIVER_VERSION,
|
||
+ sizeof(OPENVFD_DRIVER_VERSION));
|
||
+ break;
|
||
+ case VFD_IOC_SBRIGHT:
|
||
+ ret = __get_user(temp, (int __user *)arg);
|
||
+ if (!ret && !set_display_brightness(dev, (u_int8)temp))
|
||
+ ret = -ERANGE;
|
||
+ break;
|
||
+ case VFD_IOC_GBRIGHT:
|
||
+ ret = __put_user(dev->brightness, (int __user *)arg);
|
||
+ break;
|
||
+ case VFD_IOC_POWER:
|
||
+ ret = __get_user(val, (int __user *)arg);
|
||
+ controller->set_power(val);
|
||
+ break;
|
||
+ case VFD_IOC_STATUS_LED:
|
||
+ ret = __get_user(dev->status_led_mask, (int __user *)arg);
|
||
+ break;
|
||
+ default: /* redundant, as cmd was checked against MAXNR */
|
||
+ ret = -ENOTTY;
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ mutex_unlock(&mutex);
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static unsigned int openvfd_dev_poll(struct file *filp, poll_table * wait)
|
||
+{
|
||
+ unsigned int mask = 0;
|
||
+ struct vfd_dev *dev = filp->private_data;
|
||
+ poll_wait(filp, &dev->kb_waitq, wait);
|
||
+ if (dev->key_respond_status)
|
||
+ mask |= POLLIN | POLLRDNORM;
|
||
+ return mask;
|
||
+}
|
||
+
|
||
+static struct file_operations openvfd_fops = {
|
||
+ .owner = THIS_MODULE,
|
||
+ .open = openvfd_dev_open,
|
||
+ .release = openvfd_dev_release,
|
||
+ .read = openvfd_dev_read,
|
||
+ .write = openvfd_dev_write,
|
||
+ .unlocked_ioctl = openvfd_dev_ioctl,
|
||
+ .compat_ioctl = openvfd_dev_ioctl,
|
||
+ .poll = openvfd_dev_poll,
|
||
+};
|
||
+
|
||
+static struct miscdevice openvfd_device = {
|
||
+ .minor = MISC_DYNAMIC_MINOR,
|
||
+ .name = DEV_NAME,
|
||
+ .fops = &openvfd_fops,
|
||
+};
|
||
+
|
||
+static int register_openvfd_driver(void)
|
||
+{
|
||
+ int ret = 0;
|
||
+ ret = misc_register(&openvfd_device);
|
||
+ if (ret)
|
||
+ pr_dbg("%s: failed to add openvfd module\n", __func__);
|
||
+ else
|
||
+ pr_dbg("%s: Succeeded to add openvfd module \n", __func__);
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static void deregister_openvfd_driver(void)
|
||
+{
|
||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)
|
||
+ int ret = 0;
|
||
+ ret = misc_deregister(&openvfd_device);
|
||
+ if (ret)
|
||
+ pr_dbg("%s: failed to deregister openvfd module\n", __func__);
|
||
+ else
|
||
+ pr_dbg("%s: Succeeded to deregister openvfd module \n", __func__);
|
||
+#else
|
||
+ misc_deregister(&openvfd_device);
|
||
+#endif
|
||
+}
|
||
+
|
||
+
|
||
+static void openvfd_brightness_set(struct led_classdev *cdev,
|
||
+ enum led_brightness brightness)
|
||
+{
|
||
+ pr_info("brightness = %d\n", brightness);
|
||
+
|
||
+ if(pdata == NULL)
|
||
+ return;
|
||
+}
|
||
+
|
||
+static int led_cmd_ioc = 0;
|
||
+
|
||
+static ssize_t led_cmd_show(struct device *dev,
|
||
+ struct device_attribute *attr, char *buf)
|
||
+{
|
||
+ ssize_t ret = 0;
|
||
+ *buf = '\0';
|
||
+
|
||
+ switch(led_cmd_ioc) {
|
||
+ case VFD_IOC_GMODE:
|
||
+ ret = scnprintf(buf, PAGE_SIZE, "%d", pdata->dev->mode);
|
||
+ break;
|
||
+ case VFD_IOC_GBRIGHT:
|
||
+ ret = scnprintf(buf, PAGE_SIZE, "%d", pdata->dev->brightness);
|
||
+ break;
|
||
+ case VFD_IOC_GVER:
|
||
+ ret = scnprintf(buf, PAGE_SIZE, "%s", OPENVFD_DRIVER_VERSION);
|
||
+ break;
|
||
+ case VFD_IOC_GDISPLAY_TYPE:
|
||
+ ret = scnprintf(buf, PAGE_SIZE, "0x%02X%02X%02X%02X", pdata->dev->dtb_active.display.reserved, pdata->dev->dtb_active.display.flags,
|
||
+ pdata->dev->dtb_active.display.controller, pdata->dev->dtb_active.display.type);
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ led_cmd_ioc = 0;
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static ssize_t led_cmd_store(struct device *_dev,
|
||
+ struct device_attribute *attr, const char *buf, size_t size)
|
||
+{
|
||
+ struct vfd_dev *dev = pdata->dev;
|
||
+ int cmd, temp;
|
||
+ led_cmd_ioc = 0;
|
||
+
|
||
+ if (size < 2*sizeof(int))
|
||
+ return -EFAULT;
|
||
+ memcpy(&cmd, buf, sizeof(int));
|
||
+ if (_IOC_TYPE(cmd) != VFD_IOC_MAGIC)
|
||
+ return -ENOTTY;
|
||
+ if (_IOC_NR(cmd) >= VFD_IOC_MAXNR)
|
||
+ return -ENOTTY;
|
||
+
|
||
+ buf += sizeof(int);
|
||
+ memcpy(&temp, buf, sizeof(int));
|
||
+ mutex_lock(&mutex);
|
||
+ switch (cmd) {
|
||
+ case VFD_IOC_SMODE:
|
||
+ dev->mode = (u_int8)temp;
|
||
+ //FD628_SET_DISPLAY_MODE(dev->mode, dev);
|
||
+ break;
|
||
+ case VFD_IOC_SBRIGHT:
|
||
+ if (!set_display_brightness(dev, (u_int8)temp))
|
||
+ size = -ERANGE;
|
||
+ break;
|
||
+ case VFD_IOC_POWER:
|
||
+ controller->set_power(temp);
|
||
+ break;
|
||
+ case VFD_IOC_STATUS_LED:
|
||
+ dev->status_led_mask = (u_int8)temp;
|
||
+ break;
|
||
+ case VFD_IOC_SDISPLAY_TYPE:
|
||
+ set_display_type(dev, temp);
|
||
+ break;
|
||
+ case VFD_IOC_SCHARS_ORDER:
|
||
+ if (size >= sizeof(dev->dtb_active.dat_index)+sizeof(int))
|
||
+ memcpy(dev->dtb_active.dat_index, buf, sizeof(dev->dtb_active.dat_index));
|
||
+ else
|
||
+ size = -EFAULT;
|
||
+ break;
|
||
+ case VFD_IOC_USE_DTB_CONFIG:
|
||
+ pdata->dev->dtb_active = pdata->dev->dtb_default;
|
||
+ init_controller(dev);
|
||
+ break;
|
||
+ case VFD_IOC_GMODE:
|
||
+ case VFD_IOC_GBRIGHT:
|
||
+ case VFD_IOC_GVER:
|
||
+ case VFD_IOC_GDISPLAY_TYPE:
|
||
+ led_cmd_ioc = cmd;
|
||
+ break;
|
||
+ }
|
||
+
|
||
+ mutex_unlock(&mutex);
|
||
+ return size;
|
||
+}
|
||
+
|
||
+static ssize_t led_on_show(struct device *dev,
|
||
+ struct device_attribute *attr, char *buf)
|
||
+{
|
||
+ return scnprintf(buf, PAGE_SIZE, "led status is 0x%x\n", pdata->dev->status_led_mask);
|
||
+}
|
||
+
|
||
+static ssize_t led_on_store(struct device *dev,
|
||
+ struct device_attribute *attr, const char *buf, size_t size)
|
||
+{
|
||
+ mutex_lock(&mutex);
|
||
+ controller->set_icon(buf, 1);
|
||
+ mutex_unlock(&mutex);
|
||
+ return size;
|
||
+}
|
||
+
|
||
+static ssize_t led_off_show(struct device *dev,
|
||
+ struct device_attribute *attr, char *buf)
|
||
+{
|
||
+ return scnprintf(buf, PAGE_SIZE, "led status is 0x%x\n", pdata->dev->status_led_mask);
|
||
+}
|
||
+
|
||
+static ssize_t led_off_store(struct device *dev,
|
||
+ struct device_attribute *attr, const char *buf, size_t size)
|
||
+{
|
||
+ mutex_lock(&mutex);
|
||
+ controller->set_icon(buf, 0);
|
||
+ mutex_unlock(&mutex);
|
||
+ return size;
|
||
+}
|
||
+
|
||
+static DEVICE_ATTR(led_cmd , S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, led_cmd_show , led_cmd_store);
|
||
+static DEVICE_ATTR(led_on , S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, led_on_show , led_on_store);
|
||
+static DEVICE_ATTR(led_off , S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP, led_off_show , led_off_store);
|
||
+
|
||
+#if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_AMLOGIC_LEGACY_EARLY_SUSPEND)
|
||
+static void openvfd_suspend(struct early_suspend *h)
|
||
+{
|
||
+ pr_info("%s!\n", __func__);
|
||
+ set_power(0);
|
||
+}
|
||
+
|
||
+static void openvfd_resume(struct early_suspend *h)
|
||
+{
|
||
+ pr_info("%s!\n", __func__);
|
||
+ set_power(1);
|
||
+}
|
||
+#endif
|
||
+
|
||
+unsigned char vfd_gpio_clk[3];
|
||
+unsigned char vfd_gpio_dat[3];
|
||
+unsigned char vfd_gpio_stb[3];
|
||
+unsigned char vfd_gpio0[3] = { 0x00, 0x00, 0xFF };
|
||
+unsigned char vfd_gpio1[3] = { 0x00, 0x00, 0xFF };
|
||
+unsigned char vfd_gpio2[3] = { 0x00, 0x00, 0xFF };
|
||
+unsigned char vfd_gpio3[3] = { 0x00, 0x00, 0xFF };
|
||
+unsigned char vfd_gpio_protocol[2] = { 0x00, 0x00 };
|
||
+unsigned char vfd_chars[7] = { 0, 1, 2, 3, 4, 5, 6 };
|
||
+unsigned char vfd_dot_bits[8] = { 0, 1, 2, 3, 4, 5, 6, 0 };
|
||
+unsigned char vfd_display_type[4] = { 0x00, 0x00, 0x00, 0x00 };
|
||
+int vfd_gpio_clk_argc = 0;
|
||
+int vfd_gpio_dat_argc = 0;
|
||
+int vfd_gpio_stb_argc = 0;
|
||
+int vfd_gpio0_argc = 3;
|
||
+int vfd_gpio1_argc = 3;
|
||
+int vfd_gpio2_argc = 3;
|
||
+int vfd_gpio3_argc = 3;
|
||
+int vfd_gpio_protocol_argc = 2;
|
||
+int vfd_chars_argc = 0;
|
||
+int vfd_dot_bits_argc = 0;
|
||
+int vfd_display_type_argc = 0;
|
||
+
|
||
+module_param_array(vfd_gpio_clk, byte, &vfd_gpio_clk_argc, 0000);
|
||
+module_param_array(vfd_gpio_dat, byte, &vfd_gpio_dat_argc, 0000);
|
||
+module_param_array(vfd_gpio_stb, byte, &vfd_gpio_stb_argc, 0000);
|
||
+module_param_array(vfd_gpio0, byte, &vfd_gpio0_argc, 0000);
|
||
+module_param_array(vfd_gpio1, byte, &vfd_gpio1_argc, 0000);
|
||
+module_param_array(vfd_gpio2, byte, &vfd_gpio2_argc, 0000);
|
||
+module_param_array(vfd_gpio3, byte, &vfd_gpio3_argc, 0000);
|
||
+module_param_array(vfd_gpio_protocol, byte, &vfd_gpio_protocol_argc, 0000);
|
||
+module_param_array(vfd_chars, byte, &vfd_chars_argc, 0000);
|
||
+module_param_array(vfd_dot_bits, byte, &vfd_dot_bits_argc, 0000);
|
||
+module_param_array(vfd_display_type, byte, &vfd_display_type_argc, 0000);
|
||
+module_param(vfd_display_auto_power, byte, 0000);
|
||
+
|
||
+static void print_param_debug(const char *label, int argc, unsigned char param[])
|
||
+{
|
||
+ int i, len = 0;
|
||
+ char buffer[1024];
|
||
+ len = scnprintf(buffer, sizeof(buffer), "%s", label);
|
||
+ if (argc)
|
||
+ for (i = 0; i < argc; i++)
|
||
+ len += scnprintf(buffer + len, sizeof(buffer), "#%d = 0x%02X; ", i, param[i]);
|
||
+ else
|
||
+ len += scnprintf(buffer + len, sizeof(buffer), "Empty.");
|
||
+ pr_dbg2("%s\n", buffer);
|
||
+}
|
||
+
|
||
+static int is_right_chip(struct gpio_chip *chip, void *data)
|
||
+{
|
||
+ pr_dbg("is_right_chip %s | %s | %d\n", chip->label, (char*)data, strcmp(data, chip->label));
|
||
+ if (strcmp(data, chip->label) == 0)
|
||
+ return 1;
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+static int get_chip_pin_number(const unsigned char gpio[])
|
||
+{
|
||
+ int pin = -1;
|
||
+ if (gpio[0] < 6) {
|
||
+ struct gpio_chip *chip;
|
||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)
|
||
+ const char *pin_banks[] = { "banks", "ao-bank", "gpio0", "gpio1", "gpio2", "gpio3" };
|
||
+#else
|
||
+ const char *pin_banks[] = { "periphs-banks", "aobus-banks", "gpio0", "gpio1", "gpio2", "gpio3" };
|
||
+#endif
|
||
+ const char *bank_name = pin_banks[gpio[0]];
|
||
+
|
||
+ chip = gpiochip_find((char *)bank_name, is_right_chip);
|
||
+ if (chip) {
|
||
+ if (chip->ngpio > gpio[1])
|
||
+ pin = chip->base + gpio[1];
|
||
+ pr_dbg2("\"%s\" chip found.\tbase = %d, pin count = %d, pin = %d, offset = %d\n", bank_name, chip->base, chip->ngpio, gpio[1], pin);
|
||
+ } else {
|
||
+ pr_dbg2("\"%s\" chip was not found\n", bank_name);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ return pin;
|
||
+}
|
||
+
|
||
+int evaluate_pin(const char *name, const unsigned char *vfd_arg, struct vfd_pin *pin, unsigned char enable_skip_evaluation)
|
||
+{
|
||
+ int ret = 0;
|
||
+ if (enable_skip_evaluation && vfd_arg[2] == 0xFF) {
|
||
+ pin->pin = -2;
|
||
+ pr_dbg2("Skipping %s evaluation (0xFF)\n", name);
|
||
+ }
|
||
+ else if ((ret = pin->pin = get_chip_pin_number(vfd_arg)) >= 0)
|
||
+ pin->flags.value = (unsigned int)vfd_arg[2];
|
||
+ else
|
||
+ pr_error("Could not get pin number for %s\n", name);
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+char gpio_chip_names[1024] = { 0 };
|
||
+
|
||
+static int enum_gpio_chips(struct gpio_chip *chip, void *data)
|
||
+{
|
||
+ static unsigned char first_iteration = 1;
|
||
+ const char *sep = ", ";
|
||
+ size_t str_len = strlen(gpio_chip_names);
|
||
+ if (first_iteration)
|
||
+ sep = "";
|
||
+ scnprintf(gpio_chip_names + str_len, sizeof(gpio_chip_names) - str_len, "%s%s", sep, chip->label);
|
||
+ first_iteration = 0;
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+static int verify_module_params(struct vfd_dev *dev)
|
||
+{
|
||
+ int ret = (vfd_gpio_clk_argc == 3 && vfd_gpio_dat_argc == 3 && vfd_gpio_stb_argc == 3 &&
|
||
+ vfd_chars_argc >= 5 && vfd_dot_bits_argc >= 7 && vfd_display_type_argc == 4) ? 1 : -1;
|
||
+ u_int8 allow_skip_clk_dat_evaluation = vfd_gpio_protocol[0] > 0;
|
||
+
|
||
+ print_param_debug("vfd_gpio_clk:\t\t", vfd_gpio_clk_argc, vfd_gpio_clk);
|
||
+ print_param_debug("vfd_gpio_dat:\t\t", vfd_gpio_dat_argc, vfd_gpio_dat);
|
||
+ print_param_debug("vfd_gpio_stb:\t\t", vfd_gpio_stb_argc, vfd_gpio_stb);
|
||
+ print_param_debug("vfd_gpio0:\t\t", vfd_gpio0_argc, vfd_gpio0);
|
||
+ print_param_debug("vfd_gpio1:\t\t", vfd_gpio1_argc, vfd_gpio1);
|
||
+ print_param_debug("vfd_gpio2:\t\t", vfd_gpio2_argc, vfd_gpio2);
|
||
+ print_param_debug("vfd_gpio3:\t\t", vfd_gpio3_argc, vfd_gpio3);
|
||
+ print_param_debug("vfd_gpio_protocol:\t", vfd_gpio_protocol_argc, vfd_gpio_protocol);
|
||
+ print_param_debug("vfd_chars:\t\t", vfd_chars_argc, vfd_chars);
|
||
+ print_param_debug("vfd_dot_bits:\t\t", vfd_dot_bits_argc, vfd_dot_bits);
|
||
+ print_param_debug("vfd_display_type:\t", vfd_display_type_argc, vfd_display_type);
|
||
+
|
||
+ dev->hw_protocol.protocol = vfd_gpio_protocol[0];
|
||
+ dev->hw_protocol.device_id = vfd_gpio_protocol[1];
|
||
+
|
||
+ gpiochip_find(NULL, enum_gpio_chips);
|
||
+ pr_dbg2("Detected gpio chips:\t%s.\n", gpio_chip_names);
|
||
+ if (ret >= 0)
|
||
+ ret = evaluate_pin("vfd_gpio_clk", vfd_gpio_clk, &dev->clk_pin, allow_skip_clk_dat_evaluation);
|
||
+ if (ret >= 0)
|
||
+ ret = evaluate_pin("vfd_gpio_dat", vfd_gpio_dat, &dev->dat_pin, allow_skip_clk_dat_evaluation);
|
||
+ if (ret >= 0)
|
||
+ ret = evaluate_pin("vfd_gpio_stb", vfd_gpio_stb, &dev->stb_pin, 1);
|
||
+ if (ret >= 0)
|
||
+ ret = evaluate_pin("vfd_gpio0", vfd_gpio0, &dev->gpio0_pin, 1);
|
||
+ if (ret >= 0)
|
||
+ ret = evaluate_pin("vfd_gpio1", vfd_gpio1, &dev->gpio1_pin, 1);
|
||
+ if (ret >= 0)
|
||
+ ret = evaluate_pin("vfd_gpio2", vfd_gpio2, &dev->gpio2_pin, 1);
|
||
+ if (ret >= 0)
|
||
+ ret = evaluate_pin("vfd_gpio3", vfd_gpio3, &dev->gpio3_pin, 1);
|
||
+
|
||
+ if (ret >= 0) {
|
||
+ int i;
|
||
+ for (i = 0; i < 7; i++)
|
||
+ dev->dtb_active.dat_index[i] = vfd_chars[i];
|
||
+ for (i = 0; i < 8; i++)
|
||
+ dev->dtb_active.led_dots[i] = ledDots[vfd_dot_bits[i]];
|
||
+ dev->dtb_active.display.type = vfd_display_type[0];
|
||
+ dev->dtb_active.display.reserved = vfd_display_type[1];
|
||
+ dev->dtb_active.display.flags = vfd_display_type[2];
|
||
+ dev->dtb_active.display.controller = vfd_display_type[3];
|
||
+ }
|
||
+
|
||
+ return ret >= 0;
|
||
+}
|
||
+
|
||
+void get_pin_from_dt(const char *name, const struct platform_device *pdev, struct vfd_pin *pin)
|
||
+{
|
||
+ if (of_find_property(pdev->dev.of_node, name, NULL)) {
|
||
+ pin->pin = of_get_named_gpio_flags(pdev->dev.of_node, name, 0, &pin->flags.value);
|
||
+ pr_dbg2("%s: pin = %d, flags = 0x%02X\n", name, pin->pin, pin->flags.value);
|
||
+ } else {
|
||
+ pin->pin = -2;
|
||
+ pr_dbg2("%s pin entry not found\n", name);
|
||
+ }
|
||
+}
|
||
+
|
||
+int request_pin(const char *name, struct vfd_pin *pin, unsigned char enable_skip)
|
||
+{
|
||
+ int ret = 0;
|
||
+ pin->flags.bits.is_requested = 0;
|
||
+ if (!enable_skip || pin->pin != -2) {
|
||
+ ret = -1;
|
||
+ if (pin->pin >= 0)
|
||
+ ret = gpio_request(pin->pin, DEV_NAME);
|
||
+ if (!ret)
|
||
+ pin->flags.bits.is_requested = 1;
|
||
+ else
|
||
+ pr_error("can't request gpio of %s", name);
|
||
+ }
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static int openvfd_driver_probe(struct platform_device *pdev)
|
||
+{
|
||
+ int state = -EINVAL;
|
||
+ struct property *chars_prop = NULL;
|
||
+ struct property *dot_bits_prop = NULL;
|
||
+ struct property *display_type_prop = NULL;
|
||
+ int ret = 0;
|
||
+ u_int8 allow_skip_clk_dat_request = vfd_gpio_protocol[0] > 0;
|
||
+
|
||
+ pr_dbg("%s get in\n", __func__);
|
||
+
|
||
+ if (!pdev->dev.of_node) {
|
||
+ pr_error("openvfd_driver: pdev->dev.of_node == NULL!\n");
|
||
+ state = -EINVAL;
|
||
+ goto get_openvfd_node_fail;
|
||
+ }
|
||
+
|
||
+ pdata = kzalloc(sizeof(struct vfd_platform_data), GFP_KERNEL);
|
||
+ if (!pdata) {
|
||
+ pr_error("platform data is required!\n");
|
||
+ state = -EINVAL;
|
||
+ goto get_openvfd_mem_fail;
|
||
+ }
|
||
+
|
||
+ pdata->dev = kzalloc(sizeof(*(pdata->dev)), GFP_KERNEL);
|
||
+ if (!(pdata->dev)) {
|
||
+ pr_error("platform dev is required!\n");
|
||
+ goto get_param_mem_fail;
|
||
+ }
|
||
+
|
||
+ pdata->dev->mutex = &mutex;
|
||
+ pr_dbg2("Version: %s\n", OPENVFD_DRIVER_VERSION);
|
||
+ if (!verify_module_params(pdata->dev)) {
|
||
+ int i;
|
||
+ __u8 j;
|
||
+ pr_error("Failed to verify VFD configuration file, attempt using device tree as fallback.\n");
|
||
+ get_pin_from_dt(MOD_NAME_CLK, pdev, &pdata->dev->clk_pin);
|
||
+ get_pin_from_dt(MOD_NAME_DAT, pdev, &pdata->dev->dat_pin);
|
||
+ get_pin_from_dt(MOD_NAME_STB, pdev, &pdata->dev->stb_pin);
|
||
+ get_pin_from_dt(MOD_NAME_GPIO0, pdev, &pdata->dev->gpio0_pin);
|
||
+ get_pin_from_dt(MOD_NAME_GPIO1, pdev, &pdata->dev->gpio1_pin);
|
||
+ get_pin_from_dt(MOD_NAME_GPIO2, pdev, &pdata->dev->gpio2_pin);
|
||
+ get_pin_from_dt(MOD_NAME_GPIO3, pdev, &pdata->dev->gpio3_pin);
|
||
+
|
||
+ chars_prop = of_find_property(pdev->dev.of_node, MOD_NAME_CHARS, NULL);
|
||
+ if (!chars_prop || !chars_prop->value) {
|
||
+ pr_error("can't find %s list, falling back to defaults.", MOD_NAME_CHARS);
|
||
+ chars_prop = NULL;
|
||
+ }
|
||
+ else if (chars_prop->length < 5) {
|
||
+ pr_error("%s list is too short, falling back to defaults.", MOD_NAME_CHARS);
|
||
+ chars_prop = NULL;
|
||
+ }
|
||
+
|
||
+ for (j = 0; j < (sizeof(pdata->dev->dtb_active.dat_index) / sizeof(char)); j++)
|
||
+ pdata->dev->dtb_active.dat_index[j] = j;
|
||
+ pr_dbg2("chars_prop = %p\n", chars_prop);
|
||
+ if (chars_prop) {
|
||
+ __u8 *c = (__u8*)chars_prop->value;
|
||
+ const int length = min(chars_prop->length, (int)(sizeof(pdata->dev->dtb_active.dat_index) / sizeof(char)));
|
||
+ pr_dbg2("chars_prop->length = %d\n", chars_prop->length);
|
||
+ for (i = 0; i < length; i++) {
|
||
+ pdata->dev->dtb_active.dat_index[i] = c[i];
|
||
+ pr_dbg2("char #%d: %d\n", i, c[i]);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ dot_bits_prop = of_find_property(pdev->dev.of_node, MOD_NAME_DOTS, NULL);
|
||
+ if (!dot_bits_prop || !dot_bits_prop->value) {
|
||
+ pr_error("can't find %s list, falling back to defaults.", MOD_NAME_DOTS);
|
||
+ dot_bits_prop = NULL;
|
||
+ }
|
||
+ else if (dot_bits_prop->length < LED_DOT_MAX) {
|
||
+ pr_error("%s list is too short, falling back to defaults.", MOD_NAME_DOTS);
|
||
+ dot_bits_prop = NULL;
|
||
+ }
|
||
+
|
||
+ for (i = 0; i < LED_DOT_MAX; i++)
|
||
+ pdata->dev->dtb_active.led_dots[i] = ledDots[i];
|
||
+ pr_dbg2("dot_bits_prop = %p\n", dot_bits_prop);
|
||
+ if (dot_bits_prop) {
|
||
+ __u8 *d = (__u8*)dot_bits_prop->value;
|
||
+ pr_dbg2("dot_bits_prop->length = %d\n", dot_bits_prop->length);
|
||
+ for (i = 0; i < dot_bits_prop->length; i++) {
|
||
+ pdata->dev->dtb_active.led_dots[i] = ledDots[d[i]];
|
||
+ pr_dbg2("dot_bit #%d: %d\n", i, d[i]);
|
||
+ }
|
||
+ }
|
||
+
|
||
+ memset(&pdata->dev->dtb_active.display, 0, sizeof(struct vfd_display));
|
||
+ display_type_prop = of_find_property(pdev->dev.of_node, MOD_NAME_TYPE, NULL);
|
||
+ if (display_type_prop && display_type_prop->value)
|
||
+ of_property_read_u32(pdev->dev.of_node, MOD_NAME_TYPE, (int*)&pdata->dev->dtb_active.display);
|
||
+ pr_dbg2("display.type = %d, display.controller = %d, pdata->dev->dtb_active.display.flags = 0x%02X\n",
|
||
+ pdata->dev->dtb_active.display.type, pdata->dev->dtb_active.display.controller, pdata->dev->dtb_active.display.flags);
|
||
+ }
|
||
+
|
||
+ if (request_pin("gpio_clk", &pdata->dev->clk_pin, allow_skip_clk_dat_request))
|
||
+ goto get_gpio_req_fail;
|
||
+ if (request_pin("dat_pin", &pdata->dev->dat_pin, allow_skip_clk_dat_request))
|
||
+ goto get_gpio_req_fail;
|
||
+ if (request_pin("stb_pin", &pdata->dev->stb_pin, 1))
|
||
+ goto get_gpio_req_fail;
|
||
+ if (request_pin("gpio0_pin", &pdata->dev->gpio0_pin, 1))
|
||
+ goto get_gpio_req_fail;
|
||
+ if (request_pin("gpio1_pin", &pdata->dev->gpio1_pin, 1))
|
||
+ goto get_gpio_req_fail;
|
||
+ if (request_pin("gpio2_pin", &pdata->dev->gpio2_pin, 1))
|
||
+ goto get_gpio_req_fail;
|
||
+ if (request_pin("gpio3_pin", &pdata->dev->gpio3_pin, 1))
|
||
+ goto get_gpio_req_fail;
|
||
+
|
||
+ pdata->dev->dtb_default = pdata->dev->dtb_active;
|
||
+ pdata->dev->brightness = 0xFF;
|
||
+
|
||
+ mutex_lock(&mutex);
|
||
+ register_openvfd_driver();
|
||
+ kp = kzalloc(sizeof(struct kp) , GFP_KERNEL);
|
||
+ if (!kp) {
|
||
+ kfree(kp);
|
||
+ mutex_unlock(&mutex);
|
||
+ return -ENOMEM;
|
||
+ }
|
||
+ kp->cdev.name = DEV_NAME;
|
||
+ kp->cdev.brightness_set = openvfd_brightness_set;
|
||
+ ret = led_classdev_register(&pdev->dev, &kp->cdev);
|
||
+ if (ret < 0) {
|
||
+ kfree(kp);
|
||
+ mutex_unlock(&mutex);
|
||
+ return ret;
|
||
+ }
|
||
+
|
||
+ device_create_file(kp->cdev.dev, &dev_attr_led_on);
|
||
+ device_create_file(kp->cdev.dev, &dev_attr_led_off);
|
||
+ device_create_file(kp->cdev.dev, &dev_attr_led_cmd);
|
||
+ init_controller(pdata->dev);
|
||
+#if 0
|
||
+ // TODO: Display 'boot' during POST/boot.
|
||
+ // 'boot'
|
||
+ // 1 1 0 0 1 1 1 b => 0x7C
|
||
+ // 1 1 0 0 0 1 1 o => 0x5C
|
||
+ // 1 0 0 0 1 1 1 t => 0x78
|
||
+ __u8 data[7];
|
||
+ data[0] = 0x00;
|
||
+ data[1] = pdata->dev->dtb_active.display.flags & DISPLAY_TYPE_TRANSPOSED ? 0x7C : 0x67;
|
||
+ data[2] = pdata->dev->dtb_active.display.flags & DISPLAY_TYPE_TRANSPOSED ? 0x5C : 0x63;
|
||
+ data[3] = pdata->dev->dtb_active.display.flags & DISPLAY_TYPE_TRANSPOSED ? 0x5C : 0x63;
|
||
+ data[4] = pdata->dev->dtb_active.display.flags & DISPLAY_TYPE_TRANSPOSED ? 0x78 : 0x47;
|
||
+ for (i = 0; i < 5; i++) {
|
||
+ pdata->dev->wbuf[pdata->dev->dtb_active.dat_index[i]] = data[i];
|
||
+ }
|
||
+ // Write data in incremental mode
|
||
+ FD628_WrDisp_AddrINC(0x00, 2*5, pdata->dev);
|
||
+#endif
|
||
+
|
||
+#if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_AMLOGIC_LEGACY_EARLY_SUSPEND)
|
||
+ openvfd_early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN;
|
||
+ openvfd_early_suspend.suspend = openvfd_suspend;
|
||
+ openvfd_early_suspend.resume = openvfd_resume;
|
||
+ register_early_suspend(&openvfd_early_suspend);
|
||
+#endif
|
||
+
|
||
+ mutex_unlock(&mutex);
|
||
+ return 0;
|
||
+
|
||
+ get_gpio_req_fail:
|
||
+ if (pdata->dev->gpio3_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->gpio3_pin.pin);
|
||
+ if (pdata->dev->gpio2_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->gpio2_pin.pin);
|
||
+ if (pdata->dev->gpio1_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->gpio1_pin.pin);
|
||
+ if (pdata->dev->gpio0_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->gpio0_pin.pin);
|
||
+ if (pdata->dev->stb_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->stb_pin.pin);
|
||
+ if (pdata->dev->dat_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->dat_pin.pin);
|
||
+ if (pdata->dev->clk_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->clk_pin.pin);
|
||
+ get_param_mem_fail:
|
||
+ kfree(pdata->dev);
|
||
+ get_openvfd_mem_fail:
|
||
+ kfree(pdata);
|
||
+ get_openvfd_node_fail:
|
||
+ if (pdata && pdata->dev)
|
||
+ mutex_unlock(&mutex);
|
||
+ return state;
|
||
+}
|
||
+
|
||
+static int openvfd_driver_remove(struct platform_device *pdev)
|
||
+{
|
||
+ set_power(0);
|
||
+#if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_AMLOGIC_LEGACY_EARLY_SUSPEND)
|
||
+ unregister_early_suspend(&openvfd_early_suspend);
|
||
+#endif
|
||
+ led_classdev_unregister(&kp->cdev);
|
||
+ deregister_openvfd_driver();
|
||
+#ifdef CONFIG_OF
|
||
+ if (pdata->dev->gpio3_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->gpio3_pin.pin);
|
||
+ if (pdata->dev->gpio2_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->gpio2_pin.pin);
|
||
+ if (pdata->dev->gpio1_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->gpio1_pin.pin);
|
||
+ if (pdata->dev->gpio0_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->gpio0_pin.pin);
|
||
+ if (pdata->dev->stb_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->stb_pin.pin);
|
||
+ if (pdata->dev->dat_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->dat_pin.pin);
|
||
+ if (pdata->dev->clk_pin.flags.bits.is_requested)
|
||
+ gpio_free(pdata->dev->clk_pin.pin);
|
||
+ kfree(pdata->dev);
|
||
+ kfree(pdata);
|
||
+ pdata = NULL;
|
||
+#endif
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+static void openvfd_driver_shutdown(struct platform_device *dev)
|
||
+{
|
||
+ pr_dbg("openvfd_driver_shutdown");
|
||
+ set_power(0);
|
||
+}
|
||
+
|
||
+static int openvfd_driver_suspend(struct platform_device *dev, pm_message_t state)
|
||
+{
|
||
+ pr_dbg("openvfd_driver_suspend");
|
||
+ if (vfd_display_auto_power && controller && controller->power_suspend) {
|
||
+ controller->power_suspend();
|
||
+ }
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+static int openvfd_driver_resume(struct platform_device *dev)
|
||
+{
|
||
+ pr_dbg("openvfd_driver_resume");
|
||
+ if (vfd_display_auto_power && controller && controller->power_resume) {
|
||
+ controller->power_resume();
|
||
+ }
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+#ifdef CONFIG_OF
|
||
+static const struct of_device_id openvfd_dt_match[] = {
|
||
+ {.compatible = "open,vfd",},
|
||
+ {},
|
||
+};
|
||
+#else
|
||
+#define openvfd_dt_match NULL
|
||
+#endif
|
||
+
|
||
+static struct platform_driver openvfd_driver = {
|
||
+ .probe = openvfd_driver_probe,
|
||
+ .remove = openvfd_driver_remove,
|
||
+ .suspend = openvfd_driver_suspend,
|
||
+ .shutdown = openvfd_driver_shutdown,
|
||
+ .resume = openvfd_driver_resume,
|
||
+ .driver = {
|
||
+ .name = DEV_NAME,
|
||
+ .owner = THIS_MODULE,
|
||
+ .of_match_table = openvfd_dt_match,
|
||
+ },
|
||
+};
|
||
+
|
||
+static int __init openvfd_driver_init(void)
|
||
+{
|
||
+ pr_dbg("OpenVFD Driver init.\n");
|
||
+ mutex_init(&mutex);
|
||
+ return platform_driver_register(&openvfd_driver);
|
||
+}
|
||
+
|
||
+static void __exit openvfd_driver_exit(void)
|
||
+{
|
||
+ pr_dbg("OpenVFD Driver exit.\n");
|
||
+ mutex_destroy(&mutex);
|
||
+ platform_driver_unregister(&openvfd_driver);
|
||
+}
|
||
+
|
||
+module_init(openvfd_driver_init);
|
||
+module_exit(openvfd_driver_exit);
|
||
+
|
||
+MODULE_AUTHOR("Arthur Liberman");
|
||
+MODULE_DESCRIPTION("OpenVFD Driver");
|
||
+MODULE_LICENSE("GPL");
|
||
diff --git a/drivers/leds/vfd/openvfd_drv.h b/drivers/leds/vfd/openvfd_drv.h
|
||
new file mode 100644
|
||
index 000000000..6e6af21c7
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/openvfd_drv.h
|
||
@@ -0,0 +1,302 @@
|
||
+#ifndef __OPENVFD_DRV_H__
|
||
+#define __OPENVFD_DRV_H__
|
||
+
|
||
+#ifdef MODULE
|
||
+#include <linux/delay.h>
|
||
+#include <linux/slab.h>
|
||
+#include <linux/mutex.h>
|
||
+#endif
|
||
+#include "glyphs.h"
|
||
+
|
||
+#ifdef MODULE
|
||
+#if 0
|
||
+#define pr_dbg(args...) printk(KERN_ALERT "OpenVFD: " args)
|
||
+#else
|
||
+#define pr_dbg(args...)
|
||
+#endif
|
||
+#endif
|
||
+
|
||
+#define pr_error(args...) printk(KERN_ALERT "OpenVFD: " args)
|
||
+#define pr_dbg2(args...) printk(KERN_DEBUG "OpenVFD: " args)
|
||
+
|
||
+#ifndef CONFIG_OF
|
||
+#define CONFIG_OF
|
||
+#endif
|
||
+
|
||
+#ifndef TRUE
|
||
+#define TRUE 1
|
||
+#endif
|
||
+
|
||
+#ifndef FALSE
|
||
+#define FALSE 0
|
||
+#endif
|
||
+
|
||
+#define OPENVFD_DRIVER_VERSION "V1.3.0"
|
||
+
|
||
+/*
|
||
+ * Ioctl definitions
|
||
+ */
|
||
+
|
||
+/* Use 'M' as magic number */
|
||
+#define VFD_IOC_MAGIC 'M'
|
||
+#define VFD_IOC_SMODE _IOW(VFD_IOC_MAGIC, 1, int)
|
||
+#define VFD_IOC_GMODE _IOR(VFD_IOC_MAGIC, 2, int)
|
||
+#define VFD_IOC_SBRIGHT _IOW(VFD_IOC_MAGIC, 3, int)
|
||
+#define VFD_IOC_GBRIGHT _IOR(VFD_IOC_MAGIC, 4, int)
|
||
+#define VFD_IOC_POWER _IOW(VFD_IOC_MAGIC, 5, int)
|
||
+#define VFD_IOC_GVER _IOR(VFD_IOC_MAGIC, 6, int)
|
||
+#define VFD_IOC_STATUS_LED _IOW(VFD_IOC_MAGIC, 7, int)
|
||
+#define VFD_IOC_GDISPLAY_TYPE _IOR(VFD_IOC_MAGIC, 8, int)
|
||
+#define VFD_IOC_SDISPLAY_TYPE _IOW(VFD_IOC_MAGIC, 9, int)
|
||
+#define VFD_IOC_SCHARS_ORDER _IOW(VFD_IOC_MAGIC, 10, u_int8[7])
|
||
+#define VFD_IOC_USE_DTB_CONFIG _IOW(VFD_IOC_MAGIC, 11, int)
|
||
+#define VFD_IOC_MAXNR 12
|
||
+
|
||
+#ifdef MODULE
|
||
+
|
||
+#define MOD_NAME_CLK "openvfd_gpio_clk"
|
||
+#define MOD_NAME_DAT "openvfd_gpio_dat"
|
||
+#define MOD_NAME_STB "openvfd_gpio_stb"
|
||
+#define MOD_NAME_GPIO0 "openvfd_gpio0"
|
||
+#define MOD_NAME_GPIO1 "openvfd_gpio1"
|
||
+#define MOD_NAME_GPIO2 "openvfd_gpio2"
|
||
+#define MOD_NAME_GPIO3 "openvfd_gpio3"
|
||
+#define MOD_NAME_PROT "openvfd_gpio_protocol"
|
||
+#define MOD_NAME_CHARS "openvfd_chars"
|
||
+#define MOD_NAME_DOTS "openvfd_dot_bits"
|
||
+#define MOD_NAME_TYPE "openvfd_display_type"
|
||
+
|
||
+#endif
|
||
+
|
||
+#define DEV_NAME "openvfd"
|
||
+
|
||
+struct vfd_display {
|
||
+ u_int8 type;
|
||
+ u_int8 reserved;
|
||
+ u_int8 flags;
|
||
+ u_int8 controller;
|
||
+};
|
||
+
|
||
+#ifdef MODULE
|
||
+
|
||
+struct vfd_dtb_config {
|
||
+ u_int8 dat_index[7];
|
||
+ u_int8 led_dots[8];
|
||
+ struct vfd_display display;
|
||
+};
|
||
+
|
||
+struct vfd_pin {
|
||
+ int pin;
|
||
+ union {
|
||
+ struct {
|
||
+ u_int8 active_low : 1;
|
||
+ u_int8 single_ended : 1;
|
||
+ u_int8 open_drain : 1;
|
||
+ u_int8 sleep_keep : 1;
|
||
+ u_int8 pullup_on : 1;
|
||
+ u_int8 pulldown_on : 1;
|
||
+ u_int8 kick_high : 1;
|
||
+ u_int8 kick_low : 1;
|
||
+ u_int8 reserved2;
|
||
+ u_int8 reserved3;
|
||
+ u_int8 reserved4 : 7;
|
||
+ u_int8 is_requested : 1;
|
||
+ } bits;
|
||
+ unsigned int value;
|
||
+ } flags;
|
||
+};
|
||
+
|
||
+struct vfd_protocol {
|
||
+ u_int8 protocol;
|
||
+ u_int8 device_id;
|
||
+};
|
||
+
|
||
+struct vfd_dev {
|
||
+ struct vfd_pin clk_pin;
|
||
+ struct vfd_pin dat_pin;
|
||
+ struct vfd_pin stb_pin;
|
||
+ struct vfd_pin gpio0_pin;
|
||
+ struct vfd_pin gpio1_pin;
|
||
+ struct vfd_pin gpio2_pin;
|
||
+ struct vfd_pin gpio3_pin;
|
||
+ struct vfd_protocol hw_protocol;
|
||
+ u_int16 wbuf[7];
|
||
+ struct vfd_dtb_config dtb_active;
|
||
+ struct vfd_dtb_config dtb_default;
|
||
+ u_int8 mode;
|
||
+ u_int8 power;
|
||
+ u_int8 brightness;
|
||
+ struct mutex *mutex;
|
||
+ wait_queue_head_t kb_waitq; /* read and write queues */
|
||
+ struct timer_list timer;
|
||
+ int key_respond_status;
|
||
+ int Keyboard_diskstatus;
|
||
+ u_int8 KeyPressCnt;
|
||
+ u_int8 key_fg;
|
||
+ u_int8 key_val;
|
||
+ u_int8 status_led_mask; /* Indicators mask */
|
||
+};
|
||
+
|
||
+struct vfd_platform_data {
|
||
+ struct vfd_dev *dev;
|
||
+};
|
||
+
|
||
+#endif
|
||
+
|
||
+struct vfd_display_data {
|
||
+ u_int16 mode;
|
||
+ u_int8 colon_on;
|
||
+ u_int8 temperature;
|
||
+
|
||
+ struct {
|
||
+ u_int8 seconds;
|
||
+ u_int8 minutes;
|
||
+ u_int8 hours;
|
||
+ u_int8 day_of_week;
|
||
+ u_int8 day;
|
||
+ u_int8 month;
|
||
+ u_int16 year;
|
||
+ } time_date;
|
||
+ struct {
|
||
+ u_int8 seconds;
|
||
+ u_int8 minutes;
|
||
+ u_int8 hours;
|
||
+ u_int8 _reserved;
|
||
+ } time_secondary;
|
||
+ struct {
|
||
+ u_int16 channel;
|
||
+ u_int16 channel_count;
|
||
+ } channel_data;
|
||
+
|
||
+ char string_main[512];
|
||
+ char string_secondary[128];
|
||
+};
|
||
+
|
||
+enum {
|
||
+ PROTOCOL_NONE,
|
||
+ PROTOCOL_I2C,
|
||
+ PROTOCOL_MAX
|
||
+};
|
||
+
|
||
+enum {
|
||
+ DISPLAY_MODE_NONE,
|
||
+ DISPLAY_MODE_CLOCK,
|
||
+ DISPLAY_MODE_CHANNEL,
|
||
+ DISPLAY_MODE_PLAYBACK_TIME,
|
||
+ DISPLAY_MODE_TITLE,
|
||
+ DISPLAY_MODE_TEMPERATURE,
|
||
+ DISPLAY_MODE_DATE,
|
||
+ DISPLAY_MODE_MAX,
|
||
+};
|
||
+
|
||
+enum {
|
||
+ CONTROLLER_FD628 = 0x00,
|
||
+ CONTROLLER_FD620,
|
||
+ CONTROLLER_TM1618,
|
||
+ CONTROLLER_FD650,
|
||
+ CONTROLLER_HBS658,
|
||
+ CONTROLLER_FD655,
|
||
+ CONTROLLER_FD6551,
|
||
+ CONTROLLER_7S_MAX,
|
||
+ CONTROLLER_IL3829 = 0xFA,
|
||
+ CONTROLLER_PCD8544,
|
||
+ CONTROLLER_SH1106,
|
||
+ CONTROLLER_SSD1306,
|
||
+ CONTROLLER_HD44780,
|
||
+};
|
||
+
|
||
+enum {
|
||
+ DISPLAY_TYPE_5D_7S_NORMAL, // T95U
|
||
+ DISPLAY_TYPE_5D_7S_T95, // T95K is different.
|
||
+ DISPLAY_TYPE_5D_7S_X92,
|
||
+ DISPLAY_TYPE_5D_7S_ABOX,
|
||
+ DISPLAY_TYPE_FD620_REF,
|
||
+ DISPLAY_TYPE_4D_7S_COL,
|
||
+ DISPLAY_TYPE_5D_7S_M9_PRO,
|
||
+ DISPLAY_TYPE_5D_7S_G9SX,
|
||
+ DISPLAY_TYPE_4D_7S_FREESATGTC,
|
||
+ DISPLAY_TYPE_5D_7S_TAP1,
|
||
+ DISPLAY_TYPE_MAX,
|
||
+};
|
||
+
|
||
+#define DISPLAY_FLAG_TRANSPOSED 0x01
|
||
+#define DISPLAY_FLAG_TRANSPOSED_INT 0x00010000
|
||
+#define DISPLAY_FLAG_LOW_FREQ 0x40
|
||
+#define DISPLAY_FLAG_LOW_FREQ_INT 0x00400000
|
||
+
|
||
+enum {
|
||
+ LED_DOT1_ALARM,
|
||
+ LED_DOT1_USB,
|
||
+ LED_DOT1_PLAY,
|
||
+ LED_DOT1_PAUSE,
|
||
+ LED_DOT1_SEC,
|
||
+ LED_DOT1_ETH,
|
||
+ LED_DOT1_WIFI,
|
||
+ LED_DOT1_MAX
|
||
+};
|
||
+
|
||
+enum {
|
||
+ LED_DOT2_APPS,
|
||
+ LED_DOT2_SETUP,
|
||
+ LED_DOT2_USB,
|
||
+ LED_DOT2_CARD,
|
||
+ LED_DOT2_SEC,
|
||
+ LED_DOT2_HDMI,
|
||
+ LED_DOT2_CVBS,
|
||
+ LED_DOT2_MAX
|
||
+};
|
||
+
|
||
+enum {
|
||
+ LED_DOT3_UNUSED1,
|
||
+ LED_DOT3_UNUSED2,
|
||
+ LED_DOT3_POWER,
|
||
+ LED_DOT3_LAN,
|
||
+ LED_DOT3_SEC,
|
||
+ LED_DOT3_WIFIHI,
|
||
+ LED_DOT3_WIFILO,
|
||
+ LED_DOT3_MAX
|
||
+};
|
||
+
|
||
+enum {
|
||
+ LED_DOT4_BT,
|
||
+ LED_DOT4_ETH,
|
||
+ LED_DOT4_WIFI,
|
||
+ LED_DOT4_SPDIF,
|
||
+ LED_DOT4_SEC,
|
||
+ LED_DOT4_HDMI,
|
||
+ LED_DOT4_AV,
|
||
+ LED_DOT4_MAX
|
||
+};
|
||
+
|
||
+#define LED_DOT_SEC LED_DOT1_SEC
|
||
+#define LED_DOT_MAX LED_DOT1_MAX
|
||
+
|
||
+static const u_int8 ledDots[LED_DOT_MAX] = {
|
||
+ 0x01,
|
||
+ 0x02,
|
||
+ 0x04,
|
||
+ 0x08,
|
||
+ 0x10,
|
||
+ 0x20,
|
||
+ 0x40
|
||
+};
|
||
+
|
||
+/* *************************************************************************************************************************************** *
|
||
+* Status Description | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | Display_EN: Display enable bit, 1: Turn on display; 0: Turn off display
|
||
+* | 0 | 0 | 0 | 0 | Display_EN | brightness[3:0] | Brightness: display brightness control bits, 000 ~ 111 represents brightness of 1 (min) ~ 8 (max)
|
||
+* *************************************************************************************************************************************** */
|
||
+#define FD628_DISP_ON 0x08 /* FD628 Display On */
|
||
+#define FD628_DISP_OFF 0x00 /* FD628 Display Off */
|
||
+
|
||
+typedef enum _Brightness { /* FD628 Brightness levels */
|
||
+ FD628_Brightness_1 = 0x00,
|
||
+ FD628_Brightness_2,
|
||
+ FD628_Brightness_3,
|
||
+ FD628_Brightness_4,
|
||
+ FD628_Brightness_5,
|
||
+ FD628_Brightness_6,
|
||
+ FD628_Brightness_7,
|
||
+ FD628_Brightness_8
|
||
+}Brightness;
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/protocols/i2c_hw.c b/drivers/leds/vfd/protocols/i2c_hw.c
|
||
new file mode 100644
|
||
index 000000000..9ffcc6ebd
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/protocols/i2c_hw.c
|
||
@@ -0,0 +1,161 @@
|
||
+
|
||
+#include <linux/gpio.h>
|
||
+#include <linux/version.h>
|
||
+#include <linux/i2c.h>
|
||
+
|
||
+#include "i2c_hw.h"
|
||
+
|
||
+#define pr_dbg2(args...) printk(KERN_DEBUG "OpenVFD: " args)
|
||
+#define LOW 0
|
||
+#define HIGH 1
|
||
+
|
||
+static unsigned char i2c_hw_read_cmd_data(const unsigned char *cmd, unsigned short cmd_length, unsigned char *data, unsigned short data_length);
|
||
+static unsigned char i2c_hw_read_data(unsigned char *data, unsigned short length);
|
||
+static unsigned char i2c_hw_read_byte(unsigned char *bdata);
|
||
+static unsigned char i2c_hw_write_cmd_data(const unsigned char *cmd, unsigned short cmd_length, const unsigned char *data, unsigned short data_length);
|
||
+static unsigned char i2c_hw_write_data(const unsigned char *data, unsigned short length);
|
||
+static unsigned char i2c_hw_write_byte(unsigned char bdata);
|
||
+
|
||
+static struct protocol_interface i2c_hw_interface = {
|
||
+ .read_cmd_data = i2c_hw_read_cmd_data,
|
||
+ .read_data = i2c_hw_read_data,
|
||
+ .read_byte = i2c_hw_read_byte,
|
||
+ .write_cmd_data = i2c_hw_write_cmd_data,
|
||
+ .write_data = i2c_hw_write_data,
|
||
+ .write_byte = i2c_hw_write_byte,
|
||
+ .protocol_type = PROTOCOL_TYPE_I2C
|
||
+};
|
||
+
|
||
+union address {
|
||
+ struct {
|
||
+ unsigned char low;
|
||
+ unsigned char high;
|
||
+ } nibbles;
|
||
+ unsigned short value;
|
||
+};
|
||
+
|
||
+static union address i2c_address = { 0 };
|
||
+static struct i2c_adapter *i2c;
|
||
+static unsigned char use_address = 0;
|
||
+static unsigned short long_address_flag = 0;
|
||
+
|
||
+static unsigned char i2c_hw_test_connection(void)
|
||
+{
|
||
+ return i2c_hw_write_cmd_data(NULL, 0, NULL, 0);
|
||
+}
|
||
+
|
||
+struct protocol_interface *init_hw_i2c(unsigned short _address, unsigned char _device_id)
|
||
+{
|
||
+ struct protocol_interface *i2c_hw_ptr = NULL;
|
||
+ i2c = i2c_get_adapter(_device_id);
|
||
+ if (i2c) {
|
||
+ pr_dbg2("Found I2C-%d adapter: %s\n", _device_id , i2c->name);
|
||
+ if (_address) {
|
||
+ use_address = 1;
|
||
+ long_address_flag = _address > 0xFF ? I2C_M_TEN : 0; // A valid 10-bit address always starts with b11110.
|
||
+ i2c_address.value = _address == 0xFF ? 0x0000 : _address; // General call.
|
||
+ } else {
|
||
+ use_address = 0;
|
||
+ }
|
||
+ if (!i2c_hw_test_connection()) {
|
||
+ i2c_hw_ptr = &i2c_hw_interface;
|
||
+ pr_dbg2("HW I2C interface intialized (address = 0x%04X%s)\n", i2c_address.value, !use_address ? " (N/A)" : "");
|
||
+ } else {
|
||
+ pr_dbg2("HW I2C interface failed to intialize. Could not establish communication with I2C slave\n");
|
||
+ }
|
||
+ } else {
|
||
+ pr_dbg2("HW I2C interface failed to intialize. Could not get I2C-%d adapter\n", _device_id);
|
||
+ }
|
||
+ return i2c_hw_ptr;
|
||
+}
|
||
+
|
||
+static int i2c_hw_writereg(unsigned char *data, unsigned short size)
|
||
+{
|
||
+ int ret;
|
||
+ struct i2c_msg msg[1] = {
|
||
+ {
|
||
+ .addr = i2c_address.value,
|
||
+ .flags = long_address_flag,
|
||
+ .buf = data,
|
||
+ .len = size,
|
||
+ }
|
||
+ };
|
||
+
|
||
+ ret = i2c_transfer(i2c, msg, 1);
|
||
+ if (ret == 1) {
|
||
+ ret = 0;
|
||
+ } else {
|
||
+ dev_warn(&i2c->dev, "i2c wr failed=%d", ret);
|
||
+ ret = -EREMOTEIO;
|
||
+ }
|
||
+
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static int i2c_hw_readreg(unsigned char *data, unsigned short size)
|
||
+{
|
||
+ int ret;
|
||
+ struct i2c_msg msg[1] = {
|
||
+ {
|
||
+ .addr = i2c_address.value,
|
||
+ .flags = I2C_M_RD | long_address_flag,
|
||
+ .buf = data,
|
||
+ .len = size,
|
||
+ }
|
||
+ };
|
||
+
|
||
+ ret = i2c_transfer(i2c, msg, 1);
|
||
+ if (ret == 1) {
|
||
+ ret = 0;
|
||
+ } else {
|
||
+ dev_warn(&i2c->dev, "i2c rd failed=%d", ret);
|
||
+ ret = -EREMOTEIO;
|
||
+ }
|
||
+
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static unsigned char i2c_hw_read_cmd_data(const unsigned char *cmd, unsigned short cmd_length, unsigned char *data, unsigned short data_length)
|
||
+{
|
||
+ unsigned char status = 0;
|
||
+
|
||
+ status = i2c_hw_readreg(data, data_length);
|
||
+ return status;
|
||
+}
|
||
+
|
||
+static unsigned char i2c_hw_read_data(unsigned char *data, unsigned short length)
|
||
+{
|
||
+ return i2c_hw_read_cmd_data(NULL, 0, data, length);
|
||
+}
|
||
+
|
||
+static unsigned char i2c_hw_read_byte(unsigned char *bdata)
|
||
+{
|
||
+ return i2c_hw_read_cmd_data(NULL, 0, bdata, 1);
|
||
+}
|
||
+
|
||
+static unsigned char i2c_hw_write_cmd_data(const unsigned char *cmd, unsigned short cmd_length, const unsigned char *data, unsigned short data_length)
|
||
+{
|
||
+ unsigned char status = 0;
|
||
+ unsigned short total_length = max(cmd_length + data_length, 4);
|
||
+ char *buf = kmalloc(total_length, GFP_KERNEL);
|
||
+
|
||
+ if (cmd)
|
||
+ memcpy(buf, cmd, cmd_length);
|
||
+
|
||
+ if (data)
|
||
+ memcpy(buf + cmd_length, data, data_length);
|
||
+
|
||
+ status = i2c_hw_writereg(buf, cmd_length + data_length);
|
||
+ kfree(buf);
|
||
+ return status;
|
||
+}
|
||
+
|
||
+static unsigned char i2c_hw_write_data(const unsigned char *data, unsigned short length)
|
||
+{
|
||
+ return i2c_hw_write_cmd_data(NULL, 0, data, length);
|
||
+}
|
||
+
|
||
+static unsigned char i2c_hw_write_byte(unsigned char bdata)
|
||
+{
|
||
+ return i2c_hw_write_cmd_data(NULL, 0, &bdata, 1);
|
||
+}
|
||
diff --git a/drivers/leds/vfd/protocols/i2c_hw.h b/drivers/leds/vfd/protocols/i2c_hw.h
|
||
new file mode 100644
|
||
index 000000000..73f90b08b
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/protocols/i2c_hw.h
|
||
@@ -0,0 +1,8 @@
|
||
+#ifndef __I2C_HW_H__
|
||
+#define __I2C_HW_H__
|
||
+
|
||
+#include "protocol.h"
|
||
+
|
||
+struct protocol_interface *init_hw_i2c(unsigned short _address, unsigned char _device_id);
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/protocols/i2c_sw.c b/drivers/leds/vfd/protocols/i2c_sw.c
|
||
new file mode 100644
|
||
index 000000000..f0bf75f3a
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/protocols/i2c_sw.c
|
||
@@ -0,0 +1,257 @@
|
||
+#include <linux/gpio.h>
|
||
+#include <linux/version.h>
|
||
+#include "i2c_sw.h"
|
||
+
|
||
+#define pr_dbg2(args...) printk(KERN_DEBUG "OpenVFD: " args)
|
||
+#define LOW 0
|
||
+#define HIGH 1
|
||
+
|
||
+static unsigned char i2c_sw_read_cmd_data(const unsigned char *cmd, unsigned short cmd_length, unsigned char *data, unsigned short data_length);
|
||
+static unsigned char i2c_sw_read_data(unsigned char *data, unsigned short length);
|
||
+static unsigned char i2c_sw_read_byte(unsigned char *bdata);
|
||
+static unsigned char i2c_sw_write_cmd_data(const unsigned char *cmd, unsigned short cmd_length, const unsigned char *data, unsigned short data_length);
|
||
+static unsigned char i2c_sw_write_data(const unsigned char *data, unsigned short length);
|
||
+static unsigned char i2c_sw_write_byte(unsigned char bdata);
|
||
+
|
||
+static struct protocol_interface i2c_sw_interface = {
|
||
+ .read_cmd_data = i2c_sw_read_cmd_data,
|
||
+ .read_data = i2c_sw_read_data,
|
||
+ .read_byte = i2c_sw_read_byte,
|
||
+ .write_cmd_data = i2c_sw_write_cmd_data,
|
||
+ .write_data = i2c_sw_write_data,
|
||
+ .write_byte = i2c_sw_write_byte,
|
||
+ .protocol_type = PROTOCOL_TYPE_I2C
|
||
+};
|
||
+
|
||
+union address {
|
||
+ struct {
|
||
+ unsigned char low;
|
||
+ unsigned char high;
|
||
+ } nibbles;
|
||
+ unsigned short value;
|
||
+};
|
||
+
|
||
+static void i2c_sw_stop_condition(void);
|
||
+
|
||
+static union address i2c_sw_address = { 0 };
|
||
+static unsigned char use_address = 0;
|
||
+static unsigned char long_address = 0;
|
||
+static unsigned long i2c_sw_delay = I2C_DELAY_100KHz;
|
||
+static unsigned char lsb_first = 0;
|
||
+static unsigned short clk_stretch_timeout = 0;
|
||
+static struct vfd_pin pin_scl = { 0 };
|
||
+static struct vfd_pin pin_sda = { 0 };
|
||
+
|
||
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)
|
||
+inline void gpio_set_pullup(unsigned gpio, int value)
|
||
+{
|
||
+ gpio_direction_input(gpio);
|
||
+ gpio_set_value(gpio, value);
|
||
+}
|
||
+#endif
|
||
+
|
||
+static unsigned char i2c_sw_test_connection(const struct protocol_interface *protocol)
|
||
+{
|
||
+ return i2c_sw_write_cmd_data(NULL, 0, NULL, 0);
|
||
+}
|
||
+
|
||
+struct protocol_interface *init_sw_i2c(unsigned short _address, unsigned char _lsb_first, unsigned char _clock_stretch_support, struct vfd_pin _pin_scl, struct vfd_pin _pin_sda, unsigned long _i2c_sw_delay, unsigned char(*test_connection)(const struct protocol_interface *protocol))
|
||
+{
|
||
+ struct protocol_interface *i2c_sw_ptr = NULL;
|
||
+ if (_pin_scl.pin >= 0 && _pin_sda.pin >= 0) {
|
||
+ if (_address) {
|
||
+ use_address = 1;
|
||
+ long_address = _address > 0xFF; // A valid 10-bit address always starts with b11110.
|
||
+ i2c_sw_address.value = _address == 0xFF ? 0x0000 : _address; // General call.
|
||
+ } else {
|
||
+ use_address = 0;
|
||
+ }
|
||
+ lsb_first = _lsb_first;
|
||
+ pin_scl = _pin_scl;
|
||
+ pin_sda = _pin_sda;
|
||
+ i2c_sw_delay = _i2c_sw_delay;
|
||
+ clk_stretch_timeout = _clock_stretch_support ? (10 * _i2c_sw_delay) : 0;
|
||
+ if (_pin_scl.flags.bits.pullup_on)
|
||
+ gpio_set_pullup(_pin_scl.pin, 1);
|
||
+ if (_pin_sda.flags.bits.pullup_on)
|
||
+ gpio_set_pullup(_pin_sda.pin, 1);
|
||
+ i2c_sw_stop_condition();
|
||
+ if (!test_connection)
|
||
+ test_connection = i2c_sw_test_connection;
|
||
+ if (!test_connection(&i2c_sw_interface)) {
|
||
+ i2c_sw_ptr = &i2c_sw_interface;
|
||
+ pr_dbg2("SW I2C interface intialized (address = 0x%04X%s, %s mode, pull-ups %s)\n", i2c_sw_address.value, !use_address ? " (N/A)" : "",
|
||
+ lsb_first ? "LSB" : "MSB", _pin_scl.flags.bits.pullup_on ? "on" : "off" );
|
||
+ } else {
|
||
+ pr_dbg2("SW I2C interface failed to intialize. Could not establish communication with I2C slave\n");
|
||
+ }
|
||
+ } else {
|
||
+ pr_dbg2("SW I2C interface failed to intialize. Invalid SCL (%d) and/or SDA (%d) pins\n", _pin_scl.pin, _pin_sda.pin);
|
||
+ }
|
||
+ return i2c_sw_ptr;
|
||
+}
|
||
+
|
||
+static inline void gpio_set_pin_low(const struct vfd_pin *pin)
|
||
+{
|
||
+ gpio_direction_output(pin->pin, LOW);
|
||
+}
|
||
+
|
||
+static inline void gpio_set_pin_high(const struct vfd_pin *pin)
|
||
+{
|
||
+ if (pin->flags.bits.kick_high)
|
||
+ gpio_direction_output(pin->pin, HIGH);
|
||
+ gpio_direction_input(pin->pin);
|
||
+}
|
||
+
|
||
+static void i2c_sw_start_condition(void)
|
||
+{
|
||
+ gpio_set_pin_low(&pin_sda);
|
||
+ udelay(i2c_sw_delay);
|
||
+ gpio_set_pin_low(&pin_scl);
|
||
+ udelay(i2c_sw_delay);
|
||
+}
|
||
+
|
||
+static void i2c_sw_stop_condition(void)
|
||
+{
|
||
+ gpio_set_pin_high(&pin_scl);
|
||
+ udelay(i2c_sw_delay);
|
||
+ gpio_set_pin_high(&pin_sda);
|
||
+ udelay(i2c_sw_delay);
|
||
+ udelay(i2c_sw_delay);
|
||
+}
|
||
+
|
||
+static inline unsigned char i2c_sw_ack(void)
|
||
+{
|
||
+ unsigned char ret = 1, scl = 1;
|
||
+ unsigned short timeout = clk_stretch_timeout;
|
||
+ gpio_set_pin_low(&pin_scl);
|
||
+ gpio_set_pin_high(&pin_sda);
|
||
+ udelay(i2c_sw_delay);
|
||
+ gpio_set_pin_high(&pin_scl);
|
||
+ udelay(i2c_sw_delay);
|
||
+ if (timeout) {
|
||
+ do {
|
||
+ scl = gpio_get_value(pin_scl.pin) ? 1 : 0;
|
||
+ udelay(1);
|
||
+ } while (!scl && timeout--);
|
||
+ ret = gpio_get_value(pin_sda.pin) ? 1 : 0;
|
||
+ } else {
|
||
+ ret = 0;
|
||
+ }
|
||
+ gpio_set_pin_low(&pin_scl);
|
||
+ gpio_set_pin_low(&pin_sda);
|
||
+ udelay(i2c_sw_delay);
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static unsigned char i2c_sw_write_raw_byte(unsigned char data)
|
||
+{
|
||
+ unsigned char i = 8;
|
||
+ unsigned char mask = lsb_first ? 0x01 : 0x80;
|
||
+ gpio_set_pin_low(&pin_scl);
|
||
+ while (i--) {
|
||
+ if (data & mask)
|
||
+ gpio_set_pin_high(&pin_sda);
|
||
+ else
|
||
+ gpio_set_pin_low(&pin_sda);
|
||
+ udelay(i2c_sw_delay);
|
||
+ gpio_set_pin_high(&pin_scl);
|
||
+ udelay(i2c_sw_delay);
|
||
+ gpio_set_pin_low(&pin_scl);
|
||
+ if (lsb_first)
|
||
+ data >>= 1;
|
||
+ else
|
||
+ data <<= 1;
|
||
+ }
|
||
+ return i2c_sw_ack();
|
||
+}
|
||
+
|
||
+static unsigned char i2c_sw_read_raw_byte(unsigned char *data)
|
||
+{
|
||
+ unsigned char i = 8;
|
||
+ unsigned char mask = lsb_first ? 0x80 : 0x01;
|
||
+ *data = 0;
|
||
+ gpio_set_pin_high(&pin_sda);
|
||
+ while (i--) {
|
||
+ if (lsb_first)
|
||
+ *data >>= 1;
|
||
+ else
|
||
+ *data <<= 1;
|
||
+ gpio_set_pin_high(&pin_scl);
|
||
+ udelay(i2c_sw_delay);
|
||
+ if (gpio_get_value(pin_sda.pin))
|
||
+ *data |= mask;
|
||
+ gpio_set_pin_low(&pin_scl);
|
||
+ udelay(i2c_sw_delay);
|
||
+ }
|
||
+ return i2c_sw_ack();
|
||
+}
|
||
+
|
||
+static unsigned char i2c_sw_write_address(union address _address, unsigned char rw)
|
||
+{
|
||
+ unsigned char ret = 0;
|
||
+ if (long_address) {
|
||
+ _address.nibbles.high <<= 1;
|
||
+ _address.nibbles.high |= rw ? 0x01 : 0x00;
|
||
+ ret = i2c_sw_write_raw_byte(_address.nibbles.high);
|
||
+ if (!ret)
|
||
+ ret = i2c_sw_write_raw_byte(_address.nibbles.low);
|
||
+ } else {
|
||
+ _address.nibbles.low <<= 1;
|
||
+ _address.nibbles.low |= rw ? 0x01 : 0x00;
|
||
+ ret = i2c_sw_write_raw_byte(_address.nibbles.low);
|
||
+ }
|
||
+ return ret;
|
||
+}
|
||
+
|
||
+static unsigned char i2c_sw_read_cmd_data(const unsigned char *cmd, unsigned short cmd_length, unsigned char *data, unsigned short data_length)
|
||
+{
|
||
+ unsigned char status = 0;
|
||
+ i2c_sw_start_condition();
|
||
+ if (use_address)
|
||
+ status = i2c_sw_write_address(i2c_sw_address, 1);
|
||
+ if (cmd) {
|
||
+ while (!status && cmd_length--)
|
||
+ status |= i2c_sw_write_raw_byte(*cmd++);
|
||
+ }
|
||
+ while (!status && data_length--)
|
||
+ status |= i2c_sw_read_raw_byte(data++);
|
||
+ i2c_sw_stop_condition();
|
||
+ return status;
|
||
+}
|
||
+
|
||
+static unsigned char i2c_sw_read_data(unsigned char *data, unsigned short length)
|
||
+{
|
||
+ return i2c_sw_read_cmd_data(NULL, 0, data, length);
|
||
+}
|
||
+
|
||
+static unsigned char i2c_sw_read_byte(unsigned char *bdata)
|
||
+{
|
||
+ return i2c_sw_read_cmd_data(NULL, 0, bdata, 1);
|
||
+}
|
||
+
|
||
+static unsigned char i2c_sw_write_cmd_data(const unsigned char *cmd, unsigned short cmd_length, const unsigned char *data, unsigned short data_length)
|
||
+{
|
||
+ unsigned char status = 0;
|
||
+ i2c_sw_start_condition();
|
||
+ if (use_address)
|
||
+ status = i2c_sw_write_address(i2c_sw_address, 0);
|
||
+ if (cmd) {
|
||
+ while (!status && cmd_length--)
|
||
+ status |= i2c_sw_write_raw_byte(*cmd++);
|
||
+ }
|
||
+ while (!status && data_length--)
|
||
+ status |= i2c_sw_write_raw_byte(*data++);
|
||
+ i2c_sw_stop_condition();
|
||
+ return status;
|
||
+}
|
||
+
|
||
+static unsigned char i2c_sw_write_data(const unsigned char *data, unsigned short length)
|
||
+{
|
||
+ return i2c_sw_write_cmd_data(NULL, 0, data, length);
|
||
+}
|
||
+
|
||
+static unsigned char i2c_sw_write_byte(unsigned char bdata)
|
||
+{
|
||
+ return i2c_sw_write_cmd_data(NULL, 0, &bdata, 1);
|
||
+}
|
||
diff --git a/drivers/leds/vfd/protocols/i2c_sw.h b/drivers/leds/vfd/protocols/i2c_sw.h
|
||
new file mode 100644
|
||
index 000000000..cbe32cd32
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/protocols/i2c_sw.h
|
||
@@ -0,0 +1,13 @@
|
||
+#ifndef __I2C_SW_H__
|
||
+#define __I2C_SW_H__
|
||
+
|
||
+#include "protocol.h"
|
||
+
|
||
+#define I2C_DELAY_500KHz 1
|
||
+#define I2C_DELAY_250KHz 2
|
||
+#define I2C_DELAY_100KHz 5
|
||
+#define I2C_DELAY_20KHz 25
|
||
+
|
||
+struct protocol_interface *init_sw_i2c(unsigned short address, unsigned char lsb_first, unsigned char clock_stretch_support, struct vfd_pin pin_scl, struct vfd_pin pin_sda, unsigned long i2c_delay, unsigned char(*test_connection)(const struct protocol_interface *protocol));
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/protocols/protocol.h b/drivers/leds/vfd/protocols/protocol.h
|
||
new file mode 100644
|
||
index 000000000..b6f7b7736
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/protocols/protocol.h
|
||
@@ -0,0 +1,25 @@
|
||
+#ifndef __PROTOCOLS__
|
||
+#define __PROTOCOLS__
|
||
+
|
||
+#include "../openvfd_drv.h"
|
||
+
|
||
+#define MSB_FIRST 0
|
||
+#define LSB_FIRST 1
|
||
+
|
||
+enum protocol_types {
|
||
+ PROTOCOL_TYPE_I2C,
|
||
+ PROTOCOL_TYPE_SPI_3W,
|
||
+ PROTOCOL_TYPE_SPI_4W,
|
||
+};
|
||
+
|
||
+struct protocol_interface {
|
||
+ unsigned char (*read_cmd_data)(const unsigned char *cmd, unsigned short cmd_length, unsigned char *data, unsigned short data_length);
|
||
+ unsigned char (*read_data)(unsigned char *data, unsigned short length);
|
||
+ unsigned char (*read_byte)(unsigned char *bdata);
|
||
+ unsigned char (*write_cmd_data)(const unsigned char *cmd, unsigned short cmd_length, const unsigned char *data, unsigned short data_length);
|
||
+ unsigned char (*write_data)(const unsigned char *data, unsigned short length);
|
||
+ unsigned char (*write_byte)(unsigned char bdata);
|
||
+ enum protocol_types protocol_type;
|
||
+};
|
||
+
|
||
+#endif
|
||
diff --git a/drivers/leds/vfd/protocols/spi_sw.c b/drivers/leds/vfd/protocols/spi_sw.c
|
||
new file mode 100644
|
||
index 000000000..9ecd71ba5
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/protocols/spi_sw.c
|
||
@@ -0,0 +1,194 @@
|
||
+#include <linux/gpio.h>
|
||
+#include "spi_sw.h"
|
||
+
|
||
+#define pr_dbg2(args...) printk(KERN_DEBUG "OpenVFD: " args)
|
||
+#define LOW 0
|
||
+#define HIGH 1
|
||
+
|
||
+static unsigned char spi_sw_read_cmd_data(const unsigned char *cmd, unsigned short cmd_length, unsigned char *data, unsigned short data_length);
|
||
+static unsigned char spi_sw_read_data(unsigned char *data, unsigned short length);
|
||
+static unsigned char spi_sw_read_byte(unsigned char *bdata);
|
||
+static unsigned char spi_sw_write_cmd_data(const unsigned char *cmd, unsigned short cmd_length, const unsigned char *data, unsigned short data_length);
|
||
+static unsigned char spi_sw_write_data(const unsigned char *data, unsigned short length);
|
||
+static unsigned char spi_sw_write_byte(unsigned char bdata);
|
||
+
|
||
+static struct protocol_interface spi_sw_interface = {
|
||
+ .read_cmd_data = spi_sw_read_cmd_data,
|
||
+ .read_data = spi_sw_read_data,
|
||
+ .read_byte = spi_sw_read_byte,
|
||
+ .write_cmd_data = spi_sw_write_cmd_data,
|
||
+ .write_data = spi_sw_write_data,
|
||
+ .write_byte = spi_sw_write_byte,
|
||
+ .protocol_type = PROTOCOL_TYPE_SPI_3W
|
||
+};
|
||
+
|
||
+static void spi_sw_stop_condition(void);
|
||
+
|
||
+static unsigned long spi_sw_delay = SPI_DELAY_100KHz;
|
||
+static unsigned char lsb_first = 0;
|
||
+static int pin_clk = 0;
|
||
+static int pin_do = 0;
|
||
+static int pin_stb = 0;
|
||
+static int pin_di = 0;
|
||
+
|
||
+static struct protocol_interface *init_sw_spi(unsigned char _lsb_first, struct vfd_pin clk, struct vfd_pin dout, struct vfd_pin stb, const struct vfd_pin *din, unsigned long _spi_sw_delay)
|
||
+{
|
||
+ struct protocol_interface *spi_sw_ptr = NULL;
|
||
+ if (clk.pin >= 0 && dout.pin >= 0 && stb.pin >= 0) {
|
||
+ pin_clk = clk.pin;
|
||
+ pin_do = dout.pin;
|
||
+ pin_stb = stb.pin;
|
||
+ lsb_first = _lsb_first;
|
||
+ spi_sw_delay = _spi_sw_delay;
|
||
+ if (!din) {
|
||
+ pin_di = pin_do;
|
||
+ spi_sw_interface.protocol_type = PROTOCOL_TYPE_SPI_3W;
|
||
+ spi_sw_ptr = &spi_sw_interface;
|
||
+ } else if (din->pin >= 0) {
|
||
+ pin_di = din->pin;
|
||
+ spi_sw_interface.protocol_type = PROTOCOL_TYPE_SPI_4W;
|
||
+ spi_sw_ptr = &spi_sw_interface;
|
||
+ }
|
||
+ if (spi_sw_ptr)
|
||
+ spi_sw_stop_condition();
|
||
+ }
|
||
+ return spi_sw_ptr;
|
||
+}
|
||
+
|
||
+struct protocol_interface *init_sw_spi_3w(unsigned char _lsb_first, struct vfd_pin clk, struct vfd_pin dat, struct vfd_pin stb, unsigned long _spi_sw_delay)
|
||
+{
|
||
+ struct protocol_interface *spi_sw_3w_ptr = init_sw_spi(_lsb_first, clk, dat, stb, NULL, _spi_sw_delay);
|
||
+ if (spi_sw_3w_ptr)
|
||
+ pr_dbg2("SW SPI 3-wire interface intialized (%s mode)\n", lsb_first ? "LSB" : "MSB");
|
||
+ else
|
||
+ pr_dbg2("SW SPI 3-wire interface failed to intialize. Invalid CLK (%d), DAT (%d) or STB (%d) pins\n", clk.pin, dat.pin, stb.pin);
|
||
+ return spi_sw_3w_ptr;
|
||
+}
|
||
+
|
||
+struct protocol_interface *init_sw_spi_4w(unsigned char _lsb_first, struct vfd_pin clk, struct vfd_pin dout, struct vfd_pin din, struct vfd_pin stb, unsigned long _spi_sw_delay)
|
||
+{
|
||
+ struct protocol_interface *spi_sw_4w_ptr = init_sw_spi(_lsb_first, clk, dout, stb, &din, _spi_sw_delay);
|
||
+ if (spi_sw_4w_ptr)
|
||
+ pr_dbg2("SW SPI 4-wire interface intialized (%s mode)\n", lsb_first ? "LSB" : "MSB");
|
||
+ else
|
||
+ pr_dbg2("SW SPI 4-wire interface failed to intialize. Invalid CLK (%d), DOUT (%d), DIN (%d) or STB (%d) pins\n", clk.pin, dout.pin, din.pin, stb.pin);
|
||
+ return spi_sw_4w_ptr;
|
||
+}
|
||
+
|
||
+static void spi_sw_start_condition(void)
|
||
+{
|
||
+ gpio_direction_output(pin_stb, LOW);
|
||
+ udelay(spi_sw_delay);
|
||
+}
|
||
+
|
||
+static void spi_sw_stop_condition(void)
|
||
+{
|
||
+ gpio_direction_output(pin_clk, HIGH);
|
||
+ udelay(spi_sw_delay);
|
||
+ gpio_direction_output(pin_stb, HIGH);
|
||
+ gpio_direction_output(pin_do, HIGH);
|
||
+ gpio_direction_input(pin_do);
|
||
+ udelay(spi_sw_delay);
|
||
+}
|
||
+
|
||
+static unsigned char spi_sw_write_raw_byte(unsigned char data)
|
||
+{
|
||
+ unsigned char i = 8;
|
||
+ unsigned char mask = lsb_first ? 0x01 : 0x80;
|
||
+ while (i--) {
|
||
+ gpio_direction_output(pin_clk, LOW);
|
||
+ udelay(spi_sw_delay);
|
||
+ if (data & mask)
|
||
+ gpio_direction_output(pin_do, HIGH);
|
||
+ else
|
||
+ gpio_direction_output(pin_do, LOW);
|
||
+ gpio_direction_output(pin_clk, HIGH);
|
||
+ udelay(spi_sw_delay);
|
||
+ if (lsb_first)
|
||
+ data >>= 1;
|
||
+ else
|
||
+ data <<= 1;
|
||
+ }
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+static unsigned char spi_sw_read_raw_byte(unsigned char *data)
|
||
+{
|
||
+ unsigned char i = 8;
|
||
+ unsigned char mask = lsb_first ? 0x80 : 0x01;
|
||
+ *data = 0;
|
||
+ gpio_direction_input(pin_di);
|
||
+ while (i--) {
|
||
+ if (lsb_first)
|
||
+ *data >>= 1;
|
||
+ else
|
||
+ *data <<= 1;
|
||
+ gpio_direction_output(pin_clk, LOW);
|
||
+ udelay(spi_sw_delay);
|
||
+ gpio_direction_output(pin_clk, HIGH);
|
||
+ udelay(spi_sw_delay);
|
||
+ if (gpio_get_value(pin_di))
|
||
+ *data |= mask;
|
||
+ }
|
||
+ return 0;
|
||
+}
|
||
+
|
||
+static unsigned char spi_sw_read_cmd_data(const unsigned char *cmd, unsigned short cmd_length, unsigned char *data, unsigned short data_length)
|
||
+{
|
||
+ unsigned char status = 0;
|
||
+ spi_sw_start_condition();
|
||
+ if (!status && cmd) {
|
||
+ while (cmd_length--) {
|
||
+ status |= spi_sw_write_raw_byte(*cmd);
|
||
+ cmd++;
|
||
+ }
|
||
+ }
|
||
+ if (!status) {
|
||
+ while (data_length--) {
|
||
+ status |= spi_sw_read_raw_byte(data);
|
||
+ data++;
|
||
+ }
|
||
+ }
|
||
+ spi_sw_stop_condition();
|
||
+ return status;
|
||
+}
|
||
+
|
||
+static unsigned char spi_sw_read_data(unsigned char *data, unsigned short length)
|
||
+{
|
||
+ return spi_sw_read_cmd_data(NULL, 0, data, length);
|
||
+}
|
||
+
|
||
+static unsigned char spi_sw_read_byte(unsigned char *bdata)
|
||
+{
|
||
+ return spi_sw_read_cmd_data(NULL, 0, bdata, 1);
|
||
+}
|
||
+
|
||
+static unsigned char spi_sw_write_cmd_data(const unsigned char *cmd, unsigned short cmd_length, const unsigned char *data, unsigned short data_length)
|
||
+{
|
||
+ unsigned char status = 0;
|
||
+ spi_sw_start_condition();
|
||
+ if (!status && cmd) {
|
||
+ while (cmd_length--) {
|
||
+ status |= spi_sw_write_raw_byte(*cmd);
|
||
+ cmd++;
|
||
+ }
|
||
+ }
|
||
+ if (!status) {
|
||
+ while (data_length--) {
|
||
+ status |= spi_sw_write_raw_byte(*data);
|
||
+ data++;
|
||
+ }
|
||
+ }
|
||
+ spi_sw_stop_condition();
|
||
+ return status;
|
||
+}
|
||
+
|
||
+static unsigned char spi_sw_write_data(const unsigned char *data, unsigned short length)
|
||
+{
|
||
+ return spi_sw_write_cmd_data(NULL, 0, data, length);
|
||
+}
|
||
+
|
||
+static unsigned char spi_sw_write_byte(unsigned char bdata)
|
||
+{
|
||
+ return spi_sw_write_cmd_data(NULL, 0, &bdata, 1);
|
||
+}
|
||
diff --git a/drivers/leds/vfd/protocols/spi_sw.h b/drivers/leds/vfd/protocols/spi_sw.h
|
||
new file mode 100644
|
||
index 000000000..2a3de0470
|
||
--- /dev/null
|
||
+++ b/drivers/leds/vfd/protocols/spi_sw.h
|
||
@@ -0,0 +1,14 @@
|
||
+#ifndef __SPI_SW_H__
|
||
+#define __SPI_SW_H__
|
||
+
|
||
+#include "protocol.h"
|
||
+
|
||
+#define SPI_DELAY_500KHz 1
|
||
+#define SPI_DELAY_250KHz 2
|
||
+#define SPI_DELAY_100KHz 5
|
||
+#define SPI_DELAY_20KHz 25
|
||
+
|
||
+struct protocol_interface *init_sw_spi_3w(unsigned char lsb_first, struct vfd_pin clk, struct vfd_pin dat, struct vfd_pin stb, unsigned long _spi_delay);
|
||
+struct protocol_interface *init_sw_spi_4w(unsigned char lsb_first, struct vfd_pin clk, struct vfd_pin dout, struct vfd_pin din, struct vfd_pin stb, unsigned long _spi_delay);
|
||
+
|
||
+#endif
|
||
--
|
||
2.25.1
|
||
|