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
spk_settings.h@16:52484666b323, 2012-10-06 (annotated)
- 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?
User | Revision | Line number | New 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 | }; |