/// <summary> /// Write Untraceable operation to tag /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btmWriteToTag_Click(object sender, RoutedEventArgs e) { try { if (((bool)rdBtnShowSpecificEpc.IsChecked) && (txtbxEpcLen.Text == "")) { MessageBox.Show("Please Enter length of EPC to Show", "Universal Reader Assistant Message", MessageBoxButton.OK, MessageBoxImage.Warning); return; } else { epcLen = 6; } antenna = ((null != GetSelectedAntennaList()) ? (GetSelectedAntennaList()[0]) : antenna); objReader.ParamSet("/reader/tagop/antenna", antenna); if ((bool)rdBtnShowSpecificEpc.IsChecked) { epcLen = Convert.ToInt32(txtbxEpcLen.Text); } Gen2.Password accessPassWord = new Gen2.Password(ByteConv.ToU32(ByteFormat.FromHex(txtbxAccesspaasword.Text.Replace(" ", "")), 0)); Gen2.Untraceable tagOp = new Gen2.NXP.AES.Untraceable(epc, epcLen, tid, user, range, accessPassWord.Value); objReader.ExecuteTagOp(tagOp, searchSelect); MessageBox.Show("Write operation is successfull", "Universal Reader Assistant Message", MessageBoxButton.OK, MessageBoxImage.Information); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } }
static void Main(string[] args) { // Program setup if (1 > args.Length) { Usage(); } for (int nextarg = 1; nextarg < args.Length; nextarg++) { string arg = args[nextarg]; if (arg.Equals("--ant")) { if (null != antennaList) { Console.WriteLine("Duplicate argument: --ant specified more than once"); Usage(); } antennaList = ParseAntennaList(args, nextarg); nextarg++; } else { Console.WriteLine("Argument {0}:\"{1}\" is not recognized", nextarg, arg); Usage(); } } try { // Create Reader object, connecting to physical device. // Wrap reader in a "using" block to get automatic // reader shutdown (using IDisposable interface). using (r = Reader.Create(args[0])) { //Uncomment this line to add default transport listener. //r.Transport += r.SimpleTransportListener; r.Connect(); if (Reader.Region.UNSPEC == (Reader.Region)r.ParamGet("/reader/region/id")) { Reader.Region[] supportedRegions = (Reader.Region[])r.ParamGet("/reader/region/supportedRegions"); if (supportedRegions.Length < 1) { throw new FAULT_INVALID_REGION_Exception(); } r.ParamSet("/reader/region/id", supportedRegions[0]); } if (r.isAntDetectEnabled(antennaList)) { Console.WriteLine("Module doesn't has antenna detection support please provide antenna list"); Usage(); } // Create a simplereadplan which uses the antenna list created above SimpleReadPlan plan = new SimpleReadPlan(antennaList, TagProtocol.GEN2, null, null, 1000); // Set the created readplan r.ParamSet("/reader/read/plan", plan); //Use first antenna for operation if (antennaList != null) { r.ParamSet("/reader/tagop/antenna", antennaList[0]); } // Set the session to S0 r.ParamSet("/reader/gen2/session", Gen2.Session.S0); ushort[] Key0 = new ushort[] { 0x0123, 0x4567, 0x89AB, 0xCDEF, 0x0123, 0x4567, 0x89AB, 0xCDEF }; ushort[] Key1 = new ushort[] { 0x1122, 0x3344, 0x5566, 0x7788, 0x1122, 0x3344, 0x5566, 0x7788 }; // Change enable filter to true inorder to enable filter. bool enableFilter = false; Gen2.Select filter = null; if (enableFilter) { filter = new Gen2.Select(false, Gen2.Bank.EPC, 32, 96, new byte[] { 0xDE, 0xAD, 0xBE, 0xEF, 0xDE, 0xAD, 0xBE, 0xEF, 0xDE, 0xAD, 0xBE, 0xEF }); } int EpcLength; Gen2.Password accesspassword; bool SendRawData = false; Gen2.NXP.AES.Tam1Authentication auth; // Read tag epc before performing untraceable action ReadTags(r); // Untraceable with TAM1 using Key0 EpcLength = 4; //words auth = new Gen2.NXP.AES.Tam1Authentication(Gen2.NXP.AES.KeyId.KEY0, Key0, SendRawData); Gen2.Untraceable UntraceWithTam1WithKey0 = new Gen2.NXP.AES.Untraceable(Gen2.Untraceable.EPC.HIDE, EpcLength, Gen2.Untraceable.TID.HIDE_NONE, Gen2.Untraceable.UserMemory.SHOW, Gen2.Untraceable.Range.NORMAL, auth); r.ExecuteTagOp(UntraceWithTam1WithKey0, filter); ReadTags(r); //Uncomment this to enable untraceable with TAM2 using Key1 //EpcLength = 6; //words //auth = new Gen2.NXP.AES.Tam1Authentication(Gen2.NXP.AES.KeyId.KEY1, Key1, SendRawData); //accesspassword = new Gen2.Password(0x00000000); //r.ParamSet("/reader/gen2/accessPassword", accesspassword); //Gen2.Untraceable UntraceWithTam1WithKey1 = new Gen2.NXP.AES.Untraceable(Gen2.Untraceable.EPC.HIDE, EpcLength, // Gen2.Untraceable.TID.HIDE_NONE, Gen2.Untraceable.UserMemory.SHOW, Gen2.Untraceable.Range.NORMAL, auth); //r.ExecuteTagOp(UntraceWithTam1WithKey1, filter); //ReadTags(r); //Uncomment this to enable untraceable with Access //EpcLength = 3; //accesspassword = new Gen2.Password(0x00000001); //r.ParamSet("/reader/gen2/accessPassword", accesspassword); //Gen2.Untraceable UntraceWithAccess = new Gen2.NXP.AES.Untraceable(Gen2.Untraceable.EPC.HIDE, EpcLength, // Gen2.Untraceable.TID.HIDE_NONE, Gen2.Untraceable.UserMemory.SHOW, Gen2.Untraceable.Range.NORMAL, accesspassword.Value); //r.ExecuteTagOp(UntraceWithAccess, filter); //ReadTags(r); #region EmbeddedTagOperations { // Uncomment this to execute Untraceable with TAM1 using Key0 //EpcLength = 4; //words //auth = new Gen2.NXP.AES.Tam1Authentication(Gen2.NXP.AES.KeyId.KEY0, Key0, SendRawData); //Gen2.Untraceable embeddedUntraceWithTam1WithKey0 = new Gen2.NXP.AES.Untraceable(Gen2.Untraceable.EPC.HIDE, EpcLength, // Gen2.Untraceable.TID.HIDE_NONE, Gen2.Untraceable.UserMemory.SHOW, Gen2.Untraceable.Range.NORMAL, auth); //performEmbeddedOperation(filter, embeddedUntraceWithTam1WithKey0); //ReadTags(r); //Uncomment this to execute untraceable with TAM2 using Key1 //EpcLength = 6; //words //auth = new Gen2.NXP.AES.Tam1Authentication(Gen2.NXP.AES.KeyId.KEY1, Key1, SendRawData); //Gen2.Untraceable EmbeddedUntraceWithTam1WithKey1 = new Gen2.NXP.AES.Untraceable(Gen2.Untraceable.EPC.HIDE, EpcLength, // Gen2.Untraceable.TID.HIDE_NONE, Gen2.Untraceable.UserMemory.SHOW, Gen2.Untraceable.Range.NORMAL, auth); //performEmbeddedOperation(filter, EmbeddedUntraceWithTam1WithKey1); //ReadTags(r); //Uncomment this to execute untraceable with Access //EpcLength = 3; //accesspassword = new Gen2.Password(0x00000000); //Gen2.Untraceable EmbeddedUntraceWithAccess = new Gen2.NXP.AES.Untraceable(Gen2.Untraceable.EPC.HIDE, EpcLength, // Gen2.Untraceable.TID.HIDE_NONE, Gen2.Untraceable.UserMemory.SHOW, Gen2.Untraceable.Range.NORMAL, accesspassword.Value); //performEmbeddedOperation(filter, EmbeddedUntraceWithAccess); //ReadTags(r); } #endregion EmbeddedTagOperations } } catch (ReaderException re) { Console.WriteLine("Error: " + re.Message); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } }