-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
214 lines (172 loc) · 9.06 KB
/
Copy pathProgram.cs
File metadata and controls
214 lines (172 loc) · 9.06 KB
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
using System;
using System.Collections.Generic;
using System.Text;
using CSLibrary;
using System.ComponentModel;
using System.Data;
using System.Threading;
using System.Diagnostics;
using System.Runtime.CompilerServices;
using CSLibrary.Constants;
using CSLibrary.Structures;
namespace CSL_Console_Mode_Demo
{
class Program
{
public static List <HighLevelInterface> ReaderList = new List<HighLevelInterface> ();
static object StateChangedLock = new object ();
static void ReaderXP_StateChangedEvent(object sender, CSLibrary.Events.OnStateChangedEventArgs e)
{
lock (StateChangedLock)
{
HighLevelInterface Reader = (HighLevelInterface)(sender);
switch (e.state)
{
case CSLibrary.Constants.RFState.IDLE:
switch (Reader.LastMacErrorCode)
{
case 0x000: // Normal Exit
break;
case 0x306: // Reader too hot
System.Threading.Thread reconnect = new Thread((System.Threading.ThreadStart)delegate
{
HighLevelInterface hotReader = (HighLevelInterface)(sender);
Console.Write("Reader too hot IP {0} : ", hotReader.Name);
System.Threading.Thread.Sleep(180 * 1000); // wait 3 minutes
hotReader.StartOperation(CSLibrary.Constants.Operation.TAG_RANGING, false);
});
reconnect.Start();
break;
case 0x309: // antenna got disconnected/defectiv/placed too close to metal
Console.Write("Inventory terminated. Antenna {0} got disconnected/defective/placed too close to metal object. Wait for 5 seconds and restart inventory...\r\n", Reader.ErrorPort + 1);
Thread.Sleep(5000);
Reader.StartOperation(CSLibrary.Constants.Operation.TAG_RANGING, false);
break;
default: // Something wrong, please contact CSL technical support.
break;
}
break;
case CSLibrary.Constants.RFState.BUSY:
break;
case CSLibrary.Constants.RFState.RESET:
System.Threading.Thread service = new Thread((System.Threading.ThreadStart)delegate
{
HighLevelInterface disconnReader = (HighLevelInterface)(sender);
Console.Write("Reconnect IP {0} : ", disconnReader.Name);
while (disconnReader.Reconnect(1) != CSLibrary.Constants.Result.OK)
Console.WriteLine("Fail");
Console.WriteLine("Success");
InventorySetting(disconnReader);
disconnReader.StartOperation(CSLibrary.Constants.Operation.TAG_RANGING, false);
});
service.Start();
break;
case CSLibrary.Constants.RFState.ABORT:
break;
}
}
}
static int TagCount = 0;
static DateTime TagCountTimer = DateTime.Now;
static object TagInventoryLock = new object();
static void ReaderXP_TagInventoryEvent(object sender, CSLibrary.Events.OnAsyncCallbackEventArgs e)
{
lock (TagInventoryLock)
{
HighLevelInterface Reader = (HighLevelInterface)sender;
Console.WriteLine(Reader.IPAddress + " : " + e.info.epc.ToString());
TagCount++;
if (DateTime.Now > TagCountTimer)
{
Console.WriteLine("TagCount pre second : " + TagCount);
TagCount = 0;
TagCountTimer = DateTime.Now.AddSeconds(1);
}
}
}
static void InventorySetting(HighLevelInterface reader)
{
//reader.SetHoppingChannels(CSLibrary.Constants.RegionCode.TW); // please make sure area is fir fir your country
reader.SetAntennaPortState(0, CSLibrary.Constants.AntennaPortState.ENABLED);
reader.SetAntennaPortState(1, CSLibrary.Constants.AntennaPortState.DISABLED);
reader.SetAntennaPortState(2, CSLibrary.Constants.AntennaPortState.DISABLED);
reader.SetAntennaPortState(3, CSLibrary.Constants.AntennaPortState.DISABLED);
CSLibrary.Structures.DynamicQParms QParms = new CSLibrary.Structures.DynamicQParms();
CSLibrary.Structures.SingulationAlgorithmParms Params = new CSLibrary.Structures.SingulationAlgorithmParms();
reader.SetTagGroup(CSLibrary.Constants.Selected.ALL, CSLibrary.Constants.Session.S0, CSLibrary.Constants.SessionTarget.A);
QParms.maxQValue = 15;
QParms.minQValue = 0;
QParms.retryCount = 7;
QParms.startQValue = 7;
QParms.thresholdMultiplier = 1;
QParms.toggleTarget = 1;
reader.SetOperationMode(CSLibrary.Constants.RadioOperationMode.CONTINUOUS);
reader.SetSingulationAlgorithmParms(CSLibrary.Constants.SingulationAlgorithm.DYNAMICQ, QParms);
reader.Options.TagRanging.multibanks = 0;
reader.Options.TagRanging.bank1 = CSLibrary.Constants.MemoryBank.TID;
reader.Options.TagRanging.offset1 = 0;
reader.Options.TagRanging.count1 = 2;
reader.Options.TagRanging.bank2 = CSLibrary.Constants.MemoryBank.USER;
reader.Options.TagRanging.offset2 = 0;
reader.Options.TagRanging.count2 = 2;
reader.Options.TagRanging.flags = CSLibrary.Constants.SelectFlags.ZERO;
}
static void Main(string[] args)
{
CSLibrary.Constants.Result ret;
Console.WriteLine("ConsoleModeDemo v" + GetAppVersion () );
if (args == null)
{
Console.WriteLine("USAGE: " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + " <Reader IP1> <Reader IP2> ......"); // Check for null array
return;
}
// Connect Multi Reader
for (int cnt = 0; cnt < args.Length; cnt++)
{
HighLevelInterface Reader = new HighLevelInterface();
Console.WriteLine(String.Format("Start to connect reader, IP <" + args[cnt] + ">"));
if ((ret = Reader.Connect(args[cnt], 30000)) != CSLibrary.Constants.Result.OK)
{
Reader.Disconnect();
Console.WriteLine(String.Format("Can not connect Reader, IP <" + args[cnt] + "> StartupReader Failed{0}", ret));
}
else
{
Console.WriteLine(String.Format("Reader connect success, IP <" + args[cnt] + ">"));
Reader.OnStateChanged += new EventHandler<CSLibrary.Events.OnStateChangedEventArgs>(ReaderXP_StateChangedEvent);
Reader.OnAsyncCallback += new EventHandler<CSLibrary.Events.OnAsyncCallbackEventArgs>(ReaderXP_TagInventoryEvent);
ReaderList.Add(Reader);
}
}
// Start Inventory
foreach (HighLevelInterface Reader in ReaderList)
{
InventorySetting(Reader);
Reader.StartOperation(CSLibrary.Constants.Operation.TAG_RANGING, false);
}
Console.WriteLine("Press enter key to end...");
Console.Read();
// Stop Inventory
foreach (HighLevelInterface Reader in ReaderList)
{
Reader.StopOperation(true);
}
// Disconnect Reader
foreach (HighLevelInterface Reader in ReaderList)
{
Reader.OnAsyncCallback -= new EventHandler<CSLibrary.Events.OnAsyncCallbackEventArgs>(ReaderXP_TagInventoryEvent);
Reader.OnStateChanged -= new EventHandler<CSLibrary.Events.OnStateChangedEventArgs>(ReaderXP_StateChangedEvent);
Reader.Disconnect();
}
}
public static CSLibrary.Structures.Version GetAppVersion()
{
System.Version sver = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
CSLibrary.Structures.Version ver = new CSLibrary.Structures.Version();
ver.major = (uint)sver.Major;
ver.minor = (uint)sver.Minor;
ver.patch = (uint)sver.Build;
return ver;
}
}
}