/// <summary>
        /// Convert point array string into array of points.
        /// </summary>
        /// <param name="pointArray">Point array string.</param>
        /// <returns>Returns ISignatureCaptureInfo.</returns>
        private static ISignatureCaptureInfo ParsePointArray(string pointArray)
        {
            ISignatureCaptureInfo signatureCaptureInfo = Peripherals.InternalApplication.BusinessLogic.Utility.CreateSignatureCaptureInfo();

            signatureCaptureInfo.Left = int.MaxValue;
            signatureCaptureInfo.Top  = int.MaxValue;

            if (!string.IsNullOrWhiteSpace(pointArray))
            {
                Point point;
                int   step = 4; // process 4 characters each step

                List <Point> points = new List <Point>(pointArray.Length / step);

                // Each point is represented by four characters: x(low 8 bits), x(hight 8 bits), y(low 8 bits), y(hight 8 bits)
                for (int i = 0; i + step <= pointArray.Length; i += step)
                {
                    point = GetPoint(pointArray[i], pointArray[i + 1], pointArray[i + 2], pointArray[i + 3]);

                    if (!IsEndPoint(point))
                    {
                        signatureCaptureInfo.Right  = signatureCaptureInfo.Right < point.X ? point.X : signatureCaptureInfo.Right;
                        signatureCaptureInfo.Bottom = signatureCaptureInfo.Bottom < point.Y ? point.Y : signatureCaptureInfo.Bottom;
                        signatureCaptureInfo.Left   = signatureCaptureInfo.Left > point.X ? point.X : signatureCaptureInfo.Left;
                        signatureCaptureInfo.Top    = signatureCaptureInfo.Top > point.Y ? point.Y : signatureCaptureInfo.Top;
                    }

                    points.Add(point);
                }

                signatureCaptureInfo.Points = new ReadOnlyCollection <Point>(points);
            }

            return(signatureCaptureInfo);
        }
        private void oposSigCapClass_DataEvent(int status)
        {
            NetTracer.Information("Peripheral [SigCap] - Data Event: {0}", status);

            if (this.CaptureCompleteEvent != null && !string.IsNullOrEmpty(this.oposSigCapClass.PointArray))
            {
                // [romanv]
                // Verifone Only: ISignatureCaptureInfo signatureCaptureInfo = ParsePointArray(this.oposSigCapClass.RawData.Substring(10));
                // Point array returns very choppy data. We need to follow up on why it has low accuracy.
                ISignatureCaptureInfo signatureCaptureInfo = ParsePointArray(this.oposSigCapClass.PointArray);

                signatureCaptureInfo.StatusCode = status;
                this.CaptureCompleteEvent(this, signatureCaptureInfo);
            }
        }