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:
71:d6d0ff33cf5b
Parent:
69:cd1c85de3e38
Child:
72:f521154be01f
Child:
74:48890838c9ec
--- a/main.cpp	Sun Jul 28 10:31:14 2013 +0000
+++ b/main.cpp	Mon Jul 29 12:20:16 2013 +0000
@@ -484,43 +484,56 @@
     string sentOK;
     char* sentMSGBuffer = "Blend";
 
+    // Perform unset before set, in case mixMode = mixModeOld
+
+    if (mixModeOld == mixAdditive || reset)
+    {
+        // Turn off Additive Mixing on output
+        if (tvOne.getProcessorType().version == 423)
+        {
+            ok = ok && tvOne.command(0, kTV1WindowIDA, 0x298, 0);
+        }
+    }
     if (mixMode == mixAdditive) 
     {   
         sentMSGBuffer = "Additive";
     
         // First set B to what you'd expect for additive; it may be left at 100 if optimised blend mixing was previous mixmode.
-        ok =       tvOne.command(0, kTV1WindowIDB, kTV1FunctionAdjustWindowsMaxFadeLevel, fadeBPercent);
+        ok = ok && tvOne.command(0, kTV1WindowIDB, kTV1FunctionAdjustWindowsMaxFadeLevel, fadeBPercent);
         // Then turn on Additive Mixing
         if (tvOne.getProcessorType().version == 423)
         {
             ok = ok && tvOne.command(0, kTV1WindowIDA, 0x298, 1);
         }
     }
-    if (mixModeOld == mixAdditive || reset)
-    {
-        // Turn off Additive Mixing on output
-        if (tvOne.getProcessorType().version == 423)
-        {
-            ok = tvOne.command(0, kTV1WindowIDA, 0x298, 0);
-        }
-    }
-    
-    if (mixMode == mixKeyLeft)
-    {
-        sentMSGBuffer = "Key L over R";
-        
-        // Turn on Keyer
-        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerEnable, true);
-    }
+
     if (mixModeOld == mixKeyLeft || reset)
     {
         // Turn off Keyer
         tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerEnable, false);
     }
     
+    if (mixMode == mixKeyLeft)
+    {
+        sentMSGBuffer = "Key L over R";
+        mixKeyWindow = kTV1WindowIDA;
+        
+        // Turn on Keyer
+        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerEnable, true);
+    }
+
+    if (mixModeOld == mixKeyRight || reset)
+    {
+        // Restore window positions
+        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustWindowsLayerPriority, 0);
+        
+        // Turn off Keyer
+        tvOne.command(0, kTV1WindowIDB, kTV1FunctionAdjustKeyerEnable, false); // Checkme: if check for success, returns failure errantly?
+    }    
     if (mixMode == mixKeyRight)
     {
         sentMSGBuffer = "Key R over L";
+        mixKeyWindow = kTV1WindowIDB;
         
         // Turn on Keyer
         ok = ok && tvOne.command(0, kTV1WindowIDB, kTV1FunctionAdjustKeyerEnable, true);
@@ -529,19 +542,17 @@
         // Set window B above window A
         ok = ok && tvOne.command(0, kTV1WindowIDB, kTV1FunctionAdjustWindowsLayerPriority, 0);
     }
-    if (mixModeOld == mixKeyRight || reset)
+    
+    if (ok) 
     {
-        // Turn off Keyer
-        tvOne.command(0, kTV1WindowIDB, kTV1FunctionAdjustKeyerEnable, false);
-        
-        // Restore window positions
-        ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustWindowsLayerPriority, 0);
+        mixModeOld = mixMode;
+        sentOK = "Sent: ";
     }
-    
-    mixModeOld = mixMode;
-
-    if (ok) sentOK = "Sent:";
-    else sentOK = "Send Error:";
+    else 
+    {
+        mixMode = mixModeOld;
+        sentOK = "Send Error: ";
+    }
     
     tvOneStatusMessage.addMessage(sentOK + sentMSGBuffer, kTVOneStatusMessageHoldTime);
 }
@@ -742,8 +753,8 @@
         mixModeMenu.addMenuItem(SPKMenuItem("Blend", mixBlend));
     }
     
-    mixModeMenu.addMenuItem(SPKMenuItem("Key: L over R", mixKeyLeft));
-    mixModeMenu.addMenuItem(SPKMenuItem("Key: R over L", mixKeyRight));
+    mixModeMenu.addMenuItem(SPKMenuItem("Key: Left over Right", mixKeyLeft));
+    mixModeMenu.addMenuItem(SPKMenuItem("Key: Right over Left", mixKeyRight));
     mixModeMenu.addMenuItem(SPKMenuItem("Key: Tweak key values", &mixModeUpdateKeyMenu));
     
     // Load in presets from settings. Index 0 is the "live" key read from TVOne, so we ignore here.
@@ -1104,6 +1115,12 @@
             settings.setEditingKeyerSetValue(SPKSettings::maxU,255);
             settings.setEditingKeyerSetValue(SPKSettings::minV,0);
             settings.setEditingKeyerSetValue(SPKSettings::maxV,255);
+            tvOne.command(0, mixKeyWindow, kTV1FunctionAdjustKeyerMinY, 0);
+            tvOne.command(0, mixKeyWindow, kTV1FunctionAdjustKeyerMaxY, 255);
+            tvOne.command(0, mixKeyWindow, kTV1FunctionAdjustKeyerMinU, 0);
+            tvOne.command(0, mixKeyWindow, kTV1FunctionAdjustKeyerMaxU, 255);
+            tvOne.command(0, mixKeyWindow, kTV1FunctionAdjustKeyerMinV, 0);
+            tvOne.command(0, mixKeyWindow, kTV1FunctionAdjustKeyerMaxV, 255);
         }
         
         actionCount = 3;
@@ -1238,6 +1255,7 @@
     
         // Get back to menu
         actionCount = 0;
+        state = 0;
         selectedMenu = &mixModeMenu;
         screen.clearBufferRow(kMenuLine1);
         screen.clearBufferRow(kMenuLine2);
@@ -1403,7 +1421,7 @@
     handleTVOneSources();
     
     // Processor can have been power-on saved with a keyer on, lets revert
-    actionMixMode();
+    checkTVOneMixStatus();
     
     // Display menu and framing lines
     screen.horizLineToBuffer(kMenuLine1*pixInPage - 1);
@@ -1456,8 +1474,8 @@
                 screen.textToBuffer(selectedMenu->title, kMenuLine1);
                 screen.textToBuffer(selectedMenu->selectedString(), kMenuLine2);
             }
-            if (rj45Mode == rj45Ethernet) screen.textToBuffer("RJ45: Ethernet Engaged", kCommsStatusLine);
-            if (rj45Mode == rj45DMX) screen.textToBuffer("RJ45: DMX Engaged", kCommsStatusLine);
+            if (rj45Mode == rj45Ethernet) screen.textToBuffer("RJ45: Ethernet Mode", kCommsStatusLine);
+            if (rj45Mode == rj45DMX) screen.textToBuffer("RJ45: DMX Mode", kCommsStatusLine);
         }
 
         //// MENU
@@ -1533,7 +1551,7 @@
                 {
                     mixMode = mixModeMenuPayload;
                     
-                    if (mixMode == mixModeOld) tvOneStatusMessage.addMessage("Already active", kTVOneStatusMessageHoldTime);
+                    if (mixMode == mixModeOld) tvOneStatusMessage.addMessage("Mix mode already active", kTVOneStatusMessageHoldTime);
                 }
                 else
                 { 
@@ -1551,7 +1569,7 @@
                         
                         tvOne.command(0, kTV1WindowIDA, kTV1FunctionPowerOnPresetStore, 1);
                         
-                        tvOneStatusMessage.addMessage(ok ? "Loaded: " + settings.keyerParamName(keySetIndex) + " values" : "Send error: keyer values", kTVOneStatusMessageHoldTime, kTVOneStatusMessageHoldTime);
+                        tvOneStatusMessage.addMessage(ok ? "Loaded: " + settings.keyerParamName(keySetIndex) + " values" : "Send error: keyer values", kTVOneStatusMessageHoldTime);
                     }
                 }
             }