mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-01-07 19:01:06 +00:00
87 lines
2.0 KiB
Python
Executable File
87 lines
2.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# BlueKitchen GmbH (c) 2012-2014
|
|
|
|
# avr-objcopy -I ihex -O binary hci_581_active_uart.hex hci_581_active_uart.bin
|
|
|
|
# requires IntelHex package https://pypi.python.org/pypi/IntelHex
|
|
# docs: http://python-intelhex.readthedocs.io/en/latest/
|
|
|
|
from intelhex import IntelHex
|
|
import glob
|
|
|
|
usage = '''This script converts the HCI Firmware in .hex format for Dialog Semiconductor
|
|
into C files to be used with BTstack.
|
|
'''
|
|
|
|
header = '''
|
|
/**
|
|
* BASENAME.h converted from BASENAME.hex
|
|
*/
|
|
|
|
#ifndef __BASENAME_H
|
|
#define __BASENAME_H
|
|
|
|
#include <stdint.h>
|
|
|
|
extern const uint8_t da14581_fw_data[];
|
|
extern const uint32_t da14581_fw_size;
|
|
extern const char * da14581_fw_name;
|
|
|
|
#endif
|
|
'''
|
|
|
|
code_start = '''
|
|
/**
|
|
* BASENAME.c converted from BASENAME.hex
|
|
*/
|
|
|
|
#include "BASENAME.h"
|
|
|
|
const char * da14581_fw_name = "BASENAME";
|
|
|
|
const uint8_t da14581_fw_data[] = {
|
|
'''
|
|
|
|
code_end = '''
|
|
};
|
|
const uint32_t da14581_fw_size = sizeof(da14581_fw_data);
|
|
'''
|
|
|
|
def convert_hex(basename):
|
|
hex_name = basename + '.hex'
|
|
print ('Reading %s' % hex_name)
|
|
ih = IntelHex(hex_name)
|
|
# f = open(basename + '.txt', 'w') # open file for writing
|
|
# ih.dump(f) # dump to file object
|
|
# f.close() # close file
|
|
size = ih.maxaddr() - ih.minaddr() + 1
|
|
print '- Start: %x' % ih.minaddr()
|
|
print '- End: %x' % ih.maxaddr()
|
|
|
|
with open(basename + '.h', 'w') as fout:
|
|
fout.write(header.replace('BASENAME',basename));
|
|
|
|
with open(basename + '.c', 'w') as fout:
|
|
fout.write(code_start.replace('BASENAME',basename));
|
|
fout.write(' ')
|
|
for i in range(0,size):
|
|
if i % 1000 == 0:
|
|
print ('- Write %05u/%05u' % (i, size))
|
|
byte = ih[ih.minaddr() + i]
|
|
fout.write("0x{0:02x}, ".format(byte))
|
|
if (i & 0x0f) == 0x0f:
|
|
fout.write('\n ')
|
|
fout.write(code_end);
|
|
print ('Done\n')
|
|
|
|
|
|
files = glob.glob('*.hex')
|
|
if not files:
|
|
print(usage)
|
|
sys.exit(1)
|
|
|
|
# convert each of them
|
|
for name in files:
|
|
basename = name.replace('.hex','')
|
|
convert_hex(basename)
|