Beispiel #1
0
        private void TryUpdatePrinterStatus(byte[] bytes)
        {
            var bytesToString = BitConverter.ToString(bytes);

            Logging.Logger?.LogDebug("[{Function}]:[{PrinterName}] TryUpdatePrinterStatus: Received flag values {bytesToString}", $"{this}.{MethodBase.GetCurrentMethod().Name}", PrinterName, bytesToString);

            // Check header bits 0, 1 and 7 are 0, and 4 is 1
            if (bytes[0].IsBitNotSet(0) && bytes[0].IsBitNotSet(1) && bytes[0].IsBitSet(4) && bytes[0].IsBitNotSet(7))
            {
                Status = new PrinterStatusEventArgs()
                {
                    // byte[0] == 20 cash drawer closed
                    // byte[0] == 16 cash drawer open
                    // Note some cash drawers do not close properly.
                    IsCashDrawerOpen                      = bytes[0].IsBitNotSet(2),
                    IsPrinterOnline                       = bytes[0].IsBitNotSet(3),
                    IsCoverOpen                           = bytes[0].IsBitSet(5),
                    IsPaperCurrentlyFeeding               = bytes[0].IsBitSet(6),
                    IsWaitingForOnlineRecovery            = bytes[1].IsBitSet(0),
                    IsPaperFeedButtonPushed               = bytes[1].IsBitSet(1),
                    DidRecoverableNonAutocutterErrorOccur = bytes[1].IsBitSet(2),
                    DidAutocutterErrorOccur               = bytes[1].IsBitSet(3),
                    DidUnrecoverableErrorOccur            = bytes[1].IsBitSet(5),
                    DidRecoverableErrorOccur              = bytes[1].IsBitSet(6),
                    IsPaperLow = bytes[2].IsBitSet(0) && bytes[2].IsBitSet(1),
                    IsPaperOut = bytes[2].IsBitSet(2) && bytes[2].IsBitSet(3),
                };
            }

            if (StatusChanged != null)
            {
                Logging.Logger?.LogDebug("[{Function}]:[{PrinterName}] Invoking Status Changed Event Handler...", $"{this}.{MethodBase.GetCurrentMethod().Name}", PrinterName);
                StatusChanged?.Invoke(this, Status);
            }
        }
Beispiel #2
0
        private void TryUpdatePrinterStatus(byte[] bytes, bool timeout)
        {
            if (timeout)
            {
                // try to reconnect
                if (!IsConnected)
                {
                    Reconnect();
                }

                // Test if re-connection worked
                if (!IsConnected)
                {
                    Status = new PrinterStatusEventArgs()
                    {
                        DeviceConnectionTimeout = true,
                    };

                    StatusChanged?.Invoke(this, Status);
                }
                return;
            }
#if DEBUG
            var bytesToString = string.Empty;
            var index         = 0;
            foreach (var b in bytes)
            {
                bytesToString += $"index[{index}], value[{b}]\n";
                index++;
            }

            Debug.WriteLine($"TryUpdatePrinterStatus: \n{bytesToString}");
#endif

            // Check header bits 0, 1 and 7 are 0, and 4 is 1
            if (bytes[0].IsBitNotSet(0) && bytes[0].IsBitNotSet(1) && bytes[0].IsBitSet(4) && bytes[0].IsBitNotSet(7))
            {
                Status = new PrinterStatusEventArgs()
                {
                    // byte[0] == 20 cash drawer closed
                    // byte[0] == 16 cash drawer open
                    // Note some cash drawers do not close properly.
                    IsCashDrawerOpen                      = bytes[0].IsBitNotSet(2),
                    IsPrinterOnline                       = bytes[0].IsBitNotSet(3),
                    IsCoverOpen                           = bytes[0].IsBitSet(5),
                    IsPaperCurrentlyFeeding               = bytes[0].IsBitSet(6),
                    IsWaitingForOnlineRecovery            = bytes[1].IsBitSet(0),
                    IsPaperFeedButtonPushed               = bytes[1].IsBitSet(1),
                    DidRecoverableNonAutocutterErrorOccur = bytes[1].IsBitSet(2),
                    DidAutocutterErrorOccur               = bytes[1].IsBitSet(3),
                    DidUnrecoverableErrorOccur            = bytes[1].IsBitSet(5),
                    DidRecoverableErrorOccur              = bytes[1].IsBitSet(6),
                    IsPaperLow = bytes[2].IsBitSet(0) && bytes[2].IsBitSet(1),
                    IsPaperOut = bytes[2].IsBitSet(2) && bytes[2].IsBitSet(3),
                    DeviceConnectionTimeout = timeout,
                };
            }

            StatusChanged?.Invoke(this, Status);
        }