/// <summary>ROSpec 追加</summary> protected virtual void AddROSpec(uint roSpecId, bool isEnabledImpinjExtensions = false) { MSG_ADD_ROSPEC msg = new MSG_ADD_ROSPEC(); PARAM_ROSpec pROSpec = new PARAM_ROSpec(); msg.ROSpec = pROSpec; pROSpec.ROSpecID = roSpecId; pROSpec.Priority = 0; pROSpec.CurrentState = ENUM_ROSpecState.Disabled; // PARAM_ROBoundarySpec pBoundary = new PARAM_ROBoundarySpec(); pROSpec.ROBoundarySpec = pBoundary; // 開始トリガ pBoundary.ROSpecStartTrigger = new PARAM_ROSpecStartTrigger(); pBoundary.ROSpecStartTrigger.ROSpecStartTriggerType = ENUM_ROSpecStartTriggerType.Null; // 停止トリガ pBoundary.ROSpecStopTrigger = new PARAM_ROSpecStopTrigger(); pBoundary.ROSpecStopTrigger.ROSpecStopTriggerType = ENUM_ROSpecStopTriggerType.Null; pBoundary.ROSpecStopTrigger.DurationTriggerValue = 0; // レポートスペック PARAM_ROReportSpec pReport = new PARAM_ROReportSpec(); pROSpec.ROReportSpec = pReport; pReport.N = 1; pReport.ROReportTrigger = ENUM_ROReportTriggerType.Upon_N_Tags_Or_End_Of_ROSpec; PARAM_TagReportContentSelector pContentSelector = new PARAM_TagReportContentSelector(); pReport.TagReportContentSelector = pContentSelector; pContentSelector.EnableAntennaID = true; pContentSelector.EnablePeakRSSI = true; pContentSelector.EnableROSpecID = true; pContentSelector.EnableFirstSeenTimestamp = true; if (isEnabledImpinjExtensions) { var pImpinjContentSelector = new PARAM_ImpinjTagReportContentSelector(); pReport.Custom.Add(pImpinjContentSelector); pImpinjContentSelector.ImpinjEnablePeakRSSI = new PARAM_ImpinjEnablePeakRSSI() { PeakRSSIMode = ENUM_ImpinjPeakRSSIMode.Enabled }; pImpinjContentSelector.ImpinjEnableRFPhaseAngle = new PARAM_ImpinjEnableRFPhaseAngle() { RFPhaseAngleMode = ENUM_ImpinjRFPhaseAngleMode.Enabled }; } pROSpec.SpecParameter = new UNION_SpecParameter(); // AISpec PARAM_AISpec pAI = new PARAM_AISpec(); pROSpec.SpecParameter.Add(pAI); pAI.AntennaIDs = new UInt16Array(); pAI.AntennaIDs.Add(0); // AISpec Stop Trigger PARAM_AISpecStopTrigger pAISpecStopTrigger = new PARAM_AISpecStopTrigger(); pAI.AISpecStopTrigger = pAISpecStopTrigger; pAISpecStopTrigger.AISpecStopTriggerType = ENUM_AISpecStopTriggerType.Null; PARAM_InventoryParameterSpec pInventory = new PARAM_InventoryParameterSpec(); pAI.InventoryParameterSpec = new PARAM_InventoryParameterSpec[1]; pAI.InventoryParameterSpec[0] = pInventory; pInventory.InventoryParameterSpecID = 4567; pInventory.ProtocolID = ENUM_AirProtocols.EPCGlobalClass1Gen2; if (this.Settings != null) { pAI.AntennaIDs = new UInt16Array(); foreach (var ant in this.Settings.Antennas.Where(ant => ant.IsEnabled)) { pAI.AntennaIDs.Add(ant.Id); } pInventory.AntennaConfiguration = new PARAM_AntennaConfiguration[this.Settings.Antennas.Count]; for (ushort aid = 0; aid < this.Settings.Antennas.Count; ++aid) { PARAM_AntennaConfiguration pAntenna = new PARAM_AntennaConfiguration(); pInventory.AntennaConfiguration[aid] = pAntenna; var antenna = this.Settings.Antennas[aid]; pAntenna.AntennaID = antenna.Id; pAntenna.RFTransmitter = new PARAM_RFTransmitter(); pAntenna.RFTransmitter.ChannelIndex = 1; pAntenna.RFTransmitter.HopTableID = 0; pAntenna.RFTransmitter.TransmitPower = antenna.Tx.Id; pAntenna.RFReceiver = new PARAM_RFReceiver(); pAntenna.RFReceiver.ReceiverSensitivity = antenna.Rx.Id; pAntenna.AirProtocolInventoryCommandSettings = new UNION_AirProtocolInventoryCommandSettings(); var pInventoryCommand = new PARAM_C1G2InventoryCommand(); pAntenna.AirProtocolInventoryCommandSettings.Add(pInventoryCommand); pInventoryCommand.TagInventoryStateAware = false; pInventoryCommand.C1G2RFControl = new PARAM_C1G2RFControl(); pInventoryCommand.C1G2RFControl.ModeIndex = 1000; pInventoryCommand.C1G2RFControl.Tari = 0; pInventoryCommand.C1G2SingulationControl = new PARAM_C1G2SingulationControl(); pInventoryCommand.C1G2SingulationControl.Session = new TwoBits(false, false); pInventoryCommand.C1G2SingulationControl.TagPopulation = 32; pInventoryCommand.C1G2SingulationControl.TagTransitTime = 0; } } MSG_ERROR_MESSAGE? msgErr = null; MSG_ADD_ROSPEC_RESPONSE?msgResp = this.BaseClient?.ADD_ROSPEC( msg: msg, msg_err: out msgErr, time_out: 3000); this.CheckLLRPError(msgResp, msgErr); }
/// <summary></summary> protected override void AddROSpec(uint roSpecId) { MSG_ADD_ROSPEC msg = new MSG_ADD_ROSPEC(); // ROSpec PARAM_ROSpec pROSpec = new PARAM_ROSpec(); msg.ROSpec = pROSpec; pROSpec.ROSpecID = roSpecId; pROSpec.Priority = 0; pROSpec.CurrentState = ENUM_ROSpecState.Disabled; // Boundary Spec PARAM_ROBoundarySpec pBoundary = new PARAM_ROBoundarySpec(); pROSpec.ROBoundarySpec = pBoundary; // Start Trigger pBoundary.ROSpecStartTrigger = new PARAM_ROSpecStartTrigger(); //pBoundary.ROSpecStartTrigger.ROSpecStartTriggerType = ENUM_ROSpecStartTriggerType.Immediate; pBoundary.ROSpecStartTrigger.ROSpecStartTriggerType = ENUM_ROSpecStartTriggerType.Null; // Stop Trigger pBoundary.ROSpecStopTrigger = new PARAM_ROSpecStopTrigger(); pBoundary.ROSpecStopTrigger.DurationTriggerValue = 0; pBoundary.ROSpecStopTrigger.ROSpecStopTriggerType = ENUM_ROSpecStopTriggerType.Null; // Report Spec PARAM_ROReportSpec pReport = new PARAM_ROReportSpec(); pROSpec.ROReportSpec = pReport; pReport.N = 1; pReport.ROReportTrigger = ENUM_ROReportTriggerType.Upon_N_Tags_Or_End_Of_ROSpec; // Tag report content selector PARAM_TagReportContentSelector pTagReportContentSelector = new PARAM_TagReportContentSelector(); pReport.TagReportContentSelector = pTagReportContentSelector; pTagReportContentSelector.AirProtocolEPCMemorySelector = new UNION_AirProtocolEPCMemorySelector(); PARAM_C1G2EPCMemorySelector pEpcMemorySelector = new PARAM_C1G2EPCMemorySelector(); pTagReportContentSelector.AirProtocolEPCMemorySelector.Add(pEpcMemorySelector); pEpcMemorySelector.EnableCRC = false; pEpcMemorySelector.EnablePCBits = false; pTagReportContentSelector.EnableROSpecID = false; pTagReportContentSelector.EnableSpecIndex = false; pTagReportContentSelector.EnableInventoryParameterSpecID = false; pTagReportContentSelector.EnableAntennaID = true; pTagReportContentSelector.EnablePeakRSSI = true; pTagReportContentSelector.EnableFirstSeenTimestamp = true; pTagReportContentSelector.EnableLastSeenTimestamp = false; pTagReportContentSelector.EnableTagSeenCount = false; pTagReportContentSelector.EnableAccessSpecID = false; pROSpec.SpecParameter = new UNION_SpecParameter(); // Impinj DI spec PARAM_ImpinjDISpec pDI = new PARAM_ImpinjDISpec(); pROSpec.SpecParameter.Add(pDI); // Impinj Direction Sectors PARAM_ImpinjDirectionSectors pDirectionSectors = new PARAM_ImpinjDirectionSectors(); pDI.ImpinjDirectionSectors = pDirectionSectors; pDirectionSectors.EnabledSectorIDs = new UInt16Array(); pDirectionSectors.EnabledSectorIDs.Add(2); pDirectionSectors.EnabledSectorIDs.Add(3); // Direction Config PARAM_ImpinjDirectionConfig pDirectionConfig = new PARAM_ImpinjDirectionConfig(); pDI.ImpinjDirectionConfig = pDirectionConfig; pDirectionConfig.TagAgeIntervalSeconds = 0x02; pDirectionConfig.UpdateIntervalSeconds = 0x02; pDirectionConfig.FieldOfView = ENUM_ImpinjDirectionFieldOfView.ReaderSelected; PARAM_ImpinjDirectionUserTagPopulationLimit pDITagPopulationLimit = new PARAM_ImpinjDirectionUserTagPopulationLimit(); pDirectionConfig.ImpinjDirectionUserTagPopulationLimit = pDITagPopulationLimit; pDITagPopulationLimit.UserTagPopulationLimit = 20; // 0x14 // Impinj C1G2 Direction Config PARAM_ImpinjC1G2DirectionConfig pC1G2DirectionConfig = new PARAM_ImpinjC1G2DirectionConfig(); pDI.ImpinjC1G2DirectionConfig = pC1G2DirectionConfig; pC1G2DirectionConfig.RFMode = ENUM_ImpinjDirectionRFMode.HighPerformance; // 出力電力 PARAM_ImpinjTransmitPower pTransmitPower = new PARAM_ImpinjTransmitPower(); pC1G2DirectionConfig.ImpinjTransmitPower = pTransmitPower; //pTransmitPower.TransmitPower = 81; pTransmitPower.TransmitPower = 21; PARAM_ImpinjDirectionReporting pDirectionReporting = new PARAM_ImpinjDirectionReporting(); pDI.ImpinjDirectionReporting = pDirectionReporting; pDirectionReporting.DiagnosticReportLevel = 0; pDirectionReporting.EnableEntryReport = true; pDirectionReporting.EnableExitReport = true; pDirectionReporting.EnableUpdateReport = true; pDirectionReporting.EnableDiagnosticReport = false; MSG_ERROR_MESSAGE? msgErr = null; MSG_ADD_ROSPEC_RESPONSE?msgResp = this.BaseClient?.ADD_ROSPEC( msg: msg, msg_err: out msgErr, time_out: this.Timeout); LLRPHelper.CheckLLRPResponse(msgResp, msgErr); }