Extended Channel Interpretation (ECI) is an extension to the communication protocol that is used to transmit data from a bar code reader to a host when a bar code symbol is scanned. It enables the application software to receive additional information about the intended interpretation of the message contained within the barcode symbol and even details about the scan itself. ECI was developed as a symbology-independent extension of the Global Label Identifier (GLI) system used in the PDF417 bar code.
Description
In the default mode, where Extended Channel Interpretation is not in effect, the interface between the reader and the host is said to be in "Basic Channel Mode". In this mode, each octet of transmitted data is defined (by the corresponding bar code symbology standard) to correspond directly to a single data character code point in some default character set, normally ISO/IEC 8859-1 (Latin-1).
However, when ECI is in effect, the data interface is said to be in "Extended Channel Mode". In this mode the interpretation of the transmitted data is defined by the current ECI modes that are enabled, which are activated and deactivated by "ECI indicators" included in the transmitted data.
Within the data transmission protocol the use of ECI is indicated explicitly by a modification to the symbology indicator that the decoder will recognize and interpret accordingly in order to disambiguate between ECI and non-ECI encoded messages. If the reader is not ECI enabled or the application does not support the ECI indicators that are in effect then the scan should be aborted.
The ECI information is not part of the ultimate bar code message and its use is normally transparent to the user in basic image scanning scenarios. The application presents the user with the intended message, but it does not normally render the various ECI indicators that were used to derive this message or to provide annotation or additional metadata. For advanced applications (including system debugging and data validation) the ECI information may be rendered inline with the bar code message or extracted and presented separately.
Types of ECI indicator
ECI indicators may be included at various points in the transmitted message, and may be either of "encodable" type or of "non-encodable" or "signal" type.
- Encodable ECIs
- These indicators are part of the message and define the format for all or part of the data, such as the intended character set or the data compression scheme that is in effect such as Gzip.
- Signal ECIs
- These indicators are not part of the message and they may either be embedded in the bar code symbol separately from the message or may not be present in the symbol at all but added by the reader at scan time. Signal ECIs are used to convey information about the processing of the data, such as whether it is a fragment of a multi-symbol scan process, whether an error condition occurred during reading, or even to provide environment information such as what ambient light level was measured or provide a low-battery indication.
Common use case: Enable support for international character sets
The most common use for Extended Channel Interpretation is to allow usually unsupported national character sets such as Arabic, Greek, or Japanese to be used reliably in bar code symbols.[1] An ECI-enabled bar code symbol may use several character sets by embedding several character set ECI indicators to delimit segments of the message that are encoded using different code pages.
For most barcode symbologies, the default code page (if not specified by ECI) is ISO/IEC 8859-1 (also known as Latin-1) as shown in bold below. Well-known ECI values, which are commonly used to indicate that a message segment is encoded using a specific code page or character encoding: [2][3]
ECI indicator | Code page or encoding | Notes |
---|---|---|
\000000, \000002 | Code page 437 | |
\000001, \000003 | ISO/IEC 8859-1 | Latin-1 |
\000004 | ISO/IEC 8859-2 | Latin-2 |
\000005 | ISO/IEC 8859-3 | Latin-3 |
\000006 | ISO/IEC 8859-4 | Latin-4 |
\000007 | ISO/IEC 8859-5 | Latin/Cyrillic |
\000008 | ISO/IEC 8859-6 | Latin/Arabic |
\000009 | ISO/IEC 8859-7 | Latin/Greek |
\000010 | ISO/IEC 8859-8 | Latin/Hebrew |
\000011 | ISO/IEC 8859-9 | Latin-5 |
\000012 | ISO/IEC 8859-10 | Latin-6 |
\000013 | ISO/IEC 8859-11 | Latin/Thai |
\000014 | Reversed | |
\000015 | ISO/IEC 8859-13 | Latin-7 |
\000016 | ISO/IEC 8859-14 | Latin-8 (Celtic) |
\000017 | ISO/IEC 8859-15 | Latin-9 |
\000018 | ISO/IEC 8859-16 | Latin-10 |
\000019 | Reversed | |
\000020 | Shift JIS | |
\000021 | Windows-1250 | Superset of Latin-2 |
\000022 | Windows-1251 | Latin/Cyrillic |
\000023 | Windows-1252 | Superset of Latin-1 |
\000024 | Windows-1256 | Arabic |
\000025 | UTF-16 | Big endian |
\000026 | UTF-8 | |
\000027 | ISO/IEC 646:1991 IRV | US-ASCII |
\000028 | Big5 | |
\000029 | GB/T 2312 | |
\000030 | KS X 1001 | |
\000031 | GBK | |
\000032 | GB 18030 | |
\000033 | UTF-16 | Little endian |
\000034 | UTF-32 | Big endian |
\000035 | UTF-32 | Little endian |
\000170 | ISO/IEC 646 INV | |
\000899 | 8-bit binary data |