Added bin2ccs
[keystone-rtos/mcsdk-tools.git] / bin2ccs / 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 */
36 /**********************************************************************************************
37  * FILE PURPOSE: Convert a binary file to CCS format
38  **********************************************************************************************
39  * FILE NAME: bin2ccs.c
40  *
41  * DESCRIPTION: The binary file is converted to an ascii file in CCS data format
42  *
43  **********************************************************************************************/
45 #include <stdio.h>
46 #include <malloc.h>
48 char version[] = "1.0.0.0";
50 /**********************************************************************************************
51  * FUNCTION PURPOSE: Form a 32 bit value from an unsigned byte array
52  **********************************************************************************************
53  * DESCRIPTION: The value is formed and padded if required
54  **********************************************************************************************/
55 unsigned int formInt  (unsigned char *c, unsigned int i, unsigned int len)
56 {
57   unsigned int x = 0;
59   if (i < len)
60     x = x | (c[i] << 24);
62   if ((i+1) < len)
63     x = x | (c[i+1] << 16);
65   if ((i+2) < len)
66     x = x | (c[i+2] << 8);
68   if ((i+3) < len)
69     x = x | c[i+3];
71   return (x);
73 }
75 int main (int argc, char *argv[])
76 {
77   FILE *fil;
78   unsigned char *cdat;
79   unsigned int len;
80   unsigned int i;
82   printf("Binary to CCS Format Converter Version %s\n", version);
84   if (argc != 3)  {
85     fprintf (stderr, "usage: %s infile outfile\n", argv[0]);
86     return (-1);
87   }
89   fil = fopen (argv[1], "rb");
90   if (fil == NULL)  {
91     fprintf (stderr, "%s: Failed to open input file %s\n", argv[0], argv[1]);
92     return (-1);
93   }
95   fseek (fil, 0, SEEK_END);
96   len = ftell (fil);
97   fclose (fil);
99   cdat = malloc (len * sizeof (unsigned char));
100   if (cdat == NULL)  {
101     fprintf (stderr, "%s: Failed to malloc %d bytes\n", argv[0], len);
102     return (-1);
103   }
105   fil = fopen (argv[1], "rb");
106   if (fil == NULL)  {
107     fprintf (stderr, "%s: Failed to open input file %s\n", argv[0], argv[1]);
108     return (-1);
109   }
111   fread (cdat, sizeof(unsigned char), len, fil);
113   fclose (fil);
116   fil = fopen (argv[2], "w");
117   if (fil == NULL)  {
118     fprintf (stderr, "%s: Error opening output file %s\n", argv[0], argv[1]);
119     free (cdat);
120     return (-1);
121   }
123   /* The ccs header */
124   fprintf (fil, "1651 1 80000000 1 %x\n", (len + 3) / 4);
127   /* The data */
128   for (i = 0; i < len; i += 4)
129     fprintf (fil, "0x%08x\n", formInt(cdat, i, len));
132   fclose (fil);
133   free (cdat);
135   return (0);