# HG changeset patch # User sl # Date 1401295455 -7200 # Node ID b935de604982483fe4bf87a80d323f5ed70333dd # Parent 64cfde8062c71e581c04dc8425e747d991d21e24 Sorting out start-up/shutdown sequence to avoid flashing old frame upon connection. Adding a couple of option to clear our frames upong close and/or open. diff -r 64cfde8062c7 -r b935de604982 DisplayStatusBar.qml --- a/DisplayStatusBar.qml Wed May 28 17:08:47 2014 +0200 +++ b/DisplayStatusBar.qml Wed May 28 18:44:15 2014 +0200 @@ -15,6 +15,16 @@ display.firmwareVersion.connect(updateFirmwareVersion); } + //We need to disconnect our signals to avoid receiving stray events + Component.onDestruction: { + display.closed.disconnect(onDisplayClosed); + display.opened.disconnect(onDisplayOpened); + display.openError.disconnect(updateDisplayStatusError); + display.powerStatus.disconnect(updatePowerStatus); + display.deviceId.disconnect(updateDeviceId); + display.firmwareVersion.disconnect(updateFirmwareVersion); + } + function updatePowerStatus(powerOn) { if (powerOn) diff -r 64cfde8062c7 -r b935de604982 DisplayTab.qml --- a/DisplayTab.qml Wed May 28 17:08:47 2014 +0200 +++ b/DisplayTab.qml Wed May 28 18:44:15 2014 +0200 @@ -12,13 +12,51 @@ //SystemPalette { id: palette } clip: true // - Component.onCompleted: { if(checkBoxConnectOnStartUp.checked) display.open()} + Component.onCompleted: { + display.closing.connect(onDisplayClosing); + display.opened.connect(onDisplayOpened); + if(checkBoxConnectOnStartUp.checked) display.open() + } + + //We need to disconnect our signals to avoid receiving stray events + Component.onDestruction: { + display.closed.disconnect(onDisplayClosing); + display.opened.disconnect(onDisplayOpened); + onDisplayClosing(); + } // Settings { property alias connectOnStratUp: checkBoxConnectOnStartUp.checked; + property alias clearWhenDisconnecting: checkBoxClearWhenDisconnecting.checked; + property alias clearWhenConnecting: checkBoxClearWhenConnecting.checked; property alias brightness: sliderBrightness.value; } + function onDisplayClosing() + { + //Clear both our frames + if (checkBoxClearWhenDisconnecting.checked) + { + display.clear(); + display.swapBuffers(); + display.clear(); + display.swapBuffers(); + } + } + + function onDisplayOpened() + { + //Clear both our frames + if (checkBoxClearWhenConnecting.checked) + { + display.clear(); + display.swapBuffers(); + display.clear(); + display.swapBuffers(); + } + } + + // Column { @@ -52,6 +90,17 @@ text: qsTr("Connect on start-up") } + CheckBox { + id: checkBoxClearWhenDisconnecting + text: qsTr("Clear when disconnecting") + } + + CheckBox { + id: checkBoxClearWhenConnecting + text: qsTr("Clear when connecting") + } + + } //ColumnLayout Slider { diff -r 64cfde8062c7 -r b935de604982 MiniDisplay/FutabaVfd.cpp --- a/MiniDisplay/FutabaVfd.cpp Wed May 28 17:08:47 2014 +0200 +++ b/MiniDisplay/FutabaVfd.cpp Wed May 28 18:44:15 2014 +0200 @@ -97,14 +97,10 @@ iFrameBuffer = NULL; iFrameBuffer=new BitArray(KGP12xFrameBufferPixelCount); SetNonBlocking(1); - //Since we can't get our display position we for it to our default + //Since we can't get our display position we force it to our default //This makes sure frames are in sync from the start + //Clever clients will have taken care of putting back frame (0,0) before closing SetDisplayPosition(iDisplayPositionX,iDisplayPositionY); - //Now clear both front and back buffer on host and device - Clear(); - SwapBuffers(); - Clear(); - SwapBuffers(); } return success; } diff -r 64cfde8062c7 -r b935de604982 MiniDisplay/FutabaVfd.h --- a/MiniDisplay/FutabaVfd.h Wed May 28 17:08:47 2014 +0200 +++ b/MiniDisplay/FutabaVfd.h Wed May 28 18:44:15 2014 +0200 @@ -145,8 +145,11 @@ //Specific to GP1212A01A void SetPixelBlock(unsigned char aX, unsigned char aY, int aHeight, int aSize, unsigned char aValue); void SetPixelBlock(unsigned char aX, unsigned char aY, int aHeight, int aSize, unsigned char* aPixels); + //Define display position within our display RAM + void SetDisplayPosition(unsigned char aX, unsigned char aY); + unsigned char DisplayPositionX() const {return iDisplayPositionX;} + unsigned char DisplayPositionY() const {return iDisplayPositionY;} // - void SetDisplayPosition(unsigned char aX, unsigned char aY); void SwapBuffers(); // void RequestDeviceId(); diff -r 64cfde8062c7 -r b935de604982 MiniDisplay/minidisplay.cpp --- a/MiniDisplay/minidisplay.cpp Wed May 28 17:08:47 2014 +0200 +++ b/MiniDisplay/minidisplay.cpp Wed May 28 18:44:15 2014 +0200 @@ -19,6 +19,7 @@ MiniDisplay::~MiniDisplay() { //qDebug() << "Delete MiniDisplay"; + close(); } @@ -39,6 +40,18 @@ void MiniDisplay::close() { + //qDebug() << "MiniDisplay::close"; + //Try to put back ourframe position to RAM 0,0 which is a multiple of 128 + if (iDisplay.IsOpen()) + { + emit closing(); + + if (iDisplay.DisplayPositionY()%128!=0) + { + //qDebug() << "SwapBuffer to put back our frame position to zero " << iDisplay.DisplayPositionY(); + iDisplay.SwapBuffers(); + } + } iDisplay.Close(); emit closed(); emit statusChanged(); @@ -234,4 +247,19 @@ iDisplay.SetBrightness(aBrightness); } +QPoint MiniDisplay::framePosition() const +{ + return QPoint(iDisplay.DisplayPositionX(),iDisplay.DisplayPositionX()); +} +void MiniDisplay::setFramePosition(const QPoint& aPoint) +{ + iFramePosition = aPoint; + + if (!iDisplay.IsOpen()) return; + + iDisplay.SetDisplayPosition(aPoint.x(),aPoint.y()); +} + + + diff -r 64cfde8062c7 -r b935de604982 MiniDisplay/minidisplay.h --- a/MiniDisplay/minidisplay.h Wed May 28 17:08:47 2014 +0200 +++ b/MiniDisplay/minidisplay.h Wed May 28 18:44:15 2014 +0200 @@ -17,6 +17,7 @@ Q_PROPERTY(int brightness READ brightness WRITE setBrightness NOTIFY brightnessChanged) Q_PROPERTY(int maxBrightness READ maxBrightness NOTIFY opened) Q_PROPERTY(int minBrightness READ minBrightness NOTIFY opened) + Q_PROPERTY(QPoint framePosition READ framePosition WRITE setFramePosition NOTIFY closed) public: //Methods @@ -45,10 +46,14 @@ int minBrightness() const; int brightness() const; void setBrightness(int aBrightness); + // + QPoint framePosition() const; + void setFramePosition(const QPoint& aPoint); signals: void opened(); void openError(); + void closing(); void closed(); void statusChanged(); void fontChanged(); @@ -71,6 +76,7 @@ QFont iFont; int iReadAttempt; int iBrightness; + QPoint iFramePosition; }; #endif // MINIDISPLAY_H