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 15:17:28 2012 +0000
Parent:
25:3b519ef70341
Child:
27:27851d3d2bba
Commit message:
Buffer overrun safe version of sprintf

Changed in this revision

DMX.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
--- a/DMX.lib	Sun Oct 28 13:57:22 2012 +0000
+++ b/DMX.lib	Sun Oct 28 15:17:28 2012 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/okini3939/code/DMX/#f0d988e15810
+http://mbed.org/users/okini3939/code/DMX/#2eb66b4d99bd
--- a/main.cpp	Sun Oct 28 13:57:22 2012 +0000
+++ b/main.cpp	Sun Oct 28 15:17:28 2012 +0000
@@ -109,6 +109,8 @@
 // 8.3 format filename only, no subdirs
 #define kSPKDFSettingsFilename "SPKDF.ini"
 
+#define kStringBufferLength 30
+
 //// DEBUG
 
 // Comment out one or the other...
@@ -204,7 +206,7 @@
                 {
                     xFade = recMessage.getArgFloat(0);
                     char buffer[15];
-                    sprintf(buffer, "/xFade %1.2f", xFade);
+                    snprintf(buffer, kStringBufferLength, "/xFade %1.2f", xFade);
                     statusMessage += buffer;
                 }
         }
@@ -215,7 +217,7 @@
                 {
                     fadeUp = recMessage.getArgFloat(0);
                     char buffer[15];
-                    sprintf(buffer, "/fadeUp %1.2f", fadeUp);
+                    snprintf(buffer, kStringBufferLength, "/fadeUp %1.2f", fadeUp);
                     statusMessage += buffer;
                 }
         }
@@ -249,7 +251,7 @@
 
 void processDMXIn(float &xFade, float &fadeUp) 
 {
-    char statusMessageBuffer[25];
+    char statusMessageBuffer[kStringBufferLength];
 
     int xFadeDMX = dmx->get(kDMXInChannelXFade);
     int fadeUpDMX = dmx->get(kDMXInChannelFadeUp);
@@ -258,7 +260,7 @@
     fadeUp = (float)fadeUpDMX/255;
 
     screen.clearBufferRow(kCommsStatusLine);
-    sprintf(statusMessageBuffer, "DMX In: xF %3i fUp %3i", xFadeDMX, fadeUpDMX);
+    snprintf(statusMessageBuffer, kStringBufferLength, "DMX In: xF %3i fUp %3i", xFadeDMX, fadeUpDMX);
     screen.textToBuffer(statusMessageBuffer, kCommsStatusLine);
     screen.sendBuffer();
     if (debug) debug->printf(statusMessageBuffer);
@@ -266,7 +268,7 @@
 
 void processDMXOut(float &xFade, float &fadeUp) 
 {
-    char statusMessageBuffer[25];
+    char statusMessageBuffer[kStringBufferLength];
 
     int xFadeDMX = xFade*255;
     int fadeUpDMX = fadeUp*255;
@@ -275,7 +277,7 @@
     dmx->put(kDMXOutChannelFadeUp, fadeUpDMX);
     
     screen.clearBufferRow(kCommsStatusLine);
-    sprintf(statusMessageBuffer, "DMX Out: xF %3i fUp %3i", xFadeDMX, fadeUpDMX);
+    snprintf(statusMessageBuffer, kStringBufferLength, "DMX Out: xF %3i fUp %3i", xFadeDMX, fadeUpDMX);
     screen.textToBuffer(statusMessageBuffer, kCommsStatusLine);
     screen.sendBuffer();
     if (debug) debug->printf(statusMessageBuffer);
@@ -321,7 +323,7 @@
 {
     bool ok = true;
     string sentOK;
-    char sentMSGBuffer[25];
+    char sentMSGBuffer[kStringBufferLength];
 
     // Set Keyer
     if (mixMode < mixKey)
@@ -336,7 +338,7 @@
         }
         
         ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerEnable, false);
-        sprintf(sentMSGBuffer, "Keyer Off");                
+        snprintf(sentMSGBuffer, kStringBufferLength, "Keyer Off");                
     }
     else
     {
@@ -345,7 +347,7 @@
         ok = ok && tvOne.command(0, kTV1WindowIDA, kTV1FunctionAdjustKeyerEnable, true);
         ok = ok && setKeyParamsTo(index);
  
-        sprintf(sentMSGBuffer, "Keyer On with %i", index);
+        snprintf(sentMSGBuffer, kStringBufferLength, "Keyer On with %i", index);
     }
 
     if (ok) sentOK = "Sent:";
@@ -426,13 +428,13 @@
 
     while(!menuEnc.hasPressed())
     {
-        char xFadeReadOut[25]; 
-        char fadeToBlackReadOut[25];
-        char tapsReadOut[25];
+        char xFadeReadOut[kStringBufferLength]; 
+        char fadeToBlackReadOut[kStringBufferLength];
+        char tapsReadOut[kStringBufferLength];
         
-        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());
+        snprintf(xFadeReadOut, kStringBufferLength, "Crossfade: %1.3f", xFadeAIN.read());
+        snprintf(fadeToBlackReadOut, kStringBufferLength, "Fade to black: %1.3f", fadeUpAIN.read());
+        snprintf(tapsReadOut, kStringBufferLength, "Tap left: %i, right: %i", tapLeftDIN.read(), tapRightDIN.read());
         
         screen.clearBufferRow(1);
         screen.clearBufferRow(2);
@@ -615,7 +617,6 @@
         //// Task background things
         if (ethernet && rj45Mode == rj45Ethernet)
         {
-            if (debug) debug->printf("net poll");
             Net::poll();
         }
 
@@ -674,8 +675,8 @@
                     if (fadeCurve > 1.0f) fadeCurve = 1.0f;
                     if (fadeCurve < 0.0f) fadeCurve = 0.0f;
                                         
-                    char fadeCurveMessage[25];
-                    sprintf(fadeCurveMessage, "Blend < %1.2f > Additive", fadeCurve);
+                    char fadeCurveMessage[kStringBufferLength];
+                    snprintf(fadeCurveMessage, kStringBufferLength, "Blend < %1.2f > Additive", fadeCurve);
                     screen.clearBufferRow(kMenuLine2);
                     screen.textToBuffer(fadeCurveMessage, kMenuLine2);
                     
@@ -745,8 +746,8 @@
                 if (ok) sentOK = "Sent: ";
                 else sentOK = "Send Error: ";
                 
-                char sentMSGBuffer[25];
-                sprintf(sentMSGBuffer, "Res %i, EDID %i", resolutionMenu.selectedItem().payload.command[0], resolutionMenu.selectedItem().payload.command[1]);
+                char sentMSGBuffer[kStringBufferLength];
+                snprintf(sentMSGBuffer, kStringBufferLength,"Res %i, EDID %i", resolutionMenu.selectedItem().payload.command[0], resolutionMenu.selectedItem().payload.command[1]);
                 
                 screen.clearBufferRow(kTVOneStatusLine);
                 screen.textToBuffer(sentOK + sentMSGBuffer, kTVOneStatusLine);
@@ -755,12 +756,13 @@
             }
             else if (selectedMenu == &commsMenu)
             {
-                string commsTypeString = "Network: --";
-                char commsStatusBuffer[25];
+                string commsTypeString = "Network:";
+                char commsStatusBuffer[kStringBufferLength] = "--";
             
                 // Tear down any existing comms
                 // This is the action of commsNone
                 // And also clears the way for other comms actions
+                commsMode = commsNone;
                 if (osc)        {delete osc; osc = NULL;}  
                 if (ethernet)   {delete ethernet; ethernet = NULL;}
                 if (artNet)     {delete artNet; artNet = NULL;}
@@ -792,7 +794,7 @@
                     if(ethError)
                     {
                         if (debug) debug->printf("Ethernet setup error, %d", ethError);
-                        sprintf(commsStatusBuffer, "Ethernet setup failed");
+                        snprintf(commsStatusBuffer, kStringBufferLength, "Ethernet setup failed");
                         commsMenu = commsNone;
                         // break out of here. this setup should be a function that returns a boolean
                     }
@@ -801,7 +803,7 @@
                     osc->setReceiveMessage(&recMessage);
                     osc->begin(kOSCMbedPort);
                     
-                    sprintf(commsStatusBuffer, "Listening on %s", kOSCMbedPort);
+                    snprintf(commsStatusBuffer, kStringBufferLength, "Listening on %i", kOSCMbedPort);
                 }
                 else if (commsMenu.selectedItem().payload.command[0] == commsArtNet) 
                 {
@@ -822,7 +824,7 @@
                     artNet->Init();
                     artNet->SendArtPollReply(); // announce to art-net nodes
                     
-                    sprintf(commsStatusBuffer, "Listening");
+                    snprintf(commsStatusBuffer, kStringBufferLength, "Listening");
                 }
                 else if (commsMenu.selectedItem().payload.command[0] == commsDMXIn) 
                 {