Mercurial > public > ostc4
annotate FontPack/base_upperRegion.c @ 106:d8dc8327f340 FlipDisplay
Starting 'FlipDisplay' branch
- No update with regard to OSTC functionality itself
- Added option to flip display
- Some minor cleanups and code improvments
author | Ideenmodellierer |
---|---|
date | Tue, 01 Jan 2019 20:57:41 +0100 |
parents | 51e2734895a3 |
children | a984d87a1ec0 |
rev | line source |
---|---|
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 | |
35 [..] last char vor der gro�en L�cke, Stand 160217 | |
36 image_data_FontT24_0x002b[364] | |
37 __attribute__((at( START_T24_FONT + (1647 * 28) ))), START_T24_FONT (0x08142F00 - MINUS_BANK) | |
38 | |
39 -> frei ab 0x0814E490 | |
40 geht dann weiter mit image_data_ostc_fuer_Tauchcomputer_240px | |
41 sind ca. 120 kByte frei! | |
42 | |
43 @endverbatim | |
44 ****************************************************************************** | |
45 */ | |
46 | |
47 /* Includes ------------------------------------------------------------------*/ | |
48 | |
49 // From Common/Inc: | |
50 #include "FirmwareData.h" | |
51 | |
52 // From Discovery/Inc | |
53 #include "gfx_fonts.h" | |
54 | |
55 // From AC6 support: | |
56 #include <stdio.h> | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
57 #include <stdint.h> |
30 | 58 |
59 ////////////////////////////////////////////////////////////////////////////// | |
60 | |
61 const SFirmwareData font_FirmwareData __attribute__(( section(".font_firmware_data") )) = | |
62 { | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
63 .versionFirst = 1, |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
64 .versionSecond = 0, |
30 | 65 .versionThird = 0, |
66 .versionBeta = 0, | |
67 | |
68 /* 4 bytes, including trailing 0 */ | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
69 .signature = "im", |
30 | 70 |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
71 .release_year = 18, |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
72 .release_month = 10, |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
73 .release_day = 04, |
30 | 74 .release_sub = 0, |
75 | |
76 /* max 48, including trailing 0 */ | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
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 | |
88 /* Fonts fixed in upper region */ | |
89 #include "Fonts/font_awe48.h" | |
90 #include "Fonts/font_T24.h" | |
91 #include "Fonts/font_T42.h" | |
92 #include "Fonts/font_T48_plus.h" | |
93 #include "Fonts/font_T54.h" | |
94 #include "Fonts/font_T84.h" | |
95 #include "Fonts/font_T105.h" | |
96 #include "Fonts/font_T144_plus.h" | |
97 | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
98 |
30 | 99 /* Images fixed in upper region */ |
100 #include "Fonts/image_battery.h" | |
101 #include "Fonts/image_heinrichs_weikamp.h" | |
102 #include "Fonts/image_ostc.h" | |
103 | |
104 ////////////////////////////////////////////////////////////////////////////// | |
105 | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
106 extern void initialise_monitor_handles(void); |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
107 |
30 | 108 static int errors = 0; |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
109 static uint8_t errorflag = 0; |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
110 |
30 | 111 #define ASSERT(e) \ |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
112 do { if( ! (e) ) { ++errors; printf("FAIL at %3d: %s \n", __LINE__, #e); errorflag = 1;} } while(0) |
30 | 113 |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
114 #define ASSERT_RANGE(e, min, max) ASSERT(min <= e); ASSERT( e <= max) |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
115 |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
116 |
30 | 117 |
118 int main(void) | |
119 { | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
120 #ifdef DEBUG_STLINK_V2 |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
121 initialise_monitor_handles(); |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
122 #endif |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
123 |
30 | 124 //---- Check the linker puts the directory at the requested address ------ |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
125 ASSERT( & Awe48 == (tFont*)0x81DFE00 ); |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
126 ASSERT( & FontT24 == (tFont*)0x81DFE0c ); |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
127 ASSERT( & FontT42 == (tFont*)0x81DFE18 ); |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
128 ASSERT( & FontT48 == (tFont*)0x81DFE24 ); |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
129 ASSERT( & FontT54 == (tFont*)0x81DFE30 ); |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
130 ASSERT( & FontT84 == (tFont*)0x81DFE3c ); |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
131 ASSERT( & FontT105 == (tFont*)0x81DFE48 ); |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
132 ASSERT( & FontT144 == (tFont*)0x81DFE54 ); |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
133 |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
134 |
30 | 135 |
136 //---- Check the linker puts the font data in the requested section ------ | |
137 extern tChar __upper_font_data; | |
138 extern tChar __upper_font_data_end; | |
139 ASSERT( &__upper_font_data == (tChar*)0x08132040 ); | |
140 ASSERT_RANGE( (int)&__upper_font_data_end, 0x08132040, 0x081E0000); | |
141 | |
142 //---- Walk through the directory data ----------------------------------- | |
143 extern const tFont __font_directory; | |
144 extern const tFont __font_directory_end; | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
145 |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
146 ASSERT_RANGE(&ImgOSTC, (tImage*)&__upper_font_data, (tImage*)&__upper_font_data_end); |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
147 |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
148 |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
149 |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
150 |
30 | 151 for(const tFont* font = & __font_directory; font < &__font_directory_end; ++font) |
152 { | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
153 printf("Font: %x\n",font); |
30 | 154 // Check END-OF-DIRECTORY magic marker |
155 if( font->length == (uint32_t)-1 ) | |
156 { | |
157 ASSERT( font == &FontT144 + 1 ); | |
158 break; | |
159 } | |
160 | |
161 // Check font descriptors are inside a safe range. | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
162 ASSERT_RANGE( font->length, 10, 150 ); /* old 103: some fonts meanwhile contain more charactes */ |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
163 ASSERT_RANGE( font->spacesize, 0, 28 ); /* old 18 : Awe40 has some size 28 characters */ |
30 | 164 ASSERT_RANGE( font->spacesize2Monospaced, 13, 72 ); |
165 ASSERT_RANGE( font->height, 28, 108 ); | |
166 | |
167 //---- Walk through each char ---------------------------------------- | |
168 for(int i = 0; i < font->length; ++i) | |
169 { | |
170 const tChar* c = &font->chars[i]; | |
171 | |
172 // Check char data is indeed stored in the actual data section | |
173 ASSERT_RANGE( c, &__upper_font_data, &__upper_font_data_end); | |
174 | |
175 // Check char data sanity | |
176 ASSERT_RANGE( c->code, 0x0000, 0xF143); | |
177 | |
178 // Check image sanity | |
179 const tImage* image = c->image; | |
180 ASSERT_RANGE(image, (tImage*)&__upper_font_data, (tImage*)&__upper_font_data_end); | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
181 #if 0 /* common failure: root cause not clear */ |
30 | 182 ASSERT_RANGE(image->width, font->spacesize, font->spacesize2Monospaced); |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
183 #endif |
30 | 184 ASSERT(image->height == font->height); |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
185 if(errorflag) |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
186 { |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
187 printf("image %x: h=%d fonth=%d\n",image,image->height,font->height); |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
188 errorflag = 0; |
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
189 } |
30 | 190 // Uncompress image bytes |
191 const uint8_t* byte = image->data; | |
192 ASSERT_RANGE(byte, (uint8_t*)&__upper_font_data, (uint8_t*)&__upper_font_data_end); | |
193 | |
194 for(int w=0; w <image->width; ++w) | |
195 { | |
196 // Compression: special 0x01 byte at start of column means just skip it. | |
197 if( *byte++ == 0x01 ) | |
198 continue; | |
199 | |
200 int zeros = (byte[-1] == 0x00) ? 1 : 0; | |
201 for(int h = 1; h < image->height; ++h) | |
202 { | |
203 if( *byte == 0x00 ) | |
204 ++zeros; | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
205 #if 0 /* this rule is violated very often but does not seems to have an impact */ |
30 | 206 // Other bytes cannot have the 0x01 value... |
207 ASSERT( *byte++ != 0x01 ); | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
208 #endif |
30 | 209 } |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
210 #if 0 /* just an information, not an error => activate if interested */ |
30 | 211 if( zeros == image->height ) |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
212 printf("Font[%d] char[%d]: could skip column %d \n", |
30 | 213 &__font_directory - font, i, w); |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
214 #endif |
30 | 215 } |
216 | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
217 #if 0 /* byte usually pints to the next char ==> not sure what the check is about */ |
30 | 218 // Check the byte stream do not collide with the next char, |
219 // or with the first tImage struct of the font. | |
220 if( (i+1) < font->length ) | |
221 ASSERT( byte < font->chars[i+1].image->data ); | |
222 else | |
223 ASSERT( byte < (uint8_t*)font->chars[0].image ); | |
224 | |
225 // TODO: check image bytes are contiguous between chars. | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
226 #endif |
30 | 227 } |
228 } | |
229 | |
230 if( errors ) | |
231 { | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
232 printf("Font Check: %d errors.\n", errors); |
30 | 233 return -1; |
234 } | |
235 | |
76
51e2734895a3
Update Fontpack code to support font moved to upper memory
Ideenmodellierer
parents:
36
diff
changeset
|
236 printf("Font Check: no errors.\n"); |
30 | 237 return 0; |
238 } | |
239 | |
240 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/ |