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 68:c26478f42ca4, committed 2013-07-27
- Comitter:
- tobyspark
- Date:
- Sat Jul 27 18:27:11 2013 +0000
- Parent:
- 67:6ce9fb62b17c
- Child:
- 69:cd1c85de3e38
- Commit message:
- Read network settings in from SPKDF.ini
Changed in this revision
--- a/SPKDF_ini.h Sat Jul 27 14:53:57 2013 +0000 +++ b/SPKDF_ini.h Sat Jul 27 18:27:11 2013 +0000 @@ -6,6 +6,37 @@ # # ######################################### A PROJECT BY TOBY HARRIS ####### +### NETWORK +# +# Parameters for the various network modes +# +# OSC: if DHCP is set to Yes, the IP address parameters will be ignored. +# Artnet: Will use the channel mapping set in the DMX section. + +[OSC] + +DHCP = No +ControllerAddress = 10.0.0.2 +ControllerPort = 10000 +ControllerSubnetMask = 255.255.255.0 +ControllerGateway = 10.0.0.1 +ControllerDNS = 10.0.0.1 + +SendAddress = 255.255.255.255 +SendPort = 10000 + +[ArtNet] + +ControllerAddress = 2.0.0.100 +BroadcastAddress = 2.255.255.255 + +[DMX] + +InChannelXFade = 0 +InChannelFadeUp = 1 +OutChannelXFade = 0 +OutChannelFadeUp = 1 + ### KEYS # # Name = What is shown in menu
--- a/main.cpp Sat Jul 27 14:53:57 2013 +0000 +++ b/main.cpp Sat Jul 27 18:27:11 2013 +0000 @@ -44,7 +44,7 @@ * v25 - UX work * v26 - Tweaks: Network in works with hands-on controls, EDID Change message, Fit/Fill * v27 - Rework Keying UX, having current key saved in processor and loading in presets. - * vxx - TODO: Reads OSC and ArtNet network info from .ini + * v28 - Network tweaks. Reads OSC and ArtNet network info from .ini * vxx - TODO: Writes back to .ini on USB mass storage: keyer updates, comms, hdcp, edid internal/passthrough, ...? * vxx - TODO: EDID creation from resolution */ @@ -63,7 +63,7 @@ #include "DMX.h" #include "filter.h" -#define kSPKDFSoftwareVersion "27" +#define kSPKDFSoftwareVersion "28" // MBED PINS @@ -97,25 +97,6 @@ #define kTVOneStatusLine 7 #define kTVOneStatusMessageHoldTime 5 -// NETWORKING - -#define kOSCMbedPort 10000 -#define kOSCMbedIPAddress 10,0,0,2 -#define kOSCMbedSubnetMask 255,255,255,0 -#define kOSCMbedGateway 10,0,0,1 -#define kOSCMbedDNS 10,0,0,1 - -#define kOSCDestIPAddress 255,255,255,255 -#define kOSCDestPort 10000 - -#define kArtNetBindIPAddress 2,0,0,100 -#define kArtNetBroadcastAddress 2,255,255,255 - -#define kDMXInChannelXFade 0 -#define kDMXInChannelFadeUp 1 -#define kDMXOutChannelXFade 0 -#define kDMXOutChannelFadeUp 1 - // 8.3 format filename only, no subdirs #define kSPKDFSettingsFilename "SPKDF.ini" @@ -358,8 +339,8 @@ bool processDMXIn() { - int xFadeDMX = dmx->get(kDMXInChannelXFade); - int fadeUpDMX = dmx->get(kDMXInChannelFadeUp); + int xFadeDMX = dmx->get(settings.dmx.inChannelXFade); + int fadeUpDMX = dmx->get(settings.dmx.inChannelFadeUp); if (((float)xFadeDMX/255 != commsXFade) && ((float)fadeUpDMX/255 != commsFadeUp)) { @@ -384,8 +365,8 @@ int xFadeDMX = xFade*255; int fadeUpDMX = fadeUp*255; - dmx->put(kDMXOutChannelXFade, xFadeDMX); - dmx->put(kDMXOutChannelFadeUp, fadeUpDMX); + dmx->put(settings.dmx.outChannelXFade, xFadeDMX); + dmx->put(settings.dmx.outChannelFadeUp, fadeUpDMX); char statusMessageBuffer[kStringBufferLength]; snprintf(statusMessageBuffer, kStringBufferLength, "DMX Out: xF %3i fUp %3i", xFadeDMX, fadeUpDMX); @@ -1586,13 +1567,20 @@ if (!ethernet) { - ethernet = new EthernetNetIf( - IpAddr(kOSCMbedIPAddress), - IpAddr(kOSCMbedSubnetMask), - IpAddr(kOSCMbedGateway), - IpAddr(kOSCMbedDNS) - ); - + if (settings.osc.DHCP) + { + ethernet = new EthernetNetIf("dvimxr"); + } + else + { + ethernet = new EthernetNetIf( + settings.osc.controllerAddress, + settings.osc.controllerSubnetMask, + settings.osc.controllerGateway, + settings.osc.controllerDNS + ); + } + EthernetErr ethError = ethernet->setup(); if(ethError) { @@ -1607,15 +1595,15 @@ { osc = new OSCClass(); osc->setReceiveMessage(&receiveMessage); - osc->begin(kOSCMbedPort); + osc->begin(settings.osc.sendPort); - uint8_t destIP[] = { kOSCDestIPAddress }; - sendMessage.setIp( destIP ); - sendMessage.setPort( kOSCDestPort ); + uint8_t sendAddress[] = {settings.osc.sendAddress[0], settings.osc.sendAddress[1], settings.osc.sendAddress[2], settings.osc.sendAddress[3]}; + sendMessage.setIp( sendAddress ); + sendMessage.setPort( settings.osc.sendPort ); } IpAddr ethIP = ethernet->getIp(); - snprintf(commsStatusBuffer, kStringBufferLength, "In %u.%u.%u.%u:%u", ethIP[0], ethIP[1], ethIP[2], ethIP[3], kOSCMbedPort); + snprintf(commsStatusBuffer, kStringBufferLength, "In %u.%u.%u.%u:%u", ethIP[0], ethIP[1], ethIP[2], ethIP[3], settings.osc.controllerPort); setCommsMenuItems(); // remove non-OSC from menu. we're locked in. } @@ -1626,8 +1614,8 @@ artNet = new DmxArtNet(); - artNet->BindIpAddress = IpAddr(kArtNetBindIPAddress); - artNet->BCastAddress = IpAddr(kArtNetBroadcastAddress); + artNet->BindIpAddress = settings.artNet.controllerAddress; + artNet->BCastAddress = settings.artNet.broadcastAddress; artNet->InitArtPollReplyDefaults();
--- a/spk_settings.h Sat Jul 27 14:53:57 2013 +0000 +++ b/spk_settings.h Sat Jul 27 18:27:11 2013 +0000 @@ -1,4 +1,5 @@ #include "mbed.h" +#include "ipaddr.h" #include <string> #include <vector> @@ -12,7 +13,31 @@ enum keyerParameterType {minY = 0, maxY, minU, maxU, minV, maxV}; int editingKeyerSetIndex; - + + struct { + bool DHCP; + IpAddr controllerAddress; + int controllerPort; + IpAddr controllerSubnetMask; + IpAddr controllerGateway; + IpAddr controllerDNS; + + IpAddr sendAddress; + int sendPort; + } osc; + + struct { + IpAddr controllerAddress; + IpAddr broadcastAddress; + } artNet; + + struct { + int inChannelXFade; + int inChannelFadeUp; + int outChannelXFade; + int outChannelFadeUp; + } dmx; + SPKSettings() { editingKeyerSetIndex = -1; @@ -21,6 +46,26 @@ void loadDefaults() { + // NETWORK + + osc.DHCP = false; + osc.controllerAddress = IpAddr(10,0,0,2); + osc.controllerPort = 10000; + osc.controllerSubnetMask = IpAddr(255,255,255,0); + osc.controllerGateway = IpAddr(10,0,0,1); + osc.controllerDNS = IpAddr(10,0,0,1); + + osc.sendAddress = IpAddr(255,255,255,255); + osc.sendPort = 10000; + + artNet.controllerAddress = IpAddr(2,0,0,100); + artNet.broadcastAddress = IpAddr(2,255,255,255); + + dmx.inChannelXFade = 0; + dmx.inChannelFadeUp = 1; + dmx.outChannelXFade = 0; + dmx.outChannelFadeUp = 1; + //// KEYS keyerParamNames.clear(); @@ -164,7 +209,80 @@ string filePath("/local/"); filePath += filename; + char* const failString = "Failed to read"; + const int failInt = -1; + dictionary* settings = iniparser_load(filePath.c_str()); + + // NETWORK + { + bool netReadOK = true; + + int DHCP = iniparser_getboolean(settings, "OSC:DHCP", failInt); + netReadOK = netReadOK && DHCP != failInt; + + IpAddr controllerAddress = ipAddrWithString(iniparser_getstring(settings, "OSC:ControllerAddress", failString)); + netReadOK = netReadOK && !controllerAddress.isNull(); + + int controllerPort = iniparser_getboolean(settings, "OSC:ControllerPort", failInt); + netReadOK = netReadOK && controllerPort != failInt; + + IpAddr controllerSubnetMask = ipAddrWithString(iniparser_getstring(settings, "OSC:ControllerSubnetMask", failString)); + netReadOK = netReadOK && !controllerSubnetMask.isNull(); + + IpAddr controllerGateway = ipAddrWithString(iniparser_getstring(settings, "OSC:ControllerGateway", failString)); + netReadOK = netReadOK && !controllerGateway.isNull(); + + IpAddr controllerDNS = ipAddrWithString(iniparser_getstring(settings, "OSC:ControllerDNS", failString)); + netReadOK = netReadOK && !controllerDNS.isNull(); + + IpAddr sendAddress = ipAddrWithString(iniparser_getstring(settings, "OSC:SendAddress", failString)); + netReadOK = netReadOK && !sendAddress.isNull(); + + int sendPort = iniparser_getboolean(settings, "OSC:SendPort", failInt); + netReadOK = netReadOK && sendPort != failInt; + + IpAddr artNetControllerAddress = ipAddrWithString(iniparser_getstring(settings, "ArtNet:ControllerAddress", failString)); + netReadOK = netReadOK && !artNetControllerAddress.isNull(); + + IpAddr artNetBroadcastAddress = ipAddrWithString(iniparser_getstring(settings, "ArtNet:BroadcastAddress", failString)); + netReadOK = netReadOK && !artNetBroadcastAddress.isNull(); + + int inChannelXFade = iniparser_getboolean(settings, "DMX:InChannelXFade", failInt); + netReadOK = netReadOK && inChannelXFade != failInt; + + int inChannelFadeUp = iniparser_getboolean(settings, "DMX:InChannelFadeUp", failInt); + netReadOK = netReadOK && inChannelFadeUp != failInt; + + int outChannelXFade = iniparser_getboolean(settings, "DMX:OutChannelXFade", failInt); + netReadOK = netReadOK && outChannelXFade != failInt; + + int outChannelFadeUp = iniparser_getboolean(settings, "DMX:OutChannelFadeUp", failInt); + netReadOK = netReadOK && outChannelFadeUp != failInt; + + if (netReadOK) + { + osc.DHCP = DHCP; + osc.controllerAddress = controllerAddress; + osc.controllerPort = controllerPort; + osc.controllerSubnetMask = controllerSubnetMask; + osc.controllerGateway = controllerGateway; + osc.controllerDNS = controllerDNS; + + osc.sendAddress = sendAddress; + osc.sendPort = sendPort; + + artNet.controllerAddress = artNetControllerAddress; + artNet.broadcastAddress = artNetBroadcastAddress; + + dmx.inChannelXFade = inChannelXFade; + dmx.inChannelFadeUp = inChannelFadeUp; + dmx.outChannelXFade = outChannelXFade; + dmx.outChannelFadeUp = outChannelFadeUp; + + success = true; + } + } // KEYER { @@ -172,9 +290,7 @@ bool keyParamReadOK = true; bool keyParamCleared = false; - - char* const failString = "Failed to read"; - const int failInt = -1; + const int stringLength = 11; // Loop through [Key1,2,...,99] sections @@ -254,8 +370,6 @@ bool resolutionReadOK = true; bool resolutionCleared = false; - char* const failString = "Failed to read"; - const int failInt = -1; const int stringLength = 25; // Loop through [Key1,2,...,99] sections @@ -318,4 +432,18 @@ vector<string> resolutionNames; vector<int32_t> resolutionIndexes; vector<int32_t> resolutionEDIDIndexes; + + IpAddr ipAddrWithString(const char* ipAsString) + { + int ip0, ip1, ip2, ip3; + + int parsedNum = sscanf(ipAsString, "%u.%u.%u.%u", &ip0, &ip1, &ip2, &ip3); + + if (parsedNum == 4) + { + return IpAddr(ip0, ip1, ip2, ip3); + } + + return IpAddr(); + } }; \ No newline at end of file