Ejemplo n.º 1
0
            public static DeviceStatusType ParseStatusString(string status)
            {
                DeviceStatusType statusToReturn = DeviceStatusType.Undefined;

                if (string.IsNullOrWhiteSpace(status))
                {
                    // We didn't get back any status information from the device, like
                    // indicating that the UPS is gone.
                    return(statusToReturn);
                }

                var tokens = status.Split(' ');

                foreach (string token in tokens)
                {
                    DeviceStatusInfo statusInfo =
                        statusInfos.FirstOrDefault(
                            s => s.Identifiers.Contains(token, StringComparer.OrdinalIgnoreCase));
//                            s => string.Equals(s.Identifier, token, StringComparison.OrdinalIgnoreCase));

                    if (statusInfo == null)
                    {
                        throw new Exception($"The status {token} is not defined");
                    }

                    statusToReturn |= statusInfo.StatusType;
                }

                return(statusToReturn);
            }
Ejemplo n.º 2
0
        async void DeviceStatusVM_StatusAcquired(DeviceStatusInfo StatusInfo)
        {
            if (_statusUpdateDelay.TimeLeft > 0)
            {
                return;
            }
            else
            {
                await _statusUpdateDelay.WaitTimeLeftAsync(); // Restart
            }

            await Application.Current.Dispatcher.BeginInvoke(new Action(() =>
            {
                using (Flags.EventSuppressingMode)
                {
                    Flags.Clear();
                    Flags.AddRange(StatusInfo.CurrentStatuses);
                }
                using (Info.EventSuppressingMode)
                {
                    Info.Clear();
                    if (StatusInfo.SerialNumber.HasValue)
                    {
                        Info.Add(new KeyValuePair <string, string>("Серийный номер", StatusInfo.SerialNumber.Value.ToStringInvariant()));
                    }
                    var flags = Convert
                                .ToString(StatusInfo.Status.Bits, 2)
                                .PadLeft(StatusInfo.Status.NumOfBits, '0')
                                .Reverse()
                                .GroupBy(4)
                                .Select(g => g.Aggregate())
                                .Aggregate(" ")
                                .Reverse()
                                .Aggregate();
#warning hardcoded statuses
                    if (StatusInfo.Status.NumOfBits == 16)
                    {
                        Info.Add(new KeyValuePair <string, string>("Статус", flags));
                    }
                    else if (StatusInfo.Status.NumOfBits == 32)
                    {
                        Info.Add(new KeyValuePair <string, string>(
                                     $"Статус 31÷15",
                                     flags.Take(flags.Length / 2).Aggregate()));
                        Info.Add(new KeyValuePair <string, string>(
                                     "Статус 15÷00",
                                     flags.TakeFromEnd(flags.Length / 2).Aggregate()));
                    }
                    else
                    {
                        throw new NotSupportedException();
                    }
                }
            }), System.Windows.Threading.DispatcherPriority.Normal);
        }
Ejemplo n.º 3
0
        protected override async Task <bool> ensureInCalibrationModeAsync(ReadResult readRequestResult)
        {
            {
                var status = readRequestResult.Entities.Find(e => e.Descriptor.Name == STATUS_MNEMONIC);
                if (status.Found)
                {
                    var inCalibrationMode = isInCalibrationMode(status.Value.Value);
                    if (!inCalibrationMode)
                    {
                        Logger.LogInfo(null, $"Установка режима {modeDuringCalibration}");

                        var data = Requests.BuildInclinometrModeSetPacket(modeDuringCalibration);
                        await _device.BurnAsync(Command.CALIBRATION_MODE_SET, data, DeviceOperationScope.DEFAULT, CancellationToken.None);
                    }

                    return(!inCalibrationMode);
                }
                else
                {
                    var msg = $"Мнемоника статуса \"{STATUS_MNEMONIC}\" не найдена в пакете данных";
                    Logger.LogErrorEverywhere($"Отсутствует мнемоника \"{STATUS_MNEMONIC}\"");

                    throw new Exception(msg);
                }
            }

            bool isInCalibrationMode(object status)
            {
                var status16 = (ushort)Convert.ChangeType(status, TypeCode.UInt16);
                var incMode  = new DeviceStatusInfo(_device.Id, 0, new DeviceStatusInfo.StatusInfo(16, status16))
                               .InclinometrMode;

                if (incMode == null)
                {
                    Logger.LogWarningEverywhere($"Некорректный режим работы инклинометра. Статус: {status16:X4}");
                }

                return(incMode == modeDuringCalibration);
            }
        }
Ejemplo n.º 4
0
        public override async Task <ReadResult> ReadAsync(Command request, DeviceOperationScope scope, AsyncOperationInfo cancellation)
        {
            var result = await base.ReadAsync(request, scope, cancellation);

            if (result.Status == ReadStatus.OK)
            {
                var statusField = result.Entities
                                  ?.Where(e => e.Descriptor.Name == STATUS_MNEMONIC)
                                  ?.FirstOrDefault()
                                  ?.Value;
                if (statusField != null && statusField.GetType().IsOneOf(typeof(ushort), typeof(uint)))
                {
                    var size           = Marshal.SizeOf(statusField) * 8;
                    var bits           = Convert.ChangeType(statusField, TypeCode.UInt32).To <uint>();
                    var statusBitsInfo = new DeviceStatusInfo.StatusInfo(size, bits);
                    var statusInfo     = new DeviceStatusInfo(Id, null, statusBitsInfo);
                    _feature.FireStatusAcquired(statusInfo);
                }
            }

            return(result);
        }
Ejemplo n.º 5
0
        public void UpdateDeviceStatus(StatusFrameDecoded message)
        {
            DeviceStatusInfo newStatus = new DeviceStatusInfo()
            {
                DeviceId    = message.DeviceId,
                StatusOnOff = message.StatusOnOff,
                UpTime      = message.UpTime
            };

            try
            {
                DeviceInfo deviceInfo = null;
                devicesInfo.TryGetValue(message.DeviceId, out deviceInfo);
                deviceInfo.LastStatusInfo = newStatus;
            }
            catch (Exception)
            {
                this.devicesInfo.Add(message.DeviceId, new DeviceInfo()
                {
                    DeviceId = message.DeviceId, LastStatusInfo = newStatus
                });
            }
        }
Ejemplo n.º 6
0
 internal void FireStatusAcquired(DeviceStatusInfo statusInfo)
 {
     StatusAcquired?.Invoke(statusInfo);
 }