Support headless operation on Raspberry Pi 4

Some code cleanup for src/kernel.*
pull/37/head
Rene Stange 3 years ago
parent c02d749d3c
commit adadc17690
  1. 10
      src/circle_stdlib_app.h
  2. 18
      src/kernel.cpp
  3. 6
      src/kernel.h

@ -97,6 +97,7 @@ public:
: CStdlibApp (kernel), : CStdlibApp (kernel),
mScreenUnbuffered (mOptions.GetWidth (), mOptions.GetHeight ()), mScreenUnbuffered (mOptions.GetWidth (), mOptions.GetHeight ()),
mScreen (&mScreenUnbuffered), mScreen (&mScreenUnbuffered),
mbScreenAvailable (false),
mTimer (&mInterrupt), mTimer (&mInterrupt),
mLogger (mOptions.GetLogLevel (), &mTimer) mLogger (mOptions.GetLogLevel (), &mTimer)
{ {
@ -109,10 +110,7 @@ public:
return false; return false;
} }
if (!mScreenUnbuffered.Initialize ()) mbScreenAvailable = mScreenUnbuffered.Initialize ();
{
return false;
}
#if 0 #if 0
if (!mSerial.Initialize (115200)) if (!mSerial.Initialize (115200))
{ {
@ -138,6 +136,7 @@ protected:
CScreenDevice mScreenUnbuffered; CScreenDevice mScreenUnbuffered;
//CSerialDevice mSerial; //CSerialDevice mSerial;
CWriteBufferDevice mScreen; CWriteBufferDevice mScreen;
bool mbScreenAvailable;
CTimer mTimer; CTimer mTimer;
CLogger mLogger; CLogger mLogger;
}; };
@ -164,7 +163,8 @@ public:
mUSBHCI (&mInterrupt, &mTimer, TRUE), mUSBHCI (&mInterrupt, &mTimer, TRUE),
mEMMC (&mInterrupt, &mTimer, &mActLED), mEMMC (&mInterrupt, &mTimer, &mActLED),
#if !defined(__aarch64__) || !defined(LEAVE_QEMU_ON_HALT) #if !defined(__aarch64__) || !defined(LEAVE_QEMU_ON_HALT)
mConsole (&mScreen, TRUE) //mConsole (&mScreen, TRUE)
mConsole (&mNullDevice, &mScreen)
#else #else
mConsole (&mScreen) mConsole (&mScreen)
#endif #endif

@ -18,10 +18,10 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
// //
#include "kernel.h" #include "kernel.h"
#include <iostream>
#include <string.h> #include <string.h>
#include <circle/logger.h> #include <circle/logger.h>
#include <circle/synchronize.h> #include <circle/synchronize.h>
#include <assert.h>
LOGMODULE ("kernel"); LOGMODULE ("kernel");
@ -75,6 +75,8 @@ bool CKernel::Initialize (void)
m_pDexed = new CMiniDexedPWM (&m_Config, &mInterrupt); m_pDexed = new CMiniDexedPWM (&m_Config, &mInterrupt);
} }
assert (m_pDexed);
if (!m_pDexed->Initialize ()) if (!m_pDexed->Initialize ())
{ {
return FALSE; return FALSE;
@ -85,15 +87,18 @@ bool CKernel::Initialize (void)
CStdlibApp::TShutdownMode CKernel::Run (void) CStdlibApp::TShutdownMode CKernel::Run (void)
{ {
std::cout << "Hello MiniDexed!\n"; assert (m_pDexed);
while(42==42) while (42 == 42)
{ {
boolean bUpdated = mUSBHCI.UpdatePlugAndPlay (); boolean bUpdated = mUSBHCI.UpdatePlugAndPlay ();
m_pDexed->Process(bUpdated); m_pDexed->Process(bUpdated);
mScreen.Update (); if (mbScreenAvailable)
{
mScreen.Update ();
}
} }
return ShutdownHalt; return ShutdownHalt;
@ -103,5 +108,8 @@ void CKernel::PanicHandler (void)
{ {
EnableIRQs (); EnableIRQs ();
s_pThis->mScreen.Update (4096); if (s_pThis->mbScreenAvailable)
{
s_pThis->mScreen.Update (4096);
}
} }

@ -47,9 +47,9 @@ private:
private: private:
// do not change this order // do not change this order
CConfig m_Config; CConfig m_Config;
CI2CMaster m_I2CMaster; CI2CMaster m_I2CMaster;
CMiniDexed *m_pDexed; CMiniDexed *m_pDexed;
static CKernel *s_pThis; static CKernel *s_pThis;
}; };

Loading…
Cancel
Save