btstack/chipset/csr/convert_psr.py
2020-08-10 16:20:51 +02:00

86 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
# BlueKitchen GmbH (c) 2019
import sys
usage = '''
CSR/Qualcomm PSR conversion tool for use with BTstack
Copyright 2019 BlueKitchen GmbH
Usage:
$ ./convert_prs.py file.prs
'''
msg_seqno = 0
indent = ' '
def write_verbatim(fout, text):
fout.write(text + '\n')
def write_set_varid_cmd(fout, varid, msg_payload):
global msg_seqno
# msg_payload must be at least 4 uint16
while len(msg_payload) < 4:
msg_payload.append(0)
# setup msg
msg_type = 0x0002
msg_len = 5 + len(msg_payload)
msg_seqno += 1
msg_status = 0
msg = [msg_type, msg_len, msg_seqno, varid, msg_status] + msg_payload
# setup hci command
hci_payload_descriptor = 0xc2
hci_param_len = len(msg) * 2 + 1
hci_cmd = [ 0x00, 0xfc, hci_param_len, hci_payload_descriptor]
# convert list of uint16_t to sequence of uint8_t in little endian
for value in msg:
hci_cmd.append(value & 0xff)
hci_cmd.append(value >> 8)
fout.write(indent + ', '.join(["0x%02x" % val for val in hci_cmd]) + ',\n')
def write_key(fout, key, value):
# setup ps command
payload_len = len(value)
stores = 0x0008 # psram
ps_cmd = [key, payload_len, stores] + value
# write ps command
write_set_varid_cmd(fout, 0x7003, ps_cmd)
def write_warm_reset(fout):
write_verbatim(fout, indent + "// WarmReset")
write_set_varid_cmd(fout, 0x4002, [])
# check args
if len(sys.argv) != 2:
print(usage)
sys.exit(1)
prs_file = sys.argv[1]
fout = sys.stdout
with open (prs_file, 'rt') as fin:
for line_with_nl in fin:
line = line_with_nl.strip()
if line.startswith('&'):
# pskey
parts = line.split('=')
key = int(parts[0].strip().replace('&','0x'), 16)
value = [int('0x'+i, 16) for i in parts[1].strip().split(' ')]
write_key(fout, key, value)
elif line.startswith('#'):
#ifdef, ..
write_verbatim(fout, line)
else:
# comments
write_verbatim(fout, indent + line)
write_warm_reset(fout)