Mercurial > public > ostc4
diff FontPack/base_upperRegion.c @ 30:ea1003f63e44
ADD GPL License ...
author | jDG |
---|---|
date | Tue, 23 Jan 2018 17:29:40 +0100 |
parents | 97eafbcb81a9 |
children | 7801c5d8a562 |
line wrap: on
line diff
--- a/FontPack/base_upperRegion.c Tue Jan 23 13:36:25 2018 +0100 +++ b/FontPack/base_upperRegion.c Tue Jan 23 17:29:40 2018 +0100 @@ -1,200 +1,210 @@ -/** - ****************************************************************************** - * @copyright heinrichs weikamp - * @file base_upperRegion.c - * @author heinrichs/weikamp, Christian Weikamp - * @date 31-August-2015 - * @version V0.0.3 - * @since 03-Dez-2016 - * @brief The beginning of it all. main() is part of this. - * @bug - * @warning - @verbatim - ============================================================================== - ##### New characters in fonts ##### - ============================================================================== - [..] Use font_tmore.c and add line to corresponding font like font_t54c - Don't forget to adjust the length of the font in the last line starting - const tFont ..... - - [..] last char vor der gro�en L�cke, Stand 160217 - image_data_FontT24_0x002b[364] - __attribute__((at( START_T24_FONT + (1647 * 28) ))), START_T24_FONT (0x08142F00 - MINUS_BANK) - - -> frei ab 0x0814E490 - geht dann weiter mit image_data_ostc_fuer_Tauchcomputer_240px - sind ca. 120 kByte frei! - - @endverbatim - ****************************************************************************** - * @attention - * - * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> - * - ****************************************************************************** - */ - -/* Includes ------------------------------------------------------------------*/ - -// From Common/Inc: -#include "FirmwareData.h" - -// From Discovery/Inc -#include "gfx_fonts.h" - -// From AC6 support: -#include <stdio.h> - -////////////////////////////////////////////////////////////////////////////// - -const SFirmwareData font_FirmwareData __attribute__(( section(".font_firmware_data") )) = -{ - .versionFirst = 0, - .versionSecond = 9, - .versionThird = 0, - .versionBeta = 0, - - /* 4 bytes, including trailing 0 */ - .signature = "cw", - - .release_year = 16, - .release_month = 1, - .release_day = 13, - .release_sub = 0, - - /* max 48, including trailing 0 */ - .release_info ="", - - /* for safety reasons and coming functions */ - .magic[0] = FIRMWARE_MAGIC_FIRST, - .magic[1] = FIRMWARE_MAGIC_SECOND, - .magic[2] = FIRMWARE_MAGIC_FONT, /* the magic byte for fonts*/ - .magic[3] = FIRMWARE_MAGIC_END -}; - -////////////////////////////////////////////////////////////////////////////// - -/* Fonts fixed in upper region */ -#include "Fonts/font_awe48.h" -#include "Fonts/font_T24.h" -#include "Fonts/font_T42.h" -#include "Fonts/font_T48_plus.h" -#include "Fonts/font_T54.h" -#include "Fonts/font_T84.h" -#include "Fonts/font_T105.h" -#include "Fonts/font_T144_plus.h" - -/* Images fixed in upper region */ -#include "Fonts/image_battery.h" -#include "Fonts/image_heinrichs_weikamp.h" -#include "Fonts/image_ostc.h" - -////////////////////////////////////////////////////////////////////////////// - -static int errors = 0; -#define ASSERT(e) \ - do { if( ! (e) ) {++errors; printf("FAIL at %3d: %s", __LINE__, #e);}} while(0) - -#define ASSERT_RANGE(e, min, max) \ - ASSERT(min <= e); ASSERT( e <= max) - -int main(void) -{ - //---- Check the linker puts the directory at the requested address ------ - ASSERT( & Awe48 == (tFont*)0x8100000 ); - ASSERT( & FontT24 == (tFont*)0x810000c ); - ASSERT( & FontT42 == (tFont*)0x8100018 ); - ASSERT( & FontT48 == (tFont*)0x8100024 ); - ASSERT( & FontT54 == (tFont*)0x8100030 ); - ASSERT( & FontT84 == (tFont*)0x810003c ); - ASSERT( & FontT105 == (tFont*)0x8100048 ); - ASSERT( & FontT144 == (tFont*)0x8100052 ); - - //---- Check the linker puts the font data in the requested section ------ - extern tChar __upper_font_data; - extern tChar __upper_font_data_end; - ASSERT( &__upper_font_data == (tChar*)0x08132040 ); - ASSERT_RANGE( (int)&__upper_font_data_end, 0x08132040, 0x081E0000); - - //---- Walk through the directory data ----------------------------------- - extern const tFont __font_directory; - extern const tFont __font_directory_end; - for(const tFont* font = & __font_directory; font < &__font_directory_end; ++font) - { - // Check END-OF-DIRECTORY magic marker - if( font->length == (uint32_t)-1 ) - { - ASSERT( font == &FontT144 + 1 ); - break; - } - - // Check font descriptors are inside a safe range. - ASSERT_RANGE( font->length, 10, 103 ); - ASSERT_RANGE( font->spacesize, 0, 18 ); - ASSERT_RANGE( font->spacesize2Monospaced, 13, 72 ); - ASSERT_RANGE( font->height, 28, 108 ); - - //---- Walk through each char ---------------------------------------- - for(int i = 0; i < font->length; ++i) - { - const tChar* c = &font->chars[i]; - - // Check char data is indeed stored in the actual data section - ASSERT_RANGE( c, &__upper_font_data, &__upper_font_data_end); - - // Check char data sanity - ASSERT_RANGE( c->code, 0x0000, 0xF143); - - // Check image sanity - const tImage* image = c->image; - ASSERT_RANGE(image, (tImage*)&__upper_font_data, (tImage*)&__upper_font_data_end); - ASSERT_RANGE(image->width, font->spacesize, font->spacesize2Monospaced); - ASSERT(image->height == font->height); - - // Uncompress image bytes - const uint8_t* byte = image->data; - ASSERT_RANGE(byte, (uint8_t*)&__upper_font_data, (uint8_t*)&__upper_font_data_end); - - for(int w=0; w <image->width; ++w) - { - // Compression: special 0x01 byte at start of column means just skip it. - if( *byte++ == 0x01 ) - continue; - - int zeros = (byte[-1] == 0x00) ? 1 : 0; - for(int h = 1; h < image->height; ++h) - { - if( *byte == 0x00 ) - ++zeros; - - // Other bytes cannot have the 0x01 value... - ASSERT( *byte++ != 0x01 ); - } - - if( zeros == image->height ) - printf("Font[%d] char[%d]: could skip column %d", - &__font_directory - font, i, w); - } - - // Check the byte stream do not collide with the next char, - // or with the first tImage struct of the font. - if( (i+1) < font->length ) - ASSERT( byte < font->chars[i+1].image->data ); - else - ASSERT( byte < (uint8_t*)font->chars[0].image ); - - // TODO: check image bytes are contiguous between chars. - } - } - - if( errors ) - { - printf("Font Check: %d errors.", errors); - return -1; - } - - printf("Font Check: no errors."); - return 0; -} - -/************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/ +/////////////////////////////////////////////////////////////////////////////// +/// -*- coding: UTF-8 -*- +/// +/// \file FontPack/./base_upperRegion.c +/// \brief The beginning of it all. main() is part of this. +/// \author heinrichs/weikamp, Christian Weikamp +/// \date 31-August-2015 +/// +/// $Id$ +/////////////////////////////////////////////////////////////////////////////// +/// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh +/// +/// This program is free software: you can redistribute it and/or modify +/// it under the terms of the GNU General Public License as published by +/// the Free Software Foundation, either version 3 of the License, or +/// (at your option) any later version. +/// +/// This program is distributed in the hope that it will be useful, +/// but WITHOUT ANY WARRANTY; without even the implied warranty of +/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +/// GNU General Public License for more details. +/// +/// You should have received a copy of the GNU General Public License +/// along with this program. If not, see <http://www.gnu.org/licenses/>. +////////////////////////////////////////////////////////////////////////////// +/** + @verbatim + ============================================================================== + ##### New characters in fonts ##### + ============================================================================== + [..] Use font_tmore.c and add line to corresponding font like font_t54c + Don't forget to adjust the length of the font in the last line starting + const tFont ..... + + [..] last char vor der gro�en L�cke, Stand 160217 + image_data_FontT24_0x002b[364] + __attribute__((at( START_T24_FONT + (1647 * 28) ))), START_T24_FONT (0x08142F00 - MINUS_BANK) + + -> frei ab 0x0814E490 + geht dann weiter mit image_data_ostc_fuer_Tauchcomputer_240px + sind ca. 120 kByte frei! + + @endverbatim + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ + +// From Common/Inc: +#include "FirmwareData.h" + +// From Discovery/Inc +#include "gfx_fonts.h" + +// From AC6 support: +#include <stdio.h> + +////////////////////////////////////////////////////////////////////////////// + +const SFirmwareData font_FirmwareData __attribute__(( section(".font_firmware_data") )) = +{ + .versionFirst = 0, + .versionSecond = 9, + .versionThird = 0, + .versionBeta = 0, + + /* 4 bytes, including trailing 0 */ + .signature = "cw", + + .release_year = 16, + .release_month = 1, + .release_day = 13, + .release_sub = 0, + + /* max 48, including trailing 0 */ + .release_info ="", + + /* for safety reasons and coming functions */ + .magic[0] = FIRMWARE_MAGIC_FIRST, + .magic[1] = FIRMWARE_MAGIC_SECOND, + .magic[2] = FIRMWARE_MAGIC_FONT, /* the magic byte for fonts*/ + .magic[3] = FIRMWARE_MAGIC_END +}; + +////////////////////////////////////////////////////////////////////////////// + +/* Fonts fixed in upper region */ +#include "Fonts/font_awe48.h" +#include "Fonts/font_T24.h" +#include "Fonts/font_T42.h" +#include "Fonts/font_T48_plus.h" +#include "Fonts/font_T54.h" +#include "Fonts/font_T84.h" +#include "Fonts/font_T105.h" +#include "Fonts/font_T144_plus.h" + +/* Images fixed in upper region */ +#include "Fonts/image_battery.h" +#include "Fonts/image_heinrichs_weikamp.h" +#include "Fonts/image_ostc.h" + +////////////////////////////////////////////////////////////////////////////// + +static int errors = 0; +#define ASSERT(e) \ + do { if( ! (e) ) {++errors; printf("FAIL at %3d: %s", __LINE__, #e);}} while(0) + +#define ASSERT_RANGE(e, min, max) \ + ASSERT(min <= e); ASSERT( e <= max) + +int main(void) +{ + //---- Check the linker puts the directory at the requested address ------ + ASSERT( & Awe48 == (tFont*)0x8100000 ); + ASSERT( & FontT24 == (tFont*)0x810000c ); + ASSERT( & FontT42 == (tFont*)0x8100018 ); + ASSERT( & FontT48 == (tFont*)0x8100024 ); + ASSERT( & FontT54 == (tFont*)0x8100030 ); + ASSERT( & FontT84 == (tFont*)0x810003c ); + ASSERT( & FontT105 == (tFont*)0x8100048 ); + ASSERT( & FontT144 == (tFont*)0x8100052 ); + + //---- Check the linker puts the font data in the requested section ------ + extern tChar __upper_font_data; + extern tChar __upper_font_data_end; + ASSERT( &__upper_font_data == (tChar*)0x08132040 ); + ASSERT_RANGE( (int)&__upper_font_data_end, 0x08132040, 0x081E0000); + + //---- Walk through the directory data ----------------------------------- + extern const tFont __font_directory; + extern const tFont __font_directory_end; + for(const tFont* font = & __font_directory; font < &__font_directory_end; ++font) + { + // Check END-OF-DIRECTORY magic marker + if( font->length == (uint32_t)-1 ) + { + ASSERT( font == &FontT144 + 1 ); + break; + } + + // Check font descriptors are inside a safe range. + ASSERT_RANGE( font->length, 10, 103 ); + ASSERT_RANGE( font->spacesize, 0, 18 ); + ASSERT_RANGE( font->spacesize2Monospaced, 13, 72 ); + ASSERT_RANGE( font->height, 28, 108 ); + + //---- Walk through each char ---------------------------------------- + for(int i = 0; i < font->length; ++i) + { + const tChar* c = &font->chars[i]; + + // Check char data is indeed stored in the actual data section + ASSERT_RANGE( c, &__upper_font_data, &__upper_font_data_end); + + // Check char data sanity + ASSERT_RANGE( c->code, 0x0000, 0xF143); + + // Check image sanity + const tImage* image = c->image; + ASSERT_RANGE(image, (tImage*)&__upper_font_data, (tImage*)&__upper_font_data_end); + ASSERT_RANGE(image->width, font->spacesize, font->spacesize2Monospaced); + ASSERT(image->height == font->height); + + // Uncompress image bytes + const uint8_t* byte = image->data; + ASSERT_RANGE(byte, (uint8_t*)&__upper_font_data, (uint8_t*)&__upper_font_data_end); + + for(int w=0; w <image->width; ++w) + { + // Compression: special 0x01 byte at start of column means just skip it. + if( *byte++ == 0x01 ) + continue; + + int zeros = (byte[-1] == 0x00) ? 1 : 0; + for(int h = 1; h < image->height; ++h) + { + if( *byte == 0x00 ) + ++zeros; + + // Other bytes cannot have the 0x01 value... + ASSERT( *byte++ != 0x01 ); + } + + if( zeros == image->height ) + printf("Font[%d] char[%d]: could skip column %d", + &__font_directory - font, i, w); + } + + // Check the byte stream do not collide with the next char, + // or with the first tImage struct of the font. + if( (i+1) < font->length ) + ASSERT( byte < font->chars[i+1].image->data ); + else + ASSERT( byte < (uint8_t*)font->chars[0].image ); + + // TODO: check image bytes are contiguous between chars. + } + } + + if( errors ) + { + printf("Font Check: %d errors.", errors); + return -1; + } + + printf("Font Check: no errors."); + return 0; +} + +/************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/