Supported Symbology Types vs. Scanner Mode
This appendix provides a matrix of scanner modes and supported symbology types in each mode, and the Windows registry keys for the OPOS Scanner and Scale logical names and drivers.
Table 1: Supported Symbology Types vs. Scanner Modes
Symbology | Scanner Mode | |||
---|---|---|---|---|
Type | Value | IBM HID | SNAPI | Nixdorf Mode B |
UPC-A | SCAN_SDT_UPCA | X | X | X |
UPC-A with supplemental barcode | SCAN_SDT_UPCA_S | X | X | X |
UPC-E | SCAN_SDT_UPCE | X | X | X |
UPC-E with supplemental barcode | SCAN_SDT_UPCE_S | X | X | X |
UPC-D1 | SCAN_SDT_UPCD1 | X | X | X |
UPC-D2 | SCAN_SDT_UPCD2 | X | X | X |
UPC-D3 | SCAN_SDT_UPCD3 | X | X | X |
UPC-D4 | SCAN_SDT_UPCD4 | X | X | X |
UPC-D5 | SCAN_SDT_UPCD5 | X | X | X |
EAN 8 ( =JAN 8 ) | SCAN_SDT_EAN8 | X | X | X |
JAN 8 ( = EAN 8 ) | SCAN_SDT_JAN8 | X | X | X |
EAN 8 with supplemental barcode | SCAN_SDT_EAN8_S | X | X | X |
EAN 13 ( = JAN 13 ) | SCAN_SDT_EAN13 | X | X | X |
JAN 13 ( = EAN 13 ) | SCAN_SDT_JAN13 | X | X | X |
EAN 13 with supplemental barcode | SCAN_SDT_EAN13_S | X | X | X |
EAN-128 | SCAN_SDT_EAN128 | X | X | X |
Standard (or Discrete) 2 of 5 | SCAN_SDT_TF | X | X | X |
Interleaved 2 of 5 | SCAN_SDT_ITF | X | X | X |
Codabar | SCAN_SDT_Codabar | X | X | X |
Code 39 | SCAN_SDT_Code39 | X | X | X |
Code 128 | SCAN_SDT_Code128 | X | X | X |
OCR "A" | SCAN_SDT_OCRA | X | X | - |
OCR "B” | SCAN_SDT_OCRB | X | X | - |
GS1 DataBar Omnidirectional (normal or stacked) | SCAN_SDT_GS1_DATABAR | X | X | - |
GS1 DataBar Expanded (normal or stacked) | SCAN_SDT_GS1_DATABAR_E | X | X | - |
Composite Component A | SCAN_SDT_CCA | - | X | - |
Composite Component B | SCAN_SDT_CCB | - | X | - |
Composite Component C | SCAN_SDT_CCC | - | X | - |
PDF 417 | SCAN_SDT_PDF417 | X | X | - |
MAXICODE | SCAN_SDT_MAXICODE | X | X | - |
Data Matrix | SCAN_SDT_DATAMATRIX | - | X | - |
QR Code | SCAN_SDT_QRCODE | - | X | - |
Micro QR Code | SCAN_SDT_UQRCODE | - | X | - |
Aztec | SCAN_SDT_AZTEC | - | X | - |
Micro PDF 417 | SCAN_SDT_UPDF417 | - | X | - |
When the scanner is in Wincor-Nixdorf RS- 232 Mode B, the Zebra OPOS return value for the ScanDataType property differs from the expected value for the bar code types listed in Table below.
Table 2: Bar Code Types Not Accurately Identified in Wincor-Nixdorf RS-232 Mode B
Symbology Type | Expected Value | Zebra RSM OPOS Return Value | Comments |
---|---|---|---|
UPC-A with supplemental bar code | SCAN_SDT_UPCA_S | SCAN_SDT_UPCA | Nixdorf Mode B cannot distinguish UPCA since it identifies bar code types UPCA, UPCA_S, EAN13, EAN13_S, and BOOKLAND as one type. |
UPC-E with supplemental bar code | SCAN_SDT_UPCE_S | SCAN_SDT_UPCE | Nixdorf Mode B identifies both bar code types UPCE and UPCE_S as UPCE. |
EAN 8 with supplemental bar code | SCAN_SDT_EAN8_S | SCAN_SDT_EAN8 | Nixdorf Mode B identifies both EAN8 and EAN8_S bar code types as EAN8. |
EAN 13 | SCAN_SDT_EAN13 | SCAN_SDT_UPCA | Nixdorf Mode B cannot distinguish EAN 13 since it identifies bar code types UPCA, UPCA_S, EAN13, EAN13_S, and BOOKLAND as one type. |
EAN 13 with supplemental bar code | SCAN_SDT_EAN13_S | SCAN_SDT_UPCA | Nixdorf Mode B cannot distinguish EAN 13_S since it identifies bar code types UPCA, UPCA_S, EAN13, EAN13_S, and BOOKLAND as one type. |
Windows Registry Keys for OPOS Driver
Table 3: Registry Paths to Default Scanner OPOS Logical Names
Key Path (x64) |
HKEY_LOCAL_MACHINE\SOFTWARE\OLEforRetail\ServiceOPOS\Scanner\ZEBRA_SCANNER |
HKEY_LOCAL_MACHINE\SOFTWARE\OLEforRetail\ServiceOPOS\Scanner\MOTOROLA_SCANNER |
HKEY_LOCAL_MACHINE\SOFTWARE\OLEforRetail\ServiceOPOS\Scanner\STI_USBSCANNER |
HKEY_LOCAL_MACHINE\SOFTWARE\OLEforRetail\ServiceOPOS\Scanner\SYMBOL_SCANNER |
NOTE On 64-bit Windows, there are registry keys for 32-bit applications under the corresponding Wow6432Node.
Table 4: Registry Keys for OPOS Scanner Logical Names
Value Name | Sample Data | Description |
---|---|---|
(Default) | ZebraScannerSO.ScannerSO | Service object name of the scanner OPOS. |
Baud rate | 9600 115200 |
Baud rate for serial port. |
CheckDigitAutoCalculate | 0 1 |
Automatically calculate Check Digit and append to the decode data label. 0= Disable 1 = Enable |
CompatibilityMode | 0 1 |
Specifies how the decode data is stored in the ScanData and ScanDataLabel properties. 0 = Decode data is stored according to the UPOS specification. 1 = ScanData property contains the same data as the ScanDataLabel property. |
Connection1 | ConnUSB | Added for backward compatibility. |
Description | Zebra scanner logical device | Logical device description. |
ExclusiveClaimLevel | 0 1 |
Specifies whether an OPOS claim is required to be exclusive to the scanners in the logical device. For example, if a scanner is exclusively claimed by an application, other applications cannot claim it or send management commands to that scanner. 0 = OPOS claim exclusivity is not required for all scanners in the logical device. 1 = OPOS claim is exclusive to all scanners in the logical device. Any other value = OPOS claim is able to claim at least one scanner in the logical device. |
ModelNumber | 1. DS6707-SR20001ZZR,DS9808* (* Represents any model of the DS9808.) |
Comma separated list of scanner model numbers for use with OPOS driver. |
PID1 | * (Represents all PIDs) | Product IDs of Zebra bar code scanners. |
Port | COM1 COM1,COM2 * (Represent any COM port) |
Comma or space delimited list of serial ports needed for use with OPOS driver. |
SerialNumber | 1. 7116000500337, 7087000501981 2. * (Represents all serial numbers) |
Comma separated list of scanner serial numbers for use with OPOS driver. |
Type | SNAPI NIXMODB USBIBMHID USBIBMTT SSI ALL | Comma or space delimited list of scanner modes from the TypePool. |
TypePool | SNAPI NIXMODB USBIBMHID USBIBMTT SSI ALL | All the supported types only for reference. OPOS driver does not read this entry. |
VID | 0x05E0 | Vendor ID of Zebra bar code scanners. |
1 Added to maintain the backward compatibility and are optional if the CompatibilityMode is set to disable backward compatibility.
Table 5: Registry Paths to Default Scale OPOS Logical Names
Key Path (x64) |
HKEY_LOCAL_MACHINE\SOFTWARE\OLEforRetail\ServiceOPOS\Scale\ZEBRAA_SCALE |
HKEY_LOCAL_MACHINE\SOFTWARE\OLEforRetail\ServiceOPOS\Scale\MOTOROLA_SCALE |
Table 6: Registry Keys for OPOS Scale Logical Names
Value Name | Sample Data | Description |
---|---|---|
(Default) | ScaleOPOS.ScalSO | Service object name of the Scale OPOS. |
DeviceDescription | Zebra Technologies Scale logical device | Logical device description. |
ExclusiveClaimLevel | 0 1 |
0 =OPOS Scale service object does not get exclusive access of the device on claiming the device. This may be required if an application needs to access both scanner and scale of the MP6200 scanner at same time. 1 =Scale service object does claim the device exclusively so that no other POS application can access the device. |
LiveWeightFrequency | 2 | Number of live weight events per second (values from 1 to 100). |
NoTimeOutOnReadWeight | 0 1 |
0 = ReadWeight method returns OPOS_E_TIMEOUT if no valid weight data is retrieved before the time out elapse. 1 = ReadWeight method does not return OPOS_E_TIMEOUT if no valid weight data is retrieved before the time out elapse. It always reports OPOS_SUCCESS as result code. |
ZeroValidOveride | 0 1 |
0 = ReadWeight does not accept zero weight as a valid reading. 1 = ReadWeight does accept zero weight as a valid reading. |
WeightChangeThreshold | Unit of the value is based on scales weight unit with assumed decimal point. For example, 10 = 0.01kr or 0.01lb | Defines hoe large the weight reported from the scanner should differ from the previously reported value in order for the last reported weight value to be a legitimate weight. |
WeightChangeMonitorInterval | Polling interval in milliseconds. | Defines how fast the SO should poll the scale to detect a change of weight on the platter. |
UnstableWeightisADifferentWeights | 0 = unstable no weight change 1 = unstable reported as weight change |
Define whether even an unstable weight reported after stab;e weight is considered as a change ot wight on the platter. |
Table 7: Registry Path for Scanner OPOS Driver
Key Path (x64) | HKEY_LOCAL_MACHINE\SOFTWARE\Zebra\Zebra Scanners\OPOS\Scanner |
Table 8: Registry Keys for Scanner OPOS Driver - Applies to all Scanner OPOS Logical Names
Value Name | Values | Description |
---|---|---|
AutoDisableControl | 0 = Disable 1 = Enable |
0 = Normal AutoDisable property operation. 1 = Automatically disables the scanner after each data event regardless of the value of OPOS property AutoDisable. |
AutoDisableDelay | 0 | Delay in milliseconds to disable the scanner automatically after each data event. Default value is 0. |
DataEventAutoDisableControl | 0 = Disable 1 = Enable |
0 = Normal DataEventEnable operation. 1 = Scanner SO overrides the value of OPOS property DataEventEnable and always delivers the data events to application layer. |
DataEventDelay | 0 | Minimum time gap in milliseconds between two decode data events. Default value is 0 ms. |
EnableTrace | 0 = Disable 1 = Enable |
Enable or disable debug/engineering message entries to the log file specified by LogFilePath. |
InterCommandDelay | 0 | Minimum time gap in milliseconds between OPOS method calls. Default value is 0 ms. |
LogFilePath | \Program Files\Zebra Technologies\Barcode Scanners\Scanner SDK\OPOS\Scanner OPOS\bin\Logs\stiopos.txt | Path and filename for log file if EnableTrace is enabled. |
SetDeviceEnableStateOnFailure | 0 = Disable 1 = Enable |
0 = Normal Result Code operation 1 = Regardless of the result of DeviceEnable call, Result Code is set to OPOS_SUCCESS. |
SetEnableDisableOnEvent | 0 = Disable 1 = Enable |
0 = Normal Enable/Disable operation 1 = SO keeps the device Enable/Disable state in same state as SO DeviceEnable state. If an external application changes the device state, the SO immediately corrects it. |
SetHardwareAutoDisableState | 0 = Disable 2 = Enable |
Controls the hardware ‘Scan Disable Mode’ setting on the scanner itself. 0 = Normal operation 2 = The SO sets the ‘Scan Disable Mode’ on the scanner to ‘Auto Disable’. This disables scanning after transmission of a bar code, and remains disabled until the host sends a Scan Enable. This feature is not supported by all scanner models. |
SyncDeviceEnableStateOnDiscovery | 0 = Disable 1 = Enable |
Sync a newly connected device’s enable / disable state with the current enable / disable state of the OPOS driver. This is helpful if a new scanner is connected to a POS system where it already has a connected scanner. At the time the new scanner is connected, if the state of the OPOS SO is ‘device disabled’ the newly connected scanner should also has to change its state to ‘device disable’. This synchronization will be performed if “SyncDeviceEnableStateOnDiscovery” is enabled. |
Table 9: Registry Path for Scale OPOS Driver
Key Path (x64) | HKEY_LOCAL_MACHINE\SOFTWARE\Zebra\Zebra Scanners\OPOS\Scale |
NOTE On 64-bit Windows, there are registry keys for 32-bit applications under the corresponding Wow6432Node.
Table 10: Registry Path for Scale OPOS Driver
Value Name | Values | Description |
---|---|---|
DebugPrint | 0 = Disable 1 = Enable |
Enable debug log messages viewable through a debug log viewer such as Microsoft DebugView. |
EngDbgStr | 0 = Disable 1 = Enable |
Enable detailed engineering-level debug messages through a debug log viewer. |
FileLog | 0 = Disable 1 = Enable |
Enable or disable debug/engineering message entries to the log file specified in the Location key. |
Level | 1 - 5 | Level of log messages, from minimal (1) to verbose (5). |
Location | \Program Files\Zebra Technologies\Barcode Scanners\Scanner SDK\OPOS\Scale OPOS\bin\Logs | Path name to log file if FileLog is enabled. |
For more details on how to use the registry, see Modified Claim Functionality.
Error Codes
Error Codes - OPOS Scanner
Table 11: Error Codes for OPOS Scanner
Message | Return Codes | Description |
---|---|---|
OPOS_S_CLOSED | 1 | The Control is closed. |
OPOS_S_IDLE | 2 | The Control is in a good state and is not busy. |
OPOS_S_BUSY | 3 | The Control is in a good state and is busy performing output. |
OPOS_S_ERROR | 4 | An error has been reported, and the application must recover the Control to a good state before normal I/O can resume. This property is always readable. |
OPOS_SUCCESS | 0 | The Operation completed without Errors. |
OPOS_E_CLOSED | 101 | An attempt was made to access a closed Device. |
OPOS_E_CLAIMED | 102 | An attempt was made to access a Physical Device that is claimed by another Control instance. The other Control must release the Physical Device before this access may be made. For exclusive-use devices, the application will also need to claim the Physical Device before the access is legal. |
OPOS_E_NOTCLAIMED | 103 | An attempt was made to access an exclusive-use device that must be claimed before the method or property set action can be used. If the Physical Device is already claimed by another Control instance, then the status E_CLAIMED is returned instead. |
OPOS_E_NOSERVICE | 104 | The Control cannot communicate with the Service, normally because of a setup or configuration error. |
OPOS_E_DISABLED | 105 | Cannot perform this operation while the Device is disabled. |
OPOS_E_ILLEGAL | 106 | An attempt was made to perform an illegal or unsupported operation with the Device, or an invalid parameter value was used. |
OPOS_E_NOHARDWARE | 107 | The Physical Device is not connected to the system or is not powered on. |
OPOS_E_OFFLINE | 108 | The Physical Device is off-line. |
OPOS_E_NOEXIST | 109 | The file name (or other specified value) does not exist. |
OPOS_E_EXISTS | 110 | The file name (or other specified value) already exists. |
OPOS_E_FAILURE | 111 | The Device cannot perform the requested procedure, even though the Physical Device is connected to the system, powered on, and on-line. |
OPOS_E_TIMEOUT | 112 | The Service timed out waiting for a response from the Physical Device, or the Control timed out waiting for a response from the Service |
OPOS_E_BUSY | 113 | The current Service state does not allow this request. For example, if asynchronous output is in progress, certain methods may not be allowed. |
OPOS_E_EXTENDED | 114 | A device category-specific error condition occurred. The error condition code is held in an extended error code. |
OPOS_E_DEPRECATED | 115 | The requested operation can not be performed since it has been deprecated. See “Deprecation Handling” on page Intro-38 for additional information. |
OPOS_ESTATS_ERROR | 280 | At least one of the specified statistics could not be reset. |
OPOS_ESTATS_DEPENDENCY | 282 | At least one other statistic is required to be reset in addition to a requested statistic. |
OPOS_OR_ALREADYOPEN | 301 | Control already open. |
OPOS_OR_REGBADNAME | 302 | The registry does not contain a key for the specified device name. |
OPOS_OR_REGPROGID | 303 | Could not read the device name key's default value, or could not convert the Programmatic ID it holds into a valid Class ID. |
OPOS_OR_CREATE | 304 | Could not create a service object instance, or could not get its IDispatch interface. |
OPOS_OR_BADIF | 305 | The service object does not support one or more of the methods required by its release. |
OPOS_OR_FAILEDOPEN | 306 | The service object returned a failure status from its open call, but does not have a more specific failure code. |
OPOS_OR_BADVERSION | 307 | The service object major version number does not match the control object major version number. The following values can be returned by the Service Object if it returns a failure status from its open call. The Service Object can choose to return one of these, if applicable, or define additional values. (See the Control Programmer's Guide's GetOpenResult description for details on how the Service Object returns these values. If the Service Object does not implement GetOpenResult, then OpenResult returns OPOS_OR_FAILEDOPEN.) |
OPOS_ORS_NOPORT | 401 | The Service Object tried to access an I/O port (for example, an RS232 port) during Open processing, but the port that is configured for the DeviceName is invalid or inaccessible. As a general rule, an SO should refrain from accessing the physical device until the DeviceEnabled property is set to TRUE. But in some cases, it may require some access at Open; for instance, to dynamically determining the device type in order to set the DeviceName and DeviceDescription properties. |
OPOS_ORS_NOTSUPPORTED | 402 | The Service Object does not support the specified device. The SO has determined that it does not have the ability to control the device it is opening. This determination may be due to an inspection of the registry entries for the device, or dynamic querying of the device during open processing. |
OPOS_ORS_CONFIG | 403 | Configuration information error. Usually this is due to incomplete configuration of the registry, such that the SO does not have sufficient or valid data to open the device. |
OPOS_ORS_SPECIFIC | 450 | Errors greater than this value are service object specific. If the previous return values do not apply, then the SO may define additional OpenResult values. These values are Service Object-specific, but may be of value in these cases: 1) The Application logs or reports this error during debug and testing. 2) The Application adds SO-specific logic, to attempt to report more error conditions or to recover from them. This property is initialized by the Open method. |
OPOS_EL_OUTPUT | 1 | Error occurred while processing asynchronous output. |
OPOS_EL_INPUT | 2 | Error occurred while gathering or processing event-driven input.No previously buffered input data is available |
OPOS_EL_INPUT_DATA | 3 | Error occurred while gathering or processing event-driven input, and some previously buffered data is available. |
OPOS_ER_RETRY | 11 | Typically valid only when locus is EL_OUTPUT. Retry the asynchronous output. The error state is exited. May be valid when locus is EL_INPUT. Default when locus is EL_OUTPUT. |
OPOS_ER_CLEAR | 12 | Clear all buffered output data (including all asynchronous output) or buffered input data. The error state is exited. Default when locus is EL_INPUT. |
OPOS_ER_CONTINUEINPUT | 13 | Used only when locus is EL_INPUT_DATA. Acknowledges the error and directs the Control to continue processing. The Control remains in the error state and will deliver additional DataEvents as directed by the DataEventEnabled property. When all input has been delivered and the DataEventEnabled property is again set to true, then another ErrorEvent is delivered with locus EL_INPUT. Default when locus is EL_INPUT_DATA. |
Error Codes - OPOS Scale
Table 12: Error Codes for OPOS Scale
Message | Return Codes | Description |
---|---|---|
SCAL_SUE_STABLE_WEIGHT | 11 | Scale weight is stable. The ScaleLiveWeight property is updated before event delivery |
SCAL_SUE_WEIGHT_UNSTABLE | 12 | Scale weight is unstable. |
SCAL_SUE_WEIGHT_ZERO | 13 | Scale weight is zero |
SCAL_SUE_WEIGHT_OVERWEIGHT | 14 | Scale weight is overweight. |
SCAL_SUE_NOT_READY | 15 | Scale is not ready to weigh. |
SCAL_SUE_WEIGHT_UNDER_ZERO | 16 | Scale weight is under zero. |
OPOS_ESCAL_OVERWEIGHT | 201 | The weight was over MaximumWeight. |
OPOS_ESCAL_UNDER_ZERO | 202 | The scale is reporting a weight that is less than zero due to a calibration error. The scale should be recalibrated. |
OPOS_ESCAL_SAME_WEIGHT | 203 | The scale is reporting that the item/weight on the scale is identical to the previously reported item/weight; i.e., the item has not been removed from the scale. |
Read Weight Error and Status Codes
Error Codes and Extended Error Codes
Custom Error Codes and Extended Error codes for the Read Weight scenarios can be set by defining the following registry keys under HKEY_LOCAL_MACHINE\SOFTWARE\Zebra\Zebra Scanners\OPOS\Scale.
NOTE : If the registry key is not defined, the default value will be taken.
Table 13: Scale Read Weight Error Codes
Description | Registry Key | Default Value |
---|---|---|
Timeout | ExResultCode_TimeOut | 0 |
Weight Under Zero | ExResultCode_WeightUnderZero | 202 |
ResultCode_WeightUnderZero | 114 | |
Weight Over Limit | ExResultCode_WeightOverLimit | 201 |
ResultCode_WeightOverLimit | 114 | |
Zero Weight | ExResultCode_ZeroWeight | 0 |
ResultCode_ZeroWeight | 112 | |
Unstable Weight | ExResultCode_UnstableWeight | 0 |
ResultCode_UnstableWeight | 112 |
Status Update Events
If the property StatusNotify is true when the scale is enabled, the following StatusUpdateEvent will be generated. Each event is denoted by the tag given in the tag column.
Table 14: Status Update Events
Event | Tag |
---|---|
SCAL_SUE_WEIGHT_UNSTABLE | US |
SCAL_SUE_WEIGHT_ZERO | WZ |
SCAL_SUE_WEIGHT_OVERWEIGHT | OW |
SCAL_SUE_NOT_READY | NR |
SCAL_SUE_WEIGHT_UNDER_ZERO | UZ |