Exemple #1
0
        protected override async Task tryQuitCalibrationModeAsync(CancellationToken cancellation)
        {
            Logger.LogInfoEverywhere("Установка рабочего режима");

            var data = Requests.BuildInclinometrModeSetPacket(InclinometrMode.WORKING);
            await _device.BurnAsync(Command.CALIBRATION_MODE_SET, data, DeviceOperationScope.DEFAULT, cancellation);

            var statusReadResult = await _device.TryReadStatusAsync(DeviceOperationScope.DEFAULT, cancellation);

            var isInWorkingMode = statusReadResult == null
                ? false
                : !isInCalibrationMode(statusReadResult.StatusInfo.Status.Bits);

            if (!isInWorkingMode)
            {
                Logger.LogErrorEverywhere("Не удалось выйти из режима калибровки");
            }
        }
Exemple #2
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);
            }
        }