xref: /btstack/tool/uuid128_formats.py (revision 5c54401929043df982e040eba652f5fd7763ce15)
1*5c544019SMatthias Ringwald#!/usr/bin/env python3
2aa487f40SMatthias Ringwald#
3aa487f40SMatthias Ringwald# Parase and dump UUID128 in various formats
4aa487f40SMatthias Ringwald
5aa487f40SMatthias Ringwaldimport codecs
6aa487f40SMatthias Ringwaldimport io
7aa487f40SMatthias Ringwaldimport os
8aa487f40SMatthias Ringwaldimport re
9aa487f40SMatthias Ringwaldimport string
10aa487f40SMatthias Ringwaldimport sys
11aa487f40SMatthias Ringwald
12aa487f40SMatthias Ringwaldusage = '''
13aa487f40SMatthias RingwaldUsage: ./uuid128_formats.py UUID128
14aa487f40SMatthias Ringwald'''
15aa487f40SMatthias Ringwald
16aa487f40SMatthias Ringwalddef twoByteLEFor(value):
17aa487f40SMatthias Ringwald    return [ (value & 0xff), (value >> 8)]
18aa487f40SMatthias Ringwald
19aa487f40SMatthias Ringwalddef parseUUID128(uuid):
20aa487f40SMatthias Ringwald    parts = re.match("([0-9A-Fa-f]{4})([0-9A-Fa-f]{4})-([0-9A-Fa-f]{4})-([0-9A-Fa-f]{4})-([0-9A-Fa-f]{4})-([0-9A-Fa-f]{4})([0-9A-Fa-f]{4})([0-9A-Fa-f]{4})", uuid)
21aa487f40SMatthias Ringwald    uuid_bytes = []
22aa487f40SMatthias Ringwald    for i in range(8, 0, -1):
23aa487f40SMatthias Ringwald        uuid_bytes = uuid_bytes + twoByteLEFor(int(parts.group(i),16))
24aa487f40SMatthias Ringwald    return uuid_bytes
25aa487f40SMatthias Ringwald
26aa487f40SMatthias Ringwaldif (len(sys.argv) < 2):
27aa487f40SMatthias Ringwald    print(usage)
28aa487f40SMatthias Ringwald    sys.exit(1)
29aa487f40SMatthias Ringwald
30aa487f40SMatthias Ringwalduuid128 = sys.argv[1]
31aa487f40SMatthias Ringwalduuid_bytes = parseUUID128(uuid128)
32aa487f40SMatthias Ringwaldprint('UUID128:       %s' % uuid128)
33aa487f40SMatthias Ringwaldprint('little endian: %s' % ', '.join( [hex(i) for i in uuid_bytes] ))
34aa487f40SMatthias Ringwaldprint('big endian:    %s' % ', '.join( [hex(i) for i in reversed(uuid_bytes)] ))
35