3rd Repo, trying to figure this out.
Fork of SOFT253_Template_Weather_OS_54 by
MessageLogger/MessageLogger.cpp
- Committer:
- aburch1
- Date:
- 2017-05-10
- Revision:
- 80:959151952153
- Parent:
- 79:4e6b53eb678b
- Child:
- 81:996c0a3319b4
File content as of revision 80:959151952153:
#include "MessageLogger.h" #define SIGNAL_printMessage 2 Mail<string, 16> message_mail; // constructor MessageLogger::MessageLogger() { hasError = false; messageCount = 0; messageLock = new Mutex(); } void MessageLogger::SetThread(Thread* logger) { loggingThread = logger; } // public methods: void MessageLogger::SendError(string errorMessage) { fatalError << errorMessage <<"\n\rTerminating Program...\r\n"; loggingThread->signal_set(SIGNAL_printMessage); hasError = true; } string *messageObj; void MessageLogger::SendMessage(string message) { messageLock->lock(); messageObj = message_mail.alloc(); if (messageObj == NULL) { SendError("ERROR: Message queue is full."); messageLock->unlock(); return; } (*messageObj) = message; stat = message_mail.put(messageObj); //Check if succesful if (stat == osErrorResource) { message_mail.free(messageObj); ostringstream error; error << "ERROR CODE: " << stat << ", Failed to retrieve message from queue"; SendError(error.str()); messageLock->unlock(); return; } messageCount++; loggingThread->signal_set(SIGNAL_printMessage); printf("\033[1A\n"); messageLock->unlock(); } bool MessageLogger::GetError() { if(hasError) { PrintError(); return true; } return false; } bool MessageLogger::GetMessage() { if(messageCount > 0) { PrintMessage(); return true; } return false; } void MessageLogger::PrintError() { printf("%s", fatalError.str()); hasError = false; } string *message; void MessageLogger::PrintMessage() { messageLock->lock(); osEvent evt = message_mail.get(); //Check status if (evt.status == osEventMail) { message = (string*)evt.value.p; // Ask about cout as everyone on the internet recommends it as a type safe version of printf. //std::cout << message; printf("%s\033[1A\n", (*message)); message_mail.free(message); messageCount--; } else { ostringstream error; error << "ERROR CODE: " << evt.status << ", Failed to retrieve message from queue"; SendError(error.str()); } messageLock->unlock(); }