llrp

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 17, 2021 License: Apache-2.0 Imports: 17 Imported by: 0

Documentation

Overview

Package llrp implements the Low Level Reader Protocol (LLRP) to communicate with compliant RFID Readers.

This package focuses on Client-side communication, and handles the protocol minutia like Keep-Alive acknowledgements while providing types to facilitate handling messages you care about.

A typical use of this package focuses on the Client connection: - Create a new Client with connection details and message handlers. - Establish and maintain an LLRP connection with an RFID device. - Send and receive LLRP messages. - At some point, gracefully close the connection.

The package provides methods that parse and validate LLRP message to translate them among binary, Go types, and JSON.

Note that names in LLRP are often verbose and sometimes overloaded. These names have been judiciously translated when appropriate to better match Go idioms and standards.

------------------------------------------

An LLRP message consists of a header identifying its type and size, followed by 0 or more data fields. Some of these fields have a fixed size and offset (relative the header), but others are optional and/or variable length, so they start with a parameter header to identify their type and (usually) size. In some cases, a parameter's header only identifies its type, in which case its size must be determined by a lookup table.

Most LLRP Parameters are TLVs. Their headers are 4 bytes: 6 reserved bits (zero), a 10 bit type, and 16 bit of length (incl. header). The type field of a TLV is specified as 128-2047, though it's not clear how types 1024-2047 fit in 10 bits. TV parameters can (in theory) be as short as 1 byte. The MSBit is always 1, then the next 7 are the type: 1-127 (so in a certain sense, they range 128-255).

Most parameter types are represented by Go structs, with their LLRP fields and parameters given as struct fields. As a special case, if the struct would consist of a single numeric field, then its type is defined as "type <paramName> <backing type>".

Most fields are represented by an int/uint of the appropriate storage size, or as an enumeration, flag, or type alias backed such. Variable length fields are represented by slices of the above, with the following exceptions:

  • LLRP strings are represented by Go strings; the bytes are taken as-is and not validated for UTF-8 correctness.
  • In Custom params/messages, all non-header bytes are stored as "Data []byte".
  • Bit arrays keep a "<name>NumBits uint16" for their bit length and store the bit data in a "<name> []byte" field with the same MSB offset and octet padding as the original message value.

Optional parameters are represented by pointer values and are left nil if not present during unmarshaling. Repeatable parameters are represented by slices, which may be nil if no parameter of the given type is present. Required, non-repeatable parameters are regular struct fields.

Index

Constants

View Source
const (
	C1G2BPLockSuccess                = C1G2BlockPermalockResultType(0)
	C1G2BPLockInsufficientPower      = C1G2BlockPermalockResultType(1)
	C1G2BPLockNonSpecificTagError    = C1G2BlockPermalockResultType(2)
	C1G2BPLockNoResponseFromTag      = C1G2BlockPermalockResultType(3)
	C1G2BPLockNonSpecificReaderError = C1G2BlockPermalockResultType(4)
	C1G2BPLockIncorrectPassword      = C1G2BlockPermalockResultType(5)
	C1G2BPLockMemoryOverrun          = C1G2BlockPermalockResultType(6)
)
View Source
const (
	AirProtoUnspecified         = AirProtocolIDType(0)
	AirProtoEPCGlobalClass1Gen2 = AirProtocolIDType(1)
)
View Source
const (
	ROSpecStateDisabled = ROSpecCurrentStateType(0)
	ROSpecStateInactive = ROSpecCurrentStateType(1)
	ROSpecStateActive   = ROSpecCurrentStateType(2)
)
View Source
const (
	AccessSpecStopTriggerNone           = AccessSpecStopTriggerType(0)
	AccessSpecStopTriggerOperationCount = AccessSpecStopTriggerType(1)
)
View Source
const (
	NotifyChannelHop            = ReaderEventType(0)
	NotifyGPI                   = ReaderEventType(1)
	NotifyROSpec                = ReaderEventType(2)
	NotifyReportBuffFillWarn    = ReaderEventType(3)
	NotifyReaderException       = ReaderEventType(4)
	NotifyRFSurvey              = ReaderEventType(5)
	NotifyAISpec                = ReaderEventType(6)
	NotifyAISpecWithSingulation = ReaderEventType(7)
	NotifyAntenna               = ReaderEventType(8)
	NotifySpecLoop              = ReaderEventType(9)
)
View Source
const (
	ROSpecStarted   = ROSpecEventType(0)
	ROSpecEnded     = ROSpecEventType(1)
	ROSpecPreempted = ROSpecEventType(2)
)
View Source
const (
	RFSurveyStarted = RFSurveyEventType(0)
	RFSurveyEnded   = RFSurveyEventType(1)
)
View Source
const (
	AntennaDisconnected = AntennaEventType(0)
	AntennaConnected    = AntennaEventType(1)
)
View Source
const (
	None            = ROReportTriggerType(0)
	NTagsOrAIEnd    = ROReportTriggerType(1)
	NTagsOrROEnd    = ROReportTriggerType(2)
	NSecondsOrAIEnd = ROReportTriggerType(3)
	NSecondsOrROEnd = ROReportTriggerType(4)
	NMillisOrAIEnd  = ROReportTriggerType(5)
	NMillisOrROEnd  = ROReportTriggerType(6)
)
View Source
const (
	ConnSuccess               = ConnectionAttemptEventType(0)
	ConnExistsReaderInitiated = ConnectionAttemptEventType(1)
	ConnExistsClientInitiated = ConnectionAttemptEventType(2)
	ConnFailedReasonUnknown   = ConnectionAttemptEventType(3)
	ConnAttemptedAgain        = ConnectionAttemptEventType(4)
)
View Source
const (
	KATriggerNone     = KeepAliveTriggerType(0)
	KATriggerPeriodic = KeepAliveTriggerType(1)
)
View Source
const (
	ROStartTriggerNone      = ROSpecStartTriggerType(0)
	ROStartTriggerImmediate = ROSpecStartTriggerType(1)
	ROStartTriggerPeriodic  = ROSpecStartTriggerType(2)
	ROStartTriggerGPI       = ROSpecStartTriggerType(3)
)
View Source
const (
	ROStopTriggerNone     = ROSpecStopTriggerType(0)
	ROStopTriggerDuration = ROSpecStopTriggerType(1)
	ROStopTriggerGPI      = ROSpecStopTriggerType(2)
)
View Source
const (
	RFSurveyStopTriggerNone       = RFSurveySpecStopTriggerType(0)
	RFSurveyStopTriggerDuration   = RFSurveySpecStopTriggerType(1)
	RFSurveyStopTriggerNIteration = RFSurveySpecStopTriggerType(2)
)
View Source
const (
	AIStopTriggerNone           = AISpecStopTriggerType(0)
	AIStopTriggerDuration       = AISpecStopTriggerType(1)
	AIStopTriggerGPI            = AISpecStopTriggerType(2)
	AIStopTriggerTagObservation = AISpecStopTriggerType(3)
)
View Source
const (
	TagObsTriggerNTagObservations    = TagObservationTriggerType(0)
	TagObsTriggerNoNewAfterT         = TagObservationTriggerType(1)
	TagObsTriggerNAttempts           = TagObservationTriggerType(2)
	TagObsTriggerNUniqueObservations = TagObservationTriggerType(3)
	TagObsTriggerNoUniqueAfterT      = TagObservationTriggerType(4)
)
View Source
const (
	SpectralMaskUnknown            = SpectralMaskType(0)
	SpectralMaskSingleInterrogator = SpectralMaskType(1)
	SpectralMaskMultiInterrogator  = SpectralMaskType(2)
	SpectralMaskDenseInterrogator  = SpectralMaskType(3)
)
View Source
const (
	ID_MAC_EUI64 = IDType(0)
	ID_EPC       = IDType(1)
)
View Source
const (
	DoubleSidebandASK = FwdLinkMod(0)
	SingleSidebandASK = FwdLinkMod(1)
	PhaseReversalASK  = FwdLinkMod(2)
)
View Source
const (
	FM0     = BackscatterMod(0)
	Miller2 = BackscatterMod(1)
	Miller4 = BackscatterMod(2)
	Miller8 = BackscatterMod(3)
)
View Source
const (
	DREightToOne       = DivideRatio(0)
	DRSixtyFourToThree = DivideRatio(1)
)
View Source
const (
	GPIStateLow     = GPIStateType(0)
	GPIStateHigh    = GPIStateType(1)
	GPIStateUnknown = GPIStateType(2)
)
View Source
const (
	LockPrivRW          = LockPrivilegeType(0)
	LockPrivPermalock   = LockPrivilegeType(1)
	LockPrivPermaunlock = LockPrivilegeType(2)
	LockPrivUnlock      = LockPrivilegeType(3)
)
View Source
const (
	LockDataKillPwd    = LockDataType(0)
	LockDataAccessPwd  = LockDataType(1)
	LockDataEPCMemory  = LockDataType(2)
	LockDataTIDMemory  = LockDataType(3)
	LockDataUserMemory = LockDataType(4)
)
View Source
const (
	Version1_0_1 = VersionNum(1)
	Version1_1   = VersionNum(2)
)
View Source
const (
	StatusSuccess               = StatusCode(0)
	StatusMsgParamError         = StatusCode(100)
	StatusMsgFieldError         = StatusCode(101)
	StatusMsgParamUnexpected    = StatusCode(102)
	StatusMsgParamMissing       = StatusCode(103)
	StatusMsgParamDuplicate     = StatusCode(104)
	StatusMsgParamOverflow      = StatusCode(105)
	StatusMsgFieldOverflow      = StatusCode(106)
	StatusMsgParamUnknown       = StatusCode(107)
	StatusMsgFieldUnknown       = StatusCode(108)
	StatusMsgMsgUnsupported     = StatusCode(109)
	StatusMsgVerUnsupported     = StatusCode(110)
	StatusMsgParamUnsupported   = StatusCode(111)
	StatusMsgMsgUnexpected      = StatusCode(112)
	StatusParamParamError       = StatusCode(200)
	StatusParamFieldError       = StatusCode(201)
	StatusParamParamUnexpected  = StatusCode(202)
	StatusParamParamMissing     = StatusCode(203)
	StatusParamParamDuplicate   = StatusCode(204)
	StatusParamParamOverflow    = StatusCode(205)
	StatusParamFieldOverflow    = StatusCode(206)
	StatusParamParamUnknown     = StatusCode(207)
	StatusParamFieldUnknown     = StatusCode(208)
	StatusParamParamUnsupported = StatusCode(209)
	StatusFieldInvalid          = StatusCode(300)
	StatusFieldOutOfRange       = StatusCode(301)
	StatusDeviceError           = StatusCode(401)
)
View Source
const (
	ReaderCapAll                         = ReaderCapability(0)
	ReaderCapGeneralDeviceCapabilities   = ReaderCapability(1)
	ReaderCapLLRPCapabilities            = ReaderCapability(2)
	ReaderCapRegulatoryCapabilities      = ReaderCapability(3)
	ReaderCapAirProtocolLLRPCapabilities = ReaderCapability(4)
)
View Source
const (
	ReaderConfReqAll                  = ReaderConfigRequestedDataType(0)
	ReaderConfReqIdentification       = ReaderConfigRequestedDataType(1)
	ReaderConfReqAntennaProperties    = ReaderConfigRequestedDataType(2)
	ReaderConfReqAntennaConfig        = ReaderConfigRequestedDataType(3)
	ReaderConfReqROReportSpec         = ReaderConfigRequestedDataType(4)
	ReaderConfReqReaderEventNotifSpec = ReaderConfigRequestedDataType(5)
	ReaderConfReqAccessReportSpec     = ReaderConfigRequestedDataType(6)
	ReaderConfReqLLRPConfStateVal     = ReaderConfigRequestedDataType(7)
	ReaderConfReqKeepAliveSpec        = ReaderConfigRequestedDataType(8)
	ReaderConfReqGPIPortCurState      = ReaderConfigRequestedDataType(9)
	ReaderConfReqGPOWriteData         = ReaderConfigRequestedDataType(10)
	ReaderConfReqEventsAndReports     = ReaderConfigRequestedDataType(11)
)
View Source
const (
	InvTargetSL            = C1G2TagInventoryTargetType(0)
	InvTargetInventoriedS0 = C1G2TagInventoryTargetType(1)
	InvTargetInventoriedS1 = C1G2TagInventoryTargetType(2)
	InvTargetInventoriedS2 = C1G2TagInventoryTargetType(3)
	InvTargetInventoriedS3 = C1G2TagInventoryTargetType(4)
)
View Source
const (
	FilterActionUnspecified   = C1G2FilterTruncateActionType(0)
	FilterActionDoNotTruncate = C1G2FilterTruncateActionType(1)
	FilterActionTruncate      = C1G2FilterTruncateActionType(2)
)
View Source
const (
	AwareSelectMSetUClear  = C1G2TagInventoryStateAwareFilterActionType(0)
	AwareSelectMSetUKeep   = C1G2TagInventoryStateAwareFilterActionType(1)
	AwareSelectMKeepUClear = C1G2TagInventoryStateAwareFilterActionType(2)
	AwareSelectMFlipUKeep  = C1G2TagInventoryStateAwareFilterActionType(3)
	AwareSelectMClearUSet  = C1G2TagInventoryStateAwareFilterActionType(4)
	AwareSelectMClearUKeep = C1G2TagInventoryStateAwareFilterActionType(5)
	AwareSelectMKeepUSet   = C1G2TagInventoryStateAwareFilterActionType(6)
	AwareSelectMKeepUFlip  = C1G2TagInventoryStateAwareFilterActionType(7)
)
View Source
const (
	SessionStateA = SessionState(0)
	SessionStateB = SessionState(1)
)
View Source
const (
	SLStateAsserted   = SLState(0)
	SLStateDeasserted = SLState(1)
)
View Source
const (
	UnawareSelectMSetUClear  = C1G2TagInventoryStateUnawareFilterActionType(0)
	UnawareSelectMSetUKeep   = C1G2TagInventoryStateUnawareFilterActionType(1)
	UnawareSelectMKeepUClear = C1G2TagInventoryStateUnawareFilterActionType(2)
	UnawareSelectMClearUSet  = C1G2TagInventoryStateUnawareFilterActionType(3)
	UnawareSelectMClearUKeep = C1G2TagInventoryStateUnawareFilterActionType(4)
	UnawareSelectMKeepUSet   = C1G2TagInventoryStateUnawareFilterActionType(5)
)
View Source
const (
	MsgGetSupportedVersion           = MessageType(46)
	MsgGetSupportedVersionResponse   = MessageType(56)
	MsgSetProtocolVersion            = MessageType(47)
	MsgSetProtocolVersionResponse    = MessageType(57)
	MsgGetReaderCapabilities         = MessageType(1)
	MsgGetReaderCapabilitiesResponse = MessageType(11)
	MsgAddROSpec                     = MessageType(20)
	MsgAddROSpecResponse             = MessageType(30)
	MsgDeleteROSpec                  = MessageType(21)
	MsgDeleteROSpecResponse          = MessageType(31)
	MsgStartROSpec                   = MessageType(22)
	MsgStartROSpecResponse           = MessageType(32)
	MsgStopROSpec                    = MessageType(23)
	MsgStopROSpecResponse            = MessageType(33)
	MsgEnableROSpec                  = MessageType(24)
	MsgEnableROSpecResponse          = MessageType(34)
	MsgDisableROSpec                 = MessageType(25)
	MsgDisableROSpecResponse         = MessageType(35)
	MsgGetROSpecs                    = MessageType(26)
	MsgGetROSpecsResponse            = MessageType(36)
	MsgAddAccessSpec                 = MessageType(40)
	MsgAddAccessSpecResponse         = MessageType(50)
	MsgDeleteAccessSpec              = MessageType(41)
	MsgDeleteAccessSpecResponse      = MessageType(51)
	MsgEnableAccessSpec              = MessageType(42)
	MsgEnableAccessSpecResponse      = MessageType(52)
	MsgDisableAccessSpec             = MessageType(43)
	MsgDisableAccessSpecResponse     = MessageType(53)
	MsgGetAccessSpecs                = MessageType(44)
	MsgGetAccessSpecsResponse        = MessageType(54)
	MsgClientRequestOp               = MessageType(45)
	MsgClientRequestOpResponse       = MessageType(55)
	MsgGetReport                     = MessageType(60)
	MsgROAccessReport                = MessageType(61)
	MsgKeepAlive                     = MessageType(62)
	MsgKeepAliveAck                  = MessageType(72)
	MsgReaderEventNotification       = MessageType(63)
	MsgEnableEventsAndReports        = MessageType(64)
	MsgErrorMessage                  = MessageType(100)
	MsgGetReaderConfig               = MessageType(2)
	MsgGetReaderConfigResponse       = MessageType(12)
	MsgSetReaderConfig               = MessageType(3)
	MsgSetReaderConfigResponse       = MessageType(13)
	MsgCloseConnection               = MessageType(14)
	MsgCloseConnectionResponse       = MessageType(4)
	MsgCustomMessage                 = MessageType(1023)
)
View Source
const (
	ParamAntennaID                 = ParamType(1)
	ParamFirstSeenUTC              = ParamType(2)
	ParamFirstSeenUptime           = ParamType(3)
	ParamLastSeenUTC               = ParamType(4)
	ParamLastSeenUptime            = ParamType(5)
	ParamPeakRSSI                  = ParamType(6)
	ParamChannelIndex              = ParamType(7)
	ParamTagSeenCount              = ParamType(8)
	ParamROSpecID                  = ParamType(9)
	ParamInventoryParameterSpecID  = ParamType(10)
	ParamC1G2CRC                   = ParamType(11)
	ParamC1G2PC                    = ParamType(12)
	ParamEPC96                     = ParamType(13)
	ParamSpecIndex                 = ParamType(14)
	ParamClientRequestOpSpecResult = ParamType(15)
	ParamAccessSpecID              = ParamType(16)
	ParamOpSpecID                  = ParamType(17)
	ParamC1G2SingulationDetails    = ParamType(18)
	ParamC1G2XPCW1                 = ParamType(19)
	ParamC1G2XPCW2                 = ParamType(20)

	ParamUTCTimestamp                      = ParamType(128)
	ParamUptime                            = ParamType(129)
	ParamGeneralDeviceCapabilities         = ParamType(137)
	ParamReceiveSensitivityTableEntry      = ParamType(139)
	ParamPerAntennaAirProtocol             = ParamType(140)
	ParamGPIOCapabilities                  = ParamType(141)
	ParamLLRPCapabilities                  = ParamType(142)
	ParamRegulatoryCapabilities            = ParamType(143)
	ParamUHFBandCapabilities               = ParamType(144)
	ParamTransmitPowerLevelTableEntry      = ParamType(145)
	ParamFrequencyInformation              = ParamType(146)
	ParamFrequencyHopTable                 = ParamType(147)
	ParamFixedFrequencyTable               = ParamType(148)
	ParamPerAntennaReceiveSensitivityRange = ParamType(149)
	ParamROSpec                            = ParamType(177)
	ParamROBoundarySpec                    = ParamType(178)
	ParamROSpecStartTrigger                = ParamType(179)
	ParamPeriodicTriggerValue              = ParamType(180)
	ParamGPITriggerValue                   = ParamType(181)
	ParamROSpecStopTrigger                 = ParamType(182)
	ParamAISpec                            = ParamType(183)
	ParamAISpecStopTrigger                 = ParamType(184)
	ParamTagObservationTrigger             = ParamType(185)
	ParamInventoryParameterSpec            = ParamType(186)
	ParamRFSurveySpec                      = ParamType(187)
	ParamRFSurveySpecStopTrigger           = ParamType(188)
	ParamAccessSpec                        = ParamType(207)
	ParamAccessSpecStopTrigger             = ParamType(208)
	ParamAccessCommand                     = ParamType(209)
	ParamClientRequestOpSpec               = ParamType(210)
	ParamClientRequestResponse             = ParamType(211)
	ParamLLRPConfigurationStateValue       = ParamType(217)
	ParamIdentification                    = ParamType(218)
	ParamGPOWriteData                      = ParamType(219)
	ParamKeepAliveSpec                     = ParamType(220)
	ParamAntennaProperties                 = ParamType(221)
	ParamAntennaConfiguration              = ParamType(222)
	ParamRFReceiver                        = ParamType(223)
	ParamRFTransmitter                     = ParamType(224)
	ParamGPIPortCurrentState               = ParamType(225)
	ParamEventsAndReports                  = ParamType(226)
	ParamROReportSpec                      = ParamType(237)
	ParamTagReportContentSelector          = ParamType(238)
	ParamAccessReportSpec                  = ParamType(239)
	ParamTagReportData                     = ParamType(240)
	ParamEPCData                           = ParamType(241)
	ParamRFSurveyReportData                = ParamType(242)
	ParamFrequencyRSSILevelEntry           = ParamType(243)
	ParamReaderEventNotificationSpec       = ParamType(244)
	ParamEventNotificationState            = ParamType(245)
	ParamReaderEventNotificationData       = ParamType(246)
	ParamHoppingEvent                      = ParamType(247)
	ParamGPIEvent                          = ParamType(248)
	ParamROSpecEvent                       = ParamType(249)
	ParamReportBufferLevelWarningEvent     = ParamType(250)
	ParamReportBufferOverflowErrorEvent    = ParamType(251)
	ParamReaderExceptionEvent              = ParamType(252)
	ParamRFSurveyEvent                     = ParamType(253)
	ParamAISpecEvent                       = ParamType(254)
	ParamAntennaEvent                      = ParamType(255)
	ParamConnectionAttemptEvent            = ParamType(256)
	ParamConnectionCloseEvent              = ParamType(257)
	ParamLLRPStatus                        = ParamType(287)
	ParamFieldError                        = ParamType(288)
	ParamParameterError                    = ParamType(289)
	ParamLoopSpec                          = ParamType(355)
	ParamSpecLoopEvent                     = ParamType(356)
	ParamCustom                            = ParamType(1023)

	ParamC1G2LLRPCapabilities                        = ParamType(327)
	ParamUHFC1G2RFModeTable                          = ParamType(328)
	ParamUHFC1G2RFModeTableEntry                     = ParamType(329)
	ParamC1G2InventoryCommand                        = ParamType(330)
	ParamC1G2Filter                                  = ParamType(331)
	ParamC1G2TagInventoryMask                        = ParamType(332)
	ParamC1G2TagInventoryStateAwareFilterAction      = ParamType(333)
	ParamC1G2TagInventoryStateUnawareFilterAction    = ParamType(334)
	ParamC1G2RFControl                               = ParamType(335)
	ParamC1G2SingulationControl                      = ParamType(336)
	ParamC1G2TagInventoryStateAwareSingulationAction = ParamType(337)
	ParamC1G2TagSpec                                 = ParamType(338)
	ParamC1G2TargetTag                               = ParamType(339)
	ParamC1G2Read                                    = ParamType(341)
	ParamC1G2Write                                   = ParamType(342)
	ParamC1G2Kill                                    = ParamType(343)
	ParamC1G2Lock                                    = ParamType(344)
	ParamC1G2LockPayload                             = ParamType(345)
	ParamC1G2BlockErase                              = ParamType(346)
	ParamC1G2BlockWrite                              = ParamType(347)
	ParamC1G2EPCMemorySelector                       = ParamType(348)
	ParamC1G2ReadOpSpecResult                        = ParamType(349)
	ParamC1G2WriteOpSpecResult                       = ParamType(350)
	ParamC1G2KillOpSpecResult                        = ParamType(351)
	ParamC1G2LockOpSpecResult                        = ParamType(352)
	ParamC1G2BlockEraseOpSpecResult                  = ParamType(353)
	ParamC1G2BlockWriteOpSpecResult                  = ParamType(354)
	ParamC1G2Recommission                            = ParamType(357)
	ParamC1G2BlockPermalock                          = ParamType(358)
	ParamC1G2GetBlockPermalockStatus                 = ParamType(359)
	ParamC1G2RecommissionOpSpecResult                = ParamType(360)
	ParamC1G2BlockPermalockOpSpecResult              = ParamType(361)
	ParamC1G2GetBlockPermalockStatusOpSpecResult     = ParamType(362)

	ParamMaximumReceiveSensitivity     = ParamType(363)
	ParamRFSurveyFrequencyCapabilities = ParamType(365)
)
View Source
const (
	// VersionMin is the minimum LLRP version supported by this package.
	VersionMin = Version1_0_1

	// VersionMax is the maximum LLRP version supported by this package.
	// See WithVersion for more information.
	VersionMax = Version1_1

	// MaxBufferedPayloadSz is the maximum payload size permitted in responses.
	//
	// Although LLRP theoretically can handle message up to 4GiB,
	// in practice most messages are nowhere near this size.
	// One large manufacturer even states explicitly that
	// they'll simply close the connection if a message exceeds ~500KiB,
	// including outgoing tag reports.
	//
	// MessageHandlers aren't restricted to this limitation,
	// but as a result, require processing the message synchronously,
	// as the incoming message must be read in full (even if discarded)
	// before any other message can be read.
	MaxBufferedPayloadSz = uint32((1 << 10) * 640)
)
View Source
const AISpecEnded = AISpecEventType(0)
View Source
const (
	HeaderSz = 10 // LLRP message headers are 10 bytes

)
View Source
const Unspecified = CountryCodeType(0)

Variables

View Source
var (
	// ErrClientClosed is returned if an operation is attempted on a closed Client,
	// indicating that Shutdown or Close was called.
	// It may be wrapped, so to check for it, use errors.Is.
	ErrClientClosed = goErrs.New("client closed")
)

Functions

This section is empty.

Types

type AISpec

type AISpec struct {
	// AntennaIDs tells the device which antennas to use. If any of them are zero, then
	// they're all used, regardless of any other value in the array.
	AntennaIDs              []AntennaID
	StopTrigger             AISpecStopTrigger
	InventoryParameterSpecs []InventoryParameterSpec
	Custom                  []Custom
}

AISpec is Parameter 183, AISpec.

AISpec defines antenna inventory operations, which LLRP defines as "the smallest unit of interaction between a Reader and tags in the antenna's field-of-view."

An AISpec gives a list of InventoryParameterSpecs, which define how the RFID device should singulate tags. It combines this with an stop trigger and list of antennas. Each inventory spec is executed for each antenna, and the stop condition applies to the aggregate of these AI operations. The device chooses the order in which the operations are executed, regardless of the order presented.

func (*AISpec) EncodeFields

func (p *AISpec) EncodeFields(w io.Writer) error

func (*AISpec) MarshalBinary

func (p *AISpec) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 183, AISpec.

func (*AISpec) UnmarshalBinary

func (p *AISpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 183, AISpec.

type AISpecEvent

type AISpecEvent struct {
	Event              AISpecEventType
	ROSpecID           uint32
	SpecIndex          uint16
	SingulationDetails *C1G2SingulationDetails
}

AISpecEvent is Parameter 254, AISpecEvent.

func (*AISpecEvent) EncodeFields

func (p *AISpecEvent) EncodeFields(w io.Writer) error

func (*AISpecEvent) MarshalBinary

func (p *AISpecEvent) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 254, AISpecEvent.

func (*AISpecEvent) UnmarshalBinary

func (p *AISpecEvent) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 254, AISpecEvent.

type AISpecEventType

type AISpecEventType uint8

type AISpecStopTrigger

type AISpecStopTrigger struct {
	Trigger               AISpecStopTriggerType
	DurationTriggerValue  Millisecs32
	GPITrigger            *GPITriggerValue
	TagObservationTrigger *TagObservationTrigger
}

AISpecStopTrigger is Parameter 184, AISpecStopTrigger.

func (*AISpecStopTrigger) EncodeFields

func (p *AISpecStopTrigger) EncodeFields(w io.Writer) error

func (*AISpecStopTrigger) MarshalBinary

func (p *AISpecStopTrigger) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 184, AISpecStopTrigger.

func (*AISpecStopTrigger) UnmarshalBinary

func (p *AISpecStopTrigger) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 184, AISpecStopTrigger.

type AISpecStopTriggerType

type AISpecStopTriggerType uint8

AISpecStopTriggerType specifies when an Antenna Operation should terminate.

type AccessCommand

type AccessCommand struct {
	C1G2TagSpec                 C1G2TagSpec
	C1G2Read                    *C1G2Read
	C1G2Write                   *C1G2Write
	C1G2Kill                    *C1G2Kill
	C1G2Recommission            *C1G2Recommission
	C1G2Lock                    *C1G2Lock
	C1G2BlockErase              *C1G2BlockErase
	C1G2BlockWrite              *C1G2BlockWrite
	C1G2BlockPermalock          *C1G2BlockPermalock
	C1G2GetBlockPermalockStatus *C1G2GetBlockPermalockStatus
	ClientRequestOpSpec         *ClientRequestOpSpec
	Custom                      []Custom
}

AccessCommand is Parameter 209, AccessCommand.

func (*AccessCommand) EncodeFields

func (p *AccessCommand) EncodeFields(w io.Writer) error

func (*AccessCommand) MarshalBinary

func (p *AccessCommand) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 209, AccessCommand.

func (*AccessCommand) UnmarshalBinary

func (p *AccessCommand) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 209, AccessCommand.

type AccessReportSpec

type AccessReportSpec AccessReportTriggerType

AccessReportSpec is Parameter 239, AccessReportSpec.

func (*AccessReportSpec) EncodeFields

func (p *AccessReportSpec) EncodeFields(w io.Writer) error

func (*AccessReportSpec) MarshalBinary

func (p *AccessReportSpec) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 239, AccessReportSpec.

func (*AccessReportSpec) UnmarshalBinary

func (p *AccessReportSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 239, AccessReportSpec.

type AccessReportTriggerType

type AccessReportTriggerType uint8

type AccessSpec

type AccessSpec struct {
	AccessSpecID     uint32
	AntennaID        AntennaID
	AirProtocolID    AirProtocolIDType
	IsActive         bool
	ROSpecID         uint32
	Trigger          AccessSpecStopTrigger
	AccessCommand    AccessCommand
	AccessReportSpec *AccessReportSpec
	Custom           []Custom
}

AccessSpec is Parameter 207, AccessSpec.

func (*AccessSpec) EncodeFields

func (p *AccessSpec) EncodeFields(w io.Writer) error

func (*AccessSpec) MarshalBinary

func (p *AccessSpec) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 207, AccessSpec.

func (*AccessSpec) UnmarshalBinary

func (p *AccessSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 207, AccessSpec.

type AccessSpecID

type AccessSpecID uint32

AccessSpecID is Parameter 16, AccessSpecID.

func (*AccessSpecID) EncodeFields

func (p *AccessSpecID) EncodeFields(w io.Writer) error

func (*AccessSpecID) MarshalBinary

func (p *AccessSpecID) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 16, AccessSpecID.

func (*AccessSpecID) UnmarshalBinary

func (p *AccessSpecID) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 16, AccessSpecID.

type AccessSpecStopTrigger

type AccessSpecStopTrigger struct {
	Trigger             AccessSpecStopTriggerType
	OperationCountValue uint16
}

AccessSpecStopTrigger is Parameter 208, AccessSpecStopTrigger.

func (*AccessSpecStopTrigger) EncodeFields

func (p *AccessSpecStopTrigger) EncodeFields(w io.Writer) error

func (*AccessSpecStopTrigger) MarshalBinary

func (p *AccessSpecStopTrigger) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 208, AccessSpecStopTrigger.

func (*AccessSpecStopTrigger) UnmarshalBinary

func (p *AccessSpecStopTrigger) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 208, AccessSpecStopTrigger.

type AccessSpecStopTriggerType

type AccessSpecStopTriggerType uint8

type AddAccessSpec

type AddAccessSpec struct {
	AccessSpec AccessSpec
}

AddAccessSpec is Message 40, AddAccessSpec.

func (*AddAccessSpec) EncodeFields

func (m *AddAccessSpec) EncodeFields(w io.Writer) error

EncodeFields for Message 40, AddAccessSpec.

func (*AddAccessSpec) MarshalBinary

func (m *AddAccessSpec) MarshalBinary() ([]byte, error)

MarshalBinary Message 40, AddAccessSpec.

func (*AddAccessSpec) Type

func (*AddAccessSpec) Type() MessageType

Type returns this message's MessageType

func (*AddAccessSpec) UnmarshalBinary

func (m *AddAccessSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 40, AddAccessSpec.

type AddAccessSpecResponse

type AddAccessSpecResponse struct {
	LLRPStatus LLRPStatus
}

AddAccessSpecResponse is Message 50, AddAccessSpecResponse.

func (*AddAccessSpecResponse) EncodeFields

func (m *AddAccessSpecResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 50, AddAccessSpecResponse.

func (*AddAccessSpecResponse) MarshalBinary

func (m *AddAccessSpecResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 50, AddAccessSpecResponse.

func (*AddAccessSpecResponse) Status

func (m *AddAccessSpecResponse) Status() LLRPStatus

Status returns this message's LLRPStatus

func (*AddAccessSpecResponse) Type

Type returns this message's MessageType

func (*AddAccessSpecResponse) UnmarshalBinary

func (m *AddAccessSpecResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 50, AddAccessSpecResponse.

type AddROSpec

type AddROSpec struct {
	ROSpec ROSpec
}

AddROSpec is Message 20, AddROSpec.

AddROSpec adds an Reader Operation Specification.

ROSpecs must be added in the Disabled state, and it's up to the client to set the ROSpecID. That ID is used to reference the spec in other messages.

func (*AddROSpec) EncodeFields

func (m *AddROSpec) EncodeFields(w io.Writer) error

EncodeFields for Message 20, AddROSpec.

func (*AddROSpec) MarshalBinary

func (m *AddROSpec) MarshalBinary() ([]byte, error)

MarshalBinary Message 20, AddROSpec.

func (*AddROSpec) Type

func (*AddROSpec) Type() MessageType

Type returns this message's MessageType

func (*AddROSpec) UnmarshalBinary

func (m *AddROSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 20, AddROSpec.

type AddROSpecResponse

type AddROSpecResponse struct {
	LLRPStatus LLRPStatus
}

AddROSpecResponse is Message 30, AddROSpecResponse.

func (*AddROSpecResponse) EncodeFields

func (m *AddROSpecResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 30, AddROSpecResponse.

func (*AddROSpecResponse) MarshalBinary

func (m *AddROSpecResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 30, AddROSpecResponse.

func (*AddROSpecResponse) Status

func (m *AddROSpecResponse) Status() LLRPStatus

Status returns this message's LLRPStatus

func (*AddROSpecResponse) Type

Type returns this message's MessageType

func (*AddROSpecResponse) UnmarshalBinary

func (m *AddROSpecResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 30, AddROSpecResponse.

type AirProtocolIDType

type AirProtocolIDType uint8

AirProtocolIDType defines the air protocols LLRP supports for accessing tags.

The air protocol determines how tags are sigulated and access operations performed, affects which parameters are permitted in certain contexts, and in theory can vary per antenna. In practice, however, there's only ever been a single one defined, and the standard hasn't been updated in ten years.

func (AirProtocolIDType) String

func (i AirProtocolIDType) String() string

type AntennaConfiguration

type AntennaConfiguration struct {
	AntennaID            AntennaID
	RFReceiver           *RFReceiver
	RFTransmitter        *RFTransmitter
	C1G2InventoryCommand *C1G2InventoryCommand
	Custom               []Custom
}

AntennaConfiguration is Parameter 222, AntennaConfiguration.

func (*AntennaConfiguration) EncodeFields

func (p *AntennaConfiguration) EncodeFields(w io.Writer) error

func (*AntennaConfiguration) MarshalBinary

func (p *AntennaConfiguration) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 222, AntennaConfiguration.

func (*AntennaConfiguration) UnmarshalBinary

func (p *AntennaConfiguration) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 222, AntennaConfiguration.

type AntennaEvent

type AntennaEvent struct {
	Event     AntennaEventType
	AntennaID AntennaID
}

AntennaEvent is Parameter 255, AntennaEvent.

func (*AntennaEvent) EncodeFields

func (p *AntennaEvent) EncodeFields(w io.Writer) error

func (*AntennaEvent) MarshalBinary

func (p *AntennaEvent) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 255, AntennaEvent.

func (*AntennaEvent) UnmarshalBinary

func (p *AntennaEvent) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 255, AntennaEvent.

type AntennaEventType

type AntennaEventType uint8

type AntennaID

type AntennaID uint16

AntennaID is Parameter 1, AntennaID.

func (*AntennaID) EncodeFields

func (p *AntennaID) EncodeFields(w io.Writer) error

func (*AntennaID) MarshalBinary

func (p *AntennaID) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 1, AntennaID.

func (*AntennaID) UnmarshalBinary

func (p *AntennaID) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 1, AntennaID.

type AntennaProperties

type AntennaProperties struct {
	AntennaConnected bool
	AntennaID        AntennaID
	// AntennaGain is the composite forward gain of the antenna, including cable loss,
	// relative a hypothetical isotropic antenna, expressed in 1/100ths of dBi.
	AntennaGain MillibelIsotropic
}

AntennaProperties is Parameter 221, AntennaProperties.

func (*AntennaProperties) EncodeFields

func (p *AntennaProperties) EncodeFields(w io.Writer) error

func (*AntennaProperties) MarshalBinary

func (p *AntennaProperties) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 221, AntennaProperties.

func (*AntennaProperties) UnmarshalBinary

func (p *AntennaProperties) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 221, AntennaProperties.

type BackscatterMod

type BackscatterMod uint8

BackscatterMod enumerates the C1G2 sub-carrier modulation types.

type BitsPerSec

type BitsPerSec = uint32

BitsPerSec are used to describe backscatter data rates.

type C1G2BlockErase

type C1G2BlockErase struct {
	OpSpecID       uint16
	AccessPassword uint32
	C1G2MemoryBank C1G2MemoryBankType
	WordAddress    uint16
	WordCount      uint16
}

C1G2BlockErase is Parameter 346, C1G2BlockErase.

func (*C1G2BlockErase) EncodeFields

func (p *C1G2BlockErase) EncodeFields(w io.Writer) error

func (*C1G2BlockErase) MarshalBinary

func (p *C1G2BlockErase) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 346, C1G2BlockErase.

func (*C1G2BlockErase) UnmarshalBinary

func (p *C1G2BlockErase) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 346, C1G2BlockErase.

type C1G2BlockEraseOpSpecResult

type C1G2BlockEraseOpSpecResult struct {
	C1G2BlockEraseResult C1G2BlockEraseResultType
	OpSpecID             uint16
}

C1G2BlockEraseOpSpecResult is Parameter 353, C1G2BlockEraseOpSpecResult.

func (*C1G2BlockEraseOpSpecResult) EncodeFields

func (p *C1G2BlockEraseOpSpecResult) EncodeFields(w io.Writer) error

func (*C1G2BlockEraseOpSpecResult) MarshalBinary

func (p *C1G2BlockEraseOpSpecResult) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 353, C1G2BlockEraseOpSpecResult.

func (*C1G2BlockEraseOpSpecResult) UnmarshalBinary

func (p *C1G2BlockEraseOpSpecResult) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 353, C1G2BlockEraseOpSpecResult.

type C1G2BlockEraseResultType

type C1G2BlockEraseResultType uint8

type C1G2BlockPermalock

type C1G2BlockPermalock struct {
	OpSpecID       uint16
	AccessPassword uint32
	C1G2MemoryBank C1G2MemoryBankType
	BlockAddress   uint16
	BlockMask      []uint16
}

C1G2BlockPermalock is Parameter 358, C1G2BlockPermalock.

func (*C1G2BlockPermalock) EncodeFields

func (p *C1G2BlockPermalock) EncodeFields(w io.Writer) error

func (*C1G2BlockPermalock) MarshalBinary

func (p *C1G2BlockPermalock) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 358, C1G2BlockPermalock.

func (*C1G2BlockPermalock) UnmarshalBinary

func (p *C1G2BlockPermalock) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 358, C1G2BlockPermalock.

type C1G2BlockPermalockOpSpecResult

type C1G2BlockPermalockOpSpecResult struct {
	C1G2BlockPermalockResult C1G2BlockPermalockResultType
	OpSpecID                 uint16
}

C1G2BlockPermalockOpSpecResult is Parameter 361, C1G2BlockPermalockOpSpecResult.

func (*C1G2BlockPermalockOpSpecResult) EncodeFields

func (p *C1G2BlockPermalockOpSpecResult) EncodeFields(w io.Writer) error

func (*C1G2BlockPermalockOpSpecResult) MarshalBinary

func (p *C1G2BlockPermalockOpSpecResult) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 361, C1G2BlockPermalockOpSpecResult.

func (*C1G2BlockPermalockOpSpecResult) UnmarshalBinary

func (p *C1G2BlockPermalockOpSpecResult) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 361, C1G2BlockPermalockOpSpecResult.

type C1G2BlockPermalockResultType

type C1G2BlockPermalockResultType uint8

type C1G2BlockWrite

type C1G2BlockWrite struct {
	OpSpecID       uint16
	AccessPassword uint32
	C1G2MemoryBank C1G2MemoryBankType
	WordAddress    uint16
	Data           []uint16
}

C1G2BlockWrite is Parameter 347, C1G2BlockWrite.

func (*C1G2BlockWrite) EncodeFields

func (p *C1G2BlockWrite) EncodeFields(w io.Writer) error

func (*C1G2BlockWrite) MarshalBinary

func (p *C1G2BlockWrite) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 347, C1G2BlockWrite.

func (*C1G2BlockWrite) UnmarshalBinary

func (p *C1G2BlockWrite) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 347, C1G2BlockWrite.

type C1G2BlockWriteOpSpecResult

type C1G2BlockWriteOpSpecResult struct {
	C1G2BlockWriteResult C1G2BlockWriteResultType
	OpSpecID             uint16
	WordsWritten         uint16
}

C1G2BlockWriteOpSpecResult is Parameter 354, C1G2BlockWriteOpSpecResult.

func (*C1G2BlockWriteOpSpecResult) EncodeFields

func (p *C1G2BlockWriteOpSpecResult) EncodeFields(w io.Writer) error

func (*C1G2BlockWriteOpSpecResult) MarshalBinary

func (p *C1G2BlockWriteOpSpecResult) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 354, C1G2BlockWriteOpSpecResult.

func (*C1G2BlockWriteOpSpecResult) UnmarshalBinary

func (p *C1G2BlockWriteOpSpecResult) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 354, C1G2BlockWriteOpSpecResult.

type C1G2BlockWriteResultType

type C1G2BlockWriteResultType uint8

type C1G2CRC

type C1G2CRC uint16

C1G2CRC is Parameter 11, C1G2CRC.

func (*C1G2CRC) EncodeFields

func (p *C1G2CRC) EncodeFields(w io.Writer) error

func (*C1G2CRC) MarshalBinary

func (p *C1G2CRC) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 11, C1G2CRC.

func (*C1G2CRC) UnmarshalBinary

func (p *C1G2CRC) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 11, C1G2CRC.

type C1G2EPCMemorySelector

type C1G2EPCMemorySelector struct {
	CRCEnabled     bool
	PCBitsEnabled  bool
	XPCBitsEnabled bool
}

C1G2EPCMemorySelector is Parameter 348, C1G2EPCMemorySelector.

func (*C1G2EPCMemorySelector) EncodeFields

func (p *C1G2EPCMemorySelector) EncodeFields(w io.Writer) error

func (*C1G2EPCMemorySelector) MarshalBinary

func (p *C1G2EPCMemorySelector) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 348, C1G2EPCMemorySelector.

func (*C1G2EPCMemorySelector) UnmarshalBinary

func (p *C1G2EPCMemorySelector) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 348, C1G2EPCMemorySelector.

type C1G2Filter

type C1G2Filter struct {
	TruncateAction      C1G2FilterTruncateActionType
	TagInventoryMask    C1G2TagInventoryMask
	AwareFilterAction   *C1G2TagInventoryStateAwareFilterAction
	UnawareFilterAction *C1G2TagInventoryStateUnawareFilterAction
}

C1G2Filter is Parameter 331, C1G2Filter.

Influences C1G2 Select commands sent before an Inventory round which can force tags' session flags into specific states. Note that as in the Gen2 standard, Truncate may only be set (action 2) in the final Filter and can only apply to the EPC memory bank.

If the Reader supports tag-inventory-aware singulation, you can set the AwareFilterAction. If not, you can use the UnawareFilterAction.

func (*C1G2Filter) EncodeFields

func (p *C1G2Filter) EncodeFields(w io.Writer) error

func (*C1G2Filter) MarshalBinary

func (p *C1G2Filter) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 331, C1G2Filter.

func (*C1G2Filter) UnmarshalBinary

func (p *C1G2Filter) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 331, C1G2Filter.

type C1G2FilterTruncateActionType

type C1G2FilterTruncateActionType uint8

type C1G2GetBlockPermalockStatus

type C1G2GetBlockPermalockStatus struct {
	OpSpecID       uint16
	AccessPassword uint32
	C1G2MemoryBank C1G2MemoryBankType
	BlockAddress   uint16
	BlockRange     uint16
}

C1G2GetBlockPermalockStatus is Parameter 359, C1G2GetBlockPermalockStatus.

func (*C1G2GetBlockPermalockStatus) EncodeFields

func (p *C1G2GetBlockPermalockStatus) EncodeFields(w io.Writer) error

func (*C1G2GetBlockPermalockStatus) MarshalBinary

func (p *C1G2GetBlockPermalockStatus) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 359, C1G2GetBlockPermalockStatus.

func (*C1G2GetBlockPermalockStatus) UnmarshalBinary

func (p *C1G2GetBlockPermalockStatus) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 359, C1G2GetBlockPermalockStatus.

type C1G2GetBlockPermalockStatusOpSpecResult

type C1G2GetBlockPermalockStatusOpSpecResult struct {
	C1G2GetBlockPermalockStatusResult C1G2GetBlockPermalockStatusResultType
	OpSpecID                          uint16
	// PermalockStatuses of each block requested.
	PermalockStatuses []uint16
}

C1G2GetBlockPermalockStatusOpSpecResult is Parameter 362, C1G2GetBlockPermalockStatusOpSpecResult.

func (*C1G2GetBlockPermalockStatusOpSpecResult) EncodeFields

func (*C1G2GetBlockPermalockStatusOpSpecResult) MarshalBinary

func (p *C1G2GetBlockPermalockStatusOpSpecResult) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 362, C1G2GetBlockPermalockStatusOpSpecResult.

func (*C1G2GetBlockPermalockStatusOpSpecResult) UnmarshalBinary

func (p *C1G2GetBlockPermalockStatusOpSpecResult) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 362, C1G2GetBlockPermalockStatusOpSpecResult.

type C1G2GetBlockPermalockStatusResultType

type C1G2GetBlockPermalockStatusResultType uint8

type C1G2InventoryCommand

type C1G2InventoryCommand struct {
	TagInventoryStateAware bool
	Filters                []C1G2Filter
	RFControl              *C1G2RFControl
	SingulationControl     *C1G2SingulationControl
	Custom                 []Custom
}

C1G2InventoryCommand is Parameter 330, C1G2InventoryCommand.

func (*C1G2InventoryCommand) EncodeFields

func (p *C1G2InventoryCommand) EncodeFields(w io.Writer) error

func (*C1G2InventoryCommand) MarshalBinary

func (p *C1G2InventoryCommand) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 330, C1G2InventoryCommand.

func (*C1G2InventoryCommand) UnmarshalBinary

func (p *C1G2InventoryCommand) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 330, C1G2InventoryCommand.

type C1G2Kill

type C1G2Kill struct {
	OpSpecID     uint16
	KillPassword uint32
}

C1G2Kill is Parameter 343, C1G2Kill.

func (*C1G2Kill) EncodeFields

func (p *C1G2Kill) EncodeFields(w io.Writer) error

func (*C1G2Kill) MarshalBinary

func (p *C1G2Kill) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 343, C1G2Kill.

func (*C1G2Kill) UnmarshalBinary

func (p *C1G2Kill) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 343, C1G2Kill.

type C1G2KillOpSpecResult

type C1G2KillOpSpecResult struct {
	C1G2KillResult C1G2KillResultType
	OpSpecID       uint16
}

C1G2KillOpSpecResult is Parameter 351, C1G2KillOpSpecResult.

func (*C1G2KillOpSpecResult) EncodeFields

func (p *C1G2KillOpSpecResult) EncodeFields(w io.Writer) error

func (*C1G2KillOpSpecResult) MarshalBinary

func (p *C1G2KillOpSpecResult) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 351, C1G2KillOpSpecResult.

func (*C1G2KillOpSpecResult) UnmarshalBinary

func (p *C1G2KillOpSpecResult) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 351, C1G2KillOpSpecResult.

type C1G2KillResultType

type C1G2KillResultType uint8

type C1G2LLRPCapabilities

type C1G2LLRPCapabilities struct {
	SupportsBlockErase         bool
	SupportsBlockWrite         bool
	SupportsBlockPermalock     bool
	SupportsTagRecommissioning bool
	SupportsUMIMethod2         bool
	SupportsXPC                bool
	// MaxSelectFiltersPerQuery can be 0 to indicate no maximum.
	MaxSelectFiltersPerQuery uint16
}

C1G2LLRPCapabilities is Parameter 327, C1G2LLRPCapabilities.

This parameter reports the C1G2-specific capabilities supported.

func (*C1G2LLRPCapabilities) EncodeFields

func (p *C1G2LLRPCapabilities) EncodeFields(w io.Writer) error

func (*C1G2LLRPCapabilities) MarshalBinary

func (p *C1G2LLRPCapabilities) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 327, C1G2LLRPCapabilities.

func (*C1G2LLRPCapabilities) UnmarshalBinary

func (p *C1G2LLRPCapabilities) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 327, C1G2LLRPCapabilities.

type C1G2Lock

type C1G2Lock struct {
	OpSpecID         uint16
	AccessPassword   uint32
	C1G2LockPayloads []C1G2LockPayload
}

C1G2Lock is Parameter 344, C1G2Lock.

func (*C1G2Lock) EncodeFields

func (p *C1G2Lock) EncodeFields(w io.Writer) error

func (*C1G2Lock) MarshalBinary

func (p *C1G2Lock) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 344, C1G2Lock.

func (*C1G2Lock) UnmarshalBinary

func (p *C1G2Lock) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 344, C1G2Lock.

type C1G2LockOpSpecResult

type C1G2LockOpSpecResult struct {
	C1G2LockResult C1G2LockResultType
	OpSpecID       uint16
}

C1G2LockOpSpecResult is Parameter 352, C1G2LockOpSpecResult.

func (*C1G2LockOpSpecResult) EncodeFields

func (p *C1G2LockOpSpecResult) EncodeFields(w io.Writer) error

func (*C1G2LockOpSpecResult) MarshalBinary

func (p *C1G2LockOpSpecResult) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 352, C1G2LockOpSpecResult.

func (*C1G2LockOpSpecResult) UnmarshalBinary

func (p *C1G2LockOpSpecResult) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 352, C1G2LockOpSpecResult.

type C1G2LockPayload

type C1G2LockPayload struct {
	LockPrivilege LockPrivilegeType
	LockData      LockDataType
}

C1G2LockPayload is Parameter 345, C1G2LockPayload.

func (*C1G2LockPayload) EncodeFields

func (p *C1G2LockPayload) EncodeFields(w io.Writer) error

func (*C1G2LockPayload) MarshalBinary

func (p *C1G2LockPayload) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 345, C1G2LockPayload.

func (*C1G2LockPayload) UnmarshalBinary

func (p *C1G2LockPayload) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 345, C1G2LockPayload.

type C1G2LockResultType

type C1G2LockResultType uint8

type C1G2MemoryBankType

type C1G2MemoryBankType = uint8

C1G2MemoryBankType selection.

type C1G2PC

type C1G2PC struct {
	EPCMemoryLength C1G2ProtoConEPCMemLength
	HasUserMemory   bool
	// HasXPC is true if the Extended Protocol Control Word 1 exists (word 21 of EPC Memory).
	HasXPC bool
	// IsISO15961 is true if the final 8 bits of the PC are an ISO Application Family
	// Identifier (AFI), as defined in ISO15961. If so, the remainder of the EPC bank
	// contains a Unique Item Identifier (UII) appropriate for that AFI. If false, the final
	// 8 bits of the PC are (or may be) Attribute Bits (applies to Gen2 v1.x tags only), and
	// the remainder of the EPC memory bank is a binary encoded EPC.
	IsISO15961 bool
	// AttributesOrAFI is either the EPC C1G2 Attributes bits, or an ISO15961 AFI, depending
	// on the whether IsISO15961 is true.
	AttributesOrAFI byte
}

C1G2PC is Parameter 12, C1G2PC.

This is the 16-bit Protocol Control field of the EPC Memory (bank 1). It indicates the number of EPC bits a tag returns to a reader, (regardless of the physical memory bank size), whether or not the tag has user memory (and contains data), whether or not an XPC is present, and whether the EPC memory bank contains a binary encoded EPC or an ISO Unique Item Identifier.

func (*C1G2PC) EncodeFields

func (p *C1G2PC) EncodeFields(w io.Writer) error

func (*C1G2PC) MarshalBinary

func (p *C1G2PC) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 12, C1G2PC.

func (*C1G2PC) UnmarshalBinary

func (p *C1G2PC) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 12, C1G2PC.

type C1G2ProtoConEPCMemLength

type C1G2ProtoConEPCMemLength = uint8

C1G2ProtoConEPCMemLength indicates number of (valid) EPC bits in the EPC Memory (bank 1) of a Gen2 tag.

type C1G2RFControl

type C1G2RFControl struct {
	// RFModeID must match one of the ModeIDs in the C1G2RFModes table that comes in the
	// UHFBandCapabilities (ParamType 144) section of the RegulatoryCapabilities (ParamType
	// 143) section of the GetReaderCapabilitiesResponse (MessageType 11)
	RFModeID uint16
	// Tari is "Type A Reference Interval", in nanoseconds. Typically, values must be
	// 6250-25000ns, though they may be restricted by the RFModes table. Usually, a client
	// can use 0 to allow the Reader to select a valid value.
	//
	// While the details are more complicated, the Tari duration is a basis for most other
	// protocol durations, so all else equal, a shorter Tari allows a higher bitrate, but
	// that's an gross oversimplification. For more information, see the EPC Class 1 Gen 2
	// standard and consult an RF engineer.
	Tari Nanosecs16
}

C1G2RFControl is Parameter 335, C1G2RFControl.

func (*C1G2RFControl) EncodeFields

func (p *C1G2RFControl) EncodeFields(w io.Writer) error

func (*C1G2RFControl) MarshalBinary

func (p *C1G2RFControl) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 335, C1G2RFControl.

func (*C1G2RFControl) UnmarshalBinary

func (p *C1G2RFControl) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 335, C1G2RFControl.

type C1G2Read

type C1G2Read struct {
	OpSpecID       uint16
	AccessPassword uint32
	C1G2MemoryBank C1G2MemoryBankType
	WordAddress    uint16
	WordCount      uint16
}

C1G2Read is Parameter 341, C1G2Read.

func (*C1G2Read) EncodeFields

func (p *C1G2Read) EncodeFields(w io.Writer) error

func (*C1G2Read) MarshalBinary

func (p *C1G2Read) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 341, C1G2Read.

func (*C1G2Read) UnmarshalBinary

func (p *C1G2Read) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 341, C1G2Read.

type C1G2ReadOpSpecResult

type C1G2ReadOpSpecResult struct {
	C1G2ReadOpSpecResultType C1G2ReadOpSpecResultType
	OpSpecID                 uint16
	Data                     []uint16
}

C1G2ReadOpSpecResult is Parameter 349, C1G2ReadOpSpecResult.

func (*C1G2ReadOpSpecResult) EncodeFields

func (p *C1G2ReadOpSpecResult) EncodeFields(w io.Writer) error

func (*C1G2ReadOpSpecResult) MarshalBinary

func (p *C1G2ReadOpSpecResult) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 349, C1G2ReadOpSpecResult.

func (*C1G2ReadOpSpecResult) UnmarshalBinary

func (p *C1G2ReadOpSpecResult) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 349, C1G2ReadOpSpecResult.

type C1G2ReadOpSpecResultType

type C1G2ReadOpSpecResultType uint8

type C1G2Recommission

type C1G2Recommission struct {
	OpSpecID     uint16
	KillPassword uint32
	SB3          bool
	SB2          bool
	LSB          bool
}

C1G2Recommission is Parameter 357, C1G2Recommission.

func (*C1G2Recommission) EncodeFields

func (p *C1G2Recommission) EncodeFields(w io.Writer) error

func (*C1G2Recommission) MarshalBinary

func (p *C1G2Recommission) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 357, C1G2Recommission.

func (*C1G2Recommission) UnmarshalBinary

func (p *C1G2Recommission) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 357, C1G2Recommission.

type C1G2RecommissionFlags

type C1G2RecommissionFlags uint8

type C1G2RecommissionOpSpecResult

type C1G2RecommissionOpSpecResult struct {
	C1G2RecommissionResult C1G2RecommissionResultType
	OpSpecID               uint16
}

C1G2RecommissionOpSpecResult is Parameter 360, C1G2RecommissionOpSpecResult.

func (*C1G2RecommissionOpSpecResult) EncodeFields

func (p *C1G2RecommissionOpSpecResult) EncodeFields(w io.Writer) error

func (*C1G2RecommissionOpSpecResult) MarshalBinary

func (p *C1G2RecommissionOpSpecResult) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 360, C1G2RecommissionOpSpecResult.

func (*C1G2RecommissionOpSpecResult) UnmarshalBinary

func (p *C1G2RecommissionOpSpecResult) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 360, C1G2RecommissionOpSpecResult.

type C1G2RecommissionResultType

type C1G2RecommissionResultType uint8

type C1G2SingulationControl

type C1G2SingulationControl struct {
	// Session number for the inventory operation (0-3).
	Session C1G2SingulationSession
	// TagPopulation expected in the antenna's field of view.
	TagPopulation uint16
	// TagTransitTime is a measure of the expected tag mobility.
	TagTransitTime Millisecs32
	InvAwareAction *C1G2TagInventoryStateAwareSingulationAction
}

C1G2SingulationControl is Parameter 336, C1G2SingulationControl.

func (*C1G2SingulationControl) EncodeFields

func (p *C1G2SingulationControl) EncodeFields(w io.Writer) error

func (*C1G2SingulationControl) MarshalBinary

func (p *C1G2SingulationControl) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 336, C1G2SingulationControl.

func (*C1G2SingulationControl) UnmarshalBinary

func (p *C1G2SingulationControl) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 336, C1G2SingulationControl.

type C1G2SingulationDetails

type C1G2SingulationDetails struct {
	NumCollisionSlots uint16
	NumEmptySlots     uint16
}

C1G2SingulationDetails is Parameter 18, C1G2SingulationDetails.

func (*C1G2SingulationDetails) EncodeFields

func (p *C1G2SingulationDetails) EncodeFields(w io.Writer) error

func (*C1G2SingulationDetails) MarshalBinary

func (p *C1G2SingulationDetails) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 18, C1G2SingulationDetails.

func (*C1G2SingulationDetails) UnmarshalBinary

func (p *C1G2SingulationDetails) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 18, C1G2SingulationDetails.

type C1G2SingulationSession

type C1G2SingulationSession = uint8

type C1G2TagInventoryMask

type C1G2TagInventoryMask struct {
	MemoryBank         C1G2MemoryBankType
	MostSignificantBit uint16
	TagMaskNumBits     uint16
	TagMask            []byte
}

C1G2TagInventoryMask is Parameter 332, C1G2TagInventoryMask.

Mask data for the C1G2 Select command.

LLRP uses a uint16 for the TagMask length, probably so that bit arrays are encoded consistently. Despite this, the Gen2 Select command uses an 8-bit mask length, so if your mask is longer than that, the Reader will either send more than one Select command, filter the data post-singulation, or do the wrong thing.

For more predictable results with an unknown Reader, consider breaking long masks into two filters.

func (*C1G2TagInventoryMask) EncodeFields

func (p *C1G2TagInventoryMask) EncodeFields(w io.Writer) error

func (*C1G2TagInventoryMask) MarshalBinary

func (p *C1G2TagInventoryMask) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 332, C1G2TagInventoryMask.

func (*C1G2TagInventoryMask) UnmarshalBinary

func (p *C1G2TagInventoryMask) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 332, C1G2TagInventoryMask.

type C1G2TagInventoryStateAwareFilterAction

type C1G2TagInventoryStateAwareFilterAction struct {
	Target       C1G2TagInventoryTargetType
	FilterAction C1G2TagInventoryStateAwareFilterActionType
}

C1G2TagInventoryStateAwareFilterAction is Parameter 333, C1G2TagInventoryStateAwareFilterAction.

func (*C1G2TagInventoryStateAwareFilterAction) EncodeFields

func (*C1G2TagInventoryStateAwareFilterAction) MarshalBinary

func (p *C1G2TagInventoryStateAwareFilterAction) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 333, C1G2TagInventoryStateAwareFilterAction.

func (*C1G2TagInventoryStateAwareFilterAction) UnmarshalBinary

func (p *C1G2TagInventoryStateAwareFilterAction) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 333, C1G2TagInventoryStateAwareFilterAction.

type C1G2TagInventoryStateAwareFilterActionType

type C1G2TagInventoryStateAwareFilterActionType uint8

type C1G2TagInventoryStateAwareSingulationAction

type C1G2TagInventoryStateAwareSingulationAction struct {
	SessionState SessionState
	SLState      SLState
}

C1G2TagInventoryStateAwareSingulationAction is Parameter 337, C1G2TagInventoryStateAwareSingulationAction.

func (*C1G2TagInventoryStateAwareSingulationAction) EncodeFields

func (*C1G2TagInventoryStateAwareSingulationAction) MarshalBinary

func (p *C1G2TagInventoryStateAwareSingulationAction) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 337, C1G2TagInventoryStateAwareSingulationAction.

func (*C1G2TagInventoryStateAwareSingulationAction) UnmarshalBinary

func (p *C1G2TagInventoryStateAwareSingulationAction) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 337, C1G2TagInventoryStateAwareSingulationAction.

type C1G2TagInventoryStateUnawareFilterAction

type C1G2TagInventoryStateUnawareFilterAction C1G2TagInventoryStateUnawareFilterActionType

C1G2TagInventoryStateUnawareFilterAction is Parameter 334, C1G2TagInventoryStateUnawareFilterAction.

func (*C1G2TagInventoryStateUnawareFilterAction) EncodeFields

func (*C1G2TagInventoryStateUnawareFilterAction) MarshalBinary

func (p *C1G2TagInventoryStateUnawareFilterAction) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 334, C1G2TagInventoryStateUnawareFilterAction.

func (*C1G2TagInventoryStateUnawareFilterAction) UnmarshalBinary

func (p *C1G2TagInventoryStateUnawareFilterAction) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 334, C1G2TagInventoryStateUnawareFilterAction.

type C1G2TagInventoryStateUnawareFilterActionType

type C1G2TagInventoryStateUnawareFilterActionType uint8

type C1G2TagInventoryTargetType

type C1G2TagInventoryTargetType uint8

type C1G2TagSpec

type C1G2TagSpec struct {
	TagPattern1 C1G2TargetTag
	TagPattern2 *C1G2TargetTag
}

C1G2TagSpec is Parameter 338, C1G2TagSpec.

func (*C1G2TagSpec) EncodeFields

func (p *C1G2TagSpec) EncodeFields(w io.Writer) error

func (*C1G2TagSpec) MarshalBinary

func (p *C1G2TagSpec) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 338, C1G2TagSpec.

func (*C1G2TagSpec) UnmarshalBinary

func (p *C1G2TagSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 338, C1G2TagSpec.

type C1G2TargetTag

type C1G2TargetTag struct {
	C1G2MemoryBank     C1G2MemoryBankType
	MatchFlag          bool
	MostSignificantBit uint16
	TagMaskNumBits     uint16
	TagMask            []byte
	TagDataNumBits     uint16
	TagData            []byte
}

C1G2TargetTag is Parameter 339, C1G2TargetTag.

func (*C1G2TargetTag) EncodeFields

func (p *C1G2TargetTag) EncodeFields(w io.Writer) error

func (*C1G2TargetTag) MarshalBinary

func (p *C1G2TargetTag) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 339, C1G2TargetTag.

func (*C1G2TargetTag) UnmarshalBinary

func (p *C1G2TargetTag) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 339, C1G2TargetTag.

type C1G2Write

type C1G2Write struct {
	OpSpecID       uint16
	AccessPassword uint32
	C1G2MemoryBank C1G2MemoryBankType
	WordAddress    uint16
	Data           []uint16
}

C1G2Write is Parameter 342, C1G2Write.

func (*C1G2Write) EncodeFields

func (p *C1G2Write) EncodeFields(w io.Writer) error

func (*C1G2Write) MarshalBinary

func (p *C1G2Write) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 342, C1G2Write.

func (*C1G2Write) UnmarshalBinary

func (p *C1G2Write) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 342, C1G2Write.

type C1G2WriteOpSpecResult

type C1G2WriteOpSpecResult struct {
	C1G2WriteOpSpecResultType C1G2WriteOpSpecResultType
	OpSpecID                  uint16
	WordsWritten              uint16
}

C1G2WriteOpSpecResult is Parameter 350, C1G2WriteOpSpecResult.

func (*C1G2WriteOpSpecResult) EncodeFields

func (p *C1G2WriteOpSpecResult) EncodeFields(w io.Writer) error

func (*C1G2WriteOpSpecResult) MarshalBinary

func (p *C1G2WriteOpSpecResult) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 350, C1G2WriteOpSpecResult.

func (*C1G2WriteOpSpecResult) UnmarshalBinary

func (p *C1G2WriteOpSpecResult) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 350, C1G2WriteOpSpecResult.

type C1G2WriteOpSpecResultType

type C1G2WriteOpSpecResultType uint8

type C1G2XPCW1

type C1G2XPCW1 uint16

C1G2XPCW1 is Parameter 19, C1G2XPCW1.

func (*C1G2XPCW1) EncodeFields

func (p *C1G2XPCW1) EncodeFields(w io.Writer) error

func (*C1G2XPCW1) MarshalBinary

func (p *C1G2XPCW1) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 19, C1G2XPCW1.

func (*C1G2XPCW1) UnmarshalBinary

func (p *C1G2XPCW1) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 19, C1G2XPCW1.

type C1G2XPCW2

type C1G2XPCW2 uint16

C1G2XPCW2 is Parameter 20, C1G2XPCW2.

func (*C1G2XPCW2) EncodeFields

func (p *C1G2XPCW2) EncodeFields(w io.Writer) error

func (*C1G2XPCW2) MarshalBinary

func (p *C1G2XPCW2) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 20, C1G2XPCW2.

func (*C1G2XPCW2) UnmarshalBinary

func (p *C1G2XPCW2) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 20, C1G2XPCW2.

type ChannelIndex

type ChannelIndex uint16

ChannelIndex is Parameter 7, ChannelIndex.

func (*ChannelIndex) EncodeFields

func (p *ChannelIndex) EncodeFields(w io.Writer) error

func (*ChannelIndex) MarshalBinary

func (p *ChannelIndex) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 7, ChannelIndex.

func (*ChannelIndex) UnmarshalBinary

func (p *ChannelIndex) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 7, ChannelIndex.

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client represents a client connection to an LLRP-compatible RFID reader.

func GetFunctionalClient

func GetFunctionalClient(t *testing.T, readerAddr string) (r *Client)

GetFunctionalClient attempts to dial and connect to an LLRP Reader at the given address.

If it's unable to connect to the address, it fails the test immediately. It registers a Cleanup function to close the connection and checks for errors, and will run automatically when the test completes.

func NewClient

func NewClient(opts ...ClientOpt) *Client

NewClient returns a Client configured by the given options.

Without options, a Client gets a default logger prefixed with its Conn address, does not set deadlines on the connection, uses the package's max LLRP version to negotiate connections, and sends ACKs to KeepAlive messages from the reader.

func (*Client) Close

func (c *Client) Close() error

Close closes the Client's connection to the reader immediately.

See Shutdown for an attempt to close the connection gracefully. After closing, the Client can no longer serve connections.

func (*Client) Connect

func (c *Client) Connect(conn net.Conn) error

Connect to an LLRP-capable device and start processing messages.

This takes ownership of the connection and blocks, serving the connection's incoming and outgoing messages until either it encounters an error or the Client is closed via a call to either Shutdown or Close. It does not close the net.Conn parameter.

It is NOT safe to call Connect more than once. Doing so has undefined results. Do not reuse a Client; create a new one. This will (likely) change in the future, but not yet.

If the Client is closed via Shutdown or Close, this returns ErrClientClosed or an error wrapping it; otherwise, it returns the first error it encounters. You can use this as a signal to identify whether the communication on a particular connection was successful. If this returns ErrClientClosed, it indicates some other portion of your code actively requested the connection to close. Any other error indicates a failed communication attempt, either due to an issue reading/writing on the connection, or the connected device severing the connection unexpectedly.

func (*Client) SendFor

func (c *Client) SendFor(ctx context.Context, out Outgoing, in Incoming) error

SendFor sends an Outgoing message and expects the Incoming reply.

This method round-trips a typical LLRP message exchange by marshaling the Outgoing message to LLRP binary, sending the message and awaiting the reply, and unmarshaling the result from LLRP binary to the Incoming struct.

It is safe to call this method even if the Client isn't connected; it blocks until the message is sent and a reply received, unless the context is canceled.

This method converts LLRP errors into *StatusErrors: if the Incoming message is an ErrorMessage, it unmarshals it and returns it as a *StatusError. If the Incoming message is Statusable (i.e., has an LLRPStatus), and that LLRPStatus is not Success, this converts it to a *StatusError.

Even if this returns a *StatusError, Incoming may be fully or partially unmarshalled, which may give useful context to the particular LLRP error details. However, if the reply message type doesn't match Incoming's type, it won't be unmarshalled, and this will return an error.

func (*Client) SendMessage

func (c *Client) SendMessage(ctx context.Context, typ MessageType, data []byte) (MessageType, []byte, error)

SendMessage sends an arbitrary payload with a header matching the given MessageType. It awaits a response to the message, then buffers and returns it.

This method can be called at any time, even before the Reader is connected, though if Closed is called before the message is sent, it will return an error wrapping ErrClientClosed. If the message does not require a payload, you may pass an empty or nil data buffer.

Also see SendFor, which makes it easier to send specific LLRP messages and SendNoWait, which sends a message without expecting a response.

func (*Client) SendNoWait

func (c *Client) SendNoWait(ctx context.Context, m Message) error

SendNoWait sends a message without awaiting the reply.

It still blocks until the message is sent, which can only happen after the connection is open and negotiated and messages earlier in the queue are sent.

func (*Client) Shutdown

func (c *Client) Shutdown(ctx context.Context) error

Shutdown attempts to gracefully close the connection.

Using Shutdown allows in-progress and queued requests to complete and sends the LLRP CloseConnection message. You can use this in combination with `Close` to attempt a graceful shutdown, followed by a forced shutdown if necessary:

    ctx, cancel = context.WithTimeout(context.Background(), time.Second)
	   defer cancel()
	   if err := r.Shutdown(ctx); err != nil {
	       if err := r.Close(); err != nil && !errors.Is(err, ErrClientClosed) {
		       panic(err)
        }
    }

It's safe to call Shutdown multiple times, but at most only one will return a nil error; others will return ErrClientClosed or an error wrapping it. if only a single code path can call Shutdown, if it returns an error, then Connect will also return an error that does NOT wrap ErrClientClosed.

type ClientLogger

type ClientLogger interface {
	ReceivedMsg(Header, VersionNum) // called with the client's current version when it receives a message
	SendingMsg(Header)              // called just before writing a message to the connection
	MsgHandled(Header)              // called after a message is sent to a handler or awaiting reply listener
	MsgUnhandled(Header)            // called if a message is discarded because it had no handler or listener
	HandlerPanic(Header, error)     // called if a handler panics while handling a message
}

ClientLogger is used by the Client to notify the user of certain events. By default, new Clients log these message with the StdLogger, but that can be changed via WithLogger.

type ClientOpt

type ClientOpt interface {
	// contains filtered or unexported methods
}

ClientOpt modifies a Client during construction.

func WithDefaultHandler

func WithDefaultHandler(handler MessageHandler) ClientOpt

WithDefaultHandler sets a handler for messages that aren't handled by either an awaiting listener or another MessageHandler.

Only a single default handler is supported. It may be set to nil, in which case unhandled non-reply messages are simply dropped.

func WithLogger

func WithLogger(l ClientLogger) ClientOpt

WithLogger sets a logger for the Client.

By default, new clients get a simple logger that outputs messages prefixed with the client's name or address and a timestamp. If you don't want any log output, set this to nil.

func WithMessageHandler

func WithMessageHandler(mt MessageType, handler MessageHandler) ClientOpt

WithMessageHandler sets a handler which will be called whenever a message of the given type arrives.

Handlers run in the same goroutine as the read side of the connection, blocking it until the handler completes. The message's payload reader is only valid while in that thread of execution; after the handler returns, any remaining unread payload is discarded. It is guarded from panics, but you should avoid any long-running operations. so if you want to start a goroutine to process the message, you'll need to copy it to a buffer within the main body of the handler.

Each message type has only a single handler, so if you wish to support multiple behaviors for a single message type, you'll need to copy and propagate the message to the other handlers. Setting a handler for the same message more than once will overwrite previously recorded handlers. Setting it to nil will delete the handler for that type. If a message doesn't have a Handler, it may be sent to a DefaultHandler, if configured.

Clients are created with a handler for KeepAlive (to send KeepAliveAck). If you override this, you'll need to acknowledge the KeepAlives yourself.

func WithStdLogger

func WithStdLogger(prefix string) ClientOpt

WithStdLogger uses the Go stdlib Logger for Client events.

This logger is used by default if the WithLogger option is not given, but if needed, this can be used to override an earlier WithLogger option (e.g., using a standard list of ClientOpts and overriding some elsewhere).

func WithTimeout

func WithTimeout(d time.Duration) ClientOpt

WithTimeout sets timeout on the connection before each read and write.

If non-zero, the client will call SetReadDeadline and SetWriteDeadline before reading or writing respectively.

Note that if set, the connection will automatically close if the RFID device fails to send a message within the timeout, as no reads will have arrived before the deadline. As a result, this is most useful when combined with LLRP KeepAlive and set to an integer multiple of the KeepAlive interval plus a small grace. In that case, the client will automatically close the connection if it fails to receive some multiple of KeepAlive messages from the RFID device.

This package does not automatically request the Reader enable KeepAlives, as their exact behavior within LLRP is technically implementation-defined (in practice, Reader manufacturers will almost certainly use them as described). Therefore, if you wish to enable KeepAlive messages, you should send a SetReaderConfiguration message.

func WithVersion

func WithVersion(v VersionNum) ClientOpt

WithVersion sets the max permitted LLRP version for this connection.

The actual version used during communication is selected upon connection using LLRP's version negotiation messages. It is the higher of the value given here and that supported by the Reader. Note that if the version is to 1.0.1, version negotiation is skipped.

This panics if given an unsupported version.

type ClientRequestOp

type ClientRequestOp struct {
	TagReportData TagReportData
}

ClientRequestOp is Message 45, ClientRequestOp.

func (*ClientRequestOp) EncodeFields

func (m *ClientRequestOp) EncodeFields(w io.Writer) error

EncodeFields for Message 45, ClientRequestOp.

func (*ClientRequestOp) MarshalBinary

func (m *ClientRequestOp) MarshalBinary() ([]byte, error)

MarshalBinary Message 45, ClientRequestOp.

func (*ClientRequestOp) Type

func (*ClientRequestOp) Type() MessageType

Type returns this message's MessageType

func (*ClientRequestOp) UnmarshalBinary

func (m *ClientRequestOp) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 45, ClientRequestOp.

type ClientRequestOpResponse

type ClientRequestOpResponse struct {
	ClientRequestResponse ClientRequestResponse
}

ClientRequestOpResponse is Message 55, ClientRequestOpResponse.

func (*ClientRequestOpResponse) EncodeFields

func (m *ClientRequestOpResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 55, ClientRequestOpResponse.

func (*ClientRequestOpResponse) MarshalBinary

func (m *ClientRequestOpResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 55, ClientRequestOpResponse.

func (*ClientRequestOpResponse) Type

Type returns this message's MessageType

func (*ClientRequestOpResponse) UnmarshalBinary

func (m *ClientRequestOpResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 55, ClientRequestOpResponse.

type ClientRequestOpSpec

type ClientRequestOpSpec uint16

ClientRequestOpSpec is Parameter 210, ClientRequestOpSpec.

func (*ClientRequestOpSpec) EncodeFields

func (p *ClientRequestOpSpec) EncodeFields(w io.Writer) error

func (*ClientRequestOpSpec) MarshalBinary

func (p *ClientRequestOpSpec) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 210, ClientRequestOpSpec.

func (*ClientRequestOpSpec) UnmarshalBinary

func (p *ClientRequestOpSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 210, ClientRequestOpSpec.

type ClientRequestOpSpecResult

type ClientRequestOpSpecResult uint16

ClientRequestOpSpecResult is Parameter 15, ClientRequestOpSpecResult.

func (*ClientRequestOpSpecResult) EncodeFields

func (p *ClientRequestOpSpecResult) EncodeFields(w io.Writer) error

func (*ClientRequestOpSpecResult) MarshalBinary

func (p *ClientRequestOpSpecResult) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 15, ClientRequestOpSpecResult.

func (*ClientRequestOpSpecResult) UnmarshalBinary

func (p *ClientRequestOpSpecResult) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 15, ClientRequestOpSpecResult.

type ClientRequestResponse

type ClientRequestResponse struct {
	AccessSpecID                uint32
	EPCData                     EPCData
	C1G2Read                    *C1G2Read
	C1G2Write                   *C1G2Write
	C1G2Kill                    *C1G2Kill
	C1G2Recommission            *C1G2Recommission
	C1G2Lock                    *C1G2Lock
	C1G2BlockErase              *C1G2BlockErase
	C1G2BlockWrite              *C1G2BlockWrite
	C1G2BlockPermalock          *C1G2BlockPermalock
	C1G2GetBlockPermalockStatus *C1G2GetBlockPermalockStatus
	ClientRequestOpSpec         *ClientRequestOpSpec
	Custom                      *Custom
}

ClientRequestResponse is Parameter 211, ClientRequestResponse.

func (*ClientRequestResponse) EncodeFields

func (p *ClientRequestResponse) EncodeFields(w io.Writer) error

func (*ClientRequestResponse) MarshalBinary

func (p *ClientRequestResponse) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 211, ClientRequestResponse.

func (*ClientRequestResponse) UnmarshalBinary

func (p *ClientRequestResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 211, ClientRequestResponse.

type CloseConnection

type CloseConnection struct{}

CloseConnection is Message 14, CloseConnection.

func (*CloseConnection) EncodeFields

func (m *CloseConnection) EncodeFields(w io.Writer) error

EncodeFields for Message 14, CloseConnection.

func (*CloseConnection) MarshalBinary

func (m *CloseConnection) MarshalBinary() ([]byte, error)

MarshalBinary Message 14, CloseConnection.

func (*CloseConnection) Type

func (*CloseConnection) Type() MessageType

Type returns this message's MessageType

func (*CloseConnection) UnmarshalBinary

func (m *CloseConnection) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 14, CloseConnection.

type CloseConnectionResponse

type CloseConnectionResponse struct {
	LLRPStatus LLRPStatus
}

CloseConnectionResponse is Message 4, CloseConnectionResponse.

func (*CloseConnectionResponse) EncodeFields

func (m *CloseConnectionResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 4, CloseConnectionResponse.

func (*CloseConnectionResponse) MarshalBinary

func (m *CloseConnectionResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 4, CloseConnectionResponse.

func (*CloseConnectionResponse) Status

func (m *CloseConnectionResponse) Status() LLRPStatus

Status returns this message's LLRPStatus

func (*CloseConnectionResponse) Type

Type returns this message's MessageType

func (*CloseConnectionResponse) UnmarshalBinary

func (m *CloseConnectionResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 4, CloseConnectionResponse.

type CommStandardType

type CommStandardType uint16

CommStandardType enumerates communication standards known to LLRP.

type ConnectionAttemptEvent

type ConnectionAttemptEvent ConnectionAttemptEventType

ConnectionAttemptEvent is Parameter 256, ConnectionAttemptEvent.

func (*ConnectionAttemptEvent) EncodeFields

func (p *ConnectionAttemptEvent) EncodeFields(w io.Writer) error

func (*ConnectionAttemptEvent) MarshalBinary

func (p *ConnectionAttemptEvent) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 256, ConnectionAttemptEvent.

func (*ConnectionAttemptEvent) UnmarshalBinary

func (p *ConnectionAttemptEvent) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 256, ConnectionAttemptEvent.

type ConnectionAttemptEventType

type ConnectionAttemptEventType uint16

func (ConnectionAttemptEventType) String

type ConnectionCloseEvent

type ConnectionCloseEvent struct{}

ConnectionCloseEvent is Parameter 257, ConnectionCloseEvent.

func (*ConnectionCloseEvent) EncodeFields

func (p *ConnectionCloseEvent) EncodeFields(w io.Writer) error

func (*ConnectionCloseEvent) MarshalBinary

func (p *ConnectionCloseEvent) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 257, ConnectionCloseEvent.

func (*ConnectionCloseEvent) UnmarshalBinary

func (p *ConnectionCloseEvent) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 257, ConnectionCloseEvent.

type CountryCodeType

type CountryCodeType uint16

CountryCodeType is an ISO-3166 country code.

type Custom

type Custom struct {
	VendorID uint32
	Subtype  uint32
	Data     []byte
}

Custom is Parameter 1023, Custom.

func (*Custom) EncodeFields

func (p *Custom) EncodeFields(w io.Writer) error

func (*Custom) MarshalBinary

func (p *Custom) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 1023, Custom.

func (*Custom) UnmarshalBinary

func (p *Custom) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 1023, Custom.

type CustomMessage

type CustomMessage struct {
	VendorID       uint32
	MessageSubtype uint8
	Data           []byte
}

CustomMessage is Message 1023, CustomMessage.

func (*CustomMessage) EncodeFields

func (m *CustomMessage) EncodeFields(w io.Writer) error

EncodeFields for Message 1023, CustomMessage.

func (*CustomMessage) MarshalBinary

func (m *CustomMessage) MarshalBinary() ([]byte, error)

MarshalBinary Message 1023, CustomMessage.

func (*CustomMessage) Type

func (*CustomMessage) Type() MessageType

Type returns this message's MessageType

func (*CustomMessage) UnmarshalBinary

func (m *CustomMessage) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 1023, CustomMessage.

type Decibel

type Decibel = uint16

Decibel is 1/10 of a bel, which is the either the log10 of the ratio of a power quantity relative a reference, or 2*log10 of the ratio of an amplitude quantity relative a reference field.

In LLRP, it's used for receive sensitivity values relative the device maximum sensitivity. Although in general dBm values may be negative, LLRP restricts the ReceiveSensitivityTable's values to 0 to 128, though they require them to be transmitted using 16 bits.

type DecibelMilliwatt16

type DecibelMilliwatt16 = int16

DecibelMilliwatt16 is a 16-bit dBm value. In LLRP, it's used for maximum receive sensitivity.

type DecibelMilliwatt8

type DecibelMilliwatt8 = int8

DecibelMilliwatt8 is a 8-bit dBm value. In LLRP, it's used to represent (received signal strength indicator) RSSI.

type DeleteAccessSpec

type DeleteAccessSpec struct {
	AccessSpecID uint32
}

DeleteAccessSpec is Message 41, DeleteAccessSpec.

func (*DeleteAccessSpec) EncodeFields

func (m *DeleteAccessSpec) EncodeFields(w io.Writer) error

EncodeFields for Message 41, DeleteAccessSpec.

func (*DeleteAccessSpec) MarshalBinary

func (m *DeleteAccessSpec) MarshalBinary() ([]byte, error)

MarshalBinary Message 41, DeleteAccessSpec.

func (*DeleteAccessSpec) Type

func (*DeleteAccessSpec) Type() MessageType

Type returns this message's MessageType

func (*DeleteAccessSpec) UnmarshalBinary

func (m *DeleteAccessSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 41, DeleteAccessSpec.

type DeleteAccessSpecResponse

type DeleteAccessSpecResponse struct {
	LLRPStatus LLRPStatus
}

DeleteAccessSpecResponse is Message 51, DeleteAccessSpecResponse.

func (*DeleteAccessSpecResponse) EncodeFields

func (m *DeleteAccessSpecResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 51, DeleteAccessSpecResponse.

func (*DeleteAccessSpecResponse) MarshalBinary

func (m *DeleteAccessSpecResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 51, DeleteAccessSpecResponse.

func (*DeleteAccessSpecResponse) Status

Status returns this message's LLRPStatus

func (*DeleteAccessSpecResponse) Type

Type returns this message's MessageType

func (*DeleteAccessSpecResponse) UnmarshalBinary

func (m *DeleteAccessSpecResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 51, DeleteAccessSpecResponse.

type DeleteROSpec

type DeleteROSpec struct {
	ROSpecID uint32
}

DeleteROSpec is Message 21, DeleteROSpec.

func (*DeleteROSpec) EncodeFields

func (m *DeleteROSpec) EncodeFields(w io.Writer) error

EncodeFields for Message 21, DeleteROSpec.

func (*DeleteROSpec) MarshalBinary

func (m *DeleteROSpec) MarshalBinary() ([]byte, error)

MarshalBinary Message 21, DeleteROSpec.

func (*DeleteROSpec) Type

func (*DeleteROSpec) Type() MessageType

Type returns this message's MessageType

func (*DeleteROSpec) UnmarshalBinary

func (m *DeleteROSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 21, DeleteROSpec.

type DeleteROSpecResponse

type DeleteROSpecResponse struct {
	LLRPStatus LLRPStatus
}

DeleteROSpecResponse is Message 31, DeleteROSpecResponse.

func (*DeleteROSpecResponse) EncodeFields

func (m *DeleteROSpecResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 31, DeleteROSpecResponse.

func (*DeleteROSpecResponse) MarshalBinary

func (m *DeleteROSpecResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 31, DeleteROSpecResponse.

func (*DeleteROSpecResponse) Status

func (m *DeleteROSpecResponse) Status() LLRPStatus

Status returns this message's LLRPStatus

func (*DeleteROSpecResponse) Type

Type returns this message's MessageType

func (*DeleteROSpecResponse) UnmarshalBinary

func (m *DeleteROSpecResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 31, DeleteROSpecResponse.

type DisableAccessSpec

type DisableAccessSpec struct {
	AccessSpecID uint32
}

DisableAccessSpec is Message 43, DisableAccessSpec.

func (*DisableAccessSpec) EncodeFields

func (m *DisableAccessSpec) EncodeFields(w io.Writer) error

EncodeFields for Message 43, DisableAccessSpec.

func (*DisableAccessSpec) MarshalBinary

func (m *DisableAccessSpec) MarshalBinary() ([]byte, error)

MarshalBinary Message 43, DisableAccessSpec.

func (*DisableAccessSpec) Type

Type returns this message's MessageType

func (*DisableAccessSpec) UnmarshalBinary

func (m *DisableAccessSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 43, DisableAccessSpec.

type DisableAccessSpecResponse

type DisableAccessSpecResponse struct {
	LLRPStatus LLRPStatus
}

DisableAccessSpecResponse is Message 53, DisableAccessSpecResponse.

func (*DisableAccessSpecResponse) EncodeFields

func (m *DisableAccessSpecResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 53, DisableAccessSpecResponse.

func (*DisableAccessSpecResponse) MarshalBinary

func (m *DisableAccessSpecResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 53, DisableAccessSpecResponse.

func (*DisableAccessSpecResponse) Status

Status returns this message's LLRPStatus

func (*DisableAccessSpecResponse) Type

Type returns this message's MessageType

func (*DisableAccessSpecResponse) UnmarshalBinary

func (m *DisableAccessSpecResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 53, DisableAccessSpecResponse.

type DisableROSpec

type DisableROSpec struct {
	ROSpecID uint32
}

DisableROSpec is Message 25, DisableROSpec.

func (*DisableROSpec) EncodeFields

func (m *DisableROSpec) EncodeFields(w io.Writer) error

EncodeFields for Message 25, DisableROSpec.

func (*DisableROSpec) MarshalBinary

func (m *DisableROSpec) MarshalBinary() ([]byte, error)

MarshalBinary Message 25, DisableROSpec.

func (*DisableROSpec) Type

func (*DisableROSpec) Type() MessageType

Type returns this message's MessageType

func (*DisableROSpec) UnmarshalBinary

func (m *DisableROSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 25, DisableROSpec.

type DisableROSpecResponse

type DisableROSpecResponse struct {
	LLRPStatus LLRPStatus
}

DisableROSpecResponse is Message 35, DisableROSpecResponse.

func (*DisableROSpecResponse) EncodeFields

func (m *DisableROSpecResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 35, DisableROSpecResponse.

func (*DisableROSpecResponse) MarshalBinary

func (m *DisableROSpecResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 35, DisableROSpecResponse.

func (*DisableROSpecResponse) Status

func (m *DisableROSpecResponse) Status() LLRPStatus

Status returns this message's LLRPStatus

func (*DisableROSpecResponse) Type

Type returns this message's MessageType

func (*DisableROSpecResponse) UnmarshalBinary

func (m *DisableROSpecResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 35, DisableROSpecResponse.

type DivideRatio

type DivideRatio uint8

DivideRatio is used by a tag to determine BLF in C1G2. See UHFC1G2RFModeTable.

type EPC96

type EPC96 struct {
	EPC []byte
}

EPC96 is Parameter 13, EPC96.

func (*EPC96) EncodeFields

func (p *EPC96) EncodeFields(w io.Writer) error

func (*EPC96) MarshalBinary

func (p *EPC96) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 13, EPC96.

func (*EPC96) UnmarshalBinary

func (p *EPC96) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 13, EPC96.

type EPCData

type EPCData struct {
	EPCNumBits uint16
	EPC        []byte
}

EPCData is Parameter 241, EPCData.

func (*EPCData) EncodeFields

func (p *EPCData) EncodeFields(w io.Writer) error

func (*EPCData) MarshalBinary

func (p *EPCData) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 241, EPCData.

func (*EPCData) UnmarshalBinary

func (p *EPCData) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 241, EPCData.

type EnableAccessSpec

type EnableAccessSpec struct {
	AccessSpecID uint32
}

EnableAccessSpec is Message 42, EnableAccessSpec.

func (*EnableAccessSpec) EncodeFields

func (m *EnableAccessSpec) EncodeFields(w io.Writer) error

EncodeFields for Message 42, EnableAccessSpec.

func (*EnableAccessSpec) MarshalBinary

func (m *EnableAccessSpec) MarshalBinary() ([]byte, error)

MarshalBinary Message 42, EnableAccessSpec.

func (*EnableAccessSpec) Type

func (*EnableAccessSpec) Type() MessageType

Type returns this message's MessageType

func (*EnableAccessSpec) UnmarshalBinary

func (m *EnableAccessSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 42, EnableAccessSpec.

type EnableAccessSpecResponse

type EnableAccessSpecResponse struct {
	LLRPStatus LLRPStatus
}

EnableAccessSpecResponse is Message 52, EnableAccessSpecResponse.

func (*EnableAccessSpecResponse) EncodeFields

func (m *EnableAccessSpecResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 52, EnableAccessSpecResponse.

func (*EnableAccessSpecResponse) MarshalBinary

func (m *EnableAccessSpecResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 52, EnableAccessSpecResponse.

func (*EnableAccessSpecResponse) Status

Status returns this message's LLRPStatus

func (*EnableAccessSpecResponse) Type

Type returns this message's MessageType

func (*EnableAccessSpecResponse) UnmarshalBinary

func (m *EnableAccessSpecResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 52, EnableAccessSpecResponse.

type EnableEventsAndReports

type EnableEventsAndReports struct{}

EnableEventsAndReports is Message 64, EnableEventsAndReports.

func (*EnableEventsAndReports) EncodeFields

func (m *EnableEventsAndReports) EncodeFields(w io.Writer) error

EncodeFields for Message 64, EnableEventsAndReports.

func (*EnableEventsAndReports) MarshalBinary

func (m *EnableEventsAndReports) MarshalBinary() ([]byte, error)

MarshalBinary Message 64, EnableEventsAndReports.

func (*EnableEventsAndReports) Type

Type returns this message's MessageType

func (*EnableEventsAndReports) UnmarshalBinary

func (m *EnableEventsAndReports) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 64, EnableEventsAndReports.

type EnableROSpec

type EnableROSpec struct {
	ROSpecID uint32
}

EnableROSpec is Message 24, EnableROSpec.

EnableROSpec moves and ROSpec from Disabled to Inactive.

The SpecID may be 0, in which case all ROSpecs will be enabled. If the ROSpec has an Immediate start trigger, enabling it will also activate it, provided no other necessary prevent it from starting (e.g., its priority is lower than another enabled spec).

func (*EnableROSpec) EncodeFields

func (m *EnableROSpec) EncodeFields(w io.Writer) error

EncodeFields for Message 24, EnableROSpec.

func (*EnableROSpec) MarshalBinary

func (m *EnableROSpec) MarshalBinary() ([]byte, error)

MarshalBinary Message 24, EnableROSpec.

func (*EnableROSpec) Type

func (*EnableROSpec) Type() MessageType

Type returns this message's MessageType

func (*EnableROSpec) UnmarshalBinary

func (m *EnableROSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 24, EnableROSpec.

type EnableROSpecResponse

type EnableROSpecResponse struct {
	LLRPStatus LLRPStatus
}

EnableROSpecResponse is Message 34, EnableROSpecResponse.

func (*EnableROSpecResponse) EncodeFields

func (m *EnableROSpecResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 34, EnableROSpecResponse.

func (*EnableROSpecResponse) MarshalBinary

func (m *EnableROSpecResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 34, EnableROSpecResponse.

func (*EnableROSpecResponse) Status

func (m *EnableROSpecResponse) Status() LLRPStatus

Status returns this message's LLRPStatus

func (*EnableROSpecResponse) Type

Type returns this message's MessageType

func (*EnableROSpecResponse) UnmarshalBinary

func (m *EnableROSpecResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 34, EnableROSpecResponse.

type Encodable

type Encodable interface {
	Incoming
	Outgoing
}

type ErrorMessage

type ErrorMessage struct {
	LLRPStatus LLRPStatus
}

ErrorMessage is Message 100, ErrorMessage.

func (*ErrorMessage) EncodeFields

func (m *ErrorMessage) EncodeFields(w io.Writer) error

EncodeFields for Message 100, ErrorMessage.

func (*ErrorMessage) MarshalBinary

func (m *ErrorMessage) MarshalBinary() ([]byte, error)

MarshalBinary Message 100, ErrorMessage.

func (*ErrorMessage) Status

func (m *ErrorMessage) Status() LLRPStatus

Status returns this message's LLRPStatus

func (*ErrorMessage) Type

func (*ErrorMessage) Type() MessageType

Type returns this message's MessageType

func (*ErrorMessage) UnmarshalBinary

func (m *ErrorMessage) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 100, ErrorMessage.

type EventNotificationState

type EventNotificationState struct {
	ReaderEventType     ReaderEventType
	NotificationEnabled bool
}

EventNotificationState is Parameter 245, EventNotificationState.

func (*EventNotificationState) EncodeFields

func (p *EventNotificationState) EncodeFields(w io.Writer) error

func (*EventNotificationState) MarshalBinary

func (p *EventNotificationState) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 245, EventNotificationState.

func (*EventNotificationState) UnmarshalBinary

func (p *EventNotificationState) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 245, EventNotificationState.

type EventsAndReports

type EventsAndReports bool

EventsAndReports is Parameter 226, EventsAndReports.

func (*EventsAndReports) EncodeFields

func (p *EventsAndReports) EncodeFields(w io.Writer) error

func (*EventsAndReports) MarshalBinary

func (p *EventsAndReports) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 226, EventsAndReports.

func (*EventsAndReports) UnmarshalBinary

func (p *EventsAndReports) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 226, EventsAndReports.

type FieldError

type FieldError struct {
	FieldIndex uint16
	ErrorCode  StatusCode
}

FieldError is Parameter 288, FieldError.

func (*FieldError) EncodeFields

func (p *FieldError) EncodeFields(w io.Writer) error

func (FieldError) Error

func (fe FieldError) Error() string

func (*FieldError) MarshalBinary

func (p *FieldError) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 288, FieldError.

func (*FieldError) UnmarshalBinary

func (p *FieldError) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 288, FieldError.

type FirstSeenUTC

type FirstSeenUTC Microsecs64

FirstSeenUTC is Parameter 2, FirstSeenUTC.

func (*FirstSeenUTC) EncodeFields

func (p *FirstSeenUTC) EncodeFields(w io.Writer) error

func (*FirstSeenUTC) MarshalBinary

func (p *FirstSeenUTC) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 2, FirstSeenUTC.

func (*FirstSeenUTC) UnmarshalBinary

func (p *FirstSeenUTC) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 2, FirstSeenUTC.

type FirstSeenUptime

type FirstSeenUptime Microsecs64

FirstSeenUptime is Parameter 3, FirstSeenUptime.

func (*FirstSeenUptime) EncodeFields

func (p *FirstSeenUptime) EncodeFields(w io.Writer) error

func (*FirstSeenUptime) MarshalBinary

func (p *FirstSeenUptime) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 3, FirstSeenUptime.

func (*FirstSeenUptime) UnmarshalBinary

func (p *FirstSeenUptime) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 3, FirstSeenUptime.

type FixedFrequencyTable

type FixedFrequencyTable struct {
	Frequencies []Kilohertz
}

FixedFrequencyTable is Parameter 148, FixedFrequencyTable.

func (*FixedFrequencyTable) EncodeFields

func (p *FixedFrequencyTable) EncodeFields(w io.Writer) error

func (*FixedFrequencyTable) MarshalBinary

func (p *FixedFrequencyTable) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 148, FixedFrequencyTable.

func (*FixedFrequencyTable) UnmarshalBinary

func (p *FixedFrequencyTable) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 148, FixedFrequencyTable.

type FrequencyHopTable

type FrequencyHopTable struct {
	HopTableID  uint8
	Frequencies []Kilohertz
}

FrequencyHopTable is Parameter 147, FrequencyHopTable.

func (*FrequencyHopTable) EncodeFields

func (p *FrequencyHopTable) EncodeFields(w io.Writer) error

func (*FrequencyHopTable) MarshalBinary

func (p *FrequencyHopTable) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 147, FrequencyHopTable.

func (*FrequencyHopTable) UnmarshalBinary

func (p *FrequencyHopTable) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 147, FrequencyHopTable.

type FrequencyInformation

type FrequencyInformation struct {
	Hopping             bool
	FrequencyHopTables  []FrequencyHopTable
	FixedFrequencyTable *FixedFrequencyTable
}

FrequencyInformation is Parameter 146, FrequencyInformation.

In hopping regulatory regions, Hopping is true, and the Reader will send zero or more FrequencyHopTables, each with a HopTableID and list of frequencies. In fixed frequency regulatory regions, Hopping is false, and the Reader sends a fixed frequency table instead.

In both cases, the "table" is just a list of available frequencies. The "ChannelIndex" is a frequency's 1-based offset in its list, so ChannelIndex 1 is Frequencies[0]. Other parameters will reference these values using a ChannelIndex, as well as the HopTableID if Hopping is true.

func (*FrequencyInformation) EncodeFields

func (p *FrequencyInformation) EncodeFields(w io.Writer) error

func (*FrequencyInformation) MarshalBinary

func (p *FrequencyInformation) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 146, FrequencyInformation.

func (*FrequencyInformation) UnmarshalBinary

func (p *FrequencyInformation) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 146, FrequencyInformation.

type FrequencyRSSILevelEntry

type FrequencyRSSILevelEntry struct {
	Frequency    Kilohertz
	Bandwidth    Kilohertz
	AverageRSSI  DecibelMilliwatt8
	PeakRSSI     DecibelMilliwatt8
	UTCTimestamp UTCTimestamp
	Uptime       Uptime
}

FrequencyRSSILevelEntry is Parameter 243, FrequencyRSSILevelEntry.

RSSI stands for "received signal strength indicator" and is a measure of the amount of power in a received radio signal. RSSI will vary based on several factors, including distance to a tag, the tag's orientation in space, and environmental factors that change how radio signals propagate and interfere.

func (*FrequencyRSSILevelEntry) EncodeFields

func (p *FrequencyRSSILevelEntry) EncodeFields(w io.Writer) error

func (*FrequencyRSSILevelEntry) MarshalBinary

func (p *FrequencyRSSILevelEntry) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 243, FrequencyRSSILevelEntry.

func (*FrequencyRSSILevelEntry) UnmarshalBinary

func (p *FrequencyRSSILevelEntry) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 243, FrequencyRSSILevelEntry.

type FwdLinkMod

type FwdLinkMod uint8

FwdLinkMod enumerates the RF carrier modulation options for a C1G2 Interrogator.

type GPIEvent

type GPIEvent struct {
	Port uint16
	// Event is the Reader-defined value of GPI that triggered the event.
	Event bool
}

GPIEvent is Parameter 248, GPIEvent.

GPIEvent is sent when a GPI changes state. If it triggers an ROSpec to start or stop, it's sent before the ROSpecEvent parameter.

func (*GPIEvent) EncodeFields

func (p *GPIEvent) EncodeFields(w io.Writer) error

func (*GPIEvent) MarshalBinary

func (p *GPIEvent) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 248, GPIEvent.

func (*GPIEvent) UnmarshalBinary

func (p *GPIEvent) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 248, GPIEvent.

type GPIOCapabilities

type GPIOCapabilities struct {
	NumGPIs uint16
	NumGPOs uint16
}

GPIOCapabilities is Parameter 141, GPIOCapabilities.

func (*GPIOCapabilities) EncodeFields

func (p *GPIOCapabilities) EncodeFields(w io.Writer) error

func (*GPIOCapabilities) MarshalBinary

func (p *GPIOCapabilities) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 141, GPIOCapabilities.

func (*GPIOCapabilities) UnmarshalBinary

func (p *GPIOCapabilities) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 141, GPIOCapabilities.

type GPIPortCurrentState

type GPIPortCurrentState struct {
	Port    uint16
	Enabled bool
	State   GPIStateType
}

GPIPortCurrentState is Parameter 225, GPIPortCurrentState.

func (*GPIPortCurrentState) EncodeFields

func (p *GPIPortCurrentState) EncodeFields(w io.Writer) error

func (*GPIPortCurrentState) MarshalBinary

func (p *GPIPortCurrentState) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 225, GPIPortCurrentState.

func (*GPIPortCurrentState) UnmarshalBinary

func (p *GPIPortCurrentState) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 225, GPIPortCurrentState.

type GPIStateType

type GPIStateType uint8

type GPITriggerValue

type GPITriggerValue struct {
	Port    uint16
	Event   bool
	Timeout Millisecs32
}

GPITriggerValue is Parameter 181, GPITriggerValue.

func (*GPITriggerValue) EncodeFields

func (p *GPITriggerValue) EncodeFields(w io.Writer) error

func (*GPITriggerValue) MarshalBinary

func (p *GPITriggerValue) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 181, GPITriggerValue.

func (*GPITriggerValue) UnmarshalBinary

func (p *GPITriggerValue) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 181, GPITriggerValue.

type GPOWriteData

type GPOWriteData struct {
	Port uint16
	Data bool
}

GPOWriteData is Parameter 219, GPOWriteData.

func (*GPOWriteData) EncodeFields

func (p *GPOWriteData) EncodeFields(w io.Writer) error

func (*GPOWriteData) MarshalBinary

func (p *GPOWriteData) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 219, GPOWriteData.

func (*GPOWriteData) UnmarshalBinary

func (p *GPOWriteData) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 219, GPOWriteData.

type GeneralDeviceCapabilities

type GeneralDeviceCapabilities struct {
	MaxSupportedAntennas    uint16
	CanSetAntennaProperties bool
	HasUTCClock             bool
	// DeviceManufacturer is an IANA Private Enterprise Number (PEN).
	DeviceManufacturer                 uint32
	Model                              uint32
	FirmwareVersion                    string
	ReceiveSensitivities               []ReceiveSensitivityTableEntry
	PerAntennaReceiveSensitivityRanges []PerAntennaReceiveSensitivityRange
	GPIOCapabilities                   GPIOCapabilities
	PerAntennaAirProtocols             []PerAntennaAirProtocol
	MaximumReceiveSensitivity          *MaximumReceiveSensitivity
}

GeneralDeviceCapabilities is Parameter 137, GeneralDeviceCapabilities.

This parameter specifies what the Reader supports, primarily with respect to antenna control. It also gives some identifying information about the device make, model, and firmware.

Some LLRP messages permit either a UTC timestamp or Uptime parameter. If HasUTCClock is false, the Reader uses Uptime, and reports the number of microseconds since it powered on. If it has a UTC clock, then it reports its timestamps as microseconds since the beginning of time (1970-Jan-01, midnight).

The most common messages carry a timestamp, so they'll have one or the other of UTC or Uptime, but not both. In most cases, this package use pointer struct fields for 0..1 parameters, allowing nil to signal that the parameter isn't present. For reasons related to implementation simplicity and performance, both UTC and Uptime are presented as non-pointer struct fields. During unmarshaling, it'll set the correct value and leave the other 0 (or report an error if both are present or both are missing). During marshaling, if both are set, it will only marshal the UTC value.

If a Reader doesn't support controlling receive sensitivity, it returns a single table entry with the value 0. If it supports multiple antennas each with unique sensitivities, the table contains an entry for the union of all possible sensitivities, and the PerAntennaReceiveSensitivityRanges maps antenna IDs to ranges of indices into this table.

func (*GeneralDeviceCapabilities) EncodeFields

func (p *GeneralDeviceCapabilities) EncodeFields(w io.Writer) error

func (*GeneralDeviceCapabilities) MarshalBinary

func (p *GeneralDeviceCapabilities) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 137, GeneralDeviceCapabilities.

func (*GeneralDeviceCapabilities) UnmarshalBinary

func (p *GeneralDeviceCapabilities) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 137, GeneralDeviceCapabilities.

type GetAccessSpecs

type GetAccessSpecs struct{}

GetAccessSpecs is Message 44, GetAccessSpecs.

func (*GetAccessSpecs) EncodeFields

func (m *GetAccessSpecs) EncodeFields(w io.Writer) error

EncodeFields for Message 44, GetAccessSpecs.

func (*GetAccessSpecs) MarshalBinary

func (m *GetAccessSpecs) MarshalBinary() ([]byte, error)

MarshalBinary Message 44, GetAccessSpecs.

func (*GetAccessSpecs) Type

func (*GetAccessSpecs) Type() MessageType

Type returns this message's MessageType

func (*GetAccessSpecs) UnmarshalBinary

func (m *GetAccessSpecs) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 44, GetAccessSpecs.

type GetAccessSpecsResponse

type GetAccessSpecsResponse struct {
	LLRPStatus  LLRPStatus
	AccessSpecs []AccessSpec
}

GetAccessSpecsResponse is Message 54, GetAccessSpecsResponse.

func (*GetAccessSpecsResponse) EncodeFields

func (m *GetAccessSpecsResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 54, GetAccessSpecsResponse.

func (*GetAccessSpecsResponse) MarshalBinary

func (m *GetAccessSpecsResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 54, GetAccessSpecsResponse.

func (*GetAccessSpecsResponse) Status

func (m *GetAccessSpecsResponse) Status() LLRPStatus

Status returns this message's LLRPStatus

func (*GetAccessSpecsResponse) Type

Type returns this message's MessageType

func (*GetAccessSpecsResponse) UnmarshalBinary

func (m *GetAccessSpecsResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 54, GetAccessSpecsResponse.

type GetROSpecs

type GetROSpecs struct{}

GetROSpecs is Message 26, GetROSpecs.

func (*GetROSpecs) EncodeFields

func (m *GetROSpecs) EncodeFields(w io.Writer) error

EncodeFields for Message 26, GetROSpecs.

func (*GetROSpecs) MarshalBinary

func (m *GetROSpecs) MarshalBinary() ([]byte, error)

MarshalBinary Message 26, GetROSpecs.

func (*GetROSpecs) Type

func (*GetROSpecs) Type() MessageType

Type returns this message's MessageType

func (*GetROSpecs) UnmarshalBinary

func (m *GetROSpecs) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 26, GetROSpecs.

type GetROSpecsResponse

type GetROSpecsResponse struct {
	LLRPStatus LLRPStatus
	ROSpecs    []ROSpec
}

GetROSpecsResponse is Message 36, GetROSpecsResponse.

func (*GetROSpecsResponse) EncodeFields

func (m *GetROSpecsResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 36, GetROSpecsResponse.

func (*GetROSpecsResponse) MarshalBinary

func (m *GetROSpecsResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 36, GetROSpecsResponse.

func (*GetROSpecsResponse) Status

func (m *GetROSpecsResponse) Status() LLRPStatus

Status returns this message's LLRPStatus

func (*GetROSpecsResponse) Type

Type returns this message's MessageType

func (*GetROSpecsResponse) UnmarshalBinary

func (m *GetROSpecsResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 36, GetROSpecsResponse.

type GetReaderCapabilities

type GetReaderCapabilities struct {
	ReaderCapabilitiesRequestedData ReaderCapability
	Custom                          []Custom
}

GetReaderCapabilities is Message 1, GetReaderCapabilities.

func (*GetReaderCapabilities) EncodeFields

func (m *GetReaderCapabilities) EncodeFields(w io.Writer) error

EncodeFields for Message 1, GetReaderCapabilities.

func (*GetReaderCapabilities) MarshalBinary

func (m *GetReaderCapabilities) MarshalBinary() ([]byte, error)

MarshalBinary Message 1, GetReaderCapabilities.

func (*GetReaderCapabilities) Type

Type returns this message's MessageType

func (*GetReaderCapabilities) UnmarshalBinary

func (m *GetReaderCapabilities) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 1, GetReaderCapabilities.

type GetReaderCapabilitiesResponse

type GetReaderCapabilitiesResponse struct {
	LLRPStatus                LLRPStatus
	GeneralDeviceCapabilities *GeneralDeviceCapabilities
	LLRPCapabilities          *LLRPCapabilities
	RegulatoryCapabilities    *RegulatoryCapabilities
	C1G2LLRPCapabilities      *C1G2LLRPCapabilities
	Custom                    []Custom
}

GetReaderCapabilitiesResponse is Message 11, GetReaderCapabilitiesResponse.

func (*GetReaderCapabilitiesResponse) EncodeFields

func (m *GetReaderCapabilitiesResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 11, GetReaderCapabilitiesResponse.

func (*GetReaderCapabilitiesResponse) MarshalBinary

func (m *GetReaderCapabilitiesResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 11, GetReaderCapabilitiesResponse.

func (*GetReaderCapabilitiesResponse) Status

Status returns this message's LLRPStatus

func (*GetReaderCapabilitiesResponse) Type

Type returns this message's MessageType

func (*GetReaderCapabilitiesResponse) UnmarshalBinary

func (m *GetReaderCapabilitiesResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 11, GetReaderCapabilitiesResponse.

type GetReaderConfig

type GetReaderConfig struct {
	AntennaID     AntennaID
	RequestedData ReaderConfigRequestedDataType
	GPIPortNum    uint16
	GPOPortNum    uint16
	Custom        []Custom
}

GetReaderConfig is Message 2, GetReaderConfig.

func (*GetReaderConfig) EncodeFields

func (m *GetReaderConfig) EncodeFields(w io.Writer) error

EncodeFields for Message 2, GetReaderConfig.

func (*GetReaderConfig) MarshalBinary

func (m *GetReaderConfig) MarshalBinary() ([]byte, error)

MarshalBinary Message 2, GetReaderConfig.

func (*GetReaderConfig) Type

func (*GetReaderConfig) Type() MessageType

Type returns this message's MessageType

func (*GetReaderConfig) UnmarshalBinary

func (m *GetReaderConfig) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 2, GetReaderConfig.

type GetReaderConfigResponse

type GetReaderConfigResponse struct {
	LLRPStatus                  LLRPStatus
	Identification              *Identification
	AntennaProperties           []AntennaProperties
	AntennaConfigurations       []AntennaConfiguration
	ReaderEventNotificationSpec *ReaderEventNotificationSpec
	ROReportSpec                *ROReportSpec
	AccessReportSpec            *AccessReportSpec
	LLRPConfigurationStateValue *LLRPConfigurationStateValue
	KeepAliveSpec               *KeepAliveSpec
	GPIPortCurrentStates        []GPIPortCurrentState
	GPOWriteData                []GPOWriteData
	EventsAndReports            *EventsAndReports
	Custom                      []Custom
}

GetReaderConfigResponse is Message 12, GetReaderConfigResponse.

func (*GetReaderConfigResponse) EncodeFields

func (m *GetReaderConfigResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 12, GetReaderConfigResponse.

func (*GetReaderConfigResponse) MarshalBinary

func (m *GetReaderConfigResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 12, GetReaderConfigResponse.

func (*GetReaderConfigResponse) Status

func (m *GetReaderConfigResponse) Status() LLRPStatus

Status returns this message's LLRPStatus

func (*GetReaderConfigResponse) Type

Type returns this message's MessageType

func (*GetReaderConfigResponse) UnmarshalBinary

func (m *GetReaderConfigResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 12, GetReaderConfigResponse.

type GetReport

type GetReport struct{}

GetReport is Message 60, GetReport.

func (*GetReport) EncodeFields

func (m *GetReport) EncodeFields(w io.Writer) error

EncodeFields for Message 60, GetReport.

func (*GetReport) MarshalBinary

func (m *GetReport) MarshalBinary() ([]byte, error)

MarshalBinary Message 60, GetReport.

func (*GetReport) Type

func (*GetReport) Type() MessageType

Type returns this message's MessageType

func (*GetReport) UnmarshalBinary

func (m *GetReport) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 60, GetReport.

type GetSupportedVersion

type GetSupportedVersion struct{}

GetSupportedVersion is Message 46, GetSupportedVersion.

func (*GetSupportedVersion) EncodeFields

func (m *GetSupportedVersion) EncodeFields(w io.Writer) error

EncodeFields for Message 46, GetSupportedVersion.

func (*GetSupportedVersion) MarshalBinary

func (m *GetSupportedVersion) MarshalBinary() ([]byte, error)

MarshalBinary Message 46, GetSupportedVersion.

func (*GetSupportedVersion) Type

Type returns this message's MessageType

func (*GetSupportedVersion) UnmarshalBinary

func (m *GetSupportedVersion) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 46, GetSupportedVersion.

type GetSupportedVersionResponse

type GetSupportedVersionResponse struct {
	CurrentVersion      VersionNum
	MaxSupportedVersion VersionNum
	LLRPStatus          LLRPStatus
}

GetSupportedVersionResponse is Message 56, GetSupportedVersionResponse.

func (*GetSupportedVersionResponse) EncodeFields

func (m *GetSupportedVersionResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 56, GetSupportedVersionResponse.

func (*GetSupportedVersionResponse) MarshalBinary

func (m *GetSupportedVersionResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 56, GetSupportedVersionResponse.

func (*GetSupportedVersionResponse) Status

Status returns this message's LLRPStatus

func (*GetSupportedVersionResponse) Type

Type returns this message's MessageType

func (*GetSupportedVersionResponse) UnmarshalBinary

func (m *GetSupportedVersionResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 56, GetSupportedVersionResponse.

type Header struct {
	// contains filtered or unexported fields
}

Header holds information about an LLRP message header.

Importantly, payloadLen does not include the header's 10 bytes; when a message is read, it's automatically subtracted, and when a message is written, it's automatically added. See header.UnmarshalBinary and header.MarshalBinary for more information.

func (*Header) MarshalBinary

func (h *Header) MarshalBinary() ([]byte, error)

MarshalBinary marshals a header to a byte array.

func (Header) String

func (h Header) String() string

func (Header) Type

func (h Header) Type() MessageType

func (*Header) UnmarshalBinary

func (h *Header) UnmarshalBinary(buf []byte) error

UnmarshalBinary unmarshals a binary LLRP message header.

The resulting payload length is the message length, less the header size, unless the subtraction would overflow, in which case this returns an error indicating the impossible size. Note that this differs from the original LLRP message length, which includes the 10 byte header.

func (Header) Version

func (h Header) Version() VersionNum

func (*Header) WriteTo

func (h *Header) WriteTo(w io.Writer) (int64, error)

WriteTo write a binary header to the given destination. It returns an error if payloadLen is too big or it uses a reserved message type, as well as the normal underlying Writer errors.

type HoppingEvent

type HoppingEvent uint16

HoppingEvent is Parameter 247, HoppingEvent.

func (*HoppingEvent) EncodeFields

func (p *HoppingEvent) EncodeFields(w io.Writer) error

func (*HoppingEvent) MarshalBinary

func (p *HoppingEvent) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 247, HoppingEvent.

func (*HoppingEvent) UnmarshalBinary

func (p *HoppingEvent) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 247, HoppingEvent.

type IDType

type IDType uint8

type Identification

type Identification struct {
	IDType IDType
	// ReaderID is "unique within the local administration domain", and may be the reader's
	// MAC in EUI-64 format or an EPC.
	ReaderID []byte
}

Identification is Parameter 218, Identification.

func (*Identification) EncodeFields

func (p *Identification) EncodeFields(w io.Writer) error

func (*Identification) MarshalBinary

func (p *Identification) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 218, Identification.

func (*Identification) UnmarshalBinary

func (p *Identification) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 218, Identification.

type Incoming

type Incoming interface {
	encoding.BinaryUnmarshaler
	Type() MessageType
}

type InventoryParameterSpec

type InventoryParameterSpec struct {
	InventoryParameterSpecID uint16
	AirProtocolID            AirProtocolIDType
	AntennaConfigurations    []AntennaConfiguration
	Custom                   []Custom
}

InventoryParameterSpec is Parameter 186, InventoryParameterSpec.

func (*InventoryParameterSpec) EncodeFields

func (p *InventoryParameterSpec) EncodeFields(w io.Writer) error

func (*InventoryParameterSpec) MarshalBinary

func (p *InventoryParameterSpec) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 186, InventoryParameterSpec.

func (*InventoryParameterSpec) UnmarshalBinary

func (p *InventoryParameterSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 186, InventoryParameterSpec.

type InventoryParameterSpecID

type InventoryParameterSpecID uint16

InventoryParameterSpecID is Parameter 10, InventoryParameterSpecID.

func (*InventoryParameterSpecID) EncodeFields

func (p *InventoryParameterSpecID) EncodeFields(w io.Writer) error

func (*InventoryParameterSpecID) MarshalBinary

func (p *InventoryParameterSpecID) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 10, InventoryParameterSpecID.

func (*InventoryParameterSpecID) UnmarshalBinary

func (p *InventoryParameterSpecID) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 10, InventoryParameterSpecID.

type KeepAlive

type KeepAlive struct{}

KeepAlive is Message 62, KeepAlive.

func (*KeepAlive) EncodeFields

func (m *KeepAlive) EncodeFields(w io.Writer) error

EncodeFields for Message 62, KeepAlive.

func (*KeepAlive) MarshalBinary

func (m *KeepAlive) MarshalBinary() ([]byte, error)

MarshalBinary Message 62, KeepAlive.

func (*KeepAlive) Type

func (*KeepAlive) Type() MessageType

Type returns this message's MessageType

func (*KeepAlive) UnmarshalBinary

func (m *KeepAlive) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 62, KeepAlive.

type KeepAliveAck

type KeepAliveAck struct{}

KeepAliveAck is Message 72, KeepAliveAck.

func (*KeepAliveAck) EncodeFields

func (m *KeepAliveAck) EncodeFields(w io.Writer) error

EncodeFields for Message 72, KeepAliveAck.

func (*KeepAliveAck) MarshalBinary

func (m *KeepAliveAck) MarshalBinary() ([]byte, error)

MarshalBinary Message 72, KeepAliveAck.

func (*KeepAliveAck) Type

func (*KeepAliveAck) Type() MessageType

Type returns this message's MessageType

func (*KeepAliveAck) UnmarshalBinary

func (m *KeepAliveAck) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 72, KeepAliveAck.

type KeepAliveSpec

type KeepAliveSpec struct {
	Trigger  KeepAliveTriggerType
	Interval Millisecs32
}

KeepAliveSpec is Parameter 220, KeepAliveSpec.

func (*KeepAliveSpec) EncodeFields

func (p *KeepAliveSpec) EncodeFields(w io.Writer) error

func (*KeepAliveSpec) MarshalBinary

func (p *KeepAliveSpec) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 220, KeepAliveSpec.

func (*KeepAliveSpec) UnmarshalBinary

func (p *KeepAliveSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 220, KeepAliveSpec.

type KeepAliveTriggerType

type KeepAliveTriggerType uint8

type Kilohertz

type Kilohertz = uint32

Kilohertz measure frequency in 1000s of cycles per second.

type LLRPCapabilities

type LLRPCapabilities struct {
	CanDoRFSurvey                          bool
	CanReportBufferFillWarning             bool
	SupportsClientRequestOpSpec            bool
	CanDoTagInventoryStateAwareSingulation bool
	SupportsEventsAndReportHolding         bool
	MaxPriorityLevelSupported              uint8
	ClientRequestedOpSpecTimeout           uint16
	MaxROSpecs                             uint32
	MaxSpecsPerROSpec                      uint32
	MaxInventoryParameterSpecsPerAISpec    uint32
	MaxAccessSpecs                         uint32
	MaxOpSpecsPerAccessSpec                uint32
}

LLRPCapabilities is Parameter 142, LLRPCapabilities.

func (*LLRPCapabilities) EncodeFields

func (p *LLRPCapabilities) EncodeFields(w io.Writer) error

func (*LLRPCapabilities) MarshalBinary

func (p *LLRPCapabilities) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 142, LLRPCapabilities.

func (*LLRPCapabilities) UnmarshalBinary

func (p *LLRPCapabilities) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 142, LLRPCapabilities.

type LLRPConfigurationStateValue

type LLRPConfigurationStateValue uint32

LLRPConfigurationStateValue is Parameter 217, LLRPConfigurationStateValue.

func (*LLRPConfigurationStateValue) EncodeFields

func (p *LLRPConfigurationStateValue) EncodeFields(w io.Writer) error

func (*LLRPConfigurationStateValue) MarshalBinary

func (p *LLRPConfigurationStateValue) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 217, LLRPConfigurationStateValue.

func (*LLRPConfigurationStateValue) UnmarshalBinary

func (p *LLRPConfigurationStateValue) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 217, LLRPConfigurationStateValue.

type LLRPStatus

type LLRPStatus struct {
	Status           StatusCode
	ErrorDescription string
	FieldError       *FieldError
	ParameterError   *ParameterError
}

LLRPStatus is Parameter 287, LLRPStatus.

func (*LLRPStatus) EncodeFields

func (p *LLRPStatus) EncodeFields(w io.Writer) error

func (*LLRPStatus) Err

func (ls *LLRPStatus) Err() error

Err returns an error represented by this LLRPStatus, if any. If the Status is Success, this returns nil.

func (*LLRPStatus) MarshalBinary

func (p *LLRPStatus) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 287, LLRPStatus.

func (*LLRPStatus) UnmarshalBinary

func (p *LLRPStatus) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 287, LLRPStatus.

type LastSeenUTC

type LastSeenUTC Microsecs64

LastSeenUTC is Parameter 4, LastSeenUTC.

func (*LastSeenUTC) EncodeFields

func (p *LastSeenUTC) EncodeFields(w io.Writer) error

func (*LastSeenUTC) MarshalBinary

func (p *LastSeenUTC) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 4, LastSeenUTC.

func (*LastSeenUTC) UnmarshalBinary

func (p *LastSeenUTC) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 4, LastSeenUTC.

type LastSeenUptime

type LastSeenUptime Microsecs64

LastSeenUptime is Parameter 5, LastSeenUptime.

func (*LastSeenUptime) EncodeFields

func (p *LastSeenUptime) EncodeFields(w io.Writer) error

func (*LastSeenUptime) MarshalBinary

func (p *LastSeenUptime) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 5, LastSeenUptime.

func (*LastSeenUptime) UnmarshalBinary

func (p *LastSeenUptime) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 5, LastSeenUptime.

type LockDataType

type LockDataType uint8

type LockPrivilegeType

type LockPrivilegeType uint8

type LoopSpec

type LoopSpec uint32

LoopSpec is Parameter 355, LoopSpec.

func (*LoopSpec) EncodeFields

func (p *LoopSpec) EncodeFields(w io.Writer) error

func (*LoopSpec) MarshalBinary

func (p *LoopSpec) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 355, LoopSpec.

func (*LoopSpec) UnmarshalBinary

func (p *LoopSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 355, LoopSpec.

type MaximumReceiveSensitivity

type MaximumReceiveSensitivity DecibelMilliwatt16

MaximumReceiveSensitivity is Parameter 363, MaximumReceiveSensitivity.

MaximumReceiveSensitivity is the maximum receive sensitivity supported by the Reader. It's required if the Reader allows receive sensitivity control, but otherwise optional.

func (*MaximumReceiveSensitivity) EncodeFields

func (p *MaximumReceiveSensitivity) EncodeFields(w io.Writer) error

func (*MaximumReceiveSensitivity) MarshalBinary

func (p *MaximumReceiveSensitivity) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 363, MaximumReceiveSensitivity.

func (*MaximumReceiveSensitivity) UnmarshalBinary

func (p *MaximumReceiveSensitivity) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 363, MaximumReceiveSensitivity.

type Message

type Message struct {
	Header
	// contains filtered or unexported fields
}

Message represents an LLRP message.

For incoming messages, payload is guaranteed not to be nil, though if the payload length is zero, it will immediately return EOF. Incoming messages can be closed to discard its payload.

For outgoing messages, payload may be nil to signal no data.

func NewByteMessage

func NewByteMessage(typ MessageType, payload []byte) (m Message, err error)

NewByteMessage uses a []byte payload to create a message. The caller should not modify the slice until the message is sent.

func NewHdrOnlyMsg

func NewHdrOnlyMsg(typ MessageType) Message

NewHdrOnlyMsg prepares a message that has no payload.

func (Message) Close

func (m Message) Close() error

Close the message by discarding any remaining payload. This returns an error if discarding fails. It's safe to call this multiple times.

func (Message) String

func (m Message) String() string

func (*Message) UnmarshalTo

func (m *Message) UnmarshalTo(v encoding.BinaryUnmarshaler) error

type MessageHandler

type MessageHandler interface {
	HandleMessage(c *Client, msg Message)
}

MessageHandler can be implemented to handle certain messages received from the Reader. See Client.WithHandler for more information.

type MessageHandlerFunc

type MessageHandlerFunc func(c *Client, msg Message)

MessageHandlerFunc can wrap a function so it can be used as a MessageHandler.

func (MessageHandlerFunc) HandleMessage

func (mhf MessageHandlerFunc) HandleMessage(c *Client, msg Message)

HandleMessage implements MessageHandler for MessageHandlerFunc by calling the function.

type MessageType

type MessageType uint16

MessageType corresponds to the LLRP binary encoding for message headers.

func (MessageType) Converse

func (mt MessageType) Converse() (MessageType, bool)

Converse returns the MessageType associated with this one, or the zero value and false if there is not a converse type.

For example, the Converse of MsgGetAccessSpecs is MsgGetAccessSpecsResponse, and vice versa, but MsgROAccessReport has no converse.

func (MessageType) IsValid

func (mt MessageType) IsValid() bool

IsValid returns true if the messageType is within the permitted messageType space.

func (MessageType) NewInstance

func (mt MessageType) NewInstance() Encodable

NewInstance returns an Encodable for the message type. If the message type is unknown, it returns nil.

func (MessageType) String

func (i MessageType) String() string

type Microsecs64

type Microsecs64 = uint64

Microsecs64 is a 64-bit number of microseconds.

It's usually used to represent a time offset since a known reference, Unix Epoch or the reader's start.

type MillibelIsotropic

type MillibelIsotropic = int16

MillibelIsotropic is dBi*100, i.e., 0.01dBi (decibel relative isotropic). In LLRP, it's used to represent antenna gain values. It's scaled by 100 to allow accurate representation at sub-dBm precision.

type MillibelMilliwatt

type MillibelMilliwatt = int16

MillibelMilliwatt is dBm*100, i.e. 0.01dBm or 1 millibel milliwatt. In LLRP, it's used to represent transmit power values. It's scaled by 100 to allow accurate representation at sub-dBm precision.

type Millisecs16

type Millisecs16 = uint16

Millisecs16 is a 16-bit number of milliseconds.

It's used to represent a timeouts or duration triggers.

type Millisecs32

type Millisecs32 = uint32

Millisecs32 is a 32-bit number of milliseconds.

It's used to represent a time offset since a known reference, usually Unix Epoch or a message receipt time. Other times, it's used as a time period or timeout, in which case 0 may mean "never timeout".

type Nanosecs16

type Nanosecs16 = uint16

Nanosecs16 is a 16-bit number of nanoseconds as used for some Tari values.

type Nanosecs32

type Nanosecs32 = uint32

Nanosecs32 is a 32-bit number of nanoseconds used for some Tari values.

type OpSpecID

type OpSpecID uint16

OpSpecID is Parameter 17, OpSpecID.

func (*OpSpecID) EncodeFields

func (p *OpSpecID) EncodeFields(w io.Writer) error

func (*OpSpecID) MarshalBinary

func (p *OpSpecID) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 17, OpSpecID.

func (*OpSpecID) UnmarshalBinary

func (p *OpSpecID) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 17, OpSpecID.

type Outgoing

type Outgoing interface {
	encoding.BinaryMarshaler
	Type() MessageType
}

type ParamType

type ParamType uint16

ParamType is an 8 or 10 bit value identifying both the encoding and content of an LLRP Parameter.

func (ParamType) IsTLV

func (pt ParamType) IsTLV() bool

IsTLV returns true if the ParamType is TLV-encoded. TLV-encoded parameters include their length in their headers.

func (ParamType) IsTV

func (pt ParamType) IsTV() bool

IsTV returns true if the ParamType is TV-encoded. TV-encoded parameters have specific lengths which must be looked up.

func (ParamType) IsValid

func (pt ParamType) IsValid() bool

IsValid returns true if the ParamType is within the valid LLRP Parameter range and not one of the reserved parameter types (900-999)

func (ParamType) String

func (i ParamType) String() string

type ParameterError

type ParameterError struct {
	ParameterType  ParamType
	ErrorCode      StatusCode
	ParameterError *ParameterError
	FieldError     *FieldError
}

ParameterError is Parameter 289, ParameterError.

func (*ParameterError) EncodeFields

func (p *ParameterError) EncodeFields(w io.Writer) error

func (*ParameterError) Error

func (pe *ParameterError) Error() string

Error constructs a string from the parameter's error.

func (*ParameterError) MarshalBinary

func (p *ParameterError) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 289, ParameterError.

func (*ParameterError) UnmarshalBinary

func (p *ParameterError) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 289, ParameterError.

type PeakRSSI

type PeakRSSI DecibelMilliwatt8

PeakRSSI is Parameter 6, PeakRSSI.

func (*PeakRSSI) EncodeFields

func (p *PeakRSSI) EncodeFields(w io.Writer) error

func (*PeakRSSI) MarshalBinary

func (p *PeakRSSI) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 6, PeakRSSI.

func (*PeakRSSI) UnmarshalBinary

func (p *PeakRSSI) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 6, PeakRSSI.

type PerAntennaAirProtocol

type PerAntennaAirProtocol struct {
	AntennaID      AntennaID
	AirProtocolIDs []AirProtocolIDType
}

PerAntennaAirProtocol is Parameter 140, PerAntennaAirProtocol.

func (*PerAntennaAirProtocol) EncodeFields

func (p *PerAntennaAirProtocol) EncodeFields(w io.Writer) error

func (*PerAntennaAirProtocol) MarshalBinary

func (p *PerAntennaAirProtocol) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 140, PerAntennaAirProtocol.

func (*PerAntennaAirProtocol) UnmarshalBinary

func (p *PerAntennaAirProtocol) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 140, PerAntennaAirProtocol.

type PerAntennaReceiveSensitivityRange

type PerAntennaReceiveSensitivityRange struct {
	AntennaID                  AntennaID
	ReceiveSensitivityIndexMin uint16
	ReceiveSensitivityIndexMax uint16
}

PerAntennaReceiveSensitivityRange is Parameter 149, PerAntennaReceiveSensitivityRange.

func (*PerAntennaReceiveSensitivityRange) EncodeFields

func (p *PerAntennaReceiveSensitivityRange) EncodeFields(w io.Writer) error

func (*PerAntennaReceiveSensitivityRange) MarshalBinary

func (p *PerAntennaReceiveSensitivityRange) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 149, PerAntennaReceiveSensitivityRange.

func (*PerAntennaReceiveSensitivityRange) UnmarshalBinary

func (p *PerAntennaReceiveSensitivityRange) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 149, PerAntennaReceiveSensitivityRange.

type PeriodicTriggerValue

type PeriodicTriggerValue struct {
	Offset       Millisecs32
	Period       Millisecs32
	UTCTimestamp *UTCTimestamp
}

PeriodicTriggerValue is Parameter 180, PeriodicTriggerValue.

func (*PeriodicTriggerValue) EncodeFields

func (p *PeriodicTriggerValue) EncodeFields(w io.Writer) error

func (*PeriodicTriggerValue) MarshalBinary

func (p *PeriodicTriggerValue) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 180, PeriodicTriggerValue.

func (*PeriodicTriggerValue) UnmarshalBinary

func (p *PeriodicTriggerValue) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 180, PeriodicTriggerValue.

type RFReceiver

type RFReceiver uint16

RFReceiver is Parameter 223, RFReceiver.

func (*RFReceiver) EncodeFields

func (p *RFReceiver) EncodeFields(w io.Writer) error

func (*RFReceiver) MarshalBinary

func (p *RFReceiver) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 223, RFReceiver.

func (*RFReceiver) UnmarshalBinary

func (p *RFReceiver) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 223, RFReceiver.

type RFSurveyEvent

type RFSurveyEvent struct {
	Event    RFSurveyEventType
	ROSpecID uint32
}

RFSurveyEvent is Parameter 253, RFSurveyEvent.

func (*RFSurveyEvent) EncodeFields

func (p *RFSurveyEvent) EncodeFields(w io.Writer) error

func (*RFSurveyEvent) MarshalBinary

func (p *RFSurveyEvent) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 253, RFSurveyEvent.

func (*RFSurveyEvent) UnmarshalBinary

func (p *RFSurveyEvent) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 253, RFSurveyEvent.

type RFSurveyEventType

type RFSurveyEventType uint8

type RFSurveyFrequencyCapabilities

type RFSurveyFrequencyCapabilities struct {
	MinFrequency Kilohertz
	MaxFrequency Kilohertz
}

RFSurveyFrequencyCapabilities is Parameter 365, RFSurveyFrequencyCapabilities.

func (*RFSurveyFrequencyCapabilities) EncodeFields

func (p *RFSurveyFrequencyCapabilities) EncodeFields(w io.Writer) error

func (*RFSurveyFrequencyCapabilities) MarshalBinary

func (p *RFSurveyFrequencyCapabilities) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 365, RFSurveyFrequencyCapabilities.

func (*RFSurveyFrequencyCapabilities) UnmarshalBinary

func (p *RFSurveyFrequencyCapabilities) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 365, RFSurveyFrequencyCapabilities.

type RFSurveyReportData

type RFSurveyReportData struct {
	ROSpecID                  *ROSpecID
	SpecIndex                 *SpecIndex
	FrequencyRSSILevelEntries []FrequencyRSSILevelEntry
	Custom                    []Custom
}

RFSurveyReportData is Parameter 242, RFSurveyReportData.

func (*RFSurveyReportData) EncodeFields

func (p *RFSurveyReportData) EncodeFields(w io.Writer) error

func (*RFSurveyReportData) MarshalBinary

func (p *RFSurveyReportData) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 242, RFSurveyReportData.

func (*RFSurveyReportData) UnmarshalBinary

func (p *RFSurveyReportData) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 242, RFSurveyReportData.

type RFSurveySpec

type RFSurveySpec struct {
	AntennaID      AntennaID
	StartFrequency Kilohertz
	EndFrequency   Kilohertz
	Trigger        RFSurveySpecStopTrigger
	Custom         []Custom
}

RFSurveySpec is Parameter 187, RFSurveySpec.

func (*RFSurveySpec) EncodeFields

func (p *RFSurveySpec) EncodeFields(w io.Writer) error

func (*RFSurveySpec) MarshalBinary

func (p *RFSurveySpec) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 187, RFSurveySpec.

func (*RFSurveySpec) UnmarshalBinary

func (p *RFSurveySpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 187, RFSurveySpec.

type RFSurveySpecStopTrigger

type RFSurveySpecStopTrigger struct {
	Trigger  RFSurveySpecStopTriggerType
	Duration Millisecs32
	N        Millisecs32
}

RFSurveySpecStopTrigger is Parameter 188, RFSurveySpecStopTrigger.

func (*RFSurveySpecStopTrigger) EncodeFields

func (p *RFSurveySpecStopTrigger) EncodeFields(w io.Writer) error

func (*RFSurveySpecStopTrigger) MarshalBinary

func (p *RFSurveySpecStopTrigger) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 188, RFSurveySpecStopTrigger.

func (*RFSurveySpecStopTrigger) UnmarshalBinary

func (p *RFSurveySpecStopTrigger) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 188, RFSurveySpecStopTrigger.

type RFSurveySpecStopTriggerType

type RFSurveySpecStopTriggerType uint8

type RFTransmitter

type RFTransmitter struct {
	// HopTableID for jurisdictions that require frequency hopping. Hop tables are presented
	// in the Reader's capabilities, under RegulatorCapabilities -> UHFBandCapabilities ->
	// C1G2RFModes.
	HopTableID uint16
	// ChannelIndex within the Fixed Frequency Table, for jurisdictions that do not permit
	// frequency hopping. The fixed frequency information is presented in the Reader's
	// capabilities, under RegulatoryCapabilities -> UHFBandCapabilities ->
	// FrequencyInformation. Unlike other tables, this table does not have entries with IDs;
	// instead, the ChannelIndex is the 1-based offset within the array.
	ChannelIndex uint16
	// TransmitPowerIndex, as from the for jurisdictions that do not permit frequency
	// hopping. The power levels are presented in the Reader's capabilities, under
	// RegulatoryCapabilities -> UHFBandCapabilities -> TransmitPowerLevels.
	TransmitPowerIndex uint16
}

RFTransmitter is Parameter 224, RFTransmitter.

func (*RFTransmitter) EncodeFields

func (p *RFTransmitter) EncodeFields(w io.Writer) error

func (*RFTransmitter) MarshalBinary

func (p *RFTransmitter) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 224, RFTransmitter.

func (*RFTransmitter) UnmarshalBinary

func (p *RFTransmitter) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 224, RFTransmitter.

type ROAccessReport

type ROAccessReport struct {
	TagReportData      []TagReportData
	RFSurveyReportData []RFSurveyReportData
	Custom             []Custom
}

ROAccessReport is Message 61, ROAccessReport.

func (*ROAccessReport) EncodeFields

func (m *ROAccessReport) EncodeFields(w io.Writer) error

EncodeFields for Message 61, ROAccessReport.

func (*ROAccessReport) MarshalBinary

func (m *ROAccessReport) MarshalBinary() ([]byte, error)

MarshalBinary Message 61, ROAccessReport.

func (*ROAccessReport) Type

func (*ROAccessReport) Type() MessageType

Type returns this message's MessageType

func (*ROAccessReport) UnmarshalBinary

func (m *ROAccessReport) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 61, ROAccessReport.

type ROBoundarySpec

type ROBoundarySpec struct {
	StartTrigger ROSpecStartTrigger
	StopTrigger  ROSpecStopTrigger
}

ROBoundarySpec is Parameter 178, ROBoundarySpec.

func (*ROBoundarySpec) EncodeFields

func (p *ROBoundarySpec) EncodeFields(w io.Writer) error

func (*ROBoundarySpec) MarshalBinary

func (p *ROBoundarySpec) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 178, ROBoundarySpec.

func (*ROBoundarySpec) UnmarshalBinary

func (p *ROBoundarySpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 178, ROBoundarySpec.

type ROReportSpec

type ROReportSpec struct {
	Trigger                  ROReportTriggerType
	N                        uint16
	TagReportContentSelector TagReportContentSelector
	Custom                   []Custom
}

ROReportSpec is Parameter 237, ROReportSpec.

func (*ROReportSpec) EncodeFields

func (p *ROReportSpec) EncodeFields(w io.Writer) error

func (*ROReportSpec) MarshalBinary

func (p *ROReportSpec) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 237, ROReportSpec.

func (*ROReportSpec) UnmarshalBinary

func (p *ROReportSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 237, ROReportSpec.

type ROReportTriggerType

type ROReportTriggerType uint8

type ROSpec

type ROSpec struct {
	ROSpecID           uint32
	Priority           uint8
	ROSpecCurrentState ROSpecCurrentStateType
	ROBoundarySpec     ROBoundarySpec
	AISpecs            []AISpec
	RFSurveySpecs      []RFSurveySpec
	Custom             []Custom
	LoopSpec           *LoopSpec
	ROReportSpec       *ROReportSpec
}

ROSpec is Parameter 177, ROSpec.

ROSpec is a Reader Operation Specification.

An ROSpec describes the operations executed at one or more antennas, specified one or more AISpecs, RFSurveySpecs, or CustomSpecs. Specs are executed in the order in which they appear, and reports reference the relevant spec via a 1-indexed SpecIndex. Not all devices support RFSurveySpecs. LoopSpecs are only supported with LLRP version 1.1.

The RFID device picks which ROSpec to execute based on a number of conditions (described below). When it does so, the ROSpec transitions from Inactive to Active, and the device may send an event notification (if configured to do so). While Active, if the ROSpec's reporting conditions are satisfied, the device sends ROAccessReports, which contain TagReportData matching either the device's configured defaults report information, or the TagReportContentSelector if the RO defines an ROReportSpec.

The client defines an ROSpec via the AddROSpec Message. They must define the spec in the Disabled state, with an ROSpecID >0, or the device must reject it. Once defined, the client uses the ROSpecID to modify its state, and the device may include the ROSpecID in reports that reference it. Other relevant messages for controlling ROSpecs:

  • Enable ROSpec

  • Disable ROSpec

  • Start ROSpec

  • Stop ROSpec

  • Delete ROSpec

  • Get ROSpecs

func (*ROSpec) Add

func (ros *ROSpec) Add() *AddROSpec

Add returns an AddROSpec message for this ROSpecID.

func (*ROSpec) Delete

func (ros *ROSpec) Delete() *DeleteROSpec

Delete returns an DeleteROSpec message for this ROSpecID.

func (*ROSpec) Disable

func (ros *ROSpec) Disable() *DisableROSpec

Disable returns an DisableROSpec message for this ROSpecID.

func (*ROSpec) Enable

func (ros *ROSpec) Enable() *EnableROSpec

Enable returns an EnableROSpec message for this ROSpecID.

func (*ROSpec) EncodeFields

func (p *ROSpec) EncodeFields(w io.Writer) error

func (*ROSpec) MarshalBinary

func (p *ROSpec) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 177, ROSpec.

func (*ROSpec) UnmarshalBinary

func (p *ROSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 177, ROSpec.

type ROSpecCurrentStateType

type ROSpecCurrentStateType uint8

type ROSpecEvent

type ROSpecEvent struct {
	Event              ROSpecEventType
	ROSpecID           uint32
	PreemptingROSpecID uint32
}

ROSpecEvent is Parameter 249, ROSpecEvent.

func (*ROSpecEvent) EncodeFields

func (p *ROSpecEvent) EncodeFields(w io.Writer) error

func (*ROSpecEvent) MarshalBinary

func (p *ROSpecEvent) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 249, ROSpecEvent.

func (*ROSpecEvent) UnmarshalBinary

func (p *ROSpecEvent) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 249, ROSpecEvent.

type ROSpecEventType

type ROSpecEventType uint8

type ROSpecID

type ROSpecID uint32

ROSpecID is Parameter 9, ROSpecID.

func (*ROSpecID) EncodeFields

func (p *ROSpecID) EncodeFields(w io.Writer) error

func (*ROSpecID) MarshalBinary

func (p *ROSpecID) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 9, ROSpecID.

func (*ROSpecID) UnmarshalBinary

func (p *ROSpecID) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 9, ROSpecID.

type ROSpecStartTrigger

type ROSpecStartTrigger struct {
	Trigger         ROSpecStartTriggerType
	PeriodicTrigger *PeriodicTriggerValue
	GPITrigger      *GPITriggerValue
}

ROSpecStartTrigger is Parameter 179, ROSpecStartTrigger.

func (*ROSpecStartTrigger) EncodeFields

func (p *ROSpecStartTrigger) EncodeFields(w io.Writer) error

func (*ROSpecStartTrigger) MarshalBinary

func (p *ROSpecStartTrigger) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 179, ROSpecStartTrigger.

func (*ROSpecStartTrigger) UnmarshalBinary

func (p *ROSpecStartTrigger) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 179, ROSpecStartTrigger.

type ROSpecStartTriggerType

type ROSpecStartTriggerType uint8

type ROSpecStopTrigger

type ROSpecStopTrigger struct {
	Trigger              ROSpecStopTriggerType
	DurationTriggerValue Millisecs32
	GPITriggerValue      *GPITriggerValue
}

ROSpecStopTrigger is Parameter 182, ROSpecStopTrigger.

func (*ROSpecStopTrigger) EncodeFields

func (p *ROSpecStopTrigger) EncodeFields(w io.Writer) error

func (*ROSpecStopTrigger) MarshalBinary

func (p *ROSpecStopTrigger) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 182, ROSpecStopTrigger.

func (*ROSpecStopTrigger) UnmarshalBinary

func (p *ROSpecStopTrigger) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 182, ROSpecStopTrigger.

type ROSpecStopTriggerType

type ROSpecStopTriggerType uint8

type ReaderCapability

type ReaderCapability uint8

type ReaderConfigRequestedDataType

type ReaderConfigRequestedDataType uint8

type ReaderEventNotification

type ReaderEventNotification struct {
	ReaderEventNotificationData ReaderEventNotificationData
}

ReaderEventNotification is Message 63, ReaderEventNotification.

func NewCloseMessage

func NewCloseMessage() *ReaderEventNotification

func (*ReaderEventNotification) EncodeFields

func (m *ReaderEventNotification) EncodeFields(w io.Writer) error

EncodeFields for Message 63, ReaderEventNotification.

func (*ReaderEventNotification) MarshalBinary

func (m *ReaderEventNotification) MarshalBinary() ([]byte, error)

MarshalBinary Message 63, ReaderEventNotification.

func (*ReaderEventNotification) Type

Type returns this message's MessageType

func (*ReaderEventNotification) UnmarshalBinary

func (m *ReaderEventNotification) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 63, ReaderEventNotification.

type ReaderEventNotificationData

type ReaderEventNotificationData struct {
	UTCTimestamp                   UTCTimestamp
	Uptime                         Uptime
	HoppingEvent                   *HoppingEvent
	GPIEvent                       *GPIEvent
	ROSpecEvent                    *ROSpecEvent
	ReportBufferLevelWarningEvent  *ReportBufferLevelWarningEvent
	ReportBufferOverflowErrorEvent *ReportBufferOverflowErrorEvent
	ReaderExceptionEvent           *ReaderExceptionEvent
	RFSurveyEvent                  *RFSurveyEvent
	AISpecEvent                    *AISpecEvent
	AntennaEvent                   *AntennaEvent
	ConnectionAttemptEvent         *ConnectionAttemptEvent
	ConnectionCloseEvent           *ConnectionCloseEvent
	SpecLoopEvent                  *SpecLoopEvent
	Custom                         []Custom
}

ReaderEventNotificationData is Parameter 246, ReaderEventNotificationData.

func (*ReaderEventNotificationData) EncodeFields

func (p *ReaderEventNotificationData) EncodeFields(w io.Writer) error

func (*ReaderEventNotificationData) MarshalBinary

func (p *ReaderEventNotificationData) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 246, ReaderEventNotificationData.

func (*ReaderEventNotificationData) UnmarshalBinary

func (p *ReaderEventNotificationData) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 246, ReaderEventNotificationData.

type ReaderEventNotificationSpec

type ReaderEventNotificationSpec struct {
	EventNotificationStates []EventNotificationState
}

ReaderEventNotificationSpec is Parameter 244, ReaderEventNotificationSpec.

func (*ReaderEventNotificationSpec) EncodeFields

func (p *ReaderEventNotificationSpec) EncodeFields(w io.Writer) error

func (*ReaderEventNotificationSpec) MarshalBinary

func (p *ReaderEventNotificationSpec) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 244, ReaderEventNotificationSpec.

func (*ReaderEventNotificationSpec) UnmarshalBinary

func (p *ReaderEventNotificationSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 244, ReaderEventNotificationSpec.

type ReaderEventType

type ReaderEventType uint16

type ReaderExceptionEvent

type ReaderExceptionEvent struct {
	Message                  string
	ROSpecID                 *ROSpecID
	SpecIndex                *SpecIndex
	InventoryParameterSpecID *InventoryParameterSpecID
	AntennaID                *AntennaID
	AccessSpecID             *AccessSpecID
	OpSpecID                 *OpSpecID
	Custom                   []Custom
}

ReaderExceptionEvent is Parameter 252, ReaderExceptionEvent.

func (*ReaderExceptionEvent) EncodeFields

func (p *ReaderExceptionEvent) EncodeFields(w io.Writer) error

func (*ReaderExceptionEvent) MarshalBinary

func (p *ReaderExceptionEvent) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 252, ReaderExceptionEvent.

func (*ReaderExceptionEvent) UnmarshalBinary

func (p *ReaderExceptionEvent) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 252, ReaderExceptionEvent.

type ReceiveSensitivityTableEntry

type ReceiveSensitivityTableEntry struct {
	Index uint16
	// ReceiveSensitivity is relative the maximum supported by the device, or the maximum
	// reported in the device capabilities, for readers that support changing it (requires
	// LLRP v1.1+).
	ReceiveSensitivity Decibel
}

ReceiveSensitivityTableEntry is Parameter 139, ReceiveSensitivityTableEntry.

func (*ReceiveSensitivityTableEntry) EncodeFields

func (p *ReceiveSensitivityTableEntry) EncodeFields(w io.Writer) error

func (*ReceiveSensitivityTableEntry) MarshalBinary

func (p *ReceiveSensitivityTableEntry) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 139, ReceiveSensitivityTableEntry.

func (*ReceiveSensitivityTableEntry) UnmarshalBinary

func (p *ReceiveSensitivityTableEntry) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 139, ReceiveSensitivityTableEntry.

type RegulatoryCapabilities

type RegulatoryCapabilities struct {
	CountryCode            CountryCodeType
	CommunicationsStandard uint16
	UHFBandCapabilities    *UHFBandCapabilities
	Custom                 []Custom
}

RegulatoryCapabilities is Parameter 143, RegulatoryCapabilities.

func (*RegulatoryCapabilities) EncodeFields

func (p *RegulatoryCapabilities) EncodeFields(w io.Writer) error

func (*RegulatoryCapabilities) MarshalBinary

func (p *RegulatoryCapabilities) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 143, RegulatoryCapabilities.

func (*RegulatoryCapabilities) UnmarshalBinary

func (p *RegulatoryCapabilities) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 143, RegulatoryCapabilities.

type ReportBufferLevelWarningEvent

type ReportBufferLevelWarningEvent uint8

ReportBufferLevelWarningEvent is Parameter 250, ReportBufferLevelWarningEvent.

func (*ReportBufferLevelWarningEvent) EncodeFields

func (p *ReportBufferLevelWarningEvent) EncodeFields(w io.Writer) error

func (*ReportBufferLevelWarningEvent) MarshalBinary

func (p *ReportBufferLevelWarningEvent) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 250, ReportBufferLevelWarningEvent.

func (*ReportBufferLevelWarningEvent) UnmarshalBinary

func (p *ReportBufferLevelWarningEvent) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 250, ReportBufferLevelWarningEvent.

type ReportBufferOverflowErrorEvent

type ReportBufferOverflowErrorEvent struct{}

ReportBufferOverflowErrorEvent is Parameter 251, ReportBufferOverflowErrorEvent.

func (*ReportBufferOverflowErrorEvent) EncodeFields

func (p *ReportBufferOverflowErrorEvent) EncodeFields(w io.Writer) error

func (*ReportBufferOverflowErrorEvent) MarshalBinary

func (p *ReportBufferOverflowErrorEvent) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 251, ReportBufferOverflowErrorEvent.

func (*ReportBufferOverflowErrorEvent) UnmarshalBinary

func (p *ReportBufferOverflowErrorEvent) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 251, ReportBufferOverflowErrorEvent.

type SLState

type SLState uint8

type SessionState

type SessionState uint8

type SetProtocolVersion

type SetProtocolVersion struct {
	TargetVersion VersionNum
}

SetProtocolVersion is Message 47, SetProtocolVersion.

func (*SetProtocolVersion) EncodeFields

func (m *SetProtocolVersion) EncodeFields(w io.Writer) error

EncodeFields for Message 47, SetProtocolVersion.

func (*SetProtocolVersion) MarshalBinary

func (m *SetProtocolVersion) MarshalBinary() ([]byte, error)

MarshalBinary Message 47, SetProtocolVersion.

func (*SetProtocolVersion) Type

Type returns this message's MessageType

func (*SetProtocolVersion) UnmarshalBinary

func (m *SetProtocolVersion) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 47, SetProtocolVersion.

type SetProtocolVersionResponse

type SetProtocolVersionResponse struct {
	LLRPStatus LLRPStatus
}

SetProtocolVersionResponse is Message 57, SetProtocolVersionResponse.

func (*SetProtocolVersionResponse) EncodeFields

func (m *SetProtocolVersionResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 57, SetProtocolVersionResponse.

func (*SetProtocolVersionResponse) MarshalBinary

func (m *SetProtocolVersionResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 57, SetProtocolVersionResponse.

func (*SetProtocolVersionResponse) Status

Status returns this message's LLRPStatus

func (*SetProtocolVersionResponse) Type

Type returns this message's MessageType

func (*SetProtocolVersionResponse) UnmarshalBinary

func (m *SetProtocolVersionResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 57, SetProtocolVersionResponse.

type SetReaderConfig

type SetReaderConfig struct {
	ResetToFactoryDefaults      bool
	ReaderEventNotificationSpec *ReaderEventNotificationSpec
	AntennaProperties           []AntennaProperties
	AntennaConfigurations       []AntennaConfiguration
	ROReportSpec                *ROReportSpec
	AccessReportSpec            *AccessReportSpec
	KeepAliveSpec               *KeepAliveSpec
	GPOWriteData                []GPOWriteData
	GPIPortCurrentStates        []GPIPortCurrentState
	EventsAndReports            *EventsAndReports
	Custom                      []Custom
}

SetReaderConfig is Message 3, SetReaderConfig.

func (*SetReaderConfig) EncodeFields

func (m *SetReaderConfig) EncodeFields(w io.Writer) error

EncodeFields for Message 3, SetReaderConfig.

func (*SetReaderConfig) MarshalBinary

func (m *SetReaderConfig) MarshalBinary() ([]byte, error)

MarshalBinary Message 3, SetReaderConfig.

func (*SetReaderConfig) Type

func (*SetReaderConfig) Type() MessageType

Type returns this message's MessageType

func (*SetReaderConfig) UnmarshalBinary

func (m *SetReaderConfig) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 3, SetReaderConfig.

type SetReaderConfigResponse

type SetReaderConfigResponse struct {
	LLRPStatus LLRPStatus
}

SetReaderConfigResponse is Message 13, SetReaderConfigResponse.

func (*SetReaderConfigResponse) EncodeFields

func (m *SetReaderConfigResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 13, SetReaderConfigResponse.

func (*SetReaderConfigResponse) MarshalBinary

func (m *SetReaderConfigResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 13, SetReaderConfigResponse.

func (*SetReaderConfigResponse) Status

func (m *SetReaderConfigResponse) Status() LLRPStatus

Status returns this message's LLRPStatus

func (*SetReaderConfigResponse) Type

Type returns this message's MessageType

func (*SetReaderConfigResponse) UnmarshalBinary

func (m *SetReaderConfigResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 13, SetReaderConfigResponse.

type SpecIndex

type SpecIndex uint16

SpecIndex is Parameter 14, SpecIndex.

func (*SpecIndex) EncodeFields

func (p *SpecIndex) EncodeFields(w io.Writer) error

func (*SpecIndex) MarshalBinary

func (p *SpecIndex) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 14, SpecIndex.

func (*SpecIndex) UnmarshalBinary

func (p *SpecIndex) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 14, SpecIndex.

type SpecLoopEvent

type SpecLoopEvent struct {
	ROSpecID  uint32
	LoopCount uint32
}

SpecLoopEvent is Parameter 356, SpecLoopEvent.

func (*SpecLoopEvent) EncodeFields

func (p *SpecLoopEvent) EncodeFields(w io.Writer) error

func (*SpecLoopEvent) MarshalBinary

func (p *SpecLoopEvent) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 356, SpecLoopEvent.

func (*SpecLoopEvent) UnmarshalBinary

func (p *SpecLoopEvent) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 356, SpecLoopEvent.

type SpectralMaskType

type SpectralMaskType uint8

type StartROSpec

type StartROSpec struct {
	ROSpecID uint32
}

StartROSpec is Message 22, StartROSpec.

func (*StartROSpec) EncodeFields

func (m *StartROSpec) EncodeFields(w io.Writer) error

EncodeFields for Message 22, StartROSpec.

func (*StartROSpec) MarshalBinary

func (m *StartROSpec) MarshalBinary() ([]byte, error)

MarshalBinary Message 22, StartROSpec.

func (*StartROSpec) Type

func (*StartROSpec) Type() MessageType

Type returns this message's MessageType

func (*StartROSpec) UnmarshalBinary

func (m *StartROSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 22, StartROSpec.

type StartROSpecResponse

type StartROSpecResponse struct {
	LLRPStatus LLRPStatus
}

StartROSpecResponse is Message 32, StartROSpecResponse.

func (*StartROSpecResponse) EncodeFields

func (m *StartROSpecResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 32, StartROSpecResponse.

func (*StartROSpecResponse) MarshalBinary

func (m *StartROSpecResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 32, StartROSpecResponse.

func (*StartROSpecResponse) Status

func (m *StartROSpecResponse) Status() LLRPStatus

Status returns this message's LLRPStatus

func (*StartROSpecResponse) Type

Type returns this message's MessageType

func (*StartROSpecResponse) UnmarshalBinary

func (m *StartROSpecResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 32, StartROSpecResponse.

type StatusCode

type StatusCode uint16

StatusCode matches LLRP's Status Codes.

These are described in Section 14 of the Low Level Reader Protocol v1.0.1 and in Section 15 of Low Level Reader Protocol v1.1.

func (StatusCode) String

func (i StatusCode) String() string

type StatusError

type StatusError LLRPStatus

StatusError is an LLRPStatus that implements the Error interface. This is a different type than a regular LLRPStatus because the latter can also represent success.

func (*StatusError) Error

func (se *StatusError) Error() string

Error implements the error interface for a StatusError.

It returns the ErrorDescription set by the Reader, and appends to it

type Statusable

type Statusable interface {
	Status() LLRPStatus
}

type StdLogger

type StdLogger struct {
	*log.Logger
}

StdLogger wraps the Go stdlib Logger.

func (*StdLogger) HandlerPanic

func (l *StdLogger) HandlerPanic(hdr Header, err error)

func (*StdLogger) MsgHandled

func (l *StdLogger) MsgHandled(hdr Header)

func (*StdLogger) MsgUnhandled

func (l *StdLogger) MsgUnhandled(hdr Header)

func (*StdLogger) ReceivedMsg

func (l *StdLogger) ReceivedMsg(hdr Header, curVer VersionNum)

func (*StdLogger) SendingMsg

func (l *StdLogger) SendingMsg(hdr Header)

type StopROSpec

type StopROSpec struct {
	ROSpecID uint32
}

StopROSpec is Message 23, StopROSpec.

StopROSpec stops a spec if it's currently executing, overriding all other priorities and moving it to Inactive.

func (*StopROSpec) EncodeFields

func (m *StopROSpec) EncodeFields(w io.Writer) error

EncodeFields for Message 23, StopROSpec.

func (*StopROSpec) MarshalBinary

func (m *StopROSpec) MarshalBinary() ([]byte, error)

MarshalBinary Message 23, StopROSpec.

func (*StopROSpec) Type

func (*StopROSpec) Type() MessageType

Type returns this message's MessageType

func (*StopROSpec) UnmarshalBinary

func (m *StopROSpec) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 23, StopROSpec.

type StopROSpecResponse

type StopROSpecResponse struct {
	LLRPStatus LLRPStatus
}

StopROSpecResponse is Message 33, StopROSpecResponse.

func (*StopROSpecResponse) EncodeFields

func (m *StopROSpecResponse) EncodeFields(w io.Writer) error

EncodeFields for Message 33, StopROSpecResponse.

func (*StopROSpecResponse) MarshalBinary

func (m *StopROSpecResponse) MarshalBinary() ([]byte, error)

MarshalBinary Message 33, StopROSpecResponse.

func (*StopROSpecResponse) Status

func (m *StopROSpecResponse) Status() LLRPStatus

Status returns this message's LLRPStatus

func (*StopROSpecResponse) Type

Type returns this message's MessageType

func (*StopROSpecResponse) UnmarshalBinary

func (m *StopROSpecResponse) UnmarshalBinary(data []byte) error

UnmarshalBinary Message 33, StopROSpecResponse.

type TagObservationTrigger

type TagObservationTrigger struct {
	Trigger          TagObservationTriggerType
	NumberOfTags     uint16
	NumberOfAttempts uint16
	T                Millisecs16
	Timeout          Millisecs32
}

TagObservationTrigger is Parameter 185, TagObservationTrigger.

func (*TagObservationTrigger) EncodeFields

func (p *TagObservationTrigger) EncodeFields(w io.Writer) error

func (*TagObservationTrigger) MarshalBinary

func (p *TagObservationTrigger) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 185, TagObservationTrigger.

func (*TagObservationTrigger) UnmarshalBinary

func (p *TagObservationTrigger) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 185, TagObservationTrigger.

type TagObservationTriggerType

type TagObservationTriggerType uint8

type TagReportContentSelector

type TagReportContentSelector struct {
	EnableROSpecID             bool
	EnableSpecIndex            bool
	EnableInventoryParamSpecID bool
	EnableAntennaID            bool
	EnableChannelIndex         bool
	EnablePeakRSSI             bool
	EnableFirstSeenTimestamp   bool
	EnableLastSeenTimestamp    bool
	EnableTagSeenCount         bool
	EnableAccessSpecID         bool
	C1G2EPCMemorySelector      *C1G2EPCMemorySelector
	Custom                     []Custom
}

TagReportContentSelector is Parameter 238, TagReportContentSelector.

func (*TagReportContentSelector) EncodeFields

func (p *TagReportContentSelector) EncodeFields(w io.Writer) error

func (*TagReportContentSelector) MarshalBinary

func (p *TagReportContentSelector) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 238, TagReportContentSelector.

func (*TagReportContentSelector) UnmarshalBinary

func (p *TagReportContentSelector) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 238, TagReportContentSelector.

type TagReportData

type TagReportData struct {
	EPCData                                 EPCData
	EPC96                                   EPC96
	ROSpecID                                *ROSpecID
	SpecIndex                               *SpecIndex
	InventoryParameterSpecID                *InventoryParameterSpecID
	AntennaID                               *AntennaID
	PeakRSSI                                *PeakRSSI
	ChannelIndex                            *ChannelIndex
	FirstSeenUTC                            *FirstSeenUTC
	FirstSeenUptime                         *FirstSeenUptime
	LastSeenUTC                             *LastSeenUTC
	LastSeenUptime                          *LastSeenUptime
	TagSeenCount                            *TagSeenCount
	C1G2PC                                  *C1G2PC
	C1G2XPCW1                               *C1G2XPCW1
	C1G2XPCW2                               *C1G2XPCW2
	C1G2CRC                                 *C1G2CRC
	AccessSpecID                            *AccessSpecID
	C1G2ReadOpSpecResult                    *C1G2ReadOpSpecResult
	C1G2WriteOpSpecResult                   *C1G2WriteOpSpecResult
	C1G2KillOpSpecResult                    *C1G2KillOpSpecResult
	C1G2LockOpSpecResult                    *C1G2LockOpSpecResult
	C1G2BlockEraseOpSpecResult              *C1G2BlockEraseOpSpecResult
	C1G2BlockWriteOpSpecResult              *C1G2BlockWriteOpSpecResult
	C1G2RecommissionOpSpecResult            *C1G2RecommissionOpSpecResult
	C1G2BlockPermalockOpSpecResult          *C1G2BlockPermalockOpSpecResult
	C1G2GetBlockPermalockStatusOpSpecResult *C1G2GetBlockPermalockStatusOpSpecResult
	ClientRequestOpSpecResult               *ClientRequestOpSpecResult
	Custom                                  []Custom
}

TagReportData is Parameter 240, TagReportData.

func (*TagReportData) EncodeFields

func (p *TagReportData) EncodeFields(w io.Writer) error

func (*TagReportData) MarshalBinary

func (p *TagReportData) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 240, TagReportData.

func (*TagReportData) UnmarshalBinary

func (p *TagReportData) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 240, TagReportData.

type TagSeenCount

type TagSeenCount uint16

TagSeenCount is Parameter 8, TagSeenCount.

func (*TagSeenCount) EncodeFields

func (p *TagSeenCount) EncodeFields(w io.Writer) error

func (*TagSeenCount) MarshalBinary

func (p *TagSeenCount) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 8, TagSeenCount.

func (*TagSeenCount) UnmarshalBinary

func (p *TagSeenCount) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 8, TagSeenCount.

type TestDevice

type TestDevice struct {
	Client *Client

	ReaderLogs ClientLogger
	// contains filtered or unexported fields
}

TestDevice is a useful mock of an LLRP device.

Create one view NewTestDevice, then start it with ImpersonateReader,

func NewReaderOnlyTestDevice

func NewReaderOnlyTestDevice(conn net.Conn, silent bool) (*TestDevice, error)

NewReaderOnlyTestDevice returns a TestDevice which only manages the Reader (aka Server) portion of the communication, attaching to an existing net.Conn

func NewTestDevice

func NewTestDevice(maxReaderVer, maxClientVer VersionNum, timeout time.Duration, silent bool) (*TestDevice, error)

NewTestDevice returns a TestDevice with a client ready to connect.

func (*TestDevice) Close

func (td *TestDevice) Close() (err error)

Close the Reader (RFID device) by attempting to send CloseMessage, then close net.Conn, returning any error from it. This is an abnormal close condition in LLRP.

func (*TestDevice) ConnectClient

func (td *TestDevice) ConnectClient(t *testing.T) (c *Client)

ConnectClient correctly connects the Client to the TestDevice and returns it. It registers a Cleanup function to Shutdown the Client and report errors once the test is completed, so it is not necessary to do so yourself.

func (*TestDevice) Errors

func (td *TestDevice) Errors() []error

Errors returns accumulated errors. It should only be called after the TestDevice is closed.

func (*TestDevice) ImpersonateReader

func (td *TestDevice) ImpersonateReader()

ImpersonateReader prepares the TestDevice to impersonate an LLRP reader, as if a Client had correctly dialed it, but before version negotiation begins.

func (*TestDevice) SetResponse

func (td *TestDevice) SetResponse(mt MessageType, out Outgoing)

func (*TestDevice) Version

func (td *TestDevice) Version() VersionNum

type TestEmulator

type TestEmulator struct {
	// contains filtered or unexported fields
}

TestEmulator acts like an LLRP server. It accepts connections on a configurable network port, and when an LLRP client dials this TestEmulator, a new TestDevice is created which manages only the "reader" side of the connection.

Functions exist to allow developer to provide "canned" responses to messages, and change them on the fly to allow changing

NOTE: Unlike an actual LLRP server/reader, more than one simultaneous client are allowed to connect to it,

however each client will receive the same canned responses.

func NewTestEmulator

func NewTestEmulator(silent bool) *TestEmulator

func (*TestEmulator) SetResponse

func (emu *TestEmulator) SetResponse(mt MessageType, out Outgoing)

SetResponse adds a canned response to all future clients. Optionally, if `applyExisting` is true, this will affect all currently active clients.

NOTE 1: This will OVERRIDE existing response for given message type

NOTE 2: Setting the response for MsgCloseConnection is NOT SUPPORTED and will be overridden by internal handler.

func (*TestEmulator) Shutdown

func (emu *TestEmulator) Shutdown() error

Shutdown attempts to cleanly shutdown the emulator

func (*TestEmulator) StartAsync

func (emu *TestEmulator) StartAsync(port int) error

StartAsync starts listening on a specific port until emu.Shutdown() is called

type TransmitPowerLevelTableEntry

type TransmitPowerLevelTableEntry struct {
	Index              uint16
	TransmitPowerValue MillibelMilliwatt
}

TransmitPowerLevelTableEntry is Parameter 145, TransmitPowerLevelTableEntry.

func (*TransmitPowerLevelTableEntry) EncodeFields

func (p *TransmitPowerLevelTableEntry) EncodeFields(w io.Writer) error

func (*TransmitPowerLevelTableEntry) MarshalBinary

func (p *TransmitPowerLevelTableEntry) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 145, TransmitPowerLevelTableEntry.

func (*TransmitPowerLevelTableEntry) UnmarshalBinary

func (p *TransmitPowerLevelTableEntry) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 145, TransmitPowerLevelTableEntry.

type UHFBandCapabilities

type UHFBandCapabilities struct {
	TransmitPowerLevels           []TransmitPowerLevelTableEntry
	FrequencyInformation          FrequencyInformation
	C1G2RFModes                   UHFC1G2RFModeTable
	RFSurveyFrequencyCapabilities *RFSurveyFrequencyCapabilities
}

UHFBandCapabilities is Parameter 144, UHFBandCapabilities.

func (*UHFBandCapabilities) EncodeFields

func (p *UHFBandCapabilities) EncodeFields(w io.Writer) error

func (*UHFBandCapabilities) MarshalBinary

func (p *UHFBandCapabilities) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 144, UHFBandCapabilities.

func (*UHFBandCapabilities) UnmarshalBinary

func (p *UHFBandCapabilities) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 144, UHFBandCapabilities.

type UHFC1G2RFModeTable

type UHFC1G2RFModeTable struct {
	UHFC1G2RFModeTableEntries []UHFC1G2RFModeTableEntry
}

UHFC1G2RFModeTable is Parameter 328, UHFC1G2RFModeTable.

This carries the set of C1G2 RF modes the Reader can operate.

The specific details of each parameter are defined in the EPC Gen-2 UHF RFID Standard, though small portions are of that information are given here for clarity.

These settings dictate aspects of the physical communication between the reader and tags, and therefore directly impact the performance of their interaction. The best choices of parameters depends heavily on the physical environment in which the reader and tags are present.

Each table entry has a ModeID which the client must reference to set the relevant operating parameters.

"Tari" values used in these parameters is the "Type A Reference Interval", and while the details are more complicated, it can be thought of as how long it takes to transmit a 0-bit. The time it takes to transmit a 1-bit is somewhere between 1.5 and 2 Tari, depending on other parameters.

In the broadest case, valid Tari values are 6.25-25 microseconds (i.e., 6250 to 25000 nanoseconds), though it may be limited by the reader; in many cases, a client may pass 0 to allow the reader to select a valid in-range value.

The tag uses the DivideRatio to calculate the backscatter link frequency (BLF), which itself is ultimately a multiple the of data rate. It may be one of two constants: 64/3 or 8/1. Having different DivideRatios permits the same BLF with a different Tari value.

The reader instructs the tags what type of subcarrier Modulation to use when encoding their backscattered reply. At FM0, the data rate in kBitsPerSec is approximately BLF in Kilohertz. Essentially, Miller values require 2, 4, or 8 times as many cycles as FM0, and so the data rate will be roughly 1/2, 1/4, or 1/8 BLF. Note that this does not affect whether the tags use ASK or PSK modulation; that's determined by the tag manufacturer.

A vendor may have had these parameters certified by EPCglobal's Hardware Action Group's Testing and Conformance group, in which case the IsEPCHagConformant will be true.

func (*UHFC1G2RFModeTable) EncodeFields

func (p *UHFC1G2RFModeTable) EncodeFields(w io.Writer) error

func (*UHFC1G2RFModeTable) MarshalBinary

func (p *UHFC1G2RFModeTable) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 328, UHFC1G2RFModeTable.

func (*UHFC1G2RFModeTable) UnmarshalBinary

func (p *UHFC1G2RFModeTable) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 328, UHFC1G2RFModeTable.

type UHFC1G2RFModeTableEntry

type UHFC1G2RFModeTableEntry struct {
	// ModeID is used by the client when setting an RF mode parameter.
	ModeID                uint32
	DivideRatio           DivideRatio
	IsEPCHagConformant    bool
	Modulation            BackscatterMod
	ForwardLinkModulation FwdLinkMod
	SpectralMask          SpectralMaskType
	BackscatterDataRate   BitsPerSec
	// PIERatio is 1000x the the data-0 to data-1 symbol lengths ratio.
	PIERatio     uint32
	MinTariTime  Nanosecs32
	MaxTariTime  Nanosecs32
	StepTariTime Nanosecs32
}

UHFC1G2RFModeTableEntry is Parameter 329, UHFC1G2RFModeTableEntry.

See UHFC1G2RFModelTable for more information.

func (*UHFC1G2RFModeTableEntry) EncodeFields

func (p *UHFC1G2RFModeTableEntry) EncodeFields(w io.Writer) error

func (*UHFC1G2RFModeTableEntry) MarshalBinary

func (p *UHFC1G2RFModeTableEntry) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 329, UHFC1G2RFModeTableEntry.

func (*UHFC1G2RFModeTableEntry) UnmarshalBinary

func (p *UHFC1G2RFModeTableEntry) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 329, UHFC1G2RFModeTableEntry.

type UTCTimestamp

type UTCTimestamp Microsecs64

UTCTimestamp is Parameter 128, UTCTimestamp.

Microseconds since the beginning of time, midnight 1970-Jan-1.

func (*UTCTimestamp) EncodeFields

func (p *UTCTimestamp) EncodeFields(w io.Writer) error

func (*UTCTimestamp) MarshalBinary

func (p *UTCTimestamp) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 128, UTCTimestamp.

func (*UTCTimestamp) UnmarshalBinary

func (p *UTCTimestamp) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 128, UTCTimestamp.

type Uptime

type Uptime Microsecs64

Uptime is Parameter 129, Uptime.

Microseconds since the Reader started.

func (*Uptime) EncodeFields

func (p *Uptime) EncodeFields(w io.Writer) error

func (*Uptime) MarshalBinary

func (p *Uptime) MarshalBinary() ([]byte, error)

MarshalBinary Parameter 129, Uptime.

func (*Uptime) UnmarshalBinary

func (p *Uptime) UnmarshalBinary(data []byte) error

UnmarshalBinary Parameter 129, Uptime.

type VersionNum

type VersionNum uint8

VersionNum corresponds to an LLRP version number.

The version number is 3 bits and embedded in each message sent between a Reader and Client.

By default, this package will attempt to establish connection with Readers using the higher version it knows, but you can explicitly override it when creating a connection. In either case, for versions greater than 1.0.1, the Client will negotiate versions with the Reader and downgrade if necessary.

func (VersionNum) String

func (i VersionNum) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL