// Lines and Color wiring test
#include <uVGA.h>
void yield(void);
#define wait_sync 0
#define wait_beam 0
uVGA uvga;
#define UVGA_DEFAULT_REZ
#include <uVGA_valid_settings.h>
const byte cmap[] =
{
0b00000000, 0b11100000, 0b11100100, 0b11101000, 0b11101100, 0b11110000, 0b11110100, 0b11111000, 0b11111100,
0b11011100, 0b10111100, 0b10011100, 0b01111100, 0b01011100, 0b00111100, 0b00011100, 0b00011101, 0b00011110,
0b00011111, 0b00011011, 0b00010111, 0b00010011, 0b00001111, 0b00001011, 0b00000111, 0b00000011, 0b00100011,
0b01000011, 0b01100011, 0b10000011, 0b10100011, 0b11000011, 0b11100011, 0b11100010, 0b11100001, 0b11100000, 0b00000000
};
const byte cmap2[] =
{ 0b00000000,
0b11100000, 0b11000000, 0b10100000, 0b10000000, 0b01100000, 0b01000000, 0b00100000,
0b00011100, 0b00011000, 0b00010100, 0b00010000, 0b00001100, 0b00001000, 0b00000100,
0b00000011, 0b00000010, 0b00000001
};
void setup()
{
int ret;
ret = uvga.begin(&modeline);
if (ret != 0)
{
Serial.println("fatal error");
while (1);
}
}
void loop()
{
int fb_width, fb_height;
uvga.get_frame_buffer_size(&fb_width, &fb_height);
testPrint();
doLines( fb_width, fb_height, -1 ); // disable draw lines with negative wait on param 3
if ( 0 || wait_sync ) uvga.waitSync();
if ( 1 || wait_beam ) uvga.waitBeam();
// uvga.clear(0);
// uvga.clear(0b11111111);
// these each take a third of the screen given H and W, Param 3 is bar +/-/0 indexing between draws, Param 4 is time to delay before return
doCmap( fb_width, fb_height, 2, 0 );
doPCmap( fb_width, fb_height, -1, 0 );
doColors( fb_width, fb_height, 1, 0 );
doRegister( fb_width, fb_height, 1000 );
}
void doCmap( int fb_width, int fb_height, int Nshift, int dtime ) {
int col;
static uint16_t pre_adv = 0;
pre_adv += Nshift;
uint16_t adv = pre_adv;
int xx = fb_width / sizeof(cmap);
int yy = (fb_height - 1) / 3;
if ( wait_sync ) uvga.waitSync();
if ( wait_beam ) uvga.waitBeam();
for (col = 0; col < sizeof(cmap); col++) {
uvga.fillRect(col * xx, 0, (col * xx) + xx - 1, yy-1, cmap[(col + adv) % sizeof(cmap)]);
}
delay( dtime );
}
void doPCmap( int fb_width, int fb_height, int Nshift, int dtime ) {
int col;
static uint16_t pre_adv = 0;
pre_adv += Nshift;
uint16_t adv = pre_adv;
int xx = fb_width / sizeof(cmap);
int yy = (fb_height - 1) / 3;
if ( wait_sync ) uvga.waitSync();
if ( wait_beam ) uvga.waitBeam();
for (col = 0; col < sizeof(cmap); col++) {
uvga.fillRect(col * xx, yy, (col * xx) + xx - 1, 2 * (yy)-1, 0xff - cmap[(col + adv) % sizeof(cmap)]);
}
delay( dtime );
}
void doColors( int fb_width, int fb_height, int Nshift, int dtime ) {
int col;
static uint16_t pre_adv = 0;
pre_adv += Nshift;
uint16_t adv = pre_adv;
int yy = (fb_height - 1) / 3;
int xx = fb_width / (sizeof(cmap2) * 2);
if ( wait_sync ) uvga.waitSync();
if ( wait_beam ) uvga.waitBeam();
int bb = fb_width-(xx*sizeof(cmap2)*2); // put the unused space in the center
for (col = 0; col < sizeof(cmap2); col++) {
uvga.fillRect(col * xx, 2 * yy, (col * xx) + xx - 1, fb_height - 1, cmap2[(col + adv) % sizeof(cmap2)]);
uvga.fillRect(bb+sizeof(cmap2)*xx + (col * xx), 2 * yy, bb+sizeof(cmap2)*xx + ((col * xx) + xx - 1), fb_height - 1, 0xff - cmap2[(col + adv) % sizeof(cmap2)]);
}
delay( dtime );
}
void doLines( int fb_width, int fb_height, int dtime ) {
int col;
if ( 0 > dtime ) return;
// uvga.waitSync();
//uvga.clear(0b11111111);
for (col = 0; col < fb_width; col += 18) {
uvga.drawLine(col, 0, col, fb_height, 0b00011100);
uvga.drawLine(col + 9, 0, col + 9, fb_height, 0b00000011);
Serial.print(".");
}
delay( dtime );
}
void testPrint() {
int fb_width, fb_height;
uvga.get_frame_buffer_size(&fb_width, &fb_height);
Serial.print("\n millis::");
Serial.print(millis());
Serial.print(" F_CPU:");
Serial.print(F_CPU);
Serial.print(" F_BUS:");
Serial.print(F_BUS);
Serial.print(" fb_height:");
Serial.print(fb_height);
Serial.print(" fb_width:");
Serial.println(fb_width);
}
void doRegister( int fb_width, int fb_height, int dtime ) {
if ( 0 > dtime ) return;
fb_width--;
fb_height--;
uvga.drawTri(fb_width, fb_height/2, 0, fb_height/2, fb_width/2, 0, 0b01101111);
uvga.drawTri(fb_width, fb_height/2+1, 0, fb_height/2+1, fb_width/2, fb_height, 0b10010001);
delay( dtime );
}