xref: /btstack/chipset/da145xx/convert_hex_files.py (revision aaa1682ba28bbe779e8e859f8529b64c4cd5f80d)
1d00ab9e3SMatthias Ringwald#!/usr/bin/env python3
2d00ab9e3SMatthias Ringwald# BlueKitchen GmbH (c) 2012-2014
3d00ab9e3SMatthias Ringwald
4d00ab9e3SMatthias Ringwald# avr-objcopy -I ihex -O binary hci_581_active_uart.hex hci_581_active_uart.bin
5d00ab9e3SMatthias Ringwald
6d00ab9e3SMatthias Ringwald# requires IntelHex package https://pypi.python.org/pypi/IntelHex
7d00ab9e3SMatthias Ringwald# docs: http://python-intelhex.readthedocs.io/en/latest/
8d00ab9e3SMatthias Ringwald
9d00ab9e3SMatthias Ringwaldfrom intelhex import IntelHex
10d00ab9e3SMatthias Ringwaldimport glob
11d00ab9e3SMatthias Ringwaldimport sys
12d00ab9e3SMatthias Ringwald
13d00ab9e3SMatthias Ringwaldusage = '''This script converts the HCI Firmware in .hex format for Dialog Semiconductor
14d00ab9e3SMatthias Ringwaldinto C files to be used with BTstack.
15d00ab9e3SMatthias Ringwald'''
16d00ab9e3SMatthias Ringwald
17d00ab9e3SMatthias Ringwaldheader = '''
18d00ab9e3SMatthias Ringwald/**
19d00ab9e3SMatthias Ringwald * BASENAME.h converted from BASENAME.hex
20d00ab9e3SMatthias Ringwald */
21d00ab9e3SMatthias Ringwald
22d00ab9e3SMatthias Ringwald#ifndef BASENAME_H
23d00ab9e3SMatthias Ringwald#define BASENAME_H
24d00ab9e3SMatthias Ringwald
25d00ab9e3SMatthias Ringwald#include <stdint.h>
26d00ab9e3SMatthias Ringwald
27*aaa1682bSMatthias Ringwaldextern const uint8_t  da145xx_fw_data[];
28*aaa1682bSMatthias Ringwaldextern const uint32_t da145xx_fw_size;
29*aaa1682bSMatthias Ringwaldextern const char *   da145xx_fw_name;
30d00ab9e3SMatthias Ringwald
31d00ab9e3SMatthias Ringwald#endif
32d00ab9e3SMatthias Ringwald'''
33d00ab9e3SMatthias Ringwald
34d00ab9e3SMatthias Ringwaldcode_start = '''
35d00ab9e3SMatthias Ringwald/**
36d00ab9e3SMatthias Ringwald * BASENAME.c converted from BASENAME.hex
37d00ab9e3SMatthias Ringwald */
38d00ab9e3SMatthias Ringwald
39*aaa1682bSMatthias Ringwald#define BTSTACK_FILE__ "BASENAME.c"
40*aaa1682bSMatthias Ringwald
41d00ab9e3SMatthias Ringwald#include "BASENAME.h"
42d00ab9e3SMatthias Ringwald
43*aaa1682bSMatthias Ringwaldconst char *   da145xx_fw_name = "BASENAME";
44d00ab9e3SMatthias Ringwald
45*aaa1682bSMatthias Ringwaldconst uint8_t  da145xx_fw_data[] = {
46d00ab9e3SMatthias Ringwald'''
47d00ab9e3SMatthias Ringwald
48d00ab9e3SMatthias Ringwaldcode_end = '''
49d00ab9e3SMatthias Ringwald};
50*aaa1682bSMatthias Ringwaldconst uint32_t da145xx_fw_size = sizeof(da145xx_fw_data);
51d00ab9e3SMatthias Ringwald'''
52d00ab9e3SMatthias Ringwald
53d00ab9e3SMatthias Ringwalddef convert_hex(basename):
54d00ab9e3SMatthias Ringwald	hex_name = basename + '.hex'
55d00ab9e3SMatthias Ringwald	print('Reading %s' % hex_name)
56d00ab9e3SMatthias Ringwald	ih = IntelHex(hex_name)
57d00ab9e3SMatthias Ringwald	# f = open(basename + '.txt', 'w') # open file for writing
58d00ab9e3SMatthias Ringwald	# ih.dump(f)                    # dump to file object
59d00ab9e3SMatthias Ringwald	# f.close()                     # close file
60d00ab9e3SMatthias Ringwald	size = 	ih.maxaddr() - ih.minaddr() + 1
61d00ab9e3SMatthias Ringwald	print('- Start: %x' % ih.minaddr())
62d00ab9e3SMatthias Ringwald	print('- End:   %x' % ih.maxaddr())
63d00ab9e3SMatthias Ringwald
64d00ab9e3SMatthias Ringwald	with open(basename + '.h', 'w') as fout:
65d00ab9e3SMatthias Ringwald		fout.write(header.replace('BASENAME',basename));
66d00ab9e3SMatthias Ringwald
67d00ab9e3SMatthias Ringwald	with open(basename + '.c', 'w') as fout:
68d00ab9e3SMatthias Ringwald		fout.write(code_start.replace('BASENAME',basename));
69d00ab9e3SMatthias Ringwald		fout.write('    ')
70d00ab9e3SMatthias Ringwald		for i in range(0,size):
71d00ab9e3SMatthias Ringwald			if i % 1000 == 0:
72d00ab9e3SMatthias Ringwald				print('- Write %05u/%05u' % (i, size))
73d00ab9e3SMatthias Ringwald			byte = ih[ih.minaddr() + i]
74d00ab9e3SMatthias Ringwald			fout.write("0x{0:02x}, ".format(byte))
75d00ab9e3SMatthias Ringwald			if (i & 0x0f) == 0x0f:
76d00ab9e3SMatthias Ringwald				fout.write('\n    ')
77d00ab9e3SMatthias Ringwald		fout.write(code_end);
78d00ab9e3SMatthias Ringwald		print ('Done\n')
79d00ab9e3SMatthias Ringwald
80d00ab9e3SMatthias Ringwald
81d00ab9e3SMatthias Ringwaldfiles =  glob.glob('*.hex')
82d00ab9e3SMatthias Ringwaldif not files:
83d00ab9e3SMatthias Ringwald    print(usage)
84d00ab9e3SMatthias Ringwald    sys.exit(1)
85d00ab9e3SMatthias Ringwald
86d00ab9e3SMatthias Ringwald# convert each of them
87d00ab9e3SMatthias Ringwaldfor name in files:
88d00ab9e3SMatthias Ringwald	basename = name.replace('.hex','')
89d00ab9e3SMatthias Ringwald	convert_hex(basename)
90