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:
Thu Apr 27 17:09:50 2017 +0000
Revision:
78:6c2b8ade8414
Parent:
77:db3384071634
Errors now terminate the program and give user option to restart. Started to replace printf statements with message logger functions.

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 76:ee1f132e5744 5 Mail<string, 16> message_mail;
aburch1 74:749727490f44 6
aburch1 74:749727490f44 7 // constructor
aburch1 75:b44645bbf2d2 8 MessageLogger::MessageLogger()
aburch1 74:749727490f44 9 {
aburch1 75:b44645bbf2d2 10 hasError = false;
aburch1 75:b44645bbf2d2 11 messageCount = 0;
aburch1 75:b44645bbf2d2 12 }
aburch1 75:b44645bbf2d2 13
aburch1 75:b44645bbf2d2 14 void MessageLogger::SetThread(Thread* logger)
aburch1 75:b44645bbf2d2 15 {
aburch1 75:b44645bbf2d2 16 loggingThread = logger;
aburch1 74:749727490f44 17 }
aburch1 74:749727490f44 18
aburch1 74:749727490f44 19 // public methods:
aburch1 77:db3384071634 20 void MessageLogger::SendError(string errorMessage)
aburch1 74:749727490f44 21 {
aburch1 78:6c2b8ade8414 22 fatalError << "ERROR: " << errorMessage << "\n\rTerminating Program...";
aburch1 75:b44645bbf2d2 23 loggingThread->signal_set(SIGNAL_printMessage);
aburch1 75:b44645bbf2d2 24 hasError = true;
aburch1 74:749727490f44 25 }
aburch1 75:b44645bbf2d2 26
aburch1 77:db3384071634 27 void MessageLogger::SendMessage(string message)
aburch1 74:749727490f44 28 {
aburch1 77:db3384071634 29 string *messageObj = message_mail.alloc();
aburch1 77:db3384071634 30
aburch1 75:b44645bbf2d2 31 if (messageObj == NULL)
aburch1 75:b44645bbf2d2 32 {
aburch1 78:6c2b8ade8414 33 SendError("Message queue is full.");
aburch1 75:b44645bbf2d2 34 return;
aburch1 75:b44645bbf2d2 35 }
aburch1 77:db3384071634 36
aburch1 77:db3384071634 37 (*messageObj) = message;
aburch1 75:b44645bbf2d2 38
aburch1 77:db3384071634 39 stat = message_mail.put(messageObj);
aburch1 75:b44645bbf2d2 40
aburch1 75:b44645bbf2d2 41 //Check if succesful
aburch1 75:b44645bbf2d2 42 if (stat == osErrorResource)
aburch1 75:b44645bbf2d2 43 {
aburch1 75:b44645bbf2d2 44 message_mail.free(messageObj);
aburch1 77:db3384071634 45 ostringstream error;
aburch1 78:6c2b8ade8414 46 error << stat << " - Failed to retrieve message from queue";
aburch1 77:db3384071634 47 SendError(error.str());
aburch1 75:b44645bbf2d2 48 return;
aburch1 75:b44645bbf2d2 49 }
aburch1 77:db3384071634 50
aburch1 77:db3384071634 51 messageCount++;
aburch1 77:db3384071634 52 loggingThread->signal_set(SIGNAL_printMessage);
aburch1 74:749727490f44 53 }
aburch1 75:b44645bbf2d2 54
aburch1 74:749727490f44 55 bool MessageLogger::GetError()
aburch1 74:749727490f44 56 {
aburch1 75:b44645bbf2d2 57 if(hasError)
aburch1 75:b44645bbf2d2 58 {
aburch1 75:b44645bbf2d2 59 PrintError();
aburch1 78:6c2b8ade8414 60 hasError = false;
aburch1 75:b44645bbf2d2 61 return true;
aburch1 75:b44645bbf2d2 62 }
aburch1 75:b44645bbf2d2 63 return false;
aburch1 74:749727490f44 64 }
aburch1 74:749727490f44 65 bool MessageLogger::GetMessage()
aburch1 74:749727490f44 66 {
aburch1 75:b44645bbf2d2 67 if(messageCount > 0)
aburch1 75:b44645bbf2d2 68 {
aburch1 75:b44645bbf2d2 69 PrintMessage();
aburch1 75:b44645bbf2d2 70 return true;
aburch1 75:b44645bbf2d2 71 }
aburch1 77:db3384071634 72 return false;
aburch1 74:749727490f44 73 }
aburch1 74:749727490f44 74
aburch1 74:749727490f44 75 void MessageLogger::PrintError()
aburch1 74:749727490f44 76 {
aburch1 78:6c2b8ade8414 77 printf("%s\n\r", fatalError.str().c_str());
aburch1 74:749727490f44 78 }
aburch1 75:b44645bbf2d2 79
aburch1 74:749727490f44 80 void MessageLogger::PrintMessage()
aburch1 74:749727490f44 81 {
aburch1 75:b44645bbf2d2 82 osEvent evt = message_mail.get();
aburch1 74:749727490f44 83
aburch1 75:b44645bbf2d2 84 //Check status
aburch1 75:b44645bbf2d2 85 if (evt.status == osEventMail)
aburch1 75:b44645bbf2d2 86 {
aburch1 77:db3384071634 87 string *message = (string*)evt.value.p;
aburch1 75:b44645bbf2d2 88
aburch1 77:db3384071634 89 // Ask about cout as everyone on the internet recommends it as a type safe version of printf.
aburch1 77:db3384071634 90 //std::cout << message;
aburch1 78:6c2b8ade8414 91 printf((*message).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 else
aburch1 75:b44645bbf2d2 97 {
aburch1 77:db3384071634 98 ostringstream error;
aburch1 78:6c2b8ade8414 99 error << evt.status << " - Failed to retrieve message from queue";
aburch1 77:db3384071634 100 SendError(error.str());
aburch1 75:b44645bbf2d2 101 }
aburch1 74:749727490f44 102 }