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