#include "spiframe.h"

bool SpiFrame::LedCoordToPixel(const MxFrame &mxframe, int bitpos,
                               int colorbit, enum Color color, int column)
{
    int y = 2*bitpos;
    int x = column;
    if (column >= 32)
    {
        x = 63 - column;
        y = bitpos + 1;
    }


    if (color == RED)
    {
        return mxframe.pixels[x][y].red() & (1 << colorbit);
    }
    else if (color == GREEN)
    {
        return mxframe.pixels[x][y].green() & (1 << colorbit);
    }
    else if (color == BLUE)
    {
        return mxframe.pixels[x][y].blue() & (1 << colorbit);
    }
    return false;
}

SpiFrame::SpiFrame()
{

}

SpiFrame::SpiFrame(const MxFrame& mxframe)
{
    this->length = mxframe.length;
    for (int i = 0; i < 64*24; i++) {
        data[i] = 0;
    }
    for (int column = 0; column < 64; column++) {
        for (int bitpos = 0; bitpos < 13; bitpos++) {
            for (int colorbit = 0; colorbit < 8; colorbit++) {
                data[column * 24 + colorbit] |=
                        (LedCoordToPixel(mxframe, bitpos, colorbit, RED, column) ? 1 : 0) << bitpos;
                data[column * 24 + colorbit + 8] |=
                        (LedCoordToPixel(mxframe, bitpos, colorbit, GREEN, column) ? 1 : 0) << bitpos;
                data[column * 24 + colorbit + 16] |=
                        (LedCoordToPixel(mxframe, bitpos, colorbit, BLUE, column) ? 1 : 0) << bitpos;
            }
        }
    }

}