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:
25:3b519ef70341
Parent:
24:49c6624119ae
Child:
26:0299f8760715
--- a/main.cpp	Fri Oct 26 19:22:39 2012 +0000
+++ b/main.cpp	Sun Oct 28 13:57:22 2012 +0000
@@ -57,8 +57,6 @@
 #include "DMX.h"
 #include "filter.h"
 
-#include <sstream>
-
 #define kSPKDFSoftwareVersion "beta.19"
 
 // MBED PINS
@@ -194,40 +192,50 @@
 int keyerParamsSet = -1; // last keyParams index uploaded to unit 
 
 void processOSC(float &xFade, float &fadeUp) {
-    std::stringstream statusMessage;
-    statusMessage.setf(ios::fixed,ios::floatfield);
-    statusMessage.precision(2);
+    string statusMessage;
     
     if (!strcmp( recMessage.getTopAddress() , "dvimxr" )) 
     {
-        statusMessage << "OSC: /dvimxr";
+        statusMessage = "OSC: /dvimxr";
         if (!strcmp( recMessage.getSubAddress() , "xFade" )) 
+        {
+            if (recMessage.getArgNum() == 1)
+                if (recMessage.getTypeTag(0) == 'f')
+                {
+                    xFade = recMessage.getArgFloat(0);
+                    char buffer[15];
+                    sprintf(buffer, "/xFade %1.2f", xFade);
+                    statusMessage += buffer;
+                }
+        }
+        else if (!strcmp( recMessage.getSubAddress() , "fadeUp" ))
+        {
             if (recMessage.getArgNum() == 1)
                 if (recMessage.getTypeTag(0) == 'f')
                 {
-                    double newXFade = recMessage.getArgFloat(0);
-                    statusMessage << "/xFade " << newXFade;
-                    xFade = newXFade;
+                    fadeUp = recMessage.getArgFloat(0);
+                    char buffer[15];
+                    sprintf(buffer, "/fadeUp %1.2f", fadeUp);
+                    statusMessage += buffer;
                 }
-        else if (!strcmp( recMessage.getSubAddress() , "fadeUp" ))
-            if (recMessage.getArgNum() == 1)
-                if (recMessage.getTypeTag(0) == 'f')
-                {
-                    double newFadeUp = recMessage.getArgFloat(0);
-                    statusMessage << "/fadeUp " << newFadeUp;
-                    xFade = newFadeUp;
-                }
-        else statusMessage << recMessage.getSubAddress() << " - Ignoring";
+        }
+        else 
+        {
+            statusMessage += recMessage.getSubAddress();
+            statusMessage += " - Ignoring";
+        }
     }
     else
     {
-        statusMessage << "OSC: " << recMessage.getTopAddress() << " - Ignoring";
+        statusMessage = "OSC: ";
+        statusMessage += recMessage.getTopAddress();
+        statusMessage += " - Ignoring";
     }
     
     screen.clearBufferRow(kCommsStatusLine);
-    screen.textToBuffer(statusMessage.str(), kCommsStatusLine);
+    screen.textToBuffer(statusMessage, kCommsStatusLine);
     screen.sendBuffer();
-    if (debug) debug->printf("%s \r\n", statusMessage.str().c_str());
+    if (debug) debug->printf("%s \r\n", statusMessage.c_str());
     
 }
 
@@ -241,7 +249,7 @@
 
 void processDMXIn(float &xFade, float &fadeUp) 
 {
-    std::stringstream statusMessage;
+    char statusMessageBuffer[25];
 
     int xFadeDMX = dmx->get(kDMXInChannelXFade);
     int fadeUpDMX = dmx->get(kDMXInChannelFadeUp);
@@ -250,15 +258,15 @@
     fadeUp = (float)fadeUpDMX/255;
 
     screen.clearBufferRow(kCommsStatusLine);
-    statusMessage << "DMX In: xF " << xFadeDMX << " fUp " << fadeUpDMX;
-    screen.textToBuffer(statusMessage.str(), kCommsStatusLine);
+    sprintf(statusMessageBuffer, "DMX In: xF %3i fUp %3i", xFadeDMX, fadeUpDMX);
+    screen.textToBuffer(statusMessageBuffer, kCommsStatusLine);
     screen.sendBuffer();
-    if (debug) debug->printf(statusMessage.str().c_str());
+    if (debug) debug->printf(statusMessageBuffer);
 }
 
 void processDMXOut(float &xFade, float &fadeUp) 
 {
-    std::stringstream statusMessage;
+    char statusMessageBuffer[25];
 
     int xFadeDMX = xFade*255;
     int fadeUpDMX = fadeUp*255;
@@ -267,10 +275,10 @@
     dmx->put(kDMXOutChannelFadeUp, fadeUpDMX);
     
     screen.clearBufferRow(kCommsStatusLine);
-    statusMessage << "DMX Out: xF " << xFadeDMX << " fUp " << fadeUpDMX;
-    screen.textToBuffer(statusMessage.str(), kCommsStatusLine);
+    sprintf(statusMessageBuffer, "DMX Out: xF %3i fUp %3i", xFadeDMX, fadeUpDMX);
+    screen.textToBuffer(statusMessageBuffer, kCommsStatusLine);
     screen.sendBuffer();
-    if (debug) debug->printf(statusMessage.str().c_str());
+    if (debug) debug->printf(statusMessageBuffer);
 }
 
 inline float fadeCalc (const float AIN, const float tolerance) 
@@ -312,8 +320,8 @@
 void actionMixMode()
 {
     bool ok = true;
-    std::string sentOK;
-    std::stringstream sentMSG;
+    string sentOK;
+    char sentMSGBuffer[25];
 
     // Set Keyer
     if (mixMode < mixKey)
@@ -328,23 +336,23 @@
         }
         
         ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerEnable, false);
-        sentMSG << "Keyer Off";                
+        sprintf(sentMSGBuffer, "Keyer Off");                
     }
     else
     {
+        int index = mixMode - mixKey;
+
         ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerEnable, true);
-        sentMSG << "Keyer On";
-        
-        int index = mixMode - mixKey;
         ok = ok && setKeyParamsTo(index);
-        sentMSG << " with " << index;
+ 
+        sprintf(sentMSGBuffer, "Keyer On with %i", index);
     }
 
     if (ok) sentOK = "Sent:";
     else sentOK = "Send Error:";
     
     screen.clearBufferRow(kTVOneStatusLine);
-    screen.textToBuffer(sentOK + sentMSG.str(), kTVOneStatusLine);
+    screen.textToBuffer(sentOK + sentMSGBuffer, kTVOneStatusLine);
     
     if (debug) { debug->printf("Changing mix mode"); }
 }
@@ -418,25 +426,21 @@
 
     while(!menuEnc.hasPressed())
     {
-        stringstream xFadeReadOut; 
-        stringstream fadeToBlackReadOut;
-        stringstream tapsReadOut;
+        char xFadeReadOut[25]; 
+        char fadeToBlackReadOut[25];
+        char tapsReadOut[25];
         
-        xFadeReadOut.precision(2);
-        fadeToBlackReadOut.precision(2);
-        tapsReadOut.precision(1);
-        
-        xFadeReadOut << "Crossfade: " << xFadeAIN.read();
-        fadeToBlackReadOut << "Fade to black: " << fadeUpAIN.read();
-        tapsReadOut << "Tap left: " << tapLeftDIN.read() << " right: " << tapRightDIN.read();
+        sprintf(xFadeReadOut, "Crossfade: %1.3f", xFadeAIN.read());
+        sprintf(fadeToBlackReadOut, "Fade to black: %1.3f", fadeUpAIN.read());
+        sprintf(tapsReadOut, "Tap left: %i, right: %i", tapLeftDIN.read(), tapRightDIN.read());
         
         screen.clearBufferRow(1);
         screen.clearBufferRow(2);
         screen.clearBufferRow(3);
         
-        screen.textToBuffer(xFadeReadOut.str(), 1);
-        screen.textToBuffer(fadeToBlackReadOut.str(), 2);
-        screen.textToBuffer(tapsReadOut.str(), 3);
+        screen.textToBuffer(xFadeReadOut, 1);
+        screen.textToBuffer(fadeToBlackReadOut, 2);
+        screen.textToBuffer(tapsReadOut, 3);
         screen.sendBuffer();
     }
     
@@ -669,13 +673,11 @@
                     fadeCurve += menuChange * 0.05;
                     if (fadeCurve > 1.0f) fadeCurve = 1.0f;
                     if (fadeCurve < 0.0f) fadeCurve = 0.0f;
-                    
-                    /* Mystery Crash
-                    std::stringstream fadeCurveMessage;
-                    fadeCurveMessage << "Blend < " << fadeCurve << " > Additive";
+                                        
+                    char fadeCurveMessage[25];
+                    sprintf(fadeCurveMessage, "Blend < %1.2f > Additive", fadeCurve);
                     screen.clearBufferRow(kMenuLine2);
-                    screen.textToBuffer(fadeCurveMessage.str(), kMenuLine2);
-                    */
+                    screen.textToBuffer(fadeCurveMessage, kMenuLine2);
                     
                     if (debug) debug->printf("Fade curve changed by %i to %f", menuChange, fadeCurve);
                 }
@@ -739,22 +741,22 @@
                 ok = ok && tvOne.command(kTV1SourceRGB1, kTV1WindowIDA, kTV1FunctionAdjustSourceEDID, resolutionMenu.selectedItem().payload.command[1]);
                 ok = ok && tvOne.command(kTV1SourceRGB2, kTV1WindowIDA, kTV1FunctionAdjustSourceEDID, resolutionMenu.selectedItem().payload.command[1]);
                 
-                std::string sentOK;
+                string sentOK;
                 if (ok) sentOK = "Sent: ";
                 else sentOK = "Send Error: ";
                 
-                std::stringstream sentMSG;
-                sentMSG << "Res " << resolutionMenu.selectedItem().payload.command[0] << ", EDID " << resolutionMenu.selectedItem().payload.command[1];
+                char sentMSGBuffer[25];
+                sprintf(sentMSGBuffer, "Res %i, EDID %i", resolutionMenu.selectedItem().payload.command[0], resolutionMenu.selectedItem().payload.command[1]);
                 
                 screen.clearBufferRow(kTVOneStatusLine);
-                screen.textToBuffer(sentOK + sentMSG.str(), kTVOneStatusLine);
+                screen.textToBuffer(sentOK + sentMSGBuffer, kTVOneStatusLine);
                 
                 if (debug) { debug->printf("Changing resolution"); }
             }
             else if (selectedMenu == &commsMenu)
             {
-                std::string commsTypeString = "Network: --";
-                std::stringstream commsStatus;
+                string commsTypeString = "Network: --";
+                char commsStatusBuffer[25];
             
                 // Tear down any existing comms
                 // This is the action of commsNone
@@ -790,7 +792,7 @@
                     if(ethError)
                     {
                         if (debug) debug->printf("Ethernet setup error, %d", ethError);
-                        commsStatus << "Ethernet setup failed";
+                        sprintf(commsStatusBuffer, "Ethernet setup failed");
                         commsMenu = commsNone;
                         // break out of here. this setup should be a function that returns a boolean
                     }
@@ -799,7 +801,7 @@
                     osc->setReceiveMessage(&recMessage);
                     osc->begin(kOSCMbedPort);
                     
-                    commsStatus << "Listening on " << kOSCMbedPort;
+                    sprintf(commsStatusBuffer, "Listening on %s", kOSCMbedPort);
                 }
                 else if (commsMenu.selectedItem().payload.command[0] == commsArtNet) 
                 {
@@ -820,7 +822,7 @@
                     artNet->Init();
                     artNet->SendArtPollReply(); // announce to art-net nodes
                     
-                    commsStatus << "Listening";
+                    sprintf(commsStatusBuffer, "Listening");
                 }
                 else if (commsMenu.selectedItem().payload.command[0] == commsDMXIn) 
                 {
@@ -842,7 +844,7 @@
                 }
                                 
                 screen.clearBufferRow(kCommsStatusLine);
-                screen.textToBuffer(commsTypeString + commsStatus.str(), kCommsStatusLine);
+                screen.textToBuffer(commsTypeString + commsStatusBuffer, kCommsStatusLine);
             }
             else if (selectedMenu == &advancedMenu)
             {