ThingMagic
From RifidiWiki
Contents
Introduction
- Model Number
4
- Network Protocol
SQL like protocol that may be wrapped in ssh, web interface, RCP, and Linux shell login.
- Communication
10/100 BaseT Ethernet – RJ45
- Antennas
4 read points (4 transmit points, 4 receive points)
- General Purpose I/O
(To Do)
Basis of Virtual Reader
The reader accepts SQL style protocol and returns the appropriate information.
Documentation
Client Tools
Telnet, SSH clients, and Tag Centric
Reader Design
This section will give a brief overview of how the hardware reader operates for the purposes of emulation. Here is the architecture for the emulator: ThingMagic/Emulator_Architecture
Communication
Protocols
The main method for communicating with the reader is via TCP, TCP+SSH on port 8080, web interface, and RCP.
Memory Model
The memory model is like a state based database.
Getting Tags
Getting tags is fairly simple just execute:
telnet [reader ip address] 8080
Then type:
select id from tag_id set time_out=[milliseconds];
Note: the semicolon at the end of each command is necessary.
One can also return multiple items:
select id, protocol_id from tag_id set time_out=[milliseconds];
Also add filters or conditionals:
select id from tag_id where [condition or filter] set time_out=[milliseconds];
In addition more than one statement can be put on more than one line.
select id from tag_id set time_out=[milliseconds]; select protocol from tag_id set time_out=[milliseconds];
Tag Centric reads tags in the following manner:
select id,read_count from tag_id WHERE (protocol_id='EPC0' and protocol_id='EPC1' and protocol_id='GEN2') set time_out=200;
From this, one can tell if two conditions conjoined with 'AND' use the same column name, it counts as a logical 'OR'.
Timer
Autonomous Mode and Cursors
First create a cursor:
declare cursor_name cursor for select id, protocol_id from tag_table;
To use the cursor just once...
fetch cursor_name;
One may add more cursors to the fetch list by separating them by commas.
To turn on auto mode:
set auto cursorlist = ON;
To add in additional delay between one tag read operation and another:
set auto cursorlist = on, repeat = 500;
NOTE: 500 is the minimum time between the start of one tag read operation to the start of another. This includes any time_out value in the select command used for the cursor.
To set the delay between the end of the cursor list to the beginning of it repeating again, use:
SET repeat = 1000;
To turn auto mode off:
SET auto = OFF;
NOTE: Do not try to use any other command while auto mode is on; it may cause an undesirable undefined operation.
To delete a cursor:
close cursor_name;
NOTE: only one cursor can be close/deleted at a time, and no cursor lists are allowed in the syntax of this command.
Reset
To reset the reader as if there where no cursors defined and no tags read:
<nowiki> reset: <pre><nowiki> ===Login=== By SSH log in. ===RQL Schema=== {| class="wikitable" border="1" |+ tag_id ! Read/Write !! Field !! Type |- |R || protocol_id || Int |- |R || antenna_id || Int |- |R || read_count || Int |- | R/W || id || Hex String |- |W || killed || Int |- |W || password || Hex String |- |R || locked || Int |- |R || frequency || Int |- |R || dspmicros || Int |- |R || timestamp || String |- |} <br /> {| class="wikitable" border="1" |+ tag_data ! Read/Write !! Field !! Type |- |R || id || Hex String |- |R/W || block number || Int |- |R/W || data || Hex String |- |R || locked || Int |- |} <br /> {| class="wikitable" border="1" |+ settings ! Read/Write !! Field !! Type |- |R || current_time || String |- |R || version || String |- |R || supported_protocols || String |- |} <br /> {| class="wikitable" border="1" |+ io !Read/Write !! Field !! Type |- |R/W || data || Hex String |- |} <br /> {| class="wikitable" border="1" |+ saved_settings !Read/Write !! Field !! Type |- |R/W || hostname || String |- |R/W || iface || String |- |R/W || dhcpcd || String |- |R/W || ip_address || String |- |R/W || netmask || String |- |R/W || gateway || String |- |R/W || ntp_servers || String |- |R/W || 1tx_power || String |- |R/W || uhf_power_centidbm || String |- |R/W || epc1_id_length || String |- |R/W || primary_dns || String |- |R/W || secondary_dns || String |- |R/W || domain_name || String |- |R/W || reader_description || String |- |R/W || reader_role || String |- |R/W || ant1_readpoint_descr || String |- |R/W || ant2_readpoint_descr || String |- |R/W || ant3_readpoint_descr || String |- |R/W || ant4_readpoint_descr || String |- |} ==Supported Features== All tables except tag_data are supported. Where clause only works on tag_id and tag_data on the real reader. Automode is working. ==Unsupported Features & Bugs== Tag_data table and compound conditions are not supported. ThingMagic, Mercury 5 reader RQL features are also not supported. Login by ssh is not supported. Also the time_out feature for reading tags is not supported yet. ==Features that might never be supported== Linux shell access to reader. This is fairly complex and require to emulate the entire hardware infrastructure of the reader and an ARM possessor. Also the web and RCP interface might be developed at a later time.