3rd Repo, trying to figure this out.
Fork of SOFT253_Template_Weather_OS_54 by
Diff: MessageLogger/MessageLogger.cpp
- Revision:
- 81:996c0a3319b4
- Parent:
- 80:959151952153
- Child:
- 82:668b51a39148
diff -r 959151952153 -r 996c0a3319b4 MessageLogger/MessageLogger.cpp --- a/MessageLogger/MessageLogger.cpp Wed May 10 10:02:22 2017 +0000 +++ b/MessageLogger/MessageLogger.cpp Thu May 11 14:34:53 2017 +0000 @@ -1,15 +1,17 @@ #include "MessageLogger.h" +#include "Message.h" #define SIGNAL_printMessage 2 -Mail<string, 16> message_mail; + +Mail<Message, 16> message_mail; // constructor MessageLogger::MessageLogger() { hasError = false; messageCount = 0; - messageLock = new Mutex(); + //messageLock = new Mutex(); } void MessageLogger::SetThread(Thread* logger) @@ -25,32 +27,32 @@ hasError = true; } - string *messageObj; + Message *newMsg; - void MessageLogger::SendMessage(string message) + void MessageLogger::SendMessage(char* message) { - messageLock->lock(); - messageObj = message_mail.alloc(); + messageLock.lock(); + newMsg = message_mail.alloc(); - if (messageObj == NULL) + if (newMsg == NULL) { SendError("ERROR: Message queue is full."); - messageLock->unlock(); + messageLock.unlock(); return; } - (*messageObj) = message; + newMsg->copy(message); - stat = message_mail.put(messageObj); + stat = message_mail.put(newMsg); //Check if succesful if (stat == osErrorResource) { - message_mail.free(messageObj); + message_mail.free(newMsg); ostringstream error; - error << "ERROR CODE: " << stat << ", Failed to retrieve message from queue"; + error << "ERROR CODE: " << stat << ", Failed to put message into queue"; SendError(error.str()); - messageLock->unlock(); + messageLock.unlock(); return; } @@ -58,7 +60,7 @@ loggingThread->signal_set(SIGNAL_printMessage); printf("\033[1A\n"); - messageLock->unlock(); + messageLock.unlock(); } bool MessageLogger::GetError() @@ -82,27 +84,28 @@ void MessageLogger::PrintError() { - printf("%s", fatalError.str()); + printf("%s", fatalError.str().c_str()); hasError = false; } - string *message; + Message *message; + char copyOfString[256]; void MessageLogger::PrintMessage() { - messageLock->lock(); + messageLock.lock(); osEvent evt = message_mail.get(); //Check status if (evt.status == osEventMail) { - message = (string*)evt.value.p; - + message = (Message*)evt.value.p; + strncpy(copyOfString, message->getText(), 256); + message_mail.free(message); // 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)); + printf("%s\033[2A\n", copyOfString); - message_mail.free(message); messageCount--; } else @@ -112,5 +115,5 @@ SendError(error.str()); } - messageLock->unlock(); + messageLock.unlock(); } \ No newline at end of file