ILI9341_due adapter for STM32F1 DMA
|
@ -0,0 +1,385 @@
|
||||||
|
/*
|
||||||
|
ILI9341_due_gText.cpp - Used for rendering GLCD fonts on Arduino Due
|
||||||
|
|
||||||
|
Copyright (c) 2014 Marek Buriak
|
||||||
|
|
||||||
|
The library is based on GLCD library by Bill Perry and Michael Margolis:
|
||||||
|
https://code.google.com/p/glcd-arduino
|
||||||
|
|
||||||
|
This file is part of the Arduino ILI9341_due library.
|
||||||
|
Sources for this library can be found at https://github.com/marekburiak/ILI9341_Due.
|
||||||
|
|
||||||
|
Fonts .h files can be created with GLCDFontCreator2 (not the one MikroElektronika):
|
||||||
|
https://code.google.com/p/glcd-arduino/downloads/detail?name=GLCDFontCreator2.zip&can=2&q=
|
||||||
|
|
||||||
|
|
||||||
|
ILI9341_due is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2.1 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
ILI9341_due is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with ILI9341_due. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ILI9341_GTEXT_H
|
||||||
|
#define ILI9341_GTEXT_H
|
||||||
|
|
||||||
|
//#include "WString.h"
|
||||||
|
//#include "../Streaming/Streaming.h"
|
||||||
|
#include "ILI9341_due.h"
|
||||||
|
|
||||||
|
#define INCLUDE_NOT_WORKING_YET 0
|
||||||
|
|
||||||
|
#define GTEXT_VERSION 1 // software version of this code
|
||||||
|
|
||||||
|
// Font Indices
|
||||||
|
#define GTEXT_FONT_LENGTH 0
|
||||||
|
#define GTEXT_FONT_FIXED_WIDTH 2
|
||||||
|
#define GTEXT_FONT_HEIGHT 3
|
||||||
|
#define GTEXT_FONT_FIRST_CHAR 4
|
||||||
|
#define GTEXT_FONT_CHAR_COUNT 5
|
||||||
|
#define GTEXT_FONT_WIDTH_TABLE 6
|
||||||
|
|
||||||
|
#define GTEXT_DRAW_DIRECTION_RIGHT 0
|
||||||
|
#define GTEXT_DRAW_DIRECTION_DOWN 1
|
||||||
|
#define GTEXT_DRAW_DIRECTION_LEFT 2
|
||||||
|
#define GTEXT_DRAW_DIRECTION_UP 3
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
gTextFontMode_Solid = 0,
|
||||||
|
gTextFontMode_Transparent = 1
|
||||||
|
} gTextFontMode;
|
||||||
|
|
||||||
|
|
||||||
|
// the following returns true if the given font is fixed width
|
||||||
|
// zero length is flag indicating fixed width font (array does not contain width data entries)
|
||||||
|
#define isFixedWidthFont(font) (pgm_read_byte(font+GTEXT_FONT_LENGTH) == 0 && pgm_read_byte(font+GTEXT_FONT_LENGTH+1) == 0))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Coodinates for predefined areas are compressed into a single 32 bit token.
|
||||||
|
*
|
||||||
|
* This works as the coordinates are cuurenly only 8 bit values.
|
||||||
|
*
|
||||||
|
* This allows the creatation of an unlmited number of predefined areas with zero code or
|
||||||
|
* data space overhead.
|
||||||
|
*
|
||||||
|
* A macro is used to create the tokens from a set of x1,y1 x2,y2 coordinates.
|
||||||
|
*
|
||||||
|
* A union is used to extract the coordinates from the 32 bit token.
|
||||||
|
*
|
||||||
|
* WARNING:
|
||||||
|
* This is non portable code in that it will only work on little endian processors.
|
||||||
|
* If you use big endian you have to switch the byte ordering in the union.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define MK_TareaToken(x1, y1, x2, y2) \
|
||||||
|
(uint32_t) (((uint32_t) (x1) << 24) | ((uint32_t)(y1) << 16) | ((uint32_t)(x2) << 8) | (uint32_t)(y2))
|
||||||
|
|
||||||
|
/// @cond hide_from_doxygen
|
||||||
|
typedef union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint8_t y2;
|
||||||
|
uint8_t x2;
|
||||||
|
uint8_t y1;
|
||||||
|
uint8_t x1;
|
||||||
|
}coord;
|
||||||
|
|
||||||
|
uint32_t token; // swap byte order above for big endian
|
||||||
|
|
||||||
|
}TareaToken;
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
typedef uint8_t textMode; // type holding mode for scrolling and future attributes like padding etc.
|
||||||
|
// the only textMode supported in the current release is scrolling
|
||||||
|
|
||||||
|
const textMode SCROLL_UP = 0;
|
||||||
|
const textMode SCROLL_DOWN = 1; // this was changed from -1 so it can used in a bitmask
|
||||||
|
const textMode DEFAULT_SCROLLDIR = SCROLL_UP;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @defgroup glcd_enum GLCD enumerations
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ingroup glcd_enum
|
||||||
|
* @hideinitializer
|
||||||
|
* @brief Pre Defined Text areas
|
||||||
|
*
|
||||||
|
* These enumerations are used to easily define text areas
|
||||||
|
* using predefined display areas.\n
|
||||||
|
* They are used with the
|
||||||
|
* \ref gText::DefineArea(predefinedArea selection, textMode mode) "DefineArea()" function call.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
|
||||||
|
//textAreaFULL = MK_TareaToken( 0, 0, DISPLAY_WIDTH -1, DISPLAY_HEIGHT -1 ),
|
||||||
|
///**<Entire GLCD display */
|
||||||
|
|
||||||
|
//textAreaTOP = MK_TareaToken( 0, 0, DISPLAY_WIDTH -1, DISPLAY_HEIGHT/2 -1 ),
|
||||||
|
///**<Top half of GLCD display */
|
||||||
|
|
||||||
|
//textAreaBOTTOM = MK_TareaToken( 0, DISPLAY_HEIGHT/2, DISPLAY_WIDTH -1, DISPLAY_HEIGHT -1 ),
|
||||||
|
///**<Bottom half of GLCD display */
|
||||||
|
|
||||||
|
//textAreaLEFT = MK_TareaToken( 0, 0, DISPLAY_WIDTH/2 -1, DISPLAY_HEIGHT -1 ),
|
||||||
|
///**<Left side of GLCD display */
|
||||||
|
|
||||||
|
//textAreaRIGHT = MK_TareaToken( DISPLAY_WIDTH/2, 0, DISPLAY_WIDTH -1, DISPLAY_HEIGHT -1 ),
|
||||||
|
///**<Right side of GLCD display */
|
||||||
|
|
||||||
|
//textAreaTOPLEFT = MK_TareaToken( 0, 0, DISPLAY_WIDTH/2 -1, DISPLAY_HEIGHT/2 -1 ),
|
||||||
|
///**<Upper left quarter of GLCD display */
|
||||||
|
|
||||||
|
//textAreaTOPRIGHT = MK_TareaToken( DISPLAY_WIDTH/2, 0, DISPLAY_WIDTH -1, DISPLAY_HEIGHT/2 -1 ),
|
||||||
|
///**<Upper right quarter of GLCD display */
|
||||||
|
|
||||||
|
//textAreaBOTTOMLEFT = MK_TareaToken( 0, DISPLAY_HEIGHT/2, DISPLAY_WIDTH/2 -1, DISPLAY_HEIGHT -1 ),
|
||||||
|
///**<Buttom left quarter of GLCD display */
|
||||||
|
|
||||||
|
//textAreaBOTTOMRIGHT = MK_TareaToken( DISPLAY_WIDTH/2, DISPLAY_HEIGHT/2, DISPLAY_WIDTH -1, DISPLAY_HEIGHT -1 )
|
||||||
|
///**<Bottom right quarter of GLCD display */
|
||||||
|
|
||||||
|
} predefinedArea;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
gTextAlignTopLeft,
|
||||||
|
gTextAlignTopCenter,
|
||||||
|
gTextAlignTopRight,
|
||||||
|
gTextAlignMiddleLeft,
|
||||||
|
gTextAlignMiddleCenter,
|
||||||
|
gTextAlignMiddleRight,
|
||||||
|
gTextAlignBottomLeft,
|
||||||
|
gTextAlignBottomCenter,
|
||||||
|
gTextAlignBottomRight
|
||||||
|
} gTextAlign;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
gTextPivotDefault,
|
||||||
|
gTextPivotTopLeft,
|
||||||
|
gTextPivotTopCenter,
|
||||||
|
gTextPivotTopRight,
|
||||||
|
gTextPivotMiddleLeft,
|
||||||
|
gTextPivotMiddleCenter,
|
||||||
|
gTextPivotMiddleRight,
|
||||||
|
gTextPivotBottomLeft,
|
||||||
|
gTextPivotBottomCenter,
|
||||||
|
gTextPivotBottomRight
|
||||||
|
} gTextPivot;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* enums for ansi style erase function
|
||||||
|
* These values match the ANSI EraseInLine terminal primitive: CSI n K
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @ingroup glcd_enum
|
||||||
|
* @hideinitializer
|
||||||
|
* @brief Erase line options
|
||||||
|
* @details
|
||||||
|
* These enumerations are used with the
|
||||||
|
* \ref gText::EraseTextLine( eraseLine_t type) "EraseTextLine()" function call.\n
|
||||||
|
* They provide similar functionality to the
|
||||||
|
* ANSI EraseInLine terminal primitive: CSI n K
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
gTextEraseToEOL = 0x01, /**< Erase From cursor to end of Line */
|
||||||
|
gTextEraseFromBOL = 0x02, /**< Erase From Begining of Line to Cursor*/
|
||||||
|
gTextEraseFullLine = 0x03 /**< Erase Entire line */
|
||||||
|
} gTextEraseLine;
|
||||||
|
|
||||||
|
typedef const uint8_t* gTextFont;
|
||||||
|
//typedef uint8_t (*FontCallback)(gTextFont);
|
||||||
|
|
||||||
|
|
||||||
|
//static glcd_Device *device; // static pointer to the device instance
|
||||||
|
|
||||||
|
/// @cond hide_from_doxygen
|
||||||
|
typedef struct _area
|
||||||
|
{
|
||||||
|
uint16_t x1;
|
||||||
|
uint16_t y1;
|
||||||
|
uint16_t x2;
|
||||||
|
uint16_t y2;
|
||||||
|
int8_t mode;
|
||||||
|
} area;
|
||||||
|
/// @endcond
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class gText
|
||||||
|
* @brief Functions for Text Areas
|
||||||
|
* @details
|
||||||
|
* A text area acts like a terminal monitor and text output is displayed
|
||||||
|
* within the confines of a rectangle given in the DefineArea command.
|
||||||
|
* All of the following text area functions operate on a user defined text area.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// graphical device text routines
|
||||||
|
class ILI9341_due_gText : public Print
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
ILI9341_due *_ili;
|
||||||
|
//FontCallback ucg_pgm_read; // now static, move back here if each instance needs its own callback
|
||||||
|
uint16_t _fontColor;
|
||||||
|
uint16_t _fontBgColor;
|
||||||
|
gTextFont _font;
|
||||||
|
area _area;
|
||||||
|
int16_t _x;
|
||||||
|
int16_t _y;
|
||||||
|
uint8_t _scale;
|
||||||
|
uint8_t _letterSpacing;
|
||||||
|
bool _isLastChar;
|
||||||
|
uint8_t _fontMode;
|
||||||
|
|
||||||
|
#ifndef GLCD_NODEFER_SCROLL
|
||||||
|
uint8_t _needScroll; // set when text scroll has been defered
|
||||||
|
#endif
|
||||||
|
void specialChar(uint8_t c);
|
||||||
|
void drawSolidChar(char c, uint16_t index, uint16_t charWidth, uint16_t charHeight);
|
||||||
|
void drawTransparentChar(char c, uint16_t index, uint16_t charWidth, uint16_t charHeight);
|
||||||
|
// Scroll routines are private for now
|
||||||
|
void ScrollUp(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t pixels, uint8_t color);
|
||||||
|
void ScrollDown(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint8_t pixels, uint8_t color);
|
||||||
|
void applyPivot(char *str, gTextPivot pivot);
|
||||||
|
|
||||||
|
public:
|
||||||
|
ILI9341_due_gText(ILI9341_due *ili); // default - uses the entire display
|
||||||
|
ILI9341_due_gText(ILI9341_due *ili, int16_t x1, int16_t y1, int16_t x2, int16_t y2); //, textMode mode=DEFAULT_SCROLLDIR);
|
||||||
|
|
||||||
|
ILI9341_due_gText(ILI9341_due *ili, int16_t x1, int16_t y1, int16_t columns, int16_t rows, gTextFont font); //, textMode mode=DEFAULT_SCROLLDIR);
|
||||||
|
|
||||||
|
|
||||||
|
bool defineArea(int16_t x1, int16_t y1, int16_t x2, int16_t y2); //, textMode mode=DEFAULT_SCROLLDIR);
|
||||||
|
bool defineArea(int16_t x1, int16_t y1, int16_t columns, int16_t rows, gTextFont font); //, textMode mode=DEFAULT_SCROLLDIR);
|
||||||
|
void clearArea(uint16_t color);
|
||||||
|
|
||||||
|
// Font Functions
|
||||||
|
void selectFont(gTextFont font);
|
||||||
|
void selectFont(gTextFont font, uint16_t color);
|
||||||
|
void selectFont(gTextFont font, uint16_t color, uint16_t backgroundColor);
|
||||||
|
void setFontColor(uint16_t color);
|
||||||
|
void setFontColor(uint8_t R, uint8_t G, uint8_t B);
|
||||||
|
void setFontColor(uint16_t color, uint16_t backgroundColor);
|
||||||
|
void setFontColor(uint8_t R, uint8_t G, uint8_t B, uint8_t bgR, uint8_t bgG, uint8_t bgB);
|
||||||
|
void setFontLetterSpacing(uint8_t letterSpacing);
|
||||||
|
uint8_t getFontLetterSpacing() {
|
||||||
|
return _letterSpacing;
|
||||||
|
};
|
||||||
|
void setFontMode(gTextFontMode fontMode);
|
||||||
|
|
||||||
|
int putChar(uint8_t c);
|
||||||
|
void puts(char *str);
|
||||||
|
void puts(const String &str); // for Arduino String Class
|
||||||
|
void puts_P(PGM_P str);
|
||||||
|
|
||||||
|
|
||||||
|
void drawString(String &str, int16_t x, int16_t y); // for Arduino String class
|
||||||
|
void drawString_P(PGM_P str, int16_t x, int16_t y);
|
||||||
|
|
||||||
|
void drawString(char *str, int16_t x, int16_t y);
|
||||||
|
void drawString(char *str, int16_t x, int16_t y, gTextEraseLine eraseLine);
|
||||||
|
void drawString(char *str, int16_t x, int16_t y, uint16_t pixelsClearedOnLeft, uint16_t pixelsClearedOnRight);
|
||||||
|
void drawString(char *str, gTextAlign align);
|
||||||
|
void drawString(char *str, gTextAlign align, gTextEraseLine eraseLine);
|
||||||
|
void drawString(char *str, gTextAlign align, uint16_t pixelsClearedOnLeft, uint16_t pixelsClearedOnRight);
|
||||||
|
|
||||||
|
void drawStringOffseted(char *str, gTextAlign align, uint16_t offsetX, uint16_t offsetY);
|
||||||
|
void drawStringOffseted(char *str, gTextAlign align, uint16_t offsetX, uint16_t offsetY, gTextEraseLine eraseLine);
|
||||||
|
void drawStringOffseted(char *str, gTextAlign align, uint16_t offsetX, uint16_t offsetY, uint16_t pixelsClearedOnLeft, uint16_t pixelsClearedOnRight);
|
||||||
|
|
||||||
|
void drawStringPivoted(char *str, int16_t x, int16_t y, gTextPivot pivot);
|
||||||
|
void drawStringPivoted(char *str, gTextAlign align, gTextPivot pivot);
|
||||||
|
void drawStringPivoted(char *str, gTextAlign align, gTextPivot pivot, gTextEraseLine eraseLine);
|
||||||
|
void drawStringPivoted(char *str, gTextAlign align, gTextPivot pivot, uint16_t pixelsClearedOnLeft, uint16_t pixelsClearedOnRight);
|
||||||
|
|
||||||
|
void drawStringPivotedOffseted(char *str, gTextAlign align, gTextPivot pivot, uint16_t offsetX, uint16_t offsetY);
|
||||||
|
void drawStringPivotedOffseted(char *str, gTextAlign align, gTextPivot pivot, uint16_t offsetX, uint16_t offsetY, gTextEraseLine eraseLine);
|
||||||
|
void drawStringPivotedOffseted(char *str, gTextAlign align, gTextPivot pivot, uint16_t offsetX, uint16_t offsetY, uint16_t pixelsClearedOnLeft, uint16_t pixelsClearedOnRight);
|
||||||
|
|
||||||
|
size_t write(uint8_t c); // character output for print base class
|
||||||
|
|
||||||
|
void cursorTo( uint8_t column, uint8_t row); // 0 based coordinates for character columns and rows
|
||||||
|
void cursorTo( int8_t column); // move cursor on the current row
|
||||||
|
void cursorToXY( int16_t x, int16_t y); // coordinates relative to active text area
|
||||||
|
|
||||||
|
inline __attribute__((always_inline))
|
||||||
|
uint8_t fontHeight() {
|
||||||
|
return pgm_read_byte(_font+GTEXT_FONT_HEIGHT);
|
||||||
|
};
|
||||||
|
|
||||||
|
inline __attribute__((always_inline))
|
||||||
|
uint8_t fontHeight(gTextFont font) {
|
||||||
|
return pgm_read_byte(font+GTEXT_FONT_HEIGHT);
|
||||||
|
};
|
||||||
|
|
||||||
|
uint16_t charWidth(uint8_t c);
|
||||||
|
uint16_t stringWidth(const char* str);
|
||||||
|
uint16_t stringWidth_P(PGM_P str);
|
||||||
|
uint16_t stringWidth_P(String &str);
|
||||||
|
|
||||||
|
void eraseTextLine(uint16_t color, gTextEraseLine type=gTextEraseToEOL); //ansi like line erase function
|
||||||
|
void eraseTextLine(uint16_t color, uint8_t row); // erase the entire text line in the given row and move cursor to left position
|
||||||
|
|
||||||
|
void printNumber(long n);
|
||||||
|
|
||||||
|
#if INCLUDE_NOT_WORKING_YET
|
||||||
|
ILI9341_due_gText(ILI9341_due *ili, predefinedArea selection); //, textMode mode=DEFAULT_SCROLLDIR);
|
||||||
|
bool defineArea(predefinedArea selection); //, textMode mode=DEFAULT_SCROLLDIR);
|
||||||
|
void setTextMode(textMode mode); // change to the given text mode
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static uint16_t charWidth(uint8_t c, gTextFont font)
|
||||||
|
{
|
||||||
|
int16_t width = 0;
|
||||||
|
|
||||||
|
if(isFixedWidthFont(font){
|
||||||
|
width = pgm_read_byte(font+GTEXT_FONT_FIXED_WIDTH);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
// variable width font
|
||||||
|
uint8_t firstChar = pgm_read_byte(font+GTEXT_FONT_FIRST_CHAR);
|
||||||
|
uint8_t charCount = pgm_read_byte(font+GTEXT_FONT_CHAR_COUNT);
|
||||||
|
|
||||||
|
// read width data
|
||||||
|
if(c >= firstChar && c < (firstChar+charCount)) {
|
||||||
|
c -= firstChar;
|
||||||
|
width = pgm_read_byte(font+GTEXT_FONT_WIDTH_TABLE+c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return width;
|
||||||
|
};
|
||||||
|
|
||||||
|
static uint16_t stringWidth(const char* str, gTextFont font, uint8_t letterSpacing)
|
||||||
|
{
|
||||||
|
uint16_t width = 0;
|
||||||
|
|
||||||
|
while(*str != 0) {
|
||||||
|
width += ILI9341_due_gText::charWidth(*str++, font) + letterSpacing;
|
||||||
|
}
|
||||||
|
if(width > 0)
|
||||||
|
width -= letterSpacing;
|
||||||
|
|
||||||
|
return width;
|
||||||
|
};
|
||||||
|
|
||||||
|
//#ifndef USE_ARDUINO_FLASHSTR
|
||||||
|
// // when the following function is supported in arduino it will be removed from this library
|
||||||
|
// void printFlash(FLASHSTRING str); //this overrides the Arduino print function to implicilty store the string in flash (progmem)
|
||||||
|
// void printFlashln(FLASHSTRING str);
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
/*@}*/
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,196 @@
|
||||||
|
/* Arduino SdFat Library
|
||||||
|
* Copyright (C) 2012 by William Greiman
|
||||||
|
*
|
||||||
|
* This file is part of the Arduino SdFat Library
|
||||||
|
*
|
||||||
|
* This Library is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This Library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with the Arduino SdFat Library. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file
|
||||||
|
* \brief configuration definitions
|
||||||
|
*/
|
||||||
|
#ifndef ILI_SdFatConfig_h
|
||||||
|
#define ILI_SdFatConfig_h
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Set USE_SEPARATE_FAT_CACHE nonzero to use a second 512 byte cache
|
||||||
|
* for FAT table entries. Improves performance for large writes that
|
||||||
|
* are not a multiple of 512 bytes.
|
||||||
|
*/
|
||||||
|
#ifdef __arm__
|
||||||
|
#define ILI_USE_SEPARATE_FAT_CACHE 1
|
||||||
|
#else // __arm__
|
||||||
|
#define ILI_USE_SEPARATE_FAT_CACHE 0
|
||||||
|
#endif // __arm__
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Set USE_MULTI_BLOCK_SD_IO nonzero to use multi-block SD read/write.
|
||||||
|
*
|
||||||
|
* Don't use mult-block read/write on small AVR boards.
|
||||||
|
*/
|
||||||
|
#if defined(RAMEND) && RAMEND < 3000
|
||||||
|
#define ILI_USE_MULTI_BLOCK_SD_IO 0
|
||||||
|
#else
|
||||||
|
#define ILI_USE_MULTI_BLOCK_SD_IO 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* To enable SD card CRC checking set USE_SD_CRC nonzero.
|
||||||
|
*
|
||||||
|
* Set USE_SD_CRC to 1 to use a smaller slower CRC-CCITT function.
|
||||||
|
*
|
||||||
|
* Set USE_SD_CRC to 2 to used a larger faster table driven CRC-CCITT function.
|
||||||
|
*/
|
||||||
|
#define ILI_USE_SD_CRC 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* To use multiple SD cards set USE_MULTIPLE_CARDS nonzero.
|
||||||
|
*
|
||||||
|
* Using multiple cards costs about 200 bytes of flash.
|
||||||
|
*
|
||||||
|
* Each card requires about 550 bytes of SRAM so use of a Mega is recommended.
|
||||||
|
*/
|
||||||
|
#define ILI_USE_MULTIPLE_CARDS 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Set DESTRUCTOR_CLOSES_FILE nonzero to close a file in its destructor.
|
||||||
|
*
|
||||||
|
* Causes use of lots of heap in ARM.
|
||||||
|
*/
|
||||||
|
#define ILI_DESTRUCTOR_CLOSES_FILE 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* For AVR
|
||||||
|
*
|
||||||
|
* Set USE_SERIAL_FOR_STD_OUT nonzero to use Serial (the HardwareSerial class)
|
||||||
|
* for error messages and output from print functions like ls().
|
||||||
|
*
|
||||||
|
* If USE_SERIAL_FOR_STD_OUT is zero, a small non-interrupt driven class
|
||||||
|
* is used to output messages to serial port zero. This allows an alternate
|
||||||
|
* Serial library like SerialPort to be used with SdFat.
|
||||||
|
*
|
||||||
|
* You can redirect stdOut with SdFat::setStdOut(Print* stream) and
|
||||||
|
* get the current stream with SdFat::stdOut().
|
||||||
|
*/
|
||||||
|
#define ILI_USE_SERIAL_FOR_STD_OUT 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Call flush for endl if ENDL_CALLS_FLUSH is nonzero
|
||||||
|
*
|
||||||
|
* The standard for iostreams is to call flush. This is very costly for
|
||||||
|
* SdFat. Each call to flush causes 2048 bytes of I/O to the SD.
|
||||||
|
*
|
||||||
|
* SdFat has a single 512 byte buffer for SD I/O so it must write the current
|
||||||
|
* data block to the SD, read the directory block from the SD, update the
|
||||||
|
* directory entry, write the directory block to the SD and read the data
|
||||||
|
* block back into the buffer.
|
||||||
|
*
|
||||||
|
* The SD flash memory controller is not designed for this many rewrites
|
||||||
|
* so performance may be reduced by more than a factor of 100.
|
||||||
|
*
|
||||||
|
* If ENDL_CALLS_FLUSH is zero, you must call flush and/or close to force
|
||||||
|
* all data to be written to the SD.
|
||||||
|
*/
|
||||||
|
#define ILI_ENDL_CALLS_FLUSH 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Allow FAT12 volumes if FAT12_SUPPORT is nonzero.
|
||||||
|
* FAT12 has not been well tested.
|
||||||
|
*/
|
||||||
|
#define ILI_FAT12_SUPPORT 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* SPI SCK divisor for SD initialization commands.
|
||||||
|
* or greater
|
||||||
|
*/
|
||||||
|
#ifdef __AVR__
|
||||||
|
const uint8_t ILI_SPI_SCK_INIT_DIVISOR = 64;
|
||||||
|
#else
|
||||||
|
const uint8_t ILI_SPI_SCK_INIT_DIVISOR = 128;
|
||||||
|
#endif
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Set ENABLE_SPI_TRANSACTION nonzero to enable the SPI transaction feature
|
||||||
|
* of the standard Arduino SPI library. You must include SPI.h in your
|
||||||
|
* sketches when ENABLE_SPI_TRANSACTION is nonzero.
|
||||||
|
*/
|
||||||
|
#define ILI_ENABLE_SPI_TRANSACTION 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Set ENABLE_SPI_YIELD nonzero to enable release of the SPI bus during
|
||||||
|
* SD card busy waits.
|
||||||
|
*
|
||||||
|
* This will allow interrupt routines to access the SPI bus if
|
||||||
|
* ENABLE_SPI_TRANSACTION is nonzero.
|
||||||
|
*
|
||||||
|
* Setting ENABLE_SPI_YIELD will introduce some extra overhead and will
|
||||||
|
* slightly slow transfer rates. A few older SD cards may fail when
|
||||||
|
* ENABLE_SPI_YIELD is nonzero.
|
||||||
|
*/
|
||||||
|
#define ILI_ENABLE_SPI_YIELD 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Force use of Arduino Standard SPI library if USE_ARDUINO_SPI_LIBRARY
|
||||||
|
* is nonzero. This will override native and software SPI for all boards.
|
||||||
|
*/
|
||||||
|
#define ILI_USE_ARDUINO_SPI_LIBRARY 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Define AVR_SOF_SPI nonzero to use software SPI on all AVR Arduinos.
|
||||||
|
*/
|
||||||
|
#define ILI_AVR_SOFT_SPI 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Define DUE_SOFT_SPI nonzero to use software SPI on Due Arduinos.
|
||||||
|
*/
|
||||||
|
#define ILI_DUE_SOFT_SPI 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define LEONARDO_SOFT_SPI nonzero to use software SPI on Leonardo Arduinos.
|
||||||
|
* LEONARDO_SOFT_SPI allows an unmodified 328 Shield to be used
|
||||||
|
* on Leonardo Arduinos.
|
||||||
|
*/
|
||||||
|
#define ILI_LEONARDO_SOFT_SPI 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Define MEGA_SOFT_SPI nonzero to use software SPI on Mega Arduinos.
|
||||||
|
* MEGA_SOFT_SPI allows an unmodified 328 Shield to be used
|
||||||
|
* on Mega Arduinos.
|
||||||
|
*/
|
||||||
|
#define ILI_MEGA_SOFT_SPI 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Set TEENSY3_SOFT_SPI nonzero to use software SPI on Teensy 3.x boards.
|
||||||
|
*/
|
||||||
|
#define ILI_TEENSY3_SOFT_SPI 0
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* Define software SPI pins. Default allows Uno shields to be used on other
|
||||||
|
* boards.
|
||||||
|
*/
|
||||||
|
// define software SPI pins
|
||||||
|
/** Default Software SPI chip select pin */
|
||||||
|
uint8_t const ILI_SOFT_SPI_CS_PIN = 10;
|
||||||
|
/** Software SPI Master Out Slave In pin */
|
||||||
|
uint8_t const ILI_SOFT_SPI_MOSI_PIN = 11;
|
||||||
|
/** Software SPI Master In Slave Out pin */
|
||||||
|
uint8_t const ILI_SOFT_SPI_MISO_PIN = 12;
|
||||||
|
/** Software SPI Clock pin */
|
||||||
|
uint8_t const ILI_SOFT_SPI_SCK_PIN = 13;
|
||||||
|
#endif // SdFatConfig_h
|
|
@ -0,0 +1,188 @@
|
||||||
|
/* Arduino SdSpi Library
|
||||||
|
* Copyright (C) 2013 by William Greiman
|
||||||
|
*
|
||||||
|
* This file is part of the Arduino SdSpi Library
|
||||||
|
*
|
||||||
|
* This Library is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This Library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with the Arduino SdSpi Library. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* \file
|
||||||
|
* \brief SdSpi class for V2 SD/SDHC cards
|
||||||
|
*/
|
||||||
|
#ifndef ILI_SdSpi_h
|
||||||
|
#define ILI_SdSpi_h
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include "ILI_SdFatConfig.h"
|
||||||
|
|
||||||
|
#if !ILI_USE_ARDUINO_SPI_LIBRARY
|
||||||
|
// AVR Arduinos
|
||||||
|
#ifdef __AVR__
|
||||||
|
#if ILI_AVR_SOFT_SPI
|
||||||
|
#define ILI_USE_SOFTWARE_SPI 1
|
||||||
|
#elif ILI_LEONARDO_SOFT_SPI && defined(__AVR_ATmega32U4__) && !defined(CORE_TEENSY)
|
||||||
|
#define ILI_USE_SOFTWARE_SPI 1
|
||||||
|
#elif ILI_MEGA_SOFT_SPI && (defined(__AVR_ATmega1280__)\
|
||||||
|
||defined(__AVR_ATmega2560__))
|
||||||
|
#define ILI_USE_SOFTWARE_SPI 1
|
||||||
|
#else // ILI_USE_SOFTWARE_SPI
|
||||||
|
#define ILI_USE_NATIVE_AVR_SPI 1
|
||||||
|
#endif // ILI_USE_SOFTWARE_SPI
|
||||||
|
#endif // __AVR__
|
||||||
|
// Due
|
||||||
|
#if defined(__arm__) && !defined(CORE_TEENSY) && !defined(__STM32F1__)
|
||||||
|
#if ILI_DUE_SOFT_SPI
|
||||||
|
#define ILI_USE_SOFTWARE_SPI 1
|
||||||
|
#else // ILI_DUE_SOFT_SPI
|
||||||
|
/** Nonzero - use native SAM3X SPI */
|
||||||
|
#define ILI_USE_NATIVE_SAM3X_SPI 1
|
||||||
|
#endif // ILI_DUE_SOFT_SPI
|
||||||
|
#endif // defined(__arm__) && !defined(CORE_TEENSY | __STM32F1__)
|
||||||
|
|
||||||
|
// STM32F1 Maple Mini
|
||||||
|
#if defined(__arm__) && defined(__STM32F1__)
|
||||||
|
#if ILI_DUE_SOFT_SPI
|
||||||
|
#define ILI_USE_SOFTWARE_SPI 1
|
||||||
|
#else // ILI_DUE_SOFT_SPI
|
||||||
|
/** Nonzero - use native STM32F1 SPI */
|
||||||
|
#define ILI_USE_NATIVE_STM32F1_SPI 1
|
||||||
|
#endif // ILI_DUE_SOFT_SPI
|
||||||
|
#endif // defined(__arm__) && defined(__STM32F1__)
|
||||||
|
|
||||||
|
// Teensy 3.0
|
||||||
|
#if defined(__arm__) && defined(CORE_TEENSY)
|
||||||
|
#if ILI_TEENSY3_SOFT_SPI
|
||||||
|
#define ILI_USE_SOFTWARE_SPI 1
|
||||||
|
#else // ILI_TEENSY3_SOFT_SPI
|
||||||
|
/** Nonzero - use native MK20DX128 SPI */
|
||||||
|
#define ILI_USE_NATIVE_TEENSY3_SPI 1
|
||||||
|
#endif // ILI_TEENSY3_SOFT_SPI
|
||||||
|
#endif // defined(__arm__) && defined(CORE_TEENSY)
|
||||||
|
#endif // !ILI_USE_ARDUINO_SPI_LIBRARY
|
||||||
|
|
||||||
|
#ifndef ILI_USE_SOFTWARE_SPI
|
||||||
|
#define ILI_USE_SOFTWARE_SPI 0
|
||||||
|
#endif // ILI_USE_SOFTWARE_SPI
|
||||||
|
|
||||||
|
#ifndef ILI_USE_NATIVE_AVR_SPI
|
||||||
|
#define ILI_USE_NATIVE_AVR_SPI 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ILI_USE_NATIVE_SAM3X_SPI
|
||||||
|
#define ILI_USE_NATIVE_SAM3X_SPI 0
|
||||||
|
#endif // ILI_USE_NATIVE_SAM3X_SPI
|
||||||
|
|
||||||
|
#ifndef ILI_USE_NATIVE_STM32F1_SPI
|
||||||
|
#define ILI_USE_NATIVE_STM32F1_SPI 0
|
||||||
|
#endif // ILI_USE_NATIVE_STM32F1_SPI
|
||||||
|
|
||||||
|
#ifndef ILI_USE_NATIVE_TEENSY3_SPI
|
||||||
|
#define ILI_USE_NATIVE_TEENSY3_SPI 0
|
||||||
|
#endif // ILI_USE_NATIVE_TEENSY3_SPI
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// define default chip select pin
|
||||||
|
//
|
||||||
|
#if !ILI_USE_SOFTWARE_SPI
|
||||||
|
/** The default chip select pin for the SD card is SS. */
|
||||||
|
uint8_t const ILI_SD_CHIP_SELECT_PIN = SS;
|
||||||
|
#else // USE_AVR_SOFTWARE_SPI
|
||||||
|
/** SPI chip select pin for software SPI. */
|
||||||
|
uint8_t const ILI_SD_CHIP_SELECT_PIN = SOFT_SPI_CS_PIN;
|
||||||
|
#endif // USE_AVR_SOFTWARE_SPI
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* \class SdSpi
|
||||||
|
* \brief SPI class for access to SD and SDHC flash memory cards.
|
||||||
|
*/
|
||||||
|
class ILI_SdSpi {
|
||||||
|
public:
|
||||||
|
/** Initialize the SPI bus */
|
||||||
|
void begin();
|
||||||
|
/** Set SPI options for access to SD/SDHC cards.
|
||||||
|
*
|
||||||
|
* \param[in] spiDivisor SCK clock divider relative to the system clock.
|
||||||
|
*/
|
||||||
|
void init(uint8_t spiDivisor);
|
||||||
|
/** Receive a byte.
|
||||||
|
*
|
||||||
|
* \return The byte.
|
||||||
|
*/
|
||||||
|
uint8_t receive();
|
||||||
|
/** Receive multiple bytes.
|
||||||
|
*
|
||||||
|
* \param[out] buf Buffer to receive the data.
|
||||||
|
* \param[in] n Number of bytes to receive.
|
||||||
|
*
|
||||||
|
* \return Zero for no error or nonzero error code.
|
||||||
|
*/
|
||||||
|
uint8_t receive(uint8_t* buf, size_t n);
|
||||||
|
/** Send a byte.
|
||||||
|
*
|
||||||
|
* \param[in] data Byte to send
|
||||||
|
*/
|
||||||
|
void send(uint8_t data);
|
||||||
|
/** Send multiple bytes.
|
||||||
|
*
|
||||||
|
* \param[in] buf Buffer for data to be sent.
|
||||||
|
* \param[in] n Number of bytes to send.
|
||||||
|
*/
|
||||||
|
void send(uint8_t* buf, size_t n);
|
||||||
|
};
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// Use of inline for AVR results in up to 10% better write performance.
|
||||||
|
// Inline also save a little flash memory.
|
||||||
|
/** inline avr native functions if nonzero. */
|
||||||
|
#define ILI_USE_AVR_NATIVE_SPI_INLINE 1
|
||||||
|
#if ILI_USE_NATIVE_AVR_SPI && ILI_USE_AVR_NATIVE_SPI_INLINE
|
||||||
|
inline uint8_t ILI_SdSpi::receive() {
|
||||||
|
SPDR = 0XFF;
|
||||||
|
while (!(SPSR & (1 << SPIF))) {}
|
||||||
|
return SPDR;
|
||||||
|
}
|
||||||
|
inline uint8_t ILI_SdSpi::receive(uint8_t* buf, size_t n) {
|
||||||
|
if (n-- == 0) return 0;
|
||||||
|
SPDR = 0XFF;
|
||||||
|
for (size_t i = 0; i < n; i++) {
|
||||||
|
while (!(SPSR & (1 << SPIF))) {}
|
||||||
|
uint8_t b = SPDR;
|
||||||
|
SPDR = 0XFF;
|
||||||
|
buf[i] = b;
|
||||||
|
}
|
||||||
|
while (!(SPSR & (1 << SPIF))) {}
|
||||||
|
buf[n] = SPDR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
inline void ILI_SdSpi::send(uint8_t data) {
|
||||||
|
SPDR = data;
|
||||||
|
while (!(SPSR & (1 << SPIF))) {}
|
||||||
|
}
|
||||||
|
inline void ILI_SdSpi::send(const uint8_t* buf , size_t n) {
|
||||||
|
if (n == 0) return;
|
||||||
|
SPDR = buf[0];
|
||||||
|
if (n > 1) {
|
||||||
|
uint8_t b = buf[1];
|
||||||
|
size_t i = 2;
|
||||||
|
while (1) {
|
||||||
|
while (!(SPSR & (1 << SPIF))) {}
|
||||||
|
SPDR = b;
|
||||||
|
if (i == n) break;
|
||||||
|
b = buf[i++];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (!(SPSR & (1 << SPIF))) {}
|
||||||
|
}
|
||||||
|
#endif // ILI_USE_NATIVE_AVR_SPI && ILI_USE_AVR_NATIVE_SPI_INLINE
|
||||||
|
#endif // ILI_SdSpi_h
|
||||||
|
|
|
@ -0,0 +1,410 @@
|
||||||
|
/* Arduino SdSpi Library
|
||||||
|
* Copyright (C) 2013 by William Greiman
|
||||||
|
*
|
||||||
|
* This file is part of the Arduino SdSpi Library
|
||||||
|
*
|
||||||
|
* This Library is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This Library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with the Arduino SdSpi Library. If not, see
|
||||||
|
* <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
#include "ILI_SdSpi.h"
|
||||||
|
#if ILI_USE_NATIVE_SAM3X_SPI
|
||||||
|
/** Use SAM3X DMAC if nonzero */
|
||||||
|
#define ILI_USE_SAM3X_DMAC 1
|
||||||
|
/** Use extra Bus Matrix arbitration fix if nonzero */
|
||||||
|
#define ILI_USE_SAM3X_BUS_MATRIX_FIX 0
|
||||||
|
/** Time in ms for DMA receive timeout */
|
||||||
|
#define ILI_SAM3X_DMA_TIMEOUT 100
|
||||||
|
/** chip select register number */
|
||||||
|
#define ILI_SPI_CHIP_SEL 3
|
||||||
|
/** DMAC receive channel */
|
||||||
|
#define ILI_SPI_DMAC_RX_CH 1
|
||||||
|
/** DMAC transmit channel */
|
||||||
|
#define ILI_SPI_DMAC_TX_CH 0
|
||||||
|
/** DMAC Channel HW Interface Number for SPI TX. */
|
||||||
|
#define ILI_SPI_TX_IDX 1
|
||||||
|
/** DMAC Channel HW Interface Number for SPI RX. */
|
||||||
|
#define ILI_SPI_RX_IDX 2
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/** Disable DMA Controller. */
|
||||||
|
static void ILI_dmac_disable() {
|
||||||
|
DMAC->DMAC_EN &= (~DMAC_EN_ENABLE);
|
||||||
|
}
|
||||||
|
/** Enable DMA Controller. */
|
||||||
|
static void ILI_dmac_enable() {
|
||||||
|
DMAC->DMAC_EN = DMAC_EN_ENABLE;
|
||||||
|
}
|
||||||
|
/** Disable DMA Channel. */
|
||||||
|
static void ILI_dmac_channel_disable(uint32_t ul_num) {
|
||||||
|
DMAC->DMAC_CHDR = DMAC_CHDR_DIS0 << ul_num;
|
||||||
|
}
|
||||||
|
/** Enable DMA Channel. */
|
||||||
|
static void ILI_dmac_channel_enable(uint32_t ul_num) {
|
||||||
|
DMAC->DMAC_CHER = DMAC_CHER_ENA0 << ul_num;
|
||||||
|
}
|
||||||
|
/** Poll for transfer complete. */
|
||||||
|
static bool ILI_dmac_channel_transfer_done(uint32_t ul_num) {
|
||||||
|
return (DMAC->DMAC_CHSR & (DMAC_CHSR_ENA0 << ul_num)) ? false : true;
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
void ILI_SdSpi::begin() {
|
||||||
|
PIO_Configure(
|
||||||
|
g_APinDescription[PIN_SPI_MOSI].pPort,
|
||||||
|
g_APinDescription[PIN_SPI_MOSI].ulPinType,
|
||||||
|
g_APinDescription[PIN_SPI_MOSI].ulPin,
|
||||||
|
g_APinDescription[PIN_SPI_MOSI].ulPinConfiguration);
|
||||||
|
PIO_Configure(
|
||||||
|
g_APinDescription[PIN_SPI_MISO].pPort,
|
||||||
|
g_APinDescription[PIN_SPI_MISO].ulPinType,
|
||||||
|
g_APinDescription[PIN_SPI_MISO].ulPin,
|
||||||
|
g_APinDescription[PIN_SPI_MISO].ulPinConfiguration);
|
||||||
|
PIO_Configure(
|
||||||
|
g_APinDescription[PIN_SPI_SCK].pPort,
|
||||||
|
g_APinDescription[PIN_SPI_SCK].ulPinType,
|
||||||
|
g_APinDescription[PIN_SPI_SCK].ulPin,
|
||||||
|
g_APinDescription[PIN_SPI_SCK].ulPinConfiguration);
|
||||||
|
pmc_enable_periph_clk(ID_SPI0);
|
||||||
|
#if ILI_USE_SAM3X_DMAC
|
||||||
|
pmc_enable_periph_clk(ID_DMAC);
|
||||||
|
ILI_dmac_disable();
|
||||||
|
DMAC->DMAC_GCFG = DMAC_GCFG_ARB_CFG_FIXED;
|
||||||
|
ILI_dmac_enable();
|
||||||
|
#if ILI_USE_SAM3X_BUS_MATRIX_FIX
|
||||||
|
MATRIX->MATRIX_WPMR = 0x4d415400;
|
||||||
|
MATRIX->MATRIX_MCFG[1] = 1;
|
||||||
|
MATRIX->MATRIX_MCFG[2] = 1;
|
||||||
|
MATRIX->MATRIX_SCFG[0] = 0x01000010;
|
||||||
|
MATRIX->MATRIX_SCFG[1] = 0x01000010;
|
||||||
|
MATRIX->MATRIX_SCFG[7] = 0x01000010;
|
||||||
|
#endif // ILI_USE_SAM3X_BUS_MATRIX_FIX
|
||||||
|
#endif // ILI_USE_SAM3X_DMAC
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// start RX DMA
|
||||||
|
static void ILI_spiDmaRX(uint8_t* dst, uint16_t count) {
|
||||||
|
ILI_dmac_channel_disable(ILI_SPI_DMAC_RX_CH);
|
||||||
|
DMAC->DMAC_CH_NUM[ILI_SPI_DMAC_RX_CH].DMAC_SADDR = (uint32_t)&SPI0->SPI_RDR;
|
||||||
|
DMAC->DMAC_CH_NUM[ILI_SPI_DMAC_RX_CH].DMAC_DADDR = (uint32_t)dst;
|
||||||
|
DMAC->DMAC_CH_NUM[ILI_SPI_DMAC_RX_CH].DMAC_DSCR = 0;
|
||||||
|
DMAC->DMAC_CH_NUM[ILI_SPI_DMAC_RX_CH].DMAC_CTRLA = count |
|
||||||
|
DMAC_CTRLA_SRC_WIDTH_BYTE | DMAC_CTRLA_DST_WIDTH_BYTE;
|
||||||
|
DMAC->DMAC_CH_NUM[ILI_SPI_DMAC_RX_CH].DMAC_CTRLB = DMAC_CTRLB_SRC_DSCR |
|
||||||
|
DMAC_CTRLB_DST_DSCR | DMAC_CTRLB_FC_PER2MEM_DMA_FC |
|
||||||
|
DMAC_CTRLB_SRC_INCR_FIXED | DMAC_CTRLB_DST_INCR_INCREMENTING;
|
||||||
|
DMAC->DMAC_CH_NUM[ILI_SPI_DMAC_RX_CH].DMAC_CFG = DMAC_CFG_SRC_PER(ILI_SPI_RX_IDX) |
|
||||||
|
DMAC_CFG_SRC_H2SEL | DMAC_CFG_SOD | DMAC_CFG_FIFOCFG_ASAP_CFG;
|
||||||
|
ILI_dmac_channel_enable(ILI_SPI_DMAC_RX_CH);
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// start TX DMA
|
||||||
|
static void ILI_spiDmaTX(const uint8_t* src, uint16_t count) {
|
||||||
|
static uint8_t ff = 0XFF;
|
||||||
|
uint32_t src_incr = DMAC_CTRLB_SRC_INCR_INCREMENTING;
|
||||||
|
if (!src) {
|
||||||
|
src = &ff;
|
||||||
|
src_incr = DMAC_CTRLB_SRC_INCR_FIXED;
|
||||||
|
}
|
||||||
|
ILI_dmac_channel_disable(ILI_SPI_DMAC_TX_CH);
|
||||||
|
DMAC->DMAC_CH_NUM[ILI_SPI_DMAC_TX_CH].DMAC_SADDR = (uint32_t)src;
|
||||||
|
DMAC->DMAC_CH_NUM[ILI_SPI_DMAC_TX_CH].DMAC_DADDR = (uint32_t)&SPI0->SPI_TDR;
|
||||||
|
DMAC->DMAC_CH_NUM[ILI_SPI_DMAC_TX_CH].DMAC_DSCR = 0;
|
||||||
|
DMAC->DMAC_CH_NUM[ILI_SPI_DMAC_TX_CH].DMAC_CTRLA = count |
|
||||||
|
DMAC_CTRLA_SRC_WIDTH_BYTE | DMAC_CTRLA_DST_WIDTH_BYTE;
|
||||||
|
|
||||||
|
DMAC->DMAC_CH_NUM[ILI_SPI_DMAC_TX_CH].DMAC_CTRLB = DMAC_CTRLB_SRC_DSCR |
|
||||||
|
DMAC_CTRLB_DST_DSCR | DMAC_CTRLB_FC_MEM2PER_DMA_FC |
|
||||||
|
src_incr | DMAC_CTRLB_DST_INCR_FIXED;
|
||||||
|
|
||||||
|
DMAC->DMAC_CH_NUM[ILI_SPI_DMAC_TX_CH].DMAC_CFG = DMAC_CFG_DST_PER(ILI_SPI_TX_IDX) |
|
||||||
|
DMAC_CFG_DST_H2SEL | DMAC_CFG_SOD | DMAC_CFG_FIFOCFG_ALAP_CFG;
|
||||||
|
|
||||||
|
ILI_dmac_channel_enable(ILI_SPI_DMAC_TX_CH);
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// initialize SPI controller
|
||||||
|
void ILI_SdSpi::init(uint8_t sckDivisor) {
|
||||||
|
uint8_t scbr = sckDivisor;
|
||||||
|
Spi* pSpi = SPI0;
|
||||||
|
// disable SPI
|
||||||
|
pSpi->SPI_CR = SPI_CR_SPIDIS;
|
||||||
|
// reset SPI
|
||||||
|
pSpi->SPI_CR = SPI_CR_SWRST;
|
||||||
|
// no mode fault detection, set master mode
|
||||||
|
pSpi->SPI_MR = SPI_PCS(ILI_SPI_CHIP_SEL) | SPI_MR_MODFDIS | SPI_MR_MSTR;
|
||||||
|
// mode 0, 8-bit,
|
||||||
|
pSpi->SPI_CSR[ILI_SPI_CHIP_SEL] = SPI_CSR_SCBR(scbr) | SPI_CSR_NCPHA;
|
||||||
|
// enable SPI
|
||||||
|
pSpi->SPI_CR |= SPI_CR_SPIEN;
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
static inline uint8_t ILI_spiTransfer(uint8_t b) {
|
||||||
|
Spi* pSpi = SPI0;
|
||||||
|
|
||||||
|
pSpi->SPI_TDR = b;
|
||||||
|
while ((pSpi->SPI_SR & SPI_SR_RDRF) == 0) {}
|
||||||
|
b = pSpi->SPI_RDR;
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/** SPI receive a byte */
|
||||||
|
uint8_t ILI_SdSpi::receive() {
|
||||||
|
return ILI_spiTransfer(0XFF);
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/** SPI receive multiple bytes */
|
||||||
|
uint8_t ILI_SdSpi::receive(uint8_t* buf, size_t n) {
|
||||||
|
Spi* pSpi = SPI0;
|
||||||
|
int rtn = 0;
|
||||||
|
#if ILI_USE_SAM3X_DMAC
|
||||||
|
// clear overrun error
|
||||||
|
uint32_t s = pSpi->SPI_SR;
|
||||||
|
|
||||||
|
ILI_spiDmaRX(buf, n);
|
||||||
|
ILI_spiDmaTX(0, n);
|
||||||
|
|
||||||
|
uint32_t m = millis();
|
||||||
|
while (!ILI_dmac_channel_transfer_done(ILI_SPI_DMAC_RX_CH)) {
|
||||||
|
if ((millis() - m) > ILI_SAM3X_DMA_TIMEOUT) {
|
||||||
|
ILI_dmac_channel_disable(ILI_SPI_DMAC_RX_CH);
|
||||||
|
ILI_dmac_channel_disable(ILI_SPI_DMAC_TX_CH);
|
||||||
|
rtn = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pSpi->SPI_SR & SPI_SR_OVRES) rtn |= 1;
|
||||||
|
#else // ILI_USE_SAM3X_DMAC
|
||||||
|
for (size_t i = 0; i < n; i++) {
|
||||||
|
pSpi->SPI_TDR = 0XFF;
|
||||||
|
while ((pSpi->SPI_SR & SPI_SR_RDRF) == 0) {}
|
||||||
|
buf[i] = pSpi->SPI_RDR;
|
||||||
|
}
|
||||||
|
#endif // ILI_USE_SAM3X_DMAC
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/** SPI send a byte */
|
||||||
|
void ILI_SdSpi::send(uint8_t b) {
|
||||||
|
ILI_spiTransfer(b);
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
void ILI_SdSpi::send(const uint8_t* buf , size_t n) {
|
||||||
|
Spi* pSpi = SPI0;
|
||||||
|
#if ILI_USE_SAM3X_DMAC
|
||||||
|
ILI_spiDmaTX(buf, n);
|
||||||
|
while (!ILI_dmac_channel_transfer_done(ILI_SPI_DMAC_TX_CH)) {}
|
||||||
|
#else // #if ILI_USE_SAM3X_DMAC
|
||||||
|
while ((pSpi->SPI_SR & SPI_SR_TXEMPTY) == 0) {}
|
||||||
|
for (size_t i = 0; i < n; i++) {
|
||||||
|
pSpi->SPI_TDR = buf[i];
|
||||||
|
while ((pSpi->SPI_SR & SPI_SR_TDRE) == 0) {}
|
||||||
|
}
|
||||||
|
#endif // #if ILI_USE_SAM3X_DMAC
|
||||||
|
while ((pSpi->SPI_SR & SPI_SR_TXEMPTY) == 0) {}
|
||||||
|
// leave RDR empty
|
||||||
|
uint8_t b = pSpi->SPI_RDR;
|
||||||
|
}
|
||||||
|
#endif // ILI_USE_NATIVE_SAM3X_SPI
|
||||||
|
|
||||||
|
//*********************************************************
|
||||||
|
// STM32F1 section
|
||||||
|
//*********************************************************
|
||||||
|
|
||||||
|
#if ILI_USE_NATIVE_STM32F1_SPI
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <libmaple/dma.h>
|
||||||
|
/** Use SAM3X DMAC if nonzero */
|
||||||
|
#define ILI_USE_STM32F1_DMAC 1
|
||||||
|
/** Time in ms for DMA receive timeout */
|
||||||
|
#define ILI_STM32F1_DMA_TIMEOUT 100
|
||||||
|
/** chip select register number */
|
||||||
|
#define ILI_SPI_CHIP_SEL 3
|
||||||
|
/** DMAC receive channel */
|
||||||
|
#define ILI_SPI_DMAC_RX_CH DMA_CH2
|
||||||
|
/** DMAC transmit channel */
|
||||||
|
#define ILI_SPI_DMAC_TX_CH DMA_CH3
|
||||||
|
/** DMAC Channel HW Interface Number for SPI TX. */
|
||||||
|
#define ILI_SPI_TX_IDX 1
|
||||||
|
/** DMAC Channel HW Interface Number for SPI RX. */
|
||||||
|
#define ILI_SPI_RX_IDX 2
|
||||||
|
|
||||||
|
volatile bool SPI_DMA_TX_Active = false;
|
||||||
|
volatile bool SPI_DMA_RX_Active = false;
|
||||||
|
|
||||||
|
inline void SPI_DMA_TX_Event() {
|
||||||
|
SPI_DMA_TX_Active = false;
|
||||||
|
dma_disable(DMA1, DMA_CH3);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void SPI_DMA_RX_Event() {
|
||||||
|
SPI_DMA_RX_Active = false;
|
||||||
|
dma_disable(DMA1, DMA_CH2);
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/** Disable DMA Controller. */
|
||||||
|
//static void ILI_dmac_disable() {
|
||||||
|
// DMAC->DMAC_EN &= (~DMAC_EN_ENABLE);
|
||||||
|
//}
|
||||||
|
/** Enable DMA Controller. */
|
||||||
|
//static void ILI_dmac_enable() {
|
||||||
|
// DMAC->DMAC_EN = DMAC_EN_ENABLE;
|
||||||
|
//}
|
||||||
|
/** Disable DMA Channel. */
|
||||||
|
static void ILI_dmac_channel_disable(dma_channel ul_num) {
|
||||||
|
dma_disable(DMA1, ul_num);
|
||||||
|
}
|
||||||
|
/** Enable DMA Channel. */
|
||||||
|
static void ILI_dmac_channel_enable(dma_channel ul_num) {
|
||||||
|
dma_enable(DMA1, ul_num);
|
||||||
|
}
|
||||||
|
/** Poll for transfer complete. */
|
||||||
|
//static bool ILI_dmac_channel_transfer_done(dma_tube tube) {
|
||||||
|
// uint8 shift = (tube - 1) * 4;
|
||||||
|
// return ((DMA1->regs->ISR >> shift) & 0x02) ? false : true;
|
||||||
|
|
||||||
|
// return (DMAC->DMAC_CHSR & (DMAC_CHSR_ENA0 << ul_num)) ? false : true;
|
||||||
|
//}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
void ILI_SdSpi::begin() {
|
||||||
|
SPI.begin();
|
||||||
|
SPI.setClockDivider(SPI_CLOCK_DIV2);
|
||||||
|
SPI.setBitOrder(MSBFIRST);
|
||||||
|
SPI.setDataMode(SPI_MODE0);
|
||||||
|
// DMA setup stuff. We use a line buffer and usa DMA for filling lines and blocks.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if ILI_USE_STM32F1_DMAC
|
||||||
|
dma_init(DMA1);
|
||||||
|
dma_attach_interrupt(DMA1, DMA_CH3, SPI_DMA_TX_Event);
|
||||||
|
dma_attach_interrupt(DMA1, DMA_CH2, SPI_DMA_RX_Event);
|
||||||
|
spi_tx_dma_enable(SPI1);
|
||||||
|
spi_rx_dma_enable(SPI1);
|
||||||
|
|
||||||
|
|
||||||
|
#endif // ILI_USE_STM32F1_DMAC
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// start RX DMA
|
||||||
|
|
||||||
|
static void ILI_spiDmaRX(uint8_t* dst, uint16_t count) {
|
||||||
|
// spi_rx_dma_enable(SPI1);
|
||||||
|
if (count < 1) return;
|
||||||
|
dma_setup_transfer(DMA1, DMA_CH2, &SPI1->regs->DR, DMA_SIZE_8BITS,
|
||||||
|
dst, DMA_SIZE_8BITS, (DMA_MINC_MODE | DMA_TRNS_CMPLT));
|
||||||
|
dma_set_num_transfers(DMA1, DMA_CH2, count); // 2 bytes per pixel
|
||||||
|
SPI_DMA_RX_Active = true;
|
||||||
|
dma_enable(DMA1, DMA_CH2);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// start TX DMA
|
||||||
|
static void ILI_spiDmaTX(uint8_t* src, uint16_t count) {
|
||||||
|
if (count < 1) return;
|
||||||
|
static uint8_t ff = 0XFF;
|
||||||
|
// spi_tx_dma_enable(SPI1);
|
||||||
|
// dma_init(DMA1);
|
||||||
|
// dma_attach_interrupt(DMA1, DMA_CH3, SPI_DMA_TX_Event);
|
||||||
|
|
||||||
|
|
||||||
|
if (!src) {
|
||||||
|
src = &ff;
|
||||||
|
dma_setup_transfer(DMA1, DMA_CH3, &SPI1->regs->DR, DMA_SIZE_8BITS,
|
||||||
|
src, DMA_SIZE_8BITS, (DMA_FROM_MEM | DMA_TRNS_CMPLT));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dma_setup_transfer(DMA1, DMA_CH3, &SPI1->regs->DR, DMA_SIZE_8BITS,
|
||||||
|
src, DMA_SIZE_8BITS, (DMA_MINC_MODE | DMA_FROM_MEM | DMA_TRNS_CMPLT));
|
||||||
|
}
|
||||||
|
dma_set_num_transfers(DMA1, DMA_CH3, count); // 2 bytes per pixel
|
||||||
|
SPI_DMA_TX_Active = true;
|
||||||
|
dma_enable(DMA1, DMA_CH3);
|
||||||
|
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// initialize SPI controller STM32F1
|
||||||
|
void ILI_SdSpi::init(uint8_t sckDivisor) {
|
||||||
|
SPI.setClockDivider(sckDivisor);
|
||||||
|
SPI.setBitOrder(MSBFIRST);
|
||||||
|
SPI.setDataMode(SPI_MODE0);
|
||||||
|
spi_tx_dma_enable(SPI1);
|
||||||
|
spi_rx_dma_enable(SPI1);
|
||||||
|
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// STM32
|
||||||
|
static inline uint8_t ILI_spiTransfer(uint8_t b) {
|
||||||
|
return SPI.transfer(b);
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// should be valid for STM32
|
||||||
|
/** SPI receive a byte */
|
||||||
|
uint8_t ILI_SdSpi::receive() {
|
||||||
|
return ILI_spiTransfer(0xFF);
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/** SPI receive multiple bytes */
|
||||||
|
// check and finish.
|
||||||
|
|
||||||
|
uint8_t ILI_SdSpi::receive(uint8_t* buf, size_t n) {
|
||||||
|
int rtn = 0;
|
||||||
|
|
||||||
|
#if ILI_USE_STM32F1_DMAC
|
||||||
|
// clear overrun error
|
||||||
|
// uint32_t s = pSpi->SPI_SR;
|
||||||
|
ILI_spiDmaRX(buf, n);
|
||||||
|
ILI_spiDmaTX(0, n);
|
||||||
|
|
||||||
|
uint32_t m = millis();
|
||||||
|
while (SPI_DMA_RX_Active) {
|
||||||
|
if ((millis() - m) > ILI_STM32F1_DMA_TIMEOUT) {
|
||||||
|
ILI_dmac_channel_disable(ILI_SPI_DMAC_RX_CH);
|
||||||
|
ILI_dmac_channel_disable(ILI_SPI_DMAC_TX_CH);
|
||||||
|
rtn = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// if (pSpi->SPI_SR & SPI_SR_OVRES) rtn |= 1;
|
||||||
|
#else // ILI_USE_STM32F1_DMAC
|
||||||
|
for (size_t i = 0; i < n; i++) {
|
||||||
|
buf[i] = SPI.transfer (0xFF);
|
||||||
|
}
|
||||||
|
#endif // ILI_USE_STM32F1_DMAC
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/** SPI send a byte */
|
||||||
|
void ILI_SdSpi::send(uint8_t b) {
|
||||||
|
ILI_spiTransfer(b);
|
||||||
|
}
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
void ILI_SdSpi::send(uint8_t* buf , size_t n) {
|
||||||
|
|
||||||
|
#if ILI_USE_STM32F1_DMAC
|
||||||
|
ILI_spiDmaTX(buf, n);
|
||||||
|
while (SPI_DMA_TX_Active) {}
|
||||||
|
|
||||||
|
// uint32_t m = millis();
|
||||||
|
// while (SPI_DMA_TX_Active) {
|
||||||
|
// if ((millis() - m) > ILI_STM32F1_DMA_TIMEOUT) {
|
||||||
|
// ILI_dmac_channel_disable(ILI_SPI_DMAC_TX_CH);
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
#else // #if ILI_USE_STM32F1_DMAC
|
||||||
|
SPI.write (buf, n)
|
||||||
|
#endif // #if ILI_USE_STM32F1_DMAC
|
||||||
|
// leave RDR empty
|
||||||
|
// uint8_t b = pSpi->SPI_RDR;
|
||||||
|
}
|
||||||
|
#endif // ILI_USE_NATIVE_STM32F1_SPI
|
|
@ -0,0 +1,48 @@
|
||||||
|
ILI9341_due
|
||||||
|
===========
|
||||||
|
|
||||||
|
Please see http://marekburiak.github.io/ILI9341_due
|
||||||
|
|
||||||
|
|
||||||
|
Version History:
|
||||||
|
```
|
||||||
|
v0.94.000 - Added AVR compatibility, the library can now be also used on Uno, Mega and alike.
|
||||||
|
Please check the github.io page for more information (especially if you want to
|
||||||
|
use gText)
|
||||||
|
v0.93.000 - Breaking changes:
|
||||||
|
- setRotation now needs iliRotation enum as a parameter (instead of an int)
|
||||||
|
- the meaning of some gText drawString parameters have changed
|
||||||
|
(event though the parameter type is the same)
|
||||||
|
- new additions:
|
||||||
|
- gText drawString with new parameters
|
||||||
|
- new gText drawStringOffseted, drawStringPivoted, drawStringPivotedOffseted
|
||||||
|
functions
|
||||||
|
- gText fontLetterSpacing default value is now 2 (previously 0)
|
||||||
|
- examples updated
|
||||||
|
|
||||||
|
v0.92.002 - Fixed drawArc
|
||||||
|
- Added setArcParams function to change maxArcAngle and arcAngleOffset at runtime
|
||||||
|
|
||||||
|
v0.92.001 - Added fontHeight function in gText
|
||||||
|
- fixes for NORMAL and EXTENDED mode
|
||||||
|
|
||||||
|
v0.92.000 - Added drawArc function for drawing arcs and circles with thickness and pies
|
||||||
|
- Added screenshotToConsole method and ILIScreenShotViewer app for taking
|
||||||
|
screenshots from the display
|
||||||
|
- Added alignment options for drawString in ILI9341_due_gText
|
||||||
|
|
||||||
|
v0.91.002 - Updated graphicstestWithStats example sketch so it does not use Streaming.h
|
||||||
|
|
||||||
|
v0.91.001 - Performance improvements (especially fill circle)
|
||||||
|
- Fixed a scanline fill bug, clean up commented out code
|
||||||
|
|
||||||
|
v0.91.000 - Added functions for controlling TFT power levels (sleep, idle, setPowerLevel)
|
||||||
|
|
||||||
|
v0.90.026 - Fixed fillScreen after recent changes
|
||||||
|
|
||||||
|
v0.90.025 - Added PushColors565 function
|
||||||
|
- Added BMP24toILI565 tool
|
||||||
|
- Updated sdFatTftBitmap example
|
||||||
|
|
||||||
|
v0.90.010 - Initial version
|
||||||
|
```
|
|
@ -0,0 +1,243 @@
|
||||||
|
|
||||||
|
//#include <SPI.h>
|
||||||
|
#include <SPI.h>
|
||||||
|
#include "ILI_SdSpi.h"
|
||||||
|
#include "ILI_SdFatConfig.h"
|
||||||
|
#include "ILI9341_due_gText.h"
|
||||||
|
#include "ILI9341_due.h"
|
||||||
|
#include "Arial_bold_14.h"
|
||||||
|
#include "roboto16.h"
|
||||||
|
#include "roboto32.h"
|
||||||
|
#include "roboto70.h"
|
||||||
|
|
||||||
|
#define TFT_DC 10
|
||||||
|
#define TFT_CS 8
|
||||||
|
#define rst 9
|
||||||
|
|
||||||
|
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
|
||||||
|
ILI9341_due tft = ILI9341_due(TFT_CS, TFT_DC, rst);
|
||||||
|
|
||||||
|
char textBuff[20];
|
||||||
|
|
||||||
|
ILI9341_due_gText t1(&tft);
|
||||||
|
ILI9341_due_gText t2(&tft);
|
||||||
|
ILI9341_due_gText t3(&tft);
|
||||||
|
uint16_t colorLightGray = tft.color565(192,192,192);
|
||||||
|
uint16_t colorGray = tft.color565(127,127,127);
|
||||||
|
uint16_t colorDarkGray = tft.color565(64,64,64);
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
Serial.begin(9600);
|
||||||
|
while (!Serial) ; // wait for Arduino Serial Monitor
|
||||||
|
|
||||||
|
tft.begin();
|
||||||
|
tft.setRotation(iliRotation270);
|
||||||
|
|
||||||
|
screenIntro();
|
||||||
|
delay(2000);
|
||||||
|
screenLoading();
|
||||||
|
screenClock();
|
||||||
|
screenPie();
|
||||||
|
delay(2000);
|
||||||
|
screenSensors();
|
||||||
|
}
|
||||||
|
|
||||||
|
void screenIntro()
|
||||||
|
{
|
||||||
|
tft.fillScreen(ILI9341_BLUE);
|
||||||
|
t1.defineArea(100, 100, 220, 140);
|
||||||
|
t1.selectFont(Arial_bold_14);
|
||||||
|
t1.setFontLetterSpacing(5);
|
||||||
|
t1.setFontColor(ILI9341_WHITE, ILI9341_BLUE);
|
||||||
|
strcpy(textBuff, "Arcs demo");
|
||||||
|
t1.drawString(textBuff, gTextAlignMiddleCenter);
|
||||||
|
}
|
||||||
|
|
||||||
|
void screenLoading()
|
||||||
|
{
|
||||||
|
const uint16_t x = 159;
|
||||||
|
const uint16_t y = 149;
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
t1.selectFont(roboto32);
|
||||||
|
t1.setFontLetterSpacing(5);
|
||||||
|
t1.setFontColor(ILI9341_WHITE, ILI9341_BLACK);
|
||||||
|
t1.defineArea(100, 85, 220, 140);
|
||||||
|
strcpy(textBuff, "Loading...");
|
||||||
|
t1.drawString(textBuff, gTextAlignTopCenter, 0, 0);
|
||||||
|
tft.drawArc(x, y, 10, 5, 0, 360, colorLightGray);
|
||||||
|
|
||||||
|
for(int i=0; i<2880; i+=4)
|
||||||
|
{
|
||||||
|
tft.drawArc(x, y, 10, 5, (i >> 1)-45, (i >> 1)+45, colorDarkGray);
|
||||||
|
tft.drawArc(x, y, 10, 5, (i >> 1)-45-4, (i >> 1)-45, colorLightGray);
|
||||||
|
|
||||||
|
tft.drawArc(x, y, 20, 5, 1440-i-45, 1440-i+45, colorDarkGray);
|
||||||
|
tft.drawArc(x, y, 20, 5, 1440-i+45, 1440-i+45+4, colorLightGray);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void screenClock()
|
||||||
|
{
|
||||||
|
const uint16_t x = 159;
|
||||||
|
const uint16_t y = 119;
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
t1.selectFont(roboto70);
|
||||||
|
t1.setFontLetterSpacing(5);
|
||||||
|
t1.setFontColor(ILI9341_WHITE, ILI9341_BLACK);
|
||||||
|
t1.drawString("15:06", gTextAlignMiddleCenter);
|
||||||
|
tft.drawArc(x,y,102,11,0,225, colorLightGray); // 15 hours
|
||||||
|
tft.drawArc(x,y,113,8,0,36, colorGray); // 6 minutes
|
||||||
|
tft.drawArc(x,y,120,5,0,360, colorDarkGray); // seconds
|
||||||
|
|
||||||
|
for(uint16_t d=324; d<372; d++)
|
||||||
|
{
|
||||||
|
tft.drawArc(x,y,120,5,d-1,d+1, ILI9341_RED);
|
||||||
|
tft.drawArc(x,y,120,5,d-2,d-1, colorDarkGray); // to erase the red
|
||||||
|
if(d == 360)
|
||||||
|
{
|
||||||
|
t1.drawString("15:07", gTextAlignMiddleCenter);
|
||||||
|
tft.drawArc(x,y,113,8,0,42, colorGray); // 7 minutes
|
||||||
|
}
|
||||||
|
delay(166);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void screenPie()
|
||||||
|
{
|
||||||
|
const uint16_t x = 159;
|
||||||
|
const uint16_t y = 119;
|
||||||
|
const uint16_t radius = 80;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
t1.selectFont(roboto16);
|
||||||
|
t1.setFontLetterSpacing(2);
|
||||||
|
tft.drawArc(x+3,y-2,radius,radius,0,60, tft.color565(198,255,13));
|
||||||
|
tft.drawArc(x-3,y+7,radius+10,radius+10,60,340, tft.color565(255,0,54));
|
||||||
|
tft.drawArc(x-2,y-3,radius,radius,340,360, tft.color565(0,255,241));
|
||||||
|
|
||||||
|
t1.defineArea(0,0,220,180);
|
||||||
|
t1.selectFont(roboto16);
|
||||||
|
t1.setFontMode(gTextFontMode_Transparent);
|
||||||
|
t1.setFontColor(ILI9341_BLACK);
|
||||||
|
t1.drawString("16%",175,70);
|
||||||
|
t1.drawString("78%",140,150);
|
||||||
|
t1.setFontColor(colorLightGray);
|
||||||
|
t1.drawString("6%",132,18);
|
||||||
|
delay(2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void screenSensors()
|
||||||
|
{
|
||||||
|
const uint16_t radius = 55;
|
||||||
|
float temp=22.4;
|
||||||
|
uint16_t hum=73, lux=1154;
|
||||||
|
|
||||||
|
const uint16_t s1x = 0;
|
||||||
|
const uint16_t s1y = 10;
|
||||||
|
|
||||||
|
const uint16_t s2x = 110;
|
||||||
|
const uint16_t s2y = 70;
|
||||||
|
|
||||||
|
const uint16_t s3x = 210;
|
||||||
|
const uint16_t s3y = 130;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
|
||||||
|
t1.setFontMode(gTextFontMode_Solid);
|
||||||
|
t1.setFontLetterSpacing(3);
|
||||||
|
t2.setFontMode(gTextFontMode_Solid);
|
||||||
|
t2.setFontLetterSpacing(3);
|
||||||
|
t3.setFontMode(gTextFontMode_Solid);
|
||||||
|
t3.setFontLetterSpacing(3);
|
||||||
|
|
||||||
|
t1.defineArea(s1x,s1y,s1x+2*radius,s1y+2*radius);
|
||||||
|
t2.defineArea(s2x,s2y,s2x+2*radius,s2y+2*radius);
|
||||||
|
t3.defineArea(s3x,s3y,s3x+2*radius,s3y+2*radius);
|
||||||
|
|
||||||
|
t1.setFontColor(ILI9341_WHITE);
|
||||||
|
tft.drawArc(s1x+radius,s1y+radius,radius,10,-3,3, tft.color565(127,0,27));
|
||||||
|
t1.selectFont(roboto16);
|
||||||
|
t1.drawStringOffseted("C", gTextAlignMiddleCenter, 0, 25);
|
||||||
|
t1.selectFont(roboto32);
|
||||||
|
sprintf(textBuff, "%4.1f", temp);
|
||||||
|
t1.drawString(textBuff, gTextAlignMiddleCenter);
|
||||||
|
tft.fillRect(s1x+radius-7,s1y+radius+17,2,2,ILI9341_WHITE); // degrees symbol
|
||||||
|
|
||||||
|
for(uint16_t d=1; d<temp*10; d++)
|
||||||
|
{
|
||||||
|
tft.drawArc(s1x+radius,s1y+radius,radius,10,d,d+3, tft.color565(127,0,27));
|
||||||
|
tft.drawArc(s1x+radius,s1y+radius,radius-3,4,d-1,d, tft.color565(255,0,54));
|
||||||
|
}
|
||||||
|
|
||||||
|
t2.setFontColor(ILI9341_WHITE);
|
||||||
|
tft.drawArc(s2x+radius,s2y+radius,radius,10,-3,3, tft.color565(0,43,127));
|
||||||
|
t2.selectFont(roboto16);
|
||||||
|
t2.drawStringOffseted("%", gTextAlignMiddleCenter, 0, 25);
|
||||||
|
t2.selectFont(roboto32);
|
||||||
|
sprintf(textBuff, "%d", hum);
|
||||||
|
t2.drawString(textBuff, gTextAlignMiddleCenter);
|
||||||
|
|
||||||
|
for(uint16_t d=1; d<263; d++)
|
||||||
|
{
|
||||||
|
tft.drawArc(s2x+radius,s2y+radius,radius,10,d,d+3, tft.color565(0,43,127));
|
||||||
|
tft.drawArc(s2x+radius,s2y+radius,radius-3,4,d-1,d, tft.color565(0,86,255));
|
||||||
|
}
|
||||||
|
|
||||||
|
t3.setFontColor(ILI9341_WHITE);
|
||||||
|
tft.drawArc(s3x+radius,s3y+radius,radius,10,-3,3, tft.color565(127,103,6));
|
||||||
|
t3.selectFont(roboto16);
|
||||||
|
t3.drawStringOffseted("lux", gTextAlignMiddleCenter, 0, 25);
|
||||||
|
t3.selectFont(roboto32);
|
||||||
|
sprintf(textBuff, "%d", lux);
|
||||||
|
t3.drawString(textBuff, gTextAlignMiddleCenter);
|
||||||
|
|
||||||
|
for(uint16_t d=1; d<42; d++)
|
||||||
|
{
|
||||||
|
tft.drawArc(s3x+radius,s3y+radius,radius,10,d,d+3, tft.color565(127,103,6));
|
||||||
|
tft.drawArc(s3x+radius,s3y+radius,radius-3,4,d-1,d, tft.color565(255,206,13));
|
||||||
|
}
|
||||||
|
|
||||||
|
delay(1000);
|
||||||
|
for(uint16_t d=1; d<660; d++)
|
||||||
|
{
|
||||||
|
if(d<220 )
|
||||||
|
{
|
||||||
|
lux+=21;
|
||||||
|
|
||||||
|
sprintf(textBuff, "%d", lux);
|
||||||
|
t3.drawString(textBuff, gTextAlignMiddleCenter, 3, 3);
|
||||||
|
tft.drawArc(s3x+radius,s3y+radius,radius,10, ((float)lux/(float)10000)*360,((float)lux/(float)10000)*360+3, tft.color565(127,103,6));
|
||||||
|
tft.drawArc(s3x+radius,s3y+radius,radius-3,4,((float)lux/(float)10000)*360-4,((float)lux/(float)10000)*360, tft.color565(255,206,13));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(d == 220)
|
||||||
|
delay(1000);
|
||||||
|
|
||||||
|
if(d>220 && d % 15 == 0)
|
||||||
|
{
|
||||||
|
temp+=0.1;
|
||||||
|
sprintf(textBuff, "%4.1f", temp);
|
||||||
|
t1.drawString(textBuff, gTextAlignMiddleCenter, 3, 3);
|
||||||
|
tft.drawArc(s1x+radius,s1y+radius,radius,10,temp*10,temp*10+3, tft.color565(127,0,27));
|
||||||
|
tft.drawArc(s1x+radius,s1y+radius,radius-3,4,temp*10-2,temp*10, tft.color565(255,0,54));
|
||||||
|
delay(random(350, 700));
|
||||||
|
}
|
||||||
|
if(d>300 && d<600 && d % 38 == 0)
|
||||||
|
{
|
||||||
|
hum+=1;
|
||||||
|
sprintf(textBuff, "%d", hum);
|
||||||
|
t2.drawString(textBuff, gTextAlignMiddleCenter, 3, 3);
|
||||||
|
tft.drawArc(s2x+radius,s2y+radius,radius,10,(float)hum*3.6-4,(float)hum*3.6+3, tft.color565(0,43,127));
|
||||||
|
tft.drawArc(s2x+radius,s2y+radius,radius-3,4,(float)hum*3.6-5,(float)hum*3.6, tft.color565(0,86,255));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
setup ();
|
||||||
|
/* add main program code here */
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,167 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* roboto16
|
||||||
|
*
|
||||||
|
* created with FontCreator
|
||||||
|
* written by F. Maximilian Thiele
|
||||||
|
*
|
||||||
|
* http://www.apetech.de/fontCreator
|
||||||
|
* me@apetech.de
|
||||||
|
*
|
||||||
|
* File Name : roboto16.h
|
||||||
|
* Date : 18.09.2014
|
||||||
|
* Font size in bytes : 10574
|
||||||
|
* Font width : 10
|
||||||
|
* Font height : 17
|
||||||
|
* Font first char : 32
|
||||||
|
* Font last char : 145
|
||||||
|
* Font used chars : 113
|
||||||
|
*
|
||||||
|
* The font data are defined as
|
||||||
|
*
|
||||||
|
* struct _FONT_ {
|
||||||
|
* uint16_t font_Size_in_Bytes_over_all_included_Size_it_self;
|
||||||
|
* uint8_t font_Width_in_Pixel_for_fixed_drawing;
|
||||||
|
* uint8_t font_Height_in_Pixel_for_all_characters;
|
||||||
|
* unit8_t font_First_Char;
|
||||||
|
* uint8_t font_Char_Count;
|
||||||
|
*
|
||||||
|
* uint8_t font_Char_Widths[font_Last_Char - font_First_Char +1];
|
||||||
|
* // for each character the separate width in pixels,
|
||||||
|
* // characters < 128 have an implicit virtual right empty row
|
||||||
|
*
|
||||||
|
* uint8_t font_data[];
|
||||||
|
* // bit field of all characters
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
#ifndef ROBOTO16_H
|
||||||
|
#define ROBOTO16_H
|
||||||
|
|
||||||
|
#define ROBOTO16_WIDTH 10
|
||||||
|
#define ROBOTO16_HEIGHT 17
|
||||||
|
|
||||||
|
static const uint8_t roboto16[] PROGMEM = {
|
||||||
|
0x29, 0x4E, // size
|
||||||
|
0x0A, // width
|
||||||
|
0x11, // height
|
||||||
|
0x20, // first char
|
||||||
|
0x71, // char count
|
||||||
|
|
||||||
|
// char widths
|
||||||
|
0x00, 0x01, 0x03, 0x08, 0x07, 0x0A, 0x08, 0x01, 0x04, 0x04,
|
||||||
|
0x07, 0x07, 0x02, 0x04, 0x01, 0x06, 0x07, 0x03, 0x07, 0x07,
|
||||||
|
0x08, 0x07, 0x07, 0x07, 0x07, 0x07, 0x01, 0x02, 0x06, 0x07,
|
||||||
|
0x07, 0x06, 0x0D, 0x0A, 0x08, 0x08, 0x09, 0x08, 0x08, 0x09,
|
||||||
|
0x09, 0x01, 0x06, 0x09, 0x07, 0x0B, 0x09, 0x09, 0x08, 0x09,
|
||||||
|
0x09, 0x08, 0x09, 0x08, 0x0A, 0x0D, 0x09, 0x09, 0x08, 0x03,
|
||||||
|
0x06, 0x03, 0x05, 0x07, 0x03, 0x07, 0x07, 0x07, 0x07, 0x07,
|
||||||
|
0x04, 0x07, 0x07, 0x01, 0x02, 0x07, 0x01, 0x0C, 0x07, 0x07,
|
||||||
|
0x07, 0x07, 0x04, 0x06, 0x05, 0x07, 0x08, 0x0B, 0x07, 0x08,
|
||||||
|
0x06, 0x04, 0x01, 0x05, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00,
|
||||||
|
|
||||||
|
// font data
|
||||||
|
0xFC, 0x11, 0x00, // 33
|
||||||
|
0x1E, 0x10, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 34
|
||||||
|
0x20, 0x20, 0xF8, 0x24, 0x20, 0xE0, 0x3C, 0x20, 0x02, 0x1E, 0x03, 0x02, 0x1E, 0x03, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 35
|
||||||
|
0x38, 0x44, 0x44, 0x83, 0x84, 0x04, 0x18, 0x0C, 0x10, 0x10, 0x70, 0x10, 0x11, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 36
|
||||||
|
0x3C, 0x44, 0x42, 0x3C, 0x80, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x06, 0x01, 0x0E, 0x11, 0x11, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 37
|
||||||
|
0x00, 0xBC, 0x44, 0xC2, 0x24, 0x1C, 0x00, 0x00, 0x0F, 0x10, 0x10, 0x10, 0x13, 0x14, 0x08, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 38
|
||||||
|
0x0E, 0x00, 0x00, // 39
|
||||||
|
0xE0, 0x1C, 0x02, 0x01, 0x0F, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x80, // 40
|
||||||
|
0x01, 0x06, 0x18, 0xE0, 0x00, 0xC0, 0x30, 0x0F, 0x80, 0x00, 0x00, 0x00, // 41
|
||||||
|
0x10, 0x90, 0x50, 0x3C, 0x50, 0x90, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 42
|
||||||
|
0x80, 0x80, 0x80, 0xF0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 43
|
||||||
|
0x00, 0x00, 0x40, 0x70, 0x00, 0x00, // 44
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, // 45
|
||||||
|
0x00, 0x10, 0x00, // 46
|
||||||
|
0x00, 0x00, 0x00, 0xE0, 0x1C, 0x04, 0x20, 0x1C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 47
|
||||||
|
0xF8, 0x04, 0x04, 0x02, 0x04, 0x04, 0xF8, 0x07, 0x18, 0x10, 0x10, 0x10, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 48
|
||||||
|
0x04, 0x04, 0xFC, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, // 49
|
||||||
|
0x18, 0x04, 0x04, 0x02, 0x84, 0x6C, 0x10, 0x10, 0x18, 0x14, 0x13, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 50
|
||||||
|
0x18, 0x04, 0x84, 0x82, 0x84, 0xC4, 0x38, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 51
|
||||||
|
0x00, 0x80, 0x60, 0x10, 0x0C, 0xFC, 0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x02, 0x1F, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 52
|
||||||
|
0xC0, 0xBC, 0x44, 0x44, 0x44, 0x44, 0x84, 0x04, 0x18, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 53
|
||||||
|
0xF0, 0x4C, 0x44, 0x24, 0x42, 0x44, 0x80, 0x07, 0x08, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 54
|
||||||
|
0x04, 0x04, 0x04, 0xC4, 0x24, 0x1C, 0x04, 0x00, 0x00, 0x1E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 55
|
||||||
|
0x38, 0xC4, 0x84, 0x82, 0x84, 0xC4, 0x38, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 56
|
||||||
|
0xF8, 0x04, 0x04, 0x02, 0x04, 0x8C, 0xF0, 0x00, 0x11, 0x11, 0x12, 0x11, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 57
|
||||||
|
0x20, 0x10, 0x00, // 58
|
||||||
|
0x00, 0x20, 0x40, 0x70, 0x00, 0x00, // 59
|
||||||
|
0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 60
|
||||||
|
0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 61
|
||||||
|
0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x80, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 62
|
||||||
|
0x0C, 0x04, 0x02, 0x84, 0x6C, 0x10, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 63
|
||||||
|
0xC0, 0x30, 0x08, 0x08, 0x84, 0x44, 0x24, 0x24, 0xC4, 0x04, 0x08, 0x30, 0xC0, 0x1F, 0x60, 0x80, 0x8F, 0x10, 0x10, 0x10, 0x08, 0x9F, 0x10, 0x10, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, // 64
|
||||||
|
0x00, 0x00, 0x80, 0x70, 0x0C, 0x0C, 0x70, 0x80, 0x00, 0x00, 0x10, 0x0C, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 65
|
||||||
|
0xFC, 0x84, 0x84, 0x84, 0x84, 0xC4, 0xEC, 0x10, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 66
|
||||||
|
0xF0, 0x08, 0x04, 0x04, 0x02, 0x04, 0x04, 0x18, 0x07, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 67
|
||||||
|
0xFC, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x18, 0xE0, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 68
|
||||||
|
0xFC, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x04, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 69
|
||||||
|
0xFC, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x04, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 70
|
||||||
|
0xF0, 0x08, 0x04, 0x04, 0x02, 0x04, 0x04, 0x0C, 0x10, 0x03, 0x0C, 0x10, 0x10, 0x10, 0x11, 0x11, 0x11, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 71
|
||||||
|
0xFC, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 72
|
||||||
|
0xFC, 0x1F, 0x00, // 73
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 74
|
||||||
|
0xFC, 0x80, 0x80, 0xC0, 0x20, 0x10, 0x08, 0x04, 0x04, 0x1F, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0C, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 75
|
||||||
|
0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 76
|
||||||
|
0xFC, 0x04, 0x38, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x18, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x07, 0x18, 0x0C, 0x03, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 77
|
||||||
|
0xFC, 0x04, 0x18, 0x20, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 78
|
||||||
|
0xF0, 0x08, 0x04, 0x04, 0x02, 0x04, 0x04, 0x08, 0xF0, 0x07, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 79
|
||||||
|
0xFC, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x78, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 80
|
||||||
|
0xF0, 0x08, 0x04, 0x04, 0x02, 0x04, 0x04, 0x08, 0xF0, 0x07, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x2C, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 81
|
||||||
|
0xFC, 0x84, 0x84, 0x84, 0x84, 0x84, 0x44, 0x38, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 82
|
||||||
|
0x38, 0x44, 0x44, 0x82, 0x82, 0x84, 0x04, 0x18, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 83
|
||||||
|
0x04, 0x04, 0x04, 0x04, 0xFC, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 84
|
||||||
|
0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 85
|
||||||
|
0x04, 0x1C, 0xE0, 0x00, 0x00, 0x00, 0x80, 0x60, 0x1C, 0x04, 0x00, 0x00, 0x00, 0x03, 0x1C, 0x1C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 86
|
||||||
|
0x3C, 0xC0, 0x00, 0x00, 0xE0, 0x1C, 0x1C, 0xE0, 0x00, 0x00, 0x80, 0x78, 0x04, 0x00, 0x03, 0x1C, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x07, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 87
|
||||||
|
0x00, 0x04, 0x08, 0x30, 0xC0, 0xC0, 0x30, 0x08, 0x04, 0x10, 0x18, 0x0C, 0x02, 0x01, 0x01, 0x02, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 88
|
||||||
|
0x04, 0x0C, 0x30, 0x40, 0x80, 0x80, 0x60, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 89
|
||||||
|
0x04, 0x04, 0x04, 0x84, 0x64, 0x14, 0x0C, 0x04, 0x18, 0x14, 0x13, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 90
|
||||||
|
0xFF, 0x01, 0x01, 0x7F, 0x40, 0x40, 0x00, 0x00, 0x00, // 91
|
||||||
|
0x04, 0x1C, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 92
|
||||||
|
0x01, 0x01, 0xFF, 0x40, 0x40, 0x7F, 0x00, 0x00, 0x00, // 93
|
||||||
|
0x60, 0x18, 0x0C, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 94
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 95
|
||||||
|
0x02, 0x0C, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 96
|
||||||
|
0x40, 0x20, 0x10, 0x10, 0x20, 0xE0, 0x00, 0x1E, 0x12, 0x11, 0x11, 0x11, 0x1F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 97
|
||||||
|
0xFE, 0x20, 0x20, 0x10, 0x10, 0x20, 0xC0, 0x1F, 0x08, 0x10, 0x10, 0x10, 0x18, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 98
|
||||||
|
0xC0, 0x20, 0x10, 0x10, 0x20, 0x60, 0x80, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 99
|
||||||
|
0xC0, 0x20, 0x10, 0x10, 0x20, 0x40, 0xFE, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x08, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 100
|
||||||
|
0xC0, 0x20, 0x10, 0x10, 0x20, 0x60, 0x80, 0x0F, 0x19, 0x11, 0x11, 0x11, 0x19, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 101
|
||||||
|
0x20, 0xFE, 0x22, 0x22, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 102
|
||||||
|
0xC0, 0x20, 0x10, 0x10, 0x20, 0x40, 0xE0, 0x0F, 0x90, 0x90, 0x90, 0x90, 0xC8, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 103
|
||||||
|
0xFE, 0x20, 0x20, 0x10, 0x10, 0x20, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 104
|
||||||
|
0xE2, 0x1F, 0x00, // 105
|
||||||
|
0x00, 0xE2, 0x80, 0xFF, 0x00, 0x00, // 106
|
||||||
|
0xFE, 0x00, 0x00, 0x80, 0x60, 0x20, 0x00, 0x1F, 0x01, 0x01, 0x02, 0x0C, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 107
|
||||||
|
0xFE, 0x1F, 0x00, // 108
|
||||||
|
0xE0, 0x20, 0x20, 0x10, 0x10, 0x60, 0xC0, 0x20, 0x10, 0x10, 0x20, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 109
|
||||||
|
0xE0, 0x20, 0x20, 0x10, 0x10, 0x20, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 110
|
||||||
|
0xC0, 0x20, 0x20, 0x10, 0x20, 0x20, 0xC0, 0x0F, 0x18, 0x10, 0x10, 0x10, 0x18, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 111
|
||||||
|
0xE0, 0x20, 0x20, 0x10, 0x10, 0x20, 0xC0, 0xFF, 0x08, 0x10, 0x10, 0x10, 0x18, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 112
|
||||||
|
0xC0, 0x20, 0x10, 0x10, 0x20, 0x40, 0xE0, 0x0F, 0x10, 0x10, 0x10, 0x10, 0x08, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 113
|
||||||
|
0xE0, 0x20, 0x20, 0x10, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 114
|
||||||
|
0xE0, 0x20, 0x10, 0x10, 0x20, 0x60, 0x08, 0x11, 0x11, 0x11, 0x12, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 115
|
||||||
|
0x20, 0x20, 0xFC, 0x20, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // 116
|
||||||
|
0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x07, 0x18, 0x10, 0x10, 0x10, 0x08, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 117
|
||||||
|
0x20, 0xE0, 0x00, 0x00, 0x00, 0x80, 0x60, 0x20, 0x00, 0x00, 0x03, 0x1C, 0x1C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 118
|
||||||
|
0xE0, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0xE0, 0x20, 0x00, 0x0F, 0x18, 0x07, 0x00, 0x00, 0x07, 0x18, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 119
|
||||||
|
0x00, 0x20, 0x40, 0x80, 0x80, 0x40, 0x20, 0x10, 0x18, 0x0C, 0x03, 0x03, 0x0C, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 120
|
||||||
|
0x20, 0xE0, 0x00, 0x00, 0x00, 0x80, 0x60, 0x20, 0x00, 0x80, 0x83, 0x7C, 0x1C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 121
|
||||||
|
0x20, 0x20, 0x20, 0xA0, 0x60, 0x20, 0x18, 0x14, 0x13, 0x11, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 122
|
||||||
|
0x00, 0xF8, 0x06, 0x02, 0x01, 0x3E, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, // 123
|
||||||
|
0xFC, 0x7F, 0x00, // 124
|
||||||
|
0x02, 0x02, 0xFC, 0x00, 0x00, 0x80, 0x80, 0x7E, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // 125
|
||||||
|
0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 126
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,165 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* roboto32
|
||||||
|
*
|
||||||
|
* created with FontCreator
|
||||||
|
* written by F. Maximilian Thiele
|
||||||
|
*
|
||||||
|
* http://www.apetech.de/fontCreator
|
||||||
|
* me@apetech.de
|
||||||
|
*
|
||||||
|
* File Name : roboto32.h
|
||||||
|
* Date : 18.09.2014
|
||||||
|
* Font size in bytes : 40065
|
||||||
|
* Font width : 10
|
||||||
|
* Font height : 33
|
||||||
|
* Font first char : 32
|
||||||
|
* Font last char : 128
|
||||||
|
* Font used chars : 96
|
||||||
|
*
|
||||||
|
* The font data are defined as
|
||||||
|
*
|
||||||
|
* struct _FONT_ {
|
||||||
|
* uint16_t font_Size_in_Bytes_over_all_included_Size_it_self;
|
||||||
|
* uint8_t font_Width_in_Pixel_for_fixed_drawing;
|
||||||
|
* uint8_t font_Height_in_Pixel_for_all_characters;
|
||||||
|
* unit8_t font_First_Char;
|
||||||
|
* uint8_t font_Char_Count;
|
||||||
|
*
|
||||||
|
* uint8_t font_Char_Widths[font_Last_Char - font_First_Char +1];
|
||||||
|
* // for each character the separate width in pixels,
|
||||||
|
* // characters < 128 have an implicit virtual right empty row
|
||||||
|
*
|
||||||
|
* uint8_t font_data[];
|
||||||
|
* // bit field of all characters
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
#ifndef ROBOTO32_H
|
||||||
|
#define ROBOTO32_H
|
||||||
|
|
||||||
|
#define ROBOTO32_WIDTH 10
|
||||||
|
#define ROBOTO32_HEIGHT 33
|
||||||
|
|
||||||
|
static const uint8_t roboto32[] PROGMEM = {
|
||||||
|
0x9C, 0x81, // size
|
||||||
|
0x0A, // width
|
||||||
|
0x21, // height
|
||||||
|
0x20, // first char
|
||||||
|
0x60, // char count
|
||||||
|
|
||||||
|
// char widths
|
||||||
|
0x00, 0x03, 0x05, 0x11, 0x0E, 0x14, 0x12, 0x02, 0x08, 0x08,
|
||||||
|
0x0D, 0x10, 0x03, 0x07, 0x02, 0x0C, 0x0E, 0x08, 0x0E, 0x0E,
|
||||||
|
0x10, 0x0D, 0x0E, 0x0F, 0x0E, 0x0F, 0x02, 0x04, 0x0D, 0x0D,
|
||||||
|
0x0D, 0x0C, 0x19, 0x13, 0x0F, 0x11, 0x10, 0x0E, 0x0F, 0x11,
|
||||||
|
0x11, 0x02, 0x0E, 0x11, 0x0D, 0x16, 0x11, 0x12, 0x0F, 0x12,
|
||||||
|
0x10, 0x11, 0x11, 0x10, 0x12, 0x1B, 0x12, 0x12, 0x11, 0x05,
|
||||||
|
0x0B, 0x05, 0x0B, 0x0E, 0x06, 0x0D, 0x0E, 0x0D, 0x0D, 0x0E,
|
||||||
|
0x0A, 0x0D, 0x0D, 0x02, 0x05, 0x0E, 0x02, 0x18, 0x0D, 0x0F,
|
||||||
|
0x0E, 0x0D, 0x09, 0x0C, 0x08, 0x0D, 0x0E, 0x16, 0x0E, 0x0E,
|
||||||
|
0x0E, 0x09, 0x01, 0x09, 0x12, 0x00,
|
||||||
|
|
||||||
|
// font data
|
||||||
|
0x00, 0xF8, 0xF8, 0x00, 0xFF, 0xFF, 0x80, 0x87, 0x87, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, // 33
|
||||||
|
0xFC, 0x1C, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 34
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0x08, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x78, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0xF4, 0x7F, 0x05, 0x04, 0x04, 0x04, 0xC4, 0xFE, 0x0F, 0x04, 0x04, 0x04, 0x0C, 0x0C, 0x0C, 0xCC, 0xFE, 0x0F, 0x0C, 0x0C, 0x0C, 0x0C, 0xFC, 0x7F, 0x0D, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 35
|
||||||
|
0x00, 0xC0, 0xF0, 0x30, 0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18, 0x30, 0x70, 0xE0, 0x80, 0x00, 0x0F, 0x1E, 0x30, 0x30, 0x60, 0x60, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x03, 0x03, 0x78, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x83, 0xFF, 0x7C, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x1E, 0x1E, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 36
|
||||||
|
0xE0, 0x30, 0x18, 0x08, 0x08, 0x18, 0x10, 0xF0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1C, 0x10, 0x30, 0x10, 0x10, 0x18, 0x0F, 0x03, 0x80, 0xE0, 0x38, 0x0C, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x38, 0x0C, 0x07, 0x01, 0x00, 0xF8, 0xFE, 0x03, 0x01, 0x01, 0x01, 0x03, 0xCE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x02, 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 37
|
||||||
|
0x00, 0x00, 0x00, 0xE0, 0x70, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0xDE, 0x78, 0x60, 0xF0, 0x98, 0x0C, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xFE, 0xC7, 0x81, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0E, 0x1C, 0xB0, 0xE0, 0xF0, 0xBF, 0x0F, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x00, 0x01, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 38
|
||||||
|
0xFC, 0x0C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 39
|
||||||
|
0x00, 0x00, 0xC0, 0xF0, 0x38, 0x0C, 0x07, 0x02, 0xE0, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x1C, 0x70, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, // 40
|
||||||
|
0x03, 0x06, 0x0C, 0x38, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFE, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x1F, 0x00, 0x80, 0xC0, 0x70, 0x1C, 0x0F, 0x01, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 41
|
||||||
|
0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x01, 0x81, 0xE3, 0x73, 0x1A, 0x0F, 0x0F, 0x3A, 0x63, 0xC3, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 42
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 43
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x20, 0x3F, 0x0F, 0x00, 0x00, 0x00, // 44
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 45
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, // 46
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0x38, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0x3C, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0x3E, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0E, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 47
|
||||||
|
0x00, 0xC0, 0x70, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xE0, 0xC0, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3F, 0xFF, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x7F, 0x1F, 0x00, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 48
|
||||||
|
0x20, 0x30, 0x30, 0x30, 0x10, 0x10, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 49
|
||||||
|
0xC0, 0xE0, 0x30, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xE0, 0xC0, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x70, 0x3F, 0x0F, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x30, 0x1C, 0x0E, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 50
|
||||||
|
0xC0, 0xE0, 0x70, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xF0, 0xC0, 0x00, 0x01, 0x01, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x60, 0xE0, 0xB0, 0x9F, 0x0F, 0x00, 0x70, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0xFF, 0x3C, 0x00, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 51
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0x38, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x70, 0x38, 0x0E, 0x07, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x08, 0x0E, 0x0B, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0xFF, 0xFF, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 52
|
||||||
|
0x00, 0xF8, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0xFC, 0xFF, 0x20, 0x30, 0x10, 0x10, 0x18, 0x18, 0x30, 0x30, 0x60, 0xE0, 0x80, 0xF0, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0x01, 0x01, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 53
|
||||||
|
0x00, 0x80, 0xE0, 0x70, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, 0x00, 0x00, 0xFC, 0xFF, 0x61, 0x30, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xE0, 0xC0, 0x0F, 0x7F, 0xF0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF1, 0x7F, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 54
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x98, 0xD8, 0x78, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFE, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 55
|
||||||
|
0x80, 0xE0, 0x70, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xF0, 0xE0, 0x00, 0x07, 0x1F, 0xB8, 0xB0, 0xE0, 0x60, 0x40, 0x60, 0x60, 0xE0, 0xB0, 0x9C, 0x0F, 0x03, 0xFE, 0xE7, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xFF, 0x7E, 0x00, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 56
|
||||||
|
0x00, 0xC0, 0xE0, 0x70, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, 0x70, 0xE0, 0xC0, 0x00, 0x1E, 0xFF, 0xE1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC1, 0xFF, 0xFC, 0x00, 0x00, 0x01, 0x03, 0x03, 0x06, 0x06, 0x06, 0x06, 0x02, 0x03, 0x81, 0xF0, 0x7F, 0x07, 0x00, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 57
|
||||||
|
0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, // 58
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x80, 0x80, 0x00, 0x20, 0x3F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, // 59
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x60, 0x60, 0x20, 0x30, 0x30, 0x18, 0x18, 0x0C, 0x0C, 0x06, 0x01, 0x01, 0x03, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x0C, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 60
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 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, // 61
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0C, 0x0C, 0x08, 0x18, 0x10, 0x30, 0x30, 0x60, 0x60, 0x40, 0xC0, 0x80, 0x30, 0x30, 0x18, 0x18, 0x0C, 0x0C, 0x04, 0x06, 0x06, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 62
|
||||||
|
0xC0, 0xE0, 0x70, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xF0, 0xC0, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x1F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 63
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x40, 0x60, 0x20, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x20, 0x60, 0x40, 0xC0, 0x80, 0x00, 0x00, 0xC0, 0xF8, 0x1C, 0x07, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x70, 0x30, 0x18, 0x08, 0x08, 0x08, 0x18, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0xF8, 0xFF, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x3F, 0x01, 0x07, 0x1C, 0x30, 0x60, 0xC0, 0xC0, 0x80, 0x83, 0x03, 0x02, 0x02, 0x02, 0x03, 0x81, 0x80, 0x81, 0x83, 0x02, 0x02, 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 64
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x78, 0x78, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7C, 0x1F, 0x03, 0x00, 0x00, 0x01, 0x0F, 0x7C, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7C, 0x1F, 0x0F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0F, 0x0F, 0x7C, 0xE0, 0x80, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 65
|
||||||
|
0xF8, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0xFF, 0xFF, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x9F, 0x0F, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC1, 0xFF, 0x7E, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 66
|
||||||
|
0x00, 0x80, 0xC0, 0x60, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0xE0, 0xC0, 0x00, 0xFC, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x0F, 0x3F, 0xF0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x78, 0x18, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 67
|
||||||
|
0xF8, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, 0x30, 0x30, 0x60, 0xC0, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0x70, 0x3F, 0x0F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 68
|
||||||
|
0xF8, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 69
|
||||||
|
0xF8, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 70
|
||||||
|
0x00, 0x80, 0xC0, 0x60, 0x30, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0x70, 0xE0, 0x80, 0xFC, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x83, 0x83, 0x07, 0x3F, 0x78, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 71
|
||||||
|
0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 72
|
||||||
|
0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x03, 0x00, 0x00, // 73
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x30, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xFF, 0x3F, 0x00, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 74
|
||||||
|
0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x30, 0x18, 0x08, 0x00, 0xFF, 0xFF, 0x40, 0x40, 0x40, 0xE0, 0xF0, 0x98, 0x0C, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x0C, 0x38, 0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 75
|
||||||
|
0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 76
|
||||||
|
0xF8, 0xF8, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x78, 0xF8, 0xF8, 0xFF, 0xFF, 0x00, 0x03, 0x1F, 0x78, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0x3C, 0x0F, 0x01, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x3C, 0xF0, 0x80, 0xC0, 0xF8, 0x1E, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 77
|
||||||
|
0xF8, 0xF8, 0x70, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xFF, 0xFF, 0x00, 0x01, 0x03, 0x0E, 0x1C, 0x70, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x1C, 0x38, 0xE0, 0xC0, 0xFF, 0xFF, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 78
|
||||||
|
0x00, 0x80, 0xC0, 0x60, 0x30, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0xE0, 0xC0, 0x80, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFC, 0x0F, 0x3F, 0xF0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x78, 0x3F, 0x07, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 79
|
||||||
|
0xF8, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, 0x30, 0x70, 0xE0, 0xC0, 0xFF, 0xFF, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0x60, 0x7F, 0x1F, 0xFF, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 80
|
||||||
|
0x00, 0x80, 0xC0, 0x60, 0x30, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0x30, 0xE0, 0xC0, 0x80, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFC, 0x0F, 0x3F, 0xF0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x78, 0x3F, 0x07, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x07, 0x0E, 0x1C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 81
|
||||||
|
0xF8, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, 0x30, 0x70, 0xE0, 0xC0, 0x00, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xB0, 0x3F, 0x0F, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0xFF, 0xFE, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 82
|
||||||
|
0x00, 0x80, 0xE0, 0x70, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, 0x30, 0xE0, 0xC0, 0x00, 0x00, 0x07, 0x0F, 0x18, 0x30, 0x30, 0x60, 0x60, 0x60, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x03, 0x03, 0x10, 0x70, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x81, 0xC3, 0xFE, 0x3C, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 83
|
||||||
|
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 84
|
||||||
|
0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0xF8, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x7F, 0x1F, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 85
|
||||||
|
0x38, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0x18, 0x00, 0x00, 0x07, 0x3F, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x3E, 0xF0, 0xC0, 0xC0, 0xF8, 0x3F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 86
|
||||||
|
0x18, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0x78, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x78, 0x08, 0x00, 0x01, 0x1F, 0xFC, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFC, 0x1F, 0x01, 0x00, 0x03, 0x3F, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1F, 0xFC, 0xC0, 0xF0, 0x7F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1F, 0xFC, 0xC0, 0xF0, 0x7F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 87
|
||||||
|
0x08, 0x18, 0x78, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xF0, 0x38, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x1E, 0xB8, 0xF0, 0xF0, 0xBC, 0x0E, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0x78, 0x1C, 0x0F, 0x03, 0x00, 0x01, 0x03, 0x0E, 0x1C, 0x70, 0xE0, 0x80, 0x00, 0x00, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 88
|
||||||
|
0x18, 0x78, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x70, 0x38, 0x08, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x3C, 0x70, 0xC0, 0x00, 0xC0, 0xE0, 0x38, 0x1E, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 89
|
||||||
|
0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x98, 0xF8, 0x78, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0x38, 0x1C, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x70, 0x38, 0x0E, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 90
|
||||||
|
0xFF, 0x03, 0x03, 0x03, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, // 91
|
||||||
|
0x18, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1F, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1F, 0x78, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 92
|
||||||
|
0x03, 0x03, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x60, 0x60, 0x60, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, // 93
|
||||||
|
0x00, 0x00, 0x00, 0x80, 0xF0, 0x18, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x40, 0x78, 0x1E, 0x07, 0x00, 0x00, 0x00, 0x07, 0x1E, 0x78, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 94
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 95
|
||||||
|
0x08, 0x08, 0x18, 0x30, 0x60, 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, // 96
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x38, 0x0C, 0x06, 0x06, 0x02, 0x02, 0x02, 0x06, 0x06, 0x1C, 0xF8, 0xE0, 0xF8, 0xDC, 0x06, 0x06, 0x02, 0x03, 0x03, 0x03, 0x03, 0x83, 0xC3, 0xFF, 0xFF, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 97
|
||||||
|
0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x0C, 0x04, 0x06, 0x02, 0x02, 0x06, 0x06, 0x0E, 0x1C, 0xF8, 0xE0, 0xFF, 0xFF, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x3F, 0x03, 0x03, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 98
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0x1C, 0x06, 0x06, 0x02, 0x02, 0x02, 0x06, 0x06, 0x0C, 0x78, 0x70, 0x7F, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x60, 0x00, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 99
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0xE0, 0xF8, 0x1C, 0x0E, 0x06, 0x06, 0x02, 0x02, 0x06, 0x04, 0x0C, 0xFF, 0xFF, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 100
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x78, 0x1C, 0x0C, 0x06, 0x02, 0x02, 0x02, 0x06, 0x06, 0x0C, 0xF8, 0xF0, 0x07, 0x7F, 0xF3, 0xC3, 0x83, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x83, 0x03, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 101
|
||||||
|
0x00, 0x00, 0x00, 0xF0, 0xFC, 0x0C, 0x06, 0x06, 0x06, 0x04, 0x06, 0x06, 0x06, 0xFF, 0xFF, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 102
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0x1C, 0x0E, 0x06, 0x06, 0x02, 0x02, 0x06, 0x04, 0x0C, 0xF0, 0xFE, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x80, 0xC1, 0x83, 0x83, 0x82, 0x82, 0x82, 0x83, 0xC3, 0xE1, 0x7F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, // 103
|
||||||
|
0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x30, 0x08, 0x04, 0x06, 0x02, 0x02, 0x06, 0x06, 0x0E, 0x7C, 0xF8, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 104
|
||||||
|
0x0C, 0x0C, 0xFE, 0xFE, 0xFF, 0xFF, 0x03, 0x03, 0x00, 0x00, // 105
|
||||||
|
0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x80, 0xE0, 0x7F, 0x1F, 0x80, 0x80, 0x00, 0x00, 0x00, // 106
|
||||||
|
0xFC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x60, 0x38, 0x1C, 0x0E, 0x06, 0x02, 0x00, 0xFF, 0xFF, 0x03, 0x03, 0x03, 0x07, 0x0E, 0x18, 0x70, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 107
|
||||||
|
0xFC, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x03, 0x00, 0x00, // 108
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x30, 0x0C, 0x04, 0x06, 0x02, 0x02, 0x06, 0x06, 0x0E, 0xFC, 0xF0, 0x38, 0x0C, 0x04, 0x06, 0x02, 0x02, 0x06, 0x06, 0x0C, 0xFC, 0xF0, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 109
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x30, 0x08, 0x04, 0x06, 0x02, 0x02, 0x06, 0x06, 0x0E, 0x7C, 0xF8, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 110
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x78, 0x1C, 0x0C, 0x06, 0x06, 0x02, 0x02, 0x06, 0x06, 0x0C, 0x1C, 0xF8, 0xE0, 0x07, 0x7F, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xFD, 0x3F, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 111
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x18, 0x0C, 0x06, 0x06, 0x02, 0x02, 0x06, 0x06, 0x0E, 0x1C, 0xF8, 0xE0, 0xFF, 0xFF, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xFF, 0x3F, 0xFF, 0xFF, 0x00, 0x01, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 112
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0x1C, 0x0E, 0x06, 0x02, 0x02, 0x02, 0x06, 0x04, 0x0C, 0xFC, 0xFE, 0x3F, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, // 113
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x30, 0x0C, 0x04, 0x06, 0x06, 0x06, 0x02, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 114
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFC, 0x8C, 0x06, 0x06, 0x02, 0x02, 0x06, 0x06, 0x0E, 0x3C, 0x38, 0xE0, 0xE0, 0x01, 0x01, 0x03, 0x03, 0x02, 0x06, 0x06, 0x0C, 0xDC, 0xF8, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 115
|
||||||
|
0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0xFF, 0xFF, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 116
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x1F, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7F, 0xFF, 0x00, 0x00, 0x01, 0x03, 0x03, 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 117
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x3E, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0x1E, 0x06, 0x00, 0x00, 0x00, 0x07, 0x3E, 0xF0, 0x80, 0xC0, 0xF8, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 118
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x3E, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF8, 0x1E, 0x1E, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF8, 0x3E, 0x06, 0x00, 0x00, 0x03, 0x1F, 0xFC, 0xC0, 0xE0, 0x7C, 0x0F, 0x01, 0x00, 0x00, 0x01, 0x0F, 0x7C, 0xE0, 0x80, 0xF8, 0x1F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 119
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x1E, 0x38, 0xE0, 0xC0, 0x00, 0x80, 0xE0, 0x70, 0x3C, 0x0E, 0x06, 0x02, 0x00, 0x00, 0xC0, 0xE0, 0x38, 0x1D, 0x07, 0x0F, 0x1C, 0x70, 0xE0, 0x80, 0x00, 0x00, 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 120
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x3E, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0x3E, 0x06, 0x00, 0x00, 0x01, 0x07, 0x3E, 0xF8, 0xC0, 0xC0, 0xF8, 0x3F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xC0, 0x78, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 121
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x86, 0xC6, 0x76, 0x3E, 0x0E, 0x06, 0x00, 0x00, 0x80, 0xC0, 0x70, 0x38, 0x1C, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 122
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xF0, 0xF8, 0x0C, 0x04, 0x06, 0x00, 0x00, 0x80, 0xE0, 0x7F, 0x1F, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x0E, 0xFC, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x3F, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 123
|
||||||
|
0xF8, 0xFF, 0xFF, 0x3F, 0x00, // 124
|
||||||
|
0x02, 0x06, 0x0C, 0x1C, 0xF8, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFC, 0x06, 0x03, 0x03, 0x80, 0xC0, 0xC0, 0x70, 0x3F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 125
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0x40, 0x40, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x06, 0x06, 0x04, 0x04, 0x06, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 126
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,74 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* roboto70
|
||||||
|
*
|
||||||
|
* created with FontCreator
|
||||||
|
* written by F. Maximilian Thiele
|
||||||
|
*
|
||||||
|
* http://www.apetech.de/fontCreator
|
||||||
|
* me@apetech.de
|
||||||
|
*
|
||||||
|
* File Name : roboto70.h
|
||||||
|
* Date : 18.09.2014
|
||||||
|
* Font size in bytes : 15623
|
||||||
|
* Font width : 10
|
||||||
|
* Font height : 51
|
||||||
|
* Font first char : 48
|
||||||
|
* Font last char : 59
|
||||||
|
* Font used chars : 11
|
||||||
|
*
|
||||||
|
* The font data are defined as
|
||||||
|
*
|
||||||
|
* struct _FONT_ {
|
||||||
|
* uint16_t font_Size_in_Bytes_over_all_included_Size_it_self;
|
||||||
|
* uint8_t font_Width_in_Pixel_for_fixed_drawing;
|
||||||
|
* uint8_t font_Height_in_Pixel_for_all_characters;
|
||||||
|
* unit8_t font_First_Char;
|
||||||
|
* uint8_t font_Char_Count;
|
||||||
|
*
|
||||||
|
* uint8_t font_Char_Widths[font_Last_Char - font_First_Char +1];
|
||||||
|
* // for each character the separate width in pixels,
|
||||||
|
* // characters < 128 have an implicit virtual right empty row
|
||||||
|
*
|
||||||
|
* uint8_t font_data[];
|
||||||
|
* // bit field of all characters
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
#ifndef ROBOTO70_H
|
||||||
|
#define ROBOTO70_H
|
||||||
|
|
||||||
|
#define ROBOTO70_WIDTH 10
|
||||||
|
#define ROBOTO70_HEIGHT 51
|
||||||
|
|
||||||
|
static const uint8_t roboto70[] PROGMEM = {
|
||||||
|
0x3D, 0x07, // size
|
||||||
|
0x0A, // width
|
||||||
|
0x33, // height
|
||||||
|
0x30, // first char
|
||||||
|
0x0B, // char count
|
||||||
|
|
||||||
|
// char widths
|
||||||
|
0x1F, 0x10, 0x20, 0x20, 0x24, 0x1D, 0x1F, 0x20, 0x20, 0x1F,
|
||||||
|
0x04,
|
||||||
|
|
||||||
|
// font data
|
||||||
|
0x00, 0x00, 0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0x3C, 0x1E, 0x1E, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x1E, 0x3E, 0x7C, 0xFC, 0xF8, 0xF0, 0xC0, 0x80, 0x00, 0x00, 0xC0, 0xFE, 0xFF, 0xFF, 0x3F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFC, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x01, 0x07, 0x1F, 0x3F, 0x7F, 0xFC, 0xF0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0xFC, 0x7F, 0x3F, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x60, 0x60, 0x60, 0x60, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x60, 0x60, 0x60, 0x60, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 48
|
||||||
|
0x38, 0x38, 0x38, 0x38, 0x3C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1E, 0x1E, 0x1E, 0xFE, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, // 49
|
||||||
|
0x00, 0x80, 0xE0, 0xF0, 0xF8, 0x7C, 0x3C, 0x1E, 0x1E, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x1E, 0x3E, 0x7C, 0xFC, 0xF8, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7F, 0x7F, 0x7F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xF0, 0xFE, 0x7F, 0x3F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0x7E, 0x3F, 0x1F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0x7E, 0x3F, 0x1F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFE, 0xBF, 0x9F, 0x87, 0x83, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, // 50
|
||||||
|
0x00, 0x00, 0x80, 0xE0, 0xF0, 0xF8, 0xFC, 0x7C, 0x3E, 0x1E, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x1E, 0x1E, 0x3E, 0xFC, 0xF8, 0xF0, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x1C, 0x1F, 0x1F, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xFF, 0xFF, 0xFF, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xE0, 0xF0, 0x78, 0x7C, 0x3F, 0x1F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x0E, 0x0E, 0x1E, 0x3C, 0x7C, 0xF8, 0xF0, 0xE0, 0x80, 0x00, 0x70, 0xF0, 0xF0, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0xFF, 0xFF, 0x38, 0x00, 0x07, 0x0F, 0x3F, 0x7F, 0x7E, 0xF8, 0xF0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xE0, 0xF0, 0xFC, 0x7F, 0x3F, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x60, 0x60, 0x60, 0x60, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x60, 0x60, 0x60, 0x60, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 51
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xF8, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xF0, 0xF8, 0xFE, 0x3F, 0x1F, 0x07, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xF0, 0xFC, 0x7E, 0x3F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF8, 0xFC, 0x7F, 0x1F, 0x0F, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1E, 0x1F, 0x1F, 0x1F, 0x1F, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 52
|
||||||
|
0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x3F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xE0, 0xF0, 0x70, 0x78, 0x78, 0x38, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x78, 0x78, 0xF8, 0xF0, 0xE0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x08, 0x0F, 0x0F, 0x0F, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1F, 0xFF, 0xFF, 0xFE, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x1F, 0x3F, 0x7F, 0xFC, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0xFC, 0x7F, 0x3F, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x60, 0x60, 0x60, 0x60, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x60, 0x60, 0x60, 0x60, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 53
|
||||||
|
0x00, 0x00, 0x00, 0x80, 0xE0, 0xF0, 0xF8, 0xF8, 0x7C, 0x3E, 0x1E, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x1E, 0x1E, 0x04, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF8, 0xFE, 0xFF, 0x7F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xE0, 0xE0, 0x70, 0x78, 0x38, 0x3C, 0x1C, 0x1C, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1C, 0x3C, 0x7C, 0x78, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x1F, 0xFF, 0xFF, 0xFE, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x07, 0x0F, 0x3F, 0x7F, 0x7C, 0xF8, 0xF0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0xF8, 0x7E, 0x3F, 0x1F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x60, 0x60, 0x60, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x60, 0x60, 0x60, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 54
|
||||||
|
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x8F, 0xCF, 0xFF, 0xFF, 0x7F, 0x3F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF8, 0xFC, 0x3F, 0x1F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xFC, 0xFF, 0x3F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0xFF, 0xFF, 0x3F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFE, 0xFF, 0xFF, 0x3F, 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, 0xF8, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 55
|
||||||
|
0x00, 0x00, 0x00, 0xC0, 0xF0, 0xF8, 0xFC, 0x7C, 0x3E, 0x1E, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x1F, 0x1E, 0x3E, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1F, 0x3F, 0x3E, 0x78, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0xF0, 0x7C, 0x3F, 0x1F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0x3C, 0x1C, 0x1E, 0x0E, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x0F, 0x0E, 0x1E, 0x3C, 0x7C, 0xF8, 0xF0, 0xE0, 0xC0, 0x00, 0x78, 0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x07, 0x1F, 0x3F, 0x7F, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xE0, 0xF0, 0xF8, 0xFE, 0x7F, 0x3F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x60, 0x60, 0x60, 0x60, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x60, 0x60, 0x60, 0x60, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 56
|
||||||
|
0x00, 0x00, 0x80, 0xC0, 0xF0, 0xF8, 0xFC, 0x7C, 0x3E, 0x1E, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x1E, 0x1E, 0x3C, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x00, 0x00, 0xE0, 0xFE, 0xFF, 0xFF, 0x3F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1F, 0xFF, 0xFF, 0xFF, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0x07, 0x1F, 0x3F, 0x7F, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xE0, 0xE0, 0x70, 0x78, 0x3E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xE0, 0xF0, 0xFC, 0x7F, 0x3F, 0x1F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x60, 0x60, 0x60, 0x60, 0x60, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x60, 0x60, 0x60, 0x60, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 57
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0x60, 0x60, 0x60, 0x60 // 58
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,63 @@
|
||||||
|
#include <SPI.h> //uncomment when using SPI_MODE_NORMAL or SPI_MODE_EXTENDED
|
||||||
|
#include <ILI_SdSpi.h>
|
||||||
|
#include <ILI_SdFatConfig.h>
|
||||||
|
#include <ILI9341_due_gText.h>
|
||||||
|
#include <ILI9341_due.h>
|
||||||
|
|
||||||
|
#include "fonts\jokerman_255.h"
|
||||||
|
|
||||||
|
#define TFT_DC 10
|
||||||
|
#define TFT_CS 8
|
||||||
|
#define TFT_RST 9
|
||||||
|
|
||||||
|
ILI9341_due myTFT(TFT_CS, TFT_DC, TFT_RST);
|
||||||
|
ILI9341_due_gText t1(&myTFT);
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
Serial.begin(9600);
|
||||||
|
|
||||||
|
bool result = myTFT.begin();
|
||||||
|
|
||||||
|
Serial.print("TFT begin successful: ");
|
||||||
|
Serial.println(result ? "YES" : "NO");
|
||||||
|
myTFT.fillScreen(ILI9341_BLACK);
|
||||||
|
|
||||||
|
t1.defineArea(18, 32, 222, 287);
|
||||||
|
t1.selectFont(jokerman_255);
|
||||||
|
//t1.setFontMode(gTextFontMode_Transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
t1.setFontColor(255,230,0,0,0,0);
|
||||||
|
t1.drawString("0", gTextAlignMiddleCenter, gTextEraseFullLine);
|
||||||
|
delay(750);
|
||||||
|
t1.setFontColor(232,157,12);
|
||||||
|
t1.drawString("1", gTextAlignMiddleCenter, gTextEraseFullLine);
|
||||||
|
delay(750);
|
||||||
|
t1.setFontColor(255,88,0);
|
||||||
|
t1.drawString("2", gTextAlignMiddleCenter, gTextEraseFullLine);
|
||||||
|
delay(750);
|
||||||
|
t1.setFontColor(232,12,15);
|
||||||
|
t1.drawString("3", gTextAlignMiddleCenter, gTextEraseFullLine);
|
||||||
|
delay(750);
|
||||||
|
t1.setFontColor(227,13,255);
|
||||||
|
t1.drawString("4", gTextAlignMiddleCenter, gTextEraseFullLine);
|
||||||
|
delay(750);
|
||||||
|
t1.setFontColor(57,0,255);
|
||||||
|
t1.drawString("5", gTextAlignMiddleCenter, gTextEraseFullLine);
|
||||||
|
delay(750);
|
||||||
|
t1.setFontColor(12,103,232);
|
||||||
|
t1.drawString("6", gTextAlignMiddleCenter, gTextEraseFullLine);
|
||||||
|
delay(750);
|
||||||
|
t1.setFontColor(0,255,243);
|
||||||
|
t1.drawString("7", gTextAlignMiddleCenter, gTextEraseFullLine);
|
||||||
|
delay(750);
|
||||||
|
t1.setFontColor(12,232,73);
|
||||||
|
t1.drawString("8", gTextAlignMiddleCenter, gTextEraseFullLine);
|
||||||
|
delay(750);
|
||||||
|
t1.setFontColor(132,255,13);
|
||||||
|
t1.drawString("9", gTextAlignMiddleCenter, gTextEraseFullLine);
|
||||||
|
delay(750);
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
//#include <SPI.h> //uncomment when using SPI_MODE_NORMAL or SPI_MODE_EXTENDED
|
||||||
|
#include <ILI_SdSpi.h>
|
||||||
|
#include <ILI_SdFatConfig.h>
|
||||||
|
#include <ILI9341_due_gText.h>
|
||||||
|
#include <ILI9341_due.h>
|
||||||
|
|
||||||
|
#include "fonts\Arial_bold_14.h"
|
||||||
|
|
||||||
|
#define TFT_CS 10
|
||||||
|
#define TFT_DC 9
|
||||||
|
|
||||||
|
ILI9341_due myTFT(TFT_CS, TFT_DC);
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
Serial.begin(9600);
|
||||||
|
|
||||||
|
bool result = myTFT.begin();
|
||||||
|
|
||||||
|
Serial.print("TFT begin successful: ");
|
||||||
|
Serial.println(result ? "YES" : "NO");
|
||||||
|
|
||||||
|
myTFT.fillScreen(ILI9341_BLUE);
|
||||||
|
myTFT.setRotation(iliRotation270);
|
||||||
|
|
||||||
|
ILI9341_due_gText t1(&myTFT);
|
||||||
|
t1.defineArea(100, 110, 220, 130);
|
||||||
|
t1.selectFont(Arial_bold_14);
|
||||||
|
t1.setFontLetterSpacing(5);
|
||||||
|
t1.setFontColor(ILI9341_WHITE, ILI9341_BLUE);
|
||||||
|
t1.drawString("Hello World", gTextAlignMiddleCenter);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
|
||||||
|
/* add main program code here */
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,354 @@
|
||||||
|
/***************************************************
|
||||||
|
This is our GFX example for the Adafruit ILI9341 Breakout and Shield
|
||||||
|
----> http://www.adafruit.com/products/1651
|
||||||
|
|
||||||
|
Check out the links above for our tutorials and wiring diagrams
|
||||||
|
These displays use SPI to communicate, 4 or 5 pins are required to
|
||||||
|
interface (RST is optional)
|
||||||
|
Adafruit invests time and resources providing this open source code,
|
||||||
|
please support Adafruit and open-source hardware by purchasing
|
||||||
|
products from Adafruit!
|
||||||
|
|
||||||
|
Written by Limor Fried/Ladyada for Adafruit Industries.
|
||||||
|
MIT license, all text above must be included in any redistribution
|
||||||
|
****************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
//#include <SPI.h>
|
||||||
|
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <ILI_SdSpi.h>
|
||||||
|
#include <ILI_SdFatConfig.h>
|
||||||
|
#include <ILI9341_due_gText.h>
|
||||||
|
#include <ILI9341_due.h>
|
||||||
|
|
||||||
|
// For the Adafruit shield, these are the default.
|
||||||
|
#define TFT_DC 10
|
||||||
|
#define TFT_CS 8
|
||||||
|
#define rst 9
|
||||||
|
|
||||||
|
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
|
||||||
|
ILI9341_due tft = ILI9341_due(TFT_CS, TFT_DC, rst);
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
delay (5000);
|
||||||
|
Serial.begin(115200);
|
||||||
|
while (!Serial) ; // wait for Arduino Serial Monitor
|
||||||
|
Serial.println("ILI9341 Test!");
|
||||||
|
|
||||||
|
tft.begin();
|
||||||
|
|
||||||
|
// read diagnostics (optional but can help debug problems)
|
||||||
|
uint8_t x = tft.readcommand8(ILI9341_RDMODE);
|
||||||
|
Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);
|
||||||
|
x = tft.readcommand8(ILI9341_RDMADCTL);
|
||||||
|
Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);
|
||||||
|
x = tft.readcommand8(ILI9341_RDPIXFMT);
|
||||||
|
Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);
|
||||||
|
x = tft.readcommand8(ILI9341_RDIMGFMT);
|
||||||
|
Serial.print("Image Format: 0x"); Serial.println(x, HEX);
|
||||||
|
x = tft.readcommand8(ILI9341_RDSELFDIAG);
|
||||||
|
Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX);
|
||||||
|
|
||||||
|
Serial.println(F("Benchmark Time (microseconds)"));
|
||||||
|
|
||||||
|
Serial.print(F("Screen fill "));
|
||||||
|
Serial.println(testFillScreen());
|
||||||
|
delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Text "));
|
||||||
|
Serial.println(testText());
|
||||||
|
delay(600);
|
||||||
|
|
||||||
|
Serial.print(F("Lines "));
|
||||||
|
Serial.println(testLines(ILI9341_CYAN));
|
||||||
|
delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Horiz/Vert Lines "));
|
||||||
|
Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE));
|
||||||
|
delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Rectangles (outline) "));
|
||||||
|
Serial.println(testRects(ILI9341_GREEN));
|
||||||
|
delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Rectangles (filled) "));
|
||||||
|
Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA));
|
||||||
|
delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Circles (filled) "));
|
||||||
|
Serial.println(testFilledCircles(10, ILI9341_MAGENTA));
|
||||||
|
|
||||||
|
Serial.print(F("Circles (outline) "));
|
||||||
|
Serial.println(testCircles(10, ILI9341_WHITE));
|
||||||
|
delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Triangles (outline) "));
|
||||||
|
Serial.println(testTriangles());
|
||||||
|
delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Triangles (filled) "));
|
||||||
|
Serial.println(testFilledTriangles());
|
||||||
|
delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Rounded rects (outline) "));
|
||||||
|
Serial.println(testRoundRects());
|
||||||
|
delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Rounded rects (filled) "));
|
||||||
|
Serial.println(testFilledRoundRects());
|
||||||
|
delay(200);
|
||||||
|
|
||||||
|
Serial.println(F("Done!"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void loop(void) {
|
||||||
|
for(uint8_t rotation=0; rotation<4; rotation++) {
|
||||||
|
tft.setRotation((iliRotation)rotation);
|
||||||
|
testText();
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testFillScreen() {
|
||||||
|
unsigned long start = micros();
|
||||||
|
// tft.fillScreen(ILI9341_BLACK);
|
||||||
|
tft.fillScreen(ILI9341_RED);
|
||||||
|
tft.fillScreen(ILI9341_GREEN);
|
||||||
|
tft.fillScreen(ILI9341_BLUE);
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testText() {
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
unsigned long start = micros();
|
||||||
|
tft.setCursor(0, 0);
|
||||||
|
tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
|
||||||
|
tft.println("Hello World!");
|
||||||
|
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2);
|
||||||
|
tft.println(1234.56);
|
||||||
|
tft.setTextColor(ILI9341_RED); tft.setTextSize(3);
|
||||||
|
tft.println(0xDEADBEEF, HEX);
|
||||||
|
tft.println();
|
||||||
|
tft.setTextColor(ILI9341_GREEN);
|
||||||
|
tft.setTextSize(5);
|
||||||
|
tft.println("Groop");
|
||||||
|
tft.setTextSize(2);
|
||||||
|
tft.println("I implore thee,");
|
||||||
|
tft.setTextSize(1);
|
||||||
|
tft.println("my foonting turlingdromes.");
|
||||||
|
tft.println("And hooptiously drangle me");
|
||||||
|
tft.println("with crinkly bindlewurdles,");
|
||||||
|
tft.println("Or I will rend thee");
|
||||||
|
tft.println("in the gobberwarts");
|
||||||
|
tft.println("with my blurglecruncheon,");
|
||||||
|
tft.println("see if I don't!");
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testLines(uint16_t color) {
|
||||||
|
unsigned long start, t;
|
||||||
|
int x1, y1, x2, y2,
|
||||||
|
w = tft.width(),
|
||||||
|
h = tft.height();
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
|
||||||
|
x1 = y1 = 0;
|
||||||
|
y2 = h - 1;
|
||||||
|
start = micros();
|
||||||
|
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
x2 = w - 1;
|
||||||
|
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
t = micros() - start; // fillScreen doesn't count against timing
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
|
||||||
|
x1 = w - 1;
|
||||||
|
y1 = 0;
|
||||||
|
y2 = h - 1;
|
||||||
|
start = micros();
|
||||||
|
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
x2 = 0;
|
||||||
|
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
t += micros() - start;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
|
||||||
|
x1 = 0;
|
||||||
|
y1 = h - 1;
|
||||||
|
y2 = 0;
|
||||||
|
start = micros();
|
||||||
|
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
x2 = w - 1;
|
||||||
|
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
t += micros() - start;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
|
||||||
|
x1 = w - 1;
|
||||||
|
y1 = h - 1;
|
||||||
|
y2 = 0;
|
||||||
|
start = micros();
|
||||||
|
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
x2 = 0;
|
||||||
|
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testFastLines(uint16_t color1, uint16_t color2) {
|
||||||
|
unsigned long start;
|
||||||
|
int x, y, w = tft.width(), h = tft.height();
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
start = micros();
|
||||||
|
for(y=0; y<h; y+=5) tft.drawFastHLine(0, y, w, color1);
|
||||||
|
for(x=0; x<w; x+=5) tft.drawFastVLine(x, 0, h, color2);
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testRects(uint16_t color) {
|
||||||
|
unsigned long start;
|
||||||
|
int n, i, i2,
|
||||||
|
cx = tft.width() / 2,
|
||||||
|
cy = tft.height() / 2;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
n = min(tft.width(), tft.height());
|
||||||
|
start = micros();
|
||||||
|
for(i=2; i<n; i+=6) {
|
||||||
|
i2 = i / 2;
|
||||||
|
tft.drawRect(cx-i2, cy-i2, i, i, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testFilledRects(uint16_t color1, uint16_t color2) {
|
||||||
|
unsigned long start, t = 0;
|
||||||
|
int n, i, i2,
|
||||||
|
cx = tft.width() / 2 - 1,
|
||||||
|
cy = tft.height() / 2 - 1;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
n = min(tft.width(), tft.height());
|
||||||
|
for(i=n; i>0; i-=6) {
|
||||||
|
i2 = i / 2;
|
||||||
|
start = micros();
|
||||||
|
tft.fillRect(cx-i2, cy-i2, i, i, color1);
|
||||||
|
t += micros() - start;
|
||||||
|
// Outlines are not included in timing results
|
||||||
|
tft.drawRect(cx-i2, cy-i2, i, i, color2);
|
||||||
|
}
|
||||||
|
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testFilledCircles(uint8_t radius, uint16_t color) {
|
||||||
|
unsigned long start;
|
||||||
|
int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
start = micros();
|
||||||
|
for(x=radius; x<w; x+=r2) {
|
||||||
|
for(y=radius; y<h; y+=r2) {
|
||||||
|
tft.fillCircle(x, y, radius, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testCircles(uint8_t radius, uint16_t color) {
|
||||||
|
unsigned long start;
|
||||||
|
int x, y, r2 = radius * 2,
|
||||||
|
w = tft.width() + radius,
|
||||||
|
h = tft.height() + radius;
|
||||||
|
|
||||||
|
// Screen is not cleared for this one -- this is
|
||||||
|
// intentional and does not affect the reported time.
|
||||||
|
start = micros();
|
||||||
|
for(x=0; x<w; x+=r2) {
|
||||||
|
for(y=0; y<h; y+=r2) {
|
||||||
|
tft.drawCircle(x, y, radius, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testTriangles() {
|
||||||
|
unsigned long start;
|
||||||
|
int n, i, cx = tft.width() / 2 - 1,
|
||||||
|
cy = tft.height() / 2 - 1;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
n = min(cx, cy);
|
||||||
|
start = micros();
|
||||||
|
for(i=0; i<n; i+=5) {
|
||||||
|
tft.drawTriangle(
|
||||||
|
cx , cy - i, // peak
|
||||||
|
cx - i, cy + i, // bottom left
|
||||||
|
cx + i, cy + i, // bottom right
|
||||||
|
tft.color565(0, 0, i));
|
||||||
|
}
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testFilledTriangles() {
|
||||||
|
unsigned long start, t = 0;
|
||||||
|
int i, cx = tft.width() / 2 - 1,
|
||||||
|
cy = tft.height() / 2 - 1;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
start = micros();
|
||||||
|
for(i=min(cx,cy); i>10; i-=5) {
|
||||||
|
start = micros();
|
||||||
|
tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
|
||||||
|
tft.color565(0, i, i));
|
||||||
|
t += micros() - start;
|
||||||
|
tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
|
||||||
|
tft.color565(i, i, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testRoundRects() {
|
||||||
|
unsigned long start;
|
||||||
|
int w, i, i2,
|
||||||
|
cx = tft.width() / 2 - 1,
|
||||||
|
cy = tft.height() / 2 - 1;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
w = min(tft.width(), tft.height());
|
||||||
|
start = micros();
|
||||||
|
for(i=0; i<w; i+=6) {
|
||||||
|
i2 = i / 2;
|
||||||
|
tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(i, 0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testFilledRoundRects() {
|
||||||
|
unsigned long start;
|
||||||
|
int i, i2,
|
||||||
|
cx = tft.width() / 2 - 1,
|
||||||
|
cy = tft.height() / 2 - 1;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
start = micros();
|
||||||
|
for(i=min(tft.width(), tft.height()); i>20; i-=6) {
|
||||||
|
i2 = i / 2;
|
||||||
|
tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
|
@ -0,0 +1,427 @@
|
||||||
|
/***************************************************
|
||||||
|
This is our GFX example for the Adafruit ILI9341 Breakout and Shield
|
||||||
|
----> http://www.adafruit.com/products/1651
|
||||||
|
|
||||||
|
Check out the links above for our tutorials and wiring diagrams
|
||||||
|
These displays use SPI to communicate, 4 or 5 pins are required to
|
||||||
|
interface (RST is optional)
|
||||||
|
Adafruit invests time and resources providing this open source code,
|
||||||
|
please support Adafruit and open-source hardware by purchasing
|
||||||
|
products from Adafruit!
|
||||||
|
|
||||||
|
Written by Limor Fried/Ladyada for Adafruit Industries.
|
||||||
|
MIT license, all text above must be included in any redistribution
|
||||||
|
****************************************************/
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <ILI_SdSpi.h>
|
||||||
|
#include <ILI_SdFatConfig.h>
|
||||||
|
#include <ILI9341_due_gText.h>
|
||||||
|
#include <ILI9341_due.h>
|
||||||
|
#include "fonts\Arial_bold_14.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define TFT_DC 10
|
||||||
|
#define TFT_CS 8
|
||||||
|
#define TFT_RST 9
|
||||||
|
|
||||||
|
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
|
||||||
|
ILI9341_due tft = ILI9341_due(TFT_CS, TFT_DC, TFT_RST);
|
||||||
|
|
||||||
|
ILI9341_due_gText t1(&tft);
|
||||||
|
long Screenfill,
|
||||||
|
Text,
|
||||||
|
Lines,
|
||||||
|
HorizVertLines,
|
||||||
|
Rectanglesoutline,
|
||||||
|
Rectanglesfilled,
|
||||||
|
Circlesfilled,
|
||||||
|
Circlesoutline,
|
||||||
|
Trianglesoutline,
|
||||||
|
Trianglesfilled,
|
||||||
|
Roundedrectsoutline,
|
||||||
|
Roundedrectsfilled;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
|
||||||
|
|
||||||
|
Serial.begin(9600);
|
||||||
|
while (!Serial) ; // wait for Arduino Serial Monitor
|
||||||
|
Serial.println("ILI9341 Test!");
|
||||||
|
|
||||||
|
tft.begin();
|
||||||
|
tft.setRotation(iliRotation270);
|
||||||
|
tft.fillScreen(ILI9341_BLUE);
|
||||||
|
t1.defineArea(30, 30, 26, 12, Arial_bold_14);
|
||||||
|
t1.selectFont(Arial_bold_14);
|
||||||
|
t1.setFontLetterSpacing(2);
|
||||||
|
t1.setFontColor(ILI9341_WHITE, ILI9341_BLUE);
|
||||||
|
|
||||||
|
#if SPI_MODE_NORMAL
|
||||||
|
char mode[] = "SPI_MODE_NORMAL";
|
||||||
|
#elif SPI_MODE_EXTENDED
|
||||||
|
char mode[] = "SPI_MODE_EXTENDED";
|
||||||
|
#elif SPI_MODE_DMA
|
||||||
|
char mode[] = "SPI_MODE_DMA";
|
||||||
|
|
||||||
|
#endif
|
||||||
|
t1.drawString(mode, tft.width()/2 - t1.stringWidth(mode) / 2 - 30, 80);
|
||||||
|
|
||||||
|
delay(3000);
|
||||||
|
tft.setRotation(iliRotation0);
|
||||||
|
// read diagnostics (optional but can help debug problems)
|
||||||
|
uint8_t x = tft.readcommand8(ILI9341_RDMODE);
|
||||||
|
Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);
|
||||||
|
x = tft.readcommand8(ILI9341_RDMADCTL);
|
||||||
|
Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);
|
||||||
|
x = tft.readcommand8(ILI9341_RDPIXFMT);
|
||||||
|
Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);
|
||||||
|
x = tft.readcommand8(ILI9341_RDIMGFMT);
|
||||||
|
Serial.print("Image Format: 0x"); Serial.println(x, HEX);
|
||||||
|
x = tft.readcommand8(ILI9341_RDSELFDIAG);
|
||||||
|
Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX);
|
||||||
|
|
||||||
|
Serial.println(F("Benchmark Time (microseconds)"));
|
||||||
|
|
||||||
|
Serial.print(F("Screen fill "));
|
||||||
|
unsigned long start = micros();
|
||||||
|
Serial.println(Screenfill = testFillScreen());
|
||||||
|
// delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Text "));
|
||||||
|
Serial.println(Text = testText());
|
||||||
|
// delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Lines "));
|
||||||
|
Serial.println(Lines = testLines(ILI9341_CYAN));
|
||||||
|
// delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Horiz/Vert Lines "));
|
||||||
|
Serial.println(HorizVertLines = testFastLines(ILI9341_RED, ILI9341_BLUE));
|
||||||
|
// delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Rectangles (outline) "));
|
||||||
|
Serial.println(Rectanglesoutline = testRects(ILI9341_GREEN));
|
||||||
|
// delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Rectangles (filled) "));
|
||||||
|
Serial.println(Rectanglesfilled = testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA));
|
||||||
|
// delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Circles (filled) "));
|
||||||
|
Serial.println(Circlesfilled = testFilledCircles(10, ILI9341_MAGENTA));
|
||||||
|
|
||||||
|
Serial.print(F("Circles (outline) "));
|
||||||
|
Serial.println(Circlesoutline = testCircles(10, ILI9341_WHITE));
|
||||||
|
// delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Triangles (outline) "));
|
||||||
|
Serial.println(Trianglesoutline = testTriangles());
|
||||||
|
// delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Triangles (filled) "));
|
||||||
|
Serial.println(Trianglesfilled = testFilledTriangles());
|
||||||
|
// delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Rounded rects (outline) "));
|
||||||
|
Serial.println(Roundedrectsoutline = testRoundRects());
|
||||||
|
// delay(200);
|
||||||
|
|
||||||
|
Serial.print(F("Rounded rects (filled) "));
|
||||||
|
Serial.println(Roundedrectsfilled = testFilledRoundRects());
|
||||||
|
// delay(200);
|
||||||
|
|
||||||
|
|
||||||
|
Serial.println(F("Done!"));
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLUE);
|
||||||
|
tft.setRotation(iliRotation270);
|
||||||
|
t1.cursorToXY(45, 80);
|
||||||
|
t1.print("Total time: ");
|
||||||
|
t1.print((micros() - start)/1000);
|
||||||
|
t1.print(" ms");
|
||||||
|
|
||||||
|
delay(2000);
|
||||||
|
printStats();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void printStats()
|
||||||
|
{
|
||||||
|
tft.setRotation(iliRotation270);
|
||||||
|
tft.fillScreen(ILI9341_BLUE);
|
||||||
|
t1.cursorTo(0, 0);
|
||||||
|
t1.print("Screen fill "); t1.cursorTo(18); t1.print(Screenfill);
|
||||||
|
t1.cursorTo(0, 1);
|
||||||
|
t1.print("Text "); t1.cursorTo(18); t1.print(Text);
|
||||||
|
t1.cursorTo(0, 2);
|
||||||
|
t1.print("Lines "); t1.cursorTo(18); t1.print(Lines);
|
||||||
|
t1.cursorTo(0, 3);
|
||||||
|
t1.print("Horiz/Vert Lines "); t1.cursorTo(18); t1.print(HorizVertLines);
|
||||||
|
t1.cursorTo(0, 4);
|
||||||
|
t1.print("Rectangles (outline) "); t1.cursorTo(18); t1.print(Rectanglesoutline);
|
||||||
|
t1.cursorTo(0, 5);
|
||||||
|
t1.print("Rectangles (filled) "); t1.cursorTo(18); t1.print(Rectanglesfilled);
|
||||||
|
t1.cursorTo(0, 6);
|
||||||
|
t1.print("Circles (filled) "); t1.cursorTo(18); t1.print(Circlesfilled);
|
||||||
|
t1.cursorTo(0, 7);
|
||||||
|
t1.print("Circles (outline) "); t1.cursorTo(18); t1.print(Circlesoutline);
|
||||||
|
t1.cursorTo(0, 8);
|
||||||
|
t1.print("Triangles (outline) "); t1.cursorTo(18); t1.print(Trianglesoutline);
|
||||||
|
t1.cursorTo(0, 9);
|
||||||
|
t1.print("Triangles (filled) "); t1.cursorTo(18); t1.print(Trianglesfilled);
|
||||||
|
t1.cursorTo(0, 10);
|
||||||
|
t1.print("Rounded rects (outline) "); t1.cursorTo(18); t1.print(Roundedrectsoutline);
|
||||||
|
t1.cursorTo(0, 11);
|
||||||
|
t1.print("Rounded rects (filled) "); t1.cursorTo(18); t1.print(Roundedrectsfilled);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop(void) {
|
||||||
|
/*for(uint8_t rotation=0; rotation<4; rotation++) {
|
||||||
|
tft.setRotation(rotation);
|
||||||
|
testText();
|
||||||
|
delay(1000);
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testFillScreen() {
|
||||||
|
unsigned long start = micros();
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
tft.fillScreen(ILI9341_RED);
|
||||||
|
tft.fillScreen(ILI9341_GREEN);
|
||||||
|
tft.fillScreen(ILI9341_BLUE);
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testText() {
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
unsigned long start = micros();
|
||||||
|
tft.setCursor(0, 0);
|
||||||
|
tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);
|
||||||
|
tft.println("Hello World!");
|
||||||
|
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2);
|
||||||
|
tft.println(1234.56);
|
||||||
|
tft.setTextColor(ILI9341_RED); tft.setTextSize(3);
|
||||||
|
tft.println(0xDEADBEEF, HEX);
|
||||||
|
tft.println();
|
||||||
|
tft.setTextColor(ILI9341_GREEN);
|
||||||
|
tft.setTextSize(5);
|
||||||
|
tft.println("Groop");
|
||||||
|
tft.setTextSize(2);
|
||||||
|
tft.println("I implore thee,");
|
||||||
|
tft.setTextSize(1);
|
||||||
|
tft.println("my foonting turlingdromes.");
|
||||||
|
tft.println("And hooptiously drangle me");
|
||||||
|
tft.println("with crinkly bindlewurdles,");
|
||||||
|
tft.println("Or I will rend thee");
|
||||||
|
tft.println("in the gobberwarts");
|
||||||
|
tft.println("with my blurglecruncheon,");
|
||||||
|
tft.println("see if I don't!");
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testLines(uint16_t color) {
|
||||||
|
unsigned long start, t;
|
||||||
|
int x1, y1, x2, y2,
|
||||||
|
w = tft.width(),
|
||||||
|
h = tft.height();
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
|
||||||
|
x1 = y1 = 0;
|
||||||
|
y2 = h - 1;
|
||||||
|
start = micros();
|
||||||
|
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
x2 = w - 1;
|
||||||
|
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
t = micros() - start; // fillScreen doesn't count against timing
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
|
||||||
|
x1 = w - 1;
|
||||||
|
y1 = 0;
|
||||||
|
y2 = h - 1;
|
||||||
|
start = micros();
|
||||||
|
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
x2 = 0;
|
||||||
|
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
t += micros() - start;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
|
||||||
|
x1 = 0;
|
||||||
|
y1 = h - 1;
|
||||||
|
y2 = 0;
|
||||||
|
start = micros();
|
||||||
|
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
x2 = w - 1;
|
||||||
|
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
t += micros() - start;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
|
||||||
|
x1 = w - 1;
|
||||||
|
y1 = h - 1;
|
||||||
|
y2 = 0;
|
||||||
|
start = micros();
|
||||||
|
for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
x2 = 0;
|
||||||
|
for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testFastLines(uint16_t color1, uint16_t color2) {
|
||||||
|
unsigned long start;
|
||||||
|
int x, y, w = tft.width(), h = tft.height();
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
start = micros();
|
||||||
|
for(y=0; y<h; y+=5) tft.drawFastHLine(0, y, w, color1);
|
||||||
|
for(x=0; x<w; x+=5) tft.drawFastVLine(x, 0, h, color2);
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testRects(uint16_t color) {
|
||||||
|
unsigned long start;
|
||||||
|
int n, i, i2,
|
||||||
|
cx = tft.width() / 2,
|
||||||
|
cy = tft.height() / 2;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
n = min(tft.width(), tft.height());
|
||||||
|
start = micros();
|
||||||
|
for(i=2; i<n; i+=6) {
|
||||||
|
i2 = i / 2;
|
||||||
|
tft.drawRect(cx-i2, cy-i2, i, i, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testFilledRects(uint16_t color1, uint16_t color2) {
|
||||||
|
unsigned long start, t = 0;
|
||||||
|
int n, i, i2,
|
||||||
|
cx = tft.width() / 2 - 1,
|
||||||
|
cy = tft.height() / 2 - 1;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
n = min(tft.width(), tft.height());
|
||||||
|
for(i=n; i>0; i-=6) {
|
||||||
|
i2 = i / 2;
|
||||||
|
start = micros();
|
||||||
|
tft.fillRect(cx-i2, cy-i2, i, i, color1);
|
||||||
|
t += micros() - start;
|
||||||
|
// Outlines are not included in timing results
|
||||||
|
tft.drawRect(cx-i2, cy-i2, i, i, color2);
|
||||||
|
}
|
||||||
|
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testFilledCircles(uint8_t radius, uint16_t color) {
|
||||||
|
unsigned long start;
|
||||||
|
int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
start = micros();
|
||||||
|
for(x=radius; x<w; x+=r2) {
|
||||||
|
for(y=radius; y<h; y+=r2) {
|
||||||
|
tft.fillCircle(x, y, radius, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testCircles(uint8_t radius, uint16_t color) {
|
||||||
|
unsigned long start;
|
||||||
|
int x, y, r2 = radius * 2,
|
||||||
|
w = tft.width() + radius,
|
||||||
|
h = tft.height() + radius;
|
||||||
|
|
||||||
|
// Screen is not cleared for this one -- this is
|
||||||
|
// intentional and does not affect the reported time.
|
||||||
|
start = micros();
|
||||||
|
for(x=0; x<w; x+=r2) {
|
||||||
|
for(y=0; y<h; y+=r2) {
|
||||||
|
tft.drawCircle(x, y, radius, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testTriangles() {
|
||||||
|
unsigned long start;
|
||||||
|
int n, i, cx = tft.width() / 2 - 1,
|
||||||
|
cy = tft.height() / 2 - 1;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
n = min(cx, cy);
|
||||||
|
start = micros();
|
||||||
|
for(i=0; i<n; i+=5) {
|
||||||
|
tft.drawTriangle(
|
||||||
|
cx , cy - i, // peak
|
||||||
|
cx - i, cy + i, // bottom left
|
||||||
|
cx + i, cy + i, // bottom right
|
||||||
|
tft.color565(0, 0, i));
|
||||||
|
}
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testFilledTriangles() {
|
||||||
|
unsigned long start, t = 0;
|
||||||
|
int i, cx = tft.width() / 2 - 1,
|
||||||
|
cy = tft.height() / 2 - 1;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
start = micros();
|
||||||
|
for(i=min(cx,cy); i>10; i-=5) {
|
||||||
|
start = micros();
|
||||||
|
tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
|
||||||
|
tft.color565(0, i, i));
|
||||||
|
t += micros() - start;
|
||||||
|
tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
|
||||||
|
tft.color565(i, i, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testRoundRects() {
|
||||||
|
unsigned long start;
|
||||||
|
int w, i, i2,
|
||||||
|
cx = tft.width() / 2 - 1,
|
||||||
|
cy = tft.height() / 2 - 1;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
w = min(tft.width(), tft.height());
|
||||||
|
start = micros();
|
||||||
|
for(i=0; i<w; i+=6) {
|
||||||
|
i2 = i / 2;
|
||||||
|
tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(i, 0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long testFilledRoundRects() {
|
||||||
|
unsigned long start;
|
||||||
|
int i, i2,
|
||||||
|
cx = tft.width() / 2 - 1,
|
||||||
|
cy = tft.height() / 2 - 1;
|
||||||
|
|
||||||
|
tft.fillScreen(ILI9341_BLACK);
|
||||||
|
start = micros();
|
||||||
|
|
||||||
|
for(i=min(tft.width(), tft.height()); i>20; i-=6) {
|
||||||
|
i2 = i / 2;
|
||||||
|
tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
return micros() - start;
|
||||||
|
}
|
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 225 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 225 KiB |
|
@ -0,0 +1,320 @@
|
||||||
|
/*
|
||||||
|
This sketch is demonstrating loading images from an SD card.
|
||||||
|
To run this sketch, copy images from the images folder into the root of an SD card
|
||||||
|
(either those with .bmp extension or those with .565 extension (those will load faster)).
|
||||||
|
Modify the extension of the files in loop() depending on which files you copied onto SD.
|
||||||
|
|
||||||
|
Depending on the length of the cables between Arduino and SD card pins you might want
|
||||||
|
to change SD_SPI_SPEED to either SPI_FULL_SPEED (if you have a shield directly connected to
|
||||||
|
Arduino pins) or SPI_QUARTER_SPEED if you have long cables. SPI_HALF_SPEED was the maximum
|
||||||
|
I could use as I had the display with SD slot on a breadboard.
|
||||||
|
Obviously you have to modify CS, DC pins for TFT and SD appropriately.
|
||||||
|
|
||||||
|
You can generate your own .565 images from 24bit BMPs by using BMP24toILI565 converter which
|
||||||
|
you can find in the Tools folder on GitHub:
|
||||||
|
https://github.com/marekburiak/ILI9341_due/tree/master/tools
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <SdFat.h>
|
||||||
|
#include <SdFatUtil.h>
|
||||||
|
#include <ILI_SdSpi.h>
|
||||||
|
#include <ILI_SdFatConfig.h>
|
||||||
|
#include <ILI9341_due_gText.h>
|
||||||
|
#include <ILI9341_due.h>
|
||||||
|
|
||||||
|
// CS and DC for the LCD
|
||||||
|
#define LCD_CS 10 // Chip Select for LCD
|
||||||
|
#define LCD_DC 9 // Command/Data for LCD
|
||||||
|
|
||||||
|
#define SD_CS 7 // Chip Select for SD card
|
||||||
|
|
||||||
|
#define BUFFPIXELCOUNT 320 // size of the buffer in pixels
|
||||||
|
#define SD_SPI_SPEED SPI_HALF_SPEED // SD card SPI speed, try SPI_FULL_SPEED
|
||||||
|
|
||||||
|
SdFat sd; // set filesystem
|
||||||
|
SdFile bmpFile; // set filesystem
|
||||||
|
//ArduinoOutStream cout(Serial);
|
||||||
|
|
||||||
|
ILI9341_due tft(LCD_CS, LCD_DC);
|
||||||
|
|
||||||
|
// store error strings in flash to save RAM
|
||||||
|
#define error(s) sd.errorHalt_P(PSTR(s))
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
Serial.begin(9600);
|
||||||
|
|
||||||
|
tft.begin();
|
||||||
|
tft.setRotation(iliRotation270); // landscape
|
||||||
|
progmemPrint(PSTR("Initializing SD card..."));
|
||||||
|
|
||||||
|
if (!sd.begin(SD_CS, SD_SPI_SPEED)){
|
||||||
|
progmemPrintln(PSTR("failed!"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
progmemPrintln(PSTR("OK!"));
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
if (tft.getRotation() == iliRotation90 || tft.getRotation() == iliRotation270){
|
||||||
|
bmpDraw("giraffe.565", 0, 0);
|
||||||
|
delay(2000);
|
||||||
|
bmpDraw("SOLDHO~1.565", 0, 0);
|
||||||
|
delay(2000);
|
||||||
|
bmpDraw("GLOOMY~1.565", 0, 0);
|
||||||
|
delay(2000);
|
||||||
|
bmpDraw("MOTIVA~1.565", 0, 0);
|
||||||
|
delay(2000);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bmpDraw("smokeP.565", 0, 0);
|
||||||
|
delay(2000);
|
||||||
|
bmpDraw("origP.565", 0, 0);
|
||||||
|
delay(2000);
|
||||||
|
bmpDraw("radioP.565", 0, 0);
|
||||||
|
delay(2000);
|
||||||
|
bmpDraw("stopP.565", 0, 0);
|
||||||
|
delay(2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// This function opens a Windows Bitmap (BMP) file and
|
||||||
|
// displays it at the given coordinates. It's sped up
|
||||||
|
// by reading many pixels worth of data at a time
|
||||||
|
// (rather than pixel by pixel). Increasing the buffer
|
||||||
|
// size takes more of the Arduino's RAM but
|
||||||
|
// makes loading a little faster.
|
||||||
|
|
||||||
|
void bmpDraw(char* filename, int x, int y) {
|
||||||
|
|
||||||
|
SdFile bmpFile;
|
||||||
|
int bmpWidth, bmpHeight; // W+H in pixels
|
||||||
|
uint8_t bmpDepth; // Bit depth (currently must be 24)
|
||||||
|
uint8_t headerSize;
|
||||||
|
uint32_t bmpImageoffset; // Start of image data in file
|
||||||
|
uint32_t rowSize; // Not always = bmpWidth; may have padding
|
||||||
|
uint32_t fileSize;
|
||||||
|
boolean goodBmp = false; // Set to true on valid header parse
|
||||||
|
boolean flip = true; // BMP is stored bottom-to-top
|
||||||
|
uint16_t w, h, row, col;
|
||||||
|
uint8_t r, g, b;
|
||||||
|
uint32_t pos = 0, startTime;
|
||||||
|
|
||||||
|
if ((x >= tft.width()) || (y >= tft.height())) return;
|
||||||
|
|
||||||
|
progmemPrint(PSTR("Loading image '"));
|
||||||
|
Serial.print(filename);
|
||||||
|
Serial.println('\'');
|
||||||
|
startTime = millis();
|
||||||
|
// Open requested file on SD card
|
||||||
|
if (!bmpFile.open(filename, O_READ)) {
|
||||||
|
Serial.println("File open failed.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//Serial.println("File opened.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse BMP header
|
||||||
|
if (read16(bmpFile) == 0x4D42) { // BMP signature
|
||||||
|
fileSize = read32(bmpFile);
|
||||||
|
//progmemPrint(PSTR("File size: ")); Serial.println(fileSize);
|
||||||
|
(void)read32(bmpFile); // Read & ignore creator bytes
|
||||||
|
bmpImageoffset = read32(bmpFile); // Start of image data
|
||||||
|
//progmemPrint(PSTR("Image Offset: ")); Serial.println(bmpImageoffset, DEC);
|
||||||
|
// Read DIB header
|
||||||
|
headerSize = read32(bmpFile);
|
||||||
|
//progmemPrint(PSTR("Header size: ")); Serial.println(headerSize);
|
||||||
|
bmpWidth = read32(bmpFile);
|
||||||
|
bmpHeight = read32(bmpFile);
|
||||||
|
if (read16(bmpFile) == 1) { // # planes -- must be '1'
|
||||||
|
bmpDepth = read16(bmpFile); // bits per pixel
|
||||||
|
//progmemPrint(PSTR("Bit Depth: ")); Serial.println(bmpDepth);
|
||||||
|
if (read32(bmpFile) == 0) // 0 = uncompressed
|
||||||
|
{
|
||||||
|
//progmemPrint(PSTR("Image size: "));
|
||||||
|
//Serial.print(bmpWidth);
|
||||||
|
//Serial.print('x');
|
||||||
|
//Serial.println(bmpHeight);
|
||||||
|
|
||||||
|
// If bmpHeight is negative, image is in top-down order.
|
||||||
|
// This is not canon but has been observed in the wild.
|
||||||
|
if (bmpHeight < 0) {
|
||||||
|
bmpHeight = -bmpHeight;
|
||||||
|
flip = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Crop area to be loaded
|
||||||
|
w = bmpWidth;
|
||||||
|
h = bmpHeight;
|
||||||
|
if ((x + w - 1) >= tft.width()) w = tft.width() - x;
|
||||||
|
if ((y + h - 1) >= tft.height()) h = tft.height() - y;
|
||||||
|
|
||||||
|
// Set TFT address window to clipped image bounds
|
||||||
|
tft.setAddrWindow(x, y, x + w - 1, y + h - 1);
|
||||||
|
|
||||||
|
if (bmpDepth == 16) //565 format
|
||||||
|
{
|
||||||
|
goodBmp = true; // Supported BMP format -- proceed!
|
||||||
|
|
||||||
|
uint8_t buffer[2 * BUFFPIXELCOUNT]; // pixel buffer (contains already formatted data for ILI9341 display)
|
||||||
|
|
||||||
|
bmpFile.seekSet(54); //skip header
|
||||||
|
uint32_t totalPixels = bmpWidth*bmpHeight;
|
||||||
|
uint16_t numFullBufferRuns = totalPixels / BUFFPIXELCOUNT;
|
||||||
|
for (uint32_t p = 0; p < numFullBufferRuns; p++) {
|
||||||
|
// read pixels into the buffer
|
||||||
|
bmpFile.read(buffer, 2 * BUFFPIXELCOUNT);
|
||||||
|
// push them to the diplay
|
||||||
|
tft.pushColors565(buffer, 0, 2 * BUFFPIXELCOUNT);
|
||||||
|
}
|
||||||
|
|
||||||
|
// render any remaining pixels that did not fully fit the buffer
|
||||||
|
uint32_t remainingPixels = totalPixels % BUFFPIXELCOUNT;
|
||||||
|
if (remainingPixels > 0)
|
||||||
|
{
|
||||||
|
bmpFile.read(buffer, 2 * remainingPixels);
|
||||||
|
tft.pushColors565(buffer, 0, 2 * remainingPixels);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (bmpDepth == 24) // standard 24bit bmp
|
||||||
|
{
|
||||||
|
goodBmp = true; // Supported BMP format -- proceed!
|
||||||
|
uint16_t bufferSize = min(w, BUFFPIXELCOUNT);
|
||||||
|
uint8_t sdbuffer[3 * bufferSize]; // pixel in buffer (R+G+B per pixel)
|
||||||
|
uint16_t lcdbuffer[bufferSize]; // pixel out buffer (16-bit per pixel)
|
||||||
|
|
||||||
|
// BMP rows are padded (if needed) to 4-byte boundary
|
||||||
|
rowSize = (bmpWidth * 3 + 3) & ~3;
|
||||||
|
|
||||||
|
for (row = 0; row < h; row++) { // For each scanline...
|
||||||
|
// Seek to start of scan line. It might seem labor-
|
||||||
|
// intensive to be doing this on every line, but this
|
||||||
|
// method covers a lot of gritty details like cropping
|
||||||
|
// and scanline padding. Also, the seek only takes
|
||||||
|
// place if the file position actually needs to change
|
||||||
|
// (avoids a lot of cluster math in SD library).
|
||||||
|
|
||||||
|
if (flip) // Bitmap is stored bottom-to-top order (normal BMP)
|
||||||
|
pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize;
|
||||||
|
else // Bitmap is stored top-to-bottom
|
||||||
|
pos = bmpImageoffset + row * rowSize;
|
||||||
|
if (bmpFile.curPosition() != pos) { // Need seek?
|
||||||
|
bmpFile.seekSet(pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (col = 0; col < w; col += bufferSize)
|
||||||
|
{
|
||||||
|
// read pixels into the buffer
|
||||||
|
bmpFile.read(sdbuffer, 3 * bufferSize);
|
||||||
|
|
||||||
|
// convert color
|
||||||
|
for (int p = 0; p < bufferSize; p++)
|
||||||
|
{
|
||||||
|
b = sdbuffer[3 * p];
|
||||||
|
g = sdbuffer[3 * p + 1];
|
||||||
|
r = sdbuffer[3 * p + 2];
|
||||||
|
lcdbuffer[p] = tft.color565(r, g, b);
|
||||||
|
}
|
||||||
|
// push buffer to TFT
|
||||||
|
tft.pushColors(lcdbuffer, 0, bufferSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
// render any remaining pixels that did not fully fit the buffer
|
||||||
|
uint16_t remainingPixels = w % bufferSize;
|
||||||
|
if (remainingPixels > 0)
|
||||||
|
{
|
||||||
|
bmpFile.read(sdbuffer, 3 * remainingPixels);
|
||||||
|
|
||||||
|
for (int p = 0; p < remainingPixels; p++)
|
||||||
|
{
|
||||||
|
b = sdbuffer[3 * p];
|
||||||
|
g = sdbuffer[3 * p + 1];
|
||||||
|
r = sdbuffer[3 * p + 2];
|
||||||
|
lcdbuffer[p] = tft.color565(r, g, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
tft.pushColors(lcdbuffer, 0, remainingPixels);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
progmemPrint(PSTR("Unsupported Bit Depth."));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (goodBmp)
|
||||||
|
{
|
||||||
|
progmemPrint(PSTR("Loaded in "));
|
||||||
|
Serial.print(millis() - startTime);
|
||||||
|
Serial.println(" ms");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bmpFile.close();
|
||||||
|
if (!goodBmp) progmemPrintln(PSTR("BMP format not recognized."));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// These read 16- and 32-bit types from the SD card file.
|
||||||
|
// BMP data is stored little-endian, Arduino is little-endian too.
|
||||||
|
// May need to reverse subscript order if porting elsewhere.
|
||||||
|
|
||||||
|
uint16_t read16(SdFile& f) {
|
||||||
|
uint16_t result;
|
||||||
|
((uint8_t *)&result)[0] = f.read(); // LSB
|
||||||
|
((uint8_t *)&result)[1] = f.read(); // MSB
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t read32(SdFile& f) {
|
||||||
|
uint32_t result;
|
||||||
|
((uint8_t *)&result)[0] = f.read(); // LSB
|
||||||
|
((uint8_t *)&result)[1] = f.read();
|
||||||
|
((uint8_t *)&result)[2] = f.read();
|
||||||
|
((uint8_t *)&result)[3] = f.read(); // MSB
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy string from flash to serial port
|
||||||
|
// Source string MUST be inside a PSTR() declaration!
|
||||||
|
void progmemPrint(const char *str) {
|
||||||
|
char c;
|
||||||
|
while (c = pgm_read_byte(str++)) Serial.print(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Same as above, with trailing newline
|
||||||
|
void progmemPrintln(const char *str) {
|
||||||
|
progmemPrint(str);
|
||||||
|
Serial.println();
|
||||||
|
}
|
||||||
|
|
||||||
|
//void PrintHex8(uint8_t *data, uint8_t length) // prints 8-bit data in hex
|
||||||
|
//{
|
||||||
|
// char tmp[length*5+1];
|
||||||
|
// byte first;
|
||||||
|
// byte second;
|
||||||
|
// for (int i=0; i<length; i++) {
|
||||||
|
// first = (data[i] >> 4) & 0x0f;
|
||||||
|
// second = data[i] & 0x0f;
|
||||||
|
// // base for converting single digit numbers to ASCII is 48
|
||||||
|
// // base for 10-16 to become upper-case characters A-F is 55
|
||||||
|
// // note: difference is 7
|
||||||
|
// tmp[i*5] = 48; // add leading 0
|
||||||
|
// tmp[i*5+1] = 120; // add leading x
|
||||||
|
// tmp[i*5+2] = first+48;
|
||||||
|
// tmp[i*5+3] = second+48;
|
||||||
|
// tmp[i*5+4] = 32; // add trailing space
|
||||||
|
// if (first > 9) tmp[i*5+2] += 7;
|
||||||
|
// if (second > 9) tmp[i*5+3] += 7;
|
||||||
|
// }
|
||||||
|
// tmp[length*5] = 0;
|
||||||
|
// Serial.print(tmp);
|
||||||
|
//}
|
|
@ -0,0 +1,341 @@
|
||||||
|
// UTFT Demo ported to ILI9341_due library by TFTLCDCyg
|
||||||
|
|
||||||
|
// Based on Demo 320x240 Serial of UTFT library
|
||||||
|
// UTFT-web: http://www.henningkarlsen.com/electronics
|
||||||
|
|
||||||
|
#include <SPI.h>
|
||||||
|
|
||||||
|
// ILI9341_due NEW lib by Marek Buriak http://marekburiak.github.io/ILI9341_due/
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <ILI_SdSpi.h>
|
||||||
|
#include <ILI_SdFatConfig.h>
|
||||||
|
#include <ILI9341_due_gText.h>
|
||||||
|
#include <ILI9341_due.h>
|
||||||
|
#include "fonts\Arial14.h"
|
||||||
|
//#include "Streaming.h"
|
||||||
|
// For the Adafruit shield, these are the default.
|
||||||
|
|
||||||
|
#define TFT_DC 10
|
||||||
|
#define TFT_CS 8
|
||||||
|
#define rst 9
|
||||||
|
|
||||||
|
// Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
|
||||||
|
ILI9341_due tft = ILI9341_due(TFT_CS, TFT_DC, rst);
|
||||||
|
|
||||||
|
ILI9341_due_gText t1(&tft);
|
||||||
|
char textBuff[20];
|
||||||
|
|
||||||
|
// Color set
|
||||||
|
#define BLACK 0x0000
|
||||||
|
#define RED 0xF800
|
||||||
|
#define GREEN 0x07E0
|
||||||
|
//#define BLUE 0x001F
|
||||||
|
#define BLUE 0x102E
|
||||||
|
#define CYAN 0x07FF
|
||||||
|
#define MAGENTA 0xF81F
|
||||||
|
#define YELLOW 0xFFE0
|
||||||
|
#define ORANGE 0xFD20
|
||||||
|
#define GREENYELLOW 0xAFE5
|
||||||
|
#define DARKGREEN 0x03E0
|
||||||
|
#define WHITE 0xFFFF
|
||||||
|
|
||||||
|
uint16_t color;
|
||||||
|
uint16_t colorFONDO=BLACK;
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
delay (5000);
|
||||||
|
randomSeed(analogRead(0));
|
||||||
|
|
||||||
|
// TFT 2.2" SPI
|
||||||
|
Serial.begin(115200);
|
||||||
|
tft.begin();
|
||||||
|
tft.setRotation(iliRotation270);
|
||||||
|
tft.fillScreen(colorFONDO);
|
||||||
|
t1.defineArea(0, 0, 320, 240);
|
||||||
|
t1.selectFont(Arial14);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ILI9341duenodelay()
|
||||||
|
{
|
||||||
|
int buf[318];
|
||||||
|
int x, x2;
|
||||||
|
int y, y2;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
tft.fillScreen(colorFONDO);
|
||||||
|
|
||||||
|
int timeinit= millis();
|
||||||
|
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
tft.fillRect(0, 0, 320, 15,RED);
|
||||||
|
t1.setFontColor(WHITE, RED);
|
||||||
|
t1.drawString("* ILI9341_due UTFT 240x320 Demo *", 47,0);
|
||||||
|
tft.fillRect(0, 226, 320, 240,tft.color565(64, 64, 64));
|
||||||
|
t1.setFontColor(YELLOW, tft.color565(64, 64, 64));
|
||||||
|
t1.drawString("<http://electronics.henningkarlsen.com>", gTextAlignBottomCenter,227);
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
tft.drawRect(0, 15, 320, 211,BLUE);
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
// Draw crosshairs
|
||||||
|
tft.drawLine(159, 15, 159, 224,BLUE);
|
||||||
|
tft.drawLine(1, 119, 318, 119,BLUE);
|
||||||
|
for (int i=9; i<310; i+=10)
|
||||||
|
tft.drawLine(i, 117, i, 121,BLUE);
|
||||||
|
for (int i=19; i<220; i+=10)
|
||||||
|
tft.drawLine(157, i, 161, i, BLUE);
|
||||||
|
// Draw sin-, cos- and tan-lines
|
||||||
|
t1.setFontColor(CYAN, BLACK);
|
||||||
|
t1.drawString("Sin", 5,17);
|
||||||
|
for (int i=1; i<318; i++)
|
||||||
|
{
|
||||||
|
tft.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95),CYAN);
|
||||||
|
}
|
||||||
|
t1.setFontColor(RED, BLACK);
|
||||||
|
t1.drawString("Cos", 5,29);
|
||||||
|
for (int i=1; i<318; i++)
|
||||||
|
{
|
||||||
|
tft.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95),RED);
|
||||||
|
}
|
||||||
|
t1.setFontColor(YELLOW, BLACK);
|
||||||
|
t1.drawString("Tan", 5,41);
|
||||||
|
for (int i=1; i<318; i++)
|
||||||
|
{
|
||||||
|
tft.drawPixel(i,119+(tan(((i*1.13)*3.14)/180)),YELLOW);
|
||||||
|
}
|
||||||
|
// delay(2000);
|
||||||
|
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
tft.fillRect(1,16,318,209,BLACK);
|
||||||
|
tft.drawLine(159, 16, 159, 224,BLUE);
|
||||||
|
tft.drawLine(1, 119, 318, 119,BLUE);
|
||||||
|
|
||||||
|
// Draw a moving sinewave
|
||||||
|
x=1;
|
||||||
|
for (int i=1; i<(318*20); i++)
|
||||||
|
{
|
||||||
|
x++;
|
||||||
|
if (x==319)
|
||||||
|
x=1;
|
||||||
|
if (i>319)
|
||||||
|
{
|
||||||
|
if ((x==159)||(buf[x-1]==119))
|
||||||
|
color = BLUE;
|
||||||
|
else
|
||||||
|
color = BLACK;
|
||||||
|
tft.drawPixel(x,buf[x-1],color);
|
||||||
|
}
|
||||||
|
y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100)));
|
||||||
|
tft.drawPixel(x,y,CYAN);
|
||||||
|
buf[x-1]=y;
|
||||||
|
}
|
||||||
|
// delay(2000);
|
||||||
|
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
tft.fillRect(1,16,318,209,BLACK);
|
||||||
|
|
||||||
|
// Draw some filled rectangles
|
||||||
|
for (int i=1; i<6; i++)
|
||||||
|
{
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
color = MAGENTA;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
color = RED;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
color = GREEN;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
color = BLUE;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
color = YELLOW;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tft.fillRect(70+(i*20), 30+(i*20), 60, 60,color);
|
||||||
|
}
|
||||||
|
// delay(2000);
|
||||||
|
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
tft.fillRect(1,16,318,209,BLACK);
|
||||||
|
|
||||||
|
// Draw some filled, rounded rectangles
|
||||||
|
for (int i=1; i<6; i++)
|
||||||
|
{
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
color = MAGENTA;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
color = RED;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
color = GREEN;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
color = BLUE;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
color = YELLOW;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tft.fillRoundRect(190-(i*20), 30+(i*20), 60, 60,3,color);
|
||||||
|
}
|
||||||
|
// delay(2000);
|
||||||
|
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
tft.fillRect(1,16,318,209,BLACK);
|
||||||
|
|
||||||
|
// Draw some filled circles
|
||||||
|
for (int i=1; i<6; i++)
|
||||||
|
{
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
color = MAGENTA;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
color = RED;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
color = GREEN;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
color = BLUE;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
color = YELLOW;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tft.fillCircle(100+(i*20),60+(i*20), 30, color);
|
||||||
|
}
|
||||||
|
// delay(2000);
|
||||||
|
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
tft.fillRect(1,16,318,209,BLACK);
|
||||||
|
|
||||||
|
// Draw some lines in a pattern
|
||||||
|
for (int i=17; i<222; i+=5)
|
||||||
|
{
|
||||||
|
tft.drawLine(1, i, (i*1.44)-10, 224, RED);
|
||||||
|
}
|
||||||
|
for (int i=222; i>17; i-=5)
|
||||||
|
{
|
||||||
|
tft.drawLine(318, i, (i*1.44)-11, 15,RED);
|
||||||
|
}
|
||||||
|
for (int i=222; i>17; i-=5)
|
||||||
|
{
|
||||||
|
tft.drawLine(1, i, 331-(i*1.44), 15, CYAN);
|
||||||
|
}
|
||||||
|
for (int i=17; i<222; i+=5)
|
||||||
|
{
|
||||||
|
tft.drawLine(318, i, 330-(i*1.44), 223, CYAN);
|
||||||
|
}
|
||||||
|
// delay(2000);
|
||||||
|
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
tft.fillRect(1,16,318,209,BLACK);
|
||||||
|
|
||||||
|
// Draw some random circles
|
||||||
|
for (int i=0; i<100; i++)
|
||||||
|
{
|
||||||
|
color = tft.color565(random(255), random(255), random(255));
|
||||||
|
x=32+random(256);
|
||||||
|
y=45+random(146);
|
||||||
|
r=random(30);
|
||||||
|
tft.drawCircle(x, y, r, color);
|
||||||
|
}
|
||||||
|
// delay(2000);
|
||||||
|
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
tft.fillRect(1,16,318,209,BLACK);
|
||||||
|
// Draw some random rectangles
|
||||||
|
for (int i=0; i<100; i++)
|
||||||
|
{
|
||||||
|
color = tft.color565(random(255), random(255), random(255));
|
||||||
|
x=2 + random(165);
|
||||||
|
y=16+ random(100);
|
||||||
|
x2=random(165);
|
||||||
|
y2=random(115);
|
||||||
|
tft.drawRect(x, y, x2, y2, color);
|
||||||
|
}
|
||||||
|
// delay(2000);
|
||||||
|
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
tft.fillRect(1,16,318,209,BLACK);
|
||||||
|
// Draw some random rounded rectangles
|
||||||
|
for (int i=0; i<100; i++)
|
||||||
|
{
|
||||||
|
color = tft.color565(random(255), random(255), random(255));
|
||||||
|
x=2+random(165);
|
||||||
|
y=16+random(100);
|
||||||
|
x2=random(165);
|
||||||
|
y2=random(115);
|
||||||
|
tft.drawRoundRect(x, y, x2, y2,3,color);
|
||||||
|
|
||||||
|
}
|
||||||
|
// delay(2000);
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
tft.fillRect(1,16,318,209,BLACK);
|
||||||
|
|
||||||
|
for (int i=0; i<100; i++)
|
||||||
|
{
|
||||||
|
color = tft.color565(random(255), random(255), random(255));
|
||||||
|
x=2+random(316);
|
||||||
|
y=16+random(209);
|
||||||
|
x2=2+random(316);
|
||||||
|
y2=16+random(209);
|
||||||
|
tft.drawLine(x, y, x2, y2, color);
|
||||||
|
}
|
||||||
|
//delay(2000);
|
||||||
|
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
tft.fillRect(1,16,318,209,BLACK);
|
||||||
|
|
||||||
|
for (int i=0; i<10000; i++)
|
||||||
|
{
|
||||||
|
color = tft.color565(random(255), random(255), random(255));
|
||||||
|
tft.drawPixel(2+random(316), 16+random(209), color);
|
||||||
|
}
|
||||||
|
int timetest = millis() -timeinit;
|
||||||
|
//delay(2000);
|
||||||
|
|
||||||
|
|
||||||
|
//ILI9341due NEW
|
||||||
|
tft.fillRect(0,0,320,240,BLUE);
|
||||||
|
tft.fillRoundRect(80, 70, 159, 99,3,RED);
|
||||||
|
t1.setFontColor(WHITE, RED);
|
||||||
|
t1.drawString("That's it!", 130,93);
|
||||||
|
t1.drawString("Restarting in a", 117, 119);
|
||||||
|
t1.drawString("few seconds...", 117, 132);
|
||||||
|
|
||||||
|
t1.setFontColor(WHITE, BLUE);
|
||||||
|
t1.drawString("Runtime: (msecs)", 112, 210);
|
||||||
|
|
||||||
|
sprintf(textBuff, "%d", timetest);
|
||||||
|
t1.drawString(textBuff, 146, 225);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
ILI9341duenodelay();
|
||||||
|
delay(5000);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,173 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Arial_14
|
||||||
|
*
|
||||||
|
* created with FontCreator
|
||||||
|
* written by F. Maximilian Thiele
|
||||||
|
*
|
||||||
|
* http://www.apetech.de/fontCreator
|
||||||
|
* me@apetech.de
|
||||||
|
*
|
||||||
|
* File Name : Arial14.h
|
||||||
|
* Date : 02.05.2008
|
||||||
|
* Font size in bytes : 7788
|
||||||
|
* Font width : 10
|
||||||
|
* Font height : 14
|
||||||
|
* Font first char : 32
|
||||||
|
* Font last char : 128
|
||||||
|
* Font used chars : 96
|
||||||
|
*
|
||||||
|
* The font data are defined as
|
||||||
|
*
|
||||||
|
* struct _FONT_ {
|
||||||
|
* uint16_t font_Size_in_Bytes_over_all_included_Size_it_self;
|
||||||
|
* uint8_t font_Width_in_Pixel_for_fixed_drawing;
|
||||||
|
* uint8_t font_Height_in_Pixel_for_all_characters;
|
||||||
|
* unit8_t font_First_Char;
|
||||||
|
* uint8_t font_Char_Count;
|
||||||
|
*
|
||||||
|
* uint8_t font_Char_Widths[font_Last_Char - font_First_Char +1];
|
||||||
|
* // for each character the separate width in pixels,
|
||||||
|
* // characters < 128 have an implicit virtual right empty row
|
||||||
|
*
|
||||||
|
* uint8_t font_data[];
|
||||||
|
* // bit field of all characters
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
#ifndef ARIAL_14_H
|
||||||
|
#define ARIAL_14_H
|
||||||
|
|
||||||
|
#define ARIAL_14_WIDTH 10
|
||||||
|
#define ARIAL_14_HEIGHT 14
|
||||||
|
|
||||||
|
/*
|
||||||
|
* added to allow fontname to match header file name.
|
||||||
|
* as well as keep the old name for backward compability
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define Arial14 Arial_14
|
||||||
|
|
||||||
|
static const uint8_t Arial_14[] PROGMEM = {
|
||||||
|
0x1E, 0x6C, // size
|
||||||
|
0x0A, // width
|
||||||
|
0x0E, // height
|
||||||
|
0x20, // first char
|
||||||
|
0x60, // char count
|
||||||
|
|
||||||
|
// char widths
|
||||||
|
0x00, 0x01, 0x03, 0x08, 0x07, 0x0A, 0x08, 0x01, 0x03, 0x03,
|
||||||
|
0x05, 0x07, 0x01, 0x04, 0x01, 0x04, 0x06, 0x03, 0x06, 0x06,
|
||||||
|
0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01, 0x01, 0x06, 0x06,
|
||||||
|
0x06, 0x06, 0x0D, 0x09, 0x07, 0x08, 0x08, 0x07, 0x07, 0x09,
|
||||||
|
0x07, 0x01, 0x05, 0x08, 0x07, 0x09, 0x07, 0x09, 0x07, 0x09,
|
||||||
|
0x08, 0x07, 0x07, 0x07, 0x09, 0x0D, 0x08, 0x09, 0x08, 0x02,
|
||||||
|
0x04, 0x02, 0x05, 0x08, 0x02, 0x06, 0x06, 0x05, 0x06, 0x06,
|
||||||
|
0x04, 0x06, 0x06, 0x01, 0x02, 0x06, 0x01, 0x09, 0x06, 0x06,
|
||||||
|
0x06, 0x06, 0x04, 0x05, 0x04, 0x06, 0x07, 0x09, 0x06, 0x07,
|
||||||
|
0x06, 0x03, 0x01, 0x03, 0x07, 0x07,
|
||||||
|
|
||||||
|
// font data
|
||||||
|
0xFE, 0x14, // 33
|
||||||
|
0x1E, 0x00, 0x1E, 0x00, 0x00, 0x00, // 34
|
||||||
|
0x90, 0x90, 0xF8, 0x96, 0x90, 0xF8, 0x96, 0x90, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, // 35
|
||||||
|
0x18, 0x24, 0x22, 0xFF, 0x42, 0x42, 0x84, 0x08, 0x10, 0x10, 0x3C, 0x10, 0x08, 0x04, // 36
|
||||||
|
0x1C, 0x22, 0x22, 0x1C, 0xC0, 0x30, 0x8C, 0x42, 0x40, 0x80, 0x00, 0x00, 0x10, 0x0C, 0x00, 0x00, 0x0C, 0x10, 0x10, 0x0C, // 37
|
||||||
|
0x80, 0x5C, 0x22, 0x62, 0x92, 0x0C, 0x80, 0x00, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x0C, 0x08, 0x10, // 38
|
||||||
|
0x1E, 0x00, // 39
|
||||||
|
0xF0, 0x0C, 0x02, 0x1C, 0x60, 0x80, // 40
|
||||||
|
0x02, 0x0C, 0xF0, 0x80, 0x60, 0x1C, // 41
|
||||||
|
0x04, 0x14, 0x0E, 0x14, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // 42
|
||||||
|
0x40, 0x40, 0x40, 0xF8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, // 43
|
||||||
|
0x00, 0x70, // 44
|
||||||
|
0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, // 45
|
||||||
|
0x00, 0x10, // 46
|
||||||
|
0x00, 0xC0, 0x38, 0x06, 0x18, 0x04, 0x00, 0x00, // 47
|
||||||
|
0xFC, 0x02, 0x02, 0x02, 0x02, 0xFC, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x0C, // 48
|
||||||
|
0x08, 0x04, 0xFE, 0x00, 0x00, 0x1C, // 49
|
||||||
|
0x0C, 0x02, 0x02, 0x82, 0x42, 0x3C, 0x10, 0x18, 0x14, 0x10, 0x10, 0x10, // 50
|
||||||
|
0x0C, 0x02, 0x22, 0x22, 0x22, 0xDC, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x0C, // 51
|
||||||
|
0x80, 0x40, 0x30, 0x08, 0x04, 0xFE, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x1C, 0x04, // 52
|
||||||
|
0x38, 0x16, 0x12, 0x12, 0x12, 0xE2, 0x0C, 0x10, 0x10, 0x10, 0x18, 0x04, // 53
|
||||||
|
0xF8, 0x44, 0x22, 0x22, 0x22, 0xC4, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x0C, // 54
|
||||||
|
0x02, 0x02, 0x02, 0xE2, 0x1A, 0x06, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, // 55
|
||||||
|
0xDC, 0x22, 0x22, 0x22, 0x22, 0xDC, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x0C, // 56
|
||||||
|
0x3C, 0x42, 0x42, 0x42, 0x22, 0xFC, 0x08, 0x10, 0x10, 0x10, 0x08, 0x04, // 57
|
||||||
|
0x08, 0x10, // 58
|
||||||
|
0x08, 0x70, // 59
|
||||||
|
0x40, 0xA0, 0xA0, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x04, 0x04, 0x08, // 60
|
||||||
|
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 61
|
||||||
|
0x08, 0x10, 0x10, 0xA0, 0xA0, 0x40, 0x08, 0x04, 0x04, 0x00, 0x00, 0x00, // 62
|
||||||
|
0x0C, 0x02, 0x82, 0x42, 0x22, 0x1C, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, // 63
|
||||||
|
0xE0, 0x18, 0x04, 0xC4, 0x22, 0x12, 0x12, 0x12, 0xA2, 0x72, 0x04, 0x08, 0xF0, 0x0C, 0x30, 0x40, 0x4C, 0x90, 0x90, 0x90, 0x88, 0x9C, 0x90, 0x50, 0x4C, 0x20, // 64
|
||||||
|
0x00, 0x80, 0xE0, 0x9C, 0x82, 0x9C, 0xE0, 0x80, 0x00, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x18, // 65
|
||||||
|
0xFE, 0x22, 0x22, 0x22, 0x22, 0x22, 0xDC, 0x1C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0C, // 66
|
||||||
|
0xF8, 0x04, 0x02, 0x02, 0x02, 0x02, 0x04, 0x08, 0x04, 0x08, 0x10, 0x10, 0x10, 0x10, 0x08, 0x04, // 67
|
||||||
|
0xFE, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0xF8, 0x1C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x04, // 68
|
||||||
|
0xFE, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x1C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // 69
|
||||||
|
0xFE, 0x22, 0x22, 0x22, 0x22, 0x22, 0x02, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 70
|
||||||
|
0xF8, 0x04, 0x02, 0x02, 0x02, 0x42, 0x42, 0x44, 0xC8, 0x04, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x04, // 71
|
||||||
|
0xFE, 0x20, 0x20, 0x20, 0x20, 0x20, 0xFE, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, // 72
|
||||||
|
0xFE, 0x1C, // 73
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xFE, 0x0C, 0x10, 0x10, 0x10, 0x0C, // 74
|
||||||
|
0xFE, 0x80, 0x40, 0x20, 0x50, 0x88, 0x04, 0x02, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x10, // 75
|
||||||
|
0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // 76
|
||||||
|
0xFE, 0x0C, 0x30, 0xC0, 0x00, 0xC0, 0x30, 0x0C, 0xFE, 0x1C, 0x00, 0x00, 0x04, 0x18, 0x04, 0x00, 0x00, 0x1C, // 77
|
||||||
|
0xFE, 0x04, 0x18, 0x60, 0x80, 0x00, 0xFE, 0x1C, 0x00, 0x00, 0x00, 0x04, 0x08, 0x1C, // 78
|
||||||
|
0xF8, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0xF8, 0x04, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x04, // 79
|
||||||
|
0xFE, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 80
|
||||||
|
0xF8, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x04, 0xF8, 0x04, 0x08, 0x10, 0x10, 0x10, 0x14, 0x08, 0x1C, 0x10, // 81
|
||||||
|
0xFE, 0x42, 0x42, 0x42, 0xC2, 0x42, 0x42, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x10, // 82
|
||||||
|
0x1C, 0x22, 0x22, 0x22, 0x42, 0x42, 0x8C, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0C, // 83
|
||||||
|
0x02, 0x02, 0x02, 0xFE, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, // 84
|
||||||
|
0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x04, 0x08, 0x10, 0x10, 0x10, 0x08, 0x04, // 85
|
||||||
|
0x06, 0x18, 0x60, 0x80, 0x00, 0x80, 0x60, 0x18, 0x06, 0x00, 0x00, 0x00, 0x04, 0x18, 0x04, 0x00, 0x00, 0x00, // 86
|
||||||
|
0x06, 0x38, 0xC0, 0x00, 0xC0, 0x3C, 0x02, 0x3C, 0xC0, 0x00, 0xC0, 0x38, 0x06, 0x00, 0x00, 0x04, 0x18, 0x04, 0x00, 0x00, 0x00, 0x04, 0x18, 0x04, 0x00, 0x00, // 87
|
||||||
|
0x02, 0x0C, 0x90, 0x60, 0x60, 0x90, 0x0C, 0x02, 0x10, 0x0C, 0x00, 0x00, 0x00, 0x04, 0x0C, 0x10, // 88
|
||||||
|
0x02, 0x04, 0x18, 0x20, 0xC0, 0x20, 0x18, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, // 89
|
||||||
|
0x00, 0x02, 0x82, 0x42, 0x22, 0x1A, 0x06, 0x02, 0x10, 0x18, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, // 90
|
||||||
|
0xFE, 0x02, 0xFC, 0x80, // 91
|
||||||
|
0x06, 0x38, 0xC0, 0x00, 0x00, 0x00, 0x04, 0x18, // 92
|
||||||
|
0x02, 0xFE, 0x80, 0xFC, // 93
|
||||||
|
0x20, 0x1C, 0x02, 0x1C, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // 94
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, // 95
|
||||||
|
0x02, 0x04, 0x00, 0x00, // 96
|
||||||
|
0x10, 0x88, 0x48, 0x48, 0x48, 0xF0, 0x0C, 0x10, 0x10, 0x10, 0x08, 0x1C, // 97
|
||||||
|
0xFE, 0x10, 0x08, 0x08, 0x08, 0xF0, 0x1C, 0x08, 0x10, 0x10, 0x10, 0x0C, // 98
|
||||||
|
0xF0, 0x08, 0x08, 0x08, 0x10, 0x0C, 0x10, 0x10, 0x10, 0x08, // 99
|
||||||
|
0xF0, 0x08, 0x08, 0x08, 0x10, 0xFE, 0x0C, 0x10, 0x10, 0x10, 0x08, 0x1C, // 100
|
||||||
|
0xF0, 0x48, 0x48, 0x48, 0x48, 0x70, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x08, // 101
|
||||||
|
0x08, 0xFC, 0x0A, 0x0A, 0x00, 0x1C, 0x00, 0x00, // 102
|
||||||
|
0xF0, 0x08, 0x08, 0x08, 0x10, 0xF8, 0x4C, 0x90, 0x90, 0x90, 0x88, 0x7C, // 103
|
||||||
|
0xFE, 0x10, 0x08, 0x08, 0x08, 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, // 104
|
||||||
|
0xFA, 0x1C, // 105
|
||||||
|
0x00, 0xFA, 0x80, 0x7C, // 106
|
||||||
|
0xFE, 0x80, 0x40, 0xA0, 0x10, 0x08, 0x1C, 0x00, 0x00, 0x00, 0x0C, 0x10, // 107
|
||||||
|
0xFE, 0x1C, // 108
|
||||||
|
0xF8, 0x10, 0x08, 0x08, 0xF0, 0x10, 0x08, 0x08, 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, // 109
|
||||||
|
0xF8, 0x10, 0x08, 0x08, 0x08, 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, // 110
|
||||||
|
0xF0, 0x08, 0x08, 0x08, 0x08, 0xF0, 0x0C, 0x10, 0x10, 0x10, 0x10, 0x0C, // 111
|
||||||
|
0xF8, 0x10, 0x08, 0x08, 0x08, 0xF0, 0xFC, 0x08, 0x10, 0x10, 0x10, 0x0C, // 112
|
||||||
|
0xF0, 0x08, 0x08, 0x08, 0x10, 0xF8, 0x0C, 0x10, 0x10, 0x10, 0x08, 0xFC, // 113
|
||||||
|
0xF8, 0x10, 0x08, 0x08, 0x1C, 0x00, 0x00, 0x00, // 114
|
||||||
|
0x30, 0x48, 0x48, 0x48, 0x90, 0x08, 0x10, 0x10, 0x10, 0x0C, // 115
|
||||||
|
0x08, 0xFE, 0x08, 0x08, 0x00, 0x1C, 0x10, 0x10, // 116
|
||||||
|
0xF8, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0C, 0x10, 0x10, 0x10, 0x08, 0x1C, // 117
|
||||||
|
0x18, 0x60, 0x80, 0x00, 0x80, 0x60, 0x18, 0x00, 0x00, 0x04, 0x18, 0x04, 0x00, 0x00, // 118
|
||||||
|
0x18, 0xE0, 0x00, 0xE0, 0x18, 0xE0, 0x00, 0xE0, 0x18, 0x00, 0x04, 0x18, 0x04, 0x00, 0x04, 0x18, 0x04, 0x00, // 119
|
||||||
|
0x08, 0x30, 0xC0, 0xC0, 0x30, 0x08, 0x10, 0x0C, 0x00, 0x00, 0x0C, 0x10, // 120
|
||||||
|
0x18, 0x60, 0x80, 0x00, 0x80, 0x60, 0x18, 0x00, 0x80, 0x8C, 0x70, 0x0C, 0x00, 0x00, // 121
|
||||||
|
0x08, 0x08, 0x88, 0x68, 0x18, 0x08, 0x10, 0x18, 0x14, 0x10, 0x10, 0x10, // 122
|
||||||
|
0x80, 0x7C, 0x02, 0x00, 0x7C, 0x80, // 123
|
||||||
|
0xFE, 0xFC, // 124
|
||||||
|
0x02, 0x7C, 0x80, 0x80, 0x7C, 0x00, // 125
|
||||||
|
0x40, 0x20, 0x20, 0x60, 0x40, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 126
|
||||||
|
0xFC, 0x04, 0x04, 0x04, 0x04, 0x04, 0xFC, 0x1C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1C // 127
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,167 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Arial Bold 14
|
||||||
|
*
|
||||||
|
* created with FontCreator
|
||||||
|
* written by F. Maximilian Thiele
|
||||||
|
*
|
||||||
|
* http://www.apetech.de/fontCreator
|
||||||
|
* me@apetech.de
|
||||||
|
*
|
||||||
|
* File Name : arial_bold_14
|
||||||
|
* Date : 29.01.2005
|
||||||
|
* Font size in bytes : 8712
|
||||||
|
* Font width : 10
|
||||||
|
* Font height : 14
|
||||||
|
* Font first char : 32
|
||||||
|
* Font last char : 128
|
||||||
|
* Font used chars : 96
|
||||||
|
*
|
||||||
|
* The font data are defined as
|
||||||
|
*
|
||||||
|
* struct _FONT_ {
|
||||||
|
* uint16_t font_Size_in_Bytes_over_all_included_Size_it_self;
|
||||||
|
* uint8_t font_Width_in_Pixel_for_fixed_drawing;
|
||||||
|
* uint8_t font_Height_in_Pixel_for_all_characters;
|
||||||
|
* unit8_t font_First_Char;
|
||||||
|
* uint8_t font_Char_Count;
|
||||||
|
*
|
||||||
|
* uint8_t font_Char_Widths[font_Last_Char - font_First_Char +1];
|
||||||
|
* // for each character the separate width in pixels,
|
||||||
|
* // characters < 128 have an implicit virtual right empty row
|
||||||
|
*
|
||||||
|
* uint8_t font_data[];
|
||||||
|
* // bit field of all characters
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
#ifndef ARIAL_BOLD_14_H
|
||||||
|
#define ARIAL_BOLD_14_H
|
||||||
|
|
||||||
|
#define ARIAL_BOLD_14_WIDTH 10
|
||||||
|
#define ARIAL_BOLD_14_HEIGHT 14
|
||||||
|
|
||||||
|
static const uint8_t Arial_bold_14[] PROGMEM = {
|
||||||
|
0x22, 0x08, // size
|
||||||
|
0x0A, // width
|
||||||
|
0x0E, // height
|
||||||
|
0x20, // first char
|
||||||
|
0x60, // char count
|
||||||
|
|
||||||
|
// char widths
|
||||||
|
0x04, 0x02, 0x05, 0x06, 0x07, 0x08, 0x09, 0x02, 0x03, 0x03,
|
||||||
|
0x05, 0x08, 0x02, 0x04, 0x02, 0x04, 0x07, 0x04, 0x07, 0x07,
|
||||||
|
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x02, 0x02, 0x07, 0x07,
|
||||||
|
0x07, 0x08, 0x0E, 0x09, 0x08, 0x08, 0x08, 0x07, 0x07, 0x09,
|
||||||
|
0x08, 0x02, 0x07, 0x08, 0x07, 0x0B, 0x08, 0x09, 0x07, 0x09,
|
||||||
|
0x09, 0x07, 0x08, 0x08, 0x09, 0x0D, 0x07, 0x08, 0x08, 0x04,
|
||||||
|
0x04, 0x04, 0x06, 0x08, 0x03, 0x07, 0x07, 0x06, 0x07, 0x07,
|
||||||
|
0x05, 0x07, 0x07, 0x02, 0x03, 0x06, 0x02, 0x0A, 0x07, 0x07,
|
||||||
|
0x07, 0x07, 0x05, 0x06, 0x05, 0x07, 0x07, 0x0B, 0x06, 0x07,
|
||||||
|
0x05, 0x05, 0x01, 0x05, 0x07, 0x08,
|
||||||
|
|
||||||
|
// font data
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 32
|
||||||
|
0xFE, 0xFE, 0x18, 0x18, // 33
|
||||||
|
0x1E, 0x1E, 0x00, 0x1E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, // 34
|
||||||
|
0x90, 0xF8, 0x9E, 0x90, 0xF8, 0x9E, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, // 35
|
||||||
|
0x18, 0x3C, 0x26, 0xFF, 0x66, 0xCC, 0x88, 0x04, 0x0C, 0x18, 0x3C, 0x18, 0x0C, 0x04, // 36
|
||||||
|
0x1C, 0x22, 0x1C, 0xC0, 0x30, 0x8E, 0x40, 0x80, 0x00, 0x00, 0x18, 0x04, 0x00, 0x0C, 0x10, 0x0C, // 37
|
||||||
|
0x80, 0xCC, 0x7E, 0x72, 0xF2, 0xDE, 0x0C, 0x80, 0x00, 0x0C, 0x1C, 0x10, 0x10, 0x10, 0x1C, 0x0C, 0x1C, 0x10, // 38
|
||||||
|
0x1E, 0x1E, 0x00, 0x00, // 39
|
||||||
|
0xF0, 0xFC, 0x06, 0x1C, 0x7C, 0xC0, // 40
|
||||||
|
0x06, 0xFC, 0xF0, 0xC0, 0x7C, 0x1C, // 41
|
||||||
|
0x14, 0x14, 0x0E, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, // 42
|
||||||
|
0x60, 0x60, 0x60, 0xFC, 0xFC, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x00, // 43
|
||||||
|
0x00, 0x00, 0x58, 0x38, // 44
|
||||||
|
0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, // 45
|
||||||
|
0x00, 0x00, 0x18, 0x18, // 46
|
||||||
|
0x00, 0xC0, 0x38, 0x06, 0x18, 0x04, 0x00, 0x00, // 47
|
||||||
|
0xF8, 0xFC, 0x0E, 0x06, 0x0E, 0xFC, 0xF8, 0x04, 0x0C, 0x1C, 0x18, 0x1C, 0x0C, 0x04, // 48
|
||||||
|
0x18, 0x0C, 0xFE, 0xFE, 0x00, 0x00, 0x1C, 0x1C, // 49
|
||||||
|
0x18, 0x1C, 0x86, 0xC6, 0x66, 0x3E, 0x1C, 0x18, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, // 50
|
||||||
|
0x88, 0x8C, 0x06, 0x26, 0x26, 0xFE, 0xDC, 0x04, 0x0C, 0x1C, 0x18, 0x18, 0x0C, 0x04, // 51
|
||||||
|
0xC0, 0xE0, 0xB8, 0x8C, 0xFE, 0xFE, 0x80, 0x04, 0x04, 0x04, 0x04, 0x1C, 0x1C, 0x04, // 52
|
||||||
|
0x70, 0x7E, 0x3E, 0x36, 0x36, 0xF6, 0xC6, 0x0C, 0x1C, 0x18, 0x18, 0x18, 0x0C, 0x04, // 53
|
||||||
|
0xF8, 0xFC, 0x6E, 0x66, 0x66, 0xEE, 0xCC, 0x04, 0x0C, 0x18, 0x18, 0x18, 0x1C, 0x0C, // 54
|
||||||
|
0x06, 0x06, 0x06, 0xE6, 0x76, 0x1E, 0x06, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, // 55
|
||||||
|
0x9C, 0xFE, 0x66, 0x66, 0x66, 0xFE, 0x9C, 0x0C, 0x1C, 0x18, 0x18, 0x18, 0x1C, 0x0C, // 56
|
||||||
|
0x3C, 0x7E, 0x66, 0x66, 0x66, 0xFC, 0xF8, 0x0C, 0x1C, 0x18, 0x18, 0x1C, 0x0C, 0x04, // 57
|
||||||
|
0x18, 0x18, 0x18, 0x18, // 58
|
||||||
|
0x18, 0x18, 0x58, 0x38, // 59
|
||||||
|
0x60, 0x60, 0xF0, 0xF0, 0x98, 0x98, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x0C, // 60
|
||||||
|
0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 61
|
||||||
|
0x0C, 0x98, 0x98, 0xF0, 0xF0, 0x60, 0x60, 0x0C, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, // 62
|
||||||
|
0x08, 0x0C, 0x06, 0xC6, 0xE6, 0x76, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, // 63
|
||||||
|
0xE0, 0x30, 0x08, 0xC4, 0xF6, 0x3A, 0x1A, 0x1A, 0xF2, 0xFA, 0x7E, 0x04, 0x08, 0xF0, 0x0C, 0x30, 0x60, 0x4C, 0x9C, 0x98, 0x98, 0x8C, 0x9C, 0x9C, 0x90, 0x48, 0x4C, 0x20, // 64
|
||||||
|
0x00, 0xC0, 0xF8, 0xBE, 0x86, 0xBE, 0xF8, 0xC0, 0x00, 0x18, 0x1C, 0x04, 0x04, 0x04, 0x04, 0x04, 0x1C, 0x18, // 65
|
||||||
|
0xFE, 0xFE, 0x66, 0x66, 0x66, 0x66, 0xFE, 0xDC, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x1C, 0x0C, // 66
|
||||||
|
0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x0E, 0x9C, 0x08, 0x04, 0x0C, 0x1C, 0x18, 0x18, 0x1C, 0x0C, 0x04, // 67
|
||||||
|
0xFE, 0xFE, 0x06, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x1C, 0x0C, 0x04, // 68
|
||||||
|
0xFE, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, // 69
|
||||||
|
0xFE, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x06, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, // 70
|
||||||
|
0xF8, 0xFC, 0x0E, 0x06, 0x06, 0xC6, 0xCE, 0xDC, 0xC8, 0x04, 0x0C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x0C, 0x04, // 71
|
||||||
|
0xFE, 0xFE, 0x60, 0x60, 0x60, 0x60, 0xFE, 0xFE, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, // 72
|
||||||
|
0xFE, 0xFE, 0x1C, 0x1C, // 73
|
||||||
|
0x80, 0x80, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x0C, 0x1C, 0x18, 0x18, 0x18, 0x1C, 0x0C, // 74
|
||||||
|
0xFE, 0xFE, 0x60, 0x30, 0x78, 0xEC, 0x86, 0x02, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x04, 0x1C, 0x18, // 75
|
||||||
|
0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, // 76
|
||||||
|
0xFE, 0xFE, 0x0E, 0x7C, 0xE0, 0x00, 0xE0, 0x7C, 0x0E, 0xFE, 0xFE, 0x1C, 0x1C, 0x00, 0x00, 0x0C, 0x1C, 0x0C, 0x00, 0x00, 0x1C, 0x1C, // 77
|
||||||
|
0xFE, 0xFE, 0x1C, 0x78, 0xE0, 0x80, 0xFE, 0xFE, 0x1C, 0x1C, 0x00, 0x00, 0x04, 0x0C, 0x1C, 0x1C, // 78
|
||||||
|
0xF8, 0xFC, 0x0E, 0x06, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x04, 0x0C, 0x1C, 0x18, 0x18, 0x18, 0x1C, 0x0C, 0x04, // 79
|
||||||
|
0xFE, 0xFE, 0x66, 0x66, 0x66, 0x7E, 0x3C, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, // 80
|
||||||
|
0xF8, 0xFC, 0x0E, 0x06, 0x86, 0x06, 0x0E, 0xFC, 0xF8, 0x04, 0x0C, 0x1C, 0x18, 0x18, 0x1C, 0x0C, 0x1C, 0x24, // 81
|
||||||
|
0xFE, 0xFE, 0x66, 0x66, 0xE6, 0xE6, 0xBE, 0x1C, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x0C, 0x1C, 0x18, 0x10, // 82
|
||||||
|
0x3C, 0x7E, 0x66, 0x66, 0x66, 0xEE, 0xCC, 0x0C, 0x1C, 0x18, 0x18, 0x18, 0x1C, 0x0C, // 83
|
||||||
|
0x06, 0x06, 0x06, 0xFE, 0xFE, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, // 84
|
||||||
|
0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x04, 0x0C, 0x1C, 0x18, 0x18, 0x1C, 0x0C, 0x04, // 85
|
||||||
|
0x02, 0x1E, 0xFC, 0xE0, 0x00, 0xE0, 0xFC, 0x1E, 0x02, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00, // 86
|
||||||
|
0x06, 0xFE, 0xF8, 0x00, 0xF0, 0xFE, 0x0E, 0xFE, 0xF0, 0x00, 0xF8, 0xFE, 0x06, 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x00, 0x00, // 87
|
||||||
|
0x06, 0x0E, 0xF8, 0xF0, 0xF8, 0x0E, 0x06, 0x18, 0x1C, 0x04, 0x00, 0x04, 0x1C, 0x18, // 88
|
||||||
|
0x06, 0x0E, 0x38, 0xF0, 0xF0, 0x38, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x00, // 89
|
||||||
|
0x06, 0x06, 0x86, 0xE6, 0x76, 0x1E, 0x0E, 0x06, 0x18, 0x1C, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, // 90
|
||||||
|
0xFE, 0xFE, 0x06, 0x06, 0xFC, 0xFC, 0xC0, 0xC0, // 91
|
||||||
|
0x06, 0x38, 0xC0, 0x00, 0x00, 0x00, 0x04, 0x18, // 92
|
||||||
|
0x06, 0x06, 0xFE, 0xFE, 0xC0, 0xC0, 0xFC, 0xFC, // 93
|
||||||
|
0x20, 0x38, 0x0E, 0x0E, 0x38, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 94
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, // 95
|
||||||
|
0x02, 0x06, 0x04, 0x00, 0x00, 0x00, // 96
|
||||||
|
0x10, 0x98, 0xD8, 0x58, 0xF8, 0xF0, 0x00, 0x0C, 0x1C, 0x18, 0x18, 0x0C, 0x1C, 0x10, // 97
|
||||||
|
0xFE, 0xFE, 0x30, 0x18, 0x38, 0xF0, 0xE0, 0x1C, 0x1C, 0x0C, 0x18, 0x1C, 0x0C, 0x04, // 98
|
||||||
|
0xE0, 0xF0, 0x18, 0x18, 0x38, 0x30, 0x04, 0x0C, 0x18, 0x18, 0x1C, 0x0C, // 99
|
||||||
|
0xE0, 0xF0, 0x38, 0x18, 0x30, 0xFE, 0xFE, 0x04, 0x0C, 0x1C, 0x18, 0x0C, 0x1C, 0x1C, // 100
|
||||||
|
0xE0, 0xF0, 0xD8, 0xD8, 0xD8, 0xF0, 0xE0, 0x04, 0x0C, 0x18, 0x18, 0x18, 0x18, 0x08, // 101
|
||||||
|
0x18, 0xFC, 0xFE, 0x1A, 0x1A, 0x00, 0x1C, 0x1C, 0x00, 0x00, // 102
|
||||||
|
0xE0, 0xF0, 0x38, 0x18, 0x30, 0xF8, 0xF8, 0x64, 0xEC, 0xDC, 0xD8, 0xCC, 0xFC, 0x7C, // 103
|
||||||
|
0xFE, 0xFE, 0x30, 0x18, 0x18, 0xF8, 0xF0, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x1C, // 104
|
||||||
|
0xFA, 0xFA, 0x1C, 0x1C, // 105
|
||||||
|
0x00, 0xFA, 0xFA, 0xC0, 0xFC, 0x7C, // 106
|
||||||
|
0xFE, 0xFE, 0xE0, 0xF0, 0x98, 0x08, 0x1C, 0x1C, 0x00, 0x04, 0x1C, 0x18, // 107
|
||||||
|
0xFE, 0xFE, 0x1C, 0x1C, // 108
|
||||||
|
0xF8, 0xF8, 0x10, 0x18, 0xF8, 0xF0, 0x18, 0x18, 0xF8, 0xF0, 0x1C, 0x1C, 0x00, 0x00, 0x1C, 0x1C, 0x00, 0x00, 0x1C, 0x1C, // 109
|
||||||
|
0xF8, 0xF8, 0x30, 0x18, 0x18, 0xF8, 0xF0, 0x1C, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x1C, // 110
|
||||||
|
0xE0, 0xF0, 0x38, 0x18, 0x38, 0xF0, 0xE0, 0x04, 0x0C, 0x1C, 0x18, 0x1C, 0x0C, 0x04, // 111
|
||||||
|
0xF8, 0xF8, 0x30, 0x18, 0x38, 0xF0, 0xE0, 0xFC, 0xFC, 0x0C, 0x18, 0x1C, 0x0C, 0x04, // 112
|
||||||
|
0xE0, 0xF0, 0x38, 0x18, 0x30, 0xF8, 0xF8, 0x04, 0x0C, 0x1C, 0x18, 0x0C, 0xFC, 0xFC, // 113
|
||||||
|
0xF8, 0xF8, 0x30, 0x18, 0x18, 0x1C, 0x1C, 0x00, 0x00, 0x00, // 114
|
||||||
|
0x70, 0xF8, 0xD8, 0xD8, 0xD8, 0x90, 0x08, 0x18, 0x18, 0x18, 0x1C, 0x0C, // 115
|
||||||
|
0x18, 0xFC, 0xFE, 0x18, 0x18, 0x00, 0x0C, 0x1C, 0x18, 0x18, // 116
|
||||||
|
0xF8, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x0C, 0x1C, 0x18, 0x18, 0x0C, 0x1C, 0x1C, // 117
|
||||||
|
0x38, 0xF8, 0xC0, 0x00, 0xC0, 0xF8, 0x38, 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x00, 0x00, // 118
|
||||||
|
0x18, 0xF8, 0xE0, 0x00, 0xF0, 0x38, 0xF0, 0x00, 0xE0, 0xF8, 0x18, 0x00, 0x00, 0x1C, 0x1C, 0x0C, 0x00, 0x0C, 0x1C, 0x1C, 0x00, 0x00, // 119
|
||||||
|
0x18, 0x38, 0xE0, 0xE0, 0x38, 0x18, 0x18, 0x1C, 0x04, 0x04, 0x1C, 0x18, // 120
|
||||||
|
0x18, 0xF8, 0xE0, 0x00, 0xE0, 0xF8, 0x18, 0x00, 0x84, 0xFC, 0xF8, 0x3C, 0x04, 0x00, // 121
|
||||||
|
0x18, 0x98, 0xD8, 0x78, 0x38, 0x1C, 0x1C, 0x18, 0x18, 0x18, // 122
|
||||||
|
0x80, 0xFC, 0x7E, 0x06, 0x06, 0x00, 0x7C, 0xFC, 0xC0, 0xC0, // 123
|
||||||
|
0xFE, 0xFC, // 124
|
||||||
|
0x06, 0x06, 0x7E, 0xFC, 0x80, 0xC0, 0xC0, 0xFC, 0x7C, 0x00, // 125
|
||||||
|
0x60, 0x30, 0x30, 0x70, 0x60, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 126
|
||||||
|
0xFE, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0xFE, 0x1C, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1C // 127
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,167 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Corsiva_12
|
||||||
|
*
|
||||||
|
* created with FontCreator
|
||||||
|
* written by F. Maximilian Thiele
|
||||||
|
*
|
||||||
|
* http://www.apetech.de/fontCreator
|
||||||
|
* me@apetech.de
|
||||||
|
*
|
||||||
|
* File Name : corsiva_12.h
|
||||||
|
* Date : 29.01.2005
|
||||||
|
* Font size in bytes : 5690
|
||||||
|
* Font width : 10
|
||||||
|
* Font height : 11
|
||||||
|
* Font first char : 32
|
||||||
|
* Font last char : 128
|
||||||
|
* Font used chars : 96
|
||||||
|
*
|
||||||
|
* The font data are defined as
|
||||||
|
*
|
||||||
|
* struct _FONT_ {
|
||||||
|
* uint16_t font_Size_in_Bytes_over_all_included_Size_it_self;
|
||||||
|
* uint8_t font_Width_in_Pixel_for_fixed_drawing;
|
||||||
|
* uint8_t font_Height_in_Pixel_for_all_characters;
|
||||||
|
* unit8_t font_First_Char;
|
||||||
|
* uint8_t font_Char_Count;
|
||||||
|
*
|
||||||
|
* uint8_t font_Char_Widths[font_Last_Char - font_First_Char +1];
|
||||||
|
* // for each character the separate width in pixels,
|
||||||
|
* // characters < 128 have an implicit virtual right empty row
|
||||||
|
*
|
||||||
|
* uint8_t font_data[];
|
||||||
|
* // bit field of all characters
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
#ifndef CORSIVA_12_H
|
||||||
|
#define CORSIVA_12_H
|
||||||
|
|
||||||
|
#define CORSIVA_12_WIDTH 10
|
||||||
|
#define CORSIVA_12_HEIGHT 11
|
||||||
|
|
||||||
|
static const uint8_t Corsiva_12[] PROGMEM = {
|
||||||
|
0x16, 0x3A, // size
|
||||||
|
0x0A, // width
|
||||||
|
0x0B, // height
|
||||||
|
0x20, // first char
|
||||||
|
0x60, // char count
|
||||||
|
|
||||||
|
// char widths
|
||||||
|
0x03, 0x02, 0x02, 0x06, 0x05, 0x07, 0x09, 0x01, 0x03, 0x04,
|
||||||
|
0x02, 0x05, 0x02, 0x03, 0x01, 0x05, 0x05, 0x04, 0x05, 0x04,
|
||||||
|
0x05, 0x06, 0x05, 0x05, 0x05, 0x05, 0x02, 0x03, 0x05, 0x05,
|
||||||
|
0x05, 0x04, 0x07, 0x07, 0x07, 0x06, 0x08, 0x07, 0x07, 0x07,
|
||||||
|
0x0A, 0x05, 0x06, 0x09, 0x07, 0x09, 0x0A, 0x06, 0x07, 0x09,
|
||||||
|
0x09, 0x06, 0x08, 0x08, 0x08, 0x0B, 0x09, 0x09, 0x07, 0x03,
|
||||||
|
0x03, 0x04, 0x03, 0x06, 0x02, 0x04, 0x04, 0x04, 0x06, 0x04,
|
||||||
|
0x06, 0x06, 0x04, 0x03, 0x04, 0x06, 0x03, 0x06, 0x04, 0x04,
|
||||||
|
0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x06, 0x08, 0x07, 0x05,
|
||||||
|
0x06, 0x03, 0x01, 0x04, 0x05, 0x06,
|
||||||
|
|
||||||
|
// font data
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 32
|
||||||
|
0x80, 0x3E, 0x00, 0x00, // 33
|
||||||
|
0x08, 0x06, 0x00, 0x00, // 34
|
||||||
|
0xA0, 0x78, 0xAE, 0x78, 0x2E, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 35
|
||||||
|
0x80, 0x8C, 0xF2, 0xBF, 0x62, 0x00, 0x20, 0x00, 0x00, 0x00, // 36
|
||||||
|
0x1C, 0x92, 0x7E, 0x0C, 0xE2, 0x90, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 37
|
||||||
|
0x70, 0xC8, 0xA8, 0xB8, 0x6C, 0xBE, 0x02, 0xC2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // 38
|
||||||
|
0x08, 0x00, // 39
|
||||||
|
0xE0, 0x18, 0x06, 0x60, 0x80, 0x00, // 40
|
||||||
|
0x00, 0x00, 0xC3, 0x3C, 0x40, 0x20, 0x00, 0x00, // 41
|
||||||
|
0x0C, 0x0F, 0x00, 0x00, // 42
|
||||||
|
0x10, 0x10, 0x7C, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // 43
|
||||||
|
0x00, 0x80, 0x40, 0x20, // 44
|
||||||
|
0x20, 0x20, 0x20, 0x00, 0x00, 0x00, // 45
|
||||||
|
0x80, 0x00, // 46
|
||||||
|
0x00, 0xC0, 0x30, 0x0C, 0x03, 0x60, 0x00, 0x00, 0x00, 0x00, // 47
|
||||||
|
0x78, 0x84, 0x82, 0x42, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, // 48
|
||||||
|
0x80, 0x88, 0xFC, 0x86, 0x00, 0x00, 0x00, 0x00, // 49
|
||||||
|
0xC0, 0xC4, 0xA2, 0x92, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, // 50
|
||||||
|
0xC0, 0x80, 0xDA, 0x76, 0x00, 0x00, 0x00, 0x00, // 51
|
||||||
|
0x20, 0x30, 0xA8, 0x7E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, // 52
|
||||||
|
0x80, 0x80, 0x84, 0x4A, 0x32, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 53
|
||||||
|
0x70, 0xAC, 0x94, 0x72, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, // 54
|
||||||
|
0xC4, 0x32, 0x0A, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, // 55
|
||||||
|
0xE0, 0xAC, 0x92, 0x6A, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, // 56
|
||||||
|
0x80, 0x9C, 0x52, 0x72, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, // 57
|
||||||
|
0x80, 0x08, 0x00, 0x00, // 58
|
||||||
|
0x00, 0x80, 0x08, 0x40, 0x20, 0x00, // 59
|
||||||
|
0x30, 0x30, 0x48, 0x48, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, // 60
|
||||||
|
0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, // 61
|
||||||
|
0x48, 0x48, 0x48, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, // 62
|
||||||
|
0x80, 0x36, 0x12, 0x0C, 0x00, 0x00, 0x00, 0x00, // 63
|
||||||
|
0x70, 0xCC, 0xB4, 0xAA, 0xBA, 0x62, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 64
|
||||||
|
0x00, 0x80, 0x4C, 0x32, 0x2E, 0xFE, 0x82, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 65
|
||||||
|
0x38, 0x24, 0x86, 0xFA, 0x8E, 0x8A, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 66
|
||||||
|
0xF0, 0x8C, 0x04, 0x02, 0x82, 0x0C, 0x00, 0x20, 0x20, 0x20, 0x00, 0x00, // 67
|
||||||
|
0x38, 0x4C, 0x86, 0xEA, 0x9A, 0x82, 0x46, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 68
|
||||||
|
0x38, 0x84, 0xE2, 0x9E, 0x92, 0xBA, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 69
|
||||||
|
0x1C, 0x86, 0xE2, 0x9E, 0x12, 0x3A, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 70
|
||||||
|
0x70, 0x8C, 0x84, 0x82, 0xD2, 0x32, 0x16, 0x00, 0x80, 0x80, 0xC0, 0x20, 0x00, 0x00, // 71
|
||||||
|
0xC0, 0x8C, 0xC2, 0x3A, 0x16, 0x90, 0xF8, 0x86, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 72
|
||||||
|
0x80, 0xC0, 0xFA, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, // 73
|
||||||
|
0x00, 0x00, 0x0C, 0xC2, 0x3A, 0x06, 0x60, 0x40, 0x40, 0x20, 0x00, 0x00, // 74
|
||||||
|
0x8C, 0x82, 0xF2, 0x1E, 0x78, 0x88, 0x06, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x40, 0x40, // 75
|
||||||
|
0x80, 0xC0, 0xB8, 0x84, 0x82, 0x82, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 76
|
||||||
|
0x80, 0x9C, 0x62, 0x1E, 0xF8, 0x60, 0x90, 0xFC, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 77
|
||||||
|
0x80, 0x0C, 0xE2, 0x12, 0x0E, 0xF0, 0x70, 0x0C, 0x02, 0x02, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 78
|
||||||
|
0x78, 0xC4, 0x82, 0x82, 0x46, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 79
|
||||||
|
0x38, 0xCC, 0x86, 0xFA, 0x92, 0x12, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 80
|
||||||
|
0x78, 0xC4, 0x82, 0x82, 0x42, 0x26, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x60, 0xC0, 0x80, 0x80, 0x40, // 81
|
||||||
|
0x38, 0xA4, 0x86, 0xFA, 0x32, 0xD2, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x40, 0x40, // 82
|
||||||
|
0x80, 0x00, 0x0C, 0x92, 0xE2, 0x0E, 0x00, 0x20, 0x20, 0x20, 0x00, 0x00, // 83
|
||||||
|
0x1C, 0x86, 0x82, 0xF2, 0x8E, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 84
|
||||||
|
0x0C, 0x7A, 0x86, 0x80, 0x80, 0x40, 0x30, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 85
|
||||||
|
0x0C, 0x06, 0xFE, 0x42, 0x20, 0x10, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 86
|
||||||
|
0x0C, 0x06, 0xFE, 0x32, 0x08, 0x04, 0xFE, 0x20, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 87
|
||||||
|
0x00, 0x80, 0x40, 0x22, 0x1E, 0xF4, 0x82, 0x01, 0x01, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 88
|
||||||
|
0x1C, 0x04, 0x82, 0xC6, 0xBC, 0x8C, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 89
|
||||||
|
0x80, 0xC0, 0xA6, 0x92, 0x8A, 0x86, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 90
|
||||||
|
0x00, 0xF0, 0x0F, 0xC0, 0xA0, 0x00, // 91
|
||||||
|
0x07, 0xFC, 0x80, 0x00, 0x00, 0x60, // 92
|
||||||
|
0x00, 0x00, 0xF1, 0x0F, 0x80, 0xE0, 0x00, 0x00, // 93
|
||||||
|
0x04, 0x02, 0x04, 0x00, 0x00, 0x00, // 94
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, // 95
|
||||||
|
0x01, 0x02, 0x00, 0x00, // 96
|
||||||
|
0xE0, 0x90, 0xC8, 0xB8, 0x00, 0x00, 0x00, 0x00, // 97
|
||||||
|
0xE0, 0x9E, 0x49, 0x39, 0x00, 0x00, 0x00, 0x00, // 98
|
||||||
|
0xE0, 0x90, 0x88, 0x48, 0x00, 0x00, 0x00, 0x00, // 99
|
||||||
|
0xE0, 0x90, 0x48, 0xF8, 0x4E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 100
|
||||||
|
0xF0, 0xB0, 0xA8, 0x58, 0x00, 0x00, 0x00, 0x00, // 101
|
||||||
|
0x00, 0x90, 0x78, 0x16, 0x01, 0x01, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, // 102
|
||||||
|
0x00, 0xE0, 0x90, 0x88, 0xE8, 0x18, 0xE0, 0x80, 0x80, 0xC0, 0x60, 0x00, // 103
|
||||||
|
0xE0, 0x1E, 0xD1, 0xB9, 0x00, 0x00, 0x00, 0x00, // 104
|
||||||
|
0xE0, 0x38, 0x02, 0x00, 0x00, 0x00, // 105
|
||||||
|
0x00, 0x90, 0x78, 0x02, 0x80, 0x60, 0x00, 0x00, // 106
|
||||||
|
0xE0, 0x3E, 0xE9, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x40, 0x40, // 107
|
||||||
|
0xE0, 0x9C, 0x42, 0x00, 0x00, 0x00, // 108
|
||||||
|
0xC8, 0x38, 0xD0, 0x38, 0xF0, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 109
|
||||||
|
0xE8, 0x18, 0xD0, 0xB8, 0x00, 0x00, 0x00, 0x00, // 110
|
||||||
|
0xF0, 0x88, 0xC8, 0x38, 0x00, 0x00, 0x00, 0x00, // 111
|
||||||
|
0x88, 0xF8, 0x90, 0x48, 0x38, 0xE0, 0x80, 0x00, 0x00, 0x00, // 112
|
||||||
|
0xE0, 0x90, 0x88, 0xE8, 0x18, 0x00, 0x80, 0xC0, 0xA0, 0x00, // 113
|
||||||
|
0xC8, 0x38, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, // 114
|
||||||
|
0xC0, 0x98, 0xE8, 0x08, 0x00, 0x00, 0x00, 0x00, // 115
|
||||||
|
0xE8, 0x9C, 0x88, 0x40, 0x00, 0x00, 0x00, 0x00, // 116
|
||||||
|
0xE8, 0x98, 0xE0, 0x98, 0x00, 0x00, 0x00, 0x00, // 117
|
||||||
|
0x10, 0x08, 0xF8, 0x88, 0x60, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 118
|
||||||
|
0x10, 0x08, 0xF8, 0x88, 0x40, 0xF8, 0x40, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 119
|
||||||
|
0x80, 0xD0, 0x58, 0xF0, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x60, // 120
|
||||||
|
0x10, 0x18, 0xF0, 0xC0, 0x38, 0x80, 0x40, 0x20, 0x00, 0x00, // 121
|
||||||
|
0x80, 0xD8, 0xA8, 0x98, 0xD8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 122
|
||||||
|
0xA0, 0xD8, 0x07, 0xE0, 0x80, 0x00, // 123
|
||||||
|
0xFF, 0xE0, // 124
|
||||||
|
0x00, 0x00, 0xD1, 0x2F, 0x80, 0xC0, 0x20, 0x00, // 125
|
||||||
|
0x08, 0x08, 0x18, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // 126
|
||||||
|
0xFF, 0x81, 0x81, 0x81, 0x81, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // 127
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,157 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* System5x7
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* File Name : System5x7.h
|
||||||
|
* Date : 28 Oct 2008
|
||||||
|
* Font size in bytes : 470
|
||||||
|
* Font width : 5
|
||||||
|
* Font height : 7
|
||||||
|
* Font first char : 32
|
||||||
|
* Font last char : 127
|
||||||
|
* Font used chars : 94
|
||||||
|
*
|
||||||
|
* The font data are defined as
|
||||||
|
*
|
||||||
|
* struct _FONT_ {
|
||||||
|
* uint16_t font_Size_in_Bytes_over_all_included_Size_it_self;
|
||||||
|
* uint8_t font_Width_in_Pixel_for_fixed_drawing;
|
||||||
|
* uint8_t font_Height_in_Pixel_for_all_characters;
|
||||||
|
* unit8_t font_First_Char;
|
||||||
|
* uint8_t font_Char_Count;
|
||||||
|
*
|
||||||
|
* uint8_t font_Char_Widths[font_Last_Char - font_First_Char +1];
|
||||||
|
* // for each character the separate width in pixels,
|
||||||
|
* // characters < 128 have an implicit virtual right empty row
|
||||||
|
*
|
||||||
|
* uint8_t font_data[];
|
||||||
|
* // bit field of all characters
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
#ifndef SYSTEM5x7_H
|
||||||
|
#define SYSTEM5x7_H
|
||||||
|
|
||||||
|
#define SYSTEM5x7_WIDTH 5
|
||||||
|
#define SYSTEM5x7_HEIGHT 7
|
||||||
|
|
||||||
|
/*
|
||||||
|
* added to allow fontname to match header file name.
|
||||||
|
* as well as keep the old name for backward compability
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SystemFont5x7 System5x7
|
||||||
|
|
||||||
|
static const uint8_t System5x7[] PROGMEM = {
|
||||||
|
0x0, 0x0, // size of zero indicates fixed width font, actual length is width * height
|
||||||
|
0x05, // width
|
||||||
|
0x07, // height
|
||||||
|
0x20, // first char
|
||||||
|
0x60, // char count
|
||||||
|
|
||||||
|
// Fixed width; char width table not used !!!!
|
||||||
|
|
||||||
|
// font data
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00,// (space)
|
||||||
|
0x00, 0x00, 0x5F, 0x00, 0x00,// !
|
||||||
|
0x00, 0x07, 0x00, 0x07, 0x00,// "
|
||||||
|
0x14, 0x7F, 0x14, 0x7F, 0x14,// #
|
||||||
|
0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
|
||||||
|
0x23, 0x13, 0x08, 0x64, 0x62,// %
|
||||||
|
0x36, 0x49, 0x55, 0x22, 0x50,// &
|
||||||
|
0x00, 0x05, 0x03, 0x00, 0x00,// '
|
||||||
|
0x00, 0x1C, 0x22, 0x41, 0x00,// (
|
||||||
|
0x00, 0x41, 0x22, 0x1C, 0x00,// )
|
||||||
|
0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
|
||||||
|
0x08, 0x08, 0x3E, 0x08, 0x08,// +
|
||||||
|
0x00, 0x50, 0x30, 0x00, 0x00,// ,
|
||||||
|
0x08, 0x08, 0x08, 0x08, 0x08,// -
|
||||||
|
0x00, 0x60, 0x60, 0x00, 0x00,// .
|
||||||
|
0x20, 0x10, 0x08, 0x04, 0x02,// /
|
||||||
|
0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
|
||||||
|
0x00, 0x42, 0x7F, 0x40, 0x00,// 1
|
||||||
|
0x42, 0x61, 0x51, 0x49, 0x46,// 2
|
||||||
|
0x21, 0x41, 0x45, 0x4B, 0x31,// 3
|
||||||
|
0x18, 0x14, 0x12, 0x7F, 0x10,// 4
|
||||||
|
0x27, 0x45, 0x45, 0x45, 0x39,// 5
|
||||||
|
0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
|
||||||
|
0x01, 0x71, 0x09, 0x05, 0x03,// 7
|
||||||
|
0x36, 0x49, 0x49, 0x49, 0x36,// 8
|
||||||
|
0x06, 0x49, 0x49, 0x29, 0x1E,// 9
|
||||||
|
0x00, 0x36, 0x36, 0x00, 0x00,// :
|
||||||
|
0x00, 0x56, 0x36, 0x00, 0x00,// ;
|
||||||
|
0x00, 0x08, 0x14, 0x22, 0x41,// <
|
||||||
|
0x14, 0x14, 0x14, 0x14, 0x14,// =
|
||||||
|
0x41, 0x22, 0x14, 0x08, 0x00,// >
|
||||||
|
0x02, 0x01, 0x51, 0x09, 0x06,// ?
|
||||||
|
0x32, 0x49, 0x79, 0x41, 0x3E,// @
|
||||||
|
0x7E, 0x11, 0x11, 0x11, 0x7E,// A
|
||||||
|
0x7F, 0x49, 0x49, 0x49, 0x36,// B
|
||||||
|
0x3E, 0x41, 0x41, 0x41, 0x22,// C
|
||||||
|
0x7F, 0x41, 0x41, 0x22, 0x1C,// D
|
||||||
|
0x7F, 0x49, 0x49, 0x49, 0x41,// E
|
||||||
|
0x7F, 0x09, 0x09, 0x01, 0x01,// F
|
||||||
|
0x3E, 0x41, 0x41, 0x51, 0x32,// G
|
||||||
|
0x7F, 0x08, 0x08, 0x08, 0x7F,// H
|
||||||
|
0x00, 0x41, 0x7F, 0x41, 0x00,// I
|
||||||
|
0x20, 0x40, 0x41, 0x3F, 0x01,// J
|
||||||
|
0x7F, 0x08, 0x14, 0x22, 0x41,// K
|
||||||
|
0x7F, 0x40, 0x40, 0x40, 0x40,// L
|
||||||
|
0x7F, 0x02, 0x04, 0x02, 0x7F,// M
|
||||||
|
0x7F, 0x04, 0x08, 0x10, 0x7F,// N
|
||||||
|
0x3E, 0x41, 0x41, 0x41, 0x3E,// O
|
||||||
|
0x7F, 0x09, 0x09, 0x09, 0x06,// P
|
||||||
|
0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
|
||||||
|
0x7F, 0x09, 0x19, 0x29, 0x46,// R
|
||||||
|
0x46, 0x49, 0x49, 0x49, 0x31,// S
|
||||||
|
0x01, 0x01, 0x7F, 0x01, 0x01,// T
|
||||||
|
0x3F, 0x40, 0x40, 0x40, 0x3F,// U
|
||||||
|
0x1F, 0x20, 0x40, 0x20, 0x1F,// V
|
||||||
|
0x7F, 0x20, 0x18, 0x20, 0x7F,// W
|
||||||
|
0x63, 0x14, 0x08, 0x14, 0x63,// X
|
||||||
|
0x03, 0x04, 0x78, 0x04, 0x03,// Y
|
||||||
|
0x61, 0x51, 0x49, 0x45, 0x43,// Z
|
||||||
|
0x00, 0x00, 0x7F, 0x41, 0x41,// [
|
||||||
|
0x02, 0x04, 0x08, 0x10, 0x20,// "\"
|
||||||
|
0x41, 0x41, 0x7F, 0x00, 0x00,// ]
|
||||||
|
0x04, 0x02, 0x01, 0x02, 0x04,// ^
|
||||||
|
0x40, 0x40, 0x40, 0x40, 0x40,// _
|
||||||
|
0x00, 0x01, 0x02, 0x04, 0x00,// `
|
||||||
|
0x20, 0x54, 0x54, 0x54, 0x78,// a
|
||||||
|
0x7F, 0x48, 0x44, 0x44, 0x38,// b
|
||||||
|
0x38, 0x44, 0x44, 0x44, 0x20,// c
|
||||||
|
0x38, 0x44, 0x44, 0x48, 0x7F,// d
|
||||||
|
0x38, 0x54, 0x54, 0x54, 0x18,// e
|
||||||
|
0x08, 0x7E, 0x09, 0x01, 0x02,// f
|
||||||
|
0x08, 0x14, 0x54, 0x54, 0x3C,// g
|
||||||
|
0x7F, 0x08, 0x04, 0x04, 0x78,// h
|
||||||
|
0x00, 0x44, 0x7D, 0x40, 0x00,// i
|
||||||
|
0x20, 0x40, 0x44, 0x3D, 0x00,// j
|
||||||
|
0x00, 0x7F, 0x10, 0x28, 0x44,// k
|
||||||
|
0x00, 0x41, 0x7F, 0x40, 0x00,// l
|
||||||
|
0x7C, 0x04, 0x18, 0x04, 0x78,// m
|
||||||
|
0x7C, 0x08, 0x04, 0x04, 0x78,// n
|
||||||
|
0x38, 0x44, 0x44, 0x44, 0x38,// o
|
||||||
|
0x7C, 0x14, 0x14, 0x14, 0x08,// p
|
||||||
|
0x08, 0x14, 0x14, 0x18, 0x7C,// q
|
||||||
|
0x7C, 0x08, 0x04, 0x04, 0x08,// r
|
||||||
|
0x48, 0x54, 0x54, 0x54, 0x20,// s
|
||||||
|
0x04, 0x3F, 0x44, 0x40, 0x20,// t
|
||||||
|
0x3C, 0x40, 0x40, 0x20, 0x7C,// u
|
||||||
|
0x1C, 0x20, 0x40, 0x20, 0x1C,// v
|
||||||
|
0x3C, 0x40, 0x30, 0x40, 0x3C,// w
|
||||||
|
0x44, 0x28, 0x10, 0x28, 0x44,// x
|
||||||
|
0x0C, 0x50, 0x50, 0x50, 0x3C,// y
|
||||||
|
0x44, 0x64, 0x54, 0x4C, 0x44,// z
|
||||||
|
0x00, 0x08, 0x36, 0x41, 0x00,// {
|
||||||
|
0x00, 0x00, 0x7F, 0x00, 0x00,// |
|
||||||
|
0x00, 0x41, 0x36, 0x08, 0x00,// }
|
||||||
|
0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
|
||||||
|
0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,116 @@
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Verdana28
|
||||||
|
*
|
||||||
|
* created with FontCreator
|
||||||
|
* written by F. Maximilian Thiele
|
||||||
|
*
|
||||||
|
* http://www.apetech.de/fontCreator
|
||||||
|
* me@apetech.de
|
||||||
|
*
|
||||||
|
* File Name : Verdana_digits_24
|
||||||
|
* Date : 01.05.2008
|
||||||
|
* Font size in bytes : 3833
|
||||||
|
* Font width : 10
|
||||||
|
* Font height : 24
|
||||||
|
* Font first char : 48
|
||||||
|
* Font last char : 59
|
||||||
|
* Font used chars : 11
|
||||||
|
*
|
||||||
|
* The font data are defined as
|
||||||
|
*
|
||||||
|
* struct _FONT_ {
|
||||||
|
* uint16_t font_Size_in_Bytes_over_all_included_Size_it_self;
|
||||||
|
* uint8_t font_Width_in_Pixel_for_fixed_drawing;
|
||||||
|
* uint8_t font_Height_in_Pixel_for_all_characters;
|
||||||
|
* unit8_t font_First_Char;
|
||||||
|
* uint8_t font_Char_Count;
|
||||||
|
*
|
||||||
|
* uint8_t font_Char_Widths[font_Last_Char - font_First_Char +1];
|
||||||
|
* // for each character the separate width in pixels,
|
||||||
|
* // characters < 128 have an implicit virtual right empty
|
||||||
|
row
|
||||||
|
*
|
||||||
|
* uint8_t font_data[];
|
||||||
|
* // bit field of all characters
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
#ifndef VERDANA24_H
|
||||||
|
#define VERDANA24_H
|
||||||
|
|
||||||
|
#define VERDANA24_WIDTH 10
|
||||||
|
#define VERDANA24_HEIGHT 24
|
||||||
|
|
||||||
|
static const uint8_t Verdana24[] PROGMEM = {
|
||||||
|
0x0E, 0xF9, // size
|
||||||
|
0x0A, // width
|
||||||
|
0x18, // height
|
||||||
|
0x30, // first char
|
||||||
|
0x0B, // char count
|
||||||
|
|
||||||
|
// char widths
|
||||||
|
0x10, 0x0D, 0x0F, 0x0F, 0x11, 0x0F, 0x10, 0x10, 0x10, 0x10,
|
||||||
|
0x04,
|
||||||
|
|
||||||
|
// font data
|
||||||
|
0x80, 0xF0, 0xFC, 0x7E, 0x0E, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x1E,
|
||||||
|
0x7E, 0xFC, 0xF0, 0x80, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x0F, 0x3F, 0x7E,
|
||||||
|
0x70, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xF0, 0x70, 0x7E, 0x3F, 0x0F, 0x01, //48
|
||||||
|
|
||||||
|
0x38, 0x38, 0x38, 0x38, 0x3C, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xFF, 0xFF, 0xFF, 0xE0, 0xE0,
|
||||||
|
0xE0, 0xE0, 0xE0, // 49
|
||||||
|
|
||||||
|
0x00, 0x1E, 0x0E, 0x0E, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x1E, 0xFE,
|
||||||
|
0xFC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0,
|
||||||
|
0x78, 0x3E, 0x1F, 0x07, 0x01, 0x00, 0xF0, 0xF8, 0xFC, 0xFE, 0xEF, 0xE7,
|
||||||
|
0xE3, 0xE1, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, // 50
|
||||||
|
|
||||||
|
0x00, 0x1E, 0x0E, 0x0E, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x1E,
|
||||||
|
0xFE, 0xFC, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x1C, 0x1C,
|
||||||
|
0x1E, 0x36, 0x77, 0xF3, 0xE1, 0xC0, 0x78, 0x70, 0x70, 0xF0, 0xE0, 0xE0,
|
||||||
|
0xE0, 0xE0, 0xE0, 0xF0, 0x70, 0x78, 0x3F, 0x1F, 0x0F, // 51
|
||||||
|
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xF0, 0xF8, 0x7C, 0x1E, 0xFF,
|
||||||
|
0xFF, 0xFF, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0xFC, 0xFE, 0xDF, 0xC7, 0xC3,
|
||||||
|
0xC1, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0xC0, 0xC0, 0xC0, 0x01, 0x01,
|
||||||
|
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xFF, 0xFF,
|
||||||
|
0x01, 0x01, 0x01, // 52
|
||||||
|
|
||||||
|
0x00, 0xFF, 0xFF, 0xFF, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
||||||
|
0x07, 0x07, 0x07, 0x00, 0x1F, 0x1F, 0x0F, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E,
|
||||||
|
0x1E, 0x1C, 0x3C, 0xF8, 0xF8, 0xE0, 0x78, 0x70, 0x70, 0xF0, 0xE0, 0xE0,
|
||||||
|
0xE0, 0xE0, 0xE0, 0xF0, 0x70, 0x7C, 0x3F, 0x1F, 0x07, // 53
|
||||||
|
|
||||||
|
0x00, 0xC0, 0xF0, 0xF8, 0x3C, 0x1E, 0x0E, 0x0E, 0x07, 0x07, 0x07, 0x07,
|
||||||
|
0x07, 0x0F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x1C, 0x1C, 0x0E, 0x0E, 0x0E,
|
||||||
|
0x0E, 0x0E, 0x0E, 0x1E, 0x3C, 0xF8, 0xF8, 0xE0, 0x03, 0x0F, 0x3F, 0x7C,
|
||||||
|
0x78, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x70, 0x78, 0x3F, 0x1F, 0x07, //54
|
||||||
|
|
||||||
|
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x87,
|
||||||
|
0xE7, 0xFF, 0x7F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
|
||||||
|
0xF0, 0xFC, 0x3F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0,
|
||||||
|
0xF8, 0xFC, 0x3F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //55
|
||||||
|
|
||||||
|
0x00, 0xF0, 0xFC, 0xFE, 0x0E, 0x0F, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x1E,
|
||||||
|
0xFE, 0xFC, 0xF8, 0x00, 0x80, 0xE0, 0xF3, 0x77, 0x1F, 0x0E, 0x0E, 0x0C,
|
||||||
|
0x1C, 0x1C, 0x1C, 0x3E, 0x77, 0xF3, 0xE0, 0x80, 0x0F, 0x1F, 0x3F, 0x78,
|
||||||
|
0x70, 0xF0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x70, 0x78, 0x3F, 0x1F, 0x0F, //56
|
||||||
|
|
||||||
|
0xE0, 0xF8, 0xFC, 0x1E, 0x0E, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0F, 0x1E,
|
||||||
|
0x3E, 0xFC, 0xF0, 0xC0, 0x07, 0x1F, 0x1F, 0x3C, 0x78, 0x70, 0x70, 0x70,
|
||||||
|
0x70, 0x70, 0x70, 0x38, 0x38, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xF0, 0xE0,
|
||||||
|
0xE0, 0xE0, 0xE0, 0xE0, 0x70, 0x70, 0x78, 0x3C, 0x1F, 0x0F, 0x03, 0x00, //57
|
||||||
|
|
||||||
|
0xC0, 0xC0, 0xC0, 0xC0, 0x03, 0x03, 0x03, 0x03, 0xF0, 0xF0, 0xF0, 0xF0 // 58
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,18 @@
|
||||||
|
/*
|
||||||
|
* allFonts.h font header for GLCD library
|
||||||
|
* The fonts listed below will be available in a sketch if this file is included
|
||||||
|
*
|
||||||
|
* If you create your own fonts you can add the header to this file
|
||||||
|
*
|
||||||
|
* Note that the build environment only holds a font in Flash if its selected
|
||||||
|
* so there is no penalty to including a font file here if its not used
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "SystemFont5x7.h" // system font
|
||||||
|
#include "Arial14.h" // proportional font
|
||||||
|
#include "Arial_bold_14.h" // Bold proportional font
|
||||||
|
#include "Corsiva_12.h"
|
||||||
|
#include "Verdana_digits_24.h" // large proportional font - numerals only
|
||||||
|
#include "fixednums7x15.h" // fixed width font - numerals only
|
||||||
|
#include "fixednums8x16.h" // fixed width font - numerals only
|
||||||
|
#include "fixednums15x31.h" // fixed width font - numerals only
|
|
@ -0,0 +1,127 @@
|
||||||
|
/*
|
||||||
|
* Fixed width font for numbers
|
||||||
|
*
|
||||||
|
* This font is very useful when using overstrike as all characters & numbers
|
||||||
|
* are all the same width.
|
||||||
|
*
|
||||||
|
* This font also contains a few special characters that are nice for certain applications
|
||||||
|
* like clocks, signed values or decimal point values.
|
||||||
|
*
|
||||||
|
* The rendering code normally inserts a pad pixel so this size allows the font to fit
|
||||||
|
* perfectly on 32 and 64 tall glcd displays.
|
||||||
|
*
|
||||||
|
* Font has also been squeezed to 15 pixels wide for better alignment on 128 & 192 pixel displays.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FIXEDNUMS15x31_H
|
||||||
|
#define FIXEDNUMS15x31_H
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
|
||||||
|
static const uint8_t fixednums15x31[] PROGMEM = {
|
||||||
|
0x0, 0x0, // size of zero indicates fixed width font
|
||||||
|
15, // width
|
||||||
|
31, // height
|
||||||
|
'+', // first char (48)
|
||||||
|
16, // char count
|
||||||
|
// char '+'
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xfc, 0xfc, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char ','
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xcf, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char '-'
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char '.'
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char '/'
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xff, 0xff, 0x0f,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xff, 0xff, 0x0f, 0x0f, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0xf0, 0xf0, 0xff, 0xff, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char '0'
|
||||||
|
0xf0, 0xf0, 0xfc, 0xfc, 0x0f, 0x0f, 0x03, 0x03, 0x03, 0xcf, 0xcf, 0xfc, 0xfc, 0xf0, 0xf0,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xc0, 0xc0, 0x3c, 0x3f, 0x03, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0x3c, 0x3c, 0x03, 0x03, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0x00, 0x00, 0x03, 0x03, 0x0f, 0x0f, 0x0c, 0x0c, 0x0c, 0x0f, 0x0f, 0x03, 0x03, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char '1'
|
||||||
|
0x30, 0x30, 0x30, 0x30, 0x3c, 0x3c, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0f, 0x0f, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
|
||||||
|
|
||||||
|
// char '2'
|
||||||
|
0xf0, 0xf0, 0xfc, 0xfc, 0x0f, 0x0f, 0x03, 0x03, 0x03, 0x03, 0x0f, 0xff, 0xfc, 0xfc, 0xf0,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xf0, 0xff, 0x3f, 0x3f, 0x0f,
|
||||||
|
0xc0, 0xc0, 0xf0, 0xf0, 0x3c, 0x3c, 0x0f, 0x0f, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x0f, 0x0f, 0x0f, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
|
||||||
|
|
||||||
|
// char '3'
|
||||||
|
0xf0, 0xf0, 0xfc, 0xfc, 0x0f, 0x0f, 0x03, 0x03, 0x03, 0x03, 0x0f, 0x1f, 0xfc, 0xfc, 0xf0,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xff, 0xdf, 0x8f,
|
||||||
|
0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff,
|
||||||
|
0x00, 0x00, 0x03, 0x03, 0x0f, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0f, 0x03, 0x03, 0x00,
|
||||||
|
|
||||||
|
// char '4'
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xff, 0xff, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0xfc, 0xfc, 0xff, 0xff, 0x03, 0x03, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xc0, 0xc0,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char '5'
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
|
||||||
|
0x0f, 0x0f, 0x0f, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0xfc, 0xf0, 0xf0, 0xc0,
|
||||||
|
0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0x00, 0x00, 0x03, 0x03, 0x0f, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0f, 0x03, 0x03, 0x00,
|
||||||
|
|
||||||
|
// char '6'
|
||||||
|
0x00, 0x00, 0xc0, 0xc0, 0xf0, 0xf0, 0x3c, 0x3c, 0x0f, 0x0f, 0x03, 0x03, 0x03, 0x03, 0x03,
|
||||||
|
0xfc, 0xfc, 0xff, 0xff, 0x33, 0x33, 0x30, 0x30, 0x30, 0x30, 0xf0, 0xf0, 0xc0, 0xc0, 0x00,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0x00, 0x00, 0x03, 0x03, 0x0f, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0f, 0x03, 0x03, 0x00,
|
||||||
|
|
||||||
|
// char '7'
|
||||||
|
0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xff, 0xff, 0x3f, 0x3f, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xff, 0xff, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char '8'
|
||||||
|
0xf0, 0xf0, 0xfc, 0xfc, 0x0f, 0x0f, 0x03, 0x03, 0x03, 0x0f, 0x0f, 0xfc, 0xfc, 0xf0, 0xf0,
|
||||||
|
0x03, 0x03, 0xcf, 0xcf, 0xfc, 0xfc, 0x30, 0x30, 0x30, 0xfc, 0xfc, 0xcf, 0xcf, 0x03, 0x03,
|
||||||
|
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0x00, 0x00, 0x03, 0x03, 0x0f, 0x0f, 0x0c, 0x0c, 0x0c, 0x0f, 0x0f, 0x03, 0x03, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char '9'
|
||||||
|
0xe0, 0xf0, 0xfc, 0xfc, 0x0f, 0x0f, 0x03, 0x03, 0x03, 0x0f, 0x0f, 0xfc, 0xfc, 0xf0, 0xe0,
|
||||||
|
0x07, 0x0f, 0x3f, 0x3f, 0xf0, 0xf0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xff, 0xff, 0xff,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xfc, 0xfc, 0x3f, 0x3f, 0x03,
|
||||||
|
0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0f, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char ':'
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,92 @@
|
||||||
|
/*
|
||||||
|
* Fixed width font for numbers
|
||||||
|
*
|
||||||
|
* This font is very useful when using overstrike as all characters & numbers
|
||||||
|
* are all the same width.
|
||||||
|
*
|
||||||
|
* This font also contains a few special characters that are nice for certain applications
|
||||||
|
* like clocks, signed values or decimal point values.
|
||||||
|
*
|
||||||
|
* When rendering code inserts a pad pixel this size allows the font to fit
|
||||||
|
* perfectly on 32 and 64 tall glcd displays as well as 128 wide displays.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FIXEDNUMS7x15_H
|
||||||
|
#define FIXEDNUMS7x15_H
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
|
||||||
|
static const uint8_t fixednums7x15[] PROGMEM = {
|
||||||
|
0x0, 0x0, // size of zero indicates fixed width font
|
||||||
|
7, // width
|
||||||
|
15, // height
|
||||||
|
'+', // first char (48)
|
||||||
|
16, // char count
|
||||||
|
// char '+'
|
||||||
|
0x00, 0x80, 0x80, 0xe0, 0xe0, 0x80, 0x80,
|
||||||
|
0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char ','
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x58, 0x38, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char '-'
|
||||||
|
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char '.'
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char '/'
|
||||||
|
0x00, 0x00, 0x00, 0xc0, 0xf0, 0x3c, 0x0f,
|
||||||
|
0x00, 0x3c, 0x0f, 0x03, 0x00, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char '0'
|
||||||
|
0xfc, 0xfe, 0x03, 0xe1, 0x1b, 0xfe, 0xfc,
|
||||||
|
0x0f, 0x1f, 0x36, 0x21, 0x30, 0x1f, 0x0f,
|
||||||
|
|
||||||
|
// char '1'
|
||||||
|
0x04, 0x04, 0x06, 0xff, 0xff, 0x00, 0x00,
|
||||||
|
0x20, 0x20, 0x20, 0x3f, 0x3f, 0x20, 0x20,
|
||||||
|
|
||||||
|
// char '2'
|
||||||
|
0x0c, 0x0e, 0x03, 0x01, 0x81, 0xfe, 0x7c,
|
||||||
|
0x38, 0x3c, 0x26, 0x23, 0x21, 0x20, 0x20,
|
||||||
|
|
||||||
|
// char '3'
|
||||||
|
0x0c, 0x0e, 0x43, 0x41, 0x43, 0xfe, 0xbc,
|
||||||
|
0x0c, 0x1c, 0x30, 0x20, 0x30, 0x1f, 0x0f,
|
||||||
|
|
||||||
|
// char '4'
|
||||||
|
0x00, 0xe0, 0xfc, 0x1f, 0x83, 0x80, 0x00,
|
||||||
|
0x0f, 0x0f, 0x08, 0x08, 0x3f, 0x3f, 0x08,
|
||||||
|
|
||||||
|
// char '5'
|
||||||
|
0x3f, 0x3f, 0x21, 0x21, 0x61, 0xe1, 0x81,
|
||||||
|
0x0c, 0x1c, 0x30, 0x20, 0x30, 0x3f, 0x0f,
|
||||||
|
|
||||||
|
// char '6'
|
||||||
|
0xe0, 0xf8, 0x5c, 0x46, 0xc3, 0xc1, 0x01,
|
||||||
|
0x0f, 0x1f, 0x30, 0x20, 0x30, 0x3f, 0x0f,
|
||||||
|
|
||||||
|
// char '7'
|
||||||
|
0x01, 0x01, 0x01, 0x81, 0xf1, 0x7f, 0x0f,
|
||||||
|
0x00, 0x00, 0x3c, 0x3f, 0x03, 0x00, 0x00,
|
||||||
|
|
||||||
|
// char '8'
|
||||||
|
0x1c, 0xbe, 0xe3, 0x41, 0xe3, 0xbe, 0x1c,
|
||||||
|
0x0f, 0x1f, 0x30, 0x20, 0x30, 0x1f, 0x0f,
|
||||||
|
|
||||||
|
// char '9'
|
||||||
|
0x3c, 0x7e, 0xc3, 0x81, 0x81, 0xfe, 0xfc,
|
||||||
|
0x20, 0x30, 0x38, 0x0c, 0x07, 0x03, 0x00,
|
||||||
|
|
||||||
|
// char ':'
|
||||||
|
0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00,
|
||||||
|
|
||||||
|
};
|
||||||
|
#endif
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* Fixed width font file for numbers only.
|
||||||
|
*
|
||||||
|
* This font is very useful when using overstrike as all characters & numbers
|
||||||
|
* are all the same width.
|
||||||
|
*
|
||||||
|
* This font file can be used when only numbers are needed.
|
||||||
|
*
|
||||||
|
* This font also contains a few special characters that are nice for certain applications
|
||||||
|
* like clocks, signed values or decimal point values.
|
||||||
|
*
|
||||||
|
* Font is really 16 tall but this file is set to indicate 15 to allow it to line up with the lcd page size.
|
||||||
|
* It works as the the bottom row in the glyph is whitespace anyway.
|
||||||
|
* The rendering code normally inserts a pad pixel so this size allows additional rows
|
||||||
|
* on 32 and 64 tall glcd displays.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FIXEDNUMS8x16_H
|
||||||
|
#define FIXEDNUMS8x16_H
|
||||||
|
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <avr/pgmspace.h>
|
||||||
|
|
||||||
|
|
||||||
|
static const uint8_t fixednums8x16[] PROGMEM = {
|
||||||
|
0x0, 0x0, // size of zero indicates fixed width font
|
||||||
|
8, // width
|
||||||
|
15, // height
|
||||||
|
'+', // first char (48)
|
||||||
|
16, // char count
|
||||||
|
|
||||||
|
0x80, 0x80, 0x80, 0xe0, 0xe0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, // char '+'
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x70, 0x00, 0x00, 0x00, // char ','
|
||||||
|
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // char '-'
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, // char '.'
|
||||||
|
0x00, 0x00, 0x00, 0xc0, 0xf0, 0x3c, 0x0f, 0x03, 0x30, 0x3c, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, // char '/'
|
||||||
|
0xfc, 0xfe, 0x03, 0x81, 0x61, 0x1b, 0xfe, 0xfc, 0x0f, 0x1f, 0x36, 0x21, 0x20, 0x30, 0x1f, 0x0f, // char '0'
|
||||||
|
0x04, 0x04, 0x06, 0xff, 0xff, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x3f, 0x3f, 0x20, 0x20, 0x20, // char '1'
|
||||||
|
0x0c, 0x0e, 0x03, 0x01, 0x81, 0xc3, 0x7e, 0x3c, 0x38, 0x3c, 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, // char '2'
|
||||||
|
0x0c, 0x0e, 0x43, 0x41, 0x41, 0x43, 0xfe, 0xbc, 0x0c, 0x1c, 0x30, 0x20, 0x20, 0x30, 0x1f, 0x0f, // char '3'
|
||||||
|
0x00, 0xe0, 0xfc, 0x1f, 0x83, 0x80, 0x00, 0x00, 0x0f, 0x0f, 0x08, 0x08, 0x3f, 0x3f, 0x08, 0x08, // char '4'
|
||||||
|
0x3f, 0x3f, 0x21, 0x21, 0x21, 0x61, 0xc1, 0x81, 0x0c, 0x1c, 0x30, 0x20, 0x20, 0x30, 0x1f, 0x0f, // char '5'
|
||||||
|
0xe0, 0xf8, 0x5c, 0x46, 0x43, 0xc1, 0x81, 0x01, 0x0f, 0x1f, 0x30, 0x20, 0x20, 0x30, 0x1f, 0x0f, // char '6'
|
||||||
|
0x01, 0x01, 0x01, 0x01, 0x81, 0xf1, 0x7f, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x3f, 0x03, 0x00, 0x00, // char '7'
|
||||||
|
0x1c, 0xbe, 0xe3, 0x41, 0x41, 0xe3, 0xbe, 0x1c, 0x0f, 0x1f, 0x30, 0x20, 0x20, 0x30, 0x1f, 0x0f, // char '8'
|
||||||
|
0x3c, 0x7e, 0xc3, 0x81, 0x81, 0x83, 0xfe, 0xfc, 0x20, 0x20, 0x20, 0x30, 0x18, 0x0e, 0x07, 0x01, // char '9'
|
||||||
|
0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00 // char ':
|
||||||
|
};
|
||||||
|
#endif
|
|
@ -0,0 +1,263 @@
|
||||||
|
#ifndef FONT5X7_H
|
||||||
|
#define FONT5X7_H
|
||||||
|
|
||||||
|
// Standard ASCII 5x7 font
|
||||||
|
|
||||||
|
static const unsigned char font[] = {
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x3E, 0x5B, 0x4F, 0x5B, 0x3E,
|
||||||
|
0x3E, 0x6B, 0x4F, 0x6B, 0x3E,
|
||||||
|
0x1C, 0x3E, 0x7C, 0x3E, 0x1C,
|
||||||
|
0x18, 0x3C, 0x7E, 0x3C, 0x18,
|
||||||
|
0x1C, 0x57, 0x7D, 0x57, 0x1C,
|
||||||
|
0x1C, 0x5E, 0x7F, 0x5E, 0x1C,
|
||||||
|
0x00, 0x18, 0x3C, 0x18, 0x00,
|
||||||
|
0xFF, 0xE7, 0xC3, 0xE7, 0xFF,
|
||||||
|
0x00, 0x18, 0x24, 0x18, 0x00,
|
||||||
|
0xFF, 0xE7, 0xDB, 0xE7, 0xFF,
|
||||||
|
0x30, 0x48, 0x3A, 0x06, 0x0E,
|
||||||
|
0x26, 0x29, 0x79, 0x29, 0x26,
|
||||||
|
0x40, 0x7F, 0x05, 0x05, 0x07,
|
||||||
|
0x40, 0x7F, 0x05, 0x25, 0x3F,
|
||||||
|
0x5A, 0x3C, 0xE7, 0x3C, 0x5A,
|
||||||
|
0x7F, 0x3E, 0x1C, 0x1C, 0x08,
|
||||||
|
0x08, 0x1C, 0x1C, 0x3E, 0x7F,
|
||||||
|
0x14, 0x22, 0x7F, 0x22, 0x14,
|
||||||
|
0x5F, 0x5F, 0x00, 0x5F, 0x5F,
|
||||||
|
0x06, 0x09, 0x7F, 0x01, 0x7F,
|
||||||
|
0x00, 0x66, 0x89, 0x95, 0x6A,
|
||||||
|
0x60, 0x60, 0x60, 0x60, 0x60,
|
||||||
|
0x94, 0xA2, 0xFF, 0xA2, 0x94,
|
||||||
|
0x08, 0x04, 0x7E, 0x04, 0x08,
|
||||||
|
0x10, 0x20, 0x7E, 0x20, 0x10,
|
||||||
|
0x08, 0x08, 0x2A, 0x1C, 0x08,
|
||||||
|
0x08, 0x1C, 0x2A, 0x08, 0x08,
|
||||||
|
0x1E, 0x10, 0x10, 0x10, 0x10,
|
||||||
|
0x0C, 0x1E, 0x0C, 0x1E, 0x0C,
|
||||||
|
0x30, 0x38, 0x3E, 0x38, 0x30,
|
||||||
|
0x06, 0x0E, 0x3E, 0x0E, 0x06,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x5F, 0x00, 0x00,
|
||||||
|
0x00, 0x07, 0x00, 0x07, 0x00,
|
||||||
|
0x14, 0x7F, 0x14, 0x7F, 0x14,
|
||||||
|
0x24, 0x2A, 0x7F, 0x2A, 0x12,
|
||||||
|
0x23, 0x13, 0x08, 0x64, 0x62,
|
||||||
|
0x36, 0x49, 0x56, 0x20, 0x50,
|
||||||
|
0x00, 0x08, 0x07, 0x03, 0x00,
|
||||||
|
0x00, 0x1C, 0x22, 0x41, 0x00,
|
||||||
|
0x00, 0x41, 0x22, 0x1C, 0x00,
|
||||||
|
0x2A, 0x1C, 0x7F, 0x1C, 0x2A,
|
||||||
|
0x08, 0x08, 0x3E, 0x08, 0x08,
|
||||||
|
0x00, 0x80, 0x70, 0x30, 0x00,
|
||||||
|
0x08, 0x08, 0x08, 0x08, 0x08,
|
||||||
|
0x00, 0x00, 0x60, 0x60, 0x00,
|
||||||
|
0x20, 0x10, 0x08, 0x04, 0x02,
|
||||||
|
0x3E, 0x51, 0x49, 0x45, 0x3E,
|
||||||
|
0x00, 0x42, 0x7F, 0x40, 0x00,
|
||||||
|
0x72, 0x49, 0x49, 0x49, 0x46,
|
||||||
|
0x21, 0x41, 0x49, 0x4D, 0x33,
|
||||||
|
0x18, 0x14, 0x12, 0x7F, 0x10,
|
||||||
|
0x27, 0x45, 0x45, 0x45, 0x39,
|
||||||
|
0x3C, 0x4A, 0x49, 0x49, 0x31,
|
||||||
|
0x41, 0x21, 0x11, 0x09, 0x07,
|
||||||
|
0x36, 0x49, 0x49, 0x49, 0x36,
|
||||||
|
0x46, 0x49, 0x49, 0x29, 0x1E,
|
||||||
|
0x00, 0x00, 0x14, 0x00, 0x00,
|
||||||
|
0x00, 0x40, 0x34, 0x00, 0x00,
|
||||||
|
0x00, 0x08, 0x14, 0x22, 0x41,
|
||||||
|
0x14, 0x14, 0x14, 0x14, 0x14,
|
||||||
|
0x00, 0x41, 0x22, 0x14, 0x08,
|
||||||
|
0x02, 0x01, 0x59, 0x09, 0x06,
|
||||||
|
0x3E, 0x41, 0x5D, 0x59, 0x4E,
|
||||||
|
0x7C, 0x12, 0x11, 0x12, 0x7C,
|
||||||
|
0x7F, 0x49, 0x49, 0x49, 0x36,
|
||||||
|
0x3E, 0x41, 0x41, 0x41, 0x22,
|
||||||
|
0x7F, 0x41, 0x41, 0x41, 0x3E,
|
||||||
|
0x7F, 0x49, 0x49, 0x49, 0x41,
|
||||||
|
0x7F, 0x09, 0x09, 0x09, 0x01,
|
||||||
|
0x3E, 0x41, 0x41, 0x51, 0x73,
|
||||||
|
0x7F, 0x08, 0x08, 0x08, 0x7F,
|
||||||
|
0x00, 0x41, 0x7F, 0x41, 0x00,
|
||||||
|
0x20, 0x40, 0x41, 0x3F, 0x01,
|
||||||
|
0x7F, 0x08, 0x14, 0x22, 0x41,
|
||||||
|
0x7F, 0x40, 0x40, 0x40, 0x40,
|
||||||
|
0x7F, 0x02, 0x1C, 0x02, 0x7F,
|
||||||
|
0x7F, 0x04, 0x08, 0x10, 0x7F,
|
||||||
|
0x3E, 0x41, 0x41, 0x41, 0x3E,
|
||||||
|
0x7F, 0x09, 0x09, 0x09, 0x06,
|
||||||
|
0x3E, 0x41, 0x51, 0x21, 0x5E,
|
||||||
|
0x7F, 0x09, 0x19, 0x29, 0x46,
|
||||||
|
0x26, 0x49, 0x49, 0x49, 0x32,
|
||||||
|
0x03, 0x01, 0x7F, 0x01, 0x03,
|
||||||
|
0x3F, 0x40, 0x40, 0x40, 0x3F,
|
||||||
|
0x1F, 0x20, 0x40, 0x20, 0x1F,
|
||||||
|
0x3F, 0x40, 0x38, 0x40, 0x3F,
|
||||||
|
0x63, 0x14, 0x08, 0x14, 0x63,
|
||||||
|
0x03, 0x04, 0x78, 0x04, 0x03,
|
||||||
|
0x61, 0x59, 0x49, 0x4D, 0x43,
|
||||||
|
0x00, 0x7F, 0x41, 0x41, 0x41,
|
||||||
|
0x02, 0x04, 0x08, 0x10, 0x20,
|
||||||
|
0x00, 0x41, 0x41, 0x41, 0x7F,
|
||||||
|
0x04, 0x02, 0x01, 0x02, 0x04,
|
||||||
|
0x40, 0x40, 0x40, 0x40, 0x40,
|
||||||
|
0x00, 0x03, 0x07, 0x08, 0x00,
|
||||||
|
0x20, 0x54, 0x54, 0x78, 0x40,
|
||||||
|
0x7F, 0x28, 0x44, 0x44, 0x38,
|
||||||
|
0x38, 0x44, 0x44, 0x44, 0x28,
|
||||||
|
0x38, 0x44, 0x44, 0x28, 0x7F,
|
||||||
|
0x38, 0x54, 0x54, 0x54, 0x18,
|
||||||
|
0x00, 0x08, 0x7E, 0x09, 0x02,
|
||||||
|
0x18, 0xA4, 0xA4, 0x9C, 0x78,
|
||||||
|
0x7F, 0x08, 0x04, 0x04, 0x78,
|
||||||
|
0x00, 0x44, 0x7D, 0x40, 0x00,
|
||||||
|
0x20, 0x40, 0x40, 0x3D, 0x00,
|
||||||
|
0x7F, 0x10, 0x28, 0x44, 0x00,
|
||||||
|
0x00, 0x41, 0x7F, 0x40, 0x00,
|
||||||
|
0x7C, 0x04, 0x78, 0x04, 0x78,
|
||||||
|
0x7C, 0x08, 0x04, 0x04, 0x78,
|
||||||
|
0x38, 0x44, 0x44, 0x44, 0x38,
|
||||||
|
0xFC, 0x18, 0x24, 0x24, 0x18,
|
||||||
|
0x18, 0x24, 0x24, 0x18, 0xFC,
|
||||||
|
0x7C, 0x08, 0x04, 0x04, 0x08,
|
||||||
|
0x48, 0x54, 0x54, 0x54, 0x24,
|
||||||
|
0x04, 0x04, 0x3F, 0x44, 0x24,
|
||||||
|
0x3C, 0x40, 0x40, 0x20, 0x7C,
|
||||||
|
0x1C, 0x20, 0x40, 0x20, 0x1C,
|
||||||
|
0x3C, 0x40, 0x30, 0x40, 0x3C,
|
||||||
|
0x44, 0x28, 0x10, 0x28, 0x44,
|
||||||
|
0x4C, 0x90, 0x90, 0x90, 0x7C,
|
||||||
|
0x44, 0x64, 0x54, 0x4C, 0x44,
|
||||||
|
0x00, 0x08, 0x36, 0x41, 0x00,
|
||||||
|
0x00, 0x00, 0x77, 0x00, 0x00,
|
||||||
|
0x00, 0x41, 0x36, 0x08, 0x00,
|
||||||
|
0x02, 0x01, 0x02, 0x04, 0x02,
|
||||||
|
0x3C, 0x26, 0x23, 0x26, 0x3C,
|
||||||
|
0x1E, 0xA1, 0xA1, 0x61, 0x12,
|
||||||
|
0x3A, 0x40, 0x40, 0x20, 0x7A,
|
||||||
|
0x38, 0x54, 0x54, 0x55, 0x59,
|
||||||
|
0x21, 0x55, 0x55, 0x79, 0x41,
|
||||||
|
0x21, 0x54, 0x54, 0x78, 0x41,
|
||||||
|
0x21, 0x55, 0x54, 0x78, 0x40,
|
||||||
|
0x20, 0x54, 0x55, 0x79, 0x40,
|
||||||
|
0x0C, 0x1E, 0x52, 0x72, 0x12,
|
||||||
|
0x39, 0x55, 0x55, 0x55, 0x59,
|
||||||
|
0x39, 0x54, 0x54, 0x54, 0x59,
|
||||||
|
0x39, 0x55, 0x54, 0x54, 0x58,
|
||||||
|
0x00, 0x00, 0x45, 0x7C, 0x41,
|
||||||
|
0x00, 0x02, 0x45, 0x7D, 0x42,
|
||||||
|
0x00, 0x01, 0x45, 0x7C, 0x40,
|
||||||
|
0xF0, 0x29, 0x24, 0x29, 0xF0,
|
||||||
|
0xF0, 0x28, 0x25, 0x28, 0xF0,
|
||||||
|
0x7C, 0x54, 0x55, 0x45, 0x00,
|
||||||
|
0x20, 0x54, 0x54, 0x7C, 0x54,
|
||||||
|
0x7C, 0x0A, 0x09, 0x7F, 0x49,
|
||||||
|
0x32, 0x49, 0x49, 0x49, 0x32,
|
||||||
|
0x32, 0x48, 0x48, 0x48, 0x32,
|
||||||
|
0x32, 0x4A, 0x48, 0x48, 0x30,
|
||||||
|
0x3A, 0x41, 0x41, 0x21, 0x7A,
|
||||||
|
0x3A, 0x42, 0x40, 0x20, 0x78,
|
||||||
|
0x00, 0x9D, 0xA0, 0xA0, 0x7D,
|
||||||
|
0x39, 0x44, 0x44, 0x44, 0x39,
|
||||||
|
0x3D, 0x40, 0x40, 0x40, 0x3D,
|
||||||
|
0x3C, 0x24, 0xFF, 0x24, 0x24,
|
||||||
|
0x48, 0x7E, 0x49, 0x43, 0x66,
|
||||||
|
0x2B, 0x2F, 0xFC, 0x2F, 0x2B,
|
||||||
|
0xFF, 0x09, 0x29, 0xF6, 0x20,
|
||||||
|
0xC0, 0x88, 0x7E, 0x09, 0x03,
|
||||||
|
0x20, 0x54, 0x54, 0x79, 0x41,
|
||||||
|
0x00, 0x00, 0x44, 0x7D, 0x41,
|
||||||
|
0x30, 0x48, 0x48, 0x4A, 0x32,
|
||||||
|
0x38, 0x40, 0x40, 0x22, 0x7A,
|
||||||
|
0x00, 0x7A, 0x0A, 0x0A, 0x72,
|
||||||
|
0x7D, 0x0D, 0x19, 0x31, 0x7D,
|
||||||
|
0x26, 0x29, 0x29, 0x2F, 0x28,
|
||||||
|
0x26, 0x29, 0x29, 0x29, 0x26,
|
||||||
|
0x30, 0x48, 0x4D, 0x40, 0x20,
|
||||||
|
0x38, 0x08, 0x08, 0x08, 0x08,
|
||||||
|
0x08, 0x08, 0x08, 0x08, 0x38,
|
||||||
|
0x2F, 0x10, 0xC8, 0xAC, 0xBA,
|
||||||
|
0x2F, 0x10, 0x28, 0x34, 0xFA,
|
||||||
|
0x00, 0x00, 0x7B, 0x00, 0x00,
|
||||||
|
0x08, 0x14, 0x2A, 0x14, 0x22,
|
||||||
|
0x22, 0x14, 0x2A, 0x14, 0x08,
|
||||||
|
0xAA, 0x00, 0x55, 0x00, 0xAA,
|
||||||
|
0xAA, 0x55, 0xAA, 0x55, 0xAA,
|
||||||
|
0x00, 0x00, 0x00, 0xFF, 0x00,
|
||||||
|
0x10, 0x10, 0x10, 0xFF, 0x00,
|
||||||
|
0x14, 0x14, 0x14, 0xFF, 0x00,
|
||||||
|
0x10, 0x10, 0xFF, 0x00, 0xFF,
|
||||||
|
0x10, 0x10, 0xF0, 0x10, 0xF0,
|
||||||
|
0x14, 0x14, 0x14, 0xFC, 0x00,
|
||||||
|
0x14, 0x14, 0xF7, 0x00, 0xFF,
|
||||||
|
0x00, 0x00, 0xFF, 0x00, 0xFF,
|
||||||
|
0x14, 0x14, 0xF4, 0x04, 0xFC,
|
||||||
|
0x14, 0x14, 0x17, 0x10, 0x1F,
|
||||||
|
0x10, 0x10, 0x1F, 0x10, 0x1F,
|
||||||
|
0x14, 0x14, 0x14, 0x1F, 0x00,
|
||||||
|
0x10, 0x10, 0x10, 0xF0, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x1F, 0x10,
|
||||||
|
0x10, 0x10, 0x10, 0x1F, 0x10,
|
||||||
|
0x10, 0x10, 0x10, 0xF0, 0x10,
|
||||||
|
0x00, 0x00, 0x00, 0xFF, 0x10,
|
||||||
|
0x10, 0x10, 0x10, 0x10, 0x10,
|
||||||
|
0x10, 0x10, 0x10, 0xFF, 0x10,
|
||||||
|
0x00, 0x00, 0x00, 0xFF, 0x14,
|
||||||
|
0x00, 0x00, 0xFF, 0x00, 0xFF,
|
||||||
|
0x00, 0x00, 0x1F, 0x10, 0x17,
|
||||||
|
0x00, 0x00, 0xFC, 0x04, 0xF4,
|
||||||
|
0x14, 0x14, 0x17, 0x10, 0x17,
|
||||||
|
0x14, 0x14, 0xF4, 0x04, 0xF4,
|
||||||
|
0x00, 0x00, 0xFF, 0x00, 0xF7,
|
||||||
|
0x14, 0x14, 0x14, 0x14, 0x14,
|
||||||
|
0x14, 0x14, 0xF7, 0x00, 0xF7,
|
||||||
|
0x14, 0x14, 0x14, 0x17, 0x14,
|
||||||
|
0x10, 0x10, 0x1F, 0x10, 0x1F,
|
||||||
|
0x14, 0x14, 0x14, 0xF4, 0x14,
|
||||||
|
0x10, 0x10, 0xF0, 0x10, 0xF0,
|
||||||
|
0x00, 0x00, 0x1F, 0x10, 0x1F,
|
||||||
|
0x00, 0x00, 0x00, 0x1F, 0x14,
|
||||||
|
0x00, 0x00, 0x00, 0xFC, 0x14,
|
||||||
|
0x00, 0x00, 0xF0, 0x10, 0xF0,
|
||||||
|
0x10, 0x10, 0xFF, 0x10, 0xFF,
|
||||||
|
0x14, 0x14, 0x14, 0xFF, 0x14,
|
||||||
|
0x10, 0x10, 0x10, 0x1F, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0xF0, 0x10,
|
||||||
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||||
|
0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
|
||||||
|
0xFF, 0xFF, 0xFF, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0xFF, 0xFF,
|
||||||
|
0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
|
||||||
|
0x38, 0x44, 0x44, 0x38, 0x44,
|
||||||
|
0x7C, 0x2A, 0x2A, 0x3E, 0x14,
|
||||||
|
0x7E, 0x02, 0x02, 0x06, 0x06,
|
||||||
|
0x02, 0x7E, 0x02, 0x7E, 0x02,
|
||||||
|
0x63, 0x55, 0x49, 0x41, 0x63,
|
||||||
|
0x38, 0x44, 0x44, 0x3C, 0x04,
|
||||||
|
0x40, 0x7E, 0x20, 0x1E, 0x20,
|
||||||
|
0x06, 0x02, 0x7E, 0x02, 0x02,
|
||||||
|
0x99, 0xA5, 0xE7, 0xA5, 0x99,
|
||||||
|
0x1C, 0x2A, 0x49, 0x2A, 0x1C,
|
||||||
|
0x4C, 0x72, 0x01, 0x72, 0x4C,
|
||||||
|
0x30, 0x4A, 0x4D, 0x4D, 0x30,
|
||||||
|
0x30, 0x48, 0x78, 0x48, 0x30,
|
||||||
|
0xBC, 0x62, 0x5A, 0x46, 0x3D,
|
||||||
|
0x3E, 0x49, 0x49, 0x49, 0x00,
|
||||||
|
0x7E, 0x01, 0x01, 0x01, 0x7E,
|
||||||
|
0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
|
||||||
|
0x44, 0x44, 0x5F, 0x44, 0x44,
|
||||||
|
0x40, 0x51, 0x4A, 0x44, 0x40,
|
||||||
|
0x40, 0x44, 0x4A, 0x51, 0x40,
|
||||||
|
0x00, 0x00, 0xFF, 0x01, 0x03,
|
||||||
|
0xE0, 0x80, 0xFF, 0x00, 0x00,
|
||||||
|
0x08, 0x08, 0x6B, 0x6B, 0x08,
|
||||||
|
0x36, 0x12, 0x36, 0x24, 0x36,
|
||||||
|
0x06, 0x0F, 0x09, 0x0F, 0x06,
|
||||||
|
0x00, 0x00, 0x18, 0x18, 0x00,
|
||||||
|
0x00, 0x00, 0x10, 0x10, 0x00,
|
||||||
|
0x30, 0x40, 0xFF, 0x01, 0x01,
|
||||||
|
0x00, 0x1F, 0x01, 0x01, 0x1E,
|
||||||
|
0x00, 0x19, 0x1D, 0x17, 0x12,
|
||||||
|
0x00, 0x3C, 0x3C, 0x3C, 0x3C,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
};
|
||||||
|
#endif // FONT5X7_H
|
|
@ -0,0 +1,38 @@
|
||||||
|
ILI9341_due KEYWORD1
|
||||||
|
ILI9341_due_gText KEYWORD1
|
||||||
|
ILI9341_BLACK LITERAL1
|
||||||
|
ILI9341_BLUE LITERAL1
|
||||||
|
ILI9341_RED LITERAL1
|
||||||
|
ILI9341_GREEN LITERAL1
|
||||||
|
ILI9341_CYAN LITERAL1
|
||||||
|
ILI9341_MAGENTA LITERAL1
|
||||||
|
ILI9341_YELLOW LITERAL1
|
||||||
|
ILI9341_WHITE LITERAL1
|
||||||
|
pushColor KEYWORD2
|
||||||
|
fillScreen KEYWORD2
|
||||||
|
drawPixel KEYWORD2
|
||||||
|
drawFastVLine KEYWORD2
|
||||||
|
drawFastHLine KEYWORD2
|
||||||
|
drawRect KEYWORD2
|
||||||
|
fillRect KEYWORD2
|
||||||
|
setRotation KEYWORD2
|
||||||
|
invertDisplay KEYWORD2
|
||||||
|
setAddrWindow KEYWORD2
|
||||||
|
color565 KEYWORD2
|
||||||
|
readcommand8 KEYWORD2
|
||||||
|
readPixel KEYWORD2
|
||||||
|
drawCircle KEYWORD2
|
||||||
|
fillCircle KEYWORD2
|
||||||
|
drawTriangle KEYWORD2
|
||||||
|
fillTriangle KEYWORD2
|
||||||
|
drawRoundRect KEYWORD2
|
||||||
|
fillRoundRect KEYWORD2
|
||||||
|
drawBitmap KEYWORD2
|
||||||
|
drawChar KEYWORD2
|
||||||
|
setCursor KEYWORD2
|
||||||
|
setTextColor KEYWORD2
|
||||||
|
setTextSize KEYWORD2
|
||||||
|
setTextWrap KEYWORD2
|
||||||
|
drawLine KEYWORD2
|
||||||
|
DefineArea KEYWORD2
|
||||||
|
SelectFont KEYWORD2
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
|
@ -0,0 +1,58 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{D2F086B2-74B5-4256-BCEE-719106D306F9}</ProjectGuid>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>BMP24toILI565</RootNamespace>
|
||||||
|
<AssemblyName>BMP24toILI565</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
|
||||||
|
<StartArguments>
|
||||||
|
</StartArguments>
|
||||||
|
</PropertyGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,20 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2012
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BMP24toILI565", "BMP24toILI565.csproj", "{D2F086B2-74B5-4256-BCEE-719106D306F9}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{D2F086B2-74B5-4256-BCEE-719106D306F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{D2F086B2-74B5-4256-BCEE-719106D306F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{D2F086B2-74B5-4256-BCEE-719106D306F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{D2F086B2-74B5-4256-BCEE-719106D306F9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -0,0 +1,210 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BMP24toILI565
|
||||||
|
{
|
||||||
|
internal class Program
|
||||||
|
{
|
||||||
|
static private FileStream rgb24file;
|
||||||
|
static private FileStream rgb16file;
|
||||||
|
static private int bmpWidth, bmpHeight; // W+H in pixels
|
||||||
|
static private int bmpDepth; // Bit depth (currently must be 24)
|
||||||
|
static private UInt32 bmpImageoffset; // Start of image data in file
|
||||||
|
static private int rowSize; // Not always = bmpWidth; may have padding
|
||||||
|
static private bool goodBmp = false; // Set to true on valid header parse
|
||||||
|
static private bool flip = true; // BMP is stored bottom-to-top
|
||||||
|
static private UInt16 w, h, row, col;
|
||||||
|
static private byte r, g, b;
|
||||||
|
static private long pos = 0, startTime;
|
||||||
|
static private bool first = true;
|
||||||
|
|
||||||
|
|
||||||
|
private static void Main(string[] args)
|
||||||
|
{
|
||||||
|
string codeBase = Assembly.GetExecutingAssembly().CodeBase;
|
||||||
|
string exeFilename = Path.GetFileName(codeBase);
|
||||||
|
|
||||||
|
if (args.Length == 0)
|
||||||
|
{
|
||||||
|
var bmpFiles = Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "*.bmp").ToList();
|
||||||
|
if (bmpFiles.Count == 0)
|
||||||
|
Console.WriteLine("\nNo .bmp files found.");
|
||||||
|
else
|
||||||
|
bmpFiles.ForEach(i => ConvertImage(i));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ConvertImage(args[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ConvertImage(string imageFilename)
|
||||||
|
{
|
||||||
|
if (File.Exists(imageFilename))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.WriteLine("\nConverting {0}...", imageFilename);
|
||||||
|
rgb24file = new FileStream(imageFilename, FileMode.Open);
|
||||||
|
if (rgb24file == null)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Could not open {0}", imageFilename);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rgb24file.Seek(0, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
if (read16(rgb24file) != 0x4D42)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Not a BMP file");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// BMP signature
|
||||||
|
Console.WriteLine("File size: {0}", read32(rgb24file));
|
||||||
|
read32(rgb24file); // Read & ignore creator bytes
|
||||||
|
bmpImageoffset = read32(rgb24file); // Start of image data
|
||||||
|
Console.WriteLine("Image Offset: {0}", bmpImageoffset);
|
||||||
|
// Read DIB header
|
||||||
|
Console.WriteLine("Header size: {0}", read32(rgb24file));
|
||||||
|
bmpWidth = (UInt16)read32(rgb24file);
|
||||||
|
bmpHeight = (UInt16)read32(rgb24file);
|
||||||
|
if (read16(rgb24file) != 1) // # planes -- must be '1'
|
||||||
|
{
|
||||||
|
Console.WriteLine("Number of planes must be 1");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bmpDepth = read16(rgb24file); // bits per pixel
|
||||||
|
Console.WriteLine("Bit Depth: {0}", bmpDepth);
|
||||||
|
if (bmpDepth != 24)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Image is not in 24bit");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (read32(rgb24file) != 0) // 0 = uncompressed
|
||||||
|
{
|
||||||
|
Console.WriteLine("BMP must be in uncompressed format");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
goodBmp = true; // Supported BMP format -- proceed!
|
||||||
|
Console.WriteLine("Image size: {0}x{1}", bmpWidth, bmpHeight);
|
||||||
|
|
||||||
|
string outFilename = Path.ChangeExtension(imageFilename, "565");
|
||||||
|
|
||||||
|
Console.WriteLine("{0} created", outFilename);
|
||||||
|
|
||||||
|
rgb16file = new FileStream(outFilename, FileMode.Create);
|
||||||
|
|
||||||
|
if (rgb16file == null)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Could not create file {0}", outFilename);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var header = new byte[54];
|
||||||
|
|
||||||
|
rgb24file.Seek(0, SeekOrigin.Begin);
|
||||||
|
rgb24file.Read(header, 0, 54);
|
||||||
|
|
||||||
|
header[0x1C] = 16; // updage bit depth to 16 bpp
|
||||||
|
|
||||||
|
rgb16file.Write(header, 0, 54);
|
||||||
|
|
||||||
|
// BMP rows are padded (if needed) to 4-byte boundary
|
||||||
|
rowSize = (bmpWidth * 3 + 3) & ~3;
|
||||||
|
|
||||||
|
// If bmpHeight is negative, image is in top-down order.
|
||||||
|
// This is not canon but has been observed in the wild.
|
||||||
|
if (bmpHeight < 0)
|
||||||
|
{
|
||||||
|
bmpHeight = -bmpHeight;
|
||||||
|
flip = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var inRGB = new byte[3];
|
||||||
|
var outRGB = new byte[2];
|
||||||
|
|
||||||
|
for (row = 0; row < bmpHeight; row++)
|
||||||
|
{
|
||||||
|
// For each scanline...
|
||||||
|
|
||||||
|
if (flip) // Bitmap is stored bottom-to-top order (normal BMP)
|
||||||
|
pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize;
|
||||||
|
else // Bitmap is stored top-to-bottom
|
||||||
|
pos = bmpImageoffset + row * rowSize;
|
||||||
|
|
||||||
|
rgb24file.Seek(pos, SeekOrigin.Begin);
|
||||||
|
|
||||||
|
for (var c = 0; c < 3 * bmpWidth; c += 3)
|
||||||
|
{
|
||||||
|
rgb24file.Read(inRGB, 0, 3);
|
||||||
|
|
||||||
|
UInt16 iliColor = to565(inRGB[2], inRGB[1], inRGB[0]);
|
||||||
|
outRGB[0] = (byte)(iliColor >> 8);
|
||||||
|
outRGB[1] = (byte)(iliColor & 0xFF);
|
||||||
|
rgb16file.Write(outRGB, 0, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Console.WriteLine(ex.Message);
|
||||||
|
Console.WriteLine(ex.StackTrace);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (rgb24file != null)
|
||||||
|
{
|
||||||
|
rgb24file.Close();
|
||||||
|
rgb24file = null;
|
||||||
|
}
|
||||||
|
if (rgb16file != null)
|
||||||
|
{
|
||||||
|
rgb16file.Close();
|
||||||
|
rgb16file = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("File {0} does not exists");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static private UInt16 to565(byte r, byte g, byte b)
|
||||||
|
{
|
||||||
|
return (UInt16)(((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3));
|
||||||
|
//return ((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
static UInt16 read16(FileStream file)
|
||||||
|
{
|
||||||
|
var bytes = new byte[2];
|
||||||
|
|
||||||
|
file.Read(bytes, 0, 2);
|
||||||
|
var word = (UInt16)(bytes[1] << 8 | bytes[0]);
|
||||||
|
|
||||||
|
return word;
|
||||||
|
}
|
||||||
|
|
||||||
|
static UInt32 read32(FileStream file)
|
||||||
|
{
|
||||||
|
var bytes = new byte[4];
|
||||||
|
|
||||||
|
file.Read(bytes, 0, 4);
|
||||||
|
var dword = (UInt32)(bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0]);
|
||||||
|
|
||||||
|
return dword;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("BMP24toILI565")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("Microsoft")]
|
||||||
|
[assembly: AssemblyProduct("BMP24toILI565")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © Microsoft 2014")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("79edc0d8-9635-4e86-9a00-3e845d89d64b")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,210 @@
|
||||||
|
// BMP24toILI565.cpp : Defines the entry point for the console application.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <windows.h>
|
||||||
|
#include "dirent.h"
|
||||||
|
|
||||||
|
FILE *rgb24file;
|
||||||
|
FILE *rgb16file;
|
||||||
|
int bmpWidth, bmpHeight; // W+H in pixels
|
||||||
|
UINT16 bmpDepth; // Bit depth (currently must be 24)
|
||||||
|
UINT32 bmpImageoffset; // Start of image data in file
|
||||||
|
UINT32 rowSize; // Not always = bmpWidth; may have padding
|
||||||
|
boolean goodBmp = false; // Set to true on valid header parse
|
||||||
|
boolean flip = true; // BMP is stored bottom-to-top
|
||||||
|
UINT16 w, h, row, col;
|
||||||
|
UINT8 r, g, b;
|
||||||
|
UINT32 pos = 0, startTime;
|
||||||
|
bool first = true;
|
||||||
|
DIR* dir;
|
||||||
|
struct dirent *ent;
|
||||||
|
|
||||||
|
|
||||||
|
//inline UINT16 read16(FILE *file)
|
||||||
|
//{
|
||||||
|
// UINT16 word;
|
||||||
|
// fread(&word, 2, 1, file);
|
||||||
|
// return word;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//inline UINT16 read32(FILE *file)
|
||||||
|
//{
|
||||||
|
// UINT32 dword;
|
||||||
|
// fread(&dword, 4, 1, file);
|
||||||
|
// return dword;
|
||||||
|
//}
|
||||||
|
|
||||||
|
UINT16 read16(FILE *file) {
|
||||||
|
UINT16 word;
|
||||||
|
fread(&(((UINT8 *)&word)[0]), 1, 1, file);
|
||||||
|
fread(&(((UINT8 *)&word)[1]), 1, 1, file);
|
||||||
|
//((UINT8 *)&word)[0] = f.read(); // LSB
|
||||||
|
//((UINT8 *)&word)[1] = f.read(); // MSB
|
||||||
|
return word;
|
||||||
|
}
|
||||||
|
//
|
||||||
|
UINT32 read32(FILE *file) {
|
||||||
|
UINT32 dword;
|
||||||
|
fread(&(((UINT8 *)&dword)[0]), 1, 1, file);
|
||||||
|
fread(&(((UINT8 *)&dword)[1]), 1, 1, file);
|
||||||
|
fread(&(((UINT8 *)&dword)[2]), 1, 1, file);
|
||||||
|
fread(&(((UINT8 *)&dword)[3]), 1, 1, file);
|
||||||
|
return dword;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline UINT16 to565(UINT8 r, UINT8 g, UINT8 b)
|
||||||
|
{
|
||||||
|
return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
|
||||||
|
//return ((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
int convertImage(char* filename)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("Converting %s...\n", filename);
|
||||||
|
rgb24file = fopen(filename, "rb");
|
||||||
|
if (rgb24file == NULL)
|
||||||
|
{
|
||||||
|
printf("Could not find file %s \n", filename);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fseek(rgb24file, 0, SEEK_SET);
|
||||||
|
|
||||||
|
if(read16(rgb24file) != 0x4D42) // BMP signature
|
||||||
|
{
|
||||||
|
printf("Not a BMP file.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("File size: %u\n", read32(rgb24file));
|
||||||
|
(void)read32(rgb24file); // Read & ignore creator bytes
|
||||||
|
bmpImageoffset = read32(rgb24file); // Start of image data
|
||||||
|
printf("Image Offset: %d\n", bmpImageoffset);
|
||||||
|
// Read DIB header
|
||||||
|
printf("Header size: %d\n", read32(rgb24file));
|
||||||
|
bmpWidth = read32(rgb24file);
|
||||||
|
bmpHeight = read32(rgb24file);
|
||||||
|
|
||||||
|
if(read16(rgb24file) != 1) // # planes -- must be '1'
|
||||||
|
{
|
||||||
|
printf("Number of planes must be 1\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
bmpDepth = read16(rgb24file); // bits per pixel
|
||||||
|
printf("Bit Depth: %d\n", bmpDepth);
|
||||||
|
|
||||||
|
if(bmpDepth != 24)
|
||||||
|
{
|
||||||
|
printf("Image is not in 24bit\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(read32(rgb24file) != 0) // 0 = uncompressed
|
||||||
|
{
|
||||||
|
printf("BMP must be in uncompressed format\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
goodBmp = true; // Supported BMP format -- proceed!
|
||||||
|
printf("Image size: %dx%d\n", bmpWidth, bmpHeight);
|
||||||
|
|
||||||
|
char outFilename[255];
|
||||||
|
sprintf(outFilename, "%s", filename);
|
||||||
|
sprintf(outFilename+strlen(filename)-3, "565");
|
||||||
|
|
||||||
|
printf("%s created\n", outFilename);
|
||||||
|
rgb16file = fopen(outFilename, "wb");
|
||||||
|
|
||||||
|
if(rgb16file == NULL)
|
||||||
|
{
|
||||||
|
printf("Could not create file %s\n", outFilename);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT8 header[54];
|
||||||
|
fseek(rgb24file, 0, SEEK_SET);
|
||||||
|
fread(header, 1, 54, rgb24file);
|
||||||
|
|
||||||
|
header[0x1C] = 16; // updage bit depth to 16 bpp
|
||||||
|
|
||||||
|
fwrite(header, 1, 54, rgb16file);
|
||||||
|
|
||||||
|
// BMP rows are padded (if needed) to 4-byte boundary
|
||||||
|
rowSize = (bmpWidth * 3 + 3) & ~3;
|
||||||
|
|
||||||
|
// If bmpHeight is negative, image is in top-down order.
|
||||||
|
// This is not canon but has been observed in the wild.
|
||||||
|
if(bmpHeight < 0) {
|
||||||
|
bmpHeight = -bmpHeight;
|
||||||
|
flip = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT8 inRGB[3], outRGB[2];
|
||||||
|
|
||||||
|
for (row=0; row<bmpHeight; row++) { // For each scanline...
|
||||||
|
|
||||||
|
if(flip) // Bitmap is stored bottom-to-top order (normal BMP)
|
||||||
|
pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize;
|
||||||
|
else // Bitmap is stored top-to-bottom
|
||||||
|
pos = bmpImageoffset + row * rowSize;
|
||||||
|
|
||||||
|
fseek(rgb24file, pos, SEEK_SET);
|
||||||
|
|
||||||
|
for(UINT16 c=0; c<3*bmpWidth; c+=3)
|
||||||
|
{
|
||||||
|
fread(inRGB, 1, 3, rgb24file);
|
||||||
|
UINT16 iliColor = to565(inRGB[2], inRGB[1], inRGB[0]);
|
||||||
|
outRGB[0] = iliColor >> 8;
|
||||||
|
outRGB[1] = iliColor & 0xFF;
|
||||||
|
fwrite(outRGB, 1, 2, rgb16file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
printf("Error converting file\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
_fcloseall();
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (argc == 1)
|
||||||
|
{
|
||||||
|
if ((dir = opendir (".")) != NULL) {
|
||||||
|
/* print all the files and directories within directory */
|
||||||
|
int bmpFilesFound = 0;
|
||||||
|
while ((ent = readdir(dir)) != NULL) {
|
||||||
|
if(strncmp(ent->d_name + ent->d_namlen - 4, ".bmp", 4) == 0)
|
||||||
|
{
|
||||||
|
convertImage(ent->d_name);
|
||||||
|
bmpFilesFound++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir (dir);
|
||||||
|
if(bmpFilesFound == 0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
printf("No .bmp files found.\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* could not open directory */
|
||||||
|
perror ("");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
convertImage(argv[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2012
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BMP24toILI565", "BMP24toILI565.vcxproj", "{EFE947CC-711C-44E0-9FA5-605D37DD3E8C}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Win32 = Debug|Win32
|
||||||
|
Release|Win32 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{EFE947CC-711C-44E0-9FA5-605D37DD3E8C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{EFE947CC-711C-44E0-9FA5-605D37DD3E8C}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{EFE947CC-711C-44E0-9FA5-605D37DD3E8C}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{EFE947CC-711C-44E0-9FA5-605D37DD3E8C}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -0,0 +1,95 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{EFE947CC-711C-44E0-9FA5-605D37DD3E8C}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>BMP24toILI565</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v110</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Text Include="ReadMe.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="stdafx.h" />
|
||||||
|
<ClInclude Include="targetver.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="BMP24toILI565.cpp" />
|
||||||
|
<ClCompile Include="stdafx.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Text Include="ReadMe.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="stdafx.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="targetver.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="stdafx.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="BMP24toILI565.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,40 @@
|
||||||
|
========================================================================
|
||||||
|
CONSOLE APPLICATION : BMP24toILI565 Project Overview
|
||||||
|
========================================================================
|
||||||
|
|
||||||
|
AppWizard has created this BMP24toILI565 application for you.
|
||||||
|
|
||||||
|
This file contains a summary of what you will find in each of the files that
|
||||||
|
make up your BMP24toILI565 application.
|
||||||
|
|
||||||
|
|
||||||
|
BMP24toILI565.vcxproj
|
||||||
|
This is the main project file for VC++ projects generated using an Application Wizard.
|
||||||
|
It contains information about the version of Visual C++ that generated the file, and
|
||||||
|
information about the platforms, configurations, and project features selected with the
|
||||||
|
Application Wizard.
|
||||||
|
|
||||||
|
BMP24toILI565.vcxproj.filters
|
||||||
|
This is the filters file for VC++ projects generated using an Application Wizard.
|
||||||
|
It contains information about the association between the files in your project
|
||||||
|
and the filters. This association is used in the IDE to show grouping of files with
|
||||||
|
similar extensions under a specific node (for e.g. ".cpp" files are associated with the
|
||||||
|
"Source Files" filter).
|
||||||
|
|
||||||
|
BMP24toILI565.cpp
|
||||||
|
This is the main application source file.
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
Other standard files:
|
||||||
|
|
||||||
|
StdAfx.h, StdAfx.cpp
|
||||||
|
These files are used to build a precompiled header (PCH) file
|
||||||
|
named BMP24toILI565.pch and a precompiled types file named StdAfx.obj.
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
Other notes:
|
||||||
|
|
||||||
|
AppWizard uses "TODO:" comments to indicate parts of the source code you
|
||||||
|
should add to or customize.
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
|
@ -0,0 +1,838 @@
|
||||||
|
/*
|
||||||
|
* dirent.h - dirent API for Microsoft Visual Studio
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2012 Toni Ronkko
|
||||||
|
*
|
||||||
|
* 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 TONI RONKKO 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.
|
||||||
|
*
|
||||||
|
* $Id: dirent.h,v 1.20 2014/03/19 17:52:23 tronkko Exp $
|
||||||
|
*/
|
||||||
|
#ifndef DIRENT_H
|
||||||
|
#define DIRENT_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Define architecture flags so we don't need to include windows.h.
|
||||||
|
* Avoiding windows.h makes it simpler to use windows sockets in conjunction
|
||||||
|
* with dirent.h.
|
||||||
|
*/
|
||||||
|
#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(_M_IX86)
|
||||||
|
# define _X86_
|
||||||
|
#endif
|
||||||
|
#if !defined(_68K_) && !defined(_MPPC_) && !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(_M_AMD64)
|
||||||
|
#define _AMD64_
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <windef.h>
|
||||||
|
#include <winbase.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
/* Indicates that d_type field is available in dirent structure */
|
||||||
|
#define _DIRENT_HAVE_D_TYPE
|
||||||
|
|
||||||
|
/* Indicates that d_namlen field is available in dirent structure */
|
||||||
|
#define _DIRENT_HAVE_D_NAMLEN
|
||||||
|
|
||||||
|
/* Entries missing from MSVC 6.0 */
|
||||||
|
#if !defined(FILE_ATTRIBUTE_DEVICE)
|
||||||
|
# define FILE_ATTRIBUTE_DEVICE 0x40
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* File type and permission flags for stat() */
|
||||||
|
#if !defined(S_IFMT)
|
||||||
|
# define S_IFMT _S_IFMT /* File type mask */
|
||||||
|
#endif
|
||||||
|
#if !defined(S_IFDIR)
|
||||||
|
# define S_IFDIR _S_IFDIR /* Directory */
|
||||||
|
#endif
|
||||||
|
#if !defined(S_IFCHR)
|
||||||
|
# define S_IFCHR _S_IFCHR /* Character device */
|
||||||
|
#endif
|
||||||
|
#if !defined(S_IFFIFO)
|
||||||
|
# define S_IFFIFO _S_IFFIFO /* Pipe */
|
||||||
|
#endif
|
||||||
|
#if !defined(S_IFREG)
|
||||||
|
# define S_IFREG _S_IFREG /* Regular file */
|
||||||
|
#endif
|
||||||
|
#if !defined(S_IREAD)
|
||||||
|
# define S_IREAD _S_IREAD /* Read permission */
|
||||||
|
#endif
|
||||||
|
#if !defined(S_IWRITE)
|
||||||
|
# define S_IWRITE _S_IWRITE /* Write permission */
|
||||||
|
#endif
|
||||||
|
#if !defined(S_IEXEC)
|
||||||
|
# define S_IEXEC _S_IEXEC /* Execute permission */
|
||||||
|
#endif
|
||||||
|
#if !defined(S_IFIFO)
|
||||||
|
# define S_IFIFO _S_IFIFO /* Pipe */
|
||||||
|
#endif
|
||||||
|
#if !defined(S_IFBLK)
|
||||||
|
# define S_IFBLK 0 /* Block device */
|
||||||
|
#endif
|
||||||
|
#if !defined(S_IFLNK)
|
||||||
|
# define S_IFLNK 0 /* Link */
|
||||||
|
#endif
|
||||||
|
#if !defined(S_IFSOCK)
|
||||||
|
# define S_IFSOCK 0 /* Socket */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
# define S_IRUSR S_IREAD /* Read user */
|
||||||
|
# define S_IWUSR S_IWRITE /* Write user */
|
||||||
|
# define S_IXUSR 0 /* Execute user */
|
||||||
|
# define S_IRGRP 0 /* Read group */
|
||||||
|
# define S_IWGRP 0 /* Write group */
|
||||||
|
# define S_IXGRP 0 /* Execute group */
|
||||||
|
# define S_IROTH 0 /* Read others */
|
||||||
|
# define S_IWOTH 0 /* Write others */
|
||||||
|
# define S_IXOTH 0 /* Execute others */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Maximum length of file name */
|
||||||
|
#if !defined(PATH_MAX)
|
||||||
|
# define PATH_MAX MAX_PATH
|
||||||
|
#endif
|
||||||
|
#if !defined(FILENAME_MAX)
|
||||||
|
# define FILENAME_MAX MAX_PATH
|
||||||
|
#endif
|
||||||
|
#if !defined(NAME_MAX)
|
||||||
|
# define NAME_MAX FILENAME_MAX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* File type flags for d_type */
|
||||||
|
#define DT_UNKNOWN 0
|
||||||
|
#define DT_REG S_IFREG
|
||||||
|
#define DT_DIR S_IFDIR
|
||||||
|
#define DT_FIFO S_IFIFO
|
||||||
|
#define DT_SOCK S_IFSOCK
|
||||||
|
#define DT_CHR S_IFCHR
|
||||||
|
#define DT_BLK S_IFBLK
|
||||||
|
#define DT_LNK S_IFLNK
|
||||||
|
|
||||||
|
/* Macros for converting between st_mode and d_type */
|
||||||
|
#define IFTODT(mode) ((mode) & S_IFMT)
|
||||||
|
#define DTTOIF(type) (type)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* File type macros. Note that block devices, sockets and links cannot be
|
||||||
|
* distinguished on Windows and the macros S_ISBLK, S_ISSOCK and S_ISLNK are
|
||||||
|
* only defined for compatibility. These macros should always return false
|
||||||
|
* on Windows.
|
||||||
|
*/
|
||||||
|
#define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO)
|
||||||
|
#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
|
||||||
|
#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
|
||||||
|
#define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
|
||||||
|
#define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK)
|
||||||
|
#define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR)
|
||||||
|
#define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK)
|
||||||
|
|
||||||
|
/* Return the exact length of d_namlen without zero terminator */
|
||||||
|
#define _D_EXACT_NAMLEN(p) ((p)->d_namlen)
|
||||||
|
|
||||||
|
/* Return number of bytes needed to store d_namlen */
|
||||||
|
#define _D_ALLOC_NAMLEN(p) (PATH_MAX)
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Wide-character version */
|
||||||
|
struct _wdirent {
|
||||||
|
long d_ino; /* Always zero */
|
||||||
|
unsigned short d_reclen; /* Structure size */
|
||||||
|
size_t d_namlen; /* Length of name without \0 */
|
||||||
|
int d_type; /* File type */
|
||||||
|
wchar_t d_name[PATH_MAX]; /* File name */
|
||||||
|
};
|
||||||
|
typedef struct _wdirent _wdirent;
|
||||||
|
|
||||||
|
struct _WDIR {
|
||||||
|
struct _wdirent ent; /* Current directory entry */
|
||||||
|
WIN32_FIND_DATAW data; /* Private file data */
|
||||||
|
int cached; /* True if data is valid */
|
||||||
|
HANDLE handle; /* Win32 search handle */
|
||||||
|
wchar_t *patt; /* Initial directory name */
|
||||||
|
};
|
||||||
|
typedef struct _WDIR _WDIR;
|
||||||
|
|
||||||
|
static _WDIR *_wopendir (const wchar_t *dirname);
|
||||||
|
static struct _wdirent *_wreaddir (_WDIR *dirp);
|
||||||
|
static int _wclosedir (_WDIR *dirp);
|
||||||
|
static void _wrewinddir (_WDIR* dirp);
|
||||||
|
|
||||||
|
|
||||||
|
/* For compatibility with Symbian */
|
||||||
|
#define wdirent _wdirent
|
||||||
|
#define WDIR _WDIR
|
||||||
|
#define wopendir _wopendir
|
||||||
|
#define wreaddir _wreaddir
|
||||||
|
#define wclosedir _wclosedir
|
||||||
|
#define wrewinddir _wrewinddir
|
||||||
|
|
||||||
|
|
||||||
|
/* Multi-byte character versions */
|
||||||
|
struct dirent {
|
||||||
|
long d_ino; /* Always zero */
|
||||||
|
unsigned short d_reclen; /* Structure size */
|
||||||
|
size_t d_namlen; /* Length of name without \0 */
|
||||||
|
int d_type; /* File type */
|
||||||
|
char d_name[PATH_MAX]; /* File name */
|
||||||
|
};
|
||||||
|
typedef struct dirent dirent;
|
||||||
|
|
||||||
|
struct DIR {
|
||||||
|
struct dirent ent;
|
||||||
|
struct _WDIR *wdirp;
|
||||||
|
};
|
||||||
|
typedef struct DIR DIR;
|
||||||
|
|
||||||
|
static DIR *opendir (const char *dirname);
|
||||||
|
static struct dirent *readdir (DIR *dirp);
|
||||||
|
static int closedir (DIR *dirp);
|
||||||
|
static void rewinddir (DIR* dirp);
|
||||||
|
|
||||||
|
|
||||||
|
/* Internal utility functions */
|
||||||
|
static WIN32_FIND_DATAW *dirent_first (_WDIR *dirp);
|
||||||
|
static WIN32_FIND_DATAW *dirent_next (_WDIR *dirp);
|
||||||
|
|
||||||
|
static int dirent_mbstowcs_s(
|
||||||
|
size_t *pReturnValue,
|
||||||
|
wchar_t *wcstr,
|
||||||
|
size_t sizeInWords,
|
||||||
|
const char *mbstr,
|
||||||
|
size_t count);
|
||||||
|
|
||||||
|
static int dirent_wcstombs_s(
|
||||||
|
size_t *pReturnValue,
|
||||||
|
char *mbstr,
|
||||||
|
size_t sizeInBytes,
|
||||||
|
const wchar_t *wcstr,
|
||||||
|
size_t count);
|
||||||
|
|
||||||
|
static void dirent_set_errno (int error);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Open directory stream DIRNAME for read and return a pointer to the
|
||||||
|
* internal working area that is used to retrieve individual directory
|
||||||
|
* entries.
|
||||||
|
*/
|
||||||
|
static _WDIR*
|
||||||
|
_wopendir(
|
||||||
|
const wchar_t *dirname)
|
||||||
|
{
|
||||||
|
_WDIR *dirp = NULL;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
/* Must have directory name */
|
||||||
|
if (dirname == NULL || dirname[0] == '\0') {
|
||||||
|
dirent_set_errno (ENOENT);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate new _WDIR structure */
|
||||||
|
dirp = (_WDIR*) malloc (sizeof (struct _WDIR));
|
||||||
|
if (dirp != NULL) {
|
||||||
|
DWORD n;
|
||||||
|
|
||||||
|
/* Reset _WDIR structure */
|
||||||
|
dirp->handle = INVALID_HANDLE_VALUE;
|
||||||
|
dirp->patt = NULL;
|
||||||
|
dirp->cached = 0;
|
||||||
|
|
||||||
|
/* Compute the length of full path plus zero terminator */
|
||||||
|
n = GetFullPathNameW (dirname, 0, NULL, NULL);
|
||||||
|
|
||||||
|
/* Allocate room for absolute directory name and search pattern */
|
||||||
|
dirp->patt = (wchar_t*) malloc (sizeof (wchar_t) * n + 16);
|
||||||
|
if (dirp->patt) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert relative directory name to an absolute one. This
|
||||||
|
* allows rewinddir() to function correctly even when current
|
||||||
|
* working directory is changed between opendir() and rewinddir().
|
||||||
|
*/
|
||||||
|
n = GetFullPathNameW (dirname, n, dirp->patt, NULL);
|
||||||
|
if (n > 0) {
|
||||||
|
wchar_t *p;
|
||||||
|
|
||||||
|
/* Append search pattern \* to the directory name */
|
||||||
|
p = dirp->patt + n;
|
||||||
|
if (dirp->patt < p) {
|
||||||
|
switch (p[-1]) {
|
||||||
|
case '\\':
|
||||||
|
case '/':
|
||||||
|
case ':':
|
||||||
|
/* Directory ends in path separator, e.g. c:\temp\ */
|
||||||
|
/*NOP*/;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
/* Directory name doesn't end in path separator */
|
||||||
|
*p++ = '\\';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*p++ = '*';
|
||||||
|
*p = '\0';
|
||||||
|
|
||||||
|
/* Open directory stream and retrieve the first entry */
|
||||||
|
if (dirent_first (dirp)) {
|
||||||
|
/* Directory stream opened successfully */
|
||||||
|
error = 0;
|
||||||
|
} else {
|
||||||
|
/* Cannot retrieve first entry */
|
||||||
|
error = 1;
|
||||||
|
dirent_set_errno (ENOENT);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* Cannot retrieve full path name */
|
||||||
|
dirent_set_errno (ENOENT);
|
||||||
|
error = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* Cannot allocate memory for search pattern */
|
||||||
|
error = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* Cannot allocate _WDIR structure */
|
||||||
|
error = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clean up in case of error */
|
||||||
|
if (error && dirp) {
|
||||||
|
_wclosedir (dirp);
|
||||||
|
dirp = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dirp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read next directory entry. The directory entry is returned in dirent
|
||||||
|
* structure in the d_name field. Individual directory entries returned by
|
||||||
|
* this function include regular files, sub-directories, pseudo-directories
|
||||||
|
* "." and ".." as well as volume labels, hidden files and system files.
|
||||||
|
*/
|
||||||
|
static struct _wdirent*
|
||||||
|
_wreaddir(
|
||||||
|
_WDIR *dirp)
|
||||||
|
{
|
||||||
|
WIN32_FIND_DATAW *datap;
|
||||||
|
struct _wdirent *entp;
|
||||||
|
|
||||||
|
/* Read next directory entry */
|
||||||
|
datap = dirent_next (dirp);
|
||||||
|
if (datap) {
|
||||||
|
size_t n;
|
||||||
|
DWORD attr;
|
||||||
|
|
||||||
|
/* Pointer to directory entry to return */
|
||||||
|
entp = &dirp->ent;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copy file name as wide-character string. If the file name is too
|
||||||
|
* long to fit in to the destination buffer, then truncate file name
|
||||||
|
* to PATH_MAX characters and zero-terminate the buffer.
|
||||||
|
*/
|
||||||
|
n = 0;
|
||||||
|
while (n + 1 < PATH_MAX && datap->cFileName[n] != 0) {
|
||||||
|
entp->d_name[n] = datap->cFileName[n];
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
dirp->ent.d_name[n] = 0;
|
||||||
|
|
||||||
|
/* Length of file name excluding zero terminator */
|
||||||
|
entp->d_namlen = n;
|
||||||
|
|
||||||
|
/* File type */
|
||||||
|
attr = datap->dwFileAttributes;
|
||||||
|
if ((attr & FILE_ATTRIBUTE_DEVICE) != 0) {
|
||||||
|
entp->d_type = DT_CHR;
|
||||||
|
} else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) {
|
||||||
|
entp->d_type = DT_DIR;
|
||||||
|
} else {
|
||||||
|
entp->d_type = DT_REG;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reset dummy fields */
|
||||||
|
entp->d_ino = 0;
|
||||||
|
entp->d_reclen = sizeof (struct _wdirent);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* Last directory entry read */
|
||||||
|
entp = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return entp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Close directory stream opened by opendir() function. This invalidates the
|
||||||
|
* DIR structure as well as any directory entry read previously by
|
||||||
|
* _wreaddir().
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
_wclosedir(
|
||||||
|
_WDIR *dirp)
|
||||||
|
{
|
||||||
|
int ok;
|
||||||
|
if (dirp) {
|
||||||
|
|
||||||
|
/* Release search handle */
|
||||||
|
if (dirp->handle != INVALID_HANDLE_VALUE) {
|
||||||
|
FindClose (dirp->handle);
|
||||||
|
dirp->handle = INVALID_HANDLE_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Release search pattern */
|
||||||
|
if (dirp->patt) {
|
||||||
|
free (dirp->patt);
|
||||||
|
dirp->patt = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Release directory structure */
|
||||||
|
free (dirp);
|
||||||
|
ok = /*success*/0;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* Invalid directory stream */
|
||||||
|
dirent_set_errno (EBADF);
|
||||||
|
ok = /*failure*/-1;
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Rewind directory stream such that _wreaddir() returns the very first
|
||||||
|
* file name again.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
_wrewinddir(
|
||||||
|
_WDIR* dirp)
|
||||||
|
{
|
||||||
|
if (dirp) {
|
||||||
|
/* Release existing search handle */
|
||||||
|
if (dirp->handle != INVALID_HANDLE_VALUE) {
|
||||||
|
FindClose (dirp->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Open new search handle */
|
||||||
|
dirent_first (dirp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get first directory entry (internal) */
|
||||||
|
static WIN32_FIND_DATAW*
|
||||||
|
dirent_first(
|
||||||
|
_WDIR *dirp)
|
||||||
|
{
|
||||||
|
WIN32_FIND_DATAW *datap;
|
||||||
|
|
||||||
|
/* Open directory and retrieve the first entry */
|
||||||
|
dirp->handle = FindFirstFileW (dirp->patt, &dirp->data);
|
||||||
|
if (dirp->handle != INVALID_HANDLE_VALUE) {
|
||||||
|
|
||||||
|
/* a directory entry is now waiting in memory */
|
||||||
|
datap = &dirp->data;
|
||||||
|
dirp->cached = 1;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* Failed to re-open directory: no directory entry in memory */
|
||||||
|
dirp->cached = 0;
|
||||||
|
datap = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
return datap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get next directory entry (internal) */
|
||||||
|
static WIN32_FIND_DATAW*
|
||||||
|
dirent_next(
|
||||||
|
_WDIR *dirp)
|
||||||
|
{
|
||||||
|
WIN32_FIND_DATAW *p;
|
||||||
|
|
||||||
|
/* Get next directory entry */
|
||||||
|
if (dirp->cached != 0) {
|
||||||
|
|
||||||
|
/* A valid directory entry already in memory */
|
||||||
|
p = &dirp->data;
|
||||||
|
dirp->cached = 0;
|
||||||
|
|
||||||
|
} else if (dirp->handle != INVALID_HANDLE_VALUE) {
|
||||||
|
|
||||||
|
/* Get the next directory entry from stream */
|
||||||
|
if (FindNextFileW (dirp->handle, &dirp->data) != FALSE) {
|
||||||
|
/* Got a file */
|
||||||
|
p = &dirp->data;
|
||||||
|
} else {
|
||||||
|
/* The very last entry has been processed or an error occured */
|
||||||
|
FindClose (dirp->handle);
|
||||||
|
dirp->handle = INVALID_HANDLE_VALUE;
|
||||||
|
p = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* End of directory stream reached */
|
||||||
|
p = NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Open directory stream using plain old C-string.
|
||||||
|
*/
|
||||||
|
static DIR*
|
||||||
|
opendir(
|
||||||
|
const char *dirname)
|
||||||
|
{
|
||||||
|
struct DIR *dirp;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
/* Must have directory name */
|
||||||
|
if (dirname == NULL || dirname[0] == '\0') {
|
||||||
|
dirent_set_errno (ENOENT);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate memory for DIR structure */
|
||||||
|
dirp = (DIR*) malloc (sizeof (struct DIR));
|
||||||
|
if (dirp) {
|
||||||
|
wchar_t wname[PATH_MAX];
|
||||||
|
size_t n;
|
||||||
|
|
||||||
|
/* Convert directory name to wide-character string */
|
||||||
|
error = dirent_mbstowcs_s (&n, wname, PATH_MAX, dirname, PATH_MAX);
|
||||||
|
if (!error) {
|
||||||
|
|
||||||
|
/* Open directory stream using wide-character name */
|
||||||
|
dirp->wdirp = _wopendir (wname);
|
||||||
|
if (dirp->wdirp) {
|
||||||
|
/* Directory stream opened */
|
||||||
|
error = 0;
|
||||||
|
} else {
|
||||||
|
/* Failed to open directory stream */
|
||||||
|
error = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Cannot convert file name to wide-character string. This
|
||||||
|
* occurs if the string contains invalid multi-byte sequences or
|
||||||
|
* the output buffer is too small to contain the resulting
|
||||||
|
* string.
|
||||||
|
*/
|
||||||
|
error = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* Cannot allocate DIR structure */
|
||||||
|
error = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clean up in case of error */
|
||||||
|
if (error && dirp) {
|
||||||
|
free (dirp);
|
||||||
|
dirp = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dirp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read next directory entry.
|
||||||
|
*
|
||||||
|
* When working with text consoles, please note that file names returned by
|
||||||
|
* readdir() are represented in the default ANSI code page while any output to
|
||||||
|
* console is typically formatted on another code page. Thus, non-ASCII
|
||||||
|
* characters in file names will not usually display correctly on console. The
|
||||||
|
* problem can be fixed in two ways: (1) change the character set of console
|
||||||
|
* to 1252 using chcp utility and use Lucida Console font, or (2) use
|
||||||
|
* _cprintf function when writing to console. The _cprinf() will re-encode
|
||||||
|
* ANSI strings to the console code page so many non-ASCII characters will
|
||||||
|
* display correcly.
|
||||||
|
*/
|
||||||
|
static struct dirent*
|
||||||
|
readdir(
|
||||||
|
DIR *dirp)
|
||||||
|
{
|
||||||
|
WIN32_FIND_DATAW *datap;
|
||||||
|
struct dirent *entp;
|
||||||
|
|
||||||
|
/* Read next directory entry */
|
||||||
|
datap = dirent_next (dirp->wdirp);
|
||||||
|
if (datap) {
|
||||||
|
size_t n;
|
||||||
|
int error;
|
||||||
|
|
||||||
|
/* Attempt to convert file name to multi-byte string */
|
||||||
|
error = dirent_wcstombs_s(
|
||||||
|
&n, dirp->ent.d_name, PATH_MAX, datap->cFileName, PATH_MAX);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the file name cannot be represented by a multi-byte string,
|
||||||
|
* then attempt to use old 8+3 file name. This allows traditional
|
||||||
|
* Unix-code to access some file names despite of unicode
|
||||||
|
* characters, although file names may seem unfamiliar to the user.
|
||||||
|
*
|
||||||
|
* Be ware that the code below cannot come up with a short file
|
||||||
|
* name unless the file system provides one. At least
|
||||||
|
* VirtualBox shared folders fail to do this.
|
||||||
|
*/
|
||||||
|
if (error && datap->cAlternateFileName[0] != '\0') {
|
||||||
|
error = dirent_wcstombs_s(
|
||||||
|
&n, dirp->ent.d_name, PATH_MAX,
|
||||||
|
datap->cAlternateFileName, PATH_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!error) {
|
||||||
|
DWORD attr;
|
||||||
|
|
||||||
|
/* Initialize directory entry for return */
|
||||||
|
entp = &dirp->ent;
|
||||||
|
|
||||||
|
/* Length of file name excluding zero terminator */
|
||||||
|
entp->d_namlen = n - 1;
|
||||||
|
|
||||||
|
/* File attributes */
|
||||||
|
attr = datap->dwFileAttributes;
|
||||||
|
if ((attr & FILE_ATTRIBUTE_DEVICE) != 0) {
|
||||||
|
entp->d_type = DT_CHR;
|
||||||
|
} else if ((attr & FILE_ATTRIBUTE_DIRECTORY) != 0) {
|
||||||
|
entp->d_type = DT_DIR;
|
||||||
|
} else {
|
||||||
|
entp->d_type = DT_REG;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reset dummy fields */
|
||||||
|
entp->d_ino = 0;
|
||||||
|
entp->d_reclen = sizeof (struct dirent);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Cannot convert file name to multi-byte string so construct
|
||||||
|
* an errornous directory entry and return that. Note that
|
||||||
|
* we cannot return NULL as that would stop the processing
|
||||||
|
* of directory entries completely.
|
||||||
|
*/
|
||||||
|
entp = &dirp->ent;
|
||||||
|
entp->d_name[0] = '?';
|
||||||
|
entp->d_name[1] = '\0';
|
||||||
|
entp->d_namlen = 1;
|
||||||
|
entp->d_type = DT_UNKNOWN;
|
||||||
|
entp->d_ino = 0;
|
||||||
|
entp->d_reclen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
/* No more directory entries */
|
||||||
|
entp = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return entp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Close directory stream.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
closedir(
|
||||||
|
DIR *dirp)
|
||||||
|
{
|
||||||
|
int ok;
|
||||||
|
if (dirp) {
|
||||||
|
|
||||||
|
/* Close wide-character directory stream */
|
||||||
|
ok = _wclosedir (dirp->wdirp);
|
||||||
|
dirp->wdirp = NULL;
|
||||||
|
|
||||||
|
/* Release multi-byte character version */
|
||||||
|
free (dirp);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* Invalid directory stream */
|
||||||
|
dirent_set_errno (EBADF);
|
||||||
|
ok = /*failure*/-1;
|
||||||
|
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Rewind directory stream to beginning.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
rewinddir(
|
||||||
|
DIR* dirp)
|
||||||
|
{
|
||||||
|
/* Rewind wide-character string directory stream */
|
||||||
|
_wrewinddir (dirp->wdirp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convert multi-byte string to wide character string */
|
||||||
|
static int
|
||||||
|
dirent_mbstowcs_s(
|
||||||
|
size_t *pReturnValue,
|
||||||
|
wchar_t *wcstr,
|
||||||
|
size_t sizeInWords,
|
||||||
|
const char *mbstr,
|
||||||
|
size_t count)
|
||||||
|
{
|
||||||
|
int error;
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && _MSC_VER >= 1400
|
||||||
|
|
||||||
|
/* Microsoft Visual Studio 2005 or later */
|
||||||
|
error = mbstowcs_s (pReturnValue, wcstr, sizeInWords, mbstr, count);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* Older Visual Studio or non-Microsoft compiler */
|
||||||
|
size_t n;
|
||||||
|
|
||||||
|
/* Convert to wide-character string (or count characters) */
|
||||||
|
n = mbstowcs (wcstr, mbstr, sizeInWords);
|
||||||
|
if (!wcstr || n < count) {
|
||||||
|
|
||||||
|
/* Zero-terminate output buffer */
|
||||||
|
if (wcstr && sizeInWords) {
|
||||||
|
if (n >= sizeInWords) {
|
||||||
|
n = sizeInWords - 1;
|
||||||
|
}
|
||||||
|
wcstr[n] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Length of resuting multi-byte string WITH zero terminator */
|
||||||
|
if (pReturnValue) {
|
||||||
|
*pReturnValue = n + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Success */
|
||||||
|
error = 0;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* Could not convert string */
|
||||||
|
error = 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convert wide-character string to multi-byte string */
|
||||||
|
static int
|
||||||
|
dirent_wcstombs_s(
|
||||||
|
size_t *pReturnValue,
|
||||||
|
char *mbstr,
|
||||||
|
size_t sizeInBytes, /* max size of mbstr */
|
||||||
|
const wchar_t *wcstr,
|
||||||
|
size_t count)
|
||||||
|
{
|
||||||
|
int error;
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && _MSC_VER >= 1400
|
||||||
|
|
||||||
|
/* Microsoft Visual Studio 2005 or later */
|
||||||
|
error = wcstombs_s (pReturnValue, mbstr, sizeInBytes, wcstr, count);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* Older Visual Studio or non-Microsoft compiler */
|
||||||
|
size_t n;
|
||||||
|
|
||||||
|
/* Convert to multi-byte string (or count the number of bytes needed) */
|
||||||
|
n = wcstombs (mbstr, wcstr, sizeInBytes);
|
||||||
|
if (!mbstr || n < count) {
|
||||||
|
|
||||||
|
/* Zero-terminate output buffer */
|
||||||
|
if (mbstr && sizeInBytes) {
|
||||||
|
if (n >= sizeInBytes) {
|
||||||
|
n = sizeInBytes - 1;
|
||||||
|
}
|
||||||
|
mbstr[n] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Lenght of resulting multi-bytes string WITH zero-terminator */
|
||||||
|
if (pReturnValue) {
|
||||||
|
*pReturnValue = n + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Success */
|
||||||
|
error = 0;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
/* Cannot convert string */
|
||||||
|
error = 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set errno variable */
|
||||||
|
static void
|
||||||
|
dirent_set_errno(
|
||||||
|
int error)
|
||||||
|
{
|
||||||
|
#if defined(_MSC_VER) && _MSC_VER >= 1400
|
||||||
|
|
||||||
|
/* Microsoft Visual Studio 2005 and later */
|
||||||
|
_set_errno (error);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* Non-Microsoft compiler or older Microsoft compiler */
|
||||||
|
errno = error;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /*DIRENT_H*/
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
// stdafx.cpp : source file that includes just the standard includes
|
||||||
|
// BMP24toILI565.pch will be the pre-compiled header
|
||||||
|
// stdafx.obj will contain the pre-compiled type information
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
// TODO: reference any additional headers you need in STDAFX.H
|
||||||
|
// and not in this file
|
|
@ -0,0 +1,15 @@
|
||||||
|
// stdafx.h : include file for standard system include files,
|
||||||
|
// or project specific include files that are used frequently, but
|
||||||
|
// are changed infrequently
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "targetver.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <tchar.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// TODO: reference additional headers your program requires here
|
|
@ -0,0 +1,8 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Including SDKDDKVer.h defines the highest available Windows platform.
|
||||||
|
|
||||||
|
// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
|
||||||
|
// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
|
||||||
|
|
||||||
|
#include <SDKDDKVer.h>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
|
||||||
|
</startup>
|
||||||
|
</configuration>
|
108
STM32F1/libraries/ILI9341_due_STM/tools/ILIScreenshotViewer/src/Form1.Designer.cs
generated
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
namespace ILIScreenshotViewer
|
||||||
|
{
|
||||||
|
partial class Form1
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
this.pictureBox = new System.Windows.Forms.PictureBox();
|
||||||
|
this.btnShow = new System.Windows.Forms.Button();
|
||||||
|
this.lblFailed = new System.Windows.Forms.Label();
|
||||||
|
this.btnSaveAs = new System.Windows.Forms.Button();
|
||||||
|
this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// pictureBox
|
||||||
|
//
|
||||||
|
this.pictureBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||||
|
this.pictureBox.Location = new System.Drawing.Point(12, 12);
|
||||||
|
this.pictureBox.Name = "pictureBox";
|
||||||
|
this.pictureBox.Size = new System.Drawing.Size(320, 240);
|
||||||
|
this.pictureBox.TabIndex = 0;
|
||||||
|
this.pictureBox.TabStop = false;
|
||||||
|
//
|
||||||
|
// btnShow
|
||||||
|
//
|
||||||
|
this.btnShow.Location = new System.Drawing.Point(93, 258);
|
||||||
|
this.btnShow.Name = "btnShow";
|
||||||
|
this.btnShow.Size = new System.Drawing.Size(158, 23);
|
||||||
|
this.btnShow.TabIndex = 2;
|
||||||
|
this.btnShow.Text = "Load Image from Clipboard";
|
||||||
|
this.btnShow.UseVisualStyleBackColor = true;
|
||||||
|
this.btnShow.Click += new System.EventHandler(this.btnShow_Click);
|
||||||
|
//
|
||||||
|
// lblFailed
|
||||||
|
//
|
||||||
|
this.lblFailed.Location = new System.Drawing.Point(47, 84);
|
||||||
|
this.lblFailed.Name = "lblFailed";
|
||||||
|
this.lblFailed.Size = new System.Drawing.Size(251, 86);
|
||||||
|
this.lblFailed.TabIndex = 3;
|
||||||
|
this.lblFailed.Text = "Failed to load an image from clipboard";
|
||||||
|
this.lblFailed.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||||
|
this.lblFailed.Visible = false;
|
||||||
|
//
|
||||||
|
// btnSaveAs
|
||||||
|
//
|
||||||
|
this.btnSaveAs.Location = new System.Drawing.Point(258, 258);
|
||||||
|
this.btnSaveAs.Name = "btnSaveAs";
|
||||||
|
this.btnSaveAs.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.btnSaveAs.TabIndex = 4;
|
||||||
|
this.btnSaveAs.Text = "Save As...";
|
||||||
|
this.btnSaveAs.UseVisualStyleBackColor = true;
|
||||||
|
this.btnSaveAs.Visible = false;
|
||||||
|
this.btnSaveAs.Click += new System.EventHandler(this.btnSaveAs_Click);
|
||||||
|
//
|
||||||
|
// saveFileDialog
|
||||||
|
//
|
||||||
|
this.saveFileDialog.Filter = "*.bmp|*.bmp|*.png|*.png|*.gif|*.gif|*.jpg|*.jpg|All Files (*.*)|*.*";
|
||||||
|
//
|
||||||
|
// Form1
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(347, 294);
|
||||||
|
this.Controls.Add(this.btnSaveAs);
|
||||||
|
this.Controls.Add(this.lblFailed);
|
||||||
|
this.Controls.Add(this.btnShow);
|
||||||
|
this.Controls.Add(this.pictureBox);
|
||||||
|
this.Name = "Form1";
|
||||||
|
this.Text = "ILI Screenshot Viewer";
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.PictureBox pictureBox;
|
||||||
|
private System.Windows.Forms.Button btnShow;
|
||||||
|
private System.Windows.Forms.Label lblFailed;
|
||||||
|
private System.Windows.Forms.Button btnSaveAs;
|
||||||
|
private System.Windows.Forms.SaveFileDialog saveFileDialog;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Imaging;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace ILIScreenshotViewer
|
||||||
|
{
|
||||||
|
public partial class Form1 : Form
|
||||||
|
{
|
||||||
|
public Form1()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnShow_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
lblFailed.Visible = false;
|
||||||
|
var bitmap = new Bitmap(320, 240, PixelFormat.Format24bppRgb);
|
||||||
|
|
||||||
|
//var hexString = Clipboard.GetText();
|
||||||
|
//for (int x = 0; x < 320; x++)
|
||||||
|
//{
|
||||||
|
// for (int y = 0; y < 240; y++)
|
||||||
|
// {
|
||||||
|
// var pixelColorString = hexString.Substring(4*x + 4*320*y, 4);
|
||||||
|
|
||||||
|
// var pix = Convert.ToUInt16(pixelColorString, 16);
|
||||||
|
|
||||||
|
|
||||||
|
// //* For PixelFormat.Format16bppRgb565
|
||||||
|
// //var r = BitConverter.GetBytes((UInt16)((pix & 0xF800) >> 11));
|
||||||
|
|
||||||
|
// int red = ((pix >> 11)*527 + 23) >> 6;
|
||||||
|
// int green = (((pix >> 5) & 0x003F)*259 + 33) >> 6;
|
||||||
|
// int blue = ((pix & 0x001F)*527 + 23) >> 6;
|
||||||
|
|
||||||
|
// bitmap.SetPixel(x, y, Color.FromArgb(red, green, blue));
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string hexString = Clipboard.GetText();
|
||||||
|
//for (int x = 0; x < 320; x++)
|
||||||
|
//{
|
||||||
|
// for (int y = 0; y < 240; y++)
|
||||||
|
// {
|
||||||
|
// var pixelColorString = hexString.Substring(6 * (x + 320 * y), 6);
|
||||||
|
|
||||||
|
// var r = Convert.ToByte(pixelColorString.Substring(0, 2), 16);
|
||||||
|
// var g = Convert.ToByte(pixelColorString.Substring(2, 2), 16);
|
||||||
|
// var b = Convert.ToByte(pixelColorString.Substring(4, 2), 16);
|
||||||
|
|
||||||
|
// //* For PixelFormat.Format16bppRgb565
|
||||||
|
// //var r = BitConverter.GetBytes((UInt16)((pix & 0xF800) >> 11));
|
||||||
|
|
||||||
|
// //int red = ((pix >> 11) * 527 + 23) >> 6;
|
||||||
|
// //int green = (((pix >> 5) & 0x003F) * 259 + 33) >> 6;
|
||||||
|
// //int blue = ((pix & 0x001F) * 527 + 23) >> 6;
|
||||||
|
|
||||||
|
// bitmap.SetPixel(x, y, Color.FromArgb(r, g, b));
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
int x = 0, y = 0;
|
||||||
|
var totalImageDataSize = Convert.ToUInt32(hexString.Substring(hexString.Length - 8, 8), 16);
|
||||||
|
if (hexString.Length - 8 == totalImageDataSize)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < totalImageDataSize; i += 10) // 6 bytes for color, 4 bytes for length
|
||||||
|
{
|
||||||
|
var pixelColorString = hexString.Substring(i, 6);
|
||||||
|
var r = Convert.ToByte(pixelColorString.Substring(0, 2), 16);
|
||||||
|
var g = Convert.ToByte(pixelColorString.Substring(2, 2), 16);
|
||||||
|
var b = Convert.ToByte(pixelColorString.Substring(4, 2), 16);
|
||||||
|
|
||||||
|
var pixelCountString = hexString.Substring(i + 6, 4);
|
||||||
|
var pixelCount = Convert.ToUInt16(pixelCountString, 16);
|
||||||
|
|
||||||
|
for (int p = 0; p < pixelCount; p++)
|
||||||
|
{
|
||||||
|
bitmap.SetPixel(x, y, Color.FromArgb(r, g, b));
|
||||||
|
x++;
|
||||||
|
if (x > 319)
|
||||||
|
{
|
||||||
|
x = 0;
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pictureBox.Image = bitmap;
|
||||||
|
btnSaveAs.Visible = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lblFailed.Text = "Image Data length mismatch.";
|
||||||
|
pictureBox.Image = null;
|
||||||
|
lblFailed.Visible = true;
|
||||||
|
btnSaveAs.Visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
lblFailed.Text = "Failed to load an image from clipboard\nTry increasing ILI9341_SPI_CLKDIVIDER or\nchange to NORMAL or EXTENDED SPI mode.";
|
||||||
|
pictureBox.Image = null;
|
||||||
|
lblFailed.Visible = true;
|
||||||
|
btnSaveAs.Visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnSaveAs_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
saveFileDialog.FileName = Path.GetFileNameWithoutExtension(saveFileDialog.FileName);
|
||||||
|
var result = saveFileDialog.ShowDialog();
|
||||||
|
if (result == DialogResult.OK)
|
||||||
|
{
|
||||||
|
ImageFormat imageFormat = ImageFormat.Bmp;
|
||||||
|
switch (Path.GetExtension(saveFileDialog.FileName).ToLower())
|
||||||
|
{
|
||||||
|
case ".jpg":
|
||||||
|
imageFormat = ImageFormat.Jpeg;
|
||||||
|
break;
|
||||||
|
case ".png":
|
||||||
|
imageFormat = ImageFormat.Png;
|
||||||
|
break;
|
||||||
|
case ".gif":
|
||||||
|
imageFormat = ImageFormat.Gif;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pictureBox.Image.Save(saveFileDialog.FileName, imageFormat);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,123 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<metadata name="saveFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>17, 17</value>
|
||||||
|
</metadata>
|
||||||
|
</root>
|
|
@ -0,0 +1,82 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{AD6D4A3D-2F94-435B-836F-E617ED847F46}</ProjectGuid>
|
||||||
|
<OutputType>WinExe</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>ILIScreenshotViewer</RootNamespace>
|
||||||
|
<AssemblyName>ILIScreenshotViewer</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Windows.Forms" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Form1.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Form1.Designer.cs">
|
||||||
|
<DependentUpon>Form1.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<EmbeddedResource Include="Form1.resx">
|
||||||
|
<DependentUpon>Form1.cs</DependentUpon>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
</EmbeddedResource>
|
||||||
|
<Compile Include="Properties\Resources.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<None Include="Properties\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
<Compile Include="Properties\Settings.Designer.cs">
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
|
<Target Name="BeforeBuild">
|
||||||
|
</Target>
|
||||||
|
<Target Name="AfterBuild">
|
||||||
|
</Target>
|
||||||
|
-->
|
||||||
|
</Project>
|
|
@ -0,0 +1,20 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 2012
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILIScreenshotViewer", "ILIScreenshotViewer.csproj", "{AD6D4A3D-2F94-435B-836F-E617ED847F46}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{AD6D4A3D-2F94-435B-836F-E617ED847F46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{AD6D4A3D-2F94-435B-836F-E617ED847F46}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{AD6D4A3D-2F94-435B-836F-E617ED847F46}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{AD6D4A3D-2F94-435B-836F-E617ED847F46}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -0,0 +1,21 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace ILIScreenshotViewer
|
||||||
|
{
|
||||||
|
static class Program
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The main entry point for the application.
|
||||||
|
/// </summary>
|
||||||
|
[STAThread]
|
||||||
|
static void Main()
|
||||||
|
{
|
||||||
|
Application.EnableVisualStyles();
|
||||||
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
Application.Run(new Form1());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("ILIScreenshotViewer")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("Microsoft")]
|
||||||
|
[assembly: AssemblyProduct("ILIScreenshotViewer")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © Microsoft 2014")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("bfab4204-5b3c-43c8-b397-d137817de176")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
71
STM32F1/libraries/ILI9341_due_STM/tools/ILIScreenshotViewer/src/Properties/Resources.Designer.cs
generated
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.18063
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace ILIScreenshotViewer.Properties
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
|
/// </summary>
|
||||||
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
|
// class via a tool like ResGen or Visual Studio.
|
||||||
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
|
// with the /str option, or rebuild your VS project.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Resources
|
||||||
|
{
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if ((resourceMan == null))
|
||||||
|
{
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ILIScreenshotViewer.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
|
/// resource lookups using this strongly typed resource class.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,117 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
30
STM32F1/libraries/ILI9341_due_STM/tools/ILIScreenshotViewer/src/Properties/Settings.Designer.cs
generated
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// This code was generated by a tool.
|
||||||
|
// Runtime Version:4.0.30319.18063
|
||||||
|
//
|
||||||
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
|
// the code is regenerated.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace ILIScreenshotViewer.Properties
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
|
||||||
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
|
||||||
|
{
|
||||||
|
|
||||||
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
|
public static Settings Default
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||||
|
<Profiles>
|
||||||
|
<Profile Name="(Default)" />
|
||||||
|
</Profiles>
|
||||||
|
<Settings />
|
||||||
|
</SettingsFile>
|