ULi M920x sp firmware

From LinuxTVWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This script converts the output from SnoopyPro's log window into a M920x driver compatible binary form.

#!/usr/bin/perl

sub get_line {
	
	
	while($line = <STDIN>) {
		if($line =~ m/\S+ \S+ \S+ \S+ \S+ \S+ \S+ \S+ \S+ \S+ \S+/) {
			#print "returning line $line";
			return $line;
		}else{
			#print "not matched $line\n";
		}
	}
	
	#exit;
}

sub get_line_read {

	while($line = <STDIN>) {
	
		#d5748560 78669980 C Ci:004:00 0 1 = 50
		#d3ea8260 44357030 C Ci:004:00 0 1 = bc
		if($line =~ m/\S+ \S+ C \S+ \S+ (\S+) = (\S+)/) {
			return $2;
		}else{
			#print "not matched $line\n";
		}
	}

}

$linenum = 0;
sub get_tf_data {
	$full = "";
	
	$line = <STDIN>; $linenum++;
	while($line =~ m/^\S\S\S\S: (.+)/) {
		$full .= $1;
		#print "$1";
		$line = <STDIN>; $linenum++;
	}
	return $full;
}

open(out,">fw") || die "Can't open fw";

sub write_bytes {
	my($str) = @_;
	
	#print "ds $str sd\n";
	
	@bytes = split(/ /, $str);
	foreach(@bytes){
		#print "$_\n";
		print out pack("C", hex($_));
	}
	
	#exit(1);
}

sub to_words {
	my($str) = @_;
	
	print "ds $str sd\n";
	
	@bytes = split(/\S+ \S+/, $str);
	foreach(@bytes){
		print "$_\n";
		print out pack("v", hex($_));
	}
	
	exit(1);
}

while($line = <STDIN>) { $linenum++;

	if($line =~ m/SetupPacket:/) {
		$setup_linenum = $linenum;
		$setup = get_tf_data();
		
		#to_words($setup);
		
		#write_bytes($setup);
		
		#print "$line\n";
		
		while($line = <STDIN>) { $linenum++;
			if($line =~ m/TransferBuffer: 0x00000040/) {
				#print "$setup, $setup_linenum\n";
				
				@bytes = split(/ /, $setup);
				print out pack("v", hex($bytes[3] . $bytes[2]));
				print out pack("v", hex($bytes[5] . $bytes[4]));
				print out pack("v", hex("0x40"));
				
				$lid = get_tf_data();
				write_bytes($lid);
				#print $lid;
				#print "\n";
				
				last;
			}elsif($line =~ m/No TransferBuffer/) {
				last;
			}elsif($line =~ m/TransferBuffer:/) {
				last;
			}
		
		}
	}

}