示例#1
0
        //this method will open a reader instance and read the nfc device with
        //cmd as its input and the command to run. it will return a string of the result.
        //@params cmd - the command to run
        private string readNFC(CmdApdu cmd)
        {
            PCSCReader reader  = new PCSCReader();
            string     payload = "";

            try
            {
                reader.Connect();
                reader.ActivateCard(GS.SCard.Const.SCARD_SHARE_MODE.Exclusive, GS.SCard.Const.SCARD_PROTOCOL.Tx);

                RespApdu respApdu = reader.Exchange(cmd, 0x9000);

                if (respApdu.SW1SW2 == 0x9000)
                {
                    payload = Encoding.UTF8.GetString(respApdu.Data);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                reader.Disconnect();
            }
            return(payload);
        }
示例#2
0
        private void btnConnect_Click(object sender, EventArgs e)
        {
            string readerName = (string)comboReaders.SelectedItem;

            try
            {
                mPcscReader.Connect(readerName);
                mPcscReader.ActivateCard();

                txtATR.Text         = mPcscReader.SCard.AtrString;
                txtProtocol.Text    = mPcscReader.SCard.SCardProtocol.ToString();
                lblProtocol.Visible = true;

                IsReaderConnected     = true;
                btnConnect.Enabled    = false;
                btnDisconnect.Enabled = true;
                btnSend.Enabled       = true;

                txtMessage.Text = ml.AddLine("IsCardPresent = " + mPcscReader.SCard.IsCardPresent);
            }
            catch (Exception ex)
            {
                mPcscReader.Disconnect();
                ml.AddLine(ex.ToString());
                txtMessage.Text = ml.AddLine("卡片連接失敗, 請檢查卡片是否己正確插入讀卡機");
            }
        }
示例#3
0
        public static async Task Read()
        {
            PCSCReader reader = new PCSCReader();

            while (true)
            {
                try
                {
                    reader.Connect();
                    reader.ActivateCard();

                    RespApdu respApdu = reader.Exchange("FF CA 00 00 00"); // Get Card UID ...

                    if (respApdu.SW1SW2 == 0x9000)
                    {
                        InvokeScanned("0x" + HexFormatting.ToHexString(respApdu.Data, false));
                        await Task.Delay(1000);
                    }
                }

                catch (WinSCardException ex)
                {
                    InvokeError(ex.WinSCardFunctionName + " Error 0x" + ex.Status.ToString("X08") + ": " + ex.Message);
                    await Task.Delay(1000);
                }

                catch (Exception ex)
                {
                    InvokeError(ex.Message);
                    await Task.Delay(1000);
                }

                finally
                {
                    reader.Disconnect();
                }
            }
        }
示例#4
0
        static void Main(string[] args)
        {
            try
            {
                System.IO.StreamReader file = new System.IO.StreamReader("settings.txt");
                reader_name = file.ReadLine();
                //Console.WriteLine("SETTINGSFILE CONTENT: " + reader_name);
            }
            catch (System.IO.FileNotFoundException)
            {
                System.Environment.Exit(1);
            }


            ConsoleTraceListener consoleTraceListener = new ConsoleTraceListener();

            Trace.Listeners.Add(consoleTraceListener);
            reader = new PCSCReader();
            NdefLibrary.Ndef.NdefMessage message = new NdefLibrary.Ndef.NdefMessage();

            //string input_text = "";
            //while (input_text != "joo")
            //{
            try
            {
                //turn_on_antenna();
                //reader.SCard.Connect("",SCARD_SHARE_MODE.Direct, SCARD_PROTOCOL.Tx);
                //reader.Connect();
                //reader.ActivateCard();
                //set_buzzer_on();
                //set_target_mode();


                if (args[0] == "read")
                {
                    //Console.WriteLine("Initing stuff");
                    //reader.SCard.Connect(reader.SCard.ListReaders()[1], SCARD_SHARE_MODE.Direct, SCARD_PROTOCOL.Default);
                    //Console.WriteLine(reader.SCard.GetSCardCtlCode(3500));
                    reader.Connect(reader_name);
                    Console.WriteLine(reader.SCard.ListReaders()[0]);
                    reader.ActivateCard(SCARD_SHARE_MODE.Shared, SCARD_PROTOCOL.T1);
                    turn_on_antenna();

                    message = NdefLibrary.Ndef.NdefMessage.FromByteArray(find_ndef());
                    Console.WriteLine("rd: " + parse_record(message));

                    //Console.WriteLine("Please press any key...");
                    //string input_text = Console.ReadLine();
                    //turn_off_antenna();
                }
                else if (args[0] == "write" && args.Length == 2)
                {
                    Console.WriteLine("writing to tag: ", args[1]);
                    reader.Connect();
                    reader.ActivateCard(SCARD_SHARE_MODE.Shared, SCARD_PROTOCOL.T1);
                    turn_on_antenna();
                    write_to_tag(args[1]);
                    Console.WriteLine("wrote to tag:" + args[1]);
                }
                else if (args[0] == "list")
                {
                    Console.WriteLine(reader.SCard.ListReaders());
                    System.Environment.Exit(1);
                }
                else
                {
                    Console.WriteLine("Bad arguments");
                    reader.SCard.Disconnect();
                    System.Environment.Exit(1);
                }

                //WinSCard yhteys = new WinSCard();
                //yhteys.Connect(yhteys.ListReaders()[0]);
                //yhteys.Control(0, hex_string_to_byte_array(APDU_commands[]), );


                //write_to_tag(input_text = "Hassulla Tassulla kiva paijaa massua ai että kun on hassua:3");
                //reader.ActivateCard();
                //try_this();
                //set_initiator_mode();


                //For some reason Direct commands only work after card has been activated (the command above)
                //Also the reader resets to normal state after it's been unplugged.
                //TODO: check if mode changes can be made permanent

                //RespApdu respApdu = reader.Exchange(APDU_commands["get_card_uid"]); // Get Card UID ...

                /*if (respApdu.SW1SW2 == 0x9000)
                 * {
                 *  Console.WriteLine("UID  = 0x" + HexFormatting.ToHexString(respApdu.Data, true));
                 * }*/

                //message = NdefLibrary.Ndef.NdefMessage.FromByteArray(find_ndef());
                //parse_record(message);
                //set_initiator_mode();
                //string input_text = Console.ReadLine();
                //System.Environment.Exit(1);
            }
            catch (WinSCardException ex)
            {
                Console.WriteLine(ex.WinSCardFunctionName + " Error 0x" +
                                  ex.Status.ToString("X08") + ": " + ex.Message);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                //direct_command(APDU_commands["enable_picc_polling"]);
                //turn_off_antenna();
                //Console.WriteLine("Please press any key...");
                //string input_text = Console.ReadLine();
                turn_off_antenna();
                reader.SCard.Disconnect();
                System.Environment.Exit(1);
            }
        }
示例#5
0
        static void Main(string[] args)
        {
            ConsoleTraceListener consoleTraceListener = new ConsoleTraceListener();

            Trace.Listeners.Add(consoleTraceListener);

            reader = new PCSCReader();
            //NdefLibrary.Ndef.NdefMessage message = new NdefLibrary.Ndef.NdefMessage();



            /*WinSCard testi = new WinSCard();
             * testi.Connect(null);*/



            string input_text = "";

            while (input_text != "joo")
            {
                try
                {
                    //reader.SCard.Connect("",SCARD_SHARE_MODE.Direct, SCARD_PROTOCOL.Tx);
                    reader.Connect();

                    //set_buzzer_on();
                    //set_target_mode();

                    reader.ActivateCard();

                    //WinSCard reader = new WinSCard();
                    //testi.Connect(null);

                    //For some reason Direct commands only work after card has been activated (the command above)
                    //Also the reader resets to normal state after it's been unplugged.
                    //TODO: check if mode changes can be made permanent
                    if (!modes_changed)
                    {
                        //Console.WriteLine("YOLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO");
                        //change_modes_for_reader();
                        modes_changed = true;
                    }

                    RespApdu respApdu = reader.Exchange(APDU_commands["get_card_uid"]); // Get Card UID ...

                    if (respApdu.SW1SW2 == 0x9000)
                    {
                        Console.WriteLine("UID  = 0x" + HexFormatting.ToHexString(respApdu.Data, true));
                    }

                    use_stuff_properly();
                    //RespApdu tespApdu = reader.Exchange(String.Format(APDU_commands["direct_command_prefix"],"18", "D4 86 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00")); // Get Card UID ...
                    //RespApdu bespApdu = reader.Exchange(String.Format(APDU_commands["direct_command_prefix"], "18", "D4 40 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00")); // Get Card UID ...

                    //message = NdefLibrary.Ndef.NdefMessage.FromByteArray();
                    //message = NdefLibrary.Ndef.NdefMessage.FromByteArray(find_ndef());
                    //parse_record(message);

                    //write_to_tag("meloonis");
                }
                catch (WinSCardException ex)
                {
                    Console.WriteLine(ex.WinSCardFunctionName + " Error 0x" +
                                      ex.Status.ToString("X08") + ": " + ex.Message);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                finally
                {
                    reader.Disconnect();
                    Console.WriteLine("Please press any key...");
                    input_text = Console.ReadLine();
                }
            }
        }