Exemplo n.º 1
0
        protected override DeviceStatus ParseStatus(byte[]?rawStatus)
        {
            var deviceStatus = new DeviceStatus();

            if (rawStatus == null || rawStatus.Length != 12)
            {
                deviceStatus.AddError("E401", "Invalid status");
                return(deviceStatus);
            }

            byte[] status = new byte[] { 0, 0, 0, 0, 0, 0 };
            for (var i = 0; i < status.Length; i++)
            {
                byte hi4 = (byte)((rawStatus[i * 2] - 0x30) << 4);
                byte lo4 = (byte)(rawStatus[i * 2 + 1] - 0x30);
                status[i] = (byte)(hi4 + lo4);
            }

            for (var i = 0; i < status.Length; i++)
            {
                byte mask = 0b10000000;
                byte b    = status[i];
                for (var j = 0; j < 8; j++)
                {
                    if ((mask & b) != 0)
                    {
                        var(statusBitsCode, statusBitsText, statusBitStringType) = StatusBitsStrings[i * 8 + (7 - j)];
                        deviceStatus.AddMessage(new StatusMessage
                        {
                            Type = statusBitStringType,
                            Code = statusBitsCode,
                            Text = statusBitsText
                        });
                    }
                    mask >>= 1;
                }
            }
            return(deviceStatus);
        }