mch2022-talktopics/main/animation.c
2022-06-03 04:23:00 +02:00

168 lines
8.2 KiB
C

#include <stdio.h>
#include <string.h>
#include <sdkconfig.h>
#include <driver/gpio.h>
#include "pax_gfx.h"
#include "pax_codecs.h"
#include "ili9341.h"
#include "ws2812.h"
#include "hardware.h"
extern const uint8_t animation_frame_1_start[] asm("_binary_animation_frame_1_png_start");
extern const uint8_t animation_frame_1_end[] asm("_binary_animation_frame_1_png_end");
extern const uint8_t animation_frame_2_start[] asm("_binary_animation_frame_2_png_start");
extern const uint8_t animation_frame_2_end[] asm("_binary_animation_frame_2_png_end");
extern const uint8_t animation_frame_3_start[] asm("_binary_animation_frame_3_png_start");
extern const uint8_t animation_frame_3_end[] asm("_binary_animation_frame_3_png_end");
extern const uint8_t animation_frame_4_start[] asm("_binary_animation_frame_4_png_start");
extern const uint8_t animation_frame_4_end[] asm("_binary_animation_frame_4_png_end");
extern const uint8_t animation_frame_5_start[] asm("_binary_animation_frame_5_png_start");
extern const uint8_t animation_frame_5_end[] asm("_binary_animation_frame_5_png_end");
extern const uint8_t animation_frame_6_start[] asm("_binary_animation_frame_6_png_start");
extern const uint8_t animation_frame_6_end[] asm("_binary_animation_frame_6_png_end");
extern const uint8_t animation_frame_7_start[] asm("_binary_animation_frame_7_png_start");
extern const uint8_t animation_frame_7_end[] asm("_binary_animation_frame_7_png_end");
extern const uint8_t animation_frame_8_start[] asm("_binary_animation_frame_8_png_start");
extern const uint8_t animation_frame_8_end[] asm("_binary_animation_frame_8_png_end");
extern const uint8_t animation_frame_9_start[] asm("_binary_animation_frame_9_png_start");
extern const uint8_t animation_frame_9_end[] asm("_binary_animation_frame_9_png_end");
extern const uint8_t animation_frame_10_start[] asm("_binary_animation_frame_10_png_start");
extern const uint8_t animation_frame_10_end[] asm("_binary_animation_frame_10_png_end");
extern const uint8_t animation_frame_11_start[] asm("_binary_animation_frame_11_png_start");
extern const uint8_t animation_frame_11_end[] asm("_binary_animation_frame_11_png_end");
extern const uint8_t animation_frame_12_start[] asm("_binary_animation_frame_12_png_start");
extern const uint8_t animation_frame_12_end[] asm("_binary_animation_frame_12_png_end");
extern const uint8_t animation_frame_13_start[] asm("_binary_animation_frame_13_png_start");
extern const uint8_t animation_frame_13_end[] asm("_binary_animation_frame_13_png_end");
extern const uint8_t animation_frame_14_start[] asm("_binary_animation_frame_14_png_start");
extern const uint8_t animation_frame_14_end[] asm("_binary_animation_frame_14_png_end");
extern const uint8_t animation_frame_15_start[] asm("_binary_animation_frame_15_png_start");
extern const uint8_t animation_frame_15_end[] asm("_binary_animation_frame_15_png_end");
extern const uint8_t animation_frame_16_start[] asm("_binary_animation_frame_16_png_start");
extern const uint8_t animation_frame_16_end[] asm("_binary_animation_frame_16_png_end");
extern const uint8_t animation_frame_17_start[] asm("_binary_animation_frame_17_png_start");
extern const uint8_t animation_frame_17_end[] asm("_binary_animation_frame_17_png_end");
extern const uint8_t animation_frame_18_start[] asm("_binary_animation_frame_18_png_start");
extern const uint8_t animation_frame_18_end[] asm("_binary_animation_frame_18_png_end");
extern const uint8_t animation_frame_19_start[] asm("_binary_animation_frame_19_png_start");
extern const uint8_t animation_frame_19_end[] asm("_binary_animation_frame_19_png_end");
extern const uint8_t animation_frame_20_start[] asm("_binary_animation_frame_20_png_start");
extern const uint8_t animation_frame_20_end[] asm("_binary_animation_frame_20_png_end");
extern const uint8_t animation_frame_21_start[] asm("_binary_animation_frame_21_png_start");
extern const uint8_t animation_frame_21_end[] asm("_binary_animation_frame_21_png_end");
extern const uint8_t animation_frame_22_start[] asm("_binary_animation_frame_22_png_start");
extern const uint8_t animation_frame_22_end[] asm("_binary_animation_frame_22_png_end");
extern const uint8_t animation_frame_23_start[] asm("_binary_animation_frame_23_png_start");
extern const uint8_t animation_frame_23_end[] asm("_binary_animation_frame_23_png_end");
extern const uint8_t animation_frame_24_start[] asm("_binary_animation_frame_24_png_start");
extern const uint8_t animation_frame_24_end[] asm("_binary_animation_frame_24_png_end");
extern const uint8_t animation_frame_25_start[] asm("_binary_animation_frame_25_png_start");
extern const uint8_t animation_frame_25_end[] asm("_binary_animation_frame_25_png_end");
extern const uint8_t animation_frame_26_start[] asm("_binary_animation_frame_26_png_start");
extern const uint8_t animation_frame_26_end[] asm("_binary_animation_frame_26_png_end");
extern const uint8_t animation_frame_27_start[] asm("_binary_animation_frame_27_png_start");
extern const uint8_t animation_frame_27_end[] asm("_binary_animation_frame_27_png_end");
extern const uint8_t animation_frame_28_start[] asm("_binary_animation_frame_28_png_start");
extern const uint8_t animation_frame_28_end[] asm("_binary_animation_frame_28_png_end");
const uint8_t* animation_frames[] = {
animation_frame_1_start,
animation_frame_2_start,
animation_frame_3_start,
animation_frame_4_start,
animation_frame_5_start,
animation_frame_6_start,
animation_frame_7_start,
animation_frame_8_start,
animation_frame_9_start,
animation_frame_10_start,
animation_frame_11_start,
animation_frame_12_start,
animation_frame_13_start,
animation_frame_14_start,
animation_frame_15_start,
animation_frame_16_start,
animation_frame_17_start,
animation_frame_18_start,
animation_frame_19_start,
animation_frame_20_start,
animation_frame_21_start,
animation_frame_22_start,
animation_frame_23_start,
animation_frame_24_start,
animation_frame_25_start,
animation_frame_26_start,
animation_frame_27_start,
animation_frame_28_start
};
const uint8_t* animation_frames_end[] = {
animation_frame_1_end,
animation_frame_2_end,
animation_frame_3_end,
animation_frame_4_end,
animation_frame_5_end,
animation_frame_6_end,
animation_frame_7_end,
animation_frame_8_end,
animation_frame_9_end,
animation_frame_10_end,
animation_frame_11_end,
animation_frame_12_end,
animation_frame_13_end,
animation_frame_14_end,
animation_frame_15_end,
animation_frame_16_end,
animation_frame_17_end,
animation_frame_18_end,
animation_frame_19_end,
animation_frame_20_end,
animation_frame_21_end,
animation_frame_22_end,
animation_frame_23_end,
animation_frame_24_end,
animation_frame_25_end,
animation_frame_26_end,
animation_frame_27_end,
animation_frame_28_end
};
void display_animation(pax_buf_t* pax_buffer, ILI9341* ili9341) {
gpio_set_direction(GPIO_SD_PWR, GPIO_MODE_OUTPUT);
gpio_set_level(GPIO_SD_PWR, 1);
ws2812_init(GPIO_LED_DATA);
uint8_t led_data[15] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
ws2812_send_data(led_data, sizeof(led_data));
pax_noclip(pax_buffer);
pax_background(pax_buffer, 0xFFFFFF);
for (uint8_t frame = 0; frame < 28; frame++) {
pax_buf_t image;
pax_decode_png_buf(&image, (void*) animation_frames[frame], animation_frames_end[frame] - animation_frames[frame], PAX_BUF_16_565RGB, 0);
pax_draw_image(pax_buffer, &image, 0, 0);
pax_buf_destroy(&image);
ili9341_write(ili9341, pax_buffer->buf);
uint8_t brightness = (frame > 14) ? (frame - 14) : (0);
led_data[1] = brightness;
led_data[3] = brightness;
led_data[8] = brightness;
led_data[9] = brightness / 2;
led_data[10] = brightness / 2;
led_data[14] = brightness;
ws2812_send_data(led_data, sizeof(led_data));
}
for (uint8_t brightness = 14; brightness < 50; brightness++) {
led_data[1] = brightness;
led_data[3] = brightness;
led_data[8] = brightness;
led_data[9] = brightness / 2;
led_data[10] = brightness / 2;
led_data[14] = brightness;
ws2812_send_data(led_data, sizeof(led_data));
vTaskDelay(50 / portTICK_PERIOD_MS);
}
}