//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); }
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("卡片連接失敗, 請檢查卡片是否己正確插入讀卡機"); } }
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(); } } }
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); } }
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(); } } }