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 67:6ce9fb62b17c, committed 2013-07-27
- Comitter:
- tobyspark
- Date:
- Sat Jul 27 14:53:57 2013 +0000
- Parent:
- 66:02845e02a758
- Child:
- 68:c26478f42ca4
- Commit message:
- Removed possibility of crash by selecting different network mode once OSC or ArtNet active. Without hardware debug impossible to tell what is crashing on being destroyed... so working round it GUI-wise.
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Sat Jul 27 14:24:09 2013 +0000 +++ b/main.cpp Sat Jul 27 14:53:57 2013 +0000 @@ -754,9 +754,20 @@ { commsMenu.title = "Network Mode [Ethernet]"; commsMenu.clearMenuItems(); - commsMenu.addMenuItem(SPKMenuItem("None", commsNone)); - commsMenu.addMenuItem(SPKMenuItem("OSC", commsOSC)); - commsMenu.addMenuItem(SPKMenuItem("ArtNet", commsArtNet)); + switch (commsMode) // Cannot switch between OSC and Artnet once one is selected (crash in EthernetIf deconstructor?), so this. + { + case commsNone: + commsMenu.addMenuItem(SPKMenuItem("None", commsNone)); + commsMenu.addMenuItem(SPKMenuItem("OSC", commsOSC)); + commsMenu.addMenuItem(SPKMenuItem("ArtNet", commsArtNet)); + break; + case commsOSC: + commsMenu.addMenuItem(SPKMenuItem("OSC", commsOSC)); + break; + case commsArtNet: + commsMenu.addMenuItem(SPKMenuItem("ArtNet", commsArtNet)); + break; + } commsMenu.addMenuItem(SPKMenuItem("Back to Main Menu", &mainMenu)); commsMenu = 0; } @@ -1543,6 +1554,7 @@ // This is the action of commsNone // And also clears the way for other comms actions commsMode = commsNone; + /* // These don't take well to being destroyed. So while it was a nice idea to be able to swap between None, OSC and Artnet, now the GUI won't allow it, and we don't need this. if (osc) {delete osc; osc = NULL;} if (ethernet) {delete ethernet; ethernet = NULL;} if (artNet) @@ -1554,6 +1566,7 @@ delete artNet; artNet = NULL; } + */ if (dmx) {delete dmx; dmx = NULL;} // Ensure we can't change to comms modes the hardware isn't switched to @@ -1571,32 +1584,40 @@ commsMode = commsOSC; commsTypeString = "OSC: "; - ethernet = new EthernetNetIf( - IpAddr(kOSCMbedIPAddress), - IpAddr(kOSCMbedSubnetMask), - IpAddr(kOSCMbedGateway), - IpAddr(kOSCMbedDNS) - ); - - EthernetErr ethError = ethernet->setup(); - if(ethError) + if (!ethernet) { - if (debug) debug->printf("Ethernet setup error, %d", ethError); - snprintf(commsStatusBuffer, kStringBufferLength, "Ethernet setup failed"); - commsMenu = commsNone; - // break out of here. this setup should be a function that returns a boolean + ethernet = new EthernetNetIf( + IpAddr(kOSCMbedIPAddress), + IpAddr(kOSCMbedSubnetMask), + IpAddr(kOSCMbedGateway), + IpAddr(kOSCMbedDNS) + ); + + EthernetErr ethError = ethernet->setup(); + if(ethError) + { + if (debug) debug->printf("Ethernet setup error, %d", ethError); + snprintf(commsStatusBuffer, kStringBufferLength, "Ethernet setup failed"); + commsMenu = commsNone; + // break out of here. this setup should be a function that returns a boolean + } } - - osc = new OSCClass(); - osc->setReceiveMessage(&receiveMessage); - osc->begin(kOSCMbedPort); - uint8_t destIP[] = { kOSCDestIPAddress }; - sendMessage.setIp( destIP ); - sendMessage.setPort( kOSCDestPort ); + if (!osc) + { + osc = new OSCClass(); + osc->setReceiveMessage(&receiveMessage); + osc->begin(kOSCMbedPort); + + uint8_t destIP[] = { kOSCDestIPAddress }; + sendMessage.setIp( destIP ); + sendMessage.setPort( kOSCDestPort ); + } IpAddr ethIP = ethernet->getIp(); snprintf(commsStatusBuffer, kStringBufferLength, "In %u.%u.%u.%u:%u", ethIP[0], ethIP[1], ethIP[2], ethIP[3], kOSCMbedPort); + + setCommsMenuItems(); // remove non-OSC from menu. we're locked in. } else if (commsMenu.selectedItem().payload.command[0] == commsArtNet) { @@ -1619,6 +1640,8 @@ artNet->SendArtPollReply(); // announce to art-net nodes snprintf(commsStatusBuffer, kStringBufferLength, "Listening"); + + setCommsMenuItems(); // remove non-ArtNet from menu. we're locked in. } else if (commsMenu.selectedItem().payload.command[0] == commsDMXIn) {