mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-01-08 12:50:52 +00:00
88 lines
2.2 KiB
Python
Executable File
88 lines
2.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# BlueKitchen GmbH (c) 2018
|
|
import sys
|
|
|
|
usage = '''This script converts a set of configurations and patches in .emp format for EM9304
|
|
into a single C files to be used with BTstack. It also configures the controller for 8 connections
|
|
and enables support for LE Data Length Extension.
|
|
|
|
Usage:
|
|
$ ./convert_emp.py container.emp
|
|
'''
|
|
|
|
header = '''/**
|
|
* BASENAME.h converted from BASENAME.emp
|
|
*/
|
|
|
|
#ifndef BASENAME_H
|
|
#define BASENAME_H
|
|
|
|
#include <stdint.h>
|
|
extern const uint8_t container_blob_data[];
|
|
extern const uint32_t container_blob_size;
|
|
extern const char * container_blob_name;
|
|
|
|
#endif
|
|
'''
|
|
|
|
code_start = '''/**
|
|
* BASENAME.c converted from BASENAME.bin
|
|
* Size: SIZE bytes
|
|
*
|
|
* BTstack: added config for 8 connections + 251 packet len
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
|
|
const char * container_blob_name = "BASENAME";
|
|
|
|
const uint8_t container_blob_data[] = {
|
|
'''
|
|
|
|
code_end = '''
|
|
// configure EM9304 for 8 connections, data length 251
|
|
0x33, 0x39, 0x6d, 0x65, 0x24, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x14,
|
|
0x11, 0x0c, 0x00, 0x00, 0x56, 0x62, 0xc3, 0xd4, 0x30, 0x02, 0x00, 0x00,
|
|
0xfb, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x5a, 0x00, 0x0c, 0xf3
|
|
|
|
};
|
|
const uint32_t container_blob_size = sizeof(container_blob_data);
|
|
'''
|
|
|
|
def convert_emp(basename):
|
|
emp_name = basename + '.emp'
|
|
print ('Reading %s' % emp_name)
|
|
|
|
with open (emp_name, 'rb') as fin:
|
|
firm = fin.read()
|
|
size = len(firm)
|
|
|
|
# reduce size by 4 as it ends with four zero bytes that indicate the end of the file
|
|
size -= 4
|
|
|
|
# don't write .h file as we would need to store its name in btstack_chipset_em9301.c, too
|
|
# 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).replace('SIZE',str(size)));
|
|
fout.write(' ')
|
|
for i in range(0,size):
|
|
if i % 1000 == 0:
|
|
print ('- Write %05u/%05u' % (i, size))
|
|
byte = firm[i]
|
|
fout.write("0x{0:02x}, ".format(byte))
|
|
if (i & 0x0f) == 0x0f:
|
|
fout.write('\n ')
|
|
fout.write(code_end);
|
|
print ('Done\n')
|
|
|
|
# check usage: 1 param
|
|
if not len(sys.argv) == 2:
|
|
print(usage)
|
|
sys.exit(1)
|
|
|
|
name = sys.argv[1]
|
|
basename = name.replace('.emp','')
|
|
convert_emp(basename)
|