v3 Solution
Dependencies: EthernetInterface QEI_hw QEIx4 mbed-rtos mbed realtimeMMLib
MMiniFileReader.cpp@0:70c9f7c6844b, 2017-10-02 (annotated)
- Committer:
- GTNicholson
- Date:
- Mon Oct 02 11:19:05 2017 +0000
- Revision:
- 0:70c9f7c6844b
Initial Publish Version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
GTNicholson | 0:70c9f7c6844b | 1 | #include "MMiniFileReader.h" |
GTNicholson | 0:70c9f7c6844b | 2 | #include <iostream> |
GTNicholson | 0:70c9f7c6844b | 3 | #include <fstream> |
GTNicholson | 0:70c9f7c6844b | 4 | #include "mbed.h" |
GTNicholson | 0:70c9f7c6844b | 5 | #include <sstream> |
GTNicholson | 0:70c9f7c6844b | 6 | #include <string> |
GTNicholson | 0:70c9f7c6844b | 7 | |
GTNicholson | 0:70c9f7c6844b | 8 | using namespace std; |
GTNicholson | 0:70c9f7c6844b | 9 | |
GTNicholson | 0:70c9f7c6844b | 10 | iniFileReader::iniFileReader() |
GTNicholson | 0:70c9f7c6844b | 11 | { |
GTNicholson | 0:70c9f7c6844b | 12 | } |
GTNicholson | 0:70c9f7c6844b | 13 | |
GTNicholson | 0:70c9f7c6844b | 14 | |
GTNicholson | 0:70c9f7c6844b | 15 | iniFileReader::~iniFileReader() |
GTNicholson | 0:70c9f7c6844b | 16 | { |
GTNicholson | 0:70c9f7c6844b | 17 | } |
GTNicholson | 0:70c9f7c6844b | 18 | |
GTNicholson | 0:70c9f7c6844b | 19 | iniFile iniFileReader::ReadFile(const char* filePath) |
GTNicholson | 0:70c9f7c6844b | 20 | { |
GTNicholson | 0:70c9f7c6844b | 21 | iniFile fileConfig; |
GTNicholson | 0:70c9f7c6844b | 22 | |
GTNicholson | 0:70c9f7c6844b | 23 | char line[32]; |
GTNicholson | 0:70c9f7c6844b | 24 | //std::ifstream myfile(filePath); |
GTNicholson | 0:70c9f7c6844b | 25 | |
GTNicholson | 0:70c9f7c6844b | 26 | //Serial pc(USBTX, USBRX); |
GTNicholson | 0:70c9f7c6844b | 27 | |
GTNicholson | 0:70c9f7c6844b | 28 | |
GTNicholson | 0:70c9f7c6844b | 29 | //std::ifstream myfile("filePath"); |
GTNicholson | 0:70c9f7c6844b | 30 | |
GTNicholson | 0:70c9f7c6844b | 31 | //pc.printf("file=%s \n", filePath); |
GTNicholson | 0:70c9f7c6844b | 32 | |
GTNicholson | 0:70c9f7c6844b | 33 | FILE *File2 = fopen(filePath, "r"); // open file for reading |
GTNicholson | 0:70c9f7c6844b | 34 | //fgets(read_string,256,File2); // read first data value |
GTNicholson | 0:70c9f7c6844b | 35 | //pc.printf("text data: %s \n", read_string); |
GTNicholson | 0:70c9f7c6844b | 36 | |
GTNicholson | 0:70c9f7c6844b | 37 | |
GTNicholson | 0:70c9f7c6844b | 38 | if (File2) |
GTNicholson | 0:70c9f7c6844b | 39 | { |
GTNicholson | 0:70c9f7c6844b | 40 | char section[32]; |
GTNicholson | 0:70c9f7c6844b | 41 | |
GTNicholson | 0:70c9f7c6844b | 42 | while (fgets(line, 32, File2)) |
GTNicholson | 0:70c9f7c6844b | 43 | { |
GTNicholson | 0:70c9f7c6844b | 44 | |
GTNicholson | 0:70c9f7c6844b | 45 | if (IsSection(line)) |
GTNicholson | 0:70c9f7c6844b | 46 | { |
GTNicholson | 0:70c9f7c6844b | 47 | GetSectionName(line, section); |
GTNicholson | 0:70c9f7c6844b | 48 | } |
GTNicholson | 0:70c9f7c6844b | 49 | else |
GTNicholson | 0:70c9f7c6844b | 50 | { |
GTNicholson | 0:70c9f7c6844b | 51 | |
GTNicholson | 0:70c9f7c6844b | 52 | if ( strncmp(section , "Station", 7) == 0) |
GTNicholson | 0:70c9f7c6844b | 53 | { |
GTNicholson | 0:70c9f7c6844b | 54 | char paramName[32]; |
GTNicholson | 0:70c9f7c6844b | 55 | |
GTNicholson | 0:70c9f7c6844b | 56 | GetParamName(line, paramName); |
GTNicholson | 0:70c9f7c6844b | 57 | |
GTNicholson | 0:70c9f7c6844b | 58 | if (strncmp(paramName, "ID", 2) == 0) |
GTNicholson | 0:70c9f7c6844b | 59 | GetParamValue(line, fileConfig.Station.ID); |
GTNicholson | 0:70c9f7c6844b | 60 | |
GTNicholson | 0:70c9f7c6844b | 61 | if (strncmp(paramName, "Name", 4) == 0) |
GTNicholson | 0:70c9f7c6844b | 62 | GetParamValue(line, fileConfig.Station.Name); |
GTNicholson | 0:70c9f7c6844b | 63 | |
GTNicholson | 0:70c9f7c6844b | 64 | if (strncmp(paramName, "ComsType", 8 ) == 0) |
GTNicholson | 0:70c9f7c6844b | 65 | GetParamValue(line, fileConfig.Station.ComsType); |
GTNicholson | 0:70c9f7c6844b | 66 | |
GTNicholson | 0:70c9f7c6844b | 67 | if (strncmp(paramName, "IPAddress",9) == 0) |
GTNicholson | 0:70c9f7c6844b | 68 | GetParamValue(line, fileConfig.Station.IPAddress); |
GTNicholson | 0:70c9f7c6844b | 69 | |
GTNicholson | 0:70c9f7c6844b | 70 | if (strncmp(paramName, "NetworkMask", 11) == 0) |
GTNicholson | 0:70c9f7c6844b | 71 | GetParamValue(line, fileConfig.Station.NetworkMask); |
GTNicholson | 0:70c9f7c6844b | 72 | |
GTNicholson | 0:70c9f7c6844b | 73 | if (strncmp(paramName, "DefaultGateway", 14) == 0) |
GTNicholson | 0:70c9f7c6844b | 74 | GetParamValue(line, fileConfig.Station.DefaultGateway); |
GTNicholson | 0:70c9f7c6844b | 75 | |
GTNicholson | 0:70c9f7c6844b | 76 | if (strncmp(paramName, "DataSendTime", 12) == 0) |
GTNicholson | 0:70c9f7c6844b | 77 | GetParamValue(line, fileConfig.Station.DataSendTime); |
GTNicholson | 0:70c9f7c6844b | 78 | } |
GTNicholson | 0:70c9f7c6844b | 79 | |
GTNicholson | 0:70c9f7c6844b | 80 | |
GTNicholson | 0:70c9f7c6844b | 81 | if (strncmp(section, "Server", 6) == 0) |
GTNicholson | 0:70c9f7c6844b | 82 | { |
GTNicholson | 0:70c9f7c6844b | 83 | char paramName[32]; |
GTNicholson | 0:70c9f7c6844b | 84 | |
GTNicholson | 0:70c9f7c6844b | 85 | GetParamName(line, paramName); |
GTNicholson | 0:70c9f7c6844b | 86 | |
GTNicholson | 0:70c9f7c6844b | 87 | if (strncmp(paramName, "IPAddress", 9) == 0) |
GTNicholson | 0:70c9f7c6844b | 88 | GetParamValue(line, fileConfig.Server.IPAddress); |
GTNicholson | 0:70c9f7c6844b | 89 | |
GTNicholson | 0:70c9f7c6844b | 90 | if (strncmp(paramName, "Port", 4) == 0) |
GTNicholson | 0:70c9f7c6844b | 91 | GetParamValue(line, fileConfig.Server.Port); |
GTNicholson | 0:70c9f7c6844b | 92 | } |
GTNicholson | 0:70c9f7c6844b | 93 | |
GTNicholson | 0:70c9f7c6844b | 94 | ReadSensorSection(section, "Sensor1",7, line, &fileConfig.Sensor1); |
GTNicholson | 0:70c9f7c6844b | 95 | ReadSensorSection(section, "Sensor2", 7, line, &fileConfig.Sensor2); |
GTNicholson | 0:70c9f7c6844b | 96 | ReadSensorSection(section, "Sensor3", 7, line, &fileConfig.Sensor3); |
GTNicholson | 0:70c9f7c6844b | 97 | ReadSensorSection(section, "Sensor4", 7, line, &fileConfig.Sensor4); |
GTNicholson | 0:70c9f7c6844b | 98 | ReadSensorSection(section, "Sensor5", 7, line, &fileConfig.Sensor5); |
GTNicholson | 0:70c9f7c6844b | 99 | ReadSensorSection(section, "Sensor6", 7, line, &fileConfig.Sensor6); |
GTNicholson | 0:70c9f7c6844b | 100 | ReadSensorSection(section, "Sensor7", 7, line, &fileConfig.Sensor7); |
GTNicholson | 0:70c9f7c6844b | 101 | ReadSensorSection(section, "Sensor8", 7, line, &fileConfig.Sensor8); |
GTNicholson | 0:70c9f7c6844b | 102 | ReadSensorSection(section, "Sensor9", 7, line, &fileConfig.Sensor9); |
GTNicholson | 0:70c9f7c6844b | 103 | ReadSensorSection(section, "Sensor10", 8, line, &fileConfig.Sensor10); |
GTNicholson | 0:70c9f7c6844b | 104 | |
GTNicholson | 0:70c9f7c6844b | 105 | } |
GTNicholson | 0:70c9f7c6844b | 106 | |
GTNicholson | 0:70c9f7c6844b | 107 | |
GTNicholson | 0:70c9f7c6844b | 108 | } |
GTNicholson | 0:70c9f7c6844b | 109 | fclose(File2); |
GTNicholson | 0:70c9f7c6844b | 110 | } |
GTNicholson | 0:70c9f7c6844b | 111 | |
GTNicholson | 0:70c9f7c6844b | 112 | return fileConfig; |
GTNicholson | 0:70c9f7c6844b | 113 | } |
GTNicholson | 0:70c9f7c6844b | 114 | |
GTNicholson | 0:70c9f7c6844b | 115 | |
GTNicholson | 0:70c9f7c6844b | 116 | void iniFileReader::ReadSensorSection(char currentSection[], char section[], int size, char line[], iniSensor *sensor) |
GTNicholson | 0:70c9f7c6844b | 117 | { |
GTNicholson | 0:70c9f7c6844b | 118 | |
GTNicholson | 0:70c9f7c6844b | 119 | if (strncmp(currentSection, section, size) == 0) |
GTNicholson | 0:70c9f7c6844b | 120 | { |
GTNicholson | 0:70c9f7c6844b | 121 | char paramName[32]; |
GTNicholson | 0:70c9f7c6844b | 122 | |
GTNicholson | 0:70c9f7c6844b | 123 | GetParamName(line, paramName); |
GTNicholson | 0:70c9f7c6844b | 124 | |
GTNicholson | 0:70c9f7c6844b | 125 | if (strncmp(paramName, "ID", 2) == 0) |
GTNicholson | 0:70c9f7c6844b | 126 | GetParamValue(line, (*sensor).ID); |
GTNicholson | 0:70c9f7c6844b | 127 | |
GTNicholson | 0:70c9f7c6844b | 128 | if (strncmp(paramName, "Type",4) == 0) |
GTNicholson | 0:70c9f7c6844b | 129 | GetParamValue(line, (*sensor).SensorType); |
GTNicholson | 0:70c9f7c6844b | 130 | |
GTNicholson | 0:70c9f7c6844b | 131 | if (strncmp(paramName, "Enabled", 7) == 0) |
GTNicholson | 0:70c9f7c6844b | 132 | GetParamValue(line, (*sensor).Enabled); |
GTNicholson | 0:70c9f7c6844b | 133 | |
GTNicholson | 0:70c9f7c6844b | 134 | if (strncmp(paramName, "SampleTime",10) == 0) |
GTNicholson | 0:70c9f7c6844b | 135 | GetParamValue(line, (*sensor).SampleTime); |
GTNicholson | 0:70c9f7c6844b | 136 | |
GTNicholson | 0:70c9f7c6844b | 137 | if (strncmp(paramName, "DataSampleQty",13) ==0 ) |
GTNicholson | 0:70c9f7c6844b | 138 | GetParamValue(line, (*sensor).DataSampleQty); |
GTNicholson | 0:70c9f7c6844b | 139 | |
GTNicholson | 0:70c9f7c6844b | 140 | if (strncmp(paramName, "Pins", 4) == 0 ) |
GTNicholson | 0:70c9f7c6844b | 141 | GetParamValue(line, (*sensor).Pins); |
GTNicholson | 0:70c9f7c6844b | 142 | |
GTNicholson | 0:70c9f7c6844b | 143 | if (strncmp(paramName, "SensorOptions", 13) == 0) |
GTNicholson | 0:70c9f7c6844b | 144 | GetParamValue(line, (*sensor).SensorOptions); |
GTNicholson | 0:70c9f7c6844b | 145 | } |
GTNicholson | 0:70c9f7c6844b | 146 | |
GTNicholson | 0:70c9f7c6844b | 147 | } |
GTNicholson | 0:70c9f7c6844b | 148 | |
GTNicholson | 0:70c9f7c6844b | 149 | |
GTNicholson | 0:70c9f7c6844b | 150 | |
GTNicholson | 0:70c9f7c6844b | 151 | bool iniFileReader::IsSection(char line[]) |
GTNicholson | 0:70c9f7c6844b | 152 | { |
GTNicholson | 0:70c9f7c6844b | 153 | if (line[0] == '[') |
GTNicholson | 0:70c9f7c6844b | 154 | { |
GTNicholson | 0:70c9f7c6844b | 155 | return true; |
GTNicholson | 0:70c9f7c6844b | 156 | } |
GTNicholson | 0:70c9f7c6844b | 157 | |
GTNicholson | 0:70c9f7c6844b | 158 | return false; |
GTNicholson | 0:70c9f7c6844b | 159 | } |
GTNicholson | 0:70c9f7c6844b | 160 | |
GTNicholson | 0:70c9f7c6844b | 161 | void iniFileReader::GetSectionName(char line[], char* result) |
GTNicholson | 0:70c9f7c6844b | 162 | { |
GTNicholson | 0:70c9f7c6844b | 163 | int start = 0; |
GTNicholson | 0:70c9f7c6844b | 164 | |
GTNicholson | 0:70c9f7c6844b | 165 | for (int i = 1; i < 32; i++) { |
GTNicholson | 0:70c9f7c6844b | 166 | if (line[i] == ']') { |
GTNicholson | 0:70c9f7c6844b | 167 | result[start] = '\n'; |
GTNicholson | 0:70c9f7c6844b | 168 | break; |
GTNicholson | 0:70c9f7c6844b | 169 | } |
GTNicholson | 0:70c9f7c6844b | 170 | |
GTNicholson | 0:70c9f7c6844b | 171 | |
GTNicholson | 0:70c9f7c6844b | 172 | result[start] = line[i]; |
GTNicholson | 0:70c9f7c6844b | 173 | start++; |
GTNicholson | 0:70c9f7c6844b | 174 | } |
GTNicholson | 0:70c9f7c6844b | 175 | |
GTNicholson | 0:70c9f7c6844b | 176 | |
GTNicholson | 0:70c9f7c6844b | 177 | //int pos = line - 2; |
GTNicholson | 0:70c9f7c6844b | 178 | //string sectionName = line.substr(1, pos); |
GTNicholson | 0:70c9f7c6844b | 179 | |
GTNicholson | 0:70c9f7c6844b | 180 | //return sectionName; |
GTNicholson | 0:70c9f7c6844b | 181 | } |
GTNicholson | 0:70c9f7c6844b | 182 | |
GTNicholson | 0:70c9f7c6844b | 183 | void iniFileReader::GetParamName(char line[], char* result) |
GTNicholson | 0:70c9f7c6844b | 184 | { |
GTNicholson | 0:70c9f7c6844b | 185 | |
GTNicholson | 0:70c9f7c6844b | 186 | for (int i = 0; i < 32; i++) { |
GTNicholson | 0:70c9f7c6844b | 187 | if (line[i] == '=') |
GTNicholson | 0:70c9f7c6844b | 188 | break; |
GTNicholson | 0:70c9f7c6844b | 189 | |
GTNicholson | 0:70c9f7c6844b | 190 | result[i] = line[i]; |
GTNicholson | 0:70c9f7c6844b | 191 | } |
GTNicholson | 0:70c9f7c6844b | 192 | |
GTNicholson | 0:70c9f7c6844b | 193 | } |
GTNicholson | 0:70c9f7c6844b | 194 | |
GTNicholson | 0:70c9f7c6844b | 195 | void iniFileReader::GetParamValue(char line[], char* result) |
GTNicholson | 0:70c9f7c6844b | 196 | { |
GTNicholson | 0:70c9f7c6844b | 197 | bool found = false; |
GTNicholson | 0:70c9f7c6844b | 198 | int start = 0; |
GTNicholson | 0:70c9f7c6844b | 199 | |
GTNicholson | 0:70c9f7c6844b | 200 | for (int i = 0; i < 32; i++) { |
GTNicholson | 0:70c9f7c6844b | 201 | |
GTNicholson | 0:70c9f7c6844b | 202 | if (!found) { |
GTNicholson | 0:70c9f7c6844b | 203 | if (line[i] == '=') |
GTNicholson | 0:70c9f7c6844b | 204 | found = true; |
GTNicholson | 0:70c9f7c6844b | 205 | } |
GTNicholson | 0:70c9f7c6844b | 206 | else |
GTNicholson | 0:70c9f7c6844b | 207 | { |
GTNicholson | 0:70c9f7c6844b | 208 | if (line[i] != '\n' && line[i] != NULL) |
GTNicholson | 0:70c9f7c6844b | 209 | result[start] = line[i]; |
GTNicholson | 0:70c9f7c6844b | 210 | else |
GTNicholson | 0:70c9f7c6844b | 211 | { |
GTNicholson | 0:70c9f7c6844b | 212 | result[start] = '\0'; |
GTNicholson | 0:70c9f7c6844b | 213 | break; |
GTNicholson | 0:70c9f7c6844b | 214 | } |
GTNicholson | 0:70c9f7c6844b | 215 | |
GTNicholson | 0:70c9f7c6844b | 216 | start++; |
GTNicholson | 0:70c9f7c6844b | 217 | } |
GTNicholson | 0:70c9f7c6844b | 218 | } |
GTNicholson | 0:70c9f7c6844b | 219 | } |