Unverified Commit b6206e83 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Add Bad Apple on ATMega2560 (not working very well)

Looks like these devices can only use the lower 64 kB as PROGMEM, so the
whole exercise is kinda pointless. Also inflate() is slow af.
parent 0d6dfd6e
Loading
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
# Copyright 2020 Birte Kristina Friesel
#
# SPDX-License-Identifier: CC0-1.0

prompt "Bad Apple on ATMega2560 + SSD1306 128x32 OLED"
depends on arch_atmega2560
depends on meta_driver_timer
depends on driver_ssd1306 && driver_ssd1306_mode_horizontal
depends on lib_inflate && lib_inflate_lut
depends on !loop
depends on !wakeup
+5 −0
Original line number Diff line number Diff line
# vim:ft=make
#
# Copyright 2020 Birte Kristina Friesel
#
# SPDX-License-Identifier: CC0-1.0
+17 −0
Original line number Diff line number Diff line
#!/bin/sh

# [size=WxH] ./convert.sh <file> -r <frame rate> [additional ffmpeg args]

set -eu

mkdir -p tmp

ffmpeg -i "$@" tmp/frame%4d.png

parallel mogrify -resize "${size:-128x32}" -threshold 50% -- tmp/*.png

echo "#include <avr/pgmspace.h>" > frames.cc
echo "const unsigned char frame_rate = $3;" >> frames.cc
./frames-to-cc tmp/*.png >> frames.cc

rm -rf tmp
+37 −0
Original line number Diff line number Diff line
#!/usr/bin/env python3

from PIL import Image
import os
import sys
import zlib

buf_w, buf_h = map(int, os.getenv("size", "128x32").split("x"))


def load_image(filename):
    im = Image.open(filename)
    w, h = im.size
    buf = [0 for i in range(buf_w * buf_h // 8)]
    for y in range(min(h, buf_h)):
        for x in range(min(w, buf_w)):
            if im.getpixel((x, y)):
                buf[(y // 8) * buf_w + x] |= 1 << (y % 8)
    return buf


for i in range(1, len(sys.argv) - 2):
    buf = load_image(sys.argv[i])
    c_buf = ",".join(map(str, buf))
    z_buf = zlib.compress(bytes(buf), 9)
    z_buf = z_buf[2:-4]
    out_buf = ",".join(map(str, z_buf))
    print(f"unsigned char const PROGMEM frame{i:04d}[] = {{ {len(z_buf)}, {out_buf} }};")

frames = list()
for i in range(1, len(sys.argv) - 2):
    frames.append(f"frame{i:04d}")

prefix = "const unsigned char* const frames[] PROGMEM = {"
postfix = "};"

print(prefix + ", ".join(frames) + postfix)
+879 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading