From adadc176905b6e82bafc20818ecda74d94c4a8a4 Mon Sep 17 00:00:00 2001 From: Rene Stange Date: Wed, 2 Mar 2022 11:00:01 +0100 Subject: [PATCH] Support headless operation on Raspberry Pi 4 Some code cleanup for src/kernel.* --- src/circle_stdlib_app.h | 10 +++++----- src/kernel.cpp | 18 +++++++++++++----- src/kernel.h | 6 +++--- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/circle_stdlib_app.h b/src/circle_stdlib_app.h index 170a39d..75cbde2 100644 --- a/src/circle_stdlib_app.h +++ b/src/circle_stdlib_app.h @@ -97,6 +97,7 @@ public: : CStdlibApp (kernel), mScreenUnbuffered (mOptions.GetWidth (), mOptions.GetHeight ()), mScreen (&mScreenUnbuffered), + mbScreenAvailable (false), mTimer (&mInterrupt), mLogger (mOptions.GetLogLevel (), &mTimer) { @@ -109,10 +110,7 @@ public: return false; } - if (!mScreenUnbuffered.Initialize ()) - { - return false; - } + mbScreenAvailable = mScreenUnbuffered.Initialize (); #if 0 if (!mSerial.Initialize (115200)) { @@ -138,6 +136,7 @@ protected: CScreenDevice mScreenUnbuffered; //CSerialDevice mSerial; CWriteBufferDevice mScreen; + bool mbScreenAvailable; CTimer mTimer; CLogger mLogger; }; @@ -164,7 +163,8 @@ public: mUSBHCI (&mInterrupt, &mTimer, TRUE), mEMMC (&mInterrupt, &mTimer, &mActLED), #if !defined(__aarch64__) || !defined(LEAVE_QEMU_ON_HALT) - mConsole (&mScreen, TRUE) + //mConsole (&mScreen, TRUE) + mConsole (&mNullDevice, &mScreen) #else mConsole (&mScreen) #endif diff --git a/src/kernel.cpp b/src/kernel.cpp index 84aeba8..c658854 100644 --- a/src/kernel.cpp +++ b/src/kernel.cpp @@ -18,10 +18,10 @@ // along with this program. If not, see . // #include "kernel.h" -#include #include #include #include +#include LOGMODULE ("kernel"); @@ -75,6 +75,8 @@ bool CKernel::Initialize (void) m_pDexed = new CMiniDexedPWM (&m_Config, &mInterrupt); } + assert (m_pDexed); + if (!m_pDexed->Initialize ()) { return FALSE; @@ -85,15 +87,18 @@ bool CKernel::Initialize (void) CStdlibApp::TShutdownMode CKernel::Run (void) { - std::cout << "Hello MiniDexed!\n"; + assert (m_pDexed); - while(42==42) + while (42 == 42) { boolean bUpdated = mUSBHCI.UpdatePlugAndPlay (); m_pDexed->Process(bUpdated); - mScreen.Update (); + if (mbScreenAvailable) + { + mScreen.Update (); + } } return ShutdownHalt; @@ -103,5 +108,8 @@ void CKernel::PanicHandler (void) { EnableIRQs (); - s_pThis->mScreen.Update (4096); + if (s_pThis->mbScreenAvailable) + { + s_pThis->mScreen.Update (4096); + } } diff --git a/src/kernel.h b/src/kernel.h index 6195110..5d626f9 100644 --- a/src/kernel.h +++ b/src/kernel.h @@ -47,9 +47,9 @@ private: private: // do not change this order - CConfig m_Config; - CI2CMaster m_I2CMaster; - CMiniDexed *m_pDexed; + CConfig m_Config; + CI2CMaster m_I2CMaster; + CMiniDexed *m_pDexed; static CKernel *s_pThis; };