Command PASSINGGET

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] & 0x40 == 0x40 (the seventh bit is set).

8 7 6 5 4 3 2 1
DS ST No ACK Channel busy

[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