diff --git a/Bootup Logo/Logos/IronOS.dfu b/Bootup Logo/Logos/IronOS.dfu new file mode 100644 index 00000000..cc41cce2 Binary files /dev/null and b/Bootup Logo/Logos/IronOS.dfu differ diff --git a/Bootup Logo/Logos/Pinecil.bin b/Bootup Logo/Logos/Pinecil.dfu similarity index 66% rename from Bootup Logo/Logos/Pinecil.bin rename to Bootup Logo/Logos/Pinecil.dfu index 5d3834a6..bfa0f10a 100644 Binary files a/Bootup Logo/Logos/Pinecil.bin and b/Bootup Logo/Logos/Pinecil.dfu differ diff --git a/Bootup Logo/Logos/Pinecil_L.bin b/Bootup Logo/Logos/Pinecil_L.dfu similarity index 69% rename from Bootup Logo/Logos/Pinecil_L.bin rename to Bootup Logo/Logos/Pinecil_L.dfu index f6e4ec00..5142a4e2 100644 Binary files a/Bootup Logo/Logos/Pinecil_L.bin and b/Bootup Logo/Logos/Pinecil_L.dfu differ diff --git a/Bootup Logo/python_logo_converter/img2ts100.py b/Bootup Logo/python_logo_converter/img2ts100.py index 3759c153..3e5239fb 100644 --- a/Bootup Logo/python_logo_converter/img2ts100.py +++ b/Bootup Logo/python_logo_converter/img2ts100.py @@ -1,8 +1,7 @@ #!/usr/bin/env python # coding=utf-8 from __future__ import division -import os -import sys +import os, sys, struct, zlib try: @@ -13,7 +12,7 @@ except ImportError as error: "management tool." .format(error, sys.argv[0])) -VERSION_STRING = '0.02' +VERSION_STRING = '0.03' LCD_WIDTH = 96 LCD_HEIGHT = 16 @@ -26,12 +25,23 @@ INTELHEX_EXTENDED_LINEAR_ADDRESS_RECORD = 0x04 INTELHEX_BYTES_PER_LINE = 16 INTELHEX_MINIMUM_SIZE = 4096 +DFU_PINECIL_ALT = 0 +DFU_PINECIL_VENDOR = 0x28e9 +DFU_PINECIL_PRODUCT = 0x0189 +DFU_LOGO_ADDRESS = 0x0801F800 +DFU_TARGET_NAME = b"Pinecil" +DFU_PREFIX_SIZE = 11 +DFU_SUFFIX_SIZE = 16 def split16(word): """return high and low byte of 16-bit word value as tuple""" return (word >> 8) & 0xff, word & 0xff +def compute_crc(data): + return 0xFFFFFFFF & -zlib.crc32(data) - 1 + + def intel_hex_line(record_type, offset, data): """generate a line of data in Intel hex format""" # length, address offset, record type @@ -82,6 +92,32 @@ def intel_hex(file, bytes_, start_address=0x0): write(intel_hex_line(INTELHEX_END_OF_FILE_RECORD, 0, ())) +def build_dfu(file, bytes_): + data = b"" + for byte in bytes_: + data += byte.to_bytes(1, byteorder="big") + + data = ( + struct.pack("<2I", DFU_LOGO_ADDRESS, len(data)) + data + ) + data = ( + struct.pack( + "<6sBI255s2I", b"Target", DFU_PINECIL_ALT, 1, DFU_TARGET_NAME, len(data), 1 + ) + + data + ) + data = ( + struct.pack( + "<5sBIB", b"DfuSe", 1, DFU_PREFIX_SIZE + len(data) + DFU_SUFFIX_SIZE, 1 + ) + + data + ) + data += struct.pack("<4H3sB", 0, DFU_PINECIL_PRODUCT, DFU_PINECIL_VENDOR, 0x011A, b"UFD", DFU_SUFFIX_SIZE) + crc = compute_crc(data) + data += struct.pack("