11#include " ScreenData.hpp"
22#include < string.h>
33#include < assert.h>
4- #include < mutex>
4+ #include " hal/System/LockGuard.hpp"
5+ #include " utils.h"
56
67ScreenData::ScreenData (MutexInterface& mutex) :
78 mMutex(mutex),
@@ -21,9 +22,16 @@ ScreenData::ScreenData(MutexInterface& mutex) :
2122void ScreenData::setData (uint32_t * data, uint32_t startIndex, uint32_t numWords)
2223{
2324 assert (startIndex + numWords <= sizeof (mScreenData ));
24- std::lock_guard<MutexInterface> lockGuard (mMutex );
25- memcpy (mScreenData + startIndex, data, numWords);
26- mNewDataAvailable = true ;
25+ LockGuard lockGuard (mMutex );
26+ if (lockGuard.isLocked ())
27+ {
28+ memcpy (mScreenData + startIndex, data, numWords);
29+ mNewDataAvailable = true ;
30+ }
31+ else
32+ {
33+ DEBUG_PRINT (" FAULT: failed to set screen data\n " );
34+ }
2735}
2836
2937bool ScreenData::isNewDataAvailable () const
@@ -33,7 +41,15 @@ bool ScreenData::isNewDataAvailable() const
3341
3442void ScreenData::readData (uint32_t * out)
3543{
36- std::lock_guard<MutexInterface> lockGuard (mMutex );
37- mNewDataAvailable = false ;
44+ LockGuard lockGuard (mMutex );
45+ if (lockGuard.isLocked ())
46+ {
47+ mNewDataAvailable = false ;
48+ }
49+ else
50+ {
51+ DEBUG_PRINT (" FAULT: failed to set screen data\n " );
52+ }
53+ // Allow this to happen, even if locking failed
3854 memcpy (out, mScreenData , sizeof (mScreenData ));
3955}
0 commit comments