move sboot to the root directory
[open-ath9k-htc-firmware.git] / sboot / utility / bin2hex.pl
diff --git a/sboot/utility/bin2hex.pl b/sboot/utility/bin2hex.pl
new file mode 100755 (executable)
index 0000000..7ef6440
--- /dev/null
@@ -0,0 +1,202 @@
+#!/usr/bin/perl -w
+
+# Copyright (c) 2013 Qualcomm Atheros, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted (subject to the limitations in the
+# disclaimer below) provided that the following conditions are met:
+#
+#  * Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+#  * Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the
+#    distribution.
+#
+#  * Neither the name of Qualcomm Atheros nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE
+# GRANTED BY THIS LICENSE.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
+# HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
+# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+###############################################################
+#binary-to-hex perl tool: obtained & modified on 10/05/08
+###############################################################
+use strict;
+
+my ($format, $binfile, $outfile, $arr_form, $ColNum, $show_hex, $filesize);
+$format = $ARGV[0] || usage();
+$binfile = $ARGV[1] || usage();
+$outfile = $ARGV[2] || $binfile.".$format";
+$arr_form = $ARGV[3];
+$ColNum = $ARGV[4] || usage();
+$show_hex = $ARGV[5];
+
+my ($orig, @converted);
+
+    $orig = readdata ($binfile);
+
+    $orig = hexdump($orig);
+    if ($show_hex) {print "Original Binary text:\n\t $orig","\n\n";}
+
+    if ($format eq 'a' || $format eq 'asm') {
+        @converted = convert_to_asm ($orig);
+
+    } elsif ($format eq 'c') {
+        @converted = convert_to_c ($orig);
+
+    } else {
+        print "Unknown format to convert!\n";
+        exit (-1);
+    }
+    if ($show_hex) {print "Converted hex text:\n",join ('', @converted), "\n";}
+
+    writedata ($outfile, @converted);
+
+sub convert_to_asm {
+    my @data = split(' ', join (' ', @_)); #nop here only one list passed to join
+
+    my $i = 0;
+    if ($arr_form){
+      foreach (@data) {
+         if ($i++ < 8) {
+           $_=$_."h, 0";
+         } else {
+           $_=$_."h\nbyte 0";
+           $i = 0;
+         }
+      }
+
+      unshift (@data, "byte 0");
+      $data[-1] =~s/[,|\nbyte] 0$//g;
+    }else{
+      foreach (@data){
+        if ($i++ < $ColNum-1) {
+          #$_.=",";
+        }else {
+          $_.="\n";
+          $i = 0;
+        }
+      }      
+    }  
+    return @data;
+}
+
+sub convert_to_c {
+    my @data = split(' ', join (' ', @_)); #nop here only one list passed to join
+
+    my $i = 0;
+    if ($arr_form){
+      foreach (@data) {
+       if ($i++ < $ColNum-1) {
+           $_.=", 0x";
+       } else {
+           $_.=",\n\t0x";
+           $i = 0;
+       }
+      }
+      unshift (@data, "unsigned char data[$filesize] = {\n\t0x");  #add some pattern at the front of @data
+      $data[-1] =~s/0x$//g;
+      $data[-1] =~s/[ |\n\t]//g;
+      $data[-1] =~s/\,//g;
+      push (@data, "\n};");
+    }else{
+      foreach (@data){
+        if ($i++ < $ColNum-1) {
+        }else {
+          $_.="\n";
+          $i = 0;
+        }
+      }      
+    }
+    return @data;
+}
+
+sub readdata {
+    my ($line);
+    my ($file) = @_;
+    #printf "dbg:file = $file\n";
+    open (BF, "$file") || die "Cannot open $file: $!";  #$! contains current value of errno
+    binmode (BF);
+    $filesize = (stat($file))[7];
+    my ($DATA) = ""; #<BF>;
+    my (@Data_check) = <BF>;
+    foreach $line (@Data_check){
+      #printf "dbg:line = $line\n";
+      $DATA.=$line;
+    }  
+    #printf "dbg:DATA string = $DATA\n";
+    close (BF);
+    return ($DATA);
+}
+
+sub writedata {
+    my ($file, @FomatData) = @_;
+    open (AF, ">$file") || die "Cannot open $file: $!";
+    my $i = 0;
+    my $b0 = 0;    
+    my $b1 = 0; 
+    my $b2 = 0; 
+    my $b3 = 0;        
+    foreach (@FomatData) {
+      if($ColNum eq '1') {
+        if($i == 0) {
+         $b0 = $_;
+         $i++;
+       } else {
+       if($i == 1) {
+         $b1 = $_;
+         $i++;
+       } else {
+       if($i == 2) {
+         $b2 = $_;
+         $i++;
+       } else {
+         print AF "$_";
+         print AF "$b2";
+         print AF "$b1";
+         print AF "$b0";
+         $i = 0;
+       }}}
+       }else{
+          print AF "$_";
+       }
+    }
+    close (AF);
+}
+
+sub hexdump
+{
+  join ' ', map { sprintf "%02X", $_ } unpack "C*", $_[0];
+}
+
+sub usage {
+    print STDERR <<EOF;
+    
+Usage: bin2hex format binfile outfile
+     format      format to convert to, 
+                asm ==> 'assembly', 
+                c ==> 'C'
+     binfile     binary file you want to convert.
+     outfile     output file to store the result of output.
+     arr_form    displayed in array-form
+     ColNum      num of columns of the shown array
+
+EOF
+   exit(-1);
+}
+