From 6187a8a0c1dd97058db8c08911fed670d5e43b66 Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Sat, 1 Apr 2017 18:28:10 +0200 Subject: [PATCH] build: refactor build_vendorheader --- .gitignore | 1 + Makefile.firmware | 3 ++ micropython/firmware/.gitignore | 1 + tools/build_vendorheader | 77 +++++---------------------------- tools/png2toi | 54 +++++++++++++---------- 5 files changed, 45 insertions(+), 91 deletions(-) diff --git a/.gitignore b/.gitignore index db775d997..880af0108 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ _attic/ vendor/src/ emu.config +__pycache__ diff --git a/Makefile.firmware b/Makefile.firmware index da74b1622..7c6128750 100644 --- a/Makefile.firmware +++ b/Makefile.firmware @@ -400,6 +400,9 @@ QSTR_GEN_EXTRA_CFLAGS += -DNO_QSTR -DN_X64 -DN_X86 -DN_THUMB -DN_ARM -DN_XTENSA all: $(BUILD)/$(TARGET).bin +$(SRCDIR_FW)/firmware/vendorheader.bin: assets/satoshilabs.png + ./tools/build_vendorheader '0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000' 2 1.1 SatoshiLabs assets/satoshilabs.png micropython/firmware/vendorheader.bin + $(BUILD_FW)/firmware/vendorheader.o: $(SRCDIR_FW)/firmware/vendorheader.bin $(Q)$(OBJCOPY) -I binary -O elf32-littlearm -B arm \ --rename-section .data=.vendorheader,alloc,load,readonly,contents \ diff --git a/micropython/firmware/.gitignore b/micropython/firmware/.gitignore index 567609b12..ef13ad637 100644 --- a/micropython/firmware/.gitignore +++ b/micropython/firmware/.gitignore @@ -1 +1,2 @@ build/ +vendorheader.bin diff --git a/tools/build_vendorheader b/tools/build_vendorheader index 1df7255f1..e3e20a102 100755 --- a/tools/build_vendorheader +++ b/tools/build_vendorheader @@ -1,71 +1,15 @@ #!/usr/bin/env python3 -from PIL import Image import sys -import re import struct -import zlib +import re import binascii +import os +import imp -def process_rgb(w, h, pix): - data = bytes() - for j in range(h): - for i in range(w): - r, g, b = pix[i, j] - c = ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xF8) >> 3) - data += struct.pack('>H', c) - return data - - -def process_grayscale(w, h, pix): - data = bytes() - for j in range(h): - for i in range(w // 2): - l1, l2 = pix[i * 2, j], pix[i * 2 + 1, j] - c = (l1 & 0xF0) | (l2 >> 4) - data += struct.pack('>B', c) - return data - - -def process_image(ifn): - im = Image.open(ifn) - w, h = im.size - print('Opened %s ... %d x %d @ %s' % (ifn, w, h, im.mode)) - - if im.mode == 'RGB': - print('Detected RGB mode') - elif im.mode == 'L': - if w % 2 > 0: - print('PNG file must have width divisible by 2') - return 3 - print('Detected GRAYSCALE mode') - else: - print('Unknown mode:', im.mode) - return 4 - - pix = im.load() - - if im.mode == 'RGB': - ofn = '%s.toif' % ifn[:-4] - pixeldata = process_rgb(w, h, pix) - else: - ofn = '%s.toig' % ifn[:-4] - pixeldata = process_grayscale(w, h, pix) - z = zlib.compressobj(level=9, wbits=10) - zdata = z.compress(pixeldata) + z.flush() - zdata = zdata[2:-4] # strip header and checksum - - toif = b'' - if im.mode == 'RGB': - toif += b'TOIf' - else: - toif += b'TOIg' - toif += struct.pack('