Appendix

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