sl@8: // sl@8: // sl@8: // sl@8: sl@8: #ifndef FUTABA_GP1212A02_H sl@8: #define FUTABA_GP1212A02_H sl@8: sl@8: #include "FutabaGP1212.h" sl@8: sl@10: #include "FutabaGP1212.h" sl@10: #include "FutabaVfd.h" sl@10: sl@10: /** sl@10: GP1212A01A is a graphic display module using a FUTABA 256x64dots VFD. sl@10: The module do not include character ROM, the customer will compile the character sl@13: by themselves (from main system). sl@10: */ sl@10: class GP1212A02A : public GP1212XXXX sl@10: { sl@10: public: sl@10: sl@10: GP1212A02A(); sl@10: ~GP1212A02A(); sl@10: sl@10: //From DisplayBase sl@10: int Open(); sl@10: virtual void SwapBuffers(); sl@10: sl@10: //From GraphicDisplay sl@10: virtual void SetPixel(unsigned char aX, unsigned char aY, bool aOn); sl@10: virtual void SetAllPixels(unsigned char aPattern); sl@10: virtual int FrameBufferSizeInBytes() const {return KGP12xFrameBufferSizeInBytes;} sl@10: virtual void SetBrightness(int aBrightness); sl@10: virtual void Clear(); sl@10: virtual void Fill(); sl@15: virtual void Request(TMiniDisplayRequest aRequest); sl@10: sl@14: sl@15: sl@10: // sl@10: void ToggleOffScreenMode(); sl@10: void SetOffScreenMode(bool aOn); sl@10: bool OffScreenMode() const {return iOffScreenMode;} sl@10: // sl@10: void SetFrameDifferencing(bool aOn){iUseFrameDifferencing=aOn;} sl@10: bool FrameDifferencing() const {return iUseFrameDifferencing;} sl@11: // sl@10: TMiniDisplayRequest AttemptRequestCompletion(); sl@10: FutabaVfdReport& InputReport() {return iInputReport;} sl@10: bool PowerOn(); sl@10: char* DeviceId(); sl@10: char* FirmwareRevision(); sl@10: sl@14: enum TBmpBoxId sl@14: { sl@14: EBmpBoxIdNull=0x30, sl@14: EBmpBoxIdOne=0x31, sl@14: EBmpBoxIdTwo=0x32, sl@14: EBmpBoxIdThree=0x33 sl@14: }; sl@14: sl@14: enum TTarget sl@14: { sl@14: ETargetDisplayWindow=0x30, sl@14: ETargetDataMemory=0x31 sl@14: }; sl@14: sl@14: enum TDirection sl@14: { sl@14: EDirectionY=0x30, sl@14: EDirectionX=0x31 sl@14: }; sl@14: sl@14: sl@15: private: sl@15: //Specific to GP1212A02A sl@14: //General setting command sl@14: void BmpDataInput(TTarget aTarget, unsigned short aAddress, TDirection aDirection, unsigned short aSize, unsigned char* aPixels); sl@14: sl@14: //BMP box sl@14: void BmpBoxSetting(TBmpBoxId aBoxId, unsigned short aAddress, int aWidth, int aHeight); sl@14: void BmpBoxSelect(TBmpBoxId aBoxId); sl@14: void BmpBoxDataMemoryTransfer(unsigned short aAddress); sl@14: void BmpBoxDataInput(unsigned short aSize, unsigned char* aPixels); sl@14: sl@10: private: sl@15: void RequestDeviceId(); sl@15: void RequestFirmwareRevision(); sl@15: void RequestPowerSupplyStatus(); sl@15: sl@15: sl@15: private: sl@10: unsigned char OffScreenY() const; sl@10: void SendClearCommand(); sl@10: void OffScreenTranslation(unsigned char& aX, unsigned char& aY); sl@10: void ResetBuffers(); sl@10: sl@10: private: sl@10: unsigned char iDisplayPositionX; sl@10: unsigned char iDisplayPositionY; sl@10: ///Off screen mode is the recommended default settings to avoid tearing. sl@10: ///Though turning it off can be useful for debugging sl@10: bool iOffScreenMode; sl@10: ///Frame differences algo is used to reduce USB bus traffic and improve frame rate in typical use case sl@10: bool iUseFrameDifferencing; sl@10: /// sl@10: //FutabaVfdReport iReport; sl@10: /// sl@10: //unsigned char iFrameBuffer[256*64]; sl@13: BitArrayLow* iFrameNext; sl@13: BitArrayLow* iFrameCurrent; sl@13: BitArrayLow* iFramePrevious; sl@10: // sl@13: BitArrayLow* iFrameAlpha; sl@13: BitArrayLow* iFrameBeta; sl@13: BitArrayLow* iFrameGamma; sl@10: // sl@10: int iNeedFullFrameUpdate; sl@10: //unsigned char iFrameBeta[256*64]; sl@10: //unsigned char *iFrontBuffer; sl@10: //unsigned char *iBackBuffer; sl@10: FutabaVfdReport iInputReport; sl@10: // sl@10: char iDeviceId[KFutabaMaxHidReportSize]; sl@10: char iFirmwareRevision[KFutabaMaxHidReportSize]; sl@10: bool iPowerOn; sl@15: // sl@15: unsigned short iNextFrameAddress; sl@10: }; sl@10: sl@8: sl@8: sl@8: #endif