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****/
|