#include <avr/io.h>
#include <avr/interrupt.h>
#include "matrix.h"

matrix_frame_t my_frame;

void fill_frame(uint8_t r, uint8_t g, uint8_t b) {
    for (uint8_t y = 0; y < MATRIX_HEIGHT; y++) {
        for (uint8_t x = 0; x < MATRIX_WIDTH; x++) {
            my_frame[y][x][0] = r;
            my_frame[y][x][1] = g;
            my_frame[y][x][2] = b;
        }
    }
}

void draw_rect(uint8_t rx, uint8_t ry, uint8_t w, uint8_t h,
               uint8_t r, uint8_t g, uint8_t b) {
    for (uint8_t y = ry; y < ry + h && y < MATRIX_HEIGHT; y++) {
        for (uint8_t x = rx; x < rx + w && x < MATRIX_WIDTH; x++) {
            my_frame[y][x][0] = r;
            my_frame[y][x][1] = g;
            my_frame[y][x][2] = b;
        }
    }
}

int main(void) {
    uint8_t rx = 0, ry = 0;
    int8_t dx = 1, dy = 1;

    matrix_init(&my_frame);
    sei();

    for (;;) {
        if (MATRIX_FRAME_READY()) {
            MATRIX_FRAME_CONSUMED();

            fill_frame(0x00, 0x01, 0x00);
            draw_rect(rx, ry, 8, 4, 0x20, 0x00, 0x00);

            rx += dx;
            ry += dy;
            if (rx >= 24 || rx == 0) dx = -dx;
            if (ry >= 12 || ry == 0) dy = -dy;
        }
    }
}

