private void SendAccessSpec(MSG_ADD_ACCESSSPEC msg) { MSG_ADD_ACCESSSPEC_RESPONSE rsp = client.ADD_ACCESSSPEC(msg, out msg_err, 3000); if (rsp != null) { //textBox2.Text = rsp.ToString() + "\n"; WriteMessage(rsp.ToString(), "Add_AccessSpec"); } else if (msg_err != null) { readerMgr.AppendToDebugTextBox("Add_AccessSpec " + msg_err.ToString() + "\n"); } else { readerMgr.AppendToDebugTextBox("Add_AccessSpec Command time out!" + "\n"); } }
public void Add_AccessSpec() { MSG_ERROR_MESSAGE msg_err; MSG_ADD_ACCESSSPEC msg = new MSG_ADD_ACCESSSPEC(); msg.AccessSpec = new PARAM_AccessSpec(); ///////////////////////////////////////////////// // AccessSpec ///////////////////////////////////////////////// // AccessSpecID should be set to a unique identifier. msg.AccessSpec.AccessSpecID = 456; msg.AccessSpec.AntennaID = 0; // We're writing to a Gen2 tag msg.AccessSpec.ProtocolID = ENUM_AirProtocols.EPCGlobalClass1Gen2; // AccessSpecs must be disabled when you add them. msg.AccessSpec.CurrentState = ENUM_AccessSpecState.Disabled; msg.AccessSpec.ROSpecID = 0; // Setup the triggers msg.AccessSpec.AccessSpecStopTrigger = new PARAM_AccessSpecStopTrigger(); msg.AccessSpec.AccessSpecStopTrigger.AccessSpecStopTrigger = ENUM_AccessSpecStopTriggerType.Null; // OperationCountValue indicate the number of times this Spec is // executed before it is deleted. If set to 0, this is equivalent // to no stop trigger defined. msg.AccessSpec.AccessSpecStopTrigger.OperationCountValue = 0; ///////////////////////////////////////////////// // AccessCommand // // Define which tags we want to write to. ///////////////////////////////////////////////// msg.AccessSpec.AccessCommand = new PARAM_AccessCommand(); msg.AccessSpec.AccessCommand.AirProtocolTagSpec = new UNION_AirProtocolTagSpec(); PARAM_C1G2TagSpec tagSpec = new PARAM_C1G2TagSpec(); // Specify the target tag. Which tag do we want to write to? tagSpec.C1G2TargetTag = new PARAM_C1G2TargetTag[1]; tagSpec.C1G2TargetTag[0] = new PARAM_C1G2TargetTag(); tagSpec.C1G2TargetTag[0].Match = true; // We'll use the tag's EPC to determine if this is the label we want. // Set the memory bank to 1 (The EPC memory bank on a Monza 4 tag). tagSpec.C1G2TargetTag[0].MB = new TwoBits(1); // The first (msb) bit location of the specified memory // bank against which to compare the TagMask. // We'll set it to 0x20, to skip the protocol // control bits and CRC. tagSpec.C1G2TargetTag[0].Pointer = 0x20; tagSpec.C1G2TargetTag[0].TagMask = LLRPBitArray.FromHexString("FFFFFFFFFFFFFFFFFFFFFFFF"); tagSpec.C1G2TargetTag[0].TagData = LLRPBitArray.FromHexString("300833B2DDD9014000000000"); msg.AccessSpec.AccessCommand.AirProtocolTagSpec.Add(tagSpec); ///////////////////////////////////////////////// // AccessCommandOpSpec // // Define the data we want to write. ///////////////////////////////////////////////// msg.AccessSpec.AccessCommand.AccessCommandOpSpec = new UNION_AccessCommandOpSpec(); PARAM_C1G2Write wr = new PARAM_C1G2Write(); wr.AccessPassword = 0; // Bank 3 is user memory on a Monza 4 tag. wr.MB = new TwoBits(3); // OpSpecID should be set to a unique identifier. wr.OpSpecID = 111; // Write to the base of user memory. wr.WordPointer = 0x00; // Data to be written. wr.WriteData = UInt16Array.FromHexString("0123456789ABCDEF"); msg.AccessSpec.AccessCommand.AccessCommandOpSpec.Add(wr); ///////////////////////////////////////////////// // AccessReportSpec // // Define when we want to receive AccessReports ///////////////////////////////////////////////// msg.AccessSpec.AccessReportSpec = new PARAM_AccessReportSpec(); msg.AccessSpec.AccessReportSpec.AccessReportTrigger = ENUM_AccessReportTriggerType.End_Of_AccessSpec; // Send the message and check the reply MSG_ADD_ACCESSSPEC_RESPONSE rsp = reader.ADD_ACCESSSPEC(msg, out msg_err, 2000); if (rsp != null) { // Success Console.WriteLine(rsp.ToString()); } else if (msg_err != null) { // Error Console.WriteLine(msg_err.ToString()); } else { // Timeout Console.WriteLine("Timeout Error."); } }
private void ADD_ACCESSSPEC() { MSG_ADD_ACCESSSPEC msg = new MSG_ADD_ACCESSSPEC(); msg.AccessSpec = new PARAM_AccessSpec(); msg.AccessSpec.AccessSpecID = 1001; msg.AccessSpec.AntennaID = 1; msg.AccessSpec.ProtocolID = ENUM_AirProtocols.EPCGlobalClass1Gen2; msg.AccessSpec.CurrentState = ENUM_AccessSpecState.Disabled; msg.AccessSpec.ROSpecID = 123; //define trigger msg.AccessSpec.AccessSpecStopTrigger = new PARAM_AccessSpecStopTrigger(); msg.AccessSpec.AccessSpecStopTrigger.AccessSpecStopTrigger = ENUM_AccessSpecStopTriggerType.Null; msg.AccessSpec.AccessSpecStopTrigger.OperationCountValue = 3; //define access command //define air protocol spec msg.AccessSpec.AccessCommand = new PARAM_AccessCommand(); msg.AccessSpec.AccessCommand.AirProtocolTagSpec = new UNION_AirProtocolTagSpec(); PARAM_C1G2TagSpec tagSpec = new PARAM_C1G2TagSpec(); tagSpec.C1G2TargetTag = new PARAM_C1G2TargetTag[1]; tagSpec.C1G2TargetTag[0] = new PARAM_C1G2TargetTag(); tagSpec.C1G2TargetTag[0].Match = true; //change to "true" if you want to the following parameters take effect. tagSpec.C1G2TargetTag[0].MB = new LTKD.TwoBits(1); tagSpec.C1G2TargetTag[0].Pointer = 0x20; tagSpec.C1G2TargetTag[0].TagData = LTKD.LLRPBitArray.FromString("6666"); tagSpec.C1G2TargetTag[0].TagMask = LTKD.LLRPBitArray.FromBinString("1111111111111111"); msg.AccessSpec.AccessCommand.AirProtocolTagSpec.Add(tagSpec); //define access spec msg.AccessSpec.AccessCommand.AccessCommandOpSpec = new UNION_AccessCommandOpSpec(); PARAM_C1G2Write wr = new PARAM_C1G2Write(); wr.AccessPassword = 0; wr.MB = new LTKD.TwoBits(1); wr.OpSpecID = 111; wr.WordPointer = 2; //Data to be written. wr.WriteData = LTKD.UInt16Array.FromString("EEEE11112222333344445555"); msg.AccessSpec.AccessCommand.AccessCommandOpSpec.Add(wr); msg.AccessSpec.AccessReportSpec = new PARAM_AccessReportSpec(); msg.AccessSpec.AccessReportSpec.AccessReportTrigger = ENUM_AccessReportTriggerType.End_Of_AccessSpec; MSG_ADD_ACCESSSPEC_RESPONSE rsp = reader.ADD_ACCESSSPEC(msg, out msg_err, 3000); if (rsp != null) { textBox2.Text = rsp.ToString(); } else if (msg_err != null) { textBox2.Text = msg_err.ToString(); } else { textBox2.Text = "Command time out!"; } }