First draft implementation of Futaba MDM166AA.
Only clock and brightness working for now.
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();
85 void SendCommandSetAddressCounter(unsigned char aAddressCounter);
86 //void SendCommandWriteGraphicData();
89 void SendCommandClockSetting(unsigned char aHour, unsigned char aMinute);
90 void SendCommandClockDisplay(TClockSize aClockSize, TClockFormat aClockFormat);
92 void SetPixelBlock(unsigned char aX, unsigned char aY, int aHeight, int aSize, unsigned char* aPixels);
95 void RequestDeviceId();
96 void RequestFirmwareRevision();
97 void RequestPowerSupplyStatus();
99 void SetClockSetting();
103 unsigned char OffScreenY() const;
104 void OffScreenTranslation(unsigned char& aX, unsigned char& aY);
108 unsigned char iDisplayPositionX;
109 unsigned char iDisplayPositionY;
110 ///Off screen mode is the recommended default settings to avoid tearing.
111 ///Though turning it off can be useful for debugging
113 ///Frame differences algo is used to reduce USB bus traffic and improve frame rate in typical use case
114 bool iUseFrameDifferencing;
116 //FutabaVfdReport iReport;
118 //unsigned char iFrameBuffer[256*64];
119 BitArrayLow* iFrameNext;
120 BitArrayLow* iFrameCurrent;
121 BitArrayLow* iFramePrevious;
123 BitArrayLow* iFrameAlpha;
124 BitArrayLow* iFrameBeta;
125 BitArrayLow* iFrameGamma;
127 int iNeedFullFrameUpdate;
128 //unsigned char iFrameBeta[256*64];
129 //unsigned char *iFrontBuffer;
130 //unsigned char *iBackBuffer;
131 FutabaVfdReport iInputReport;
133 char iDeviceId[KFutabaMaxHidReportSize];
134 char iFirmwareRevision[KFutabaMaxHidReportSize];