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:
Sun Oct 28 16:19:04 2012 +0000
Parent:
26:0299f8760715
Child:
28:67269c2d042b
Commit message:
Reading settings from .ini; Seems that iniparser was a victim of stringstream memory hogging?

Changed in this revision

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
--- a/main.cpp	Sun Oct 28 15:17:28 2012 +0000
+++ b/main.cpp	Sun Oct 28 16:19:04 2012 +0000
@@ -506,6 +506,52 @@
     mbed_reset();
 }
 
+void setResolutionMenuItems()
+{
+    resolutionMenu.clearMenuItems();
+    for (int i=0; i < settings.resolutionsCount(); i++)
+    {
+        resolutionMenu.addMenuItem(SPKMenuItem(settings.resolutionName(i), settings.resolutionIndex(i), settings.resolutionEDIDIndex(i)));
+    }
+    resolutionMenu.addMenuItem(SPKMenuItem("Back to Main Menu", &mainMenu));
+}
+
+void setMixModeMenuItems()
+{
+    mixModeMenu.clearMenuItems();
+    
+    mixModeMenu.addMenuItem(SPKMenuItem("Blend", mixBlend));
+    if (true) mixModeMenu.addMenuItem(SPKMenuItem("Additive", &mixModeAdditiveMenu)); // TODO: Detect whether SPKDF custom firmware
+    
+    for (int i=0; i < settings.keyerSetCount(); i++)
+    {
+        mixModeMenu.addMenuItem(SPKMenuItem(settings.keyerParamName(i), mixKey+i));
+    }
+    mixModeMenu.addMenuItem(SPKMenuItem("Back to Main Menu", &mainMenu));
+}
+
+void setCommsMenuItems()
+{
+    if (rj45Mode == rj45Ethernet) 
+    {
+        commsMenu.title = "Network Mode [Ethernet]";
+        commsMenu.clearMenuItems();
+        commsMenu.addMenuItem(SPKMenuItem("None", commsNone));
+        commsMenu.addMenuItem(SPKMenuItem("OSC", commsOSC));
+        commsMenu.addMenuItem(SPKMenuItem("ArtNet", commsArtNet));
+        commsMenu.addMenuItem(SPKMenuItem("Back to Main Menu", &mainMenu));
+    }
+    else if (rj45Mode == rj45DMX) 
+    {
+        commsMenu.title = "Network Mode [DMX]";
+        commsMenu.clearMenuItems();
+        commsMenu.addMenuItem(SPKMenuItem("None", commsNone));
+        commsMenu.addMenuItem(SPKMenuItem("DMX In", commsDMXIn));
+        commsMenu.addMenuItem(SPKMenuItem("DMX Out", commsDMXOut));
+        commsMenu.addMenuItem(SPKMenuItem("Back to Main Menu", &mainMenu));
+    }
+}
+
 int main() 
 {
     if (debug) 
@@ -528,35 +574,21 @@
     
     // Load saved settings
     bool settingsAreCustom = false;
-/* CRAZY, see note in spk_settings.h   
     settingsAreCustom = settings.load(kSPKDFSettingsFilename);
-    if (settingsAreCustom)
-    {screen.textToBuffer("Settings Read",2); screen.sendBuffer();}
-    else 
-    {screen.textToBuffer("Settings NOT Read",2); screen.sendBuffer();}
-*/    
+    if (settingsAreCustom) {screen.textToBuffer("SPKDF.ini OK", 0); screen.sendBuffer();}
+
     // Set menu structure
     mixModeMenu.title = "Mix Mode";
-    mixModeMenu.addMenuItem(SPKMenuItem("Blend", mixBlend));
-    if (true) mixModeMenu.addMenuItem(SPKMenuItem("Additive", &mixModeAdditiveMenu)); // TODO: Detect whether SPKDF custom firmware
-    for (int i=0; i < settings.keyerSetCount(); i++)
-    {
-        mixModeMenu.addMenuItem(SPKMenuItem(settings.keyerParamName(i), mixKey+i));
-    }
-    mixModeMenu.addMenuItem(SPKMenuItem("Back to Main Menu", &mainMenu));
+    setMixModeMenuItems();
     
     mixModeAdditiveMenu.title = "Additive - adjust midpoint";
     mixModeAdditiveMenu.addMenuItem(SPKMenuItem("click to return", &mixModeMenu, true));
  
     resolutionMenu.title = "Resolution";
-    for (int i=0; i < settings.resolutionsCount(); i++)
-    {
-        resolutionMenu.addMenuItem(SPKMenuItem(settings.resolutionName(i), settings.resolutionIndex(i), settings.resolutionEDIDIndex(i)));
-    }
-    resolutionMenu.addMenuItem(SPKMenuItem("Back to Main Menu", &mainMenu));
+    setResolutionMenuItems();
 
-    commsMenu.title = "Network Mode"; 
-    // commsMenu is built in mixer's run loop, depending on RJ45 mode.
+    commsMenu.title = "Network Mode";
+    setCommsMenuItems();
     
     advancedMenu.title = "Troubleshooting"; 
     advancedMenu.addMenuItem(SPKMenuItem("HDCP Off", advancedHDCPOff));
@@ -625,26 +657,11 @@
         if (rj45ModeDIN != rj45Mode)
         {
             if (debug) debug->printf("Handling RJ45 mode change\r\n");   
+
             // update state
             rj45Mode = rj45ModeDIN;
-            if (rj45Mode == rj45Ethernet) 
-            {
-                commsMenu.title = "Network Mode [Ethernet]";
-                commsMenu.clearMenuItems();
-                commsMenu.addMenuItem(SPKMenuItem("None", commsNone));
-                commsMenu.addMenuItem(SPKMenuItem("OSC", commsOSC));
-                commsMenu.addMenuItem(SPKMenuItem("ArtNet", commsArtNet));
-                commsMenu.addMenuItem(SPKMenuItem("Back to Main Menu", &mainMenu));
-            }
-            if (rj45Mode == rj45DMX) 
-            {
-                commsMenu.title = "Network Mode [DMX]";
-                commsMenu.clearMenuItems();
-                commsMenu.addMenuItem(SPKMenuItem("None", commsNone));
-                commsMenu.addMenuItem(SPKMenuItem("DMX In", commsDMXIn));
-                commsMenu.addMenuItem(SPKMenuItem("DMX Out", commsDMXOut));
-                commsMenu.addMenuItem(SPKMenuItem("Back to Main Menu", &mainMenu));
-            }
+            
+            setCommsMenuItems();
             
             // cancel old comms
             commsMode = commsNone;
@@ -888,6 +905,8 @@
                 else if (advancedMenu.selectedItem().payload.command[0] == advancedLoadDefaults)
                 {
                     settings.loadDefaults();
+                    setMixModeMenuItems();
+                    setResolutionMenuItems();
                     
                     screen.clearBufferRow(kTVOneStatusLine);
                     screen.textToBuffer("Controller reverted", kTVOneStatusLine);
--- a/spk_settings.h	Sun Oct 28 15:17:28 2012 +0000
+++ b/spk_settings.h	Sun Oct 28 16:19:04 2012 +0000
@@ -2,8 +2,6 @@
 #include <string>
 #include <vector>
 
-// CRAZY: When this file is used in a test program, doesn't need the extern to compile, and works perfectly.
-// When this file is used in SPK-DVIMXR, requires the extern to compile and crashes on iniparser_load
 extern "C" 
 {
 #include "iniparser.h"
@@ -20,6 +18,9 @@
     {
         //// KEYS
         
+        keyerParamNames.clear();
+        keyerParamSets.clear();
+        
         // Parameter Set: minY, maxY, minU, maxU, minV, maxV
         int paramSet1[6] = {0, 18, 128, 129, 128, 129};
         keyerParamNames.push_back("Lumakey");
@@ -31,6 +32,10 @@
         
         //// RESOLUTIONS
         
+        resolutionNames.clear();
+        resolutionIndexes.clear();
+        resolutionEDIDIndexes.clear();
+        
         resolutionNames.push_back(kTV1ResolutionDescriptionVGA);
         resolutionIndexes.push_back(kTV1ResolutionVGA);
         resolutionEDIDIndexes.push_back(5);