/// <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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 5
0
 public LocalDataController() : base()
 {
     m_State = InitialisationResult.Uninitialised;
 }
 public InitialisationCompleteEventArgs(InitialisationResult result, Guid requestId, DataRequestResult requestResult)
 {
     m_Result        = result;
     m_RequestId     = requestId;
     m_RequestResult = requestResult;
 }
Ejemplo n.º 7
0
 private void RegisterAsyncCallback(InitialisationResult result, Exception ex)
 {
     Log(result);
     Log(ex);
 }
Ejemplo n.º 8
0
        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;
        }