コード例 #1
0
        bool USB_ReceiveDataAck(ushort p_wCMD)
        {
            byte[] btCDB       = new byte[8];
            int[]  nLen        = new int[1];
            int    w_dwTimeOut = CommonDefine.COMM_TIMEOUT;

            byte[] w_WaitPacket = new byte[8];
            byte[] w_pTmpBuf;

            if (p_wCMD == CommonDefine.CMD_VERIFY_CODE ||
                p_wCMD == CommonDefine.CMD_IDENTIFY_CODE ||
                p_wCMD == CommonDefine.CMD_IDENTIFY_FREE_CODE ||
                p_wCMD == CommonDefine.CMD_ENROLL_CODE ||
                p_wCMD == CommonDefine.CMD_ENROLL_ONETIME_CODE)
            {
                w_dwTimeOut = (CommonDefine.GD_MAX_FP_TIME_OUT + 1) * (1000);
            }

            CommandProc.memset(w_WaitPacket, 0xAF, 0, 8);
            CommandProc.memset(btCDB, 0, 0, 8);

            do
            {
                btCDB[0] = 0xEF; btCDB[1] = 0x15;
                nLen[0]  = 6;
                if (!USBSCSIRead(btCDB, 8, CommandProc.m_pPacketBuffer, nLen, (uint)w_dwTimeOut))
                {
                    return(false);
                }
                Thread.Sleep(100);
                if (!CommandProc.DoEvents())
                {
                    return(false);
                }
            } while (CommandProc.memcmp(CommandProc.m_pPacketBuffer, w_WaitPacket, 6) == true);

            nLen[0]   = CommandProc.GET_PACKET_LEN(false) + 2;
            w_pTmpBuf = new byte[nLen[0] + 10];
            do
            {
                Array.Copy(CommandProc.m_pPacketBuffer, 6, w_pTmpBuf, 0, nLen[0]);
                if (!USB_ReceiveRawData(w_pTmpBuf, (uint)nLen[0]))
                {
                    return(false);
                }
                Array.Copy(w_pTmpBuf, 0, CommandProc.m_pPacketBuffer, 6, nLen[0]);
                Thread.Sleep(5);
                if (!CommandProc.DoEvents())
                {
                    return(false);
                }
            } while (CommandProc.memcmp(CommandProc.m_pPacketBuffer, w_WaitPacket, 4) == true);

            return(MainWindow.m_clsCmdProc.CheckReceive(CommonDefine.RCM_DATA_PREFIX_CODE, p_wCMD));
        }
コード例 #2
0
        public bool USB_SendPacket(ushort p_wCMD)
        {
            byte[] btCDB = new byte[8];

            CommandProc.memset(btCDB, 0, 0, 8);
            btCDB[0] = 0xEF; btCDB[1] = 0x11; btCDB[4] = CommonDefine.ST_COM_PACKET_LEN + 2;
            if (!USBSCSIWrite(btCDB, 8, CommandProc.m_pPacketBuffer, CommonDefine.ST_COM_PACKET_LEN + 2, SCSI_TIMEOUT))
            {
                return(false);
            }

            return(USB_ReceiveAck(p_wCMD, true));
        }
コード例 #3
0
ファイル: MainWindow.cs プロジェクト: NET201X/KangShuoTech
        public void ProcessRspPacket(bool p_bRet)
        {
            if (p_bRet == false)
            {
                //MessageBox.Show("接收错误! \n 请检查连接和目标", CommonDefine.MSG_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Warning);

                return;
            }

            //. Display response packet
            DisplayResponsePacket(CommandProc.GET_PACKET_COMMAND(false));
            return;
        }
コード例 #4
0
ファイル: MainWindow.cs プロジェクト: NET201X/KangShuoTech
        private void MainWindow_Load(object sender, EventArgs e)
        {
            m_clsUSB     = new USBComm(this);
            m_clsCmdProc = new CommandProc(this);
            m_clsSerial  = new SerialCom();

            if (!string.IsNullOrEmpty(WindowType) && WindowType == "SAVE")
            {
                btnSave.Visible = true;

                this.Text = "指纹录入";
            }
        }
コード例 #5
0
        public bool USB_DownImage(byte[] pBuf, int nBufLen)
        {
            byte[] tPCCmd = new byte[6];
            int    w_nDataCnt;

            byte[] w_pImgBuf = new byte[ONCE_UP_IMAGE_UINT];
            int    w_nI;

            if (m_hHandle.IsInvalid)
            {
                return(false);
            }

            w_nDataCnt = nBufLen;
            w_nI       = 0;

            while (w_nDataCnt > ONCE_UP_IMAGE_UINT)
            {
                tPCCmd[0] = 0xEF;
                tPCCmd[1] = 0x17;
                tPCCmd[3] = (byte)w_nI;
                tPCCmd[4] = CommandProc.LOBYTE((ushort)(ONCE_UP_IMAGE_UINT & 0xFFFF));
                tPCCmd[5] = CommandProc.HIBYTE((ushort)(ONCE_UP_IMAGE_UINT & 0xFFFF));

                Array.Copy(pBuf, w_nI * ONCE_UP_IMAGE_UINT, w_pImgBuf, 0, ONCE_UP_IMAGE_UINT);

                if (!USBSCSIWrite(tPCCmd, 6, w_pImgBuf, ONCE_UP_IMAGE_UINT, SCSI_TIMEOUT))
                {
                    return(false);
                }

                w_nDataCnt -= (int)ONCE_UP_IMAGE_UINT;
                w_nI++;
            }

            tPCCmd[0] = 0xEF;
            tPCCmd[1] = 0x17;
            tPCCmd[3] = (byte)w_nI;
            tPCCmd[4] = CommandProc.LOBYTE((ushort)(w_nDataCnt & 0xFFFF));
            tPCCmd[5] = CommandProc.HIBYTE((ushort)(w_nDataCnt & 0xFFFF));

            Array.Copy(pBuf, w_nI * ONCE_UP_IMAGE_UINT, w_pImgBuf, 0, w_nDataCnt);

            if (!USBSCSIWrite(tPCCmd, 6, w_pImgBuf, (uint)w_nDataCnt, SCSI_TIMEOUT))
            {
                return(false);
            }

            return(true);
        }
コード例 #6
0
        public bool USB_ReceiveRawData(byte[] p_pBuffer, uint p_dwDataLen)
        {
            int[]  w_nDataCnt = new int[1];
            byte[] btCDB      = new byte[8];

            w_nDataCnt[0] = (int)p_dwDataLen;
            CommandProc.memset(btCDB, 0, 0, 8);
            btCDB[0] = 0xEF; btCDB[1] = 0x14;
            if (!USBSCSIRead(btCDB, 8, p_pBuffer, w_nDataCnt, SCSI_TIMEOUT))
            {
                return(false);
            }

            return(true);
        }
コード例 #7
0
        public bool USB_SendDataPacket(ushort p_wCMD)
        {
            byte[] btCDB  = new byte[8];
            short  w_wLen = (short)(CommandProc.GET_DATAPACKET_LEN(false) + 2);

            CommandProc.memset(btCDB, 0, 0, 8);
            btCDB[0] = 0xEF; btCDB[1] = 0x13;
            btCDB[4] = (byte)(w_wLen & 0xFF); btCDB[5] = (byte)(w_wLen >> 8);
            if (!USBSCSIWrite(btCDB, 8, CommandProc.m_pPacketBuffer, (uint)(CommandProc.GET_DATAPACKET_LEN(false) + 2), SCSI_TIMEOUT))
            {
                return(false);
            }

            return(USB_ReceiveDataAck(p_wCMD));
        }
コード例 #8
0
        public bool USB_ReceiveAck(ushort p_wCMD, bool p_bCmdData)
        {
            byte[] btCDB        = new byte[8];
            byte[] w_WaitPacket = new byte[24];
            int[]  nLen         = new int[1];
            int    w_dwTimeOut  = (int)SCSI_TIMEOUT;

            if (p_wCMD == CommonDefine.CMD_VERIFY_CODE ||
                p_wCMD == CommonDefine.CMD_IDENTIFY_CODE ||
                p_wCMD == CommonDefine.CMD_IDENTIFY_FREE_CODE ||
                p_wCMD == CommonDefine.CMD_ENROLL_CODE ||
                p_wCMD == CommonDefine.CMD_ENROLL_ONETIME_CODE)
            {
                w_dwTimeOut = (CommonDefine.GD_MAX_FP_TIME_OUT + 1) * (1000);
            }

            CommandProc.memset(w_WaitPacket, 0xAF, 0, CommonDefine.ST_COM_PACKET_LEN + 2);
            CommandProc.memset(btCDB, 0, 0, 8);

            do
            {
                CommandProc.memset(CommandProc.m_pPacketBuffer, 0, 0, CommonDefine.MAX_DATA_LEN + 10);
                btCDB[0] = 0xEF; btCDB[1] = 0x12;
                nLen[0]  = CommonDefine.ST_COM_PACKET_LEN + 2;
                if (!USBSCSIRead(btCDB, 8, CommandProc.m_pPacketBuffer, nLen, (uint)w_dwTimeOut))
                {
                    return(false);
                }
                Thread.Sleep(100);
                if (!CommandProc.DoEvents())
                {
                    return(false);
                }
            } while (CommandProc.memcmp(CommandProc.m_pPacketBuffer, w_WaitPacket, CommonDefine.ST_COM_PACKET_LEN + 2) == true);

            if (p_bCmdData)
            {
                return(MainWindow.m_clsCmdProc.CheckReceive(CommonDefine.RCM_PREFIX_CODE, p_wCMD));
            }
            else
            {
                return(MainWindow.m_clsCmdProc.CheckReceive(CommonDefine.RCM_DATA_PREFIX_CODE, p_wCMD));
            }
        }
コード例 #9
0
ファイル: Serial.cs プロジェクト: NET201X/KangShuoTech
        public bool ReceiveData(byte[] p_pDataBuf, uint p_nDataLen, uint[] p_nReadLen, uint p_nTimeOut)
        {
            // Wait For ACK
            CommTimer w_tmrComm = new CommTimer();
            bool      w_bRet    = false;

            w_tmrComm.Start(p_nTimeOut);
            while ((m_comPort.BytesToRead < p_nDataLen) && (w_tmrComm.timedout == false))
            {
//                 System.Threading.Thread.Sleep(1);
                if (!CommandProc.DoEvents())
                {
                    return(false);
                }
            }

            // Receive
            if (m_comPort.BytesToRead > 0)
            {
                m_comPort.ReadTimeout = (int)p_nTimeOut;
                p_nReadLen[0]         = (uint)m_comPort.Read(p_pDataBuf, 0, (int)p_nDataLen);
                if (p_nReadLen[0] <= 0)
                {
                    w_bRet = false;
                }
                else
                {
                    w_bRet = true;
                }
            }
            else
            {
                w_bRet = false;
            }

            // Release
            w_tmrComm.tmrComm.Dispose();
//             m_comPort.DiscardInBuffer();
            m_comPort.DiscardOutBuffer();

            // Return
            return(w_bRet);
        }
コード例 #10
0
        public bool USB_ReceiveImage(byte[] p_pBuffer, uint p_dwDataLen)
        {
            byte[] btCDB        = new byte[8];
            byte[] w_WaitPacket = new byte[8];
            int[]  w_nDataCnt   = new int[1];
            int[]  w_nSentLen   = new int[1];
            byte[] w_pTmpBuf    = new byte[ONCE_UP_IMAGE_UINT];
            int    w_nI;

            CommandProc.memset(w_WaitPacket, 0xAF, 0, 8);

            if (p_dwDataLen == 208 * 288 || p_dwDataLen == 242 * 266 || p_dwDataLen == 202 * 258 || p_dwDataLen == 256 * 288)
            {
                w_nDataCnt[0] = (int)p_dwDataLen;
                w_nI          = 0;
                CommandProc.memset(btCDB, 0, 0, 8);
                while (w_nDataCnt[0] > ONCE_UP_IMAGE_UINT)
                {
                    btCDB[0]      = 0xEF; btCDB[1] = 0x16; btCDB[2] = (byte)w_nI;
                    w_nSentLen[0] = (int)ONCE_UP_IMAGE_UINT;
                    if (!USBSCSIRead(btCDB, 8, w_pTmpBuf, w_nSentLen, SCSI_TIMEOUT))
                    {
                        return(false);
                    }
                    w_nDataCnt[0] -= (int)ONCE_UP_IMAGE_UINT;
                    Array.Copy(w_pTmpBuf, 0, p_pBuffer, w_nI * ONCE_UP_IMAGE_UINT, ONCE_UP_IMAGE_UINT);
                    w_nI++;
                }
                btCDB[0] = 0xEF; btCDB[1] = 0x16; btCDB[2] = (byte)w_nI;
                if (!USBSCSIRead(btCDB, 8, w_pTmpBuf, w_nDataCnt, SCSI_TIMEOUT))
                {
                    return(false);
                }
                Array.Copy(w_pTmpBuf, 0, p_pBuffer, w_nI * ONCE_UP_IMAGE_UINT, w_nDataCnt[0]);
            }

            return(true);
        }
コード例 #11
0
ファイル: MainWindow.cs プロジェクト: NET201X/KangShuoTech
        public void DisplayResponsePacket(ushort p_nCode)
        {
            checkOK = false;
            goToAdd = false;
            saveID  = "";

            int    w_nRet;
            ushort w_nData   = 0;
            ushort w_nData2  = 0;
            ushort w_nRcvCks = 0;
            ushort w_nSize   = 0;

            //ClearResponseInfo();

            if (CommandProc.GET_PACKET_PREFIX(false) == CommonDefine.RCM_PREFIX_CODE)
            {
                w_nRcvCks = (ushort)((CommandProc.m_pPacketBuffer[CommonDefine.ST_COM_PACKET_LEN + 1] << 8) + CommandProc.m_pPacketBuffer[CommonDefine.ST_COM_PACKET_LEN]);
            }
            else if (CommandProc.GET_PACKET_PREFIX(false) == CommonDefine.RCM_DATA_PREFIX_CODE)
            {
                w_nRcvCks = (ushort)((CommandProc.m_pPacketBuffer[CommandProc.GET_DATAPACKET_LEN(false) + 1] << 8) + CommandProc.m_pPacketBuffer[CommandProc.GET_DATAPACKET_LEN(false)]);
            }

            w_nRet   = (int)CommandProc.GET_PACKET_RETURN(false);
            w_nData  = CommandProc.GET_PACKET_RCMDATA(0, false); // MAKEWORD(g_Packet[8], g_Packet[9]);
            w_nData2 = CommandProc.GET_PACKET_RCMDATA(2, false); //MAKEWORD(g_Packet[10], g_Packet[11]);
            w_nSize  = CommandProc.GET_PACKET_LEN(false);

            string strMsg = "";

            switch (p_nCode)
            {
            case CommonDefine.CMD_CLEAR_TEMPLATE_CODE:
                //指定删除
                if (w_nRet == CommonDefine.ERR_SUCCESS)
                {
                    //strMsg = string.Format("结果 : 成功\r\n指纹编号 : {0}", w_nData);
                }
                else
                {
                    // strMsg = string.Format("结果 : 错误\r\n{0}", GetErrorMsg(w_nData));
                }
                break;

            case CommonDefine.CMD_WRITE_TEMPLATE_CODE:
                //指定录入
                if (w_nRet == CommonDefine.ERR_SUCCESS)
                {
                    strMsg = string.Format("结果 : 成功\r\n指纹编号 : {0}", w_nData);
                }
                else
                {
                    strMsg = string.Format("结果 : 错误\r\n{0}", GetErrorMsg(w_nData));

                    if (w_nData == CommonDefine.ERR_DUPLICATION_ID)
                    {
                        strMsg += string.Format(" {0}.", w_nData2);
                    }
                }

                break;

            case CommonDefine.CMD_GET_EMPTY_ID_CODE:
                //获取最小ID
                if (w_nRet == CommonDefine.ERR_SUCCESS)
                {
                    strMsg = string.Format("结果 : 成功\r\n可以编号 : {0}", w_nData);
                    strID  = w_nData.ToString();
                }
                else
                {
                    strMsg = string.Format("结果 : 错误\r\n{0}", GetErrorMsg(w_nData));
                    strID  = "";
                }
                break;

            case CommonDefine.CMD_GET_ENROLL_COUNT_CODE:
                //已经注册个数
                if (w_nRet == CommonDefine.ERR_SUCCESS)
                {
                    strMsg = string.Format("结果 : 成功\r\n指纹数量 : {0}", w_nData);
                }
                else
                {
                    strMsg = string.Format("结果 : 错误\r\n{0}", GetErrorMsg(w_nData));
                }

                break;

            case CommonDefine.CMD_VERIFY_WITH_DOWN_TMPL_CODE:
            case CommonDefine.CMD_IDENTIFY_WITH_DOWN_TMPL_CODE:
            case CommonDefine.CMD_VERIFY_CODE:
            case CommonDefine.CMD_IDENTIFY_CODE:
            case CommonDefine.CMD_IDENTIFY_FREE_CODE:
            case CommonDefine.CMD_ENROLL_CODE:
            case CommonDefine.CMD_ENROLL_ONETIME_CODE:
            case CommonDefine.CMD_CHANGE_TEMPLATE_CODE:
            case CommonDefine.CMD_IDENTIFY_WITH_IMAGE_CODE:
            case CommonDefine.CMD_VERIFY_WITH_IMAGE_CODE:
                if (w_nRet == CommonDefine.ERR_SUCCESS)
                {
                    switch (w_nData)
                    {
                    case CommonDefine.GD_NEED_RELEASE_FINGER:
                        strMsg = "请离开手指";
                        break;

                    case CommonDefine.GD_NEED_FIRST_SWEEP:
                        strMsg = "请按手指";
                        break;

                    case CommonDefine.GD_NEED_SECOND_SWEEP:
                        strMsg = "请再按一次";
                        break;

                    case CommonDefine.GD_NEED_THIRD_SWEEP:
                        strMsg = "请再按一次";
                        break;

                    case CommonDefine.CMD_CLEAR_TEMPLATE_CODE:
                        strMsg = "请按手指";
                        break;

                    default:

                        strMsg = string.Format("结果 : 成功\r\n指纹编号 : {0}", w_nData);
                        strID  = "";

                        checkOK = p_nCode == CommonDefine.CMD_IDENTIFY_FREE_CODE;
                        loginID = p_nCode == CommonDefine.CMD_IDENTIFY_FREE_CODE ? w_nData.ToString() : "";
                        saveID  = p_nCode == CommonDefine.CMD_ENROLL_ONETIME_CODE ? w_nData.ToString() : "";

                        break;
                    }
                }
                else
                {
                    strMsg = string.Format("结果 : 错误\r\n{0}", GetErrorMsg(w_nData));
                    if (CommandProc.LOBYTE(w_nData) == CommonDefine.ERR_BAD_QUALITY)
                    {
                        strMsg += "\r\nAgain... !";
                    }
                    else
                    {
                        goToAdd = p_nCode == CommonDefine.CMD_IDENTIFY_FREE_CODE;
                        if (w_nData == CommonDefine.ERR_DUPLICATION_ID)
                        {
                            strMsg += string.Format(" {0}.", w_nData2);
                        }
                    }
                }

                break;

            case CommonDefine.CMD_FINGER_DETECT_CODE:

                if (w_nRet == CommonDefine.ERR_SUCCESS)
                {
                    if (w_nData == CommonDefine.GD_DETECT_FINGER)
                    {
                        strMsg = string.Format("检测到指纹");
                    }
                    else if (w_nData == CommonDefine.GD_NO_DETECT_FINGER)
                    {
                        strMsg = string.Format("没有检测到指纹");
                    }
                    else
                    {
                        strMsg = string.Format("通讯错误.");
                    }
                }
                else
                {
                    strMsg = string.Format("结果 : 错误\r\n{0}", GetErrorMsg(w_nData));
                }

                break;

            case CommonDefine.CMD_FP_CANCEL_CODE:

                /* if (w_nRet == CommonDefine.ERR_SUCCESS)
                 *   strMsg = string.Format("结果 : 取消命令成功");
                 * else
                 *   strMsg = string.Format("结果 : 错误\r\n{0}", GetErrorMsg(w_nData));
                 */
                break;

            default:
                break;
            }

            edtRC_Result.Text = strMsg;

            if ((p_nCode == CommonDefine.CMD_IDENTIFY_FREE_CODE))
            {
                if (w_nRet == CommonDefine.ERR_SUCCESS ||
                    CommandProc.LOBYTE(w_nData) != CommonDefine.ERR_NOT_AUTHORIZED &&
                    CommandProc.LOBYTE(w_nData) != CommonDefine.ERR_FP_CANCEL &&
                    CommandProc.LOBYTE(w_nData) != CommonDefine.ERR_INVALID_OPERATION_MODE &&
                    CommandProc.LOBYTE(w_nData) != CommonDefine.ERR_ALL_TMPL_EMPTY)
                {
                    Array.Clear(CommandProc.m_pPacketBuffer, 0, CommonDefine.MAX_DATA_LEN + 10);

                    if (checkOK)
                    {
                        Array.Clear(CommandProc.m_pPacketBuffer, 0, CommonDefine.MAX_DATA_LEN + 10);
                        m_clsCmdProc.m_bCmdDone = true;

                        Login(loginID);

                        return;
                    }

                    if (goToAdd)
                    {
                        if (MessageBox.Show("当前指纹未识别到身份证信息,是否手动登录?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
                        {
                            Array.Clear(CommandProc.m_pPacketBuffer, 0, CommonDefine.MAX_DATA_LEN + 10);
                            m_clsCmdProc.m_bCmdDone = true;

                            AddLogin();
                        }
                    }

                    m_clsCmdProc.StartSendThread();
                    return;
                }

                if (goToAdd)
                {
                    if (MessageBox.Show("当前指纹未识别到身份证信息,是否手动登录?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
                    {
                        Array.Clear(CommandProc.m_pPacketBuffer, 0, CommonDefine.MAX_DATA_LEN + 10);
                        m_clsCmdProc.m_bCmdDone = true;

                        AddLogin();
                    }
                }
            }

            if ((p_nCode == CommonDefine.CMD_ENROLL_CODE) ||
                (p_nCode == CommonDefine.CMD_CHANGE_TEMPLATE_CODE))
            {
                switch (w_nData)
                {
                case CommonDefine.GD_NEED_RELEASE_FINGER:
                case CommonDefine.GD_NEED_FIRST_SWEEP:
                case CommonDefine.GD_NEED_SECOND_SWEEP:
                case CommonDefine.GD_NEED_THIRD_SWEEP:
                case CommonDefine.ERR_BAD_QUALITY:
                    Array.Clear(CommandProc.m_pPacketBuffer, 0, CommonDefine.MAX_DATA_LEN + 10);
                    m_clsCmdProc.StartSendThread();
                    return;

                default:
                    break;
                }
            }
            if ((p_nCode == CommonDefine.CMD_ENROLL_ONETIME_CODE) ||
                (p_nCode == CommonDefine.CMD_VERIFY_CODE) ||
                (p_nCode == CommonDefine.CMD_IDENTIFY_CODE) ||
                (p_nCode == CommonDefine.CMD_IDENTIFY_FREE_CODE))
            {
                switch (w_nData)
                {
                case CommonDefine.GD_NEED_RELEASE_FINGER:
                    Array.Clear(CommandProc.m_pPacketBuffer, 0, CommonDefine.MAX_DATA_LEN + 10);
                    m_clsCmdProc.StartSendThread();
                    return;

                default:
                    break;
                }
            }

            Array.Clear(CommandProc.m_pPacketBuffer, 0, CommonDefine.MAX_DATA_LEN + 10);
            m_clsCmdProc.m_bCmdDone = true;

            if (!string.IsNullOrEmpty(saveID))
            {
                SaveID(saveID);
            }

            if (p_nCode == CommonDefine.CMD_CLEAR_TEMPLATE_CODE)
            {
                if (MessageBox.Show("当前指纹未识别到身份证信息,是否手动登录?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.OK)
                {
                    Array.Clear(CommandProc.m_pPacketBuffer, 0, CommonDefine.MAX_DATA_LEN + 10);
                    m_clsCmdProc.m_bCmdDone = true;

                    AddLogin();

                    return;
                }

                Run_IdentifyFree();
            }
        }
コード例 #12
0
ファイル: MainWindow.cs プロジェクト: NET201X/KangShuoTech
        public string GetErrorMsg(ushort p_nErrorCode)
        {
            string w_ErrMsg;

            switch (CommandProc.LOBYTE(p_nErrorCode))
            {
            case CommonDefine.ERR_VERIFY:
                w_ErrMsg = "1:1失败";
                break;

            case CommonDefine.ERR_IDENTIFY:
                //w_ErrMsg = "1:N失败";
                w_ErrMsg = "验证失败";
                break;

            case CommonDefine.ERR_EMPTY_ID_NOEXIST:
                w_ErrMsg = "没有可用编号";
                break;

            case CommonDefine.ERR_BROKEN_ID_NOEXIST:
                w_ErrMsg = "没有损坏的模板";
                break;

            case CommonDefine.ERR_TMPL_NOT_EMPTY:
                w_ErrMsg = "指纹已经存在";
                break;

            case CommonDefine.ERR_TMPL_EMPTY:
                w_ErrMsg = "没有此指纹";
                break;

            case CommonDefine.ERR_INVALID_TMPL_NO:
                w_ErrMsg = "错误的指纹编号";
                break;

            case CommonDefine.ERR_ALL_TMPL_EMPTY:
                w_ErrMsg = "指纹为空";
                break;

            case CommonDefine.ERR_INVALID_TMPL_DATA:
                w_ErrMsg = "错误的指纹数据";
                break;

            case CommonDefine.ERR_DUPLICATION_ID:
                w_ErrMsg = "重复指纹 : ";
                break;

            case CommonDefine.ERR_BAD_QUALITY:
                w_ErrMsg = "图像质量差";
                break;

            case CommonDefine.ERR_SMALL_LINES:
                w_ErrMsg = "图像太小";
                break;

            case CommonDefine.ERR_TOO_FAST:
                w_ErrMsg = "手指离开太快";
                break;

            case CommonDefine.ERR_TIME_OUT:
                w_ErrMsg = "超时";
                break;

            case CommonDefine.ERR_GENERALIZE:
                w_ErrMsg = "创建失败";
                break;

            case CommonDefine.ERR_NOT_AUTHORIZED:
                w_ErrMsg = "通讯被加密";
                break;

            case CommonDefine.ERR_EXCEPTION:
                w_ErrMsg = "出现异常 ";
                break;

            case CommonDefine.ERR_MEMORY:
                w_ErrMsg = "内存出错 ";
                break;

            case CommonDefine.ERR_INVALID_PARAM:
                w_ErrMsg = "无效参数";
                break;

            case CommonDefine.ERR_NO_RELEASE:
                w_ErrMsg = "请离开手指";
                break;

            case CommonDefine.ERR_INTERNAL:
                w_ErrMsg = "内部错误";
                break;

            case CommonDefine.ERR_FP_CANCEL:
                w_ErrMsg = "已取消";
                break;

            case CommonDefine.ERR_INVALID_OPERATION_MODE:
                w_ErrMsg = "无效的工作模式";
                break;

            case CommonDefine.ERR_NOT_SET_PWD:
                w_ErrMsg = "没有设置通讯密码";
                break;

            case CommonDefine.ERR_FP_NOT_DETECTED:
                w_ErrMsg = "没有检测到指纹";
                break;

            case CommonDefine.ERR_ADJUST_SENSOR:
                w_ErrMsg = "校准传感器失败";
                break;

            default:
                w_ErrMsg = "错误";
                break;
            }

            // Return
            return(w_ErrMsg);
        }