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
Diff: Screens/ViewLogScreen.h
- 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