Ejemplo n.º 1
0
 private void ReadCard_Thread()
 {
     try
     {
         while (true)
         {
             if (_Started)
             {
                 _Reading = true;
                 ReadCardResult result = CardRead();
                 if (!string.IsNullOrEmpty(result.CardID) && _CardReadCallBackStack.Count > 0)
                 {
                     CardReadEventArgs args = new CardReadEventArgs()
                     {
                         CardID      = result.CardID,
                         ParkingDate = result.ParkingDate
                     };
                     _CardReadCallBackStack.Peek().Invoke(this, args);
                 }
                 _Reading = false;
             }
             Thread.Sleep(500);
         }
     }
     catch (ThreadAbortException ex)
     {
     }
     catch (Exception ex)
     {
         ExceptionPolicy.HandleException(ex);
     }
     _Reading = false;
 }
Ejemplo n.º 2
0
        public ReadCardResult ReadCard()
        {
            ReadCardResult result = new ReadCardResult();
            long           cardID = 0;
            Card_Info      info   = new Card_Info();

            try
            {
                if (ReadCardInfo(ref info) == 1)
                {
                    if (WegenType == WegenType.Wengen26)
                    {
                        cardID = info.Card_ID[7] + info.Card_ID[6] * 256 + info.Card_ID[5] * 256 * 256;
                    }
                    else if (WegenType == WegenType.Wengen34)
                    {
                        cardID = info.Card_ID[7] + info.Card_ID[6] * 256 +
                                 info.Card_ID[5] * 256 * 256 + info.Card_ID[4] * (long)(256 * 256 * 256);
                    }
                    if (cardID > 0)
                    {
                        result.CardID = cardID.ToString();
                        return(result);
                    }
                }
            }
            catch
            {
            }
            return(result);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 读卡片的ID号及数据
        /// </summary>
        /// <returns></returns>
        public ReadCardResult ReadCard()
        {
            ReadCardResult result = new ReadCardResult();

            try
            {
                string      value  = string.Empty;
                ACTIVEPARAA pAInfo = new ACTIVEPARAA();
                if (MUR200Init() > 0)
                {
                    if (MUR200Open(0) == 0)
                    {
                        if (MFActivate(0, 0x52, ref pAInfo) == 0)
                        {
                            if (!InvalidReading)
                            {
                                InvalidReading = true;
                                value          = GetUID(pAInfo.UID, pAInfo.UIDLen);
                                //读取扇区2数据,读取成功将数据返回,失败不作处理
                                if (MFAuth(KEY_TYPE_A | KEY_SOURCE_EXT, (2 * 4 + 3), RalidKey) == 0)
                                {
                                    byte[] sectiondata = new byte[16 * 3];
                                    if (MFRead((2 * 4 + 0), 3, sectiondata) == 0)
                                    {
                                        result.ParkingDate = new byte[16 * 3];
                                        Array.Copy(sectiondata, result.ParkingDate, 16 * 3);
                                    }
                                }
                                _SucessBuz();
                            }
                            MFHalt();
                        }
                        else
                        {
                            InvalidReading = false;
                        }
                        MUR200Exit();
                    }
                }
                if (!string.IsNullOrEmpty(value))
                {
                    result.CardID = value.ToString();
                }
            }
            catch (Exception ex)
            {
                ExceptionPolicy.HandleException(ex);
            }
            return(result);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 从卡片中读卡扇区某些块中的数据,失败返回空
        /// </summary>
        /// <param name="cardID">卡片的卡号(为null或空时不检查卡号是否一致)</param>
        /// <param name="section">扇区(0~15)</param>
        /// <param name="block">起始块号(0~3)</param>
        /// <param name="count">读取块数(1~3)</param>
        /// <param name="key">密钥</param>
        /// <param name="successBuz">成功是否发出提示音</param>
        /// <param name="failBuz">失败是否发出提示音</param>
        /// <param name="initKey">密钥验证失败后,是否初始化扇出密钥</param>
        /// <returns></returns>
        public ReadCardResult ReadSection(string cardID, int section, int block, byte count, byte[] key, bool successBuz, bool failBuz, bool initKey)
        {
            bool originalStarted = _Started;

            if (originalStarted)
            {
                StopReadCard();   //正在读卡,先停止
                WaitForReading(); //等待读卡完成
            }

            ReadCardResult result = null;

            try
            {
                if (HadActiveReader)
                {
                    result = _ActiveReader.ReadSection(cardID, section, block, count, key, successBuz, failBuz, initKey);
                }
                else
                {
                    foreach (ICardReader reader in _Readers)
                    {
                        result = reader.ReadSection(cardID, section, block, count, key, successBuz, failBuz, initKey);
                        if (result != null && !string.IsNullOrEmpty(result.CardID))
                        {
                            _ActiveReader = reader;
                            break;
                        }
                    }
                    if (result == null)
                    {
                        result            = new ReadCardResult();
                        result.ResultCode = CardOperationResultCode.InitFail;
                    }
                }
            }
            catch (ThreadAbortException ex)
            {
            }
            catch (Exception ex)
            {
                ExceptionPolicy.HandleException(ex);
            }
            if (originalStarted)
            {
                BeginReadCard();                 //恢复读卡
            }
            return(result);
        }
Ejemplo n.º 5
0
        public ReadCardResult ReadCard()
        {
            ReadCardResult result = new ReadCardResult();

            try
            {
                long cardID = RCReadCard();

                if (cardID > 0)
                {
                    result.CardID = cardID.ToString();
                    return(result);
                }
            }
            catch
            {
            }
            return(result);
        }
Ejemplo n.º 6
0
        private ReadCardResult CardRead()
        {
            ReadCardResult result = new ReadCardResult();

            try
            {
                foreach (ICardReader reader in _Readers)
                {
                    result = reader.ReadCard();
                    if (!string.IsNullOrEmpty(result.CardID))
                    {
                        _ActiveReader = reader;
                        return(result);
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionPolicy.HandleException(ex);
            }
            return(result);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 从卡片中读卡扇区某些块中的数据,失败返回空
        /// </summary>
        /// <param name="cardID">卡片的卡号(为null或空时不检查卡号是否一致)</param>
        /// <param name="section">扇区(0~15)</param>
        /// <param name="block">起始块号(0~3)</param>
        /// <param name="count">读取块数(1~3)</param>
        /// <param name="key">密钥</param>
        /// <param name="successBuz">成功是否发出提示音</param>
        /// <param name="failBuz">失败是否发出提示音</param>
        /// <param name="initKey">密钥验证失败后,是否初始化扇出密钥</param>
        /// <returns></returns>
        public ReadCardResult ReadSection(string cardID, int section, int block, byte count, byte[] key, bool successBuz, bool failBuz, bool initKey)
        {
            ReadCardResult result = new ReadCardResult();

            try
            {
                int         ret       = 1;
                byte[]      readbytes = null;
                ACTIVEPARAA pAInfo    = new ACTIVEPARAA();
                if (MUR200Init() > 0)
                {
                    ret = MUR200Open(0);
                }
                else if (result.ResultCode == CardOperationResultCode.Success)
                {
                    result.ResultCode = CardOperationResultCode.InitFail;
                }
                if (ret == 0)
                {
                    ret = MFActivate(0, 0x52, ref pAInfo);
                }
                else if (result.ResultCode == CardOperationResultCode.Success)
                {
                    result.ResultCode = CardOperationResultCode.OpenFail;
                }
                if (ret == 0)
                {
                    result.CardID = GetUID(pAInfo.UID, pAInfo.UIDLen);

                    //cardID不为空时,需要检查卡号是否一致,不一致时,返回写卡失败
                    if (!string.IsNullOrEmpty(cardID) && cardID != result.CardID)
                    {
                        ret = 1;
                    }
                }
                else if (result.ResultCode == CardOperationResultCode.Success)
                {
                    result.ResultCode = CardOperationResultCode.NoCard;
                }
                if (ret == 0)
                {
                    ret = MFAuth(KEY_TYPE_A | KEY_SOURCE_EXT, (byte)(section * 4 + 3), key);
                }
                else if (result.ResultCode == CardOperationResultCode.Success)
                {
                    result.ResultCode = CardOperationResultCode.CardIDError;
                }
                //密钥验证失败后,如果需要初始化密钥
                if (initKey && ret != 0 && result.ResultCode == CardOperationResultCode.Success)
                {
                    MFActivate(0, 0x52, ref pAInfo);
                    result.ResultCode = _InitKey(section, DefaultKey, key);
                    if (result.ResultCode == CardOperationResultCode.Success)
                    {
                        ret = MFAuth(KEY_TYPE_A | KEY_SOURCE_EXT, (byte)(section * 4 + 3), key);//再次验证密钥
                    }
                }
                if (ret == 0)
                {
                    readbytes = new byte[16 * count];
                    ret       = MFRead((byte)(section * 4 + block), count, readbytes);
                    if (ret == 0)
                    {
                        result[section]   = readbytes;
                        result.ResultCode = CardOperationResultCode.Success;
                    }
                    else
                    {
                        result.ResultCode = CardOperationResultCode.Fail;
                    }
                }
                else if (result.ResultCode == CardOperationResultCode.Success)
                {
                    result.ResultCode = CardOperationResultCode.AuthFail;
                }
                if (ret == 0 && successBuz)
                {
                    _SucessBuz();
                }
                else if (ret != 0 && failBuz)
                {
                    _FailBuz();
                }
                MUR200Exit();
            }
            catch (Exception ex)
            {
                ExceptionPolicy.HandleException(ex);
            }
            return(result);
        }