| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 | 
							- #!/usr/bin/perl -w
 
- #      Copyright (C) 2014 Michael McMaster <michael@codesrc.com>
 
- #
 
- #      This file is part of SCSI2SD.
 
- #
 
- #      SCSI2SD 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.
 
- #
 
- #      SCSI2SD 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 SCSI2SD.  If not, see <http://www.gnu.org/licenses/>.
 
- # Calculates the checksum of all flash data within Cypress PSoC 5lp .hex files
 
- # Allows fixing the checksum after manual hacking of the hex files
 
- use strict;
 
- use warnings;
 
- my $sum = 0;
 
- while (my $line = <>)
 
- {
 
- 	$line =~ s/[\n\r]//g;
 
- 	if ($line =~ /^:40[0-9A-F]{4}00(.+)[0-9A-F]{2}$/)
 
- 	{
 
- 		my $binrec = pack('H*', $1);
 
- 		$sum += unpack('%16C*', $binrec);
 
- 	}
 
- 	elsif ($line eq ":0200000490303A")
 
- 	{
 
- 		my $checksumRec = sprintf(":02000000%04X",  ($sum & 0xffff));
 
- 		# create checksum of checksum record.
 
- 		my $sum2 = unpack('%8C*',  pack('H*', substr($checksumRec, 1)));
 
- 		$checksumRec .= sprintf('%2X', (~$sum2 + 1) & 0xFF);
 
- 		print("Flash data checksum record = $checksumRec\n");
 
- 		print("(Replace line below ':0200000490303A'\n");
 
- 		exit;
 
- 	}
 
- }
 
 
  |