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:
Sat Oct 06 12:40:24 2012 +0000
Revision:
16:52484666b323
Parent:
13:3796bde6ba8f
Child:
27:27851d3d2bba
Resolution support added to SPKSettings, and menu will display a 'revert to defaults' if SPKSettings has loaded in custom settings. Still all in theory while iniparser isn't working / or chose yet another parsing library.

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