Example #1
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();
        }
Example #2
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();
        }
Example #3
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();
        }
Example #4
0
        public void SerializeZones_SerializesZonesInCorrectFormat()
        {
            //arrange
            byte fcChannel = 1;
            var  zones     = new BetterList <Zone>();

            FadeCandyController.Instance.Initialize();
            ((FadeCandyZone)zones.Add(new FadeCandyZone(FadeCandyController.Instance, "TestZone1"))).AddFadeCandyLights(PixelType.FadeCandyWS2812Pixel, 6, fcChannel);

            dynamic startingValuesOldTz1 = new ISV();

            startingValuesOldTz1.DelayTime = 1;
            startingValuesOldTz1.Speed     = 1;

            zones[0].Run(new Rainbow(), startingValuesOldTz1);

            ((FadeCandyZone)zones.Add(new FadeCandyZone(FadeCandyController.Instance, "TestZone2"))).AddFadeCandyLights(PixelType.FadeCandyWS2812Pixel, 12, fcChannel);
            dynamic startingValuesOldTz2 = new ISV();

            startingValuesOldTz2.DelayTime = 1;
            startingValuesOldTz2.DotColor  = Color.BlueViolet;

            zones[1].Run(new ScrollDot(), startingValuesOldTz2);

            //act
            var serializedZones = Config.SerializeZones(zones);

            //assert
            Assert.AreEqual(serializedZones,
                            "{\r\n  \"$type\": \"ZoneLighting.Usables.BetterList`1[[ZoneLighting.ZoneNS.Zone, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n  \"$values\": [\r\n    {\r\n      \"$type\": \"ZoneLighting.ZoneNS.FadeCandyZone, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n      \"Name\": \"TestZone1\",\r\n      \"Brightness\": 1.0,\r\n      \"ZoneProgramInputs\": {\r\n        \"$type\": \"System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[ZoneLighting.ZoneProgramNS.ZoneProgramInputCollection, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\",\r\n        \"Rainbow\": {\r\n          \"$type\": \"ZoneLighting.ZoneProgramNS.ZoneProgramInputCollection, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n          \"$values\": [\r\n            {\r\n              \"$type\": \"ZoneLighting.ZoneProgramNS.ZoneProgramInput, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Name\": \"Speed\",\r\n              \"Type\": \"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\",\r\n              \"Value\": 1\r\n            },\r\n            {\r\n              \"$type\": \"ZoneLighting.ZoneProgramNS.ZoneProgramInput, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Name\": \"DelayTime\",\r\n              \"Type\": \"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\",\r\n              \"Value\": 1\r\n            },\r\n            {\r\n              \"$type\": \"ZoneLighting.ZoneProgramNS.ZoneProgramInput, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Name\": \"SyncLevel\",\r\n              \"Type\": \"ZoneLighting.ZoneNS.SyncLevel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Value\": {\r\n                \"$type\": \"ZoneLighting.ZoneNS.SyncLevel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n                \"Name\": \"Fade\"\r\n              }\r\n            }\r\n          ]\r\n        }\r\n      },\r\n      \"Lights\": {\r\n        \"$type\": \"System.Collections.Generic.List`1[[ZoneLighting.ILogicalRGBLight, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\",\r\n        \"$values\": [\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 0\r\n            },\r\n            \"LogicalIndex\": 0\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 1\r\n            },\r\n            \"LogicalIndex\": 1\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 2\r\n            },\r\n            \"LogicalIndex\": 2\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 3\r\n            },\r\n            \"LogicalIndex\": 3\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 4\r\n            },\r\n            \"LogicalIndex\": 4\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 5\r\n            },\r\n            \"LogicalIndex\": 5\r\n          }\r\n        ]\r\n      }\r\n    },\r\n    {\r\n      \"$type\": \"ZoneLighting.ZoneNS.FadeCandyZone, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n      \"Name\": \"TestZone2\",\r\n      \"Brightness\": 1.0,\r\n      \"ZoneProgramInputs\": {\r\n        \"$type\": \"System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[ZoneLighting.ZoneProgramNS.ZoneProgramInputCollection, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\",\r\n        \"ScrollDot\": {\r\n          \"$type\": \"ZoneLighting.ZoneProgramNS.ZoneProgramInputCollection, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n          \"$values\": [\r\n            {\r\n              \"$type\": \"ZoneLighting.ZoneProgramNS.ZoneProgramInput, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Name\": \"DelayTime\",\r\n              \"Type\": \"System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\",\r\n              \"Value\": 1\r\n            },\r\n            {\r\n              \"$type\": \"ZoneLighting.ZoneProgramNS.ZoneProgramInput, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Name\": \"DotColor\",\r\n              \"Type\": \"System.Nullable`1[[System.Drawing.Color, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\",\r\n              \"Value\": \"BlueViolet\"\r\n            }\r\n          ]\r\n        }\r\n      },\r\n      \"Lights\": {\r\n        \"$type\": \"System.Collections.Generic.List`1[[ZoneLighting.ILogicalRGBLight, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\",\r\n        \"$values\": [\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 0\r\n            },\r\n            \"LogicalIndex\": 0\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 1\r\n            },\r\n            \"LogicalIndex\": 1\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 2\r\n            },\r\n            \"LogicalIndex\": 2\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 3\r\n            },\r\n            \"LogicalIndex\": 3\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 4\r\n            },\r\n            \"LogicalIndex\": 4\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 5\r\n            },\r\n            \"LogicalIndex\": 5\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 6\r\n            },\r\n            \"LogicalIndex\": 6\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 7\r\n            },\r\n            \"LogicalIndex\": 7\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 8\r\n            },\r\n            \"LogicalIndex\": 8\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 9\r\n            },\r\n            \"LogicalIndex\": 9\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 10\r\n            },\r\n            \"LogicalIndex\": 10\r\n          },\r\n          {\r\n            \"$type\": \"ZoneLighting.LED, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n            \"FadeCandyPixel\": {\r\n              \"$type\": \"ZoneLighting.Communication.FadeCandyWS2812Pixel, ZoneLighting, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\",\r\n              \"Channel\": 1,\r\n              \"PhysicalIndex\": 11\r\n            },\r\n            \"LogicalIndex\": 11\r\n          }\r\n        ]\r\n      }\r\n    }\r\n  ]\r\n}");

            zones.ForEach(zone => zone.Dispose(true));
        }
Example #5
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();
        }
Example #6
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();
        }
Example #7
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();
        }
Example #8
0
        public void ForceStop_Works()
        {
            //arrange
            var zoneScaffolder = new ZoneScaffolder();

            zoneScaffolder.Initialize(ConfigurationManager.AppSettings["TestProgramModuleDirectory"]);

            var leftWing = new FadeCandyZone(FadeCandyController.Instance, "LeftWing");

            leftWing.AddFadeCandyLights(PixelType.FadeCandyWS2812Pixel, 6, 1);

            dynamic scrollDotDictionary = new ISV();

            scrollDotDictionary.DelayTime = 30;
            scrollDotDictionary.DotColor  = (Color?)Color.Red;

            FadeCandyController.Instance.Initialize();                  //needs to be faked somehow

            leftWing.Run(new ScrollDot(), scrollDotDictionary);

            //act
            leftWing.ZoneProgram.Stop(true);

            //assert
            var result = leftWing.ZoneProgram.StopTestingTrigger.WaitForFire(1000);

            //cleanup
            leftWing.Dispose();
            FadeCandyController.Instance.Dispose();

            Assert.True(result);
        }
Example #9
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();
        }
Example #10
0
 public void Run(ZoneProgram zoneProgram, ISV isv = null, bool isSyncRequested = false, SyncContext syncContext = null, bool dontStart = false, dynamic startingParameters = null)
 {
     if (!Running)
     {
         SetupInterruptProcessing();
         SetupZoneProgram(zoneProgram, isv, isSyncRequested, syncContext, dontStart, startingParameters);
         Running = true;
     }
 }
Example #11
0
 private void SetupZoneProgram(ZoneProgram zoneProgram, ISV isv, bool isSyncRequested, SyncContext syncContext, bool dontStart, dynamic startingParameters = null)
 {
     SetProgram(zoneProgram);
     ZoneProgram.LightingController = LightingController;
     ZoneProgram.SetSyncContext(syncContext);
     ZoneProgram.SetInterruptQueue(InterruptQueue);
     if (!dontStart)
     {
         ZoneProgram.Start(isv, isSyncRequested, startingParameters: startingParameters);
     }
 }
Example #12
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);
        }
        public void InputStartingValues_SetParameter_CreatesNewDictionaryEntry()
        {
            dynamic isv = new ISV();

            isv.Speed = 1;
            isv.Color = Color.Red;
            isv.Name  = "Test";

            Assert.True(isv["Speed"] == 1);
            Assert.True(isv["Color"] == Color.Red);
            Assert.True(isv["Name"] == "Test");
        }
        public void InputStartingValues_AddParameter_IsAccessibleUsingDotNotation()
        {
            dynamic isv = new ISV();

            isv.Add("Speed", 1);
            isv.Add("Color", Color.Red);
            isv.Add("Name", "Test");

            Assert.True(isv.Speed == 1);
            Assert.True(isv.Color == Color.Red);
            Assert.True(isv.Name == "Test");
        }
Example #15
0
        public void AddInterruptingProgram(Zone zone, string programName, ISV isv = null, SyncContext syncContext = null)
        {
            var zoneProgram = CreateZoneProgram(programName);

            if (zoneProgram is ReactiveZoneProgram)
            {
                zone.AddInterruptingProgram((ReactiveZoneProgram)zoneProgram, isv, syncContext);
            }
            else
            {
                throw new Exception("Given program is not a reactive program.");
            }
        }
Example #16
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);
        }
Example #17
0
        public ProgramSetJsonModel CreateProgramSet(string programSetName, string programName, IEnumerable <string> zoneNames, bool sync = true,
                                                    ISV isv = null, dynamic startingParameters = null)
        {
            var        model      = new ProgramSetJsonModel();
            ProgramSet programSet = null;

            ZLMAction(
                zlm =>
                programSet =
                    zlm.CreateProgramSet(programSetName, programName, zoneNames, sync, isv, startingParameters)
                );

            model = programSet.ToJsonModel <ProgramSet, ProgramSetJsonModel>();
            return(model);
        }
Example #18
0
        public static void RunShimmerOnNeoMatrixFourZones(ZLM zlm)
        {
            var isv = new ISV();

            isv.Add("MaxFadeSpeed", 1);
            isv.Add("MaxFadeDelay", 20);
            isv.Add("Density", 1.0);
            isv.Add("Brightness", 1.0);
            isv.Add("Random", true);
            var firstRow  = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "FirstRow", PixelType.FadeCandyWS2812Pixel, 16, 1);
            var secondRow = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "SecondRow", PixelType.FadeCandyWS2812Pixel, 16, 2);
            var thirdRow  = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "ThirdRow", PixelType.FadeCandyWS2812Pixel, 16, 3);
            var fourthRow = ZoneScaffolder.Instance.AddFadeCandyZone(zlm.Zones, "FourthRow", PixelType.FadeCandyWS2812Pixel, 16, 4);

            zlm.CreateProgramSet("ShimmerSet", "Shimmer", false, isv, zlm.Zones);
        }
        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();
        }
Example #20
0
 public void SetInputs(string programSetOrZoneName, ISV isv)
 {
     //figure out if supplied name is program set or zone
     if (ZLM.ProgramSets.Any(p => p.Name == programSetOrZoneName))
     {
         ZLM.SetProgramSetInputs(programSetOrZoneName, isv);
     }
     else if (ZLM.Zones.Any(z => z.Name == programSetOrZoneName))
     {
         ZLM.SetZoneInputs(programSetOrZoneName, isv);
     }
     else
     {
         throw new Exception("Supplied name is neither a program set name nor a zone name.");
     }
 }
Example #21
0
        public static void RunShimmerOnNeoMatrix(ZLM 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);
            //isv.Add("ColorScheme", ColorScheme.Primaries);

            dynamic startingParameters = new ExpandoObject();

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

            CreateNeoMatrixZone(zlm);
            zlm.CreateProgramSet("ShimmerSet", "Shimmer", false, isv, zlm.Zones, startingParameters: startingParameters);
        }
Example #22
0
        public static void RunShimmerInBasement(ZLM zlm)
        {
            var isv = new ISV();

            isv.Add("MaxFadeSpeed", 1);
            isv.Add("MaxFadeDelay", 20);
            isv.Add("Density", 1.0);
            isv.Add("Brightness", 1.0);
            isv.Add("Random", true);
            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);

            zlm.CreateProgramSet("ShimmerSet", "Shimmer", false, isv, zlm.Zones);
        }
Example #23
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var result = new ISV();

            reader.Read();

            while (reader.TokenType == JsonToken.PropertyName)
            {
                var propertyName = (string)reader.Value;
                reader.Read();

                var value = reader.TokenType == JsonToken.Integer ? Convert.ToInt32(reader.Value) : serializer.Deserialize(reader);
                result.Add(propertyName, value);
                reader.Read();
            }

            return(result);
        }
Example #24
0
        public void DeserializeZones_DeserializesZonesAndBringsThemToInitialConditions()
        {
            //arrange
            byte fcChannel = 1;
            var  zones     = new BetterList <Zone>();

            FadeCandyController.Instance.Initialize();
            ((FadeCandyZone)zones.Add(new FadeCandyZone(FadeCandyController.Instance, "TestZone1"))).AddFadeCandyLights(PixelType.FadeCandyWS2812Pixel, 6, fcChannel);

            dynamic startingValuesOldTz1 = new ISV();

            startingValuesOldTz1.DelayTime = 1;
            startingValuesOldTz1.Speed     = 1;

            zones[0].Run(new Rainbow(), startingValuesOldTz1);

            ((FadeCandyZone)zones.Add(new FadeCandyZone(FadeCandyController.Instance, "TestZone2"))).AddFadeCandyLights(PixelType.FadeCandyWS2812Pixel, 12, fcChannel);
            dynamic startingValuesOldTz2 = new ISV();

            startingValuesOldTz2.DelayTime = 1;
            startingValuesOldTz2.DotColor  = Color.BlueViolet;

            zones[1].Run(new ScrollDot(), startingValuesOldTz2);
            var serializedZones = Config.SerializeZones(zones);

            //act
            var deserializedZones = Config.DeserializeZones(serializedZones);

            //assert
            Assert.AreEqual(zones.Count, deserializedZones.Count());
            deserializedZones.ForEach(deserializedZone =>
            {
                Assert.AreEqual(deserializedZone.LightingController, zones[deserializedZone.Name].LightingController);
                Assert.AreEqual(deserializedZone.LightingController, zones[deserializedZone.Name].LightingController);
                Assert.AreEqual(deserializedZone.Brightness, zones[deserializedZone.Name].Brightness);
                Assert.AreEqual(deserializedZone.LightCount, zones[deserializedZone.Name].LightCount);
                Assert.AreEqual(deserializedZone.Running, false);
                Assert.AreEqual(deserializedZone.IsProgramLooping, false);
                Assert.AreEqual(deserializedZone.ZoneProgram, null);
            });

            zones.ForEach(zone => zone.Dispose(true));
        }
Example #25
0
        public void Shimmer_Works(int sleepSeconds, bool random)
        {
            //act
            var zlm = new ZLM(false, false, false, zlmInner =>
            {
                var isv = new ISV();
                isv.Add("MaxFadeSpeed", 1);
                isv.Add("MaxFadeDelay", 20);
                isv.Add("Density", 0.5);
                isv.Add("Brightness", 0.5);
                isv.Add("Random", random);
                var neomatrix = ZoneScaffolder.Instance.AddFadeCandyZone(zlmInner.Zones, "NeoMatrix", PixelType.FadeCandyWS2812Pixel, 64, 1);
                zlmInner.CreateSingularProgramSet("", new Shimmer(), isv, neomatrix);
            }, Config.Get("NeoMatrixOneZone"));

            Thread.Sleep(sleepSeconds * 1000);

            //cleanup
            zlm.Dispose();
        }
Example #26
0
        public static void RunShimmerInLivingRoom(ZLM zlm)
        {
            var isv = new ISV();

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

            dynamic startingParameters = new ExpandoObject();

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

            var zone = CreateLivingRoomZone(zlm);

            zlm.CreateProgramSet("ShimmerSet", "Shimmer", false, isv, zlm.Zones, startingParameters);
            //zone.AddInterruptingProgram(new BlinkColorReactive());
            //zone.InterruptingPrograms[0].Start();
        }
Example #27
0
        public void GetZoneSummary_TwoZones_Stopped_Works()
        {
            string  expected       = "Currently 2 zones are loaded.\r\n===================\r\nZone: FadeCandyZone1\r\nProgram: None\r\n-------------------\r\nZone: FadeCandyZone2\r\nProgram: None\r\n-------------------\r\n";
            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);

            var zoneSummary = zlmrpc.GetZoneSummary();

            Assert.That(zoneSummary, Is.EqualTo(expected));

            zlmrpc.Dispose();
        }
Example #28
0
        public static void CooperativeStop_Works()
        {
            DebugTools.AddEvent("Test.CooperativeStop_Works", "START CooperativeStop_Works Test");

            //arrange
            var zoneScaffolder = new ZoneScaffolder();

            zoneScaffolder.Initialize(ConfigurationManager.AppSettings["TestProgramModuleDirectory"]);

            var leftWing = new FadeCandyZone(FadeCandyController.Instance, "LeftWing");

            leftWing.AddFadeCandyLights(PixelType.FadeCandyWS2812Pixel, 6, 1);

            dynamic scrollDotDictionary = new ISV();

            scrollDotDictionary.DelayTime = 30;
            scrollDotDictionary.DotColor  = (Color?)Color.Red;

            FadeCandyController.Instance.Initialize();                  //needs to be faked somehow

            leftWing.Run(new ScrollDot(), scrollDotDictionary);

            //this is to fix the race condition that sometimes causes this test to fail - since this test
            //is not designed to test race conditions, just whether cooperative stop works in normal conditions
            Thread.Sleep(100);

            //act -- cooperative stop
            leftWing.ZoneProgram.Stop(false);

            //assert
            var result = leftWing.ZoneProgram.StopTestingTrigger.WaitForFire(1000);

            //cleanup
            leftWing.Dispose();
            FadeCandyController.Instance.Dispose();

            DebugTools.AddEvent("Test.CooperativeStop_Works", "END CooperativeStop_Works Test");

            Assert.True(result);
        }
        [TestCase(@"C:\Temp\test.config")]         //NOTE: Insert file path in test case to generate to the path.
        public void GenerateTestConfiguration(string filename)
        {
            var zoneScaffolder = new ZoneScaffolder();

            zoneScaffolder.Initialize(ConfigurationManager.AppSettings["TestProgramModuleDirectory"]);

            var leftWing = new FadeCandyZone(FadeCandyController.Instance, "TestZone");

            leftWing.AddFadeCandyLights(PixelType.FadeCandyWS2812Pixel, 6, 1);

            dynamic scrollDotDictionary = new ISV();

            scrollDotDictionary.DelayTime = 30;
            scrollDotDictionary.DotColor  = (Color?)Color.Red;

            zoneScaffolder.RunZone(leftWing, "ScrollDot", scrollDotDictionary);

            Config.SaveZones(new List <Zone>()
            {
                leftWing
            }, filename);
        }
Example #30
0
 public void SetZoneInputs(string zoneName, ISV isv)
 {
     ZLM.SetZoneInputs(zoneName, isv);
 }