# HG changeset patch # User StephaneLenclud # Date 1423171575 -3600 # Node ID 0a2b658e0d5679898bd0fa2e8f56136f85797695 # Parent 7f649078cb523a6cf84be8cc5fbce42ff89e0574 MDM166AA: Adding icon support. diff -r 7f649078cb52 -r 0a2b658e0d56 Display.h --- a/Display.h Thu Feb 05 15:09:48 2015 +0100 +++ b/Display.h Thu Feb 05 22:26:15 2015 +0100 @@ -55,6 +55,24 @@ virtual void HideClock(){} virtual bool SupportClock(){return false;} + //Icon management + //Icon support queries return the number of segments an icon supports. + virtual int IconNetworkCount(){return 0;} + virtual int IconEmailCount(){return 0;} + virtual int IconMuteCount(){return 0;} + virtual int IconVolumeCount(){return 0;} + virtual int IconPlayCount(){return 0;} + virtual int IconPauseCount(){return 0;} + virtual int IconRecordingCount(){return 0;} + // + virtual void SetIconNetwork(int /*aIndex*/, int /*aStatus*/){} + virtual void SetIconEmail(int /*aIndex*/, int /*aStatus*/){} + virtual void SetIconMute(int /*aIndex*/, int /*aStatus*/){} + virtual void SetIconVolume(int /*aIndex*/, int /*aStatus*/){} + virtual void SetIconPlay(int /*aIndex*/, int /*aStatus*/){} + virtual void SetIconPause(int /*aIndex*/, int /*aStatus*/){} + virtual void SetIconRecording(int /*aIndex*/, int /*aStatus*/){} + protected: void SetRequest(TMiniDisplayRequest aRequest) { iRequest=aRequest; } diff -r 7f649078cb52 -r 0a2b658e0d56 FutabaMDM166AA.cpp --- a/FutabaMDM166AA.cpp Thu Feb 05 15:09:48 2015 +0100 +++ b/FutabaMDM166AA.cpp Thu Feb 05 22:26:15 2015 +0100 @@ -86,6 +86,13 @@ //We don't set clock data here as it turns on clock display too and cause an unpleasant clock flash //Only side effect from not doing this here is that for at most one minute the first time you cold boot your display the time should be wrong. //SetClockData(); + + //Turns mast ON + //SetIconNetwork(0,EIconOn); + //Show volume label + //SendCommandSymbolControl(EIconVolumeLabel,EIconOn); + //Icon checks + //SetAllIcons(EIconOn); } return success; } @@ -128,6 +135,7 @@ { //That one also clear the symbols SetAllPixels(0x00); + SendCommandClear(); //Clear icons too } /** @@ -381,6 +389,136 @@ /** +*/ +void MDM166AA::SetIconNetwork(int aIndex, int aStatus) + { + if (aIndex<0||aIndex>=IconNetworkCount()) + { + //Out of range + return; + } + + SendCommandSymbolControl((TIconId)(aIndex+EIconNetworkMast),(aStatus==0?EIconOff:EIconOn)); + } + +/** +*/ +void MDM166AA::SetIconEmail(int aIndex, int aStatus) + { + if (aIndex<0||aIndex>=IconEmailCount()) + { + //Out of range + return; + } + + SendCommandSymbolControl((TIconId)(aIndex+EIconEnvelop),(aStatus==0?EIconOff:EIconOn)); + } + +/** +*/ +void MDM166AA::SetIconMute(int aIndex, int aStatus) + { + if (aIndex<0||aIndex>=IconMuteCount()) + { + //Out of range + return; + } + + SendCommandSymbolControl((TIconId)(aIndex+EIconMute),(aStatus==0?EIconOff:EIconOn)); + } + +/** +*/ +void MDM166AA::SetIconVolume(int aIndex, int aStatus) + { + if (aIndex<0||aIndex>=IconVolumeCount()) + { + //Out of range + return; + } + + if (aStatusEIconOn) + { + //Out of range + return; + } + + SendCommandSymbolControl((TIconId)(aIndex+EIconVolumeLevel01),(TIconStatus)aStatus); + } + + +/** +*/ +void MDM166AA::SetIconPlay(int aIndex, int aStatus) + { + if (aIndex<0||aIndex>=IconPlayCount()) + { + //Out of range + return; + } + + SendCommandSymbolControl((TIconId)(aIndex+EIconPlay),(aStatus==0?EIconOff:EIconOn)); + } + + +/** +*/ +void MDM166AA::SetIconPause(int aIndex, int aStatus) + { + if (aIndex<0||aIndex>=IconPauseCount()) + { + //Out of range + return; + } + + SendCommandSymbolControl((TIconId)(aIndex+EIconPause),(aStatus==0?EIconOff:EIconOn)); + } + + +/** +*/ +void MDM166AA::SetIconRecording(int aIndex, int aStatus) + { + if (aIndex<0||aIndex>=IconRecordingCount()) + { + //Out of range + return; + } + + SendCommandSymbolControl((TIconId)(aIndex+EIconRecording),(aStatus==0?EIconOff:EIconOn)); + } + +/** +Set all our icons to the corresponding status. +*/ +void MDM166AA::SetAllIcons(TIconStatus aStatus) + { + for (int i=EIconFirst;i<=EIconLast;i++) + { + SendCommandSymbolControl((TIconId)i,aStatus); + } + } + +/** +Symbols control +Segment On/Off and Grayscale/Brightness +[Code]1BH,30H,Ps,Pb +*/ +void MDM166AA::SendCommandSymbolControl(TIconId aIconId, TIconStatus aStatus) + { + FutabaVfdReport report; + report[0]=0x00; //Report ID + report[1]=0x04; //Report size + report[2]=0x1B; //Command ID + report[3]=0x30; //Command ID + report[4]=aIconId; + report[5]=aStatus; + + Write(report); + } + + +/** Clock setting [Code]1BH,00H,Pm,Ph [Function]Setting the clock data. The setting data is cleared, if the Reset command is input or power is turned off. @@ -404,7 +542,6 @@ Write(report); } - /** Set display clock data according to local system time. This will only provide 30s accuracy. @@ -467,6 +604,7 @@ Display RAM filled with 00H. Address Counter is set by 00H. Dimming is set to 50%. +Turn off all icons segments. */ void MDM166AA::SendCommandReset() { @@ -475,8 +613,6 @@ report[1]=0x01; //Report length. report[2]=0x1F; //Command ID Write(report); - //Wait until reset is done. Is that needed? - //sleep(2000); } diff -r 7f649078cb52 -r 0a2b658e0d56 FutabaMDM166AA.h --- a/FutabaMDM166AA.h Thu Feb 05 15:09:48 2015 +0100 +++ b/FutabaMDM166AA.h Thu Feb 05 22:26:15 2015 +0100 @@ -35,6 +35,22 @@ virtual void ShowClock(); virtual void HideClock(); virtual bool SupportClock(){return true;} + //Icons + virtual int IconNetworkCount(){return 4;} + virtual int IconEmailCount(){return 2;} + virtual int IconMuteCount(){return 1;} + virtual int IconVolumeCount(){return 14;} //TODO: What do we do with "VOL." + virtual int IconPlayCount(){return 1;} + virtual int IconPauseCount(){return 1;} + virtual int IconRecordingCount(){return 1;} + // + virtual void SetIconNetwork(int aIndex, int aStatus); + virtual void SetIconEmail(int aIndex, int aStatus); + virtual void SetIconMute(int aIndex, int aStatus); + virtual void SetIconVolume(int aIndex, int aStatus); + virtual void SetIconPlay(int aIndex, int aStatus); + virtual void SetIconPause(int aIndex, int aStatus); + virtual void SetIconRecording(int aIndex, int aStatus); //From GraphicDisplay virtual int WidthInPixels() const {return KMDM166AAWidthInPixels;} @@ -66,8 +82,49 @@ EClockLarge = 0x02 }; + enum TIconId + { + EIconPlay = 0x00, + EIconPause = 0x01, + EIconRecording = 0x02, + EIconEnvelop = 0x03, + EIconAt = 0x04, + EIconMute = 0x05, + EIconNetworkMast = 0x06, + EIconNetworkSignalLow = 0x07, + EIconNetworkSignalMid = 0x08, + EIconNetworkSignalHigh = 0x09, + EIconVolumeLabel = 0x0A, + EIconVolumeLevel01 = 0x0B, + EIconVolumeLevel02 = 0x0C, + EIconVolumeLevel03 = 0x0D, + EIconVolumeLevel04 = 0x0E, + EIconVolumeLevel05 = 0x0F, + EIconVolumeLevel06 = 0x10, + EIconVolumeLevel07 = 0x11, + EIconVolumeLevel08 = 0x12, + EIconVolumeLevel09 = 0x13, + EIconVolumeLevel10 = 0x14, + EIconVolumeLevel11 = 0x15, + EIconVolumeLevel12 = 0x16, + EIconVolumeLevel13 = 0x17, + EIconVolumeLevel14 = 0x18, + EIconFirst = EIconPlay, + EIconLast = EIconVolumeLevel14, + }; + + enum TIconStatus + { + EIconOff = 0x00, + EIconFaded = 0x01, + EIconOn = 0x02 + }; + private: + //Testing + void SetAllIcons(TIconStatus aStatus); + //Specific to MDM166AA //General setting command void SendCommandClear(); @@ -82,6 +139,9 @@ void SendCommandSetAddressCounter(unsigned char aAddressCounter); void SendCommandWriteGraphicData(int aSize, unsigned char* aPixels); + //Icon/Symbol command + void SendCommandSymbolControl(TIconId aIconId, TIconStatus aStatus); + void RequestDeviceId(); void RequestFirmwareRevision(); void RequestPowerSupplyStatus(); diff -r 7f649078cb52 -r 0a2b658e0d56 MiniDisplay.cpp --- a/MiniDisplay.cpp Thu Feb 05 15:09:48 2015 +0100 +++ b/MiniDisplay.cpp Thu Feb 05 22:26:15 2015 +0100 @@ -290,4 +290,88 @@ bool MiniDisplaySupportClock(MiniDisplayDevice aDevice) { return ((GraphicDisplay*)aDevice)->SupportClock(); - } \ No newline at end of file + } + +//------------------------------------------------------------- +int MiniDisplayIconNetworkCount(MiniDisplayDevice aDevice) + { + return ((GraphicDisplay*)aDevice)->IconNetworkCount(); + } + +//------------------------------------------------------------- +int MiniDisplayIconEmailCount(MiniDisplayDevice aDevice) + { + return ((GraphicDisplay*)aDevice)->IconEmailCount(); + } + +//------------------------------------------------------------- +int MiniDisplayIconMuteCount(MiniDisplayDevice aDevice) + { + return ((GraphicDisplay*)aDevice)->IconMuteCount(); + } + +//------------------------------------------------------------- +int MiniDisplayIconVolumeCount(MiniDisplayDevice aDevice) + { + return ((GraphicDisplay*)aDevice)->IconVolumeCount(); + } + +//------------------------------------------------------------- +int MiniDisplayIconPlayCount(MiniDisplayDevice aDevice) + { + return ((GraphicDisplay*)aDevice)->IconPlayCount(); + } + +//------------------------------------------------------------- +int MiniDisplayIconPauseCount(MiniDisplayDevice aDevice) + { + return ((GraphicDisplay*)aDevice)->IconPauseCount(); + } + +//------------------------------------------------------------- +int MiniDisplayIconRecordingCount(MiniDisplayDevice aDevice) + { + return ((GraphicDisplay*)aDevice)->IconRecordingCount(); + } + +//------------------------------------------------------------- +void MiniDisplaySetIconNetwork(MiniDisplayDevice aDevice, int aIndex, int aStatus) + { + ((GraphicDisplay*)aDevice)->SetIconNetwork(aIndex,aStatus); + } + +//------------------------------------------------------------- +void MiniDisplaySetIconEmail(MiniDisplayDevice aDevice, int aIndex, int aStatus) + { + ((GraphicDisplay*)aDevice)->SetIconEmail(aIndex,aStatus); + } + +//------------------------------------------------------------- +void MiniDisplaySetIconMute(MiniDisplayDevice aDevice, int aIndex, int aStatus) + { + ((GraphicDisplay*)aDevice)->SetIconMute(aIndex,aStatus); + } + +//------------------------------------------------------------- +void MiniDisplaySetIconVolume(MiniDisplayDevice aDevice, int aIndex, int aStatus) + { + ((GraphicDisplay*)aDevice)->SetIconVolume(aIndex,aStatus); + } + +//------------------------------------------------------------- +void MiniDisplaySetIconPlay(MiniDisplayDevice aDevice, int aIndex, int aStatus) + { + ((GraphicDisplay*)aDevice)->SetIconPlay(aIndex,aStatus); + } + +//------------------------------------------------------------- +void MiniDisplaySetIconPause(MiniDisplayDevice aDevice, int aIndex, int aStatus) + { + ((GraphicDisplay*)aDevice)->SetIconPause(aIndex,aStatus); + } + +//------------------------------------------------------------- +void MiniDisplaySetIconRecording(MiniDisplayDevice aDevice, int aIndex, int aStatus) + { + ((GraphicDisplay*)aDevice)->SetIconRecording(aIndex,aStatus); + } diff -r 7f649078cb52 -r 0a2b658e0d56 MiniDisplay.h --- a/MiniDisplay.h Thu Feb 05 15:09:48 2015 +0100 +++ b/MiniDisplay.h Thu Feb 05 22:26:15 2015 +0100 @@ -253,5 +253,22 @@ extern "C" MDAPI bool MiniDisplaySupportClock(MiniDisplayDevice aDevice); +extern "C" MDAPI int MiniDisplayIconNetworkCount(MiniDisplayDevice aDevice); +extern "C" MDAPI int MiniDisplayIconEmailCount(MiniDisplayDevice aDevice); +extern "C" MDAPI int MiniDisplayIconMuteCount(MiniDisplayDevice aDevice); +extern "C" MDAPI int MiniDisplayIconVolumeCount(MiniDisplayDevice aDevice); +extern "C" MDAPI int MiniDisplayIconPlayCount(MiniDisplayDevice aDevice); +extern "C" MDAPI int MiniDisplayIconPauseCount(MiniDisplayDevice aDevice); +extern "C" MDAPI int MiniDisplayIconRecordingCount(MiniDisplayDevice aDevice); +// +extern "C" MDAPI void MiniDisplaySetIconNetwork(MiniDisplayDevice aDevice, int aIndex, int aStatus); +extern "C" MDAPI void MiniDisplaySetIconEmail(MiniDisplayDevice aDevice, int aIndex, int aStatus); +extern "C" MDAPI void MiniDisplaySetIconMute(MiniDisplayDevice aDevice, int aIndex, int aStatus); +extern "C" MDAPI void MiniDisplaySetIconVolume(MiniDisplayDevice aDevice, int aIndex, int aStatus); +extern "C" MDAPI void MiniDisplaySetIconPlay(MiniDisplayDevice aDevice, int aIndex, int aStatus); +extern "C" MDAPI void MiniDisplaySetIconPause(MiniDisplayDevice aDevice, int aIndex, int aStatus); +extern "C" MDAPI void MiniDisplaySetIconRecording(MiniDisplayDevice aDevice, int aIndex, int aStatus); + + #endif