Added uboot tools
[keystone-rtos/mcsdk-tools.git] / boot_loader / uboot / utils / bin2ccs.c
1 /*
2  *
3  * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ 
4  * 
5  * 
6  *  Redistribution and use in source and binary forms, with or without 
7  *  modification, are permitted provided that the following conditions 
8  *  are met:
9  *
10  *    Redistributions of source code must retain the above copyright 
11  *    notice, this list of conditions and the following disclaimer.
12  *
13  *    Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the 
15  *    documentation and/or other materials provided with the   
16  *    distribution.
17  *
18  *    Neither the name of Texas Instruments Incorporated nor the names of
19  *    its contributors may be used to endorse or promote products derived
20  *    from this software without specific prior written permission.
21  *
22  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
23  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
24  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
26  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
27  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
28  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
31  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
32  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  *
34 */
35 /**********************************************************************************************
36  * FILE PURPOSE: Convert a binary file to CCS format
37  **********************************************************************************************
38  * FILE NAME: bin2ccs.c
39  *
40  * DESCRIPTION: The binary file is converted to an ascii file in CCS data format
41  *
42  **********************************************************************************************/
44 #include <stdio.h>
45 #include <malloc.h>
47 /**********************************************************************************************
48  * FUNCTION PURPOSE: Form a 32 bit value from an unsigned byte array
49  **********************************************************************************************
50  * DESCRIPTION: The value is formed and padded if required
51  **********************************************************************************************/
52 unsigned int formInt  (unsigned char *c, unsigned int i, unsigned int len)
53 {
54   unsigned int x = 0;
56   if (i < len)
57     x = x | (c[i] << 24);
59   if ((i+1) < len)
60     x = x | (c[i+1] << 16);
62   if ((i+2) < len)
63     x = x | (c[i+2] << 8);
65   if ((i+3) < len)
66     x = x | c[i+3];
68   return (x);
70 }
72 int main (int argc, char *argv[])
73 {
74   FILE *fil;
75   unsigned char *cdat;
76   unsigned int len;
77   unsigned int i;
80   if (argc != 3)  {
81     fprintf (stderr, "usage: %s infile outfile\n", argv[0]);
82     return (-1);
83   }
85   fil = fopen (argv[1], "rb");
86   if (fil == NULL)  {
87     fprintf (stderr, "%s: Failed to open input file %s\n", argv[0], argv[1]);
88     return (-1);
89   }
91   fseek (fil, 0, SEEK_END);
92   len = ftell (fil);
93   fclose (fil);
95   cdat = malloc (len * sizeof (unsigned char));
96   if (cdat == NULL)  {
97     fprintf (stderr, "%s: Failed to malloc %d bytes\n", argv[0], len);
98     return (-1);
99   }
101   fil = fopen (argv[1], "rb");
102   if (fil == NULL)  {
103     fprintf (stderr, "%s: Failed to open input file %s\n", argv[0], argv[1]);
104     return (-1);
105   }
107   fread (cdat, sizeof(unsigned char), len, fil);
109   fclose (fil);
111   
112   fil = fopen (argv[2], "w");
113   if (fil == NULL)  {
114     fprintf (stderr, "%s: Error opening output file %s\n", argv[0], argv[1]);
115     free (cdat);
116     return (-1);
117   }
119   /* The ccs header */
120   fprintf (fil, "1651 1 10000 1 %x\n", (len + 3) / 4);
123   /* The data */
124   for (i = 0; i < len; i += 4)  
125     fprintf (fil, "0x%08x\n", formInt(cdat, i, len));
128   fclose (fil);
129   free (cdat);
131   return (0);
136