/// <summary> /// Using the command Registration, the ECR can set up different configurations on the PT /// and also control the current status of the PT. /// </summary> /// <returns>Result of the registering process. Returns null if terminal is not responding after timeout.</returns> public InitialisationResult Register(List <TLVItem> tlvParameters = null) { try { InitialisationResult result = _ZvtEnvironment.CreateInitialisationCommand(null, tlvParameters).Execute(); return(result); } catch (ConnectionTimeOutException e) { Debug.WriteLine(e.Message); return(null); } }
/// <summary> /// /// Refer to <see cref="Register"/> /// <list type="bullet"> /// <item><term>Callback will return InitialisationResult as null if another asyc command is still running.</term></item> /// </list> /// </summary> /// <param name="callback">Callback to be executed when the operation is finished.</param> public void RegisterAsync(Action <InitialisationResult, Exception> callback) { if (IsAsyncCommandRunning) { callback?.Invoke(null, null); return; } InitialisationResult result = null; RunCommandWorker(() => result = Register(), ex => callback?.Invoke(result, ex)); }
protected override void StartInitialiseTask(DataControllerConfig config, Guid guid, CancellationToken token) { // Define and run the task, passing in the token. Task initialiseTask = Task.Run(() => { Log.Debug("Initialise task running."); // Connect to SQlite. SQLiteConnection dbConnection = new SQLiteConnection( String.Format(CONNECTION_STRING, SQLITE_DATABASE)); // Set the LINQ data context to the database connection. m_Database = new SimPrintsDb(dbConnection); // Obtain image files on local machine, to be matched with database entries. m_ImageFiles = GetImageFiles(IMAGES_FILE_PATH); if (m_ImageFiles != null && m_ImageFiles.Count() > 0) { m_State = InitialisationResult.Initialised; } else { Log.Error("Failed to get image files."); m_State = InitialisationResult.Error; } OnInitialisationComplete( new InitialisationCompleteEventArgs(m_State, guid, DataRequestResult.Success)); }, token); // Raise the GetCaptureComplete event in the case where the Task faults. initialiseTask.ContinueWith((Task t) => { if (t.IsFaulted) { Log.Error("Failed initialise controller: " + t.Exception.Message, t.Exception); OnInitialisationComplete(new InitialisationCompleteEventArgs( InitialisationResult.Uninitialised, guid, DataRequestResult.TaskFailed)); } }); }
public InitialisationResult Execute() { InitialisationResult result = new InitialisationResult(); result.Success = true; try { if (_environment.RaiseAskOpenConnection()) { _transport.OpenConnection(); } MagicResponseCommandTransmitter commandTransmitter = new MagicResponseCommandTransmitter(_transport); commandTransmitter.ResponseReceived += new Action <IZvtApdu>(commandTransmitter_ResponseReceived); commandTransmitter.StatusReceived += new Action <IntermediateStatusApduResponse>(commandTransmitter_StatusReceived); ApduCollection responses = commandTransmitter.TransmitAPDU(_registration); CompletionApduResponse completionApdu = responses.FindFirstApduOfType <CompletionApduResponse>(); if (completionApdu == null) { throw new NotSupportedException("Did not receive Completion from RegistrationApdu"); } //if statusbyte is not supplied (== null) no extra action need to be performed CompletionStatusByteParameter statusByte = completionApdu.FindParameter <CompletionStatusByteParameter>(CompletionApduResponse.ParameterTypeEnum.StatusByte); if (statusByte != null && statusByte.InitialisationNecessary) { _log.Info("PT needs initialisation"); InitialisationApdu init = new InitialisationApdu(); ApduCollection apdus = commandTransmitter.TransmitAPDU(init); AbortApduResponse abort = apdus.FindFirstApduOfType <AbortApduResponse>(); if (abort != null) { _log.Info("Initialisation failed with '{0}({1})'", abort.ResultCode, (byte)abort.ResultCode); result.Success = false; result.ProtocolSpecificErrorCode = (byte)abort.ResultCode; result.ProtocolSpecificErrorDescription = abort.ResultCode.ToString(); } } if (statusByte != null && statusByte.DiagnosisNecessary && result.Success) { _log.Info("PT needs diagnosis"); DiagnosisApdu diag = new DiagnosisApdu(); ApduCollection apdus = commandTransmitter.TransmitAPDU(diag); AbortApduResponse abort = apdus.FindFirstApduOfType <AbortApduResponse>(); if (abort != null) { _log.Fatal("Diagnosis failed with '{0}({1})'", abort.ResultCode, (byte)abort.ResultCode); result.Success = false; result.ProtocolSpecificErrorCode = (byte)abort.ResultCode; result.ProtocolSpecificErrorDescription = abort.ResultCode.ToString(); } } result.PrintDocuments = commandTransmitter.PrintDocuments; } finally { if (_environment.RaiseAskCloseConnection()) { _transport.CloseConnection(); } } return(result); }
public LocalDataController() : base() { m_State = InitialisationResult.Uninitialised; }
public InitialisationCompleteEventArgs(InitialisationResult result, Guid requestId, DataRequestResult requestResult) { m_Result = result; m_RequestId = requestId; m_RequestResult = requestResult; }
private void RegisterAsyncCallback(InitialisationResult result, Exception ex) { Log(result); Log(ex); }
public InitialisationResult Execute() { InitialisationResult result = new InitialisationResult(); result.Success = true; try { if(_environment.RaiseAskOpenConnection()) _transport.OpenConnection(); MagicResponseCommandTransmitter commandTransmitter = new MagicResponseCommandTransmitter(_transport); commandTransmitter.ResponseReceived += new Action<IZvtApdu>(commandTransmitter_ResponseReceived); commandTransmitter.StatusReceived += new Action<IntermediateStatusApduResponse>(commandTransmitter_StatusReceived); ApduCollection responses = commandTransmitter.TransmitAPDU(_registration); CompletionApduResponse completionApdu = responses.FindFirstApduOfType<CompletionApduResponse>(); if (completionApdu == null) throw new NotSupportedException("Did not receive Completion from RegistrationApdu"); //if statusbyte is not supplied (== null) no extra action need to be performed CompletionStatusByteParameter statusByte = completionApdu.FindParameter<CompletionStatusByteParameter>(CompletionApduResponse.ParameterTypeEnum.StatusByte); if (statusByte != null && statusByte.InitialisationNecessary) { _log.Info("PT needs initialisation"); InitialisationApdu init = new InitialisationApdu(); ApduCollection apdus = commandTransmitter.TransmitAPDU(init); AbortApduResponse abort = apdus.FindFirstApduOfType<AbortApduResponse>(); if (abort != null) { _log.Info("Initialisation failed with '{0}({1})'", abort.ResultCode, (byte)abort.ResultCode); result.Success = false; result.ProtocolSpecificErrorCode = (byte)abort.ResultCode; result.ProtocolSpecificErrorDescription = abort.ResultCode.ToString(); } } if (statusByte != null && statusByte.DiagnosisNecessary && result.Success) { _log.Info("PT needs diagnosis"); DiagnosisApdu diag = new DiagnosisApdu(); ApduCollection apdus = commandTransmitter.TransmitAPDU(diag); AbortApduResponse abort = apdus.FindFirstApduOfType<AbortApduResponse>(); if (abort != null) { _log.Fatal("Diagnosis failed with '{0}({1})'", abort.ResultCode, (byte)abort.ResultCode); result.Success = false; result.ProtocolSpecificErrorCode = (byte)abort.ResultCode; result.ProtocolSpecificErrorDescription = abort.ResultCode.ToString(); } } result.PrintDocuments = commandTransmitter.PrintDocuments; } finally { if(_environment.RaiseAskCloseConnection()) _transport.CloseConnection(); } return result; }