30
+ − 1 ///////////////////////////////////////////////////////////////////////////////
+ − 2 /// -*- coding: UTF-8 -*-
+ − 3 ///
+ − 4 /// \file FontPack/./base_upperRegion.c
+ − 5 /// \brief The beginning of it all. main() is part of this.
36
+ − 6 /// \author heinrichs weikamp gmbh
30
+ − 7 /// \date 31-August-2015
+ − 8 ///
+ − 9 /// $Id$
+ − 10 ///////////////////////////////////////////////////////////////////////////////
+ − 11 /// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh
+ − 12 ///
+ − 13 /// This program is free software: you can redistribute it and/or modify
+ − 14 /// it under the terms of the GNU General Public License as published by
+ − 15 /// the Free Software Foundation, either version 3 of the License, or
+ − 16 /// (at your option) any later version.
+ − 17 ///
+ − 18 /// This program is distributed in the hope that it will be useful,
+ − 19 /// but WITHOUT ANY WARRANTY; without even the implied warranty of
+ − 20 /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ − 21 /// GNU General Public License for more details.
+ − 22 ///
+ − 23 /// You should have received a copy of the GNU General Public License
+ − 24 /// along with this program. If not, see <http://www.gnu.org/licenses/>.
+ − 25 //////////////////////////////////////////////////////////////////////////////
+ − 26 /**
+ − 27 @verbatim
+ − 28 ==============================================================================
+ − 29 ##### New characters in fonts #####
+ − 30 ==============================================================================
+ − 31 [..] Use font_tmore.c and add line to corresponding font like font_t54c
+ − 32 Don't forget to adjust the length of the font in the last line starting
+ − 33 const tFont .....
+ − 34
591
+ − 35 [..] last char before the big gap, as of 160217
30
+ − 36 image_data_FontT24_0x002b[364]
+ − 37 __attribute__((at( START_T24_FONT + (1647 * 28) ))), START_T24_FONT (0x08142F00 - MINUS_BANK)
+ − 38
591
+ − 39 -> free from 0x0814E490
+ − 40 then the logo image_data_ostc_fuer_Tauchcomputer_240px
+ − 41 approx 120 kBytes free space available!
30
+ − 42
+ − 43 @endverbatim
+ − 44 ******************************************************************************
+ − 45 */
+ − 46
+ − 47 /* Includes ------------------------------------------------------------------*/
+ − 48
+ − 49 // From Common/Inc:
+ − 50 #include "FirmwareData.h"
+ − 51
+ − 52
123
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 53 #ifdef DEBUG
30
+ − 54 // From AC6 support:
+ − 55 #include <stdio.h>
76
+ − 56 #include <stdint.h>
123
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 57 #endif
30
+ − 58
+ − 59 //////////////////////////////////////////////////////////////////////////////
+ − 60
+ − 61 const SFirmwareData font_FirmwareData __attribute__(( section(".font_firmware_data") )) =
+ − 62 {
76
+ − 63 .versionFirst = 1,
+ − 64 .versionSecond = 0,
30
+ − 65 .versionThird = 0,
+ − 66 .versionBeta = 0,
+ − 67
+ − 68 /* 4 bytes, including trailing 0 */
76
+ − 69 .signature = "im",
30
+ − 70
76
+ − 71 .release_year = 18,
+ − 72 .release_month = 10,
+ − 73 .release_day = 04,
30
+ − 74 .release_sub = 0,
+ − 75
+ − 76 /* max 48, including trailing 0 */
76
+ − 77 .release_info ="FontPack extension",
30
+ − 78
+ − 79 /* for safety reasons and coming functions */
+ − 80 .magic[0] = FIRMWARE_MAGIC_FIRST,
+ − 81 .magic[1] = FIRMWARE_MAGIC_SECOND,
+ − 82 .magic[2] = FIRMWARE_MAGIC_FONT, /* the magic byte for fonts*/
+ − 83 .magic[3] = FIRMWARE_MAGIC_END
+ − 84 };
+ − 85
+ − 86 //////////////////////////////////////////////////////////////////////////////
+ − 87
123
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 88 #ifdef BUILD_LIBRARY
30
+ − 89 /* Fonts fixed in upper region */
+ − 90 #include "Fonts/font_awe48.h"
+ − 91 #include "Fonts/font_T24.h"
+ − 92 #include "Fonts/font_T42.h"
+ − 93 #include "Fonts/font_T48_plus.h"
+ − 94 #include "Fonts/font_T54.h"
+ − 95 #include "Fonts/font_T84.h"
+ − 96 #include "Fonts/font_T105.h"
+ − 97 #include "Fonts/font_T144_plus.h"
+ − 98
123
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 99 #include "Fonts/image_ostc.h"
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 100 #else
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 101 #include "gfx_fonts.h"
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 102 #endif
76
+ − 103
30
+ − 104 /* Images fixed in upper region */
+ − 105 #include "Fonts/image_battery.h"
+ − 106 #include "Fonts/image_heinrichs_weikamp.h"
123
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 107
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 108 /////////////////////////////////////////////////////////////////////////////
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 109
30
+ − 110
123
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 111 #ifdef DEBUG
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 112
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 113 #define ASSERT(e) \
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 114 do { if( ! (e) ) { ++errors; printf("FAIL at %3d: %s \n", __LINE__, #e); errorflag = 1;} } while(0)
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 115
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 116 #define ASSERT_RANGE(e, min, max) ASSERT(min <= e); ASSERT( e <= max)
30
+ − 117
699
+ − 118 #if DEBUG_STLINK_V2
76
+ − 119 extern void initialise_monitor_handles(void);
699
+ − 120 #endif
76
+ − 121
30
+ − 122 static int errors = 0;
76
+ − 123 static uint8_t errorflag = 0;
+ − 124
30
+ − 125 int main(void)
+ − 126 {
123
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 127 #if DEBUG_STLINK_V2
76
+ − 128 initialise_monitor_handles();
+ − 129 #endif
30
+ − 130 //---- Check the linker puts the directory at the requested address ------
76
+ − 131 ASSERT( & Awe48 == (tFont*)0x81DFE00 );
+ − 132 ASSERT( & FontT24 == (tFont*)0x81DFE0c );
+ − 133 ASSERT( & FontT42 == (tFont*)0x81DFE18 );
+ − 134 ASSERT( & FontT48 == (tFont*)0x81DFE24 );
+ − 135 ASSERT( & FontT54 == (tFont*)0x81DFE30 );
+ − 136 ASSERT( & FontT84 == (tFont*)0x81DFE3c );
+ − 137 ASSERT( & FontT105 == (tFont*)0x81DFE48 );
+ − 138 ASSERT( & FontT144 == (tFont*)0x81DFE54 );
+ − 139
30
+ − 140 //---- Check the linker puts the font data in the requested section ------
+ − 141 extern tChar __upper_font_data;
+ − 142 extern tChar __upper_font_data_end;
+ − 143 ASSERT( &__upper_font_data == (tChar*)0x08132040 );
+ − 144 ASSERT_RANGE( (int)&__upper_font_data_end, 0x08132040, 0x081E0000);
+ − 145
+ − 146 //---- Walk through the directory data -----------------------------------
+ − 147 extern const tFont __font_directory;
+ − 148 extern const tFont __font_directory_end;
76
+ − 149
+ − 150 ASSERT_RANGE(&ImgOSTC, (tImage*)&__upper_font_data, (tImage*)&__upper_font_data_end);
+ − 151
30
+ − 152 for(const tFont* font = & __font_directory; font < &__font_directory_end; ++font)
+ − 153 {
699
+ − 154 printf("Font: %x\n",(unsigned int)font);
30
+ − 155 // Check END-OF-DIRECTORY magic marker
+ − 156 if( font->length == (uint32_t)-1 )
+ − 157 {
+ − 158 ASSERT( font == &FontT144 + 1 );
+ − 159 break;
+ − 160 }
+ − 161
+ − 162 // Check font descriptors are inside a safe range.
76
+ − 163 ASSERT_RANGE( font->length, 10, 150 ); /* old 103: some fonts meanwhile contain more charactes */
+ − 164 ASSERT_RANGE( font->spacesize, 0, 28 ); /* old 18 : Awe40 has some size 28 characters */
30
+ − 165 ASSERT_RANGE( font->spacesize2Monospaced, 13, 72 );
+ − 166 ASSERT_RANGE( font->height, 28, 108 );
+ − 167
+ − 168 //---- Walk through each char ----------------------------------------
+ − 169 for(int i = 0; i < font->length; ++i)
+ − 170 {
+ − 171 const tChar* c = &font->chars[i];
+ − 172
+ − 173 // Check char data is indeed stored in the actual data section
+ − 174 ASSERT_RANGE( c, &__upper_font_data, &__upper_font_data_end);
+ − 175
+ − 176 // Check char data sanity
+ − 177 ASSERT_RANGE( c->code, 0x0000, 0xF143);
+ − 178
+ − 179 // Check image sanity
+ − 180 const tImage* image = c->image;
+ − 181 ASSERT_RANGE(image, (tImage*)&__upper_font_data, (tImage*)&__upper_font_data_end);
76
+ − 182 #if 0 /* common failure: root cause not clear */
30
+ − 183 ASSERT_RANGE(image->width, font->spacesize, font->spacesize2Monospaced);
76
+ − 184 #endif
30
+ − 185 ASSERT(image->height == font->height);
76
+ − 186 if(errorflag)
+ − 187 {
699
+ − 188 printf("image %x: h=%d fonth=%d\n",(unsigned int)image,image->height,font->height);
76
+ − 189 errorflag = 0;
+ − 190 }
30
+ − 191 // Uncompress image bytes
+ − 192 const uint8_t* byte = image->data;
+ − 193 ASSERT_RANGE(byte, (uint8_t*)&__upper_font_data, (uint8_t*)&__upper_font_data_end);
+ − 194
+ − 195 for(int w=0; w <image->width; ++w)
+ − 196 {
+ − 197 // Compression: special 0x01 byte at start of column means just skip it.
+ − 198 if( *byte++ == 0x01 )
+ − 199 continue;
+ − 200
+ − 201 int zeros = (byte[-1] == 0x00) ? 1 : 0;
+ − 202 for(int h = 1; h < image->height; ++h)
+ − 203 {
+ − 204 if( *byte == 0x00 )
+ − 205 ++zeros;
76
+ − 206 #if 0 /* this rule is violated very often but does not seems to have an impact */
30
+ − 207 // Other bytes cannot have the 0x01 value...
+ − 208 ASSERT( *byte++ != 0x01 );
76
+ − 209 #endif
30
+ − 210 }
76
+ − 211 #if 0 /* just an information, not an error => activate if interested */
30
+ − 212 if( zeros == image->height )
76
+ − 213 printf("Font[%d] char[%d]: could skip column %d \n",
30
+ − 214 &__font_directory - font, i, w);
76
+ − 215 #endif
30
+ − 216 }
+ − 217
76
+ − 218 #if 0 /* byte usually pints to the next char ==> not sure what the check is about */
30
+ − 219 // Check the byte stream do not collide with the next char,
+ − 220 // or with the first tImage struct of the font.
+ − 221 if( (i+1) < font->length )
+ − 222 ASSERT( byte < font->chars[i+1].image->data );
+ − 223 else
+ − 224 ASSERT( byte < (uint8_t*)font->chars[0].image );
+ − 225
+ − 226 // TODO: check image bytes are contiguous between chars.
76
+ − 227 #endif
30
+ − 228 }
+ − 229 }
+ − 230
+ − 231 if( errors )
+ − 232 {
76
+ − 233 printf("Font Check: %d errors.\n", errors);
30
+ − 234 return -1;
+ − 235 }
+ − 236
76
+ − 237 printf("Font Check: no errors.\n");
30
+ − 238 return 0;
+ − 239 }
123
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 240 /*#endif*/
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 241 #else
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 242 #define ASSERT(e) \
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 243 do { if( ! (e) ) { ++errors; errorflag = 1;} } while(0)
30
+ − 244
123
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 245 #define ASSERT_RANGE(e, min, max) ASSERT(min <= e); ASSERT( e <= max)
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 246
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 247 uint16_t errors = 1;
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 248 static uint8_t errorflag = 0;
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 249 uint16_t CheckFontPosition()
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 250 {
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 251 uint16_t retvalue;
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 252 ASSERT( & Awe48 == (tFont*)0x81DFE00 );
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 253 ASSERT( & FontT24 == (tFont*)0x81DFE0c );
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 254 ASSERT( & FontT42 == (tFont*)0x81DFE18 );
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 255 ASSERT( & FontT48 == (tFont*)0x81DFE24 );
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 256 ASSERT( & FontT54 == (tFont*)0x81DFE30 );
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 257 ASSERT( & FontT84 == (tFont*)0x81DFE3c );
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 258 ASSERT( & FontT105 == (tFont*)0x81DFE48 );
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 259 ASSERT( & FontT144 == (tFont*)0x81DFE54 );
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 260 retvalue = errors;
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 261 return retvalue;
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 262 }
a984d87a1ec0
Added option to build FontPack as static libary which is linked to the Firmware project (to allow separate build settings)
Ideenmodellierer
diff
changeset
+ − 263 #endif
30
+ − 264 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/