1
0

add screen library

This commit is contained in:
2024-01-13 19:15:18 +01:00
parent 7b660f0fe2
commit 65ff5de90f
533 changed files with 113575 additions and 2 deletions

View File

@ -0,0 +1,50 @@
/**
******************************************************************************
* File Name : app_touchgfx.c
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
#include "app_touchgfx.h"
void touchgfx_init(void);
void touchgfx_taskEntry(void);
/**
* Initialize TouchGFX application
*/
void MX_TouchGFX_Init(void)
{
// Calling farward to touchgfx_init in C++ domain
touchgfx_init();
}
/**
* TouchGFX application entry function
*/
void MX_TouchGFX_Process(void)
{
// Calling farward to touchgfx_init in C++ domain
touchgfx_taskEntry();
}
/**
* TouchGFX application thread
*/
void TouchGFX_Task(void *argument)
{
// Calling farward to touchgfx_init in C++ domain
touchgfx_taskEntry();
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,21 @@
/**
******************************************************************************
* File Name : app_touchgfx.h
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
void MX_TouchGFX_Init(void);
void MX_TouchGFX_Process(void);
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,21 @@
{
"Application": {
"Name": "STM32F746G_DISCO",
"TouchGfxPath": "../Middlewares/ST/touchgfx",
"AvailableColorDepths": [ 16 ],
"AvailableLCDs":
{
"16": "LCD16bpp"
},
"AvailableResolutions" : [
{
"Width": 480,
"Height": 272
}
],
"PostGenerateTargetCommand" : "touchgfx update_project --project-file=../STM32F746G_DISCO.ioc --platform=m7",
"Family" : "STM32F7"
},
"Version": "4.16.1"
}

View File

@ -0,0 +1,20 @@
{
"image_configuration": {
"images": {},
"dither_algorithm": "2",
"alpha_dither": "yes",
"layout_rotation": "0",
"opaque_image_format": "RGB565",
"nonopaque_image_format": "ARGB8888",
"section": "ExtFlashSection",
"extra_section": "ExtFlashSection"
},
"text_configuration": {
"remap": "yes",
"a4": "yes",
"binary_translations": "no",
"binary_fonts": "no",
"framebuffer_bpp": "16",
"font_format": "0"
}
}

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 821 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 785 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 815 B

Binary file not shown.

View File

@ -0,0 +1,8 @@
# Relative location of the TouchGFX framework from root of application
touchgfx_path := ../Middlewares/ST/touchgfx
# Location of the TouchGFX Environment
touchgfx_env := C:/devel/TouchGFX-4.16.1/env
# Optional additional compiler flags
user_cflags := -DUSE_BPP=16

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<ImportGroup Label="PropertySheets"/>
<PropertyGroup Label="UserMacros">
<UseBPP>16</UseBPP>
<TouchGFXReleasePath>..\..\..\Middlewares\ST\touchgfx</TouchGFXReleasePath>
<TouchGFXEnvPath>C:\devel\TouchGFX-4.16.1\env</TouchGFXEnvPath>
<ApplicationRoot>..\..</ApplicationRoot>
</PropertyGroup>
<PropertyGroup/>
<ItemDefinitionGroup/>
<ItemGroup>
<BuildMacro Include="UseBPP">
<Value>$(UseBPP)</Value>
</BuildMacro>
<BuildMacro Include="TouchGFXReleasePath">
<Value>$(TouchGFXReleasePath)</Value>
</BuildMacro>
<BuildMacro Include="TouchGFXEnvPath">
<Value>$(TouchGFXEnvPath)</Value>
</BuildMacro>
<BuildMacro Include="ApplicationRoot">
<Value>$(ApplicationRoot)</Value>
</BuildMacro>
</ItemGroup>
</Project>

View File

@ -0,0 +1,68 @@
32
45
46
47
48
49
50
51
52
53
54
55
56
57
58
63
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122

View File

@ -0,0 +1,3 @@
43
45
63

View File

@ -0,0 +1 @@
{"typographies":[["Default","verdana.ttf",20,4],["Large","verdana.ttf",40,4],["Small","verdana.ttf",10,4]],"generate_font_format":"0"}

View File

@ -0,0 +1 @@
{"typographies":[["Default","verdana.ttf",20,4],["Large","verdana.ttf",40,4],["Small","verdana.ttf",10,4]],"generate_font_format":"0"}

View File

@ -0,0 +1,70 @@
BA
F0
32
45
46
47
48
49
50
51
52
53
54
55
56
57
58
63
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122

View File

@ -0,0 +1,3 @@
BA
F0
63

View File

@ -0,0 +1,5 @@
BA
F0
43
45
63

View File

@ -0,0 +1,38 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#ifndef APPLICATIONFONTPROVIDER_HPP
#define APPLICATIONFONTPROVIDER_HPP
#include <touchgfx/FontManager.hpp>
namespace touchgfx
{
class FlashDataReader;
}
struct Typography
{
static const touchgfx::FontId DEFAULT = 0;
static const touchgfx::FontId LARGE = 1;
static const touchgfx::FontId SMALL = 2;
};
struct TypographyFontIndex
{
static const touchgfx::FontId DEFAULT = 0; // verdana_20_4bpp
static const touchgfx::FontId LARGE = 1; // verdana_40_4bpp
static const touchgfx::FontId SMALL = 2; // verdana_10_4bpp
static const uint16_t NUMBER_OF_FONTS = 3;
};
class ApplicationFontProvider : public touchgfx::FontProvider
{
public:
virtual touchgfx::Font* getFont(touchgfx::FontId typography);
static void setFlashReader(touchgfx::FlashDataReader* /* flashReader */) { }
static touchgfx::FlashDataReader* getFlashReader() { return 0; }
};
#endif // APPLICATIONFONTPROVIDER_HPP

View File

@ -0,0 +1,71 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#ifndef CACHEDFONT_HPP
#define CACHEDFONT_HPP
#include <fonts/GeneratedFont.hpp>
#include <fonts/FontCache.hpp>
namespace touchgfx
{
class CachedFont : public GeneratedFont
{
public:
CachedFont(const struct touchgfx::BinaryFontData* data, FontId id, FontCache* _cache, const GeneratedFont* _flashFont)
: GeneratedFont(0, //GlyphNode*
data->numberOfGlyphs,
data->height,
data->pixBelowBase,
data->bitsPerPixel,
data->byteAlignRow,
data->maxLeft,
data->maxRight,
0, //glyphDataPointer
0, //Kerning table not used for cached font
data->fallbackChar,
data->ellipsisChar,
0), //gsubTablePointer
fontId(id),
cache(_cache),
flashFont(_flashFont)
{}
CachedFont() : GeneratedFont() {}
using GeneratedFont::getGlyph;
virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const;
virtual const uint8_t* getPixelData(const GlyphNode* glyph) const;
virtual int8_t getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const;
void setFontCache(FontCache& cache);
FontId getFontId() const
{
return fontId;
}
virtual const uint16_t* getGSUBTable() const
{
if (gsubTable != 0)
{
return gsubTable;
}
return flashFont->getGSUBTable();
}
virtual void setGSUBTable(const uint16_t* table)
{
gsubTable = table;
}
private:
FontId fontId;
FontCache* cache;
const GeneratedFont* flashFont;
};
} // namespace touchgfx
#endif // CACHEDFONT_HPP

View File

@ -0,0 +1,94 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#ifndef FONTCACHE_HPP
#define FONTCACHE_HPP
#include <fonts/ApplicationFontProvider.hpp>
#include <touchgfx/Font.hpp>
#include <touchgfx/TypedText.hpp>
namespace touchgfx
{
class CachedFont;
class FontDataReader
{
public:
virtual ~FontDataReader() { }
virtual void open() = 0;
virtual void close() = 0;
virtual void setPosition(uint32_t position) = 0;
virtual void readData(void* out, uint32_t numberOfBytes) = 0;
};
class FontCache
{
public:
FontCache();
void setReader(FontDataReader* reader);
void clear(bool keepGsubTable = false);
void setMemory(uint8_t* memory, uint32_t size);
void initializeCachedFont(TypedText t, CachedFont* font, bool loadGsubTable = false);
bool cacheString(TypedText t, const Unicode::UnicodeChar* string);
bool cacheLigatures(CachedFont* font, TypedText t, const Unicode::UnicodeChar* string);
const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, FontId font) const;
uint32_t getMemoryUsage()
{
return memorySize - (gsubStart - top);
}
void open();
void close();
static inline const uint8_t* getPixelData(const GlyphNode* glyph)
{
return ((const uint8_t*)glyph) + SizeGlyphNode + 4;
}
static inline bool isCached(const GlyphNode* g)
{
return g->dataOffset == 0xFFFFFFFF;
}
private:
static const uint32_t SizeGlyphNode = 16;
bool contains(Unicode::UnicodeChar unicode, FontId font) const;
void insert(Unicode::UnicodeChar unicode, FontId font, uint32_t bpp, bool& outOfMemory);
uint8_t* copyGlyph(uint8_t* top, Unicode::UnicodeChar unicode, FontId font, uint32_t bpp, bool& outOfMemory);
void cacheData(uint32_t bpp, GlyphNode* first);
bool cacheSortedString(TypedText t);
bool createSortedString(const Unicode::UnicodeChar* string);
bool createSortedLigatures(CachedFont* font, TypedText t, const Unicode::UnicodeChar* string, ...);
bool sortSortedString(int n);
void setPosition(uint32_t position);
void readData(void* out, uint32_t numberOfBytes);
struct
{
uint8_t* first; //first glyphnode, glyph in cache;
uint8_t* last; //first glyphnode, glyph in cache;
} fontTable[MAX(TypographyFontIndex::NUMBER_OF_FONTS, 1)];
uint32_t memorySize;
uint8_t* memory; //start of memory
uint8_t* top; //first unused byte
uint8_t* gsubStart; //first address of GSUB tables, allocated in the end of the cache
FontDataReader* reader;
Unicode::UnicodeChar* sortedString;
//Must be bigger than BinaryFontData
static const uint32_t MAX_BUFFER_SIZE = 64;
char buffer[MAX_BUFFER_SIZE];
uint32_t glyphDataOffset;
uint16_t numGlyphs;
uint16_t currentFileGlyphNumber;
GlyphNode currentFileGlyphNode;
};
} // namespace touchgfx
#endif // FONTCACHE_HPP

View File

@ -0,0 +1,133 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#ifndef GENERATEDFONT_HPP
#define GENERATEDFONT_HPP
#include <touchgfx/ConstFont.hpp>
namespace touchgfx
{
/**
* An GeneratedFont has both glyph table and glyph data placed in a flash which
* supports random access read (i.e. not a NAND flash)
*
* @see ConstFont
*/
class GeneratedFont : public ConstFont
{
public:
/**
* Construct the GeneratedFont.
*
* @param list The array of glyphs known to this font.
* @param size The number of glyphs in list.
* @param height The height in pixels of the highest character in this font.
* @param pixBelowBase The maximum number of pixels that can be drawn below the
* baseline in this font.
* @param bitsPerPixel The number of bits per pixel in this font.
* @param byteAlignRow Are glyphs encoded using A4 format
* @param maxLeft The maximum a character extends to the left.
* @param maxRight The maximum a character extends to the right.
* @param glyphDataInternalFlash Pointer to the glyph data for the font, placed in internal
* flash.
* @param kerningList pointer to the kerning data for the font, placed in internal
* flash.
* @param fallbackChar The fallback character for the typography in case no glyph is
* available.
* @param ellipsisChar The ellipsis character used for truncating long texts.
* @param gsubTable Pointer to GSUB table.
*/
GeneratedFont(const GlyphNode* list, uint16_t size, uint16_t height, uint8_t pixBelowBase, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData);
using ConstFont::getGlyph;
/**
* Obtains a RAM-based pointer to the pixel data for the specified glyph.
*
* @param glyph The glyph to get the pixels data of.
*
* @return The pixel data of the glyph.
*/
virtual const uint8_t* getPixelData(const GlyphNode* glyph) const;
/**
* Gets the kerning distance between two characters.
*
* @param prevChar The unicode value of the previous character.
* @param glyph the glyph object for the current character.
*
* @return The kerning distance between prevChar and glyph char.
*/
virtual int8_t getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const;
/**
* Gets GSUB table.
*
* @return The GSUB table or null if font has GSUB no table
*/
virtual const uint16_t* getGSUBTable() const
{
return gsubTable;
}
protected:
GeneratedFont() : ConstFont(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), glyphData(0), kerningData(0), gsubTable(0) { }
const void* glyphData; ///< Information describing the glyphs
const KerningNode* kerningData; ///< Information describing the kerning
const uint16_t* gsubTable; ///< Information describing the GSUB tables
};
struct BinaryFontData
{
uint32_t fontIndex; // The font index (as used by TypedTextDatabase)
uint32_t sizeOfFontData; // Size of the complete BinaryFont
uint32_t offsetToTable; // GlyphNode[]
uint32_t offsetToKerning; // KerningNode[]
uint32_t offsetToGlyphs; // uint8_t[]
uint32_t offsetToGSUB; // uint16_t[]
uint16_t numberOfGlyphs; // Number of glyphs in Table and Glyphs
uint16_t height; // Font height from base
uint8_t pixBelowBase; // Max pixels below base
uint8_t bitsPerPixel: 7; // Bpp
uint8_t byteAlignRow: 1; // A4/A2/A1
uint8_t maxLeft; // The maximum a character extends to the left
uint8_t maxRight; // The maximum a character extends to the right
Unicode::UnicodeChar fallbackChar; // Fallback Character for the font
Unicode::UnicodeChar ellipsisChar; // Ellipsis Character for the font
};
class BinaryFont : public GeneratedFont
{
public:
BinaryFont(const struct touchgfx::BinaryFontData* data)
: GeneratedFont((const GlyphNode*)((const uint8_t*)data + data->offsetToTable),
data->numberOfGlyphs,
data->height,
data->pixBelowBase,
data->bitsPerPixel,
data->byteAlignRow,
data->maxLeft,
data->maxRight,
0,
(const KerningNode*)((const uint8_t*)data + data->offsetToKerning),
data->fallbackChar,
data->ellipsisChar,
(data->offsetToGSUB == 0) ? 0 : (const uint16_t*)((const uint8_t*)data + data->offsetToGSUB)),
glyphData((const uint8_t*)data + data->offsetToGlyphs)
{
}
BinaryFont() : GeneratedFont() {}
virtual const uint8_t* getPixelData(const GlyphNode* glyph) const
{
const uint8_t* data = (const uint8_t*)glyphData;
return &(data[glyph->dataOffset]);
}
protected:
const uint8_t* glyphData;
};
} // namespace touchgfx
#endif // GENERATEDFONT_HPP

View File

@ -0,0 +1,109 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#ifndef UNMAPPEDDATAFONT_HPP
#define UNMAPPEDDATAFONT_HPP
#include <touchgfx/Font.hpp>
namespace touchgfx
{
/**
* An UnmappedDataFont has both glyph table and glyph data placed in a
* flash which does not support random access read (indirect
* access). A unicode table is located in a flash with random read
* access (direct access).
*
* @see Font, ConstFont
*/
class UnmappedDataFont : public Font
{
public:
/**
* Construct the UnmappedDataFont.
*
* @param list The array of glyphs known to this font (indirect).
* @param unicodes The array of unicodes known to this font (direct).
* @param size The number of glyphs in list.
* @param height The height in pixels of the highest character in this font.
* @param pixBelowBase The maximum number of pixels that can be drawn below the
* baseline in this font.
* @param bitsPerPixel The number of bits per pixel in this font.
* @param byteAlignRow Are glyphs encoded using A4 format
* @param maxLeft The maximum a character extends to the left.
* @param maxRight The maximum a character extends to the right.
* @param glyphDataList Pointer to pointers the glyph data for the font (indirect).
* @param kerningList pointer to the kerning data for the font (direct).
* @param fallbackChar The fallback character for the typography in case no glyph is
* available.
* @param ellipsisChar The ellipsis character used for truncating long texts.
* @param gsubTable Pointer to GSUB table (direct).
*/
UnmappedDataFont(const GlyphNode* list, const uint16_t* unicodes, uint16_t size, uint16_t height, uint8_t pixBelowBase, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataList, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData);
using Font::getGlyph;
/**
* Gets the glyph data associated with the specified Unicode. The
GlyphNode is allocated in the buffer passed to the constructor.
*
* Please note that in case of Thai letters and Arabic letters
* where diacritics can be placed relative to the previous
* character(s), please use TextProvider::getNextLigature()
* instead as it will create a temporary GlyphNode that will be
* adjusted with respect to X/Y position.
*
* @param unicode The character to look up.
* @param pixelData Pointer to the pixel data for the glyph if the glyph is
* found. This is set by this method.
* @param [out] bitsPerPixel Reference where to place the number of bits per pixel.
*
* @return A pointer to the glyph node or null if the glyph was not found.
*/
virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const;
/**
* Obtains the address to the pixel data for the specified glyph.
*
* @param glyph The glyph to get the pixels data of.
*
* @return The address of the pixel data of the glyph.
*/
virtual const uint8_t* getPixelData(const GlyphNode* glyph) const;
/**
* Gets the kerning distance between two characters.
*
* @param prevChar The unicode value of the previous character.
* @param glyph the glyph object for the current character.
*
* @return The kerning distance between prevChar and glyph char.
*/
virtual int8_t getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const;
/**
* Gets GSUB table.
*
* @return The GSUB table or null if font has GSUB no table
*/
virtual const uint16_t* getGSUBTable() const
{
return gsubTable;
}
protected:
UnmappedDataFont() : Font(0, 0, 0, 0, 0, 0, 0, 0), glyphList(0), unicodes(0), glyphDataList(0), kerningData(0), gsubTable(0) { }
int lookupUnicode(uint16_t unicode) const;
const GlyphNode* glyphList; ///< The list of glyphs
uint16_t listSize; ///< The size of the list of glyphs
const uint16_t* unicodes; ///< LookupTable with all unicodes in this font
const void* glyphDataList; ///< Information describing the glyphs (list of pointers)
const KerningNode* kerningData; ///< Information describing the kerning
const uint16_t* gsubTable; ///< Information describing the GSUB tables
static GlyphNode glyphNodeBuffer; ///< Buffer for GlyphNodes read from unmapped flash
};
} // namespace touchgfx
#endif // UNMAPPEDDATAFONT_HPP

View File

@ -0,0 +1,24 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#include <fonts/ApplicationFontProvider.hpp>
#include <fonts/GeneratedFont.hpp>
#include <texts/TypedTextDatabase.hpp>
touchgfx::Font* ApplicationFontProvider::getFont(touchgfx::FontId typography)
{
switch (typography)
{
case Typography::DEFAULT:
// verdana_20_4bpp
return const_cast<touchgfx::Font*>(TypedTextDatabase::getFonts()[0]);
case Typography::LARGE:
// verdana_40_4bpp
return const_cast<touchgfx::Font*>(TypedTextDatabase::getFonts()[1]);
case Typography::SMALL:
// verdana_10_4bpp
return const_cast<touchgfx::Font*>(TypedTextDatabase::getFonts()[2]);
default:
return 0;
}
}

View File

@ -0,0 +1,58 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#include <fonts/CachedFont.hpp>
namespace touchgfx
{
const uint8_t* CachedFont::getPixelData(const GlyphNode* glyph) const
{
//if glyph is cached, then data is present just after the GlyphNode
if (FontCache::isCached(glyph))
{
const uint8_t* data = FontCache::getPixelData(glyph);
return data;
}
else
{
return flashFont->getPixelData(glyph);
}
}
const GlyphNode* CachedFont::getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const
{
//look first in internal flash font
const GlyphNode* n = flashFont->find(unicode);
if ((n == 0) && (cache != 0))
{
//now look in FontCache table
n = cache->getGlyph(unicode, fontId);
}
//revert to normal behaviour if still not found
if (n == 0 && unicode != 0 && unicode != '\n')
{
Unicode::UnicodeChar fallbackChar = flashFont->getFallbackChar();
n = flashFont->find(fallbackChar);
if (n == 0)
{
n = cache->getGlyph(fallbackChar, fontId);
}
}
if (n != 0)
{
pixelData = getPixelData(n);
bitsPerPixel = getBitsPerPixel();
return n;
}
return (const GlyphNode*)0;
}
int8_t CachedFont::getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const
{
//Kerning is not supported by Font Caching
return 0;
}
}

View File

@ -0,0 +1,378 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#include <fonts/FontCache.hpp>
#include <fonts/CachedFont.hpp>
#include <texts/TypedTextDatabase.hpp>
#include <touchgfx/TextProvider.hpp>
#include <touchgfx/Utils.hpp>
#include <cstring>
namespace touchgfx
{
FontCache::FontCache()
: memorySize(0), memory(0), top(0), gsubStart(0), reader(0)
{
}
void FontCache::clear(bool keepGsubTable /* = false */)
{
memset(fontTable, 0, sizeof(fontTable));
//top is beginning of memory, no glyphs are cached yet
top = memory;
if (!keepGsubTable)
{
//gsubStart points to end of memory (nothing loaded yet)
gsubStart = memory + memorySize;
}
}
void FontCache::setMemory(uint8_t* _memory, uint32_t size)
{
memory = _memory;
memorySize = size;
clear();
}
void FontCache::setReader(FontDataReader* _reader)
{
reader = _reader;
}
const GlyphNode* FontCache::getGlyph(Unicode::UnicodeChar unicode, FontId font) const
{
GlyphNode* g = (GlyphNode*)fontTable[font].first;
while (g)
{
if (g->unicode == unicode)
{
return g;
}
GlyphNode** next = (GlyphNode**)((uint8_t*)g + SizeGlyphNode);
g = *next;
}
return 0;
}
void FontCache::open()
{
if (reader)
{
reader->open();
}
}
void FontCache::close()
{
if (reader)
{
reader->close();
}
}
void FontCache::initializeCachedFont(TypedText t, CachedFont* font, bool loadGsubTable /*= false*/)
{
//get font index from typed text
FontId fontId = t.getFontId();
//reset to start of file
open();
setPosition(0);
assert(sizeof(touchgfx::BinaryFontData) < MAX_BUFFER_SIZE);
readData(buffer, sizeof(touchgfx::BinaryFontData));
const struct touchgfx::BinaryFontData* binaryFontData = reinterpret_cast<const struct touchgfx::BinaryFontData*>(buffer);
const Font** flashFonts = TypedTextDatabase::getFonts();
const GeneratedFont* flashFont = static_cast<const GeneratedFont*>(flashFonts[fontId]);
*font = CachedFont(reinterpret_cast<const struct touchgfx::BinaryFontData*>(buffer), fontId, this, flashFont);
if (loadGsubTable)
{
setPosition(binaryFontData->offsetToGSUB);
const uint32_t sizeOfGSUB = binaryFontData->sizeOfFontData - binaryFontData->offsetToGSUB;
if (top + sizeOfGSUB < gsubStart) //room for this GSUB table
{
uint8_t* const gsubPosition = gsubStart - sizeOfGSUB;
readData(gsubPosition, sizeOfGSUB);
font->setGSUBTable(reinterpret_cast<uint16_t*>(gsubPosition));
gsubStart -= sizeOfGSUB;
}
else
{
font->setGSUBTable(0);
}
}
close();
}
bool FontCache::cacheString(TypedText t, const Unicode::UnicodeChar* string)
{
open();
if (!createSortedString(string))
{
close();
return false;
}
const bool result = cacheSortedString(t);
close();
return result;
}
bool FontCache::cacheLigatures(CachedFont* font, TypedText t, const Unicode::UnicodeChar* string)
{
open();
if (!createSortedLigatures(font, t, string, 0, 0))
{
close();
return false;
}
const bool result = cacheSortedString(t);
close();
return result;
}
bool FontCache::cacheSortedString(TypedText t)
{
setPosition(8); //skip font index and size
uint32_t glyphNodeOffset;
uint32_t dummy;
readData(&glyphNodeOffset, sizeof(uint32_t));
readData(&dummy, sizeof(uint32_t));
readData(&glyphDataOffset, sizeof(uint32_t));
readData(&dummy, sizeof(uint32_t));
readData(&numGlyphs, sizeof(uint16_t));
FontId fontId = t.getFontId(); // Get font index from typed text
uint32_t bpp = t.getFont()->getBitsPerPixel(); // Get BPP from standard font
setPosition(glyphNodeOffset); // Go to glyph nodes for font
currentFileGlyphNumber = 0;
currentFileGlyphNode.unicode = 0; // Force reading of first glyph
const Unicode::UnicodeChar* string = sortedString;
Unicode::UnicodeChar last = 0;
GlyphNode* firstNewGlyph = 0;
bool outOfMemory = false;
while (*string)
{
Unicode::UnicodeChar ch = *string;
if (ch != last)
{
if (!contains(ch, fontId))
{
insert(ch, fontId, bpp, outOfMemory);
if (outOfMemory)
{
break;
}
if (firstNewGlyph == 0)
{
firstNewGlyph = (GlyphNode*)fontTable[fontId].last;
}
}
}
last = ch;
string++;
}
cacheData(bpp, firstNewGlyph);
return !outOfMemory;
}
bool FontCache::contains(Unicode::UnicodeChar unicode, FontId font) const
{
GlyphNode* g = (GlyphNode*)fontTable[font].first;
while (g)
{
if (g->unicode == unicode)
{
return true;
}
GlyphNode** next = (GlyphNode**)((uint8_t*)g + SizeGlyphNode);
g = *next;
}
return false;
}
void FontCache::insert(Unicode::UnicodeChar unicode, FontId font, uint32_t bpp, bool& outOfMemory)
{
//insert new glyphnode and glyph after last for font.
uint8_t* oldTop = top;
top = copyGlyph(top, unicode, font, bpp, outOfMemory);
if (top == oldTop)
{
return;
}
if (fontTable[font].last == 0)
{
//first glyph
fontTable[font].first = oldTop;
fontTable[font].last = oldTop;
}
else
{
//set next pointer of old last glyph
uint8_t** old_next = (uint8_t**)(fontTable[font].last + SizeGlyphNode);
*old_next = oldTop;
//save new glyph as last glyph
fontTable[font].last = oldTop;
}
}
uint8_t* FontCache::copyGlyph(uint8_t* top, Unicode::UnicodeChar unicode, FontId font, uint32_t bpp, bool& outOfMemory)
{
while (currentFileGlyphNumber < numGlyphs && currentFileGlyphNode.unicode < unicode)
{
readData(&currentFileGlyphNode, sizeof(GlyphNode));
currentFileGlyphNumber++;
}
if (currentFileGlyphNode.unicode != unicode)
{
//glyphnode not found
return top;
}
//glyphnode found
uint32_t glyphSize = ((currentFileGlyphNode.width() + 1) & ~1) * currentFileGlyphNode.height() * bpp / 8;
glyphSize = (glyphSize + 3) & ~0x03;
uint32_t requiredMem = SizeGlyphNode + 4 + glyphSize; // GlyphNode + next ptr + glyph
//is space available before sortedString
if (top + requiredMem > (uint8_t*)sortedString)
{
outOfMemory = true;
return top;
}
*(GlyphNode*)top = currentFileGlyphNode;
//clear next pointer
uint8_t** next = (uint8_t**)(top + SizeGlyphNode);
*next = 0;
top += requiredMem;
return top;
}
void FontCache::cacheData(uint32_t bpp, GlyphNode* first)
{
GlyphNode* gn = first;
while (gn)
{
uint8_t* p = (uint8_t*)gn;
if (gn->dataOffset != 0xFFFFFFFF)
{
p += SizeGlyphNode;
//next pointer
p += 4;
//seek and copy
setPosition(glyphDataOffset + gn->dataOffset);
uint32_t glyphSize = ((gn->width() + 1) & ~1) * gn->height() * bpp / 8;
readData(p, glyphSize);
//mark glyphNode as cached
gn->dataOffset = 0xFFFFFFFF;
}
GlyphNode** next = (GlyphNode**)((uint8_t*)gn + SizeGlyphNode);
gn = *next;
}
}
bool FontCache::createSortedString(const Unicode::UnicodeChar* string)
{
int length = Unicode::strlen(string);
//sorted string is allocated at end of buffer
sortedString = (Unicode::UnicodeChar*)(gsubStart - (length + 1) * 2);
if ((uint8_t*)sortedString < top)
{
//unable to allocate string buffer in end of memory
return false;
}
int n = 0;
Unicode::UnicodeChar* uc = sortedString;
while (*string)
{
*uc++ = *string++;
n++;
}
*uc = 0;
return sortSortedString(n);
}
bool FontCache::createSortedLigatures(CachedFont* font, TypedText t, const Unicode::UnicodeChar* string, ...)
{
va_list pArg;
va_start(pArg, string);
TextProvider tp;
tp.initialize(string, pArg, font->getGSUBTable());
va_end(pArg);
Unicode::UnicodeChar ligature;
sortedString = (Unicode::UnicodeChar*)(gsubStart);
if ((uint8_t*)(sortedString - 1) < top)
{
return false;
}
*--sortedString = 0;
int n = 0;
while ((ligature = tp.getNextLigature(t.getTextDirection())) != 0)
{
if ((uint8_t*)(sortedString - 1) < top)
{
return false;
}
*--sortedString = ligature;
n++;
}
return sortSortedString(n);
}
bool FontCache::sortSortedString(int n)
{
Unicode::UnicodeChar* uc = sortedString;
for (int i = 0; i < n - 1; i++)
{
bool swapped = false;
for (int j = 0; j < n - i - 1; j++)
{
if (uc[j] > uc[j + 1])
{
Unicode::UnicodeChar temp = uc[j];
uc[j] = uc[j + 1];
uc[j + 1] = temp;
swapped = true;
}
}
//if no two elements were swapped by inner loop, then break
if (!swapped)
{
break;
}
}
return true;
}
void FontCache::setPosition(uint32_t position)
{
if (reader)
{
reader->setPosition(position);
}
}
void FontCache::readData(void* out, uint32_t numberOfBytes)
{
if (reader)
{
reader->readData(out, numberOfBytes);
}
}
} // namespace touchgfx

View File

@ -0,0 +1,202 @@
#include <touchgfx/hal/Types.hpp>
FONT_GLYPH_LOCATION_FLASH_PRAGMA
KEEP extern const uint8_t unicodes_verdana_10_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE =
{
// Unicode: [0x0020]
// (Has no glyph data)
// Unicode: [0x002D]
0xE4, 0xBE,
// Unicode: [0x002E]
0x36, 0x6C,
// Unicode: [0x002F]
0x00, 0xC0, 0x01, 0x00, 0xA3, 0x00, 0x00, 0x49, 0x00, 0x00, 0x0C, 0x00, 0x50, 0x08, 0x00, 0xA0,
0x03, 0x00, 0xC1, 0x00, 0x00, 0x76, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x06, 0x00, 0x00,
// Unicode: [0x0030]
0x40, 0xDC, 0x08, 0xD0, 0x02, 0x4B, 0xC3, 0x00, 0x86, 0xA5, 0x00, 0xA5, 0xA5, 0x00, 0xA5, 0xB3,
0x00, 0x96, 0xD0, 0x02, 0x5B, 0x40, 0xDD, 0x08,
// Unicode: [0x0031]
0x20, 0x0C, 0x00, 0xD7, 0x0C, 0x00, 0x20, 0x0C, 0x00, 0x20, 0x0C, 0x00, 0x20, 0x0C, 0x00, 0x20,
0x0C, 0x00, 0x20, 0x0C, 0x00, 0xC8, 0xCE, 0x04,
// Unicode: [0x0032]
0xB0, 0xEE, 0x08, 0x50, 0x10, 0x4C, 0x00, 0x00, 0x5A, 0x00, 0x10, 0x2D, 0x00, 0xB0, 0x06, 0x00,
0x7A, 0x00, 0xB1, 0x07, 0x00, 0xF3, 0xDD, 0x9D,
// Unicode: [0x0033]
0xA0, 0xED, 0x1A, 0x50, 0x00, 0x6B, 0x00, 0x10, 0x3B, 0x00, 0xF7, 0x08, 0x00, 0x00, 0x5A, 0x00,
0x00, 0x86, 0x42, 0x10, 0x5B, 0xB2, 0xDE, 0x08,
// Unicode: [0x0034]
0x00, 0x70, 0x0C, 0x00, 0xC4, 0x0C, 0x10, 0x3C, 0x0C, 0xB0, 0x24, 0x0C, 0x77, 0x20, 0x0C, 0xD9,
0xDD, 0xBF, 0x00, 0x20, 0x0C, 0x00, 0x20, 0x0C,
// Unicode: [0x0035]
0xC0, 0xEE, 0x8E, 0xC0, 0x03, 0x00, 0xC0, 0x03, 0x00, 0xC0, 0xDE, 0x09, 0x10, 0x10, 0x7A, 0x00,
0x00, 0x96, 0x41, 0x10, 0x6B, 0xB1, 0xDE, 0x08,
// Unicode: [0x0036]
0x00, 0xD8, 0x1E, 0x90, 0x09, 0x00, 0xD1, 0x00, 0x00, 0xD3, 0xDB, 0x1A, 0xB5, 0x01, 0x98, 0xB4,
0x00, 0xB3, 0xD1, 0x03, 0x87, 0x40, 0xDC, 0x1A,
// Unicode: [0x0037]
0xE3, 0xEE, 0xBE, 0x00, 0x00, 0x96, 0x00, 0x00, 0x2D, 0x00, 0x60, 0x09, 0x00, 0xD0, 0x02, 0x00,
0xA6, 0x00, 0x00, 0x2D, 0x00, 0x50, 0x0A, 0x00,
// Unicode: [0x0038]
0x60, 0xCC, 0x1A, 0xD1, 0x00, 0x78, 0xE2, 0x02, 0x68, 0x70, 0x9E, 0x0A, 0xC1, 0x53, 0x5D, 0x95,
0x00, 0xB5, 0xD3, 0x01, 0x87, 0x70, 0xCC, 0x1A,
// Unicode: [0x0039]
0x60, 0xDD, 0x08, 0xC3, 0x01, 0x4B, 0x96, 0x00, 0x95, 0xD4, 0x01, 0xA6, 0x70, 0xCD, 0x9B, 0x00,
0x00, 0x69, 0x00, 0x40, 0x1D, 0xA0, 0xBE, 0x02,
// Unicode: [0x003A]
0xD5, 0x62, 0x00, 0x00, 0x62, 0xD5,
// Unicode: [0x003F]
0xD2, 0xCE, 0x03, 0x21, 0x50, 0x0C, 0x00, 0x30, 0x0C, 0x00, 0xC1, 0x05, 0x00, 0x4D, 0x00, 0x00,
0x0C, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0F, 0x00,
// Unicode: [0x0041]
0x00, 0xF6, 0x03, 0x00, 0x00, 0xAB, 0x08, 0x00, 0x10, 0x2D, 0x0D, 0x00, 0x60, 0x09, 0x3C, 0x00,
0xB0, 0x04, 0x88, 0x00, 0xF1, 0xDD, 0xDD, 0x00, 0x96, 0x00, 0xD0, 0x03, 0x4B, 0x00, 0x80, 0x08,
// Unicode: [0x0042]
0xDF, 0xDD, 0x04, 0x0E, 0x50, 0x0C, 0x0E, 0x60, 0x09, 0xDF, 0xFD, 0x06, 0x0E, 0x10, 0x4D, 0x0E,
0x00, 0x69, 0x0E, 0x10, 0x3D, 0xDF, 0xDD, 0x06,
// Unicode: [0x0043]
0x10, 0xE9, 0xBE, 0x04, 0xB0, 0x08, 0x40, 0x07, 0xD3, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00,
0x96, 0x00, 0x00, 0x00, 0xD3, 0x00, 0x00, 0x00, 0xC0, 0x08, 0x30, 0x06, 0x10, 0xDA, 0xBE, 0x04,
// Unicode: [0x0044]
0xDF, 0xCE, 0x05, 0x00, 0x0E, 0x30, 0x6C, 0x00, 0x0E, 0x00, 0xD3, 0x00, 0x0E, 0x00, 0xE0, 0x01,
0x0E, 0x00, 0xE0, 0x01, 0x0E, 0x00, 0xD3, 0x00, 0x0E, 0x30, 0x5C, 0x00, 0xDF, 0xCE, 0x05, 0x00,
// Unicode: [0x0045]
0xEF, 0xEE, 0x0B, 0x0E, 0x00, 0x00, 0x0E, 0x00, 0x00, 0xEF, 0xEE, 0x0A, 0x0E, 0x00, 0x00, 0x0E,
0x00, 0x00, 0x0E, 0x00, 0x00, 0xEF, 0xEE, 0x0B,
// Unicode: [0x0046]
0xEF, 0xEE, 0x09, 0x0E, 0x00, 0x00, 0x0E, 0x00, 0x00, 0xEF, 0xEE, 0x01, 0x0E, 0x00, 0x00, 0x0E,
0x00, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x00, 0x00,
// Unicode: [0x0047]
0x10, 0xD9, 0xCE, 0x07, 0xB0, 0x19, 0x20, 0x0A, 0xD3, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00,
0xA6, 0x00, 0xEC, 0x1E, 0xD3, 0x00, 0x00, 0x1E, 0xB0, 0x19, 0x10, 0x1E, 0x10, 0xD8, 0xCD, 0x07,
// Unicode: [0x0048]
0x0E, 0x00, 0x86, 0x0E, 0x00, 0x86, 0x0E, 0x00, 0x86, 0xEF, 0xEE, 0x8E, 0x0E, 0x00, 0x86, 0x0E,
0x00, 0x86, 0x0E, 0x00, 0x86, 0x0E, 0x00, 0x86,
// Unicode: [0x0049]
0xD4, 0x7E, 0x60, 0x09, 0x60, 0x09, 0x60, 0x09, 0x60, 0x09, 0x60, 0x09, 0x60, 0x09, 0xD4, 0x7E,
// Unicode: [0x004A]
0xB0, 0xAD, 0x00, 0xA5, 0x00, 0xA5, 0x00, 0xA5, 0x00, 0xA5, 0x00, 0xA5, 0x00, 0x88, 0xEA, 0x1B,
// Unicode: [0x004B]
0x0F, 0x10, 0x4C, 0x0F, 0xB0, 0x06, 0x0F, 0x89, 0x00, 0x7F, 0x0A, 0x00, 0xBF, 0x2D, 0x00, 0x0F,
0xC7, 0x00, 0x0F, 0xA0, 0x09, 0x0F, 0x10, 0x6C,
// Unicode: [0x004C]
0x0E, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x0E,
0x00, 0x00, 0x0E, 0x00, 0x00, 0xEF, 0xEE, 0x08,
// Unicode: [0x004D]
0x8F, 0x00, 0xF2, 0x07, 0xDE, 0x00, 0xC8, 0x07, 0x8D, 0x06, 0x8C, 0x07, 0x2D, 0x6C, 0x87, 0x07,
0x0D, 0xDA, 0x81, 0x07, 0x0D, 0x83, 0x80, 0x07, 0x0D, 0x00, 0x80, 0x07, 0x0D, 0x00, 0x80, 0x07,
// Unicode: [0x004E]
0xBF, 0x00, 0x86, 0xCD, 0x03, 0x86, 0x5D, 0x0A, 0x86, 0x0D, 0x2C, 0x86, 0x0D, 0xA5, 0x86, 0x0D,
0xD0, 0x88, 0x0D, 0x60, 0x8E, 0x0D, 0x00, 0x8D,
// Unicode: [0x004F]
0x10, 0xEA, 0x9E, 0x01, 0xB0, 0x07, 0x90, 0x0A, 0xC3, 0x00, 0x00, 0x1E, 0x96, 0x00, 0x00, 0x4B,
0x96, 0x00, 0x00, 0x4B, 0xC3, 0x00, 0x00, 0x1E, 0xC0, 0x07, 0x90, 0x0A, 0x10, 0xEA, 0x9E, 0x01,
// Unicode: [0x0050]
0xDF, 0xAD, 0x01, 0x0E, 0x90, 0x08, 0x0E, 0x50, 0x0A, 0x0E, 0xA1, 0x07, 0xDF, 0x8D, 0x00, 0x0E,
0x00, 0x00, 0x0E, 0x00, 0x00, 0x0E, 0x00, 0x00,
// Unicode: [0x0051]
0x10, 0xEA, 0x9E, 0x01, 0xB0, 0x07, 0x90, 0x0A, 0xC3, 0x00, 0x00, 0x1E, 0x96, 0x00, 0x00, 0x4B,
0x96, 0x00, 0x00, 0x4B, 0xC3, 0x00, 0x00, 0x1E, 0xC0, 0x07, 0x90, 0x0A, 0x10, 0xEA, 0xAF, 0x01,
0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0xC2, 0x6E,
// Unicode: [0x0052]
0xDF, 0xBD, 0x01, 0x0E, 0x80, 0x09, 0x0E, 0x50, 0x0B, 0x0E, 0xA0, 0x06, 0xDF, 0x9E, 0x00, 0x0E,
0xD4, 0x01, 0x0E, 0x70, 0x0B, 0x0E, 0x00, 0x9A,
// Unicode: [0x0053]
0x50, 0xED, 0x9D, 0x00, 0xD2, 0x02, 0x71, 0x00, 0xC4, 0x00, 0x00, 0x00, 0xC0, 0x8C, 0x15, 0x00,
0x00, 0x84, 0xDC, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x74, 0x01, 0xD2, 0x01, 0xA2, 0xDE, 0x4C, 0x00,
// Unicode: [0x0054]
0xEE, 0xFE, 0xEE, 0x02, 0x00, 0x86, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00,
0x00, 0x86, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00,
// Unicode: [0x0055]
0xD2, 0x00, 0x80, 0x07, 0xD2, 0x00, 0x80, 0x07, 0xD2, 0x00, 0x80, 0x07, 0xD2, 0x00, 0x80, 0x07,
0xD2, 0x00, 0x80, 0x07, 0xD1, 0x00, 0x90, 0x05, 0xC0, 0x05, 0xD2, 0x02, 0x20, 0xDC, 0x5D, 0x00,
// Unicode: [0x0056]
0x5B, 0x00, 0x70, 0x08, 0xA6, 0x00, 0xC0, 0x03, 0xE1, 0x00, 0xD2, 0x00, 0xB0, 0x04, 0x86, 0x00,
0x60, 0x09, 0x3B, 0x00, 0x10, 0x1E, 0x0D, 0x00, 0x00, 0xAB, 0x08, 0x00, 0x00, 0xF6, 0x03, 0x00,
// Unicode: [0x0057]
0x86, 0x00, 0x8A, 0x00, 0x59, 0xC3, 0x00, 0xCC, 0x00, 0x1D, 0xE0, 0x10, 0xCA, 0x11, 0x0D, 0xB0,
0x54, 0x97, 0x54, 0x09, 0x70, 0x87, 0x53, 0x87, 0x06, 0x30, 0xBB, 0x20, 0xBA, 0x02, 0x00, 0xBD,
0x00, 0xDC, 0x00, 0x00, 0x8B, 0x00, 0xAA, 0x00,
// Unicode: [0x0058]
0xC5, 0x00, 0xC0, 0x03, 0xA0, 0x06, 0x97, 0x00, 0x20, 0x3D, 0x1D, 0x00, 0x00, 0xE7, 0x05, 0x00,
0x00, 0xE7, 0x05, 0x00, 0x20, 0x3D, 0x1D, 0x00, 0xB0, 0x05, 0x98, 0x00, 0xA5, 0x00, 0xD0, 0x03,
// Unicode: [0x0059]
0x6A, 0x00, 0xC3, 0xD2, 0x01, 0x4B, 0x90, 0x57, 0x0A, 0x10, 0xDD, 0x02, 0x00, 0x98, 0x00, 0x00,
0x86, 0x00, 0x00, 0x86, 0x00, 0x00, 0x86, 0x00,
// Unicode: [0x005A]
0xE3, 0xEE, 0xFE, 0x03, 0x00, 0x00, 0xB5, 0x00, 0x00, 0x20, 0x2D, 0x00, 0x00, 0xC0, 0x05, 0x00,
0x00, 0x98, 0x00, 0x00, 0x40, 0x0C, 0x00, 0x00, 0xD1, 0x02, 0x00, 0x00, 0xF6, 0xEE, 0xEE, 0x04,
// Unicode: [0x0061]
0xD0, 0xDD, 0x07, 0x20, 0x10, 0x1D, 0x60, 0xCB, 0x2E, 0xC5, 0x01, 0x2C, 0x86, 0x10, 0x2D, 0xB1,
0xBB, 0x2D,
// Unicode: [0x0062]
0xC1, 0x00, 0x00, 0xC1, 0x00, 0x00, 0xD1, 0xEA, 0x1B, 0xE1, 0x03, 0x7A, 0xC1, 0x00, 0xA4, 0xC1,
0x00, 0x95, 0xD1, 0x00, 0x5A, 0xE1, 0xDC, 0x09,
// Unicode: [0x0063]
0x50, 0xDC, 0x0A, 0xD2, 0x01, 0x04, 0x86, 0x00, 0x00, 0x86, 0x00, 0x00, 0xD3, 0x01, 0x04, 0x60,
0xDD, 0x0A,
// Unicode: [0x0064]
0x00, 0x00, 0x59, 0x00, 0x00, 0x59, 0x60, 0xDD, 0x5D, 0xD2, 0x01, 0x5A, 0x86, 0x00, 0x59, 0x86,
0x00, 0x59, 0xB3, 0x00, 0x5B, 0x80, 0xBC, 0x5C,
// Unicode: [0x0065]
0x50, 0xCC, 0x09, 0xB2, 0x00, 0x49, 0xD6, 0xBB, 0x6C, 0x86, 0x00, 0x00, 0xD2, 0x02, 0x32, 0x50,
0xDC, 0x3C,
// Unicode: [0x0066]
0x70, 0xBD, 0xD0, 0x00, 0xF8, 0x6C, 0xD1, 0x00, 0xD1, 0x00, 0xD1, 0x00, 0xD1, 0x00, 0xD1, 0x00,
// Unicode: [0x0067]
0x50, 0xDD, 0x5D, 0xD2, 0x01, 0x5A, 0x86, 0x00, 0x59, 0x86, 0x00, 0x59, 0xC3, 0x10, 0x5B, 0x80,
0xCE, 0x4C, 0x10, 0x10, 0x2C, 0xC0, 0xDD, 0x06,
// Unicode: [0x0068]
0xC1, 0x00, 0x00, 0xC1, 0x00, 0x00, 0xD1, 0xE9, 0x1B, 0xE1, 0x04, 0x5A, 0xC1, 0x00, 0x77, 0xC1,
0x00, 0x77, 0xC1, 0x00, 0x77, 0xC1, 0x00, 0x77,
// Unicode: [0x0069]
0xD2, 0x00, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1,
// Unicode: [0x006A]
0x00, 0x97, 0x00, 0x00, 0x60, 0x8D, 0x00, 0x86, 0x00, 0x86, 0x00, 0x86, 0x00, 0x86, 0x00, 0x86,
0x00, 0x78, 0xD4, 0x1C,
// Unicode: [0x006B]
0xD1, 0x00, 0x00, 0xD1, 0x00, 0x00, 0xD1, 0x10, 0x4C, 0xD1, 0xB1, 0x05, 0xD1, 0x6A, 0x00, 0xF1,
0xBA, 0x00, 0xD1, 0x90, 0x09, 0xD1, 0x00, 0x7B,
// Unicode: [0x006C]
0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1,
// Unicode: [0x006D]
0xD1, 0xCA, 0x7B, 0xDB, 0x04, 0xE1, 0x02, 0x8B, 0x30, 0x0B, 0xC1, 0x00, 0x59, 0x10, 0x0D, 0xC1,
0x00, 0x59, 0x10, 0x0D, 0xC1, 0x00, 0x59, 0x10, 0x0D, 0xC1, 0x00, 0x59, 0x10, 0x0D,
// Unicode: [0x006E]
0xD1, 0xCA, 0x1B, 0xE1, 0x02, 0x59, 0xC1, 0x00, 0x77, 0xC1, 0x00, 0x77, 0xC1, 0x00, 0x77, 0xC1,
0x00, 0x77,
// Unicode: [0x006F]
0x60, 0xDD, 0x07, 0xC3, 0x01, 0x3C, 0x86, 0x00, 0x77, 0x86, 0x00, 0x77, 0xC3, 0x01, 0x3C, 0x60,
0xDD, 0x07,
// Unicode: [0x0070]
0xE1, 0xCA, 0x1B, 0xD1, 0x01, 0x78, 0xC1, 0x00, 0xA4, 0xC1, 0x00, 0x95, 0xD1, 0x00, 0x5B, 0xE1,
0xDC, 0x09, 0xC1, 0x00, 0x00, 0xC1, 0x00, 0x00,
// Unicode: [0x0071]
0x60, 0xDD, 0x5D, 0xD2, 0x01, 0x5A, 0x86, 0x00, 0x59, 0x86, 0x00, 0x59, 0xC3, 0x11, 0x5C, 0x80,
0xCE, 0x5B, 0x00, 0x00, 0x59, 0x00, 0x00, 0x59,
// Unicode: [0x0072]
0xD1, 0xE9, 0x04, 0xE1, 0x04, 0x00, 0xC1, 0x00, 0x00, 0xC1, 0x00, 0x00, 0xC1, 0x00, 0x00, 0xC1,
0x00, 0x00,
// Unicode: [0x0073]
0xA1, 0xDD, 0x06, 0x96, 0x00, 0x03, 0xE3, 0x48, 0x00, 0x20, 0xB6, 0x09, 0x23, 0x40, 0x0B, 0xD4,
0xCD, 0x03,
// Unicode: [0x0074]
0x61, 0x00, 0xD1, 0x00, 0xF9, 0x9C, 0xD1, 0x00, 0xD1, 0x00, 0xD1, 0x00, 0xE0, 0x00, 0x80, 0x9D,
// Unicode: [0x0075]
0xC2, 0x00, 0x68, 0xC2, 0x00, 0x68, 0xC2, 0x00, 0x68, 0xC2, 0x00, 0x68, 0xD1, 0x00, 0x6A, 0x70,
0xBC, 0x6B,
// Unicode: [0x0076]
0x78, 0x00, 0x78, 0xC2, 0x00, 0x1D, 0xC0, 0x33, 0x0B, 0x60, 0x98, 0x05, 0x10, 0xDD, 0x00, 0x00,
0x9B, 0x00,
// Unicode: [0x0077]
0x77, 0x60, 0x0A, 0xA4, 0xA3, 0xA0, 0x0C, 0x67, 0xD0, 0xB1, 0x49, 0x3A, 0xB0, 0x76, 0x84, 0x0C,
0x80, 0x2D, 0xD0, 0x0A, 0x40, 0x0D, 0xA0, 0x07,
// Unicode: [0x0078]
0xC5, 0x00, 0x4C, 0xA0, 0x77, 0x08, 0x10, 0xBD, 0x00, 0x10, 0xCC, 0x00, 0xA0, 0x86, 0x09, 0xA5,
0x00, 0x4D,
// Unicode: [0x0079]
0x78, 0x00, 0x68, 0xD2, 0x00, 0x1D, 0xB0, 0x54, 0x09, 0x50, 0xBA, 0x03, 0x00, 0xCD, 0x00, 0x00,
0x7A, 0x00, 0x00, 0x1D, 0x00, 0x50, 0x0A, 0x00,
// Unicode: [0x007A]
0xC6, 0xDC, 0x0B, 0x00, 0xC0, 0x03, 0x00, 0x78, 0x00, 0x40, 0x0B, 0x00, 0xD1, 0x02, 0x00, 0xE8,
0xCC, 0x0B
};

View File

@ -0,0 +1,12 @@
#include <touchgfx/hal/Types.hpp>
FONT_GLYPH_LOCATION_FLASH_PRAGMA
KEEP extern const uint8_t unicodes_verdana_20_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE =
{
// Unicode: [0x003F]
0x93, 0xEC, 0xDE, 0x29, 0x00, 0xF7, 0xAD, 0xDA, 0xEF, 0x02, 0x33, 0x00, 0x00, 0xF9, 0x0A, 0x00,
0x00, 0x00, 0xF3, 0x0C, 0x00, 0x00, 0x00, 0xF5, 0x0A, 0x00, 0x00, 0x10, 0xFD, 0x03, 0x00, 0x00,
0xD5, 0x6F, 0x00, 0x00, 0xB0, 0xCF, 0x03, 0x00, 0x00, 0xE0, 0x0C, 0x00, 0x00, 0x00, 0xE0, 0x0C,
0x00, 0x00, 0x00, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0E, 0x00,
0x00, 0x00, 0xF0, 0x0E, 0x00, 0x00
};

View File

@ -0,0 +1,50 @@
#include <touchgfx/hal/Types.hpp>
FONT_GLYPH_LOCATION_FLASH_PRAGMA
KEEP extern const uint8_t unicodes_verdana_40_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE =
{
// Unicode: [0x002B]
0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0xF6, 0xFF, 0x33, 0x33, 0x33, 0x33, 0x33, 0x02, 0xFD,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFD, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF4, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x002D]
0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
// Unicode: [0x003F]
0x00, 0x10, 0x53, 0x77, 0x57, 0x02, 0x00, 0x00, 0x00, 0x83, 0xFC, 0xFF, 0xFF, 0xFF, 0xDF, 0x17,
0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x02, 0x00, 0xFD, 0xFF, 0xFF, 0xEF, 0xFF,
0xFF, 0xFF, 0x2E, 0x00, 0xFD, 0x9E, 0x15, 0x00, 0x41, 0xFA, 0xFF, 0xBF, 0x00, 0x6B, 0x00, 0x00,
0x00, 0x00, 0x60, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFB, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC1, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0x0C, 0x00, 0x00, 0x00,
0x00, 0x00, 0xD3, 0xFF, 0xDF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x81, 0xFF, 0xFF, 0x2C, 0x00, 0x00,
0x00, 0x00, 0x60, 0xFE, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xDF, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x09,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0,
0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF,
0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF1, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00
};

View File

@ -0,0 +1,43 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#include <fonts/GeneratedFont.hpp>
namespace touchgfx
{
GeneratedFont::GeneratedFont(const GlyphNode* list, uint16_t size, uint16_t height, uint8_t pixBelowBase, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData) :
ConstFont(list, size, height, pixBelowBase, bitsPerPixel, byteAlignRow, maxLeft, maxRight, fallbackChar, ellipsisChar),
glyphData(glyphDataInternalFlash),
kerningData(kerningList),
gsubTable(gsubData)
{
}
const uint8_t* GeneratedFont::getPixelData(const GlyphNode* glyph) const
{
const uint8_t* const* table = (const uint8_t* const*)glyphData;
return &(table[glyph->unicode / 2048][glyph->dataOffset]);
}
int8_t GeneratedFont::getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const
{
if (!glyph || glyph->kerningTableSize == 0)
{
return 0;
}
const KerningNode* kerndata = kerningData + glyph->kerningTablePos();
for (uint16_t i = glyph->kerningTableSize; i > 0; i--, kerndata++)
{
if (prevChar == kerndata->unicodePrevChar)
{
return kerndata->distance;
}
if (prevChar < kerndata->unicodePrevChar)
{
break;
}
}
return 0;
}
} // namespace touchgfx

View File

@ -0,0 +1,12 @@
#include <touchgfx/Font.hpp>
FONT_KERNING_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::KerningNode kerning_verdana_10_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE =
{
{ 0x0046, -1 }, // (First char = [0x0046, F], Second char = [0x002E, .], Kerning dist = -1)
{ 0x0050, -1 }, // (First char = [0x0050, P], Second char = [0x002E, .], Kerning dist = -1)
{ 0x0054, -1 }, // (First char = [0x0054, T], Second char = [0x002E, .], Kerning dist = -1)
{ 0x0056, -1 }, // (First char = [0x0056, V], Second char = [0x002E, .], Kerning dist = -1)
{ 0x0059, -1 }, // (First char = [0x0059, Y], Second char = [0x002E, .], Kerning dist = -1)
{ 0x0072, -1 }, // (First char = [0x0072, r], Second char = [0x002E, .], Kerning dist = -1)
};

View File

@ -0,0 +1,7 @@
#include <touchgfx/Font.hpp>
FONT_KERNING_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::KerningNode kerning_verdana_20_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE =
{
{ 0, 0 }
};

View File

@ -0,0 +1,7 @@
#include <touchgfx/Font.hpp>
FONT_KERNING_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::KerningNode kerning_verdana_40_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE =
{
{ 0, 0 }
};

View File

@ -0,0 +1,93 @@
// Autogenerated, do not edit
#include <fonts/GeneratedFont.hpp>
FONT_TABLE_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::GlyphNode glyphs_verdana_10_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE =
{
{ 0, 0x0020, 0, 0, 0, 0, 4, 0, 0, 0x00 },
{ 0, 0x002D, 4, 1, 4, 0, 5, 0, 0, 0x00 },
{ 2, 0x002E, 2, 2, 2, 1, 4, 0, 6, 0x00 },
{ 4, 0x002F, 5, 10, 8, 0, 5, 0, 0, 0x00 },
{ 34, 0x0030, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 58, 0x0031, 5, 8, 8, 1, 6, 0, 0, 0x00 },
{ 82, 0x0032, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 106, 0x0033, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 130, 0x0034, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 154, 0x0035, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 178, 0x0036, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 202, 0x0037, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 226, 0x0038, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 250, 0x0039, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 274, 0x003A, 2, 6, 6, 1, 5, 0, 0, 0x00 },
{ 280, 0x003F, 5, 8, 8, 0, 5, 0, 0, 0x00 },
{ 304, 0x0041, 7, 8, 8, 0, 7, 0, 0, 0x00 },
{ 336, 0x0042, 6, 8, 8, 1, 7, 0, 0, 0x00 },
{ 360, 0x0043, 7, 8, 8, 0, 7, 0, 0, 0x00 },
{ 392, 0x0044, 7, 8, 8, 1, 8, 0, 0, 0x00 },
{ 424, 0x0045, 5, 8, 8, 1, 6, 0, 0, 0x00 },
{ 448, 0x0046, 5, 8, 8, 1, 6, 0, 0, 0x00 },
{ 472, 0x0047, 8, 8, 8, 0, 8, 0, 0, 0x00 },
{ 504, 0x0048, 6, 8, 8, 1, 8, 0, 0, 0x00 },
{ 528, 0x0049, 4, 8, 8, 0, 4, 0, 0, 0x00 },
{ 544, 0x004A, 4, 8, 8, 0, 5, 0, 0, 0x00 },
{ 560, 0x004B, 6, 8, 8, 1, 7, 0, 0, 0x00 },
{ 584, 0x004C, 5, 8, 8, 1, 6, 0, 0, 0x00 },
{ 608, 0x004D, 7, 8, 8, 1, 8, 0, 0, 0x00 },
{ 640, 0x004E, 6, 8, 8, 1, 7, 0, 0, 0x00 },
{ 664, 0x004F, 8, 8, 8, 0, 8, 0, 0, 0x00 },
{ 696, 0x0050, 5, 8, 8, 1, 6, 0, 0, 0x00 },
{ 720, 0x0051, 8, 10, 8, 0, 8, 0, 0, 0x00 },
{ 760, 0x0052, 6, 8, 8, 1, 7, 0, 0, 0x00 },
{ 784, 0x0053, 7, 8, 8, 0, 7, 0, 0, 0x00 },
{ 816, 0x0054, 7, 8, 8, 0, 6, 0, 0, 0x00 },
{ 848, 0x0055, 7, 8, 8, 0, 7, 0, 0, 0x00 },
{ 880, 0x0056, 7, 8, 8, 0, 7, 0, 0, 0x00 },
{ 912, 0x0057, 10, 8, 8, 0, 10, 0, 0, 0x00 },
{ 952, 0x0058, 7, 8, 8, 0, 7, 0, 0, 0x00 },
{ 984, 0x0059, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 1008, 0x005A, 7, 8, 8, 0, 7, 0, 0, 0x00 },
{ 1040, 0x0061, 6, 6, 6, 0, 6, 0, 0, 0x00 },
{ 1058, 0x0062, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 1082, 0x0063, 5, 6, 6, 0, 5, 0, 0, 0x00 },
{ 1100, 0x0064, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 1124, 0x0065, 6, 6, 6, 0, 6, 0, 0, 0x00 },
{ 1142, 0x0066, 4, 8, 8, 0, 4, 0, 0, 0x00 },
{ 1158, 0x0067, 6, 8, 6, 0, 6, 0, 0, 0x00 },
{ 1182, 0x0068, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 1206, 0x0069, 2, 8, 8, 0, 3, 0, 0, 0x00 },
{ 1214, 0x006A, 4, 10, 8, -1, 3, 0, 0, 0x00 },
{ 1234, 0x006B, 6, 8, 8, 0, 6, 0, 0, 0x00 },
{ 1258, 0x006C, 2, 8, 8, 0, 3, 0, 0, 0x00 },
{ 1266, 0x006D, 9, 6, 6, 0, 10, 0, 0, 0x00 },
{ 1296, 0x006E, 6, 6, 6, 0, 6, 0, 0, 0x00 },
{ 1314, 0x006F, 6, 6, 6, 0, 6, 0, 0, 0x00 },
{ 1332, 0x0070, 6, 8, 6, 0, 6, 0, 0, 0x00 },
{ 1356, 0x0071, 6, 8, 6, 0, 6, 0, 0, 0x00 },
{ 1380, 0x0072, 5, 6, 6, 0, 4, 0, 0, 0x00 },
{ 1398, 0x0073, 5, 6, 6, 0, 5, 0, 0, 0x00 },
{ 1416, 0x0074, 4, 8, 8, 0, 4, 0, 0, 0x00 },
{ 1432, 0x0075, 6, 6, 6, 0, 6, 0, 0, 0x00 },
{ 1450, 0x0076, 6, 6, 6, 0, 6, 0, 0, 0x00 },
{ 1468, 0x0077, 8, 6, 6, 0, 8, 0, 0, 0x00 },
{ 1492, 0x0078, 6, 6, 6, 0, 6, 0, 0, 0x00 },
{ 1510, 0x0079, 6, 8, 6, 0, 6, 0, 0, 0x00 },
{ 1534, 0x007A, 5, 6, 6, 0, 5, 0, 0, 0x00 }
};
// verdana_10_4bpp
extern const touchgfx::GlyphNode glyphs_verdana_10_4bpp[];
extern const uint8_t unicodes_verdana_10_4bpp_0[];
extern const uint8_t* const unicodes_verdana_10_4bpp[] =
{
unicodes_verdana_10_4bpp_0
};
extern const touchgfx::KerningNode kerning_verdana_10_4bpp[];
touchgfx::GeneratedFont& getFont_verdana_10_4bpp();
touchgfx::GeneratedFont& getFont_verdana_10_4bpp()
{
static touchgfx::GeneratedFont verdana_10_4bpp(glyphs_verdana_10_4bpp, 68, 10, 2, 4, 1, 1, 1, unicodes_verdana_10_4bpp, kerning_verdana_10_4bpp, 63, 0, 0);
return verdana_10_4bpp;
}

View File

@ -0,0 +1,26 @@
// Autogenerated, do not edit
#include <fonts/GeneratedFont.hpp>
FONT_TABLE_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::GlyphNode glyphs_verdana_20_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE =
{
{ 0, 0x003F, 9, 14, 14, 1, 11, 0, 0, 0x00 }
};
// verdana_20_4bpp
extern const touchgfx::GlyphNode glyphs_verdana_20_4bpp[];
extern const uint8_t unicodes_verdana_20_4bpp_0[];
extern const uint8_t* const unicodes_verdana_20_4bpp[] =
{
unicodes_verdana_20_4bpp_0
};
extern const touchgfx::KerningNode kerning_verdana_20_4bpp[];
touchgfx::GeneratedFont& getFont_verdana_20_4bpp();
touchgfx::GeneratedFont& getFont_verdana_20_4bpp()
{
static touchgfx::GeneratedFont verdana_20_4bpp(glyphs_verdana_20_4bpp, 1, 20, 0, 4, 1, 0, 0, unicodes_verdana_20_4bpp, kerning_verdana_20_4bpp, 63, 0, 0);
return verdana_20_4bpp;
}

View File

@ -0,0 +1,28 @@
// Autogenerated, do not edit
#include <fonts/GeneratedFont.hpp>
FONT_TABLE_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::GlyphNode glyphs_verdana_40_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE =
{
{ 0, 0x002B, 25, 25, 26, 4, 33, 0, 0, 0x00 },
{ 325, 0x002D, 13, 4, 15, 3, 18, 0, 0, 0x00 },
{ 353, 0x003F, 17, 31, 31, 3, 22, 0, 0, 0x00 }
};
// verdana_40_4bpp
extern const touchgfx::GlyphNode glyphs_verdana_40_4bpp[];
extern const uint8_t unicodes_verdana_40_4bpp_0[];
extern const uint8_t* const unicodes_verdana_40_4bpp[] =
{
unicodes_verdana_40_4bpp_0
};
extern const touchgfx::KerningNode kerning_verdana_40_4bpp[];
touchgfx::GeneratedFont& getFont_verdana_40_4bpp();
touchgfx::GeneratedFont& getFont_verdana_40_4bpp()
{
static touchgfx::GeneratedFont verdana_40_4bpp(glyphs_verdana_40_4bpp, 3, 40, 0, 4, 1, 0, 0, unicodes_verdana_40_4bpp, kerning_verdana_40_4bpp, 63, 0, 0);
return verdana_40_4bpp;
}

View File

@ -0,0 +1,148 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#include <fonts/UnmappedDataFont.hpp>
#include <fonts/ApplicationFontProvider.hpp>
#include <touchgfx/hal/FlashDataReader.hpp>
namespace touchgfx
{
GlyphNode UnmappedDataFont::glyphNodeBuffer;
UnmappedDataFont::UnmappedDataFont(const GlyphNode* list, const uint16_t* unicodeList, uint16_t size, uint16_t height, uint8_t pixBelowBase, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataList, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData) :
Font(height, pixBelowBase, bitsPerPixel, byteAlignRow, maxLeft, maxRight, fallbackChar, ellipsisChar),
glyphList(list),
listSize(size),
unicodes(unicodeList),
glyphDataList(glyphDataList),
kerningData(kerningList),
gsubTable(gsubData)
{
}
const GlyphNode* UnmappedDataFont::getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const
{
int index = lookupUnicode(unicode);
if (index != -1)
{
//Read glyphNode from unmapped flash
touchgfx::FlashDataReader* const flashReader = ApplicationFontProvider::getFlashReader();
flashReader->copyData(glyphList + index, &glyphNodeBuffer, sizeof(GlyphNode));
pixelData = getPixelData(const_cast<const GlyphNode*>(&glyphNodeBuffer));
bitsPerPixel = getBitsPerPixel();
return &glyphNodeBuffer;
}
return 0;
}
const uint8_t* UnmappedDataFont::getPixelData(const GlyphNode* glyph) const
{
const uint8_t* const* table = (const uint8_t* const*)glyphDataList;
return &(table[glyph->unicode / 2048][glyph->dataOffset]);
}
int8_t UnmappedDataFont::getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const
{
if (!glyph || glyph->kerningTableSize == 0)
{
return 0;
}
const KerningNode* kerndata = kerningData + glyph->kerningTablePos();
for (uint16_t i = glyph->kerningTableSize; i > 0; i--, kerndata++)
{
if (prevChar == kerndata->unicodePrevChar)
{
return kerndata->distance;
}
if (prevChar < kerndata->unicodePrevChar)
{
break;
}
}
return 0;
}
int UnmappedDataFont::lookupUnicode(uint16_t unicode) const
{
int32_t min = 0;
int32_t max = listSize - 1;
int32_t mid = min + (unicode - unicodes[min]); // Linear up from [min].unicode
if (mid < min)
{
// Unicode < unicodes[min] => not found
return -1;
}
if (mid > max)
{
// Linear up ends too high
mid = max - (unicodes[max] - unicode); // Linear down from [max].unicode
if (mid > max)
{
// Unicode > unicodes[max] => not found
return -1;
}
if (mid < min)
{
// Linear down ends too low, take the middle element
mid = (min + max) / 2;
}
}
while (min <= max)
{
if (unicode == unicodes[mid])
{
// Found at [mid]
return mid;
}
if (unicode < unicodes[mid])
{
// Unicode is in lower half
max = mid - 1;
if (max < min)
{
// Range is empty => not found
break;
}
// We adjusted max, try linear down from [max].unicode
mid = max - (unicodes[max] - unicode);
if (mid > max)
{
// Unicode > [max].unicode => not found
break;
}
if (mid < min)
{
// Linear down ends too low, take the middle element
mid = (min + max) / 2;
}
}
else
{
// Unicode is in upper half
min = mid + 1;
if (min > max)
{
// Range is empty => not found
break;
}
// We adjusted min, try linear up from [min].unicode
mid = min + (unicode - unicodes[min]);
if (mid < min)
{
// Unicode < [min].unicode => not found
break;
}
if (mid > max)
{
// Linear up ends too high, take the middle element
mid = (min + max) / 2;
}
}
}
return -1;
}
} // namespace touchgfx

View File

@ -0,0 +1,30 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef FRONTENDAPPLICATIONBASE_HPP
#define FRONTENDAPPLICATIONBASE_HPP
#include <mvp/MVPApplication.hpp>
#include <gui/model/Model.hpp>
class FrontendHeap;
class FrontendApplicationBase : public touchgfx::MVPApplication
{
public:
FrontendApplicationBase(Model& m, FrontendHeap& heap);
virtual ~FrontendApplicationBase() { }
// MainView
void gotoMainViewScreenNoTransition();
protected:
touchgfx::Callback<FrontendApplicationBase> transitionCallback;
FrontendHeap& frontendHeap;
Model& model;
// MainView
void gotoMainViewScreenNoTransitionImpl();
};
#endif // FRONTENDAPPLICATIONBASE_HPP

View File

@ -0,0 +1,87 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef FRONTENDHEAPBASE_HPP
#define FRONTENDHEAPBASE_HPP
#include <common/Meta.hpp>
#include <common/Partition.hpp>
#include <mvp/MVPHeap.hpp>
#include <touchgfx/transitions/NoTransition.hpp>
#include <gui/common/FrontendApplication.hpp>
#include <gui/model/Model.hpp>
#include <gui/mainview_screen/MainViewView.hpp>
#include <gui/mainview_screen/MainViewPresenter.hpp>
/**
* This class provides the memory that shall be used for memory allocations
* in the frontend. A single instance of the FrontendHeap is allocated once (in heap
* memory), and all other frontend objects such as views, presenters and data model are
* allocated within the scope of this FrontendHeap. As such, the RAM usage of the entire
* user interface is sizeof(FrontendHeap).
*
* @note The FrontendHeap reserves memory for the most memory-consuming presenter and
* view only. The largest of these classes are determined at compile-time using template
* magic. As such, it is important to add all presenters, views and transitions to the
* type lists in this class.
*
*/
class FrontendHeapBase : public touchgfx::MVPHeap
{
public:
/**
* A list of all view types. Must end with meta::Nil.
* @note All view types used in the application MUST be added to this list!
*/
typedef touchgfx::meta::TypeList< MainViewView,
touchgfx::meta::Nil
> GeneratedViewTypes;
/**
* Determine (compile time) the View type of largest size.
*/
typedef touchgfx::meta::select_type_maxsize< GeneratedViewTypes >::type MaxGeneratedViewType;
/**
* A list of all presenter types. Must end with meta::Nil.
* @note All presenter types used in the application MUST be added to this list!
*/
typedef touchgfx::meta::TypeList< MainViewPresenter,
touchgfx::meta::Nil
> GeneratedPresenterTypes;
/**
* Determine (compile time) the Presenter type of largest size.
*/
typedef touchgfx::meta::select_type_maxsize< GeneratedPresenterTypes >::type MaxGeneratedPresenterType;
/**
* A list of all transition types. Must end with meta::Nil.
* @note All transition types used in the application MUST be added to this list!
*/
typedef touchgfx::meta::TypeList< touchgfx::NoTransition,
touchgfx::meta::Nil
> GeneratedTransitionTypes;
/**
* Determine (compile time) the Transition type of largest size.
*/
typedef touchgfx::meta::select_type_maxsize< GeneratedTransitionTypes >::type MaxGeneratedTransitionType;
virtual void gotoStartScreen(FrontendApplication& app)
{
app.gotoMainViewScreenNoTransition();
}
protected:
FrontendHeapBase(touchgfx::AbstractPartition& presenters, touchgfx::AbstractPartition& views, touchgfx::AbstractPartition& transitions, FrontendApplication& app)
: MVPHeap(presenters, views, transitions, app)
{
}
};
#endif // FRONTENDHEAPBASE_HPP

View File

@ -0,0 +1,11 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef SIMCONSTANTS_HPP
#define SIMCONSTANTS_HPP
static unsigned short SIM_WIDTH = 480;
static unsigned short SIM_HEIGHT = 272;
#define SIM_TITLE "STM32F746G_DISCO"
#endif // SIMCONSTANTS_HPP

View File

@ -0,0 +1,101 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef MAINVIEWVIEWBASE_HPP
#define MAINVIEWVIEWBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <mvp/View.hpp>
#include <gui/mainview_screen/MainViewPresenter.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <touchgfx/widgets/TextArea.hpp>
#include <touchgfx/widgets/TextAreaWithWildcard.hpp>
#include <touchgfx/widgets/graph/GraphWrapAndClear.hpp>
#include <touchgfx/widgets/graph/GraphElements.hpp>
#include <touchgfx/widgets/canvas/PainterRGB565.hpp>
#include <touchgfx/widgets/Button.hpp>
#include <touchgfx/widgets/Image.hpp>
class MainViewViewBase : public touchgfx::View<MainViewPresenter>
{
public:
MainViewViewBase();
virtual ~MainViewViewBase() {}
virtual void setupScreen();
/*
* Virtual Action Handlers
*/
virtual void onBtnMinusPressed()
{
// Override and implement this function in MainView
}
virtual void onBtnPlusPressed()
{
// Override and implement this function in MainView
}
virtual void onCheckBoxTriggerPressed()
{
// Override and implement this function in MainView
}
protected:
FrontendApplication& application() {
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
}
/*
* Member Declarations
*/
touchgfx::Box __background;
touchgfx::Box bgView;
touchgfx::TextArea labelTitle;
touchgfx::Box bgSignal;
touchgfx::TextAreaWithTwoWildcards labelSignal;
touchgfx::TextAreaWithOneWildcard labelDivTime;
touchgfx::Box chartBG;
touchgfx::GraphWrapAndClear<460> chart;
touchgfx::GraphElementDiamonds chartDiamonds1;
touchgfx::PainterRGB565 chartDiamonds1Painter;
touchgfx::GraphElementGridX chartMajorXAxisGrid;
touchgfx::Button btnPlus;
touchgfx::Button btnMinus;
touchgfx::Button btnTrigger;
touchgfx::TextArea labelTrigger;
touchgfx::TextArea labelPlus;
touchgfx::TextArea labelMinus;
touchgfx::Image redLedEnable;
touchgfx::Image redLedDisable;
/*
* Wildcard Buffers
*/
static const uint16_t LABELSIGNALBUFFER1_SIZE = 20;
touchgfx::Unicode::UnicodeChar labelSignalBuffer1[LABELSIGNALBUFFER1_SIZE];
static const uint16_t LABELSIGNALBUFFER2_SIZE = 20;
touchgfx::Unicode::UnicodeChar labelSignalBuffer2[LABELSIGNALBUFFER2_SIZE];
static const uint16_t LABELDIVTIME_SIZE = 20;
touchgfx::Unicode::UnicodeChar labelDivTimeBuffer[LABELDIVTIME_SIZE];
private:
/*
* Callback Declarations
*/
touchgfx::Callback<MainViewViewBase, const touchgfx::AbstractButton&> buttonCallback;
/*
* Callback Handler Declarations
*/
void buttonCallbackHandler(const touchgfx::AbstractButton& src);
/*
* Canvas Buffer Size
*/
static const uint16_t CANVAS_BUFFER_SIZE = 7200;
uint8_t canvasBuffer[CANVAS_BUFFER_SIZE];
};
#endif // MAINVIEWVIEWBASE_HPP

View File

@ -0,0 +1,43 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <new>
#include <gui_generated/common/FrontendApplicationBase.hpp>
#include <gui/common/FrontendHeap.hpp>
#include <touchgfx/transitions/NoTransition.hpp>
#include <texts/TextKeysAndLanguages.hpp>
#include <touchgfx/Texts.hpp>
#include <touchgfx/hal/HAL.hpp>
#include <platform/driver/lcd/LCD16bpp.hpp>
#include <gui/mainview_screen/MainViewView.hpp>
#include <gui/mainview_screen/MainViewPresenter.hpp>
using namespace touchgfx;
FrontendApplicationBase::FrontendApplicationBase(Model& m, FrontendHeap& heap)
: touchgfx::MVPApplication(),
transitionCallback(),
frontendHeap(heap),
model(m)
{
touchgfx::HAL::getInstance()->setDisplayOrientation(touchgfx::ORIENTATION_LANDSCAPE);
touchgfx::Texts::setLanguage(GB);
reinterpret_cast<touchgfx::LCD16bpp&>(touchgfx::HAL::lcd()).enableTextureMapperAll();
}
/*
* Screen Transition Declarations
*/
// MainView
void FrontendApplicationBase::gotoMainViewScreenNoTransition()
{
transitionCallback = touchgfx::Callback<FrontendApplicationBase>(this, &FrontendApplication::gotoMainViewScreenNoTransitionImpl);
pendingScreenTransitionCallback = &transitionCallback;
}
void FrontendApplicationBase::gotoMainViewScreenNoTransitionImpl()
{
touchgfx::makeTransition<MainViewView, MainViewPresenter, touchgfx::NoTransition, Model >(&currentScreen, &currentPresenter, frontendHeap, &currentTransition, &model);
}

View File

@ -0,0 +1,624 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <gui_generated/mainview_screen/MainViewViewBase.hpp>
#include <touchgfx/Color.hpp>
#include <texts/TextKeysAndLanguages.hpp>
#include "BitmapDatabase.hpp"
MainViewViewBase::MainViewViewBase() :
buttonCallback(this, &MainViewViewBase::buttonCallbackHandler)
{
touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE);
__background.setPosition(0, 0, 480, 272);
__background.setColor(touchgfx::Color::getColorFrom24BitRGB(0, 0, 0));
bgView.setPosition(0, 0, 480, 270);
bgView.setColor(touchgfx::Color::getColorFrom24BitRGB(255, 255, 255));
labelTitle.setXY(337, 254);
labelTitle.setColor(touchgfx::Color::getColorFrom24BitRGB(0, 0, 0));
labelTitle.setLinespacing(0);
labelTitle.setRotation(touchgfx::TEXT_ROTATE_180);
labelTitle.setTypedText(touchgfx::TypedText(T_SINGLEUSEID1));
bgSignal.setPosition(225, 18, 150, 23);
bgSignal.setColor(touchgfx::Color::getColorFrom24BitRGB(20, 151, 197));
labelSignal.setPosition(232, 24, 137, 13);
labelSignal.setColor(touchgfx::Color::getColorFrom24BitRGB(0, 0, 0));
labelSignal.setLinespacing(0);
labelSignal.setRotation(touchgfx::TEXT_ROTATE_180);
touchgfx::Unicode::snprintf(labelSignalBuffer1, LABELSIGNALBUFFER1_SIZE, "%s", touchgfx::TypedText(T_SINGLEUSEID3).getText());
labelSignal.setWildcard1(labelSignalBuffer1);
touchgfx::Unicode::snprintf(labelSignalBuffer2, LABELSIGNALBUFFER2_SIZE, "%s", touchgfx::TypedText(T_SINGLEUSEID4).getText());
labelSignal.setWildcard2(labelSignalBuffer2);
labelSignal.setTypedText(touchgfx::TypedText(T_SINGLEUSEID2));
labelDivTime.setPosition(125, 24, 70, 13);
labelDivTime.setColor(touchgfx::Color::getColorFrom24BitRGB(0, 0, 0));
labelDivTime.setLinespacing(0);
labelDivTime.setRotation(touchgfx::TEXT_ROTATE_180);
Unicode::snprintf(labelDivTimeBuffer, LABELDIVTIME_SIZE, "%s", touchgfx::TypedText(T_SINGLEUSEID6).getText());
labelDivTime.setWildcard(labelDivTimeBuffer);
labelDivTime.setTypedText(touchgfx::TypedText(T_SINGLEUSEID5));
chartBG.setPosition(10, 62, 460, 190);
chartBG.setColor(touchgfx::Color::getColorFrom24BitRGB(0, 0, 0));
chart.setScale(1);
chart.setPosition(10, 62, 460, 190);
chart.setGraphAreaMargin(0, 0, 0, 0);
chart.setGraphAreaPadding(0, 0, 0, 0);
chart.setGraphRangeY(0, 4000);
chartMajorXAxisGrid.setScale(1);
chartMajorXAxisGrid.setColor(touchgfx::Color::getColorFrom24BitRGB(255, 255, 255));
chartMajorXAxisGrid.setInterval(1000);
chartMajorXAxisGrid.setLineWidth(1);
chartMajorXAxisGrid.setAlpha(100);
chart.addGraphElement(chartMajorXAxisGrid);
chartDiamonds1.setScale(1);
chartDiamonds1Painter.setColor(touchgfx::Color::getColorFrom24BitRGB(20, 151, 197));
chartDiamonds1.setPainter(chartDiamonds1Painter);
chartDiamonds1.setDiamondWidth(2);
chart.addGraphElement(chartDiamonds1);
chart.addDataPoint(2498.16152996877f);
chart.addDataPoint(2353.95011743646f);
chart.addDataPoint(2210.80821332167f);
chart.addDataPoint(2070.05481729737f);
chart.addDataPoint(1932.97153961643f);
chart.addDataPoint(1800.78814567344f);
chart.addDataPoint(1674.66882819202f);
chart.addDataPoint(1555.69916716249f);
chart.addDataPoint(1444.87411595045f);
chart.addDataPoint(1343.08698011751f);
chart.addDataPoint(1251.11972804461f);
chart.addDataPoint(1169.63449708926f);
chart.addDataPoint(1099.16662094741f);
chart.addDataPoint(1040.11906555873f);
chart.addDataPoint(992.758542289057f);
chart.addDataPoint(957.213121282826f);
chart.addDataPoint(933.471549578937f);
chart.addDataPoint(921.38424501381f);
chart.addDataPoint(920.665790167825f);
chart.addDataPoint(930.899187522654f);
chart.addDataPoint(951.541530336835f);
chart.addDataPoint(981.93123076167f);
chart.addDataPoint(1021.29663957473f);
chart.addDataPoint(1068.76586000854f);
chart.addDataPoint(1123.37796281667f);
chart.addDataPoint(1184.09489254652f);
chart.addDataPoint(1249.8145791573f);
chart.addDataPoint(1319.38467005141f);
chart.addDataPoint(1391.61679834098f);
chart.addDataPoint(1465.30135390912f);
chart.addDataPoint(1539.22239194769f);
chart.addDataPoint(1612.17263012064f);
chart.addDataPoint(1682.96846154533f);
chart.addDataPoint(1750.46432811646f);
chart.addDataPoint(1813.56696147545f);
chart.addDataPoint(1871.24883186929f);
chart.addDataPoint(1922.56077711325f);
chart.addDataPoint(1966.64374977601f);
chart.addDataPoint(2002.73940438593f);
chart.addDataPoint(2030.19950071225f);
chart.addDataPoint(2048.49403431417f);
chart.addDataPoint(2057.21777807045f);
chart.addDataPoint(2056.09550467788f);
chart.addDataPoint(2044.98552461555f);
chart.addDataPoint(2023.88166162241f);
chart.addDataPoint(1992.91358991483f);
chart.addDataPoint(1952.34552608547f);
chart.addDataPoint(1902.57327759355f);
chart.addDataPoint(1844.11977000313f);
chart.addDataPoint(1777.62897037958f);
chart.addDataPoint(1703.85838058905f);
chart.addDataPoint(1623.67014552512f);
chart.addDataPoint(1538.02089450502f);
chart.addDataPoint(1447.9504312774f);
chart.addDataPoint(1354.56943547979f);
chart.addDataPoint(1259.0461475607f);
chart.addDataPoint(1162.59262620909f);
chart.addDataPoint(1066.45017210997f);
chart.addDataPoint(971.874501447191f);
chart.addDataPoint(880.120711308616f);
chart.addDataPoint(792.428184160252f);
chart.addDataPoint(710.005681751191f);
chart.addDataPoint(634.016768675663f);
chart.addDataPoint(565.565601529158f);
chart.addDataPoint(505.68368954229f);
chart.addDataPoint(455.317158634531f);
chart.addDataPoint(415.315187263601f);
chart.addDataPoint(386.419490879107f);
chart.addDataPoint(369.255042057208f);
chart.addDataPoint(364.322200496632f);
chart.addDataPoint(371.990166717139f);
chart.addDataPoint(392.492133117652f);
chart.addDataPoint(425.921861841366f);
chart.addDataPoint(472.231936115555f);
chart.addDataPoint(531.233706073466f);
chart.addDataPoint(602.598789580077f);
chart.addDataPoint(685.862296500597f);
chart.addDataPoint(780.427567731731f);
chart.addDataPoint(885.572529669522f);
chart.addDataPoint(1000.45742275318f);
chart.addDataPoint(1124.13399219547f);
chart.addDataPoint(1255.55587422353f);
chart.addDataPoint(1393.59021511007f);
chart.addDataPoint(1537.03019411295f);
chart.addDataPoint(1684.60852006747f);
chart.addDataPoint(1835.01153347648f);
chart.addDataPoint(1986.89399779531f);
chart.addDataPoint(2138.89404077774f);
chart.addDataPoint(2289.64847189597f);
chart.addDataPoint(2437.80808073271f);
chart.addDataPoint(2582.05272647299f);
chart.addDataPoint(2721.10608771059f);
chart.addDataPoint(2853.74994882636f);
chart.addDataPoint(2978.83781807243f);
chart.addDataPoint(3095.30756984534f);
chart.addDataPoint(3202.19327671974f);
chart.addDataPoint(3298.63579179001f);
chart.addDataPoint(3383.89217684947f);
chart.addDataPoint(3457.34366964745f);
chart.addDataPoint(3518.50230180494f);
chart.addDataPoint(3567.01591958549f);
chart.addDataPoint(3602.67163395874f);
chart.addDataPoint(3625.39767053562f);
chart.addDataPoint(3635.26355411185f);
chart.addDataPoint(3632.47862876818f);
chart.addDataPoint(3617.38900991434f);
chart.addDataPoint(3590.47286387441f);
chart.addDataPoint(3552.33423363138f);
chart.addDataPoint(3503.69537303091f);
chart.addDataPoint(3445.38761143459f);
chart.addDataPoint(3378.3412081086f);
chart.addDataPoint(3303.57380212666f);
chart.addDataPoint(3222.17802057502f);
chart.addDataPoint(3135.30817200449f);
chart.addDataPoint(3044.166248269f);
chart.addDataPoint(2949.98745373155f);
chart.addDataPoint(2854.02518371323f);
chart.addDataPoint(2757.53615856496f);
chart.addDataPoint(2661.76522859386f);
chart.addDataPoint(2567.93050714519f);
chart.addDataPoint(2477.20883705247f);
chart.addDataPoint(2390.72175970029f);
chart.addDataPoint(2309.52218834859f);
chart.addDataPoint(2234.58193493706f);
chart.addDataPoint(2166.78013694806f);
chart.addDataPoint(2106.89301267804f);
chart.addDataPoint(2055.58465989646f);
chart.addDataPoint(2013.39932441127f);
chart.addDataPoint(1980.75508403971f);
chart.addDataPoint(1957.93907588148f);
chart.addDataPoint(1945.1042817061f);
chart.addDataPoint(1942.26794078699f);
chart.addDataPoint(1949.31162629146f);
chart.addDataPoint(1965.98289062426f);
chart.addDataPoint(1991.89859887366f);
chart.addDataPoint(2026.54977969581f);
chart.addDataPoint(2069.3080249602f);
chart.addDataPoint(2119.433335051f);
chart.addDataPoint(2176.08324500966f);
chart.addDataPoint(2238.32337033183f);
chart.addDataPoint(2305.13876941222f);
chart.addDataPoint(2375.44655479914f);
chart.addDataPoint(2448.10922594882f);
chart.addDataPoint(2521.94863912144f);
chart.addDataPoint(2595.76056303148f);
chart.addDataPoint(2668.32948177598f);
chart.addDataPoint(2738.4435797728f);
chart.addDataPoint(2804.90985277496f);
chart.addDataPoint(2866.56866627047f);
chart.addDataPoint(2922.30828770099f);
chart.addDataPoint(2971.07872543616f);
chart.addDataPoint(3011.90481544661f);
chart.addDataPoint(3043.89854139799f);
chart.addDataPoint(3066.27023498035f);
chart.addDataPoint(3078.33868226174f);
chart.addDataPoint(3079.54003172265f);
chart.addDataPoint(3069.43510535031f);
chart.addDataPoint(3047.71550665825f);
chart.addDataPoint(3014.20800126284f);
chart.addDataPoint(2968.87739554036f);
chart.addDataPoint(2911.82778837808f);
chart.addDataPoint(2843.30211356424f);
chart.addDataPoint(2763.68011441604f);
chart.addDataPoint(2673.4746622863f);
chart.addDataPoint(2573.32650786433f);
chart.addDataPoint(2463.99754642104f);
chart.addDataPoint(2346.362568763f);
chart.addDataPoint(2221.39977876022f);
chart.addDataPoint(2090.17997322145f);
chart.addDataPoint(1953.85471604644f);
chart.addDataPoint(1813.64340885993f);
chart.addDataPoint(1670.81975385948f);
chart.addDataPoint(1526.69735672767f);
chart.addDataPoint(1382.61496923895f);
chart.addDataPoint(1239.92132944347f);
chart.addDataPoint(1099.95995587542f);
chart.addDataPoint(964.053892264863f);
chart.addDataPoint(833.490758502282f);
chart.addDataPoint(709.508057423063f);
chart.addDataPoint(593.279270304739f);
chart.addDataPoint(485.900483250455f);
chart.addDataPoint(388.377965351926f);
chart.addDataPoint(301.616800551568f);
chart.addDataPoint(226.410680474746f);
chart.addDataPoint(163.43295501403f);
chart.addDataPoint(113.229075138452f);
chart.addDataPoint(76.2105749778991f);
chart.addDataPoint(52.6505180589065f);
chart.addDataPoint(42.6806035220837f);
chart.addDataPoint(46.2898714575933f);
chart.addDataPoint(63.3250931045901f);
chart.addDataPoint(93.4927744120464f);
chart.addDataPoint(136.362787286027f);
chart.addDataPoint(191.373643826556f);
chart.addDataPoint(257.839143167425f);
chart.addDataPoint(334.956595035294f);
chart.addDataPoint(421.816315070845f);
chart.addDataPoint(517.412361789622f);
chart.addDataPoint(620.654370745523f);
chart.addDataPoint(730.380356240368f);
chart.addDataPoint(845.37028959636f);
chart.addDataPoint(964.360467495699f);
chart.addDataPoint(1086.05808950723f);
chart.addDataPoint(1209.15640558989f);
chart.addDataPoint(1332.34988107002f);
chart.addDataPoint(1454.34932207031f);
chart.addDataPoint(1573.89676964443f);
chart.addDataPoint(1689.78000127185f);
chart.addDataPoint(1800.84653724104f);
chart.addDataPoint(1906.01670713524f);
chart.addDataPoint(2004.29605104954f);
chart.addDataPoint(2094.78654937146f);
chart.addDataPoint(2176.69675925518f);
chart.addDataPoint(2249.35059519109f);
chart.addDataPoint(2312.19479389216f);
chart.addDataPoint(2364.80485171087f);
chart.addDataPoint(2406.88943546893f);
chart.addDataPoint(2438.29320033238f);
chart.addDataPoint(2458.99798635566f);
chart.addDataPoint(2469.12234008041f);
chart.addDataPoint(2468.91947352481f);
chart.addDataPoint(2458.77351973709f);
chart.addDataPoint(2439.19432293755f);
chart.addDataPoint(2410.81068455502f);
chart.addDataPoint(2374.36208998218f);
chart.addDataPoint(2330.68937852645f);
chart.addDataPoint(2280.72391295925f);
chart.addDataPoint(2225.47586807717f);
chart.addDataPoint(2166.02149167661f);
chart.addDataPoint(2103.48957747199f);
chart.addDataPoint(2039.04741596675f);
chart.addDataPoint(1973.88602793813f);
chart.addDataPoint(1909.20552218248f);
chart.addDataPoint(1846.19997587994f);
chart.addDataPoint(1786.04253402068f);
chart.addDataPoint(1729.87080256671f);
chart.addDataPoint(1678.77255417956f);
chart.addDataPoint(1633.77213758327f);
chart.addDataPoint(1595.81758930656f);
chart.addDataPoint(1565.76855018638f);
chart.addDataPoint(1544.38551394646f);
chart.addDataPoint(1532.31997294539f);
chart.addDataPoint(1530.10597737818f);
chart.addDataPoint(1538.15313844642f);
chart.addDataPoint(1556.74101607895f);
chart.addDataPoint(1586.01515687331f);
chart.addDataPoint(1625.9846632246f);
chart.addDataPoint(1676.52140771814f);
chart.addDataPoint(1737.36092814148f);
chart.addDataPoint(1808.10487827696f);
chart.addDataPoint(1888.22516451379f);
chart.addDataPoint(1977.06958137832f);
chart.addDataPoint(2073.86894154431f);
chart.addDataPoint(2177.74563684763f);
chart.addDataPoint(2287.72354797896f);
chart.addDataPoint(2402.73899488014f);
chart.addDataPoint(2521.65291823011f);
chart.addDataPoint(2643.26388132495f);
chart.addDataPoint(2766.32189239938f);
chart.addDataPoint(2889.54278249335f);
chart.addDataPoint(3011.62306557547f);
chart.addDataPoint(3131.25499905342f);
chart.addDataPoint(3247.14188083541f);
chart.addDataPoint(3358.0129709998f);
chart.addDataPoint(3462.63841824187f);
chart.addDataPoint(3559.84359562074f);
chart.addDataPoint(3648.52285735013f);
chart.addDataPoint(3727.65250435361f);
chart.addDataPoint(3796.30282722524f);
chart.addDataPoint(3853.64905371093f);
chart.addDataPoint(3898.98117791971f);
chart.addDataPoint(3931.71229875958f);
chart.addDataPoint(3951.38572146587f);
chart.addDataPoint(3957.68045537062f);
chart.addDataPoint(3950.41517261464f);
chart.addDataPoint(3929.55055854869f);
chart.addDataPoint(3895.19000288732f);
chart.addDataPoint(3847.57864600903f);
chart.addDataPoint(3787.10080002096f);
chart.addDataPoint(3714.27573869891f);
chart.addDataPoint(3629.75195174718f);
chart.addDataPoint(3534.29986340332f);
chart.addDataPoint(3428.80319976948f);
chart.addDataPoint(3314.24898859747f);
chart.addDataPoint(3191.71643507156f);
chart.addDataPoint(3062.36461146352f);
chart.addDataPoint(2927.41944329348f);
chart.addDataPoint(2788.15972115477f);
chart.addDataPoint(2645.90264312584f);
chart.addDataPoint(2501.98884496645f);
chart.addDataPoint(2357.76726270145f);
chart.addDataPoint(2214.57983025488f);
chart.addDataPoint(2073.74636632937f);
chart.addDataPoint(1936.54960532935f);
chart.addDataPoint(1804.22089677646f);
chart.addDataPoint(1677.92634493268f);
chart.addDataPoint(1558.75377445362f);
chart.addDataPoint(1447.70067201258f);
chart.addDataPoint(1345.6632080031f);
chart.addDataPoint(1253.4264045126f);
chart.addDataPoint(1171.65566854496f);
chart.addDataPoint(1100.88976868054f);
chart.addDataPoint(1041.53524635275f);
chart.addDataPoint(993.862465092334f);
chart.addDataPoint(958.003180627205f);
chart.addDataPoint(933.949859564873f);
chart.addDataPoint(921.556530593503f);
chart.addDataPoint(920.541329289649f);
chart.addDataPoint(930.490704937062f);
chart.addDataPoint(950.864993196064f);
chart.addDataPoint(981.005649077371f);
chart.addDataPoint(1020.14382101058f);
chart.addDataPoint(1067.41015692803f);
chart.addDataPoint(1121.84589142383f);
chart.addDataPoint(1182.41487125746f);
chart.addDataPoint(1248.01652164594f);
chart.addDataPoint(1317.49969871034f);
chart.addDataPoint(1389.67677360021f);
chart.addDataPoint(1463.33850793239f);
chart.addDataPoint(1537.26893053666f);
chart.addDataPoint(1610.26036401239f);
chart.addDataPoint(1681.12832816866f);
chart.addDataPoint(1748.72606660092f);
chart.addDataPoint(1811.95881658905f);
chart.addDataPoint(1869.79709527656f);
chart.addDataPoint(1921.28951063418f);
chart.addDataPoint(1965.57448330145f);
chart.addDataPoint(2001.89086569557f);
chart.addDataPoint(2029.58740943056f);
chart.addDataPoint(2048.13084529744f);
chart.addDataPoint(2057.11257466468f);
chart.addDataPoint(2056.25388421828f);
chart.addDataPoint(2045.40950085282f);
chart.addDataPoint(2024.56964241742f);
chart.addDataPoint(1993.86038960647f);
chart.addDataPoint(1953.54241075325f);
chart.addDataPoint(1904.00809154626f);
chart.addDataPoint(1845.77705060754f);
chart.addDataPoint(1779.49015375888f);
chart.addDataPoint(1705.90196543066f);
chart.addDataPoint(1625.87199676958f);
chart.addDataPoint(1540.35451220129f);
chart.addDataPoint(1450.38726430556f);
chart.addDataPoint(1357.07919241112f);
chart.addDataPoint(1261.59723989917f);
chart.addDataPoint(1165.15249486225f);
chart.addDataPoint(1068.98560742878f);
chart.addDataPoint(974.352139779205f);
chart.addDataPoint(882.507398631334f);
chart.addDataPoint(794.691376751108f);
chart.addDataPoint(712.113841980428f);
chart.addDataPoint(635.939706871071f);
chart.addDataPoint(567.274941714921f);
chart.addDataPoint(507.15314312083f);
chart.addDataPoint(456.522808819327f);
chart.addDataPoint(416.235853959984f);
chart.addDataPoint(387.036969719073f);
chart.addDataPoint(369.55433315549f);
chart.addDataPoint(364.29169162753f);
chart.addDataPoint(371.621813962782f);
chart.addDataPoint(391.781540339122f);
chart.addDataPoint(424.868359468104f);
chart.addDataPoint(470.83860623253f);
chart.addDataPoint(529.507366880094f);
chart.addDataPoint(600.54993098868f);
chart.addDataPoint(683.504974994862f);
chart.addDataPoint(777.779276008702f);
chart.addDataPoint(882.653963300039f);
chart.addDataPoint(997.292285246845f);
chart.addDataPoint(1120.74875519554f);
chart.addDataPoint(1251.97946884273f);
chart.addDataPoint(1389.85370193824f);
chart.addDataPoint(1533.16642478815f);
chart.addDataPoint(1680.65177820295f);
chart.addDataPoint(1830.99715142559f);
chart.addDataPoint(1982.85791724914f);
chart.addDataPoint(2134.87243854262f);
chart.addDataPoint(2285.67742200897f);
chart.addDataPoint(2433.9230610023f);
chart.addDataPoint(2578.2882510653f);
chart.addDataPoint(2717.49532120618f);
chart.addDataPoint(2850.32435993187f);
chart.addDataPoint(2975.62675594322f);
chart.addDataPoint(3092.33801373674f);
chart.addDataPoint(3199.48949559456f);
chart.addDataPoint(3296.21913159931f);
chart.addDataPoint(3381.78077265175f);
chart.addDataPoint(3455.55227068475f);
chart.addDataPoint(3517.04211665236f);
chart.addDataPoint(3565.89450437512f);
chart.addDataPoint(3601.8928130386f);
chart.addDataPoint(3624.96153115415f);
chart.addDataPoint(3635.16642408051f);
chart.addDataPoint(3632.71317821097f);
chart.addDataPoint(3617.94432952306f);
chart.addDataPoint(3591.33461477786f);
chart.addDataPoint(3553.48483595369f);
chart.addDataPoint(3505.11418751151f);
chart.addDataPoint(3447.05128616496f);
chart.addDataPoint(3380.22391379834f);
chart.addDataPoint(3305.64749791147f);
chart.addDataPoint(3224.41286875589f);
chart.addDataPoint(3137.67287670428f);
chart.addDataPoint(3046.62843409265f);
chart.addDataPoint(2952.51402656411f);
chart.addDataPoint(2856.58281810206f);
chart.addDataPoint(2760.091608704f);
chart.addDataPoint(2664.28578438551f);
chart.addDataPoint(2570.38429951837f);
chart.addDataPoint(2479.56530457072f);
chart.addDataPoint(2392.95198315891f);
chart.addDataPoint(2311.59923422638f);
chart.addDataPoint(2236.48115524935f);
chart.addDataPoint(2168.47952031568f);
chart.addDataPoint(2108.37339412916f);
chart.addDataPoint(2056.82992602497f);
chart.addDataPoint(2014.39664288975f);
chart.addDataPoint(1981.495038458f);
chart.addDataPoint(1958.41577151333f);
chart.addDataPoint(1945.31540727837f);
chart.addDataPoint(1942.21480435281f);
chart.addDataPoint(1948.99910599523f);
chart.addDataPoint(1965.41937643595f);
chart.addDataPoint(1991.09591078094f);
chart.addDataPoint(2025.52299108748f);
chart.addDataPoint(2068.07528223298f);
chart.addDataPoint(2118.01563201244f);
chart.addDataPoint(2174.50418683294f);
chart.addDataPoint(2236.60881235034f);
chart.addDataPoint(2303.31656583111f);
chart.addDataPoint(2373.5461653903f);
chart.addDataPoint(2446.16143700458f);
chart.addDataPoint(2519.98510176538f);
chart.addDataPoint(2593.81343038455f);
chart.addDataPoint(2666.4310124983f);
chart.addDataPoint(2736.62576879968f);
chart.addDataPoint(2803.2039479659f);
chart.addDataPoint(2865.00483561013f);
chart.addDataPoint(2920.91532333287f);
chart.addDataPoint(2969.88356107525f);
chart.addDataPoint(3010.93224353809f);
chart.addDataPoint(3043.17089357408f);
chart.addDataPoint(3065.8070907262f);
chart.addDataPoint(3078.15665948738f);
chart.addDataPoint(3079.65248281779f);
chart.addDataPoint(3069.85200594073f);
chart.addDataPoint(3048.44331873356f);
chart.addDataPoint(3015.24954647983f);
chart.addDataPoint(2970.23181101964f);
chart.addDataPoint(2913.49051528455f);
chart.addDataPoint(2845.26492082728f);
chart.addDataPoint(2765.93119664907f);
chart.addDataPoint(2675.99873849282f);
chart.addDataPoint(2576.10500292531f);
chart.addDataPoint(2467.00874055675f);
chart.addDataPoint(2349.58187879895f);
chart.addDataPoint(2224.80001320788f);
chart.addDataPoint(2093.73163279017f);
chart.addDataPoint(1957.52629442287f);
chart.addDataPoint(1817.40182531075f);
btnPlus.setXY(5, 1);
btnPlus.setBitmaps(touchgfx::Bitmap(BITMAP_BLUE_BUTTONS_SQUARE_ICON_BUTTON_ID), touchgfx::Bitmap(BITMAP_BLUE_BUTTONS_SQUARE_ICON_BUTTON_PRESSED_ID));
btnPlus.setAction(buttonCallback);
btnMinus.setXY(65, 1);
btnMinus.setBitmaps(touchgfx::Bitmap(BITMAP_BLUE_BUTTONS_SQUARE_ICON_BUTTON_ID), touchgfx::Bitmap(BITMAP_BLUE_BUTTONS_SQUARE_ICON_BUTTON_PRESSED_ID));
btnMinus.setAction(buttonCallback);
btnTrigger.setXY(415, 1);
btnTrigger.setBitmaps(touchgfx::Bitmap(BITMAP_BLUE_BUTTONS_SQUARE_ICON_BUTTON_ID), touchgfx::Bitmap(BITMAP_BLUE_BUTTONS_SQUARE_ICON_BUTTON_PRESSED_ID));
btnTrigger.setAction(buttonCallback);
labelTrigger.setXY(428, 24);
labelTrigger.setColor(touchgfx::Color::getColorFrom24BitRGB(255, 255, 255));
labelTrigger.setLinespacing(0);
labelTrigger.setRotation(touchgfx::TEXT_ROTATE_180);
labelTrigger.setTypedText(touchgfx::TypedText(T_SINGLEUSEID7));
labelPlus.setXY(18, 2);
labelPlus.setColor(touchgfx::Color::getColorFrom24BitRGB(255, 255, 255));
labelPlus.setLinespacing(0);
labelPlus.setTypedText(touchgfx::TypedText(T_SINGLEUSEID8));
labelMinus.setXY(85, 2);
labelMinus.setColor(touchgfx::Color::getColorFrom24BitRGB(255, 255, 255));
labelMinus.setLinespacing(0);
labelMinus.setTypedText(touchgfx::TypedText(T_SINGLEUSEID9));
redLedEnable.setXY(388, 21);
redLedEnable.setBitmap(touchgfx::Bitmap(BITMAP_RED_LED_CIRCLE_01_ID));
redLedDisable.setXY(388, 21);
redLedDisable.setBitmap(touchgfx::Bitmap(BITMAP_RED_LED_CIRCLE_02_ID));
add(__background);
add(bgView);
add(labelTitle);
add(bgSignal);
add(labelSignal);
add(labelDivTime);
add(chartBG);
add(chart);
add(btnPlus);
add(btnMinus);
add(btnTrigger);
add(labelTrigger);
add(labelPlus);
add(labelMinus);
add(redLedEnable);
add(redLedDisable);
}
void MainViewViewBase::setupScreen()
{
}
void MainViewViewBase::buttonCallbackHandler(const touchgfx::AbstractButton& src)
{
if (&src == &btnPlus)
{
//onPlusPush
//When btnPlus clicked call virtual function
//Call onBtnPlusPressed
onBtnPlusPressed();
}
else if (&src == &btnMinus)
{
//onMinusPush
//When btnMinus clicked call virtual function
//Call onBtnMinusPressed
onBtnMinusPressed();
}
else if (&src == &btnTrigger)
{
//onTriggerPush
//When btnTrigger clicked execute C++ code
//Execute C++ code
//When btnTrigger clicked toggle redLedDisable
if(redLedDisable.isVisible()){
redLedDisable.setVisible(false);
redLedDisable.invalidate();
}
else{
redLedDisable.setVisible(true);
redLedDisable.invalidate();
}
//onTriggerCheckState
//When onTriggerPush completed call virtual function
//Call onCheckBoxTriggerPressed
onCheckBoxTriggerPressed();
}
}

View File

@ -0,0 +1,20 @@
// Generated by imageconverter. Please, do not edit!
#ifndef BITMAPDATABASE_HPP
#define BITMAPDATABASE_HPP
#include <touchgfx/hal/Types.hpp>
#include <touchgfx/Bitmap.hpp>
const uint16_t BITMAP_BLUE_BUTTONS_SQUARE_ICON_BUTTON_ID = 0;
const uint16_t BITMAP_BLUE_BUTTONS_SQUARE_ICON_BUTTON_PRESSED_ID = 1;
const uint16_t BITMAP_RED_LED_CIRCLE_01_ID = 2;
const uint16_t BITMAP_RED_LED_CIRCLE_02_ID = 3;
namespace BitmapDatabase
{
const touchgfx::Bitmap::BitmapData* getInstance();
uint16_t getInstanceSize();
}
#endif

View File

@ -0,0 +1,31 @@
// 4.16.1 0xe0e66494
// Generated by imageconverter. Please, do not edit!
#include <BitmapDatabase.hpp>
#include <touchgfx/Bitmap.hpp>
extern const unsigned char image_blue_buttons_square_icon_button[]; // BITMAP_BLUE_BUTTONS_SQUARE_ICON_BUTTON_ID = 0, Size: 60x60 pixels
extern const unsigned char image_blue_buttons_square_icon_button_pressed[]; // BITMAP_BLUE_BUTTONS_SQUARE_ICON_BUTTON_PRESSED_ID = 1, Size: 60x60 pixels
extern const unsigned char image_red_led_circle_01[]; // BITMAP_RED_LED_CIRCLE_01_ID = 2, Size: 16x16 pixels
extern const unsigned char image_red_led_circle_02[]; // BITMAP_RED_LED_CIRCLE_02_ID = 3, Size: 16x16 pixels
const touchgfx::Bitmap::BitmapData bitmap_database[] =
{
{ image_blue_buttons_square_icon_button, 0, 60, 60, 5, 4, 50, (uint8_t)(touchgfx::Bitmap::ARGB8888) >> 3, 50, (uint8_t)(touchgfx::Bitmap::ARGB8888) & 0x7 },
{ image_blue_buttons_square_icon_button_pressed, 0, 60, 60, 5, 4, 50, (uint8_t)(touchgfx::Bitmap::ARGB8888) >> 3, 50, (uint8_t)(touchgfx::Bitmap::ARGB8888) & 0x7 },
{ image_red_led_circle_01, 0, 16, 16, 3, 2, 10, (uint8_t)(touchgfx::Bitmap::ARGB8888) >> 3, 12, (uint8_t)(touchgfx::Bitmap::ARGB8888) & 0x7 },
{ image_red_led_circle_02, 0, 16, 16, 3, 2, 10, (uint8_t)(touchgfx::Bitmap::ARGB8888) >> 3, 12, (uint8_t)(touchgfx::Bitmap::ARGB8888) & 0x7 }
};
namespace BitmapDatabase
{
const touchgfx::Bitmap::BitmapData* getInstance()
{
return bitmap_database;
}
uint16_t getInstanceSize()
{
return (uint16_t)(sizeof(bitmap_database) / sizeof(touchgfx::Bitmap::BitmapData));
}
}

View File

@ -0,0 +1,95 @@
// 4.16.1 0x876f8c32 D2 AY R0 FARGB8888 U565 N0 SExtFlashSection
// Generated by imageconverter. Please, do not edit!
#include <touchgfx/hal/Config.hpp>
LOCATION_PRAGMA("ExtFlashSection")
KEEP extern const unsigned char image_red_led_circle_01[] LOCATION_ATTRIBUTE("ExtFlashSection") = // 16x16 ARGB8888 pixels.
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xb0, 0xac, 0xb0, 0x2c, 0xb0, 0xac, 0xb0, 0x8e,
0xb0, 0xb0, 0xb0, 0xd3, 0xa8, 0xac, 0xa8, 0xf3, 0xa8, 0xac, 0xa8, 0xf3,
0xb0, 0xac, 0xb0, 0xd3, 0xb0, 0xac, 0xb0, 0x8e, 0xb0, 0xac, 0xb0, 0x2c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa8, 0xa8, 0xa8, 0x04, 0xb0, 0xb4, 0xb0, 0x96, 0xa8, 0xa8, 0xa8, 0xfb,
0x90, 0x8c, 0x98, 0xff, 0x60, 0x60, 0xa8, 0xff, 0x60, 0x5c, 0xc0, 0xff,
0x58, 0x5c, 0xc0, 0xff, 0x60, 0x64, 0xa8, 0xff, 0x90, 0x90, 0x98, 0xff,
0xa8, 0xac, 0xa8, 0xfb, 0xb0, 0xb4, 0xb0, 0x92, 0xa8, 0xa8, 0xa8, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa8, 0xa8, 0xa8, 0x04, 0xb8, 0xb8, 0xb8, 0xbe, 0x98, 0x9c, 0xa0, 0xff,
0x60, 0x60, 0xc0, 0xff, 0x98, 0x94, 0xf8, 0xff, 0xd0, 0xd4, 0xf8, 0xff,
0xe0, 0xe0, 0xf8, 0xff, 0xe0, 0xe0, 0xf8, 0xff, 0xd8, 0xd4, 0xf8, 0xff,
0x90, 0x94, 0xf8, 0xff, 0x60, 0x64, 0xc0, 0xff, 0xa0, 0xa0, 0xa0, 0xff,
0xb8, 0xb8, 0xb8, 0xba, 0xa8, 0xac, 0xa8, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xb8, 0xbc, 0xb8, 0x96, 0xa0, 0xa0, 0xa0, 0xff,
0x58, 0x58, 0xd8, 0xff, 0xc8, 0xc8, 0xf8, 0xff, 0xd0, 0xd4, 0xf8, 0xff,
0xd0, 0xd4, 0xf8, 0xff, 0xd0, 0xd4, 0xf8, 0xff, 0xd8, 0xd4, 0xf8, 0xff,
0xd0, 0xd4, 0xf8, 0xff, 0xd0, 0xd0, 0xf8, 0xff, 0xc8, 0xc4, 0xf8, 0xff,
0x58, 0x58, 0xd8, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0xb8, 0xbc, 0xb8, 0x92,
0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x2c, 0xb8, 0xb4, 0xb8, 0xfb,
0x50, 0x50, 0xb8, 0xff, 0xa0, 0x9c, 0xf8, 0xff, 0xb8, 0xb8, 0xf8, 0xff,
0xb8, 0xb8, 0xf8, 0xff, 0xb8, 0xb8, 0xf8, 0xff, 0xb8, 0xb8, 0xf8, 0xff,
0xb8, 0xb8, 0xf8, 0xff, 0xb8, 0xb4, 0xf8, 0xff, 0xb8, 0xb4, 0xf8, 0xff,
0xb8, 0xb8, 0xf8, 0xff, 0x98, 0x98, 0xf8, 0xff, 0x58, 0x54, 0xc0, 0xff,
0xb8, 0xb8, 0xb8, 0xfb, 0xc0, 0xbc, 0xc0, 0x2c, 0xc0, 0xc4, 0xc0, 0x92,
0xa0, 0x9c, 0xa8, 0xff, 0x20, 0x1c, 0xf0, 0xff, 0x98, 0x9c, 0xf8, 0xff,
0x98, 0x9c, 0xf8, 0xff, 0xa0, 0x9c, 0xf8, 0xff, 0x98, 0x9c, 0xf8, 0xff,
0x98, 0x98, 0xf8, 0xff, 0x98, 0x98, 0xf8, 0xff, 0x98, 0x9c, 0xf8, 0xff,
0x98, 0x98, 0xf8, 0xff, 0x98, 0x98, 0xf8, 0xff, 0x98, 0x98, 0xf8, 0xff,
0x18, 0x1c, 0xf0, 0xff, 0xa8, 0xa4, 0xb0, 0xff, 0xc8, 0xc4, 0xc0, 0x8e,
0xc8, 0xc8, 0xc8, 0xd3, 0x70, 0x70, 0xb8, 0xff, 0x08, 0x0c, 0xf8, 0xff,
0x80, 0x7c, 0xf8, 0xff, 0x80, 0x80, 0xf8, 0xff, 0x80, 0x80, 0xf8, 0xff,
0x80, 0x80, 0xf8, 0xff, 0x80, 0x7c, 0xf8, 0xff, 0x80, 0x80, 0xf8, 0xff,
0x80, 0x80, 0xf8, 0xff, 0x80, 0x80, 0xf8, 0xff, 0x80, 0x7c, 0xf8, 0xff,
0x78, 0x7c, 0xf8, 0xff, 0x08, 0x08, 0xf8, 0xff, 0x78, 0x74, 0xb8, 0xff,
0xc8, 0xc8, 0xc8, 0xd3, 0xc8, 0xc8, 0xc8, 0xf3, 0x58, 0x58, 0xc8, 0xff,
0x00, 0x00, 0xf8, 0xff, 0x40, 0x40, 0xf8, 0xff, 0x60, 0x64, 0xf8, 0xff,
0x60, 0x64, 0xf8, 0xff, 0x60, 0x60, 0xf8, 0xff, 0x60, 0x60, 0xf8, 0xff,
0x60, 0x60, 0xf8, 0xff, 0x60, 0x60, 0xf8, 0xff, 0x60, 0x60, 0xf8, 0xff,
0x60, 0x60, 0xf8, 0xff, 0x40, 0x3c, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff,
0x58, 0x5c, 0xc8, 0xff, 0xc8, 0xcc, 0xc8, 0xf3, 0xd0, 0xcc, 0xc8, 0xf3,
0x60, 0x5c, 0xc8, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x08, 0x04, 0xf8, 0xff,
0x30, 0x30, 0xf8, 0xff, 0x48, 0x44, 0xf8, 0xff, 0x48, 0x48, 0xf8, 0xff,
0x48, 0x48, 0xf8, 0xff, 0x48, 0x48, 0xf8, 0xff, 0x48, 0x44, 0xf8, 0xff,
0x48, 0x44, 0xf8, 0xff, 0x30, 0x30, 0xf8, 0xff, 0x00, 0x04, 0xf8, 0xff,
0x00, 0x00, 0xf8, 0xff, 0x60, 0x64, 0xc8, 0xff, 0xd0, 0xd0, 0xd0, 0xf3,
0xd0, 0xd4, 0xd0, 0xd3, 0x80, 0x80, 0xc0, 0xff, 0x00, 0x00, 0xf8, 0xff,
0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x10, 0x0c, 0xf8, 0xff,
0x18, 0x18, 0xf8, 0xff, 0x20, 0x20, 0xf8, 0xff, 0x20, 0x20, 0xf8, 0xff,
0x18, 0x18, 0xf8, 0xff, 0x08, 0x0c, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff,
0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x88, 0x84, 0xc0, 0xff,
0xd0, 0xd4, 0xd0, 0xd3, 0xd8, 0xd8, 0xd8, 0x92, 0xb8, 0xbc, 0xc0, 0xff,
0x10, 0x10, 0xf0, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff,
0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff,
0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff,
0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x10, 0x10, 0xf0, 0xff,
0xc0, 0xc0, 0xc8, 0xff, 0xd8, 0xd8, 0xd8, 0x8e, 0xd8, 0xdc, 0xe0, 0x2c,
0xd8, 0xd8, 0xd8, 0xfb, 0x70, 0x70, 0xd0, 0xff, 0x00, 0x00, 0xf8, 0xff,
0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff,
0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0xf8, 0xff,
0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf0, 0xff, 0x00, 0x00, 0xf8, 0xff,
0x78, 0x78, 0xd0, 0xff, 0xd8, 0xd8, 0xd8, 0xfb, 0xd8, 0xdc, 0xd8, 0x28,
0x00, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0x92, 0xd0, 0xd0, 0xd0, 0xff,
0x58, 0x54, 0xe0, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf0, 0xff,
0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff,
0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff,
0x58, 0x58, 0xe0, 0xff, 0xd8, 0xd4, 0xd8, 0xff, 0xe0, 0xe0, 0xe0, 0x92,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd4, 0xd8, 0x08,
0xe8, 0xe4, 0xe0, 0xba, 0xd8, 0xd8, 0xd8, 0xff, 0x80, 0x80, 0xd8, 0xff,
0x18, 0x18, 0xf0, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff,
0x00, 0x00, 0xf8, 0xff, 0x00, 0x00, 0xf8, 0xff, 0x18, 0x18, 0xf0, 0xff,
0x80, 0x84, 0xd8, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xe8, 0xe4, 0xe8, 0xba,
0xd0, 0xcc, 0xc8, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xd0, 0xd4, 0xd8, 0x08, 0xe8, 0xec, 0xe8, 0x92,
0xe8, 0xe4, 0xe8, 0xfb, 0xd0, 0xd4, 0xd8, 0xff, 0xa0, 0xa4, 0xd8, 0xff,
0x80, 0x80, 0xd8, 0xff, 0x80, 0x80, 0xd8, 0xff, 0xa0, 0xa0, 0xd8, 0xff,
0xd8, 0xd8, 0xd8, 0xff, 0xe8, 0xe4, 0xe8, 0xfb, 0xe8, 0xec, 0xe8, 0x92,
0xf8, 0xfc, 0xf8, 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, 0xf0, 0xec, 0xe8, 0x2c, 0xf0, 0xf0, 0xf0, 0x8e,
0xf0, 0xec, 0xf0, 0xd3, 0xf0, 0xec, 0xe8, 0xf3, 0xf0, 0xec, 0xe8, 0xf3,
0xf0, 0xf0, 0xf0, 0xd3, 0xf0, 0xf0, 0xf0, 0x8e, 0xf0, 0xec, 0xe8, 0x2c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00
};

View File

@ -0,0 +1,95 @@
// 4.16.1 0xdefa7aca D2 AY R0 FARGB8888 U565 N0 SExtFlashSection
// Generated by imageconverter. Please, do not edit!
#include <touchgfx/hal/Config.hpp>
LOCATION_PRAGMA("ExtFlashSection")
KEEP extern const unsigned char image_red_led_circle_02[] LOCATION_ATTRIBUTE("ExtFlashSection") = // 16x16 ARGB8888 pixels.
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xb0, 0xac, 0xb0, 0x2c, 0xb0, 0xac, 0xb0, 0x8e,
0xb0, 0xb0, 0xb0, 0xd3, 0xa8, 0xac, 0xa8, 0xf3, 0xa8, 0xac, 0xa8, 0xf3,
0xb0, 0xac, 0xb0, 0xd3, 0xb0, 0xac, 0xb0, 0x8e, 0xb0, 0xac, 0xb0, 0x2c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa8, 0xa8, 0xa8, 0x04, 0xb0, 0xb4, 0xb0, 0x96, 0xa8, 0xa8, 0xa8, 0xfb,
0x90, 0x90, 0x90, 0xff, 0x80, 0x80, 0x88, 0xff, 0x88, 0x84, 0x98, 0xff,
0x88, 0x84, 0x98, 0xff, 0x80, 0x80, 0x88, 0xff, 0x90, 0x94, 0x98, 0xff,
0xa8, 0xac, 0xa8, 0xfb, 0xb0, 0xb4, 0xb0, 0x92, 0xa8, 0xa8, 0xa8, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xa8, 0xa8, 0xa8, 0x04, 0xb8, 0xb8, 0xb8, 0xbe, 0xa0, 0x9c, 0xa0, 0xff,
0x88, 0x88, 0x98, 0xff, 0xc0, 0xc0, 0xd0, 0xff, 0xe8, 0xe8, 0xf0, 0xff,
0xe8, 0xec, 0xf0, 0xff, 0xf0, 0xec, 0xf8, 0xff, 0xe8, 0xe8, 0xf0, 0xff,
0xc0, 0xc0, 0xd0, 0xff, 0x88, 0x8c, 0xa0, 0xff, 0xa0, 0xa4, 0xa0, 0xff,
0xb8, 0xb8, 0xb8, 0xba, 0xa8, 0xa8, 0xa8, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xb8, 0xbc, 0xb8, 0x96, 0xa0, 0xa0, 0xa0, 0xff,
0x90, 0x90, 0xa8, 0xff, 0xe0, 0xe0, 0xe8, 0xff, 0xe8, 0xe8, 0xf0, 0xff,
0xe8, 0xe4, 0xf0, 0xff, 0xe8, 0xe4, 0xf0, 0xff, 0xe0, 0xe8, 0xf0, 0xff,
0xe8, 0xe4, 0xf0, 0xff, 0xe8, 0xe8, 0xf0, 0xff, 0xe0, 0xdc, 0xe8, 0xff,
0x90, 0x90, 0xa8, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0xc0, 0xbc, 0xb8, 0x92,
0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0x2c, 0xb8, 0xb4, 0xb8, 0xfb,
0x80, 0x80, 0x98, 0xff, 0xc8, 0xc8, 0xd8, 0xff, 0xd8, 0xd8, 0xe8, 0xff,
0xd8, 0xd8, 0xe8, 0xff, 0xd8, 0xd8, 0xe8, 0xff, 0xd8, 0xd8, 0xe0, 0xff,
0xd8, 0xd8, 0xe8, 0xff, 0xd8, 0xd8, 0xe8, 0xff, 0xd8, 0xd8, 0xe0, 0xff,
0xd8, 0xd8, 0xe8, 0xff, 0xc8, 0xc4, 0xd8, 0xff, 0x88, 0x84, 0x98, 0xff,
0xb8, 0xb8, 0xb8, 0xfb, 0xc0, 0xc0, 0xc0, 0x2c, 0xc0, 0xc4, 0xc0, 0x92,
0xa0, 0xa0, 0xa8, 0xff, 0x80, 0x84, 0xb0, 0xff, 0xc8, 0xc8, 0xd8, 0xff,
0xc8, 0xc8, 0xe0, 0xff, 0xc8, 0xc8, 0xd8, 0xff, 0xc8, 0xcc, 0xd8, 0xff,
0xc8, 0xc8, 0xe0, 0xff, 0xc8, 0xc8, 0xd8, 0xff, 0xc8, 0xc8, 0xe0, 0xff,
0xc8, 0xcc, 0xe0, 0xff, 0xc8, 0xc8, 0xe0, 0xff, 0xc8, 0xc8, 0xe0, 0xff,
0x80, 0x84, 0xb0, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0xc0, 0xc4, 0xc8, 0x8e,
0xc8, 0xc8, 0xc8, 0xd3, 0x90, 0x94, 0xa0, 0xff, 0x80, 0x7c, 0xa8, 0xff,
0xc0, 0xbc, 0xd0, 0xff, 0xb8, 0xbc, 0xd8, 0xff, 0xc0, 0xbc, 0xd8, 0xff,
0xc0, 0xbc, 0xd8, 0xff, 0xb8, 0xbc, 0xd8, 0xff, 0xc0, 0xbc, 0xd0, 0xff,
0xc0, 0xbc, 0xd8, 0xff, 0xc0, 0xbc, 0xd8, 0xff, 0xc0, 0xbc, 0xd0, 0xff,
0xb8, 0xbc, 0xd8, 0xff, 0x80, 0x84, 0xb0, 0xff, 0x98, 0x98, 0xa8, 0xff,
0xc8, 0xc8, 0xc8, 0xd3, 0xc8, 0xc8, 0xc8, 0xf3, 0x90, 0x90, 0xa0, 0xff,
0x80, 0x80, 0xb0, 0xff, 0xa0, 0xa0, 0xc0, 0xff, 0xb0, 0xb0, 0xd0, 0xff,
0xb0, 0xb0, 0xd0, 0xff, 0xb0, 0xb0, 0xd0, 0xff, 0xb0, 0xb4, 0xd0, 0xff,
0xb0, 0xb0, 0xd0, 0xff, 0xb0, 0xb0, 0xd0, 0xff, 0xb0, 0xb4, 0xd0, 0xff,
0xb0, 0xb0, 0xd0, 0xff, 0xa0, 0xa0, 0xc0, 0xff, 0x80, 0x84, 0xb0, 0xff,
0x98, 0x98, 0xa8, 0xff, 0xc8, 0xcc, 0xc8, 0xf3, 0xd0, 0xcc, 0xd0, 0xf3,
0x98, 0x94, 0xa8, 0xff, 0x80, 0x84, 0xb0, 0xff, 0x88, 0x88, 0xb8, 0xff,
0x98, 0x9c, 0xc0, 0xff, 0xa8, 0xa8, 0xc8, 0xff, 0xa8, 0xa8, 0xc8, 0xff,
0xa8, 0xa8, 0xc8, 0xff, 0xa8, 0xa8, 0xc8, 0xff, 0xa8, 0xa8, 0xc8, 0xff,
0xa8, 0xa8, 0xc8, 0xff, 0xa0, 0x9c, 0xc0, 0xff, 0x88, 0x88, 0xb8, 0xff,
0x88, 0x88, 0xb8, 0xff, 0xa0, 0x9c, 0xb0, 0xff, 0xd0, 0xcc, 0xd0, 0xf3,
0xd0, 0xd4, 0xd8, 0xd3, 0xa0, 0xa4, 0xb0, 0xff, 0x88, 0x88, 0xb8, 0xff,
0x88, 0x88, 0xb8, 0xff, 0x88, 0x88, 0xb8, 0xff, 0x90, 0x90, 0xb8, 0xff,
0x98, 0x94, 0xc0, 0xff, 0x98, 0x98, 0xc0, 0xff, 0x98, 0x98, 0xc0, 0xff,
0x98, 0x98, 0xc0, 0xff, 0x90, 0x90, 0xc0, 0xff, 0x88, 0x8c, 0xb8, 0xff,
0x88, 0x8c, 0xc0, 0xff, 0x90, 0x8c, 0xc0, 0xff, 0xa8, 0xac, 0xb8, 0xff,
0xd0, 0xd4, 0xd0, 0xd3, 0xd8, 0xd8, 0xd8, 0x92, 0xc0, 0xbc, 0xc0, 0xff,
0x90, 0x94, 0xc0, 0xff, 0x90, 0x8c, 0xc0, 0xff, 0x90, 0x8c, 0xc0, 0xff,
0x90, 0x90, 0xc0, 0xff, 0x90, 0x90, 0xc0, 0xff, 0x90, 0x90, 0xc0, 0xff,
0x90, 0x90, 0xc0, 0xff, 0x90, 0x90, 0xc0, 0xff, 0x90, 0x90, 0xc0, 0xff,
0x90, 0x94, 0xc0, 0xff, 0x90, 0x90, 0xc0, 0xff, 0x98, 0x94, 0xc0, 0xff,
0xc8, 0xc4, 0xc8, 0xff, 0xd8, 0xd8, 0xd8, 0x8e, 0xe0, 0xdc, 0xd8, 0x2c,
0xd8, 0xd8, 0xd8, 0xfb, 0xa8, 0xac, 0xc0, 0xff, 0x98, 0x94, 0xc0, 0xff,
0x98, 0x94, 0xc8, 0xff, 0x90, 0x98, 0xc8, 0xff, 0x98, 0x94, 0xc8, 0xff,
0x98, 0x94, 0xc8, 0xff, 0x98, 0x98, 0xc8, 0xff, 0x98, 0x98, 0xc8, 0xff,
0x98, 0x98, 0xc8, 0xff, 0x98, 0x98, 0xc8, 0xff, 0x98, 0x98, 0xc8, 0xff,
0xb0, 0xb0, 0xc0, 0xff, 0xd8, 0xd8, 0xd8, 0xfb, 0xd8, 0xdc, 0xd8, 0x28,
0x00, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0xe0, 0x92, 0xd0, 0xd0, 0xd0, 0xff,
0xa8, 0xac, 0xc8, 0xff, 0x98, 0x98, 0xc8, 0xff, 0x98, 0x9c, 0xc8, 0xff,
0x98, 0x9c, 0xc8, 0xff, 0xa0, 0x9c, 0xd0, 0xff, 0x98, 0x9c, 0xd0, 0xff,
0x98, 0x9c, 0xc8, 0xff, 0xa0, 0x9c, 0xd0, 0xff, 0xa0, 0x9c, 0xd0, 0xff,
0xb0, 0xb0, 0xc8, 0xff, 0xd8, 0xd4, 0xd8, 0xff, 0xe0, 0xe0, 0xe0, 0x92,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd4, 0xd8, 0x08,
0xe8, 0xe4, 0xe8, 0xba, 0xd8, 0xd8, 0xd8, 0xff, 0xb8, 0xbc, 0xc8, 0xff,
0xa8, 0xa4, 0xd0, 0xff, 0xa0, 0xa0, 0xd0, 0xff, 0xa0, 0xa0, 0xd0, 0xff,
0xa0, 0xa0, 0xd0, 0xff, 0xa0, 0xa0, 0xd0, 0xff, 0xa8, 0xa4, 0xd0, 0xff,
0xb8, 0xbc, 0xc8, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xe8, 0xe4, 0xe8, 0xba,
0xc8, 0xcc, 0xd0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xd8, 0xd4, 0xd0, 0x08, 0xe8, 0xec, 0xe8, 0x92,
0xe8, 0xe4, 0xe8, 0xfb, 0xd8, 0xd4, 0xd8, 0xff, 0xc8, 0xc4, 0xd0, 0xff,
0xc0, 0xc0, 0xd0, 0xff, 0xc0, 0xbc, 0xd0, 0xff, 0xc8, 0xc4, 0xd0, 0xff,
0xd8, 0xd8, 0xd8, 0xff, 0xe8, 0xe8, 0xe8, 0xfb, 0xe8, 0xec, 0xe8, 0x92,
0xf8, 0xfc, 0xf8, 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, 0xe8, 0xec, 0xf0, 0x2c, 0xf0, 0xf0, 0xf0, 0x8e,
0xf0, 0xf0, 0xf0, 0xd3, 0xe8, 0xec, 0xe8, 0xf3, 0xe8, 0xec, 0xf0, 0xf3,
0xf0, 0xf0, 0xf0, 0xd3, 0xf0, 0xf0, 0xf0, 0x8e, 0xe8, 0xec, 0xf0, 0x2c,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00
};

View File

@ -0,0 +1,9 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <touchgfx/hal/HAL.hpp>
#include <touchgfx/lcd/LCD.hpp>
void setupSimulator(int argc, char** argv, touchgfx::HAL& hal);
touchgfx::LCD& setupLCD();

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
</PropertyGroup>
<PropertyGroup>
<LocalDebuggerEnvironment>PATH=$(TouchGFXReleasePath)\lib\sdl\win32</LocalDebuggerEnvironment>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(ApplicationRoot)\gui\include;$(ApplicationRoot)\generated\images\include;$(ApplicationRoot)\generated\bitmaps\include;$(ApplicationRoot)\generated\fonts\include;$(ApplicationRoot)\generated\texts\include;$(ApplicationRoot)\generated\gui_generated\include;$(ApplicationRoot)\generated\simulator\include;$(TouchGFXReleasePath)\framework\common\include;$(TouchGFXReleasePath)\framework\mvp\include;$(TouchGFXReleasePath)\framework\include\platform\hal\simulator\sdl\vendor\win32;$(TouchGFXReleasePath)\framework\platform\hal\simulator\sdl\3rdparty\sdl\include\win32;$(TouchGFXReleasePath)\framework\include</AdditionalIncludeDirectories>
<AdditionalOptions>$(UseBPPOption)</AdditionalOptions>
<PreprocessorDefinitions>SIMULATOR;_ITERATOR_DEBUG_LEVEL=0</PreprocessorDefinitions>
<DisableSpecificWarnings>4355</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Link>
<AdditionalDependencies>$(TouchGFXReleasePath)\lib\sdl\win32\SDL.lib;$(TouchGFXReleasePath)\lib\sdl\win32\SDLmain.lib;$(TouchGFXReleasePath)\lib\sdl\win32\SDL_image.lib;$(TouchGFXReleasePath)\lib\win\msvs\libtouchgfx_$(PlatformToolset)_debug.lib;user32.lib;shell32.lib</AdditionalDependencies>
<AdditionalOptions>/NODEFAULTLIB:msvcrt.lib</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Link>
<AdditionalDependencies>$(TouchGFXReleasePath)\lib\sdl\win32\SDL.lib;$(TouchGFXReleasePath)\lib\sdl\win32\SDLmain.lib;$(TouchGFXReleasePath)\lib\sdl\win32\SDL_image.lib;$(TouchGFXReleasePath)\lib\win\msvs\libtouchgfx_$(PlatformToolset).lib;user32.lib;shell32.lib</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View File

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<AllGeneratedFiles Include="$(ApplicationRoot)\generated\fonts\**\*.*;$(ApplicationRoot)\generated\images\**\*.*;$(ApplicationRoot)\generated\texts\**\*.*" />
</ItemGroup>
<ItemGroup>
<ImageConvertExecutable Include="$(TouchGFXReleasePath)\framework\tools\imageconvert\build\msvs\ImageConvert.exe"/>
</ItemGroup>
<PropertyGroup>
<UseBPPOption>/DUSE_BPP=$(UseBPP)</UseBPPOption>
</PropertyGroup>
<PropertyGroup Condition="'$(LCD)'!=''">
<LCDOption>/D$(LCD)</LCDOption>
</PropertyGroup>
<PropertyGroup Condition="'$(LCD)'==''">
<LCDOption/>
</PropertyGroup>
<PropertyGroup>
<touchgfx_env Condition="'$(TouchGFXEnvPath)'==''">$(TouchGFXReleasePath)\..\env</touchgfx_env>
<touchgfx_env Condition="'$(TouchGFXEnvPath)'!=''">$(TouchGFXEnvPath)</touchgfx_env>
</PropertyGroup>
<Target Name="GenerateBitmapDatabaseFiles" BeforeTargets="ClCompile">
<Message Text="Converting images"/>
<Exec Command="echo Converting images"/>
<Exec Command="&quot;%(ImageConvertExecutable.FullPath)&quot; -r assets\images -w generated\images" WorkingDirectory="$(ApplicationRoot)"/>
</Target>
<Target Name="GenerateTextsAndFontsFiles" BeforeTargets="ClCompile">
<Message Text="Converting texts and fonts" />
<Exec Command="echo Converting texts and fonts"/>
<Exec Command="&quot;$(touchgfx_env)\MinGW\msys\1.0\ruby193\bin\ruby.exe&quot; &quot;$(TouchGFXReleasePath)\framework\tools\textconvert\main.rb&quot; &quot;$(ApplicationRoot)\assets\texts\texts.xlsx&quot; &quot;$(TouchGFXReleasePath)\framework\tools\fontconvert\build\win\fontconvert.out&quot; &quot;$(ApplicationRoot)\generated\fonts&quot; &quot;$(ApplicationRoot)\generated\texts&quot; &quot;$(ApplicationRoot)\assets\fonts&quot; &quot;$(ApplicationRoot)&quot;"/>
</Target>
<Target Name="CompileAllGeneratedFiles" BeforeTargets="ClCompile">
<ItemGroup>
<AllGeneratedCompileFiles Include="$(ApplicationRoot)\generated\fonts\**\*.cpp;$(ApplicationRoot)\generated\images\**\*.cpp;$(ApplicationRoot)\generated\texts\**\*.cpp;" />
</ItemGroup>
<Message Text="Creating compile items for all generated source files: @(AllGeneratedCompileFiles)"/>
<Exec Command="echo Creating compile items for all generated source files: @(AllGeneratedCompileFiles)"/>
<CreateItem Include="@(AllGeneratedCompileFiles)">
<Output TaskParameter="Include" ItemName="ClCompile"/>
</CreateItem>
</Target>
<Target Name="CleanupGeneratedFiles" AfterTargets="Clean">
<Message Text="Clean-up generated files: @(AllGeneratedFiles)"/>
<Exec Command="echo Clean-up generated files: @(AllGeneratedFiles)"/>
<Delete Files="@(AllGeneratedFiles)"/>
</Target>
<Target Name="PostBuild" AfterTargets="ClCompile">
<Exec Command="copy $(TouchGFXReleasePath)\lib\sdl2\win32\SDL2.dll $(OutDir) > nul" />
<Exec Command="copy $(TouchGFXReleasePath)\lib\sdl2\win32\SDL2_image.dll $(OutDir) > nul" />
<Exec Command="copy $(TouchGFXReleasePath)\lib\sdl2\win32\libpng16-16.dll $(OutDir) > nul" />
<Exec Command="copy $(TouchGFXReleasePath)\lib\sdl2\win32\zlib1.dll $(OutDir) > nul"/>
<Exec Command="if exist $(ApplicationRoot)\simulator\landscape.png copy /y $(ApplicationRoot)\simulator\landscape.png $(OutDir) > nul" />
<Exec Command="if exist $(ApplicationRoot)\simulator\portrait.png copy /y $(ApplicationRoot)\simulator\portrait.png $(OutDir) > nul" />
</Target>
</Project>

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
</PropertyGroup>
<PropertyGroup>
<LocalDebuggerEnvironment>PATH=$(TouchGFXReleasePath)\lib\sdl2\win32</LocalDebuggerEnvironment>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(ApplicationRoot)\gui\include;$(ApplicationRoot)\generated\images\include;$(ApplicationRoot)\generated\bitmaps\include;$(ApplicationRoot)\generated\fonts\include;$(ApplicationRoot)\generated\texts\include;$(ApplicationRoot)\generated\gui_generated\include;$(ApplicationRoot)\generated\simulator\include;$(TouchGFXReleasePath)\framework\common\include;$(TouchGFXReleasePath)\framework\mvp\include;$(TouchGFXReleasePath)\framework\include\platform\hal\simulator\sdl2\vendor;$(TouchGFXReleasePath)\framework\include</AdditionalIncludeDirectories>
<AdditionalOptions>$(UseBPPOption)</AdditionalOptions>
<PreprocessorDefinitions>SIMULATOR;_ITERATOR_DEBUG_LEVEL=0</PreprocessorDefinitions>
<DisableSpecificWarnings>4355</DisableSpecificWarnings>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Link>
<AdditionalDependencies>$(TouchGFXReleasePath)\lib\sdl2\win32\SDL2.lib;$(TouchGFXReleasePath)\lib\sdl2\win32\SDL2_image.lib;$(TouchGFXReleasePath)\lib\win\msvs\libtouchgfx_$(PlatformToolset)_debug.lib;user32.lib;shell32.lib</AdditionalDependencies>
<AdditionalOptions>/NODEFAULTLIB:msvcrt.lib</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Link>
<AdditionalDependencies>$(TouchGFXReleasePath)\lib\sdl2\win32\SDL2.lib;$(TouchGFXReleasePath)\lib\sdl2\win32\SDL2_image.lib;$(TouchGFXReleasePath)\lib\win\msvs\libtouchgfx_$(PlatformToolset).lib;user32.lib;shell32.lib</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View File

@ -0,0 +1,25 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <simulator/mainBase.hpp>
#include <platform/hal/simulator/sdl2/HALSDL2.hpp>
#include <common/TouchGFXInit.hpp>
#include <platform/driver/lcd/LCD16bpp.hpp>
#include <string.h>
void setupSimulator(int argc, char** argv, touchgfx::HAL& hal) {
// Simulate hardware running at 60Hz generating a vsync every 16.6667 ms
static_cast<touchgfx::HALSDL2&>(hal).setVsyncInterval(16.6667f);
static_cast<touchgfx::HALSDL2&>(hal).setWindowTitle("STM32F746G_DISCO");
// Initialize SDL
bool sdl_init_result = static_cast<touchgfx::HALSDL2&>(hal).sdl_init(argc, argv);
assert(sdl_init_result && "Error during SDL initialization");
}
touchgfx::LCD16bpp lcd;
touchgfx::LCD& setupLCD() {
return lcd;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

View File

@ -0,0 +1 @@
id ICON touchgfx.ico

View File

@ -0,0 +1 @@
{"remap":"yes","language":"Gb","language_index":0,"indices":[["15","T_SingleUseId1"],["0","T_SingleUseId2"],["56","T_SingleUseId3"],["63","T_SingleUseId4"],["13","T_SingleUseId5"],["37","T_SingleUseId6"],["48","T_SingleUseId7"],["69","T_SingleUseId8"],["61","T_SingleUseId9"]]}

View File

@ -0,0 +1 @@
{"languages":["Gb"],"textids":["T_SingleUseId1","T_SingleUseId2","T_SingleUseId3","T_SingleUseId4","T_SingleUseId5","T_SingleUseId6","T_SingleUseId7","T_SingleUseId8","T_SingleUseId9"]}

View File

@ -0,0 +1 @@
{"remap":"yes","languages":["Gb"],"characters":[70,114,101,113,117,32,71,101,110,58,32,2,32,2,0,82,69,65,76,84,73,77,69,32,79,83,67,73,76,76,79,83,67,79,80,69,0,49,32,109,115,32,47,32,100,105,118,0,84,114,105,103,103,101,114,0,84,114,105,97,32,45,0,49,32,107,72,122,0,43,0]}

View File

@ -0,0 +1 @@
{"databases":{"DEFAULT":[[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[1,"LEFT","LTR"],[1,"LEFT","LTR"]]},"database_list":["DEFAULT"],"fonts":{"getFont_verdana_20_4bpp":0,"getFont_verdana_40_4bpp":1,"getFont_verdana_10_4bpp":2},"generate_font_format":"0"}

View File

@ -0,0 +1 @@
{"remap":"yes","data_format":"A4","binary_translations":"no","binary_fonts":"no","font_format":"0","framebuffer_bpp":"BPP16"}

View File

@ -0,0 +1,29 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#ifndef TEXTKEYSANDLANGUAGES_HPP
#define TEXTKEYSANDLANGUAGES_HPP
typedef enum
{
GB,
NUMBER_OF_LANGUAGES
} LANGUAGES;
typedef enum
{
T_SINGLEUSEID1,
T_SINGLEUSEID2,
T_SINGLEUSEID3,
T_SINGLEUSEID4,
T_SINGLEUSEID5,
T_SINGLEUSEID6,
T_SINGLEUSEID7,
T_SINGLEUSEID8,
T_SINGLEUSEID9,
NUMBER_OF_TEXT_KEYS
} TEXTS;
#endif // TEXTKEYSANDLANGUAGES_HPP

View File

@ -0,0 +1,21 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#ifndef TYPEDTEXTDATABASE_HPP
#define TYPEDTEXTDATABASE_HPP
#include <touchgfx/hal/Types.hpp>
#include <touchgfx/TypedText.hpp>
namespace TypedTextDatabase
{
class TypedTextData;
const touchgfx::TypedText::TypedTextData* getInstance(touchgfx::LanguageId id);
const touchgfx::TypedText::TypedTextData* getInstance();
const touchgfx::Font** getFonts();
const touchgfx::Font* setFont(touchgfx::FontId fontId, const touchgfx::Font*);
void resetFont(touchgfx::FontId fontId);
uint16_t getInstanceSize();
}
#endif

View File

@ -0,0 +1,22 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#include <stdint.h>
#include <touchgfx/Unicode.hpp>
TEXT_LOCATION_FLASH_PRAGMA
KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE;
TEXT_LOCATION_FLASH_PRAGMA
KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE =
{
15, // T_SingleUseId1
0, // T_SingleUseId2
56, // T_SingleUseId3
63, // T_SingleUseId4
13, // T_SingleUseId5
37, // T_SingleUseId6
48, // T_SingleUseId7
69, // T_SingleUseId8
61 // T_SingleUseId9
};

View File

@ -0,0 +1,133 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#include <stdarg.h>
#include <texts/TypedTextDatabase.hpp>
#include <touchgfx/TextProvider.hpp>
#include <touchgfx/Texts.hpp>
#include <touchgfx/TypedText.hpp>
#include <touchgfx/Unicode.hpp>
#include <touchgfx/hal/HAL.hpp>
#include <touchgfx/lcd/LCD.hpp>
uint16_t touchgfx::Font::getStringWidth(const touchgfx::Unicode::UnicodeChar* text, ...) const
{
va_list pArg;
va_start(pArg, text);
uint16_t width = getStringWidthLTR(TEXT_DIRECTION_LTR, text, pArg);
va_end(pArg);
return width;
}
uint16_t touchgfx::Font::getStringWidth(touchgfx::TextDirection textDirection, const touchgfx::Unicode::UnicodeChar* text, ...) const
{
va_list pArg;
va_start(pArg, text);
uint16_t width = getStringWidthLTR(textDirection, text, pArg);
va_end(pArg);
return width;
}
touchgfx::Unicode::UnicodeChar touchgfx::TextProvider::getNextLigature(TextDirection direction)
{
if (fontGsubTable && nextCharacters.peekChar())
{
substituteGlyphs();
if (nextCharacters.peekChar(1) == 0x093F) //Hindi I-matra
{
nextCharacters.replaceAt1(nextCharacters.peekChar());
nextCharacters.replaceAt0(0x093F);
}
}
return getNextChar();
}
void touchgfx::TextProvider::initializeInternal()
{
fillInputBuffer();
}
void touchgfx::LCD::drawString(touchgfx::Rect widgetArea, const touchgfx::Rect& invalidatedArea, const touchgfx::LCD::StringVisuals& stringVisuals, const touchgfx::Unicode::UnicodeChar* format, ...)
{
va_list pArg;
va_start(pArg, format);
drawStringLTR(widgetArea, invalidatedArea, stringVisuals, format, pArg);
va_end(pArg);
}
//Default typed text database
extern const touchgfx::TypedText::TypedTextData* const typedTextDatabaseArray[];
TEXT_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::Unicode::UnicodeChar texts_all_languages[] TEXT_LOCATION_FLASH_ATTRIBUTE =
{
0x46, 0x72, 0x65, 0x71, 0x75, 0x20, 0x47, 0x65, 0x6e, 0x3a, 0x20, 0x2, 0x20, 0x2, 0x0, // @0 "Frequ Gen: <> <>"
0x52, 0x45, 0x41, 0x4c, 0x54, 0x49, 0x4d, 0x45, 0x20, 0x4f, 0x53, 0x43, 0x49, 0x4c, 0x4c, 0x4f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x0, // @15 "REALTIME OSCILLOSCOPE"
0x31, 0x20, 0x6d, 0x73, 0x20, 0x2f, 0x20, 0x64, 0x69, 0x76, 0x0, // @37 "1 ms / div"
0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x0, // @48 "Trigger"
0x54, 0x72, 0x69, 0x61, 0x20, 0x2d, 0x0, // @56 "Tria -"
0x31, 0x20, 0x6b, 0x48, 0x7a, 0x0, // @63 "1 kHz"
0x2b, 0x0 // @69 "+"
};
TEXT_LOCATION_FLASH_PRAGMA
KEEP extern uint32_t const indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE;
//array holding dynamically installed languages
struct TranslationHeader
{
uint32_t offset_to_texts;
uint32_t offset_to_indices;
uint32_t offset_to_typedtext;
};
static const TranslationHeader* languagesArray[1] = { 0 };
//Compiled and linked in languages
static const uint32_t* const staticLanguageIndices[] =
{
indicesGb
};
touchgfx::LanguageId touchgfx::Texts::currentLanguage = static_cast<touchgfx::LanguageId>(0);
static const touchgfx::Unicode::UnicodeChar* currentLanguagePtr = 0;
static const uint32_t* currentLanguageIndices = 0;
void touchgfx::Texts::setLanguage(touchgfx::LanguageId id)
{
const touchgfx::TypedText::TypedTextData* currentLanguageTypedText = 0;
if (id < 1)
{
if (languagesArray[id] != 0)
{
//dynamic translation is added
const TranslationHeader* translation = languagesArray[id];
currentLanguagePtr = (const touchgfx::Unicode::UnicodeChar*)(((const uint8_t*)translation) + translation->offset_to_texts);
currentLanguageIndices = (const uint32_t*)(((const uint8_t*)translation) + translation->offset_to_indices);
currentLanguageTypedText = (const touchgfx::TypedText::TypedTextData*)(((const uint8_t*)translation) + translation->offset_to_typedtext);
}
else
{
//compiled and linked in languages
currentLanguagePtr = texts_all_languages;
currentLanguageIndices = staticLanguageIndices[id];
currentLanguageTypedText = typedTextDatabaseArray[id];
}
}
if (currentLanguageTypedText)
{
currentLanguage = id;
touchgfx::TypedText::registerTypedTextDatabase(currentLanguageTypedText,
TypedTextDatabase::getFonts(), TypedTextDatabase::getInstanceSize());
}
}
void touchgfx::Texts::setTranslation(touchgfx::LanguageId id, const void* translation)
{
languagesArray[id] = (const TranslationHeader*)translation;
}
const touchgfx::Unicode::UnicodeChar* touchgfx::Texts::getText(TypedTextId id) const
{
return &currentLanguagePtr[currentLanguageIndices[id]];
}

View File

@ -0,0 +1,81 @@
/* DO NOT EDIT THIS FILE */
/* This file is autogenerated by the text-database code generator */
#include <touchgfx/TypedText.hpp>
#include <fonts/GeneratedFont.hpp>
#include <texts/TypedTextDatabase.hpp>
extern touchgfx::GeneratedFont& getFont_verdana_20_4bpp();
extern touchgfx::GeneratedFont& getFont_verdana_40_4bpp();
extern touchgfx::GeneratedFont& getFont_verdana_10_4bpp();
const touchgfx::Font* touchgfx_fonts[] =
{
&(getFont_verdana_20_4bpp()),
&(getFont_verdana_40_4bpp()),
&(getFont_verdana_10_4bpp())
};
extern const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[];
extern const touchgfx::TypedText::TypedTextData* const typedTextDatabaseArray[];
TEXT_LOCATION_FLASH_PRAGMA
const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[] TEXT_LOCATION_FLASH_ATTRIBUTE =
{
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }
};
TEXT_LOCATION_FLASH_PRAGMA
const touchgfx::TypedText::TypedTextData* const typedTextDatabaseArray[] TEXT_LOCATION_FLASH_ATTRIBUTE =
{
typedText_database_DEFAULT
};
namespace TypedTextDatabase
{
const touchgfx::TypedText::TypedTextData* getInstance(touchgfx::LanguageId id)
{
return typedTextDatabaseArray[id];
}
uint16_t getInstanceSize()
{
return sizeof(typedText_database_DEFAULT) / sizeof(touchgfx::TypedText::TypedTextData);
}
const touchgfx::Font** getFonts()
{
return touchgfx_fonts;
}
const touchgfx::Font* setFont(touchgfx::FontId fontId, const touchgfx::Font* font)
{
const touchgfx::Font* old = touchgfx_fonts[fontId];
touchgfx_fonts[fontId] = font;
return old;
}
void resetFont(touchgfx::FontId fontId)
{
switch (fontId)
{
case 0:
touchgfx_fonts[0] = &(getFont_verdana_20_4bpp());
break;
case 1:
touchgfx_fonts[1] = &(getFont_verdana_40_4bpp());
break;
case 2:
touchgfx_fonts[2] = &(getFont_verdana_10_4bpp());
break;
}
}
} // namespace TypedTextDatabase

View File

@ -0,0 +1,24 @@
#ifndef FRONTENDAPPLICATION_HPP
#define FRONTENDAPPLICATION_HPP
#include <gui_generated/common/FrontendApplicationBase.hpp>
class FrontendHeap;
using namespace touchgfx;
class FrontendApplication : public FrontendApplicationBase
{
public:
FrontendApplication(Model& m, FrontendHeap& heap);
virtual ~FrontendApplication() { }
virtual void handleTickEvent()
{
model.tick();
FrontendApplicationBase::handleTickEvent();
}
private:
};
#endif // FRONTENDAPPLICATION_HPP

View File

@ -0,0 +1,74 @@
#ifndef FRONTENDHEAP_HPP
#define FRONTENDHEAP_HPP
#include <gui_generated/common/FrontendHeapBase.hpp>
class FrontendHeap : public FrontendHeapBase
{
public:
/* List any user-defined view types here*/
typedef touchgfx::meta::TypeList< touchgfx::meta::Nil, //Replace this with first user-defined type
touchgfx::meta::Nil //List must always end with meta::Nil !
> UserDefinedViewTypes;
/* List any user-defined presenter types here*/
typedef touchgfx::meta::TypeList< touchgfx::meta::Nil, //Replace this with first user-defined type
touchgfx::meta::Nil //List must always end with meta::Nil !
> UserDefinedPresenterTypes;
/* List any user-defined transition types here*/
typedef touchgfx::meta::TypeList< touchgfx::meta::Nil, //Replace this with first user-defined type
touchgfx::meta::Nil //List must always end with meta::Nil !
> UserDefinedTransitionTypes;
/* Calculate largest view, both from generated and user-defined typelists */
typedef touchgfx::meta::select_type_maxsize< UserDefinedViewTypes >::type MaxUserViewType;
typedef touchgfx::meta::TypeList< MaxGeneratedViewType,
touchgfx::meta::TypeList< MaxUserViewType,
touchgfx::meta::Nil
> > CombinedViewTypes;
typedef touchgfx::meta::select_type_maxsize< CombinedViewTypes >::type MaxViewType;
/* Calculate largest presenter, both from generated and user-defined typelists */
typedef touchgfx::meta::select_type_maxsize< UserDefinedPresenterTypes >::type MaxUserPresenterType;
typedef touchgfx::meta::TypeList< MaxGeneratedPresenterType,
touchgfx::meta::TypeList< MaxUserPresenterType,
touchgfx::meta::Nil
> > CombinedPresenterTypes;
typedef touchgfx::meta::select_type_maxsize< CombinedPresenterTypes >::type MaxPresenterType;
/* Calculate largest transition, both from generated and user-defined typelists */
typedef touchgfx::meta::select_type_maxsize< UserDefinedTransitionTypes >::type MaxUserTransitionType;
typedef touchgfx::meta::TypeList< MaxGeneratedTransitionType,
touchgfx::meta::TypeList< MaxUserTransitionType,
touchgfx::meta::Nil
> > CombinedTransitionTypes;
typedef touchgfx::meta::select_type_maxsize< CombinedTransitionTypes >::type MaxTransitionType;
static FrontendHeap& getInstance()
{
static FrontendHeap instance;
return instance;
}
touchgfx::Partition< CombinedPresenterTypes, 1 > presenters;
touchgfx::Partition< CombinedViewTypes, 1 > views;
touchgfx::Partition< CombinedTransitionTypes, 1 > transitions;
Model model;
FrontendApplication app;
private:
FrontendHeap() : FrontendHeapBase(presenters, views, transitions, app),
app(model, *this)
{
gotoStartScreen(app);
}
};
#endif // FRONTENDHEAP_HPP

View File

@ -0,0 +1,42 @@
#ifndef MAINVIEWPRESENTER_HPP
#define MAINVIEWPRESENTER_HPP
#include <gui/model/ModelListener.hpp>
#include <mvp/Presenter.hpp>
using namespace touchgfx;
class MainViewView;
class MainViewPresenter : public touchgfx::Presenter, public ModelListener
{
public:
MainViewPresenter(MainViewView& v);
/**
* The activate function is called automatically when this screen is "switched in"
* (ie. made active). Initialization logic can be placed here.
*/
virtual void activate();
/**
* The deactivate function is called automatically when this screen is "switched out"
* (ie. made inactive). Teardown functionality can be placed here.
*/
virtual void deactivate();
virtual ~MainViewPresenter() {};
void notifyModeChanged(std::string newMode) override;
void notifyFreqChanged(std::string newFreq) override;
void notifyDivTimChanged(std::string newDivTim) override;
void notifyDrawGraph(uint16_t* values, uint16_t maxSize, float xScale = 1) override;
private:
MainViewPresenter();
MainViewView& view;
};
#endif // MAINVIEWPRESENTER_HPP

View File

@ -0,0 +1,34 @@
#ifndef MAINVIEWVIEW_HPP
#define MAINVIEWVIEW_HPP
#include <gui_generated/mainview_screen/MainViewViewBase.hpp>
#include <gui/mainview_screen/MainViewPresenter.hpp>
#include <string>
class MainViewView : public MainViewViewBase
{
public:
MainViewView();
virtual ~MainViewView() {}
virtual void setupScreen();
virtual void tearDownScreen();
static MainViewView* getInstance();
void onBtnPlusPressed() override;
void onBtnMinusPressed() override;
void onCheckBoxTriggerPressed() override;
void setModeSignal(const std::string str);
void setFreqSignal(const std::string str);
void setLabelDivTime(const std::string str);
void drawGraph(uint16_t * values, uint16_t maxSize, float xScale = 1);
protected:
/*
* Singleton
*/
static MainViewView* _instance;
};
#endif // MAINVIEWVIEW_HPP

View File

@ -0,0 +1,61 @@
#ifndef MODEL_HPP
#define MODEL_HPP
#include <string>
#include "touchgfx-config.h"
#if (TOUCHGFX_FREERTOS != 0)
#include "FreeRTOS.h"
#include "queue.h"
#endif // TOUCHGFX_FREERTOS
class ModelListener;
#if (TOUCHGFX_FREERTOS != 0)
enum GUI_EVENT{
UNDEFINED=0,
FREQUENCY_EVENT,
MODE_EVENT,
DIVTIM_EVENT,
GRAPH_EVENT
};
#endif // TOUCHGFX_FREERTOS
class Model
{
public:
Model();
static Model* getInstance();
void bind(ModelListener* listener)
{
modelListener = listener;
}
void tick();
void setModeSignal(const std::string str);
void setFreqSignal(const std::string str);
void setDivTimLabel(const std::string str);
void setGraphPoints(uint16_t * values, uint16_t maxSize, float xScale = 1);
protected:
ModelListener* modelListener;
static Model* _instance;
std::string textMode;
std::string textFreq;
std::string textDivTim;
uint16_t* values; ///< Pointer to signal data.
uint16_t maxSize; ///< Maximum size of 'values' array.
float xScale; ///< X axis scaling factor.
#if (TOUCHGFX_BAREMETAL != 0)
bool flagMode;
bool flagDivTim;
bool flagFreq;
bool flagGraph;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
xQueueHandle gui_msg_q;
#endif // TOUCHGFX_FREERTOS
};
#endif // MODEL_HPP

View File

@ -0,0 +1,26 @@
#ifndef MODELLISTENER_HPP
#define MODELLISTENER_HPP
#include <gui/model/Model.hpp>
class ModelListener
{
public:
ModelListener() : model(0) {}
virtual ~ModelListener() {}
void bind(Model* m)
{
model = m;
}
virtual void notifyModeChanged(std::string newMode){};
virtual void notifyFreqChanged(std::string newFreq){};
virtual void notifyDivTimChanged(std::string newDivTim){};
virtual void notifyDrawGraph(uint16_t * values, uint16_t maxSize, float xScale = 1){};
protected:
Model* model;
};
#endif // MODELLISTENER_HPP

View File

@ -0,0 +1,7 @@
#include <gui/common/FrontendApplication.hpp>
FrontendApplication::FrontendApplication(Model& m, FrontendHeap& heap)
: FrontendApplicationBase(m, heap)
{
}

View File

@ -0,0 +1,34 @@
#include <gui/mainview_screen/MainViewView.hpp>
#include <gui/mainview_screen/MainViewPresenter.hpp>
MainViewPresenter::MainViewPresenter(MainViewView& v)
: view(v)
{
}
void MainViewPresenter::activate()
{
}
void MainViewPresenter::deactivate()
{
}
void MainViewPresenter::notifyModeChanged(std::string newMode){
view.setModeSignal(newMode);
}
void MainViewPresenter::notifyFreqChanged(std::string newFreq){
view.setFreqSignal(newFreq);
}
void MainViewPresenter::notifyDivTimChanged(std::string newDivTim){
view.setLabelDivTime(newDivTim);
}
void MainViewPresenter::notifyDrawGraph(uint16_t * values, uint16_t maxSize, float xScale /* = 1 */){
view.drawGraph(values, maxSize, xScale);
};

View File

@ -0,0 +1,75 @@
#include <cassert>
#include "gui/mainview_screen/MainViewView.hpp"
#include "app/gui.h"
MainViewView* MainViewView::_instance = nullptr;
MainViewView::MainViewView()
{
assert(!_instance);
if(_instance==nullptr){
_instance = this;
}
}
MainViewView* MainViewView::getInstance() {
return _instance;
}
void MainViewView::setupScreen()
{
MainViewViewBase::setupScreen();
}
void MainViewView::tearDownScreen()
{
MainViewViewBase::tearDownScreen();
}
void MainViewView::onBtnPlusPressed(){
oscilloscope::Gui::getInstance()->onButtonTimePlusPressed();
}
void MainViewView::onBtnMinusPressed(){
oscilloscope::Gui::getInstance()->onButtonTimeMinusPressed();
}
void MainViewView::onCheckBoxTriggerPressed(){
// Get actual state of the trigger checkbox by reading the status of the red LED
const bool checked = !redLedDisable.isVisible();
// Notify GUI
oscilloscope::Gui::getInstance()->onCheckBoxTriggerCheckState(checked);
}
void MainViewView::setModeSignal(const std::string str){
Unicode::fromUTF8((const unsigned char *)str.c_str(),labelSignalBuffer1,LABELSIGNALBUFFER1_SIZE);
labelSignal.invalidate();
}
void MainViewView::setFreqSignal(const std::string str){
Unicode::fromUTF8((const unsigned char *)str.c_str(),labelSignalBuffer2,LABELSIGNALBUFFER2_SIZE);
labelSignal.invalidate();
}
void MainViewView::setLabelDivTime(const std::string str){
Unicode::fromUTF8((const unsigned char *)str.c_str(),labelDivTimeBuffer,LABELDIVTIME_SIZE);
labelDivTime.invalidate();
}
void MainViewView::drawGraph(uint16_t* values, uint16_t maxSize, float xScale /* = 1 */){
chart.clear();
chartMajorXAxisGrid.setInterval(460/8); // Show 8 division on the chart
chart.setGraphRangeX(0, 460-1);
for(float addedPoints = 0, valuesIndex = 0;
(uint32_t)valuesIndex < maxSize and addedPoints < 460;
addedPoints++)
{
chart.addDataPoint(values[(uint32_t)valuesIndex]);
valuesIndex = addedPoints * xScale;
}
chart.invalidate();
}

View File

@ -0,0 +1,124 @@
#include <gui/model/Model.hpp>
#include <gui/model/ModelListener.hpp>
Model* Model::_instance = nullptr;
Model::Model() :
modelListener(0),
values(nullptr),
maxSize(0),
xScale(1.0f)
{
if(_instance==nullptr){
_instance = this;
}
#if (TOUCHGFX_FREERTOS != 0)
gui_msg_q = xQueueGenericCreate(5, sizeof(GUI_EVENT), 0);
#endif // TOUCHGFX_FREERTOS
#if (TOUCHGFX_BAREMETAL != 0)
flagMode = flagDivTim = flagFreq = flagGraph = false;
#endif // TOUCHGFX_BAREMETAL
}
Model* Model::getInstance() {
return _instance;
}
void Model::tick()
{
//*******************************************************
//
// HANDLE MESSAGES
//
// Check for messages from backend, with zero timeout to
// avoid blocking the UI.
//
//*******************************************************
//
#if (TOUCHGFX_FREERTOS != 0)
GUI_EVENT msg;
if (xQueueReceive(gui_msg_q, &msg, 0) == pdTRUE)
{
if(msg==FREQUENCY_EVENT){
modelListener->notifyFreqChanged(textFreq);
}
if(msg==MODE_EVENT){
modelListener->notifyModeChanged(textMode);
}
if(msg==DIVTIM_EVENT){
modelListener->notifyDivTimChanged(textDivTim);
}
if(msg==GRAPH_EVENT){
modelListener->notifyDrawGraph(values, maxSize);
}
}
#endif // TOUCHGFX_FREERTOS
#if (TOUCHGFX_BAREMETAL != 0)
if(this->flagFreq){
flagFreq=false;
modelListener->notifyFreqChanged(textFreq);
}
if(this->flagMode){
flagMode=false;
modelListener->notifyModeChanged(textMode);
}
if(this->flagDivTim){
flagDivTim=false;
modelListener->notifyDivTimChanged(textDivTim);
}
if(this->flagGraph){
flagGraph=false;
modelListener->notifyDrawGraph(values, maxSize, xScale);
}
#endif // TOUCHGFX_BAREMETAL
}
void Model::setGraphPoints(uint16_t * values, uint16_t maxSize, float xScale /* = 1 */){
this->values=values;
this->maxSize=maxSize;
this->xScale = xScale;
#if (TOUCHGFX_BAREMETAL != 0)
this->flagGraph=true;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
GUI_EVENT msg = GRAPH_EVENT;
if(uxQueueMessagesWaiting(gui_msg_q)==0){
xQueueSend(gui_msg_q, &msg, 0);
}
#endif // TOUCHGFX_FREERTOS
// Makes async call to modelListener->notifyDrawGraph(...) see Model::tick()
}
void Model::setDivTimLabel(const std::string str){
textDivTim = str;
#if (TOUCHGFX_BAREMETAL != 0)
this->flagDivTim=true;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
GUI_EVENT msg = DIVTIM_EVENT;
xQueueSend(gui_msg_q, &msg, 0);
#endif // TOUCHGFX_FREERTOS
}
void Model::setModeSignal(const std::string str){
textMode = str;
#if (TOUCHGFX_BAREMETAL != 0)
this->flagMode=true;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
GUI_EVENT msg = MODE_EVENT;
xQueueSend(gui_msg_q, &msg, 0);
#endif // TOUCHGFX_FREERTOS
}
void Model::setFreqSignal(const std::string str){
textFreq = str;
#if (TOUCHGFX_BAREMETAL != 0)
this->flagFreq=true;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
GUI_EVENT msg = FREQUENCY_EVENT;
xQueueSend(gui_msg_q, &msg, 0);
#endif // TOUCHGFX_FREERTOS
}

View File

@ -0,0 +1,513 @@
{
"Application": {
"Screens": [
{
"Components": [
{
"Type": "Box",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Alpha": 255,
"Name": "bgView",
"X": 0,
"Y": 0,
"Width": 480,
"Height": 270,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "TextArea",
"TextId": "SingleUseId1",
"TextRotation": "180",
"Color": {
"Red": 0,
"Green": 0,
"Blue": 0
},
"Alpha": 255,
"AutoSize": true,
"LineSpacing": 0,
"Name": "labelTitle",
"X": 337,
"Y": 254,
"Width": 132,
"Height": 13,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "Box",
"Color": {
"Red": 20,
"Green": 151,
"Blue": 197
},
"Alpha": 255,
"Name": "bgSignal",
"X": 225,
"Y": 18,
"Width": 150,
"Height": 23,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "TextArea",
"TextId": "SingleUseId2",
"TextRotation": "180",
"Color": {
"Red": 0,
"Green": 0,
"Blue": 0
},
"Alpha": 255,
"AutoSize": false,
"LineSpacing": 0,
"Wildcard1": {
"TextId": "SingleUseId3",
"UseBuffer": true,
"BufferSize": 20
},
"Wildcard2": {
"TextId": "SingleUseId4",
"UseBuffer": true,
"BufferSize": 20
},
"Name": "labelSignal",
"X": 232,
"Y": 24,
"Width": 137,
"Height": 13,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "TextArea",
"TextId": "SingleUseId5",
"TextRotation": "180",
"Color": {
"Red": 0,
"Green": 0,
"Blue": 0
},
"Alpha": 255,
"AutoSize": false,
"LineSpacing": 0,
"Wildcard1": {
"TextId": "SingleUseId6",
"UseBuffer": true,
"BufferSize": 20
},
"Name": "labelDivTime",
"X": 125,
"Y": 24,
"Width": 70,
"Height": 13,
"Visible": true,
"LockPosition": false,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "Box",
"Color": {
"Red": 0,
"Green": 0,
"Blue": 0
},
"Alpha": 255,
"Name": "chartBG",
"X": 10,
"Y": 62,
"Width": 460,
"Height": 190,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "DynamicGraph",
"DataSeed": -1338968640,
"NumberOfValues": 460,
"MaxY": 4000.0,
"MinY": 0.0,
"Precision": "1",
"UseCustomVisibleDataPointRange": false,
"FirstIndex": 0,
"LastIndex": 459,
"MapDataPointIndexToCustomValue": false,
"XAxisOffset": 0.0,
"XAxisScale": 1.0,
"InsertRandomValues": true,
"Alpha": 255,
"LabelSizeTop": 0,
"LabelSizeBottom": 0,
"LabelSizeLeft": 0,
"LabelSizeRight": 0,
"PaddingTop": 0,
"PaddingBottom": 0,
"PaddingLeft": 0,
"PaddingRight": 0,
"GraphType": "GraphWrapClear",
"GraphDrawers": [
{
"Type": "DiamondsDrawer",
"DiamondWidth": 2,
"FileNameImage": "",
"Color": {
"Red": 20,
"Green": 151,
"Blue": 197
},
"Alpha": 255
}
],
"XAxisGrid": {
"Type": "GraphGrid",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Interval": 1000.0,
"LineWidth": 1,
"Alpha": 100
},
"Name": "chart",
"X": 10,
"Y": 62,
"Width": 460,
"Height": 190,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "Button",
"Pressed": "__designer\\Blue_Buttons_Square_icon_button_pressed.png",
"Released": "__designer\\Blue_Buttons_Square_icon_button.png",
"Alpha": 255,
"Name": "btnPlus",
"X": 5,
"Y": 1,
"Width": 60,
"Height": 60,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "Button",
"Pressed": "__designer\\Blue_Buttons_Square_icon_button_pressed.png",
"Released": "__designer\\Blue_Buttons_Square_icon_button.png",
"Alpha": 255,
"Name": "btnMinus",
"X": 65,
"Y": 1,
"Width": 60,
"Height": 60,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "Button",
"Pressed": "__designer\\Blue_Buttons_Square_icon_button_pressed.png",
"Released": "__designer\\Blue_Buttons_Square_icon_button.png",
"Alpha": 255,
"Name": "btnTrigger",
"X": 415,
"Y": 1,
"Width": 60,
"Height": 60,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "TextArea",
"TextId": "SingleUseId7",
"TextRotation": "180",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Alpha": 255,
"AutoSize": true,
"LineSpacing": 0,
"Name": "labelTrigger",
"X": 428,
"Y": 24,
"Width": 35,
"Height": 13,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "TextArea",
"TextId": "SingleUseId8",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Alpha": 255,
"AutoSize": true,
"LineSpacing": 0,
"Name": "labelPlus",
"X": 18,
"Y": 2,
"Width": 33,
"Height": 49,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "TextArea",
"TextId": "SingleUseId9",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Alpha": 255,
"AutoSize": true,
"LineSpacing": 0,
"Name": "labelMinus",
"X": 85,
"Y": 2,
"Width": 18,
"Height": 49,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "Image",
"RelativeFilename": "red-led-circle-01.png",
"Alpha": 255,
"Name": "redLedEnable",
"X": 388,
"Y": 21,
"Width": 16,
"Height": 16,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
},
{
"Type": "Image",
"RelativeFilename": "red-led-circle-02.png",
"Alpha": 255,
"Name": "redLedDisable",
"X": 388,
"Y": 21,
"Width": 16,
"Height": 16,
"Visible": true,
"LockPosition": true,
"Draggable": false,
"Clickable": false,
"Fadeable": false,
"Moveable": false
}
],
"Interactions": [
{
"InteractionName": "onTriggerPush",
"HasCompletedTrigger": true,
"Trigger": {
"Type": "TriggerClicked",
"TriggerComponent": "btnTrigger"
},
"Action": {
"Type": "ActionExecuteCode",
"Code": "//When btnTrigger clicked toggle redLedDisable\r\nif(redLedDisable.isVisible()){\r\n\tredLedDisable.setVisible(false);\r\n\tredLedDisable.invalidate();\r\n}\r\nelse{\r\n\tredLedDisable.setVisible(true);\r\n\tredLedDisable.invalidate();\r\n}"
}
},
{
"InteractionName": "onMinusPush",
"HasCompletedTrigger": false,
"Trigger": {
"Type": "TriggerClicked",
"TriggerComponent": "btnMinus"
},
"Action": {
"Type": "ActionCustom",
"FunctionName": "onBtnMinusPressed"
}
},
{
"InteractionName": "onPlusPush",
"HasCompletedTrigger": false,
"Trigger": {
"Type": "TriggerClicked",
"TriggerComponent": "btnPlus"
},
"Action": {
"Type": "ActionCustom",
"FunctionName": "onBtnPlusPressed"
}
},
{
"InteractionName": "onTriggerCheckState",
"HasCompletedTrigger": false,
"Trigger": {
"Type": "TriggerInteractionCompleted",
"InteractionToTriggerOn": "onTriggerPush"
},
"Action": {
"Type": "ActionCustom",
"FunctionName": "onCheckBoxTriggerPressed"
}
}
],
"Name": "MainView",
"OverrideDefaultBufferSize": false,
"CanvasBufferSize": 7200
}
],
"CustomContainerDefinitions": [],
"TextEntries": [
{
"TextEntryId": "SingleUseId1",
"IsResource": false
},
{
"TextEntryId": "SingleUseId2",
"IsResource": false
},
{
"TextEntryId": "SingleUseId3",
"IsResource": false
},
{
"TextEntryId": "SingleUseId4",
"IsResource": false
},
{
"TextEntryId": "SingleUseId5",
"IsResource": false
},
{
"TextEntryId": "SingleUseId6",
"IsResource": false
},
{
"TextEntryId": "SingleUseId7",
"IsResource": false
},
{
"TextEntryId": "SingleUseId8",
"IsResource": false
},
{
"TextEntryId": "SingleUseId9",
"IsResource": false
}
],
"Name": "STM32F746G_DISCO",
"Resolution": {
"Width": 480,
"Height": 272
},
"SelectedColorDepth": 16,
"StartupScreenName": "MainView",
"SelectedStartupLanguage": "GB",
"Skin": "Blue",
"TouchGfxPath": "../Middlewares/ST/touchgfx",
"UIPath": ".",
"AvailableColorDepths": [
16
],
"AvailableLCDs": {
"16": "LCD16bpp"
},
"AvailableSections": [
"ExtFlashSection",
"IntFlashSection"
],
"AvailableResolutions": [
{
"Width": 480,
"Height": 272
}
],
"PhysicalButtons": [],
"FrameworkFeatures": {
"LCD16bpp": {
"Id": "LCD16bpp",
"IsEnabled": true
}
},
"GenerateAssetsCommand": "make -f simulator/gcc/Makefile assets -j8",
"PostGenerateCommand": "touchgfx update_project --project-file=simulator/msvs/Application.vcxproj",
"PostGenerateTargetCommand": "touchgfx update_project --project-file=../STM32F746G_DISCO.ioc --platform=m7",
"CompileSimulatorCommand": "make -f simulator/gcc/Makefile -j8",
"RunSimulatorCommand": "build\\bin\\simulator.exe",
"CompileTargetCommand": "make -f ../gcc/Makefile -j8",
"FlashTargetCommand": "make -f ../gcc/Makefile flash -j8",
"LandscapeSkinX": 0,
"LandscapeSkinY": 0,
"PortraitSkinX": 0,
"PortraitSkinY": 0,
"DisplayOrientation": "Landscape",
"Family": "STM32F7"
},
"Version": "4.16.1",
"CreatedBy": "4.16.1"
}

View File

@ -0,0 +1,48 @@
#include <CortexMMCUInstrumentation.hpp>
#include <touchgfx/hal/HAL.hpp>
namespace touchgfx
{
void CortexMMCUInstrumentation::init()
{
// See: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337e/CEGHJDCF.html
//
// [24] Read/write TRCENA This bit must be set to 1 to enable use of the trace and debug blocks:
// Data Watchpoint and Trace (DWT)
// Instrumentation Trace Macrocell (ITM)
// Embedded Trace Macrocell (ETM)
// Trace Port Interface Unit (TPIU).
// This enables control of power usage unless tracing is required. The application can enable this, for ITM use, or use by a debugger.
// Enable Debug Exception and Monitor Control Register
*((volatile unsigned int*)0xE000EDFC) |= 0x01000000;
// Enable Lock Access Register
*((volatile unsigned int*)0xE0001FB0) |= 0xC5ACCE55;
// Enable Data Watchpoint and Trace Control Register
*((volatile unsigned int*)0xE0001000) |= 1;
}
//Board specific clockfrequency
unsigned int CortexMMCUInstrumentation::getElapsedUS(unsigned int start, unsigned int now, unsigned int clockfrequency)
{
return ((now - start) + (clockfrequency / 2)) / clockfrequency;
}
unsigned int CortexMMCUInstrumentation::getCPUCycles()
{
return *((volatile unsigned int*)0xE0001004);
}
void CortexMMCUInstrumentation::setMCUActive(bool active)
{
if (active) //idle task sched out
{
uint32_t cc_temp = getCPUCycles() - cc_in;
cc_consumed += cc_temp;
}
else //idle task sched in
{
cc_in = getCPUCycles();
}
}
}

View File

@ -0,0 +1,74 @@
#ifndef CORTEXMMCUINSTRUMENTATION_HPP
#define CORTEXMMCUINSTRUMENTATION_HPP
#include <platform/core/MCUInstrumentation.hpp>
#include <stdint.h>
namespace touchgfx
{
/**
* @class CortexMMCUInstrumentation CortexMMCUInstrumentation.hpp platform/core/arm/cortex-m/CortexMMCUInstrumentation.hpp
*
* @brief Interface for instrumenting Cortex-M processors to measure MCU load via measured CPU
* cycles.
*
* Interface for instrumenting Cortex-M processors to measure MCU load via measured CPU
* cycles.
*
* @sa MCUInstrumentation
*/
class CortexMMCUInstrumentation : public MCUInstrumentation
{
public:
/**
* @fn virtual void CortexMMCUInstrumentation::init();
*
* @brief Initialization.
*
* Initialization.
*/
virtual void init();
/**
* @fn virtual unsigned int CortexMMCUInstrumentation::getElapsedUS(unsigned int start, unsigned int now, unsigned int clockfrequency);
*
* @brief Gets elapsed microseconds basedon clockfrequency.
*
* Gets elapsed microseconds basedon clockfrequency.
*
* @param start Start time.
* @param now Current time.
* @param clockfrequency Clock frequency of the system.
*
* @return Elapsed microseconds start and now.
*/
virtual unsigned int getElapsedUS(unsigned int start, unsigned int now, unsigned int clockfrequency);
/**
* @fn virtual unsigned int CortexMMCUInstrumentation::getCPUCycles();
*
* @brief Gets CPU cycles from register.
*
* Gets CPU cycles from register.
*
* @return CPU cycles.
*/
virtual unsigned int getCPUCycles();
/**
* @fn virtual void CortexMMCUInstrumentation::setMCUActive(bool active);
*
* @brief Register if MCU is active by measuring cpu cycles.
*
* Register if MCU is active by measuring cpu cycles. If user wishes to track
* MCU load, this method should be called whenever the OS Idle task is scheduled
* in or out. This method makes calls to a concrete implementation of GPIO
* functionality and a concrete implementation of cpu cycles.
*
* @param active If true, MCU is registered as being active, inactive otherwise.
*/
virtual void setMCUActive(bool active);
};
} // namespace touchgfx
#endif // CORTEXMMCUINSTRUMENTATION_HPP

View File

@ -0,0 +1,176 @@
/**
******************************************************************************
* File Name : STM32TouchController.cpp
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
/* USER CODE BEGIN STM32TouchController */
#include <STM32TouchController.hpp>
#include <TouchGFXHAL.hpp>
#include <ft5336.h>
#include <stm32f7xx_hal.h>
#include <touchgfx/hal/OSWrappers.hpp>
static TS_DrvTypeDef* tsDriver;
extern I2C_HandleTypeDef hi2c3;
void STM32TouchController::init()
{
/* Initialize the TS driver structure */
tsDriver = &ft5336_ts_drv;
/* Initialize the TS driver */
tsDriver->Start(TS_I2C_ADDRESS);
}
bool STM32TouchController::sampleTouch(int32_t& x, int32_t& y)
{
/**
* By default sampleTouch returns false,
* return true if a touch has been detected, otherwise false.
*
* Coordinates are passed to the caller by reference by x and y.
*
* This function is called by the TouchGFX framework.
* By default sampleTouch is called every tick, this can be adjusted by HAL::setTouchSampleRate(int8_t);
*
*/
if (tsDriver)
{
if (tsDriver->DetectTouch(TS_I2C_ADDRESS))
{
/* Get each touch coordinates */
tsDriver->GetXY(TS_I2C_ADDRESS, (uint16_t*)&y, (uint16_t*)&x);
return true;
}
}
return false;
}
/**
* @brief Manages error callback by re-initializing I2C.
* @param i2c_handler : I2C handler
* @param Addr: I2C Address
* @retval None
*/
static void I2Cx_Error(I2C_HandleTypeDef* i2c_handler, uint8_t Addr)
{
/* De-initialize the I2C communication bus */
HAL_I2C_DeInit(i2c_handler);
/* Re-Initialize the I2C communication bus */
//I2Cx_Init(i2c_handler);
}
/**
* @brief Reads multiple data.
* @param i2c_handler : I2C handler
* @param Addr: I2C address
* @param Reg: Reg address
* @param MemAddress: Memory address
* @param Buffer: Pointer to data buffer
* @param Length: Length of the data
* @retval Number of read data
*/
static HAL_StatusTypeDef I2Cx_ReadMultiple(I2C_HandleTypeDef* i2c_handler,
uint8_t Addr,
uint16_t Reg,
uint16_t MemAddress,
uint8_t* Buffer,
uint16_t Length)
{
HAL_StatusTypeDef status = HAL_OK;
status = HAL_I2C_Mem_Read(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000);
/* Check the communication status */
if (status != HAL_OK)
{
/* I2C error occurred */
I2Cx_Error(i2c_handler, Addr);
}
return status;
}
/**
* @brief Writes a value in a register of the device through BUS in using DMA mode.
* @param i2c_handler : I2C handler
* @param Addr: Device address on BUS Bus.
* @param Reg: The target register address to write
* @param MemAddress: Memory address
* @param Buffer: The target register value to be written
* @param Length: buffer size to be written
* @retval HAL status
*/
static HAL_StatusTypeDef I2Cx_WriteMultiple(I2C_HandleTypeDef* i2c_handler,
uint8_t Addr,
uint16_t Reg,
uint16_t MemAddress,
uint8_t* Buffer,
uint16_t Length)
{
HAL_StatusTypeDef status = HAL_OK;
status = HAL_I2C_Mem_Write(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000);
/* Check the communication status */
if (status != HAL_OK)
{
/* Re-Initiaize the I2C Bus */
I2Cx_Error(i2c_handler, Addr);
}
return status;
}
/**
* @brief Writes a single data.
* @param Addr: I2C address
* @param Reg: Reg address
* @param Value: Data to be written
* @retval None
*/
void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value)
{
I2Cx_WriteMultiple(&hi2c3, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&Value, 1);
}
/**
* @brief Reads a single data.
* @param Addr: I2C address
* @param Reg: Reg address
* @retval Data to be read
*/
uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg)
{
uint8_t read_value = 0;
I2Cx_ReadMultiple(&hi2c3, Addr, Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1);
return read_value;
}
/**
* @brief TS delay
* @param Delay: Delay in ms
* @retval None
*/
void TS_IO_Delay(uint32_t Delay)
{
HAL_Delay(Delay);
}
/* USER CODE END STM32TouchController */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,70 @@
/**
******************************************************************************
* File Name : STM32TouchController.hpp
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
/* USER CODE BEGIN STM32TouchController */
#ifndef STM32TOUCHCONTROLLER_HPP
#define STM32TOUCHCONTROLLER_HPP
#include <platform/driver/touch/TouchController.hpp>
/**
* @class STM32TouchController
*
* @brief This class specializes TouchController Interface.
*
* @sa touchgfx::TouchController
*/
class STM32TouchController : public touchgfx::TouchController
{
public:
STM32TouchController() {}
/**
* @fn virtual void STM32TouchController::init() = 0;
*
* @brief Initializes touch controller.
*
* Initializes touch controller.
*/
virtual void init();
/**
* @fn virtual bool STM32TouchController::sampleTouch(int32_t& x, int32_t& y) = 0;
*
* @brief Checks whether the touch screen is being touched, and if so, what coordinates.
*
* Checks whether the touch screen is being touched, and if so, what coordinates.
*
* @param [out] x The x position of the touch
* @param [out] y The y position of the touch
*
* @return True if a touch has been detected, otherwise false.
*/
virtual bool sampleTouch(int32_t& x, int32_t& y);
private:
static const uint16_t TS_I2C_ADDRESS = ((uint16_t)0x70);
};
#endif // STM32TOUCHCONTROLLER_HPP
/* USER CODE END STM32TouchController */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,76 @@
/**
******************************************************************************
* File Name : TouchGFXGPIO.cpp
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
#include <touchgfx/hal/GPIO.hpp>
/**
* GPIO_ID Enum, these are used bt TouchGFX framework to signal events.
*
* VSYNC_FREQ, /// Pin is toggled at each VSYNC
* RENDER_TIME, /// Pin is high when frame rendering begins, low when finished
* FRAME_RATE, /// Pin is toggled when the frame buffers are swapped.
* MCU_ACTIVE /// Pin is high when framework is utilizing the MCU.
*
*/
/* USER CODE BEGIN TouchGFXGPIO.cpp */
using namespace touchgfx;
/*
* Perform configuration of IO pins.
*/
void GPIO::init()
{
}
/*
* Sets a pin high.
*/
void GPIO::set(GPIO_ID id)
{
}
/*
* Sets a pin low.
*/
void GPIO::clear(GPIO_ID id)
{
}
/*
* Toggles a pin.
*/
void GPIO::toggle(GPIO_ID id)
{
}
/*
* Gets the state of a pin.
*/
bool GPIO::get(GPIO_ID id)
{
return false;
}
/* USER CODE END TouchGFXGPIO.cpp */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,208 @@
/**
******************************************************************************
* File Name : TouchGFXHAL.cpp
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
#include <TouchGFXHAL.hpp>
/* USER CODE BEGIN TouchGFXHAL.cpp */
#include "stm32f7xx.h"
#include <touchgfx/hal/OSWrappers.hpp>
#include <CortexMMCUInstrumentation.hpp>
#include "touchgfx-config.h"
#if (TOUCHGFX_FREERTOS != 0)
#include "FreeRTOS.h"
#include "task.h"
#endif // TOUCHGFX_FREERTOS
using namespace touchgfx;
CortexMMCUInstrumentation instrumentation;
void TouchGFXHAL::initialize()
{
// Calling parent implementation of initialize().
//
// To overwrite the generated implementation, omit call to parent function
// and implemented needed functionality here.
// Please note, HAL::initialize() must be called to initialize the framework.
TouchGFXGeneratedHAL::initialize();
setFrameBufferStartAddresses((void*)0xC0000000, (void*)0xC003FC00, (void*)0xC007F800); //enable the animation storage to allow slide animations
lockDMAToFrontPorch(false);
instrumentation.init();
setMCUInstrumentation(&instrumentation);
enableMCULoadCalculation(true);
}
#if (TOUCHGFX_BAREMETAL != 0)
void TouchGFXHAL::taskEntry()
{
static bool firstCall = true;
if (firstCall)
{
firstCall = false;
enableLCDControllerInterrupt();
enableInterrupts();
}
OSWrappers::waitForVSync();
//backPorchExited();
// Not necessary to call here when it is done by the
// OSWrappers::waitForVSync() method
}
#endif // TOUCHGFX_BAREMETAL
/**
* Gets the frame buffer address used by the TFT controller.
*
* @return The address of the frame buffer currently being displayed on the TFT.
*/
uint16_t* TouchGFXHAL::getTFTFrameBuffer() const
{
// Calling parent implementation of getTFTFrameBuffer().
//
// To overwrite the generated implementation, omit call to parent function
// and implemented needed functionality here.
return TouchGFXGeneratedHAL::getTFTFrameBuffer();
}
/**
* Sets the frame buffer address used by the TFT controller.
*
* @param [in] address New frame buffer address.
*/
void TouchGFXHAL::setTFTFrameBuffer(uint16_t* address)
{
// Calling parent implementation of setTFTFrameBuffer(uint16_t* address).
//
// To overwrite the generated implementation, omit call to parent function
// and implemented needed functionality here.
TouchGFXGeneratedHAL::setTFTFrameBuffer(address);
}
/**
* This function is called whenever the framework has performed a partial draw.
*
* @param rect The area of the screen that has been drawn, expressed in absolute coordinates.
*
* @see flushFrameBuffer().
*/
void TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect)
{
// Calling parent implementation of flushFrameBuffer(const touchgfx::Rect& rect).
//
// To overwrite the generated implementation, omit call to parent function
// and implemented needed functionality here.
// Please note, HAL::flushFrameBuffer(const touchgfx::Rect& rect) must
// be called to notify the touchgfx framework that flush has been performed.
TouchGFXGeneratedHAL::flushFrameBuffer(rect);
// If the framebuffer is placed in Write Through cached memory (e.g. SRAM) then we need
// to flush the Dcache to make sure framebuffer is correct in RAM. That's done
// using SCB_CleanInvalidateDCache().
if ((SCB->CCR & SCB_CCR_DC_Msk) != 0) // Check data cache is enabled
{
SCB_CleanInvalidateDCache();
}
}
bool TouchGFXHAL::blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes)
{
return TouchGFXGeneratedHAL::blockCopy(dest, src, numBytes);
}
/**
* Configures the interrupts relevant for TouchGFX. This primarily entails setting
* the interrupt priorities for the DMA and LCD interrupts.
*/
void TouchGFXHAL::configureInterrupts()
{
// Calling parent implementation of configureInterrupts().
//
// To overwrite the generated implementation, omit call to parent function
// and implemented needed functionality here.
TouchGFXGeneratedHAL::configureInterrupts();
}
/**
* Used for enabling interrupts set in configureInterrupts()
*/
void TouchGFXHAL::enableInterrupts()
{
// Calling parent implementation of enableInterrupts().
//
// To overwrite the generated implementation, omit call to parent function
// and implemented needed functionality here.
TouchGFXGeneratedHAL::enableInterrupts();
}
/**
* Used for disabling interrupts set in configureInterrupts()
*/
void TouchGFXHAL::disableInterrupts()
{
// Calling parent implementation of disableInterrupts().
//
// To overwrite the generated implementation, omit call to parent function
// and implemented needed functionality here.
TouchGFXGeneratedHAL::disableInterrupts();
}
/**
* Configure the LCD controller to fire interrupts at VSYNC. Called automatically
* once TouchGFX initialization has completed.
*/
void TouchGFXHAL::enableLCDControllerInterrupt()
{
// Calling parent implementation of enableLCDControllerInterrupt().
//
// To overwrite the generated implementation, omit call to parent function
// and implemented needed functionality here.
TouchGFXGeneratedHAL::enableLCDControllerInterrupt();
}
extern "C"
{
#if (TOUCHGFX_FREERTOS != 0)
portBASE_TYPE IdleTaskHook(void* p)
{
if ((int)p) //idle task sched out
{
touchgfx::HAL::getInstance()->setMCUActive(true);
}
else //idle task sched in
{
touchgfx::HAL::getInstance()->setMCUActive(false);
}
return pdTRUE;
}
#endif // TOUCHGFX_FREERTOS
}
/* USER CODE END TouchGFXHAL.cpp */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,166 @@
/**
******************************************************************************
* File Name : TouchGFXHAL.hpp
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
#ifndef TouchGFXHAL_HPP
#define TouchGFXHAL_HPP
/* USER CODE BEGIN TouchGFXHAL.hpp */
#include <TouchGFXGeneratedHAL.hpp>
#include "touchgfx-config.h"
/**
* @class TouchGFXHAL
*
* @brief HAL implementation for TouchGFX.
*
* @sa HAL
*/
class TouchGFXHAL : public TouchGFXGeneratedHAL
{
public:
/**
* @fn TouchGFXHAL::TouchGFXHAL(touchgfx::DMA_Interface& dma, touchgfx::LCD& display, touchgfx::TouchController& tc, uint16_t width, uint16_t height) : TouchGFXGeneratedHAL(dma, display, tc, width, height)
*
* @brief Constructor.
*
* Constructor. Initializes members.
*
* @param [in,out] dma Reference to DMA interface.
* @param [in,out] display Reference to LCD interface.
* @param [in,out] tc Reference to Touch Controller driver.
* @param width Width of the display.
* @param height Height of the display.
*/
TouchGFXHAL(touchgfx::DMA_Interface& dma, touchgfx::LCD& display, touchgfx::TouchController& tc, uint16_t width, uint16_t height) : TouchGFXGeneratedHAL(dma, display, tc, width, height)
{
}
void initialize();
#if ( TOUCHGFX_BAREMETAL != 0)
virtual void taskEntry();
#endif // TOUCHGFX_BAREMETAL
/**
* @fn virtual void TouchGFXHAL::disableInterrupts();
*
* @brief Disables the DMA and LCD interrupts.
*
* Disables the DMA and LCD interrupts.
*/
virtual void disableInterrupts();
/**
* @fn virtual void TouchGFXHAL::enableInterrupts();
*
* @brief Enables the DMA and LCD interrupts.
*
* Enables the DMA and LCD interrupts.
*/
virtual void enableInterrupts();
/**
* @fn virtual void TouchGFXHAL::configureInterrupts();
*
* @brief Sets the DMA and LCD interrupt priorities.
*
* Sets the DMA and LCD interrupt priorities.
*/
virtual void configureInterrupts();
/**
* @fn virtual void TouchGFXHAL::enableLCDControllerInterrupt();
*
* @brief Configure the LCD controller to fire interrupts at VSYNC.
*
* Configure the LCD controller to fire interrupts at VSYNC. Called automatically
* once TouchGFX initialization has completed.
*/
virtual void enableLCDControllerInterrupt();
/**
* @fn virtual void TouchGFXHAL::flushFrameBuffer();
*
* @brief This function is called whenever the framework has performed a complete draw.
*
* This specialization is only in place to keep compilers happy. Base impl. will call the
* Rect version.
* @see HAL::flushFrameBuffer
*/
virtual void flushFrameBuffer()
{
TouchGFXGeneratedHAL::flushFrameBuffer();
}
/**
* @fn virtual void TouchGFXHAL::flushFrameBuffer(const Rect& rect);
*
* @brief This function is called whenever the framework has performed a partial draw.
*
* This function is called whenever the framework has performed a partial draw.
* On the STM32F7, make sure to clean and invalidate the data cache. This is to
* ensure that LTDC sees correct data when transferring to the display.
*
* @param rect The area of the screen that has been drawn, expressed in absolute coordinates.
*
* @see flushFrameBuffer().
*/
virtual void flushFrameBuffer(const touchgfx::Rect& rect);
/**
* @fn virtual bool TouchGFXHAL::blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes);
*
* @brief This function performs a platform-specific memcpy.
*
* This function performs a platform-specific memcpy, if supported by the hardware.
*
* @param [out] dest Pointer to destination memory.
* @param [in] src Pointer to source memory.
* @param numBytes Number of bytes to copy.
*
* @return true if the copy succeeded, false if copy was not performed.
*/
virtual bool blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes);
protected:
/**
* @fn virtual uint16_t* TouchGFXHAL::getTFTFrameBuffer() const;
*
* @brief Gets the frame buffer address used by the TFT controller.
*
* Gets the frame buffer address used by the TFT controller.
*
* @return The address of the frame buffer currently being displayed on the TFT.
*/
virtual uint16_t* getTFTFrameBuffer() const;
/**
* @fn virtual void TouchGFXHAL::setTFTFrameBuffer(uint16_t* adr);
*
* @brief Sets the frame buffer address used by the TFT controller.
*
* Sets the frame buffer address used by the TFT controller.
*
* @param [in,out] adr New frame buffer address.
*/
virtual void setTFTFrameBuffer(uint16_t* adr);
};
/* USER CODE END TouchGFXHAL.hpp */
#endif // TouchGFXHAL_HPP
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,224 @@
/**
******************************************************************************
* File Name : OSWrappers.cpp
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
#include "touchgfx-config.h"
#if ( TOUCHGFX_BAREMETAL != 0)
#include <stm32f7xx_hal.h>
#include <TouchGFXHAL.hpp>
#endif // TOUCHGFX_BAREMETAL
#if ( TOUCHGFX_FREERTOS != 0)
#include <cassert>
#include <cmsis_os2.h>
#include <touchgfx/hal/HAL.hpp>
#endif // TOUCHGFX_FREERTOS
#include <touchgfx/hal/OSWrappers.hpp>
#if (TOUCHGFX_BAREMETAL != 0)
static volatile uint32_t fb_sem;
static volatile uint32_t vsync_sem;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
#include <cmsis_os2.h>
static osSemaphoreId_t frame_buffer_sem = NULL;
static osMessageQueueId_t vsync_queue = NULL;
// Just a dummy value to insert in the VSYNC queue.
static uint32_t dummy = 0x5a;
#endif //TOUCHGFX_FREERTOS
using namespace touchgfx;
/*
* Initialize frame buffer semaphore and queue/mutex for VSYNC signal.
*/
void OSWrappers::initialize()
{
#if (TOUCHGFX_BAREMETAL != 0)
fb_sem = 0;
vsync_sem = 0;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
// Create a queue of length 1
frame_buffer_sem = osSemaphoreNew(1, 1, NULL); // Binary semaphore
assert((frame_buffer_sem != NULL) && "Creation of framebuffer semaphore failed");
// Create a queue of length 1
vsync_queue = osMessageQueueNew(1, 4, NULL);
assert((vsync_queue != NULL) && "Creation of vsync message queue failed");
#endif // TOUCHGFX_FREERTOS
}
/*
* Take the frame buffer semaphore. Blocks until semaphore is available.
*/
void OSWrappers::takeFrameBufferSemaphore()
{
#if (TOUCHGFX_BAREMETAL != 0)
while(fb_sem);
fb_sem = 1;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
osSemaphoreAcquire(frame_buffer_sem, osWaitForever);
#endif // TOUCHGFX_FREERTOS
}
/*
* Release the frame buffer semaphore.
*/
void OSWrappers::giveFrameBufferSemaphore()
{
#if (TOUCHGFX_BAREMETAL != 0)
fb_sem = 0;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
osSemaphoreRelease(frame_buffer_sem);
#endif // TOUCHGFX_FREERTOS
}
/*
* Attempt to obtain the frame buffer semaphore. If semaphore is not available, do
* nothing.
*
* Note must return immediately! This function does not care who has the taken the semaphore,
* it only serves to make sure that the semaphore is taken by someone.
*/
void OSWrappers::tryTakeFrameBufferSemaphore()
{
#if (TOUCHGFX_BAREMETAL != 0)
fb_sem = 1;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
osSemaphoreAcquire(frame_buffer_sem, 0);
#endif // TOUCHGFX_FREERTOS
}
/*
* Release the frame buffer semaphore in a way that is safe in interrupt context. Called
* from ISR.
*
* Release the frame buffer semaphore in a way that is safe in interrupt context.
* Called from ISR.
*/
void OSWrappers::giveFrameBufferSemaphoreFromISR()
{
#if (TOUCHGFX_BAREMETAL != 0)
fb_sem = 0;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
osSemaphoreRelease(frame_buffer_sem);
#endif // TOUCHGFX_FREERTOS
}
/*
* Signal that a VSYNC has occurred. Should make the vsync queue/mutex available.
*
* Note This function is called from an ISR, and should (depending on OS) trigger a
* scheduling.
*/
void OSWrappers::signalVSync()
{
#if (TOUCHGFX_BAREMETAL != 0)
vsync_sem = 1;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
osMessageQueuePut(vsync_queue, &dummy, 0, 0);
#endif // TOUCHGFX_FREERTOS
}
/*
* Signal that the rendering of the frame has completed. Used by
* some systems to avoid using any previous vsync.
*/
void OSWrappers::signalRenderingDone()
{
#if (TOUCHGFX_BAREMETAL != 0)
vsync_sem = 0;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
// Empty implementation for CMSIS V2
#endif // TOUCHGFX_FREERTOS
}
/*
* This function checks if a VSync occurred after last rendering.
* The function is used in systems that cannot wait in waitForVSync
* (because they are also checking other event sources.
*
* @note signalRenderingDone is typically used together with this function.
*
* @return True if VSync occurred.
*/
bool OSWrappers::isVSyncAvailable()
{
#if (TOUCHGFX_BAREMETAL != 0)
return vsync_sem;
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
return true;
#endif // TOUCHGFX_FREERTOS
}
/*
* This function check if a VSYNC has occured.
* If VSYNC has occured, signal TouchGFX to start a rendering
*/
void OSWrappers::waitForVSync()
{
#if (TOUCHGFX_BAREMETAL != 0)
if(vsync_sem)
{
vsync_sem = 0;
HAL::getInstance()->backPorchExited();
}
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
uint32_t dummyGet;
// First make sure the queue is empty, by trying to remove an element with 0 timeout.
osMessageQueueGet(vsync_queue, &dummyGet, 0, 0);
// Then, wait for next VSYNC to occur.
osMessageQueueGet(vsync_queue, &dummyGet, 0, osWaitForever);
#endif // TOUCHGFX_FREERTOS
}
/*
* A function that causes executing task to sleep for a number of milliseconds.
*
* A function that causes executing task to sleep for a number of milliseconds.
* This function is OPTIONAL. It is only used by the TouchGFX in the case of
* a specific frame refresh strategy (REFRESH_STRATEGY_OPTIM_SINGLE_BUFFER_TFT_CTRL).
* Due to backwards compatibility, in order for this function to be useable by the HAL
* the function must be explicitly registered:
* hal.registerTaskDelayFunction(&OSWrappers::taskDelay)
*
* see HAL::setFrameRefreshStrategy(FrameRefreshStrategy s)
* see HAL::registerTaskDelayFunction(void (*delayF)(uint16_t))
*/
void OSWrappers::taskDelay(uint16_t ms)
{
#if (TOUCHGFX_BAREMETAL != 0)
HAL_Delay(ms);
#endif // TOUCHGFX_BAREMETAL
#if (TOUCHGFX_FREERTOS != 0)
osDelay(static_cast<uint32_t>(ms));
#endif // TOUCHGFX_FREERTOS
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,387 @@
/**
******************************************************************************
* File Name : STM32DMA.cpp
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
#include "stm32f7xx_hal.h"
#include "stm32f7xx_hal_dma2d.h"
#include <STM32DMA.hpp>
#include <cassert>
#include <touchgfx/Color.hpp>
#include <touchgfx/hal/HAL.hpp>
#include <touchgfx/hal/OSWrappers.hpp>
#include <touchgfx/lcd/LCD.hpp>
/* Makes touchgfx specific types and variables visible to this file */
using namespace touchgfx;
typedef struct
{
const uint16_t format;
const uint16_t size;
const uint32_t* const data;
} clutData_t;
extern "C" DMA2D_HandleTypeDef hdma2d;
extern "C" {
static void DMA2D_XferCpltCallback(DMA2D_HandleTypeDef* handle)
{
(void)handle; // Unused argument
HAL::getInstance()->signalDMAInterrupt();
}
}
STM32F7DMA::STM32F7DMA()
: DMA_Interface(dma_queue), dma_queue(queue_storage, sizeof(queue_storage) / sizeof(queue_storage[0]))
{
}
STM32F7DMA::~STM32F7DMA()
{
/* Disable DMA2D global Interrupt */
NVIC_DisableIRQ(DMA2D_IRQn);
}
void STM32F7DMA::initialize()
{
/* Ensure DMA2D Clock is enabled */
__HAL_RCC_DMA2D_CLK_ENABLE();
__HAL_RCC_DMA2D_FORCE_RESET();
__HAL_RCC_DMA2D_RELEASE_RESET();
/* Add transfer complete callback function */
hdma2d.XferCpltCallback = DMA2D_XferCpltCallback;
/* Enable DMA2D global Interrupt */
NVIC_EnableIRQ(DMA2D_IRQn);
}
inline uint32_t STM32F7DMA::getChromARTInputFormat(Bitmap::BitmapFormat format)
{
// Default color mode set to ARGB8888
uint32_t dma2dColorMode = DMA2D_INPUT_ARGB8888;
switch (format)
{
case Bitmap::ARGB8888: /* DMA2D input mode set to 32bit ARGB */
dma2dColorMode = DMA2D_INPUT_ARGB8888;
break;
case Bitmap::RGB888: /* DMA2D input mode set to 24bit RGB */
dma2dColorMode = DMA2D_INPUT_RGB888;
break;
case Bitmap::RGB565: /* DMA2D input mode set to 16bit RGB */
dma2dColorMode = DMA2D_INPUT_RGB565;
break;
case Bitmap::ARGB2222: /* Fall through */
case Bitmap::ABGR2222: /* Fall through */
case Bitmap::RGBA2222: /* Fall through */
case Bitmap::BGRA2222: /* Fall through */
case Bitmap::L8: /* DMA2D input mode set to 8bit Color Look up table*/
dma2dColorMode = DMA2D_INPUT_L8;
break;
case Bitmap::BW: /* Fall through */
case Bitmap::BW_RLE: /* Fall through */
case Bitmap::GRAY4: /* Fall through */
case Bitmap::GRAY2: /* Fall through */
default: /* Unsupported input format for DMA2D */
assert(0 && "Unsupported Format!");
break;
}
return dma2dColorMode;
}
inline uint32_t STM32F7DMA::getChromARTOutputFormat(Bitmap::BitmapFormat format)
{
// Default color mode set to ARGB8888
uint32_t dma2dColorMode = DMA2D_OUTPUT_ARGB8888;
switch (format)
{
case Bitmap::ARGB8888: /* DMA2D output mode set to 32bit ARGB */
dma2dColorMode = DMA2D_OUTPUT_ARGB8888;
break;
case Bitmap::RGB888: /* Fall through */
case Bitmap::ARGB2222: /* Fall through */
case Bitmap::ABGR2222: /* Fall through */
case Bitmap::RGBA2222: /* Fall through */
case Bitmap::BGRA2222: /* DMA2D output mode set to 24bit RGB */
dma2dColorMode = DMA2D_OUTPUT_RGB888;
break;
case Bitmap::RGB565: /* DMA2D output mode set to 16bit RGB */
dma2dColorMode = DMA2D_OUTPUT_RGB565;
break;
case Bitmap::L8: /* Fall through */
case Bitmap::BW: /* Fall through */
case Bitmap::BW_RLE: /* Fall through */
case Bitmap::GRAY4: /* Fall through */
case Bitmap::GRAY2: /* Fall through */
default: /* Unsupported output format for DMA2D */
assert(0 && "Unsupported Format!");
break;
}
return dma2dColorMode;
}
BlitOperations STM32F7DMA::getBlitCaps()
{
return static_cast<BlitOperations>(BLIT_OP_FILL
| BLIT_OP_FILL_WITH_ALPHA
| BLIT_OP_COPY
| BLIT_OP_COPY_WITH_ALPHA
| BLIT_OP_COPY_ARGB8888
| BLIT_OP_COPY_ARGB8888_WITH_ALPHA
| BLIT_OP_COPY_A4
| BLIT_OP_COPY_A8);
}
/*
* void STM32F7DMA::setupDataCopy(const BlitOp& blitOp) handles blit operation of
* BLIT_OP_COPY
* BLIT_OP_COPY_WITH_ALPHA
* BLIT_OP_COPY_ARGB8888
* BLIT_OP_COPY_ARGB8888_WITH_ALPHA
* BLIT_OP_COPY_A4
* BLIT_OP_COPY_A8
*/
void STM32F7DMA::setupDataCopy(const BlitOp& blitOp)
{
uint32_t dma2dForegroundColorMode = getChromARTInputFormat(static_cast<Bitmap::BitmapFormat>(blitOp.srcFormat));
uint32_t dma2dBackgroundColorMode = getChromARTInputFormat(static_cast<Bitmap::BitmapFormat>(blitOp.dstFormat));
uint32_t dma2dOutputColorMode = getChromARTOutputFormat(static_cast<Bitmap::BitmapFormat>(blitOp.dstFormat));
/* DMA2D OOR register configuration ------------------------------------------*/
WRITE_REG(DMA2D->OOR, blitOp.dstLoopStride - blitOp.nSteps);
/* DMA2D BGOR register configuration -------------------------------------*/
WRITE_REG(DMA2D->BGOR, blitOp.dstLoopStride - blitOp.nSteps);
/* DMA2D FGOR register configuration -------------------------------------*/
WRITE_REG(DMA2D->FGOR, blitOp.srcLoopStride - blitOp.nSteps);
/* DMA2D OPFCCR register configuration ---------------------------------------*/
WRITE_REG(DMA2D->OPFCCR, dma2dOutputColorMode);
/* Configure DMA2D data size */
WRITE_REG(DMA2D->NLR, (blitOp.nLoops | (blitOp.nSteps << DMA2D_NLR_PL_Pos)));
/* Configure DMA2D destination address */
WRITE_REG(DMA2D->OMAR, reinterpret_cast<uint32_t>(blitOp.pDst));
/* Configure DMA2D source address */
WRITE_REG(DMA2D->FGMAR, reinterpret_cast<uint32_t>(blitOp.pSrc));
switch (blitOp.operation)
{
case BLIT_OP_COPY_A4:
/* Set DMA2D color mode and alpha mode */
WRITE_REG(DMA2D->FGPFCCR, DMA2D_INPUT_A4 | (DMA2D_COMBINE_ALPHA << DMA2D_BGPFCCR_AM_Pos) | (blitOp.alpha << 24));
/* set DMA2D foreground color */
WRITE_REG(DMA2D->FGCOLR, ((blitOp.color & 0xF800) << 8) | ((blitOp.color & 0x07E0) << 5) | ((blitOp.color & 0x001F) << 3));
/* Write DMA2D BGPFCCR register */
WRITE_REG(DMA2D->BGPFCCR, dma2dBackgroundColorMode | (DMA2D_NO_MODIF_ALPHA << DMA2D_BGPFCCR_AM_Pos));
/* Configure DMA2D Stream source2 address */
WRITE_REG(DMA2D->BGMAR, reinterpret_cast<uint32_t>(blitOp.pDst));
/* Set DMA2D mode */
WRITE_REG(DMA2D->CR, DMA2D_M2M_BLEND | DMA2D_IT_TC | DMA2D_CR_START);
break;
case BLIT_OP_COPY_A8:
/* Set DMA2D color mode and alpha mode */
WRITE_REG(DMA2D->FGPFCCR, DMA2D_INPUT_A8 | (DMA2D_COMBINE_ALPHA << DMA2D_BGPFCCR_AM_Pos) | (blitOp.alpha << 24));
/* set DMA2D foreground color */
WRITE_REG(DMA2D->FGCOLR, ((blitOp.color & 0xF800) << 8) | ((blitOp.color & 0x07E0) << 5) | ((blitOp.color & 0x001F) << 3));
/* Write DMA2D BGPFCCR register */
WRITE_REG(DMA2D->BGPFCCR, dma2dBackgroundColorMode | (DMA2D_NO_MODIF_ALPHA << DMA2D_BGPFCCR_AM_Pos));
/* Configure DMA2D Stream source2 address */
WRITE_REG(DMA2D->BGMAR, reinterpret_cast<uint32_t>(blitOp.pDst));
/* Set DMA2D mode */
WRITE_REG(DMA2D->CR, DMA2D_M2M_BLEND | DMA2D_IT_TC | DMA2D_CR_START);
break;
case BLIT_OP_COPY_WITH_ALPHA:
/* Set DMA2D color mode and alpha mode */
WRITE_REG(DMA2D->FGPFCCR, dma2dForegroundColorMode | (DMA2D_COMBINE_ALPHA << DMA2D_BGPFCCR_AM_Pos) | (blitOp.alpha << 24));
/* Write DMA2D BGPFCCR register */
WRITE_REG(DMA2D->BGPFCCR, dma2dBackgroundColorMode | (DMA2D_NO_MODIF_ALPHA << DMA2D_BGPFCCR_AM_Pos));
/* Configure DMA2D Stream source2 address */
WRITE_REG(DMA2D->BGMAR, reinterpret_cast<uint32_t>(blitOp.pDst));
if (blitOp.srcFormat == Bitmap::L8)
{
const clutData_t* const palette = reinterpret_cast<const clutData_t*>(blitOp.pClut);
/* Write foreground CLUT memory address */
WRITE_REG(DMA2D->FGCMAR, reinterpret_cast<uint32_t>(&palette->data));
switch ((Bitmap::ClutFormat)palette->format)
{
case Bitmap::CLUT_FORMAT_L8_ARGB8888:
/* Write foreground CLUT size and CLUT color mode */
MODIFY_REG(DMA2D->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM), (((palette->size - 1) << DMA2D_FGPFCCR_CS_Pos) | (DMA2D_CCM_ARGB8888 << DMA2D_FGPFCCR_CCM_Pos)));
break;
case Bitmap::CLUT_FORMAT_L8_RGB888:
MODIFY_REG(DMA2D->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM), (((palette->size - 1) << DMA2D_FGPFCCR_CS_Pos) | (DMA2D_CCM_RGB888 << DMA2D_FGPFCCR_CCM_Pos)));
break;
case Bitmap::CLUT_FORMAT_L8_RGB565:
default:
assert(0 && "Unsupported format");
break;
}
/* Enable the CLUT loading for the foreground */
SET_BIT(DMA2D->FGPFCCR, DMA2D_FGPFCCR_START);
while ((READ_REG(DMA2D->FGPFCCR) & DMA2D_FGPFCCR_START) != 0U)
{
__NOP();
}
DMA2D->IFCR = (DMA2D_FLAG_CTC);
}
/* Set DMA2D mode */
WRITE_REG(DMA2D->CR, DMA2D_M2M_BLEND | DMA2D_IT_TC | DMA2D_CR_START);
break;
case BLIT_OP_COPY_ARGB8888:
case BLIT_OP_COPY_ARGB8888_WITH_ALPHA:
/* Set DMA2D color mode and alpha mode */
WRITE_REG(DMA2D->FGPFCCR, dma2dForegroundColorMode | (DMA2D_COMBINE_ALPHA << DMA2D_BGPFCCR_AM_Pos) | (blitOp.alpha << 24));
/* Write DMA2D BGPFCCR register */
WRITE_REG(DMA2D->BGPFCCR, dma2dBackgroundColorMode | (DMA2D_NO_MODIF_ALPHA << DMA2D_BGPFCCR_AM_Pos));
/* Configure DMA2D Stream source2 address */
WRITE_REG(DMA2D->BGMAR, reinterpret_cast<uint32_t>(blitOp.pDst));
/* Set DMA2D mode */
WRITE_REG(DMA2D->CR, DMA2D_M2M_BLEND | DMA2D_IT_TC | DMA2D_CR_START);
break;
default: /* BLIT_OP_COPY */
/* Set DMA2D color mode and alpha mode */
WRITE_REG(DMA2D->FGPFCCR, dma2dForegroundColorMode | (DMA2D_COMBINE_ALPHA << DMA2D_BGPFCCR_AM_Pos) | (blitOp.alpha << 24));
if (blitOp.srcFormat == Bitmap::L8)
{
const clutData_t* const palette = reinterpret_cast<const clutData_t*>(blitOp.pClut);
/* Write foreground CLUT memory address */
WRITE_REG(DMA2D->FGCMAR, reinterpret_cast<uint32_t>(&palette->data));
/* Write foreground CLUT size and CLUT color mode */
MODIFY_REG(DMA2D->FGPFCCR, (DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM), (((palette->size - 1) << DMA2D_FGPFCCR_CS_Pos) | (DMA2D_CCM_RGB888 << DMA2D_FGPFCCR_CCM_Pos)));
/* Enable the CLUT loading for the foreground */
SET_BIT(DMA2D->FGPFCCR, DMA2D_FGPFCCR_START);
while ((READ_REG(DMA2D->FGPFCCR) & DMA2D_FGPFCCR_START) != 0U)
{
__NOP();
}
DMA2D->IFCR = (DMA2D_FLAG_CTC);
/* Start DMA2D */
WRITE_REG(DMA2D->CR, DMA2D_M2M_PFC | DMA2D_IT_TC | DMA2D_CR_START);
}
else
{
/* Start DMA2D */
WRITE_REG(DMA2D->CR, DMA2D_M2M | DMA2D_IT_TC | DMA2D_CR_START);
}
break;
}
}
/*
* void STM32F7DMA::setupDataFill(const BlitOp& blitOp) handles blit operation of
* BLIT_OP_FILL
* BLIT_OP_FILL_WITH_ALPHA
*/
void STM32F7DMA::setupDataFill(const BlitOp& blitOp)
{
uint32_t dma2dOutputColorMode = getChromARTOutputFormat(static_cast<Bitmap::BitmapFormat>(blitOp.dstFormat));
/* DMA2D OPFCCR register configuration ---------------------------------------*/
WRITE_REG(DMA2D->OPFCCR, dma2dOutputColorMode);
/* Configure DMA2D data size */
WRITE_REG(DMA2D->NLR, (blitOp.nLoops | (blitOp.nSteps << DMA2D_NLR_PL_Pos)));
/* Configure DMA2D destination address */
WRITE_REG(DMA2D->OMAR, reinterpret_cast<uint32_t>(blitOp.pDst));
/* DMA2D OOR register configuration ------------------------------------------*/
WRITE_REG(DMA2D->OOR, blitOp.dstLoopStride - blitOp.nSteps);
if (blitOp.operation == BLIT_OP_FILL_WITH_ALPHA)
{
/* DMA2D BGOR register configuration -------------------------------------*/
WRITE_REG(DMA2D->BGOR, blitOp.dstLoopStride - blitOp.nSteps);
/* DMA2D FGOR register configuration -------------------------------------*/
WRITE_REG(DMA2D->FGOR, blitOp.dstLoopStride - blitOp.nSteps);
/* Write DMA2D BGPFCCR register */
WRITE_REG(DMA2D->BGPFCCR, dma2dOutputColorMode | (DMA2D_NO_MODIF_ALPHA << DMA2D_BGPFCCR_AM_Pos));
/* Write DMA2D FGPFCCR register */
WRITE_REG(DMA2D->FGPFCCR, CM_A8 | (DMA2D_REPLACE_ALPHA << DMA2D_BGPFCCR_AM_Pos) | ((blitOp.alpha << 24) & DMA2D_BGPFCCR_ALPHA));
/* DMA2D FGCOLR register configuration -------------------------------------*/
WRITE_REG(DMA2D->FGCOLR, ((blitOp.alpha << 24) | ((blitOp.color & 0xF800) << 8) | ((blitOp.color & 0x07E0) << 5) | ((blitOp.color & 0x001F) << 3)) & (DMA2D_FGCOLR_BLUE | DMA2D_FGCOLR_GREEN | DMA2D_FGCOLR_RED));
/* Configure DMA2D Stream source2 address */
WRITE_REG(DMA2D->BGMAR, reinterpret_cast<uint32_t>(blitOp.pDst));
/* Configure DMA2D source address */
WRITE_REG(DMA2D->FGMAR, reinterpret_cast<uint32_t>(blitOp.pDst));
/* Enable the Peripheral and Enable the transfer complete interrupt */
WRITE_REG(DMA2D->CR, (DMA2D_IT_TC | DMA2D_CR_START | DMA2D_M2M_BLEND));
}
else
{
/* Write DMA2D FGPFCCR register */
WRITE_REG(DMA2D->FGPFCCR, dma2dOutputColorMode | (DMA2D_NO_MODIF_ALPHA << DMA2D_BGPFCCR_AM_Pos));
/* DMA2D FGOR register configuration -------------------------------------*/
WRITE_REG(DMA2D->FGOR, 0);
if (blitOp.dstFormat == Bitmap::RGB565)
{
// set color
WRITE_REG(DMA2D->OCOLR, blitOp.color);
}
else
{
// set color
WRITE_REG(DMA2D->OCOLR, (blitOp.alpha << 24) | (blitOp.alpha << 24) | ((blitOp.color & 0xF800) << 8) | ((blitOp.color & 0x07E0) << 5) | ((blitOp.color & 0x001F) << 3));
}
/* Enable the Peripheral and Enable the transfer complete interrupt */
WRITE_REG(DMA2D->CR, (DMA2D_IT_TC | DMA2D_CR_START | DMA2D_R2M));
}
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,164 @@
/**
******************************************************************************
* File Name : STM32DMA.hpp
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
#ifndef STM32F7DMA_HPP
#define STM32F7DMA_HPP
#include <touchgfx/Bitmap.hpp>
#include <touchgfx/hal/DMA.hpp>
/**
* @class STM32F7DMA
*
* @brief This class specializes DMA_Interface for the STM32F7 processors.
*
* @sa touchgfx::DMA_Interface
*/
class STM32F7DMA : public touchgfx::DMA_Interface
{
/**
* @typedef touchgfx::DMA_Interface Base
*
* @brief Defines an alias representing the base.
*
Defines an alias representing the base.
*/
typedef touchgfx::DMA_Interface Base;
public:
/**
* @fn STM32F7DMA::STM32F7DMA();
*
* @brief Default constructor.
*
* Default constructor.
*/
STM32F7DMA();
/**
* @fn STM32F7DMA::~STM32F7DMA();
*
* @brief Destructor.
*
* Destructor.
*/
virtual ~STM32F7DMA();
/**
* @fn DMAType touchgfx::STM32F7DMA::getDMAType()
*
* @brief Function for obtaining the DMA type of the concrete DMA_Interface implementation.
*
* Function for obtaining the DMA type of the concrete DMA_Interface implementation.
* As default, will return DMA_TYPE_CHROMART type value.
*
* @return a DMAType value of the concrete DMA_Interface implementation.
*/
virtual touchgfx::DMAType getDMAType(void)
{
return touchgfx::DMA_TYPE_CHROMART;
}
/**
* @fn touchgfx::BlitOperations STM32F7DMA::getBlitCaps();
*
* @brief Gets the blit capabilities.
*
* Gets the blit capabilities.
*
* This DMA supports a range of blit caps: BLIT_OP_COPY, BLIT_OP_COPY_ARGB8888,
* BLIT_OP_COPY_ARGB8888_WITH_ALPHA, BLIT_OP_COPY_A4, BLIT_OP_COPY_A8.
*
*
* @return Currently supported blitcaps.
*/
virtual touchgfx::BlitOperations getBlitCaps();
/**
* @fn void STM32F7DMA::initialize();
*
* @brief Perform hardware specific initialization.
*
* Perform hardware specific initialization.
*/
virtual void initialize();
/**
* @fn void STM32F7DMA::signalDMAInterrupt()
*
* @brief Raises a DMA interrupt signal.
*
* Raises a DMA interrupt signal.
*/
virtual void signalDMAInterrupt()
{
executeCompleted();
}
protected:
/**
* @fn virtual void STM32F7DMA::setupDataCopy(const touchgfx::BlitOp& blitOp);
*
* @brief Configures the DMA for copying data to the frame buffer.
*
* Configures the DMA for copying data to the frame buffer.
*
* @param blitOp Details on the copy to perform.
*/
virtual void setupDataCopy(const touchgfx::BlitOp& blitOp);
/**
* @fn virtual void STM32F7DMA::setupDataFill(const touchgfx::BlitOp& blitOp);
*
* @brief Configures the DMA for "filling" the frame-buffer with a single color.
*
* Configures the DMA for "filling" the frame-buffer with a single color.
*
* @param blitOp Details on the "fill" to perform.
*/
virtual void setupDataFill(const touchgfx::BlitOp& blitOp);
private:
touchgfx::LockFreeDMA_Queue dma_queue;
touchgfx::BlitOp queue_storage[96];
/**
* @fn void STM32F7DMA::getChromARTInputFormat()
*
* @brief Convert Bitmap format to ChromART Input format.
*
* @param format Bitmap format.
*
* @return ChromART Input format.
*/
inline uint32_t getChromARTInputFormat(touchgfx::Bitmap::BitmapFormat format);
/**
* @fn void STM32F7DMA::getChromARTOutputFormat()
*
* @brief Convert Bitmap format to ChromART Output format.
*
* @param format Bitmap format.
*
* @return ChromART Output format.
*/
inline uint32_t getChromARTOutputFormat(touchgfx::Bitmap::BitmapFormat format);
};
#endif // STM32F7DMA_HPP
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,68 @@
/**
******************************************************************************
* File Name : TouchGFXConfiguration.cpp
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
#include <texts/TypedTextDatabase.hpp>
#include <fonts/ApplicationFontProvider.hpp>
#include <gui/common/FrontendHeap.hpp>
#include <BitmapDatabase.hpp>
#include <platform/driver/lcd/LCD16bpp.hpp>
#include <STM32DMA.hpp>
#include <TouchGFXHAL.hpp>
#include <STM32TouchController.hpp>
#include <stm32f7xx_hal.h>
extern "C" void touchgfx_init();
extern "C" void touchgfx_taskEntry();
static STM32TouchController tc;
static STM32F7DMA dma;
static LCD16bpp display;
static ApplicationFontProvider fontProvider;
static Texts texts;
static TouchGFXHAL hal(dma, display, tc, 480, 272);
void touchgfx_init()
{
Bitmap::registerBitmapDatabase(BitmapDatabase::getInstance(), BitmapDatabase::getInstanceSize());
TypedText::registerTexts(&texts);
Texts::setLanguage(0);
FontManager::setFontProvider(&fontProvider);
FrontendHeap& heap = FrontendHeap::getInstance();
/*
* we need to obtain the reference above to initialize the frontend heap.
*/
(void)heap;
/*
* Initialize TouchGFX
*/
hal.initialize();
}
void touchgfx_taskEntry()
{
/*
* Main event loop. Will wait for VSYNC signal, and then process next frame. Call
* this function from your GUI task.
*
* Note This function never returns
*/
hal.taskEntry();
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,147 @@
/**
******************************************************************************
* File Name : TouchGFXGeneratedHAL.cpp
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
#include <TouchGFXGeneratedHAL.hpp>
#include <touchgfx/hal/OSWrappers.hpp>
#include <gui/common/FrontendHeap.hpp>
#include <touchgfx/hal/GPIO.hpp>
#include "stm32f7xx.h"
#include "stm32f7xx_hal_ltdc.h"
using namespace touchgfx;
namespace {
static uint16_t lcd_int_active_line;
static uint16_t lcd_int_porch_line;
}
void TouchGFXGeneratedHAL::initialize()
{
HAL::initialize();
registerEventListener(*(Application::getInstance()));
setFrameBufferStartAddresses((void*)0xC0000000, (void*)0xC003FC00, (void*)0);
}
void TouchGFXGeneratedHAL::configureInterrupts()
{
NVIC_SetPriority(DMA2D_IRQn, 9);
NVIC_SetPriority(LTDC_IRQn, 9);
}
void TouchGFXGeneratedHAL::enableInterrupts()
{
NVIC_EnableIRQ(DMA2D_IRQn);
NVIC_EnableIRQ(LTDC_IRQn);
}
void TouchGFXGeneratedHAL::disableInterrupts()
{
NVIC_DisableIRQ(DMA2D_IRQn);
NVIC_DisableIRQ(LTDC_IRQn);
}
void TouchGFXGeneratedHAL::enableLCDControllerInterrupt()
{
lcd_int_active_line = (LTDC->BPCR & 0x7FF) - 1;
lcd_int_porch_line = (LTDC->AWCR & 0x7FF) - 1;
/* Sets the Line Interrupt position */
LTDC->LIPCR = lcd_int_active_line;
/* Line Interrupt Enable */
LTDC->IER |= LTDC_IER_LIE;
}
uint16_t* TouchGFXGeneratedHAL::getTFTFrameBuffer() const
{
return (uint16_t*)LTDC_Layer1->CFBAR;
}
void TouchGFXGeneratedHAL::setTFTFrameBuffer(uint16_t* adr)
{
LTDC_Layer1->CFBAR = (uint32_t)adr;
/* Reload immediate */
LTDC->SRCR = (uint32_t)LTDC_SRCR_IMR;
}
void TouchGFXGeneratedHAL::flushFrameBuffer(const touchgfx::Rect& rect)
{
HAL::flushFrameBuffer(rect);
// If the framebuffer is placed in Write Through cached memory (e.g. SRAM) then we need
// to flush the Dcache prior to letting DMA2D accessing it. That's done
// using SCB_CleanInvalidateDCache().
if ((SCB->CCR & SCB_CCR_DC_Msk) != 0) // Check data cache is enabled
{
SCB_CleanInvalidateDCache();
}
}
bool TouchGFXGeneratedHAL::blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes)
{
return HAL::blockCopy(dest, src, numBytes);
}
void TouchGFXGeneratedHAL::InvalidateCache()
{
// If the framebuffer is placed in Write Through cached memory (e.g. SRAM) then we need
// to flush the Dcache prior to letting DMA2D accessing it. That's done
// using SCB_CleanInvalidateDCache().
if ((SCB->CCR & SCB_CCR_DC_Msk) != 0) // Check data cache is enabled
{
SCB_CleanInvalidateDCache();
}
}
void TouchGFXGeneratedHAL::FlushCache()
{
// If the framebuffer is placed in Write Through cached memory (e.g. SRAM) then we need
// to flush the Dcache prior to letting DMA2D accessing it. That's done
// using SCB_CleanInvalidateDCache().
if ((SCB->CCR & SCB_CCR_DC_Msk) != 0) // Check data cache is enabled
{
SCB_CleanInvalidateDCache();
}
}
extern "C"
{
void HAL_LTDC_LineEventCallback(LTDC_HandleTypeDef *hltdc)
{
if (LTDC->LIPCR == lcd_int_active_line)
{
//entering active area
HAL_LTDC_ProgramLineEvent(hltdc, lcd_int_porch_line);
HAL::getInstance()->vSync();
OSWrappers::signalVSync();
// Swap frame buffers immediately instead of waiting for the task to be scheduled in.
// Note: task will also swap when it wakes up, but that operation is guarded and will not have
// any effect if already swapped.
HAL::getInstance()->swapFrameBuffers();
GPIO::set(GPIO::VSYNC_FREQ);
}
else
{
//exiting active area
HAL_LTDC_ProgramLineEvent(hltdc, lcd_int_active_line);
GPIO::clear(GPIO::VSYNC_FREQ);
HAL::getInstance()->frontPorchEntered();
}
}
}
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -0,0 +1,168 @@
/**
******************************************************************************
* File Name : TouchGFXGeneratedHAL.hpp
******************************************************************************
* @attention
*
* <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
* www.st.com/SLA0044
*
******************************************************************************
*/
#ifndef TouchGFXGeneratedHAL_HPP
#define TouchGFXGeneratedHAL_HPP
#include <touchgfx/hal/HAL.hpp>
/**
* @class TouchGFXGeneratedHAL
*
* @brief HAL implementation for TouchGFXGenerated.
*
* @sa HAL
*/
class TouchGFXGeneratedHAL : public touchgfx::HAL
{
public:
/**
* @fn TouchGFXGeneratedHAL::TouchGFXGeneratedHAL(touchgfx::DMA_Interface& dma, touchgfx::LCD& display, touchgfx::TouchController& tc, uint16_t width, uint16_t height) : touchgfx::HAL(dma, display, tc, width, height)
*
* @brief Constructor.
*
* Constructor. Initializes members.
*
* @param [in,out] dma Reference to DMA interface.
* @param [in,out] display Reference to LCD interface.
* @param [in,out] tc Reference to Touch Controller driver.
* @param width Width of the display.
* @param height Height of the display.
*/
TouchGFXGeneratedHAL(touchgfx::DMA_Interface& dma, touchgfx::LCD& display, touchgfx::TouchController& tc, uint16_t width, uint16_t height) :
touchgfx::HAL(dma, display, tc, width, height)
{
}
/**
* @fn void TouchGFXGeneratedHAL::initialize();
*
* @brief This function is responsible for initializing the entire framework.
*
* This function is responsible for initializing the entire framework.
*/
void initialize();
/**
* @fn virtual void TouchGFXGeneratedHAL::configureInterrupts();
*
* @brief Sets the DMA and LCD interrupt priorities.
*
* Sets the DMA and LCD interrupt priorities.
*/
virtual void configureInterrupts();
/**
* @fn virtual void TouchGFXGeneratedHAL::enableInterrupts();
*
* @brief Enables the DMA and LCD interrupts.
*
* Enables the DMA and LCD interrupts.
*/
virtual void enableInterrupts();
/**
* @fn virtual void TouchGFXGeneratedHAL::disableInterrupts();
*
* @brief Disables the DMA and LCD interrupts.
*
* Disables the DMA and LCD interrupts.
*/
virtual void disableInterrupts();
/**
* @fn virtual void TouchGFXGeneratedHAL::enableLCDControllerInterrupt();
*
* @brief Configure the LCD controller to fire interrupts at VSYNC.
*
* Configure the LCD controller to fire interrupts at VSYNC. Called automatically
* once TouchGFX initialization has completed.
*/
virtual void enableLCDControllerInterrupt();
/**
* @fn virtual void TouchGFXGeneratedHAL::flushFrameBuffer();
*
* @brief This function is called whenever the framework has performed a complete draw.
*
* This specialization is only in place to keep compilers happy. Base impl. will call the
* Rect version.
* @see HAL::flushFrameBuffer
*/
virtual void flushFrameBuffer()
{
HAL::flushFrameBuffer();
}
/**
* @fn virtual void TouchGFXGeneratedHAL::flushFrameBuffer(const touchgfx::Rect& rect);
*
* @brief This function is called whenever the framework has performed a partial draw.
*
* This function is called whenever the framework has performed a partial draw.
* On the STM32F7, make sure to clean and invalidate the data cache. This is to
* ensure that LTDC sees correct data when transferring to the display.
*
* @param rect The area of the screen that has been drawn, expressed in absolute coordinates.
*
* @see flushFrameBuffer().
*/
virtual void flushFrameBuffer(const touchgfx::Rect& rect);
/**
*
* @fn virtual void TouchGFXGeneratedHAL::blockCopy();
*
* This function performs a platform-specific memcpy, if supported by the hardware.
*
* @param [out] dest Pointer to destination memory.
* @param [in] src Pointer to source memory.
* @param numBytes Number of bytes to copy.
*
* @return true if the copy succeeded, false if copy was not performed.
*/
virtual bool blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes);
protected:
/**
* @fn virtual uint16_t* TouchGFXGeneratedHAL::getTFTFrameBuffer() const;
*
* @brief Gets the frame buffer address used by the TFT controller.
*
* Gets the frame buffer address used by the TFT controller.
*
* @return The address of the frame buffer currently being displayed on the TFT.
*/
virtual uint16_t* getTFTFrameBuffer() const;
/**
* @fn virtual void TouchGFXGeneratedHAL::setTFTFrameBuffer(uint16_t* adr);
*
* @brief Sets the frame buffer address used by the TFT controller.
*
* Sets the frame buffer address used by the TFT controller.
*
* @param [in,out] adr New frame buffer address.
*/
virtual void setTFTFrameBuffer(uint16_t* adr);
virtual void InvalidateCache();
virtual void FlushCache();
};
#endif // TouchGFXGeneratedHAL_HPP
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/