Something went wrong on our end
Forked from an inaccessible project.
-
Robin.Mueller authoredRobin.Mueller authored
binary_writer.py 1.82 KiB
import os
import struct
from glob import glob
def main():
"""
Was written to assign sixth arm vector to binary size for bootloader.
@return:
"""
# Parse for binaries
file_path = file_selector("../../_bin", '*.bin')
file_size = os.path.getsize(file_path)
print("File size: " + str(file_size))
size_uint32 = struct.pack("<I", file_size)
print("File size as uint32: " + ' '.join(map('{:02X}'.format, size_uint32)))
with open(file_path, "rb+") as file:
# Read the first seven ARM vectors. The sixth one will be replaced.
arm_vectors = file.read(4 * 7)
print("ARM vectors: ")
# print(''.join('{:02x}'.format(x) for x in arm_vectors))
for x in range(0, 28, 4):
print(' '.join(map('{:02X}'.format, arm_vectors[x:x + 4])))
file.seek(5*4)
file.write(size_uint32)
file.seek(0)
arm_vectors = file.read(4 * 7)
print("New ARM vector: ")
for x in range(0, 28, 4):
print(' '.join(map('{:02X}'.format, arm_vectors[x:x + 4])))
pass
def file_selector(path: str, pattern: str) -> str:
result = [y for x in os.walk(path) for y in glob(os.path.join(x[0], pattern))]
print("Files found in _bin folder: ")
for idx, path in enumerate(result):
print("Selection " + str(idx) + ": " + str(path))
selection = input("Please enter desired selection [c to cancel]: ")
while True:
if selection == 'c':
return ""
if not selection.isdigit():
selection = input("Invalid input, try again [c to cancel]: ")
if selection.isdigit():
if int(selection) < len(result):
return result[int(selection)]
else:
selection = input("Invalid input, try again [c to cancel]: ")
if __name__ == "__main__":
main()