MDM166AA swap buffers now working.
5 #ifndef FUTABA_MDM166AA_H
6 #define FUTABA_MDM166AA_H
11 const int KMDM166AAWidthInPixels = 96;
12 const int KMDM166AAHeightInPixels = 16;
13 const int KMDM166AAPixelsPerByte = 8;
14 const int KMDM166AAFrameBufferSizeInBytes = KMDM166AAWidthInPixels*KMDM166AAHeightInPixels/KMDM166AAPixelsPerByte; //96*16/8=192
15 const int KMDM166AAFrameBufferPixelCount = KMDM166AAWidthInPixels*KMDM166AAHeightInPixels;
19 MDM166AA is a graphic display module using a FUTABA 96x16dots VFD.
21 class MDM166AA : public FutabaGraphicDisplay
30 virtual void SwapBuffers();
32 virtual int MinBrightness() const {return 0;}
33 virtual int MaxBrightness() const {return 2;}
34 virtual void SetBrightness(int aBrightness);
36 virtual void ShowClock();
37 virtual void HideClock();
38 virtual bool SupportClock(){return true;}
41 virtual int WidthInPixels() const {return KMDM166AAWidthInPixels;}
42 virtual int HeightInPixels() const {return KMDM166AAHeightInPixels;}
44 virtual void SetPixel(unsigned char aX, unsigned char aY, unsigned int aPixel);
45 virtual void SetAllPixels(unsigned char aPattern);
46 virtual int FrameBufferSizeInBytes() const {return KMDM166AAFrameBufferSizeInBytes;}
49 virtual void Request(TMiniDisplayRequest aRequest);
52 void ToggleOffScreenMode();
53 void SetOffScreenMode(bool aOn);
54 bool OffScreenMode() const {return iOffScreenMode;}
56 void SetFrameDifferencing(bool aOn){iUseFrameDifferencing=aOn;}
57 bool FrameDifferencing() const {return iUseFrameDifferencing;}
59 TMiniDisplayRequest AttemptRequestCompletion();
60 FutabaVfdReport& InputReport() {return iInputReport;}
63 char* FirmwareRevision();
81 //Specific to MDM166AA
82 //General setting command
83 void SendCommandClear();
84 void SendCommandReset();
87 void SendCommandClockSetting(unsigned char aHour, unsigned char aMinute);
88 void SendCommandClockDisplay(TClockSize aClockSize, TClockFormat aClockFormat);
91 void SendCommandSetAddressCounter(unsigned char aAddressCounter);
92 void SendCommandWriteGraphicData(int aSize, unsigned char* aPixels);
96 void RequestDeviceId();
97 void RequestFirmwareRevision();
98 void RequestPowerSupplyStatus();
100 void SetClockSetting();
104 unsigned char OffScreenY() const;
105 void OffScreenTranslation(unsigned char& aX, unsigned char& aY);
109 unsigned char iDisplayPositionX;
110 unsigned char iDisplayPositionY;
111 ///Off screen mode is the recommended default settings to avoid tearing.
112 ///Though turning it off can be useful for debugging
114 ///Frame differences algo is used to reduce USB bus traffic and improve frame rate in typical use case
115 bool iUseFrameDifferencing;
117 //FutabaVfdReport iReport;
119 //unsigned char iFrameBuffer[256*64];
120 BitArrayLow* iFrameNext;
121 BitArrayLow* iFrameCurrent;
122 BitArrayLow* iFramePrevious;
124 BitArrayLow* iFrameAlpha;
125 BitArrayLow* iFrameBeta;
126 BitArrayLow* iFrameGamma;
128 int iNeedFullFrameUpdate;
129 //unsigned char iFrameBeta[256*64];
130 //unsigned char *iFrontBuffer;
131 //unsigned char *iBackBuffer;
132 FutabaVfdReport iInputReport;
134 char iDeviceId[KFutabaMaxHidReportSize];
135 char iFirmwareRevision[KFutabaMaxHidReportSize];