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
Diff: main.cpp
- Revision:
- 22:90054fe6d86c
- Parent:
- 21:f9d63cb7cedb
- Child:
- 23:909928cafb95
--- a/main.cpp Tue Oct 16 13:35:11 2012 +0000 +++ b/main.cpp Fri Oct 26 13:02:25 2012 +0000 @@ -155,14 +155,17 @@ SPKMenu *lastSelectedMenu; SPKMenuOfMenus mainMenu; SPKMenuPayload resolutionMenu; -SPKMenuPayload mixModeMenu; -SPKMenuPayload advancedMenu; +SPKMenuPayload mixModeMenu; enum { mixBlend, mixAdditive, mixKey }; // additive will require custom TVOne firmware. int mixMode = mixBlend; +float fadeCurve = 0; // 0 = "X", 1 = "/\" <-- pictograms! + SPKMenuPayload commsMenu; enum { commsNone, commsOSC, commsArtNet, commsDMXIn, commsDMXOut}; int commsMode = commsNone; + +SPKMenuPayload advancedMenu; enum { advancedHDCPOn, advancedHDCPOff, advancedConformProcessor, advancedLoadDefaults, advancedSelfTest, advancedSetResolutions }; // RJ45 Comms @@ -488,6 +491,8 @@ // Set menu structure mixModeMenu.title = "Mix Mode"; mixModeMenu.addMenuItem("Blend", mixBlend, 0); + if (true) mixModeMenu.addMenuItem("Additive", mixAdditive, 0); // TODO: Detect whether SPKDF custom firmware + // TODO: Set fadecurve parameter menuitem for (int i=0; i < settings.keyerSetCount(); i++) { mixModeMenu.addMenuItem(settings.keyerParamName(i), mixKey+i, 0); @@ -950,7 +955,7 @@ if (mixMode == mixBlend) { - if (fadeUp < 1.0) + if (fadeUp < 1.0) // TODO: OR if a source is not valid { // we need to set fade level of both windows as there is no way AFAIK to implement fade to black as a further window on top of A&B newFadeAPercent = (1.0-xFade) * fadeUp * 100.0; @@ -965,9 +970,14 @@ } else if (mixMode == mixAdditive) { - // we need to set fade level of both windows according to the fade curve profile (yet to implement - to do when tvone supply additive capability) - newFadeAPercent = (1.0-xFade) * fadeUp * 100.0; - newFadeBPercent = xFade * fadeUp * 100.0; + // we need to set fade level of both windows according to the fade curve profile + float newFadeA = (1.0-xFade) * (1.0 + fadeCurve); + float newFadeB = xFade * (1 + fadeCurve); + if (newFadeA > 1.0) newFadeA = 1.0; + if (newFadeB > 1.0) newFadeB = 1.0; + + newFadeAPercent = newFadeA * fadeUp * 100.0; + newFadeBPercent = newFadeB * fadeUp * 100.0; } else if (mixMode >= mixKey) {