#!/usr/bin/env python3 import os import struct from zlib import crc32 from flipper.app import App class Main(App): def init(self): self.parser.add_argument("-i", "--input", help=".bin input path", required=True) self.parser.add_argument( "-o", "--output", help=".dfu output path", required=True ) self.parser.add_argument( "-a", "--address", help="Flash address", type=lambda x: int(x, 0), required=True, ) self.parser.add_argument( "-l", "--label", help="DFU Target label", required=True ) self.parser.add_argument( "--vid", help="USB Vendor ID", default=0x0483, type=lambda x: int(x, 0) ) self.parser.add_argument( "--pid", help="USB Product ID", default=0xDF11, type=lambda x: int(x, 0) ) self.parser.set_defaults(func=self.convert) def convert(self): if not os.path.exists(self.args.input): self.logger.error(f'"{self.args.input}" does not exist') return 1 with open(self.args.input, mode="rb") as file: bin = file.read() data = struct.pack("