コード例 #1
0
        /// <summary>
        /// Realiza conexão com a leitora Acura.
        /// </summary>
        /// <returns>verdadeiro se a conexão foi bem sucedida</returns>
        public static bool Conectar()
        {
            // se já existe uma porta anteriormente definida iremos tentar conectar nela
            if (Acura.Porta > 0)
            {
                if (Acura.Conectar(Acura.Porta))
                {
                    return(true);
                }
            }
            // se a porta não tiver sido definida ainda ou não conseguirmos conectar, vamos procurar
            // a Acura em outras portas
            for (ushort porta = 1; porta <= 30; porta++)
            {
                if (Acura.Conectar(porta))
                {
                    Acura.Porta = porta;
                    return(true);
                }
            }

            // Se não conseguiu conectar, retorna
            Acura.Porta = 0;
            return(false);
        }
コード例 #2
0
        /// <summary>
        /// Adiciona uma função para ser chamada quando algum evento do tipo <see cref="TipoEvento"/> acorrer
        /// </summary>
        /// <param name="tratador">função a ser chamada</param>
        /// <returns>verdadeiro caso o evento seja adicionado</returns>
        public static bool AdicionarEvento(TratadorEvento tratador)
        {
            if (Acura.Conectada())
            {
                MifareReader.OnReaderEventEventHandler handler = delegate(MifareReader.iReaderEventConstants iReaderEvent)
                {
                    TipoEvento tipo;
                    switch (iReaderEvent)
                    {
                    case MifareReader.iReaderEventConstants.READER_CARD_PRESENT:
                        tipo = TipoEvento.CartaoPosicionado;
                        break;

                    case MifareReader.iReaderEventConstants.READER_CARD_REMOVE:
                        tipo = TipoEvento.CartaoRetirado;
                        break;

                    case MifareReader.iReaderEventConstants.READER_KEY_PRESS:
                        tipo = TipoEvento.BotaoPressionado;
                        break;

                    default:
                        tipo = TipoEvento.Desconhecido;
                        break;
                    }
                    tratador(tipo);
                };
                mf.OnReaderEvent += handler;
                EventosCadastrados.Add(handler);
                return(true);
            }
            return(false);
        }
コード例 #3
0
        /// <summary>
        /// Realiza a leitura do ID do cartão.
        /// </summary>
        /// <returns>o número de série do cartão ou null em caso de falha</returns>
        public static string ID()
        {
            string id = null;

            // obtém o ID do cartão
            if (mf.mfAnticollision(ref id))
            {
                // reativa o automode pois ele é desabilitado durante a leitura
                mf.mfAutoMode(true);
                return(id);
            }
            else
            {
                // se não conseguiu pode ser porque falta lançar um request para identificar a presença do cartão
                if (Acura.CartaoPosicionado())
                {
                    if (mf.mfAnticollision(ref id))
                    {
                        mf.mfAutoMode(true);
                        return(id);
                    }
                }
            }
            mf.mfAutoMode(true);
            return(null);
        }
コード例 #4
0
        public static bool Gravar(string matricula, int opcao)
        {
            // suporta no máximo 16 caracteres
            if (matricula.Length <= 16)
            {
                // normaliza a string
                matricula = matricula.PadLeft(16, '0');

                // autenticação
                if (Acura.Autenticar())
                {
                    // converte a matricula string para array de bytes
                    byte[] _matricula = new byte[16];
                    for (int i = 0; i < 16; i++)
                    {
                        _matricula[i] = (byte)matricula[i].GetHashCode();
                    }

                    // gravação
                    bool sucesso = false;
                    sucesso = mf.mfWriteEx(0, MifareReader.bKeyTypeConstants.KEY_B, 1, _matricula);
                    mf.mfAutoMode(true);
                    return(sucesso);
                }
                mf.mfAutoMode(true);
                return(false);
            }
            else
            {
                throw new IndexOutOfRangeException("Comprimento máximo da string deve ser 16");
            }
        }
コード例 #5
0
 /// <summary>
 /// Desconecta com a leitora Acura liberando a porta.
 /// </summary>
 /// <returns>verdadeiro em caso de sucesso</returns>
 public static bool Desconectar()
 {
     Acura.Porta = 0;
     Acura.RemoverEventos();
     mf.Reset();
     mf.PortOpen = false;
     return(!mf.PortOpen);
 }
コード例 #6
0
 /// <summary>
 /// Prepara um cartão mifare em branco (de fábrica) para ser utilizado pelo sistema
 /// </summary>
 /// <returns>verdadeiro em caso de sucesso</returns>
 public static bool PrepararCartaoVirgem()
 {
     if (Acura.Conectada())
     {
         if (Acura.Autenticar_Virgem())
         {
             bool sucesso = mf.mfAccessCondition(ChaveLeitura, ChaveEscrita, 7, 1, 7, 4); // , 125
             mf.mfAutoMode(true);
             return(sucesso);
         }
     }
     mf.mfAutoMode(true);
     return(false);
 }
コード例 #7
0
        private static bool Autenticar()
        {
            // autentica
            bool autenticado = mf.mfAuthenticate(0, MifareReader.bKeyTypeConstants.KEY_B, ChaveEscrita);

            if (!autenticado)
            {
                // se não autenticou pode ser porque falta lançar um request para identificar a presença do cartão
                if (Acura.CartaoPosicionado())
                {
                    autenticado = mf.mfAuthenticate(0, MifareReader.bKeyTypeConstants.KEY_B, ChaveEscrita);
                }
            }
            return(autenticado);
        }
コード例 #8
0
 /// <summary>
 /// Realiza a leitura do conteúdo do cartão.
 /// <para>É necessário antes verificar se o cartão está posicionado</para>
 /// </summary>
 /// <returns>a string contendo a matrícula do cartão ou null em caso de falha</returns>
 public static string Ler()
 {
     // autenticação
     if (Acura.Autenticar())
     {
         // leitura
         byte[] _matricula = new byte[16];
         if (mf.mfRead(1, ref _matricula))
         {
             // converte bytes para string
             string matricula = "";
             foreach (char c in _matricula)
             {
                 matricula += c;
             }
             // reativa o automode pois ele é desabilitado durante a leitura
             mf.mfAutoMode(true);
             return(matricula);
         }
     }
     mf.mfAutoMode(true);
     return(null);
 }
コード例 #9
0
        private static bool Conectar(ushort porta)
        {
            // se a Acura já estiver conectada a essa porta, retorna
            if (mf.CommPort == porta && Acura.Conectada())
            {
                return(true);
            }
            else
            {
                // por precaução se a porta estiver aberta, fechamos
                Acura.Desconectar();
            }

            // configura a biblioteca para funcionar com a Acura
            mf.Settings = "19200,N,8,1";
            mf.CommPort = (short)porta;
            mf.mfAutoMode(true);

            // tenta a conexão
            mf.PortOpen = true;

            // verifica se conseguiu
            return(Acura.Conectada());
        }