示例#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);
        }
        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();
        }