#!/usr/bin/perl
use strict;
use warnings;
use Switch;

my $disk_dev="/dev/mmcblk0";

sub Usage {
	print "Usage: $0 [uboot|kernel] [filename]\n";
	exit 1;
}

if($#ARGV != 1) {
	Usage();
}

if(! -f "$ARGV[1]" || ! -f "$ARGV[1].md5") {
	print "Can't find $ARGV[0] and/or $ARGV[1].md5\n";
	exit 1;
}

my $cal_md5sum;
my $md5sum;

$md5sum = `md5sum $ARGV[1]`;
open my $md5file, "<", "$ARGV[1].md5";
$cal_md5sum = <$md5file>;
chomp($md5sum);
chomp($cal_md5sum);

$md5sum =~ s/(\w{32}).*/$1/;
$cal_md5sum =~ s/(\w{32}).*/$1/;

#print "$md5sum\n";
#print "$cal_md5sum\n";

unless($md5sum eq $cal_md5sum) {
	print "md5sum didn't match\n";
	exit 1;
}

switch($ARGV[0]) {
	case "uboot" {
		`su -c 'dd if=$ARGV[1] of=$disk_dev bs=512 skip=2 seek=2'`;
		exit 1 if $? != 0;
	}
	case "kernel" {
		`su -c 'dd if=$ARGV[1] of=$disk_dev bs=512 seek=2048'`;
		exit 1 if $? != 0;
	}
	else {
		Usage();
	}
}

exit 0;
