GlowContainer IElementVisitor <ElementToGlowOptions, GlowContainer> .Visit(OneToNBlindSourceMatrix element, ElementToGlowOptions state) { var glow = MatrixToGlow(element, state); glow.AddressingMode = GlowMatrixAddressingMode.Linear; glow.MatrixType = GlowMatrixType.OneToN; glow.MaximumConnectsPerTarget = 1; if (state.DirFieldMask == GlowFieldFlags.All && state.IsCompleteMatrixEnquired) { if (element.Targets.Count() < element.TargetCount) { var glowTargets = glow.EnsureTargets(); foreach (var signal in element.Targets) { glowTargets.Insert(new GlowTarget(signal.Number)); } } if (element.Sources.Count() < element.SourceCount) { var glowSources = glow.EnsureSources(); foreach (var signal in element.Sources) { glowSources.Insert(new GlowSource(signal.Number)); } } } return(glow); }
public async Task InitEmberTree() { bool done = false; while (!done) { try { log.Info("Initializing EmBER+ tree"); // Initiate EmBER+ tree _emberTree = new EmberPlusProvider( _configuration.EmberTree.Port, _configuration.EmberTree.Identifier, _configuration.EmberTree.Description); _emberTree.ChangedTreeEvent += EmberTreeOnTreeDataAsync; _emberTree.MatrixConnectionEvent += ReceivedMatrixConnectionEvent; _emberTree.CreateIdentityNode( RootIdentifiers.Identity, _configuration.EmberTree.Product, _configuration.EmberTree.Company, _configuration.EmberTree.Version); // Get saved values //var template = TemplateParserHelper.ParseTemplateJsonFile(_configuration.EmberTree.TreeTemplateFile); // Initialize the actual tree var node = _emberTree.AddChildNode(RootIdentifiers.Utilities); node.AddBooleanParameter(1, "booleanParam", _emberTree, true, true); node.AddStringParameter(2, "stringParam", _emberTree, true, "default"); node.AddIntegerParameter(3, "integerParam", _emberTree, true, 125, 0, 255); //node.AddEnumParameter(4, "enumParameter", this, true, typeof(MockEnumParameter), 0, ""); string[] sourceNames = { "On" }; string blindSourceName = "Off"; string[] targetNames = { "T1", "T2" }; _gpioMatrix = _emberTree.ProviderRoot.AddMatrixOneToNBlindSource(RootIdentifiers.Matrix, sourceNames, targetNames, blindSourceName, _emberTree, true, "", "GPO"); _emberTree.SetUpFinalListeners(); EmberTreeState = true; log.Info("EmBER+ tree initiated"); done = true; } catch (Exception ex) { EmberTreeState = false; log.Error(ex, "Exception when initializing EmBER+ tree"); Thread.Sleep(4000); } } }
public static OneToNBlindSourceMatrix AddMatrixOneToNBlindSource(this Node node, int index, string identifier, string[] sourceNames, string[] targetNames, string blindSourceName, EmberPlusProvider provider, bool isWritable = true, string description = "", string matrixIdentifier = "matrix") { var oneToN = new Node(index, node, identifier) { Description = description, }; var labels = new Node(1, oneToN, "labels") { //SchemaIdentifier = "de.l-s-b.emberplus.matrix.labels" }; var targetLabels = new Node(1, labels, "targets"); var sourceLabels = new Node(2, labels, "sources"); var targets = new List <Signal>(); var sources = new List <Signal>(); // Add the blind source var blindIndex = 0; var blindParameter = new StringParameter(blindIndex, sourceLabels, $"b-{blindIndex}", provider.dispatcher, isWritable: true) { Value = blindSourceName }; var blindSignal = new Signal(blindIndex, blindParameter); sources.Add(blindSignal); // Add sources var numberOfBlinds = sources.Count(); for (int number = 0; number < sourceNames.Length; number++) { var sourceParameter = new StringParameter(number + numberOfBlinds, sourceLabels, $"s-{number}", provider.dispatcher, isWritable: true) { Value = sourceNames[number] }; sources.Add(new Signal(number + numberOfBlinds, sourceParameter)); } // Add targets for (int number = 0; number < targetNames.Length; number++) { var targetParameter = new StringParameter(number, targetLabels, $"t-{number}", provider.dispatcher, isWritable: true) { Value = targetNames[number] }; targets.Add(new Signal(number, targetParameter)); } var matrix = new OneToNBlindSourceMatrix( 2, oneToN, matrixIdentifier, provider.dispatcher, targets, sources, blindSignal, labels, isWritable) { //SchemaIdentifier = "de.l-s-b.emberplus.matrix.oneToN" }; //foreach (var target in matrix.Targets) // matrix.Connect(target, new[] { matrix.BlindSource }, null); return(matrix); }