Library to control a Graphics TFT connected to 4-wire SPI - revised for the Raio RA8875 Display Controller.

Dependents:   FRDM_RA8875_mPaint RA8875_Demo RA8875_KeyPadDemo SignalGenerator ... more

Fork of SPI_TFT by Peter Drescher

See Components - RA8875 Based Display

Enhanced touch-screen support - where it previous supported both the Resistive Touch and Capacitive Touch based on the FT5206 Touch Controller, now it also has support for the GSL1680 Touch Controller.

Offline Help Manual (Windows chm)

/media/uploads/WiredHome/ra8875.zip.bin (download, rename to .zip and unzip)

Committer:
WiredHome
Date:
Mon May 25 16:08:50 2020 +0000
Revision:
206:83edda283d90
Parent:
198:9b6851107426
Pick up a change in the touch ISR to pick up the final release.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 159:dee976689d08 1 // This file contains a perl script used to modify the mikroe generated fonts.
WiredHome 159:dee976689d08 2 //
WiredHome 167:8aa3fb2a5a31 3 // Do not "include" this file into your project - just copy everything from
WiredHome 160:43f3d90fc491 4 // the #if to the #endif and put it into a .pl file on your local PC to
WiredHome 167:8aa3fb2a5a31 5 // run it (this script requires that you have Perl installed).
WiredHome 159:dee976689d08 6 #if 0
WiredHome 192:cc14d391b412 7
WiredHome 192:cc14d391b412 8 # ParseMikroeFont.pl
WiredHome 159:dee976689d08 9 #
WiredHome 192:cc14d391b412 10 # Parse and Modify Mikroe Font File and make a few strategic changes
WiredHome 159:dee976689d08 11 #
WiredHome 198:9b6851107426 12 # Copyright (c) 2019 by Smartware Computing, all rights reserved.
WiredHome 159:dee976689d08 13 #
WiredHome 159:dee976689d08 14 use strict;
WiredHome 198:9b6851107426 15 use warnings;
WiredHome 198:9b6851107426 16
WiredHome 159:dee976689d08 17 use POSIX;
WiredHome 159:dee976689d08 18
WiredHome 159:dee976689d08 19 my @HelpInfo = (
WiredHome 159:dee976689d08 20 " ",
WiredHome 159:dee976689d08 21 "This script modifies a font file which was generated with a tool by ",
WiredHome 159:dee976689d08 22 "MikroElektronika - GLD Font Creator. ",
WiredHome 159:dee976689d08 23 " ",
WiredHome 159:dee976689d08 24 "That tool creates the font data set for an embedded system from a Windows ",
WiredHome 159:dee976689d08 25 "True Type font. The user is encouraged to ensure that the font used is ",
WiredHome 167:8aa3fb2a5a31 26 "properly licensed, or drawn from a source that does not have a license ",
WiredHome 159:dee976689d08 27 "restriction. ",
WiredHome 159:dee976689d08 28 " ",
WiredHome 159:dee976689d08 29 "This script will read and then modify the file for a few specific purposes:",
WiredHome 167:8aa3fb2a5a31 30 " * <space> character is redefined to set the width to 1/4 the height, ",
WiredHome 167:8aa3fb2a5a31 31 " because the normal behavior sets it much too narrow. ",
WiredHome 167:8aa3fb2a5a31 32 " * '0' - '9' characters are redefined to set the width equal to the width ",
WiredHome 167:8aa3fb2a5a31 33 " of the widest digit, or to the user override value. ",
WiredHome 159:dee976689d08 34 " ",
WiredHome 159:dee976689d08 35 "And just because it can, it then improves upon the documentation in the ",
WiredHome 159:dee976689d08 36 "resulting data structure. ",
WiredHome 159:dee976689d08 37 " ",
WiredHome 159:dee976689d08 38 "This script was created by Smartware Computing, and is provided 'as is' ",
WiredHome 161:0215d0eec1a4 39 "with no warranty or suitability of fitness for any purpose. Anyone may use ",
WiredHome 161:0215d0eec1a4 40 "or modify it subject to the agreement that: ",
WiredHome 159:dee976689d08 41 " * The Smartware copyright statement remains intact. ",
WiredHome 161:0215d0eec1a4 42 " * Modifications for derivative use are clearly stated in this header. ",
WiredHome 159:dee976689d08 43 " ",
WiredHome 159:dee976689d08 44 "Modifications from the original: ",
WiredHome 159:dee976689d08 45 " * none. ",
WiredHome 159:dee976689d08 46 " ",
WiredHome 159:dee976689d08 47 );
WiredHome 159:dee976689d08 48
WiredHome 159:dee976689d08 49
WiredHome 159:dee976689d08 50 my $FixFile = 1; # Fix the file with planned changes
WiredHome 159:dee976689d08 51 my $Details = 1; # Emit more detailed information
WiredHome 159:dee976689d08 52 my $Debug = 0; # 0=None, 1=Some, 2=Detailed
WiredHome 159:dee976689d08 53
WiredHome 159:dee976689d08 54 my $DigitWidth = 0; # can be set on the command line, or it uses width('0')
WiredHome 159:dee976689d08 55 my $ff = ""; # FontFile
WiredHome 159:dee976689d08 56 my $of = ""; # Output File - otherwise stdout
WiredHome 159:dee976689d08 57 my $OH; # Handle to the output file
WiredHome 159:dee976689d08 58
WiredHome 161:0215d0eec1a4 59 my $prg = $0;
WiredHome 161:0215d0eec1a4 60 $prg =~ s/.*[\\\/]//;
WiredHome 161:0215d0eec1a4 61 $prg =~ s/\.pl//i;
WiredHome 161:0215d0eec1a4 62 my $args = join(" ", @ARGV);
WiredHome 161:0215d0eec1a4 63
WiredHome 159:dee976689d08 64 if (!@ARGV) {
WiredHome 159:dee976689d08 65 ShowHelp();
WiredHome 159:dee976689d08 66 exit;
WiredHome 159:dee976689d08 67 }
WiredHome 159:dee976689d08 68 foreach (@ARGV) {
WiredHome 159:dee976689d08 69 if (/-0=(\d+)/) {
WiredHome 159:dee976689d08 70 $DigitWidth = $1;
WiredHome 159:dee976689d08 71 } elsif (/-d=(\d+)/) {
WiredHome 159:dee976689d08 72 $Debug = $1;
WiredHome 159:dee976689d08 73 } elsif ($ff eq "") {
WiredHome 159:dee976689d08 74 $ff = $_;
WiredHome 159:dee976689d08 75 } elsif ($of eq "") {
WiredHome 159:dee976689d08 76 $of = $_;
WiredHome 159:dee976689d08 77 } else {
WiredHome 159:dee976689d08 78 ShowHelp();
WiredHome 159:dee976689d08 79 exit;
WiredHome 159:dee976689d08 80 }
WiredHome 159:dee976689d08 81 }
WiredHome 159:dee976689d08 82 if (! -e $ff) {
WiredHome 159:dee976689d08 83 printf("Can't read $ff\n");
WiredHome 159:dee976689d08 84 ShowHelp();
WiredHome 159:dee976689d08 85 exit;
WiredHome 159:dee976689d08 86 }
WiredHome 159:dee976689d08 87 if (! -T $ff) {
WiredHome 159:dee976689d08 88 printf("File $ff isn't text.\n");
WiredHome 159:dee976689d08 89 ShowHelp();
WiredHome 159:dee976689d08 90 exit;
WiredHome 159:dee976689d08 91 }
WiredHome 159:dee976689d08 92 if ($of ne "") {
WiredHome 159:dee976689d08 93 open($OH, ">$of") || die("Can't write to $of");
WiredHome 159:dee976689d08 94 select($OH);
WiredHome 159:dee976689d08 95 }
WiredHome 159:dee976689d08 96
WiredHome 159:dee976689d08 97 my @data = (); # Raw byte stream from the source file
WiredHome 159:dee976689d08 98 my @FileTop;
WiredHome 161:0215d0eec1a4 99 my $FontDeclaration;
WiredHome 159:dee976689d08 100 my @FileBot;
WiredHome 159:dee976689d08 101 my %charData; # charData{$char}{width}, {$char}{data}
WiredHome 159:dee976689d08 102
WiredHome 159:dee976689d08 103 ImportFontFile();
WiredHome 159:dee976689d08 104 DumpRawData() if ($Debug >= 2);
WiredHome 159:dee976689d08 105
WiredHome 159:dee976689d08 106 my $unk_0 = GetValueAt_Size_(0,1);
WiredHome 159:dee976689d08 107 my $unk_1 = GetValueAt_Size_(1,1);
WiredHome 159:dee976689d08 108
WiredHome 159:dee976689d08 109 my $firstChar = GetValueAt_Size_(2,2);
WiredHome 159:dee976689d08 110 my $lastChar = GetValueAt_Size_(4,2);
WiredHome 159:dee976689d08 111 my $fontHeight = GetValueAt_Size_(6,1);
WiredHome 159:dee976689d08 112 my $unk_2 = GetValueAt_Size_(7,1);
WiredHome 159:dee976689d08 113
WiredHome 161:0215d0eec1a4 114 printf("// Char Range [%4X - %4X]\n", $firstChar, $lastChar) if ($Debug);
WiredHome 159:dee976689d08 115
WiredHome 159:dee976689d08 116 for (my $char = $firstChar; $char <= $lastChar; $char++) {
WiredHome 159:dee976689d08 117 my $offsetToChar = 8 + 4 * ($char - $firstChar);
WiredHome 159:dee976689d08 118 my $charWidth = GetValueAt_Size_($offsetToChar,1);
WiredHome 159:dee976689d08 119 my $charDataNdx = GetValueAt_Size_($offsetToChar + 1, 2);
WiredHome 159:dee976689d08 120 $charData{$char}{width} = $charWidth;
WiredHome 159:dee976689d08 121 my $count = (floor(($charWidth+7)/8));
WiredHome 159:dee976689d08 122 @{$charData{$char}{data}} = GetByteArrayAt_Size_($charDataNdx, $count * $fontHeight);
WiredHome 159:dee976689d08 123 }
WiredHome 159:dee976689d08 124
WiredHome 159:dee976689d08 125 ShowFonts() if ($Debug >= 2); # Before Modifications
WiredHome 161:0215d0eec1a4 126 FixChars() if ($FixFile);
WiredHome 161:0215d0eec1a4 127 ShowFonts() if ($Debug); # After Modifications
WiredHome 161:0215d0eec1a4 128 EmitFile();
WiredHome 161:0215d0eec1a4 129 if ($of ne "") {
WiredHome 161:0215d0eec1a4 130 select(STDOUT);
WiredHome 161:0215d0eec1a4 131 close($OH);
WiredHome 161:0215d0eec1a4 132 }
WiredHome 161:0215d0eec1a4 133 exit;
WiredHome 161:0215d0eec1a4 134
WiredHome 161:0215d0eec1a4 135 #########################################################################
WiredHome 161:0215d0eec1a4 136
WiredHome 161:0215d0eec1a4 137 sub FixChars {
WiredHome 159:dee976689d08 138 my @newDat;
WiredHome 159:dee976689d08 139 my $char;
WiredHome 159:dee976689d08 140 my $charWidth;
WiredHome 159:dee976689d08 141 my $BytesWide;
WiredHome 159:dee976689d08 142
WiredHome 159:dee976689d08 143 #
WiredHome 161:0215d0eec1a4 144 # * <space> character is redefined to set the width to 1/4 the height.
WiredHome 159:dee976689d08 145 #
WiredHome 159:dee976689d08 146 $char = 0x20; # Fix <space>
WiredHome 161:0215d0eec1a4 147 $charWidth = floor($fontHeight/4);
WiredHome 159:dee976689d08 148 $charData{$char}{width} = $charWidth;
WiredHome 159:dee976689d08 149 $BytesWide = floor($charWidth/8);
WiredHome 159:dee976689d08 150 for (my $i=0; $i<($BytesWide*$fontHeight); $i++) {
WiredHome 159:dee976689d08 151 $charData{$char}{data}[$i] = 0x00;
WiredHome 159:dee976689d08 152 }
WiredHome 198:9b6851107426 153
WiredHome 198:9b6851107426 154
WiredHome 159:dee976689d08 155 #
WiredHome 161:0215d0eec1a4 156 # * '0' - '9' characters are redefined to set the width equal to width('0')
WiredHome 198:9b6851107426 157 # or to the user override value.
WiredHome 198:9b6851107426 158
WiredHome 159:dee976689d08 159 #
WiredHome 159:dee976689d08 160 if ($DigitWidth > 0) {
WiredHome 159:dee976689d08 161 $charWidth = $DigitWidth; # User override option
WiredHome 159:dee976689d08 162 } else {
WiredHome 161:0215d0eec1a4 163 $charWidth = DigitMaxWidth(); # Set it to the width of the widest digit
WiredHome 159:dee976689d08 164 }
WiredHome 159:dee976689d08 165 $BytesWide = floor(($charWidth+7)/8);
WiredHome 159:dee976689d08 166 #printf("Set Width = $charWidth, BytesWide = $BytesWide, Height = $fontHeight\n");
WiredHome 159:dee976689d08 167 for ($char = 0x30; $char <= 0x39; $char++) {
WiredHome 159:dee976689d08 168 for (my $h=0; $h<$fontHeight; $h++) {
WiredHome 159:dee976689d08 169 for (my $w=0; $w<$BytesWide; $w++) {
WiredHome 159:dee976689d08 170 my $pDst = $h * $BytesWide + $w;
WiredHome 159:dee976689d08 171 if ($w < ceil($charData{$char}{width}/8)) {
WiredHome 159:dee976689d08 172 my $pSrc = $h * floor(($charData{$char}{width}+7)/8) + $w;
WiredHome 159:dee976689d08 173 $newDat[$pDst] = $charData{$char}{data}[$pSrc];
WiredHome 159:dee976689d08 174 } else {
WiredHome 159:dee976689d08 175 $newDat[$pDst] = 0x00;
WiredHome 159:dee976689d08 176 }
WiredHome 159:dee976689d08 177 }
WiredHome 159:dee976689d08 178 }
WiredHome 159:dee976689d08 179 $charData{$char}{width} = $charWidth;
WiredHome 159:dee976689d08 180 for (my $i=0; $i<($fontHeight * $BytesWide); $i++) {
WiredHome 159:dee976689d08 181 $charData{$char}{data}[$i] = $newDat[$i];
WiredHome 159:dee976689d08 182 }
WiredHome 159:dee976689d08 183 #RenderChar($char);
WiredHome 159:dee976689d08 184 #<stdin>;
WiredHome 159:dee976689d08 185 }
WiredHome 159:dee976689d08 186 }
WiredHome 159:dee976689d08 187
WiredHome 161:0215d0eec1a4 188 sub DigitMaxWidth {
WiredHome 161:0215d0eec1a4 189 my $max = 0;
WiredHome 161:0215d0eec1a4 190 for (my $char=0x30; $char <= 0x39; $char++) {
WiredHome 161:0215d0eec1a4 191 $max = $charData{$char}{width} if ($max < $charData{$char}{width});
WiredHome 159:dee976689d08 192 }
WiredHome 161:0215d0eec1a4 193 return $max;
WiredHome 159:dee976689d08 194 }
WiredHome 159:dee976689d08 195
WiredHome 161:0215d0eec1a4 196 sub ImportFontFile {
WiredHome 161:0215d0eec1a4 197 # 0 = scanning
WiredHome 161:0215d0eec1a4 198 # 1 = after '{'
WiredHome 161:0215d0eec1a4 199 # 2 = found '}'
WiredHome 161:0215d0eec1a4 200 my $state = 0;
WiredHome 159:dee976689d08 201
WiredHome 159:dee976689d08 202 open(FH, "<$ff") || die("Can't open $ff");
WiredHome 159:dee976689d08 203 while (<FH>) {
WiredHome 159:dee976689d08 204 my $rec = $_;
WiredHome 159:dee976689d08 205 chomp $rec;
WiredHome 159:dee976689d08 206 if ($state == 0) {
WiredHome 159:dee976689d08 207 if ($rec =~ /^const .*{/) {
WiredHome 161:0215d0eec1a4 208 $FontDeclaration = $rec;
WiredHome 161:0215d0eec1a4 209 $state = 1;
WiredHome 159:dee976689d08 210 } else {
WiredHome 159:dee976689d08 211 push @FileTop, $rec;
WiredHome 159:dee976689d08 212 }
WiredHome 159:dee976689d08 213 } elsif ($state == 1) {
WiredHome 159:dee976689d08 214 if ($rec =~ /};/) {
WiredHome 159:dee976689d08 215 $rec =~ s/^ +(.*)$/$1/ if ($Details);
WiredHome 159:dee976689d08 216 push @FileBot, $rec;
WiredHome 159:dee976689d08 217 $state = 2;
WiredHome 159:dee976689d08 218 } else {
WiredHome 159:dee976689d08 219 $rec =~ s/( +)/ /g;
WiredHome 159:dee976689d08 220 next if ($rec =~ /^ *$/);
WiredHome 159:dee976689d08 221 $rec =~ s# +//.*##;
WiredHome 159:dee976689d08 222 $rec =~ s/^ +(.*)$/$1/;
WiredHome 159:dee976689d08 223 $rec =~ s/^(.*),$/$1/;
WiredHome 159:dee976689d08 224 $rec =~ s/0x//g;
WiredHome 159:dee976689d08 225 push @data, split(",", $rec);
WiredHome 159:dee976689d08 226 }
WiredHome 159:dee976689d08 227 } elsif ($state == 2) {
WiredHome 159:dee976689d08 228 push @FileBot, $rec;
WiredHome 159:dee976689d08 229 }
WiredHome 159:dee976689d08 230 }
WiredHome 159:dee976689d08 231 close FH;
WiredHome 159:dee976689d08 232 }
WiredHome 159:dee976689d08 233
WiredHome 159:dee976689d08 234
WiredHome 159:dee976689d08 235 sub ShowHelp {
WiredHome 159:dee976689d08 236 print "\n\n$prg\n\n";
WiredHome 159:dee976689d08 237 foreach (@HelpInfo) {
WiredHome 159:dee976689d08 238 print " $_\n";
WiredHome 159:dee976689d08 239 }
WiredHome 159:dee976689d08 240 print <<EOM;
WiredHome 159:dee976689d08 241 $prg <MikroeFontFile> [Options] [<OptionalNewFile>]
WiredHome 159:dee976689d08 242
WiredHome 159:dee976689d08 243 Process the MikreFontFile, optionally generating a new file.
WiredHome 159:dee976689d08 244
WiredHome 159:dee976689d08 245 Options:
WiredHome 159:dee976689d08 246 -0=xx Set Digit '0' - '9' width to xx
WiredHome 159:dee976689d08 247 -d=x Set Debug Level 0=None, 1=Some, 2=More
WiredHome 159:dee976689d08 248
WiredHome 159:dee976689d08 249 EOM
WiredHome 159:dee976689d08 250 }
WiredHome 159:dee976689d08 251
WiredHome 159:dee976689d08 252 sub ShowFonts {
WiredHome 159:dee976689d08 253 for (my $char = $firstChar; $char <= $lastChar; $char++) {
WiredHome 159:dee976689d08 254 my $charWidth = $charData{$char}{width};
WiredHome 161:0215d0eec1a4 255 printf("\n// === %d (0x%2X) === w:%d, h:%d\n", $char, $char, $charWidth, $fontHeight);
WiredHome 159:dee976689d08 256 RenderChar($char);
WiredHome 159:dee976689d08 257 }
WiredHome 159:dee976689d08 258 }
WiredHome 159:dee976689d08 259
WiredHome 159:dee976689d08 260 sub EmitFile {
WiredHome 159:dee976689d08 261 if ($Details) {
WiredHome 159:dee976689d08 262 foreach (@HelpInfo) {
WiredHome 159:dee976689d08 263 print "// $_\n";
WiredHome 161:0215d0eec1a4 264 }
WiredHome 161:0215d0eec1a4 265 print "// Script Activation:\n";
WiredHome 161:0215d0eec1a4 266 printf("// %s %s\n", $prg, $args);
WiredHome 161:0215d0eec1a4 267 print "\n";
WiredHome 159:dee976689d08 268 }
WiredHome 159:dee976689d08 269
WiredHome 159:dee976689d08 270 print join("\n", @FileTop) . "\n"; # Mikroe header
WiredHome 161:0215d0eec1a4 271 printf("%s\n", $FontDeclaration);
WiredHome 159:dee976689d08 272 printf(" // Font Info\n") if ($Details);
WiredHome 159:dee976689d08 273 printf(" 0x%02X, // Unknown #1\n", $unk_0);
WiredHome 159:dee976689d08 274 printf(" 0x%02X, // Unknown #2\n", $unk_1);
WiredHome 159:dee976689d08 275 printf(" %s, // FirstChar\n", HexStream($firstChar,2));
WiredHome 159:dee976689d08 276 printf(" %s, // LastChar\n", HexStream($lastChar,2));
WiredHome 159:dee976689d08 277 printf(" %s, // FontHeight\n", HexStream($fontHeight,1));
WiredHome 159:dee976689d08 278 printf(" 0x%02X, // Unknown #3\n", $unk_2);
WiredHome 198:9b6851107426 279
WiredHome 198:9b6851107426 280
WiredHome 159:dee976689d08 281 printf(" // Directory of Chars [Width] [Offset-L] [Offset-M] [Offset-H]\n") if ($Details);
WiredHome 159:dee976689d08 282 my $offsetToChar = 8 + 4 * ($lastChar - $firstChar + 1);
WiredHome 159:dee976689d08 283 for (my $char = $firstChar; $char <= $lastChar; $char++) {
WiredHome 159:dee976689d08 284 my $charWidth = $charData{$char}{width};
WiredHome 159:dee976689d08 285 my $charByteCount = floor(($charWidth+7)/8) * $fontHeight;
WiredHome 159:dee976689d08 286 my $asc = ($char >= 0x20 && $char < 0x7F) ? chr($char) : "<non-printable>";
WiredHome 159:dee976689d08 287 $asc = "\\\\" if ($char == 0x5C);
WiredHome 159:dee976689d08 288 my $details = ($Details) ? sprintf(" // 0x%02X '%s' ", $char, $asc) : "";
WiredHome 159:dee976689d08 289 printf(" 0x%02X,%s,0x%02X,%s\n",
WiredHome 159:dee976689d08 290 $charWidth, HexStream($offsetToChar,2), 0,
WiredHome 159:dee976689d08 291 $details
WiredHome 159:dee976689d08 292 );
WiredHome 159:dee976689d08 293 $offsetToChar += $charByteCount;
WiredHome 159:dee976689d08 294 }
WiredHome 159:dee976689d08 295 printf(" // Chars Bitstream\n") if ($Details);
WiredHome 159:dee976689d08 296 for (my $char = $firstChar; $char <= $lastChar; $char++) {
WiredHome 159:dee976689d08 297 my $charWidth = $charData{$char}{width};
WiredHome 159:dee976689d08 298 my $charByteCount = floor(($charWidth+7)/8) * $fontHeight;
WiredHome 159:dee976689d08 299 my $asc = ($char >= 0x20 && $char < 0x7F) ? chr($char) : "<non-printable>";
WiredHome 159:dee976689d08 300 $asc = "\\\\" if ($char == 0x5C);
WiredHome 159:dee976689d08 301 my $string = GetSomeHexBytes($char, 0, 8 * $charByteCount);
WiredHome 159:dee976689d08 302 printf(" %s%s // 0x%02X '%s'\n",
WiredHome 198:9b6851107426 303 $string,
WiredHome 198:9b6851107426 304
WiredHome 159:dee976689d08 305 ($char != $lastChar) ? "," : "",
WiredHome 159:dee976689d08 306 $char, $asc
WiredHome 159:dee976689d08 307 );
WiredHome 159:dee976689d08 308 }
WiredHome 159:dee976689d08 309 print join("\n", @FileBot);
WiredHome 159:dee976689d08 310 }
WiredHome 159:dee976689d08 311
WiredHome 159:dee976689d08 312 sub DumpRawData {
WiredHome 159:dee976689d08 313 my $i;
WiredHome 161:0215d0eec1a4 314 print "// ";
WiredHome 159:dee976689d08 315 for ($i=0; $i<=$#data; $i++) {
WiredHome 159:dee976689d08 316 printf("%02X ", hex($data[$i]));
WiredHome 161:0215d0eec1a4 317 print "\n// " if ($i % 16 == 15);
WiredHome 159:dee976689d08 318 }
WiredHome 159:dee976689d08 319 print "\n";
WiredHome 159:dee976689d08 320 }
WiredHome 159:dee976689d08 321
WiredHome 159:dee976689d08 322
WiredHome 159:dee976689d08 323 sub HexStream {
WiredHome 159:dee976689d08 324 my ($value, $len) = @_;
WiredHome 159:dee976689d08 325 my @parts;
WiredHome 159:dee976689d08 326 while ($len--) {
WiredHome 159:dee976689d08 327 push @parts, sprintf("0x%02X", $value & 0xFF);
WiredHome 159:dee976689d08 328 $value >>= 8;
WiredHome 159:dee976689d08 329 }
WiredHome 159:dee976689d08 330 return join(",", @parts);
WiredHome 159:dee976689d08 331 }
WiredHome 159:dee976689d08 332
WiredHome 159:dee976689d08 333 sub RenderChar {
WiredHome 159:dee976689d08 334 my ($char) = shift;
WiredHome 159:dee976689d08 335 my $h = $fontHeight;
WiredHome 159:dee976689d08 336 my $w = $charData{$char}{width};
WiredHome 198:9b6851107426 337
WiredHome 198:9b6851107426 338
WiredHome 159:dee976689d08 339 PrintChar($char,$w,$h,@{$charData{$char}{data}});
WiredHome 159:dee976689d08 340 }
WiredHome 159:dee976689d08 341
WiredHome 159:dee976689d08 342 sub PrintChar {
WiredHome 159:dee976689d08 343 my ($char,$w,$h,@datablock) = @_;
WiredHome 198:9b6851107426 344
WiredHome 198:9b6851107426 345
WiredHome 161:0215d0eec1a4 346 printf("// +%s+ \n// ", '-' x $w);
WiredHome 159:dee976689d08 347 my $row = 0;
WiredHome 159:dee976689d08 348 my $boolStream = 0;
WiredHome 159:dee976689d08 349 while ($h--) {
WiredHome 159:dee976689d08 350 my $pixels = $w;
WiredHome 159:dee976689d08 351 my $bitmask = 0x01;
WiredHome 159:dee976689d08 352 my $rowStream = $boolStream;
WiredHome 159:dee976689d08 353 printf("%02X |", $row++);
WiredHome 159:dee976689d08 354 my $tail = "";
WiredHome 159:dee976689d08 355 while ($pixels) {
WiredHome 159:dee976689d08 356 my $byte;
WiredHome 159:dee976689d08 357 $datablock[$rowStream] = 0 if (!defined($datablock[$rowStream]));
WiredHome 159:dee976689d08 358 $byte = $datablock[$rowStream];
WiredHome 159:dee976689d08 359 printf("%s", ($byte & $bitmask) ? "*" : " ");
WiredHome 159:dee976689d08 360 $bitmask <<= 1;
WiredHome 159:dee976689d08 361 if ($pixels > 1 && ($bitmask & 0xFF) == 0) {
WiredHome 159:dee976689d08 362 $bitmask = 0x01;
WiredHome 159:dee976689d08 363 $rowStream++;
WiredHome 159:dee976689d08 364 }
WiredHome 159:dee976689d08 365 $pixels--;
WiredHome 159:dee976689d08 366 }
WiredHome 161:0215d0eec1a4 367 printf("| %s\n// ", $tail);
WiredHome 159:dee976689d08 368 $boolStream += ($rowStream - $boolStream + 1);
WiredHome 159:dee976689d08 369 }
WiredHome 159:dee976689d08 370 printf(" +%s+\n", '-' x $w);
WiredHome 159:dee976689d08 371 }
WiredHome 159:dee976689d08 372
WiredHome 159:dee976689d08 373
WiredHome 159:dee976689d08 374 sub GetSomeHexBytes {
WiredHome 159:dee976689d08 375 my ($char, $offSet, $w) = @_;
WiredHome 159:dee976689d08 376 my @out;
WiredHome 159:dee976689d08 377 my $x = 0;
WiredHome 198:9b6851107426 378
WiredHome 198:9b6851107426 379
WiredHome 159:dee976689d08 380 $w = floor(($w+7)/8);
WiredHome 159:dee976689d08 381 while ($w--) {
WiredHome 159:dee976689d08 382 my $c = 0;
WiredHome 159:dee976689d08 383 $c = $charData{$char}{data}[$offSet + $x++] if (defined($charData{$char}{data}[$offSet + $x]));
WiredHome 159:dee976689d08 384 push @out, sprintf("0x%02X", $c);
WiredHome 159:dee976689d08 385 }
WiredHome 159:dee976689d08 386 return join(",", @out);
WiredHome 159:dee976689d08 387 }
WiredHome 159:dee976689d08 388
WiredHome 159:dee976689d08 389 sub GetSomeBytes {
WiredHome 159:dee976689d08 390 my ($char, $offSet, $w) = @_;
WiredHome 159:dee976689d08 391 my $string = "";
WiredHome 159:dee976689d08 392 my $x = 0;
WiredHome 198:9b6851107426 393
WiredHome 198:9b6851107426 394
WiredHome 159:dee976689d08 395 $w = floor(($w+7)/8);
WiredHome 159:dee976689d08 396 while ($w--) {
WiredHome 159:dee976689d08 397 $string .= sprintf("%02X ", $charData{$char}{data}[$offSet + $x++]);
WiredHome 159:dee976689d08 398 }
WiredHome 159:dee976689d08 399 return $string;
WiredHome 159:dee976689d08 400 }
WiredHome 159:dee976689d08 401
WiredHome 159:dee976689d08 402 sub GetValueAt_Size_ {
WiredHome 159:dee976689d08 403 my ($offset, $size) = @_;
WiredHome 159:dee976689d08 404 my $value = 0;
WiredHome 159:dee976689d08 405 while ($size--) {
WiredHome 159:dee976689d08 406 $value = ($value << 8) | hex($data[$offset + $size]);
WiredHome 159:dee976689d08 407 }
WiredHome 159:dee976689d08 408 return $value;
WiredHome 159:dee976689d08 409 }
WiredHome 159:dee976689d08 410
WiredHome 159:dee976689d08 411 sub GetValueFromArray_At_Size_ {
WiredHome 159:dee976689d08 412 my ($offset, $size, $ary) = @_;
WiredHome 159:dee976689d08 413 my $value = 0;
WiredHome 159:dee976689d08 414 while ($size--) {
WiredHome 159:dee976689d08 415 $value = ($value << 8) | hex($$ary[$offset + $size]);
WiredHome 159:dee976689d08 416 }
WiredHome 159:dee976689d08 417 return $value;
WiredHome 159:dee976689d08 418 }
WiredHome 159:dee976689d08 419
WiredHome 159:dee976689d08 420 sub GetByteArrayAt_Size_ {
WiredHome 159:dee976689d08 421 my ($offset, $size) = @_;
WiredHome 159:dee976689d08 422 my @bytes;
WiredHome 159:dee976689d08 423 while ($size--) {
WiredHome 159:dee976689d08 424 push @bytes, hex($data[$offset++]);
WiredHome 159:dee976689d08 425 }
WiredHome 159:dee976689d08 426 return @bytes;
WiredHome 159:dee976689d08 427 }
WiredHome 159:dee976689d08 428
WiredHome 159:dee976689d08 429 sub GetByteSreamAt_Size_ {
WiredHome 159:dee976689d08 430 my ($offset, $size) = @_;
WiredHome 159:dee976689d08 431 my $value = "";
WiredHome 159:dee976689d08 432 while ($size--) {
WiredHome 159:dee976689d08 433 $value .= sprintf("%02X ", hex($data[$offset++]));
WiredHome 159:dee976689d08 434 }
WiredHome 159:dee976689d08 435 return $value;
WiredHome 159:dee976689d08 436 }
WiredHome 159:dee976689d08 437
WiredHome 192:cc14d391b412 438
WiredHome 192:cc14d391b412 439
WiredHome 159:dee976689d08 440 #endif