public static void embeddedRead(TagProtocol protocol, TagFilter filter, TagOp tagop) { TagReadData[] tagReads = null; SimpleReadPlan plan = new SimpleReadPlan(antennaList, protocol, filter, tagop, 1000); r.ParamSet("/reader/read/plan", plan); tagReads = r.Read(1000); // Print tag reads foreach (TagReadData tr in tagReads) { Console.WriteLine(tr.ToString()); if (tr.isErrorData) { // In case of error, show the error to user. Extract error code. int errorCode = ByteConv.ToU16(tr.Data, 0); Console.WriteLine("Embedded Tag operation failed. Error: " + ReaderCodeException.faultCodeToMessage(errorCode)); } else { if (tagop is Gen2.EMMicro.EM4325.GetSensorData) { if (tr.Data.Length > 0) { GetSensorDataResponse rData = new GetSensorDataResponse(tr.Data); Console.WriteLine("Data:" + rData.ToString()); } } else { Console.WriteLine(" Data:" + ByteFormat.ToHex(tr.Data, "", " ")); } } } }
private static void r_tagRead(object sender, TagReadDataEventArgs e) { Console.WriteLine("Background read: " + e.TagReadData); if (0 < e.TagReadData.Data.Length) { if (e.TagReadData.isErrorData) { // In case of error, show the error to user. Extract error code. byte[] errorCodeBytes = e.TagReadData.Data; int offset = 0; //converts byte array to int value int errorCode = (((errorCodeBytes[offset] & 0xFF) << 8) | ((errorCodeBytes[offset + 1] & 0xFF) << 0)); Console.WriteLine("Embedded Tag operation failed. Error: " + ReaderCodeException.faultCodeToMessage(errorCode)); } else { Console.WriteLine("Data[" + e.TagReadData.dataLength + "]: " + ByteFormat.ToHex(e.TagReadData.Data, "", " ")); } } }
static void Main(string[] args) { // Program setup if (1 > args.Length) { Usage(); } int[] antennaList = null; 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 (Reader 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]); } string model = (string)r.ParamGet("/reader/version/model").ToString(); if (!model.Equals("M3e")) { if (r.isAntDetectEnabled(antennaList)) { Console.WriteLine("Module doesn't has antenna detection support please provide antenna list"); Usage(); } } else { if (antennaList != null) { Console.WriteLine("Module doesn't support antenna input"); Usage(); } } // Enable printTagMetada Flags to print Metadata value bool printTagMetadata = false; SerialReader.TagMetadataFlag flagSet; SimpleReadPlan plan; // Metadata is not supported for M6 reader. Hence conditionalize here. if (!model.Equals("Mercury6")) { //flagSet = SerialReader.TagMetadataFlag.ANTENNAID | SerialReader.TagMetadataFlag.FREQUENCY; flagSet = SerialReader.TagMetadataFlag.ALL; r.ParamSet("/reader/metadata", flagSet); } // Create a simplereadplan which uses the antenna list created above if (model.Equals("M3e")) { // initializing the simple read plan plan = new SimpleReadPlan(antennaList, TagProtocol.ISO14443A, null, null, 1000); } else { plan = new SimpleReadPlan(antennaList, TagProtocol.GEN2, null, null, 1000); } // Set the created readplan r.ParamSet("/reader/read/plan", plan); // Read tags TagReadData[] tagReads = r.Read(500); // Print tag reads foreach (TagReadData tr in tagReads) { Console.WriteLine("Tag ID: " + tr.EpcString); if (printTagMetadata) { foreach (SerialReader.TagMetadataFlag flg in Enum.GetValues(typeof(SerialReader.TagMetadataFlag))) { if ((0 != (tr.metaDataFlags & flg))) { switch ((SerialReader.TagMetadataFlag)(flg)) { case SerialReader.TagMetadataFlag.ANTENNAID: Console.WriteLine("Antenna ID: " + tr.Antenna.ToString()); break; case SerialReader.TagMetadataFlag.DATA: if (tr.isErrorData) { // In case of error, show the error to user. Extract error code. byte[] errorCodeBytes = tr.Data; int offset = 0; //converts byte array to int value int errorCode = (((errorCodeBytes[offset] & 0xFF) << 8) | ((errorCodeBytes[offset + 1] & 0xFF) << 0)); Console.WriteLine("Embedded Tag operation failed. Error: " + ReaderCodeException.faultCodeToMessage(errorCode)); } else { Console.WriteLine("Data[" + tr.dataLength + "]: " + ByteFormat.ToHex(tr.Data, "", " ")); } break; case SerialReader.TagMetadataFlag.FREQUENCY: Console.WriteLine("Frequency: " + tr.Frequency.ToString()); break; case SerialReader.TagMetadataFlag.GPIO: if (r is SerialReader) { Console.WriteLine("GPO Status:"); foreach (GpioPin pin in tr.GPIO) { Console.WriteLine("Pin" + pin.Id.ToString() + ": " + (pin.High ? "High" : "Low")); } Console.WriteLine("GPI Status:"); foreach (GpioPin pin in tr.GPIO) { Console.WriteLine("Pin" + pin.Id.ToString() + ": " + (pin.Output ? "High" : "Low")); } } else { Console.WriteLine("GPI Status:"); for (int i = 0; i < tr.GPIO.Length / 2; i++) { Console.WriteLine("Pin" + tr.GPIO[i].Id.ToString() + ": " + (tr.GPIO[i].High ? "High" : "Low")); } Console.WriteLine("GPO Status:"); for (int i = tr.GPIO.Length / 2; i < tr.GPIO.Length; i++) { Console.WriteLine("Pin" + tr.GPIO[i].Id.ToString() + ": " + (tr.GPIO[i].High ? "High" : "Low")); } } break; case SerialReader.TagMetadataFlag.PHASE: Console.WriteLine("Phase: " + tr.Phase.ToString()); break; case SerialReader.TagMetadataFlag.PROTOCOL: Console.WriteLine("Protocol: " + tr.Tag.Protocol.ToString()); break; case SerialReader.TagMetadataFlag.READCOUNT: Console.WriteLine("Read Count: " + tr.ReadCount.ToString()); break; case SerialReader.TagMetadataFlag.RSSI: Console.WriteLine("RSSI: " + tr.Rssi.ToString()); break; case SerialReader.TagMetadataFlag.TIMESTAMP: Console.WriteLine("Timestamp: " + tr.Time.ToLocalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffK")); break; case SerialReader.TagMetadataFlag.TAGTYPE: switch (tr.Tag.Protocol) { case TagProtocol.ISO14443A: Console.WriteLine("TagType: " + (Iso14443a.TagType)tr.TagType); break; case TagProtocol.ISO15693: Console.WriteLine("TagType: " + (Iso15693.TagType)tr.TagType); break; case TagProtocol.LF125KHZ: Console.WriteLine("TagType: " + (Lf125khz.TagType)tr.TagType); break; case TagProtocol.LF134KHZ: Console.WriteLine("TagType: " + (Lf134khz.TagType)tr.TagType); break; default: Console.WriteLine("TagType: " + tr.TagType); break; } break; default: break; } if (TagProtocol.GEN2 == tr.Tag.Protocol) { Gen2.TagReadData gen2 = (Gen2.TagReadData)(tr.prd); switch ((SerialReader.TagMetadataFlag)(flg)) { case SerialReader.TagMetadataFlag.GEN2_Q: Console.WriteLine("Gen2Q: " + gen2.Q.ToString()); break; case SerialReader.TagMetadataFlag.GEN2_LF: Console.WriteLine("Gen2LinkFrequency: " + gen2.LF.ToString()); break; case SerialReader.TagMetadataFlag.GEN2_TARGET: Console.WriteLine("Gen2Target: " + gen2.Target.ToString()); break; } } } } } } } } catch (ReaderException re) { Console.WriteLine("Error: " + re.Message); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } }
static void Main(string[] args) { // Program setup if (1 > args.Length) { Usage(); } int[] antennaList = null; 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 automaticq // reader shutdown (using IDisposable interface). using (Reader r = Reader.Create(args[0])) { //Uncomment this line to add default transport listener. //r.Transport += r.SimpleTransportListener; r.Connect(); string model = (string)r.ParamGet("/reader/version/model"); if ("M6e".Equals(model) || "M6e PRC".Equals(model) || "M6e JIC".Equals(model) || "M6e Micro".Equals(model) || "M6e Nano".Equals(model) || "M6e Micro USB".Equals(model) || "M6e Micro USBPro".Equals(model) || "M3e".Equals(model)) { 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 (!model.Equals("M3e")) { if ((model.Equals("M6e Micro") || model.Equals("M6e Nano")) && antennaList == null) { Console.WriteLine("Module doesn't has antenna detection support please provide antenna list"); Usage(); } } else { if (antennaList != null) { Console.WriteLine("Module doesn't support antenna input"); Usage(); } } //Uncomment the following line to revert the module settings to factory defaluts //r.ParamSet("/reader/userConfig", new SerialReader.UserConfigOp(SerialReader.UserConfigOperation.CLEAR)); //Console.WriteLine("User profile set option:reset all configuration"); //Uncomment this if readerstats need to be included //r.ParamSet("/reader/stats/enable", Reader.Stat.StatsFlag.TEMPERATURE); /* Uncomment the following lines if want to enable embedded read and filter with autonomous operation. * Add tagop object readtagOp and filter object epcFilter in simple read plan constructor. */ //if (!model.Equals("M3e")) //{ //Gen2.ReadData readtagOp = new Gen2.ReadData(Gen2.Bank.RESERVED, 2, 2); //Gen2.TagData epcFilter = new Gen2.TagData(new byte[] { 0x11,0x22,0x33,0x44,0x55,0x66,0x77, //0x88,0x99,0x00,0x99,0x99}); //} int[] gpiPin = new int[1]; gpiPin[0] = 1; r.ParamSet("/reader/read/trigger/gpi", gpiPin); GpiPinTrigger gpiPinTrigger = new GpiPinTrigger(); gpiPinTrigger.enable = true; SimpleReadPlan srp; if (model.Equals("M3e")) { // initializing the simple read plan srp = new SimpleReadPlan(antennaList, TagProtocol.ISO14443A, null, null, 1000); } else { srp = new SimpleReadPlan(antennaList, TagProtocol.GEN2, null, null, 1000); } //To disable autonomous read make enableAutonomousRead flag to false and do SAVEWITHRREADPLAN srp.enableAutonomousRead = true; srp.ReadTrigger = gpiPinTrigger; r.ParamSet("/reader/read/plan", srp); r.ParamSet("/reader/userConfig", new SerialReader.UserConfigOp(SerialReader.UserConfigOperation.SAVEWITHREADPLAN)); Console.WriteLine("User profile set option:save all configuration with read plan"); r.ParamSet("/reader/userConfig", new SerialReader.UserConfigOp(SerialReader.UserConfigOperation.RESTORE)); Console.WriteLine("User profile set option:restore all configuration"); #region Create and add listeners // Create and add tag listener r.TagRead += delegate(Object sender, TagReadDataEventArgs e) { Console.WriteLine("Background read: " + e.TagReadData); if (e.TagReadData.isErrorData) { // In case of error, show the error to user. Extract error code. byte[] errorCodeBytes = e.TagReadData.Data; int offset = 0; //converts byte array to int value int errorCode = (((errorCodeBytes[offset] & 0xFF) << 8) | ((errorCodeBytes[offset + 1] & 0xFF) << 0)); Console.WriteLine("Embedded Tag operation failed. Error: " + ReaderCodeException.faultCodeToMessage(errorCode)); } else { Console.WriteLine("Data[" + e.TagReadData.dataLength + "]: " + ByteFormat.ToHex(e.TagReadData.Data, "", " ")); } }; // Add reader stats listener r.StatsListener += r_StatsListener; #endregion Create and add listeners r.ReceiveAutonomousReading(); Thread.Sleep(5000); } else { Console.WriteLine("Error: This codelet works only on M3e and M6e variants"); } } } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } }