3rd Repo, trying to figure this out.
Fork of SOFT253_Template_Weather_OS_54 by
MessageLogger/MessageLogger.cpp@81:996c0a3319b4, 2017-05-11 (annotated)
- Committer:
- aburch1
- Date:
- Thu May 11 14:34:53 2017 +0000
- Revision:
- 81:996c0a3319b4
- Parent:
- 80:959151952153
- Child:
- 82:668b51a39148
Changed the logger to use char arrays of a size 256 and fixed some issues that cropped up from this. Moved all printing statements over to use the logger
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
aburch1 | 74:749727490f44 | 1 | #include "MessageLogger.h" |
aburch1 | 81:996c0a3319b4 | 2 | #include "Message.h" |
aburch1 | 74:749727490f44 | 3 | |
aburch1 | 75:b44645bbf2d2 | 4 | #define SIGNAL_printMessage 2 |
aburch1 | 75:b44645bbf2d2 | 5 | |
aburch1 | 81:996c0a3319b4 | 6 | |
aburch1 | 81:996c0a3319b4 | 7 | Mail<Message, 16> message_mail; |
aburch1 | 74:749727490f44 | 8 | |
aburch1 | 74:749727490f44 | 9 | // constructor |
aburch1 | 75:b44645bbf2d2 | 10 | MessageLogger::MessageLogger() |
aburch1 | 74:749727490f44 | 11 | { |
aburch1 | 75:b44645bbf2d2 | 12 | hasError = false; |
aburch1 | 75:b44645bbf2d2 | 13 | messageCount = 0; |
aburch1 | 81:996c0a3319b4 | 14 | //messageLock = new Mutex(); |
aburch1 | 75:b44645bbf2d2 | 15 | } |
aburch1 | 75:b44645bbf2d2 | 16 | |
aburch1 | 75:b44645bbf2d2 | 17 | void MessageLogger::SetThread(Thread* logger) |
aburch1 | 75:b44645bbf2d2 | 18 | { |
aburch1 | 75:b44645bbf2d2 | 19 | loggingThread = logger; |
aburch1 | 74:749727490f44 | 20 | } |
aburch1 | 74:749727490f44 | 21 | |
aburch1 | 74:749727490f44 | 22 | // public methods: |
aburch1 | 77:db3384071634 | 23 | void MessageLogger::SendError(string errorMessage) |
aburch1 | 74:749727490f44 | 24 | { |
aburch1 | 79:4e6b53eb678b | 25 | fatalError << errorMessage <<"\n\rTerminating Program...\r\n"; |
aburch1 | 75:b44645bbf2d2 | 26 | loggingThread->signal_set(SIGNAL_printMessage); |
aburch1 | 75:b44645bbf2d2 | 27 | hasError = true; |
aburch1 | 74:749727490f44 | 28 | } |
aburch1 | 75:b44645bbf2d2 | 29 | |
aburch1 | 81:996c0a3319b4 | 30 | Message *newMsg; |
aburch1 | 79:4e6b53eb678b | 31 | |
aburch1 | 81:996c0a3319b4 | 32 | void MessageLogger::SendMessage(char* message) |
aburch1 | 74:749727490f44 | 33 | { |
aburch1 | 81:996c0a3319b4 | 34 | messageLock.lock(); |
aburch1 | 81:996c0a3319b4 | 35 | newMsg = message_mail.alloc(); |
aburch1 | 77:db3384071634 | 36 | |
aburch1 | 81:996c0a3319b4 | 37 | if (newMsg == NULL) |
aburch1 | 75:b44645bbf2d2 | 38 | { |
aburch1 | 75:b44645bbf2d2 | 39 | SendError("ERROR: Message queue is full."); |
aburch1 | 81:996c0a3319b4 | 40 | messageLock.unlock(); |
aburch1 | 75:b44645bbf2d2 | 41 | return; |
aburch1 | 75:b44645bbf2d2 | 42 | } |
aburch1 | 77:db3384071634 | 43 | |
aburch1 | 81:996c0a3319b4 | 44 | newMsg->copy(message); |
aburch1 | 75:b44645bbf2d2 | 45 | |
aburch1 | 81:996c0a3319b4 | 46 | stat = message_mail.put(newMsg); |
aburch1 | 75:b44645bbf2d2 | 47 | |
aburch1 | 75:b44645bbf2d2 | 48 | //Check if succesful |
aburch1 | 75:b44645bbf2d2 | 49 | if (stat == osErrorResource) |
aburch1 | 75:b44645bbf2d2 | 50 | { |
aburch1 | 81:996c0a3319b4 | 51 | message_mail.free(newMsg); |
aburch1 | 77:db3384071634 | 52 | ostringstream error; |
aburch1 | 81:996c0a3319b4 | 53 | error << "ERROR CODE: " << stat << ", Failed to put message into queue"; |
aburch1 | 77:db3384071634 | 54 | SendError(error.str()); |
aburch1 | 81:996c0a3319b4 | 55 | messageLock.unlock(); |
aburch1 | 75:b44645bbf2d2 | 56 | return; |
aburch1 | 75:b44645bbf2d2 | 57 | } |
aburch1 | 77:db3384071634 | 58 | |
aburch1 | 77:db3384071634 | 59 | messageCount++; |
aburch1 | 77:db3384071634 | 60 | loggingThread->signal_set(SIGNAL_printMessage); |
aburch1 | 80:959151952153 | 61 | |
aburch1 | 80:959151952153 | 62 | printf("\033[1A\n"); |
aburch1 | 81:996c0a3319b4 | 63 | messageLock.unlock(); |
aburch1 | 74:749727490f44 | 64 | } |
aburch1 | 75:b44645bbf2d2 | 65 | |
aburch1 | 74:749727490f44 | 66 | bool MessageLogger::GetError() |
aburch1 | 74:749727490f44 | 67 | { |
aburch1 | 75:b44645bbf2d2 | 68 | if(hasError) |
aburch1 | 75:b44645bbf2d2 | 69 | { |
aburch1 | 75:b44645bbf2d2 | 70 | PrintError(); |
aburch1 | 75:b44645bbf2d2 | 71 | return true; |
aburch1 | 75:b44645bbf2d2 | 72 | } |
aburch1 | 75:b44645bbf2d2 | 73 | return false; |
aburch1 | 74:749727490f44 | 74 | } |
aburch1 | 74:749727490f44 | 75 | bool MessageLogger::GetMessage() |
aburch1 | 74:749727490f44 | 76 | { |
aburch1 | 75:b44645bbf2d2 | 77 | if(messageCount > 0) |
aburch1 | 75:b44645bbf2d2 | 78 | { |
aburch1 | 75:b44645bbf2d2 | 79 | PrintMessage(); |
aburch1 | 75:b44645bbf2d2 | 80 | return true; |
aburch1 | 75:b44645bbf2d2 | 81 | } |
aburch1 | 77:db3384071634 | 82 | return false; |
aburch1 | 74:749727490f44 | 83 | } |
aburch1 | 74:749727490f44 | 84 | |
aburch1 | 74:749727490f44 | 85 | void MessageLogger::PrintError() |
aburch1 | 74:749727490f44 | 86 | { |
aburch1 | 81:996c0a3319b4 | 87 | printf("%s", fatalError.str().c_str()); |
aburch1 | 79:4e6b53eb678b | 88 | hasError = false; |
aburch1 | 74:749727490f44 | 89 | } |
aburch1 | 75:b44645bbf2d2 | 90 | |
aburch1 | 81:996c0a3319b4 | 91 | Message *message; |
aburch1 | 81:996c0a3319b4 | 92 | char copyOfString[256]; |
aburch1 | 79:4e6b53eb678b | 93 | |
aburch1 | 74:749727490f44 | 94 | void MessageLogger::PrintMessage() |
aburch1 | 74:749727490f44 | 95 | { |
aburch1 | 81:996c0a3319b4 | 96 | messageLock.lock(); |
aburch1 | 75:b44645bbf2d2 | 97 | osEvent evt = message_mail.get(); |
aburch1 | 74:749727490f44 | 98 | |
aburch1 | 75:b44645bbf2d2 | 99 | //Check status |
aburch1 | 75:b44645bbf2d2 | 100 | if (evt.status == osEventMail) |
aburch1 | 75:b44645bbf2d2 | 101 | { |
aburch1 | 81:996c0a3319b4 | 102 | message = (Message*)evt.value.p; |
aburch1 | 81:996c0a3319b4 | 103 | strncpy(copyOfString, message->getText(), 256); |
aburch1 | 81:996c0a3319b4 | 104 | message_mail.free(message); |
aburch1 | 77:db3384071634 | 105 | // Ask about cout as everyone on the internet recommends it as a type safe version of printf. |
aburch1 | 77:db3384071634 | 106 | //std::cout << message; |
aburch1 | 81:996c0a3319b4 | 107 | printf("%s\033[2A\n", copyOfString); |
aburch1 | 75:b44645bbf2d2 | 108 | |
aburch1 | 75:b44645bbf2d2 | 109 | messageCount--; |
aburch1 | 75:b44645bbf2d2 | 110 | } |
aburch1 | 75:b44645bbf2d2 | 111 | else |
aburch1 | 75:b44645bbf2d2 | 112 | { |
aburch1 | 77:db3384071634 | 113 | ostringstream error; |
aburch1 | 77:db3384071634 | 114 | error << "ERROR CODE: " << evt.status << ", Failed to retrieve message from queue"; |
aburch1 | 77:db3384071634 | 115 | SendError(error.str()); |
aburch1 | 75:b44645bbf2d2 | 116 | } |
aburch1 | 80:959151952153 | 117 | |
aburch1 | 81:996c0a3319b4 | 118 | messageLock.unlock(); |
aburch1 | 74:749727490f44 | 119 | } |