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

Revision:
16:52484666b323
Parent:
13:3796bde6ba8f
Child:
27:27851d3d2bba
--- a/spk_settings.h	Sun Sep 30 13:41:06 2012 +0000
+++ b/spk_settings.h	Sat Oct 06 12:40:24 2012 +0000
@@ -1,9 +1,3 @@
-// Parameter Set: minY, maxY, minU, maxU, minV, maxV
-#define kKeyerParam1Name    "Lumakey"
-#define kKeyerParam1Set     0, 18, 128, 129, 128, 129
-#define kKeyerParam2Name    "Chromakey - Blue"
-#define kKeyerParam2Set     30, 35, 237, 242, 114, 121
-
 #include "mbed.h"
 #include <string>
 #include <vector>
@@ -19,13 +13,63 @@
 public:
     SPKSettings()
     {
-        int paramSet1[6] = {kKeyerParam1Set};
-        keyerParamNames.push_back(kKeyerParam1Name);
+        loadDefaults();
+    }
+    
+    void loadDefaults()
+    {
+        //// KEYS
+        
+        // Parameter Set: minY, maxY, minU, maxU, minV, maxV
+        int paramSet1[6] = {0, 18, 128, 129, 128, 129};
+        keyerParamNames.push_back("Lumakey");
         keyerParamSets.push_back(paramSet1);
         
-        int paramSet2[6] = {kKeyerParam2Set};
-        keyerParamNames.push_back(kKeyerParam2Name);
+        int paramSet2[6] = {30, 35, 237, 242, 114, 121};
+        keyerParamNames.push_back("Chromakey - Blue");
         keyerParamSets.push_back(paramSet2);
+        
+        //// RESOLUTIONS
+        
+        resolutionNames.push_back(kTV1ResolutionDescriptionVGA);
+        resolutionIndexes.push_back(kTV1ResolutionVGA);
+        resolutionEDIDIndexes.push_back(5);
+    
+        resolutionNames.push_back(kTV1ResolutionDescriptionSVGA);
+        resolutionIndexes.push_back(kTV1ResolutionSVGA);
+        resolutionEDIDIndexes.push_back(5);
+        
+        resolutionNames.push_back(kTV1ResolutionDescriptionXGAp60);
+        resolutionIndexes.push_back(kTV1ResolutionXGAp60);
+        resolutionEDIDIndexes.push_back(5);
+        
+        resolutionNames.push_back(kTV1ResolutionDescriptionWSXGAPLUSp60);
+        resolutionIndexes.push_back(kTV1ResolutionWSXGAPLUSp60);
+        resolutionEDIDIndexes.push_back(5);
+        
+        resolutionNames.push_back(kTV1ResolutionDescriptionWUXGAp60);
+        resolutionIndexes.push_back(kTV1ResolutionWUXGAp60);
+        resolutionEDIDIndexes.push_back(5);
+        
+        resolutionNames.push_back(kTV1ResolutionDescription720p60);
+        resolutionIndexes.push_back(kTV1Resolution720p60);
+        resolutionEDIDIndexes.push_back(5);
+        
+        resolutionNames.push_back(kTV1ResolutionDescription1080p60);
+        resolutionIndexes.push_back(kTV1Resolution1080p60);
+        resolutionEDIDIndexes.push_back(5);
+        
+        resolutionNames.push_back(kTV1ResolutionDescriptionDualHeadSVGAp60);
+        resolutionIndexes.push_back(kTV1ResolutionDualHeadSVGAp60);
+        resolutionEDIDIndexes.push_back(5);
+        
+        resolutionNames.push_back(kTV1ResolutionDescriptionDualHeadXGAp60);
+        resolutionIndexes.push_back(kTV1ResolutionDualHeadXGAp60);
+        resolutionEDIDIndexes.push_back(5);
+        
+        resolutionNames.push_back(kTV1ResolutionDescriptionTripleHeadVGAp60);
+        resolutionIndexes.push_back(kTV1ResolutionTripleHeadVGAp60);
+        resolutionEDIDIndexes.push_back(5);   
     }
     
     string keyerParamName (int index)
@@ -44,6 +88,27 @@
         return keyerParamSets.size();
     }
     
+        string resolutionName (int index)
+    {
+        // TODO: Bounds check and return out of bounds name
+        return resolutionNames[index];
+    }
+     
+    int32_t     resolutionIndex(int index)
+    {
+        return resolutionIndexes[index];
+    }
+    
+    int32_t     resolutionEDIDIndex(int index)
+    {
+        return resolutionEDIDIndexes[index];
+    }
+    
+    int         resolutionsCount()
+    {
+        return resolutionNames.size();
+    }
+    
     bool        load(string filename)
     {
         bool success = false;
@@ -124,6 +189,62 @@
             }
         }        
 
+        // RESOLUTIONS
+        {
+            int counter = 1;
+            
+            bool resolutionReadOK = true;
+            bool resolutionCleared = false;
+            
+            char* failString = "Failed to read";
+            int failInt = -1;
+            
+            // Loop through [Key1,2,...,99] sections
+            while(resolutionReadOK)
+            {
+                char*   resolutionName;
+                int     resolutionIndex;
+                int     resolutionEDIDIndex;
+                
+                char key[18];
+        
+                sprintf(key, "Resolution%i:Name", counter);
+                resolutionName = iniparser_getstring(settings, key, failString);
+                resolutionReadOK = resolutionReadOK && strcmp(resolutionName, failString);
+                       
+                sprintf(key, "Resolution%i:Number", counter);
+                resolutionIndex = iniparser_getint(settings, key, failInt);
+                resolutionReadOK = resolutionReadOK && (resolutionIndex != failInt);
+
+                sprintf(key, "Resolution%i:EDIDNumber", counter);
+                resolutionEDIDIndex = iniparser_getint(settings, key, failInt);
+                resolutionReadOK = resolutionReadOK && (resolutionEDIDIndex != failInt);
+                
+                // If all parameters have been read successfully
+                if (resolutionReadOK)
+                {
+                    // If this is the first time through, clear old values
+                    if (!resolutionCleared)
+                    {
+                        resolutionNames.clear();
+                        resolutionIndexes.clear();
+                        resolutionEDIDIndexes.clear();
+                        resolutionCleared = true;
+                    }
+                
+                    // Apply settings
+                    resolutionNames.push_back(resolutionName);
+                    resolutionIndexes.push_back(resolutionIndex);
+                    resolutionEDIDIndexes.push_back(resolutionEDIDIndex);
+                    
+                    // We've successfully read a resolution, so should return true;
+                    success = true;
+                }
+                
+                counter++;
+            }
+        }
+
         iniparser_freedict(settings);
         
         delete local;
@@ -133,6 +254,9 @@
     
 protected:
     LocalFileSystem *local;
-    vector<int*> keyerParamSets;
-    vector<string> keyerParamNames;
-};
+    vector<int*>    keyerParamSets;
+    vector<string>  keyerParamNames;
+    vector<string>  resolutionNames;
+    vector<int32_t> resolutionIndexes;
+    vector<int32_t> resolutionEDIDIndexes;
+};
\ No newline at end of file