Пример #1
0
        public static Zone CreateNeoMatrixZone(ZLM zlm)
        {
            var neomatrix = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "NeoMatrix", PixelType.FadeCandyWS2812Pixel,
                                                                     64, 1);

            return(neomatrix);
        }
Пример #2
0
        public static void AddFourZonesAndStepperProgramSetWithSyncToZLM(ZLM zlm)
        {
            var notificationSyncContext = new SyncContext("NotificationContext");

            //add zones
            var zoneA = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "ZoneA", PixelType.FadeCandyWS2812Pixel, 16, 1);
            var zoneB = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "ZoneB", PixelType.FadeCandyWS2812Pixel, 16, 2);
            var zoneC = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "ZoneC", PixelType.FadeCandyWS2812Pixel, 16, 3);
            var zoneD = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "ZoneD", PixelType.FadeCandyWS2812Pixel, 16, 4);

            zlm.CreateProgramSet("StepperSet", "Stepper", true, null, zlm.Zones);

            //setup interrupting inputs - in the real code this method should not be used. The ZoneScaffolder.AddInterruptingProgram should be used.
            zoneA.AddInterruptingProgram(new BlinkColorReactive(), null, notificationSyncContext);
            zoneB.AddInterruptingProgram(new BlinkColorReactive(), null, notificationSyncContext);
            zoneC.AddInterruptingProgram(new BlinkColorReactive(), null, notificationSyncContext);
            zoneD.AddInterruptingProgram(new BlinkColorReactive(), null, notificationSyncContext);

            //synchronize and start interrupting programs
            notificationSyncContext.Sync(zoneA.InterruptingPrograms[0],
                                         zoneB.InterruptingPrograms[0],
                                         zoneC.InterruptingPrograms[0],
                                         zoneD.InterruptingPrograms[0]);

            zoneA.InterruptingPrograms[0].Start();
            zoneB.InterruptingPrograms[0].Start();
            zoneC.InterruptingPrograms[0].Start();
            zoneD.InterruptingPrograms[0].Start();
        }
Пример #3
0
        public void CreateTwoProgramSets_WorksWithSync()
        {
            var zlm = new ZLM(loadZoneModules: false, loadZonesFromConfig: false, loadProgramSetsFromConfig: false);

            var leftWing  = zlm.Zones.Add(new Zone("LeftWing"));
            var center    = zlm.Zones.Add(new Zone("Center"));
            var rightWing = zlm.Zones.Add(new Zone("RightWing"));

            //create program set
            zlm.CreateProgramSet("", "Stepper", true, null, new List <Zone>()
            {
                leftWing,
                center,
            });

            //create program set
            zlm.CreateProgramSet("", "Stepper", true, null, new List <Zone>()
            {
                rightWing
            });

            TestHelpers.ValidateSteppersInSync(
                new BetterList <Zone> {
                leftWing, center
            }.Select(z => z.ZoneProgram).Cast <IStepper>(), 100);
            TestHelpers.ValidateSteppersRunning(
                new BetterList <Zone> {
                rightWing
            }.Select(z => z.ZoneProgram).Cast <IStepper>(), 10);

            //cleanup
            zlm.Dispose();
        }
Пример #4
0
 public static Action AddBasementZonesAndProgramsWithSyncAction(ZLM zlm)
 {
     return(() =>
     {
         AddBasementZonesAndProgramsWithSync(zlm);
     });
 }
        public void MidiTwoDimensionalFade_Works(int sleepSeconds, bool random)
        {
            ZLM zlm      = null;
            var deviceID = 0;

            try
            {
                //act
                zlm = new ZLM(false, false, false, zlmInner =>
                {
                    var neomatrix = ZoneScaffolder.Instance.AddFadeCandyZone(zlmInner.Zones, "NeoMatrix",
                                                                             PixelType.FadeCandyWS2812Pixel, 64, 1);
                    var midiTwoDimensionalFade  = new MidiTwoDimensionalFade();
                    dynamic startingParameters  = new ExpandoObject();
                    startingParameters.DeviceID = deviceID;
                    neomatrix.Run(midiTwoDimensionalFade, startingParameters: startingParameters);
                }, Config.Get("NeoMatrixOneZone"));

                Thread.Sleep(sleepSeconds * 1000);
            }
            catch (Exception ex)
            {
                zlm?.Dispose();
                Thread.Sleep(10000);
            }
        }
Пример #6
0
 public static Action RunShimmerOnNeoMatrixAction(ZLM zlm)
 {
     return(() =>
     {
         RunShimmerOnNeoMatrix(zlm);
     });
 }
Пример #7
0
        public void SetZoneInputs_Works()
        {
            string  programSetName = "RainbowSet";
            string  programName    = "Rainbow";
            dynamic isv            = new ISV();

            isv.Speed = 50;

            var zlm    = new ZLM(false, false, false);
            var zlmrpc = new ZLMRPC(zlm);
            var zone1  = zlm.AddFadeCandyZone("Zone1", PixelType.FadeCandyWS2812Pixel, 8, 1);
            var zone2  = zlm.AddFadeCandyZone("Zone2", PixelType.FadeCandyWS2812Pixel, 8, 1);

            zlm.CreateProgramSet(programSetName, programName, zlm.Zones.Select(z => z.Name), true, isv);

            isv.Speed = 90;

            //act
            zlmrpc.SetZoneInputs("Zone1", isv);

            //assert
            Assert.That(zone1.ZoneProgram.GetInput("Speed").Value, Is.EqualTo(90));
            Assert.That(zone2.ZoneProgram.GetInput("Speed").Value, Is.EqualTo(50));

            zlmrpc.Dispose();
        }
Пример #8
0
        public void GetZones_OneRunningOneStopped_Works()
        {
            string  programSetName = "RainbowSet";
            string  programName    = "Rainbow";
            dynamic isv            = new ISV();

            isv.Speed = 50;

            var zlm    = new ZLM(false, false, false);
            var zlmrpc = new ZLMRPC(zlm);
            var zone1  = zlm.AddFadeCandyZone("Zone1", PixelType.FadeCandyWS2812Pixel, 8, 1);
            var zone2  = zlm.AddFadeCandyZone("Zone2", PixelType.FadeCandyWS2812Pixel, 8, 1);

            zlm.CreateProgramSet(programSetName, programName, "Zone2".Listify(), true, isv);

            //act
            var zones = zlmrpc.GetZones();

            //assert
            Assert.That(zones.First(x => x.Name == "Zone1").Brightness, Is.EqualTo(zlm.Zones["Zone1"].Brightness));
            Assert.That(zones.First(x => x.Name == "Zone1").LightCount, Is.EqualTo(zlm.Zones["Zone1"].LightCount));
            Assert.That(zones.First(x => x.Name == "Zone1").Running, Is.EqualTo(zlm.Zones["Zone1"].Running));
            Assert.That(zones.First(x => x.Name == "Zone1").ZoneProgramName, Is.EqualTo(string.Empty).Or.EqualTo(null));

            Assert.That(zones.First(x => x.Name == "Zone2").Brightness, Is.EqualTo(zlm.Zones["Zone2"].Brightness));
            Assert.That(zones.First(x => x.Name == "Zone2").LightCount, Is.EqualTo(zlm.Zones["Zone2"].LightCount));
            Assert.That(zones.First(x => x.Name == "Zone2").Running, Is.EqualTo(zlm.Zones["Zone2"].Running));
            Assert.That(zones.First(x => x.Name == "Zone2").ZoneProgramName, Is.EqualTo(zlm.Zones["Zone2"].ZoneProgram.Name));

            zlmrpc.Dispose();
        }
Пример #9
0
        public void SetProgramSetInputs_Works()
        {
            string  programSetName = "RainbowSet";
            string  programName    = "Rainbow";
            var     zoneName       = "FadeCandyZone";
            dynamic isv            = new ISV();

            isv.Speed = 50;

            var zlm    = new ZLM(false, false, false);
            var zlmrpc = new ZLMRPC(zlm);

            zlm.AddFadeCandyZone(zoneName, PixelType.FadeCandyWS2812Pixel, 8, 1);
            zlm.CreateProgramSet(programSetName, programName, zlm.Zones.Select(z => z.Name), true, isv);
            zlm.Zones.ForEach(zone =>
            {
                Assert.That(zone.ZoneProgram, Is.Not.Null);
                Assert.That(zone.ZoneProgram.State, Is.EqualTo(ProgramState.Started));
                Assert.That(zone.ZoneProgram.GetInput("Speed").Value, Is.EqualTo(50));
            });

            isv.Speed = 90;

            //act
            zlmrpc.SetProgramSetInputs(programSetName, isv);

            //assert
            zlm.Zones.ForEach(zone =>
            {
                Assert.That(zone.ZoneProgram.GetInput("Speed").Value, Is.EqualTo(90));
            });

            zlmrpc.Dispose();
        }
Пример #10
0
        public void RecreateProgramSetWithoutZone_Works()
        {
            string  programSetName = "RainbowSet";
            string  programName    = "Rainbow";
            var     zoneName       = "FadeCandyZone";
            dynamic isv            = new ISV();

            isv.Speed = 50;

            var zlm            = new ZLM(false, false, false);
            var zlmrpc         = new ZLMRPC(zlm);
            var fadeCandyZone1 = zlm.AddFadeCandyZone("FadeCandyZone1", PixelType.FadeCandyWS2812Pixel, 8, 1);
            var fadeCandyZone2 = zlm.AddFadeCandyZone("FadeCandyZone2", PixelType.FadeCandyWS2812Pixel, 8, 2);

            zlm.CreateProgramSet(programSetName, programName, zlm.Zones.Select(z => z.Name), true, isv);

            Assert.That(zlm.ProgramSets[programSetName].Zones, Contains.Item(fadeCandyZone1));
            Assert.That(zlm.ProgramSets[programSetName].Zones, Contains.Item(fadeCandyZone2));

            //act
            zlmrpc.RecreateProgramSetWithoutZone(programSetName, fadeCandyZone2.Name);

            //assert
            Assert.That(zlm.ProgramSets[programSetName].Zones, Contains.Item(fadeCandyZone1));
            Assert.That(zlm.ProgramSets[programSetName].Zones, Is.Not.Contains(fadeCandyZone2));

            Assert.That(zlm.AvailableZones, Contains.Item(fadeCandyZone2));

            zlmrpc.Dispose();
        }
Пример #11
0
 public static Action AddFourZonesAndStepperProgramSetWithSyncToZLMAction(ZLM zlm)
 {
     return(() =>
     {
         AddFourZonesAndStepperProgramSetWithSyncToZLM(zlm);
     });
 }
Пример #12
0
        public void StartProgramSet_Works()
        {
            var programSetName = "StepperSet";

            var zlm    = new ZLM(false, false, false);
            var zlmrpc = new ZLMRPC(zlm);

            zlm.AddFadeCandyZone("FadeCandyZone", PixelType.FadeCandyWS2812Pixel, 8, 1);
            zlm.CreateProgramSet(programSetName, "Stepper", zlm.Zones.Select(z => z.Name));
            zlm.Zones.ForEach(zone =>
            {
                Assert.That(zone.ZoneProgram.State, Is.EqualTo(ProgramState.Started));
            });

            zlm.ProgramSets[programSetName].Stop();

            zlm.Zones.ForEach(zone =>
            {
                Assert.That(zone.ZoneProgram.State, Is.EqualTo(ProgramState.Stopped));
            });

            //act
            zlmrpc.StartProgramSet(programSetName);

            //assert
            zlm.Zones.ForEach(zone =>
            {
                Assert.That(zone.ZoneProgram.State, Is.EqualTo(ProgramState.Started));
            });

            zlmrpc.Dispose();
        }
Пример #13
0
        public void RaindropsOnScrollTrail_Works(int?sleepSeconds)
        {
            //act
            var zlm = new ZLM(false, false, false, zlmInner =>
            {
                var isv = new ISV();
                isv.Add("DarkenFactor", (float)0.7);
                isv.Add("DelayTime", 70);
                isv.Add("ShareShape", false);
                isv.Add("TrailShapes", new List <TrailShape>()
                {
                    new TrailShape(new Trail(4, Color.Blue.Darken(0.5)), new Shape(0, 1, 2, 3, 4, 5, 6, 7)),
                    new TrailShape(new Trail(4, Color.Red.Darken(0.5)), new Shape(8, 9, 10, 11, 12, 13, 14, 15)),
                    new TrailShape(new Trail(4, Color.Blue.Darken(0.5)), new Shape(16, 17, 18, 19, 20, 21, 22, 23)),
                    new TrailShape(new Trail(4, Color.Red.Darken(0.5)), new Shape(24, 25, 26, 27, 28, 29, 30, 31)),
                    new TrailShape(new Trail(4, Color.Blue.Darken(0.5)), new Shape(32, 33, 34, 35, 36, 37, 38, 39)),
                    new TrailShape(new Trail(4, Color.Red.Darken(0.5)), new Shape(40, 41, 42, 43, 44, 45, 46, 47)),
                    new TrailShape(new Trail(4, Color.Blue.Darken(0.5)), new Shape(48, 49, 50, 51, 52, 53, 54, 55)),
                    new TrailShape(new Trail(4, Color.Red.Darken(0.5)), new Shape(56, 57, 58, 59, 60, 61, 62, 63)),
                });
                var neomatrix = ZoneScaffolder.Instance.AddFadeCandyZone(zlmInner.Zones, "NeoMatrix", PixelType.FadeCandyWS2812Pixel,
                                                                         64, 1);
                zlmInner.CreateSingularProgramSet("", new ScrollTrail(), isv, neomatrix);
            }, Config.Get("NeoMatrixOneZone"));

            //Thread.Sleep(Timeout.Infinite);
            Thread.Sleep((int)(sleepSeconds != null ? sleepSeconds * 1000 : Timeout.Infinite));

            //cleanup
            zlm.Dispose();
        }
Пример #14
0
 public static Action AddNeopixelZonesAndProgramsWithSync(ZLM zlm)
 {
     return(() =>
     {
         AddNeopixelZonesAndProgramsWithSyncMethod(zlm);
     });
 }
Пример #15
0
        public void ScrollTrail_FourRandomColorsSquareTrails_Works(int?sleepSeconds, float darkenFactor, int delayTime)
        {
            //act
            var zlm = new ZLM(false, false, false, zlmInner =>
            {
                var isv = new ISV();
                isv.Add("DarkenFactor", (float)darkenFactor);
                isv.Add("DelayTime", delayTime);
                isv.Add("ShareShape", true);
                isv.Add("TrailShapes", new List <TrailShape>()
                {
                    new TrailShape(new Trail(4, ProgramCommon.GetRandomColor().Darken(0.5)), new Shape(0, 1, 2, 3, 11, 19, 27, 26, 25, 24, 16, 8)),
                    new TrailShape(new Trail(4, ProgramCommon.GetRandomColor().Darken(0.5)), new Shape(27, 26, 25, 24, 16, 8, 0, 1, 2, 3, 11, 19)),
                    new TrailShape(new Trail(4, ProgramCommon.GetRandomColor().Darken(0.5)), new Shape(4, 5, 6, 7, 15, 23, 31, 30, 29, 28, 20, 12)),
                    new TrailShape(new Trail(4, ProgramCommon.GetRandomColor().Darken(0.5)), new Shape(31, 30, 29, 28, 20, 12, 4, 5, 6, 7, 15, 23)),
                    new TrailShape(new Trail(4, ProgramCommon.GetRandomColor().Darken(0.5)), new Shape(32, 33, 34, 35, 43, 51, 59, 58, 57, 56, 48, 40)),
                    new TrailShape(new Trail(4, ProgramCommon.GetRandomColor().Darken(0.5)), new Shape(59, 58, 57, 56, 48, 40, 32, 33, 34, 35, 43, 51)),
                    new TrailShape(new Trail(4, ProgramCommon.GetRandomColor().Darken(0.5)), new Shape(36, 37, 38, 39, 47, 55, 63, 62, 61, 60, 52, 44)),
                    new TrailShape(new Trail(4, ProgramCommon.GetRandomColor().Darken(0.5)), new Shape(63, 62, 61, 60, 52, 44, 36, 37, 38, 39, 47, 55)),
                });
                var neomatrix = ZoneScaffolder.Instance.AddFadeCandyZone(zlmInner.Zones, "NeoMatrix", PixelType.FadeCandyWS2812Pixel,
                                                                         64, 1);
                zlmInner.CreateSingularProgramSet("", new ScrollTrail(), isv, neomatrix);
            }, Config.Get("NeoMatrixOneZone"));

            //Thread.Sleep(Timeout.Infinite);
            Thread.Sleep((int)(sleepSeconds != null ? sleepSeconds * 1000 : Timeout.Infinite));

            //cleanup
            zlm.Dispose();
        }
Пример #16
0
        public static void AddNeopixelZonesAndProgramsWithSyncMethod(ZLM zlm)
        {
            var notificationSyncContext = new SyncContext("NotificationContext");

            //add zones
            //var row12 = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "Row12", PixelType.FadeCandyWS2812Pixel, 16, 1, 0.5);
            //var row34 = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "Row34", PixelType.FadeCandyWS2812Pixel, 16, 2, 0.5);
            //var row56 = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "Row56", PixelType.FadeCandyWS2812Pixel, 16, 3, 0.5);
            //var row78 = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "Row78", PixelType.FadeCandyWS2812Pixel, 16, 4, 0.5);

            var neoMatrix = CreateNeoMatrixZone(zlm);

            var isv = new ISV();

            isv.Add("MaxFadeSpeed", 1);
            isv.Add("MaxFadeDelay", 20);
            isv.Add("Density", 1.0);
            isv.Add("Brightness", 0.3);
            isv.Add("Random", true);

            zlm.CreateProgramSet("ShimmerSet", "Shimmer", false, isv, zlm.Zones);

            //setup interrupting inputs - in the real code this method should not be used. The ZoneScaffolder.AddInterruptingProgram should be used.
            neoMatrix.AddInterruptingProgram(new BlinkColorReactive(), null, notificationSyncContext);

            //synchronize and start interrupting programs
            notificationSyncContext.Sync(neoMatrix.InterruptingPrograms[0]);

            neoMatrix.InterruptingPrograms[0].Start();
        }
Пример #17
0
        public static void AddBasementZonesAndProgramsWithSync(ZLM zlm)
        {
            var notificationSyncContext = new SyncContext("NotificationContext");

            //add zones
            var leftWing = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "LeftWing", PixelType.FadeCandyWS2812Pixel, 6,
                                                                    1);
            var center    = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "Center", PixelType.FadeCandyWS2811Pixel, 21, 2);
            var rightWing = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "RightWing", PixelType.FadeCandyWS2812Pixel,
                                                                     12, 3);
            var baiClock = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "BaiClock", PixelType.FadeCandyWS2812Pixel, 24,
                                                                    4);

            zlm.CreateProgramSet("RainbowSet", "Rainbow", true, null, zlm.Zones);

            //setup interrupting inputs - in the real code this method should not be used. The ZoneScaffolder.AddInterruptingProgram should be used.
            leftWing.AddInterruptingProgram(new BlinkColorReactive(), null, notificationSyncContext);
            rightWing.AddInterruptingProgram(new BlinkColorReactive(), null, notificationSyncContext);
            center.AddInterruptingProgram(new BlinkColorReactive(), null, notificationSyncContext);
            baiClock.AddInterruptingProgram(new BlinkColorReactive(), null, notificationSyncContext);

            //synchronize and start interrupting programs
            notificationSyncContext.Sync(leftWing.InterruptingPrograms[0],
                                         rightWing.InterruptingPrograms[0],
                                         center.InterruptingPrograms[0],
                                         baiClock.InterruptingPrograms[0]);

            leftWing.InterruptingPrograms[0].Start();
            rightWing.InterruptingPrograms[0].Start();
            center.InterruptingPrograms[0].Start();
            baiClock.InterruptingPrograms[0].Start();
        }
Пример #18
0
        public void AvailableZones_ReturnsZonesOnWhichNoProgramSetWasCreated()
        {
            var zlm = new ZLM(loadZoneModules: false, loadZonesFromConfig: false, loadProgramSetsFromConfig: false);

            var leftWing  = zlm.Zones.Add(new Zone("LeftWing"));
            var center    = zlm.Zones.Add(new Zone("Center"));
            var rightWing = zlm.Zones.Add(new Zone("RightWing"));

            //check if zones and availablezones are the same, since no program sets have been created yet
            Assert.AreEqual(zlm.Zones, zlm.AvailableZones);

            //create program set with all but one zone
            zlm.CreateProgramSet("", "Stepper", true, null, new List <Zone>()
            {
                leftWing,
                center
            });

            //the zone on which no program set was created should be the only one available
            Assert.True(zlm.AvailableZones.Count == 1);
            Assert.True(zlm.AvailableZones[0] == rightWing);

            //cleanup
            zlm.Dispose();
        }
Пример #19
0
        public static void CreateZLM()
        {
            bool firstRun;

            if (!bool.TryParse(Config.Get("FirstRun"), out firstRun))
            {
                firstRun = true;
            }

            bool loadZoneModules;

            if (!bool.TryParse(Config.Get("LoadZoneModules"), out loadZoneModules))
            {
                loadZoneModules = false;
            }

            //get initAction from config
            Action <ZLM> initAction = null;

            if (typeof(RunnerHelpers).GetMethods().Select(method => method.Name).Contains(Config.Get("InitAction")))
            {
                var initActionInfo = typeof(RunnerHelpers).GetMethods().First(method => method.Name == Config.Get("InitAction"));
                initAction = (Action <ZLM>)Delegate.CreateDelegate(typeof(Action <ZLM>), initActionInfo);
            }

            ZLM = new ZLM(loadZonesFromConfig: !firstRun,
                          loadProgramSetsFromConfig: !firstRun,
                          loadZoneModules: loadZoneModules, initAction: initAction);
        }
Пример #20
0
        public static void RunRainbowInBasement(ZLM zlm)
        {
            var leftWing = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "LeftWing", PixelType.FadeCandyWS2812Pixel,
                                                                    6, 1);
            var rightwing = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "RightWing", PixelType.FadeCandyWS2812Pixel,
                                                                     12, 3);

            zlm.CreateProgramSet("RainbowSet", "Rainbow", true, null, zlm.Zones);
        }
Пример #21
0
        public static void RunMidiTwoDimensionalFadeOnNeoMatrix(ZLM zlm)
        {
            var neomatrix = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "NeoMatrix", PixelType.FadeCandyWS2812Pixel,
                                                                     64, 1);
            dynamic startingParameters = new ExpandoObject();

            startingParameters.DeviceID = int.Parse(Config.Get("MIDIDeviceID"));
            zlm.CreateProgramSet("MidiTwoDimensionalFadeSet", "MidiTwoDimensionalFade", false, null, zlm.Zones,
                                 startingParameters);
        }
Пример #22
0
        public static Zone CreateLivingRoomZone(ZLM zlm)
        {
            const byte      fadeCandyChannel = 1;
            const PixelType pixelType        = PixelType.FadeCandyWS2812Pixel;

            var livingRoom = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "LivingRoom", pixelType, LivingRoomLogicalPhysicalMapping,
                                                                      fadeCandyChannel);

            return(livingRoom);
        }
Пример #23
0
        public static void RunMidiPlayInLivingRoom(ZLM zlm)
        {
            dynamic startingParameters = new ExpandoObject();

            startingParameters.DeviceID = int.Parse(Config.Get("MIDIDeviceID"));

            var zone = CreateLivingRoomZone(zlm);

            zlm.CreateProgramSet("MidiPlaySet", "LivingRoomMidiPlay", false, null, zlm.Zones, startingParameters);
        }
Пример #24
0
        public void Raindrops_Works(int sleepSeconds, int trailLengthAvg, int trailLengthVariability, int intervalAvg, int intervalVariability)
        {
            IntervalAvg         = intervalAvg;
            IntervalVariability = intervalVariability;

            var zlm = new ZLM(false, false, false, zlmInner =>
            {
                dynamic startingParams            = new ExpandoObject();
                startingParams.ClockedTrailShapes = new List <dynamic>();

                for (int i = 0; i < 64; i += 8)
                {
                    dynamic clockedTrailShape = new ExpandoObject();
                    var trailLength           = ProgramCommon.RandomIntBetween(trailLengthAvg - trailLengthVariability, trailLengthAvg + trailLengthVariability);
                    var interval = ProgramCommon.RandomIntBetween(intervalAvg - intervalVariability, intervalAvg + intervalVariability);

                    var darkenFactor             = (float)0.7;
                    clockedTrailShape.TrailShape = new TrailShape(new Trail(trailLength, Color.Green.Darken(0.5)),
                                                                  new Shape(i, i + 1, i + 2, i + 3, i + 4, i + 5, i + 6, i + 7));
                    clockedTrailShape.TrailShape.DarkenFactor = darkenFactor;
                    clockedTrailShape.Interval       = interval;
                    clockedTrailShape.GetNewInterval = (Func <int>)GetNewInterval;
                    clockedTrailShape.AutoTrail      = true;                //todo: implement autotrail
                    clockedTrailShape.AutoSpeed      = true;                //todo: implement autospeed
                    startingParams.ClockedTrailShapes.Add(clockedTrailShape);
                }

                //startingParams.ClockedTrailShapes.Add(new ExpandoObject() )};
                //startingParams.TrailShapes.Add(new TrailShape(new Trail(4, ProgramCommon.GetRandomColor()),
                //	new Shape(8, 9, 10, 11, 12, 13, 14, 15)));
                //startingParams.TrailShapes.Add(new TrailShape(new Trail(4, ProgramCommon.GetRandomColor()),
                //	new Shape(16, 17, 18, 19, 20, 21, 22, 23)));
                //startingParams.TrailShapes.Add(new TrailShape(new Trail(4, ProgramCommon.GetRandomColor()),
                //	new Shape(24, 25, 26, 27, 28, 29, 30, 31)));
                //startingParams.TrailShapes.Add(new TrailShape(new Trail(4, ProgramCommon.GetRandomColor()),
                //	new Shape(32, 33, 34, 35, 36, 37, 38, 39)));
                //startingParams.TrailShapes.Add(new TrailShape(new Trail(4, ProgramCommon.GetRandomColor()),
                //	new Shape(40, 41, 42, 43, 44, 45, 46, 47)));
                //startingParams.TrailShapes.Add(new TrailShape(new Trail(4, ProgramCommon.GetRandomColor()),
                //	new Shape(48, 49, 50, 51, 52, 53, 54, 55)));
                //startingParams.TrailShapes.Add(new TrailShape(new Trail(4, ProgramCommon.GetRandomColor()),
                //	new Shape(56, 57, 58, 59, 60, 61, 62, 63)));

                var neomatrix = ZoneScaffolder.Instance.AddFadeCandyZone(zlmInner.Zones, "NeoMatrix", PixelType.FadeCandyWS2812Pixel,
                                                                         64, 1);
                zlmInner.CreateSingularProgramSet("", new Raindrops(), null, neomatrix, startingParams);
            }, Config.Get("NeoMatrixOneZone"));

            //Thread.Sleep(Timeout.Infinite);
            Thread.Sleep((int)(sleepSeconds != null ? sleepSeconds * 1000 : Timeout.Infinite));

            //cleanup
            zlm.Dispose();
        }
Пример #25
0
        public static void RunRainbowOnNeoMatrix(ZLM zlm)
        {
            var isv = new ISV();

            isv.Add("Speed", 10);
            isv.Add("DelayTime", 10);
            var neomatrix = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "NeoMatrix", PixelType.FadeCandyWS2812Pixel,
                                                                     64, 1, 0.5);

            zlm.CreateProgramSet("RainbowSet", "Rainbow", false, isv, zlm.Zones);
        }
Пример #26
0
        public void DisposeZLM_Works()
        {
            var zlm    = new ZLM(false, false, false);
            var zlmrpc = new ZLMRPC(zlm);

            //act
            zlmrpc.DisposeZLM();

            //assert
            Assert.That(zlm.Zones, Is.Null);
            Assert.That(zlm.ProgramSets, Is.Null);

            zlmrpc.Dispose();
        }
Пример #27
0
        public void Dispose_Works()
        {
            //arrange
            var zlm = new ZLM(false, false, false, TestHelpers.AddFourZonesAndStepperProgramSetWithSyncToZLM);

            //act
            zlm.Dispose();

            //assert
            Assert.That(zlm.ProgramSets, Is.Null);
            Assert.That(zlm.Zones, Is.Null);
            //TODO: Assert that all lighting controllers are unintialized
            Assert.That(ZoneScaffolder.Instance.Initialized, Is.False);
        }
Пример #28
0
        public static void RunMidiTwoDimensionalFadeInBasement(ZLM zlm)
        {
            var isv      = new ISV();
            var leftWing = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "LeftWing", PixelType.FadeCandyWS2812Pixel,
                                                                    6, 1);
            var rightwing = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "RightWing", PixelType.FadeCandyWS2812Pixel,
                                                                     12, 3);
            var center = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "Center", PixelType.FadeCandyWS2811Pixel,
                                                                  21, 2);
            dynamic startingParameters = new ExpandoObject();

            startingParameters.DeviceID = int.Parse(Config.Get("MIDIDeviceID"));
            zlm.CreateProgramSet("MidiTwoDimensionalFadeSet", "MidiTwoDimensionalFade", false, isv, zlm.Zones,
                                 startingParameters);
        }
Пример #29
0
        public void MicroClockBlink_Works(int sleepSeconds, int interval)
        {
            //act
            var zlm = new ZLM(false, false, false, zlmInner =>
            {
                var neomatrix = RunnerHelpers.CreateNeoMatrixZone(zlmInner);
                var isv       = new ISV();
                isv.Add("Interval", interval);
                zlmInner.CreateSingularProgramSet("MicroClockBlinkSet", new MicroClockBlink(), isv, neomatrix);
            }, Config.Get("NeoMatrixOneZone"));

            Thread.Sleep(sleepSeconds * 1000);

            //cleanup
            zlm.Dispose();
        }
Пример #30
0
        public void MidiPlay_Works(int sleepSeconds)
        {
            //act
            var zlm = new ZLM(false, false, false, zlmInner =>
            {
                var livingRoom              = RunnerHelpers.CreateLivingRoomZone(zlmInner);
                dynamic startingParameters  = new ExpandoObject();
                startingParameters.DeviceID = int.Parse(Config.Get("MIDIDeviceID", "Please set the value of MIDIDeviceID in configuration."));
                zlmInner.CreateSingularProgramSet("MidiPlaySet", new LivingRoomMidiPlay(), null, livingRoom, startingParameters);
            }, Config.Get("LivingRoomZone"));

            Thread.Sleep(sleepSeconds * 1000);

            //cleanup
            zlm.Dispose();
        }