This program consists of the software developed for the ELEC5870M Individual Project. It runs on the mbed LPC1768. It uses the mbed RTOS to perform the following tasks: - Implements intuitive GUI with buttons, LCD TFT Display and LEDs. - Serial Communication with the RPi - I2C communication with INA219 voltage current sensors - Power control at the USB ports

Dependencies:   Adafruit_GFX Adafruit_ST7735 INA219 MODSERIAL MbedJSONValue mbed-rtos mbed

Revision:
3:7666de697752
Child:
6:196a63a3378d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Screens/ViewLogScreen.h	Sat Feb 04 20:17:44 2017 +0000
@@ -0,0 +1,179 @@
+#ifndef VIEWLOGSCREEN_H
+#define VIEWLOGSCREEN_H
+
+#include "ListController.h"
+#include "LogManager.h"
+#include "RecordScreen.h"
+
+class ViewLogScreen: public Button <ViewLogScreen>
+{
+public:
+    ViewLogScreen(uint16_t backgroundColor); // constructor
+    int start();
+    void buttonPressed(int button);
+private:
+    void getLogRecords();    // this function fills the Log Array with records available
+    void displayRecords();  // displays the available records
+    void emptyRecords();    // empty the array that stores the records
+    ListController *list;   // this is the list used to display the logs
+    LogRecord records[4];      // array that stores a maximum of 4 log records
+    int numberOfRecords;    // stores the number of records to show
+    int changeScreen;
+    uint16_t backgroundColor;   // stores the background color
+    bool showDetails;   // knows when it is time to show a record's details
+};
+
+ViewLogScreen::ViewLogScreen(uint16_t bgColor)
+{
+    backgroundColor = bgColor;
+}
+
+int ViewLogScreen::start()
+{
+    // retireves the Log Records
+    getLogRecords();
+    // display those records on a list controller
+    displayRecords();
+
+    // attach interrupts to buttons
+    Button<ViewLogScreen>::activateButtons(this);
+
+    changeScreen = 0;
+    showDetails = false;
+
+    // have the infinite while loop that waits for an event
+    while (changeScreen == 0) {
+        //updateTile();
+        //wait_ms(250);
+       Thread::wait(250);   
+
+        if(showDetails && (numberOfRecords>0)) {
+            // first deactivate the buttons
+            Button<ViewLogScreen>::deActivateButtons();
+
+            // then clear the screen
+            tft.fillScreen(backgroundColor);
+
+            // get the option selected
+            int detail = (list->getCurrentOption())-1;
+
+            // create record screen object
+            RecordScreen recordScreen(backgroundColor);
+
+            // launch record screen with appropriate object
+            recordScreen.start(records[detail]);
+
+            // recativate the buttons
+            Button<ViewLogScreen>::activateButtons(this);
+            
+            // then clear the screen
+            tft.fillScreen(backgroundColor);
+            
+            // show the data again
+            list->drawList();
+
+            // reset flag
+            showDetails = false;
+        }
+    }
+
+    // release memory back to heap
+    delete list;
+
+    // empty the records array
+    emptyRecords();
+
+    // dettach interrupts to buttons
+    Button<ViewLogScreen>::deActivateButtons();
+
+    return changeScreen;
+}
+
+void ViewLogScreen::getLogRecords()
+{
+
+    // create a Log Manager object
+    // send the reference of the records array and Log Manager
+    // will fill it with available records
+    // it returns the number of records availble
+    LogManager manager;
+    numberOfRecords = manager.retrieveLog(records);
+
+    // arrange records with according to time. The latest record first
+    if(numberOfRecords > 1) {       
+        for(int i = 0; i < (numberOfRecords-1); i++) {
+            // compare a given record with all proceding records
+            for( int j = 0; j < (numberOfRecords-1); j++) {     
+                // check if the time of recording is earlier than the record of interest
+                if(records[i].getTimeStamp() < records[j+1].getTimeStamp()) {
+                    // swap records
+                    LogRecord record = records[i];
+                    records[i] = records[j+1];
+                    records[j+1] = record;
+                }
+            }
+        }
+
+    }
+
+
+    // use the data to construct a list controller with the data
+}
+
+void ViewLogScreen::displayRecords()
+{
+
+    myled2 = 1;
+    list = new ListController( 0,
+                               0,
+                               "Logs",
+                               records[0].getName(),
+                               records[1].getName(),
+                               records[2].getName(),
+                               records[3].getName(),
+                               backgroundColor,
+                               numberOfRecords);
+
+
+    list->drawList();
+
+}
+
+void ViewLogScreen::emptyRecords()
+{
+
+    for(int i = 0; i < 4; i++) {
+        LogRecord record;   // empty record
+        records[i] = record;    // store empty record
+    }
+
+    numberOfRecords = 0;    // there are now no records left
+}
+
+void ViewLogScreen::buttonPressed(int button)
+{
+    switch(button) {
+
+        case BACKBUTTON:
+            // navigate to the previous screen
+            changeScreen = -1;
+            break;
+
+        case SCROLLBUTTON:
+            // scroll to the next option
+            list->scroll();
+            break;
+
+        case ENTERBUTTON:
+            // navigate to the selected option
+            //changeScreen = ListController::getCurrentOption();
+            showDetails = true;
+
+        default:
+            // do nothing
+            break;
+    }
+}
+
+
+#endif
\ No newline at end of file