1*44149d3aSMatthias Ringwald#!/usr/bin/env python 2*44149d3aSMatthias Ringwald# BlueKitchen GmbH (c) 2012-2014 3*44149d3aSMatthias Ringwald 4*44149d3aSMatthias Ringwald# avr-objcopy -I ihex -O binary hci_581_active_uart.hex hci_581_active_uart.bin 5*44149d3aSMatthias Ringwald 6*44149d3aSMatthias Ringwald# requires IntelHex package https://pypi.python.org/pypi/IntelHex 7*44149d3aSMatthias Ringwald# docs: http://python-intelhex.readthedocs.io/en/latest/ 8*44149d3aSMatthias Ringwald 9*44149d3aSMatthias Ringwaldfrom intelhex import IntelHex 10*44149d3aSMatthias Ringwaldimport glob 11*44149d3aSMatthias Ringwald 12*44149d3aSMatthias Ringwaldusage = '''This script converts the HCI Firmware in .bin format for Atmel WILC3000 13*44149d3aSMatthias Ringwaldinto C files to be used with BTstack. 14*44149d3aSMatthias Ringwald''' 15*44149d3aSMatthias Ringwald 16*44149d3aSMatthias Ringwaldheader = ''' 17*44149d3aSMatthias Ringwald/** 18*44149d3aSMatthias Ringwald * BASENAME.h converted from BASENAME.bin 19*44149d3aSMatthias Ringwald */ 20*44149d3aSMatthias Ringwald 21*44149d3aSMatthias Ringwald#ifndef __BASENAME_H 22*44149d3aSMatthias Ringwald#define __BASENAME_H 23*44149d3aSMatthias Ringwald 24*44149d3aSMatthias Ringwald#include <stdint.h> 25*44149d3aSMatthias Ringwald 26*44149d3aSMatthias Ringwaldextern const uint8_t atwilc3000_fw_data[]; 27*44149d3aSMatthias Ringwaldextern const uint32_t atwilc3000_fw_size; 28*44149d3aSMatthias Ringwaldextern const char * atwilc3000_fw_name; 29*44149d3aSMatthias Ringwald 30*44149d3aSMatthias Ringwald#endif 31*44149d3aSMatthias Ringwald''' 32*44149d3aSMatthias Ringwald 33*44149d3aSMatthias Ringwaldcode_start = ''' 34*44149d3aSMatthias Ringwald/** 35*44149d3aSMatthias Ringwald * BASENAME.c converted from BASENAME.bin 36*44149d3aSMatthias Ringwald */ 37*44149d3aSMatthias Ringwald 38*44149d3aSMatthias Ringwald#include "BASENAME.h" 39*44149d3aSMatthias Ringwald 40*44149d3aSMatthias Ringwaldconst char * atwilc3000_fw_name = "BASENAME"; 41*44149d3aSMatthias Ringwald 42*44149d3aSMatthias Ringwaldconst uint8_t atwilc3000_fw_data[] = { 43*44149d3aSMatthias Ringwald''' 44*44149d3aSMatthias Ringwald 45*44149d3aSMatthias Ringwaldcode_end = ''' 46*44149d3aSMatthias Ringwald}; 47*44149d3aSMatthias Ringwaldconst uint32_t atwilc3000_fw_size = sizeof(atwilc3000_fw_data); 48*44149d3aSMatthias Ringwald''' 49*44149d3aSMatthias Ringwald 50*44149d3aSMatthias Ringwalddef convert_bin(basename): 51*44149d3aSMatthias Ringwald bin_name = basename + '.bin' 52*44149d3aSMatthias Ringwald print ('Reading %s' % bin_name) 53*44149d3aSMatthias Ringwald 54*44149d3aSMatthias Ringwald with open (bin_name, 'rb') as fin: 55*44149d3aSMatthias Ringwald firm = fin.read() 56*44149d3aSMatthias Ringwald size = len(firm) 57*44149d3aSMatthias Ringwald print ('Size %u', size) 58*44149d3aSMatthias Ringwald 59*44149d3aSMatthias Ringwald with open(basename + '.h', 'w') as fout: 60*44149d3aSMatthias Ringwald fout.write(header.replace('BASENAME',basename)); 61*44149d3aSMatthias Ringwald 62*44149d3aSMatthias Ringwald with open(basename + '.c', 'w') as fout: 63*44149d3aSMatthias Ringwald fout.write(code_start.replace('BASENAME',basename)); 64*44149d3aSMatthias Ringwald fout.write(' ') 65*44149d3aSMatthias Ringwald for i in range(0,size): 66*44149d3aSMatthias Ringwald if i % 10000 == 0: 67*44149d3aSMatthias Ringwald print ('- Write %05u/%05u' % (i, size)) 68*44149d3aSMatthias Ringwald byte = ord(firm[i]) 69*44149d3aSMatthias Ringwald fout.write("0x{0:02x}, ".format(byte)) 70*44149d3aSMatthias Ringwald if (i & 0x0f) == 0x0f: 71*44149d3aSMatthias Ringwald fout.write('\n ') 72*44149d3aSMatthias Ringwald fout.write(code_end); 73*44149d3aSMatthias Ringwald print ('Done\n') 74*44149d3aSMatthias Ringwald 75*44149d3aSMatthias Ringwaldfiles = glob.glob('*.bin') 76*44149d3aSMatthias Ringwaldif not files: 77*44149d3aSMatthias Ringwald print(usage) 78*44149d3aSMatthias Ringwald sys.exit(1) 79*44149d3aSMatthias Ringwald 80*44149d3aSMatthias Ringwald# convert each of them 81*44149d3aSMatthias Ringwaldfor name in files: 82*44149d3aSMatthias Ringwald basename = name.replace('.bin','') 83*44149d3aSMatthias Ringwald convert_bin(basename) 84