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); }
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); }
public ParameterUpdater(MasterDevice device, ParameterUpdatePriority priority) { Priority = priority; _device = device; _registeredParameters = new Dictionary <string, RegisteredParameter>(); }
/// <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); }
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(); }
/// <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); }