3rd Repo, trying to figure this out.

Dependencies:   LPS25H hts221

Fork of SOFT253_Template_Weather_OS_54 by Stage-1 Students SoCEM

Committer:
aburch1
Date:
Tue Apr 25 16:06:35 2017 +0000
Revision:
75:b44645bbf2d2
Parent:
74:749727490f44
Child:
76:ee1f132e5744
Logging thread set up to take and print error messages

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aburch1 74:749727490f44 1 #include "MessageLogger.h"
aburch1 74:749727490f44 2
aburch1 75:b44645bbf2d2 3 #define SIGNAL_printMessage 2
aburch1 75:b44645bbf2d2 4
aburch1 74:749727490f44 5
aburch1 74:749727490f44 6 // constructor
aburch1 75:b44645bbf2d2 7 MessageLogger::MessageLogger()
aburch1 74:749727490f44 8 {
aburch1 75:b44645bbf2d2 9 hasError = false;
aburch1 75:b44645bbf2d2 10 messageCount = 0;
aburch1 75:b44645bbf2d2 11 }
aburch1 75:b44645bbf2d2 12
aburch1 75:b44645bbf2d2 13 void MessageLogger::SetThread(Thread* logger)
aburch1 75:b44645bbf2d2 14 {
aburch1 75:b44645bbf2d2 15 loggingThread = logger;
aburch1 74:749727490f44 16 }
aburch1 74:749727490f44 17
aburch1 74:749727490f44 18 // public methods:
aburch1 74:749727490f44 19 void MessageLogger::SendError(string errorMessage)
aburch1 74:749727490f44 20 {
aburch1 75:b44645bbf2d2 21 fatalError << errorMessage << " Terminating program\n\r";
aburch1 75:b44645bbf2d2 22 loggingThread->signal_set(SIGNAL_printMessage);
aburch1 75:b44645bbf2d2 23 hasError = true;
aburch1 74:749727490f44 24 }
aburch1 75:b44645bbf2d2 25
aburch1 74:749727490f44 26 void MessageLogger::SendMessage(string message)
aburch1 74:749727490f44 27 {
aburch1 75:b44645bbf2d2 28 /*
aburch1 75:b44645bbf2d2 29 ostringstream *messageObj = message_mail.alloc();
aburch1 75:b44645bbf2d2 30 ostringstream temp = *messageObj;
aburch1 74:749727490f44 31
aburch1 75:b44645bbf2d2 32 if (messageObj == NULL)
aburch1 75:b44645bbf2d2 33 {
aburch1 75:b44645bbf2d2 34 SendError("ERROR: Message queue is full.");
aburch1 75:b44645bbf2d2 35 return;
aburch1 75:b44645bbf2d2 36 }
aburch1 75:b44645bbf2d2 37
aburch1 75:b44645bbf2d2 38 temp << message;
aburch1 75:b44645bbf2d2 39
aburch1 75:b44645bbf2d2 40 //stat = message_mail.put(messageObj);
aburch1 75:b44645bbf2d2 41
aburch1 75:b44645bbf2d2 42 //Check if succesful
aburch1 75:b44645bbf2d2 43 if (stat == osErrorResource)
aburch1 75:b44645bbf2d2 44 {
aburch1 75:b44645bbf2d2 45 ostringstream error;
aburch1 75:b44645bbf2d2 46 error << "ERROR CODE: " << stat << ", Failed to add message to the queue.\r\n";
aburch1 75:b44645bbf2d2 47 SendError(error.str());
aburch1 75:b44645bbf2d2 48 message_mail.free(messageObj);
aburch1 75:b44645bbf2d2 49 return;
aburch1 75:b44645bbf2d2 50 }
aburch1 75:b44645bbf2d2 51
aburch1 75:b44645bbf2d2 52 messageCount++;
aburch1 75:b44645bbf2d2 53 loggingThread->signal_set(SIGNAL_printMessage);
aburch1 75:b44645bbf2d2 54 */
aburch1 74:749727490f44 55 }
aburch1 75:b44645bbf2d2 56
aburch1 74:749727490f44 57 bool MessageLogger::GetError()
aburch1 74:749727490f44 58 {
aburch1 75:b44645bbf2d2 59 if(hasError)
aburch1 75:b44645bbf2d2 60 {
aburch1 75:b44645bbf2d2 61 PrintError();
aburch1 75:b44645bbf2d2 62 return true;
aburch1 75:b44645bbf2d2 63 }
aburch1 75:b44645bbf2d2 64 return false;
aburch1 74:749727490f44 65 }
aburch1 74:749727490f44 66 bool MessageLogger::GetMessage()
aburch1 74:749727490f44 67 {
aburch1 75:b44645bbf2d2 68 if(messageCount > 0)
aburch1 75:b44645bbf2d2 69 {
aburch1 75:b44645bbf2d2 70 PrintMessage();
aburch1 75:b44645bbf2d2 71 return true;
aburch1 75:b44645bbf2d2 72 }
aburch1 75:b44645bbf2d2 73 return false;
aburch1 74:749727490f44 74 }
aburch1 74:749727490f44 75
aburch1 74:749727490f44 76 void MessageLogger::PrintError()
aburch1 74:749727490f44 77 {
aburch1 75:b44645bbf2d2 78 printf(fatalError.str().c_str());
aburch1 74:749727490f44 79 }
aburch1 75:b44645bbf2d2 80
aburch1 74:749727490f44 81 void MessageLogger::PrintMessage()
aburch1 74:749727490f44 82 {
aburch1 75:b44645bbf2d2 83 osEvent evt = message_mail.get();
aburch1 74:749727490f44 84
aburch1 75:b44645bbf2d2 85 //Check status
aburch1 75:b44645bbf2d2 86 if (evt.status == osEventMail)
aburch1 75:b44645bbf2d2 87 {
aburch1 75:b44645bbf2d2 88 ostringstream *message = (ostringstream*)evt.value.p;
aburch1 75:b44645bbf2d2 89
aburch1 75:b44645bbf2d2 90 printf("Incoming!");
aburch1 75:b44645bbf2d2 91 printf(message->str().c_str());
aburch1 75:b44645bbf2d2 92
aburch1 75:b44645bbf2d2 93 message_mail.free(message);
aburch1 75:b44645bbf2d2 94 messageCount--;
aburch1 75:b44645bbf2d2 95 }
aburch1 75:b44645bbf2d2 96 /*
aburch1 75:b44645bbf2d2 97 else
aburch1 75:b44645bbf2d2 98 {
aburch1 75:b44645bbf2d2 99 ostringstream error;
aburch1 75:b44645bbf2d2 100 error << "ERROR CODE: " << evt.status << ", Failed to retrieve message from queue/n/r";
aburch1 75:b44645bbf2d2 101 SendError(error.str());
aburch1 75:b44645bbf2d2 102 }
aburch1 75:b44645bbf2d2 103 */
aburch1 74:749727490f44 104 }