Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:14f16771fe40, committed 2015-11-05
- Comitter:
- agemio
- Date:
- Thu Nov 05 12:53:31 2015 +0000
- Commit message:
- first commit;
Changed in this revision
diff -r 000000000000 -r 14f16771fe40 Event/TouchEvent.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Event/TouchEvent.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,31 @@
+#ifndef __TOUCH_EVENT_H
+#define __TOUCH_EVENT_H
+
+#ifdef TARGET_DISCO_F746NG
+
+#include "mbed.h"
+
+
+class TouchEvent
+{
+public:
+ TouchEvent(int x = 0, int y = 0) : x(x), y(y) {};
+ ~TouchEvent();
+
+ int getX() {
+ return x;
+ };
+
+ int getY() {
+ return y;
+ };
+private:
+ int x;
+ int y;
+};
+
+#else
+#error "This class must be used with DISCO_F746NG board only."
+#endif // TARGET_DISCO_F746NG
+
+#endif
\ No newline at end of file
diff -r 000000000000 -r 14f16771fe40 Event/TouchEventListener.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Event/TouchEventListener.cpp Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,38 @@
+#include "TouchEventListener.h"
+
+TouchEventListener::TouchEventListener(){
+ debug = false;
+}
+
+bool TouchEventListener::hasEvent()
+{
+ bool ret = false;
+ TS_StateTypeDef TS_State;
+ ts.GetState(&TS_State);
+
+
+ if (TS_State.touchDetected) {
+ ret = true;
+ lastEvent = new TouchEvent(TS_State.touchX[0], TS_State.touchY[0]);
+ }
+
+ if(debug) {
+ uint8_t text[30];
+ sprintf((char*)text, "Touch : x=%d y=%d ", this->lastEvent->getX(), this->lastEvent->getY() );
+ //lcd.ClearStringLine(0);
+ lcd.DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
+ }
+
+ return ret;
+}
+
+TouchEvent* TouchEventListener::getEvent()
+{
+ return lastEvent;
+}
+
+void TouchEventListener::setDebug(bool debug)
+{
+ this->debug = debug;
+ lcd.ClearStringLine(0);
+}
\ No newline at end of file
diff -r 000000000000 -r 14f16771fe40 Event/TouchEventListener.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Event/TouchEventListener.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,29 @@
+#ifndef __TOUCH_EVENT_LISTENNER_H
+#define __TOUCH_EVENT_LISTENNER_H
+
+#ifdef TARGET_DISCO_F746NG
+
+#include "mbed.h"
+#include "TouchEvent.h"
+#include "system.h"
+
+
+
+
+class TouchEventListener
+{
+public:
+ TouchEventListener();
+ bool hasEvent();
+ void setDebug(bool debug);
+ TouchEvent* getEvent();
+private:
+ TouchEvent* lastEvent;
+ bool debug;
+};
+
+#else
+#error "This class must be used with DISCO_F746NG board only."
+#endif // TARGET_DISCO_F746NG
+
+#endif
diff -r 000000000000 -r 14f16771fe40 System/system.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/System/system.h Thu Nov 05 12:53:31 2015 +0000 @@ -0,0 +1,16 @@ +#ifndef __SYSTEM_H +#define __SYSTEM_H + +#ifdef TARGET_DISCO_F746NG + +#include "TS_DISCO_F746NG.h" +#include "LCD_DISCO_F746NG.h" + +static LCD_DISCO_F746NG lcd; +static TS_DISCO_F746NG ts; + +#else +#error "This class must be used with DISCO_F746NG board only." +#endif // TARGET_DISCO_F746NG + +#endif \ No newline at end of file
diff -r 000000000000 -r 14f16771fe40 button/Button.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/button/Button.cpp Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,49 @@
+#include "Button.h"
+
+Button::Button(int x, int y)
+{
+ this->x = x;
+ this->y = y;
+ this->width = 100;
+ this->heigth = 100;
+ this->border = 0;
+}
+
+void Button::setLabel(char label[30]){
+ this->label = label;
+}
+
+void Button::setHeight(int h)
+{
+ heigth = h;
+}
+
+void Button::setWidth(int w)
+{
+ width = w;
+}
+void Button::setBorder(int size)
+{
+ border = size;
+}
+
+int Button::getX()
+{
+ return this->x;
+}
+
+int Button::getY()
+{
+ return this->y;
+}
+
+int Button::getHeigth()
+{
+ return this->heigth;
+}
+
+int Button::getWidth()
+{
+ return this->width;
+}
+
diff -r 000000000000 -r 14f16771fe40 button/Button.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/button/Button.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,28 @@
+#ifndef __BUTTON_H
+#define __BUTTON_H
+
+#include "mbed.h"
+
+class Button
+{
+public:
+ Button(int x, int y);
+
+ void setHeight(int h);
+ void setWidth(int w);
+ void setBorder(int size);
+ void setLabel(char label[30]);
+ int getX();
+ int getY();
+ int getHeigth();
+ int getWidth();
+private:
+ int x;
+ int y;
+ int heigth;
+ int width;
+ int border;
+ char label[30];
+};
+
+#endif
\ No newline at end of file
diff -r 000000000000 -r 14f16771fe40 button/drawButton.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/button/drawButton.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,16 @@
+#include "Button.h"
+#include "system.h"
+
+void Draw(Button* btn)
+{
+ lcd.DrawRect(btn->getX(),btn->getY() , btn->getWidth(), btn->getHeigth());
+
+ int btnCenterX = btn->getX() + (btn->getWidth() / 2);
+ int btnCenterY = btn->getY() + (btn->getHeigth() / 2);
+
+ int lcdMidleX = lcd.GetXSize() / 2;
+ int lcdMidleY = lcd.GetYSize() / 2;
+
+ lcd.DisplayStringAt( btnCenterX - lcdMidleX + 3, btnCenterY - 10, (uint8_t *)"tototo\0", CENTER_MODE);
+
+}
\ No newline at end of file
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/font12.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/font12.c Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,1464 @@
+/**
+ ******************************************************************************
+ * @file Font12.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief This file provides text Font12 for STM32xx-EVAL's LCD driver.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+/** @addtogroup Utilities
+ * @{
+ */
+
+/** @addtogroup STM32_EVAL
+ * @{
+ */
+
+/** @addtogroup Common
+ * @{
+ */
+
+/** @addtogroup FONTS
+ * @brief This file provides text Font12 for STM32xx-EVAL's LCD driver.
+ * @{
+ */
+
+/** @defgroup FONTS_Private_Types
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Defines
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Macros
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Variables
+ * @{
+ */
+//
+// Font data for Courier New 12pt
+//
+
+const uint8_t Font12_Table[] =
+{
+ // @0 ' ' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @12 '!' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @24 '"' (7 pixels wide)
+ 0x00, //
+ 0x6C, // ## ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @36 '#' (7 pixels wide)
+ 0x00, //
+ 0x14, // # #
+ 0x14, // # #
+ 0x28, // # #
+ 0x7C, // #####
+ 0x28, // # #
+ 0x7C, // #####
+ 0x28, // # #
+ 0x50, // # #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+
+ // @48 '$' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x38, // ###
+ 0x40, // #
+ 0x40, // #
+ 0x38, // ###
+ 0x48, // # #
+ 0x70, // ###
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+
+ // @60 '%' (7 pixels wide)
+ 0x00, //
+ 0x20, // #
+ 0x50, // # #
+ 0x20, // #
+ 0x0C, // ##
+ 0x70, // ###
+ 0x08, // #
+ 0x14, // # #
+ 0x08, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @72 '&' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x18, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x54, // # # #
+ 0x48, // # #
+ 0x34, // ## #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @84 ''' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @96 '(' (7 pixels wide)
+ 0x00, //
+ 0x08, // #
+ 0x08, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x08, // #
+ 0x08, // #
+ 0x00, //
+
+ // @108 ')' (7 pixels wide)
+ 0x00, //
+ 0x20, // #
+ 0x20, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+
+ // @120 '*' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x7C, // #####
+ 0x10, // #
+ 0x28, // # #
+ 0x28, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @132 '+' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0xFE, // #######
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @144 ',' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x18, // ##
+ 0x10, // #
+ 0x30, // ##
+ 0x20, // #
+ 0x00, //
+
+ // @156 '-' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @168 '.' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x30, // ##
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @180 '/' (7 pixels wide)
+ 0x00, //
+ 0x04, // #
+ 0x04, // #
+ 0x08, // #
+ 0x08, // #
+ 0x10, // #
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x40, // #
+ 0x00, //
+ 0x00, //
+
+ // @192 '0' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @204 '1' (7 pixels wide)
+ 0x00, //
+ 0x30, // ##
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @216 '2' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x04, // #
+ 0x08, // #
+ 0x10, // #
+ 0x20, // #
+ 0x44, // # #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @228 '3' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x04, // #
+ 0x18, // ##
+ 0x04, // #
+ 0x04, // #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @240 '4' (7 pixels wide)
+ 0x00, //
+ 0x0C, // ##
+ 0x14, // # #
+ 0x14, // # #
+ 0x24, // # #
+ 0x44, // # #
+ 0x7E, // ######
+ 0x04, // #
+ 0x0E, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @252 '5' (7 pixels wide)
+ 0x00, //
+ 0x3C, // ####
+ 0x20, // #
+ 0x20, // #
+ 0x38, // ###
+ 0x04, // #
+ 0x04, // #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @264 '6' (7 pixels wide)
+ 0x00, //
+ 0x1C, // ###
+ 0x20, // #
+ 0x40, // #
+ 0x78, // ####
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @276 '7' (7 pixels wide)
+ 0x00, //
+ 0x7C, // #####
+ 0x44, // # #
+ 0x04, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @288 '8' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @300 '9' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x3C, // ####
+ 0x04, // #
+ 0x08, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @312 ':' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x30, // ##
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+ 0x30, // ##
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @324 ';' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x18, // ##
+ 0x18, // ##
+ 0x00, //
+ 0x00, //
+ 0x18, // ##
+ 0x30, // ##
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @336 '<' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x0C, // ##
+ 0x10, // #
+ 0x60, // ##
+ 0x80, // #
+ 0x60, // ##
+ 0x10, // #
+ 0x0C, // ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @348 '=' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x7C, // #####
+ 0x00, //
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @360 '>' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xC0, // ##
+ 0x20, // #
+ 0x18, // ##
+ 0x04, // #
+ 0x18, // ##
+ 0x20, // #
+ 0xC0, // ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @372 '?' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x18, // ##
+ 0x24, // # #
+ 0x04, // #
+ 0x08, // #
+ 0x10, // #
+ 0x00, //
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @384 '@' (7 pixels wide)
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x4C, // # ##
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x4C, // # ##
+ 0x40, // #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+
+ // @396 'A' (7 pixels wide)
+ 0x00, //
+ 0x30, // ##
+ 0x10, // #
+ 0x28, // # #
+ 0x28, // # #
+ 0x28, // # #
+ 0x7C, // #####
+ 0x44, // # #
+ 0xEE, // ### ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @408 'B' (7 pixels wide)
+ 0x00, //
+ 0xF8, // #####
+ 0x44, // # #
+ 0x44, // # #
+ 0x78, // ####
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0xF8, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @420 'C' (7 pixels wide)
+ 0x00, //
+ 0x3C, // ####
+ 0x44, // # #
+ 0x40, // #
+ 0x40, // #
+ 0x40, // #
+ 0x40, // #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @432 'D' (7 pixels wide)
+ 0x00, //
+ 0xF0, // ####
+ 0x48, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x48, // # #
+ 0xF0, // ####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @444 'E' (7 pixels wide)
+ 0x00, //
+ 0xFC, // ######
+ 0x44, // # #
+ 0x50, // # #
+ 0x70, // ###
+ 0x50, // # #
+ 0x40, // #
+ 0x44, // # #
+ 0xFC, // ######
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @456 'F' (7 pixels wide)
+ 0x00, //
+ 0x7E, // ######
+ 0x22, // # #
+ 0x28, // # #
+ 0x38, // ###
+ 0x28, // # #
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @468 'G' (7 pixels wide)
+ 0x00, //
+ 0x3C, // ####
+ 0x44, // # #
+ 0x40, // #
+ 0x40, // #
+ 0x4E, // # ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @480 'H' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x7C, // #####
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0xEE, // ### ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @492 'I' (7 pixels wide)
+ 0x00, //
+ 0x7C, // #####
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @504 'J' (7 pixels wide)
+ 0x00, //
+ 0x3C, // ####
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @516 'K' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x48, // # #
+ 0x50, // # #
+ 0x70, // ###
+ 0x48, // # #
+ 0x44, // # #
+ 0xE6, // ### ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @528 'L' (7 pixels wide)
+ 0x00, //
+ 0x70, // ###
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x24, // # #
+ 0x24, // # #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @540 'M' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x6C, // ## ##
+ 0x6C, // ## ##
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x44, // # #
+ 0x44, // # #
+ 0xEE, // ### ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @552 'N' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x64, // ## #
+ 0x64, // ## #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x4C, // # ##
+ 0xEC, // ### ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @564 'O' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @576 'P' (7 pixels wide)
+ 0x00, //
+ 0x78, // ####
+ 0x24, // # #
+ 0x24, // # #
+ 0x24, // # #
+ 0x38, // ###
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @588 'Q' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x1C, // ###
+ 0x00, //
+ 0x00, //
+
+ // @600 'R' (7 pixels wide)
+ 0x00, //
+ 0xF8, // #####
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x78, // ####
+ 0x48, // # #
+ 0x44, // # #
+ 0xE2, // ### #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @612 'S' (7 pixels wide)
+ 0x00, //
+ 0x34, // ## #
+ 0x4C, // # ##
+ 0x40, // #
+ 0x38, // ###
+ 0x04, // #
+ 0x04, // #
+ 0x64, // ## #
+ 0x58, // # ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @624 'T' (7 pixels wide)
+ 0x00, //
+ 0xFE, // #######
+ 0x92, // # # #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @636 'U' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @648 'V' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x28, // # #
+ 0x28, // # #
+ 0x28, // # #
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @660 'W' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x28, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @672 'X' (7 pixels wide)
+ 0x00, //
+ 0xC6, // ## ##
+ 0x44, // # #
+ 0x28, // # #
+ 0x10, // #
+ 0x10, // #
+ 0x28, // # #
+ 0x44, // # #
+ 0xC6, // ## ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @684 'Y' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x28, // # #
+ 0x28, // # #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @696 'Z' (7 pixels wide)
+ 0x00, //
+ 0x7C, // #####
+ 0x44, // # #
+ 0x08, // #
+ 0x10, // #
+ 0x10, // #
+ 0x20, // #
+ 0x44, // # #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @708 '[' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x38, // ###
+ 0x00, //
+
+ // @720 '\' (7 pixels wide)
+ 0x00, //
+ 0x40, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x10, // #
+ 0x10, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x00, //
+ 0x00, //
+
+ // @732 ']' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x38, // ###
+ 0x00, //
+
+ // @744 '^' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x10, // #
+ 0x28, // # #
+ 0x44, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @756 '_' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xFE, // #######
+
+ // @768 '`' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x08, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @780 'a' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x3C, // ####
+ 0x44, // # #
+ 0x44, // # #
+ 0x3E, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @792 'b' (7 pixels wide)
+ 0x00, //
+ 0xC0, // ##
+ 0x40, // #
+ 0x58, // # ##
+ 0x64, // ## #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0xF8, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @804 'c' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x3C, // ####
+ 0x44, // # #
+ 0x40, // #
+ 0x40, // #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @816 'd' (7 pixels wide)
+ 0x00, //
+ 0x0C, // ##
+ 0x04, // #
+ 0x34, // ## #
+ 0x4C, // # ##
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x3E, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @828 'e' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x7C, // #####
+ 0x40, // #
+ 0x40, // #
+ 0x3C, // ####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @840 'f' (7 pixels wide)
+ 0x00, //
+ 0x1C, // ###
+ 0x20, // #
+ 0x7C, // #####
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @852 'g' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x36, // ## ##
+ 0x4C, // # ##
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x3C, // ####
+ 0x04, // #
+ 0x38, // ###
+ 0x00, //
+
+ // @864 'h' (7 pixels wide)
+ 0x00, //
+ 0xC0, // ##
+ 0x40, // #
+ 0x58, // # ##
+ 0x64, // ## #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0xEE, // ### ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @876 'i' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x00, //
+ 0x70, // ###
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @888 'j' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x00, //
+ 0x78, // ####
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x70, // ###
+ 0x00, //
+
+ // @900 'k' (7 pixels wide)
+ 0x00, //
+ 0xC0, // ##
+ 0x40, // #
+ 0x5C, // # ###
+ 0x48, // # #
+ 0x70, // ###
+ 0x50, // # #
+ 0x48, // # #
+ 0xDC, // ## ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @912 'l' (7 pixels wide)
+ 0x00, //
+ 0x30, // ##
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @924 'm' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xE8, // ### #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0xFE, // #######
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @936 'n' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xD8, // ## ##
+ 0x64, // ## #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0xEE, // ### ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @948 'o' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @960 'p' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xD8, // ## ##
+ 0x64, // ## #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x78, // ####
+ 0x40, // #
+ 0xE0, // ###
+ 0x00, //
+
+ // @972 'q' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x36, // ## ##
+ 0x4C, // # ##
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x3C, // ####
+ 0x04, // #
+ 0x0E, // ###
+ 0x00, //
+
+ // @984 'r' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x6C, // ## ##
+ 0x30, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @996 's' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x3C, // ####
+ 0x44, // # #
+ 0x38, // ###
+ 0x04, // #
+ 0x44, // # #
+ 0x78, // ####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1008 't' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x20, // #
+ 0x7C, // #####
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x22, // # #
+ 0x1C, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1020 'u' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xCC, // ## ##
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x4C, // # ##
+ 0x36, // ## ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1032 'v' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x28, // # #
+ 0x28, // # #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1044 'w' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x28, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1056 'x' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xCC, // ## ##
+ 0x48, // # #
+ 0x30, // ##
+ 0x30, // ##
+ 0x48, // # #
+ 0xCC, // ## ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1068 'y' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x24, // # #
+ 0x28, // # #
+ 0x18, // ##
+ 0x10, // #
+ 0x10, // #
+ 0x78, // ####
+ 0x00, //
+
+ // @1080 'z' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x7C, // #####
+ 0x48, // # #
+ 0x10, // #
+ 0x20, // #
+ 0x44, // # #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1092 '{' (7 pixels wide)
+ 0x00, //
+ 0x08, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x20, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x08, // #
+ 0x00, //
+
+ // @1104 '|' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+
+ // @1116 '}' (7 pixels wide)
+ 0x00, //
+ 0x20, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x08, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x20, // #
+ 0x00, //
+
+ // @1128 '~' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x24, // # #
+ 0x58, // # ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+};
+
+sFONT Font12 = {
+ Font12_Table,
+ 7, /* Width */
+ 12, /* Height */
+};
+
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Function_Prototypes
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Functions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/font16.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/font16.c Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,1844 @@
+/**
+ ******************************************************************************
+ * @file font16.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief This file provides text font16 for STM32xx-EVAL's LCD driver.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+/** @addtogroup Utilities
+ * @{
+ */
+
+/** @addtogroup STM32_EVAL
+ * @{
+ */
+
+/** @addtogroup Common
+ * @{
+ */
+
+/** @addtogroup FONTS
+ * @brief This file provides text font16 for STM32xx-EVAL's LCD driver.
+ * @{
+ */
+
+/** @defgroup FONTS_Private_Types
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Defines
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Macros
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Variables
+ * @{
+ */
+//
+// Font data for Courier New 12pt
+//
+
+const uint8_t Font16_Table[] =
+{
+ // @0 ' ' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @32 '!' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @64 '"' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1D, 0xC0, // ### ###
+ 0x1D, 0xC0, // ### ###
+ 0x08, 0x80, // # #
+ 0x08, 0x80, // # #
+ 0x08, 0x80, // # #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @96 '#' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x0D, 0x80, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x3F, 0xC0, // ########
+ 0x1B, 0x00, // ## ##
+ 0x3F, 0xC0, // ########
+ 0x1B, 0x00, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @128 '$' (11 pixels wide)
+ 0x04, 0x00, // #
+ 0x1F, 0x80, // ######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x38, 0x00, // ###
+ 0x1E, 0x00, // ####
+ 0x0F, 0x00, // ####
+ 0x03, 0x80, // ###
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x3F, 0x00, // ######
+ 0x04, 0x00, // #
+ 0x04, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @160 '%' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x18, 0x00, // ##
+ 0x24, 0x00, // # #
+ 0x24, 0x00, // # #
+ 0x18, 0xC0, // ## ##
+ 0x07, 0x80, // ####
+ 0x1E, 0x00, // ####
+ 0x31, 0x80, // ## ##
+ 0x02, 0x40, // # #
+ 0x02, 0x40, // # #
+ 0x01, 0x80, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @192 '&' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0F, 0x00, // ####
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x1D, 0x80, // ### ##
+ 0x37, 0x00, // ## ###
+ 0x33, 0x00, // ## ##
+ 0x1D, 0x80, // ### ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @224 ''' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x02, 0x00, // #
+ 0x02, 0x00, // #
+ 0x02, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @256 '(' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0E, 0x00, // ###
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0E, 0x00, // ###
+ 0x06, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @288 ')' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x1C, 0x00, // ###
+ 0x18, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @320 '*' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x3F, 0xC0, // ########
+ 0x3F, 0xC0, // ########
+ 0x0F, 0x00, // ####
+ 0x1F, 0x80, // ######
+ 0x19, 0x80, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @352 '+' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x04, 0x00, // #
+ 0x04, 0x00, // #
+ 0x04, 0x00, // #
+ 0x3F, 0x80, // #######
+ 0x04, 0x00, // #
+ 0x04, 0x00, // #
+ 0x04, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @384 ',' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x0C, 0x00, // ##
+ 0x08, 0x00, // #
+ 0x08, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @416 '-' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0x80, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @448 '.' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @480 '/' (11 pixels wide)
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @512 '0' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x0E, 0x00, // ###
+ 0x1B, 0x00, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x0E, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @544 '1' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x3E, 0x00, // #####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x3F, 0xC0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @576 '2' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x00, // ####
+ 0x19, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x3F, 0x80, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @608 '3' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x3F, 0x00, // ######
+ 0x61, 0x80, // ## ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x1F, 0x00, // #####
+ 0x03, 0x80, // ###
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x61, 0x80, // ## ##
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @640 '4' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x0F, 0x00, // ####
+ 0x0B, 0x00, // # ##
+ 0x1B, 0x00, // ## ##
+ 0x13, 0x00, // # ##
+ 0x33, 0x00, // ## ##
+ 0x3F, 0x80, // #######
+ 0x03, 0x00, // ##
+ 0x0F, 0x80, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @672 '5' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x1F, 0x80, // ######
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x1F, 0x00, // #####
+ 0x11, 0x80, // # ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x21, 0x80, // # ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @704 '6' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x07, 0x80, // ####
+ 0x1C, 0x00, // ###
+ 0x18, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x37, 0x00, // ## ###
+ 0x39, 0x80, // ### ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x0F, 0x00, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @736 '7' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x7F, 0x00, // #######
+ 0x43, 0x00, // # ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @768 '8' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @800 '9' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x1E, 0x00, // ####
+ 0x33, 0x00, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x33, 0x80, // ## ###
+ 0x1D, 0x80, // ### ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x07, 0x00, // ###
+ 0x3C, 0x00, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @832 ':' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @864 ';' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x08, 0x00, // #
+ 0x08, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @896 '<' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0xC0, // ##
+ 0x03, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x18, 0x00, // ##
+ 0x60, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x03, 0x00, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @928 '=' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0xC0, // #########
+ 0x00, 0x00, //
+ 0x7F, 0xC0, // #########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @960 '>' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x60, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x03, 0x00, // ##
+ 0x00, 0xC0, // ##
+ 0x03, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x18, 0x00, // ##
+ 0x60, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @992 '?' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x01, 0x80, // ##
+ 0x07, 0x00, // ###
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1024 '@' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x0E, 0x00, // ###
+ 0x11, 0x00, // # #
+ 0x21, 0x00, // # #
+ 0x21, 0x00, // # #
+ 0x27, 0x00, // # ###
+ 0x29, 0x00, // # # #
+ 0x29, 0x00, // # # #
+ 0x27, 0x00, // # ###
+ 0x20, 0x00, // #
+ 0x11, 0x00, // # #
+ 0x0E, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1056 'A' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0x00, // ######
+ 0x0F, 0x00, // ####
+ 0x09, 0x00, // # #
+ 0x19, 0x80, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x1F, 0x80, // ######
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x79, 0xE0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1088 'B' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x00, // #######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x3F, 0x00, // ######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7F, 0x00, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1120 'C' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x40, // ##### #
+ 0x30, 0xC0, // ## ##
+ 0x60, 0x40, // ## #
+ 0x60, 0x00, // ##
+ 0x60, 0x00, // ##
+ 0x60, 0x00, // ##
+ 0x60, 0x40, // ## #
+ 0x30, 0x80, // ## #
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1152 'D' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x00, // #######
+ 0x31, 0x80, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7F, 0x00, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1184 'E' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x80, // ########
+ 0x30, 0x80, // ## #
+ 0x30, 0x80, // ## #
+ 0x32, 0x00, // ## #
+ 0x3E, 0x00, // #####
+ 0x32, 0x00, // ## #
+ 0x30, 0x80, // ## #
+ 0x30, 0x80, // ## #
+ 0x7F, 0x80, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1216 'F' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0xC0, // #########
+ 0x30, 0x40, // ## #
+ 0x30, 0x40, // ## #
+ 0x32, 0x00, // ## #
+ 0x3E, 0x00, // #####
+ 0x32, 0x00, // ## #
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x7C, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1248 'G' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1E, 0x80, // #### #
+ 0x31, 0x80, // ## ##
+ 0x60, 0x80, // ## #
+ 0x60, 0x00, // ##
+ 0x60, 0x00, // ##
+ 0x67, 0xC0, // ## #####
+ 0x61, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1280 'H' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x3F, 0x80, // #######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7B, 0xC0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1312 'I' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xC0, // ########
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x3F, 0xC0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1344 'J' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0xC0, // #######
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x63, 0x00, // ## ##
+ 0x63, 0x00, // ## ##
+ 0x63, 0x00, // ## ##
+ 0x3E, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1376 'K' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x31, 0x80, // ## ##
+ 0x33, 0x00, // ## ##
+ 0x36, 0x00, // ## ##
+ 0x3C, 0x00, // ####
+ 0x3E, 0x00, // #####
+ 0x33, 0x00, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x79, 0xC0, // #### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1408 'L' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7E, 0x00, // ######
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x40, // ## #
+ 0x18, 0x40, // ## #
+ 0x18, 0x40, // ## #
+ 0x7F, 0xC0, // #########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1440 'M' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0xE0, 0xE0, // ### ###
+ 0x60, 0xC0, // ## ##
+ 0x71, 0xC0, // ### ###
+ 0x7B, 0xC0, // #### ####
+ 0x6A, 0xC0, // ## # # ##
+ 0x6E, 0xC0, // ## ### ##
+ 0x64, 0xC0, // ## # ##
+ 0x60, 0xC0, // ## ##
+ 0xFB, 0xE0, // ##### #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1472 'N' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x73, 0xC0, // ### ####
+ 0x31, 0x80, // ## ##
+ 0x39, 0x80, // ### ##
+ 0x3D, 0x80, // #### ##
+ 0x35, 0x80, // ## # ##
+ 0x37, 0x80, // ## ####
+ 0x33, 0x80, // ## ###
+ 0x31, 0x80, // ## ##
+ 0x79, 0x80, // #### ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1504 'O' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1536 'P' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x00, // #######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x3F, 0x00, // ######
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x7E, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1568 'Q' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x0C, 0xC0, // ## ##
+ 0x1F, 0x80, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1600 'R' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x00, // #######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x3E, 0x00, // #####
+ 0x33, 0x00, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7C, 0xE0, // ##### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1632 'S' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x80, // ######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x38, 0x00, // ###
+ 0x1F, 0x00, // #####
+ 0x03, 0x80, // ###
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1664 'T' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x80, // ########
+ 0x4C, 0x80, // # ## #
+ 0x4C, 0x80, // # ## #
+ 0x4C, 0x80, // # ## #
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1696 'U' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1728 'V' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x0A, 0x00, // # #
+ 0x0E, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1760 'W' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0xFB, 0xE0, // ##### #####
+ 0x60, 0xC0, // ## ##
+ 0x64, 0xC0, // ## # ##
+ 0x6E, 0xC0, // ## ### ##
+ 0x6E, 0xC0, // ## ### ##
+ 0x2A, 0x80, // # # # #
+ 0x3B, 0x80, // ### ###
+ 0x3B, 0x80, // ### ###
+ 0x31, 0x80, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1792 'X' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x31, 0x80, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x0E, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x1B, 0x00, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7B, 0xC0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1824 'Y' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x79, 0xE0, // #### ####
+ 0x30, 0xC0, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x0F, 0x00, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x1F, 0x80, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1856 'Z' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0x80, // #######
+ 0x21, 0x80, // # ##
+ 0x23, 0x00, // # ##
+ 0x06, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x0C, 0x00, // ##
+ 0x18, 0x80, // ## #
+ 0x30, 0x80, // ## #
+ 0x3F, 0x80, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1888 '[' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x07, 0x80, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x07, 0x80, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1920 '\' (11 pixels wide)
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1952 ']' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x1E, 0x00, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x1E, 0x00, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1984 '^' (11 pixels wide)
+ 0x04, 0x00, // #
+ 0x0A, 0x00, // # #
+ 0x0A, 0x00, // # #
+ 0x11, 0x00, // # #
+ 0x20, 0x80, // # #
+ 0x20, 0x80, // # #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2016 '_' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 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, 0xE0, // ###########
+
+ // @2048 '`' (11 pixels wide)
+ 0x08, 0x00, // #
+ 0x04, 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, //
+
+ // @2080 'a' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x1F, 0x80, // ######
+ 0x31, 0x80, // ## ##
+ 0x33, 0x80, // ## ###
+ 0x1D, 0xC0, // ### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2112 'b' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x70, 0x00, // ###
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x37, 0x00, // ## ###
+ 0x39, 0x80, // ### ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x39, 0x80, // ### ##
+ 0x77, 0x00, // ### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2144 'c' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1E, 0x80, // #### #
+ 0x31, 0x80, // ## ##
+ 0x60, 0x80, // ## #
+ 0x60, 0x00, // ##
+ 0x60, 0x80, // ## #
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2176 'd' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x1D, 0x80, // ### ##
+ 0x33, 0x80, // ## ###
+ 0x61, 0x80, // ## ##
+ 0x61, 0x80, // ## ##
+ 0x61, 0x80, // ## ##
+ 0x33, 0x80, // ## ###
+ 0x1D, 0xC0, // ### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2208 'e' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x7F, 0xC0, // #########
+ 0x60, 0x00, // ##
+ 0x30, 0xC0, // ## ##
+ 0x1F, 0x80, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2240 'f' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x07, 0xE0, // ######
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x3F, 0x80, // #######
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x3F, 0x80, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2272 'g' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1D, 0xC0, // ### ###
+ 0x33, 0x80, // ## ###
+ 0x61, 0x80, // ## ##
+ 0x61, 0x80, // ## ##
+ 0x61, 0x80, // ## ##
+ 0x33, 0x80, // ## ###
+ 0x1D, 0x80, // ### ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2304 'h' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x70, 0x00, // ###
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x37, 0x00, // ## ###
+ 0x39, 0x80, // ### ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7B, 0xC0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2336 'i' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x00, 0x00, //
+ 0x1E, 0x00, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x3F, 0xC0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2368 'j' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x00, 0x00, //
+ 0x3F, 0x00, // ######
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x3E, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2400 'k' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x70, 0x00, // ###
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x37, 0x80, // ## ####
+ 0x36, 0x00, // ## ##
+ 0x3C, 0x00, // ####
+ 0x3C, 0x00, // ####
+ 0x36, 0x00, // ## ##
+ 0x33, 0x00, // ## ##
+ 0x77, 0xC0, // ### #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2432 'l' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x1E, 0x00, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x3F, 0xC0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2464 'm' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x80, // ########
+ 0x36, 0xC0, // ## ## ##
+ 0x36, 0xC0, // ## ## ##
+ 0x36, 0xC0, // ## ## ##
+ 0x36, 0xC0, // ## ## ##
+ 0x36, 0xC0, // ## ## ##
+ 0x76, 0xE0, // ### ## ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2496 'n' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x77, 0x00, // ### ###
+ 0x39, 0x80, // ### ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7B, 0xC0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2528 'o' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2560 'p' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x77, 0x00, // ### ###
+ 0x39, 0x80, // ### ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x39, 0x80, // ### ##
+ 0x37, 0x00, // ## ###
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x7C, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2592 'q' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1D, 0xC0, // ### ###
+ 0x33, 0x80, // ## ###
+ 0x61, 0x80, // ## ##
+ 0x61, 0x80, // ## ##
+ 0x61, 0x80, // ## ##
+ 0x33, 0x80, // ## ###
+ 0x1D, 0x80, // ### ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x07, 0xC0, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2624 'r' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0x80, // #### ###
+ 0x1C, 0xC0, // ### ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x7F, 0x00, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2656 's' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x80, // ######
+ 0x31, 0x80, // ## ##
+ 0x3C, 0x00, // ####
+ 0x1F, 0x00, // #####
+ 0x03, 0x80, // ###
+ 0x31, 0x80, // ## ##
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2688 't' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x7F, 0x00, // #######
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x80, // ## #
+ 0x0F, 0x00, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2720 'u' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x73, 0x80, // ### ###
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x33, 0x80, // ## ###
+ 0x1D, 0xC0, // ### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2752 'v' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x0E, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2784 'w' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0xF1, 0xE0, // #### ####
+ 0x60, 0xC0, // ## ##
+ 0x64, 0xC0, // ## # ##
+ 0x6E, 0xC0, // ## ### ##
+ 0x3B, 0x80, // ### ###
+ 0x3B, 0x80, // ### ###
+ 0x31, 0x80, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2816 'x' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x1B, 0x00, // ## ##
+ 0x0E, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x1B, 0x00, // ## ##
+ 0x7B, 0xC0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2848 'y' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x79, 0xE0, // #### ####
+ 0x30, 0xC0, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x0B, 0x00, // # ##
+ 0x0F, 0x00, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x3E, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2880 'z' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0x80, // #######
+ 0x21, 0x80, // # ##
+ 0x03, 0x00, // ##
+ 0x0E, 0x00, // ###
+ 0x18, 0x00, // ##
+ 0x30, 0x80, // ## #
+ 0x3F, 0x80, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2912 '{' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2944 '|' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2976 '}' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3008 '~' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x18, 0x00, // ##
+ 0x24, 0x80, // # # #
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+};
+
+sFONT Font16 = {
+ Font16_Table,
+ 11, /* Width */
+ 16, /* Height */
+};
+
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Function_Prototypes
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Functions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/font20.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/font20.c Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,2223 @@
+/**
+ ******************************************************************************
+ * @file font20.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief This file provides text font20 for STM32xx-EVAL's LCD driver.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+/** @addtogroup Utilities
+ * @{
+ */
+
+/** @addtogroup STM32_EVAL
+ * @{
+ */
+
+/** @addtogroup Common
+ * @{
+ */
+
+/** @addtogroup FONTS
+ * @brief This file provides text font20 for STM32xx-EVAL's LCD driver.
+ * @{
+ */
+
+/** @defgroup FONTS_Private_Types
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Defines
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Macros
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Variables
+ * @{
+ */
+
+// Character bitmaps for Courier New 15pt
+const uint8_t Font20_Table[] =
+{
+ // @0 ' ' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @40 '!' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x02, 0x00, // #
+ 0x02, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @80 '"' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1C, 0xE0, // ### ###
+ 0x1C, 0xE0, // ### ###
+ 0x1C, 0xE0, // ### ###
+ 0x08, 0x40, // # #
+ 0x08, 0x40, // # #
+ 0x08, 0x40, // # #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @120 '#' (14 pixels wide)
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @160 '$' (14 pixels wide)
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x07, 0xE0, // ######
+ 0x0F, 0xE0, // #######
+ 0x18, 0x60, // ## ##
+ 0x18, 0x00, // ##
+ 0x1F, 0x00, // #####
+ 0x0F, 0xC0, // ######
+ 0x00, 0xE0, // ###
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x1F, 0xC0, // #######
+ 0x1F, 0x80, // ######
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @200 '%' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x1C, 0x00, // ###
+ 0x22, 0x00, // # #
+ 0x22, 0x00, // # #
+ 0x22, 0x00, // # #
+ 0x1C, 0x60, // ### ##
+ 0x01, 0xE0, // ####
+ 0x0F, 0x80, // #####
+ 0x3C, 0x00, // ####
+ 0x31, 0xC0, // ## ###
+ 0x02, 0x20, // # #
+ 0x02, 0x20, // # #
+ 0x02, 0x20, // # #
+ 0x01, 0xC0, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @240 '&' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0xE0, // #####
+ 0x0F, 0xE0, // #######
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0F, 0x30, // #### ##
+ 0x1F, 0xF0, // #########
+ 0x19, 0xE0, // ## ####
+ 0x18, 0xC0, // ## ##
+ 0x1F, 0xF0, // #########
+ 0x07, 0xB0, // #### ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @280 ''' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x01, 0x00, // #
+ 0x01, 0x00, // #
+ 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, //
+
+ // @320 '(' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @360 ')' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @400 '*' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x1B, 0x60, // ## ## ##
+ 0x1F, 0xE0, // ########
+ 0x07, 0x80, // ####
+ 0x07, 0x80, // ####
+ 0x0F, 0xC0, // ######
+ 0x0C, 0xC0, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @440 '+' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @480 ',' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @520 '-' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xE0, // #########
+ 0x3F, 0xE0, // #########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @560 '.' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @600 '/' (14 pixels wide)
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @640 '0' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x80, // #####
+ 0x1F, 0xC0, // #######
+ 0x18, 0xC0, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x1F, 0xC0, // #######
+ 0x0F, 0x80, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @680 '1' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x1F, 0x00, // #####
+ 0x1F, 0x00, // #####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @720 '2' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x80, // #####
+ 0x1F, 0xC0, // #######
+ 0x38, 0xE0, // ### ###
+ 0x30, 0x60, // ## ##
+ 0x00, 0x60, // ##
+ 0x00, 0xC0, // ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x3F, 0xE0, // #########
+ 0x3F, 0xE0, // #########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @760 '3' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x80, // #####
+ 0x3F, 0xC0, // ########
+ 0x30, 0xE0, // ## ###
+ 0x00, 0x60, // ##
+ 0x00, 0xE0, // ###
+ 0x07, 0xC0, // #####
+ 0x07, 0xC0, // #####
+ 0x00, 0xE0, // ###
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x60, 0xE0, // ## ###
+ 0x7F, 0xC0, // #########
+ 0x3F, 0x80, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @800 '4' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x01, 0xC0, // ###
+ 0x03, 0xC0, // ####
+ 0x03, 0xC0, // ####
+ 0x06, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x3F, 0xE0, // #########
+ 0x3F, 0xE0, // #########
+ 0x00, 0xC0, // ##
+ 0x03, 0xE0, // #####
+ 0x03, 0xE0, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @840 '5' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x1F, 0xC0, // #######
+ 0x1F, 0xC0, // #######
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x1F, 0x80, // ######
+ 0x1F, 0xC0, // #######
+ 0x18, 0xE0, // ## ###
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x30, 0xE0, // ## ###
+ 0x3F, 0xC0, // ########
+ 0x1F, 0x80, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @880 '6' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0xE0, // #####
+ 0x0F, 0xE0, // #######
+ 0x1E, 0x00, // ####
+ 0x18, 0x00, // ##
+ 0x38, 0x00, // ###
+ 0x37, 0x80, // ## ####
+ 0x3F, 0xC0, // ########
+ 0x38, 0xE0, // ### ###
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x18, 0xE0, // ## ###
+ 0x1F, 0xC0, // #######
+ 0x07, 0x80, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @920 '7' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x3F, 0xE0, // #########
+ 0x3F, 0xE0, // #########
+ 0x30, 0x60, // ## ##
+ 0x00, 0x60, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @960 '8' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x80, // #####
+ 0x1F, 0xC0, // #######
+ 0x38, 0xE0, // ### ###
+ 0x30, 0x60, // ## ##
+ 0x38, 0xE0, // ### ###
+ 0x1F, 0xC0, // #######
+ 0x1F, 0xC0, // #######
+ 0x38, 0xE0, // ### ###
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x38, 0xE0, // ### ###
+ 0x1F, 0xC0, // #######
+ 0x0F, 0x80, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1000 '9' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x00, // ####
+ 0x1F, 0xC0, // #######
+ 0x38, 0xC0, // ### ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x38, 0xE0, // ### ###
+ 0x1F, 0xE0, // ########
+ 0x0F, 0x60, // #### ##
+ 0x00, 0xE0, // ###
+ 0x00, 0xC0, // ##
+ 0x03, 0xC0, // ####
+ 0x3F, 0x80, // #######
+ 0x3E, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1040 ':' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1080 ';' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x01, 0xC0, // ###
+ 0x01, 0xC0, // ###
+ 0x01, 0xC0, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1120 '<' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x30, // ##
+ 0x00, 0xF0, // ####
+ 0x03, 0xC0, // ####
+ 0x07, 0x00, // ###
+ 0x1C, 0x00, // ###
+ 0x78, 0x00, // ####
+ 0x1C, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x03, 0xC0, // ####
+ 0x00, 0xF0, // ####
+ 0x00, 0x30, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1160 '=' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0xF0, // ###########
+ 0x7F, 0xF0, // ###########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0xF0, // ###########
+ 0x7F, 0xF0, // ###########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1200 '>' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x30, 0x00, // ##
+ 0x3C, 0x00, // ####
+ 0x0F, 0x00, // ####
+ 0x03, 0x80, // ###
+ 0x00, 0xE0, // ###
+ 0x00, 0x78, // ####
+ 0x00, 0xE0, // ###
+ 0x03, 0x80, // ###
+ 0x0F, 0x00, // ####
+ 0x3C, 0x00, // ####
+ 0x30, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1240 '?' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0F, 0x80, // #####
+ 0x1F, 0xC0, // #######
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x00, 0x60, // ##
+ 0x01, 0xC0, // ###
+ 0x03, 0x80, // ###
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1280 '@' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x0C, 0x80, // ## #
+ 0x08, 0x40, // # #
+ 0x10, 0x40, // # #
+ 0x10, 0x40, // # #
+ 0x11, 0xC0, // # ###
+ 0x12, 0x40, // # # #
+ 0x12, 0x40, // # # #
+ 0x12, 0x40, // # # #
+ 0x11, 0xC0, // # ###
+ 0x10, 0x00, // #
+ 0x08, 0x00, // #
+ 0x08, 0x40, // # #
+ 0x07, 0x80, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1320 'A' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x80, // ######
+ 0x1F, 0x80, // ######
+ 0x03, 0x80, // ###
+ 0x06, 0xC0, // ## ##
+ 0x06, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0x60, // ## ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x30, 0x30, // ## ##
+ 0x78, 0x78, // #### ####
+ 0x78, 0x78, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1360 'B' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0x80, // #######
+ 0x3F, 0xC0, // ########
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0xE0, // ## ###
+ 0x1F, 0xC0, // #######
+ 0x1F, 0xE0, // ########
+ 0x18, 0x70, // ## ###
+ 0x18, 0x30, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xE0, // #########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1400 'C' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0xB0, // #### ##
+ 0x0F, 0xF0, // ########
+ 0x1C, 0x70, // ### ###
+ 0x38, 0x30, // ### ##
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x38, 0x30, // ### ##
+ 0x1C, 0x70, // ### ###
+ 0x0F, 0xE0, // #######
+ 0x07, 0xC0, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1440 'D' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x80, // ########
+ 0x7F, 0xC0, // #########
+ 0x30, 0xE0, // ## ###
+ 0x30, 0x70, // ## ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x70, // ## ###
+ 0x30, 0xE0, // ## ###
+ 0x7F, 0xC0, // #########
+ 0x7F, 0x80, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1480 'E' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x18, 0x30, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x1F, 0x80, // ######
+ 0x1F, 0x80, // ######
+ 0x19, 0x80, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1520 'F' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x18, 0x30, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x1F, 0x80, // ######
+ 0x1F, 0x80, // ######
+ 0x19, 0x80, // ## ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x3F, 0x00, // ######
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1560 'G' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0xB0, // #### ##
+ 0x1F, 0xF0, // #########
+ 0x18, 0x70, // ## ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x31, 0xF8, // ## ######
+ 0x31, 0xF8, // ## ######
+ 0x30, 0x30, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x1F, 0xF0, // #########
+ 0x07, 0xC0, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1600 'H' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1640 'I' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1680 'J' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0xF8, // #######
+ 0x03, 0xF8, // #######
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0xE0, // ## ###
+ 0x3F, 0xC0, // ########
+ 0x0F, 0x80, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1720 'K' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3E, 0xF8, // ##### #####
+ 0x3E, 0xF8, // ##### #####
+ 0x18, 0xE0, // ## ###
+ 0x19, 0x80, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x1F, 0x00, // #####
+ 0x1D, 0x80, // ### ##
+ 0x18, 0xC0, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x3E, 0x78, // ##### ####
+ 0x3E, 0x38, // ##### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1760 'L' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0x00, // ######
+ 0x3F, 0x00, // ######
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x30, // ## ##
+ 0x0C, 0x30, // ## ##
+ 0x0C, 0x30, // ## ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1800 'M' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x78, 0x78, // #### ####
+ 0x78, 0x78, // #### ####
+ 0x38, 0x70, // ### ###
+ 0x3C, 0xF0, // #### ####
+ 0x34, 0xB0, // ## # # ##
+ 0x37, 0xB0, // ## #### ##
+ 0x37, 0xB0, // ## #### ##
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x30, 0x30, // ## ##
+ 0x7C, 0xF8, // ##### #####
+ 0x7C, 0xF8, // ##### #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1840 'N' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x39, 0xF0, // ### #####
+ 0x3D, 0xF0, // #### #####
+ 0x1C, 0x60, // ### ##
+ 0x1E, 0x60, // #### ##
+ 0x1E, 0x60, // #### ##
+ 0x1B, 0x60, // ## ## ##
+ 0x1B, 0x60, // ## ## ##
+ 0x19, 0xE0, // ## ####
+ 0x19, 0xE0, // ## ####
+ 0x18, 0xE0, // ## ###
+ 0x3E, 0xE0, // ##### ###
+ 0x3E, 0x60, // ##### ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1880 'O' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x80, // ####
+ 0x0F, 0xC0, // ######
+ 0x1C, 0xE0, // ### ###
+ 0x38, 0x70, // ### ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x38, 0x70, // ### ###
+ 0x1C, 0xE0, // ### ###
+ 0x0F, 0xC0, // ######
+ 0x07, 0x80, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1920 'P' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xC0, // ########
+ 0x3F, 0xE0, // #########
+ 0x18, 0x70, // ## ###
+ 0x18, 0x30, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x18, 0x70, // ## ###
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xC0, // #######
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x3F, 0x00, // ######
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1960 'Q' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x80, // ####
+ 0x0F, 0xC0, // ######
+ 0x1C, 0xE0, // ### ###
+ 0x38, 0x70, // ### ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x38, 0x70, // ### ###
+ 0x1C, 0xE0, // ### ###
+ 0x0F, 0xC0, // ######
+ 0x07, 0x80, // ####
+ 0x07, 0xB0, // #### ##
+ 0x0F, 0xF0, // ########
+ 0x0C, 0xE0, // ## ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2000 'R' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xC0, // ########
+ 0x3F, 0xE0, // #########
+ 0x18, 0x70, // ## ###
+ 0x18, 0x30, // ## ##
+ 0x18, 0x70, // ## ###
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xC0, // #######
+ 0x18, 0xE0, // ## ###
+ 0x18, 0x60, // ## ##
+ 0x18, 0x70, // ## ###
+ 0x3E, 0x38, // ##### ###
+ 0x3E, 0x18, // ##### ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2040 'S' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0F, 0xB0, // ##### ##
+ 0x1F, 0xF0, // #########
+ 0x38, 0x70, // ### ###
+ 0x30, 0x30, // ## ##
+ 0x38, 0x00, // ###
+ 0x1F, 0x80, // ######
+ 0x07, 0xE0, // ######
+ 0x00, 0x70, // ###
+ 0x30, 0x30, // ## ##
+ 0x38, 0x70, // ### ###
+ 0x3F, 0xE0, // #########
+ 0x37, 0xC0, // ## #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2080 'T' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x0F, 0xC0, // ######
+ 0x0F, 0xC0, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2120 'U' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x1C, 0xE0, // ### ###
+ 0x0F, 0xC0, // ######
+ 0x07, 0x80, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2160 'V' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x78, 0xF0, // #### ####
+ 0x78, 0xF0, // #### ####
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2200 'W' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7C, 0x7C, // ##### #####
+ 0x7C, 0x7C, // ##### #####
+ 0x30, 0x18, // ## ##
+ 0x33, 0x98, // ## ### ##
+ 0x33, 0x98, // ## ### ##
+ 0x33, 0x98, // ## ### ##
+ 0x36, 0xD8, // ## ## ## ##
+ 0x16, 0xD0, // # ## ## #
+ 0x1C, 0x70, // ### ###
+ 0x1C, 0x70, // ### ###
+ 0x1C, 0x70, // ### ###
+ 0x18, 0x30, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2240 'X' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x78, 0xF0, // #### ####
+ 0x78, 0xF0, // #### ####
+ 0x30, 0x60, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x0D, 0x80, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x78, 0xF0, // #### ####
+ 0x78, 0xF0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2280 'Y' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x18, 0x60, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x07, 0x80, // ####
+ 0x07, 0x80, // ####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x0F, 0xC0, // ######
+ 0x0F, 0xC0, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2320 'Z' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x18, 0x60, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2360 '[' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0xC0, // ####
+ 0x03, 0xC0, // ####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0xC0, // ####
+ 0x03, 0xC0, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2400 '\' (14 pixels wide)
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2440 ']' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x00, // ####
+ 0x0F, 0x00, // ####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x0F, 0x00, // ####
+ 0x0F, 0x00, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2480 '^' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x02, 0x00, // #
+ 0x07, 0x00, // ###
+ 0x0D, 0x80, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x20, 0x20, // # #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2520 '_' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 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, 0xFC, // ##############
+ 0xFF, 0xFC, // ##############
+
+ // @2560 '`' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x04, 0x00, // #
+ 0x03, 0x00, // ##
+ 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, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2600 'a' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0F, 0xC0, // ######
+ 0x1F, 0xE0, // ########
+ 0x00, 0x60, // ##
+ 0x0F, 0xE0, // #######
+ 0x1F, 0xE0, // ########
+ 0x38, 0x60, // ### ##
+ 0x30, 0xE0, // ## ###
+ 0x3F, 0xF0, // ##########
+ 0x1F, 0x70, // ##### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2640 'b' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x70, 0x00, // ###
+ 0x70, 0x00, // ###
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x37, 0x80, // ## ####
+ 0x3F, 0xE0, // #########
+ 0x38, 0x60, // ### ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x38, 0x60, // ### ##
+ 0x7F, 0xE0, // ##########
+ 0x77, 0x80, // ### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2680 'c' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0xB0, // #### ##
+ 0x1F, 0xF0, // #########
+ 0x18, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x38, 0x30, // ### ##
+ 0x1F, 0xF0, // #########
+ 0x0F, 0xC0, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2720 'd' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x70, // ###
+ 0x00, 0x70, // ###
+ 0x00, 0x30, // ##
+ 0x00, 0x30, // ##
+ 0x07, 0xB0, // #### ##
+ 0x1F, 0xF0, // #########
+ 0x18, 0x70, // ## ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x38, 0x70, // ### ###
+ 0x1F, 0xF8, // ##########
+ 0x07, 0xB8, // #### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2760 'e' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x80, // ####
+ 0x1F, 0xE0, // ########
+ 0x18, 0x60, // ## ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x30, 0x00, // ##
+ 0x18, 0x30, // ## ##
+ 0x1F, 0xF0, // #########
+ 0x07, 0xC0, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2800 'f' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0xF0, // ######
+ 0x07, 0xF0, // #######
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2840 'g' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0xB8, // #### ###
+ 0x1F, 0xF8, // ##########
+ 0x18, 0x70, // ## ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x18, 0x70, // ## ###
+ 0x1F, 0xF0, // #########
+ 0x07, 0xB0, // #### ##
+ 0x00, 0x30, // ##
+ 0x00, 0x70, // ###
+ 0x0F, 0xE0, // #######
+ 0x0F, 0xC0, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2880 'h' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x38, 0x00, // ###
+ 0x38, 0x00, // ###
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x1B, 0xC0, // ## ####
+ 0x1F, 0xE0, // ########
+ 0x1C, 0x60, // ### ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2920 'i' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x1F, 0x00, // #####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2960 'j' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0xC0, // #######
+ 0x1F, 0xC0, // #######
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x01, 0xC0, // ###
+ 0x3F, 0x80, // #######
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3000 'k' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x38, 0x00, // ###
+ 0x38, 0x00, // ###
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x1B, 0xE0, // ## #####
+ 0x1B, 0xE0, // ## #####
+ 0x1B, 0x00, // ## ##
+ 0x1E, 0x00, // ####
+ 0x1E, 0x00, // ####
+ 0x1B, 0x00, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x39, 0xF0, // ### #####
+ 0x39, 0xF0, // ### #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3040 'l' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x1F, 0x00, // #####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3080 'm' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7E, 0xE0, // ###### ###
+ 0x7F, 0xF0, // ###########
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x7B, 0xB8, // #### ### ###
+ 0x7B, 0xB8, // #### ### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3120 'n' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3B, 0xC0, // ### ####
+ 0x3F, 0xE0, // #########
+ 0x1C, 0x60, // ### ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3160 'o' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x80, // ####
+ 0x1F, 0xE0, // ########
+ 0x18, 0x60, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x1F, 0xE0, // ########
+ 0x07, 0x80, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3200 'p' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x77, 0x80, // ### ####
+ 0x7F, 0xE0, // ##########
+ 0x38, 0x60, // ### ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x38, 0x60, // ### ##
+ 0x3F, 0xE0, // #########
+ 0x37, 0x80, // ## ####
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x7C, 0x00, // #####
+ 0x7C, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3240 'q' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0xB8, // #### ###
+ 0x1F, 0xF8, // ##########
+ 0x18, 0x70, // ## ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x18, 0x70, // ## ###
+ 0x1F, 0xF0, // #########
+ 0x07, 0xB0, // #### ##
+ 0x00, 0x30, // ##
+ 0x00, 0x30, // ##
+ 0x00, 0xF8, // #####
+ 0x00, 0xF8, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3280 'r' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3C, 0xE0, // #### ###
+ 0x3D, 0xF0, // #### #####
+ 0x0F, 0x30, // #### ##
+ 0x0E, 0x00, // ###
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x3F, 0xC0, // ########
+ 0x3F, 0xC0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3320 's' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0xE0, // ######
+ 0x1F, 0xE0, // ########
+ 0x18, 0x60, // ## ##
+ 0x1E, 0x00, // ####
+ 0x0F, 0xC0, // ######
+ 0x01, 0xE0, // ####
+ 0x18, 0x60, // ## ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0x80, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3360 't' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x3F, 0xE0, // #########
+ 0x3F, 0xE0, // #########
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x30, // ## ##
+ 0x0F, 0xF0, // ########
+ 0x07, 0xC0, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3400 'u' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x38, 0xE0, // ### ###
+ 0x38, 0xE0, // ### ###
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0xE0, // ## ###
+ 0x1F, 0xF0, // #########
+ 0x0F, 0x70, // #### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3440 'v' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x78, 0xF0, // #### ####
+ 0x78, 0xF0, // #### ####
+ 0x30, 0x60, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3480 'w' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x78, 0xF0, // #### ####
+ 0x78, 0xF0, // #### ####
+ 0x32, 0x60, // ## # ##
+ 0x32, 0x60, // ## # ##
+ 0x37, 0xE0, // ## ######
+ 0x1D, 0xC0, // ### ###
+ 0x1D, 0xC0, // ### ###
+ 0x18, 0xC0, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3520 'x' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x0C, 0xC0, // ## ##
+ 0x07, 0x80, // ####
+ 0x03, 0x00, // ##
+ 0x07, 0x80, // ####
+ 0x0C, 0xC0, // ## ##
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3560 'y' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x78, 0xF0, // #### ####
+ 0x78, 0xF0, // #### ####
+ 0x30, 0x60, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x0F, 0x80, // #####
+ 0x07, 0x00, // ###
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x7F, 0x00, // #######
+ 0x7F, 0x00, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3600 'z' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x18, 0xC0, // ## ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x60, // ## ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3640 '{' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x01, 0xC0, // ###
+ 0x03, 0xC0, // ####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x07, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0xC0, // ####
+ 0x01, 0xC0, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3680 '|' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3720 '}' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x1C, 0x00, // ###
+ 0x1E, 0x00, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x07, 0x00, // ###
+ 0x03, 0x80, // ###
+ 0x07, 0x00, // ###
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x1E, 0x00, // ####
+ 0x1C, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3760 '~' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0E, 0x00, // ###
+ 0x3F, 0x30, // ###### ##
+ 0x33, 0xF0, // ## ######
+ 0x01, 0xE0, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+};
+
+
+sFONT Font20 = {
+ Font20_Table,
+ 14, /* Width */
+ 20, /* Height */
+};
+
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Function_Prototypes
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Functions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/font24.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/font24.c Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,2600 @@
+/**
+ ******************************************************************************
+ * @file font24.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief This file provides text font24 for STM32xx-EVAL's LCD driver.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+/** @addtogroup Utilities
+ * @{
+ */
+
+/** @addtogroup STM32_EVAL
+ * @{
+ */
+
+/** @addtogroup Common
+ * @{
+ */
+
+/** @addtogroup FONTS
+ * @brief This file provides text font24 for STM32xx-EVAL's LCD driver.
+ * @{
+ */
+
+/** @defgroup FONTS_Private_Types
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Defines
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Macros
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Variables
+ * @{
+ */
+const uint8_t Font24_Table [] =
+{
+ // @0 ' ' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @72 '!' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x01, 0x00, 0x00, // #
+ 0x01, 0x00, 0x00, // #
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @144 '"' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x0E, 0x70, 0x00, // ### ###
+ 0x0E, 0x70, 0x00, // ### ###
+ 0x0E, 0x70, 0x00, // ### ###
+ 0x04, 0x20, 0x00, // # #
+ 0x04, 0x20, 0x00, // # #
+ 0x04, 0x20, 0x00, // # #
+ 0x04, 0x20, 0x00, // # #
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @216 '#' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x06, 0x60, 0x00, // ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @288 '$' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x07, 0xB0, 0x00, // #### ##
+ 0x0F, 0xF0, 0x00, // ########
+ 0x18, 0x70, 0x00, // ## ###
+ 0x18, 0x70, 0x00, // ## ###
+ 0x1C, 0x00, 0x00, // ###
+ 0x0F, 0x80, 0x00, // #####
+ 0x07, 0xE0, 0x00, // ######
+ 0x00, 0xF0, 0x00, // ####
+ 0x18, 0x30, 0x00, // ## ##
+ 0x1C, 0x30, 0x00, // ### ##
+ 0x1C, 0x70, 0x00, // ### ###
+ 0x1F, 0xE0, 0x00, // ########
+ 0x1B, 0xC0, 0x00, // ## ####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @360 '%' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0x80, 0x00, // ####
+ 0x0F, 0xC0, 0x00, // ######
+ 0x1C, 0xE0, 0x00, // ### ###
+ 0x18, 0x60, 0x00, // ## ##
+ 0x18, 0x60, 0x00, // ## ##
+ 0x1C, 0xE0, 0x00, // ### ###
+ 0x0F, 0xF8, 0x00, // #########
+ 0x07, 0xE0, 0x00, // ######
+ 0x1F, 0xF0, 0x00, // #########
+ 0x07, 0x38, 0x00, // ### ###
+ 0x06, 0x18, 0x00, // ## ##
+ 0x06, 0x18, 0x00, // ## ##
+ 0x07, 0x38, 0x00, // ### ###
+ 0x03, 0xF0, 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, //
+
+ // @432 '&' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xF0, 0x00, // ######
+ 0x07, 0xF0, 0x00, // #######
+ 0x0C, 0x60, 0x00, // ## ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x07, 0x00, 0x00, // ###
+ 0x0F, 0x9C, 0x00, // ##### ###
+ 0x1D, 0xFC, 0x00, // ### #######
+ 0x18, 0xF0, 0x00, // ## ####
+ 0x18, 0x70, 0x00, // ## ###
+ 0x0F, 0xFC, 0x00, // ##########
+ 0x07, 0xDC, 0x00, // ##### ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @504 ''' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x01, 0x00, 0x00, // #
+ 0x01, 0x00, 0x00, // #
+ 0x01, 0x00, 0x00, // #
+ 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, //
+
+ // @576 '(' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x38, 0x00, // ###
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0xF0, 0x00, // ####
+ 0x00, 0xE0, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0x38, 0x00, // ###
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @648 ')' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x18, 0x00, 0x00, // ##
+ 0x1C, 0x00, 0x00, // ###
+ 0x0E, 0x00, 0x00, // ###
+ 0x0E, 0x00, 0x00, // ###
+ 0x07, 0x00, 0x00, // ###
+ 0x07, 0x00, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x07, 0x00, 0x00, // ###
+ 0x07, 0x00, 0x00, // ###
+ 0x0F, 0x00, 0x00, // ####
+ 0x0E, 0x00, 0x00, // ###
+ 0x1C, 0x00, 0x00, // ###
+ 0x18, 0x00, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @720 '*' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x1D, 0xB8, 0x00, // ### ## ###
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x07, 0xE0, 0x00, // ######
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 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, //
+
+ // @792 '+' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x3F, 0xFC, 0x00, // ############
+ 0x3F, 0xFC, 0x00, // ############
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 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, //
+
+ // @864 ',' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 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, 0x00, // ###
+ 0x00, 0xC0, 0x00, // ##
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @936 '-' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 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, 0xF8, 0x00, // ##########
+ 0x1F, 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, //
+
+ // @1008 '.' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 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, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1080 '/' (17 pixels wide)
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x38, 0x00, // ###
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0x60, 0x00, // ##
+ 0x00, 0x60, 0x00, // ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x0E, 0x00, 0x00, // ###
+ 0x0C, 0x00, 0x00, // ##
+ 0x1C, 0x00, 0x00, // ###
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1152 '0' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x07, 0xE0, 0x00, // ######
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x07, 0xE0, 0x00, // ######
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1224 '1' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x80, 0x00, // #
+ 0x07, 0x80, 0x00, // ####
+ 0x1F, 0x80, 0x00, // ######
+ 0x1D, 0x80, 0x00, // ### ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1296 '2' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xC0, 0x00, // #####
+ 0x1F, 0xF0, 0x00, // #########
+ 0x38, 0x30, 0x00, // ### ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x60, 0x00, // ##
+ 0x01, 0xC0, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x06, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1368 '3' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x0F, 0xE0, 0x00, // #######
+ 0x0C, 0x70, 0x00, // ## ###
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x60, 0x00, // ##
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xE0, 0x00, // #####
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xF0, 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, //
+
+ // @1440 '4' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0xE0, 0x00, // ###
+ 0x01, 0xE0, 0x00, // ####
+ 0x01, 0xE0, 0x00, // ####
+ 0x03, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x0C, 0x60, 0x00, // ## ##
+ 0x0C, 0x60, 0x00, // ## ##
+ 0x18, 0x60, 0x00, // ## ##
+ 0x30, 0x60, 0x00, // ## ##
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x00, 0x60, 0x00, // ##
+ 0x03, 0xF8, 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, //
+
+ // @1512 '5' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1F, 0xF0, 0x00, // #########
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x1B, 0xC0, 0x00, // ## ####
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1C, 0x30, 0x00, // ### ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x30, 0x30, 0x00, // ## ##
+ 0x3F, 0xF0, 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, //
+
+ // @1584 '6' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0xF8, 0x00, // #####
+ 0x03, 0xF8, 0x00, // #######
+ 0x07, 0x00, 0x00, // ###
+ 0x0E, 0x00, 0x00, // ###
+ 0x0C, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x1B, 0xC0, 0x00, // ## ####
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1C, 0x30, 0x00, // ### ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x38, 0x00, // ## ###
+ 0x0F, 0xF0, 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, //
+
+ // @1656 '7' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0x60, 0x00, // ##
+ 0x00, 0x60, 0x00, // ##
+ 0x00, 0xE0, 0x00, // ###
+ 0x00, 0xC0, 0x00, // ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1728 '8' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xE0, 0x00, // ######
+ 0x0F, 0xF0, 0x00, // ########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x07, 0xE0, 0x00, // ######
+ 0x07, 0xE0, 0x00, // ######
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x0F, 0xF0, 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, //
+
+ // @1800 '9' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xC0, 0x00, // #####
+ 0x0F, 0xF0, 0x00, // ########
+ 0x1C, 0x30, 0x00, // ### ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x38, 0x00, // ## ###
+ 0x0F, 0xF8, 0x00, // #########
+ 0x03, 0xD8, 0x00, // #### ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x1F, 0xC0, 0x00, // #######
+ 0x1F, 0x00, 0x00, // #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1872 ':' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1944 ';' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0xF0, 0x00, // ####
+ 0x00, 0xF0, 0x00, // ####
+ 0x00, 0xF0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0xE0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x02, 0x00, 0x00, // #
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2016 '<' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x1C, 0x00, // ###
+ 0x00, 0x3C, 0x00, // ####
+ 0x00, 0xF0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x0F, 0x00, 0x00, // ####
+ 0x3C, 0x00, 0x00, // ####
+ 0xF0, 0x00, 0x00, // ####
+ 0x3C, 0x00, 0x00, // ####
+ 0x0F, 0x00, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0xF0, 0x00, // ####
+ 0x00, 0x3C, 0x00, // ####
+ 0x00, 0x1C, 0x00, // ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2088 '=' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0xFC, 0x00, // #############
+ 0x7F, 0xFC, 0x00, // #############
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0xFC, 0x00, // #############
+ 0x7F, 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, //
+
+ // @2160 '>' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x70, 0x00, 0x00, // ###
+ 0x78, 0x00, 0x00, // ####
+ 0x1E, 0x00, 0x00, // ####
+ 0x07, 0x80, 0x00, // ####
+ 0x01, 0xE0, 0x00, // ####
+ 0x00, 0x78, 0x00, // ####
+ 0x00, 0x1E, 0x00, // ####
+ 0x00, 0x78, 0x00, // ####
+ 0x01, 0xE0, 0x00, // ####
+ 0x07, 0x80, 0x00, // ####
+ 0x1E, 0x00, 0x00, // ####
+ 0x78, 0x00, 0x00, // ####
+ 0x70, 0x00, 0x00, // ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2232 '?' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xC0, 0x00, // #####
+ 0x0F, 0xE0, 0x00, // #######
+ 0x18, 0x70, 0x00, // ## ###
+ 0x18, 0x30, 0x00, // ## ##
+ 0x18, 0x30, 0x00, // ## ##
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x00, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0x00, 0x00, // ###
+ 0x07, 0x00, 0x00, // ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2304 '@' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xE0, 0x00, // #####
+ 0x07, 0xF0, 0x00, // #######
+ 0x0E, 0x38, 0x00, // ### ###
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x18, 0x78, 0x00, // ## ####
+ 0x18, 0xF8, 0x00, // ## #####
+ 0x19, 0xD8, 0x00, // ## ### ##
+ 0x19, 0x98, 0x00, // ## ## ##
+ 0x19, 0x98, 0x00, // ## ## ##
+ 0x19, 0x98, 0x00, // ## ## ##
+ 0x18, 0xF8, 0x00, // ## #####
+ 0x18, 0x78, 0x00, // ## ####
+ 0x18, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0E, 0x18, 0x00, // ### ##
+ 0x07, 0xF8, 0x00, // ########
+ 0x03, 0xE0, 0x00, // #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2376 'A' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0x80, 0x00, // ######
+ 0x1F, 0xC0, 0x00, // #######
+ 0x01, 0xC0, 0x00, // ###
+ 0x03, 0x60, 0x00, // ## ##
+ 0x03, 0x60, 0x00, // ## ##
+ 0x06, 0x30, 0x00, // ## ##
+ 0x06, 0x30, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x0F, 0xF8, 0x00, // #########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0xFC, 0x7F, 0x00, // ###### #######
+ 0xFC, 0x7F, 0x00, // ###### #######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2448 'B' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0xE0, 0x00, // ##########
+ 0x7F, 0xF0, 0x00, // ###########
+ 0x18, 0x38, 0x00, // ## ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x1C, 0x00, // ## ###
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x7F, 0xF8, 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, //
+
+ // @2520 'C' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xEC, 0x00, // ##### ##
+ 0x0F, 0xFC, 0x00, // ##########
+ 0x1C, 0x1C, 0x00, // ### ###
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x1C, 0x1C, 0x00, // ### ###
+ 0x0F, 0xF8, 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, //
+
+ // @2592 'D' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0xC0, 0x00, // #########
+ 0x7F, 0xF0, 0x00, // ###########
+ 0x18, 0x38, 0x00, // ## ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x7F, 0xF0, 0x00, // ###########
+ 0x7F, 0xE0, 0x00, // ##########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2664 'E' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0xF8, 0x00, // ############
+ 0x7F, 0xF8, 0x00, // ############
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x19, 0x98, 0x00, // ## ## ##
+ 0x19, 0x80, 0x00, // ## ##
+ 0x1F, 0x80, 0x00, // ######
+ 0x1F, 0x80, 0x00, // ######
+ 0x19, 0x80, 0x00, // ## ##
+ 0x19, 0x98, 0x00, // ## ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x7F, 0xF8, 0x00, // ############
+ 0x7F, 0xF8, 0x00, // ############
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2736 'F' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x3F, 0xFC, 0x00, // ############
+ 0x3F, 0xFC, 0x00, // ############
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0xCC, 0x00, // ## ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0F, 0xC0, 0x00, // ######
+ 0x0F, 0xC0, 0x00, // ######
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x3F, 0xC0, 0x00, // ########
+ 0x3F, 0xC0, 0x00, // ########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2808 'G' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xEC, 0x00, // ##### ##
+ 0x0F, 0xFC, 0x00, // ##########
+ 0x1C, 0x1C, 0x00, // ### ###
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0xFE, 0x00, // ## #######
+ 0x30, 0xFE, 0x00, // ## #######
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x38, 0x0C, 0x00, // ### ##
+ 0x1C, 0x1C, 0x00, // ### ###
+ 0x0F, 0xFC, 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, //
+
+ // @2880 'H' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2952 'I' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3024 'J' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xFE, 0x00, // ##########
+ 0x07, 0xFE, 0x00, // ##########
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x30, 0x30, 0x00, // ## ##
+ 0x30, 0x30, 0x00, // ## ##
+ 0x30, 0x30, 0x00, // ## ##
+ 0x30, 0x30, 0x00, // ## ##
+ 0x30, 0x60, 0x00, // ## ##
+ 0x3F, 0xE0, 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, //
+
+ // @3096 'K' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0x3E, 0x00, // ####### #####
+ 0x7F, 0x3E, 0x00, // ####### #####
+ 0x18, 0x30, 0x00, // ## ##
+ 0x18, 0x60, 0x00, // ## ##
+ 0x18, 0xC0, 0x00, // ## ##
+ 0x19, 0x80, 0x00, // ## ##
+ 0x1B, 0x80, 0x00, // ## ###
+ 0x1F, 0xC0, 0x00, // #######
+ 0x1C, 0xE0, 0x00, // ### ###
+ 0x18, 0x70, 0x00, // ## ###
+ 0x18, 0x30, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x7F, 0x1F, 0x00, // ####### #####
+ 0x7F, 0x1F, 0x00, // ####### #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3168 'L' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0x80, 0x00, // ########
+ 0x7F, 0x80, 0x00, // ########
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x7F, 0xFC, 0x00, // #############
+ 0x7F, 0xFC, 0x00, // #############
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3240 'M' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0xF0, 0x0F, 0x00, // #### ####
+ 0xF8, 0x1F, 0x00, // ##### #####
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x3C, 0x3C, 0x00, // #### ####
+ 0x3C, 0x3C, 0x00, // #### ####
+ 0x36, 0x6C, 0x00, // ## ## ## ##
+ 0x36, 0x6C, 0x00, // ## ## ## ##
+ 0x33, 0xCC, 0x00, // ## #### ##
+ 0x33, 0xCC, 0x00, // ## #### ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0xFE, 0x7F, 0x00, // ####### #######
+ 0xFE, 0x7F, 0x00, // ####### #######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3312 'N' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x78, 0xFE, 0x00, // #### #######
+ 0x78, 0xFE, 0x00, // #### #######
+ 0x1C, 0x18, 0x00, // ### ##
+ 0x1E, 0x18, 0x00, // #### ##
+ 0x1F, 0x18, 0x00, // ##### ##
+ 0x1B, 0x18, 0x00, // ## ## ##
+ 0x1B, 0x98, 0x00, // ## ### ##
+ 0x19, 0xD8, 0x00, // ## ### ##
+ 0x18, 0xD8, 0x00, // ## ## ##
+ 0x18, 0xF8, 0x00, // ## #####
+ 0x18, 0x78, 0x00, // ## ####
+ 0x18, 0x38, 0x00, // ## ###
+ 0x7F, 0x18, 0x00, // ####### ##
+ 0x7F, 0x18, 0x00, // ####### ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3384 'O' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x0F, 0xF0, 0x00, // ########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x0F, 0xF0, 0x00, // ########
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3456 'P' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x3F, 0xF0, 0x00, // ##########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x0C, 0x1C, 0x00, // ## ###
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x0F, 0xF8, 0x00, // #########
+ 0x0F, 0xE0, 0x00, // #######
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x3F, 0xC0, 0x00, // ########
+ 0x3F, 0xC0, 0x00, // ########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3528 'Q' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x0F, 0xF0, 0x00, // ########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x0F, 0xF0, 0x00, // ########
+ 0x07, 0xC0, 0x00, // #####
+ 0x07, 0xCC, 0x00, // ##### ##
+ 0x0F, 0xFC, 0x00, // ##########
+ 0x0C, 0x38, 0x00, // ## ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3600 'R' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0xE0, 0x00, // ##########
+ 0x7F, 0xF0, 0x00, // ###########
+ 0x18, 0x38, 0x00, // ## ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1F, 0xC0, 0x00, // #######
+ 0x18, 0xE0, 0x00, // ## ###
+ 0x18, 0x70, 0x00, // ## ###
+ 0x18, 0x30, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x7F, 0x1E, 0x00, // ####### ####
+ 0x7F, 0x0E, 0x00, // ####### ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3672 'S' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xD8, 0x00, // ##### ##
+ 0x0F, 0xF8, 0x00, // #########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1E, 0x00, 0x00, // ####
+ 0x0F, 0xC0, 0x00, // ######
+ 0x03, 0xF0, 0x00, // ######
+ 0x00, 0x78, 0x00, // ####
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1B, 0xE0, 0x00, // ## #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3744 'T' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x3F, 0xFC, 0x00, // ############
+ 0x3F, 0xFC, 0x00, // ############
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x0F, 0xF0, 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, //
+
+ // @3816 'U' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x0F, 0xF0, 0x00, // ########
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3888 'V' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0x7F, 0x00, // ####### #######
+ 0x7F, 0x7F, 0x00, // ####### #######
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x06, 0x30, 0x00, // ## ##
+ 0x06, 0x30, 0x00, // ## ##
+ 0x03, 0x60, 0x00, // ## ##
+ 0x03, 0x60, 0x00, // ## ##
+ 0x03, 0x60, 0x00, // ## ##
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x00, 0x80, 0x00, // #
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3960 'W' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0xFE, 0x3F, 0x80, // ####### #######
+ 0xFE, 0x3F, 0x80, // ####### #######
+ 0x30, 0x06, 0x00, // ## ##
+ 0x30, 0x06, 0x00, // ## ##
+ 0x30, 0x86, 0x00, // ## # ##
+ 0x19, 0xCC, 0x00, // ## ### ##
+ 0x19, 0xCC, 0x00, // ## ### ##
+ 0x1B, 0x6C, 0x00, // ## ## ## ##
+ 0x1B, 0x6C, 0x00, // ## ## ## ##
+ 0x1E, 0x7C, 0x00, // #### #####
+ 0x0E, 0x38, 0x00, // ### ###
+ 0x0E, 0x38, 0x00, // ### ###
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4032 'X' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x03, 0xC0, 0x00, // ####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0xC0, 0x00, // ####
+ 0x06, 0x60, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4104 'Y' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7C, 0x7E, 0x00, // ##### ######
+ 0x7C, 0x7E, 0x00, // ##### ######
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x03, 0xC0, 0x00, // ####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x0F, 0xF0, 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, //
+
+ // @4176 'Z' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x30, 0x00, // ## ##
+ 0x18, 0x60, 0x00, // ## ##
+ 0x18, 0xC0, 0x00, // ## ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x06, 0x18, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4248 '[' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x01, 0xF0, 0x00, // #####
+ 0x01, 0xF0, 0x00, // #####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0xF0, 0x00, // #####
+ 0x01, 0xF0, 0x00, // #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4320 '\' (17 pixels wide)
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x1C, 0x00, 0x00, // ###
+ 0x0C, 0x00, 0x00, // ##
+ 0x0E, 0x00, 0x00, // ###
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x00, 0x60, 0x00, // ##
+ 0x00, 0x60, 0x00, // ##
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x38, 0x00, // ###
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4392 ']' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x0F, 0x80, 0x00, // #####
+ 0x0F, 0x80, 0x00, // #####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x0F, 0x80, 0x00, // #####
+ 0x0F, 0x80, 0x00, // #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4464 '^' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x80, 0x00, // #
+ 0x01, 0xC0, 0x00, // ###
+ 0x03, 0xE0, 0x00, // #####
+ 0x07, 0x70, 0x00, // ### ###
+ 0x06, 0x30, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x10, 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, //
+
+ // @4536 '_' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 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, 0x00, // ################
+ 0xFF, 0xFF, 0x00, // ################
+
+ // @4608 '`' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x03, 0x00, 0x00, // ##
+ 0x03, 0x80, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x00, 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, //
+
+ // @4680 'a' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x0F, 0xC0, 0x00, // ######
+ 0x1F, 0xE0, 0x00, // ########
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x07, 0xF0, 0x00, // #######
+ 0x1F, 0xF0, 0x00, // #########
+ 0x38, 0x30, 0x00, // ### ##
+ 0x30, 0x30, 0x00, // ## ##
+ 0x30, 0x70, 0x00, // ## ###
+ 0x1F, 0xFC, 0x00, // ###########
+ 0x0F, 0xBC, 0x00, // ##### ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4752 'b' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x78, 0x00, 0x00, // ####
+ 0x78, 0x00, 0x00, // ####
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x1B, 0xE0, 0x00, // ## #####
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1C, 0x18, 0x00, // ### ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x1C, 0x18, 0x00, // ### ##
+ 0x7F, 0xF8, 0x00, // ############
+ 0x7B, 0xE0, 0x00, // #### #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4824 'c' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xEC, 0x00, // ##### ##
+ 0x0F, 0xFC, 0x00, // ##########
+ 0x1C, 0x1C, 0x00, // ### ###
+ 0x38, 0x0C, 0x00, // ### ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x38, 0x0C, 0x00, // ### ##
+ 0x1C, 0x1C, 0x00, // ### ###
+ 0x0F, 0xF8, 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, //
+
+ // @4896 'd' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x78, 0x00, // ####
+ 0x00, 0x78, 0x00, // ####
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x07, 0xD8, 0x00, // ##### ##
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x38, 0x00, // ## ###
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xFE, 0x00, // ############
+ 0x07, 0xDE, 0x00, // ##### ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4968 'e' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xE0, 0x00, // ######
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x18, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x3F, 0xFC, 0x00, // ############
+ 0x3F, 0xFC, 0x00, // ############
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x1F, 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, //
+
+ // @5040 'f' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x01, 0xFC, 0x00, // #######
+ 0x03, 0xFC, 0x00, // ########
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x3F, 0xF0, 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, //
+
+ // @5112 'g' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xDE, 0x00, // ##### ####
+ 0x1F, 0xFE, 0x00, // ############
+ 0x18, 0x38, 0x00, // ## ###
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x07, 0xD8, 0x00, // ##### ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x38, 0x00, // ###
+ 0x0F, 0xF0, 0x00, // ########
+ 0x0F, 0xC0, 0x00, // ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5184 'h' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x78, 0x00, 0x00, // ####
+ 0x78, 0x00, 0x00, // ####
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x1B, 0xE0, 0x00, // ## #####
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5256 'i' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0x80, 0x00, // ######
+ 0x1F, 0x80, 0x00, // ######
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x3F, 0xFC, 0x00, // ############
+ 0x3F, 0xFC, 0x00, // ############
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5328 'j' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0xC0, 0x00, // ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1F, 0xF0, 0x00, // #########
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x70, 0x00, // ###
+ 0x1F, 0xE0, 0x00, // ########
+ 0x1F, 0x80, 0x00, // ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5400 'k' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x3C, 0x00, 0x00, // ####
+ 0x3C, 0x00, 0x00, // ####
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0xF8, 0x00, // ## #####
+ 0x0C, 0xF8, 0x00, // ## #####
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0D, 0x80, 0x00, // ## ##
+ 0x0F, 0x80, 0x00, // #####
+ 0x0F, 0x00, 0x00, // ####
+ 0x0F, 0x80, 0x00, // #####
+ 0x0D, 0xC0, 0x00, // ## ###
+ 0x0C, 0xE0, 0x00, // ## ###
+ 0x3C, 0x7C, 0x00, // #### #####
+ 0x3C, 0x7C, 0x00, // #### #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5472 'l' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0x80, 0x00, // ######
+ 0x1F, 0x80, 0x00, // ######
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x3F, 0xFC, 0x00, // ############
+ 0x3F, 0xFC, 0x00, // ############
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5544 'm' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0xF7, 0x78, 0x00, // #### ### ####
+ 0xFF, 0xFC, 0x00, // ##############
+ 0x39, 0xCC, 0x00, // ### ### ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0xFD, 0xEF, 0x00, // ###### #### ####
+ 0xFD, 0xEF, 0x00, // ###### #### ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5616 'n' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7B, 0xE0, 0x00, // #### #####
+ 0x7F, 0xF0, 0x00, // ###########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5688 'o' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x0F, 0xF0, 0x00, // ########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x0F, 0xF0, 0x00, // ########
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5760 'p' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7B, 0xE0, 0x00, // #### #####
+ 0x7F, 0xF8, 0x00, // ############
+ 0x1C, 0x18, 0x00, // ### ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x1C, 0x18, 0x00, // ### ##
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1B, 0xE0, 0x00, // ## #####
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x7F, 0x00, 0x00, // #######
+ 0x7F, 0x00, 0x00, // #######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5832 'q' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xDE, 0x00, // ##### ####
+ 0x1F, 0xFE, 0x00, // ############
+ 0x18, 0x38, 0x00, // ## ###
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x07, 0xD8, 0x00, // ##### ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0xFE, 0x00, // #######
+ 0x00, 0xFE, 0x00, // #######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5904 'r' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x3E, 0x78, 0x00, // ##### ####
+ 0x3E, 0xFC, 0x00, // ##### ######
+ 0x07, 0xCC, 0x00, // ##### ##
+ 0x07, 0x00, 0x00, // ###
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x3F, 0xF0, 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, //
+
+ // @5976 's' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xF8, 0x00, // ########
+ 0x0F, 0xF8, 0x00, // #########
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1F, 0x80, 0x00, // ######
+ 0x0F, 0xF0, 0x00, // ########
+ 0x00, 0xF8, 0x00, // #####
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xF0, 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, //
+
+ // @6048 't' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x3F, 0xF0, 0x00, // ##########
+ 0x3F, 0xF0, 0x00, // ##########
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x1C, 0x00, // ## ###
+ 0x07, 0xFC, 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, //
+
+ // @6120 'u' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x78, 0x78, 0x00, // #### ####
+ 0x78, 0x78, 0x00, // #### ####
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x0F, 0xFE, 0x00, // ###########
+ 0x07, 0xDE, 0x00, // ##### ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6192 'v' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7C, 0x3E, 0x00, // ##### #####
+ 0x7C, 0x3E, 0x00, // ##### #####
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x07, 0xE0, 0x00, // ######
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6264 'w' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x78, 0x3C, 0x00, // #### ####
+ 0x78, 0x3C, 0x00, // #### ####
+ 0x31, 0x18, 0x00, // ## # ##
+ 0x33, 0x98, 0x00, // ## ### ##
+ 0x33, 0x98, 0x00, // ## ### ##
+ 0x1A, 0xB0, 0x00, // ## # # ##
+ 0x1E, 0xF0, 0x00, // #### ####
+ 0x1E, 0xF0, 0x00, // #### ####
+ 0x1C, 0x60, 0x00, // ### ##
+ 0x0C, 0x60, 0x00, // ## ##
+ 0x0C, 0x60, 0x00, // ## ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6336 'x' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x3E, 0x7C, 0x00, // ##### #####
+ 0x3E, 0x7C, 0x00, // ##### #####
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x03, 0xC0, 0x00, // ####
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0xC0, 0x00, // ####
+ 0x06, 0x60, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x3E, 0x7C, 0x00, // ##### #####
+ 0x3E, 0x7C, 0x00, // ##### #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6408 'y' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7E, 0x1F, 0x00, // ###### #####
+ 0x7E, 0x1F, 0x00, // ###### #####
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x06, 0x30, 0x00, // ## ##
+ 0x06, 0x30, 0x00, // ## ##
+ 0x03, 0x60, 0x00, // ## ##
+ 0x03, 0xE0, 0x00, // #####
+ 0x01, 0xC0, 0x00, // ###
+ 0x00, 0xC0, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x3F, 0xC0, 0x00, // ########
+ 0x3F, 0xC0, 0x00, // ########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6480 'z' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x30, 0x00, // ## ##
+ 0x18, 0x60, 0x00, // ## ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x06, 0x18, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6552 '{' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0xE0, 0x00, // ###
+ 0x01, 0xE0, 0x00, // ####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x80, 0x00, // ###
+ 0x07, 0x00, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0xE0, 0x00, // ####
+ 0x00, 0xE0, 0x00, // ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6624 '|' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6696 '}' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0x00, 0x00, // ###
+ 0x07, 0x80, 0x00, // ####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0xC0, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x07, 0x80, 0x00, // ####
+ 0x07, 0x00, 0x00, // ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6768 '~' (17 pixels wide)
+ 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, 0x00, 0x00, // ###
+ 0x1F, 0x18, 0x00, // ##### ##
+ 0x3B, 0xB8, 0x00, // ### ### ###
+ 0x31, 0xF0, 0x00, // ## #####
+ 0x00, 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, //
+};
+
+sFONT Font24 = {
+ Font24_Table,
+ 17, /* Width */
+ 24, /* Height */
+};
+
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Function_Prototypes
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Functions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/font8.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/font8.c Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,1084 @@
+/**
+ ******************************************************************************
+ * @file Font8.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief This file provides text Font8 for STM32xx-EVAL's LCD driver.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+/** @addtogroup Utilities
+ * @{
+ */
+
+/** @addtogroup STM32_EVAL
+ * @{
+ */
+
+/** @addtogroup Common
+ * @{
+ */
+
+/** @addtogroup FONTS
+ * @brief This file provides text Font8 for STM32xx-EVAL's LCD driver.
+ * @{
+ */
+
+/** @defgroup FONTS_Private_Types
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Defines
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Macros
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Variables
+ * @{
+ */
+//
+// Font data for Courier New 12pt
+//
+
+const uint8_t Font8_Table[] =
+{
+ // @0 ' ' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @8 '!' (5 pixels wide)
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @16 '"' (5 pixels wide)
+ 0x50, // # #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @24 '#' (5 pixels wide)
+ 0x28, // # #
+ 0x50, // # #
+ 0xF8, // #####
+ 0x50, // # #
+ 0xF8, // #####
+ 0x50, // # #
+ 0xA0, // # #
+ 0x00, //
+
+ // @32 '$' (5 pixels wide)
+ 0x20, // #
+ 0x30, // ##
+ 0x60, // ##
+ 0x30, // ##
+ 0x10, // #
+ 0x60, // ##
+ 0x20, // #
+ 0x00, //
+
+ // @40 '%' (5 pixels wide)
+ 0x20, // #
+ 0x20, // #
+ 0x18, // ##
+ 0x60, // ##
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+
+ // @48 '&' (5 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x20, // #
+ 0x60, // ##
+ 0x50, // # #
+ 0x78, // ####
+ 0x00, //
+ 0x00, //
+
+ // @56 ''' (5 pixels wide)
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @64 '(' (5 pixels wide)
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x10, // #
+ 0x00, //
+
+ // @72 ')' (5 pixels wide)
+ 0x40, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x40, // #
+ 0x00, //
+
+ // @80 '*' (5 pixels wide)
+ 0x20, // #
+ 0x70, // ###
+ 0x20, // #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @88 '+' (5 pixels wide)
+ 0x00, //
+ 0x20, // #
+ 0x20, // #
+ 0xF8, // #####
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @96 ',' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+
+ // @104 '-' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @112 '.' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @120 '/' (5 pixels wide)
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x40, // #
+ 0x40, // #
+ 0x80, // #
+ 0x00, //
+
+ // @128 '0' (5 pixels wide)
+ 0x20, // #
+ 0x50, // # #
+ 0x50, // # #
+ 0x50, // # #
+ 0x50, // # #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @136 '1' (5 pixels wide)
+ 0x60, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0xF8, // #####
+ 0x00, //
+ 0x00, //
+
+ // @144 '2' (5 pixels wide)
+ 0x20, // #
+ 0x50, // # #
+ 0x20, // #
+ 0x20, // #
+ 0x40, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @152 '3' (5 pixels wide)
+ 0x20, // #
+ 0x50, // # #
+ 0x10, // #
+ 0x20, // #
+ 0x10, // #
+ 0x60, // ##
+ 0x00, //
+ 0x00, //
+
+ // @160 '4' (5 pixels wide)
+ 0x10, // #
+ 0x30, // ##
+ 0x50, // # #
+ 0x78, // ####
+ 0x10, // #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+
+ // @168 '5' (5 pixels wide)
+ 0x70, // ###
+ 0x40, // #
+ 0x60, // ##
+ 0x10, // #
+ 0x50, // # #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @176 '6' (5 pixels wide)
+ 0x30, // ##
+ 0x40, // #
+ 0x60, // ##
+ 0x50, // # #
+ 0x50, // # #
+ 0x60, // ##
+ 0x00, //
+ 0x00, //
+
+ // @184 '7' (5 pixels wide)
+ 0x70, // ###
+ 0x50, // # #
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @192 '8' (5 pixels wide)
+ 0x20, // #
+ 0x50, // # #
+ 0x20, // #
+ 0x50, // # #
+ 0x50, // # #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @200 '9' (5 pixels wide)
+ 0x30, // ##
+ 0x50, // # #
+ 0x50, // # #
+ 0x30, // ##
+ 0x10, // #
+ 0x60, // ##
+ 0x00, //
+ 0x00, //
+
+ // @208 ':' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @216 ';' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x10, // #
+ 0x00, //
+ 0x10, // #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @224 '<' (5 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x20, // #
+ 0xC0, // ##
+ 0x20, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+
+ // @232 '=' (5 pixels wide)
+ 0x00, //
+ 0x70, // ###
+ 0x00, //
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @240 '>' (5 pixels wide)
+ 0x00, //
+ 0x40, // #
+ 0x20, // #
+ 0x18, // ##
+ 0x20, // #
+ 0x40, // #
+ 0x00, //
+ 0x00, //
+
+ // @248 '?' (5 pixels wide)
+ 0x20, // #
+ 0x50, // # #
+ 0x10, // #
+ 0x20, // #
+ 0x00, //
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @256 '@' (5 pixels wide)
+ 0x30, // ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x58, // # ##
+ 0x48, // # #
+ 0x40, // #
+ 0x38, // ###
+ 0x00, //
+
+ // @264 'A' (5 pixels wide)
+ 0x60, // ##
+ 0x20, // #
+ 0x50, // # #
+ 0x70, // ###
+ 0x88, // # #
+ 0xD8, // ## ##
+ 0x00, //
+ 0x00, //
+
+ // @272 'B' (5 pixels wide)
+ 0xF0, // ####
+ 0x48, // # #
+ 0x70, // ###
+ 0x48, // # #
+ 0x48, // # #
+ 0xF0, // ####
+ 0x00, //
+ 0x00, //
+
+ // @280 'C' (5 pixels wide)
+ 0x70, // ###
+ 0x50, // # #
+ 0x40, // #
+ 0x40, // #
+ 0x40, // #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @288 'D' (5 pixels wide)
+ 0xF0, // ####
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0xF0, // ####
+ 0x00, //
+ 0x00, //
+
+ // @296 'E' (5 pixels wide)
+ 0xF8, // #####
+ 0x48, // # #
+ 0x60, // ##
+ 0x40, // #
+ 0x48, // # #
+ 0xF8, // #####
+ 0x00, //
+ 0x00, //
+
+ // @304 'F' (5 pixels wide)
+ 0xF8, // #####
+ 0x48, // # #
+ 0x60, // ##
+ 0x40, // #
+ 0x40, // #
+ 0xE0, // ###
+ 0x00, //
+ 0x00, //
+
+ // @312 'G' (5 pixels wide)
+ 0x70, // ###
+ 0x40, // #
+ 0x40, // #
+ 0x58, // # ##
+ 0x50, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @320 'H' (5 pixels wide)
+ 0xE8, // ### #
+ 0x48, // # #
+ 0x78, // ####
+ 0x48, // # #
+ 0x48, // # #
+ 0xE8, // ### #
+ 0x00, //
+ 0x00, //
+
+ // @328 'I' (5 pixels wide)
+ 0x70, // ###
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @336 'J' (5 pixels wide)
+ 0x38, // ###
+ 0x10, // #
+ 0x10, // #
+ 0x50, // # #
+ 0x50, // # #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @344 'K' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x50, // # #
+ 0x60, // ##
+ 0x70, // ###
+ 0x50, // # #
+ 0xD8, // ## ##
+ 0x00, //
+ 0x00, //
+
+ // @352 'L' (5 pixels wide)
+ 0xE0, // ###
+ 0x40, // #
+ 0x40, // #
+ 0x40, // #
+ 0x48, // # #
+ 0xF8, // #####
+ 0x00, //
+ 0x00, //
+
+ // @360 'M' (5 pixels wide)
+ 0xD8, // ## ##
+ 0xD8, // ## ##
+ 0xD8, // ## ##
+ 0xA8, // # # #
+ 0x88, // # #
+ 0xD8, // ## ##
+ 0x00, //
+ 0x00, //
+
+ // @368 'N' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x68, // ## #
+ 0x68, // ## #
+ 0x58, // # ##
+ 0x58, // # ##
+ 0xE8, // ### #
+ 0x00, //
+ 0x00, //
+
+ // @376 'O' (5 pixels wide)
+ 0x30, // ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @384 'P' (5 pixels wide)
+ 0xF0, // ####
+ 0x48, // # #
+ 0x48, // # #
+ 0x70, // ###
+ 0x40, // #
+ 0xE0, // ###
+ 0x00, //
+ 0x00, //
+
+ // @392 'Q' (5 pixels wide)
+ 0x30, // ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x30, // ##
+ 0x18, // ##
+ 0x00, //
+
+ // @400 'R' (5 pixels wide)
+ 0xF0, // ####
+ 0x48, // # #
+ 0x48, // # #
+ 0x70, // ###
+ 0x48, // # #
+ 0xE8, // ### #
+ 0x00, //
+ 0x00, //
+
+ // @408 'S' (5 pixels wide)
+ 0x70, // ###
+ 0x50, // # #
+ 0x20, // #
+ 0x10, // #
+ 0x50, // # #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @416 'T' (5 pixels wide)
+ 0xF8, // #####
+ 0xA8, // # # #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @424 'U' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @432 'V' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x88, // # #
+ 0x48, // # #
+ 0x50, // # #
+ 0x50, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @440 'W' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x88, // # #
+ 0xA8, // # # #
+ 0xA8, // # # #
+ 0xA8, // # # #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+
+ // @448 'X' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x50, // # #
+ 0x20, // #
+ 0x20, // #
+ 0x50, // # #
+ 0xD8, // ## ##
+ 0x00, //
+ 0x00, //
+
+ // @456 'Y' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x88, // # #
+ 0x50, // # #
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @464 'Z' (5 pixels wide)
+ 0x78, // ####
+ 0x48, // # #
+ 0x10, // #
+ 0x20, // #
+ 0x48, // # #
+ 0x78, // ####
+ 0x00, //
+ 0x00, //
+
+ // @472 '[' (5 pixels wide)
+ 0x30, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x30, // ##
+ 0x00, //
+
+ // @480 '\' (5 pixels wide)
+ 0x80, // #
+ 0x40, // #
+ 0x40, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x10, // #
+ 0x00, //
+
+ // @488 ']' (5 pixels wide)
+ 0x60, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x60, // ##
+ 0x00, //
+
+ // @496 '^' (5 pixels wide)
+ 0x20, // #
+ 0x20, // #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @504 '_' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xF8, // #####
+
+ // @512 '`' (5 pixels wide)
+ 0x20, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @520 'a' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x30, // ##
+ 0x10, // #
+ 0x70, // ###
+ 0x78, // ####
+ 0x00, //
+ 0x00, //
+
+ // @528 'b' (5 pixels wide)
+ 0xC0, // ##
+ 0x40, // #
+ 0x70, // ###
+ 0x48, // # #
+ 0x48, // # #
+ 0xF0, // ####
+ 0x00, //
+ 0x00, //
+
+ // @536 'c' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x70, // ###
+ 0x40, // #
+ 0x40, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @544 'd' (5 pixels wide)
+ 0x18, // ##
+ 0x08, // #
+ 0x38, // ###
+ 0x48, // # #
+ 0x48, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+
+ // @552 'e' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x70, // ###
+ 0x70, // ###
+ 0x40, // #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @560 'f' (5 pixels wide)
+ 0x10, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @568 'g' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x38, // ###
+ 0x48, // # #
+ 0x48, // # #
+ 0x38, // ###
+ 0x08, // #
+ 0x30, // ##
+
+ // @576 'h' (5 pixels wide)
+ 0xC0, // ##
+ 0x40, // #
+ 0x70, // ###
+ 0x48, // # #
+ 0x48, // # #
+ 0xE8, // ### #
+ 0x00, //
+ 0x00, //
+
+ // @584 'i' (5 pixels wide)
+ 0x20, // #
+ 0x00, //
+ 0x60, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @592 'j' (5 pixels wide)
+ 0x20, // #
+ 0x00, //
+ 0x70, // ###
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x70, // ###
+
+ // @600 'k' (5 pixels wide)
+ 0xC0, // ##
+ 0x40, // #
+ 0x58, // # ##
+ 0x70, // ###
+ 0x50, // # #
+ 0xD8, // ## ##
+ 0x00, //
+ 0x00, //
+
+ // @608 'l' (5 pixels wide)
+ 0x60, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @616 'm' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xD0, // ## #
+ 0xA8, // # # #
+ 0xA8, // # # #
+ 0xA8, // # # #
+ 0x00, //
+ 0x00, //
+
+ // @624 'n' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xF0, // ####
+ 0x48, // # #
+ 0x48, // # #
+ 0xC8, // ## #
+ 0x00, //
+ 0x00, //
+
+ // @632 'o' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x30, // ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @640 'p' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xF0, // ####
+ 0x48, // # #
+ 0x48, // # #
+ 0x70, // ###
+ 0x40, // #
+ 0xE0, // ###
+
+ // @648 'q' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x38, // ###
+ 0x48, // # #
+ 0x48, // # #
+ 0x38, // ###
+ 0x08, // #
+ 0x18, // ##
+
+ // @656 'r' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x78, // ####
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @664 's' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x30, // ##
+ 0x20, // #
+ 0x10, // #
+ 0x60, // ##
+ 0x00, //
+ 0x00, //
+
+ // @672 't' (5 pixels wide)
+ 0x00, //
+ 0x40, // #
+ 0xF0, // ####
+ 0x40, // #
+ 0x48, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @680 'u' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xD8, // ## ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+
+ // @688 'v' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xC8, // ## #
+ 0x48, // # #
+ 0x30, // ##
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @696 'w' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xD8, // ## ##
+ 0xA8, // # # #
+ 0xA8, // # # #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+
+ // @704 'x' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x48, // # #
+ 0x30, // ##
+ 0x30, // ##
+ 0x48, // # #
+ 0x00, //
+ 0x00, //
+
+ // @712 'y' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xD8, // ## ##
+ 0x50, // # #
+ 0x50, // # #
+ 0x20, // #
+ 0x20, // #
+ 0x60, // ##
+
+ // @720 'z' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x78, // ####
+ 0x50, // # #
+ 0x28, // # #
+ 0x78, // ####
+ 0x00, //
+ 0x00, //
+
+ // @728 '{' (5 pixels wide)
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x60, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x10, // #
+ 0x00, //
+
+ // @736 '|' (5 pixels wide)
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+
+ // @744 '}' (5 pixels wide)
+ 0x40, // #
+ 0x20, // #
+ 0x20, // #
+ 0x30, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x40, // #
+ 0x00, //
+
+ // @752 '~' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x28, // # #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+};
+
+sFONT Font8 = {
+ Font8_Table,
+ 5, /* Width */
+ 8, /* Height */
+};
+
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Function_Prototypes
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup FONTS_Private_Functions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/fonts.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/fonts.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,134 @@
+/**
+ ******************************************************************************
+ * @file fonts.h
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief Header for fonts.c file
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __FONTS_H
+#define __FONTS_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include <stdint.h>
+
+/** @addtogroup Utilities
+ * @{
+ */
+
+/** @addtogroup STM32_EVAL
+ * @{
+ */
+
+/** @addtogroup Common
+ * @{
+ */
+
+/** @addtogroup FONTS
+ * @{
+ */
+
+/** @defgroup FONTS_Exported_Types
+ * @{
+ */
+typedef struct _tFont
+{
+ const uint8_t *table;
+ uint16_t Width;
+ uint16_t Height;
+
+} sFONT;
+
+extern sFONT Font24;
+extern sFONT Font20;
+extern sFONT Font16;
+extern sFONT Font12;
+extern sFONT Font8;
+/**
+ * @}
+ */
+
+/** @defgroup FONTS_Exported_Constants
+ * @{
+ */
+#define LINE(x) ((x) * (((sFONT *)BSP_LCD_GetFont())->Height))
+
+/**
+ * @}
+ */
+
+/** @defgroup FONTS_Exported_Macros
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup FONTS_Exported_Functions
+ * @{
+ */
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __FONTS_H */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/ft5336.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/ft5336.c Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,625 @@
+/**
+ ******************************************************************************
+ * @file ft5336.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 25-June-2015
+ * @brief This file provides a set of functions needed to manage the FT5336
+ * touch screen devices.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "ft5336.h"
+
+/** @addtogroup BSP
+ * @{
+ */
+
+/** @addtogroup Component
+ * @{
+ */
+
+/** @defgroup FT5336
+ * @{
+ */
+
+/* Private typedef -----------------------------------------------------------*/
+
+/** @defgroup FT5336_Private_Types_Definitions
+ * @{
+ */
+
+/* Private define ------------------------------------------------------------*/
+
+/** @defgroup FT5336_Private_Defines
+ * @{
+ */
+
+/* Private macro -------------------------------------------------------------*/
+
+/** @defgroup FT5336_Private_Macros
+ * @{
+ */
+
+/* Private variables ---------------------------------------------------------*/
+
+/** @defgroup FT5336_Private_Variables
+ * @{
+ */
+
+/* Touch screen driver structure initialization */
+TS_DrvTypeDef ft5336_ts_drv =
+{
+ ft5336_Init,
+ ft5336_ReadID,
+ ft5336_Reset,
+
+ ft5336_TS_Start,
+ ft5336_TS_DetectTouch,
+ ft5336_TS_GetXY,
+
+ ft5336_TS_EnableIT,
+ ft5336_TS_ClearIT,
+ ft5336_TS_ITStatus,
+ ft5336_TS_DisableIT
+
+};
+
+/* Global ft5336 handle */
+static ft5336_handle_TypeDef ft5336_handle = { FT5336_I2C_NOT_INITIALIZED, 0, 0};
+
+/**
+ * @}
+ */
+
+/** @defgroup ft5336_Private_Function_Prototypes
+ * @{
+ */
+
+/* Private functions prototypes-----------------------------------------------*/
+
+/**
+ * @brief Return the status of I2C was initialized or not.
+ * @param None.
+ * @retval : I2C initialization status.
+ */
+static uint8_t ft5336_Get_I2C_InitializedStatus(void);
+
+/**
+ * @brief I2C initialize if needed.
+ * @param None.
+ * @retval : None.
+ */
+static void ft5336_I2C_InitializeIfRequired(void);
+
+/**
+ * @brief Basic static configuration of TouchScreen
+ * @param DeviceAddr: FT5336 Device address for communication on I2C Bus.
+ * @retval Status FT5336_STATUS_OK or FT5336_STATUS_NOT_OK.
+ */
+static uint32_t ft5336_TS_Configure(uint16_t DeviceAddr);
+
+/** @defgroup ft5336_Private_Functions
+ * @{
+ */
+
+/** @defgroup ft5336_Public_Function_Body
+ * @{
+ */
+
+/* Public functions bodies-----------------------------------------------*/
+
+
+/**
+ * @brief Initialize the ft5336 communication bus
+ * from MCU to FT5336 : ie I2C channel initialization (if required).
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @retval None
+ */
+void ft5336_Init(uint16_t DeviceAddr)
+{
+ /* Wait at least 200ms after power up before accessing registers
+ * Trsi timing (Time of starting to report point after resetting) from FT5336GQQ datasheet */
+ TS_IO_Delay(200);
+
+ /* Initialize I2C link if needed */
+ ft5336_I2C_InitializeIfRequired();
+}
+
+/**
+ * @brief Software Reset the ft5336.
+ * @note : Not applicable to FT5336.
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @retval None
+ */
+void ft5336_Reset(uint16_t DeviceAddr)
+{
+ /* Do nothing */
+ /* No software reset sequence available in FT5336 IC */
+}
+
+/**
+ * @brief Read the ft5336 device ID, pre initialize I2C in case of need to be
+ * able to read the FT5336 device ID, and verify this is a FT5336.
+ * @param DeviceAddr: I2C FT5336 Slave address.
+ * @retval The Device ID (two bytes).
+ */
+uint16_t ft5336_ReadID(uint16_t DeviceAddr)
+{
+ volatile uint8_t ucReadId = 0;
+ uint8_t nbReadAttempts = 0;
+ uint8_t bFoundDevice = 0; /* Device not found by default */
+
+ /* Initialize I2C link if needed */
+ ft5336_I2C_InitializeIfRequired();
+
+ /* At maximum 4 attempts to read ID : exit at first finding of the searched device ID */
+ for(nbReadAttempts = 0; ((nbReadAttempts < 3) && !(bFoundDevice)); nbReadAttempts++)
+ {
+ /* Read register FT5336_CHIP_ID_REG as DeviceID detection */
+ ucReadId = TS_IO_Read(DeviceAddr, FT5336_CHIP_ID_REG);
+
+ /* Found the searched device ID ? */
+ if(ucReadId == FT5336_ID_VALUE)
+ {
+ /* Set device as found */
+ bFoundDevice = 1;
+ }
+ }
+
+ /* Return the device ID value */
+ return (ucReadId);
+}
+
+/**
+ * @brief Configures the touch Screen IC device to start detecting touches
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address).
+ * @retval None.
+ */
+void ft5336_TS_Start(uint16_t DeviceAddr)
+{
+ /* Minimum static configuration of FT5336 */
+ FT5336_ASSERT(ft5336_TS_Configure(DeviceAddr));
+
+ /* By default set FT5336 IC in Polling mode : no INT generation on FT5336 for new touch available */
+ /* Note TS_INT is active low */
+ ft5336_TS_DisableIT(DeviceAddr);
+}
+
+/**
+ * @brief Return if there is touches detected or not.
+ * Try to detect new touches and forget the old ones (reset internal global
+ * variables).
+ * @param DeviceAddr: Device address on communication Bus.
+ * @retval : Number of active touches detected (can be 0, 1 or 2).
+ */
+uint8_t ft5336_TS_DetectTouch(uint16_t DeviceAddr)
+{
+ volatile uint8_t nbTouch = 0;
+
+ /* Read register FT5336_TD_STAT_REG to check number of touches detection */
+ nbTouch = TS_IO_Read(DeviceAddr, FT5336_TD_STAT_REG);
+ nbTouch &= FT5336_TD_STAT_MASK;
+
+ if(nbTouch > FT5336_MAX_DETECTABLE_TOUCH)
+ {
+ /* If invalid number of touch detected, set it to zero */
+ nbTouch = 0;
+ }
+
+ /* Update ft5336 driver internal global : current number of active touches */
+ ft5336_handle.currActiveTouchNb = nbTouch;
+
+ /* Reset current active touch index on which to work on */
+ ft5336_handle.currActiveTouchIdx = 0;
+
+ return(nbTouch);
+}
+
+/**
+ * @brief Get the touch screen X and Y positions values
+ * Manage multi touch thanks to touch Index global
+ * variable 'ft5336_handle.currActiveTouchIdx'.
+ * @param DeviceAddr: Device address on communication Bus.
+ * @param X: Pointer to X position value
+ * @param Y: Pointer to Y position value
+ * @retval None.
+ */
+void ft5336_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y)
+{
+ volatile uint8_t ucReadData = 0;
+ static uint16_t coord;
+ uint8_t regAddressXLow = 0;
+ uint8_t regAddressXHigh = 0;
+ uint8_t regAddressYLow = 0;
+ uint8_t regAddressYHigh = 0;
+
+ if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb)
+ {
+ switch(ft5336_handle.currActiveTouchIdx)
+ {
+ case 0 :
+ regAddressXLow = FT5336_P1_XL_REG;
+ regAddressXHigh = FT5336_P1_XH_REG;
+ regAddressYLow = FT5336_P1_YL_REG;
+ regAddressYHigh = FT5336_P1_YH_REG;
+ break;
+
+ case 1 :
+ regAddressXLow = FT5336_P2_XL_REG;
+ regAddressXHigh = FT5336_P2_XH_REG;
+ regAddressYLow = FT5336_P2_YL_REG;
+ regAddressYHigh = FT5336_P2_YH_REG;
+ break;
+
+ case 2 :
+ regAddressXLow = FT5336_P3_XL_REG;
+ regAddressXHigh = FT5336_P3_XH_REG;
+ regAddressYLow = FT5336_P3_YL_REG;
+ regAddressYHigh = FT5336_P3_YH_REG;
+ break;
+
+ case 3 :
+ regAddressXLow = FT5336_P4_XL_REG;
+ regAddressXHigh = FT5336_P4_XH_REG;
+ regAddressYLow = FT5336_P4_YL_REG;
+ regAddressYHigh = FT5336_P4_YH_REG;
+ break;
+
+ case 4 :
+ regAddressXLow = FT5336_P5_XL_REG;
+ regAddressXHigh = FT5336_P5_XH_REG;
+ regAddressYLow = FT5336_P5_YL_REG;
+ regAddressYHigh = FT5336_P5_YH_REG;
+ break;
+
+ case 5 :
+ regAddressXLow = FT5336_P6_XL_REG;
+ regAddressXHigh = FT5336_P6_XH_REG;
+ regAddressYLow = FT5336_P6_YL_REG;
+ regAddressYHigh = FT5336_P6_YH_REG;
+ break;
+
+ case 6 :
+ regAddressXLow = FT5336_P7_XL_REG;
+ regAddressXHigh = FT5336_P7_XH_REG;
+ regAddressYLow = FT5336_P7_YL_REG;
+ regAddressYHigh = FT5336_P7_YH_REG;
+ break;
+
+ case 7 :
+ regAddressXLow = FT5336_P8_XL_REG;
+ regAddressXHigh = FT5336_P8_XH_REG;
+ regAddressYLow = FT5336_P8_YL_REG;
+ regAddressYHigh = FT5336_P8_YH_REG;
+ break;
+
+ case 8 :
+ regAddressXLow = FT5336_P9_XL_REG;
+ regAddressXHigh = FT5336_P9_XH_REG;
+ regAddressYLow = FT5336_P9_YL_REG;
+ regAddressYHigh = FT5336_P9_YH_REG;
+ break;
+
+ case 9 :
+ regAddressXLow = FT5336_P10_XL_REG;
+ regAddressXHigh = FT5336_P10_XH_REG;
+ regAddressYLow = FT5336_P10_YL_REG;
+ regAddressYHigh = FT5336_P10_YH_REG;
+ break;
+
+ default :
+ break;
+
+ } /* end switch(ft5336_handle.currActiveTouchIdx) */
+
+ /* Read low part of X position */
+ ucReadData = TS_IO_Read(DeviceAddr, regAddressXLow);
+ coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT;
+
+ /* Read high part of X position */
+ ucReadData = TS_IO_Read(DeviceAddr, regAddressXHigh);
+ coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8;
+
+ /* Send back ready X position to caller */
+ *X = coord;
+
+ /* Read low part of Y position */
+ ucReadData = TS_IO_Read(DeviceAddr, regAddressYLow);
+ coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT;
+
+ /* Read high part of Y position */
+ ucReadData = TS_IO_Read(DeviceAddr, regAddressYHigh);
+ coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8;
+
+ /* Send back ready Y position to caller */
+ *Y = coord;
+
+ ft5336_handle.currActiveTouchIdx++; /* next call will work on next touch */
+
+ } /* of if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb) */
+}
+
+/**
+ * @brief Configure the FT5336 device to generate IT on given INT pin
+ * connected to MCU as EXTI.
+ * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
+ * @retval None
+ */
+void ft5336_TS_EnableIT(uint16_t DeviceAddr)
+{
+ uint8_t regValue = 0;
+ regValue = (FT5336_G_MODE_INTERRUPT_TRIGGER & (FT5336_G_MODE_INTERRUPT_MASK >> FT5336_G_MODE_INTERRUPT_SHIFT)) << FT5336_G_MODE_INTERRUPT_SHIFT;
+
+ /* Set interrupt trigger mode in FT5336_GMODE_REG */
+ TS_IO_Write(DeviceAddr, FT5336_GMODE_REG, regValue);
+}
+
+/**
+ * @brief Configure the FT5336 device to stop generating IT on the given INT pin
+ * connected to MCU as EXTI.
+ * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
+ * @retval None
+ */
+void ft5336_TS_DisableIT(uint16_t DeviceAddr)
+{
+ uint8_t regValue = 0;
+ regValue = (FT5336_G_MODE_INTERRUPT_POLLING & (FT5336_G_MODE_INTERRUPT_MASK >> FT5336_G_MODE_INTERRUPT_SHIFT)) << FT5336_G_MODE_INTERRUPT_SHIFT;
+
+ /* Set interrupt polling mode in FT5336_GMODE_REG */
+ TS_IO_Write(DeviceAddr, FT5336_GMODE_REG, regValue);
+}
+
+/**
+ * @brief Get IT status from FT5336 interrupt status registers
+ * Should be called Following an EXTI coming to the MCU to know the detailed
+ * reason of the interrupt.
+ * @note : This feature is not applicable to FT5336.
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @retval TS interrupts status : always return 0 here
+ */
+uint8_t ft5336_TS_ITStatus(uint16_t DeviceAddr)
+{
+ /* Always return 0 as feature not applicable to FT5336 */
+ return 0;
+}
+
+/**
+ * @brief Clear IT status in FT5336 interrupt status clear registers
+ * Should be called Following an EXTI coming to the MCU.
+ * @note : This feature is not applicable to FT5336.
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @retval None
+ */
+void ft5336_TS_ClearIT(uint16_t DeviceAddr)
+{
+ /* Nothing to be done here for FT5336 */
+}
+
+/**** NEW FEATURES enabled when Multi-touch support is enabled ****/
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+
+/**
+ * @brief Get the last touch gesture identification (zoom, move up/down...).
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @param pGestureId : Pointer to get last touch gesture Identification.
+ * @retval None.
+ */
+void ft5336_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId)
+{
+ volatile uint8_t ucReadData = 0;
+
+ ucReadData = TS_IO_Read(DeviceAddr, FT5336_GEST_ID_REG);
+
+ * pGestureId = ucReadData;
+}
+
+/**
+ * @brief Get the touch detailed informations on touch number 'touchIdx' (0..1)
+ * This touch detailed information contains :
+ * - weight that was applied to this touch
+ * - sub-area of the touch in the touch panel
+ * - event of linked to the touch (press down, lift up, ...)
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @param touchIdx : Passed index of the touch (0..1) on which we want to get the
+ * detailed information.
+ * @param pWeight : Pointer to to get the weight information of 'touchIdx'.
+ * @param pArea : Pointer to to get the sub-area information of 'touchIdx'.
+ * @param pEvent : Pointer to to get the event information of 'touchIdx'.
+
+ * @retval None.
+ */
+void ft5336_TS_GetTouchInfo(uint16_t DeviceAddr,
+ uint32_t touchIdx,
+ uint32_t * pWeight,
+ uint32_t * pArea,
+ uint32_t * pEvent)
+{
+ volatile uint8_t ucReadData = 0;
+ uint8_t regAddressXHigh = 0;
+ uint8_t regAddressPWeight = 0;
+ uint8_t regAddressPMisc = 0;
+
+ if(touchIdx < ft5336_handle.currActiveTouchNb)
+ {
+ switch(touchIdx)
+ {
+ case 0 :
+ regAddressXHigh = FT5336_P1_XH_REG;
+ regAddressPWeight = FT5336_P1_WEIGHT_REG;
+ regAddressPMisc = FT5336_P1_MISC_REG;
+ break;
+
+ case 1 :
+ regAddressXHigh = FT5336_P2_XH_REG;
+ regAddressPWeight = FT5336_P2_WEIGHT_REG;
+ regAddressPMisc = FT5336_P2_MISC_REG;
+ break;
+
+ case 2 :
+ regAddressXHigh = FT5336_P3_XH_REG;
+ regAddressPWeight = FT5336_P3_WEIGHT_REG;
+ regAddressPMisc = FT5336_P3_MISC_REG;
+ break;
+
+ case 3 :
+ regAddressXHigh = FT5336_P4_XH_REG;
+ regAddressPWeight = FT5336_P4_WEIGHT_REG;
+ regAddressPMisc = FT5336_P4_MISC_REG;
+ break;
+
+ case 4 :
+ regAddressXHigh = FT5336_P5_XH_REG;
+ regAddressPWeight = FT5336_P5_WEIGHT_REG;
+ regAddressPMisc = FT5336_P5_MISC_REG;
+ break;
+
+ case 5 :
+ regAddressXHigh = FT5336_P6_XH_REG;
+ regAddressPWeight = FT5336_P6_WEIGHT_REG;
+ regAddressPMisc = FT5336_P6_MISC_REG;
+ break;
+
+ case 6 :
+ regAddressXHigh = FT5336_P7_XH_REG;
+ regAddressPWeight = FT5336_P7_WEIGHT_REG;
+ regAddressPMisc = FT5336_P7_MISC_REG;
+ break;
+
+ case 7 :
+ regAddressXHigh = FT5336_P8_XH_REG;
+ regAddressPWeight = FT5336_P8_WEIGHT_REG;
+ regAddressPMisc = FT5336_P8_MISC_REG;
+ break;
+
+ case 8 :
+ regAddressXHigh = FT5336_P9_XH_REG;
+ regAddressPWeight = FT5336_P9_WEIGHT_REG;
+ regAddressPMisc = FT5336_P9_MISC_REG;
+ break;
+
+ case 9 :
+ regAddressXHigh = FT5336_P10_XH_REG;
+ regAddressPWeight = FT5336_P10_WEIGHT_REG;
+ regAddressPMisc = FT5336_P10_MISC_REG;
+ break;
+
+ default :
+ break;
+
+ } /* end switch(touchIdx) */
+
+ /* Read Event Id of touch index */
+ ucReadData = TS_IO_Read(DeviceAddr, regAddressXHigh);
+ * pEvent = (ucReadData & FT5336_TOUCH_EVT_FLAG_MASK) >> FT5336_TOUCH_EVT_FLAG_SHIFT;
+
+ /* Read weight of touch index */
+ ucReadData = TS_IO_Read(DeviceAddr, regAddressPWeight);
+ * pWeight = (ucReadData & FT5336_TOUCH_WEIGHT_MASK) >> FT5336_TOUCH_WEIGHT_SHIFT;
+
+ /* Read area of touch index */
+ ucReadData = TS_IO_Read(DeviceAddr, regAddressPMisc);
+ * pArea = (ucReadData & FT5336_TOUCH_AREA_MASK) >> FT5336_TOUCH_AREA_SHIFT;
+
+ } /* of if(touchIdx < ft5336_handle.currActiveTouchNb) */
+}
+
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+/** @defgroup ft5336_Static_Function_Body
+ * @{
+ */
+
+/* Static functions bodies-----------------------------------------------*/
+
+
+/**
+ * @brief Return the status of I2C was initialized or not.
+ * @param None.
+ * @retval : I2C initialization status.
+ */
+static uint8_t ft5336_Get_I2C_InitializedStatus(void)
+{
+ return(ft5336_handle.i2cInitialized);
+}
+
+/**
+ * @brief I2C initialize if needed.
+ * @param None.
+ * @retval : None.
+ */
+static void ft5336_I2C_InitializeIfRequired(void)
+{
+ if(ft5336_Get_I2C_InitializedStatus() == FT5336_I2C_NOT_INITIALIZED)
+ {
+ /* Initialize TS IO BUS layer (I2C) */
+ TS_IO_Init();
+
+ /* Set state to initialized */
+ ft5336_handle.i2cInitialized = FT5336_I2C_INITIALIZED;
+ }
+}
+
+/**
+ * @brief Basic static configuration of TouchScreen
+ * @param DeviceAddr: FT5336 Device address for communication on I2C Bus.
+ * @retval Status FT5336_STATUS_OK or FT5336_STATUS_NOT_OK.
+ */
+static uint32_t ft5336_TS_Configure(uint16_t DeviceAddr)
+{
+ uint32_t status = FT5336_STATUS_OK;
+
+ /* Nothing special to be done for FT5336 */
+
+ return(status);
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/ft5336.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/ft5336.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,540 @@
+/**
+ ******************************************************************************
+ * @file ft5336.h
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 25-June-2015
+ * @brief This file contains all the functions prototypes for the
+ * ft5336.c Touch screen driver.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __FT5336_H
+#define __FT5336_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Set Multi-touch as supported */
+#if !defined(TS_MONO_TOUCH_SUPPORTED)
+#define TS_MULTI_TOUCH_SUPPORTED 1
+#endif /* TS_MONO_TOUCH_SUPPORTED */
+
+/* Includes ------------------------------------------------------------------*/
+#include "ts.h"
+
+/* Macros --------------------------------------------------------------------*/
+
+#if defined(FT5336_ENABLE_ASSERT)
+/* Assert activated */
+#define FT5336_ASSERT(__condition__) do { if(__condition__) \
+ { \
+ while(1); \
+ } \
+ }while(0)
+#else
+/* Assert not activated : macro has no effect */
+#define FT5336_ASSERT(__condition__) do { if(__condition__) \
+ { \
+ ; \
+ } \
+ }while(0)
+#endif /* FT5336_ENABLE_ASSERT == 1 */
+
+/** @typedef ft5336_handle_TypeDef
+ * ft5336 Handle definition.
+ */
+typedef struct
+{
+ uint8_t i2cInitialized;
+
+ /* field holding the current number of simultaneous active touches */
+ uint8_t currActiveTouchNb;
+
+ /* field holding the touch index currently managed */
+ uint8_t currActiveTouchIdx;
+
+} ft5336_handle_TypeDef;
+
+ /** @addtogroup BSP
+ * @{
+ */
+
+ /** @addtogroup Component
+ * @{
+ */
+
+ /** @defgroup FT5336
+ * @{
+ */
+
+ /* Exported types ------------------------------------------------------------*/
+
+ /** @defgroup FT5336_Exported_Types
+ * @{
+ */
+
+ /* Exported constants --------------------------------------------------------*/
+
+ /** @defgroup FT5336_Exported_Constants
+ * @{
+ */
+
+ /* I2C Slave address of touchscreen FocalTech FT5336 */
+#define FT5336_I2C_SLAVE_ADDRESS ((uint8_t)0x70)
+
+ /* Maximum border values of the touchscreen pad */
+#define FT5336_MAX_WIDTH ((uint16_t)480) /* Touchscreen pad max width */
+#define FT5336_MAX_HEIGHT ((uint16_t)272) /* Touchscreen pad max height */
+
+ /* Possible values of driver functions return status */
+#define FT5336_STATUS_OK ((uint8_t)0x00)
+#define FT5336_STATUS_NOT_OK ((uint8_t)0x01)
+
+ /* Possible values of global variable 'TS_I2C_Initialized' */
+#define FT5336_I2C_NOT_INITIALIZED ((uint8_t)0x00)
+#define FT5336_I2C_INITIALIZED ((uint8_t)0x01)
+
+ /* Max detectable simultaneous touches */
+#define FT5336_MAX_DETECTABLE_TOUCH ((uint8_t)0x05)
+
+ /**
+ * @brief : Definitions for FT5336 I2C register addresses on 8 bit
+ **/
+
+ /* Current mode register of the FT5336 (R/W) */
+#define FT5336_DEV_MODE_REG ((uint8_t)0x00)
+
+ /* Possible values of FT5336_DEV_MODE_REG */
+#define FT5336_DEV_MODE_WORKING ((uint8_t)0x00)
+#define FT5336_DEV_MODE_FACTORY ((uint8_t)0x04)
+
+#define FT5336_DEV_MODE_MASK ((uint8_t)0x07)
+#define FT5336_DEV_MODE_SHIFT ((uint8_t)0x04)
+
+ /* Gesture ID register */
+#define FT5336_GEST_ID_REG ((uint8_t)0x01)
+
+ /* Possible values of FT5336_GEST_ID_REG */
+#define FT5336_GEST_ID_NO_GESTURE ((uint8_t)0x00)
+#define FT5336_GEST_ID_MOVE_UP ((uint8_t)0x10)
+#define FT5336_GEST_ID_MOVE_RIGHT ((uint8_t)0x14)
+#define FT5336_GEST_ID_MOVE_DOWN ((uint8_t)0x18)
+#define FT5336_GEST_ID_MOVE_LEFT ((uint8_t)0x1C)
+#define FT5336_GEST_ID_SINGLE_CLICK ((uint8_t)0x20)
+#define FT5336_GEST_ID_DOUBLE_CLICK ((uint8_t)0x22)
+#define FT5336_GEST_ID_ROTATE_CLOCKWISE ((uint8_t)0x28)
+#define FT5336_GEST_ID_ROTATE_C_CLOCKWISE ((uint8_t)0x29)
+#define FT5336_GEST_ID_ZOOM_IN ((uint8_t)0x40)
+#define FT5336_GEST_ID_ZOOM_OUT ((uint8_t)0x49)
+
+ /* Touch Data Status register : gives number of active touch points (0..5) */
+#define FT5336_TD_STAT_REG ((uint8_t)0x02)
+
+ /* Values related to FT5336_TD_STAT_REG */
+#define FT5336_TD_STAT_MASK ((uint8_t)0x0F)
+#define FT5336_TD_STAT_SHIFT ((uint8_t)0x00)
+
+ /* Values Pn_XH and Pn_YH related */
+#define FT5336_TOUCH_EVT_FLAG_PRESS_DOWN ((uint8_t)0x00)
+#define FT5336_TOUCH_EVT_FLAG_LIFT_UP ((uint8_t)0x01)
+#define FT5336_TOUCH_EVT_FLAG_CONTACT ((uint8_t)0x02)
+#define FT5336_TOUCH_EVT_FLAG_NO_EVENT ((uint8_t)0x03)
+
+#define FT5336_TOUCH_EVT_FLAG_SHIFT ((uint8_t)0x06)
+#define FT5336_TOUCH_EVT_FLAG_MASK ((uint8_t)(3 << FT5336_TOUCH_EVT_FLAG_SHIFT))
+
+#define FT5336_TOUCH_POS_MSB_MASK ((uint8_t)0x0F)
+#define FT5336_TOUCH_POS_MSB_SHIFT ((uint8_t)0x00)
+
+ /* Values Pn_XL and Pn_YL related */
+#define FT5336_TOUCH_POS_LSB_MASK ((uint8_t)0xFF)
+#define FT5336_TOUCH_POS_LSB_SHIFT ((uint8_t)0x00)
+
+#define FT5336_P1_XH_REG ((uint8_t)0x03)
+#define FT5336_P1_XL_REG ((uint8_t)0x04)
+#define FT5336_P1_YH_REG ((uint8_t)0x05)
+#define FT5336_P1_YL_REG ((uint8_t)0x06)
+
+/* Touch Pressure register value (R) */
+#define FT5336_P1_WEIGHT_REG ((uint8_t)0x07)
+
+/* Values Pn_WEIGHT related */
+#define FT5336_TOUCH_WEIGHT_MASK ((uint8_t)0xFF)
+#define FT5336_TOUCH_WEIGHT_SHIFT ((uint8_t)0x00)
+
+/* Touch area register */
+#define FT5336_P1_MISC_REG ((uint8_t)0x08)
+
+/* Values related to FT5336_Pn_MISC_REG */
+#define FT5336_TOUCH_AREA_MASK ((uint8_t)(0x04 << 4))
+#define FT5336_TOUCH_AREA_SHIFT ((uint8_t)0x04)
+
+#define FT5336_P2_XH_REG ((uint8_t)0x09)
+#define FT5336_P2_XL_REG ((uint8_t)0x0A)
+#define FT5336_P2_YH_REG ((uint8_t)0x0B)
+#define FT5336_P2_YL_REG ((uint8_t)0x0C)
+#define FT5336_P2_WEIGHT_REG ((uint8_t)0x0D)
+#define FT5336_P2_MISC_REG ((uint8_t)0x0E)
+
+#define FT5336_P3_XH_REG ((uint8_t)0x0F)
+#define FT5336_P3_XL_REG ((uint8_t)0x10)
+#define FT5336_P3_YH_REG ((uint8_t)0x11)
+#define FT5336_P3_YL_REG ((uint8_t)0x12)
+#define FT5336_P3_WEIGHT_REG ((uint8_t)0x13)
+#define FT5336_P3_MISC_REG ((uint8_t)0x14)
+
+#define FT5336_P4_XH_REG ((uint8_t)0x15)
+#define FT5336_P4_XL_REG ((uint8_t)0x16)
+#define FT5336_P4_YH_REG ((uint8_t)0x17)
+#define FT5336_P4_YL_REG ((uint8_t)0x18)
+#define FT5336_P4_WEIGHT_REG ((uint8_t)0x19)
+#define FT5336_P4_MISC_REG ((uint8_t)0x1A)
+
+#define FT5336_P5_XH_REG ((uint8_t)0x1B)
+#define FT5336_P5_XL_REG ((uint8_t)0x1C)
+#define FT5336_P5_YH_REG ((uint8_t)0x1D)
+#define FT5336_P5_YL_REG ((uint8_t)0x1E)
+#define FT5336_P5_WEIGHT_REG ((uint8_t)0x1F)
+#define FT5336_P5_MISC_REG ((uint8_t)0x20)
+
+#define FT5336_P6_XH_REG ((uint8_t)0x21)
+#define FT5336_P6_XL_REG ((uint8_t)0x22)
+#define FT5336_P6_YH_REG ((uint8_t)0x23)
+#define FT5336_P6_YL_REG ((uint8_t)0x24)
+#define FT5336_P6_WEIGHT_REG ((uint8_t)0x25)
+#define FT5336_P6_MISC_REG ((uint8_t)0x26)
+
+#define FT5336_P7_XH_REG ((uint8_t)0x27)
+#define FT5336_P7_XL_REG ((uint8_t)0x28)
+#define FT5336_P7_YH_REG ((uint8_t)0x29)
+#define FT5336_P7_YL_REG ((uint8_t)0x2A)
+#define FT5336_P7_WEIGHT_REG ((uint8_t)0x2B)
+#define FT5336_P7_MISC_REG ((uint8_t)0x2C)
+
+#define FT5336_P8_XH_REG ((uint8_t)0x2D)
+#define FT5336_P8_XL_REG ((uint8_t)0x2E)
+#define FT5336_P8_YH_REG ((uint8_t)0x2F)
+#define FT5336_P8_YL_REG ((uint8_t)0x30)
+#define FT5336_P8_WEIGHT_REG ((uint8_t)0x31)
+#define FT5336_P8_MISC_REG ((uint8_t)0x32)
+
+#define FT5336_P9_XH_REG ((uint8_t)0x33)
+#define FT5336_P9_XL_REG ((uint8_t)0x34)
+#define FT5336_P9_YH_REG ((uint8_t)0x35)
+#define FT5336_P9_YL_REG ((uint8_t)0x36)
+#define FT5336_P9_WEIGHT_REG ((uint8_t)0x37)
+#define FT5336_P9_MISC_REG ((uint8_t)0x38)
+
+#define FT5336_P10_XH_REG ((uint8_t)0x39)
+#define FT5336_P10_XL_REG ((uint8_t)0x3A)
+#define FT5336_P10_YH_REG ((uint8_t)0x3B)
+#define FT5336_P10_YL_REG ((uint8_t)0x3C)
+#define FT5336_P10_WEIGHT_REG ((uint8_t)0x3D)
+#define FT5336_P10_MISC_REG ((uint8_t)0x3E)
+
+ /* Threshold for touch detection */
+#define FT5336_TH_GROUP_REG ((uint8_t)0x80)
+
+ /* Values FT5336_TH_GROUP_REG : threshold related */
+#define FT5336_THRESHOLD_MASK ((uint8_t)0xFF)
+#define FT5336_THRESHOLD_SHIFT ((uint8_t)0x00)
+
+ /* Filter function coefficients */
+#define FT5336_TH_DIFF_REG ((uint8_t)0x85)
+
+ /* Control register */
+#define FT5336_CTRL_REG ((uint8_t)0x86)
+
+ /* Values related to FT5336_CTRL_REG */
+
+ /* Will keep the Active mode when there is no touching */
+#define FT5336_CTRL_KEEP_ACTIVE_MODE ((uint8_t)0x00)
+
+ /* Switching from Active mode to Monitor mode automatically when there is no touching */
+#define FT5336_CTRL_KEEP_AUTO_SWITCH_MONITOR_MODE ((uint8_t)0x01
+
+ /* The time period of switching from Active mode to Monitor mode when there is no touching */
+#define FT5336_TIMEENTERMONITOR_REG ((uint8_t)0x87)
+
+ /* Report rate in Active mode */
+#define FT5336_PERIODACTIVE_REG ((uint8_t)0x88)
+
+ /* Report rate in Monitor mode */
+#define FT5336_PERIODMONITOR_REG ((uint8_t)0x89)
+
+ /* The value of the minimum allowed angle while Rotating gesture mode */
+#define FT5336_RADIAN_VALUE_REG ((uint8_t)0x91)
+
+ /* Maximum offset while Moving Left and Moving Right gesture */
+#define FT5336_OFFSET_LEFT_RIGHT_REG ((uint8_t)0x92)
+
+ /* Maximum offset while Moving Up and Moving Down gesture */
+#define FT5336_OFFSET_UP_DOWN_REG ((uint8_t)0x93)
+
+ /* Minimum distance while Moving Left and Moving Right gesture */
+#define FT5336_DISTANCE_LEFT_RIGHT_REG ((uint8_t)0x94)
+
+ /* Minimum distance while Moving Up and Moving Down gesture */
+#define FT5336_DISTANCE_UP_DOWN_REG ((uint8_t)0x95)
+
+ /* Maximum distance while Zoom In and Zoom Out gesture */
+#define FT5336_DISTANCE_ZOOM_REG ((uint8_t)0x96)
+
+ /* High 8-bit of LIB Version info */
+#define FT5336_LIB_VER_H_REG ((uint8_t)0xA1)
+
+ /* Low 8-bit of LIB Version info */
+#define FT5336_LIB_VER_L_REG ((uint8_t)0xA2)
+
+ /* Chip Selecting */
+#define FT5336_CIPHER_REG ((uint8_t)0xA3)
+
+ /* Interrupt mode register (used when in interrupt mode) */
+#define FT5336_GMODE_REG ((uint8_t)0xA4)
+
+#define FT5336_G_MODE_INTERRUPT_MASK ((uint8_t)0x03)
+#define FT5336_G_MODE_INTERRUPT_SHIFT ((uint8_t)0x00)
+
+ /* Possible values of FT5336_GMODE_REG */
+#define FT5336_G_MODE_INTERRUPT_POLLING ((uint8_t)0x00)
+#define FT5336_G_MODE_INTERRUPT_TRIGGER ((uint8_t)0x01)
+
+ /* Current power mode the FT5336 system is in (R) */
+#define FT5336_PWR_MODE_REG ((uint8_t)0xA5)
+
+ /* FT5336 firmware version */
+#define FT5336_FIRMID_REG ((uint8_t)0xA6)
+
+ /* FT5336 Chip identification register */
+#define FT5336_CHIP_ID_REG ((uint8_t)0xA8)
+
+ /* Possible values of FT5336_CHIP_ID_REG */
+#define FT5336_ID_VALUE ((uint8_t)0x51)
+
+ /* Release code version */
+#define FT5336_RELEASE_CODE_ID_REG ((uint8_t)0xAF)
+
+ /* Current operating mode the FT5336 system is in (R) */
+#define FT5336_STATE_REG ((uint8_t)0xBC)
+
+ /**
+ * @}
+ */
+
+ /* Exported macro ------------------------------------------------------------*/
+
+ /** @defgroup ft5336_Exported_Macros
+ * @{
+ */
+
+ /* Exported functions --------------------------------------------------------*/
+
+ /** @defgroup ft5336_Exported_Functions
+ * @{
+ */
+
+ /**
+ * @brief ft5336 Control functions
+ */
+
+
+/**
+ * @brief Initialize the ft5336 communication bus
+ * from MCU to FT5336 : ie I2C channel initialization (if required).
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @retval None
+ */
+void ft5336_Init(uint16_t DeviceAddr);
+
+/**
+ * @brief Software Reset the ft5336.
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @retval None
+ */
+void ft5336_Reset(uint16_t DeviceAddr);
+
+/**
+ * @brief Read the ft5336 device ID, pre initialize I2C in case of need to be
+ * able to read the FT5336 device ID, and verify this is a FT5336.
+ * @param DeviceAddr: I2C FT5336 Slave address.
+ * @retval The Device ID (two bytes).
+ */
+uint16_t ft5336_ReadID(uint16_t DeviceAddr);
+
+/**
+ * @brief Configures the touch Screen IC device to start detecting touches
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address).
+ * @retval None.
+ */
+void ft5336_TS_Start(uint16_t DeviceAddr);
+
+/**
+ * @brief Return if there is touches detected or not.
+ * Try to detect new touches and forget the old ones (reset internal global
+ * variables).
+ * @param DeviceAddr: Device address on communication Bus.
+ * @retval : Number of active touches detected (can be 0, 1 or 2).
+ */
+uint8_t ft5336_TS_DetectTouch(uint16_t DeviceAddr);
+
+/**
+ * @brief Get the touch screen X and Y positions values
+ * Manage multi touch thanks to touch Index global
+ * variable 'ft5336_handle.currActiveTouchIdx'.
+ * @param DeviceAddr: Device address on communication Bus.
+ * @param X: Pointer to X position value
+ * @param Y: Pointer to Y position value
+ * @retval None.
+ */
+void ft5336_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y);
+
+/**
+ * @brief Configure the FT5336 device to generate IT on given INT pin
+ * connected to MCU as EXTI.
+ * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
+ * @retval None
+ */
+void ft5336_TS_EnableIT(uint16_t DeviceAddr);
+
+/**
+ * @brief Configure the FT5336 device to stop generating IT on the given INT pin
+ * connected to MCU as EXTI.
+ * @param DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
+ * @retval None
+ */
+void ft5336_TS_DisableIT(uint16_t DeviceAddr);
+
+/**
+ * @brief Get IT status from FT5336 interrupt status registers
+ * Should be called Following an EXTI coming to the MCU to know the detailed
+ * reason of the interrupt.
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @retval TS interrupts status
+ */
+uint8_t ft5336_TS_ITStatus (uint16_t DeviceAddr);
+
+/**
+ * @brief Clear IT status in FT5336 interrupt status clear registers
+ * Should be called Following an EXTI coming to the MCU.
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @retval TS interrupts status
+ */
+void ft5336_TS_ClearIT (uint16_t DeviceAddr);
+
+/**** NEW FEATURES enabled when Multi-touch support is enabled ****/
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+
+/**
+ * @brief Get the last touch gesture identification (zoom, move up/down...).
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @param pGestureId : Pointer to get last touch gesture Identification.
+ * @retval None.
+ */
+void ft5336_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId);
+
+/**
+ * @brief Get the touch detailed informations on touch number 'touchIdx' (0..1)
+ * This touch detailed information contains :
+ * - weight that was applied to this touch
+ * - sub-area of the touch in the touch panel
+ * - event of linked to the touch (press down, lift up, ...)
+ * @param DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @param touchIdx : Passed index of the touch (0..1) on which we want to get the
+ * detailed information.
+ * @param pWeight : Pointer to to get the weight information of 'touchIdx'.
+ * @param pArea : Pointer to to get the sub-area information of 'touchIdx'.
+ * @param pEvent : Pointer to to get the event information of 'touchIdx'.
+
+ * @retval None.
+ */
+void ft5336_TS_GetTouchInfo(uint16_t DeviceAddr,
+ uint32_t touchIdx,
+ uint32_t * pWeight,
+ uint32_t * pArea,
+ uint32_t * pEvent);
+
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+/* Imported TS IO functions --------------------------------------------------------*/
+
+/** @defgroup ft5336_Imported_Functions
+ * @{
+ */
+
+/* TouchScreen (TS) external IO functions */
+extern void TS_IO_Init(void);
+extern void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
+extern uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg);
+extern void TS_IO_Delay(uint32_t Delay);
+
+ /**
+ * @}
+ */
+
+ /* Imported global variables --------------------------------------------------------*/
+
+ /** @defgroup ft5336_Imported_Globals
+ * @{
+ */
+
+
+/* Touch screen driver structure */
+extern TS_DrvTypeDef ft5336_ts_drv;
+
+ /**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __FT5336_H */
+
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/rk043fn48h.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/rk043fn48h.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,121 @@
+/**
+ ******************************************************************************
+ * @file rk043fn48h.h
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 25-June-2015
+ * @brief This file contains all the constants parameters for the RK043FN48H-CT672B
+ * LCD component.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __RK043FN48H_H
+#define __RK043FN48H_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+
+/** @addtogroup BSP
+ * @{
+ */
+
+/** @addtogroup Components
+ * @{
+ */
+
+/** @addtogroup rk043fn48h
+ * @{
+ */
+
+/** @defgroup RK043FN48H_Exported_Types
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @defgroup RK043FN48H_Exported_Constants
+ * @{
+ */
+
+/**
+ * @brief RK043FN48H Size
+ */
+#define RK043FN48H_WIDTH ((uint16_t)480) /* LCD PIXEL WIDTH */
+#define RK043FN48H_HEIGHT ((uint16_t)272) /* LCD PIXEL HEIGHT */
+
+/**
+ * @brief RK043FN48H Timing
+ */
+#define RK043FN48H_HSYNC ((uint16_t)41) /* Horizontal synchronization */
+#define RK043FN48H_HBP ((uint16_t)13) /* Horizontal back porch */
+#define RK043FN48H_HFP ((uint16_t)32) /* Horizontal front porch */
+#define RK043FN48H_VSYNC ((uint16_t)10) /* Vertical synchronization */
+#define RK043FN48H_VBP ((uint16_t)2) /* Vertical back porch */
+#define RK043FN48H_VFP ((uint16_t)2) /* Vertical front porch */
+
+/**
+ * @brief RK043FN48H frequency divider
+ */
+#define RK043FN48H_FREQUENCY_DIVIDER 5 /* LCD Frequency divider */
+/**
+ * @}
+ */
+
+/** @defgroup RK043FN48H_Exported_Functions
+ * @{
+ */
+
+/**
+ * @}
+ */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __RK043FN48H_H */
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/stm32746g_discovery.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/stm32746g_discovery.c Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,903 @@
+/**
+ ******************************************************************************
+ * @file stm32746g_discovery.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 25-June-2015
+ * @brief This file provides a set of firmware functions to manage LEDs,
+ * push-buttons and COM ports available on STM32746G-Discovery
+ * board(MB1191) from STMicroelectronics.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32746g_discovery.h"
+
+// mbed function to replace HAL_Delay function
+void wait_ms(int ms);
+
+/** @addtogroup BSP
+ * @{
+ */
+
+/** @addtogroup STM32746G_DISCOVERY
+ * @{
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL STM32746G_DISCOVERY_LOW_LEVEL
+ * @{
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_TypesDefinitions STM32746G_DISCOVERY_LOW_LEVEL Private Types Definitions
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_Defines STM32746G_DISCOVERY_LOW_LEVEL Private Defines
+ * @{
+ */
+/**
+ * @brief STM32746G DISCOVERY BSP Driver version number V1.0.0
+ */
+#define __STM32746G_DISCO_BSP_VERSION_MAIN (0x01) /*!< [31:24] main version */
+#define __STM32746G_DISCO_BSP_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */
+#define __STM32746G_DISCO_BSP_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */
+#define __STM32746G_DISCO_BSP_VERSION_RC (0x00) /*!< [7:0] release candidate */
+#define __STM32746G_DISCO_BSP_VERSION ((__STM32746G_DISCO_BSP_VERSION_MAIN << 24)\
+ |(__STM32746G_DISCO_BSP_VERSION_SUB1 << 16)\
+ |(__STM32746G_DISCO_BSP_VERSION_SUB2 << 8 )\
+ |(__STM32746G_DISCO_BSP_VERSION_RC))
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_Macros STM32746G_DISCOVERY_LOW_LEVEL Private Macros
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_Variables STM32746G_DISCOVERY_LOW_LEVEL Private Variables
+ * @{
+ */
+
+const uint32_t GPIO_PIN[LEDn] = {LED1_PIN};
+
+GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT,
+ TAMPER_BUTTON_GPIO_PORT,
+ KEY_BUTTON_GPIO_PORT};
+
+const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN,
+ TAMPER_BUTTON_PIN,
+ KEY_BUTTON_PIN};
+
+const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn,
+ TAMPER_BUTTON_EXTI_IRQn,
+ KEY_BUTTON_EXTI_IRQn};
+
+USART_TypeDef* COM_USART[COMn] = {DISCOVERY_COM1};
+
+GPIO_TypeDef* COM_TX_PORT[COMn] = {DISCOVERY_COM1_TX_GPIO_PORT};
+
+GPIO_TypeDef* COM_RX_PORT[COMn] = {DISCOVERY_COM1_RX_GPIO_PORT};
+
+const uint16_t COM_TX_PIN[COMn] = {DISCOVERY_COM1_TX_PIN};
+
+const uint16_t COM_RX_PIN[COMn] = {DISCOVERY_COM1_RX_PIN};
+
+const uint16_t COM_TX_AF[COMn] = {DISCOVERY_COM1_TX_AF};
+
+const uint16_t COM_RX_AF[COMn] = {DISCOVERY_COM1_RX_AF};
+
+static I2C_HandleTypeDef hI2cAudioHandler = {0};
+static I2C_HandleTypeDef hI2cExtHandler = {0};
+
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_FunctionPrototypes STM32746G_DISCOVERY_LOW_LEVEL Private Function Prototypes
+ * @{
+ */
+static void I2Cx_MspInit(I2C_HandleTypeDef *i2c_handler);
+static void I2Cx_Init(I2C_HandleTypeDef *i2c_handler);
+
+static HAL_StatusTypeDef I2Cx_ReadMultiple(I2C_HandleTypeDef *i2c_handler, uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length);
+static HAL_StatusTypeDef I2Cx_WriteMultiple(I2C_HandleTypeDef *i2c_handler, uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length);
+static HAL_StatusTypeDef I2Cx_IsDeviceReady(I2C_HandleTypeDef *i2c_handler, uint16_t DevAddress, uint32_t Trials);
+static void I2Cx_Error(I2C_HandleTypeDef *i2c_handler, uint8_t Addr);
+
+/* AUDIO IO functions */
+void AUDIO_IO_Init(void);
+void AUDIO_IO_DeInit(void);
+void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value);
+uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg);
+void AUDIO_IO_Delay(uint32_t Delay);
+
+/* TOUCHSCREEN IO functions */
+void TS_IO_Init(void);
+void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
+uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg);
+void TS_IO_Delay(uint32_t Delay);
+
+/* CAMERA IO functions */
+void CAMERA_IO_Init(void);
+void CAMERA_Delay(uint32_t Delay);
+void CAMERA_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
+uint8_t CAMERA_IO_Read(uint8_t Addr, uint8_t Reg);
+
+/* I2C EEPROM IO function */
+void EEPROM_IO_Init(void);
+HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
+HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
+HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials);
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Functions STM32746G_DISCOVERY_LOW_LEVELSTM32746G_DISCOVERY_LOW_LEVEL Exported Functions
+ * @{
+ */
+
+ /**
+ * @brief This method returns the STM32746G DISCOVERY BSP Driver revision
+ * @retval version: 0xXYZR (8bits for each decimal, R for RC)
+ */
+uint32_t BSP_GetVersion(void)
+{
+ return __STM32746G_DISCO_BSP_VERSION;
+}
+
+/**
+ * @brief Configures LED on GPIO.
+ * @param Led: LED to be configured.
+ * This parameter can be one of the following values:
+ * @arg LED1
+ * @retval None
+ */
+void BSP_LED_Init(Led_TypeDef Led)
+{
+ GPIO_InitTypeDef gpio_init_structure;
+ GPIO_TypeDef* gpio_led;
+
+ if (Led == DISCO_LED1)
+ {
+ gpio_led = LED1_GPIO_PORT;
+ /* Enable the GPIO_LED clock */
+ LED1_GPIO_CLK_ENABLE();
+
+ /* Configure the GPIO_LED pin */
+ gpio_init_structure.Pin = GPIO_PIN[Led];
+ gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP;
+ gpio_init_structure.Pull = GPIO_PULLUP;
+ gpio_init_structure.Speed = GPIO_SPEED_HIGH;
+
+ HAL_GPIO_Init(gpio_led, &gpio_init_structure);
+
+ /* By default, turn off LED */
+ HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_RESET);
+ }
+}
+
+/**
+ * @brief DeInit LEDs.
+ * @param Led: LED to be configured.
+ * This parameter can be one of the following values:
+ * @arg LED1
+ * @note Led DeInit does not disable the GPIO clock
+ * @retval None
+ */
+void BSP_LED_DeInit(Led_TypeDef Led)
+{
+ GPIO_InitTypeDef gpio_init_structure;
+ GPIO_TypeDef* gpio_led;
+
+ if (Led == DISCO_LED1)
+ {
+ gpio_led = LED1_GPIO_PORT;
+ /* Turn off LED */
+ HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_RESET);
+ /* Configure the GPIO_LED pin */
+ gpio_init_structure.Pin = GPIO_PIN[Led];
+ HAL_GPIO_DeInit(gpio_led, gpio_init_structure.Pin);
+ }
+}
+
+/**
+ * @brief Turns selected LED On.
+ * @param Led: LED to be set on
+ * This parameter can be one of the following values:
+ * @arg LED1
+ * @retval None
+ */
+void BSP_LED_On(Led_TypeDef Led)
+{
+ GPIO_TypeDef* gpio_led;
+
+ if (Led == DISCO_LED1) /* Switch On LED connected to GPIO */
+ {
+ gpio_led = LED1_GPIO_PORT;
+ HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_SET);
+ }
+}
+
+/**
+ * @brief Turns selected LED Off.
+ * @param Led: LED to be set off
+ * This parameter can be one of the following values:
+ * @arg LED1
+ * @retval None
+ */
+void BSP_LED_Off(Led_TypeDef Led)
+{
+ GPIO_TypeDef* gpio_led;
+
+ if (Led == DISCO_LED1) /* Switch Off LED connected to GPIO */
+ {
+ gpio_led = LED1_GPIO_PORT;
+ HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_RESET);
+ }
+}
+
+/**
+ * @brief Toggles the selected LED.
+ * @param Led: LED to be toggled
+ * This parameter can be one of the following values:
+ * @arg LED1
+ * @retval None
+ */
+void BSP_LED_Toggle(Led_TypeDef Led)
+{
+ GPIO_TypeDef* gpio_led;
+
+ if (Led == DISCO_LED1) /* Toggle LED connected to GPIO */
+ {
+ gpio_led = LED1_GPIO_PORT;
+ HAL_GPIO_TogglePin(gpio_led, GPIO_PIN[Led]);
+ }
+}
+
+/**
+ * @brief Configures button GPIO and EXTI Line.
+ * @param Button: Button to be configured
+ * This parameter can be one of the following values:
+ * @arg BUTTON_WAKEUP: Wakeup Push Button
+ * @arg BUTTON_TAMPER: Tamper Push Button
+ * @arg BUTTON_KEY: Key Push Button
+ * @param ButtonMode: Button mode
+ * This parameter can be one of the following values:
+ * @arg BUTTON_MODE_GPIO: Button will be used as simple IO
+ * @arg BUTTON_MODE_EXTI: Button will be connected to EXTI line
+ * with interrupt generation capability
+ * @note On STM32746G-Discovery board, the three buttons (Wakeup, Tamper and key buttons)
+ * are mapped on the same push button named "User"
+ * on the board serigraphy.
+ * @retval None
+ */
+void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode)
+{
+ GPIO_InitTypeDef gpio_init_structure;
+
+ /* Enable the BUTTON clock */
+ BUTTONx_GPIO_CLK_ENABLE(Button);
+
+ if(ButtonMode == BUTTON_MODE_GPIO)
+ {
+ /* Configure Button pin as input */
+ gpio_init_structure.Pin = BUTTON_PIN[Button];
+ gpio_init_structure.Mode = GPIO_MODE_INPUT;
+ gpio_init_structure.Pull = GPIO_NOPULL;
+ gpio_init_structure.Speed = GPIO_SPEED_FAST;
+ HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure);
+ }
+
+ if(ButtonMode == BUTTON_MODE_EXTI)
+ {
+ /* Configure Button pin as input with External interrupt */
+ gpio_init_structure.Pin = BUTTON_PIN[Button];
+ gpio_init_structure.Pull = GPIO_NOPULL;
+ gpio_init_structure.Speed = GPIO_SPEED_FAST;
+
+ if(Button != BUTTON_WAKEUP)
+ {
+ gpio_init_structure.Mode = GPIO_MODE_IT_FALLING;
+ }
+ else
+ {
+ gpio_init_structure.Mode = GPIO_MODE_IT_RISING;
+ }
+
+ HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure);
+
+ /* Enable and set Button EXTI Interrupt to the lowest priority */
+ HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0x00);
+ HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button]));
+ }
+}
+
+/**
+ * @brief Push Button DeInit.
+ * @param Button: Button to be configured
+ * This parameter can be one of the following values:
+ * @arg BUTTON_WAKEUP: Wakeup Push Button
+ * @arg BUTTON_TAMPER: Tamper Push Button
+ * @arg BUTTON_KEY: Key Push Button
+ * @note On STM32746G-Discovery board, the three buttons (Wakeup, Tamper and key buttons)
+ * are mapped on the same push button named "User"
+ * on the board serigraphy.
+ * @note PB DeInit does not disable the GPIO clock
+ * @retval None
+ */
+void BSP_PB_DeInit(Button_TypeDef Button)
+{
+ GPIO_InitTypeDef gpio_init_structure;
+
+ gpio_init_structure.Pin = BUTTON_PIN[Button];
+ HAL_NVIC_DisableIRQ((IRQn_Type)(BUTTON_IRQn[Button]));
+ HAL_GPIO_DeInit(BUTTON_PORT[Button], gpio_init_structure.Pin);
+}
+
+
+/**
+ * @brief Returns the selected button state.
+ * @param Button: Button to be checked
+ * This parameter can be one of the following values:
+ * @arg BUTTON_WAKEUP: Wakeup Push Button
+ * @arg BUTTON_TAMPER: Tamper Push Button
+ * @arg BUTTON_KEY: Key Push Button
+ * @note On STM32746G-Discovery board, the three buttons (Wakeup, Tamper and key buttons)
+ * are mapped on the same push button named "User"
+ * on the board serigraphy.
+ * @retval The Button GPIO pin value
+ */
+uint32_t BSP_PB_GetState(Button_TypeDef Button)
+{
+ return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]);
+}
+
+/**
+ * @brief Configures COM port.
+ * @param COM: COM port to be configured.
+ * This parameter can be one of the following values:
+ * @arg COM1
+ * @arg COM2
+ * @param huart: Pointer to a UART_HandleTypeDef structure that contains the
+ * configuration information for the specified USART peripheral.
+ * @retval None
+ */
+void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *huart)
+{
+ GPIO_InitTypeDef gpio_init_structure;
+
+ /* Enable GPIO clock */
+ DISCOVERY_COMx_TX_GPIO_CLK_ENABLE(COM);
+ DISCOVERY_COMx_RX_GPIO_CLK_ENABLE(COM);
+
+ /* Enable USART clock */
+ DISCOVERY_COMx_CLK_ENABLE(COM);
+
+ /* Configure USART Tx as alternate function */
+ gpio_init_structure.Pin = COM_TX_PIN[COM];
+ gpio_init_structure.Mode = GPIO_MODE_AF_PP;
+ gpio_init_structure.Speed = GPIO_SPEED_FAST;
+ gpio_init_structure.Pull = GPIO_PULLUP;
+ gpio_init_structure.Alternate = COM_TX_AF[COM];
+ HAL_GPIO_Init(COM_TX_PORT[COM], &gpio_init_structure);
+
+ /* Configure USART Rx as alternate function */
+ gpio_init_structure.Pin = COM_RX_PIN[COM];
+ gpio_init_structure.Mode = GPIO_MODE_AF_PP;
+ gpio_init_structure.Alternate = COM_RX_AF[COM];
+ HAL_GPIO_Init(COM_RX_PORT[COM], &gpio_init_structure);
+
+ /* USART configuration */
+ huart->Instance = COM_USART[COM];
+ HAL_UART_Init(huart);
+}
+
+/**
+ * @brief DeInit COM port.
+ * @param COM: COM port to be configured.
+ * This parameter can be one of the following values:
+ * @arg COM1
+ * @arg COM2
+ * @param huart: Pointer to a UART_HandleTypeDef structure that contains the
+ * configuration information for the specified USART peripheral.
+ * @retval None
+ */
+void BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart)
+{
+ /* USART configuration */
+ huart->Instance = COM_USART[COM];
+ HAL_UART_DeInit(huart);
+
+ /* Enable USART clock */
+ DISCOVERY_COMx_CLK_DISABLE(COM);
+
+ /* DeInit GPIO pins can be done in the application
+ (by surcharging this __weak function) */
+
+ /* GPIO pins clock, DMA clock can be shut down in the application
+ by surcharging this __weak function */
+}
+
+/*******************************************************************************
+ BUS OPERATIONS
+*******************************************************************************/
+
+/******************************* I2C Routines *********************************/
+/**
+ * @brief Initializes I2C MSP.
+ * @param i2c_handler : I2C handler
+ * @retval None
+ */
+static void I2Cx_MspInit(I2C_HandleTypeDef *i2c_handler)
+{
+ GPIO_InitTypeDef gpio_init_structure;
+
+ if (i2c_handler == (I2C_HandleTypeDef*)(&hI2cAudioHandler))
+ {
+ /* AUDIO and LCD I2C MSP init */
+
+ /*** Configure the GPIOs ***/
+ /* Enable GPIO clock */
+ DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_CLK_ENABLE();
+
+ /* Configure I2C Tx as alternate function */
+ gpio_init_structure.Pin = DISCOVERY_AUDIO_I2Cx_SCL_PIN;
+ gpio_init_structure.Mode = GPIO_MODE_AF_OD;
+ gpio_init_structure.Pull = GPIO_NOPULL;
+ gpio_init_structure.Speed = GPIO_SPEED_FAST;
+ gpio_init_structure.Alternate = DISCOVERY_AUDIO_I2Cx_SCL_SDA_AF;
+ HAL_GPIO_Init(DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure);
+
+ /* Configure I2C Rx as alternate function */
+ gpio_init_structure.Pin = DISCOVERY_AUDIO_I2Cx_SDA_PIN;
+ HAL_GPIO_Init(DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure);
+
+ /*** Configure the I2C peripheral ***/
+ /* Enable I2C clock */
+ DISCOVERY_AUDIO_I2Cx_CLK_ENABLE();
+
+ /* Force the I2C peripheral clock reset */
+ DISCOVERY_AUDIO_I2Cx_FORCE_RESET();
+
+ /* Release the I2C peripheral clock reset */
+ DISCOVERY_AUDIO_I2Cx_RELEASE_RESET();
+
+ /* Enable and set I2Cx Interrupt to a lower priority */
+ HAL_NVIC_SetPriority(DISCOVERY_AUDIO_I2Cx_EV_IRQn, 0x05, 0);
+ HAL_NVIC_EnableIRQ(DISCOVERY_AUDIO_I2Cx_EV_IRQn);
+
+ /* Enable and set I2Cx Interrupt to a lower priority */
+ HAL_NVIC_SetPriority(DISCOVERY_AUDIO_I2Cx_ER_IRQn, 0x05, 0);
+ HAL_NVIC_EnableIRQ(DISCOVERY_AUDIO_I2Cx_ER_IRQn);
+ }
+ else
+ {
+ /* External, camera and Arduino connector I2C MSP init */
+
+ /*** Configure the GPIOs ***/
+ /* Enable GPIO clock */
+ DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_CLK_ENABLE();
+
+ /* Configure I2C Tx as alternate function */
+ gpio_init_structure.Pin = DISCOVERY_EXT_I2Cx_SCL_PIN;
+ gpio_init_structure.Mode = GPIO_MODE_AF_OD;
+ gpio_init_structure.Pull = GPIO_NOPULL;
+ gpio_init_structure.Speed = GPIO_SPEED_FAST;
+ gpio_init_structure.Alternate = DISCOVERY_EXT_I2Cx_SCL_SDA_AF;
+ HAL_GPIO_Init(DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure);
+
+ /* Configure I2C Rx as alternate function */
+ gpio_init_structure.Pin = DISCOVERY_EXT_I2Cx_SDA_PIN;
+ HAL_GPIO_Init(DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure);
+
+ /*** Configure the I2C peripheral ***/
+ /* Enable I2C clock */
+ DISCOVERY_EXT_I2Cx_CLK_ENABLE();
+
+ /* Force the I2C peripheral clock reset */
+ DISCOVERY_EXT_I2Cx_FORCE_RESET();
+
+ /* Release the I2C peripheral clock reset */
+ DISCOVERY_EXT_I2Cx_RELEASE_RESET();
+
+ /* Enable and set I2Cx Interrupt to a lower priority */
+ HAL_NVIC_SetPriority(DISCOVERY_EXT_I2Cx_EV_IRQn, 0x05, 0);
+ HAL_NVIC_EnableIRQ(DISCOVERY_EXT_I2Cx_EV_IRQn);
+
+ /* Enable and set I2Cx Interrupt to a lower priority */
+ HAL_NVIC_SetPriority(DISCOVERY_EXT_I2Cx_ER_IRQn, 0x05, 0);
+ HAL_NVIC_EnableIRQ(DISCOVERY_EXT_I2Cx_ER_IRQn);
+ }
+}
+
+/**
+ * @brief Initializes I2C HAL.
+ * @param i2c_handler : I2C handler
+ * @retval None
+ */
+static void I2Cx_Init(I2C_HandleTypeDef *i2c_handler)
+{
+ if(HAL_I2C_GetState(i2c_handler) == HAL_I2C_STATE_RESET)
+ {
+ if (i2c_handler == (I2C_HandleTypeDef*)(&hI2cAudioHandler))
+ {
+ /* Audio and LCD I2C configuration */
+ i2c_handler->Instance = DISCOVERY_AUDIO_I2Cx;
+ }
+ else
+ {
+ /* External, camera and Arduino connector I2C configuration */
+ i2c_handler->Instance = DISCOVERY_EXT_I2Cx;
+ }
+ i2c_handler->Init.Timing = DISCOVERY_I2Cx_TIMING;
+ i2c_handler->Init.OwnAddress1 = 0;
+ i2c_handler->Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
+ i2c_handler->Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
+ i2c_handler->Init.OwnAddress2 = 0;
+ i2c_handler->Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
+ i2c_handler->Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
+
+ /* Init the I2C */
+ I2Cx_MspInit(i2c_handler);
+ HAL_I2C_Init(i2c_handler);
+ }
+}
+
+/**
+ * @brief Reads multiple data.
+ * @param i2c_handler : I2C handler
+ * @param Addr: I2C address
+ * @param Reg: Reg address
+ * @param MemAddress: Memory address
+ * @param Buffer: Pointer to data buffer
+ * @param Length: Length of the data
+ * @retval Number of read data
+ */
+static HAL_StatusTypeDef I2Cx_ReadMultiple(I2C_HandleTypeDef *i2c_handler,
+ uint8_t Addr,
+ uint16_t Reg,
+ uint16_t MemAddress,
+ uint8_t *Buffer,
+ uint16_t Length)
+{
+ HAL_StatusTypeDef status = HAL_OK;
+
+ status = HAL_I2C_Mem_Read(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000);
+
+ /* Check the communication status */
+ if(status != HAL_OK)
+ {
+ /* I2C error occurred */
+ I2Cx_Error(i2c_handler, Addr);
+ }
+ return status;
+}
+
+/**
+ * @brief Writes a value in a register of the device through BUS in using DMA mode.
+ * @param i2c_handler : I2C handler
+ * @param Addr: Device address on BUS Bus.
+ * @param Reg: The target register address to write
+ * @param MemAddress: Memory address
+ * @param Buffer: The target register value to be written
+ * @param Length: buffer size to be written
+ * @retval HAL status
+ */
+static HAL_StatusTypeDef I2Cx_WriteMultiple(I2C_HandleTypeDef *i2c_handler,
+ uint8_t Addr,
+ uint16_t Reg,
+ uint16_t MemAddress,
+ uint8_t *Buffer,
+ uint16_t Length)
+{
+ HAL_StatusTypeDef status = HAL_OK;
+
+ status = HAL_I2C_Mem_Write(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000);
+
+ /* Check the communication status */
+ if(status != HAL_OK)
+ {
+ /* Re-Initiaize the I2C Bus */
+ I2Cx_Error(i2c_handler, Addr);
+ }
+ return status;
+}
+
+/**
+ * @brief Checks if target device is ready for communication.
+ * @note This function is used with Memory devices
+ * @param i2c_handler : I2C handler
+ * @param DevAddress: Target device address
+ * @param Trials: Number of trials
+ * @retval HAL status
+ */
+static HAL_StatusTypeDef I2Cx_IsDeviceReady(I2C_HandleTypeDef *i2c_handler, uint16_t DevAddress, uint32_t Trials)
+{
+ return (HAL_I2C_IsDeviceReady(i2c_handler, DevAddress, Trials, 1000));
+}
+
+/**
+ * @brief Manages error callback by re-initializing I2C.
+ * @param i2c_handler : I2C handler
+ * @param Addr: I2C Address
+ * @retval None
+ */
+static void I2Cx_Error(I2C_HandleTypeDef *i2c_handler, uint8_t Addr)
+{
+ /* De-initialize the I2C communication bus */
+ HAL_I2C_DeInit(i2c_handler);
+
+ /* Re-Initialize the I2C communication bus */
+ I2Cx_Init(i2c_handler);
+}
+
+/*******************************************************************************
+ LINK OPERATIONS
+*******************************************************************************/
+
+/********************************* LINK AUDIO *********************************/
+
+/**
+ * @brief Initializes Audio low level.
+ * @retval None
+ */
+void AUDIO_IO_Init(void)
+{
+ I2Cx_Init(&hI2cAudioHandler);
+}
+
+/**
+ * @brief Deinitializes Audio low level.
+ * @retval None
+ */
+void AUDIO_IO_DeInit(void)
+{
+}
+
+/**
+ * @brief Writes a single data.
+ * @param Addr: I2C address
+ * @param Reg: Reg address
+ * @param Value: Data to be written
+ * @retval None
+ */
+void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value)
+{
+ uint16_t tmp = Value;
+
+ Value = ((uint16_t)(tmp >> 8) & 0x00FF);
+
+ Value |= ((uint16_t)(tmp << 8)& 0xFF00);
+
+ I2Cx_WriteMultiple(&hI2cAudioHandler, Addr, Reg, I2C_MEMADD_SIZE_16BIT,(uint8_t*)&Value, 2);
+}
+
+/**
+ * @brief Reads a single data.
+ * @param Addr: I2C address
+ * @param Reg: Reg address
+ * @retval Data to be read
+ */
+uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg)
+{
+ uint16_t read_value = 0, tmp = 0;
+
+ I2Cx_ReadMultiple(&hI2cAudioHandler, Addr, Reg, I2C_MEMADD_SIZE_16BIT, (uint8_t*)&read_value, 2);
+
+ tmp = ((uint16_t)(read_value >> 8) & 0x00FF);
+
+ tmp |= ((uint16_t)(read_value << 8)& 0xFF00);
+
+ read_value = tmp;
+
+ return read_value;
+}
+
+/**
+ * @brief AUDIO Codec delay
+ * @param Delay: Delay in ms
+ * @retval None
+ */
+void AUDIO_IO_Delay(uint32_t Delay)
+{
+ //HAL_Delay(Delay);
+ wait_ms(Delay);
+}
+
+/********************************* LINK CAMERA ********************************/
+
+/**
+ * @brief Initializes Camera low level.
+ * @retval None
+ */
+void CAMERA_IO_Init(void)
+{
+ I2Cx_Init(&hI2cExtHandler);
+}
+
+/**
+ * @brief Camera writes single data.
+ * @param Addr: I2C address
+ * @param Reg: Register address
+ * @param Value: Data to be written
+ * @retval None
+ */
+void CAMERA_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value)
+{
+ I2Cx_WriteMultiple(&hI2cExtHandler, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT,(uint8_t*)&Value, 1);
+}
+
+/**
+ * @brief Camera reads single data.
+ * @param Addr: I2C address
+ * @param Reg: Register address
+ * @retval Read data
+ */
+uint8_t CAMERA_IO_Read(uint8_t Addr, uint8_t Reg)
+{
+ uint8_t read_value = 0;
+
+ I2Cx_ReadMultiple(&hI2cExtHandler, Addr, Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1);
+
+ return read_value;
+}
+
+/**
+ * @brief Camera delay
+ * @param Delay: Delay in ms
+ * @retval None
+ */
+void CAMERA_Delay(uint32_t Delay)
+{
+ //HAL_Delay(Delay);
+ wait_ms(Delay);
+}
+
+/******************************** LINK I2C EEPROM *****************************/
+
+/**
+ * @brief Initializes peripherals used by the I2C EEPROM driver.
+ * @retval None
+ */
+void EEPROM_IO_Init(void)
+{
+ I2Cx_Init(&hI2cExtHandler);
+}
+
+/**
+ * @brief Write data to I2C EEPROM driver in using DMA channel.
+ * @param DevAddress: Target device address
+ * @param MemAddress: Internal memory address
+ * @param pBuffer: Pointer to data buffer
+ * @param BufferSize: Amount of data to be sent
+ * @retval HAL status
+ */
+HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize)
+{
+ return (I2Cx_WriteMultiple(&hI2cExtHandler, DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize));
+}
+
+/**
+ * @brief Read data from I2C EEPROM driver in using DMA channel.
+ * @param DevAddress: Target device address
+ * @param MemAddress: Internal memory address
+ * @param pBuffer: Pointer to data buffer
+ * @param BufferSize: Amount of data to be read
+ * @retval HAL status
+ */
+HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize)
+{
+ return (I2Cx_ReadMultiple(&hI2cExtHandler, DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize));
+}
+
+/**
+ * @brief Checks if target device is ready for communication.
+ * @note This function is used with Memory devices
+ * @param DevAddress: Target device address
+ * @param Trials: Number of trials
+ * @retval HAL status
+ */
+HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials)
+{
+ return (I2Cx_IsDeviceReady(&hI2cExtHandler, DevAddress, Trials));
+}
+
+/********************************* LINK TOUCHSCREEN *********************************/
+
+/**
+ * @brief Initializes Touchscreen low level.
+ * @retval None
+ */
+void TS_IO_Init(void)
+{
+ I2Cx_Init(&hI2cAudioHandler);
+}
+
+/**
+ * @brief Writes a single data.
+ * @param Addr: I2C address
+ * @param Reg: Reg address
+ * @param Value: Data to be written
+ * @retval None
+ */
+void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value)
+{
+ I2Cx_WriteMultiple(&hI2cAudioHandler, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT,(uint8_t*)&Value, 1);
+}
+
+/**
+ * @brief Reads a single data.
+ * @param Addr: I2C address
+ * @param Reg: Reg address
+ * @retval Data to be read
+ */
+uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg)
+{
+ uint8_t read_value = 0;
+
+ I2Cx_ReadMultiple(&hI2cAudioHandler, Addr, Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1);
+
+ return read_value;
+}
+
+/**
+ * @brief TS delay
+ * @param Delay: Delay in ms
+ * @retval None
+ */
+void TS_IO_Delay(uint32_t Delay)
+{
+ //HAL_Delay(Delay);
+ wait_ms(Delay);
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/stm32746g_discovery.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/stm32746g_discovery.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,342 @@
+/**
+ ******************************************************************************
+ * @file stm32746g_discovery.h
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 25-June-2015
+ * @brief This file contains definitions for STM32746G_DISCOVERY's LEDs,
+ * push-buttons and COM ports hardware resources.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32746G_DISCOVERY_H
+#define __STM32746G_DISCOVERY_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f7xx_hal.h"
+
+/** @addtogroup BSP
+ * @{
+ */
+
+/** @addtogroup STM32746G_DISCOVERY
+ * @{
+ */
+
+/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL
+ * @{
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Types STM32746G_DISCOVERY_LOW_LEVEL Exported Types
+ * @{
+ */
+typedef enum
+{
+ DISCO_LED1 = 0,
+ LED_GREEN = DISCO_LED1,
+}Led_TypeDef;
+
+typedef enum
+{
+ BUTTON_WAKEUP = 0,
+ BUTTON_TAMPER = 1,
+ BUTTON_KEY = 2
+}Button_TypeDef;
+
+typedef enum
+{
+ BUTTON_MODE_GPIO = 0,
+ BUTTON_MODE_EXTI = 1
+}ButtonMode_TypeDef;
+
+typedef enum
+{
+ COM1 = 0,
+ COM2 = 1
+}COM_TypeDef;
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Constants STM32746G_DISCOVERY_LOW_LEVEL Exported Constants
+ * @{
+ */
+
+/**
+ * @brief Define for STM32746G_DISCOVERY board
+ */
+#if !defined (USE_STM32746G_DISCO)
+ #define USE_STM32746G_DISCO
+#endif
+
+/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_LED
+ * @{
+ */
+
+#define LEDn ((uint8_t)1)
+
+#define LED1_GPIO_PORT GPIOI
+#define LED1_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE()
+#define LED1_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE()
+#define LED1_PIN GPIO_PIN_1
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_BUTTON
+ * @{
+ */
+#define BUTTONn ((uint8_t)3)
+
+/**
+ * @brief Wakeup push-button
+ */
+#define WAKEUP_BUTTON_PIN GPIO_PIN_11
+#define WAKEUP_BUTTON_GPIO_PORT GPIOI
+#define WAKEUP_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE()
+#define WAKEUP_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE()
+#define WAKEUP_BUTTON_EXTI_IRQn EXTI15_10_IRQn
+
+/**
+ * @brief Tamper push-button
+ */
+#define TAMPER_BUTTON_PIN GPIO_PIN_11
+#define TAMPER_BUTTON_GPIO_PORT GPIOI
+#define TAMPER_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE()
+#define TAMPER_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE()
+#define TAMPER_BUTTON_EXTI_IRQn EXTI15_10_IRQn
+
+/**
+ * @brief Key push-button
+ */
+#define KEY_BUTTON_PIN GPIO_PIN_11
+#define KEY_BUTTON_GPIO_PORT GPIOI
+#define KEY_BUTTON_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE()
+#define KEY_BUTTON_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE()
+#define KEY_BUTTON_EXTI_IRQn EXTI15_10_IRQn
+
+#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == 0) WAKEUP_BUTTON_GPIO_CLK_ENABLE(); else\
+ if((__INDEX__) == 1) TAMPER_BUTTON_GPIO_CLK_ENABLE(); else\
+ KEY_BUTTON_GPIO_CLK_ENABLE(); } while(0)
+
+#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? WAKEUP_BUTTON_GPIO_CLK_DISABLE() :\
+ ((__INDEX__) == 1) ? TAMPER_BUTTON_GPIO_CLK_DISABLE() : KEY_BUTTON_GPIO_CLK_DISABLE())
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_SIGNAL
+ * @{
+ */
+#define SIGNALn ((uint8_t)1)
+
+/**
+ * @brief SD-detect signal
+ */
+#define SD_DETECT_PIN GPIO_PIN_13
+#define SD_DETECT_GPIO_PORT GPIOC
+#define SD_DETECT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
+#define SD_DETECT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE()
+#define SD_DETECT_EXTI_IRQn EXTI15_10_IRQn
+
+/**
+ * @brief Touch screen interrupt signal
+ */
+#define TS_INT_PIN GPIO_PIN_13
+#define TS_INT_GPIO_PORT GPIOI
+#define TS_INT_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE()
+#define TS_INT_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE()
+#define TS_INT_EXTI_IRQn EXTI15_10_IRQn
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_COM
+ * @{
+ */
+#define COMn ((uint8_t)1)
+
+/**
+ * @brief Definition for COM port1, connected to USART1
+ */
+#define DISCOVERY_COM1 USART1
+#define DISCOVERY_COM1_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE()
+#define DISCOVERY_COM1_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE()
+
+#define DISCOVERY_COM1_TX_PIN GPIO_PIN_9
+#define DISCOVERY_COM1_TX_GPIO_PORT GPIOA
+#define DISCOVERY_COM1_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
+#define DISCOVERY_COM1_TX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOA_CLK_DISABLE()
+#define DISCOVERY_COM1_TX_AF GPIO_AF7_USART1
+
+#define DISCOVERY_COM1_RX_PIN GPIO_PIN_7
+#define DISCOVERY_COM1_RX_GPIO_PORT GPIOB
+#define DISCOVERY_COM1_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
+#define DISCOVERY_COM1_RX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
+#define DISCOVERY_COM1_RX_AF GPIO_AF7_USART1
+
+#define DISCOVERY_COM1_IRQn USART1_IRQn
+
+#define DISCOVERY_COMx_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) DISCOVERY_COM1_CLK_ENABLE(); } while(0)
+#define DISCOVERY_COMx_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? DISCOVERY_COM1_CLK_DISABLE() : 0)
+
+#define DISCOVERY_COMx_TX_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) DISCOVERY_COM1_TX_GPIO_CLK_ENABLE(); } while(0)
+#define DISCOVERY_COMx_TX_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? DISCOVERY_COM1_TX_GPIO_CLK_DISABLE() : 0)
+
+#define DISCOVERY_COMx_RX_GPIO_CLK_ENABLE(__INDEX__) do { if((__INDEX__) == COM1) DISCOVERY_COM1_RX_GPIO_CLK_ENABLE(); } while(0)
+#define DISCOVERY_COMx_RX_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? DISCOVERY_COM1_RX_GPIO_CLK_DISABLE() : 0)
+
+/* Exported constant IO ------------------------------------------------------*/
+
+#define LCD_I2C_ADDRESS ((uint16_t)0x70)
+#define CAMERA_I2C_ADDRESS ((uint16_t)0x60)
+#define AUDIO_I2C_ADDRESS ((uint16_t)0x34)
+#define EEPROM_I2C_ADDRESS_A01 ((uint16_t)0xA0)
+#define EEPROM_I2C_ADDRESS_A02 ((uint16_t)0xA6)
+#define TS_I2C_ADDRESS ((uint16_t)0x70)
+
+/* I2C clock speed configuration (in Hz)
+ WARNING:
+ Make sure that this define is not already declared in other files (ie.
+ stm32746g_discovery.h file). It can be used in parallel by other modules. */
+#ifndef I2C_SPEED
+ #define I2C_SPEED ((uint32_t)100000)
+#endif /* I2C_SPEED */
+
+/* User can use this section to tailor I2Cx/I2Cx instance used and associated
+ resources */
+/* Definition for AUDIO and LCD I2Cx resources */
+#define DISCOVERY_AUDIO_I2Cx I2C3
+#define DISCOVERY_AUDIO_I2Cx_CLK_ENABLE() __HAL_RCC_I2C3_CLK_ENABLE()
+#define DISCOVERY_AUDIO_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE()
+#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOH_CLK_ENABLE()
+
+#define DISCOVERY_AUDIO_I2Cx_FORCE_RESET() __HAL_RCC_I2C3_FORCE_RESET()
+#define DISCOVERY_AUDIO_I2Cx_RELEASE_RESET() __HAL_RCC_I2C3_RELEASE_RESET()
+
+/* Definition for I2Cx Pins */
+#define DISCOVERY_AUDIO_I2Cx_SCL_PIN GPIO_PIN_7
+#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT GPIOH
+#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_AF GPIO_AF4_I2C3
+#define DISCOVERY_AUDIO_I2Cx_SDA_PIN GPIO_PIN_8
+
+/* I2C interrupt requests */
+#define DISCOVERY_AUDIO_I2Cx_EV_IRQn I2C3_EV_IRQn
+#define DISCOVERY_AUDIO_I2Cx_ER_IRQn I2C3_ER_IRQn
+
+/* Definition for external, camera and Arduino connector I2Cx resources */
+#define DISCOVERY_EXT_I2Cx I2C1
+#define DISCOVERY_EXT_I2Cx_CLK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE()
+#define DISCOVERY_EXT_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE()
+#define DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
+
+#define DISCOVERY_EXT_I2Cx_FORCE_RESET() __HAL_RCC_I2C1_FORCE_RESET()
+#define DISCOVERY_EXT_I2Cx_RELEASE_RESET() __HAL_RCC_I2C1_RELEASE_RESET()
+
+/* Definition for I2Cx Pins */
+#define DISCOVERY_EXT_I2Cx_SCL_PIN GPIO_PIN_8
+#define DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT GPIOB
+#define DISCOVERY_EXT_I2Cx_SCL_SDA_AF GPIO_AF4_I2C1
+#define DISCOVERY_EXT_I2Cx_SDA_PIN GPIO_PIN_9
+
+/* I2C interrupt requests */
+#define DISCOVERY_EXT_I2Cx_EV_IRQn I2C1_EV_IRQn
+#define DISCOVERY_EXT_I2Cx_ER_IRQn I2C1_ER_IRQn
+
+/* I2C TIMING Register define when I2C clock source is SYSCLK */
+/* I2C TIMING is calculated from APB1 source clock = 50 MHz */
+/* Due to the big MOFSET capacity for adapting the camera level the rising time is very large (>1us) */
+/* 0x40912732 takes in account the big rising and aims a clock of 100khz */
+/* this value might be adapted when next Rev Birdie board is available */
+#ifndef DISCOVERY_I2Cx_TIMING
+#define DISCOVERY_I2Cx_TIMING ((uint32_t)0x40912732)
+#endif /* DISCOVERY_I2Cx_TIMING */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Macros STM32746G_DISCOVERY_LOW_LEVEL Exported Macros
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Functions
+ * @{
+ */
+uint32_t BSP_GetVersion(void);
+void BSP_LED_Init(Led_TypeDef Led);
+void BSP_LED_DeInit(Led_TypeDef Led);
+void BSP_LED_On(Led_TypeDef Led);
+void BSP_LED_Off(Led_TypeDef Led);
+void BSP_LED_Toggle(Led_TypeDef Led);
+void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode);
+void BSP_PB_DeInit(Button_TypeDef Button);
+uint32_t BSP_PB_GetState(Button_TypeDef Button);
+void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *husart);
+void BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart);
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32746G_DISCOVERY_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/stm32746g_discovery_lcd.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/stm32746g_discovery_lcd.c Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,1553 @@
+/**
+ ******************************************************************************
+ * @file stm32746g_discovery_lcd.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 25-June-2015
+ * @brief This file includes the driver for Liquid Crystal Display (LCD) module
+ * mounted on STM32746G-Discovery board.
+ @verbatim
+ 1. How To use this driver:
+ --------------------------
+ - This driver is used to drive directly an LCD TFT using the LTDC controller.
+ - This driver uses timing and setting for RK043FN48H LCD.
+
+ 2. Driver description:
+ ---------------------
+ + Initialization steps:
+ o Initialize the LCD using the BSP_LCD_Init() function.
+ o Apply the Layer configuration using the BSP_LCD_LayerDefaultInit() function.
+ o Select the LCD layer to be used using the BSP_LCD_SelectLayer() function.
+ o Enable the LCD display using the BSP_LCD_DisplayOn() function.
+
+ + Options
+ o Configure and enable the color keying functionality using the
+ BSP_LCD_SetColorKeying() function.
+ o Modify in the fly the transparency and/or the frame buffer address
+ using the following functions:
+ - BSP_LCD_SetTransparency()
+ - BSP_LCD_SetLayerAddress()
+
+ + Display on LCD
+ o Clear the hole LCD using BSP_LCD_Clear() function or only one specified string
+ line using the BSP_LCD_ClearStringLine() function.
+ o Display a character on the specified line and column using the BSP_LCD_DisplayChar()
+ function or a complete string line using the BSP_LCD_DisplayStringAtLine() function.
+ o Display a string line on the specified position (x,y in pixel) and align mode
+ using the BSP_LCD_DisplayStringAtLine() function.
+ o Draw and fill a basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap)
+ on LCD using the available set of functions.
+ @endverbatim
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32746g_discovery_lcd.h"
+#include "fonts.h"
+/*
+#include "font24.c"
+#include "font20.c"
+#include "font16.c"
+#include "font12.c"
+#include "font8.c"
+*/
+
+/** @addtogroup BSP
+ * @{
+ */
+
+/** @addtogroup STM32746G_DISCOVERY
+ * @{
+ */
+
+/** @addtogroup STM32746G_DISCOVERY_LCD
+ * @{
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Private_TypesDefinitions STM32746G_DISCOVERY_LCD Private Types Definitions
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Private_Defines STM32746G_DISCOVERY LCD Private Defines
+ * @{
+ */
+#define POLY_X(Z) ((int32_t)((Points + Z)->X))
+#define POLY_Y(Z) ((int32_t)((Points + Z)->Y))
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Private_Macros STM32746G_DISCOVERY_LCD Private Macros
+ * @{
+ */
+#define ABS(X) ((X) > 0 ? (X) : -(X))
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Private_Variables STM32746G_DISCOVERY_LCD Private Variables
+ * @{
+ */
+static LTDC_HandleTypeDef hLtdcHandler;
+static DMA2D_HandleTypeDef hDma2dHandler;
+
+/* Default LCD configuration with LCD Layer 1 */
+static uint32_t ActiveLayer = 0;
+static LCD_DrawPropTypeDef DrawProp[MAX_LAYER_NUMBER];
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Private_FunctionPrototypes STM32746G_DISCOVERY_LCD Private Function Prototypes
+ * @{
+ */
+static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c);
+static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3);
+static void LL_FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t ColorIndex);
+static void LL_ConvertLineToARGB8888(void * pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode);
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Exported_Functions STM32746G_DISCOVERY_LCD Exported Functions
+ * @{
+ */
+
+/**
+ * @brief Initializes the LCD.
+ * @retval LCD state
+ */
+uint8_t BSP_LCD_Init(void)
+{
+ /* Select the used LCD */
+
+ /* The RK043FN48H LCD 480x272 is selected */
+ /* Timing Configuration */
+ hLtdcHandler.Init.HorizontalSync = (RK043FN48H_HSYNC - 1);
+ hLtdcHandler.Init.VerticalSync = (RK043FN48H_VSYNC - 1);
+ hLtdcHandler.Init.AccumulatedHBP = (RK043FN48H_HSYNC + RK043FN48H_HBP - 1);
+ hLtdcHandler.Init.AccumulatedVBP = (RK043FN48H_VSYNC + RK043FN48H_VBP - 1);
+ hLtdcHandler.Init.AccumulatedActiveH = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP - 1);
+ hLtdcHandler.Init.AccumulatedActiveW = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP - 1);
+ hLtdcHandler.Init.TotalHeigh = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP + RK043FN48H_VFP - 1);
+ hLtdcHandler.Init.TotalWidth = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP + RK043FN48H_HFP - 1);
+
+ /* LCD clock configuration */
+ BSP_LCD_ClockConfig(&hLtdcHandler, NULL);
+
+ /* Initialize the LCD pixel width and pixel height */
+ hLtdcHandler.LayerCfg->ImageWidth = RK043FN48H_WIDTH;
+ hLtdcHandler.LayerCfg->ImageHeight = RK043FN48H_HEIGHT;
+
+ /* Background value */
+ hLtdcHandler.Init.Backcolor.Blue = 0;
+ hLtdcHandler.Init.Backcolor.Green = 0;
+ hLtdcHandler.Init.Backcolor.Red = 0;
+
+ /* Polarity */
+ hLtdcHandler.Init.HSPolarity = LTDC_HSPOLARITY_AL;
+ hLtdcHandler.Init.VSPolarity = LTDC_VSPOLARITY_AL;
+ hLtdcHandler.Init.DEPolarity = LTDC_DEPOLARITY_AL;
+ hLtdcHandler.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
+ hLtdcHandler.Instance = LTDC;
+
+ if(HAL_LTDC_GetState(&hLtdcHandler) == HAL_LTDC_STATE_RESET)
+ {
+ /* Initialize the LCD Msp: this __weak function can be rewritten by the application */
+ BSP_LCD_MspInit(&hLtdcHandler, NULL);
+ }
+ HAL_LTDC_Init(&hLtdcHandler);
+
+ /* Assert display enable LCD_DISP pin */
+ HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_SET);
+
+ /* Assert backlight LCD_BL_CTRL pin */
+ HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_SET);
+
+#if !defined(DATA_IN_ExtSDRAM)
+ /* Initialize the SDRAM */
+ BSP_SDRAM_Init();
+#endif
+
+ /* Initialize the font */
+ BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
+
+ return LCD_OK;
+}
+
+/**
+ * @brief DeInitializes the LCD.
+ * @retval LCD state
+ */
+uint8_t BSP_LCD_DeInit(void)
+{
+ /* Initialize the hLtdcHandler Instance parameter */
+ hLtdcHandler.Instance = LTDC;
+
+ /* Disable LTDC block */
+ __HAL_LTDC_DISABLE(&hLtdcHandler);
+
+ /* DeInit the LTDC */
+ HAL_LTDC_DeInit(&hLtdcHandler);
+
+ /* DeInit the LTDC MSP : this __weak function can be rewritten by the application */
+ BSP_LCD_MspDeInit(&hLtdcHandler, NULL);
+
+ return LCD_OK;
+}
+
+/**
+ * @brief Gets the LCD X size.
+ * @retval Used LCD X size
+ */
+uint32_t BSP_LCD_GetXSize(void)
+{
+ return hLtdcHandler.LayerCfg[ActiveLayer].ImageWidth;
+}
+
+/**
+ * @brief Gets the LCD Y size.
+ * @retval Used LCD Y size
+ */
+uint32_t BSP_LCD_GetYSize(void)
+{
+ return hLtdcHandler.LayerCfg[ActiveLayer].ImageHeight;
+}
+
+/**
+ * @brief Set the LCD X size.
+ * @param imageWidthPixels : image width in pixels unit
+ * @retval None
+ */
+void BSP_LCD_SetXSize(uint32_t imageWidthPixels)
+{
+ hLtdcHandler.LayerCfg[ActiveLayer].ImageWidth = imageWidthPixels;
+}
+
+/**
+ * @brief Set the LCD Y size.
+ * @param imageHeightPixels : image height in lines unit
+ * @retval None
+ */
+void BSP_LCD_SetYSize(uint32_t imageHeightPixels)
+{
+ hLtdcHandler.LayerCfg[ActiveLayer].ImageHeight = imageHeightPixels;
+}
+
+/**
+ * @brief Initializes the LCD layer in ARGB8888 format (32 bits per pixel).
+ * @param LayerIndex: Layer foreground or background
+ * @param FB_Address: Layer frame buffer
+ * @retval None
+ */
+void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address)
+{
+ LCD_LayerCfgTypeDef layer_cfg;
+
+ /* Layer Init */
+ layer_cfg.WindowX0 = 0;
+ layer_cfg.WindowX1 = BSP_LCD_GetXSize();
+ layer_cfg.WindowY0 = 0;
+ layer_cfg.WindowY1 = BSP_LCD_GetYSize();
+ layer_cfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888;
+ layer_cfg.FBStartAdress = FB_Address;
+ layer_cfg.Alpha = 255;
+ layer_cfg.Alpha0 = 0;
+ layer_cfg.Backcolor.Blue = 0;
+ layer_cfg.Backcolor.Green = 0;
+ layer_cfg.Backcolor.Red = 0;
+ layer_cfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
+ layer_cfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
+ layer_cfg.ImageWidth = BSP_LCD_GetXSize();
+ layer_cfg.ImageHeight = BSP_LCD_GetYSize();
+
+ HAL_LTDC_ConfigLayer(&hLtdcHandler, &layer_cfg, LayerIndex);
+
+ DrawProp[LayerIndex].BackColor = LCD_COLOR_WHITE;
+ DrawProp[LayerIndex].pFont = &Font24;
+ DrawProp[LayerIndex].TextColor = LCD_COLOR_BLACK;
+}
+
+/**
+ * @brief Initializes the LCD layer in RGB565 format (16 bits per pixel).
+ * @param LayerIndex: Layer foreground or background
+ * @param FB_Address: Layer frame buffer
+ * @retval None
+ */
+void BSP_LCD_LayerRgb565Init(uint16_t LayerIndex, uint32_t FB_Address)
+{
+ LCD_LayerCfgTypeDef layer_cfg;
+
+ /* Layer Init */
+ layer_cfg.WindowX0 = 0;
+ layer_cfg.WindowX1 = BSP_LCD_GetXSize();
+ layer_cfg.WindowY0 = 0;
+ layer_cfg.WindowY1 = BSP_LCD_GetYSize();
+ layer_cfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
+ layer_cfg.FBStartAdress = FB_Address;
+ layer_cfg.Alpha = 255;
+ layer_cfg.Alpha0 = 0;
+ layer_cfg.Backcolor.Blue = 0;
+ layer_cfg.Backcolor.Green = 0;
+ layer_cfg.Backcolor.Red = 0;
+ layer_cfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
+ layer_cfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
+ layer_cfg.ImageWidth = BSP_LCD_GetXSize();
+ layer_cfg.ImageHeight = BSP_LCD_GetYSize();
+
+ HAL_LTDC_ConfigLayer(&hLtdcHandler, &layer_cfg, LayerIndex);
+
+ DrawProp[LayerIndex].BackColor = LCD_COLOR_WHITE;
+ DrawProp[LayerIndex].pFont = &Font24;
+ DrawProp[LayerIndex].TextColor = LCD_COLOR_BLACK;
+}
+
+/**
+ * @brief Selects the LCD Layer.
+ * @param LayerIndex: Layer foreground or background
+ * @retval None
+ */
+void BSP_LCD_SelectLayer(uint32_t LayerIndex)
+{
+ ActiveLayer = LayerIndex;
+}
+
+/**
+ * @brief Sets an LCD Layer visible
+ * @param LayerIndex: Visible Layer
+ * @param State: New state of the specified layer
+ * This parameter can be one of the following values:
+ * @arg ENABLE
+ * @arg DISABLE
+ * @retval None
+ */
+void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State)
+{
+ if(State == ENABLE)
+ {
+ __HAL_LTDC_LAYER_ENABLE(&hLtdcHandler, LayerIndex);
+ }
+ else
+ {
+ __HAL_LTDC_LAYER_DISABLE(&hLtdcHandler, LayerIndex);
+ }
+ __HAL_LTDC_RELOAD_CONFIG(&hLtdcHandler);
+}
+
+/**
+ * @brief Configures the transparency.
+ * @param LayerIndex: Layer foreground or background.
+ * @param Transparency: Transparency
+ * This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF
+ * @retval None
+ */
+void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency)
+{
+ HAL_LTDC_SetAlpha(&hLtdcHandler, Transparency, LayerIndex);
+}
+
+/**
+ * @brief Sets an LCD layer frame buffer address.
+ * @param LayerIndex: Layer foreground or background
+ * @param Address: New LCD frame buffer value
+ * @retval None
+ */
+void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address)
+{
+ HAL_LTDC_SetAddress(&hLtdcHandler, Address, LayerIndex);
+}
+
+/**
+ * @brief Sets display window.
+ * @param LayerIndex: Layer index
+ * @param Xpos: LCD X position
+ * @param Ypos: LCD Y position
+ * @param Width: LCD window width
+ * @param Height: LCD window height
+ * @retval None
+ */
+void BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
+{
+ /* Reconfigure the layer size */
+ HAL_LTDC_SetWindowSize(&hLtdcHandler, Width, Height, LayerIndex);
+
+ /* Reconfigure the layer position */
+ HAL_LTDC_SetWindowPosition(&hLtdcHandler, Xpos, Ypos, LayerIndex);
+}
+
+/**
+ * @brief Configures and sets the color keying.
+ * @param LayerIndex: Layer foreground or background
+ * @param RGBValue: Color reference
+ * @retval None
+ */
+void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue)
+{
+ /* Configure and Enable the color Keying for LCD Layer */
+ HAL_LTDC_ConfigColorKeying(&hLtdcHandler, RGBValue, LayerIndex);
+ HAL_LTDC_EnableColorKeying(&hLtdcHandler, LayerIndex);
+}
+
+/**
+ * @brief Disables the color keying.
+ * @param LayerIndex: Layer foreground or background
+ * @retval None
+ */
+void BSP_LCD_ResetColorKeying(uint32_t LayerIndex)
+{
+ /* Disable the color Keying for LCD Layer */
+ HAL_LTDC_DisableColorKeying(&hLtdcHandler, LayerIndex);
+}
+
+/**
+ * @brief Sets the LCD text color.
+ * @param Color: Text color code ARGB(8-8-8-8)
+ * @retval None
+ */
+void BSP_LCD_SetTextColor(uint32_t Color)
+{
+ DrawProp[ActiveLayer].TextColor = Color;
+}
+
+/**
+ * @brief Gets the LCD text color.
+ * @retval Used text color.
+ */
+uint32_t BSP_LCD_GetTextColor(void)
+{
+ return DrawProp[ActiveLayer].TextColor;
+}
+
+/**
+ * @brief Sets the LCD background color.
+ * @param Color: Layer background color code ARGB(8-8-8-8)
+ * @retval None
+ */
+void BSP_LCD_SetBackColor(uint32_t Color)
+{
+ DrawProp[ActiveLayer].BackColor = Color;
+}
+
+/**
+ * @brief Gets the LCD background color.
+ * @retval Used background colour
+ */
+uint32_t BSP_LCD_GetBackColor(void)
+{
+ return DrawProp[ActiveLayer].BackColor;
+}
+
+/**
+ * @brief Sets the LCD text font.
+ * @param fonts: Layer font to be used
+ * @retval None
+ */
+void BSP_LCD_SetFont(sFONT *fonts)
+{
+ DrawProp[ActiveLayer].pFont = fonts;
+}
+
+/**
+ * @brief Gets the LCD text font.
+ * @retval Used layer font
+ */
+sFONT *BSP_LCD_GetFont(void)
+{
+ return DrawProp[ActiveLayer].pFont;
+}
+
+/**
+ * @brief Reads an LCD pixel.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @retval RGB pixel color
+ */
+uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos)
+{
+ uint32_t ret = 0;
+
+ if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB8888)
+ {
+ /* Read data value from SDRAM memory */
+ ret = *(__IO uint32_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos)));
+ }
+ else if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB888)
+ {
+ /* Read data value from SDRAM memory */
+ ret = (*(__IO uint32_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))) & 0x00FFFFFF);
+ }
+ else if((hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \
+ (hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \
+ (hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_AL88))
+ {
+ /* Read data value from SDRAM memory */
+ ret = *(__IO uint16_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos)));
+ }
+ else
+ {
+ /* Read data value from SDRAM memory */
+ ret = *(__IO uint8_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos)));
+ }
+
+ return ret;
+}
+
+/**
+ * @brief Clears the hole LCD.
+ * @param Color: Color of the background
+ * @retval None
+ */
+void BSP_LCD_Clear(uint32_t Color)
+{
+ /* Clear the LCD */
+ LL_FillBuffer(ActiveLayer, (uint32_t *)(hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress), BSP_LCD_GetXSize(), BSP_LCD_GetYSize(), 0, Color);
+}
+
+/**
+ * @brief Clears the selected line.
+ * @param Line: Line to be cleared
+ * @retval None
+ */
+void BSP_LCD_ClearStringLine(uint32_t Line)
+{
+ uint32_t color_backup = DrawProp[ActiveLayer].TextColor;
+ DrawProp[ActiveLayer].TextColor = DrawProp[ActiveLayer].BackColor;
+
+ /* Draw rectangle with background color */
+ BSP_LCD_FillRect(0, (Line * DrawProp[ActiveLayer].pFont->Height), BSP_LCD_GetXSize(), DrawProp[ActiveLayer].pFont->Height);
+
+ DrawProp[ActiveLayer].TextColor = color_backup;
+ BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor);
+}
+
+/**
+ * @brief Displays one character.
+ * @param Xpos: Start column address
+ * @param Ypos: Line where to display the character shape.
+ * @param Ascii: Character ascii code
+ * This parameter must be a number between Min_Data = 0x20 and Max_Data = 0x7E
+ * @retval None
+ */
+void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii)
+{
+ DrawChar(Xpos, Ypos, &DrawProp[ActiveLayer].pFont->table[(Ascii-' ') *\
+ DrawProp[ActiveLayer].pFont->Height * ((DrawProp[ActiveLayer].pFont->Width + 7) / 8)]);
+}
+
+/**
+ * @brief Displays characters on the LCD.
+ * @param Xpos: X position (in pixel)
+ * @param Ypos: Y position (in pixel)
+ * @param Text: Pointer to string to display on LCD
+ * @param Mode: Display mode
+ * This parameter can be one of the following values:
+ * @arg CENTER_MODE
+ * @arg RIGHT_MODE
+ * @arg LEFT_MODE
+ * @retval None
+ */
+void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode)
+{
+ uint16_t ref_column = 1, i = 0;
+ uint32_t size = 0, xsize = 0;
+ uint8_t *ptr = Text;
+
+ /* Get the text size */
+ while (*ptr++) size ++ ;
+
+ /* Characters number per line */
+ xsize = (BSP_LCD_GetXSize()/DrawProp[ActiveLayer].pFont->Width);
+
+ switch (Mode)
+ {
+ case CENTER_MODE:
+ {
+ ref_column = Xpos + ((xsize - size)* DrawProp[ActiveLayer].pFont->Width) / 2;
+ break;
+ }
+ case LEFT_MODE:
+ {
+ ref_column = Xpos;
+ break;
+ }
+ case RIGHT_MODE:
+ {
+ ref_column = - Xpos + ((xsize - size)*DrawProp[ActiveLayer].pFont->Width);
+ break;
+ }
+ default:
+ {
+ ref_column = Xpos;
+ break;
+ }
+ }
+
+ /* Check that the Start column is located in the screen */
+ if ((ref_column < 1) || (ref_column >= 0x8000))
+ {
+ ref_column = 1;
+ }
+
+ /* Send the string character by character on LCD */
+ while ((*Text != 0) & (((BSP_LCD_GetXSize() - (i*DrawProp[ActiveLayer].pFont->Width)) & 0xFFFF) >= DrawProp[ActiveLayer].pFont->Width))
+ {
+ /* Display one character on LCD */
+ BSP_LCD_DisplayChar(ref_column, Ypos, *Text);
+ /* Decrement the column position by 16 */
+ ref_column += DrawProp[ActiveLayer].pFont->Width;
+ /* Point on the next character */
+ Text++;
+ i++;
+ }
+}
+
+/**
+ * @brief Displays a maximum of 60 characters on the LCD.
+ * @param Line: Line where to display the character shape
+ * @param ptr: Pointer to string to display on LCD
+ * @retval None
+ */
+void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr)
+{
+ BSP_LCD_DisplayStringAt(0, LINE(Line), ptr, LEFT_MODE);
+}
+
+/**
+ * @brief Draws an horizontal line.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param Length: Line length
+ * @retval None
+ */
+void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
+{
+ uint32_t Xaddress = 0;
+
+ /* Get the line address */
+ if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
+ { /* RGB565 format */
+ Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 2*(BSP_LCD_GetXSize()*Ypos + Xpos);
+ }
+ else
+ { /* ARGB8888 format */
+ Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos);
+ }
+
+ /* Write line */
+ LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, Length, 1, 0, DrawProp[ActiveLayer].TextColor);
+}
+
+/**
+ * @brief Draws a vertical line.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param Length: Line length
+ * @retval None
+ */
+void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
+{
+ uint32_t Xaddress = 0;
+
+ /* Get the line address */
+ if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
+ { /* RGB565 format */
+ Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 2*(BSP_LCD_GetXSize()*Ypos + Xpos);
+ }
+ else
+ { /* ARGB8888 format */
+ Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos);
+ }
+
+ /* Write line */
+ LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, 1, Length, (BSP_LCD_GetXSize() - 1), DrawProp[ActiveLayer].TextColor);
+}
+
+/**
+ * @brief Draws an uni-line (between two points).
+ * @param x1: Point 1 X position
+ * @param y1: Point 1 Y position
+ * @param x2: Point 2 X position
+ * @param y2: Point 2 Y position
+ * @retval None
+ */
+void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
+{
+ int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0,
+ yinc1 = 0, yinc2 = 0, den = 0, num = 0, num_add = 0, num_pixels = 0,
+ curpixel = 0;
+
+ deltax = ABS(x2 - x1); /* The difference between the x's */
+ deltay = ABS(y2 - y1); /* The difference between the y's */
+ x = x1; /* Start x off at the first pixel */
+ y = y1; /* Start y off at the first pixel */
+
+ if (x2 >= x1) /* The x-values are increasing */
+ {
+ xinc1 = 1;
+ xinc2 = 1;
+ }
+ else /* The x-values are decreasing */
+ {
+ xinc1 = -1;
+ xinc2 = -1;
+ }
+
+ if (y2 >= y1) /* The y-values are increasing */
+ {
+ yinc1 = 1;
+ yinc2 = 1;
+ }
+ else /* The y-values are decreasing */
+ {
+ yinc1 = -1;
+ yinc2 = -1;
+ }
+
+ if (deltax >= deltay) /* There is at least one x-value for every y-value */
+ {
+ xinc1 = 0; /* Don't change the x when numerator >= denominator */
+ yinc2 = 0; /* Don't change the y for every iteration */
+ den = deltax;
+ num = deltax / 2;
+ num_add = deltay;
+ num_pixels = deltax; /* There are more x-values than y-values */
+ }
+ else /* There is at least one y-value for every x-value */
+ {
+ xinc2 = 0; /* Don't change the x for every iteration */
+ yinc1 = 0; /* Don't change the y when numerator >= denominator */
+ den = deltay;
+ num = deltay / 2;
+ num_add = deltax;
+ num_pixels = deltay; /* There are more y-values than x-values */
+ }
+
+ for (curpixel = 0; curpixel <= num_pixels; curpixel++)
+ {
+ BSP_LCD_DrawPixel(x, y, DrawProp[ActiveLayer].TextColor); /* Draw the current pixel */
+ num += num_add; /* Increase the numerator by the top of the fraction */
+ if (num >= den) /* Check if numerator >= denominator */
+ {
+ num -= den; /* Calculate the new numerator value */
+ x += xinc1; /* Change the x as appropriate */
+ y += yinc1; /* Change the y as appropriate */
+ }
+ x += xinc2; /* Change the x as appropriate */
+ y += yinc2; /* Change the y as appropriate */
+ }
+}
+
+/**
+ * @brief Draws a rectangle.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param Width: Rectangle width
+ * @param Height: Rectangle height
+ * @retval None
+ */
+void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
+{
+ /* Draw horizontal lines */
+ BSP_LCD_DrawHLine(Xpos, Ypos, Width);
+ BSP_LCD_DrawHLine(Xpos, (Ypos+ Height), Width);
+
+ /* Draw vertical lines */
+ BSP_LCD_DrawVLine(Xpos, Ypos, Height);
+ BSP_LCD_DrawVLine((Xpos + Width), Ypos, Height);
+}
+
+/**
+ * @brief Draws a circle.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param Radius: Circle radius
+ * @retval None
+ */
+void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
+{
+ int32_t decision; /* Decision Variable */
+ uint32_t current_x; /* Current X Value */
+ uint32_t current_y; /* Current Y Value */
+
+ decision = 3 - (Radius << 1);
+ current_x = 0;
+ current_y = Radius;
+
+ while (current_x <= current_y)
+ {
+ BSP_LCD_DrawPixel((Xpos + current_x), (Ypos - current_y), DrawProp[ActiveLayer].TextColor);
+
+ BSP_LCD_DrawPixel((Xpos - current_x), (Ypos - current_y), DrawProp[ActiveLayer].TextColor);
+
+ BSP_LCD_DrawPixel((Xpos + current_y), (Ypos - current_x), DrawProp[ActiveLayer].TextColor);
+
+ BSP_LCD_DrawPixel((Xpos - current_y), (Ypos - current_x), DrawProp[ActiveLayer].TextColor);
+
+ BSP_LCD_DrawPixel((Xpos + current_x), (Ypos + current_y), DrawProp[ActiveLayer].TextColor);
+
+ BSP_LCD_DrawPixel((Xpos - current_x), (Ypos + current_y), DrawProp[ActiveLayer].TextColor);
+
+ BSP_LCD_DrawPixel((Xpos + current_y), (Ypos + current_x), DrawProp[ActiveLayer].TextColor);
+
+ BSP_LCD_DrawPixel((Xpos - current_y), (Ypos + current_x), DrawProp[ActiveLayer].TextColor);
+
+ if (decision < 0)
+ {
+ decision += (current_x << 2) + 6;
+ }
+ else
+ {
+ decision += ((current_x - current_y) << 2) + 10;
+ current_y--;
+ }
+ current_x++;
+ }
+}
+
+/**
+ * @brief Draws an poly-line (between many points).
+ * @param Points: Pointer to the points array
+ * @param PointCount: Number of points
+ * @retval None
+ */
+void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount)
+{
+ int16_t x = 0, y = 0;
+
+ if(PointCount < 2)
+ {
+ return;
+ }
+
+ BSP_LCD_DrawLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y);
+
+ while(--PointCount)
+ {
+ x = Points->X;
+ y = Points->Y;
+ Points++;
+ BSP_LCD_DrawLine(x, y, Points->X, Points->Y);
+ }
+}
+
+/**
+ * @brief Draws an ellipse on LCD.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param XRadius: Ellipse X radius
+ * @param YRadius: Ellipse Y radius
+ * @retval None
+ */
+void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
+{
+ int x = 0, y = -YRadius, err = 2-2*XRadius, e2;
+ float k = 0, rad1 = 0, rad2 = 0;
+
+ rad1 = XRadius;
+ rad2 = YRadius;
+
+ k = (float)(rad2/rad1);
+
+ do {
+ BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/k)), (Ypos+y), DrawProp[ActiveLayer].TextColor);
+ BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/k)), (Ypos+y), DrawProp[ActiveLayer].TextColor);
+ BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/k)), (Ypos-y), DrawProp[ActiveLayer].TextColor);
+ BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/k)), (Ypos-y), DrawProp[ActiveLayer].TextColor);
+
+ e2 = err;
+ if (e2 <= x) {
+ err += ++x*2+1;
+ if (-y == x && e2 <= y) e2 = 0;
+ }
+ if (e2 > y) err += ++y*2+1;
+ }
+ while (y <= 0);
+}
+
+/**
+ * @brief Draws a pixel on LCD.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param RGB_Code: Pixel color in ARGB mode (8-8-8-8)
+ * @retval None
+ */
+void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t RGB_Code)
+{
+ /* Write data value to all SDRAM memory */
+ if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
+ { /* RGB565 format */
+ *(__IO uint16_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))) = (uint16_t)RGB_Code;
+ }
+ else
+ { /* ARGB8888 format */
+ *(__IO uint32_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))) = RGB_Code;
+ }
+}
+
+/**
+ * @brief Draws a bitmap picture loaded in the internal Flash in ARGB888 format (32 bits per pixel).
+ * @param Xpos: Bmp X position in the LCD
+ * @param Ypos: Bmp Y position in the LCD
+ * @param pbmp: Pointer to Bmp picture address in the internal Flash
+ * @retval None
+ */
+void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp)
+{
+ uint32_t index = 0, width = 0, height = 0, bit_pixel = 0;
+ uint32_t address;
+ uint32_t input_color_mode = 0;
+
+ /* Get bitmap data address offset */
+ index = *(__IO uint16_t *) (pbmp + 10);
+ index |= (*(__IO uint16_t *) (pbmp + 12)) << 16;
+
+ /* Read bitmap width */
+ width = *(uint16_t *) (pbmp + 18);
+ width |= (*(uint16_t *) (pbmp + 20)) << 16;
+
+ /* Read bitmap height */
+ height = *(uint16_t *) (pbmp + 22);
+ height |= (*(uint16_t *) (pbmp + 24)) << 16;
+
+ /* Read bit/pixel */
+ bit_pixel = *(uint16_t *) (pbmp + 28);
+
+ /* Set the address */
+ address = hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize()*Ypos) + Xpos)*(4));
+
+ /* Get the layer pixel format */
+ if ((bit_pixel/8) == 4)
+ {
+ input_color_mode = CM_ARGB8888;
+ }
+ else if ((bit_pixel/8) == 2)
+ {
+ input_color_mode = CM_RGB565;
+ }
+ else
+ {
+ input_color_mode = CM_RGB888;
+ }
+
+ /* Bypass the bitmap header */
+ pbmp += (index + (width * (height - 1) * (bit_pixel/8)));
+
+ /* Convert picture to ARGB8888 pixel format */
+ for(index=0; index < height; index++)
+ {
+ /* Pixel format conversion */
+ LL_ConvertLineToARGB8888((uint32_t *)pbmp, (uint32_t *)address, width, input_color_mode);
+
+ /* Increment the source and destination buffers */
+ address+= (BSP_LCD_GetXSize()*4);
+ pbmp -= width*(bit_pixel/8);
+ }
+}
+
+/**
+ * @brief Draws a full rectangle.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param Width: Rectangle width
+ * @param Height: Rectangle height
+ * @retval None
+ */
+void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
+{
+ uint32_t x_address = 0;
+
+ /* Set the text color */
+ BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor);
+
+ /* Get the rectangle start address */
+ if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
+ { /* RGB565 format */
+ x_address = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 2*(BSP_LCD_GetXSize()*Ypos + Xpos);
+ }
+ else
+ { /* ARGB8888 format */
+ x_address = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos);
+ }
+ /* Fill the rectangle */
+ LL_FillBuffer(ActiveLayer, (uint32_t *)x_address, Width, Height, (BSP_LCD_GetXSize() - Width), DrawProp[ActiveLayer].TextColor);
+}
+
+/**
+ * @brief Draws a full circle.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param Radius: Circle radius
+ * @retval None
+ */
+void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
+{
+ int32_t decision; /* Decision Variable */
+ uint32_t current_x; /* Current X Value */
+ uint32_t current_y; /* Current Y Value */
+
+ decision = 3 - (Radius << 1);
+
+ current_x = 0;
+ current_y = Radius;
+
+ BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor);
+
+ while (current_x <= current_y)
+ {
+ if(current_y > 0)
+ {
+ BSP_LCD_DrawHLine(Xpos - current_y, Ypos + current_x, 2*current_y);
+ BSP_LCD_DrawHLine(Xpos - current_y, Ypos - current_x, 2*current_y);
+ }
+
+ if(current_x > 0)
+ {
+ BSP_LCD_DrawHLine(Xpos - current_x, Ypos - current_y, 2*current_x);
+ BSP_LCD_DrawHLine(Xpos - current_x, Ypos + current_y, 2*current_x);
+ }
+ if (decision < 0)
+ {
+ decision += (current_x << 2) + 6;
+ }
+ else
+ {
+ decision += ((current_x - current_y) << 2) + 10;
+ current_y--;
+ }
+ current_x++;
+ }
+
+ BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor);
+ BSP_LCD_DrawCircle(Xpos, Ypos, Radius);
+}
+
+/**
+ * @brief Draws a full poly-line (between many points).
+ * @param Points: Pointer to the points array
+ * @param PointCount: Number of points
+ * @retval None
+ */
+void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount)
+{
+ int16_t X = 0, Y = 0, X2 = 0, Y2 = 0, X_center = 0, Y_center = 0, X_first = 0, Y_first = 0, pixelX = 0, pixelY = 0, counter = 0;
+ uint16_t image_left = 0, image_right = 0, image_top = 0, image_bottom = 0;
+
+ image_left = image_right = Points->X;
+ image_top= image_bottom = Points->Y;
+
+ for(counter = 1; counter < PointCount; counter++)
+ {
+ pixelX = POLY_X(counter);
+ if(pixelX < image_left)
+ {
+ image_left = pixelX;
+ }
+ if(pixelX > image_right)
+ {
+ image_right = pixelX;
+ }
+
+ pixelY = POLY_Y(counter);
+ if(pixelY < image_top)
+ {
+ image_top = pixelY;
+ }
+ if(pixelY > image_bottom)
+ {
+ image_bottom = pixelY;
+ }
+ }
+
+ if(PointCount < 2)
+ {
+ return;
+ }
+
+ X_center = (image_left + image_right)/2;
+ Y_center = (image_bottom + image_top)/2;
+
+ X_first = Points->X;
+ Y_first = Points->Y;
+
+ while(--PointCount)
+ {
+ X = Points->X;
+ Y = Points->Y;
+ Points++;
+ X2 = Points->X;
+ Y2 = Points->Y;
+
+ FillTriangle(X, X2, X_center, Y, Y2, Y_center);
+ FillTriangle(X, X_center, X2, Y, Y_center, Y2);
+ FillTriangle(X_center, X2, X, Y_center, Y2, Y);
+ }
+
+ FillTriangle(X_first, X2, X_center, Y_first, Y2, Y_center);
+ FillTriangle(X_first, X_center, X2, Y_first, Y_center, Y2);
+ FillTriangle(X_center, X2, X_first, Y_center, Y2, Y_first);
+}
+
+/**
+ * @brief Draws a full ellipse.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param XRadius: Ellipse X radius
+ * @param YRadius: Ellipse Y radius
+ * @retval None
+ */
+void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
+{
+ int x = 0, y = -YRadius, err = 2-2*XRadius, e2;
+ float k = 0, rad1 = 0, rad2 = 0;
+
+ rad1 = XRadius;
+ rad2 = YRadius;
+
+ k = (float)(rad2/rad1);
+
+ do
+ {
+ BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/k)), (Ypos+y), (2*(uint16_t)(x/k) + 1));
+ BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/k)), (Ypos-y), (2*(uint16_t)(x/k) + 1));
+
+ e2 = err;
+ if (e2 <= x)
+ {
+ err += ++x*2+1;
+ if (-y == x && e2 <= y) e2 = 0;
+ }
+ if (e2 > y) err += ++y*2+1;
+ }
+ while (y <= 0);
+}
+
+/**
+ * @brief Enables the display.
+ * @retval None
+ */
+void BSP_LCD_DisplayOn(void)
+{
+ /* Display On */
+ __HAL_LTDC_ENABLE(&hLtdcHandler);
+ HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_SET); /* Assert LCD_DISP pin */
+ HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_SET); /* Assert LCD_BL_CTRL pin */
+}
+
+/**
+ * @brief Disables the display.
+ * @retval None
+ */
+void BSP_LCD_DisplayOff(void)
+{
+ /* Display Off */
+ __HAL_LTDC_DISABLE(&hLtdcHandler);
+ HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_RESET); /* De-assert LCD_DISP pin */
+ HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_RESET);/* De-assert LCD_BL_CTRL pin */
+}
+
+/**
+ * @brief Initializes the LTDC MSP.
+ * @param hltdc: LTDC handle
+ * @param Params
+ * @retval None
+ */
+__weak void BSP_LCD_MspInit(LTDC_HandleTypeDef *hltdc, void *Params)
+{
+ GPIO_InitTypeDef gpio_init_structure;
+
+ /* Enable the LTDC and DMA2D clocks */
+ __HAL_RCC_LTDC_CLK_ENABLE();
+ __HAL_RCC_DMA2D_CLK_ENABLE();
+
+ /* Enable GPIOs clock */
+ __HAL_RCC_GPIOE_CLK_ENABLE();
+ __HAL_RCC_GPIOG_CLK_ENABLE();
+ __HAL_RCC_GPIOI_CLK_ENABLE();
+ __HAL_RCC_GPIOJ_CLK_ENABLE();
+ __HAL_RCC_GPIOK_CLK_ENABLE();
+ LCD_DISP_GPIO_CLK_ENABLE();
+ LCD_BL_CTRL_GPIO_CLK_ENABLE();
+
+ /*** LTDC Pins configuration ***/
+ /* GPIOE configuration */
+ gpio_init_structure.Pin = GPIO_PIN_4;
+ gpio_init_structure.Mode = GPIO_MODE_AF_PP;
+ gpio_init_structure.Pull = GPIO_NOPULL;
+ gpio_init_structure.Speed = GPIO_SPEED_FAST;
+ gpio_init_structure.Alternate = GPIO_AF14_LTDC;
+ HAL_GPIO_Init(GPIOE, &gpio_init_structure);
+
+ /* GPIOG configuration */
+ gpio_init_structure.Pin = GPIO_PIN_12;
+ gpio_init_structure.Mode = GPIO_MODE_AF_PP;
+ gpio_init_structure.Alternate = GPIO_AF9_LTDC;
+ HAL_GPIO_Init(GPIOG, &gpio_init_structure);
+
+ /* GPIOI LTDC alternate configuration */
+ gpio_init_structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | \
+ GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
+ gpio_init_structure.Mode = GPIO_MODE_AF_PP;
+ gpio_init_structure.Alternate = GPIO_AF14_LTDC;
+ HAL_GPIO_Init(GPIOI, &gpio_init_structure);
+
+ /* GPIOJ configuration */
+ gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | \
+ GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | \
+ GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | \
+ GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
+ gpio_init_structure.Mode = GPIO_MODE_AF_PP;
+ gpio_init_structure.Alternate = GPIO_AF14_LTDC;
+ HAL_GPIO_Init(GPIOJ, &gpio_init_structure);
+
+ /* GPIOK configuration */
+ gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_4 | \
+ GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
+ gpio_init_structure.Mode = GPIO_MODE_AF_PP;
+ gpio_init_structure.Alternate = GPIO_AF14_LTDC;
+ HAL_GPIO_Init(GPIOK, &gpio_init_structure);
+
+ /* LCD_DISP GPIO configuration */
+ gpio_init_structure.Pin = LCD_DISP_PIN; /* LCD_DISP pin has to be manually controlled */
+ gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP;
+ HAL_GPIO_Init(LCD_DISP_GPIO_PORT, &gpio_init_structure);
+
+ /* LCD_BL_CTRL GPIO configuration */
+ gpio_init_structure.Pin = LCD_BL_CTRL_PIN; /* LCD_BL_CTRL pin has to be manually controlled */
+ gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP;
+ HAL_GPIO_Init(LCD_BL_CTRL_GPIO_PORT, &gpio_init_structure);
+}
+
+/**
+ * @brief DeInitializes BSP_LCD MSP.
+ * @param hltdc: LTDC handle
+ * @param Params
+ * @retval None
+ */
+__weak void BSP_LCD_MspDeInit(LTDC_HandleTypeDef *hltdc, void *Params)
+{
+ GPIO_InitTypeDef gpio_init_structure;
+
+ /* Disable LTDC block */
+ __HAL_LTDC_DISABLE(hltdc);
+
+ /* LTDC Pins deactivation */
+
+ /* GPIOE deactivation */
+ gpio_init_structure.Pin = GPIO_PIN_4;
+ HAL_GPIO_DeInit(GPIOE, gpio_init_structure.Pin);
+
+ /* GPIOG deactivation */
+ gpio_init_structure.Pin = GPIO_PIN_12;
+ HAL_GPIO_DeInit(GPIOG, gpio_init_structure.Pin);
+
+ /* GPIOI deactivation */
+ gpio_init_structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_12 | \
+ GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
+ HAL_GPIO_DeInit(GPIOI, gpio_init_structure.Pin);
+
+ /* GPIOJ deactivation */
+ gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | \
+ GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | \
+ GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | \
+ GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
+ HAL_GPIO_DeInit(GPIOJ, gpio_init_structure.Pin);
+
+ /* GPIOK deactivation */
+ gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_4 | \
+ GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
+ HAL_GPIO_DeInit(GPIOK, gpio_init_structure.Pin);
+
+ /* Disable LTDC clock */
+ __HAL_RCC_LTDC_CLK_DISABLE();
+
+ /* GPIO pins clock can be shut down in the application
+ by surcharging this __weak function */
+}
+
+/**
+ * @brief Clock Config.
+ * @param hltdc: LTDC handle
+ * @param Params
+ * @note This API is called by BSP_LCD_Init()
+ * Being __weak it can be overwritten by the application
+ * @retval None
+ */
+__weak void BSP_LCD_ClockConfig(LTDC_HandleTypeDef *hltdc, void *Params)
+{
+ static RCC_PeriphCLKInitTypeDef periph_clk_init_struct;
+
+ /* RK043FN48H LCD clock configuration */
+ /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */
+ /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */
+ /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/5 = 38.4 Mhz */
+ /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_4 = 38.4/4 = 9.6Mhz */
+ periph_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
+ periph_clk_init_struct.PLLSAI.PLLSAIN = 192;
+ periph_clk_init_struct.PLLSAI.PLLSAIR = RK043FN48H_FREQUENCY_DIVIDER;
+ periph_clk_init_struct.PLLSAIDivR = RCC_PLLSAIDIVR_4;
+ HAL_RCCEx_PeriphCLKConfig(&periph_clk_init_struct);
+}
+
+
+/*******************************************************************************
+ Static Functions
+*******************************************************************************/
+
+/**
+ * @brief Draws a character on LCD.
+ * @param Xpos: Line where to display the character shape
+ * @param Ypos: Start column address
+ * @param c: Pointer to the character data
+ * @retval None
+ */
+static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c)
+{
+ uint32_t i = 0, j = 0;
+ uint16_t height, width;
+ uint8_t offset;
+ uint8_t *pchar;
+ uint32_t line;
+
+ height = DrawProp[ActiveLayer].pFont->Height;
+ width = DrawProp[ActiveLayer].pFont->Width;
+
+ offset = 8 *((width + 7)/8) - width ;
+
+ for(i = 0; i < height; i++)
+ {
+ pchar = ((uint8_t *)c + (width + 7)/8 * i);
+
+ switch(((width + 7)/8))
+ {
+
+ case 1:
+ line = pchar[0];
+ break;
+
+ case 2:
+ line = (pchar[0]<< 8) | pchar[1];
+ break;
+
+ case 3:
+ default:
+ line = (pchar[0]<< 16) | (pchar[1]<< 8) | pchar[2];
+ break;
+ }
+
+ for (j = 0; j < width; j++)
+ {
+ if(line & (1 << (width- j + offset- 1)))
+ {
+ BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].TextColor);
+ }
+ else
+ {
+ BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].BackColor);
+ }
+ }
+ Ypos++;
+ }
+}
+
+/**
+ * @brief Fills a triangle (between 3 points).
+ * @param x1: Point 1 X position
+ * @param y1: Point 1 Y position
+ * @param x2: Point 2 X position
+ * @param y2: Point 2 Y position
+ * @param x3: Point 3 X position
+ * @param y3: Point 3 Y position
+ * @retval None
+ */
+static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3)
+{
+ int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0,
+ yinc1 = 0, yinc2 = 0, den = 0, num = 0, num_add = 0, num_pixels = 0,
+ curpixel = 0;
+
+ deltax = ABS(x2 - x1); /* The difference between the x's */
+ deltay = ABS(y2 - y1); /* The difference between the y's */
+ x = x1; /* Start x off at the first pixel */
+ y = y1; /* Start y off at the first pixel */
+
+ if (x2 >= x1) /* The x-values are increasing */
+ {
+ xinc1 = 1;
+ xinc2 = 1;
+ }
+ else /* The x-values are decreasing */
+ {
+ xinc1 = -1;
+ xinc2 = -1;
+ }
+
+ if (y2 >= y1) /* The y-values are increasing */
+ {
+ yinc1 = 1;
+ yinc2 = 1;
+ }
+ else /* The y-values are decreasing */
+ {
+ yinc1 = -1;
+ yinc2 = -1;
+ }
+
+ if (deltax >= deltay) /* There is at least one x-value for every y-value */
+ {
+ xinc1 = 0; /* Don't change the x when numerator >= denominator */
+ yinc2 = 0; /* Don't change the y for every iteration */
+ den = deltax;
+ num = deltax / 2;
+ num_add = deltay;
+ num_pixels = deltax; /* There are more x-values than y-values */
+ }
+ else /* There is at least one y-value for every x-value */
+ {
+ xinc2 = 0; /* Don't change the x for every iteration */
+ yinc1 = 0; /* Don't change the y when numerator >= denominator */
+ den = deltay;
+ num = deltay / 2;
+ num_add = deltax;
+ num_pixels = deltay; /* There are more y-values than x-values */
+ }
+
+ for (curpixel = 0; curpixel <= num_pixels; curpixel++)
+ {
+ BSP_LCD_DrawLine(x, y, x3, y3);
+
+ num += num_add; /* Increase the numerator by the top of the fraction */
+ if (num >= den) /* Check if numerator >= denominator */
+ {
+ num -= den; /* Calculate the new numerator value */
+ x += xinc1; /* Change the x as appropriate */
+ y += yinc1; /* Change the y as appropriate */
+ }
+ x += xinc2; /* Change the x as appropriate */
+ y += yinc2; /* Change the y as appropriate */
+ }
+}
+
+/**
+ * @brief Fills a buffer.
+ * @param LayerIndex: Layer index
+ * @param pDst: Pointer to destination buffer
+ * @param xSize: Buffer width
+ * @param ySize: Buffer height
+ * @param OffLine: Offset
+ * @param ColorIndex: Color index
+ * @retval None
+ */
+static void LL_FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t ColorIndex)
+{
+ /* Register to memory mode with ARGB8888 as color Mode */
+ hDma2dHandler.Init.Mode = DMA2D_R2M;
+ if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
+ { /* RGB565 format */
+ hDma2dHandler.Init.ColorMode = DMA2D_RGB565;
+ }
+ else
+ { /* ARGB8888 format */
+ hDma2dHandler.Init.ColorMode = DMA2D_ARGB8888;
+ }
+ hDma2dHandler.Init.OutputOffset = OffLine;
+
+ hDma2dHandler.Instance = DMA2D;
+
+ /* DMA2D Initialization */
+ if(HAL_DMA2D_Init(&hDma2dHandler) == HAL_OK)
+ {
+ if(HAL_DMA2D_ConfigLayer(&hDma2dHandler, LayerIndex) == HAL_OK)
+ {
+ if (HAL_DMA2D_Start(&hDma2dHandler, ColorIndex, (uint32_t)pDst, xSize, ySize) == HAL_OK)
+ {
+ /* Polling For DMA transfer */
+ HAL_DMA2D_PollForTransfer(&hDma2dHandler, 10);
+ }
+ }
+ }
+}
+
+/**
+ * @brief Converts a line to an ARGB8888 pixel format.
+ * @param pSrc: Pointer to source buffer
+ * @param pDst: Output color
+ * @param xSize: Buffer width
+ * @param ColorMode: Input color mode
+ * @retval None
+ */
+static void LL_ConvertLineToARGB8888(void *pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode)
+{
+ /* Configure the DMA2D Mode, Color Mode and output offset */
+ hDma2dHandler.Init.Mode = DMA2D_M2M_PFC;
+ hDma2dHandler.Init.ColorMode = DMA2D_ARGB8888;
+ hDma2dHandler.Init.OutputOffset = 0;
+
+ /* Foreground Configuration */
+ hDma2dHandler.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
+ hDma2dHandler.LayerCfg[1].InputAlpha = 0xFF;
+ hDma2dHandler.LayerCfg[1].InputColorMode = ColorMode;
+ hDma2dHandler.LayerCfg[1].InputOffset = 0;
+
+ hDma2dHandler.Instance = DMA2D;
+
+ /* DMA2D Initialization */
+ if(HAL_DMA2D_Init(&hDma2dHandler) == HAL_OK)
+ {
+ if(HAL_DMA2D_ConfigLayer(&hDma2dHandler, 1) == HAL_OK)
+ {
+ if (HAL_DMA2D_Start(&hDma2dHandler, (uint32_t)pSrc, (uint32_t)pDst, xSize, 1) == HAL_OK)
+ {
+ /* Polling For DMA transfer */
+ HAL_DMA2D_PollForTransfer(&hDma2dHandler, 10);
+ }
+ }
+ }
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/stm32746g_discovery_lcd.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/stm32746g_discovery_lcd.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,256 @@
+/**
+ ******************************************************************************
+ * @file stm32746g_discovery_lcd.h
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 25-June-2015
+ * @brief This file contains the common defines and functions prototypes for
+ * the stm32746g_discovery_lcd.c driver.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32746G_DISCOVERY_LCD_H
+#define __STM32746G_DISCOVERY_LCD_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+/* Include LCD component Driver */
+/* LCD RK043FN48H-CT672B 4,3" 480x272 pixels */
+#include "rk043fn48h.h"
+
+/* Include SDRAM Driver */
+#include "stm32746g_discovery_sdram.h"
+
+#include "stm32746g_discovery.h"
+#include "fonts.h"
+
+/** @addtogroup BSP
+ * @{
+ */
+
+/** @addtogroup STM32746G_DISCOVERY
+ * @{
+ */
+
+/** @addtogroup STM32746G_DISCOVERY_LCD
+ * @{
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Exported_Types STM32746G_DISCOVERY_LCD Exported Types
+ * @{
+ */
+typedef struct
+{
+ uint32_t TextColor;
+ uint32_t BackColor;
+ sFONT *pFont;
+}LCD_DrawPropTypeDef;
+
+typedef struct
+{
+ int16_t X;
+ int16_t Y;
+}Point, * pPoint;
+
+/**
+ * @brief Line mode structures definition
+ */
+typedef enum
+{
+ CENTER_MODE = 0x01, /* Center mode */
+ RIGHT_MODE = 0x02, /* Right mode */
+ LEFT_MODE = 0x03 /* Left mode */
+}Text_AlignModeTypdef;
+
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Exported_Constants STM32746G_DISCOVERY_LCD Exported Constants
+ * @{
+ */
+#define MAX_LAYER_NUMBER ((uint32_t)2)
+
+#define LCD_LayerCfgTypeDef LTDC_LayerCfgTypeDef
+
+#define LTDC_ACTIVE_LAYER ((uint32_t)1) /* Layer 1 */
+/**
+ * @brief LCD status structure definition
+ */
+#define LCD_OK ((uint8_t)0x00)
+#define LCD_ERROR ((uint8_t)0x01)
+#define LCD_TIMEOUT ((uint8_t)0x02)
+
+/**
+ * @brief LCD FB_StartAddress
+ */
+#define LCD_FB_START_ADDRESS ((uint32_t)0xC0000000)
+
+/**
+ * @brief LCD color
+ */
+#define LCD_COLOR_BLUE ((uint32_t)0xFF0000FF)
+#define LCD_COLOR_GREEN ((uint32_t)0xFF00FF00)
+#define LCD_COLOR_RED ((uint32_t)0xFFFF0000)
+#define LCD_COLOR_CYAN ((uint32_t)0xFF00FFFF)
+#define LCD_COLOR_MAGENTA ((uint32_t)0xFFFF00FF)
+#define LCD_COLOR_YELLOW ((uint32_t)0xFFFFFF00)
+#define LCD_COLOR_LIGHTBLUE ((uint32_t)0xFF8080FF)
+#define LCD_COLOR_LIGHTGREEN ((uint32_t)0xFF80FF80)
+#define LCD_COLOR_LIGHTRED ((uint32_t)0xFFFF8080)
+#define LCD_COLOR_LIGHTCYAN ((uint32_t)0xFF80FFFF)
+#define LCD_COLOR_LIGHTMAGENTA ((uint32_t)0xFFFF80FF)
+#define LCD_COLOR_LIGHTYELLOW ((uint32_t)0xFFFFFF80)
+#define LCD_COLOR_DARKBLUE ((uint32_t)0xFF000080)
+#define LCD_COLOR_DARKGREEN ((uint32_t)0xFF008000)
+#define LCD_COLOR_DARKRED ((uint32_t)0xFF800000)
+#define LCD_COLOR_DARKCYAN ((uint32_t)0xFF008080)
+#define LCD_COLOR_DARKMAGENTA ((uint32_t)0xFF800080)
+#define LCD_COLOR_DARKYELLOW ((uint32_t)0xFF808000)
+#define LCD_COLOR_WHITE ((uint32_t)0xFFFFFFFF)
+#define LCD_COLOR_LIGHTGRAY ((uint32_t)0xFFD3D3D3)
+#define LCD_COLOR_GRAY ((uint32_t)0xFF808080)
+#define LCD_COLOR_DARKGRAY ((uint32_t)0xFF404040)
+#define LCD_COLOR_BLACK ((uint32_t)0xFF000000)
+#define LCD_COLOR_BROWN ((uint32_t)0xFFA52A2A)
+#define LCD_COLOR_ORANGE ((uint32_t)0xFFFFA500)
+#define LCD_COLOR_TRANSPARENT ((uint32_t)0xFF000000)
+
+/**
+ * @brief LCD default font
+ */
+#define LCD_DEFAULT_FONT Font24
+
+/**
+ * @brief LCD special pins
+ */
+/* Display enable pin */
+#define LCD_DISP_PIN GPIO_PIN_12
+#define LCD_DISP_GPIO_PORT GPIOI
+#define LCD_DISP_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE()
+#define LCD_DISP_GPIO_CLK_DISABLE() __HAL_RCC_GPIOI_CLK_DISABLE()
+
+/* Backlight control pin */
+#define LCD_BL_CTRL_PIN GPIO_PIN_3
+#define LCD_BL_CTRL_GPIO_PORT GPIOK
+#define LCD_BL_CTRL_GPIO_CLK_ENABLE() __HAL_RCC_GPIOK_CLK_ENABLE()
+#define LCD_BL_CTRL_GPIO_CLK_DISABLE() __HAL_RCC_GPIOK_CLK_DISABLE()
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32746G_DISCOVERY_LCD_Exported_Functions
+ * @{
+ */
+uint8_t BSP_LCD_Init(void);
+uint8_t BSP_LCD_DeInit(void);
+uint32_t BSP_LCD_GetXSize(void);
+uint32_t BSP_LCD_GetYSize(void);
+void BSP_LCD_SetXSize(uint32_t imageWidthPixels);
+void BSP_LCD_SetYSize(uint32_t imageHeightPixels);
+
+/* Functions using the LTDC controller */
+void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FrameBuffer);
+void BSP_LCD_LayerRgb565Init(uint16_t LayerIndex, uint32_t FB_Address);
+void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency);
+void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address);
+void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue);
+void BSP_LCD_ResetColorKeying(uint32_t LayerIndex);
+void BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
+
+void BSP_LCD_SelectLayer(uint32_t LayerIndex);
+void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State);
+
+void BSP_LCD_SetTextColor(uint32_t Color);
+uint32_t BSP_LCD_GetTextColor(void);
+void BSP_LCD_SetBackColor(uint32_t Color);
+uint32_t BSP_LCD_GetBackColor(void);
+void BSP_LCD_SetFont(sFONT *fonts);
+sFONT *BSP_LCD_GetFont(void);
+
+uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos);
+void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t pixel);
+void BSP_LCD_Clear(uint32_t Color);
+void BSP_LCD_ClearStringLine(uint32_t Line);
+void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr);
+void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode);
+void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii);
+
+void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length);
+void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length);
+void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
+void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
+void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
+void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount);
+void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
+void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp);
+
+void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
+void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
+void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount);
+void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
+
+void BSP_LCD_DisplayOff(void);
+void BSP_LCD_DisplayOn(void);
+
+/* These functions can be modified in case the current settings
+ need to be changed for specific application needs */
+void BSP_LCD_MspInit(LTDC_HandleTypeDef *hltdc, void *Params);
+void BSP_LCD_MspDeInit(LTDC_HandleTypeDef *hltdc, void *Params);
+void BSP_LCD_ClockConfig(LTDC_HandleTypeDef *hltdc, void *Params);
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32746G_DISCOVERY_LCD_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/stm32746g_discovery_sdram.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/stm32746g_discovery_sdram.c Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,503 @@
+/**
+ ******************************************************************************
+ * @file stm32746g_discovery_sdram.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 25-June-2015
+ * @brief This file includes the SDRAM driver for the MT48LC4M32B2B5-7 memory
+ * device mounted on STM32746G-Discovery board.
+ @verbatim
+ 1. How To use this driver:
+ --------------------------
+ - This driver is used to drive the MT48LC4M32B2B5-7 SDRAM external memory mounted
+ on STM32746G-Discovery board.
+ - This driver does not need a specific component driver for the SDRAM device
+ to be included with.
+
+ 2. Driver description:
+ ---------------------
+ + Initialization steps:
+ o Initialize the SDRAM external memory using the BSP_SDRAM_Init() function. This
+ function includes the MSP layer hardware resources initialization and the
+ FMC controller configuration to interface with the external SDRAM memory.
+ o It contains the SDRAM initialization sequence to program the SDRAM external
+ device using the function BSP_SDRAM_Initialization_sequence(). Note that this
+ sequence is standard for all SDRAM devices, but can include some differences
+ from a device to another. If it is the case, the right sequence should be
+ implemented separately.
+
+ + SDRAM read/write operations
+ o SDRAM external memory can be accessed with read/write operations once it is
+ initialized.
+ Read/write operation can be performed with AHB access using the functions
+ BSP_SDRAM_ReadData()/BSP_SDRAM_WriteData(), or by DMA transfer using the functions
+ BSP_SDRAM_ReadData_DMA()/BSP_SDRAM_WriteData_DMA().
+ o The AHB access is performed with 32-bit width transaction, the DMA transfer
+ configuration is fixed at single (no burst) word transfer (see the
+ SDRAM_MspInit() static function).
+ o User can implement his own functions for read/write access with his desired
+ configurations.
+ o If interrupt mode is used for DMA transfer, the function BSP_SDRAM_DMA_IRQHandler()
+ is called in IRQ handler file, to serve the generated interrupt once the DMA
+ transfer is complete.
+ o You can send a command to the SDRAM device in runtime using the function
+ BSP_SDRAM_Sendcmd(), and giving the desired command as parameter chosen between
+ the predefined commands of the "FMC_SDRAM_CommandTypeDef" structure.
+
+ @endverbatim
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32746g_discovery_sdram.h"
+
+// mbed function to replace HAL_Delay function
+void wait_ms(int ms);
+
+/** @addtogroup BSP
+ * @{
+ */
+
+/** @addtogroup STM32746G_DISCOVERY
+ * @{
+ */
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM STM32746G_DISCOVERY_SDRAM
+ * @{
+ */
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Types_Definitions STM32746G_DISCOVERY_SDRAM Private Types Definitions
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Defines STM32746G_DISCOVERY_SDRAM Private Defines
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Macros STM32746G_DISCOVERY_SDRAM Private Macros
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Variables STM32746G_DISCOVERY_SDRAM Private Variables
+ * @{
+ */
+static SDRAM_HandleTypeDef sdramHandle;
+static FMC_SDRAM_TimingTypeDef Timing;
+static FMC_SDRAM_CommandTypeDef Command;
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Function_Prototypes STM32746G_DISCOVERY_SDRAM Private Function Prototypes
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Functions STM32746G_DISCOVERY_SDRAM Exported Functions
+ * @{
+ */
+
+/**
+ * @brief Initializes the SDRAM device.
+ * @retval SDRAM status
+ */
+uint8_t BSP_SDRAM_Init(void)
+{
+ static uint8_t sdramstatus = SDRAM_ERROR;
+ /* SDRAM device configuration */
+ sdramHandle.Instance = FMC_SDRAM_DEVICE;
+
+ /* Timing configuration for 100Mhz as SD clock frequency (System clock is up to 200Mhz) */
+ Timing.LoadToActiveDelay = 2;
+ Timing.ExitSelfRefreshDelay = 7;
+ Timing.SelfRefreshTime = 4;
+ Timing.RowCycleDelay = 7;
+ Timing.WriteRecoveryTime = 2;
+ Timing.RPDelay = 2;
+ Timing.RCDDelay = 2;
+
+ sdramHandle.Init.SDBank = FMC_SDRAM_BANK1;
+ sdramHandle.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_8;
+ sdramHandle.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_12;
+ sdramHandle.Init.MemoryDataWidth = SDRAM_MEMORY_WIDTH;
+ sdramHandle.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
+ sdramHandle.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_2;
+ sdramHandle.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
+ sdramHandle.Init.SDClockPeriod = SDCLOCK_PERIOD;
+ sdramHandle.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;
+ sdramHandle.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_0;
+
+ /* SDRAM controller initialization */
+
+ BSP_SDRAM_MspInit(&sdramHandle, NULL); /* __weak function can be rewritten by the application */
+
+ if(HAL_SDRAM_Init(&sdramHandle, &Timing) != HAL_OK)
+ {
+ sdramstatus = SDRAM_ERROR;
+ }
+ else
+ {
+ sdramstatus = SDRAM_OK;
+ }
+
+ /* SDRAM initialization sequence */
+ BSP_SDRAM_Initialization_sequence(REFRESH_COUNT);
+
+ return sdramstatus;
+}
+
+/**
+ * @brief DeInitializes the SDRAM device.
+ * @retval SDRAM status
+ */
+uint8_t BSP_SDRAM_DeInit(void)
+{
+ static uint8_t sdramstatus = SDRAM_ERROR;
+ /* SDRAM device de-initialization */
+ sdramHandle.Instance = FMC_SDRAM_DEVICE;
+
+ if(HAL_SDRAM_DeInit(&sdramHandle) != HAL_OK)
+ {
+ sdramstatus = SDRAM_ERROR;
+ }
+ else
+ {
+ sdramstatus = SDRAM_OK;
+ }
+
+ /* SDRAM controller de-initialization */
+ BSP_SDRAM_MspDeInit(&sdramHandle, NULL);
+
+ return sdramstatus;
+}
+
+/**
+ * @brief Programs the SDRAM device.
+ * @param RefreshCount: SDRAM refresh counter value
+ * @retval None
+ */
+void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount)
+{
+ __IO uint32_t tmpmrd = 0;
+
+ /* Step 1: Configure a clock configuration enable command */
+ Command.CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
+ Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
+ Command.AutoRefreshNumber = 1;
+ Command.ModeRegisterDefinition = 0;
+
+ /* Send the command */
+ HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);
+
+ /* Step 2: Insert 100 us minimum delay */
+ /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */
+ //HAL_Delay(1);
+ wait_ms(1);
+
+ /* Step 3: Configure a PALL (precharge all) command */
+ Command.CommandMode = FMC_SDRAM_CMD_PALL;
+ Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
+ Command.AutoRefreshNumber = 1;
+ Command.ModeRegisterDefinition = 0;
+
+ /* Send the command */
+ HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);
+
+ /* Step 4: Configure an Auto Refresh command */
+ Command.CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
+ Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
+ Command.AutoRefreshNumber = 8;
+ Command.ModeRegisterDefinition = 0;
+
+ /* Send the command */
+ HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);
+
+ /* Step 5: Program the external memory mode register */
+ tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1 |\
+ SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL |\
+ SDRAM_MODEREG_CAS_LATENCY_2 |\
+ SDRAM_MODEREG_OPERATING_MODE_STANDARD |\
+ SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
+
+ Command.CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
+ Command.CommandTarget = FMC_SDRAM_CMD_TARGET_BANK1;
+ Command.AutoRefreshNumber = 1;
+ Command.ModeRegisterDefinition = tmpmrd;
+
+ /* Send the command */
+ HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);
+
+ /* Step 6: Set the refresh rate counter */
+ /* Set the device refresh rate */
+ HAL_SDRAM_ProgramRefreshRate(&sdramHandle, RefreshCount);
+}
+
+/**
+ * @brief Reads an amount of data from the SDRAM memory in polling mode.
+ * @param uwStartAddress: Read start address
+ * @param pData: Pointer to data to be read
+ * @param uwDataSize: Size of read data from the memory
+ * @retval SDRAM status
+ */
+uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize)
+{
+ if(HAL_SDRAM_Read_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
+ {
+ return SDRAM_ERROR;
+ }
+ else
+ {
+ return SDRAM_OK;
+ }
+}
+
+/**
+ * @brief Reads an amount of data from the SDRAM memory in DMA mode.
+ * @param uwStartAddress: Read start address
+ * @param pData: Pointer to data to be read
+ * @param uwDataSize: Size of read data from the memory
+ * @retval SDRAM status
+ */
+uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize)
+{
+ if(HAL_SDRAM_Read_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
+ {
+ return SDRAM_ERROR;
+ }
+ else
+ {
+ return SDRAM_OK;
+ }
+}
+
+/**
+ * @brief Writes an amount of data to the SDRAM memory in polling mode.
+ * @param uwStartAddress: Write start address
+ * @param pData: Pointer to data to be written
+ * @param uwDataSize: Size of written data from the memory
+ * @retval SDRAM status
+ */
+uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize)
+{
+ if(HAL_SDRAM_Write_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
+ {
+ return SDRAM_ERROR;
+ }
+ else
+ {
+ return SDRAM_OK;
+ }
+}
+
+/**
+ * @brief Writes an amount of data to the SDRAM memory in DMA mode.
+ * @param uwStartAddress: Write start address
+ * @param pData: Pointer to data to be written
+ * @param uwDataSize: Size of written data from the memory
+ * @retval SDRAM status
+ */
+uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize)
+{
+ if(HAL_SDRAM_Write_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
+ {
+ return SDRAM_ERROR;
+ }
+ else
+ {
+ return SDRAM_OK;
+ }
+}
+
+/**
+ * @brief Sends command to the SDRAM bank.
+ * @param SdramCmd: Pointer to SDRAM command structure
+ * @retval SDRAM status
+ */
+uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd)
+{
+ if(HAL_SDRAM_SendCommand(&sdramHandle, SdramCmd, SDRAM_TIMEOUT) != HAL_OK)
+ {
+ return SDRAM_ERROR;
+ }
+ else
+ {
+ return SDRAM_OK;
+ }
+}
+
+/**
+ * @brief Handles SDRAM DMA transfer interrupt request.
+ * @retval None
+ */
+void BSP_SDRAM_DMA_IRQHandler(void)
+{
+ HAL_DMA_IRQHandler(sdramHandle.hdma);
+}
+
+/**
+ * @brief Initializes SDRAM MSP.
+ * @param hsdram: SDRAM handle
+ * @param Params
+ * @retval None
+ */
+__weak void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef *hsdram, void *Params)
+{
+ static DMA_HandleTypeDef dma_handle;
+ GPIO_InitTypeDef gpio_init_structure;
+
+ /* Enable FMC clock */
+ __HAL_RCC_FMC_CLK_ENABLE();
+
+ /* Enable chosen DMAx clock */
+ __DMAx_CLK_ENABLE();
+
+ /* Enable GPIOs clock */
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ __HAL_RCC_GPIOD_CLK_ENABLE();
+ __HAL_RCC_GPIOE_CLK_ENABLE();
+ __HAL_RCC_GPIOF_CLK_ENABLE();
+ __HAL_RCC_GPIOG_CLK_ENABLE();
+ __HAL_RCC_GPIOH_CLK_ENABLE();
+
+ /* Common GPIO configuration */
+ gpio_init_structure.Mode = GPIO_MODE_AF_PP;
+ gpio_init_structure.Pull = GPIO_PULLUP;
+ gpio_init_structure.Speed = GPIO_SPEED_FAST;
+ gpio_init_structure.Alternate = GPIO_AF12_FMC;
+
+ /* GPIOC configuration */
+ gpio_init_structure.Pin = GPIO_PIN_3;
+ HAL_GPIO_Init(GPIOC, &gpio_init_structure);
+
+ /* GPIOD configuration */
+ gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3 | GPIO_PIN_8 | GPIO_PIN_9 |
+ GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15;
+ HAL_GPIO_Init(GPIOD, &gpio_init_structure);
+
+ /* GPIOE configuration */
+ gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7| GPIO_PIN_8 | GPIO_PIN_9 |\
+ GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\
+ GPIO_PIN_15;
+ HAL_GPIO_Init(GPIOE, &gpio_init_structure);
+
+ /* GPIOF configuration */
+ gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\
+ GPIO_PIN_5 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\
+ GPIO_PIN_15;
+ HAL_GPIO_Init(GPIOF, &gpio_init_structure);
+
+ /* GPIOG configuration */
+ gpio_init_structure.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_8 |\
+ GPIO_PIN_15;
+ HAL_GPIO_Init(GPIOG, &gpio_init_structure);
+
+ /* GPIOH configuration */
+ gpio_init_structure.Pin = GPIO_PIN_3 | GPIO_PIN_5;
+ HAL_GPIO_Init(GPIOH, &gpio_init_structure);
+
+ /* Configure common DMA parameters */
+ dma_handle.Init.Channel = SDRAM_DMAx_CHANNEL;
+ dma_handle.Init.Direction = DMA_MEMORY_TO_MEMORY;
+ dma_handle.Init.PeriphInc = DMA_PINC_ENABLE;
+ dma_handle.Init.MemInc = DMA_MINC_ENABLE;
+ dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
+ dma_handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
+ dma_handle.Init.Mode = DMA_NORMAL;
+ dma_handle.Init.Priority = DMA_PRIORITY_HIGH;
+ dma_handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
+ dma_handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
+ dma_handle.Init.MemBurst = DMA_MBURST_SINGLE;
+ dma_handle.Init.PeriphBurst = DMA_PBURST_SINGLE;
+
+ dma_handle.Instance = SDRAM_DMAx_STREAM;
+
+ /* Associate the DMA handle */
+ __HAL_LINKDMA(hsdram, hdma, dma_handle);
+
+ /* Deinitialize the stream for new transfer */
+ HAL_DMA_DeInit(&dma_handle);
+
+ /* Configure the DMA stream */
+ HAL_DMA_Init(&dma_handle);
+
+ /* NVIC configuration for DMA transfer complete interrupt */
+ HAL_NVIC_SetPriority(SDRAM_DMAx_IRQn, 5, 0);
+ HAL_NVIC_EnableIRQ(SDRAM_DMAx_IRQn);
+}
+
+/**
+ * @brief DeInitializes SDRAM MSP.
+ * @param hsdram: SDRAM handle
+ * @param Params
+ * @retval None
+ */
+__weak void BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef *hsdram, void *Params)
+{
+ static DMA_HandleTypeDef dma_handle;
+
+ /* Disable NVIC configuration for DMA interrupt */
+ HAL_NVIC_DisableIRQ(SDRAM_DMAx_IRQn);
+
+ /* Deinitialize the stream for new transfer */
+ dma_handle.Instance = SDRAM_DMAx_STREAM;
+ HAL_DMA_DeInit(&dma_handle);
+
+ /* GPIO pins clock, FMC clock and DMA clock can be shut down in the applications
+ by surcharging this __weak function */
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/stm32746g_discovery_sdram.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/stm32746g_discovery_sdram.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,165 @@
+/**
+ ******************************************************************************
+ * @file stm32746g_discovery_sdram.h
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 25-June-2015
+ * @brief This file contains the common defines and functions prototypes for
+ * the stm32746g_discovery_sdram.c driver.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32746G_DISCOVERY_SDRAM_H
+#define __STM32746G_DISCOVERY_SDRAM_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f7xx_hal.h"
+
+/** @addtogroup BSP
+ * @{
+ */
+
+/** @addtogroup STM32746G_DISCOVERY
+ * @{
+ */
+
+/** @addtogroup STM32746G_DISCOVERY_SDRAM
+ * @{
+ */
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Types STM32746G_DISCOVERY_SDRAM Exported Types
+ * @{
+ */
+
+/**
+ * @brief SDRAM status structure definition
+ */
+#define SDRAM_OK ((uint8_t)0x00)
+#define SDRAM_ERROR ((uint8_t)0x01)
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Constants STM32746G_DISCOVERY_SDRAM Exported Constants
+ * @{
+ */
+#define SDRAM_DEVICE_ADDR ((uint32_t)0xC0000000)
+#define SDRAM_DEVICE_SIZE ((uint32_t)0x800000) /* SDRAM device size in MBytes */
+
+/* #define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_8 */
+#define SDRAM_MEMORY_WIDTH FMC_SDRAM_MEM_BUS_WIDTH_16
+
+#define SDCLOCK_PERIOD FMC_SDRAM_CLOCK_PERIOD_2
+/* #define SDCLOCK_PERIOD FMC_SDRAM_CLOCK_PERIOD_3 */
+
+#define REFRESH_COUNT ((uint32_t)0x0603) /* SDRAM refresh counter (100Mhz SD clock) */
+
+#define SDRAM_TIMEOUT ((uint32_t)0xFFFF)
+
+/* DMA definitions for SDRAM DMA transfer */
+#define __DMAx_CLK_ENABLE __HAL_RCC_DMA2_CLK_ENABLE
+#define __DMAx_CLK_DISABLE __HAL_RCC_DMA2_CLK_DISABLE
+#define SDRAM_DMAx_CHANNEL DMA_CHANNEL_0
+#define SDRAM_DMAx_STREAM DMA2_Stream0
+#define SDRAM_DMAx_IRQn DMA2_Stream0_IRQn
+#define SDRAM_DMAx_IRQHandler DMA2_Stream0_IRQHandler
+/**
+ * @}
+ */
+
+/**
+ * @brief FMC SDRAM Mode definition register defines
+ */
+#define SDRAM_MODEREG_BURST_LENGTH_1 ((uint16_t)0x0000)
+#define SDRAM_MODEREG_BURST_LENGTH_2 ((uint16_t)0x0001)
+#define SDRAM_MODEREG_BURST_LENGTH_4 ((uint16_t)0x0002)
+#define SDRAM_MODEREG_BURST_LENGTH_8 ((uint16_t)0x0004)
+#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL ((uint16_t)0x0000)
+#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED ((uint16_t)0x0008)
+#define SDRAM_MODEREG_CAS_LATENCY_2 ((uint16_t)0x0020)
+#define SDRAM_MODEREG_CAS_LATENCY_3 ((uint16_t)0x0030)
+#define SDRAM_MODEREG_OPERATING_MODE_STANDARD ((uint16_t)0x0000)
+#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000)
+#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE ((uint16_t)0x0200)
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Macro STM32746G_DISCOVERY_SDRAM Exported Macro
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @addtogroup STM32746G_DISCOVERY_SDRAM_Exported_Functions
+ * @{
+ */
+uint8_t BSP_SDRAM_Init(void);
+uint8_t BSP_SDRAM_DeInit(void);
+void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount);
+uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
+uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
+uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
+uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
+uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd);
+void BSP_SDRAM_DMA_IRQHandler(void);
+
+/* These functions can be modified in case the current settings (e.g. DMA stream)
+ need to be changed for specific application needs */
+void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef *hsdram, void *Params);
+void BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef *hsdram, void *Params);
+
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32746G_DISCOVERY_SDRAM_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/stm32746g_discovery_ts.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/stm32746g_discovery_ts.c Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,447 @@
+/**
+ ******************************************************************************
+ * @file stm32746g_discovery_ts.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 25-June-2015
+ * @brief This file provides a set of functions needed to manage the Touch
+ * Screen on STM32746G-Discovery board.
+ @verbatim
+ 1. How To use this driver:
+ --------------------------
+ - This driver is used to drive the touch screen module of the STM32746G-Discovery
+ board on the RK043FN48H-CT672B 480x272 LCD screen with capacitive touch screen.
+ - The FT5336 component driver must be included in project files according to
+ the touch screen driver present on this board.
+
+ 2. Driver description:
+ ---------------------
+ + Initialization steps:
+ o Initialize the TS module using the BSP_TS_Init() function. This
+ function includes the MSP layer hardware resources initialization and the
+ communication layer configuration to start the TS use. The LCD size properties
+ (x and y) are passed as parameters.
+ o If TS interrupt mode is desired, you must configure the TS interrupt mode
+ by calling the function BSP_TS_ITConfig(). The TS interrupt mode is generated
+ as an external interrupt whenever a touch is detected.
+ The interrupt mode internally uses the IO functionalities driver driven by
+ the IO expander, to configure the IT line.
+
+ + Touch screen use
+ o The touch screen state is captured whenever the function BSP_TS_GetState() is
+ used. This function returns information about the last LCD touch occurred
+ in the TS_StateTypeDef structure.
+ o If TS interrupt mode is used, the function BSP_TS_ITGetStatus() is needed to get
+ the interrupt status. To clear the IT pending bits, you should call the
+ function BSP_TS_ITClear().
+ o The IT is handled using the corresponding external interrupt IRQ handler,
+ the user IT callback treatment is implemented on the same external interrupt
+ callback.
+ @endverbatim
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32746g_discovery_ts.h"
+
+/** @addtogroup BSP
+ * @{
+ */
+
+/** @addtogroup STM32746G_DISCOVERY
+ * @{
+ */
+
+/** @defgroup STM32746G_DISCOVERY_TS STM32746G_DISCOVERY_TS
+ * @{
+ */
+
+/** @defgroup STM32746G_DISCOVERY_TS_Private_Types_Definitions STM32746G_DISCOVERY_TS Types Definitions
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_TS_Private_Defines STM32746G_DISCOVERY_TS Types Defines
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_TS_Private_Macros STM32746G_DISCOVERY_TS Private Macros
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_TS_Imported_Variables STM32746G_DISCOVERY_TS Imported Variables
+ * @{
+ */
+ /**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_TS_Private_Variables STM32746G_DISCOVERY_TS Private Variables
+ * @{
+ */
+static TS_DrvTypeDef *tsDriver;
+static uint16_t tsXBoundary, tsYBoundary;
+static uint8_t tsOrientation;
+static uint8_t I2cAddress;
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_TS_Private_Function_Prototypes STM32746G_DISCOVERY_TS Private Function Prototypes
+ * @{
+ */
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_TS_Exported_Functions STM32746G_DISCOVERY_TS Exported Functions
+ * @{
+ */
+
+/**
+ * @brief Initializes and configures the touch screen functionalities and
+ * configures all necessary hardware resources (GPIOs, I2C, clocks..).
+ * @param ts_SizeX: Maximum X size of the TS area on LCD
+ * @param ts_SizeY: Maximum Y size of the TS area on LCD
+ * @retval TS_OK if all initializations are OK. Other value if error.
+ */
+uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY)
+{
+ uint8_t status = TS_OK;
+ tsXBoundary = ts_SizeX;
+ tsYBoundary = ts_SizeY;
+
+ /* Read ID and verify if the touch screen driver is ready */
+ ft5336_ts_drv.Init(TS_I2C_ADDRESS);
+ if(ft5336_ts_drv.ReadID(TS_I2C_ADDRESS) == FT5336_ID_VALUE)
+ {
+ /* Initialize the TS driver structure */
+ tsDriver = &ft5336_ts_drv;
+ I2cAddress = TS_I2C_ADDRESS;
+ tsOrientation = TS_SWAP_XY;
+
+ /* Initialize the TS driver */
+ tsDriver->Start(I2cAddress);
+ }
+ else
+ {
+ status = TS_DEVICE_NOT_FOUND;
+ }
+
+ return status;
+}
+
+/**
+ * @brief DeInitializes the TouchScreen.
+ * @retval TS state
+ */
+uint8_t BSP_TS_DeInit(void)
+{
+ /* Actually ts_driver does not provide a DeInit function */
+ return TS_OK;
+}
+
+/**
+ * @brief Configures and enables the touch screen interrupts.
+ * @retval TS_OK if all initializations are OK. Other value if error.
+ */
+uint8_t BSP_TS_ITConfig(void)
+{
+ GPIO_InitTypeDef gpio_init_structure;
+
+ /* Configure Interrupt mode for SD detection pin */
+ gpio_init_structure.Pin = TS_INT_PIN;
+ gpio_init_structure.Pull = GPIO_NOPULL;
+ gpio_init_structure.Speed = GPIO_SPEED_FAST;
+ gpio_init_structure.Mode = GPIO_MODE_IT_RISING;
+ HAL_GPIO_Init(TS_INT_GPIO_PORT, &gpio_init_structure);
+
+ /* Enable and set Touch screen EXTI Interrupt to the lowest priority */
+ HAL_NVIC_SetPriority((IRQn_Type)(TS_INT_EXTI_IRQn), 0x0F, 0x00);
+ HAL_NVIC_EnableIRQ((IRQn_Type)(TS_INT_EXTI_IRQn));
+
+ /* Enable the TS ITs */
+ tsDriver->EnableIT(I2cAddress);
+
+ return TS_OK;
+}
+
+/**
+ * @brief Gets the touch screen interrupt status.
+ * @retval TS_OK if all initializations are OK. Other value if error.
+ */
+uint8_t BSP_TS_ITGetStatus(void)
+{
+ /* Return the TS IT status */
+ return (tsDriver->GetITStatus(I2cAddress));
+}
+
+/**
+ * @brief Returns status and positions of the touch screen.
+ * @param TS_State: Pointer to touch screen current state structure
+ * @retval TS_OK if all initializations are OK. Other value if error.
+ */
+uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State)
+{
+ static uint32_t _x[TS_MAX_NB_TOUCH] = {0, 0};
+ static uint32_t _y[TS_MAX_NB_TOUCH] = {0, 0};
+ uint8_t ts_status = TS_OK;
+ uint16_t x[TS_MAX_NB_TOUCH];
+ uint16_t y[TS_MAX_NB_TOUCH];
+ uint16_t brute_x[TS_MAX_NB_TOUCH];
+ uint16_t brute_y[TS_MAX_NB_TOUCH];
+ uint16_t x_diff;
+ uint16_t y_diff;
+ uint32_t index;
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+ uint32_t weight = 0;
+ uint32_t area = 0;
+ uint32_t event = 0;
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+ /* Check and update the number of touches active detected */
+ TS_State->touchDetected = tsDriver->DetectTouch(I2cAddress);
+
+ if(TS_State->touchDetected)
+ {
+ for(index=0; index < TS_State->touchDetected; index++)
+ {
+ /* Get each touch coordinates */
+ tsDriver->GetXY(I2cAddress, &(brute_x[index]), &(brute_y[index]));
+
+ if(tsOrientation == TS_SWAP_NONE)
+ {
+ x[index] = brute_x[index];
+ y[index] = brute_y[index];
+ }
+
+ if(tsOrientation & TS_SWAP_X)
+ {
+ x[index] = 4096 - brute_x[index];
+ }
+
+ if(tsOrientation & TS_SWAP_Y)
+ {
+ y[index] = 4096 - brute_y[index];
+ }
+
+ if(tsOrientation & TS_SWAP_XY)
+ {
+ y[index] = brute_x[index];
+ x[index] = brute_y[index];
+ }
+
+ x_diff = x[index] > _x[index]? (x[index] - _x[index]): (_x[index] - x[index]);
+ y_diff = y[index] > _y[index]? (y[index] - _y[index]): (_y[index] - y[index]);
+
+ if ((x_diff + y_diff) > 5)
+ {
+ _x[index] = x[index];
+ _y[index] = y[index];
+ }
+
+ if(I2cAddress == FT5336_I2C_SLAVE_ADDRESS)
+ {
+ TS_State->touchX[index] = x[index];
+ TS_State->touchY[index] = y[index];
+ }
+ else
+ {
+ /* 2^12 = 4096 : indexes are expressed on a dynamic of 4096 */
+ TS_State->touchX[index] = (tsXBoundary * _x[index]) >> 12;
+ TS_State->touchY[index] = (tsYBoundary * _y[index]) >> 12;
+ }
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+
+ /* Get touch info related to the current touch */
+ ft5336_TS_GetTouchInfo(I2cAddress, index, &weight, &area, &event);
+
+ /* Update TS_State structure */
+ TS_State->touchWeight[index] = weight;
+ TS_State->touchArea[index] = area;
+
+ /* Remap touch event */
+ switch(event)
+ {
+ case FT5336_TOUCH_EVT_FLAG_PRESS_DOWN :
+ TS_State->touchEventId[index] = TOUCH_EVENT_PRESS_DOWN;
+ break;
+ case FT5336_TOUCH_EVT_FLAG_LIFT_UP :
+ TS_State->touchEventId[index] = TOUCH_EVENT_LIFT_UP;
+ break;
+ case FT5336_TOUCH_EVT_FLAG_CONTACT :
+ TS_State->touchEventId[index] = TOUCH_EVENT_CONTACT;
+ break;
+ case FT5336_TOUCH_EVT_FLAG_NO_EVENT :
+ TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT;
+ break;
+ default :
+ ts_status = TS_ERROR;
+ break;
+ } /* of switch(event) */
+
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+ } /* of for(index=0; index < TS_State->touchDetected; index++) */
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+ /* Get gesture Id */
+ ts_status = BSP_TS_Get_GestureId(TS_State);
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+ } /* end of if(TS_State->touchDetected != 0) */
+
+ return (ts_status);
+}
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+/**
+ * @brief Update gesture Id following a touch detected.
+ * @param TS_State: Pointer to touch screen current state structure
+ * @retval TS_OK if all initializations are OK. Other value if error.
+ */
+uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State)
+{
+ uint32_t gestureId = 0;
+ uint8_t ts_status = TS_OK;
+
+ /* Get gesture Id */
+ ft5336_TS_GetGestureID(I2cAddress, &gestureId);
+
+ /* Remap gesture Id to a TS_GestureIdTypeDef value */
+ switch(gestureId)
+ {
+ case FT5336_GEST_ID_NO_GESTURE :
+ TS_State->gestureId = GEST_ID_NO_GESTURE;
+ break;
+ case FT5336_GEST_ID_MOVE_UP :
+ TS_State->gestureId = GEST_ID_MOVE_UP;
+ break;
+ case FT5336_GEST_ID_MOVE_RIGHT :
+ TS_State->gestureId = GEST_ID_MOVE_RIGHT;
+ break;
+ case FT5336_GEST_ID_MOVE_DOWN :
+ TS_State->gestureId = GEST_ID_MOVE_DOWN;
+ break;
+ case FT5336_GEST_ID_MOVE_LEFT :
+ TS_State->gestureId = GEST_ID_MOVE_LEFT;
+ break;
+ case FT5336_GEST_ID_ZOOM_IN :
+ TS_State->gestureId = GEST_ID_ZOOM_IN;
+ break;
+ case FT5336_GEST_ID_ZOOM_OUT :
+ TS_State->gestureId = GEST_ID_ZOOM_OUT;
+ break;
+ default :
+ ts_status = TS_ERROR;
+ break;
+ } /* of switch(gestureId) */
+
+ return(ts_status);
+}
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+/**
+ * @brief Clears all touch screen interrupts.
+ */
+void BSP_TS_ITClear(void)
+{
+ /* Clear TS IT pending bits */
+ tsDriver->ClearIT(I2cAddress);
+}
+
+
+/** @defgroup STM32756G_DISCOVERY_TS_Private_Functions TS Private Functions
+ * @{
+ */
+
+
+/**
+ * @brief Function used to reset all touch data before a new acquisition
+ * of touch information.
+ * @param TS_State: Pointer to touch screen current state structure
+ * @retval TS_OK if OK, TE_ERROR if problem found.
+ */
+uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State)
+{
+ uint8_t ts_status = TS_ERROR;
+ uint32_t index;
+
+ if (TS_State != (TS_StateTypeDef *)NULL)
+ {
+ TS_State->gestureId = GEST_ID_NO_GESTURE;
+ TS_State->touchDetected = 0;
+
+ for(index = 0; index < TS_MAX_NB_TOUCH; index++)
+ {
+ TS_State->touchX[index] = 0;
+ TS_State->touchY[index] = 0;
+ TS_State->touchArea[index] = 0;
+ TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT;
+ TS_State->touchWeight[index] = 0;
+ }
+
+ ts_status = TS_OK;
+
+ } /* of if (TS_State != (TS_StateTypeDef *)NULL) */
+
+ return (ts_status);
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/stm32746g_discovery_ts.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/stm32746g_discovery_ts.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,214 @@
+/**
+ ******************************************************************************
+ * @file stm32746g_discovery_ts.h
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 25-June-2015
+ * @brief This file contains the common defines and functions prototypes for
+ * the stm32746g_discovery_ts.c driver.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32746G_DISCOVERY_TS_H
+#define __STM32746G_DISCOVERY_TS_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32746g_discovery.h"
+/* Include touch screen FT5336 component Driver */
+#include "ft5336.h"
+
+/** @addtogroup BSP
+ * @{
+ */
+
+/** @addtogroup STM32746G_DISCOVERY
+ * @{
+ */
+
+/** @addtogroup STM32746G_DISCOVERY_TS
+ * @{
+ */
+
+ /** @defgroup STM32746G_DISCOVERY_TS_Exported_Constants STM32746G_DISCOVERY_TS Exported Constants
+ * @{
+ */
+
+/** @brief With FT5336 : maximum 5 touches detected simultaneously
+ */
+#define TS_MAX_NB_TOUCH ((uint32_t) FT5336_MAX_DETECTABLE_TOUCH)
+
+#define TS_NO_IRQ_PENDING ((uint8_t) 0)
+#define TS_IRQ_PENDING ((uint8_t) 1)
+
+#define TS_SWAP_NONE ((uint8_t) 0x01)
+#define TS_SWAP_X ((uint8_t) 0x02)
+#define TS_SWAP_Y ((uint8_t) 0x04)
+#define TS_SWAP_XY ((uint8_t) 0x08)
+
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_TS_Exported_Types STM32746G_DISCOVERY_TS Exported Types
+ * @{
+ */
+/**
+* @brief TS_StateTypeDef
+* Define TS State structure
+*/
+typedef struct
+{
+ uint8_t touchDetected; /*!< Total number of active touches detected at last scan */
+ uint16_t touchX[TS_MAX_NB_TOUCH]; /*!< Touch X[0], X[1] coordinates on 12 bits */
+ uint16_t touchY[TS_MAX_NB_TOUCH]; /*!< Touch Y[0], Y[1] coordinates on 12 bits */
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+ uint8_t touchWeight[TS_MAX_NB_TOUCH]; /*!< Touch_Weight[0], Touch_Weight[1] : weight property of touches */
+ uint8_t touchEventId[TS_MAX_NB_TOUCH]; /*!< Touch_EventId[0], Touch_EventId[1] : take value of type @ref TS_TouchEventTypeDef */
+ uint8_t touchArea[TS_MAX_NB_TOUCH]; /*!< Touch_Area[0], Touch_Area[1] : touch area of each touch */
+ uint32_t gestureId; /*!< type of gesture detected : take value of type @ref TS_GestureIdTypeDef */
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+} TS_StateTypeDef;
+
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_TS_Exported_Constants STM32746G_DISCOVERY_TS Exported Constants
+ * @{
+ */
+
+typedef enum
+{
+ TS_OK = 0x00, /*!< Touch Ok */
+ TS_ERROR = 0x01, /*!< Touch Error */
+ TS_TIMEOUT = 0x02, /*!< Touch Timeout */
+ TS_DEVICE_NOT_FOUND = 0x03 /*!< Touchscreen device not found */
+}TS_StatusTypeDef;
+
+/**
+ * @brief TS_GestureIdTypeDef
+ * Define Possible managed gesture identification values returned by touch screen
+ * driver.
+ */
+typedef enum
+{
+ GEST_ID_NO_GESTURE = 0x00, /*!< Gesture not defined / recognized */
+ GEST_ID_MOVE_UP = 0x01, /*!< Gesture Move Up */
+ GEST_ID_MOVE_RIGHT = 0x02, /*!< Gesture Move Right */
+ GEST_ID_MOVE_DOWN = 0x03, /*!< Gesture Move Down */
+ GEST_ID_MOVE_LEFT = 0x04, /*!< Gesture Move Left */
+ GEST_ID_ZOOM_IN = 0x05, /*!< Gesture Zoom In */
+ GEST_ID_ZOOM_OUT = 0x06, /*!< Gesture Zoom Out */
+ GEST_ID_NB_MAX = 0x07 /*!< max number of gesture id */
+
+} TS_GestureIdTypeDef;
+
+/**
+ * @brief TS_TouchEventTypeDef
+ * Define Possible touch events kind as returned values
+ * by touch screen IC Driver.
+ */
+typedef enum
+{
+ TOUCH_EVENT_NO_EVT = 0x00, /*!< Touch Event : undetermined */
+ TOUCH_EVENT_PRESS_DOWN = 0x01, /*!< Touch Event Press Down */
+ TOUCH_EVENT_LIFT_UP = 0x02, /*!< Touch Event Lift Up */
+ TOUCH_EVENT_CONTACT = 0x03, /*!< Touch Event Contact */
+ TOUCH_EVENT_NB_MAX = 0x04 /*!< max number of touch events kind */
+
+} TS_TouchEventTypeDef;
+/**
+ * @}
+ */
+
+/** @defgroup STM32746G_DISCOVERY_TS_Imported_Variables STM32746G_DISCOVERY_TS Imported Variables
+ * @{
+ */
+/**
+ * @brief Table for touchscreen event information display on LCD :
+ * table indexed on enum @ref TS_TouchEventTypeDef information
+ */
+extern char * ts_event_string_tab[TOUCH_EVENT_NB_MAX];
+
+/**
+ * @brief Table for touchscreen gesture Id information display on LCD : table indexed
+ * on enum @ref TS_GestureIdTypeDef information
+ */
+extern char * ts_gesture_id_string_tab[GEST_ID_NB_MAX];
+/**
+ * @}
+ */
+
+/** @addtogroup STM32746G_DISCOVERY_TS_Exported_Functions
+ * @{
+ */
+uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY);
+uint8_t BSP_TS_DeInit(void);
+uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State);
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State);
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+uint8_t BSP_TS_ITConfig(void);
+uint8_t BSP_TS_ITGetStatus(void);
+void BSP_TS_ITClear(void);
+uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State);
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32746G_DISCOVERY_TS_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/BSP_DISCO_F746NG/ts.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/BSP_DISCO_F746NG/ts.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,107 @@
+/**
+ ******************************************************************************
+ * @file ts.h
+ * @author MCD Application Team
+ * @version V4.0.0
+ * @date 22-June-2015
+ * @brief This file contains all the functions prototypes for the Touch Screen driver.
+ ******************************************************************************
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __TS_H
+#define __TS_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include <stdint.h>
+
+/** @addtogroup BSP
+ * @{
+ */
+
+/** @addtogroup Components
+ * @{
+ */
+
+/** @addtogroup TS
+ * @{
+ */
+
+/** @defgroup TS_Exported_Types
+ * @{
+ */
+
+/** @defgroup TS_Driver_structure Touch Sensor Driver structure
+ * @{
+ */
+typedef struct
+{
+ void (*Init)(uint16_t);
+ uint16_t (*ReadID)(uint16_t);
+ void (*Reset)(uint16_t);
+ void (*Start)(uint16_t);
+ uint8_t (*DetectTouch)(uint16_t);
+ void (*GetXY)(uint16_t, uint16_t*, uint16_t*);
+ void (*EnableIT)(uint16_t);
+ void (*ClearIT)(uint16_t);
+ uint8_t (*GetITStatus)(uint16_t);
+ void (*DisableIT)(uint16_t);
+}TS_DrvTypeDef;
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TS_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 14f16771fe40 lib/LCD_DISCO_F746NG/LCD_DISCO_F746NG.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/LCD_DISCO_F746NG/LCD_DISCO_F746NG.cpp Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,265 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include "LCD_DISCO_F746NG.h"
+
+// Constructor
+LCD_DISCO_F746NG::LCD_DISCO_F746NG()
+{
+ BSP_LCD_Init();
+
+ BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS);
+ BSP_LCD_LayerDefaultInit(1, LCD_FB_START_ADDRESS+(BSP_LCD_GetXSize()*BSP_LCD_GetYSize()*4));
+
+ BSP_LCD_DisplayOn();
+
+ BSP_LCD_SelectLayer(0);
+ BSP_LCD_Clear(LCD_COLOR_BLACK);
+
+ BSP_LCD_SelectLayer(1);
+ BSP_LCD_Clear(LCD_COLOR_BLACK);
+
+ BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
+
+ BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
+ BSP_LCD_SetTextColor(LCD_COLOR_DARKBLUE);
+}
+
+// Destructor
+LCD_DISCO_F746NG::~LCD_DISCO_F746NG()
+{
+ BSP_LCD_DeInit();
+}
+
+//=================================================================================================================
+// Public methods
+//=================================================================================================================
+
+uint8_t LCD_DISCO_F746NG::Init(void)
+{
+ return BSP_LCD_Init();
+}
+
+uint8_t LCD_DISCO_F746NG::DeInit(void)
+{
+ return BSP_LCD_DeInit();
+}
+
+uint32_t LCD_DISCO_F746NG::GetXSize(void)
+{
+ return BSP_LCD_GetXSize();
+}
+
+uint32_t LCD_DISCO_F746NG::GetYSize(void)
+{
+ return BSP_LCD_GetYSize();
+}
+
+void LCD_DISCO_F746NG::SetXSize(uint32_t imageWidthPixels)
+{
+ BSP_LCD_SetXSize(imageWidthPixels);
+}
+
+void LCD_DISCO_F746NG::SetYSize(uint32_t imageHeightPixels)
+{
+ BSP_LCD_SetYSize(imageHeightPixels);
+}
+
+void LCD_DISCO_F746NG::LayerDefaultInit(uint16_t LayerIndex, uint32_t FrameBuffer)
+{
+ BSP_LCD_LayerDefaultInit(LayerIndex, FrameBuffer);
+}
+
+void LCD_DISCO_F746NG::LayerRgb565Init(uint16_t LayerIndex, uint32_t FB_Address)
+{
+ BSP_LCD_LayerRgb565Init(LayerIndex, FB_Address);
+}
+
+void LCD_DISCO_F746NG::SetTransparency(uint32_t LayerIndex, uint8_t Transparency)
+{
+ BSP_LCD_SetTransparency(LayerIndex, Transparency);
+}
+
+void LCD_DISCO_F746NG::SetLayerAddress(uint32_t LayerIndex, uint32_t Address)
+{
+ BSP_LCD_SetLayerAddress(LayerIndex, Address);
+}
+
+void LCD_DISCO_F746NG::SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue)
+{
+ BSP_LCD_SetColorKeying(LayerIndex, RGBValue);
+}
+
+void LCD_DISCO_F746NG::ResetColorKeying(uint32_t LayerIndex)
+{
+ BSP_LCD_ResetColorKeying(LayerIndex);
+}
+
+void LCD_DISCO_F746NG::SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
+{
+ BSP_LCD_SetLayerWindow(LayerIndex, Xpos, Ypos, Width, Height);
+}
+
+void LCD_DISCO_F746NG::SelectLayer(uint32_t LayerIndex)
+{
+ BSP_LCD_SelectLayer(LayerIndex);
+}
+
+void LCD_DISCO_F746NG::SetLayerVisible(uint32_t LayerIndex, FunctionalState State)
+{
+ BSP_LCD_SetLayerVisible(LayerIndex, State);
+}
+
+void LCD_DISCO_F746NG::SetTextColor(uint32_t Color)
+{
+ BSP_LCD_SetTextColor(Color);
+}
+
+uint32_t LCD_DISCO_F746NG::GetTextColor(void)
+{
+ return BSP_LCD_GetTextColor();
+}
+
+void LCD_DISCO_F746NG::SetBackColor(uint32_t Color)
+{
+ BSP_LCD_SetBackColor(Color);
+}
+
+uint32_t LCD_DISCO_F746NG::GetBackColor(void)
+{
+ return BSP_LCD_GetBackColor();
+}
+
+void LCD_DISCO_F746NG::SetFont(sFONT *fonts)
+{
+ BSP_LCD_SetFont(fonts);
+}
+
+sFONT *LCD_DISCO_F746NG::GetFont(void)
+{
+ return BSP_LCD_GetFont();
+}
+
+uint32_t LCD_DISCO_F746NG::ReadPixel(uint16_t Xpos, uint16_t Ypos)
+{
+ return BSP_LCD_ReadPixel(Xpos, Ypos);
+}
+
+void LCD_DISCO_F746NG::DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t pixel)
+{
+ BSP_LCD_DrawPixel(Xpos, Ypos, pixel);
+}
+
+void LCD_DISCO_F746NG::Clear(uint32_t Color)
+{
+ BSP_LCD_Clear(Color);
+}
+
+void LCD_DISCO_F746NG::ClearStringLine(uint32_t Line)
+{
+ BSP_LCD_ClearStringLine(Line);
+}
+
+void LCD_DISCO_F746NG::DisplayStringAtLine(uint16_t Line, uint8_t *ptr)
+{
+ BSP_LCD_DisplayStringAtLine(Line, ptr);
+}
+
+void LCD_DISCO_F746NG::DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode)
+{
+ BSP_LCD_DisplayStringAt(Xpos, Ypos, Text, Mode);
+}
+
+void LCD_DISCO_F746NG::DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii)
+{
+ BSP_LCD_DisplayChar(Xpos, Ypos, Ascii);
+}
+
+void LCD_DISCO_F746NG::DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
+{
+ BSP_LCD_DrawHLine(Xpos, Ypos, Length);
+}
+
+void LCD_DISCO_F746NG::DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
+{
+ BSP_LCD_DrawVLine(Xpos, Ypos, Length);
+}
+
+void LCD_DISCO_F746NG::DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
+{
+ BSP_LCD_DrawLine(x1, y1, x2, y2);
+}
+
+void LCD_DISCO_F746NG::DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
+{
+ BSP_LCD_DrawRect(Xpos, Ypos, Width, Height);
+}
+
+void LCD_DISCO_F746NG::DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
+{
+ BSP_LCD_DrawCircle(Xpos, Ypos, Radius);
+}
+
+void LCD_DISCO_F746NG::DrawPolygon(pPoint Points, uint16_t PointCount)
+{
+ BSP_LCD_DrawPolygon(Points, PointCount);
+}
+
+void LCD_DISCO_F746NG::DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
+{
+ BSP_LCD_DrawEllipse(Xpos, Ypos, XRadius, YRadius);
+}
+
+void LCD_DISCO_F746NG::DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp)
+{
+ BSP_LCD_DrawBitmap(Xpos, Ypos, pbmp);
+}
+
+void LCD_DISCO_F746NG::FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
+{
+ BSP_LCD_FillRect(Xpos, Ypos, Width, Height);
+}
+
+void LCD_DISCO_F746NG::FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
+{
+ BSP_LCD_FillCircle(Xpos, Ypos, Radius);
+}
+
+void LCD_DISCO_F746NG::FillPolygon(pPoint Points, uint16_t PointCount)
+{
+ BSP_LCD_FillPolygon(Points, PointCount);
+}
+
+void LCD_DISCO_F746NG::FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
+{
+ BSP_LCD_FillEllipse(Xpos, Ypos, XRadius, YRadius);
+}
+
+void LCD_DISCO_F746NG::DisplayOff(void)
+{
+ BSP_LCD_DisplayOff();
+}
+
+void LCD_DISCO_F746NG::DisplayOn(void)
+{
+ BSP_LCD_DisplayOn();
+}
+
+//=================================================================================================================
+// Private methods
+//=================================================================================================================
diff -r 000000000000 -r 14f16771fe40 lib/LCD_DISCO_F746NG/LCD_DISCO_F746NG.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/LCD_DISCO_F746NG/LCD_DISCO_F746NG.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,408 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef __LCD_DISCO_F746NG_H
+#define __LCD_DISCO_F746NG_H
+
+#ifdef TARGET_DISCO_F746NG
+
+#include "mbed.h"
+#include "stm32746g_discovery_lcd.h"
+
+/*
+ This class drives the LCD display (RK043FN48H-CT672B 4,3" 480x272 pixels device) present on DISCO_F746NG board.
+
+ Usage:
+
+ #include "mbed.h"
+ #include "LCD_DISCO_F746NG.h"
+
+ LCD_DISCO_F746NG lcd;
+
+ int main()
+ {
+ lcd.DisplayStringAt(0, LINE(1), (uint8_t *)"MBED EXAMPLE", CENTER_MODE);
+ wait(1);
+ lcd.Clear(LCD_COLOR_BLUE);
+ lcd.SetBackColor(LCD_COLOR_BLUE);
+ lcd.SetTextColor(LCD_COLOR_WHITE);
+ lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"DISCOVERY STM32F746NG", CENTER_MODE);
+ while(1)
+ {
+ }
+ }
+*/
+class LCD_DISCO_F746NG
+{
+
+public:
+ //! Constructor
+ LCD_DISCO_F746NG();
+
+ //! Destructor
+ ~LCD_DISCO_F746NG();
+
+ /**
+ * @brief Initializes the LCD.
+ * @retval LCD state
+ */
+ uint8_t Init(void);
+
+ /**
+ * @brief DeInitializes the LCD.
+ * @retval LCD state
+ */
+ uint8_t DeInit(void);
+
+ /**
+ * @brief Gets the LCD X size.
+ * @retval Used LCD X size
+ */
+ uint32_t GetXSize(void);
+
+ /**
+ * @brief Gets the LCD Y size.
+ * @retval Used LCD Y size
+ */
+ uint32_t GetYSize(void);
+
+ /**
+ * @brief Set the LCD X size.
+ * @param imageWidthPixels : image width in pixels unit
+ * @retval None
+ */
+ void SetXSize(uint32_t imageWidthPixels);
+
+ /**
+ * @brief Set the LCD Y size.
+ * @param imageHeightPixels : image height in lines unit
+ * @retval None
+ */
+ void SetYSize(uint32_t imageHeightPixels);
+
+ /**
+ * @brief Initializes the LCD layer in ARGB8888 format (32 bits per pixel);.
+ * @param LayerIndex: Layer foreground or background
+ * @param FB_Address: Layer frame buffer
+ * @retval None
+ */
+ void LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address);
+
+ /**
+ * @brief Initializes the LCD layer in RGB565 format (16 bits per pixel);.
+ * @param LayerIndex: Layer foreground or background
+ * @param FB_Address: Layer frame buffer
+ * @retval None
+ */
+ void LayerRgb565Init(uint16_t LayerIndex, uint32_t FB_Address);
+
+ /**
+ * @brief Selects the LCD Layer.
+ * @param LayerIndex: Layer foreground or background
+ * @retval None
+ */
+ void SelectLayer(uint32_t LayerIndex);
+
+ /**
+ * @brief Sets an LCD Layer visible
+ * @param LayerIndex: Visible Layer
+ * @param State: New state of the specified layer
+ * This parameter can be one of the following values:
+ * @arg ENABLE
+ * @arg DISABLE
+ * @retval None
+ */
+ void SetLayerVisible(uint32_t LayerIndex, FunctionalState State);
+
+ /**
+ * @brief Configures the transparency.
+ * @param LayerIndex: Layer foreground or background.
+ * @param Transparency: Transparency
+ * This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF
+ * @retval None
+ */
+ void SetTransparency(uint32_t LayerIndex, uint8_t Transparency);
+
+ /**
+ * @brief Sets an LCD layer frame buffer address.
+ * @param LayerIndex: Layer foreground or background
+ * @param Address: New LCD frame buffer value
+ * @retval None
+ */
+ void SetLayerAddress(uint32_t LayerIndex, uint32_t Address);
+
+ /**
+ * @brief Sets display window.
+ * @param LayerIndex: Layer index
+ * @param Xpos: LCD X position
+ * @param Ypos: LCD Y position
+ * @param Width: LCD window width
+ * @param Height: LCD window height
+ * @retval None
+ */
+ void SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
+
+ /**
+ * @brief Configures and sets the color keying.
+ * @param LayerIndex: Layer foreground or background
+ * @param RGBValue: Color reference
+ * @retval None
+ */
+ void SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue);
+
+ /**
+ * @brief Disables the color keying.
+ * @param LayerIndex: Layer foreground or background
+ * @retval None
+ */
+ void ResetColorKeying(uint32_t LayerIndex);
+
+ /**
+ * @brief Sets the LCD text color.
+ * @param Color: Text color code ARGB(8-8-8-8);
+ * @retval None
+ */
+ void SetTextColor(uint32_t Color);
+
+ /**
+ * @brief Gets the LCD text color.
+ * @retval Used text color.
+ */
+ uint32_t GetTextColor(void);
+
+ /**
+ * @brief Sets the LCD background color.
+ * @param Color: Layer background color code ARGB(8-8-8-8);
+ * @retval None
+ */
+ void SetBackColor(uint32_t Color);
+
+ /**
+ * @brief Gets the LCD background color.
+ * @retval Used background colour
+ */
+ uint32_t GetBackColor(void);
+
+ /**
+ * @brief Sets the LCD text font.
+ * @param fonts: Layer font to be used
+ * @retval None
+ */
+ void SetFont(sFONT *fonts);
+
+ /**
+ * @brief Gets the LCD text font.
+ * @retval Used layer font
+ */
+ sFONT *GetFont(void);
+
+ /**
+ * @brief Reads an LCD pixel.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @retval RGB pixel color
+ */
+ uint32_t ReadPixel(uint16_t Xpos, uint16_t Ypos);
+
+ /**
+ * @brief Clears the whole LCD.
+ * @param Color: Color of the background
+ * @retval None
+ */
+ void Clear(uint32_t Color);
+
+ /**
+ * @brief Clears the selected line.
+ * @param Line: Line to be cleared
+ * @retval None
+ */
+ void ClearStringLine(uint32_t Line);
+
+ /**
+ * @brief Displays one character.
+ * @param Xpos: Start column address
+ * @param Ypos: Line where to display the character shape.
+ * @param Ascii: Character ascii code
+ * This parameter must be a number between Min_Data = 0x20 and Max_Data = 0x7E
+ * @retval None
+ */
+ void DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii);
+
+ /**
+ * @brief Displays characters on the LCD.
+ * @param Xpos: X position (in pixel);
+ * @param Ypos: Y position (in pixel);
+ * @param Text: Pointer to string to display on LCD
+ * @param Mode: Display mode
+ * This parameter can be one of the following values:
+ * @arg CENTER_MODE
+ * @arg RIGHT_MODE
+ * @arg LEFT_MODE
+ * @retval None
+ */
+ void DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode);
+
+ /**
+ * @brief Displays a maximum of 60 characters on the LCD.
+ * @param Line: Line where to display the character shape
+ * @param ptr: Pointer to string to display on LCD
+ * @retval None
+ */
+ void DisplayStringAtLine(uint16_t Line, uint8_t *ptr);
+
+ /**
+ * @brief Draws an horizontal line.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param Length: Line length
+ * @retval None
+ */
+ void DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length);
+
+ /**
+ * @brief Draws a vertical line.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param Length: Line length
+ * @retval None
+ */
+ void DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length);
+
+ /**
+ * @brief Draws an uni-line (between two points);.
+ * @param x1: Point 1 X position
+ * @param y1: Point 1 Y position
+ * @param x2: Point 2 X position
+ * @param y2: Point 2 Y position
+ * @retval None
+ */
+ void DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
+
+ /**
+ * @brief Draws a rectangle.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param Width: Rectangle width
+ * @param Height: Rectangle height
+ * @retval None
+ */
+ void DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
+
+ /**
+ * @brief Draws a circle.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param Radius: Circle radius
+ * @retval None
+ */
+ void DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
+
+ /**
+ * @brief Draws an poly-line (between many points);.
+ * @param Points: Pointer to the points array
+ * @param PointCount: Number of points
+ * @retval None
+ */
+ void DrawPolygon(pPoint Points, uint16_t PointCount);
+
+ /**
+ * @brief Draws an ellipse on LCD.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param XRadius: Ellipse X radius
+ * @param YRadius: Ellipse Y radius
+ * @retval None
+ */
+ void DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
+
+ /**
+ * @brief Draws a pixel on LCD.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param RGB_Code: Pixel color in ARGB mode (8-8-8-8);
+ * @retval None
+ */
+ void DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t RGB_Code);
+
+ /**
+ * @brief Draws a bitmap picture loaded in the internal Flash in ARGB888 format (32 bits per pixel);.
+ * @param Xpos: Bmp X position in the LCD
+ * @param Ypos: Bmp Y position in the LCD
+ * @param pbmp: Pointer to Bmp picture address in the internal Flash
+ * @retval None
+ */
+ void DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp);
+
+ /**
+ * @brief Draws a full rectangle.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param Width: Rectangle width
+ * @param Height: Rectangle height
+ * @retval None
+ */
+ void FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
+
+ /**
+ * @brief Draws a full circle.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param Radius: Circle radius
+ * @retval None
+ */
+ void FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
+
+ /**
+ * @brief Draws a full poly-line (between many points);.
+ * @param Points: Pointer to the points array
+ * @param PointCount: Number of points
+ * @retval None
+ */
+ void FillPolygon(pPoint Points, uint16_t PointCount);
+
+ /**
+ * @brief Draws a full ellipse.
+ * @param Xpos: X position
+ * @param Ypos: Y position
+ * @param XRadius: Ellipse X radius
+ * @param YRadius: Ellipse Y radius
+ * @retval None
+ */
+ void FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
+
+ /**
+ * @brief Enables the display.
+ * @retval None
+ */
+ void DisplayOn(void);
+
+ /**
+ * @brief Disables the display.
+ * @retval None
+ */
+ void DisplayOff(void);
+
+private:
+
+};
+
+#else
+#error "This class must be used with DISCO_F746NG board only."
+#endif // TARGET_DISCO_F746NG
+
+#endif
diff -r 000000000000 -r 14f16771fe40 lib/TS_DISCO_F746NG/TS_DISCO_F746NG.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/TS_DISCO_F746NG/TS_DISCO_F746NG.cpp Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,79 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include "TS_DISCO_F746NG.h"
+
+// Constructor
+TS_DISCO_F746NG::TS_DISCO_F746NG()
+{
+ BSP_TS_Init(100, 100);
+}
+
+// Destructor
+TS_DISCO_F746NG::~TS_DISCO_F746NG()
+{
+ BSP_TS_DeInit();
+}
+
+//=================================================================================================================
+// Public methods
+//=================================================================================================================
+
+uint8_t TS_DISCO_F746NG::Init(uint16_t ts_SizeX, uint16_t ts_SizeY)
+{
+ return BSP_TS_Init(ts_SizeX, ts_SizeY);
+}
+
+uint8_t TS_DISCO_F746NG::DeInit(void)
+{
+ return BSP_TS_DeInit();
+}
+
+uint8_t TS_DISCO_F746NG::ITConfig(void)
+{
+ return BSP_TS_ITConfig();
+}
+
+uint8_t TS_DISCO_F746NG::ITGetStatus(void)
+{
+ return BSP_TS_ITGetStatus();
+}
+
+uint8_t TS_DISCO_F746NG::GetState(TS_StateTypeDef *TS_State)
+{
+ return BSP_TS_GetState(TS_State);
+}
+
+uint8_t TS_DISCO_F746NG::Get_GestureId(TS_StateTypeDef *TS_State)
+{
+ return BSP_TS_Get_GestureId(TS_State);
+}
+
+void TS_DISCO_F746NG::ITClear(void)
+{
+ BSP_TS_ITClear();
+}
+
+uint8_t TS_DISCO_F746NG::ResetTouchData(TS_StateTypeDef *TS_State)
+{
+ return BSP_TS_ResetTouchData(TS_State);
+}
+
+//=================================================================================================================
+// Private methods
+//=================================================================================================================
diff -r 000000000000 -r 14f16771fe40 lib/TS_DISCO_F746NG/TS_DISCO_F746NG.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/TS_DISCO_F746NG/TS_DISCO_F746NG.h Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,100 @@
+/* Copyright (c) 2010-2011 mbed.org, MIT License
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+* and associated documentation files (the "Software"), to deal in the Software without
+* restriction, including without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+* Software is furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in all copies or
+* substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef __TS_DISCO_F746NG_H
+#define __TS_DISCO_F746NG_H
+
+#ifdef TARGET_DISCO_F746NG
+
+#include "mbed.h"
+#include "stm32746g_discovery_ts.h"
+
+
+class TS_DISCO_F746NG
+{
+
+public:
+ //! Constructor
+ TS_DISCO_F746NG();
+
+ //! Destructor
+ ~TS_DISCO_F746NG();
+
+ /**
+ * @brief Initializes and configures the touch screen functionalities and
+ * configures all necessary hardware resources (GPIOs, I2C, clocks..);.
+ * @param ts_SizeX: Maximum X size of the TS area on LCD
+ * @param ts_SizeY: Maximum Y size of the TS area on LCD
+ * @retval TS_OK if all initializations are OK. Other value if error.
+ */
+ uint8_t Init(uint16_t ts_SizeX, uint16_t ts_SizeY);
+
+ /**
+ * @brief DeInitializes the TouchScreen.
+ * @retval TS state
+ */
+ uint8_t DeInit(void);
+
+ /**
+ * @brief Configures and enables the touch screen interrupts.
+ * @retval TS_OK if all initializations are OK. Other value if error.
+ */
+ uint8_t ITConfig(void);
+
+ /**
+ * @brief Gets the touch screen interrupt status.
+ * @retval TS_OK if all initializations are OK. Other value if error.
+ */
+ uint8_t ITGetStatus(void);
+
+ /**
+ * @brief Returns status and positions of the touch screen.
+ * @param TS_State: Pointer to touch screen current state structure
+ * @retval TS_OK if all initializations are OK. Other value if error.
+ */
+ uint8_t GetState(TS_StateTypeDef *TS_State);
+
+ /**
+ * @brief Update gesture Id following a touch detected.
+ * @param TS_State: Pointer to touch screen current state structure
+ * @retval TS_OK if all initializations are OK. Other value if error.
+ */
+ uint8_t Get_GestureId(TS_StateTypeDef *TS_State);
+
+ /**
+ * @brief Clears all touch screen interrupts.
+ */
+ void ITClear(void);
+
+ /**
+ * @brief Function used to reset all touch data before a new acquisition
+ * of touch information.
+ * @param TS_State: Pointer to touch screen current state structure
+ * @retval TS_OK if OK, TE_ERROR if problem found.
+ */
+ uint8_t ResetTouchData(TS_StateTypeDef *TS_State);
+
+private:
+
+};
+
+#else
+#error "This class must be used with DISCO_F746NG board only."
+#endif // TARGET_DISCO_F746NG
+
+#endif
diff -r 000000000000 -r 14f16771fe40 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Nov 05 12:53:31 2015 +0000
@@ -0,0 +1,31 @@
+#include "mbed.h"
+#include "TS_DISCO_F746NG.h"
+#include "LCD_DISCO_F746NG.h"
+#include "TouchEventListener.h"
+#include "TouchEvent.h"
+#include "system.h"
+#include "Button.h"
+#include "drawButton.h"
+
+int main()
+{
+ lcd.Clear(LCD_COLOR_WHITE);
+ lcd.SetBackColor(LCD_COLOR_WHITE);
+ lcd.SetTextColor(LCD_COLOR_BLACK);
+
+ TouchEventListener listener;
+
+ listener.setDebug(true);
+ Button *btn = new Button(200, 100);
+ btn->setLabel("toto");
+
+ Draw(btn);
+
+ while(1) {
+ if(listener.hasEvent()) {
+
+ }
+
+
+ }
+}
diff -r 000000000000 -r 14f16771fe40 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Nov 05 12:53:31 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/9296ab0bfc11 \ No newline at end of file
