FutabaGP1212A02.h
author sl
Sun, 31 Aug 2014 18:33:31 +0200
changeset 16 42ba42be810d
parent 15 105f2c0d3cf1
child 17 591e9f922c63
permissions -rw-r--r--
Adding support for power on/off.
sl@8
     1
//
sl@8
     2
//
sl@8
     3
//
sl@8
     4
sl@8
     5
#ifndef FUTABA_GP1212A02_H
sl@8
     6
#define FUTABA_GP1212A02_H
sl@8
     7
sl@8
     8
#include "FutabaGP1212.h"
sl@8
     9
sl@10
    10
#include "FutabaGP1212.h"
sl@10
    11
#include "FutabaVfd.h"
sl@10
    12
sl@10
    13
/**
sl@10
    14
GP1212A01A is a graphic display module using a FUTABA 256x64dots VFD.
sl@10
    15
The module do not include character ROM, the customer will compile the character
sl@13
    16
by themselves (from main system). 
sl@10
    17
*/
sl@10
    18
class GP1212A02A : public GP1212XXXX
sl@10
    19
	{
sl@10
    20
public:
sl@10
    21
sl@10
    22
    GP1212A02A();
sl@10
    23
    ~GP1212A02A();
sl@10
    24
sl@10
    25
	//From DisplayBase
sl@10
    26
	int Open();
sl@10
    27
	virtual void SwapBuffers();
sl@16
    28
	virtual void TurnPowerOn();
sl@16
    29
	virtual void TurnPowerOff();
sl@16
    30
	virtual bool SupportPowerOnOff(){return true;} 
sl@16
    31
sl@10
    32
sl@10
    33
	//From GraphicDisplay
sl@10
    34
	virtual void SetPixel(unsigned char aX, unsigned char aY, bool aOn);
sl@10
    35
	virtual void SetAllPixels(unsigned char aPattern);
sl@10
    36
    virtual int FrameBufferSizeInBytes() const {return KGP12xFrameBufferSizeInBytes;}
sl@10
    37
	virtual void SetBrightness(int aBrightness);
sl@10
    38
	virtual void Clear();
sl@10
    39
	virtual void Fill();
sl@15
    40
	virtual void Request(TMiniDisplayRequest aRequest);
sl@10
    41
sl@14
    42
	
sl@15
    43
		
sl@10
    44
	//
sl@10
    45
	void ToggleOffScreenMode();
sl@10
    46
    void SetOffScreenMode(bool aOn);
sl@10
    47
    bool OffScreenMode() const {return iOffScreenMode;}
sl@10
    48
    //
sl@10
    49
    void SetFrameDifferencing(bool aOn){iUseFrameDifferencing=aOn;}
sl@10
    50
    bool FrameDifferencing() const {return iUseFrameDifferencing;}
sl@11
    51
    //    
sl@10
    52
    TMiniDisplayRequest AttemptRequestCompletion();
sl@10
    53
    FutabaVfdReport& InputReport() {return iInputReport;}
sl@16
    54
    bool IsPowerOn();
sl@10
    55
	char* DeviceId();
sl@10
    56
	char* FirmwareRevision();
sl@10
    57
sl@14
    58
	enum TBmpBoxId
sl@14
    59
	{
sl@14
    60
		EBmpBoxIdNull=0x30,
sl@14
    61
		EBmpBoxIdOne=0x31,
sl@14
    62
		EBmpBoxIdTwo=0x32,
sl@14
    63
		EBmpBoxIdThree=0x33
sl@14
    64
	};
sl@14
    65
sl@14
    66
	enum TTarget
sl@14
    67
	{
sl@14
    68
		ETargetDisplayWindow=0x30,
sl@14
    69
		ETargetDataMemory=0x31
sl@14
    70
	};
sl@14
    71
sl@14
    72
	enum TDirection
sl@14
    73
	{
sl@14
    74
		EDirectionY=0x30,
sl@14
    75
		EDirectionX=0x31
sl@14
    76
	};
sl@14
    77
sl@16
    78
	enum TPowerStatus
sl@16
    79
	{
sl@16
    80
		EPowerOff=0x30,
sl@16
    81
		EPowerOn=0x31
sl@16
    82
	};
sl@14
    83
sl@15
    84
private:
sl@15
    85
	//Specific to GP1212A02A
sl@14
    86
	//General setting command
sl@14
    87
	void BmpDataInput(TTarget aTarget, unsigned short aAddress, TDirection aDirection, unsigned short aSize, unsigned char* aPixels);
sl@14
    88
sl@14
    89
	//BMP box
sl@14
    90
	void BmpBoxSetting(TBmpBoxId aBoxId, unsigned short aAddress, int aWidth, int aHeight);
sl@14
    91
	void BmpBoxSelect(TBmpBoxId aBoxId);
sl@14
    92
	void BmpBoxDataMemoryTransfer(unsigned short aAddress);
sl@14
    93
	void BmpBoxDataInput(unsigned short aSize, unsigned char* aPixels);
sl@16
    94
	//
sl@16
    95
	void SendCommandPower(TPowerStatus aPowerStatus);
sl@14
    96
sl@10
    97
private:
sl@15
    98
    void RequestDeviceId();
sl@15
    99
    void RequestFirmwareRevision();
sl@15
   100
    void RequestPowerSupplyStatus();
sl@15
   101
sl@15
   102
sl@15
   103
private:
sl@10
   104
	unsigned char OffScreenY() const;
sl@10
   105
	void SendClearCommand();
sl@10
   106
	void OffScreenTranslation(unsigned char& aX, unsigned char& aY);
sl@10
   107
	void ResetBuffers();
sl@10
   108
sl@10
   109
private:
sl@10
   110
	unsigned char iDisplayPositionX;
sl@10
   111
	unsigned char iDisplayPositionY;
sl@10
   112
	///Off screen mode is the recommended default settings to avoid tearing.
sl@10
   113
	///Though turning it off can be useful for debugging
sl@10
   114
	bool iOffScreenMode;
sl@10
   115
    ///Frame differences algo is used to reduce USB bus traffic and improve frame rate in typical use case
sl@10
   116
    bool iUseFrameDifferencing;
sl@10
   117
	///
sl@10
   118
	//FutabaVfdReport iReport;
sl@10
   119
	///
sl@10
   120
	//unsigned char iFrameBuffer[256*64];
sl@13
   121
    BitArrayLow* iFrameNext;
sl@13
   122
    BitArrayLow* iFrameCurrent;
sl@13
   123
    BitArrayLow* iFramePrevious;
sl@10
   124
    //
sl@13
   125
    BitArrayLow* iFrameAlpha;
sl@13
   126
    BitArrayLow* iFrameBeta;
sl@13
   127
    BitArrayLow* iFrameGamma;
sl@10
   128
    //
sl@10
   129
    int iNeedFullFrameUpdate;
sl@10
   130
	//unsigned char iFrameBeta[256*64];
sl@10
   131
	//unsigned char *iFrontBuffer;
sl@10
   132
	//unsigned char *iBackBuffer;
sl@10
   133
    FutabaVfdReport iInputReport;
sl@10
   134
	//
sl@10
   135
	char iDeviceId[KFutabaMaxHidReportSize];
sl@10
   136
	char iFirmwareRevision[KFutabaMaxHidReportSize];
sl@10
   137
    bool iPowerOn;
sl@15
   138
	//
sl@15
   139
	unsigned short iNextFrameAddress;
sl@10
   140
	};
sl@10
   141
sl@8
   142
sl@8
   143
sl@8
   144
#endif