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(); }
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(); }
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(); }
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)); }
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(); }
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(); }
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(); }
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); }
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(); }
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; } }
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); } }
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"); }
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."); } }
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 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); }
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(); }
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."); } }
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); }
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); }
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); }
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)); }
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(); }
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(); }
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(); }
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); }
public void SetZoneInputs(string zoneName, ISV isv) { ZLM.SetZoneInputs(zoneName, isv); }