1*6f6f8b16SMatthias Ringwald#!/usr/bin/env python3 269e3d973SMatthias Ringwald# BlueKitchen GmbH (c) 2017 369e3d973SMatthias Ringwaldimport sys 444149d3aSMatthias Ringwald 544149d3aSMatthias Ringwaldusage = '''This script converts the HCI Firmware in .bin format for Atmel WILC3000 644149d3aSMatthias Ringwaldinto C files to be used with BTstack. 769e3d973SMatthias Ringwald 869e3d973SMatthias RingwaldUsage: 969e3d973SMatthias Ringwald$ ./convert_firmware_bin.py firmware.bin 1044149d3aSMatthias Ringwald''' 1144149d3aSMatthias Ringwald 1244149d3aSMatthias Ringwaldheader = ''' 1344149d3aSMatthias Ringwald/** 1444149d3aSMatthias Ringwald * BASENAME.h converted from BASENAME.bin 1544149d3aSMatthias Ringwald */ 1644149d3aSMatthias Ringwald 1780e33422SMatthias Ringwald#ifndef BASENAME_H 1880e33422SMatthias Ringwald#define BASENAME_H 1944149d3aSMatthias Ringwald 2044149d3aSMatthias Ringwald#include <stdint.h> 2144149d3aSMatthias Ringwald 2244149d3aSMatthias Ringwaldextern const uint8_t atwilc3000_fw_data[]; 2344149d3aSMatthias Ringwaldextern const uint32_t atwilc3000_fw_size; 2444149d3aSMatthias Ringwaldextern const char * atwilc3000_fw_name; 2544149d3aSMatthias Ringwald 2644149d3aSMatthias Ringwald#endif 2744149d3aSMatthias Ringwald''' 2844149d3aSMatthias Ringwald 2944149d3aSMatthias Ringwaldcode_start = ''' 3044149d3aSMatthias Ringwald/** 3144149d3aSMatthias Ringwald * BASENAME.c converted from BASENAME.bin 3244149d3aSMatthias Ringwald */ 3344149d3aSMatthias Ringwald 3444149d3aSMatthias Ringwald#include "BASENAME.h" 3544149d3aSMatthias Ringwald 3644149d3aSMatthias Ringwaldconst char * atwilc3000_fw_name = "BASENAME"; 3744149d3aSMatthias Ringwald 3844149d3aSMatthias Ringwaldconst uint8_t atwilc3000_fw_data[] = { 3944149d3aSMatthias Ringwald''' 4044149d3aSMatthias Ringwald 4144149d3aSMatthias Ringwaldcode_end = ''' 4244149d3aSMatthias Ringwald}; 4344149d3aSMatthias Ringwaldconst uint32_t atwilc3000_fw_size = sizeof(atwilc3000_fw_data); 4444149d3aSMatthias Ringwald''' 4544149d3aSMatthias Ringwald 4644149d3aSMatthias Ringwalddef convert_bin(basename): 4744149d3aSMatthias Ringwald bin_name = basename + '.bin' 4844149d3aSMatthias Ringwald print ('Reading %s' % bin_name) 4944149d3aSMatthias Ringwald 5044149d3aSMatthias Ringwald with open (bin_name, 'rb') as fin: 5144149d3aSMatthias Ringwald firm = fin.read() 5244149d3aSMatthias Ringwald size = len(firm) 5344149d3aSMatthias Ringwald print ('Size %u', size) 5444149d3aSMatthias Ringwald 5544149d3aSMatthias Ringwald with open(basename + '.h', 'w') as fout: 5644149d3aSMatthias Ringwald fout.write(header.replace('BASENAME',basename)); 5744149d3aSMatthias Ringwald 5844149d3aSMatthias Ringwald with open(basename + '.c', 'w') as fout: 5944149d3aSMatthias Ringwald fout.write(code_start.replace('BASENAME',basename)); 6044149d3aSMatthias Ringwald fout.write(' ') 6144149d3aSMatthias Ringwald for i in range(0,size): 6244149d3aSMatthias Ringwald if i % 10000 == 0: 6344149d3aSMatthias Ringwald print ('- Write %05u/%05u' % (i, size)) 6444149d3aSMatthias Ringwald byte = ord(firm[i]) 6544149d3aSMatthias Ringwald fout.write("0x{0:02x}, ".format(byte)) 6644149d3aSMatthias Ringwald if (i & 0x0f) == 0x0f: 6744149d3aSMatthias Ringwald fout.write('\n ') 6844149d3aSMatthias Ringwald fout.write(code_end); 6944149d3aSMatthias Ringwald print ('Done\n') 7044149d3aSMatthias Ringwald 7169e3d973SMatthias Ringwald# check usage: 1 param 7269e3d973SMatthias Ringwaldif not len(sys.argv) == 2: 7344149d3aSMatthias Ringwald print(usage) 7444149d3aSMatthias Ringwald sys.exit(1) 7544149d3aSMatthias Ringwald 7669e3d973SMatthias Ringwaldname = sys.argv[1] 7744149d3aSMatthias Ringwaldbasename = name.replace('.bin','') 7844149d3aSMatthias Ringwaldconvert_bin(basename) 79