The USB Timing Box has an internal buffer, storing up to 1000 passings. Every passing is assigned with a 32bit index number, starting with 0 from startup. The index of the first passing you would like to receive in this request must be supplied as parameter.
PASSINGGET can reply with up to 64 passings at a time, therefore after one response of 64 passings, you should immediately check again, with the new minimum index being 64 higher than the last request.
Parameters
|
[StartIndex] |
Passing index of the first passing in request |
|
[Count] |
The number of passings which will be returned in this request |
|
<passing(i)> |
The returned passing with passing index i |
|
[MinStartIndex] |
The lowest [StartIndex] available. |
Error codes
00 No Error
10 [StartIndex] too low - telling you that there longer exists a <passing(i)>
11 Box in wrong Mode
Call
PASSINGGET;[StartIndex:8]\n
Reply (Error Code 00 = no error)
The function replies the [StartIndex] value it was called with. This is so you can check that there was no communication problem leading to a wrong index.
The second reply is [Count] indicating how many passing records will follow.
PASSINGGET;[ErrorCode]\n [StartIndex:8];[Count:2]\n <passing([StartIndex])>\n <passing([StartIndex]+1)>\n ... <passing([StartIndex]+[Count]-1)>\n <passing([StartIndex]+[Count])>\n \n
Reply with Error Code 10
The function replies the [StartIndex] value it was called with. This is so you can check that there was no communication problem leading to a wrong index.
The second reply is [MinStartIndex] indicating the lowest [StartIndex] that is available in memory.
PASSINGGET;10\n [StartIndex:8];[MinStartIndex:8]\n \n
In case of error 10, you need to execute PASSINGGET;[MinStartIndex] again.
Reply with Error Code 11
The Box is running in a Mode which does not allow pulling passings from it.
PASSINGGET;11\n [StartIndex:8];00\n \n
Most likely this is a USB Timing Box in Repeat Mode. The User needs to switch mode.
Example
← PASSINGGET;0\n → PASSINGGET;00\n → 00000000;02\n → ZBAAA03;04c6;002b6efc;11;19;1d;15;0;1;1;00;0\n → ZBAAA03;04c7;00823aa8;1e;1a;1d;15;0;1;1;00;0\n → \n
Passing Format
Standard format:
[TranspCode:string];[WakeupCounter:4];[TimeStamp:8];[Hits:2];[RSSI:2];[Battery:2];[Temperature:2];[LoopOnly:1];[LoopId:1];[Channel:1];[InternalActiveData:2];[InternalData:1]=[CheckSum]
FW2.6 format after setting <CONFSET;B3;1>
[TranspCode:string];[WakeupCounter:4];[TimeStamp:10];[Hits:2];[RSSI:2];[Battery:2];[Temperature:+2];[LoopOnly:1];[LoopId:1];[Channel:1];[InternalActiveData:2];[InternalData:1];[ExtendedPassingFlags:2];[BackupChannel:1];[ExtraCode:x]=[CheckSum]
|
[TranspCode] |
The code of the transponder |
||||||||||||||||
|
[WakeupCounter] |
Overall wakeup counter of the transponder (new transponders start at 10000) |
||||||||||||||||
|
[TimeStamp] |
Time stamp of the detection in number of ticks Standard Format: 32 Bit - 256th seconds FW 2.6 Format: 40 Bit - 2048th seconds |
||||||||||||||||
|
[Hits] |
Number of times the tag was detected |
||||||||||||||||
|
[RSSI] |
RSSI value, see full description of RSSI here |
||||||||||||||||
|
[Battery] |
Battery level in volts - (00 - ff) => (0 - 25.5), eg. 1f = 3.0V |
||||||||||||||||
|
[Temperature] |
Temperature in degrees Celsius - (00 - ff) => (0 - 255), eg. 1a = 26°C FW 2.6: Signed Value from -20°C...49°C (HEX: -14...+31) |
||||||||||||||||
|
[LoopOnly] |
1 if this detection was generated in Store Mode |
||||||||||||||||
|
[LoopID] |
Loop ID, (0 - f) => (1 - 8) |
||||||||||||||||
|
[Channel] |
Channel ID (0 - f) => (1 - 8) |
||||||||||||||||
|
[InternalActiveData] |
Data transmission details of an Active Transponder. One byte. Lowest three bits: no channel access counter (number of times, the passing could not be transmitted because the transponder could not access the channel). Next three bits: no ACK counter (number of times the passing was transmitted, but no acknowledgement was received. Seventh bit: 1, if this passing could not be transmitted at all in a previous attempt (="stored passing", old passing), 0 otherwise. Highest bit: 1, if the transponder woke up from deep sleep, 0 otherwise. Hint: You can check if a passing is a stored passing using
|
||||||||||||||||
|
[InternalData] |
This field is only used for internal purposes. |
||||||||||||||||
| [ExtendedPassingFlags] | Reserved for future use | ||||||||||||||||
| [BackupChannel] | Indicates if a passing was received on primary or secondary 2.4Ghz channel | ||||||||||||||||
| [ExtraCode] | Extra Code as programmed into Transponder. This is optional and only reported if transponder Extra Code is set. | ||||||||||||||||
| [CheckSum] | This is a simple 8bit-rollover check sum over all characters in this line up to and exluding the ";" before this checksum. Only applys if confset 0xB1 was set. | ||||||||||||||||
Example Call
Example (standard format)
← PASSINGGET;1\n → PASSINGGET;00\n → 00000001;01\n → IKNWZ06;a153;093a9eb4;fe;71;1d;15;0;1;7;00;0\n → \n
Example (2x passings, additional FW2.6 data fields after <CONFSET;B3;1> with one transponder reporting an Extra-Code)
← PASSINGGET;1\n → PASSINGGET;00\n → 00000001;02\n → IKNWZ06;a153;093a9eb470;fe;71;1d;+15;0;1;7;00;0;00;1\n → ZILAL95;9087;093ab54213;fe;71;1d;+1a;0;1;7;00;0;00;0;A-1000\n → \n
Example (8x passings, additional FW2.6 data fields after setting <CONFSET;B3;1> and checksum after setting <CONFSET;B1;1>)
← PASSINGGET;1\n → PASSINGGET;00=90\n → 00000001;08=24\n → IKNWZ06;a153;093a9eb470;fe;71;1d;+15;0;1;7;00;0;00;1=85\n → ZILAL95;9087;093ab54210;fe;71;1d;+1a;0;1;7;00;0;00;0=42\n → ZILAL95;908e;093ad85370;fe;71;1d;+1a;0;1;7;00;0;00;0=7D\n → ZILAL95;9093;093af16d30;fe;71;1d;+1a;0;1;7;00;0;00;0=75\n → ZILAL95;90a9;093b5fe320;fe;71;1d;+1a;0;1;7;00;0;00;0=A5\n → ZILAL95;90b6;093ba10a00;fe;71;1d;+1a;0;1;7;00;0;00;0=91\n → ZILAL95;9144;093e6a2150;fe;71;1d;+1a;0;1;7;00;0;00;0=41\n → ZILAL95;915c;093ee28f50;fe;71;1d;+1a;0;1;7;00;0;00;0=AC\n → =00\n
Impulse Marker
Markers generated on impulse input at the headphone jack of LoopBoxes and USBTimingBoxes always have a TransponderCode of 00000127 (FW 2.6 and up - previously _____127) no matter where they were created. You can use the LoopId and Channel to filter for a specific loop box. WakeupCounter counter is started at loopID * 1000 and incremented with every impulse.
→ 00000127;1f40;01521ab6;00;00;14;7b;0;7;0;00;0\n
Calculating Passing Times
Using the time stamp of the passing in combination with the stored value for ref_computer_time and ref_time_stamp we can calculate the true computer time of the passing as follows:
KARLS07;17ca;0151cbf5;26;13;9f;15;0;0;1;00;0
Pseudocode calculating the true computer passing time:
passing_time_epoch = ref_computer_time + ((pass_time_stamp - ref_time_stamp) / 256.0) // passing_time_epoch = 0x4a3caa45 + (0x0151cbf5 - 0x0151bcf5)/256.0// ref_computer_time = 0x4a3caa45 => June 20 2009 11:22:14 UTC+2// pass_time_stamp = 0x0151cbf5 => taken from passing data above// ref_time_stamp = 0x0151bcf5 => given in reply to EPOCHREFSET// => 1245489748 passing_time = epoch_to_datetime(passing_time_epoch) // passing_time => Jun 20 2009, 11:22:29 UTC +2
=> June 20th 2009, 11:22:29 UTC +2