commsfwtools/commstools/svg/xti2bt.pl
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwtools/commstools/svg/xti2bt.pl	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,145 @@
+#!/usr/bin/perl
+# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Tool to convert xti ascii logs with freeway logging into btrace files
+# suitable for input to utracedecoder
+#
+
+my $input = $ARGV[0];
+if (length($input) == 0)
+{
+    print "Usage: xti2bt.pl <inputfile> <outputfile>";
+    exit(-1);
+}
+
+my $output = $ARGV[1];
+if (length($output) == 0)
+{
+    print "Outputting to btrace.bin\n";
+    $output = "btrace.bin";
+}
+
+open INPUT, "< $input" or die "Couldn't open $input";
+open BTRACE , "> $output" or die "Couldn't open $output";
+binmode BTRACE;
+
+sub writePrintf
+{
+    $trace = shift;
+    $trace =~ s/¿/\t/g;
+    $len = length($trace);
+    if ($len > 104)
+    {
+	$trace = substr $trace, 0, 104;
+	$len = length($trace);
+    }
+    $alignment = $len % 4;
+    for ($i = 0; $i < (4-$alignment); $i++)
+    {
+	$trace = $trace."X";
+    }
+    $len = length($trace) + 8;
+    
+    $header = pack("CCCC", $len, 0, 0, 0);
+    print BTRACE $header;
+    print BTRACE "0000";
+    print BTRACE $trace;
+}
+
+while (<INPUT>)
+{
+    if (/IConsole/)
+    {
+	next;
+    } elsif (/xti1:SYMBIAN_TRACE; channel:0xE0; \[([0-9a-f,]*)/)
+    {
+	@bytes = split(/,/, $1);
+
+	$size = hex($bytes[0]);
+	$flags = hex($bytes[1]);
+	$size2 = scalar(@bytes);
+
+#	$bytes[0] = sprintf "%x", $size2;
+# 	print "reported size $size\tarray size $size2  $trailing0\t";
+# 	print "flags $flags\t";
+# 	if ($flags & 1<<0) {
+# 	    $flags2 = hex($bytes[4]);
+# 	    $part = "?";
+# 	    if ($flags2 == 1)
+# 	    {
+# 		$part = "S";
+# 	    } elsif ($flags2 == 2)
+# 	    {
+# 		$part = "M";
+# 	    } elsif ($flags2 == 3)
+# 	    {
+# 		$part = "E";
+# 	    }
+# 	    print "H2[$part], ";
+# 	}
+
+# 	if ($flags & 1<<1) {
+# 	    print "T,";
+# 	}
+
+# 	if ($flags & 1<<2) {
+# 	    print "T2, ";
+# 	}
+
+# 	if ($flags & 1<<3) {
+# 	    print "Cid, ";
+# 	}
+	
+# 	if ($flags & 1<<4) {
+# 	    print "PC, ";
+# 	}
+
+# 	if ($flags & 1<<5) {
+# 	    print "Ext, ";
+# 	}
+
+# 	if ($flags & 1<<6) {
+# 	    print "Trunc, ";
+# 	}
+
+# 	if ($flags & 1<<7) {
+# 	    print "Miss, ";
+# 	}
+# 	print "\t@bytes\n";
+
+	$moddedsize = $size;
+	if (($moddedsize % 4) != 0)
+	{
+	    $moddedsize += 4 - ($moddedsize % 4);
+	}
+	while (scalar(@bytes) < $moddedsize)
+	{
+	    push @bytes, "00";
+	 #   print "Size all strange ( $size $size2 ):  @bytes\n";
+	}
+	
+	foreach (@bytes) {
+	    my $out = pack("C", hex $_);
+	    print BTRACE $out;
+	}
+    } elsif (/xti1:MCU_ASCII_PRINTF; channel:0xE0; msg:(.*)/)
+    {
+	writePrintf($1);
+    } elsif (/symb:(.*)/)
+    {
+	writePrintf($1);
+    }
+}
+close BTRACE;
+close INPUT;