mirror of
https://github.com/tillitis/tillitis-key1.git
synced 2024-12-26 16:09:42 -05:00
57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
def descriptor_to_string(descriptor):
|
||
|
""" Convert a bytes object containing a USB string descriptor into a python string"""
|
||
|
bLength = descriptor[0]
|
||
|
if bLength != len(descriptor):
|
||
|
raise Exception('Descriptor length mismatch, length_field:{} actual_length:{}'.format(
|
||
|
bLength,
|
||
|
len(descriptor)
|
||
|
))
|
||
|
|
||
|
bDescriptorType = descriptor[1]
|
||
|
if bDescriptorType != 0x03:
|
||
|
raise Exception('Descriptor type mismatch, bDescriptorType:{02x} expected:0x03'.format(
|
||
|
bDescriptorType
|
||
|
))
|
||
|
|
||
|
return descriptor[2:].decode('utf-16', errors='strict')
|
||
|
|
||
|
def string_to_descriptor(string):
|
||
|
""" Convert a python string into a bytes object containing a USB string descriptor"""
|
||
|
descriptor = bytearray()
|
||
|
descriptor.append(0x00) # placeholder for length
|
||
|
descriptor.append(0x03)
|
||
|
descriptor.extend(string.encode('utf-16')[2:]) # crop the BOM
|
||
|
descriptor[0] = len(descriptor)
|
||
|
|
||
|
return bytes(descriptor)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
manufacturer = 'Tillitis'
|
||
|
product = 'MTA1-USB-V1'
|
||
|
serial = "68de5d27-e223-4874-bc76-a54d6e84068f"
|
||
|
|
||
|
with open('usb_strings.h', 'w') as f:
|
||
|
f.write('#ifndef USB_STRINGS\n')
|
||
|
f.write('#define USB_STRINGS\n')
|
||
|
|
||
|
f.write('unsigned char __code Prod_Des[]={{ // "{}"\n'.format(product))
|
||
|
f.write(' ')
|
||
|
f.write(', '.join(['0x{:02x}'.format(i) for i in string_to_descriptor(product)]))
|
||
|
f.write('\n};\n\n')
|
||
|
|
||
|
f.write('unsigned char __code Manuf_Des[]={{ // "{}"\n'.format(manufacturer))
|
||
|
f.write(' ')
|
||
|
f.write(', '.join(['0x{:02x}'.format(i) for i in string_to_descriptor(manufacturer)]))
|
||
|
f.write('\n};\n\n')
|
||
|
|
||
|
f.write('unsigned char __code SerDes[]={{ // "{}"\n'.format(serial))
|
||
|
f.write(' ')
|
||
|
f.write(', '.join(['0x{:02x}'.format(i) for i in string_to_descriptor(serial)]))
|
||
|
f.write('\n};\n\n')
|
||
|
|
||
|
|
||
|
f.write('#endif\n')
|