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);
                }
            }
        }
Exemple #3
0
        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);
        }