aboutsummaryrefslogtreecommitdiff
path: root/circuitpython/lib/tinyusb/tools/mksunxi.py
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2022-06-19 19:47:51 +0530
committerRaghuram Subramani <raghus2247@gmail.com>2022-06-19 19:47:51 +0530
commit4fd287655a72b9aea14cdac715ad5b90ed082ed2 (patch)
tree65d393bc0e699dd12d05b29ba568e04cea666207 /circuitpython/lib/tinyusb/tools/mksunxi.py
parent0150f70ce9c39e9e6dd878766c0620c85e47bed0 (diff)
add circuitpython code
Diffstat (limited to 'circuitpython/lib/tinyusb/tools/mksunxi.py')
-rw-r--r--circuitpython/lib/tinyusb/tools/mksunxi.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/circuitpython/lib/tinyusb/tools/mksunxi.py b/circuitpython/lib/tinyusb/tools/mksunxi.py
new file mode 100644
index 0000000..04786f4
--- /dev/null
+++ b/circuitpython/lib/tinyusb/tools/mksunxi.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python3
+import sys
+import struct
+
+def align(num, alignment):
+ if num % alignment != 0:
+ num += (alignment - num % alignment)
+ return num
+
+
+def process_file(input, output):
+ with open(input, 'rb') as fin:
+ content = bytearray(fin.read())
+
+ align_value = 512
+ padded_length = align(len(content), align_value)
+ # pad file to actual length
+ content += b'\x00' * (padded_length - len(content))
+
+ struct_format = '<L8sLL'
+ (instruction, magic, checksum, length) = struct.unpack_from(struct_format, content)
+
+ if magic != b'eGON.BT0':
+ print("Magic is invalid:", magic)
+ return 2
+
+ checksum = 0x5F0A6C39
+ length = align(length, align_value)
+
+ struct.pack_into(struct_format, content, 0, instruction, magic, checksum, length)
+
+ checksum = 0
+ for i in range(0, length, 4):
+ (n, ) = struct.unpack_from('<L', content, i)
+ checksum += n
+ checksum %= 4294967296
+
+ struct.pack_into(struct_format, content, 0, instruction, magic, checksum, length)
+
+ with open(output, 'wb') as fout:
+ fout.write(content)
+ return 0
+
+if __name__ == "__main__":
+ if len(sys.argv) != 3:
+ print("Usage: mksunxi.py input.bin output.bin")
+ exit(1)
+ exit(process_file(sys.argv[1], sys.argv[2])) \ No newline at end of file