generated from edgexfoundry-holding/template-repo
-
Notifications
You must be signed in to change notification settings - Fork 19
/
vendors.go
120 lines (104 loc) · 4.76 KB
/
vendors.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//
// Copyright (C) 2020 Intel Corporation
//
// SPDX-License-Identifier: Apache-2.0
//go:generate stringer -type=VendorPEN,ImpinjModel -output vendors_string.go
package llrp
// VendorPEN are constants that represent common known Private Enterprise Numbers
type VendorPEN uint32
const (
PENImpinj = VendorPEN(25882)
PENAlien = VendorPEN(17996)
PENZebra = VendorPEN(10642)
)
// ImpinjModel are mappings for known Impinj model numbers to their model names.
type ImpinjModel uint32
const (
SpeedwayR220 = ImpinjModel(2001001)
SpeedwayR420 = ImpinjModel(2001002)
XPortal = ImpinjModel(2001003)
XArrayWM = ImpinjModel(2001004)
XArrayEAP = ImpinjModel(2001006)
XArray = ImpinjModel(2001007)
XSpan = ImpinjModel(2001008)
SpeedwayR120 = ImpinjModel(2001009)
R700 = ImpinjModel(2001052)
)
// CustomParamSubtype is a base type for all custom param subtypes
type CustomParamSubtype = uint32
// ImpinjParamSubtype are constant definitions of Impinj specific custom functionality
type ImpinjParamSubtype = CustomParamSubtype
const (
ImpinjEnablePeakRSSI = ImpinjParamSubtype(53)
ImpinjPeakRSSI = ImpinjParamSubtype(57)
ImpinjTagReportContentSelector = ImpinjParamSubtype(50)
ImpinjSearchMode = ImpinjParamSubtype(23)
)
// impinjSearchMode is like a really limited version of standard state-aware filtering
// with added ambiguity about what C1G2 commands the Reader might send.
type impinjSearchMode = uint16
const (
// impSearchReaderSelected is the "default" search mode.
// There's no way to know exactly what it will do.
impSearchReaderSelected = impinjSearchMode(0)
// impjSingleTarget is Impinj's "Single Target".
// It's just a normal Query with the Target field set to A.
impjSingleTarget = impinjSearchMode(1)
// impjSingleTargetReset is Impinj's "Single Target Reset".
// It's just a normal Query with the Target field set to B.
impjSingleTargetReset = impinjSearchMode(5)
// impjSingleTargetSuppressed is Impinj's
// "Single Target Inventory with Suppression (aka TagFocus)".
// This is identical to "Single Target",
// but instructs Impinj Monza tags to refresh their S1 flag persistence:
// https://platform.impinj.com/indy/itk/latest/Glossary/Glossary.html#term-tagfocus
//
// Importantly, it only makes sense if used with Session 1,
// and only if you've got mostly Impinj Monza tags.
// Otherwise it's exactly the same as querying A->B, but probably slower.
impjSingleTargetSuppressed = impinjSearchMode(3)
// impjDualTarget is Impinj's "Dual Target Inventory",
// which queries A->B til quiet, then B->A til quiet,
// something you'd normally do with two AISpecs and State Aware singulation.
//
// In S0, you're likely to never move from step 1 to step 2,
// but even if you do, there's little advantage of S0 B->A in most cases.
// In S1, it only makes sense if there are so few tags you can read them
// before they time out and revert themselves B->A anyway.
// So this makes the most sense in either S2 or S3,
// particularly when attempting to read a large, mostly static population.
//
// Impinj says its useful for "Low-to-medium tag count,
// low-throughput [...] repeated tag observation".
impjDualTarget = impinjSearchMode(2)
// impjDualTargetWithReset is Impinj's "Dual Target Inventory with Reset".
// Despite the name, this mode only targets state A in the given session.
// Once it's quiet, it uses a Select command to flip tags' states B->A.
//
// Note that as far as Impinj is concerned,
// "Reset" means "put the session flag into state B".
// In "SingleTargetReset", the "Reset" is just a normal Query command,
// whereas here in "DualTargetReset", the "Reset" is a Select command.
// Sending a Select command before an inventory round
// takes a long time relative singulating a single tag,
// but since it only has to be done once at the beginning of the round,
// that time is amortized over the tag population,
// so it's far more efficient for a large population.
// On the other hand, if a tag doesn't "hear" the Select command,
// its session flag will remain in state B,
// and it won't be inventoried during that round.
//
// In standard LLRP with State Aware filtering,
// you can achieve this by targeting A
// and using a Filter that targets all tags and clears matches,
// or one that targets no tags and sets non-matches.
// You can put these in the same AISpec,
// in which case the Reader should send the Select before every inventory round,
// or you can put the Filter in an AISpec that times out quickly,
// and configure the Stop trigger on the "main" spec
// so that it only stops after some time without seeing new tags.
//
// They say it's good for "High tag count,
// high-throughput [with] repeated observation".
impjDualTargetWithReset = impinjSearchMode(6)
)