99 lines
2.4 KiB
C++
99 lines
2.4 KiB
C++
/*
|
|
Author: bitluni 2019
|
|
License:
|
|
Creative Commons Attribution ShareAlike 4.0
|
|
https://creativecommons.org/licenses/by-sa/4.0/
|
|
|
|
For further details check out:
|
|
https://youtube.com/bitlunislab
|
|
https://github.com/bitluni
|
|
http://bitluni.net
|
|
*/
|
|
#pragma once
|
|
|
|
#include "../I2S/I2S.h"
|
|
#include "Mode.h"
|
|
#include "PinConfig.h"
|
|
|
|
class VGA : public I2S
|
|
{
|
|
public:
|
|
VGA(const int i2sIndex = 0);
|
|
void setLineBufferCount(int lineBufferCount);
|
|
bool init(const Mode &mode, const int *pinMap, const int bitCount, const int clockPin = -1);
|
|
virtual bool init(const Mode &mode, const PinConfig &pinConfig) = 0;
|
|
|
|
static const Mode MODE320x480;
|
|
static const Mode MODE320x240;
|
|
static const Mode MODE320x120;
|
|
static const Mode MODE320x400;
|
|
static const Mode MODE320x200;
|
|
static const Mode MODE360x400;
|
|
static const Mode MODE360x200;
|
|
static const Mode MODE360x350;
|
|
static const Mode MODE360x175;
|
|
|
|
static const Mode MODE320x350;
|
|
static const Mode MODE320x175;
|
|
|
|
static const Mode MODE400x300;
|
|
static const Mode MODE400x150;
|
|
static const Mode MODE400x100;
|
|
static const Mode MODE200x150;
|
|
|
|
static const Mode MODE500x480;
|
|
static const Mode MODE500x240;
|
|
|
|
static const Mode MODE1280x1024;
|
|
static const Mode MODE1280x960;
|
|
static const Mode MODE1280x800;
|
|
static const Mode MODE1024x768;
|
|
static const Mode MODE800x600;
|
|
static const Mode MODE720x400;
|
|
static const Mode MODE720x350;
|
|
static const Mode MODE640x480;
|
|
static const Mode MODE640x400;
|
|
static const Mode MODE640x350;
|
|
|
|
static const PinConfig VGAv01;
|
|
static const PinConfig VGABlackEdition;
|
|
static const PinConfig VGAWhiteEdition;
|
|
static const PinConfig PicoVGA;
|
|
|
|
|
|
Mode mode;
|
|
|
|
virtual int bytesPerSample() const = 0;
|
|
|
|
protected:
|
|
|
|
virtual void initSyncBits() = 0;
|
|
virtual long syncBits(bool h, bool v) = 0;
|
|
|
|
int lineBufferCount;
|
|
int vsyncPin;
|
|
int hsyncPin;
|
|
int currentLine;
|
|
long vsyncBit;
|
|
long hsyncBit;
|
|
long vsyncBitI;
|
|
long hsyncBitI;
|
|
|
|
int totalLines;
|
|
volatile bool vSyncPassed;
|
|
|
|
void *vSyncInactiveBuffer;
|
|
void *vSyncActiveBuffer;
|
|
void *inactiveBuffer;
|
|
void *blankActiveBuffer;
|
|
|
|
void allocateLineBuffers(const int lines);
|
|
virtual void allocateLineBuffers();
|
|
virtual void allocateLineBuffers(void **frameBuffer);
|
|
virtual void propagateResolution(const int xres, const int yres) = 0;
|
|
|
|
protected:
|
|
virtual void interrupt();
|
|
virtual void vSync();
|
|
virtual void interruptPixelLine(int y, unsigned long *pixels, unsigned long syncBits);
|
|
};
|