Component Test's Software to work with "Universal Controller Box" - Software is an interpreter or "compiler" for programs to be done with a .txt file and read off of the SD Card

Dependencies:   BridgeDriver FrontPanelButtons MCP23017 SDFileSystem TextLCD mbed

Committer:
mehatfie
Date:
Fri Oct 03 21:33:46 2014 +0000
Revision:
16:2482d226cf4d
Parent:
11:bc9cd2869f95
- Updated Errors; - Initializes SD Card to work every time; - Cycle timer starts immediately on first cycle

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mehatfie 2:3e7baa3e3fec 1 #ifndef TEXTFILE_HPP
mehatfie 2:3e7baa3e3fec 2 #define TEXTFILE_HPP
mehatfie 2:3e7baa3e3fec 3
mehatfie 0:22618cf06f45 4 #include "mbed.h"
mehatfie 0:22618cf06f45 5 #include "TextLCD.h"
mehatfie 0:22618cf06f45 6 #include "SDFileSystem.h"
mehatfie 0:22618cf06f45 7 #include <stdio.h>
mehatfie 0:22618cf06f45 8 #include <string>
mehatfie 0:22618cf06f45 9 #include <stdlib.h>
mehatfie 0:22618cf06f45 10 #include <vector>
mehatfie 0:22618cf06f45 11 using std::string;
mehatfie 0:22618cf06f45 12
mehatfie 2:3e7baa3e3fec 13 #include <iostream>
mehatfie 2:3e7baa3e3fec 14 #include <istream>
mehatfie 2:3e7baa3e3fec 15 #include <ostream>
mehatfie 2:3e7baa3e3fec 16 #include <iterator>
mehatfie 2:3e7baa3e3fec 17 #include <sstream>
mehatfie 2:3e7baa3e3fec 18
mehatfie 2:3e7baa3e3fec 19
mehatfie 0:22618cf06f45 20
mehatfie 0:22618cf06f45 21 //vector<string> filenames; //filenames are stored in a vector string
mehatfie 0:22618cf06f45 22
mehatfie 2:3e7baa3e3fec 23 vector<string> readFileNames(char []);
mehatfie 0:22618cf06f45 24 int getFileNamesWithoutExt(string[], vector<string> &);
mehatfie 0:22618cf06f45 25 string getPreviousLine(istream &);
mehatfie 0:22618cf06f45 26
mehatfie 0:22618cf06f45 27
mehatfie 0:22618cf06f45 28
mehatfie 0:22618cf06f45 29 /******************************************************************************/
mehatfie 0:22618cf06f45 30 /*** <readFileNames> ***/
mehatfie 0:22618cf06f45 31 /******************************************************************************/
mehatfie 0:22618cf06f45 32 // read file names into vector of strings
mehatfie 0:22618cf06f45 33 vector<string> readFileNames(char *dir) {
mehatfie 0:22618cf06f45 34
mehatfie 0:22618cf06f45 35 vector<string> filenames;
mehatfie 0:22618cf06f45 36 DIR *dp;
mehatfie 0:22618cf06f45 37 struct dirent *dirp;
mehatfie 6:d1594fd2ec5a 38
mehatfie 9:5a0c4c6e39c7 39
mehatfie 0:22618cf06f45 40 dp = opendir(dir);
mehatfie 6:d1594fd2ec5a 41
mehatfie 9:5a0c4c6e39c7 42 //if no directory was found, don't try and get the fileNames and return an empty vector of 0
mehatfie 9:5a0c4c6e39c7 43 if (dp != NULL){
mehatfie 9:5a0c4c6e39c7 44
mehatfie 9:5a0c4c6e39c7 45 //read all directory and file names in current directory into filename vector
mehatfie 9:5a0c4c6e39c7 46 while((dirp = readdir(dp)) != NULL) {
mehatfie 9:5a0c4c6e39c7 47 filenames.push_back(string(dirp->d_name));
mehatfie 9:5a0c4c6e39c7 48 }
mehatfie 9:5a0c4c6e39c7 49 closedir(dp);
mehatfie 0:22618cf06f45 50 }
mehatfie 0:22618cf06f45 51 return filenames;
mehatfie 0:22618cf06f45 52 }
mehatfie 0:22618cf06f45 53
mehatfie 0:22618cf06f45 54
mehatfie 0:22618cf06f45 55
mehatfie 0:22618cf06f45 56 /******************************************************************************/
mehatfie 0:22618cf06f45 57 /*** <getFileNamesWithoutExt> ***/
mehatfie 0:22618cf06f45 58 /******************************************************************************/
mehatfie 0:22618cf06f45 59 // save filename strings to array from vector using an iterator
mehatfie 2:3e7baa3e3fec 60 int getFileNamesWithoutExt(vector<string> &textFiles, vector<string> filenames) {
mehatfie 0:22618cf06f45 61
mehatfie 0:22618cf06f45 62 //Cycle through all files listed in the directoy (strings in the vector list)
mehatfie 0:22618cf06f45 63 int n = 0;
mehatfie 11:bc9cd2869f95 64 for(vector<string>::iterator it=filenames.begin(); it < filenames.end(); it++){
mehatfie 2:3e7baa3e3fec 65
mehatfie 2:3e7baa3e3fec 66 vector<string> fileName; //filename[0] = filename, filename[1] = extension
mehatfie 2:3e7baa3e3fec 67
mehatfie 2:3e7baa3e3fec 68 stringstream ss;
mehatfie 2:3e7baa3e3fec 69 ss << (*it);
mehatfie 0:22618cf06f45 70
mehatfie 2:3e7baa3e3fec 71 //parse the array based on a '.' delimeter, effectively getting the file name and extension
mehatfie 2:3e7baa3e3fec 72 string item;
mehatfie 2:3e7baa3e3fec 73 while (getline(ss, item, '.')) {
mehatfie 2:3e7baa3e3fec 74 fileName.push_back(item);
mehatfie 2:3e7baa3e3fec 75 }
mehatfie 2:3e7baa3e3fec 76
mehatfie 2:3e7baa3e3fec 77 // if the fileName vector has two items (a name and an extension) and is a .txt file, then save it to the array
mehatfie 2:3e7baa3e3fec 78 if (fileName.size() == 2 && fileName[1].compare("txt") == 0) {
mehatfie 2:3e7baa3e3fec 79 textFiles.push_back(fileName[0]);
mehatfie 0:22618cf06f45 80 n++;
mehatfie 2:3e7baa3e3fec 81 }
mehatfie 0:22618cf06f45 82 }
mehatfie 0:22618cf06f45 83
mehatfie 0:22618cf06f45 84 return n; //Return the number of txt files that were found in the directory
mehatfie 0:22618cf06f45 85 }
mehatfie 0:22618cf06f45 86
mehatfie 0:22618cf06f45 87 /******************************************************************************/
mehatfie 0:22618cf06f45 88 /*** <getNextLine> ***/
mehatfie 0:22618cf06f45 89 /******************************************************************************/
mehatfie 0:22618cf06f45 90 //
mehatfie 0:22618cf06f45 91
mehatfie 9:5a0c4c6e39c7 92 int getNextLine(FILE *selectedFile, LineData &lineData) {
mehatfie 0:22618cf06f45 93
mehatfie 11:bc9cd2869f95 94 int validLine = 0;
mehatfie 11:bc9cd2869f95 95 while (!validLine){
mehatfie 11:bc9cd2869f95 96
mehatfie 11:bc9cd2869f95 97 lineData.lineAddress = ftell(selectedFile);
mehatfie 11:bc9cd2869f95 98
mehatfie 11:bc9cd2869f95 99 if (lineData.lineAddress == -1L){
mehatfie 11:bc9cd2869f95 100 ErrorOut("Unable to get address of line, SD Card Removed?", lineData.lineNumber + 1);
mehatfie 11:bc9cd2869f95 101 return -1;
mehatfie 11:bc9cd2869f95 102 }
mehatfie 11:bc9cd2869f95 103
mehatfie 11:bc9cd2869f95 104 //char *newLine;
mehatfie 11:bc9cd2869f95 105 //getline(selectedFile, newLine);
mehatfie 11:bc9cd2869f95 106 char newLine[MAX_LINE_LENGTH];
mehatfie 11:bc9cd2869f95 107
mehatfie 11:bc9cd2869f95 108 fgets(newLine, MAX_LINE_LENGTH, selectedFile);
mehatfie 11:bc9cd2869f95 109
mehatfie 11:bc9cd2869f95 110 if (newLine == NULL){
mehatfie 11:bc9cd2869f95 111 ErrorOut("Unable to get the next line, SD Card Removed?", lineData.lineNumber + 1);
mehatfie 11:bc9cd2869f95 112 return -1;
mehatfie 11:bc9cd2869f95 113 }
mehatfie 11:bc9cd2869f95 114
mehatfie 11:bc9cd2869f95 115 lineData.lineNumber++; // new line successfully found, increase lineNumber
mehatfie 11:bc9cd2869f95 116
mehatfie 11:bc9cd2869f95 117 //pull out each individual word (separated by any white space), and place it in the vector
mehatfie 11:bc9cd2869f95 118 stringstream newLineStrm(newLine);
mehatfie 11:bc9cd2869f95 119 istream_iterator<string> it(newLineStrm);
mehatfie 11:bc9cd2869f95 120 istream_iterator<string> end;
mehatfie 11:bc9cd2869f95 121 vector<string> results(it, end);
mehatfie 11:bc9cd2869f95 122
mehatfie 11:bc9cd2869f95 123 //Get the size of the results vector, if it is 0 then while loop will loop again,
mehatfie 11:bc9cd2869f95 124 //if it has a value, then it will accept the line and end looping cycles
mehatfie 11:bc9cd2869f95 125 validLine = results.size();
mehatfie 1:5731f31f96be 126
mehatfie 11:bc9cd2869f95 127 //copy the vector of results into the array of words
mehatfie 11:bc9cd2869f95 128 copy(results.begin(), results.end(), lineData.word);
mehatfie 11:bc9cd2869f95 129
mehatfie 11:bc9cd2869f95 130 lineData.numWords = results.size(); //Record the number of words in the line
mehatfie 11:bc9cd2869f95 131
mehatfie 11:bc9cd2869f95 132 results.erase(results.begin(), results.end()); //remove the results vector from memory
mehatfie 9:5a0c4c6e39c7 133 }
mehatfie 2:3e7baa3e3fec 134
mehatfie 9:5a0c4c6e39c7 135 //Update the Current Line Number
mehatfie 6:d1594fd2ec5a 136 lcd.setAddress(0,2);
mehatfie 1:5731f31f96be 137 lcd.printf("Current Line#: %d ", lineData.lineNumber);
mehatfie 1:5731f31f96be 138
mehatfie 9:5a0c4c6e39c7 139 //Update the cmd/dvc label for the line so that the user has an idea of what's going on
mehatfie 6:d1594fd2ec5a 140 lcd.setAddress(0,3);
mehatfie 9:5a0c4c6e39c7 141 lcd.printf(" "); // Clear the Line using Spaces (Emptyness) - Note one line is 20 Characters
mehatfie 6:d1594fd2ec5a 142 lcd.setAddress(0,3);
mehatfie 6:d1594fd2ec5a 143 lcd.printf("cmd/dvc: %s", lineData.word[0]);
mehatfie 11:bc9cd2869f95 144
mehatfie 0:22618cf06f45 145 /*
mehatfie 0:22618cf06f45 146 lcd.cls(); //clear the display
mehatfie 0:22618cf06f45 147 lcd.setAddress(0,0);
mehatfie 0:22618cf06f45 148 lcd.printf("wrd1: %s", lineData.word[0]);
mehatfie 0:22618cf06f45 149 lcd.setAddress(0,1);
mehatfie 0:22618cf06f45 150 lcd.printf("wrd2: %s", lineData.word[1]);
mehatfie 0:22618cf06f45 151 lcd.setAddress(0,2);
mehatfie 0:22618cf06f45 152 lcd.printf("wrd3: %s", lineData.word[2]);
mehatfie 0:22618cf06f45 153 lcd.setAddress(0,3);
mehatfie 0:22618cf06f45 154 lcd.printf("wrd4: %s", lineData.word[3]);
mehatfie 11:bc9cd2869f95 155 wait(1);*/
mehatfie 0:22618cf06f45 156 }
mehatfie 0:22618cf06f45 157
mehatfie 0:22618cf06f45 158
mehatfie 2:3e7baa3e3fec 159 #endif
mehatfie 0:22618cf06f45 160
mehatfie 0:22618cf06f45 161
mehatfie 0:22618cf06f45 162
mehatfie 0:22618cf06f45 163
mehatfie 0:22618cf06f45 164