| 174 | |
| 175 | |
| 176 | def build_header_text(src_name: str, settings: ConvertSettings, result: ConversionResult) -> str: |
| 177 | lines = [ |
| 178 | "#pragma once", |
| 179 | "#include <Arduino.h>", |
| 180 | "#include <pgmspace.h>", |
| 181 | "", |
| 182 | "#define IMAGE_POINTS_HAS_FRAMES 1", |
| 183 | f"// Generated from: {src_name}", |
| 184 | f"// Fit area: {settings.target_w}x{settings.target_h}, offset: {settings.offset_x},{settings.offset_y}", |
| 185 | f"// Invert mode: {settings.invert_mode}", |
| 186 | f"// Fit mode: {settings.fit_mode}, dither: {settings.dither_mode}", |
| 187 | f"// Sample step: {settings.sample_step}, max points/frame: {settings.max_points_per_frame}", |
| 188 | f"// Frames: {len(result.frames)}, total points: {len(result.flat_points)}", |
| 189 | "", |
| 190 | "struct ImagePoint {", |
| 191 | " int16_t x;", |
| 192 | " int16_t y;", |
| 193 | " uint8_t shade;", |
| 194 | "};", |
| 195 | "", |
| 196 | f"constexpr uint16_t IMAGE_FRAME_COUNT = {len(result.frames)};", |
| 197 | f"constexpr uint32_t IMAGE_POINT_COUNT = {len(result.flat_points)}UL;", |
| 198 | "const uint32_t IMAGE_FRAME_OFFSETS[] PROGMEM = {", |
| 199 | " " + ", ".join(f"{v}UL" for v in result.frame_offsets), |
| 200 | "};", |
| 201 | "const uint16_t IMAGE_FRAME_DURATIONS_MS[] PROGMEM = {", |
| 202 | " " + ", ".join(str(v) for v in result.durations), |
| 203 | "};", |
| 204 | "const ImagePoint IMAGE_POINTS[] PROGMEM = {", |
| 205 | ] |
| 206 | for i, (x, y, shade) in enumerate(result.flat_points): |
| 207 | comma = "," if i < len(result.flat_points) - 1 else "" |
| 208 | lines.append(f" {{{x}, {y}, {shade}}}{comma}") |
| 209 | lines.append("};") |
| 210 | lines.append("") |
| 211 | return "\n".join(lines) |
| 212 | |