software that runs on the Host computer, specific Reader commands, examples of a variety of ways to
communicate and send data to the Reader (i.e. RS232, USB) and command/communication types.
Make sure to use the latest released firmware for default values listed in Section 9.
3 Notations
The interface protocol is described as a set of grammars, indicated by different type styles and
symbols. These indications are listed in the table below.
4 Reader Command Overview
This section is intended to introduce developers/users to the methods used to send commands to the
Reader. There are two ways to send a command to the Reader: from a Host computer, or by scanning
a barcode containing a command sequence. When sending commands from the host, there are two
formats that can be used: packetized commands and text commands.
Packetized commands are the most reliable way to communicate to the Reader. The packet consists of
a prefix and a suffix. The prefix contains the amount of data to be transmitted and the suffix contains
error detection. Unlike text commands, packetized commands are always enabled. (See Section 7.2)
4.2 Text Commands
Text commands are provided as an easy way to send a command to a Reader but they lack the
reliability of packetized commands. In addition, text commands must be enabled. Text commands can
easily be sent from a terminal program and use a %xx (similar to URL encoding) to translate an escape
sequence containing a 2-digit hex value corresponding to the single 8-bit ASCII character. This allows
non-printable ASCII characters to be entered via the terminal program. Text commands can be sent via
the RS232, USB Virtual COM (VCOM) or USB HID mode by using appropriate communication software.
4.3 Code Reader Batch (CRB) System
The Code Reader Batch (CRB) system is a convenient method for creating and maintaining a set of
commands that can be sent to the Reader. The commands in the CRB file are immediately processed
by the reader.
These CRB files can be created in any text editor with the file extension of .crb. The CRB system accepts
all of the valid text commands. There should be one command per line. The CRB file may contain
empty lines and comments (prefixed with the semicolon (;) character) as well.
The CRB files can be sent directly to the Reader using the normal file transfer. As CRB files are just a list
of text commands, they can also be sent by a serial terminal program. Note: if using a serial terminal
program the Reader will first need to be commanded in to “text command mode”; see Section 7.1.
CRB files can also be encoded in barcode form using Code’s CortexTools® utility to be processed by
scanning the barcode with a Code reader.
Pre-made Configuration barcodes can be found on Code’s web site (http://codecorp.com), and
configuration CRB files can be requested via support@codecorp.com.
4.4 Barcode Commands
The Reader will recognize the following sequence within a barcode as a command to the Reader:
SOH ‘X’ GS STXText-Command EOT (Packet does not contain spaces)
The Text-Command portion contains a text command as described above.
Because the Barcode Command is terminated with ASCII EOT, the Text-Command may not contain EOT.
If the Text-Command needs to contain EOT, encode it as %04. Multiple commands can be contained in
a single barcode.
The Reader communicates with the Host via USB (keyboard/HID/VCOM), RS232, or Bluetooth®. The
Host includes appropriate hooks and/or drivers to enable two-way communication with the Reader.
Note: USB keyboard communications are one-way, from the Reader to Host only. A special sequence is
available to switch the Reader from keyboard to HID communication mode. See register 1B.
5.1 USB Enumeration PID
The following Product ID (PID) are used by Code to identify their products when connected to a PC. All
Code products use the same Vendor ID (VID) of 11FA
6 Reader to Host Communication
The Reader may be configured in raw mode, where no packet framing or check characters are sent,
and packet mode (See sections 4.1 and 4.2) The Reader may also be configured to expect an
acknowledgement from the Host after each packet and automatic retry when no acknowledgement is
received. Standard “one-way” mode of operation uses raw packets, no expected response from Host,
and no automatic retry. Standard “two-way” mode of operation uses packets with framing and checks
characters, expects a response from the Host, and automatically resends. If no Acknowledgement is
received (ACK), three (3) attempts to resend are made.
any byte value in the range [0,7f]; increments with each packet; does not increment with
resends; used with z and a packets only
cmd-packetnumber
any byte value in the range [80-ff]; increments with each packet; does not increment with
resends; used with all packets other than z and a
timestamp
big-endian 32-bit number, indicates timestamp in seconds (relative to Reader power-up)
(For all but z packets, the timestamp represents the time the packet was sent to the Host;
for z packets, the time the barcode was read.)
data-size
big-endian 16-bit number indicating size of the data field (in bytes)
codeXML-start
SOH ‘X’ RS tag_response ‘/’
tag_response
‘ap’
packet-type
Single ASCII-character in table below
6.1 Raw Data
Reader to Host communication consists of decoded raw data having no framing or check characters.
Raw data is sent with no “end of packet” data (crc16), expects no response from Host and no data is
resent.
6.2 Packet Data
Data from the Reader to the Host consist of packets as specified below. Packetized data is sent using
ACK/NAK protocols with framing and check characters. Packets are delivered asynchronously as
barcodes are read and in response to Host to Reader commands. For keyboard communication (USB
keyboard), all ASCII-characters are transmitted as keyboard-sequences. For all other communication
ports, all ASCII-characters are transmitted as ASCII-bytes.
Note: Even though the data size field allows up to 65535 bytes of data in a packet, the actual size of a
packet either in raw or in packet mode including data and packet overhead is a maximum of 16384
bytes.
Note: The following acronyms from the ASCII character definitions are used below:
SOH – Start of Heading (0x01)
STX – Start of Text (0x02)
EOT – End of Transmission (0x04)
RS – Record Separator (0x1E)
~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | q | w | e | r | t | y | u | i | o | p | [ | ] | \| a
| s | d | f | g | h | j | k | l | ; | ’ | z | x | c | v | b | n | m | , | . | /| space| esc | tab | shift
| alt | ctrl | enter | backspace| f1 | f2 | f3 | f4 | f5 | f6 | f7 | f8 | f9 | f10 | f11 | f12|
insert | delete | home | end | pageup | pagedown| left | right | up | down |
keypadenter| digit
big-endian 16-bit number representing crc16 of the packet, calculated over the entire
packet, excluding the crc16 itself. See source files crc16.[hc] in
Appendix: Example CRC16 C Code for details on the crc16 algorithm and polynomials to
be used.
a
Append decode data; indicates that data contains the first part of the decode data. A sequence
of ‘a’ packets always ends with a ‘z’ packet. The data of all ‘a’ packets in a group and the final
‘z’ packet should be concatenated by the Host.
d
Done response; command and its associated data were successfully received; data optionally
contains a null-terminated text message.
e
Error response; command was not successfully received; data optionally contains a nullterminated text message.
g
Start of a group of ‘z’ packets to follow, terminated by a ‘d’ or ‘e’ packet (‘d’ for complete
group, ‘e’ for incomplete group)
i indicates ‘I’ string output
VVVV is the application firmware version number;
WWWW is the core application firmware version number;
XXXX is reserved;
SSSSSSSSSS is the Reader’s serial number (ten digits);
A is the current execution state:
“A” means core is running
OO is the OEM identifier;
D is the display type:
“0” is no display device.
YYYY is reserved;
HH is the hardware revision;
IIII is the hardware type identifier (value in register 21B);
JJJJ is the boot application version;
KKKK is the operating system kernel version;
LLLL is the root file-system version;
<TAB> is the ASCII TAB character;
Z…Z is the OEM decoder version: a null terminated string of printable ASCII characters.
m
Message response; data contains a message (comment). ‘m’ packets are not sent when the
Reader is in “raw” mode.
r
Read barcode failure; decoder attempted but failed to read a barcode.
z
Decoded data from a barcode; data contains the data decoded from the barcode.
In “raw” mode (as opposed to “packet” mode), type m packets are not sent, only the decoded data is
sent for type z packets, and all other packets are sent without the packet-start and crc16 fields. In
“packet-mode,” the packet-start and crc16 fields are always sent. (See Figure 1)
Figure 1: Example 'z' and 'i' Packets in Raw and Packet Modes
Optionally, whenever the Host receives a packet, the Host will respond by sending a Y or R packet
(defined in the Host to Reader Communication section) to the Reader. If the ‘expect response’ option is
enabled in the Reader configuration, the Reader will repeatedly retransmit the packet (a configurable
number of times) until it receives a Y packet.
If a packet received by the Host has a packet-type that is not any of the valid types listed above or has
the same packet-number as the last processed packet of the corresponding type (command or data),
the entire packet – up to and including end or until timeout – should be discarded by the Host. If the
Host had requested a response, it should reissue the request.
If a packet received by the Host from the Reader fails its CRC, the Host should send an R packet to the
Reader to request that the packet be resent.
7 Host to Reader Communication
Commands and data from the Host to the Reader are sent in the form of commands as specified in this
section.
Commands are normally sent in USB Native, VCOM, or RS232 modes. Commands may not be sent via
keyboard modes.
Two command formats are supported: text-command and packetized-command. Text-command
format is applicable to RS232 and VCOM modes but only if the Reader is configured to accept this
format. Packetized-command format is applicable to all interfaces.
text-command: See Section 7.1.
packetized-command: See Section 7.2.
The command types are explained in Section 7.3.
After the Host sends each complete command, it should wait for a response packet from the Reader.
Expected responses are specified along with the command types in section 7.3. If the Reader responds
with an ‘e’ packet or doesn’t respond within a reasonable timeout period, the Host should resend the
command a reasonable number of times.
7.1 Text Commands
Keywords: #TextCommands
Text commands may be sent to the Reader in RS232 or VCOM mode using any serial communications
software (e.g., HyperTerminal).
Encoded-data is decoded by the Reader by replacing %xx by a single byte with the value specified by
the two hex-digits xx- (e.g., %25 would be replaced by character number 0x25, which is ASCII ‘%’).
Single ASCII character in the set defined in section 7.3
data-size
byte value in range [0,240], which indicates size of data (in bytes)
In order to eliminate inadvertent commanding of the Reader, Text Commands are disabled by
default.
To enable Text Commands requires an initial sequence: ;>PAx where x is as defined in section 9,
register 41. (Note: ‘A’ is the ASCII character that corresponds to 41 HEX.)
For example, to send the Reader commands by typing commands in HyperTerminal:
;>PA1
P(xx)yy
P(xx)yy
W
PA8
Where ;>PA1 enables text commands with echo and command responses, P%xxyy can be any desired
commands, W saves the settings just sent by the P command, and PA8 turns text commands back off
(except for the initial sequence). (Note: ‘A’ is the ASCII character that corresponds to 41 hex, thus
P%418 would be equivalent.)
Note: ;>PA1 is used for interactive text commands. If the commands are to be saved in a file and sent
non-interactively, use ;>PA7 instead; this enables text commands but disables echo and command
responses. (See Section 7.3, Section 9, and Section 10 for additional information.)
With text commands enabled, the following two examples can be sent to a Reader in RS232 mode
from HyperTerminal by just typing the example text.
Example 1 - Make the Reader beep/vibrate 3 times (Note: Readers with a vibration motor are the
CR1400, CR1400XHD, CR1428, CR2600, CR2600XHD, CR3600, CR3600DPM and CR6000.):
#%03 Expected output: should make Reader beep/vibrate 3 times
Example 2 - Set Reader to continuous-read, High Density field (FOI 0) only:
P(C4)5 Expected output: should set Reader to continuous-read, High Density field (FOI 0) only
7.2 Packetized Commands
Packetized commands consist of packetized data sent from Host to Reader to configure and cause the
Reader to perform certain functionalities (e.g. CodeXML® rules, and settings). Packetized commands
are always enabled, unlike text commands. In addition, they include error detection data, making them
more robust than text commands.
crc14
Two consecutive bytes, each in range [0,127], representing the crc16 value &
with the value 0x7F7F, most significant byte first. The packet crc16 is calculated
over the entire packet, excluding the prefix and the crc14 itself. (See source files
in
Appendix: Example CRC16 C Code and Appendix: Example CRC14 C Code for
details on the crc16 algorithm and polynomials to be used, as well as how to
implement appropriately for crc14 transmission.)
#
Causes the Reader to beep and vibrate the specified number of times; data contains the number as a
single character in the range [0,127].
(The Reader will respond with d or e.)
Example – beep three times: #%03
Note: Behavior is defined per platform.
CR900FD/CR1000/CR1000XHD/CR2300/CR5000/CR5000RTC/CR8000 – Beep three times.
CR1400/CR1400XHD/ CR1428/CR2600/CR2600XHD/CR3600/CR3600DPM/ CR6000 – Beep and vibrate
three times.
Note: Readers with a vibration motor are the CR1400, CR1400XHD, CR1428, CR2600, CR2600XHD,
CR3600, CR3600DPM and CR6000.
$
Posts an event to the Reader; data contains the event number as a single character. See register C4 in
Section 9 for a list of the event numbers.
(The Reader will respond with d or e.)
Keywords: #DefaultEvent
(
Causes the Reader to upload any logged error messages (no data)
(The Reader will respond with a g packet, zero or more z packets, and a final d or e. Each z packet
contains a portion of the requested data in its data field.
Note: This is very similar to the response to the X command; however, p packets are not applicable
and the g and d/e packets are not suppressed even in raw mode.)
)
Causes the Reader to erase its log of error messages (no data)
(The Reader will respond with d or e.)
,
Causes the Reader to send a list of current Reader settings (no data)
(The Reader will respond with d containing a space-separated list of all setting values (in order,
expressed as hexadecimal ASCII characters) or with e.)
Toggle a bit (or bits) in a Reader setting; data contains a printable ASCII string in the following format:
hexadecimal register number in parentheses followed by a 32-bit signed integer value, expressed in
ASCII hexadecimal characters (with optional minus sign) or ASCII decimal characters preceded by the
‘#’ character, e.g., /(2e)1000 or /(2e)#4096; the specified integer is XOR’ed with the existing setting
value.
The way a / command is handled is equivalent to a P command – the effects are immediate but won’t
survive a reboot. If you want the setting to be set after a reboot, issue a / then W or use the newer C/
combination.
(The Reader will respond with d or e.)
Note: see Section 9 for possible Reader settings.
1
Indicates the start of a file download; data is empty. This command is followed by a sequence of 2
commands containing the file data and a download-end command (e.g., 5).
(The Reader will respond with d or e.)
2
Indicates a continuation of a file download; data contains the next portion of the file data.
(The Reader will not send any response.)
5
Indicates the end of a regular file download; data contains the name of the file, which is from 1 to 200
letters, digits, periods, hyphens, and underscores, terminated with ASCII NUL.
(The Reader will respond with d, e, or f.)
9
Requests the Reader to delete a file from its storage; data contains the file name, terminated with
ASCII NUL.
;
Reserved (no operation – treated as a comment)
<
Causes the Reader to send a list of saved Reader settings (no data)
(The Reader will respond with d containing a space-separated list of all setting values (in order,
expressed as hexadecimal ASCII characters) or with e.)(see ‘,’ command for current Reader settings)
=
Puts setting directly to Reader’s non-volatile memory so that it will take effect upon next reboot; data
is as defined in the / command; the specified integer replaces the existing setting value.
Note: this command can be used to set communication modes without losing communication during
the process.
(The Reader will respond with d or e.)
Note: The = command does not save changes immediately but those settings will be applied after a
reboot. If you issue an =(2B)0 command to change the value of register 2B from 1, then until you
reboot the value of 2B will still be 1. After you reboot the reader, the value of the 2B register will be 0
when the reader is ready again. In order to have that setting be immediate and survive a reboot you
must either issue a P then a W command or use the newer C command. C(2B)0 is the same as these
two commands combined: P(2B)0, W
The = command is most useful to ‘pre-set’ a new communication mode that will become active after a
reboot.
(The Reader will respond with d or e.)
Note: Also see commands O, P, Q, /, =, W. See Section 9 for possible Reader settings.
>
Causes the Reader to send a string of text to the Host as a z packet;
data contains the text to send.
(The Reader will respond with a z packet containing the text.)
@
Causes the Reader to reset its internal date/timestamp to the specified time; data contains the date
and/or time in one of the following formats.
yyyy-mm-dd hh:mm:ss
yyyy-mm-dd hh:mm
hh:mm:ss
hh:mm
Note: the separators are optional; only digits are significant.
(The Reader will respond with d or e.)
Examples:
Set to midnight: @00:00
Set to Sept 1, 2005 11:52:02 PM: @2005-09-01 23:52:02
A
Notifies the Reader that the previously sent data were rejected for one of the following reasons:
The packet was encrypted and the decryption failed.
The Host (CodeXML
®
Modem) is locked to a different Reader.
The Reader should indicate to the user that the packet has been rejected; e.g., it may sound error
beeps. See related register 12F: notify-of-packet-rejection.
(The Reader will not respond to the Host.)
C
Apply a value to a register on the reader and save the value; data is in one of the following formats:
C(XXX)YYY where XXX is the register number and YYY is the setting value, both in ASCII hex. This will
change the value in the register and save it. For example C(26)64 will change the value of register 26
to 0x64 and save this setting.
C/(XXX)YYY where XXX is the register number and YYY is the setting value, both in ASCII hex. This will
toggle the bits in YYY and then save the resulting value (see / command). For example C/(1F7)40 will
toggle bit 6 of register 1F7 and save this setting.
CO(XXX)YYY where XXX is the register number and YYY is the setting value, both in ASCII hex. This will
set the bits in YYY (change those bits to 1s) for register XXX (see O command). For example CO(1F7)40
will set bit 6 of register 1F7 high and save this setting.
CQ(XXX)YYY where XXX is the register number and YYY is the setting value, both in ASCII hex. This will
clear the bits in YYY (change those bits to 0s) for register XXX (see Q command). For example
CQ(1F7)40 will clear bit 6 of register 1F7 and save this setting.
Note: The C command can be used to set prefixes and suffixes. Please refer to section 7.4 for more
information.
Note: The C command saves changes immediately and those settings will survive a reboot. It is
equivalent to issuing a P and =, then a W command. C(2B)0 is the same as these three commands
combined: P(2B)0, =(2B)0, W
(The Reader will respond with d or e.)
Note: Also see commands O, P, Q, /, =, W. See Section 9 for possible Reader settings.
G
Get setting from Reader if followed by a register number in parenthesis.
G([prefix|suffix]) will return the prefix or suffix text.
(The Reader will respond with d and the setting value or with e. The setting value, if numeric, will be
in hexadecimal, padded to 8 digits.)
Note: see Section 9 for possible Reader settings.
H
Requires subcommand. See below.
$ – Lock
$
Commands to lock and unlock the reader with a PIN.
Lock and Unlock the reader using the CR5000AV Configurator section of the Web
Configuration Guide.
By default, commands can be sent to the reader from a host (such as CortexTools or
CortexMobile) even if the reader is locked. Commands can also be sent to a locked reader by
embedding them in a Keyed Configuration Code. These Keyed Configuration Codes are
generated by the Web Configuration Guide for CR5000AV commands, and will soon be
generated by CortexTools and CortexMoble for general commands.
Sub-Commands:
Command
Description
R
Reset PIN
and Unlock
Reader
If this command is sent to the reader via barcode the read must be
triggered by a physical button press. The reader can not be in
Continuous Scan or Motion Detection modes to read the barcode.
The reader must be rebooted within 30 seconds of receiving this
command in order to actually reset the reader. If the reader is not
rebooted within 30 seconds, the reader will error beep and return to
its previous, locked state.
Configures in on-counter (In-Stand) or off-counter (Out-of-Stand) behavior of the CR5000 &
CR5000RTC to the specified mode. These codes are designed to configure complex modes in
a single command, even if Code adds or changes some of the underlying commands at a later
date.
Format: H5(in|out)<mode>
in|out
o in – configures the reader’s on-counter (In-Stand) behavior
o out – configures the reader’s off-counter (Out-Of-Stand) behavior
mode
#
Mode
Description
0
Trigger
Scan on trigger press, use targeting LEDs otherwise. Does not block
duplicate barcodes.
1
Pick List
Scan on trigger press, use targeting LEDs otherwise. The barcode must
be near the center of the reader’s field of view to be decoded. Does not
block duplicate barcodes.
2
Detect
Barcode
Continuous scanning with IR illumination. If a barcode is detected,
switch to red illumination. Will not output the barcode a second time
while it remains in the field of view.
3
Detect
Motion
Continuous scanning with IR illumination. If motion is detected, switch
to red illumination. Will not output the barcode a second time while it
remains in the field of view.
4
Always On
Continuous scanning with dim red illumination. If a barcode is detected,
switch to normal red illumination. Will not output the barcode a second
time while it remains in the field of view.
For example, to configure the reader for Trigger mode when handheld, use the H5(out)1
command. To configure the reader for Always On mode when on the counter, use the
H5(in)4 command.
Defines commands that are used with the wireless packet data encryption feature (256 Bit
AES). Packet data encryption between a reader and modem can only occur on the M2
modem with firmware 0187+. When this feature is enabled, it will encrypt the data portion
of the reader packet sent to the modem. Please reference the Code knowledge base (search
“AES Setup” at http://www.codecorp.com/knowledge-database.php) for detailed setup
instructions.
Format: HA<sub-command>
Sub-Commands:
Command
Description
e
Enable
Encryption
Feature
Enables Packet data encryption. Command will fail if reader is not
connected to a modem. If the operation is successful, BOTH the reader
and modem will blink the same pattern (on the wireless indicator for the
reader). The pattern is two short blinks, one long, one short and a three
second pause. A short blink is approximately 0.5 seconds and a long
blink is 1 second.
Example: HAe
d
Disable
Encryption
Feature
Disables packet data encryption. In order for modem encryption mode
to be disabled, reader needs to be connected to the modem when this
command is issued.
Example: HAd
Keywords: #AES
T – T500 Commands
T
Defines commands sent from the Reader to the T500 Bluetooth® Cable. There must be a
T500 connected to a reader in order for these commands to have any effect. These
commands induce the T500 to perform actions.
Format: HT<sub-command>
Sub-Commands:
Command
Description
c
Connect
Passes QuickConnect Code™ data from the host reader to the T500,
which in turn attempts to connect to the specified Bluetooth® address.
Format: HTc<Bluetooth®_Address>
Where <Bluetooth®_Address> is the target Bluetooth® address
represented in 12 hexadecimal characters.
This command will cause the T500 to “forget” all connection information
associated with prior Bluetooth® hosts. After sending this command, it
will require re-pairing for the devices to connect again.
i
Information
Information about the T500, forwarded to the wirelessly connected host.
Broken further into sub-commands.
Format: HTi<sub-command>
Command
Description
b
Bluetooth®
Sends Bluetooth® address from T500 to wirelessly
connected host.
s
Serial
Number
A command sent to the T500 to have the T500 send
its serial number to the wirelessly connected host.
f
Friendly
Name
Sends Bluetooth® friendly name to wirelessly
connected host.
f
Set Friendly
Name
Friendly name follows the ‘f’, up to 30 characters. If more than 30
characters, the name will be truncated.
Example: HTfThis is a new name
k
Terminate
Connection
This command will terminate the active Bluetooth® connection and clear
the “last connected” index so that the T500 will not auto-reconnect to
the last host
s
Change
setting
These command will change settings or behavior of the T500 as
described in the following table:
Format: HTs<sub-command><Setting Value>
To enter “Setting Value” in decimal, prefix the number with ‘#’,
otherwise the firmware will interpret the value as a hexadecimal
number.
Example: To set the auto-reconnect timer to 20 seconds, use one of the
following commands:
HTsr#20000 OR HTsr4E20
Command
Default
(Hex)
Description
r
Autoreconnect
Timer
7530
(#30,000)
Valid Range: 3E8 (#1000) to FFFFFFFF
Milliseconds
When disconnected, the T500 will attempt
to reconnect to the last host periodically as
determined by this setting value (in ms).
To disable the auto-reconnect feature, set
to 0xFFFFFFFF (#-1).
p
Preemptible
Mode
0
This setting determines whether a remote
Bluetooth® host may disconnect an existing
host already connected to the T500 and
then connect to that T500.
0 – Bluetooth® Hosts will not be able to
connect when the T500 is already
connected to a different host.
1 – Only Bluetooth® hosts that have
previously paired with the T500 will be able
to connect to the T500 when it has an
existing connection. It will not be
discoverable to non-paired hosts.
2 – All hosts may connect to the T500 when
it is currently connected to another host.
Keywords: #T500
All other sub commands are reserved.
I
Requests the Reader to send its information string (no data).
(The Reader will respond with i or e.)
Optional Subcommands:
Is
Retrieves Settings data
Is[scd]
s – saved settings (same as ‘<’ command)
c – current settings (same as ‘,’ command
d – default settings
Ib
Sends XML formatted battery information to Host.
J
Requests the Reader to restore settings to defaults (no data).
Note: J(prefix) and J(suffix) set the respective prefix or suffix to their default value. For most readers
this is clearing the prefix or suffix. For the CR900FD, however, the suffix is reset to a CodeXML®
encoded enter key.
(The Reader will respond with d or e.)
J1
Complete restore of factory setup. Will overwrite the apps and settings.
Requests the Reader to send a list of its stored files
data is:
(no data) or “0”; all non-hidden files.
“1”; hidden and non-hidden files
(The Reader will respond in the same manner as with the ‘(’ command, each z packet containing a file
name as a NUL-terminated string of printable ASCII characters.)
N
Deletes all stored images (.jpg and .pgm) and buffered scan data (.log and .buf files)
O
Set a bit (or bits) in a Reader setting; data contains a printable ASCII string in the following format:
hexadecimal register number in parentheses followed by a 32-bit signed integer value, expressed in
ASCII hexadecimal characters (with optional minus sign) or ASCII decimal characters preceded by the
‘#’ character, e.g., O(2e)1000 or O(2e)#4096. The specified integer is ORed with the existing setting
value.
The way an O command is handled is equivalent to a P command – the effects are immediate but
won’t survive a reboot. If you want the setting to be set after a reboot, issue an O then W or use the
newer CO combination.
(The Reader will respond with d or e.)
Note: see Section 9 for possible Reader settings.
P
Put a value in a Reader register; data contains a printable ASCII string in the following format:
hexadecimal register number in parentheses followed by a 32-bit signed integer value, expressed in
ASCII hexadecimal characters (with optional minus sign) or ASCII decimal characters preceded by the
‘#’ character, e.g., /(2e)1000 or /(2e)#4096; the specified integer replaces the existing register value.
(The Reader will respond with d or e.)
Note: The P command can be used to set prefixes and suffixes. Please refer to section 7.4 for more
information.
Note: The P command saves changes immediately but those settings will not survive a reboot. If you
issue a P(2B)0 command to change the value of register 2B from 1, then reboot the reader, the value
of the 2B register will be 1 when the reader is ready again. In order to have that setting survive a
reboot you must either issue a P then a W command or use the newer C command. C(2B)0 is the
same as these three commands combined: P(2B)0, W
(The Reader will respond with d or e.)
Note: Also see commands O, P, Q, /, =, W. See Section 9 for possible Reader settings.
Q
Clear a bit (or bits) in a Reader register; data contains a printable ASCII string in the following format:
hexadecimal register number in parentheses followed by a 32-bit signed integer value, expressed in
ASCII hexadecimal characters (with optional minus sign) or ASCII decimal characters preceded by the
‘#’ character, e.g., Q(2e)1000 or Q(2e)#4096. The ones-complement of the specified integer is AND’ed
with the existing register value.
The way a Q command is handled is equivalent to a P command – the effects are immediate but
won’t survive a reboot. If you want the setting to be set after a reboot, issue a Q then W or use the
newer CQ combination.
(The Reader will respond with d or e.)
Note: Also see commands O, P, Q, /, =, W. See Section 9 for possible Reader settings.
R
Requests that the previously sent packet be re-sent by the Reader; data may specify a maximum
packet size the receiver will accept: data is either empty or specifies a 16-bit big-endian unsigned
integer (2 bytes). If data is empty or specifies a size less than 32 (the minimum packet size), the
Reader will use its preferred maximum packet size. Otherwise, it will use the specified max packet size
(or less) and will fragment data across multiple smaller packets when necessary.
(The Reader will respond by resending its previous packet or with e if there was no previous packet. If
the max data size has changed, it may resend the previous data in a sequence of more than one
packet.)
T
Requests the current date and time (no data)
(The Reader will respond with d with data containing the date and time formatted as yyyy-mm-dd
hh:mm:ss.)
W
Requests the Reader to write its current settings from RAM to its non-volatile memory.
(The Reader will respond with d or e.)
Note: The W command saves changes that have been make with a /, O, P or Q so those settings will
survive a reboot. If you issue a P(2B)0 command to change the value of register 2B from 1, then
reboot the reader, the value of the 2B register will be 1 when the reader is ready again. In order to
have that setting survive a reboot you must either issue a P then a W command or use the newer C
command. C(2B)0 is the same as these two commands combined: P(2B)0, W
(The Reader will respond with d or e.)
Note: Also see commands O, P, Q, /, =, W. See Section 9 for possible Reader settings.
Y
Acknowledge the receipt of a packet; data specifies the received packet number (one byte).
(The Reader will not respond.)
Z
Request the Reader to reboot
data is:
empty or ‘0’; reboot the Reader.
‘1’; restart application.
(The Reader will respond with d or e before it reboots.)
^
Requests the Reader to upload the specified stored file; data contains the file name, terminated with
ASCII NUL.
One or more ‘z’ packet(s)
A ‘d’ packet containing “EOF<tab>(CRC16)”
Note: filename “help” is reserved to send command information.
_
Causes the Reader to wait for all buttons to be released and clear its event queue
(The Reader will respond with d or e.)
|
Process data as a decoded string.
(The Reader will respond with d or e.)
7.4 Prefix and Suffix Handling
Prefixes and Suffixes are defined in text files (.prefix and .suffix) that reside on the reader. Readers
with default prefixes and suffixes are defined in the files .prefix.default
C([‘prefix’|’suffix’])<URL encoded text> will set the prefix or suffix to text. The prefix and suffix each
have a maximum length of 64 bytes. The URL encoded text must be in UTF-8 format. For standard
ASCII characters, this encoding is the same as ASCII. For extended ASCII (values of 0x80 through 0xFF)
the characters must be encode as a 2-byte sequence starting with either 0xC2 or 0xC3 (see
http://www.fileformat.info/info/charset/UTF-8/list.htm or http://en.wikipedia.org/wiki/UTF-8).
Exception: if JavaScript is being bypassed during decoding, then the prefix/suffix may be in extended
ASCII.
Example: C(suffix)%01X%1ean//n%04 will create a CodeXML® sequence to send the scancode for the
enter key.
Example: C(prefix)ol%c3%a9 will create a prefix of “olé”
8 File Installation
8.1 Simple Protocol
The file is split into blocks of 236 or less bytes each and downloaded to the Reader via 1, 2, & 5
commands using the following sequence:
1) Send a 1 command to initialize the download.
2) Wait for a d or e response from the Reader or a timeout.
a) If timeout or e response, restart the sequence at step 1.
b) If d response, continue to step 3.
3) Send a series of 2 commands, each with a portion of the file. (The Reader will not send
any response.)
4) Send a 5 command to end the download and install the file.
5) Wait for a d, e, or f response from the Reader or a timeout.
a) If f response or timeout, restart the sequence at step 1.
b) If e response, repeat step 5.
c) If d response, file download has completed successfully.
Note: the timeout will need to be increased from the normal response timeout to allow the firmware
time to write the file to the flash memory.
9 Reader Settings
The Host sets the Reader settings using the /, C, O, P, Q, and = commands and reads them using the G, ‘,’, and < commands.
For example, the following C command sets register 2E to the value 0x7F.
C(2E)7F
Note: for two-digit register numbers (i.e. settings 00 through FD), an alternative format may be used:
in place of the parentheses and hexadecimal setting number, substitute a single character, which
represents the setting number. The equivalent to the example above is
C.7F
The ASCII ‘.’ character has the hexadecimal value 0x2E. In certain circumstances, such as with textcommands, “percent-encoding” may be used for encoding a character as a sequence consisting of the
percent character followed by two hexadecimal digits. With percent-encoding, the example may be
expressed as
C%2E7F
In Section 9.3 below, the Reg column is the register number, in hexadecimal, to be used with the
commands identified above. In the Default column, all values are in hexadecimal unless otherwise
specified. To use decimal values in commands you must precede the data with a pound sign ‘#’. The
following C command sets register 2E to the same value as the example above:
C(2E)#127
Since the single digit values of 0 through 9 are identical in decimal and hexadecimal, no indicator is
needed.
9.1 Binary Dip Switch
Some registers are what Code terms a ‘Binary Dip Switch’ where the value of each bit of the data string
switches on or off some part of the behavior of that register. The bits are numbered from least
significant to most (a.k.a. right to left). Each bit can be on or off (1 or 0).
An example of this is register 0A, ‘NEC 2 of 5 Options’. The following settings are possible:
Remove checksum from the result
(Checksum checking must be
enabled for this to take effect)
0: Disabled
1: Enabled
Persistence
Description
Unprotected
Unless otherwise specified, all settings have this type of persistence.
This setting can be changed using a command such as ‘P’ or saved using
commands such as ‘C’ or ‘W’. If the reader is reset to factory defaults using a ‘J’
command, the setting will revert to its default value.
Protected
This setting can be changed or saved. If the reader is reset to its factory defaults
using the ‘J’ command, the value of this setting will not change. However, if the
settings file is deleted, the setting will revert to its default value on the next
boot.
Given the settings above, the binary string to turn on NEC 2 of 5 decoding with checksum checking and
the checksum removed from the result string, is 111 (bits left to right). The same string would be 0x7
or decimal 7.
Thus, the command to implement the settings above would be:
C(0A)7
Or
C(0A)#7
9.2 Field of Interest
The reader optics are typically split into two separate fields - Field Of Interest 0 (FOI 0) and Field Of
Interest 1 (FOI 1). In certain circumstances, these fields can be customized to the requirements of the
user. In the default configuration of these fields FOI 0 is the High Density (HD) field and FOI 1 is the
Wide (W) field.
At a given focus distance, the FOI 0 field is designed to read small, low-mil barcodes while the FOI 1
field is designed to pick up large, wide barcodes.
This document will refer to FOI 0 as HD and FOI 1 as Wide.
Note: The CR900FD is a single Field of Interest reader. There is no FOI 0 in the CR900FD.
9.3 Reader Setting Persistence
Some reader settings have special behaviors under certain conditions, such as when resetting to
factory defaults. There are four categories for setting persistence, which are listed below.
This setting can be changed and saved. This setting is not affected by a ‘J’
command, nor by deleting the settings file.
Reset-on-boot
This setting can be changed but cannot be saved. On boot up the reader will
revert to the default value. A ‘J’ command will also reset this value to default
9.4 Docked State Settings
Keywords: #Charger, #Stand
9.4.1 Overview
Some readers support the ability to change behavior, based on whether they are in a docked state.
Docking can be achieved in two different ways. A reader is considered docked when it is placed in a
stand that has hardware to indicate its presence, such as a charging base, or, in the case of the CR5000
& CR5000RTC, when it is placed on a surface. The undocked state is when the reader is removed from
the stand or is picked up off a surface (again, for the CR5000 & CR5000RTC). These behavior changes
are controlled in three different ways.
1. Wired readers (except the CR5000 & CR5000RTC) have a reed switch that is acted on by a
magnet in the stand to indicate docked state. These readers check and act on the docked state
in order to change behavior.
2. By default, wireless readers have an In-Charger Event register and an Out-of-Charger Event
register. When the dock state of the reader changes, the corresponding event from the register
will be fired. By default, the events enable battery charge level indication when docked.
3. The CR5000 & CR5000RTC utilizes a set of Standard registers that have corresponding In-Stand
and Out-of-Stand registers for each. The In-Stand or Out-of-Stand register values are copied to
the Standard registers when the reader detects a change in the docked state. Wireless
readers can be also configured (using register 2AB) to leverage this In-Stand/Out-ofStand/Standard register method. The In-Stand behavior takes effect when the wireless reader is
placed in its charger base, and the Out-of-Stand behavior takes effect when the wireless reader
is removed from its charger base.
For the docked/undocked settings to have any effect, the reader must be configured to detect a stand
(bit 6 of register 1F7). For the Bluetooth®-enabled readers, the reader must also be configured to
detect the charging base as a stand (register 2AB).
Changing the In-Stand and Out-of-Stand registers does not do anything immediately. The reader does
not look at the In-Stand Default Event register (2C2), for example, to decide what to do when it is
docked. Rather, the reader is always looking at the Default Event register (C4), but the Default Event
setting is changed when the reader is docked or undocked. For example, when the reader is docked,
the value of the In-Stand Default Event register (2C2) is copied to the Default Event register (C4).
The trigger for copying the In-Stand (or Out-of-Stand) settings to the corresponding standard settings is
an event that gets posted by the firmware when it detects a change in the docked state (again, the
charger for the Bluetooth® readers and the counter/table for the CR5000 & CR5000RTC). The “update
behavior based on the stand” event (event 0xF2 as used by register C4 and other registers that utilize
events) is the generic event that will trigger this operation.
9.4.2 H5 commands (CR5000 & CR5000RTC only)
The CR5000 & CR5000RTC support several standard presentation and handheld modes, which can be
specified using the H5 subcommands. These commands are described in the Command Types section
of this document. Of note here, however, is that these commands will overwrite the In-Stand or Outof-Stand registers with pre-defined values, and perform the equivalent of event 0xF2 mentioned
above, so that the In-Stand or Out-of-Stand settings take effect immediately. To create a custom
configuration barcode that uses an H5 command, but also modifies one of the In-Stand or Out-of-Stand
registers, first issue the H5 command, then modify the In-Stand or Out-of-Stand register(s), and then
issue event 0xF2 to force the settings to take effect immediately. Note that if the custom configuration
barcode does not modify any of the In-Stand or Out-of-Stand settings directly, then event 0xF2 is not
necessary.
As an example, to create a custom configuration code that sets the beep volume of the CR5000 &
CR5000RTC to 30% at all times and configures the on-counter (In-Stand) Trigger mode with the
exception that targeting lights are not illuminated, type these commands (with or without all the
comments) into a text editor:
H5(in)0 ;This command sets the built-in on-counter (In-Stand) Trigger Mode.
C(2DB)0 ;This command sets the In-Stand Target Enable register to 0, where the
H5(in)0 would have set it to 1.
$%F2 ;This command updates the standard registers from either the In-Stand or
Out-of-Stand registers, depending on the current state. For example,
if $%F2 is issued while the reader is in the Out-of-Stand state, the
reader will copy all of the Out-of-Stand registers to the corresponding
standard registers. (In this example, register 2DB is the In-Stand value
for standard register 0F).
C(26)1E ;This command sets the beep volume to 30% of full by setting the
register to 0x1E (30 in decimal). Standard commands, such as this one,
are not affected by the In-Stand or Out-of-Stand state so they apply at
all times.
Save the file with the .crb extension, then either loaded to the reader directly or convert it into a Data
Matrix configuration code readable by the CR5000 & CR5000RTC using a Code barcode generation tool
such as CortexTools®.
Note: Readers with a vibration motor are the CR1400,
CR1400XHD, CR1428, CR2600, CR2600XHD, CR3600,
CR3600DPM and CR6000.
Keywords: #Beep, #Vibration
04
Continuous
Illumination During
Read
0
CR5000:
CR5000RTC:
1
0: Minimal Illumination (Illumination stops whenever not
needed during the Read Cycle – this produces a little more
flashing but reduces power consumption to a degree)
1: Leave Illumination On Until End of the Read Cycle
Leave illumination on during read
05
USB Declaration Wait
State
0
0: Declare enumeration after receipt of set LED status report
1: Declare enumeration after receipt of get report descriptor
command (used for some Windows® CE-based devices)
2: Declare enumeration after the receipt of set configuration
command.
Special case for USB enumeration that doesn’t require Host
keyboard response