esitarski / CrossMgr

Cyclo Cross Management Application
MIT License
41 stars 21 forks source link

[ETSI/non US-FCC reader only] CrossMgrImpinj Transmit Power & Receiver Sensitivity not being applied #41

Open rkantos opened 4 years ago

rkantos commented 4 years ago

I'm opening this here as well, as there didn't seem to be any traction on google groups. I have also not been able to get it working even after further attemps after writing the original topic.

Having previously used my FX9500 with CrossMgrImpinj, I now noticed that when using my Impinj R220 that I am unable to have an effect when trying to change both the transmit power & receiver sensitivity settings. When using the Motorola FX9500, the settings based on this page seem to work normally: https://www.ptsmobile.com/FX7400/fx7400_integrator.pdf

Changing RF Power Level Using Profiles

To control power levels, primarily use the LLRP interface or the RFID API3. Alternatively, use the Showcase II demo tool to control the RF power level. To control RF power at the reader, create a profile specifying the LLRP parameters that control RF power. For example, the following profile excerpt shows a power level of 24 dBm for all antennas. This excerpt is based on the Large Tag Population template and shows the pertinent changes in bold. The TransmitPower parameter is an index to a power table exposed through LLRP capabilities. Divide this index by 10 and add 14 to get the RF power level at the port. So, to achieve a power level of 30 dBm, set TransmitPower to

  1. To achieve a power level of 24 dBm, set TransmitPower to 100 as in the following example.

Here is also a nice table of LLRP transmit power settings for different readers: http://stratumglobal.kayako.com/knowledgebase/article/View/19/0/llrp-reader-tx-rx-index-settings

However when I try to apply Transmit Power settings by this documentation on the R220, I get no change in the reader performance: https://support.impinj.com/hc/en-us/articles/202756358-Setting-Receive-Sensitivity-and-Transmit-Power-on-Revolution-Reader-using-LLRP

I've tried setting transmit power to both the index and power values, e.g. 1 or 1000 for example.

I have verified this by using Impinj ItemTest, where the transmit power & receiver sensitivity settings affect performance as expected.

Basically I cannot get CrossMgrImpinj to run the R220 at full power and sensitivity.

Looking up the reader rospec via ssh when Using CrossMgrImpinj:

 > show rfid llrp rospec 0
Status='0,Success'
LLRPROSpec='
<?xml version="1.0"?>
<GET_ROSPECS_RESPONSE
 xmlns="http://www.llrp.org/ltk/schema/core/encoding/xml/1.0"
 xmlns:Impinj="http://developer.impinj.com/ltk/schema/encoding/xml/1.30"
 MessageID="0">
  <LLRPStatus>
    <StatusCode>M_Success</StatusCode>
    <ErrorDescription></ErrorDescription>
  </LLRPStatus>
  <ROSpec>
    <ROSpecID>123</ROSpecID>
    <Priority>0</Priority>
    <CurrentState>Active</CurrentState>
    <ROBoundarySpec>
      <ROSpecStartTrigger>
        <ROSpecStartTriggerType>Immediate</ROSpecStartTriggerType>
      </ROSpecStartTrigger>
      <ROSpecStopTrigger>
        <ROSpecStopTriggerType>Null</ROSpecStopTriggerType>
        <DurationTriggerValue>0</DurationTriggerValue>
      </ROSpecStopTrigger>
    </ROBoundarySpec>
    <AISpec>
      <AntennaIDs>1</AntennaIDs>
      <AISpecStopTrigger>
        <AISpecStopTriggerType>Tag_Observation</AISpecStopTriggerType>
        <DurationTrigger>0</DurationTrigger>
        <TagObservationTrigger>
          <TriggerType>Upon_Seeing_N_Tags_Or_Timeout</TriggerType>
          <NumberOfTags>500</NumberOfTags>
          <NumberOfAttempts>1</NumberOfAttempts>
          <T>0</T>
          <Timeout>500</Timeout>
        </TagObservationTrigger>
      </AISpecStopTrigger>
      <InventoryParameterSpec>
        <InventoryParameterSpecID>1234</InventoryParameterSpecID>
        <ProtocolID>EPCGlobalClass1Gen2</ProtocolID>
      </InventoryParameterSpec>
    </AISpec>
    <ROReportSpec>
      <ROReportTrigger>Upon_N_Tags_Or_End_Of_ROSpec</ROReportTrigger>
      <N>0</N>
      <TagReportContentSelector>
        <EnableROSpecID>0</EnableROSpecID>
        <EnableSpecIndex>0</EnableSpecIndex>
        <EnableInventoryParameterSpecID>0</EnableInventoryParameterSpecID>
        <EnableAntennaID>1</EnableAntennaID>
        <EnableChannelIndex>0</EnableChannelIndex>
        <EnablePeakRSSI>0</EnablePeakRSSI>
        <EnableFirstSeenTimestamp>1</EnableFirstSeenTimestamp>
        <EnableLastSeenTimestamp>0</EnableLastSeenTimestamp>
        <EnableTagSeenCount>0</EnableTagSeenCount>
        <EnableAccessSpecID>0</EnableAccessSpecID>
      </TagReportContentSelector>
    </ROReportSpec>
  </ROSpec>
</GET_ROSPECS_RESPONSE>

Using Impinj ItemTest:

 > show rfid llrp rospec 0
Status='0,Success'
LLRPROSpec='
<?xml version="1.0"?>
<GET_ROSPECS_RESPONSE
 xmlns="http://www.llrp.org/ltk/schema/core/encoding/xml/1.0"
 xmlns:Impinj="http://developer.impinj.com/ltk/schema/encoding/xml/1.30"
 MessageID="0">
  <LLRPStatus>
    <StatusCode>M_Success</StatusCode>
    <ErrorDescription></ErrorDescription>
  </LLRPStatus>
  <ROSpec>
    <ROSpecID>14150</ROSpecID>
    <Priority>0</Priority>
    <CurrentState>Active</CurrentState>
    <ROBoundarySpec>
      <ROSpecStartTrigger>
        <ROSpecStartTriggerType>Null</ROSpecStartTriggerType>
      </ROSpecStartTrigger>
      <ROSpecStopTrigger>
        <ROSpecStopTriggerType>Null</ROSpecStopTriggerType>
        <DurationTriggerValue>0</DurationTriggerValue>
      </ROSpecStopTrigger>
    </ROBoundarySpec>
    <AISpec>
      <AntennaIDs>1</AntennaIDs>
      <AISpecStopTrigger>
        <AISpecStopTriggerType>Null</AISpecStopTriggerType>
        <DurationTrigger>0</DurationTrigger>
      </AISpecStopTrigger>
      <InventoryParameterSpec>
        <InventoryParameterSpecID>123</InventoryParameterSpecID>
        <ProtocolID>EPCGlobalClass1Gen2</ProtocolID>
        <AntennaConfiguration>
          <AntennaID>1</AntennaID>
          <RFReceiver>
            <ReceiverSensitivity>2</ReceiverSensitivity>
          </RFReceiver>
          <RFTransmitter>
            <HopTableID>1</HopTableID>
            <ChannelIndex>1</ChannelIndex>
            <TransmitPower>1</TransmitPower>
          </RFTransmitter>
          <C1G2InventoryCommand>
            <TagInventoryStateAware>0</TagInventoryStateAware>
            <C1G2RFControl>
              <ModeIndex>1000</ModeIndex>
              <Tari>0</Tari>
            </C1G2RFControl>
            <C1G2SingulationControl>
              <Session>0</Session>
              <TagPopulation>32</TagPopulation>
              <TagTransitTime>0</TagTransitTime>
            </C1G2SingulationControl>
            <Impinj:ImpinjInventorySearchMode>
              <Impinj:InventorySearchMode>Single_Target</Impinj:InventorySearchMode>
            </Impinj:ImpinjInventorySearchMode>
          </C1G2InventoryCommand>
        </AntennaConfiguration>
      </InventoryParameterSpec>
    </AISpec>
    <ROReportSpec>
      <ROReportTrigger>Upon_N_Tags_Or_End_Of_ROSpec</ROReportTrigger>
      <N>1</N>
      <TagReportContentSelector>
        <EnableROSpecID>0</EnableROSpecID>
        <EnableSpecIndex>0</EnableSpecIndex>
        <EnableInventoryParameterSpecID>0</EnableInventoryParameterSpecID>
        <EnableAntennaID>1</EnableAntennaID>
        <EnableChannelIndex>1</EnableChannelIndex>
        <EnablePeakRSSI>0</EnablePeakRSSI>
        <EnableFirstSeenTimestamp>1</EnableFirstSeenTimestamp>
        <EnableLastSeenTimestamp>0</EnableLastSeenTimestamp>
        <EnableTagSeenCount>0</EnableTagSeenCount>
        <EnableAccessSpecID>1</EnableAccessSpecID>
      </TagReportContentSelector>
      <Impinj:ImpinjTagReportContentSelector>
        <Impinj:ImpinjEnablePeakRSSI>
          <Impinj:PeakRSSIMode>Enabled</Impinj:PeakRSSIMode>
        </Impinj:ImpinjEnablePeakRSSI>
      </Impinj:ImpinjTagReportContentSelector>
    </ROReportSpec>
  </ROSpec>
</GET_ROSPECS_RESPONSE>

So when I am using CrossMgrImpinj, these fields are not shown by the config on the reader's console:

         <AntennaID>1</AntennaID>
          <RFReceiver>
            <ReceiverSensitivity>2</ReceiverSensitivity>
          </RFReceiver>
          <RFTransmitter>
            <HopTableID>1</HopTableID>
            <ChannelIndex>1</ChannelIndex>
            <TransmitPower>1</TransmitPower>
          </RFTransmitter>
rkantos commented 4 years ago

I received a three Impinj R220 readers (two ETSI and one FCC) again. This time I tested CrossMgrImpinj without upgrading the firmware, and noticed the power setting working.. For whatever reason I was testing the FCC reader first. Next I upgraded the firmware (from 4.8.3.240 to the newest that I've come across 6.2.1.240). Again I tested the transmit power and noticed it working normally. I thought it being odd, so I moved to testing the ETSI readers with FW version 5.12.2.240..

With the ETSI reader and FW 5.12.2.240 CrossMgrImpinj doesn't seem to work well when trying to set the transmit power. Sometimes the reader stays disconnected when a custom power value is set. Also the maximum power (index 87 for ETSI R220) doesn't seem to work. Even though the reader is reported as connected, no tags are reported being read.

With 5.14.0.240 the reader at least starts reading tags regardless of the transmit power index. However, the reader seems to always be at full power and full sensitivity. The same is also true for 6.2.1.240.

So basically this problem seems to specifically relate to ETSI (EU) model readers, as I didn't observe the problem with the FCC model. I imagine this might even be a problem for the manufacturer, Impinj, to solve.

Even when using the FCC reader, the ROSPEC doesn't report transmit power & receiver sensitivity settings, although the reader is working normally (transmit power is set correctly by CrossMgr). This still remains as a contrast to when using Impinj ItemTest, where the power setting is reported correctly on the reader, when issuing show rfid llrp rospec 0 via SSH.