Exemplo n.º 1
0
        public override int GetUpdateInterval(ParameterUpdatePriority priority)
        {
            int result;

            switch (priority)
            {
            case ParameterUpdatePriority.High:
                result = 200;
                break;

            case ParameterUpdatePriority.Medium:
                result = 500;
                break;

            case ParameterUpdatePriority.Low:
                result = 1000;
                break;

            case ParameterUpdatePriority.Lowest:
                result = 3000;
                break;

            default:
                result = 3000;
                break;
            }

            return(result);
        }
Exemplo n.º 2
0
        public bool RegisterParameter(string source, ushort index, byte subIndex, ParameterUpdatePriority priority)
        {
            bool result           = false;
            var  objectDictionary = _device?.ObjectDictionary;
            var  parameter        = objectDictionary?.SearchParameter(index, subIndex);

            if (parameter != null)
            {
                var registeredParameter = new RegisteredParameter {
                    Source = source, Parameter = parameter, Priority = priority
                };

                MsgLogger.WriteFlow($"{GetType().Name} - RegisterParameter", $"register parameter index = 0x{index:X4}, subindex = 0x{subIndex:X4}, add to queue ...");

                lock (RegisterParametersQueueLock)
                {
                    _registerParametersQueue.Add(registeredParameter);
                    result = true;
                }

                MsgLogger.WriteFlow($"{GetType().Name} - RegisterParameter", $"register parameter index = 0x{index:X4}, subindex = 0x{subIndex:X4}, added to queue");
            }
            else
            {
                MsgLogger.WriteError($"{GetType().Name} - RegisterParameter", $"parameter index = 0x{index:X4}, subindex = 0x{subIndex:X4}, not found");
            }

            return(result);
        }
Exemplo n.º 3
0
        public ParameterUpdater(MasterDevice device, ParameterUpdatePriority priority)
        {
            Priority = priority;

            _device = device;
            _registeredParameters = new Dictionary <string, RegisteredParameter>();
        }
Exemplo n.º 4
0
        /// <summary>
        /// RegisterParameterUpdate
        /// </summary>
        /// <param name="device"></param>
        /// <param name="uniqueId"></param>
        /// <param name="priority"></param>
        /// <param name="waitForResult"></param>
        public bool RegisterParameterUpdate(EltraDevice device, string uniqueId, ParameterUpdatePriority priority = ParameterUpdatePriority.Low, bool waitForResult = false)
        {
#pragma warning disable 4014
            if (!string.IsNullOrEmpty(uniqueId) && device != null && device.SearchParameter(uniqueId) is XddParameter parameterEntry)
            {
                bool result = false;

                if (!ParameterRegistrationCache.IsParameterRegistered(uniqueId, parameterEntry.Index, parameterEntry.SubIndex, out var instanceCount))
                {
                    Task.Run(async() => {
                        var command = await GetDeviceCommand(device, "RegisterParameterUpdate");

                        if (command != null)
                        {
                            command.SetParameterValue("Index", parameterEntry.Index);
                            command.SetParameterValue("SubIndex", parameterEntry.SubIndex);
                            command.SetParameterValue("Priority", (int)priority);

                            result = await ExecuteCommandAsync(command);

                            if (!result)
                            {
                                instanceCount = ParameterRegistrationCache.RemoveParameter(uniqueId);

                                MsgLogger.WriteError($"{GetType().Name} - RegisterParameterUpdate", $"parameter could't be registered - '{uniqueId}'");
                            }
                            else
                            {
                                MsgLogger.WriteDebug($"{GetType().Name} - RegisterParameterUpdate", $"registered parameter '{uniqueId}', instance count = {instanceCount}");
                            }
                        }
                    }).ConfigureAwait(waitForResult);
                }
                else
                {
                    if (ParameterRegistrationCache.IncreaseCounter(uniqueId, out var registeredParameter))
                    {
                        MsgLogger.WriteDebug($"{GetType().Name} - RegisterParameterUpdate", $"register parameter '{uniqueId}', instance count = {registeredParameter.InstanceCount}");
                    }
                    else
                    {
                        MsgLogger.WriteError($"{GetType().Name} - RegisterParameterUpdate", $"register parameter '{uniqueId}', instance count = {instanceCount}");
                    }
                }
            }
            else
            {
                MsgLogger.WriteError($"{GetType().Name} - RegisterParameterUpdate", $"parameter '{uniqueId}' not found");
            }

#pragma warning restore 4014

            return(true);
        }
Exemplo n.º 5
0
        public ParameterConnectionManager(MasterDevice device, ParameterUpdatePriority priority = ParameterUpdatePriority.Medium)
        {
            Priority = priority;

            _parameterUpdater = new ParameterUpdater(device, priority);

            _registerParametersQueue   = new List <RegisteredParameter>();
            _unregisterParametersQueue = new List <RegisteredParameter>();

            _device = device;

            RegisterEvents();
        }
Exemplo n.º 6
0
        /// <summary>
        /// UnregisterParameterUpdate
        /// </summary>
        /// <param name="device"></param>
        /// <param name="uniqueId"></param>
        /// <param name="priority"></param>
        /// <param name="waitForResult"></param>
        public bool UnregisterParameterUpdate(EltraDevice device, string uniqueId, ParameterUpdatePriority priority = ParameterUpdatePriority.Low, bool waitForResult = false)
        {
            if (device != null && !string.IsNullOrEmpty(uniqueId) && device.SearchParameter(uniqueId) is Parameter parameterEntry)
            {
                bool result = false;

                if (ParameterRegistrationCache.CanUnregister(uniqueId, out var registeredParameter))
                {
                    var t = Task.Run(async() =>
                    {
                        var command = await GetDeviceCommand(device, "UnregisterParameterUpdate");

                        if (command != null)
                        {
                            command.SetParameterValue("Index", parameterEntry.Index);
                            command.SetParameterValue("SubIndex", parameterEntry.SubIndex);
                            command.SetParameterValue("Priority", (int)priority);

                            result = await ExecuteCommandAsync(command);

                            if (!result)
                            {
                                ParameterRegistrationCache.AddParameter(registeredParameter);

                                MsgLogger.WriteError($"{GetType().Name} - UnregisterParameterUpdate", $"parameter could't be unregistered - '{uniqueId}'");
                            }
                            else
                            {
                                MsgLogger.WriteDebug($"{GetType().Name} - UnregisterParameterUpdate", $"unregistered parameter '{uniqueId}'");
                            }
                        }
                    }).ConfigureAwait(waitForResult);
                }
                else
                {
                    registeredParameter?.Release();

                    MsgLogger.WriteDebug($"{GetType().Name} - UnregisterParameterUpdate", $"unregister parameter '{uniqueId}', instance count = {registeredParameter?.InstanceCount}");

                    result = true;
                }
            }
            else
            {
                MsgLogger.WriteError($"{GetType().Name} - UnregisterParameterUpdate", $"unregister: cannot find registered parameter '{uniqueId}'");
            }

            return(true);
        }