public int ScanKTP(string strfile)
        {
            string strBase64       = string.Empty;
            string directori       = Directory.GetCurrentDirectory();
            string pathsaveimage   = config.Read("PATH", Config.PARAM_PATH_IMAGE_SAVESCANNER);
            string strImageUpFile  = string.Empty;
            string strImageBotFile = string.Empty;

            pathsaveimage = directori + "\\" + pathsaveimage;
            buf           = new byte[6];
            DateTime dateTimeImage         = DateTime.Now;
            string   strImageZhengmianFile = AppDomain.CurrentDomain.BaseDirectory + "idcard_zhengmian.BMP";
            string   strImageBeimianFile   = AppDomain.CurrentDomain.BaseDirectory + "idcard_beimian.BMP";

            if (strfile == "KTP")
            {
                strImageUpFile  = pathsaveimage + "KTP_UP.BMP";
                strImageBotFile = pathsaveimage + "KTP_BOT.BMP";
            }
            else if (strfile == "NPWP")
            {
                strImageUpFile  = pathsaveimage + "NPWP_UP.BMP";
                strImageBotFile = pathsaveimage + "NPWP_BOT.BMP";
            }
            File.Delete(strImageUpFile);
            Utility.WriteLog("ID scanner condition : file from " + strImageUpFile + " has been deleted", "step-action");
            File.Delete(strImageBotFile);
            Utility.WriteLog("ID scanner condition : file from " + strImageBotFile + " has been deleted", "step-action");
            IDCardInfo idCardInfo = new IDCardInfo();

            byte[]           frontPtr = new byte[5242880];
            byte[]           backPtr  = new byte[5242880];
            CrtRect          rect     = new CrtRect();
            IDcardImgOcrInfo ocrInfo  = new IDcardImgOcrInfo();

            res = ScanIDCard(frontPtr, backPtr, strImageUpFile, strImageBotFile, ref rect, ref ocrInfo);
            if (ocrInfo.idNum.Length > 0)
            {
                idCardInfo.ocrValiddate = Encoding.UTF8.GetString(ocrInfo.dateLimit).Replace("\0", "").Replace(" ", "");
            }
            if (ocrInfo.dateLimit.Length > 0)
            {
                idCardInfo.ocrIDnumber = Encoding.UTF8.GetString(ocrInfo.idNum).Replace("\0", "").Replace(" ", "");
            }
            idCardInfo.frontPictureBase64 = ImageHelper.GetBase64FromImage(strImageUpFile);
            idCardInfo.backPictureBase64  = ImageHelper.GetBase64FromImage(strImageBotFile);
            if (strfile == "KTP")
            {
                strBase64 = convertToBase64(strImageUpFile);
                trxbaru.setImageKTP(strBase64);
                Utility.WriteLog("ID scanner condition : set image KTP base64 success", "step-action");
            }
            else if (strfile == "NPWP")
            {
                strBase64 = convertToBase64(strImageUpFile);
                trxbaru.setImageNPWP(strBase64);
                Utility.WriteLog("ID scanner condition : set image NPWP base64 success", "step-action");
            }
            return(res);
        }
        public void Scan()
        {
            string pathsaveimage = config.Read("PATH", Config.PARAM_PATH_IMAGE_SAVESCANNER);

            buf = new byte[6];
            DateTime   dateTimeImage         = DateTime.Now;
            string     strImageZhengmianFile = AppDomain.CurrentDomain.BaseDirectory + "idcard_zhengmian.BMP";
            string     strImageBeimianFile   = AppDomain.CurrentDomain.BaseDirectory + "idcard_beimian.BMP";
            string     strImageUpFile        = pathsaveimage + dateTimeImage.ToString("yyyyMMddHHmm") + "_UP.BMP";
            string     strImageBotFile       = pathsaveimage + dateTimeImage.ToString("yyyyMMddHHmm") + "_BOT.BMP";
            IDCardInfo idCardInfo            = new IDCardInfo();

            byte[]           frontPtr = new byte[5242880];
            byte[]           backPtr  = new byte[5242880];
            CrtRect          rect     = new CrtRect();
            IDcardImgOcrInfo ocrInfo  = new IDcardImgOcrInfo();

            res = ScanIDCard(frontPtr, backPtr, strImageUpFile, strImageBotFile, ref rect, ref ocrInfo);
            if (ocrInfo.idNum.Length > 0)
            {
                idCardInfo.ocrValiddate = Encoding.UTF8.GetString(ocrInfo.dateLimit).Replace("\0", "").Replace(" ", "");
            }
            if (ocrInfo.dateLimit.Length > 0)
            {
                idCardInfo.ocrIDnumber = Encoding.UTF8.GetString(ocrInfo.idNum).Replace("\0", "").Replace(" ", "");
            }
            idCardInfo.frontPictureBase64 = ImageHelper.GetBase64FromImage(strImageUpFile);
            idCardInfo.backPictureBase64  = ImageHelper.GetBase64FromImage(strImageBotFile);

            res = ReturnCard();
            res = CloseCVRReader();
        }
        public async Task FrontSwallow()
        {
            buf          = new byte[6];
            isTimeOut    = false;
            isManualStop = false;
            mIsRunning   = false;
            bool result = false;

            deviceNum = 0;
            res       = -1;
            overTime  = 300000;

            IDCardInfo idcardinfo = null;
            DateTime   startTime  = DateTime.Now;

            status = new byte[2];
            res    = ScannerDLL.openDeviceList(ref deviceNum);
            if (res == 0)
            {
                Utility.WriteLog("ID scanner condition : open device list success", "step-action");
            }
            else
            {
                Utility.WriteLog("ID scanner condition : open device list failed", "step-action");
            }
            res = ScannerDLL.openDevice(0);
            if (res == 0)
            {
                Utility.WriteLog("ID scanner condition : open device success", "step-action");
            }
            else
            {
                Utility.WriteLog("ID scanner condition : open device failed", "step-action");
            }
            res = ScannerDLL.getDeviceStatus(0);
            if (res == 1)
            {
                Utility.WriteLog("ID scanner condition : get status success", "step-action");
            }
            else
            {
                Utility.WriteLog("ID scanner condition : get status failed", "step-action");
            }
            res = ScannerDLL.backSwallow(0, 0, buf);
            if (res == 0)
            {
                Utility.WriteLog("ID scanner condition : set back entry success", "step-action");
            }
            else
            {
                Utility.WriteLog("ID scanner condition : set back entry failed", "step-action");
            }
            res = ScannerDLL.frontSwallow(0, 1, buf);
            if (res == 0)
            {
                Utility.WriteLog("ID scanner condition : set front entry success", "step-action");
            }
            else
            {
                Utility.WriteLog("ID scanner condition : set front entry failed", "step-action");
            }

            while (!isManualStop)
            {
                try
                {
                    await Task.Delay(100);

                    span = DateTime.Now - startTime;
                    if (overTime > 0 && span.TotalMilliseconds > overTime)
                    {
                        res       = -132;
                        isTimeOut = true;
                        Utility.WriteLog("ID scanner condition : device timeout", "step-action");
                        navman.NavigateTo("/");
                        break;
                    }
                    int iRet = ScannerDLL.getDeviceStatus(0);
                    if (iRet != 1)
                    {
                        Utility.WriteLog("ID scanner condition : get status failed", "step-action");
                        continue;
                    }
                    //Utility.WriteLog("ID scanner condition : get status success", "step-action");
                    iRet = ScannerDLL.cisQuery(0, status);
                    if (iRet == 0)
                    {
                        //Utility.WriteLog("ID scanner condition : ics checking success", "step-action");
                        switch (status[0])
                        {
                        case 50:
                        {
                            Utility.WriteLog("ID scanner condition : the card is at the front card holding", "step-action");
                            iRet = ScannerDLL.goRadioPos(0, status);
                            if (iRet != 0)
                            {
                                Utility.WriteLog("ID scanner condition : move to the RF card holding failed", "step-action");
                                break;
                            }
                            Thread.Sleep(500);
                            iRet = ScannerDLL.cisQuery(0, status);
                            Thread.Sleep(200);
                            if (status[0] == 51)
                            {
                                Utility.WriteLog("ID scanner condition : the card is at RF card reading", "step-action");
                                res          = 0;
                                isManualStop = true;
                                test         = true;
                                result       = isManualStop;
                                break;
                            }
                            break;
                        }

                        case 51:
                        {
                            Utility.WriteLog("ID scanner condition : the card is at RF card reading", "step-action");
                            res          = 0;
                            isManualStop = true;
                            test         = true;
                            result       = isManualStop;
                            break;
                        }

                        //case 48:
                        //    {
                        //        Utility.WriteLog("ID scanner condition : no card and no card inserted", "step-action");
                        //        break;
                        //    }
                        case 49:
                        {
                            Utility.WriteLog("ID scanner condition : the card movement needs to be detected according to the state of optical sensor", "step-action");
                            break;
                        }

                        case 52:
                        {
                            Utility.WriteLog("ID scanner condition : the card is at the rear card holding", "step-action");
                            break;
                        }

                        case 53:
                        {
                            Utility.WriteLog("ID scanner condition : the card is illegally positioned", "step-action");
                            break;
                        }
                        }
                    }
                    else
                    {
                        Utility.WriteLog("ID scanner condition : ics checking failed", "step-action");
                    }
                }
                catch
                {
                    idcardinfo = null;
                    Utility.WriteLog("ID scanner condition : read card id information error", "step-action");
                }
            }
            mIsRunning = false;
            res        = ScannerDLL.frontSwallow(0, 0, buf);
            if (res == 0)
            {
                Utility.WriteLog("ID scanner condition : set front entry success", "step-action");
            }
            else
            {
                Utility.WriteLog("ID scanner condition : set front entry failed", "step-action");
            }
            //return result;
        }