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); } }
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); }