FutabaGP1212A02.h
author sl
Mon, 25 Aug 2014 00:07:01 +0200
changeset 10 1c3a4964a5bd
parent 8 5a9dbbc40c6b
child 11 2d749a2bea34
permissions -rw-r--r--
Working on GP1212A02 support.
     1 //
     2 //
     3 //
     4 
     5 #ifndef FUTABA_GP1212A02_H
     6 #define FUTABA_GP1212A02_H
     7 
     8 #include "FutabaGP1212.h"
     9 
    10 #include "FutabaGP1212.h"
    11 #include "FutabaVfd.h"
    12 
    13 /**
    14 GP1212A01A is a graphic display module using a FUTABA 256x64dots VFD.
    15 The module do not include character ROM, the customer will compile the character
    16 by themselves (from main system).
    17 */
    18 class GP1212A02A : public GP1212XXXX
    19 	{
    20 public:
    21 
    22     GP1212A02A();
    23     ~GP1212A02A();
    24 
    25 	//From DisplayBase
    26 	int Open();
    27 	virtual void SwapBuffers();
    28 
    29 	//From GraphicDisplay
    30 	virtual void SetPixel(unsigned char aX, unsigned char aY, bool aOn);
    31 	virtual void SetAllPixels(unsigned char aPattern);
    32     virtual int FrameBufferSizeInBytes() const {return KGP12xFrameBufferSizeInBytes;}
    33     virtual void BitBlit(const BitArray& aBitmap, int aSrcWidth, int aSrcHeight, int aTargetX, int aTargetY) const;
    34 	virtual void SetBrightness(int aBrightness);
    35 	virtual void Clear();
    36 	virtual void Fill();
    37 
    38 	//Specific to GP1212A01A
    39 	void SetPixelBlock(unsigned char aX, unsigned char aY, int aHeight, int aSize, unsigned char aValue);
    40     void SetPixelBlock(unsigned char aX, unsigned char aY, int aHeight, int aSize, unsigned char* aPixels);
    41     //Define display position within our display RAM
    42 	void SetDisplayPosition(unsigned char aX, unsigned char aY);
    43     unsigned char DisplayPositionX() const {return iDisplayPositionX;}
    44     unsigned char DisplayPositionY() const {return iDisplayPositionY;}
    45 	
    46     //
    47     void RequestDeviceId();
    48     void RequestFirmwareRevision();
    49     void RequestPowerSupplyStatus();
    50 	//
    51 	void ToggleOffScreenMode();
    52     void SetOffScreenMode(bool aOn);
    53     bool OffScreenMode() const {return iOffScreenMode;}
    54     //
    55     void SetFrameDifferencing(bool aOn){iUseFrameDifferencing=aOn;}
    56     bool FrameDifferencing() const {return iUseFrameDifferencing;}
    57     //
    58     bool RequestPending(){return iRequest!=EMiniDisplayRequestNone;}
    59     TMiniDisplayRequest CurrentRequest(){return iRequest;}
    60     void CancelRequest(){iRequest=EMiniDisplayRequestNone;}
    61     TMiniDisplayRequest AttemptRequestCompletion();
    62     FutabaVfdReport& InputReport() {return iInputReport;}
    63     bool PowerOn();
    64 	char* DeviceId();
    65 	char* FirmwareRevision();
    66 
    67 private:
    68 	enum DW
    69 		{
    70         DW1=0xC0,
    71         DW2=0xD0
    72 		};
    73 
    74 	void SetDisplayPosition(DW aDw,unsigned char aX, unsigned char aY);
    75 	unsigned char OffScreenY() const;
    76 	void SendClearCommand();
    77 	void OffScreenTranslation(unsigned char& aX, unsigned char& aY);
    78 	void ResetBuffers();
    79     void SendModifiedPixelBlocks();
    80 
    81 private:
    82 	unsigned char iDisplayPositionX;
    83 	unsigned char iDisplayPositionY;
    84 	///Off screen mode is the recommended default settings to avoid tearing.
    85 	///Though turning it off can be useful for debugging
    86 	bool iOffScreenMode;
    87     ///Frame differences algo is used to reduce USB bus traffic and improve frame rate in typical use case
    88     bool iUseFrameDifferencing;
    89 	///
    90 	//FutabaVfdReport iReport;
    91 	///
    92 	//unsigned char iFrameBuffer[256*64];
    93     BitArray* iFrameNext;
    94     BitArray* iFrameCurrent;
    95     BitArray* iFramePrevious;
    96     //
    97     BitArray* iFrameAlpha;
    98     BitArray* iFrameBeta;
    99     BitArray* iFrameGamma;
   100     //
   101     int iNeedFullFrameUpdate;
   102 	//unsigned char iFrameBeta[256*64];
   103 	//unsigned char *iFrontBuffer;
   104 	//unsigned char *iBackBuffer;
   105     TMiniDisplayRequest iRequest;
   106     FutabaVfdReport iInputReport;
   107 	//
   108 	char iDeviceId[KFutabaMaxHidReportSize];
   109 	char iFirmwareRevision[KFutabaMaxHidReportSize];
   110     bool iPowerOn;
   111 	};
   112 
   113 
   114 
   115 #endif