The codebase to run the *spark d-fuser controller www.sparkav.co.uk/dvimixer

Dependencies:   SPK-TVOne DMX DmxArtNet NetServicesMin OSC PinDetect mRotaryEncoder iniparser mbed spk_oled_ssd1305 filter

Committer:
tobyspark
Date:
Sun Oct 28 16:19:04 2012 +0000
Revision:
27:27851d3d2bba
Parent:
16:52484666b323
Child:
28:67269c2d042b
Reading settings from .ini; Seems that iniparser was a victim of stringstream memory hogging?

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tobyspark 11:0783cfbeb746 1 #include "mbed.h"
tobyspark 13:3796bde6ba8f 2 #include <string>
tobyspark 13:3796bde6ba8f 3 #include <vector>
tobyspark 13:3796bde6ba8f 4
tobyspark 13:3796bde6ba8f 5 extern "C"
tobyspark 13:3796bde6ba8f 6 {
tobyspark 13:3796bde6ba8f 7 #include "iniparser.h"
tobyspark 13:3796bde6ba8f 8 }
tobyspark 11:0783cfbeb746 9
tobyspark 11:0783cfbeb746 10 class SPKSettings {
tobyspark 11:0783cfbeb746 11 public:
tobyspark 11:0783cfbeb746 12 SPKSettings()
tobyspark 11:0783cfbeb746 13 {
tobyspark 16:52484666b323 14 loadDefaults();
tobyspark 16:52484666b323 15 }
tobyspark 16:52484666b323 16
tobyspark 16:52484666b323 17 void loadDefaults()
tobyspark 16:52484666b323 18 {
tobyspark 16:52484666b323 19 //// KEYS
tobyspark 16:52484666b323 20
tobyspark 27:27851d3d2bba 21 keyerParamNames.clear();
tobyspark 27:27851d3d2bba 22 keyerParamSets.clear();
tobyspark 27:27851d3d2bba 23
tobyspark 16:52484666b323 24 // Parameter Set: minY, maxY, minU, maxU, minV, maxV
tobyspark 16:52484666b323 25 int paramSet1[6] = {0, 18, 128, 129, 128, 129};
tobyspark 16:52484666b323 26 keyerParamNames.push_back("Lumakey");
tobyspark 11:0783cfbeb746 27 keyerParamSets.push_back(paramSet1);
tobyspark 11:0783cfbeb746 28
tobyspark 16:52484666b323 29 int paramSet2[6] = {30, 35, 237, 242, 114, 121};
tobyspark 16:52484666b323 30 keyerParamNames.push_back("Chromakey - Blue");
tobyspark 11:0783cfbeb746 31 keyerParamSets.push_back(paramSet2);
tobyspark 16:52484666b323 32
tobyspark 16:52484666b323 33 //// RESOLUTIONS
tobyspark 16:52484666b323 34
tobyspark 27:27851d3d2bba 35 resolutionNames.clear();
tobyspark 27:27851d3d2bba 36 resolutionIndexes.clear();
tobyspark 27:27851d3d2bba 37 resolutionEDIDIndexes.clear();
tobyspark 27:27851d3d2bba 38
tobyspark 16:52484666b323 39 resolutionNames.push_back(kTV1ResolutionDescriptionVGA);
tobyspark 16:52484666b323 40 resolutionIndexes.push_back(kTV1ResolutionVGA);
tobyspark 16:52484666b323 41 resolutionEDIDIndexes.push_back(5);
tobyspark 16:52484666b323 42
tobyspark 16:52484666b323 43 resolutionNames.push_back(kTV1ResolutionDescriptionSVGA);
tobyspark 16:52484666b323 44 resolutionIndexes.push_back(kTV1ResolutionSVGA);
tobyspark 16:52484666b323 45 resolutionEDIDIndexes.push_back(5);
tobyspark 16:52484666b323 46
tobyspark 16:52484666b323 47 resolutionNames.push_back(kTV1ResolutionDescriptionXGAp60);
tobyspark 16:52484666b323 48 resolutionIndexes.push_back(kTV1ResolutionXGAp60);
tobyspark 16:52484666b323 49 resolutionEDIDIndexes.push_back(5);
tobyspark 16:52484666b323 50
tobyspark 16:52484666b323 51 resolutionNames.push_back(kTV1ResolutionDescriptionWSXGAPLUSp60);
tobyspark 16:52484666b323 52 resolutionIndexes.push_back(kTV1ResolutionWSXGAPLUSp60);
tobyspark 16:52484666b323 53 resolutionEDIDIndexes.push_back(5);
tobyspark 16:52484666b323 54
tobyspark 16:52484666b323 55 resolutionNames.push_back(kTV1ResolutionDescriptionWUXGAp60);
tobyspark 16:52484666b323 56 resolutionIndexes.push_back(kTV1ResolutionWUXGAp60);
tobyspark 16:52484666b323 57 resolutionEDIDIndexes.push_back(5);
tobyspark 16:52484666b323 58
tobyspark 16:52484666b323 59 resolutionNames.push_back(kTV1ResolutionDescription720p60);
tobyspark 16:52484666b323 60 resolutionIndexes.push_back(kTV1Resolution720p60);
tobyspark 16:52484666b323 61 resolutionEDIDIndexes.push_back(5);
tobyspark 16:52484666b323 62
tobyspark 16:52484666b323 63 resolutionNames.push_back(kTV1ResolutionDescription1080p60);
tobyspark 16:52484666b323 64 resolutionIndexes.push_back(kTV1Resolution1080p60);
tobyspark 16:52484666b323 65 resolutionEDIDIndexes.push_back(5);
tobyspark 16:52484666b323 66
tobyspark 16:52484666b323 67 resolutionNames.push_back(kTV1ResolutionDescriptionDualHeadSVGAp60);
tobyspark 16:52484666b323 68 resolutionIndexes.push_back(kTV1ResolutionDualHeadSVGAp60);
tobyspark 16:52484666b323 69 resolutionEDIDIndexes.push_back(5);
tobyspark 16:52484666b323 70
tobyspark 16:52484666b323 71 resolutionNames.push_back(kTV1ResolutionDescriptionDualHeadXGAp60);
tobyspark 16:52484666b323 72 resolutionIndexes.push_back(kTV1ResolutionDualHeadXGAp60);
tobyspark 16:52484666b323 73 resolutionEDIDIndexes.push_back(5);
tobyspark 16:52484666b323 74
tobyspark 16:52484666b323 75 resolutionNames.push_back(kTV1ResolutionDescriptionTripleHeadVGAp60);
tobyspark 16:52484666b323 76 resolutionIndexes.push_back(kTV1ResolutionTripleHeadVGAp60);
tobyspark 16:52484666b323 77 resolutionEDIDIndexes.push_back(5);
tobyspark 11:0783cfbeb746 78 }
tobyspark 11:0783cfbeb746 79
tobyspark 13:3796bde6ba8f 80 string keyerParamName (int index)
tobyspark 11:0783cfbeb746 81 {
tobyspark 11:0783cfbeb746 82 // TODO: Bounds check and return out of bounds name
tobyspark 11:0783cfbeb746 83 return keyerParamNames[index];
tobyspark 11:0783cfbeb746 84 }
tobyspark 11:0783cfbeb746 85
tobyspark 11:0783cfbeb746 86 int* keyerParamSet(int index)
tobyspark 11:0783cfbeb746 87 {
tobyspark 11:0783cfbeb746 88 return keyerParamSets[index];
tobyspark 11:0783cfbeb746 89 }
tobyspark 11:0783cfbeb746 90
tobyspark 11:0783cfbeb746 91 int keyerSetCount()
tobyspark 11:0783cfbeb746 92 {
tobyspark 11:0783cfbeb746 93 return keyerParamSets.size();
tobyspark 11:0783cfbeb746 94 }
tobyspark 11:0783cfbeb746 95
tobyspark 16:52484666b323 96 string resolutionName (int index)
tobyspark 16:52484666b323 97 {
tobyspark 16:52484666b323 98 // TODO: Bounds check and return out of bounds name
tobyspark 16:52484666b323 99 return resolutionNames[index];
tobyspark 16:52484666b323 100 }
tobyspark 16:52484666b323 101
tobyspark 16:52484666b323 102 int32_t resolutionIndex(int index)
tobyspark 16:52484666b323 103 {
tobyspark 16:52484666b323 104 return resolutionIndexes[index];
tobyspark 16:52484666b323 105 }
tobyspark 16:52484666b323 106
tobyspark 16:52484666b323 107 int32_t resolutionEDIDIndex(int index)
tobyspark 16:52484666b323 108 {
tobyspark 16:52484666b323 109 return resolutionEDIDIndexes[index];
tobyspark 16:52484666b323 110 }
tobyspark 16:52484666b323 111
tobyspark 16:52484666b323 112 int resolutionsCount()
tobyspark 16:52484666b323 113 {
tobyspark 16:52484666b323 114 return resolutionNames.size();
tobyspark 16:52484666b323 115 }
tobyspark 16:52484666b323 116
tobyspark 13:3796bde6ba8f 117 bool load(string filename)
tobyspark 11:0783cfbeb746 118 {
tobyspark 11:0783cfbeb746 119 bool success = false;
tobyspark 13:3796bde6ba8f 120
tobyspark 13:3796bde6ba8f 121 local = new LocalFileSystem("local");
tobyspark 13:3796bde6ba8f 122 string filePath("/local/");
tobyspark 13:3796bde6ba8f 123 filePath += filename;
tobyspark 13:3796bde6ba8f 124
tobyspark 13:3796bde6ba8f 125 dictionary* settings = iniparser_load(filePath.c_str());
tobyspark 13:3796bde6ba8f 126
tobyspark 13:3796bde6ba8f 127 // KEYER
tobyspark 13:3796bde6ba8f 128 {
tobyspark 13:3796bde6ba8f 129 int counter = 1;
tobyspark 13:3796bde6ba8f 130
tobyspark 13:3796bde6ba8f 131 bool keyParamReadOK = true;
tobyspark 13:3796bde6ba8f 132 bool keyParamCleared = false;
tobyspark 13:3796bde6ba8f 133
tobyspark 13:3796bde6ba8f 134 char* failString = "Failed to read";
tobyspark 13:3796bde6ba8f 135 int failInt = -1;
tobyspark 13:3796bde6ba8f 136
tobyspark 13:3796bde6ba8f 137 // Loop through [Key1,2,...,99] sections
tobyspark 13:3796bde6ba8f 138 while(keyParamReadOK)
tobyspark 13:3796bde6ba8f 139 {
tobyspark 13:3796bde6ba8f 140 int paramSet[6];
tobyspark 13:3796bde6ba8f 141 char* paramName;
tobyspark 13:3796bde6ba8f 142
tobyspark 13:3796bde6ba8f 143 char key[11];
tobyspark 11:0783cfbeb746 144
tobyspark 13:3796bde6ba8f 145 sprintf(key, "Key%i:Name", counter);
tobyspark 13:3796bde6ba8f 146 paramName = iniparser_getstring(settings, key, failString);
tobyspark 13:3796bde6ba8f 147 keyParamReadOK = keyParamReadOK && strcmp(paramName, failString);
tobyspark 13:3796bde6ba8f 148
tobyspark 13:3796bde6ba8f 149 sprintf(key, "Key%i:MinY", counter);
tobyspark 13:3796bde6ba8f 150 paramSet[0] = iniparser_getint(settings, key, failInt);
tobyspark 13:3796bde6ba8f 151 keyParamReadOK = keyParamReadOK && (paramSet[0] != failInt);
tobyspark 13:3796bde6ba8f 152
tobyspark 13:3796bde6ba8f 153 sprintf(key, "Key%i:MaxY", counter);
tobyspark 13:3796bde6ba8f 154 paramSet[1] = iniparser_getint(settings, key, failInt);
tobyspark 13:3796bde6ba8f 155 keyParamReadOK = keyParamReadOK && (paramSet[1] != failInt);
tobyspark 13:3796bde6ba8f 156
tobyspark 13:3796bde6ba8f 157 sprintf(key, "Key%i:MinU", counter);
tobyspark 13:3796bde6ba8f 158 paramSet[2] = iniparser_getint(settings, key, failInt);
tobyspark 13:3796bde6ba8f 159 keyParamReadOK = keyParamReadOK && (paramSet[2] != failInt);
tobyspark 13:3796bde6ba8f 160
tobyspark 13:3796bde6ba8f 161 sprintf(key, "Key%i:MaxU", counter);
tobyspark 13:3796bde6ba8f 162 paramSet[3] = iniparser_getint(settings, key, failInt);
tobyspark 13:3796bde6ba8f 163 keyParamReadOK = keyParamReadOK && (paramSet[3] != failInt);
tobyspark 13:3796bde6ba8f 164
tobyspark 13:3796bde6ba8f 165 sprintf(key, "Key%i:MinV", counter);
tobyspark 13:3796bde6ba8f 166 paramSet[4] = iniparser_getint(settings, key, failInt);
tobyspark 13:3796bde6ba8f 167 keyParamReadOK = keyParamReadOK && (paramSet[4] != failInt);
tobyspark 13:3796bde6ba8f 168
tobyspark 13:3796bde6ba8f 169 sprintf(key, "Key%i:MaxV", counter);
tobyspark 13:3796bde6ba8f 170 paramSet[5] = iniparser_getint(settings, key, failInt);
tobyspark 13:3796bde6ba8f 171 keyParamReadOK = keyParamReadOK && (paramSet[5] != failInt);
tobyspark 13:3796bde6ba8f 172
tobyspark 13:3796bde6ba8f 173 // If all parameters have been read successfully
tobyspark 13:3796bde6ba8f 174 if (keyParamReadOK)
tobyspark 13:3796bde6ba8f 175 {
tobyspark 13:3796bde6ba8f 176
tobyspark 13:3796bde6ba8f 177 // If this is the first time through, clear old values
tobyspark 13:3796bde6ba8f 178 if (!keyParamCleared)
tobyspark 13:3796bde6ba8f 179 {
tobyspark 13:3796bde6ba8f 180 keyerParamNames.clear();
tobyspark 13:3796bde6ba8f 181 keyerParamSets.clear();
tobyspark 13:3796bde6ba8f 182 keyParamCleared = true;
tobyspark 13:3796bde6ba8f 183 }
tobyspark 13:3796bde6ba8f 184
tobyspark 13:3796bde6ba8f 185 // Apply settings
tobyspark 13:3796bde6ba8f 186 keyerParamNames.push_back(paramName);
tobyspark 13:3796bde6ba8f 187 keyerParamSets.push_back(paramSet);
tobyspark 13:3796bde6ba8f 188
tobyspark 13:3796bde6ba8f 189 // We've successfully read a keyer param set, so should return true;
tobyspark 13:3796bde6ba8f 190 success = true;
tobyspark 13:3796bde6ba8f 191 }
tobyspark 13:3796bde6ba8f 192
tobyspark 13:3796bde6ba8f 193 counter++;
tobyspark 13:3796bde6ba8f 194 }
tobyspark 13:3796bde6ba8f 195 }
tobyspark 13:3796bde6ba8f 196
tobyspark 16:52484666b323 197 // RESOLUTIONS
tobyspark 16:52484666b323 198 {
tobyspark 16:52484666b323 199 int counter = 1;
tobyspark 16:52484666b323 200
tobyspark 16:52484666b323 201 bool resolutionReadOK = true;
tobyspark 16:52484666b323 202 bool resolutionCleared = false;
tobyspark 16:52484666b323 203
tobyspark 16:52484666b323 204 char* failString = "Failed to read";
tobyspark 16:52484666b323 205 int failInt = -1;
tobyspark 16:52484666b323 206
tobyspark 16:52484666b323 207 // Loop through [Key1,2,...,99] sections
tobyspark 16:52484666b323 208 while(resolutionReadOK)
tobyspark 16:52484666b323 209 {
tobyspark 16:52484666b323 210 char* resolutionName;
tobyspark 16:52484666b323 211 int resolutionIndex;
tobyspark 16:52484666b323 212 int resolutionEDIDIndex;
tobyspark 16:52484666b323 213
tobyspark 16:52484666b323 214 char key[18];
tobyspark 16:52484666b323 215
tobyspark 16:52484666b323 216 sprintf(key, "Resolution%i:Name", counter);
tobyspark 16:52484666b323 217 resolutionName = iniparser_getstring(settings, key, failString);
tobyspark 16:52484666b323 218 resolutionReadOK = resolutionReadOK && strcmp(resolutionName, failString);
tobyspark 16:52484666b323 219
tobyspark 16:52484666b323 220 sprintf(key, "Resolution%i:Number", counter);
tobyspark 16:52484666b323 221 resolutionIndex = iniparser_getint(settings, key, failInt);
tobyspark 16:52484666b323 222 resolutionReadOK = resolutionReadOK && (resolutionIndex != failInt);
tobyspark 16:52484666b323 223
tobyspark 16:52484666b323 224 sprintf(key, "Resolution%i:EDIDNumber", counter);
tobyspark 16:52484666b323 225 resolutionEDIDIndex = iniparser_getint(settings, key, failInt);
tobyspark 16:52484666b323 226 resolutionReadOK = resolutionReadOK && (resolutionEDIDIndex != failInt);
tobyspark 16:52484666b323 227
tobyspark 16:52484666b323 228 // If all parameters have been read successfully
tobyspark 16:52484666b323 229 if (resolutionReadOK)
tobyspark 16:52484666b323 230 {
tobyspark 16:52484666b323 231 // If this is the first time through, clear old values
tobyspark 16:52484666b323 232 if (!resolutionCleared)
tobyspark 16:52484666b323 233 {
tobyspark 16:52484666b323 234 resolutionNames.clear();
tobyspark 16:52484666b323 235 resolutionIndexes.clear();
tobyspark 16:52484666b323 236 resolutionEDIDIndexes.clear();
tobyspark 16:52484666b323 237 resolutionCleared = true;
tobyspark 16:52484666b323 238 }
tobyspark 16:52484666b323 239
tobyspark 16:52484666b323 240 // Apply settings
tobyspark 16:52484666b323 241 resolutionNames.push_back(resolutionName);
tobyspark 16:52484666b323 242 resolutionIndexes.push_back(resolutionIndex);
tobyspark 16:52484666b323 243 resolutionEDIDIndexes.push_back(resolutionEDIDIndex);
tobyspark 16:52484666b323 244
tobyspark 16:52484666b323 245 // We've successfully read a resolution, so should return true;
tobyspark 16:52484666b323 246 success = true;
tobyspark 16:52484666b323 247 }
tobyspark 16:52484666b323 248
tobyspark 16:52484666b323 249 counter++;
tobyspark 16:52484666b323 250 }
tobyspark 16:52484666b323 251 }
tobyspark 16:52484666b323 252
tobyspark 13:3796bde6ba8f 253 iniparser_freedict(settings);
tobyspark 13:3796bde6ba8f 254
tobyspark 13:3796bde6ba8f 255 delete local;
tobyspark 11:0783cfbeb746 256
tobyspark 11:0783cfbeb746 257 return success;
tobyspark 11:0783cfbeb746 258 }
tobyspark 11:0783cfbeb746 259
tobyspark 11:0783cfbeb746 260 protected:
tobyspark 11:0783cfbeb746 261 LocalFileSystem *local;
tobyspark 16:52484666b323 262 vector<int*> keyerParamSets;
tobyspark 16:52484666b323 263 vector<string> keyerParamNames;
tobyspark 16:52484666b323 264 vector<string> resolutionNames;
tobyspark 16:52484666b323 265 vector<int32_t> resolutionIndexes;
tobyspark 16:52484666b323 266 vector<int32_t> resolutionEDIDIndexes;
tobyspark 16:52484666b323 267 };