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

Files at this revision

API Documentation at this revision

Comitter:
tobyspark
Date:
Mon Aug 27 15:10:23 2012 +0000
Parent:
10:c011b0e5c17e
Child:
12:c270870bdd23
Commit message:
Settings abstracted out to a class, defaults being set and used.; Next step: implement SPKSettings::load()

Changed in this revision

ConfigFile.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
spk_settings.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ConfigFile.lib	Mon Aug 27 15:10:23 2012 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/pbrier/code/ConfigFile/#8c8cf4615b32
--- a/main.cpp	Sat Aug 18 08:22:59 2012 +0000
+++ b/main.cpp	Mon Aug 27 15:10:23 2012 +0000
@@ -49,6 +49,7 @@
 #include "spk_mRotaryEncoder.h"
 #include "spk_oled_ssd1305.h"
 #include "spk_oled_gfx.h"
+#include "spk_settings.h"
 #include "EthernetNetIf.h"
 #include "mbedOSC.h"
 #include "DmxArtNet.h"
@@ -103,6 +104,8 @@
 #define kDMXOutChannelXFade 0
 #define kDMXOutChannelFadeUp 1
 
+#define kSPKDFSettingsFilename "SPKDF-Settings.txt"
+
 //// DEBUG
 
 // Comment out one or the other...
@@ -133,13 +136,16 @@
 // SPKDisplay(PinName mosi, PinName clk, PinName cs, PinName dc, PinName res, Serial *debugSerial = NULL);
 SPKDisplay screen(kMBED_OLED_MOSI, kMBED_OLED_SCK, kMBED_OLED_CS, kMBED_OLED_DC, kMBED_OLED_RES, debug);
 
+// Saved Settings
+SPKSettings settings;
+
 // Menu 
 SPKMenu *selectedMenu;
 SPKMenu *lastSelectedMenu;
 SPKMenuOfMenus mainMenu;
 SPKMenuPayload resolutionMenu;
 SPKMenuPayload mixModeMenu;
-enum { blend, additive, lumaKey, chromaKey1, chromaKey2, chromaKey3 }; // additive will require custom TVOne firmware.
+enum { blend, additive, key }; // additive will require custom TVOne firmware.
 int mixMode = blend;
 SPKMenuPayload commsMenu;
 enum { commsNone, commsOSC, commsArtNet, commsDMXIn, commsDMXOut};
@@ -167,14 +173,6 @@
 
 // Key mode parameters
 int keyerParamsSet = -1; // last keyParams index uploaded to unit 
-// {lumakey, chroma on blue [, to be extended as needed] }
-// {minY, maxY, minU, maxU, minV, maxV }
-int keyerParams[2][6] = 
-{
-    {0, 18, 128, 129, 128, 129}, // lumakey
-    {30, 35, 237, 242, 114, 121} // chroma on blue
-    // ...
-};
 
 void processOSC(float &xFade, float &fadeUp) {
     std::stringstream statusMessage;
@@ -275,12 +273,12 @@
     
     if (index != keyerParamsSet)
     {
-        ok =       tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerMinY, keyerParams[index][0]); 
-        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerMaxY, keyerParams[index][1]); 
-        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerMinU, keyerParams[index][2]); 
-        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerMaxU, keyerParams[index][3]); 
-        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerMinV, keyerParams[index][4]); 
-        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerMaxV, keyerParams[index][5]);
+        ok =       tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerMinY, settings.keyerParamSet(index)[0]); 
+        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerMaxY, settings.keyerParamSet(index)[1]); 
+        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerMinU, settings.keyerParamSet(index)[2]); 
+        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerMaxU, settings.keyerParamSet(index)[3]); 
+        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerMinV, settings.keyerParamSet(index)[4]); 
+        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerMaxV, settings.keyerParamSet(index)[5]);
         
         keyerParamsSet = index;
     }
@@ -312,11 +310,16 @@
     screen.textToBuffer("SW beta.18",1);
     screen.sendBuffer();
     
+    // Load saved settings
+    settings.load(kSPKDFSettingsFilename);
+    
     // Set menu structure
     mixModeMenu.title = "Mix Mode";
     mixModeMenu.addMenuItem("Blend", blend, 0);
-    mixModeMenu.addMenuItem("LumaKey", lumaKey, 0);
-    mixModeMenu.addMenuItem("ChromaKey - Blue", chromaKey1, 0);
+    for (int i=0; i < settings.keyerSetCount(); i++)
+    {
+        mixModeMenu.addMenuItem(settings.keyerParamName(i), key+i, 0);
+    }
  
     resolutionMenu.title = "Resolution";
     resolutionMenu.addMenuItem(kTV1ResolutionDescriptionVGA, kTV1ResolutionVGA, 5);
@@ -484,34 +487,22 @@
                 std::string sentOK;
                 std::stringstream sentMSG;
             
-                // Set keying parameters
-                switch (mixModeMenu.selectedPayload1()) {
-                case lumaKey:
-                    ok = setKeyParamsTo(0);
-                    sentMSG << "Keyer Params 0, ";
-                    break;
-                case chromaKey1:
-                    ok = setKeyParamsTo(1);
-                    sentMSG << "Keyer Params 1, ";
-                    break;
+                // Set Keyer
+                if (mixModeMenu.selectedPayload1() < key)
+                {
+                    ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerEnable, false);
+                    sentMSG << "Keyer Off";                
+                }
+                else
+                {
+                    ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerEnable, true);
+                    sentMSG << "Keyer On";
+                    
+                    int index = mixModeMenu.selectedPayload1() - key;
+                    ok = ok && setKeyParamsTo(index);
+                    sentMSG << " with " << index;
                 }
 
-                // Set keying on or off
-                switch (mixModeMenu.selectedPayload1()) {
-                case blend:
-                case additive:
-                    ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerEnable, false);
-                    sentMSG << "Keyer Off";
-                    break;
-                case lumaKey:
-                case chromaKey1:
-                case chromaKey2:
-                case chromaKey3:
-                    ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerEnable, true);
-                    sentMSG << "Keyer On";
-                    break;
-                }
-                
                 if (ok) sentOK = "Sent:";
                 else sentOK = "Send Error:";
                 
@@ -712,8 +703,8 @@
         int newFadeAPercent = 0;
         int newFadeBPercent = 0;
 
-        switch (mixMode) {
-        case blend:
+        if (mixMode == blend) 
+        {
             if (fadeUp < 1.0)
             {
                 // we need to set fade level of both windows as there is no way AFAIK to implement fade to black as a further window on top of A&B
@@ -726,19 +717,17 @@
                 newFadeAPercent = (1.0-xFade) * 100.0;
                 newFadeBPercent = 100.0;
             }
-            break;
-        case additive:
+        }
+        else if (mixMode == additive)
+        {
             // we need to set fade level of both windows according to the fade curve profile (yet to implement - to do when tvone supply additive capability)
             newFadeAPercent = (1.0-xFade) * fadeUp * 100.0;
             newFadeBPercent = xFade * fadeUp * 100.0;
-            break;
-        case lumaKey:
-        case chromaKey1:
-        case chromaKey2:
-        case chromaKey3:
+        }
+        else if (mixMode >= key)
+        {
             newFadeAPercent = (1.0-xFade) * fadeUp * 100.0;
             newFadeBPercent = fadeUp * 100.0;
-            break;
         }            
         
         // Send to TVOne if percents have changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spk_settings.h	Mon Aug 27 15:10:23 2012 +0000
@@ -0,0 +1,51 @@
+// 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"
+
+class SPKSettings {
+public:
+    SPKSettings()
+    {
+        int paramSet1[6] = {kKeyerParam1Set};
+        keyerParamNames.push_back(kKeyerParam1Name);
+        keyerParamSets.push_back(paramSet1);
+        
+        int paramSet2[6] = {kKeyerParam2Set};
+        keyerParamNames.push_back(kKeyerParam2Name);
+        keyerParamSets.push_back(paramSet2);
+    }
+    
+    std::string keyerParamName (int index)
+    {
+        // TODO: Bounds check and return out of bounds name
+        return keyerParamNames[index];
+    }
+     
+    int*        keyerParamSet(int index)
+    {
+        return keyerParamSets[index];
+    }
+    
+    int         keyerSetCount()
+    {
+        return keyerParamSets.size();
+    }
+    
+    bool        load(std::string filename)
+    {
+        bool success = false;
+        
+        // TODO!
+        
+        return success;
+    }
+    
+protected:
+    LocalFileSystem *local;
+    std::vector<int*> keyerParamSets;
+    std::vector<std::string> keyerParamNames;
+};