summaryrefslogtreecommitdiff
path: root/hardware/fw/tools/gen_cmsis_exports.py
blob: ba3422b7fbe5535d956728ea92ef2f6645d7be31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env python3
import re
import os

if __name__ == '__main__':
    import argparse

    parser = argparse.ArgumentParser()
    parser.add_argument('cmsis_device_header', nargs='+', type=argparse.FileType('rb'))
    args = parser.parse_args()
    
    print('#ifndef __GENERATED_CMSIS_HEADER_EXPORTS__')
    print('#define __GENERATED_CMSIS_HEADER_EXPORTS__')
    print()
    for header in args.cmsis_device_header:
        lines = header.readlines()
        name = os.path.basename(header.name)
        print('#include <{}>'.format(name))
        print()

        print('/* {} */'.format(name))
        for l in lines:
            match = re.match(b'^#define (\w+)\s+\W*(\w+_TypeDef|\w+_Type).*$', l)
            if match:
                inst, typedef = match.groups()
                inst, typedef = inst.decode(), typedef.decode()
                print('{} *{} = {};'.format(typedef, inst.lower(), inst))
        print()
    print('#endif//__GENERATED_CMSIS_HEADER_EXPORTS__')