About Scanner SDK for Windows

Overview

The Zebra Scanner Software Developer Kit (SDK) defines an architectural framework providing a single programming interface across multiple programming languages (such as MS .NET, C++, Java) and across multiple system environments (such as Windows and Linux) for all scanners communication variants (such as IBMHID, SNAPI, HIDKB, Nixdorf Mode B, etc.).

The Zebra Scanner SDK includes a suite of components that provides a unified software development framework with a wide range of functions for interfacing Zebra scanners to user applications and solutions.

With this SDK you can read bar codes, manage scanner configurations, capture images/videos and selectively choose a list of scanners on which to work. While one application is in one programming language using a scanner or a set of scanners, another application in a different language can be used differently within the same system environment.

Figure 1: Software Developer Framework

The SDK can build an application with complete control of its scanner's capabilities.

  • Data, Barcode

    • Simulation HID Keyboard output
    • OPOS/JPOS output
    • SNAPI output
  • Command and Control

    • LED and Beeper Control
    • Aim Control
  • Imaging

    • Capture / Transfer of images
    • Capture / Transfer of Video
  • Remote Scanner Management

    • Asset Tracking
    • Device Configuration (Get, Set and Store scanner attributes)
    • Firmware Upgrade
    • Scanner Communication Protocol Switching
    • Service to Automate Configuration / Firmware Upgrade Process

NOTE For a list of a scanner's supported attribute (parameter) numbers and definitions, refer to the Product Reference Guide for that model scanner, available from the Zebra Support website at http://www.zebra.com/support. Attributes include configuration parameters, monitored data, and asset tracking information.

Scanner SDK Architecture

Figure 2: SDK Architecture

You can configure Zebra scanner devices to be operated in different host communication modes such as USB SNAPI, USB OPOS, USB HID Keyboard, USB IBM Table-top, SSI, and RS232 Nixdorf Mode B. Device feature support varies depending on communication mode but all modes support bar code scanning. Refer to the Product Reference Guide of a specific scanner for the bar codes to set its supported host communication modes.

Using the Zebra Scanner SDK, you can switch between supported host communication modes by calling the host variant switching command programmatically. This is useful when the device is in a less feature supportive mode and some advanced functionality is required but not supported by the current communication mode. The scanner can be switched to a feature rich mode and commands executed before switching the scanner back to the previous mode.

For example, you want to disable the UPC-A symbology but the device is in USB HID Keyboard mode. If the mode is supported by the scanner, you may switch to USB SNAPI or USB OPOS, set UPC- A to be disabled permanently and then switch the scanner back to USB HID Keyboard mode. See Table 1 below for more information.

Table 1 illustrates scanner capabilities supported by each communication mode. Refer to the specifications of a device for its ability to support of each communication mode.

Table 1: Scanner Device Communication Modes Vs. Capabilities

Capabilities USB SNAPI USB OPOS USB HID Keyboard USB IBM Table-top RS232 Nixdorf B SSI
Data Supported Supported Supported Supported Supported Supported
Host Variant Switching Supported Supported Supported Supported Not Available Not Available
Management Supported Supported Not Available Supported Not Available Supported
Image & Video Supported Not Available Not Available Not Available Not Available Supported (Image Only)
Simulated HID Keyboard Output* Supported Supported Not Available Supported Supported* Supported
*Advanced Data Formatting (ADF) is not supported when using Simulated HID Keyboard Output.

Simulated HID Keyboard Output is a feature enabling scanners in USB SNAPI, USB IBM Table-top, USB OPOS, or SSI mode to emulate HID Keyboard keystrokes to a host system for scanned data labels. It sends the content of the scanned data label as HID Keyboard keystrokes thus emulating USB HID Keyboard scanner mode.

Multiple Scanner Device Identification Methodology For Applications

The Zebra Scanner SDK supports multiple scanner devices to any application that runs on top of CoreScanner APIs. Each scanner device is shown to the user application by a unique scanner identification number. The scanner ID is a numeric value assigned to each connected device so there cannot be multiple scanner devices holding the same scanner ID.

Asset tracking information like model number, serial number, current firmware version and date of manufacture are available if the scanner and its current host mode support the management feature.

For example, in some modes like USB HID Keyboard, you do not see asset tracking information but the same scanner device shows you such information when it is in USB OPOS or USB SNAPI mode.

The format of device asset tracking information can follow different naming conventions for device model, serial number or current firmware version. For example, the length of a serial number for DS6707 and DS9808 scanners can be different.

How Multiple Applications Access Multiple Scanners From Scanner SDK

The Zebra Scanner SDK supports multiple applications accessing multiple scanner devices connected to the host at the same time.

As described previously, a scanner ID uniquely identifies a connected scanner device to all applications. A scanner ID is consistent among all applications for one SDK instance. If the CoreScanner service or the host machine is restarted, a device may be assigned a different scanner ID but it is unique and referenced by all applications.

Three Applications Connected To One Scanner

Figure 3: Three Applications Connected To One Scanner

Implementation Details

  • Three applications are connected to one scanner.
  • App 1 & App 2 support bi-directional (two way) communication with the scanner.
  • Legacy App 3 supported by driver converting SNAPI data into HID format.

Three Applications Connected To Two Scanners

Figure 4: Three Applications Connected To Two Scanners

Implementation Details

  • Three applications are connected to two scanners.
  • App 1 and App 2 support bi-directional (two way) communication with the DS6878.
  • Legacy App 3 receives HID keyboard emulation data from the LS2208.

Many-to-Many Application Device Usage

Figure 5: Many-to-Many Application Device Usage

Implementation Details

  • App 1 performs image capture with the DS6878.
  • App 2 can remotely manage both the DS6878 and LS4208.
  • App 3 receives OPOS data from both the DS6878 and LS4208.

One Application Connected to Two Scanners

Figure 6: One Application Connected to Two Scanners

Implementation Details

  • One application can manage multiple scanners in multiple communication interfaces.
  • The application can capture data, image and video, send management commands and receive responses from multiple scanners.
  • All responses from the scanners consist of the scanner device details (ScannerID, serial number, model number, etc.) identifying the device that sent the response.

For example, a bar code event for a scanned label is shown below. The scanned data label arrives with a unique ScannerID and the scanner's model number and the serial number.



<outArgs>
    <scannerID>1</scannerID>
    <arg-xml>
        <scandata>
            <modelnumber>DS6707-SR20001ZZR</modelnumber>
            <serialnumber>7114000503308</serialnumber>
            <GUID>9008A01BB72BA34BB519806B63701AAA</GUID>
            <datatype>11</datatype>
            <datalabel>0x39 0x37 0x38 0x30 0x32 0x30 0x31 0x34</datalabel>
            <rawdata>0x39 0x37 0x38 0x30 0x32 0x30 0x31 0x34</rawdata>
        </scandata>
    </arg-xml>
</outArgs>        

Supported Devices

For the compatible devices list, please visit following page.

https://www.zebra.com/us/en/support-downloads/software/developer-tools/scanner-sdk-for-windows.html

Version History

Version 3.07.0012 - 07/2026

  1. Enhanced OPOS Driver
    1. Added platform architecture details to the system info log file in OPOS Scanner and Scale.
    2. Added architecture-specific log rotation. Separate log files are now generated for x64 and x86 instances based on their respective configurations.
    3. Updated the default and minimum log file size for spdlog configuration to be 5MB.
    4. Enhanced Scanner and Scale sample application code to improve code readability.
    5. Bug Fix - Fixed an issue in OPOS Scale where the GoodWeightReadCount incorrectly increased by 2 after performing the initialization process.
    6. Bug Fix - Updated the time delay between live weight readings from 50ms to 500ms for OPOS Scale.
    7. Bug Fix - Fixed an issue where the check digit was not received for EAN barcodes.
    8. Bug Fix - Resolved an intermittent cessation of barcode scans after a system reboot or idle state.
    9. Bug Fix - Resolved an intermittent hang in POS application following a detach in an auxiliary device connected to Bioptic scanner.
    10. Bug Fix - Fixed an issue in OPOS Scanner where the DirectIO command (NCR_DIO_SCANNER_TONE) caused a POS application crash.
    11. Bug Fix - Resolved a formatting issue when logging binary scan data in OPOS Scanner logs which was causing an intermittent crash.
    12. Bug Fix - Minor sample appfix - Fixed an issue where the Internal Health Check incorrectly triggered and reused the previous Check Health mode state when starting a new session.
    13. Bug Fix - Fixed an incorrect success response for Reset Statistics when the scanner is detached.
  2. Enhanced JPOS Driver
    1. Added support to seamlessly communicate with new scanners connected to host without requiring initialization through Open-Claim-DeviceEnable.
    2. Bug Fix - Fixed an issue where an incorrect response was returned for release or close calls in the JPOS scale when the scanner is disconnected.
    3. Bug Fix - Fixed an issue where a device mistakenly enabled despite mismatched logical and physical device host modes.
    4. Bug Fix - Fixed an issue where the Clear Input function improperly cleared the Scan Data Label instead of only clearing data events.
    5. Bug Fix - Resolved the issue where the Device Enable command incorrectly functioned without a physical device attached.
    6. Bug fix - Fixedshowing correct weight value in JPOS Scale log file upon performing zero scale process.
    7. Bug fix - Fixed ZeroScale returning success when the scanner fails to reach Zero.
    8. Bug Fix - Minor sample appfix -Fixed the Hex View textbox improperly displaying previously decoded data in the Scan Data Label after an instance was closed.
    9. Bug fix - Minor sample appfix -Fix on "Auto Data Event Enable" UI status issue.
  3. C# and C++ Sample Applications
    1. Enhanced C# and C++ sample application code to improve code readability.
    2. Enhanced Scanner WMI and Driver WMI sample application code to improve code readability.

Version 3.07.0009 - 04/2026

  1. CoreScanner Driver
    1. Bug Fix - Fixed a race condition occurring when pairing a Bluetooth scanner to the PC if the Bluetooth Adapters load after CoreScanner service.
  2. Enhanced OPOS Driver
    1. Added Spdlog logging support for OPOS scanner and scale.
    2. Added support to identify HanXin Code and GridMatrix barcodes.
    3. Bug Fix - Minor sample app fix - Fixed an issue where the OPOS Scale Data Event Enable button did not automatically uncheck.
    4. Bug Fix - Fixed an issue where Direct IO commands logged misleading success statuses when the scanner was disconnected.
  3. Enhanced JPOS Driver
    1. Added support to identify HanXin Code and GridMatrix barcodes.
    2. Bug Fix - Fixed an issue where Direct IO commands logged misleading success statuses when the scanner was disconnected.
    3. Bug Fix - Fixed an issue where JPOS Scale Device Enable setting would automatically enable after enabling Live Weight.
    4. Bug Fix - Resolved an issue where the Health Check Text UI displayed a previous result in VDI Host Mode.
    5. Bug Fix - Minor sample app fix - Cleared sample application fields with Physical Device Name and Device Description upon JPOS Close.
    6. Bug Fix - Minor sample app fix - Cleared OutXML content in the sample application after executing DirectIO Commands.
    7. Bug Fix - Fixed malformed XML in Direct IO commands to be validated before execution.
    8. Bug Fix - Fixed an issue preventing the execution of JPOSTest.bat after multiple runs.
    9. Bug fix - Minor sample app fix - Fixed the Scan Data mismatch that occurred in the 'Barcode Scanning' and 'Properties' sections when ScanDataLabelID was set to IBM_LABEL.
    10. Bug fix - Minor sample app fix - Handled the XML parsing failure that occurred with DS2208 when executing Retrieve Statistics.
    11. Bug fix - Minor sample app fix - Fixed the issue of not receiving the expected IBM label types to the scan data section.

Version 3.07.0008 - 01/2026

  1. Enhanced OPOS Driver
    1. Added representation of platform architecture and app version to the headings of the sample application.
    2. Enhanced logging InXML data for Direct IO commands in OPOS Scanner logs.
    3. Bug Fix - Fixed retrieving the correct GoodScanCount from a paired scanner, when Model and Serial Number based filtering is used for a cradle.
    4. Bug Fix - Fixed issue in OPOS Scanner crashing when decoding a GS1 Datamatrix barcode with special characters.
  2. Enhanced JPOS Driver
    1. Added representation of platform architecture and app version to the headings of the sample application.
    2. Bug Fix - Fixed the incorrect beep in External CheckHealth operation for Scale. Instead, CheckHealth is now verified with a ReadWeight operation.
    3. Bug Fix - Resolved incorrect scan data label prefix shown when ISBN barcodes are scanned.
    4. Bug Fix - Added missing log entries for async and non-async scale weight operations.
    5. Bug Fix - Resolved missing log entries for Direct IO scale and scanner operations in log files.
    6. Bug Fix - Minor sample app fix - Unchecked "Data Event Enable" checkbox after performing barcode scanning and read weight operations in Scanner and Scale profiles.
    7. Bug Fix - Minor sample app fix - Fixed incorrect behavior of AutoDeviceEnable in Scale when Read Weight was used in async mode.
  3. C# and C++ Sample Applications
    1. Added representation of platform architecture and app version to the headings of C# and C++ sample app executables.
    2. Added support for Rectangular Micro QR (rMQR) symbology in C# and C++ sample applications.
    3. Added support for DS82XX RFID scanners in ScanScanWrite tab in the C# sample application.
    4. Bug Fix - Resolved an issue of the C# sample application becoming unresponsive when performing a firmware update with exclusive claim enabled.
  4. CoreScanner Driver
    1. Bug Fix - Fixed issue where the Group Separator character was not recognized when using a non-English language keyboard input in Simulated HID mode.
    2. Bug Fix - Resolved the configuration name to be updated in the GetScanners API whenever the scanner's configuration name is updated due to change of scanner parameter settings.
    3. Bug Fix - Resolved the configuration name to be updated in the GetScanners API after performing a scanner configuration update.
    4. Bug Fix - Resolved intermittent CoreScanner crash when the scanner is removed while scanner communication is in progress.
    5. Bug Fix - Fixed incorrect behavior when updating firmware residing in a USB flash drive and the drive is removed during the update process.

Version 3.07.0007 - 10/2025

  1. Enhanced OPOS Driver
    1. Added a new registry key-based configuration option to show or hide decode and raw barcode data from OPOS logs. The default selection will show all decode and raw barcode data.
    2. Bug fix - Fixed intermittent crash when attempting to call Open API when multiple devices are connected to host.
    3. Bug fix - Minor sample app fix - Resolved incorrect display of non-printable characters in barcode data in the OPOS Scanner sample application. Non-printable characters are now showing as e.g. for Horizontal Tab.
    4. Bug Fix - Fixed the incorrect Result Code shown when claiming an already claimed device.
    5. Bug Fix - Fixed the weight reading not being properly updated after the device reboots and reconnects to host while scale live weight is enabled.
    6. Bug Fix - Added missing log entries when performing Retrieve Statistics call before claiming or enabling the device in OPOS Scanner and Scale instances.
    7. Bug fix - Minor sample app fix - Updated text display fields for logical device name, statistics and log view to be read-only in Scanner and Scale sample applications.
    8. Bug fix - Minor sample app fix - Added input validations for Claim timeout and property value text entry fields for Scanner and Scale sample applications.
    9. Bug fix - Fixed issue on claiming the scanner from another process while ExclusiveClaimLevel is enabled and scanner is already claimed from one process.
    10. Bug fix - Minor sample app fix - Resolved incorrectly populating the already cleared "Filter By" textbox with the previous text when performing Reset Statistics.
  2. Enhanced JPOS Driver
    1. Added a new configuration option in jpos_trace.properties file to show or hide decode and raw barcode data from JPOS logs. The default selection will show all decode and raw barcode data.
    2. Enhanced the DirectIO naming conventions used in the sample application to be consistent with OPOS sample application.
    3. Bug fix - Fixed incorrect scanner profile entry in JPOS logs when multiple scanner profiles are used.
    4. Bug fix - Removed redundant entry on Statistics output in JPOS log, when queried before enabling the device.
    5. Bug fix - Fixed incorrect power state being logged in JPOS log.
    6. Bug Fix - Minor sample app fix - Fixed incorrect states for Device Enabled, Data Event Enabled and Decode Data checkboxes after failing to enable Fast Mode.
    7. Bug fix - Fixed issue to successfully claim a device when re-attached to host while claim is executed with large timeout values (e.g. 10000s or -1).
    8. Bug fix - Minor sample app fix - Updated text display fields for logical device name, device information, statistics and log view to be read-only in Scanner and Scale sample applications and live weight to be read-only in Scale sample application.
    9. Bug fix - Minor sample app fix - Added input validations for Claim timeout and property value text entry fields for Scanner and Scale sample applications.
    10. Bug fix - Fixed unhandled exception occurring when attempting to Close JPOS instance with no scanner attached to host.
    11. Bug fix - Fixed incorrect exception thrown as "Device not connected" when ReadWeight is performed with no scanner attached to host, while within the ReadWeight timeout.
    12. Bug Fix - Removed the 20 second delay that existed with retrieving live weight.
    13. Bug Fix - Fixed the issue with PIDXScan_ScanDataType setting to 0 after performing interactive checkhealth.
    14. Bug Fix - Fixed an issue with Good Scan Count not incrementing upon retrieving statistics for cascaded scanner.
  3. CoreScanner Driver
    1. Enhanced logging to print raw data of barcodes scanned to be visible only in DEBUG log level, instead of INFO log level.
    2. Bug fix - Fixed issue in failing to configure Simulated HID through the Config.XML file in Corescanner when the system locale is set to Chinese.
    3. Bug fix - Fixed random Corescanner service crash due to an access violation, when attempting to communicate with a disconnected scanner.
    4. Bug fix - Fixed issue in failing to obtain RTA state response after enabling "Suspend Reporting Alerts" in C# sample application.

Version 3.07.0006 - 07/2025

  1. Enhanced OPOS Driver
    1. Bug fix - Minor sample app fix - Resolved an issue of live weight textbox remaining empty, after performing a release-claim-device enable.
    2. Bug Fix - Minor sample app fix - Fixed an issue of incorrectly appending new log content in the application's log view.
    3. Bug Fix - Minor sample app fix - Fixed an issue of live weight textbox displaying the previous weight reading after calling device disable.
    4. Bug Fix - Fixed an incorrect error event generated in async mode, when read weight is performed while weight is under zero.
  2. Enhanced JPOS Driver
    1. Added “Real Time Alert (RTA)” support for JPOS Scale. RTA configurations are supported through new DirectIO commands, and RTA events are captured and delivered through JPOS DirectIO events.
    2. Enhanced DirectIO events for scanner attach/detach events in scanner Disable state.
    3. Added ClearQueueOnRelease parameter in JPOS configuration XML file.
    4. Bug Fix - Minor sample app fix - Fixed an issue of live weight textbox displaying the previous weight reading after calling device disable.
    5. Bug Fix - Fixed an incorrect exception shown in JPOS sample application, when read weight is performed while in overweight condition.
    6. Bug Fix - Fixed the incorrect ScanData label, ScanData type and Label ID for ISSN symbology.
    7. Bug Fix - Resolved an issue observed when multiple instances of JPOS scanner objects are running in parallel.
    8. Bug Fix - Resolved an issue observed when performing Zero scale while scanner is Under Zero State.
  3. Driver WMI Sample Application
    1. Added battery statistics properties to the application. CoreScanner version 3.08.0005
  4. CoreScanner Driver
    1. Exposed battery statistics properties through Driver WMI interface.

Version 3.07.0005 - 03/2025

  1. Enhanced OPOS Driver
    1. Added support to update a scanner's firmware via DirectIO Command.
    2. Added firmware update status events support through DirectIO events.
    3. Added support to load a configuration file to a scanner via DirectIO Command.
    4. Added configuration load status update events support through DirectIO events.
    5. Enhanced the OPOS Scanner and Scale logs to include return values and return states for properties and methods.
    6. Renamed the Vision Wedge Produce interface to VDI (Vision Data Interface).
    7. Bug fix - Minor sample app fix - Resolved the issue of Data Event disabling after unchecking Auto-Enable option.
    8. Bug Fix - Fixed incorrect value shown in Scale log when Zero Scale is called.
    9. Bug Fix - Fixed the issue of not logging the weight reading in the Scale log file when asynchronous Read Weight is called.
    10. Bug Fix - Fixed issue returning an intermittent error event when Read Weight is called with Auto Disable enabled.
    11. Bug Fix - Minor sample app fix - Fixed the multiple Read Weight call executions when Read Weight button is clicked in Async mode.
    12. Bug Fix - Fixed the GoodScanCount to return the correct value of barcode scans when auxiliary devices are connected to a scanner.
    13. Bug Fix - Fixed identification of scale devices based on scanner family “7896”.
  2. Enhanced JPOS Driver
    1. Added support to update a scanner's firmware via DirectIO Command.
    2. Added firmware update status events support through DirectIO events.
    3. Added support to load a configuration file to a scanner via DirectIO Command.
    4. Added configuration load status update events support through DirectIO events.
    5. Enhanced the JPOS Scanner and Scale logs to include return values and return states for properties and methods that were missed in the logs.
    6. Renamed the Vision Wedge Produce interface to VDI (Vision Data Interface).
    7. Added the ability to skip unsupported property and method calls for a scanner discovered via the VDI interface.
    8. Bug Fix - Fixed redundant log entries printed in the log file when calling MaximumWeight property.
    9. Bug fix - Minor sample app fix - Restricted the ability to modify the Logical device name in the sample application for both Scanner and Scale.
    10. Bug Fix - Fixed invalid error printed in the terminal when Retrieve Statistics is called without claiming or enabling the device for both Scanner and Scale.
    11. Bug Fix - Minor sample app fix - Resolved the incorrect state of Power Notify checkbox when Device Enabled is used.
    12. Bug Fix - Minor sample app fix - Resolved the incorrect state of Device Enable checkbox when Fast Mode is used.
    13. Bug Fix - Fixed Label IDs to be appended for UPC-EAN supplementals in ScanData.
    14. Bug Fix - Fixed the GoodScanCount to return the correct value of barcode scans when auxiliary devices are connected to a scanner.
    15. Bug Fix - Fixed redundant exception thrown when scanning barcodes from JPOS instance.
  3. C# and C++ Sample Applications
    1. Added tooltips for new RTA events.
    2. Bug Fix - Minor sample app fix - Resolved the incorrect aspect ratio in images represented in the C++ sample application.
  4. CoreScanner Driver
    1. Enhanced the ScanRMDEvent type to support scanner configuration update.
    2. Renamed the Vision Wedge Produce interface to VDI (Vision Data Interface).

Version 3.07.0004 - 12/2024

  1. Enhanced OPOS Driver
    1. Added produce interface support for Vision Wedge over OPOS.
    2. Added beep indication for Produce events received in OPOS.
    3. Bug fix - Minor sample app fix - Removed incorrect validation on the numbers entered on “Filter by” textbox for Statistics.
    4. Bug Fix - Fixed issue in device power online state not getting notified when ExclusiveClaimLevel is enabled.
    5. Bug Fix - Fixed the incorrect display of live weight when ScaleLiveWeight property is disabled.
    6. Bug Fix - Fixed intermittent issue in weight data not delivered to OPOS layer when the scale is connected with multiple other scanner devices.
    7. Bug Fix - Fixed NCR label ID type for symbologies with supplemental code types.
    8. Bug Fix - Fixed OPOS ScanDataType property to report SCAN_SDT_UNKNOWN for 2-Stage barcodes scanned in IBM HandHeld, IBM TableTop and USB OPOS host modes.
    9. Enhanced the log view field to represent states of properties and method calls in Sample Application for Scanner and Scale.
  2. Enhanced JPOS Driver
    1. Added produce interface support for Vision Wedge over JPOS.
    2. Added beep indication for Produce events received in JPOS.
    3. Added logging the Direct IO command names when Direct IO commands are executed.
    4. Bug Fix - Fixed NCR label ID type for symbologies with supplemental code types.
    5. Bug Fix - Fixed OPOS ScanDataType property to report SCAN_SDT_UNKNOWN for 2-Stage barcodes scanned in IBM HandHeld, IBM TableTop and USB OPOS host modes.
    6. Bug Fix - Fixed the incorrect display of live weight when ScaleLiveWeight property is disabled or after performing scale release.
  3. CoreScanner Driver
    1. Added Real Time Alerts (RTA) support for SSI over USB CDC and SSI BT host modes.
    2. Added Produce interface to support Vision Wedge.
    3. Added a new method Opcode 5020 to push scanner configuration file (.scnplg) through CoreScanner.

Version 3.07.0001 - 09/2024

  1. Enhanced OPOS Driver
    1. Added "Real Time Alert (RTA)" support for OPOS. RTA configurations are supported through new DirectIO commands and RTA events are captured and delivered through OPOS.
    2. Added a new log view field to represent states of properties and method calls in OPOS Sample Application. Initially this supports RTA event status notifications.
    3. Bug Fix - Fixed issue in disabling scanner after a barcode is read through interactive health check option, when AutoDisable is enabled.
    4. Bug Fix - Fixed appending the correct label ID for symbology "ISSN".
    5. Bug Fix - Minor sample app fix - Implemented validations for values set for properties "DeviceEnabled" and "PowerNotify" to indicate invalid values to user through the sample application's log view.
    6. Bug Fix - Enhanced OPOS logging to include weight data when performing ReadWeight, LiveWeight and ZeroScale calls.
  2. Enhanced JPOS Driver
    1. Bug fix - Fixed issue in not throwing an exception pop up window upon performing zero scale in overweight scenario.
    2. Bug Fix - Corrected PIDXScan_ScanDataType getting set to 0 incorrectly after performing interactive checkhealth.
    3. Bug Fix - Minor sample app fix - Enable Live Weight checkbox now gets set to disabled state after enabling “Auto Device Enable” or after setting property for PIDX_DeviceEnabled to true.
    4. Enhancements in log file.
      1. Log entries are added to indicate the status of the “Zero Scale” command.
      2. Removed incorrect exception log entry upon performing zero scale process while PIDXScal_ZeroValid is false.
    5. Bug Fix - Fixed issue in disabling scanner after a barcode is read through interactive health check option, when AutoDisable is enabled.
    6. Bug Fix - Minor sample app fix - Implemented validations for values set for properties "DeviceEnabled", "EnableLiveWeight" and "PowerNotify" to indicate invalid values to user through the sample application's log view.
    7. Bug Fix - Corrected the text representations for Health Check options (Internal, External and Interactive) in log view.
  3. C# and C++ Sample Applications
    1. Added a new tab in the C++ sample application to configure Real Time Alert (RTA) configurations and view RTA event notifications (The RTA tab will only be visible if connected scanner firmware supports RTAs).
  4. CoreScanner Driver
    1. Bug Fix - Fixed handling discovery of scanners, when the scanner configuration name contained non-printable characters.
    2. Bug Fix - Fixed invalid representation of “Space” character in simulated HID, for languages English, French and Italian.

Version 3.06.0038 - 07/2024

  1. Enhanced OPOS Driver
    1. Bug Fix - The OPOS Scale sample application now clears error notifications displayed previously (if any), when a valid weight reading is delivered.
    2. Bug Fix - Fixed issue in incorrect update of good scan count in statistics after releasing and re-claiming a scanner.
    3. Bug Fix - Fixed issue in scale live weight displaying status as “Not Ready” when performing read weight calls while scale is in async mode.
    4. Bug Fix - ResultCode and ResultCodeExtended properties of Scale are now updated correctly when read weight is performed while scale is in async RTAmode.
    5. Added implementations for Statistics methods (Reset Statistics, Retrieve Statistics and Update Statistics) for Scale.
    6. Updated OPOS Scanner and Scale Sample application names to “ScannerSDK_SampleApp_OPOS_Scanner” and “ScannerSDK_SampleApp_OPOS_Scale” respectively.
  2. Enhanced JPOS Driver
    1. Bug fix - Minor sample app fix - State of Power Notify checkbox in JPOS Sample application now shows the correct state after releasing the JPOS Scale profile.
    2. Bug Fix - Fixed PIDXScan_ScanData field to display label IDs (if configured) in the JPOS Sample application.
    3. Bug Fix - Fixed JPOS zero scale feature limits up to 0.05 lbs only when it should be 0.60 lbs.
  3. C# and C++ Sample Applications
    1. Added a new tab in the C# sample application to configure Real Time Alert (RTA) configurations and view RTA event notifications (The RTA tab will only be visible if connected scanner firmware supports RTAs).
    2. Bug Fix - Fixed the C++ application crash occurring upon closing the application.
    3. Updated the C# sample application name to ScannerSDK_SampleApp_CSharp”.
  4. CoreScanner Driver
    1. Added a new feature called “Real Time Alert (RTA)”.
      1. This feature sends a RTA from the scanner (originating from the scanner's firmware meeting a RTA criteria) to the driver stack.
      2. For a list of available RTAs, see List of Supported Real Time Alerts in the Real Time Alerts (RTA) User Guide.
      3. RTA is supported in select scanners and requires a firmware update.
      4. Supported com protocols include SNAPI, IBM TableTop, IBM Handheld and IBM OPOS.

Version 3.06.0037 - 04/2024

  1. Enhanced OPOS Driver
    1. Bug fix - Resolved a handle leak occurring in OPOS logging module on both Scanner and Scale service objects.
    2. Bug fix - Resolved a memory leak occurring in OPOS Scale when live weight is enabled.
    3. Bug fix - Resolved a handle leak occurring in OPOS Open and Close methods on both Scanner and Scale service objects.
    4. Bug fix - Fixed an invalid character returned within the Device Description property call for OPOS Scale.
    5. Bug fix - Minor sample app fix - State of Auto Enable checkbox is now enabled after successfully opening an OPOS Scanner profile.
    6. Bug fix - OPOS now returns OPOS_E_ILLEGAL when “ZeroScale” is called with a weight that exceeds the scanner's zeroing weight limit.
    7. Added a new registry key “ClearQueueOnRelease” to configure clearing the data queue when device is released.
    8. Enhanced OPOS logs to include DirectIO command name in the logged Information when DirectIO commands are used.
  2. Enhanced JPOS Driver
    1. Bug fix - Minor sample app fix - State of Data Event Enable and Device Enable checkboxes in JPOS Sample application now shows the correct state when JPOS Scale profile is not opened.
    2. Bug fix - Fixed intermittent exception caused in the JPOS Scale live weight thread when attempting to restart or configure the scale while live weight is in progress.
    3. Bug fix - Minor sample app fix - Synchronized state of “Device Enable” checkbox when “Auto Device Enable” or "Enable Live Weight" selections are used.
    4. Added a new attribute as "ClearQueueOnRelease" to JPOS.xml file, to configure clearing the data queue when device is released.
    5. Bug Fix - An exception is fired upon performing Zero Scale with weights greater than the firmware implemented scale zeroing weight limit.
    6. Bug Fix - Prevented incorrectly throwing “Timed out with zero stable weight” exception after setting PIDXScal_ZeroValid to true in JPOS Scale live weight DIO.
  3. C# and C++ Sample Applications
    1. Added "Configuration Name" column to the C# and C++ sample applications in the grid representing the discovered scanners.
  4. CoreScanner Driver
    1. Added the code types of Han Xin Code and Dot Code to the USB IBM HandHeld and TableTop host modes.
    2. Added the Configuration Name into the XML response of the "GetScanners" API call.

Version 3.06.0034 - 01/2024

  1. Enhanced OPOS Driver
    1. Two OPOS Check Health modes were supported (Internal and External Check Health), added a third mode. The third mode is called Interactive Check Health. Note all three modes are supported in the OPOS sample app.
  2. Enhanced JPOS Driver
    1. Bug fix - Minor sample app fix - State of Data Event Enable checkbox in JPOS Sample application after a barcode is scanned now works as expected.
    2. Bug fix - Minor sample app fix - State of Device Enable checkbox in JPOS Sample application after a barcode is scanned with AutoDisable enabled now works as expected.
  3. CoreScanner Driver
    1. Digital Signing of Zebra SNAPI Driver - Updated the digital signature of Zebra SNAPI Imaging Interface to support SHA256 algorithm.
    2. Bug Fix - Fixed rare issue when switching to USB OPOS mode if you are already in that mode. Now the scanner no longer goes into an unresponsive state when attempting to switch to the USB OPOS while already in the same host mode.
  4. IoT Connector
    1. Added support for logging of environment variables (pulled from operating system) into the URL and request headers in the HTTP sink. Note the environmental variable check is performed real-time on each logging occurrence.
    2. Security fix - Updated library “libcurl” used in IoT Connector from v7.78.0 to v8.4.0 to resolve security vulnerabilities.

Version 3.06.0033 - 10/2023

  1. Enhanced OPOS Driver
    1. Bug Fix - GoodScanCount no longer returns negative values when a large count value is set using Update Statistics method.
    2. Bug Fix - Sample App no longer shows incorrect weight when ReadWeight is called with Freeze Events enabled.
    3. Bug Fix - Sample App addressed situationally driven utility hang when retrieving Read Weight and Live Weight events after calling the retry option in asynchronous error events.
    4. Bug Fix - Removed redundant log on “FireHeadDataEvent” in OPOS log files.
    5. Bug Fix - Driver now returns “Not Ready” scale status, when scale is unplugged, while having live weight enabled.
    6. Bug Fix - Check Health (Internal and External) now returns “No hardware” response, when no scanner(s) is connected on the USB bus.
    7. Bug Fix - Driver now represents “Non-Printable Characters” in the scan data in their original form (unmodified by the OPOS driver).
  2. Enhanced JPOS Driver
    1. Added support for multiple JPOS Scanner instances when communicating to one application. This enables the JPOS driver to communicate to and track multiple scanners simultaneously and independently, like the MP7000 and DS8178/cradle.
    2. Added ability to “Filter Scanner Discovery” on 1) Host Communication Mode, 2) Model (a.k.a DS9908...) and 3) Serial Number. JPOS now matches OPOS functionality.
    3. Bug Fix - Check Health (Internal and External) now returns “No hardware” response, when no scanner(s) is connected on the USB bus.
    4. Bug Fix - Sample App no longer shows incorrect weight when ReadWeight is called with Freeze Events enabled.
    5. Bug Fix - Driver now returns “Not Ready” scale status, when scale is unplugged, while having live weight enabled.
  3. Enhanced CoreScanner Driver
    1. Access to Corescanner Version Info - Modified how-to-access Corescanner Version info. Now read from registry key, Instead of Corescanner binary file.
    2. Bug Fix - “Grave” accent no longer, incorrectly converting into CR/LF when scanner is operating in RS232 NIXMODB communication mode.
    3. Bug Fix - Fixed “Simulated HID Keyboard” issue. Scancode now properly generated for a “Group Separator” character, when in simulated HID Keyboard.

Version 3.06.0029 - 07/2023

  1. Enhanced OPOS driver
    1. Bug fix - Fixed issue on incorrect check health text returned from query.
    2. Bug fix - Resolved issue in reading the weight when multiple reads are requested via API call (almost simultaneously) and DataEvent is enabled.
    3. Bug Fix - Fixed incorrectly clearing of both ScanData and ScanDataLabel properties when ClearInput is called.
    4. Sample App Bug fix - Fixed incorrect value set for GoodScanCount when Updating Statistics via JPOS Sample application, using a non-numeric value.
  2. Enhanced JPOS driver
    1. Bug fix - Fixed issue that incorrectly appended a Label ID for “NCR label” with barcode type ISSN.
    2. Bug fix - Fixed issue relevant to error arguments (locus and response) in JPOS read weight events.
    3. Sample App Security fix - Updated library "xercesImpl.jar" used in JPOS Sample application from v2.11.0 to v2.12.2 to resolve security vulnerabilities.
    4. Sample App Bug fix - Device enable button's state now gets updated upon enabling auto device enable (button) in JPOS scale.
    5. Sample App Bug fix - Barcode name now correctly displayed for Han Xin Code.
  3. CoreScanner Driver
    1. Added a new call (Opcode) to configure DDF (Driver Data Formatting) programmatically. Previously this was only supported manually from Config.xml file.
    2. Simulated HID Keyboard - Added support to configure ScanCode, in addition to existing Virtual Key code support, in simulated HID Keyboard. Configured through settings in the Config.XML file.
    3. Driver Data Formatting - Added ATL key combination support to Driver Data Formatting (DDF). This functionality enables an ALT key combination to be added to barcode data when using Simulated HID Keyboard.
      1. Configuring this capability is located in the CoreScanner configuration xml file.
      2. An example of this capability is appending "ALT [ + Data + Enter" to the barcode data. Another example is "ALT [ + Data + TAB".
      3. Solution supports sending ALT + one ASCII key sequence like "ALT [".
      4. Solution supports appending a Prefix only. Appending a Suffix is not supported.
    4. Bug fix - Fixed intermittent MP7000 Reset during GetScanners call.
    5. Bug fix - Fixed intermittent CoreScanner reset when a cascaded device like the DS8178 rebooted/disconnected, causing the MP7000 to reset.
    6. Bug fix - Fixed intermittent CoreScanner error when reading Scale Weight from MP7000 when a cascaded scanner like DS8178 gets disconnected/reconnected or rebooted.

Version 3.06.0028 - 04/2023

  1. Add support for BT (SSI over Bluetooth) support through the OPOS and JPOS drivers.
  2. Enhanced OPOS driver
    1. Bug fix - Now only OPOS log files created by the OPOS driver that reside in the OPOS log file path are deleted by the circular log management system.
    2. Bug fix - Fixed log file path issue for file deletion when max log file count is reached in a custom log file path.
    3. Updated the Scale status update events to be fired either when a change of weight reading is detected or when a change in scale status is detected.
    4. Bug fix - Fixed rare case of incorrectly deleting a log file based on its maximum file size specified in the OPOS log configuration registry keys.
  3. Enhanced JPOS driver
    1. Bug fix in Sample App - Fixed error message incorrectly displayed in JPOS Sample application when Zero Scale command is called and weighing item below 30 grams.
    2. Update JPOS driver to fire Scale status update events whenever a status update and a weight change is detected.
    3. Bug fix in Sample App - Made the display format for scale weight consistent in the sample application for Read Weight, Live Weight and Direct IO NCR Live Weight calls.
    4. Bug fix in JPOS Sample App - Fixed application lockup if enabling both live weight and auto disable simultaneously.
  4. CoreScanner Driver
    1. Added device re-enumeration logic to make the CoreScanner more robust against USB failures occurring at device discovery and device initialization.
    2. Bug fix - Improved methodology to detect if device is already available in the discovered scanners list. Now uses device path instead of device serial number.

Version 3.06.0024 - 01/2023

  1. Enhanced OPOS driver,
    1. Added log file configurations via registry settings. Configuration now available on log level, log file length and maximum file count. This new functionality is applicable to both OPOS Scanner and OPOS Scale.
  2. CoreScanner Driver for Windows,
    1. Added device re-enumeration logic to make the CoreScanner more robust against USB failures occurring at device discovery and device initialization.
    2. Bug fix - Improved methodology to detect if device is already available in the discovered scanners list. Now uses device path instead of device serial number.
  3. IoT Connector for Windows,
    1. Added VIQ (Visibility IQ) endpoint support
    2. Added 5 new events as JSON formatted log entries for DEVICE ATTACHED, DEVICE DETACHED, STATISTICS, BARCODE and BATTERY Events.
    3. Added ability to remove displaying empty curly brackets ({}) when no data is available for JSON formatted log messages.
    4. Bug fix - Network location can be specified as log file path.
    5. Bug fix - Fixed intermittent crash on IoT Connector when multiple devices are used, AND network connection is disconnected.

Version 3.06.0023 - 10/2022

  1. Enhanced OPOS driver,
    1. Updated driver to meet newest GS1 specification: Scan Data Type displayed for GS1 Databar is now "SCAN_SDT_GS1DATABAR" and for GS1 Databar Expanded is now "SCAN_SDT_GS1DATABAR_E".
  2. Enhanced JPOS driver,
    1. Enhanced driver to support NCR requested “HealthCheck” label IDs.
    2. Bug fix - “Get Error Response” API now returns the correct error on Read Weight in Scale.
    3. Bug fix - Deliver an error event with Error response, ER_CONTINUEINPUT, when all items of the queue are delivered and DataEvent is enabled.
    4. Minor UI optimizations in the JPOS Sample Application for Windows.

Version 3.06.0022 - 08/2022

  1. Windows 11 support added.
  2. Enhanced JPOS driver,
    1. Enhanced driver to support Freeze Events in JPOS Scale.
    2. Bug fix - ReadWeight events now reported correctly when DataEventEnabled is false and LiveWeight is true.

Version 3.06.0018 - 04/2022

  1. Bug fix - ScanData property now populating in OPOS Scanner driver when compatibility mode is enabled.
  2. Bug fix - Barcode data now passing properly through the CoreScanner Diver when the scanners connected in serial (RS-232) Nixdorf Mode B.
  3. Enhanced Toshiba Global Commerce Solutions (TGCS) POS system support
    1. OPOS driver enhanced to supports System Management information calls from TGCS POS systems
      1. CoreScanner enhanced to support TGCS' UPOS WMI = “UPOS_BarcodeScanner” queries
    2. JPOS driver enhanced to support System Management Information calls from TGCS POS systems
      1. CoreScanner enhanced to support TGCS' CIM Service Provider = “UPOS_BarcodeScanner” queries

Version 3.06.0015 - 01/2022

  1. Logging Agent renamed "IoT Connector".
  2. Enhanced JPOS Driver,
    1. Updated Windows JPOS sample application to support smaller/lower resolutions monitors.
    2. Fixed rarely seen JPOS statistics retrieval issue.

Version 3.06.0013 - 10/2021

  1. Enhanced JPOS Driver
    1. Added support to execute DirectIO commands without claiming the device.
    2. JPOS sample application enhancement to display the "Live Weight" and the logs on live weight status update events.
    3. Enhanced logging in JPOS driver including access to barcode data, power state, scale weight, and what API calls have been made.
  2. Enhanced Logging Agent capabilities
    1. Added support for logging of operating system environment variables like "host PC name". The environmental variable check is performed real time on each logging occurrence.
    2. Added support for real time logging via a JSON call to cloud-based consoles like Splunk.

Version 3.06.0010 - 08/2021

  1. Enhanced options associated with the OPOS driver's "ScanData" property. Option now exists to only display scanned data (without displaying the communication protocol specific details).
  2. Enhanced logging in JPOS driver including access to barcode data, scale weight, and what API calls have been made.
  3. Fixed statistics and health parameters reporting from the parent scanner device in a cascaded device setup.

Version 3.06.0006 - 04/2021

  1. Enhanced JPOS driver
    1. Add support for “extended error codes” for NCRDIO_SCALE_LIVE_WEIGHT DirectIO command in JPOS.
    2. Add support for JPOS Scale status responses.
  2. Fixed JPOS Scale Open command to enable the “DeviceEnabled” property to execute.
  3. Fixed JPOS DirectIO RESET command.
  4. Fixed JPOS Scanner Not of File Direct IO Command.
  5. Fixed JPOS Sample application, which now shows the scale weight value when DirectIO NCR_LIVE_WEIGHT command executes.
  6. Fixed Scale OPOS crash issue when retrieving Check Health Text after executing Check Health command.

Version 3.06.0003 - 01/2021

  1. OPOS and JPOS enhancements
    1. Added support for Scanner DirectIO RESET command.
    2. Added support for custom MP7000 scale result codes for ErrorOverWeight, ErrorUnderZero and ErrorSameWeight.
  2. Enhanced Logging Agent capabilities
    1. Log agent can now retrieve Host/PC name and IP address.
    2. "Scan Avoidance" functionality renamed to "Non-Decode Event".
    3. The reporting interval can be customized. Set unique programming interval by attribute. Note a small interval (less than 30 seconds) may impact POS system performance.

Version 3.06.0002 - 10/2020

  1. Updated Visual C++ redistributable package from 2017 to 2019. Note redistributable package for 2017 is no longer included with the SDK.
  2. Add support for the scanner page motor action to the sample applications (C++ and C#).
  3. JPOS driver update. Removed Apache Xerces XML parser dependency from the Zebra JPOS Service Object (SO).

Version 3.05.0005 - 07/2020

  1. Logging Agent bundled with Windows SDK
    1. The Logging Agent allows a 3rd party management console, like Microsoft's SCCM, to track scanner information including the scanner's health by parsing a Logging Agent generated log file.
    2. The Logging Agent will output a log file, one file per scanner/host.
    3. The Logging Agent is configurable and can document one or all of the following information:
      1. Asset information
      2. Statistics for example battery charge level or UPCs scanned
      3. Firmware failures and or firmware success
      4. Parameter value(s) changed. Achieved by tracking parameter 616 (config file name changed to “Modified”)
      5. Scanned barcode data (all scanned items)
      6. Scan avoidance for MP7000
    4. The logging agent can have its output stored locally on its host PC or output to a network shared folder.
  2. Added support for Data Parsing (supports UDI, GS1 Label Parsing and Blood Bag) symbology to sample applications (C++ and C#).
  3. Added support for CDC switching on SDK sample applications (C++ and C#).
  4. OPOS Scanner/Scale CCO update from version 1.14 to version 1.14.1.

Version 3.05.0003 - 04/2020

  1. For NCR based retail POS customers- Added support for NCR Direct I/O command in OPOS and JPOS drivers (Scanner and Scale).
  2. Faster wireless firmware update for select scanners over the Bluetooth Classic communication protocol. See 123Scan's release notes per scanner for product support details.
  3. OPOS driver updated to comply with all Symbologies specified in the OPOS 1.14 specification.
  4. JPOS driver update. JPOS driver now uses a common code base with the more mature Linux JPOS driver.
  5. JPOS driver operation now also validated on OpenJDK 11, in addition to existing validation on the Oracle JDK.
  6. Updated the version of Visual C++ redistributable package from 2012 to 2017. Note redistributable package for 2012 is no longer included with the SMS.
  7. Removed Windows XP support.

Version 3.05.0001 - 01/2020

  1. Enhanced the OPOS driver to comply with the OPOS 1.14 specification on supported Symbologies.
  2. JPOS Driver
    1. Enhanced the JPOS driver to meet fully JPOS 1.14 specification compliance.
    2. Enhanced JPOS demo app to display barcode data in HEX format.
    3. Enhanced JPOS driver to support scanner configuration through a jpos.xml file.

Version 3.04.0011 - 10/2019

  1. Fixed WMI agent enabling filtering of scanner(s) when the configuration name contained unreadable characters.
  2. Fixed Windows 10 issue preventing scanner from returning barcode data in HIDKB mode after host PC logoff/logon or sleep mode event.
  3. Fixed a conflict when CoreScanner installed and pairing Bluetooth devices by searching the host PC.

Version 3.04.0007 - 07/2019

  1. Add support within OPOS driver for the following Symbologies: GS1 Data Matrix, QS1 QR and Grid Matrix.
  2. Enhanced the C# demo application: Added a RFID tab with Scan Scan Write functionality.

Version 3.04.0002 - 04/2019

  1. Added customizable logging module to CoreScanner. A user can now format the log file output to include parameters and layout from predefined options.
  2. Simulated HID Keyboard output, now handles German by setting “Keyboard emulation/locale” to “Default”. Other languages supported include English and French.

Version 3.03.0016 - 02/2019

  1. Fixed some bugs and improved stability in TWAIN driver.
  2. Fixed an issue in Scanner WMI provider regarding firmware download events.
  3. Fixed an issue with OPOS binary conversion.

Version 3.03.0013 - 11/2018

  1. Fixed firmware update failure (low occurrence problem).
  2. Updated SNAPI driver. It now includes a Microsoft signature.
  3. Implemented Scale OPOS driver beep on good read weight. This is a custom feature implemented to address a customer issue which can be enable through Windows registry configurations.
  4. Added support for NCR Direct IO command (DIO_NCR_SCAN_TONE).
  5. Introduced support for barcodes encoded with Windows' code pages like Russian and Korean.
  6. Introduced registry entries
    1. to control the value of the OPOS Power State property.
    2. to configure scale behavior.
    3. to configure Windows' code pages.
  7. Introduced support for the NCR direct I/O command to get the “Scale live weight” data.
  8. Fixed a security vulnerability - Exe execution can no longer introduce a shell command injection via filename.
  9. Fixed firmware update progress event missing issue with Scanner WMI provider.
  10. Minor bug fixes.

Version 3.02.0000 - 08/2017

  1. Updated JPOS sample application to demonstrate Direct I/O functionality.

Version 3.01.0000 - 09/2016

  1. Bluetooth support for cordless scanners without a cradle on Windows 7, 8 and 10 using Microsoft's Bluetooth stack.
  2. OPOS support for “Not On File Beep” NCR capability.
  3. Source codes of Sample Applications updated to support Microsoft Visual Studio 2010 and above.

Version 3.00.0000 - 11/2015

  1. Rebranded Scanner SDK from Motorola to Zebra.
  2. Supports Windows 10 (32 and 64 bit).

Version 2.06.0000 - 11/2015

  1. Support for RFD8500 firmware update.

Version 2.05.0000 - 07/2015

  1. Support for new MP6000 firmware features.
  2. Stability enhancements.

Version 2.04.0000 - 08/2014

  1. OPOS Direct IO support.
  2. JPOS supports both 64bit and 32bit JVMs on 64bit platforms.
  3. Added support for 32bit OPOS drivers on 64bit platforms.
  4. Bug fixes.
  5. Security enhancements to address potential security vulnerabilities.

Version 2.03.0000 - 05/2014

  1. Driver ADF support.
  2. MP6000 Scale Live Weight Event support.
  3. Microsoft® Visual Studio Project Template provided for Zebra Scanner SDK.
  4. Bug fixes.

Version 2.02.0000 - 12/2013

  1. Supports Windows 8/8.1 (32 and 64 bit).
  2. Bug fixes.

Version 2.01.0000 - 08/2013

  1. Inter key delay feature in HID Keyboard emulation.
  2. Bug fixes.

Version 2.00.0000 - 06/2013

  1. Optimized log file operation.
  2. IBM Table Top host interface support.
  3. MP6000 scale commands added.
  4. MP6000 scale support for OPOS and JPOS.
  5. DWORD attribute support.
  6. Unsolicited scanner events (Topology changes and Decode data) support (Scanner firmware support required).
  7. Statistics support (Scanner firmware support required).

Version 1.02.0000 - 08/2012

  1. Codeless scanner plug-n-play events added (Require Firmware update, check scanner PRGs for firmware support availability).
  2. Simple Data Formatting feature added for emulated keyboard data.
  3. TWAIN Custom capabilities added.
  4. SNAPI scanner support added to Scanner WMI Provider.
  5. Enhanced InstallShield with more custom installation options.
  6. OPOS driver modified to support Multi-threaded apartment (in-proc/out-proc) POS applications (clients).
  7. Host variant switching support added for scanners with NULL synapse buffer.

Version 1.01.0000 - 03/2012

  1. 64-bit Windows 7 support added.
  2. TWAIN imaging interface supported.
  3. USB-CDC Serial Emulation mode supported. Com protocol switching partially supported - able to programmatically switch into USB-CDC host mode but not exist.

Version 1.00.0000 - 07/2011

  1. Supports Windows XP SP3 (32-bit) and Windows 7 (32-bit).
  2. RSM 2.0 Scanner Support.
  3. SNAPI faster firmware download support.
  4. Programmatic Host Variant Switching support.
  5. HID Keyboard Emulation support for English and French language keyboards.

Windows SDK Installation and Configuration

Overview

This chapter describes how to install Zebra Scanner SDK and its components on recommended platforms.

NOTE See System Requirements for supported platforms.

The SDK installation package includes support for:

  • Installing required components to enable any Zebra scanner to communicate with applications or tools that execute on top of the Zebra Scanner SDK.
  • Supporting documents.
  • Test utilities.
  • Sample applications and source projects.

This section covers installation and configuration instructions.

NOTE Uninstall any previous Zebra, Symbol or 3rd party drivers or SDKs installed on your system which communicate with Zebra Scanner Devices before installing the Zebra Scanner SDK. This includes but is not limited to Zebra and Symbol supplied OPOS, JPOS and SNAPI drivers.

NOTE For a list of a scanner's supported attribute (parameter) numbers and definitions, refer to the Product Reference Guide for that model scanner, available from the Zebra Support website at http://www.zebra.com/support. Attributes include configuration parameters, monitored data, and asset tracking information.

SDK Components

The SDK installation package includes following components.

  • Zebra Scanner SDK Core components and drivers (COM API, Imaging drivers)
  • OPOS Drivers

    • Scanner OPOS
    • Scale OPOS
  • JPOS Drivers

    • Scanner JPOS
    • Scale JPOS
  • Remote Management Components

    • Scanner WMI Provider
    • Driver WMI Provider
  • Web Link to latest Developer's Guide - Document(s)
  • Test & Sample utilities with Source code packages

    • Scanner SDK Sample Application (C++)
    • Scanner SDK Sample Application (Microsoft® C# .NET)
    • Scanner OPOS Test Utility
    • Scale OPOS Test Utility
    • JPOS Test Utility for Scanner and Scale
    • Scanner WMI Provider Test Utility (Microsoft® C# .NET)
    • Driver WMI Provider Test Utility (Microsoft® C# .NET).

The SDK installation package installs its components to the following default location: C:\Program Files\Zebra Technologies\Barcode Scanners\.

System Requirements

Supported Operating Systems

Table 2: Supported Operating Systems

Zebra Scanner SDK Installation Package
Microsoft® Windows 10 (32bit) Zebra_Scanner_SDK_(32bit)_v3.xx.xxxx.exe
Microsoft® Windows 10 (64bit) Zebra_Scanner_SDK_(64bit)_v3.xx.xxxx.exe

Recommended minimum hardware requirement: x86 PC for 32-bit SDK, or x64 PC for 64-bit SDK with 512Mb RAM.

Scanner Models Versus Communication Modes

For an up-to-date table listing scanner models and their supported communication modes refer to the Scanner SDK for Windows website at: http://www.zebra.com/scannersdkforwindows.

Installing the SDK

Download the relevant Scanner SDK setup program for the 32-bit or 64-bit operating system on your PC from http://www.zebra.com/scannersdkforwindows.

There are two options for installing the Zebra Scanner SDK on a system.

  • Typical installation - Loads all components in the installation package.
  • Custom installation - Provides the ability to change the default selection of components.

If you install components such as OPOS, JPOS or WMI provider (remote management), the installer automatically installs sample programs and test utilities related to those components.

To download the appropriate OPOS, JPOS and WMI Developer’s Guides go to: http://www.zebra.com/scannersdkforwindows.

Step-by-Step Installation Instructions

  1. Execute the setup program. The installation process checks for CoreScanner drivers on the target machine. If the driver package is not present or outdated, clicking Install adds updated drivers before installing the scanner SDK package.

    Figure 7: Prerequisite Check And Install
  2. Installation continues once the prerequisite drivers are installed on the machine.

    Figure 8: Install Window
  3. Click Next on the Welcome screen.

    Figure 9: Welcome Screen
  4. Review the license agreement and click Yes to accept.

    Figure 10: License Agreement
  5. Select the Setup Type.

    The user is prompted with two installation options:

    • Complete - The installation package installs all components.
    • Custom - The installation package gives the option to select which components are loaded during the installation process. The user is prompted to select components from the available list.

    The user can select the destination folder by clicking Browse and selecting the drive and folder in which to install the Zebra Scanner SDK. However, common components are placed in designated locations for consistency with other SDK users.

    Figure 11: Setup Type
  6. Select features. The user is prompted to select features to be installed from the available components list.

    Figure 12: Select Features

    NOTE Scanner SDK and USB imaging drivers are common components and are installed automatically.

  7. Wait for the installation to complete.

    Figure 13: Installation Progress
  8. Installation complete.

    Figure 14: Installation Complete

Installed Components

There are three Windows services installed with the CoreScanner driver in a default installation:

  • CoreScanner - coordinates activity between the communication layer (SNAPI, IBMHH, SSI, etc.) and upper level drivers (OPOS, JPOS, SDK API, etc.).
  • RSM Driver Provider - provides WMI support.
  • Symbol Scanner Management - provides WMI support.

Table 3: Zebra Scanner SDK Components

Component Location
Common Components %ProgramFiles%\Zebra Technologies\Barcode Scanners\Common
Scanner SDK %ProgramFiles%\Zebra Technologies\Barcode Scanners\Scanner SDK
Scanner OPOS Driver %ProgramFiles%\Zebra Technologies\Barcode Scanners\Scanner SDK\OPOS
Scanner JPOS Driver %ProgramFiles%\Zebra Technologies\Barcode Scanners\Scanner SDK\JPOS
Scanner WMI Provider %ProgramFiles%\%\ Zebra Technologies\Barcode Scanners\Scanner SDK\WMI Provider Scanner
Driver WMI Provider %ProgramFiles%\Zebra Technologies\Barcode Scanners\Scanner SDK\WMI Provider Driver
TWAIN Driver %WinDir%\twain_32\Zebra – On 32/64bit version
%WinDir%\twain_64\Zebra – On 64bit version

Configuration

Serial Mode Settings

The Zebra Scanner SDK is capable of communicating with scanners connected to serial ports through Nixdorf Mode B, or SSI serial host mode. The SDK does not open any serial port without user consent to prevent other devices from being interfered with by Scanner SDK commands. Users can configure SDK usage of serial ports with entries in the <SERIAL_MODE_SETTINGS> section of the config.xml file located in %Program Files%\Zebra Technologies\Barcode Scanners\Common.

Serial mode setting entries indicate the serial com port number (PORT ID), the baud rate (BAUD) and the serial host mode (NAME) used to communicate with the attached scanner. The value of the name field can be NIXMODB, or SSI and the value of each of the three fields must be enclosed in quotation marks.

By default, the serial port settings in config.xml are commented out. To activate a serial mode setting, enter a line outside of the commented area, modify the settings appropriately, save the config.xml file and restart the CoreScanner service.

Sample <SERIAL_MODE_SETTINGS> Definition in Config.xml


<SERIAL_MODE_SETTINGS>
    <!-- Uncomment lines in this section to configure Serial Scanners -->

    <!-- <PORT ID='5' BAUD='9600' NAME='NIXMODB'/> -->
    <PORT ID='3' BAUD='9600' NAME='SSI'/>
</SERIAL_MODE_SETTINGS>

Simulated HID Keyboard Configuration

The Zebra Scanner SDK is capable of configuring a scanner to send simulated HID keyboard output (also known as HIDKB pump, or HIDKB emulation mode) while in USB SNAPI, USB IBM Hand-held, USB IBM Table-top, SSI, or RS-232 Nixdorf Mode B communication modes. This simulated HID keyboard output functionality can be configured by changing the XML elements in the simulated HID KB setting section of the config.xml file.

As of language locale, English, French and Italian languages are supported by the CoreScanner Driver.

Table 4: Config.xml File Elements

Tag Values Description
<ENABLE> 0, 1 0 - Disable (default)
1 - Enable
<LOCALE> 0 - 3 0 - Generic Unicode Keyboard (default)
1 - French
2 - English
3 - Italian

Default mode will setup the HIDKB from region and language.

<FUNCTION_KEY_MAPPING> 0, 1 When - 0

VK_RETURN transmitted as VK_CONTROL + M
VK_TAB transmitted as VK_CONTROL + I
VK_BACK transmitted as VK_CONTROL + H

When - 1

VK_RETURN transmitted as VK_RETURN
VK_TAB transmitted as VK_TAB
VK_BACK transmitted as VK_BACK

Refer to your scanner's Product Reference Guide for further information on function key mapping.
<INTER_KEY_DELAY> 0, >0 Character transmission delay interval in milliseconds. The default value of zero transmits keystrokes as they are decoded. If > 0, latency is introduced into key transmission so that any receiving application can adjust to the rate of transmission.
<KEY_CODE_SETTING>2 0 - 2

Define which key code type Simulated HID KB is configured.

0 - Virtual Keys only (default)
1 - Scan Code only*
2 - Virtual Keys & Scan Code

* This mode only transmits the scan codes. The system keyboard driver translates the scan codes into virtual-key codes.


2 Features & options are available only in config file version 2.

Sample <SIMULATED_HID_KB_SETTINGS> definition in config.xml:


<SIMULATED_HID_KB_SETTINGS>
    <!-- Default=0, French=1, English=2, Italian=3 -->
    <LOCALE>0</LOCALE>
    
    <!-- Enabled=1, Disabled=0 -->
    <ENABLE>0</ENABLE>

    <FUNCTION_KEY_MAPPING>1</FUNCTION_KEY_MAPPING>
    
    <INTER_KEY_DELAY>0</INTER_KEY_DELAY>
    
    <ADF_PATH></ADF_PATH>
    
    <!-- Virtual Key only =0, ScanCode only =1, Virtual Key & Scan Code =2-->
    <KEY_CODE_SETTING>0</KEY_CODE_SETTING>
</SIMULATED_HID_KB_SETTINGS>                

Notes

  • Refer to the specific scanner Product Reference Guide for supported serial port parameter settings.
  • Simulated HID Keyboard Output settings can be temporarily changed by an application using the CoreScanner API commands KEYBOARD_EMULATOR_ENABLE and KEYBOARD_EMULATOR_SET_LOCALE. To make permanent changes to these settings that remain persistent over a reboot of the host machine, the Config.xml file must be manually edited. Changes to Config.xml take effect only after the CoreScanner service is restarted.
  • When using the language locale with Simulated HID Keyboard Output, the user may need to change the input language of the application receiving keyboard input to match the language specified in config.xml.
  • Simulated HID Keyboard functionality becomes unavailable if you use Windows' Switch User functionality to switch the user on your PC. Manually restart the CoreScanner, RSM Driver Provider, and Symbol Scanner Management services, or reboot the host PC to ensure correct operation.

Driver Data Formatting (DDF)

DDF enables the formatting of scanned bar code data with prefix and suffix labels through the CoreScanner driver and available from CoreScanner version 3.07.0037. DDF is available while the scanner is in USB SNAPI, USB IBM Hand-held, USB IBM Table-top, SSI, or RS-232 Nixdorf Mode B communication mode1. Unlike Advanced Data Formatting (ADF), DDF does not permit modifying the scanned bar code data itself with any rule-based method. The prefix/suffix labels are composed of one or more ASCII characters (1-255). There can be one or more prefix/suffix labels, and they are defined in the config.xml file in the section using the <DDFTAGDEF> tag. The DDF description is composed of a <DDFMETA> section, and a <DDFSELECT> section. The <DDFMETA> section defines the prefix/suffix labels used in DDF, and how they are combined in various ways to compose one or more DDF format definitions in the form of <DDFDEF> tags.

Following features are introduced along with DDF.

  • Ability to include ALT + <Key> as a prefix. (ALT key sequence can only be included as a prefix and ALT will only be followed with 1 character).
  • Define the ALT sequence key's ASCII value as under <ALT1> tag.
  • Backward compatibility to older data formatting (i.e., SDF).

Sample <DDF> definition in config.xml:

This Driver Data Formatting functionality can be configured by changing the XML elements in the section of the config.xml file located in %Program Files%\Zebra Technologies\Barcode Scanners\Common.


<DDF>
    <DDFMETA>
        <DDFTAGDEF>SUFFIX1.SUFFIX2.PREFIX1.ALT1</DDFTAGDEF>
        <SUFFIX1>13.13</SUFFIX1>
        <SUFFIX2>13.13</SUFFIX2>
        <PREFIX1>13.13</PREFIX1>
        <ALT1>91</ALT1>
        <!-- Key value for ALT Sequence : ASCII value of Key that need to press with the ALT Key. (Support only for single key in v1)  -->
        <!-- ALT sequence only works as the first prefix. All other formats will be not supported in v1 -->
        <DDFDEF DdfCode='0' DdfFormat='DATA'/>
        <DDFDEF DdfCode='1' DdfFormat='ALT1.DATA.SUFFIX1'/>
        <DDFDEF DdfCode='2' DdfFormat='DATA.SUFFIX2'/>
        <DDFDEF DdfCode='3' DdfFormat='DATA.SUFFIX1.SUFFIX2'/>
        <DDFDEF DdfCode='4' DdfFormat='PREFIX1.DATA'/>
        <DDFDEF DdfCode='5' DdfFormat='PREFIX1.DATA.SUFFIX1'/>
        <DDFDEF DdfCode='6' DdfFormat='PREFIX1.DATA.SUFFIX2'/>
        <DDFDEF DdfCode='7' DdfFormat='PREFIX1.DATA.SUFFIX1.SUFFIX2'/>
    </DDFMETA>
    <DDFSELECT>0</DDFSELECT>
</DDF>                                                            

Four DDF prefix/suffix/ALT labels are defined as: SUFFIX1, SUFFIX2, PREFIX1, and ALT1. The values in these tags are delimited by a '.' character in the XML. Each of these labels is defined as shown below with the decimal ASCII character sequence that they represent:

SUFFIX1 = ascii(13), ascii(10) = CR, LF
SUFFIX2 = ascii(35), ascii(36) = #, $
ALT1 = ascii(91) = [
PREFIX1 = ascii(37), ascii(38) = %, &

Formats are also delimited by a '.' character in the XML. There can be one or more format definitions that use the above defined labels.

This format definition is identified by the keyword DDFCode and the format is represented by the keyword DDFFormat. Note that "DATA" is an intrinsic that means "Insert the Scanned Bar Code Here". The format definition to be executed is based on DDFCode and is specified in the <DDFSELECT> tag.

<DDFDEF DDFCode='6' DDFFormat='PREFIX1.DATA.SUFFIX2' />

The XML clause above would transmit the bar code data as:

%&BarcodeData#$
Or
<DDFDEF DDFCode='1' DDFFormat='ALT1.DATA.SUFFIX2' />

The XML clause above would transmit the bar code data as:

ALT+[ BarcodeData #$

Basic Installation Verification

You can perform a basic inspection on your system process list to verify a successful installation of the Zebra Scanner SDK.

NOTE This is simple verification of the operation of the Zebra Scanner SDK. See How to Verify Scanner SDK Functionality on page 4-7 for more advanced SDK testing.

The following instructions guide you through a simple check of the Scanner SDK's operation.

  1. Right click on the Windows Task Bar and select Task Manager.

    Figure 15: Task Bar Selection of Task Manager
  2. Under the Processes tab, find the CoreScanner.exe in the Image Name list under.

    Figure 16: CoreScanner.exe on Task Manager
  3. The appearance of "CoreScanner.exe" in the Processes list indicates a successful installation.

Silent Unattended Installation of the Scanner SDK

The CoreScanner driver and the Scanner SDK require the Microsoft 2019 C++ Redistributable Package which automatically installs if it is does not already exist on the host PC. For an unattended installation, a complication arises if the 2019 C++ Redistributable is not pre-installed. By default, Microsoft triggers a reboot of the PC after the C++ Redistributable installation. In this case, a reboot is injected into the overall silent install process (which may then also require a login).

To avoid the interruption, the 2019 C++ Redistributable can be downloaded from Microsoft and pre- installed silently while suppressing the reboot using the command line switches /install /quiet /norestart. This delays the required reboot, and allows a custom silent CoreScanner and Scanner SDK install to be performed using a subsequent command.

The Visual C++ Redistributable for Visual Studio 2019 can be downloaded from the Microsoft website. The appropriate file vcredist_x86.exe (32-bit version) or vcredist_x64.exe (64-bit version) must be selected and downloaded.

NOTE: Microsoft Visual C++ Redistributable 2015-2019 or 2015-2022 runtime packages will also work, as they all support C++ 2019.

The command line to perform its install silently without reboot is:


vcredist_x86.exe /install /quiet /norestart

or,


vcredist_x64.exe /install /quiet /norestart

The required reboot must be performed at the end of the overall installation process to ensure correct operation.

The Zebra Scanner SDK, including the underlying CoreScanner driver, is packaged using the Flexera InstallShield installer program. SDK components can be selectively installed using the SDK Custom Installation option. In conjunction with this custom install option, the installer program supports command line switches to record custom responses that can be used to create a silent install response file. These response files, ending in the extension .iss, may then be used to perform a silent installation of the CoreScanner driver and Scanner SDK components on production PCs.

The Silent Install command line options are listed in the following table.

Table 5: Silent Install Command Line Options

Command Line Switch Description
-s Silent mode. The -s switch runs the installation in silent mode using the responses contained in a recorded response file.
-r Record mode. The -r switch displays all the setup dialogs and records the chosen responses in the file specified with the -f1 switch described below.
-f1 Specify custom response file name and path. The -f1 switch specifies where the response file is located for the -s switch, or where it should be created when using the -r switch. Specify an absolute path; using a relative path yields unpredictable results.
-f2 Specify alternative log file name and path. When running an installation in silent mode (using the -s switch), the log file is created by default in the same directory and with the same name (except for the extension) as the response file. The -f2 switch enables you to specify an alternative log file location and file name. Specify an absolute path; using a relative path yields unpredictable results.

When executed from a command prompt, the example below uses the -r and -f1 switches to record your responses to the setup prompts into a custom response file:

“Scanner_SDK_(32bit)_v2.0x.00xx.exe" -r -f1"c:\path\customsetup.iss"

The responses chosen using the command above are saved in the specified response file and can then be used as input to silently install the SDK with those chosen responses on production PCs.

The next example shows how the -s switch uses the response file created with the previous command to perform the silent install:

"Scanner_SDK_(32bit)_v2.0x.00xx.exe" -s -f1"c:\path\customsetup.iss"

Note that there is no space between the -f1 switch and first quotation mark for the custom response file.

If necessary, the -r switch option can also be used to record a custom response file for a silent removal of the SDK by running the command on a PC that has the SDK already installed.

IMPORTANT The CoreScanner drivers are required for any SDK component so the CoreScanner services are installed, and must be running to provide functionality.


Test Utilities and Source Code

Overview

This chapter provides information about testing and evaluation of the Zebra Scanner SDK's software components using the test utilities provided in the SDK.

NOTE For the attributes (parameters) applicable to a specific scanner, refer to the Product Reference Guide . Product Reference Guides may also contain an appendix listing the generic non-parameter attributes supported on most Zebra scanners.

Test Utilities Provided in the SDK

The Zebra Scanner SDK includes the following test utilities:

  • Zebra Scanner SDK C++ Sample Application
  • Zebra Scanner SDK C# .Net Sample Application

Each test utility demonstrates the main functionalities of the SDK. You can gain an understanding of the Zebra Scanner SDK using these test utilities. This section also describes how to use the test utilities' functionality.

NOTE You may need to install the Microsoft®.Net Framework v2.0 or later to execute C# .Net Sample application. If so, Microsoft detects and informs the user of this requirement.

The Zebra Scanner SDK Test Utilities support the following functionality:

  • Discovery of asset tracking information
  • Scan a bar code
  • Capture Image and Video
  • Capture documents with Intelligent Document Capture (IDC)
  • Attribute query and setting
  • Host Variant switching
  • Firmware upgrade.

Scanner SDK C++ Sample Application

The Scanner SDK C++ Sample Application enables you to simulate an application that communicates with the Scanner SDK. The utility demonstrates the functionality of the SDK. It includes C++ source code and its solution and project files for further reference.

Figure 17: C++ Sample Application

Scanner SDK C#.Net Sample Application

The Scanner SDK C#.Net Sample Application enables you to simulate an application that communicates with the Scanner SDK. The utility demonstrates the functionality of the SDK. It includes C#.Net source code and its solution and project files for further reference.

Figure 18: C#.Net Sample Application

Table 6: Test Utility Buttons and Fields by Tab Screen

Button for Field Description
Discover Scanners Invokes Open, GetScanners methods and register for all the events.
Select Scanner Select the scanner you want to invoke the command
Connected Scanners List all the connected scanners regardless of the mode
Pull Trigger Soft Pull Trigger the scanner for Bar code, Image and Video actions
Release Trigger Soft Release Trigger the scanner for Bar code, Image and Video actions
Bar Code Tab
Flush Macro PDF Flush Macro PDF bar code buffer
Abort Macro PDF Abort Macro PDF continues read
Clear Clear the Bar code data area
Decoded Bar Code Display label value of the scanned bar code
Symbology Display the symbology of scanned bar code
Enable Emulation Enable Simulated HID Keyboard Output
Image/Video Tab
Image Invoke image capture mode
Video Invoke video capture mode
Abort Transfer Abort Image Transfer on serial scanners
Image Type Select JPG, TIFF or BMP image type
Enable Video View Finder Enable the view finder in image mode
Save Image Save the captured image
IDC Tab
Get Display value of the IDC-related parameter in the drop down menu
Set Temporarily set the value of the IDC-related parameter in the drop down menu
Store Permanently store the value of the IDC-related parameter in the drop down menu
Value Field to display, and enter an IDC-related parameter value
Decode Data Value of linked or anchor bar code data
Symbology Symbology of linked or anchor bar code
Use HID Specify HID channel for data transmission (instead of the default BULK channel)
Clear Clears all the fields
Scanner Actions Tab
Enable/Disable Scanner Enable/Disable the scanner for data/image/video capture initiation
Aim Switch on and off Aim control of the scanner
Beeper Beep the peeper of the scanner
Reboot Scanner Reboot the scanner
LED Light the LED(s) on the scanner
Switch Host Variant Switch the scanner host type from current type to desired type; the user has the option to select silent feature and variant change persistent and non-persistent.
RSM Tab
Get All IDs Get all supported attribute IDs from the selected scanner
Get Value Select one or more attribute IDs and get the value for them
Next Value Get the next attributes value given the current attribute number
Store Value Store value(s) for selected attribute(s)
Set Value Set value(s) for selected attribute(s)
Select All Select all the attribute IDs at the RSM data viewer
Clear All Clear all the attribute data at the RSM data viewer
Clear All Values Clear all the attribute values at the RSM data viewer (C# only)
Clear Value Clear a selected attribute value at the RSM data viewer (C# only)
Advanced Tab
Firmware Update Options Updated firmware and launch the new firmware on the scanner
Browse Browse the Firmware file (*.DAT) or Plug-in file (*.SCNPLG)
Update Initiate firmware update process
Abort If you want to abort firmware update process
Launch Once firmware update finishes launch the new firmware in the scanner
Claim Scanner Exclusively claim and declaim the scanner for this application
Miscellaneous Tab
SDK Version Get the scanner SDK version
Get Device Topology Get the scanner device topology, this is useful to get an idea of scanner topology for cascaded scanners
Serial Interface Settings Serial interface settings for serial scanners
Scale Tab
Read Weight Read the weight of the item on the scale
Zero Scale Zero the scale
Reset Scale Reset the scale
Weight Measured Weight of the item (Pounds or Kilograms)
Weight Unit Weight mode of the scale (English or Metric)
Logs Tab
Event Log Command and event log, logs commands initiated
XML Log Displays Output of each function if an output exists
Clear Event Log Clear command and event log area
Clear XML Log Clear XML log area

NOTE The SDK Sample Application in the latest release of the Scanner SDK for Windows implements a ScanToConnect tab. The ScanToConnect feature enables a Zebra cordless Bluetooth scanner to pair directly to a PC/tablet by scanning an on-screen bar code, replacing the need for a paper pairing label. This paperless pairing solution wirelessly connects the scanner directly to the host, without the need for a cradle.

NOTE Sample source code for the ScanToConnect tab is included with installation of the SDK Sample Application. For further information on this functionality, contact the Zebra Technologies Global Customer Support Center at: www.zebra.com/support

How to Verify Scanner SDK Functionality

This section guides you through a series of use cases and test cases of the Zebra Scanner SDK and its functionality.

See Basic Installation Verification for more information

Scanner Discovery / Asset Tracking Information / Validating Successful SDK Installation

  1. Connect a Zebra USB scanner(s) to the computer and put the scanner into USB OPOS (Hand Held) or USB SNAPI mode by scanning one of the bar codes below.

    USB (IBM Hand-Held)
    USB (IBM Hand-Held)
  2. Launch the Zebra Scanner SDK Sample Utility by selecting Start > All Programs > Zebra Scanner > Scanner SDK > Scanner SDK Sample Application (C++)"or Scanner SDK Sample Application (C#.Net).

    Figure 19: Start Scanner SDK Sample Application (C++) or C# .Net
  3. Click Discover Scanners to display all the connected scanners in the Connected Scanners area
  4. Clicking Discover Scanners in the sample application executes an Open for all types of scanners and an ExecCommand with the REGISTER_FOR_EVENTS method using the following XML and a GetScanners API call:

    
    <inArgs>
        <cmdArgs>
            <arg-int>6</arg-int>
            <arg-int>1,2,4,8,16,32</arg-int>
        </cmdArgs>
    </inArgs>
    
    

NOTE The first <inArgs> tag in the XML is filled with the number of events you want to register. In the example above, number of event it wants to register is "6". The second tag is filled with the event ids that you want to register separated by the commas (","). See event IDs in table below.

Table 7: Supported Event IDs

Event Name Event ID
SUBSCRIBE_BARCODE 1
SUBSCRIBE_IMAGE 2
SUBSCRIBE_VIDEO 4
SUBSCRIBE_RMD 8
SUBSCRIBE_PNP 16
SUBSCRIBE_OTHER 32

  1. The GetScanners API call produces XML code as follows:

    
    <?xml version="1.0" encoding="UTF-8" ?>
    <scanners>
        <scanner type="SNAPI"> 
            <scannerID>1</scannerID> 
            <serialnumber>7116000501003</serialnumber>
            <GUID>A2E647DED2163545B18BCEBD0A2A133D</GUID> 
            <VID>1504</VID>
            <PID>6400</PID>
            <modelnumber>DS670-SR20001ZZR</modelnumber>
            <DoM>27APR07</DoM>
            <firmware>NBRPUAAC</firmware>
        </scanner>
    </scanners>
    
    

    Table 8: Data Representation of the GetScanners Output in this Example

    Scanner Information Value Description
    Scanner ID 1 A unique ID assigned for a scanner from the SDK; any scanner specific method execute from ExecCommand should point to a scanner ID
    Serial Number 7116000501003 Device serial number printed on the label
    Model Number DS670-SR20001ZZR Device model number
    Date of Manufacture 27APR07 Device date of manufacture
    Firmware Version NBRPUAAC Current firmware version
    H/W GUID A2E647DED2163545B18BCEBD0A2A133D Hardware unique ID

  2. The XML consists of the scanner type, scanner ID, serial number, GUID, VID, PID, model number, date of manufacture and firmware version of the connected scanners.

    All discovered scanners are presented in the Connected Scanners window by processing the XML received from the GetScanners command along with their asset tracking information returned by querying device parameters. The detection of scanners indicates the SDK was installed successfully. Click Discover Scanners to display the connected scanners.

    Figure 20: Connected Scanners

Generating Scan-to-Connect Parameter Barcode

This document provides detailed instructions for generating a “Scan to Connect” parameter barcode, which is used to directly connect Bluetooth scanners to the host.

Prerequisites

Before proceeding, ensure you have the following:

  1. CoreScanner Driver for Windows installed.
  2. A host with a Bluetooth radio module (either inbuilt or external).

Steps to Generate the Scan to Connect Barcode

  1. Install CoreScanner Service

    Ensure that the CoreScanner Service is properly installed on your host machine. This service is required to communicate with the scanner and execute necessary commands.

  2. Verify Bluetooth Radio Module

    Ensure your host has an operational Bluetooth radio module. This module can be either inbuilt or an external one connected to your host.

  3. Execute OPEN API of CoreScanner

    To begin, you need to execute the OPEN API of the CoreScanner. This will initialize the communication with the CoreScanner service.

  4. Execute API to Register for Events

    After successfully opening the CoreScanner, the next step is to register for events. This is done by calling the EXEC API with a specific command to subscribe to the desired events.

  5. Send ExecCommand to Generate Bluetooth Parameter Barcode

    After successfully opening the CoreScanner, send an ExecCommand to generate the Bluetooth parameter barcode.

    Here is an example of how to execute the ExecCommand in C#:

    
    private void GetPairingBarcode()
    {    
        // Check the selection from the drop down is slected.        
        if (cmbScannerType.SelectedItem != null && cmbProtocol.SelectedItem != null && cmbHostName.SelectedItem != null)
        {
            /*
            //-- Enums for defaultOptions -- //
                [Description("No Defaults")]
                NoDefaults = 0,
                [Description("Set Factory Defaults")]
                SetFactoryDefaults = 1,
                [Description("Restore Factory Defaults")]
                RestoreFactoryDefaults = 2
            */
            Constants.DefaultOption defaultOption = GetSelectedDefaultOptionID(cmbDefaultOption.SelectedIndex);
            
            /*
            //-- Enums for imageSize -- //
                [Description("Small")]
                Small = 1,
                [Description("Medium")]
                Medium = 2,
                [Description("Large")]
                Large = 3
            */
            Constants.ImageSize imageSize = GetSelectedImageSizeID(cmbImageSize.SelectedIndex);
            
            /*
            //-- Enums for scannerType -- //
                [Description("Legacy")]
                Legacy = 0,
                [Description("New")]
                New = 1            
            */
            Constants.ScannerType scannerType = GetSelectedScannerTypeID(cmbScannerType.SelectedIndex);
            
            /*
            //-- Enums for protocol -- //
                [Description("Simple Serial Interface (SSI)")]
                SSI = 1,
                [Description("Serial Port Profile(SPP)")]
                SPP = 14,
                [Description("Human Interface Device(HID)")]
                HID = 17            
            */
            Constants.ProtocolName protocol = GetSelectedProtocolID(cmbProtocol.SelectedIndex);
            
            /*
            //-- Enums for host -- //
                [Description("SSI BT Classic (Non-Discoverable)")]
                SSIBTClassic = 22                    
            */
            Constants.HostName host = GetSelectedHostID(cmbHostName.SelectedIndex);
    
            int iProtocol = (int)protocol;
            int iDefaultOption = (int)defaultOption;
            int iImagesize = (int)imageSize;
    
            //Logic for protocol SSI and scanner
            if (scannerType == Constants.ScannerType.New && protocol == Constants.ProtocolName.SSI)
            {
                iProtocol = (int)host;
            }
    
            int status = STATUS_FALSE; //This will hold the status of the Exec API. if Success returns '0', else it's an error.
            string outXml = "";
            string inXml = "";
            int NoOfParameters = 3; //This is the number of parameters that we send throgh the inXml.
    
            string parameters = string.Join(",", iProtocol, iDefaultOption, iImagesize);
            inXml = scanToConnect.GenerateInitXML(NoOfParameters, parameters);
    
            /*
            // -- Example of inXml with above parameters.
            "<inArgs>"
                + " <cmdArgs>"
                    + "<arg-int>" + NoOfParameters + "</arg-int>" 
                    + "<arg-int>" + Parameters + "</arg-int>"
                + " </cmdArgs>"
            + "</inArgs>"
            */
            ExecCmd(Constants.GetPairingBarcode, ref inXml, out outXml, out status); //Constants.GetPairingBarcode = 1005
            DisplayResult(status, "GET_PAIRING_BARCODE");
        }
    }                                                                
    
    
  6. Receive Scan to Connect Barcode Image.

    If the ExecCommand in step 5 returns a success status, the pairing barcode will be received as an image in the parameter barcode event.

Handling the Parameter Barcode Event

You need to handle the event where the pairing barcode image is received. Here is an example event handler in C#:


private void OnParameterBarcodeEvent(short eventType, int size, short imageFormat, ref object sfImageData, ref string pData)
{
    if (eventType == 1) //Pairing Barcode event type would be '1'
    {
        Image img = BaseMethods.ProcessImageData(sfImageData); 
        if (picBBarcode.Width < img.Width)
        {
            picBBarcode.SizeMode = PictureBoxSizeMode.StretchImage;
        }
        else
        {
            picBBarcode.SizeMode = PictureBoxSizeMode.CenterImage;
        }
        picBBarcode.Image = img;        
        if (picBBarcode.Image != null)
        {
            btnSaveBarcode.Enabled = true;
            //Image saving method
        }
        UpdateResults("ParameterBarcode Event fired");
    }
}

/// <summary>
/// Process the Image object data to Image 
/// </summary>
/// <param name="ImageData">object that contains raw image data</param>
/// <returns>Formatted Image</returns>
public static Image ProcessImageData(object ImageData)
{
    try
    {
        Array arr = (Array)ImageData;
        long len = arr.LongLength;
        byte[] byImage = new byte[len];
        arr.CopyTo(byImage, 0);

        MemoryStream ms = new MemoryStream();
        ms.Write(byImage, 0, byImage.Length);

        Image img = Image.FromStream(ms);
        return img;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}                                                            

Figure 21: Sample App UI of the selection and the Scan-to-Connect Barcode Image

Bar Code Scanning

  1. Connect and discover a scanner (see Scanner Discovery / Asset Tracking Information / Validating Successful SDK Installation).
  2. Scan a bar code and its decoded data is returned in the form of XML data and displayed on the Barcode tab. To illustrate the typical implementation, the sample application also displays only the "Bar code" data below the XML data.

    Figure 22: Decoded Bar Code Data

Example

  1. Scan the following sample bar code after discovering the scanner in the sample application (see Scanner Discovery / Asset Tracking Information / Validating Successful SDK Installation).

    UPC-A 0-1234567891-2
  2. The following XML is returned:

    
    <?xml version="1.0" encoding="UTF-8" ?>
    <outArgs>
        <scannerID>2</scannerID>
        <arg-xml>
            <scandata>
                <modelnumber>DS670-SR20001ZZR</modelnumber>
                <serialnumber>7116000501003</serialnumber>
                <GUID>A2E647DED2163545B18BCEBD0A2A133D</GUID>
                <datatype>8</datatype>
                <datalabel>0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x31 0x32</datalabel>
                <rawdata>0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x31 0x32</rawdata>
            </scandata>
        </arg-xml>
    </outArgs>
    
    
  3. By processing the XML above, the sample application displays the decoded bar code in the Decoded Bar code text box and the symbology in the Symbology text box.

Language/Locale Details

  1. Toggle the Enable Emulation check box to enable/disable Simulated HID Keyboard Output.
  2. Select the language locale from the drop down menu.

    The sample application first retrieves the current config.xml file (see Simulated HID Keyboard Configuration) by executing an ExecCommand API call with the KEYBOARD_EMULATOR_GET_CONFIG method and an empty inXML. It receives outXML as shown below:

    inXML:

    
    <inArgs></inArgs>
    
    

    outXML:

    
    <outArgs>
        <arg-xml>
            <KeyEnumState>1</KeyEnumState>
            <KeyEnumLocale>0</KeyEnumLocale>
        </arg-xml>
    </outArgs>
    
    

    The sample application processes the XML above and populates the user interface. The <KeyEnumState> tag indicates the current state of Simulated HID Keyboard Output, where enabled = 1 and disabled = 0. The <KeyEnumLocale> tag indicates the language locale number currently active with the CoreScanner service. The value of "0" above indicates English.

    Use the ExecCommand API call with the KEYBOARD_EMULATOR_ENABLE method and following inXML to enable/disable Simulated HID Keyboard Output.

    
    <inArgs>
        <cmdArgs>
            <arg-bool>TRUE</arg-bool>
        </cmdArgs>
    </inArgs>
    
    

    To enable HID KB Emulator use "TRUE" in <arg-bool> tags and "FALSE" to disable it.

    
    <inArgs>
        <cmdArgs>
            <arg-int>1</arg-int>
        </cmdArgs>
    </inArgs>
    
    

    Use the ExecCommand API call with the KEYBOARD_EMULATOR_SET_LOCALE method and following inXML to change the language locale.

    Set the <KeyEnumLocale> tag value to "1" for French and "0" for English.

Capture Image and Video

  1. Connect and discover an imaging scanner (see Scanner Discovery / Asset Tracking Information / Validating Successful SDK Installation).
  2. Select a "SNAPI" mode scanner ID from the Select Scanner drop-down box. Your selection is then reflected in the Connected Scanners window.

    NOTE If no SNAPI scanner is shown in the Connected Scanners window, you must connect an imaging scanner that supports image/video transfer. For an up-to-date table listing scanner models and their supported communication modes refer to the Scanner SDK for Windows website at: www.zebra.com/scannersdkforwindows

    Alternatively, select "SNAPI" mode scanner in the Connected Scanners area. Your selected Scanner's ID is displayed in the Select Scanner drop-down combo box.

    Figure 23: Scanner Selection
  3. Go to the Image & Video tab.
  4. Select an image type of JPG, TIFF or BMP.
  5. Selecting the image type in the sample application executes an ExecCommand API call using the DEVICE_SET_PARAMETERS method and following XML code:

    
    <inArgs>
        <scannerID>1</scannerID>
        <cmdArgs>
            <arg-xml>
                <attrib_list>
                    <attribute>
                        <id>304</id>
                        <datatype>B</datatype>
                        <value>4</value>
                    </attribute>
                </attrib_list>
            </arg-xml>
        </cmdArgs>
    </inArgs>
    
    

    NOTE The <scannerID> tag in the XML is filled with the scanner’s ID selected in the Connected Scanners list of the sample application. The <id> tag contains the image file type parameter of the selected scanner. In the XML example above, this value is 304. The value 4 indicates the image type the user should get from the scanner. See the following table for valid Image Types.

    Table 9: Image Types

    Image Type Value
    BMP_FILE_SELECTION 3
    TIFF_FILE_SELECTION 4
    JPEG_FILE_SELECTION 1

    NOTE These values may change with the scanner model. Refer to the scanner Product Reference Guide for more information on scanner parameters. For more information about parameter settings, see Parameter Setting (Device Configuration) on page 4-21

  6. Check Enable Video View Finder and click either Image to put the scanner into image capture mode or Video to put the scanner into video capture mode.
  7. Checking Enable Video View Finder in the sample application executes an ExecCommand API call with the DEVICE_SET_PARAMETERS method and following XML code:

    
    <inArgs>
        <scannerID>1</scannerID>
        <cmdArgs>
            <arg-xml>
                <attrib_list>
                    <attribute>
                        <id>324</id>
                        <datatype>B</datatype>
                        <value>1</value>
                    </attribute>
                </attrib_list>
            </arg-xml>
        </cmdArgs>
    </inArgs>
    
    

    NOTE The <scannerID> tag in the XML contains the selected scanner’s ID from the Connected Scanners list of the sample application. The <id> tag contains the video view finder parameter number of the scanner and value 1 indicates that the view finder is enabled. A value “0” indicates the view finder is disabled.

  8. Click Image in the sample application. Image executes an ExecCommand API call using the DEVICE_CAPTURE_IMAGE method with the XML code below. Click Video to execute an ExecCommand API call using the DEVICE_CAPTURE_VIDEO method with the following XML code.

    
    <inArgs>
        <scannerID>1</scannerID>
    </inArgs>
    
    
  9. Click Pull Trigger on the bottom left side of the utility to capture an image. If the scanner was place into video capture mode in the previous step, click Pull Trigger once to start video capture and click Release Trigger to stop video capture.
  10. Clicking Pull Trigger or Release Trigger in the sample application executes an ExecCommand API call using the corresponding DEVICE_PULL_TRIGGER or DEVICE_RELEASE_TRIGGER method with the following XML code

    
    <inArgs>
        <scannerID>1</scannerID>
    </inArgs>
    
    

    NOTE You can use the trigger on the scanner to start and stop image or video capture instead of the soft trigger buttons provided in the sample utility.

    Figure 24: Captured Image Displayed on the Image & Video Tab

  11. If you registered with ImageEvent you receive an image event for the performed pull trigger when in image mode.
  12. 12. If you registered with VideoEvent you receive a video event for the performed pull trigger when in video mode.

Beep the Beeper

Zebra scanners are capable of sounding the beeper by invoking the Beeper method from the host system.

  1. Connect and discover a scanner (see Scanner Discovery / Asset Tracking Information / Validating Successful SDK Installation).
  2. Select a "SNAPI" or "OPOS/IBM OPOS" mode scanner ID from the Select Scanner drop-down box. Your selection is reflected in the Connected Scanners window (see Figure 23).
  3. Select the desired beep sequence from the list defined on the Scanner Actions tab as shown below.

    Figure 25: Beep Values
  4. Click Beep
  5. Clicking Beep in the sample application executes an ExecCommand API call with the SET_ACTION method and following XML code:

    
    <inArgs>
        <scannerID>1</scannerID>
        <cmdArgs>
            <arg-int>2</arg-int>
        </cmdArgs>
    </inArgs>
    
    

    NOTE The <scannerID> tag in the XML is filled with the scanner's ID selected in the Connected Scanners list of the sample application. The <arg-int> tag in the XML is filled with the beep's ID selected in the Beeper drop-down list shown in Figure 24.

  6. You can sound any of the beeps by changing the value of the tag in the XML code. Successful execution of the command returns the status parameter as "0".

Flash the LED

Zebra scanners are capable of flashing an LED by initiating the flash LED method from the host system.

  1. Connect and discover a scanner (see Scanner Discovery / Asset Tracking Information / Validating Successful SDK Installation).
  2. Select a "SNAPI" or "OPOS/IBM OPOS" mode scanner ID from the Select Scanner drop-down box. Your selection is reflected in the Connected Scanners window (see Figure 23).
  3. Select the desired LED from the list, defined on the Scanner Actions tab

    Figure 26: LED Selection
  4. Click On to light the LED and Off to turn it off.
  5. Clicking On in the sample application executes an ExecCommand API call with the SET_ACTION method and the following XML code:

    
    <inArgs>
        <scannerID>1</scannerID>
        <cmdArgs>
            <arg-int>43</arg-int>
        </cmdArgs>
    </inArgs>
    
    

    NOTE The <scannerID> tag in the XML is filled with the scanner ID selected in the Connected Scanners list of the sample application. The tag in the XML is filled with the corresponding action value to turn on or off the LED selected from the drop-down list shown in Figure 25.

  6. You can control any LED supported by the scanner by changing the action value in the <arg-int> tag. The list of action values can be found in Action Attributes and Values.
  7. Clicking Off in the sample application executes an ExecCommand API call using the DEVICE_LED_OFF method with the same XML code that turned it on.

NOTEThe Beep the Beeper and Flash the LED XML code examples are the same. The only difference between these commands is the method name. All XML used in an ExecCommand API call has a common format. The </inArgs> tag always contains the <scannerID> tag and optionally contains <cmdArgs> tags and <arg-xml> tags inside the </inArgs> tag. Inside <cmdArgs>, there can be <arg-string>,<arg-bool> and <arg-int> tags. You can execute different commands for the same XML by changing the method parameter in ExecCommand.

Querying Attributes and Parameters

To query parameters from a specific device, such as the Date of Manufacture and Firmware Version, use the following procedure.

  1. Connect and discover a scanner (see Scanner Discovery / Asset Tracking Information / Validating Successful SDK Installation).
  2. Select the scanner you want to query from the list of Connected Scanners and then select the RSM tab.
  3. Click Get All IDs to retrieve the entire list of supported attribute IDs of the selected scanner. This operation executes an ExecCommand API call with the ATTR_GETALL method and the following XML:

    
    <inArgs>
        <scannerID>1</scannerID>
    </inArgs>
    
    

    NOTE The <scannerID> tag in the XML contains the scanner's ID selected in the Connected Scanners list of the sample application.

  4. The sample application receives the XML output below and displays the corresponding attribute IDs on the grid (see Figure 29).

    
    <?xml version="1.0" encoding="UTF-8" ?>
    <outArgs>
        <scannerID>1</scannerID>
        <arg-xml>
            <modelnumber>DS670-SR20001ZZR</modelnumber>
            <serialnumber>7116000501003</serialnumber>
            <GUID>A2E647DED2163545B18BCEBD0A2A133D</GUID>
            <response>
                <opcode>5000</opcode>
                <attrib_list>
                    <attribute name="">0</attribute>
                    <attribute name="">1</attribute>
                    <attribute name="">2</attribute>
                    <attribute name="">3</attribute>
                    <attribute name="">4</attribute>
                    <attribute name="">5</attribute>
                    <attribute name="">6</attribute>
                    <attribute name="">7</attribute>
                    <attribute name="">8</attribute>
                    <attribute name="">9</attribute>
                    <attribute name="">10</attribute>
                    <attribute name="">11</attribute>
                    <attribute name="">12</attribute>
                    <attribute name="">13</attribute>
                    <attribute name="">14</attribute>
                    <attribute name="">15</attribute>
                    <attribute name="">16</attribute>
                    <attribute name="">17</attribute>
                    <attribute name="">18</attribute> 
                    <attribute name="">20</attribute>
                    <attribute name="">21</attribute>
                    <attribute name="">22</attribute>
                    <attribute name="">23</attribute>
                    <attribute name="">24</attribute>
                    <attribute name="">25</attribute>
                    <attribute name="">26</attribute>
                    <attribute name="">27</attribute>
                    <attribute name="">28</attribute>
                    <attribute name="">29</attribute>
                    <attribute name="">30</attribute>
                    <attribute name="">31</attribute>
                    <attribute name="">34</attribute>
                    <attribute name="">35</attribute>
                    <attribute name="">36</attribute>
                    <attribute name="">37</attribute>
                    <attribute name="">38</attribute>
                    <attribute name="">39</attribute>
                    <attribute name="">655</attribute>
                    <attribute name="">656</attribute>
                    <attribute name="">657</attribute>
                    <attribute name="">658</attribute>
                    <attribute name="">659</attribute>
                    <attribute name="">665</attribute>
                    <attribute name="">670</attribute>
                    <attribute name="">672</attribute>
                    <attribute name="">673</attribute>
                    <attribute name="">705</attribute>
                    <attribute name="">716</attribute>
                    <attribute name="">718</attribute>
                    <attribute name="">721</attribute>
                    <attribute name="">724</attribute>
                    <attribute name="">726</attribute>
                    <attribute name="">727</attribute>
                    <attribute name="">728</attribute>
                    <attribute name="">730</attribute>
                    <attribute name="">731</attribute>
                    <attribute name="">734</attribute>
                    <attribute name="">735</attribute>
                    <attribute name="">745</attribute>
                    <attribute name="">6000</attribute>
                    <attribute name="">6001</attribute>
                    <attribute name="">6002</attribute>
                    <attribute name="">6003</attribute>
                    <attribute name="">6004</attribute>
                    <attribute name="">20004</attribute>
                    <attribute name="">20006</attribute>
                    <attribute name="">20007</attribute>
                    <attribute name="">20008</attribute>
                    <attribute name="">20009</attribute>
                    <attribute name="">20010</attribute>
                    <attribute name="">20011</attribute>
                    <attribute name="">20013</attribute>
                </attrib_list>
            </response>
        </arg-xml>
    </outArgs>
    
    
    Figure 27: Get RSM IDs

  5. To query attributes, select attribute IDs and click Get Value to view the attribute values. This operation executes an ExecCommand API call with the ATTR_GET method and the following XML.

    
    <inArgs>
        <cmdArgs>
            <scannerID>1</scannerID>
            <arg-xml>
                <attrib_list>535,20004,1,140,392</attrib_list>
            </arg-xml>
        </cmdArgs>
    </inArgs>
    
    

    NOTE The tag in the XML contains the scanner's ID selected in the Connected Scanners list and the <attrib_list> tag with the attribute IDs selected in the RSM grid.

    For example, if you want to retrieve the values of the Date of Manufacture, Firmware Version, UPC-A status, Beeper Volume and ADF Rule parameters, you need to know their attribute IDs. Table 10 shows the corresponding IDs. Selecting these attribute IDs in the grid of the sample application and clicking Get Value executes an ExecCommand API call with the ATTR_GET method and the XML shown above.

    Table 10: Device Parameters to Query

    Parameter Attribute #
    Date of Manufacture 535
    Firmware Version 20004
    UPC A status 1
    Beeper Volume 140
    ADF Rule 392

    After successfully executing the command, the output XML appears in the Logs tab of the sample application as follows:

    
    <?xml version="1.0" encoding="UTF-8" ?> 
    <outArgs>
        <scannerID>1</scannerID>
        <arg-xml>
            <modelnumber>DS670-SR20001ZZR</modelnumber>
            <serialnumber>7116000501003</serialnumber>
            <GUID>A2E647DED2163545B18BCEBD0A2A133D</GUID>
            <response>
                <opcode>5001</opcode>
                <attrib_list>
                    <attribute>
                    <id>535</id>
                        <name></name>
                        <datatype>S</datatype>
                        <permission>R</permission>
                        <value>27APR07</value>
                    </attribute>
                    <attribute>
                        <id>20004</id>
                        <name></name>
                        <datatype>S</datatype>
                        <permission>R</permission>
                        <value>DS6707X4</value>
                    </attribute>
                    <attribute>
                        <id>1</id>
                        <name></name>
                        <datatype>F</datatype>
                        <permission>RWP</permission>
                        <value>True</value>
                    </attribute>
                    <attribute>
                        <id>140</id>
                        <name></name>
                        <datatype>B</datatype>
                        <permission>RWP</permission>
                        <value>0</value>
                    </attribute>
                    <attribute>
                        <id>392</id>
                        <name></name>
                        <datatype>A</datatype>
                        <permission>RWP</permission>
                        <value>0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00</value>
                    </attribute>
                </attrib_list>
            </response>
        </arg-xml>
    </outArgs>
    
    

    The sample application's RSM grid displays the output as in Figure 28 by processing the XML above.

    Figure 28: RSM Attribute Values for Selected IDs

Parameter Setting (Device Configuration)

To set parameters of a specific device, such as UPC-A status or Beeper Volume, use the following procedure.

  1. Query the parameter.
  2. To set an attribute, select and edit the attribute value in the RSM window data grid. Then select the entire row of the changed attribute and click Set Value or Store Value. Clicking these buttons execute an ExecCommand API call using the ATTR_SET or ATTR_STORE method and XML code shown below.

    
    <inArgs>
        <scannerID>1</scannerID>
        <cmdArgs>
            <arg-xml>
                <attrib_list>
                    <attribute>
                        <id>1</id>
                        <datatype>F</datatype>
                        <value>False</value>
                    </attribute>
                </attrib_list>
            </arg-xml>
        </cmdArgs>
    </inArgs>
    
    

    NOTE The <scannerID> tag in the XML contains the scanner's ID selected from the Connected Scanners list and the <attrib_list> tag contains the <attribute> tags selected in the RSM grid.

Examples

These examples demonstrate how to enable/disable a symbology, program an ADF rule, control beeper volume and control LEDs.

Before starting the example, scan the Set All Defaults barcode below to return all parameters to the scanner's default values (replacing the scanner's current settings). Refer to the scanner's Product Reference Guide for default values.

USB (IBM Hand-Held)

Enable/Disable a Symbology

To disable the UPC-A symbology, determine the attribute ID of UPC-A by referencing the scanner's Product Reference Guide. The attribute ID of the UPC-A parameter is 1. To change and validate the setting, use the following procedure:

  1. Put the scanner into USB OPOS (Hand Held) or USB SNAPI mode by scanning one of the barcodes in Scanner Discovery / Asset Tracking Information / Validating Successful SDK Installation
  2. Get the value of attribute ID 1. The value of this attribute should be TRUE if you scanned the Set All Defaults barcode before beginning the example.
  3. To disable the UPC-A attribute of a scanner, change the value of the attribute ID 1 to FALSE in the RSM grid and click Set Value or Store Value.
  4. The sample application then executes an ExecCommand API call with the ATTR_SET or ATTR_STORE method and the XML shown in Parameter Setting (Device Configuration).
  5. If the command executed successfully, you cannot scan the following UPC-A barcode.

    USB (IBM Hand-Held)

Programming an ADF Rule

If you want to create an ADF rule to add the prefix A to any barcode and an Enter key after scanning a barcode, you must modify the ADF buffer of the scanner. The attribute ID of the ADF rule is 392.

To change and validate the setting:

USB Host Type = HID Keyboard Wedge

  1. Scan the barcode below, or follow the procedure in Host Variant Switching to switch the scanner to HID keyboard mode. This enables the scanner to send data to any text editor.

    USB (IBM Hand-Held)
  2. Open a text editor such as Windows Notepad and scan the Sample UPC-A Barcode while the text editor is the active window. The text 012345678912 is inserted into the editor window.
  3. Put the scanner into USB OPOS (hand held) or USB SNAPI mode by scanning one of the barcodes in Scanner Discovery / Asset Tracking Information / Validating Successful SDK Installation, or following the procedure in Host Variant Switching to switch the host mode.
  4. In the sample application, change the value of the selected scanner's attribute 392 to: 0x01 0x0C 0x11 0xF4 0x14 0x10 0x47 0x0D.
  5. Click Store Value.
  6. The sample application then executes an ExecCommand API call using the ATTR_STORE method and the following XML code:

    
    <inArgs>
        <scannerID>1</scannerID>
        <cmdArgs>
            <arg-xml>
                <attrib_list>
                    <attribute>
                        <id>392</id>
                        <datatype>A</datatype>
                        <value>0x01 0x0C 0x11 0xF4 0x14 0x10 0x47 0x0D</value>
                    </attribute>
                </attrib_list>
            </arg-xml>
        </cmdArgs>
    </inArgs>
    
    
  7. After successfully executing the command, repeat steps 1 and 2.
  8. The text entered in Notepad is A012345678912<Enter key>.

Beeper Volume Control

Suppose you want to change the beeper volume of the scanner. The corresponding attribute ID is 140 and the scanner beeper has three volume levels:

  • 2 - low
  • 1 - medium
  • 0 - high

To change and validate this setting:

  1. Put the scanner into USB OPOS (hand held) or USB SNAPI mode by scanning one of the barcodes in Scanner Discovery / Asset Tracking Information / Validating Successful SDK Installation, or following the procedure in Host Variant Switching switch the host mode.
  2. Scan the Sample UPC-A Barcode and listen to the beeper carefully.
  3. Select attribute ID 140 from the RSM attribute grid. Its value should be 0 (if the Set All Defaults barcode was scanned at the beginning of the example).
  4. Change the value to 2 and click Set Value or Store Value.
  5. The sample application then executes an ExecCommand API call with the ATTR_SET or ATTR_STORE method and the following XML code:

    
    <inArgs>
        <scannerID>1</scannerID>
        <cmdArgs>
            <arg-xml>
                <attrib_list>
                    <attribute>
                        <id>140</id>
                        <datatype>B</datatype>
                        <value>2</value>
                    </attribute>
                </attrib_list>
            </arg-xml>
        </cmdArgs>
    </inArgs>                                                                        
    
    
  6. After successfully executing the command, scan the Sample UPC-A barcode again and note that the beeper volume is lower.

    NOTE Changes made using the Store Value commands are permanent (persistent over power down and power up cycles). Changes made using the Set Value command are temporary (parameters set using this temporary command are lost after the next power down).

Beeper and LED Control

Suppose you want to beep the scanner or light the LED of the scanner. The Action Attribute ID is 6000.

To change and validate this setting:

  1. Put the scanner into USB OPOS (hand held) or USB SNAPI mode by scanning one of the barcodes in Scanner Discovery / Asset Tracking Information / Validating Successful SDK Installation, or following the procedure in Host Variant Switching switch the host mode.
  2. To light the LED of the scanner execute an ExecCommand API call with the ATTR_SET or ATTR_STORE method and the following XML code:

    
    <inArgs>
        <scannerID>1</scannerID>
        <cmdArgs>
            <arg-xml>
                <attrib_list>
                    <attribute>
                        <id>6000</id>
                        <datatype>X</datatype>
                        <value>43</value>
                    </attribute>
                </attrib_list>
            </arg-xml>
        </cmdArgs>
    </inArgs>
    
    

Host Variant Switching

  1. Connect and discover a scanner (see Scanner Discovery / Asset Tracking Information / Validating Successful SDK Installation).
  2. Under the Scanner Action tab, select a Target Mode from the drop-down menu in the Switch Host Variant area.
  3. Permanent Change or Silent Reboot options (hidden by the Target Mode drop-down list) may be selected if desired.
  4. Click Switch Host Mode and the scanner reboots and sets to the selected target mode.

    Figure 29: Changing Host Mode
  5. Clicking Switch Host Mode in the sample application executes an ExecCommand API call with the DEVICE_SWITCH_HOST_MODE method and the following XML code:

    
    <inArgs>
        <scannerID>1</scannerID>
        <cmdArgs>
            <arg-string>XUA-45001-1</arg-string>
            <arg-bool>TRUE</arg-bool>
            <arg-bool>FALSE</arg-bool>
        </cmdArgs>
    </inArgs>
    
    

    When you are in HID Keyboard mode the only allowed target host variants are IBM Hand-held USB and SNAPI.

Firmware Upgrade

Firmware Upgrade Scenarios

Three firmware upgrade scenarios that should be considered are discussed below.

Scenario A: Loading a compatible, different version of firmware from the firmware already on the scanner.

  • Upgrading the firmware on a scanner includes two steps:

    1. The firmware file downloads to the scanner.
    2. The firmware file on the scanner is activated (programmed into the scanner). Activation lasts for approximately 50 seconds, during which the LED blinks red. During activation, the scanner does not respond to network queries. When activation (programming) completes, the scanner automatically reboots (the LED turns off) and emits a power up beep, and powers up with the new upgraded firmware.
  • A firmware download can take up to 20 minutes depending on the connection speed between the POS terminal and the scanner, the operating mode of the scanner and the size of the firmware file.

Scenario B: Loading the same version of firmware that is already on the scanner.

  • A firmware file can include multiple components. When loading the same version of firmware, some components in the firmware file may be the same as those already on the scanner, while other components are different.
  • Before firmware loads to the scanner, the scanner driver reads the header information of each firmware component to validate the model number and version. For example, if the first component downloading from the firmware file is the same version as the one already on the scanner, the component does not load to the scanner. Each remaining component in the firmware file is verified against the equivalent component on the scanner, and only components that are different are downloaded to the scanner.

Scenario C: Loading an incompatible version of firmware on the scanner.

  • This occurs when attempting to load firmware designed for one scanner model say DS6707 onto another incompatible scanner model say DS6708.

A firmware file can include multiple components. Before downloading firmware to the scanner, the scanner driver reads the header information of each firmware component to validate the model number and version. If the scanner driver determines that the firmware component model number does not match the scanner, the component does not load. This process continues to verify each remaining component in the firmware file.

Firmware Upgrade Procedure
  1. Connect and discover a scanner (see Scanner Discovery / Asset Tracking Information / Validating Successful SDK Installation).
  2. Obtain the latest firmware .DAT file for loading to a scanner using 123Scan.

    • Download and launch 123Scan.
    • Using 123Scan2, confirm you have the latest scanner plug-in. The plug-in contains a number of files including the firmware file and release notes.

      1. To download the latest scanner plug-ins from within 123Scan, launch 123Scan, go to the help menu and click Check for updates.
      2. For a listing of scanner models, plug-ins and firmware files supported in 123Scan select Supported scanners and plug-ins under the Help menu.
      3. The plug-ins are contained within a 123Scan sub folder accessible in: [WINDOWSDRIVE]\Users\ Application Data\123Scan2\Plug. The firmware file is named with a .DAT extension (e.g., CAAABS00-006-R02D0.DAT).
  3. From the Advanced tab of the sample application, browse to and select the firmware .DAT file.
  4. Check the Bulk Update option if bulk channel updating is preferred.
  5. Click Update to transfer the firmware file from the computer to the scanner.
  6. Clicking Update in the sample application executes an ExecCommand API call with the UPDATE_FIRMWARE method and the following XML code:

    
    <inArgs>
        <scannerID>1</scannerID>
        <cmdArgs>
            <arg-string>D:\scanner\ScannerFW\DS6707\DS6707X4.DAT</arg-string>
            <arg-int>2</arg-int>
        </cmdArgs>
    </inArgs>
    
    
  7. If you have registered with ScanRMDEvent you receive six types of events per firmware update cycle.
  8. The OnScanRMDEvent function has two parameters where the first short type parameter contains the event type described above. The six event type values are listed in Table 11.

    Table 11: Firmware Update Event Types

    Event Value Event Type Description
    11 SCANNER_UF_SESS_START Triggered when flash download session starts.
    12 SCANNER_UF_DL_START Triggered when component download starts.
    13 SCANNER_UF_DL_PROGRESS Triggered when block(s) of flash completed.
    14 SCANNER_UF_DL_END Triggered when component download ends
    15 SCANNER_UF_SESS_END Triggered when flash download session ends
    16 SCANNER_UF_STATUS Triggered when update error or status

    The second parameter of the same function contains an XML for the above event types. By processing the XML further information can be obtained. The formats of the receiving XMLs for each event types are as follows. All XMLs are containing the information about the scanner that it updates.

    1. SCANNER_UF_SESS_START

      
      <?xml version="1.0" encoding="UTF-8"?>
      <outArgs>
          <scannerID>1</scannerID>
          <arg-xml>
              <sess_start>
                  <modelnumber>DS670-SR20001ZZR</modelnumber>
                  <serialnumber>S/N:7108E15933CA1B4BB776F7BDB4B3F826</serialnumber>
                  <GUID>7108E15933CA1B4BB776F7BDB4B3F826</GUID>
                  <maxcount>3075</maxcount>
                  <status>0</status>
              </sess_start>
          </arg-xml>
      </outArgs>
      
      

      The <maxcount> tag contains the number of records in the firmware file.

    2. SCANNER_UF_DL_START

      
      <?xml version="1.0" encoding="UTF-8"?>
      <outArgs>
          <scannerID>1</scannerID>
          <arg-xml>
              <dl_start>
                  <modelnumber>DS670-SR20001ZZR</modelnumber>
                  <serialnumber>S/N:7108E15933CA1B4BB776F7BDB4B3F826</serialnumber>
                  <GUID>7108E15933CA1B4BB776F7BDB4B3F826</GUID>
                  <software_component>0</software_component>
                  <status>0</status>
              </dl_start>
          </arg-xml>
      </outArgs>
      
      

      The <software_component> tag contains the component number that downloads started.

    3. SCANNER_UF_DL_PROGRESS

      
      <?xml version="1.0" encoding="UTF-8"?>
      <outArgs>
          <scannerID>1</scannerID>
          <arg-xml>
              <dl_progress>
                  <modelnumber> DS670-SR20001ZZR </modelnumber>
                  <serialnumber>S/N:7108E15933CA1B4BB776F7BDB4B3F826</serialnumber>
                  <GUID>7108E15933CA1B4BB776F7BDB4B3F826</GUID>
                  <software_component>1</software_component>
                  <progress>7</progress>
                  <status>600</status>
              </dl_progress>
          </arg-xml>
      </outArgs>
      
      

      The <progress> tag contains the record number that it downloading at that moment. The <status> tag contains the status of the download progressing record. 600 value means that it is the resident firmware.

    4. SCANNER_UF_DL_END

      
      <?xml version="1.0" encoding="UTF-8"?>
      <outArgs>
          <scannerID>1</scannerID>
          <arg-xml>
              <dl_end>
                  <modelnumber> DS670-SR20001ZZR </modelnumber>
                  <serialnumber>S/N:7108E15933CA1B4BB776F7BDB4B3F826</serialnumber>
                  <GUID>7108E15933CA1B4BB776F7BDB4B3F826</GUID>
                  <software_component>2</software_component>
                  <size>0</size>
                  <status>0</status>
              </dl_end>
          </arg-xml>
      </outArgs>
      
      
    5. SCANNER_UF_SESS_END

      
      <?xml version="1.0" encoding="UTF-8"?>
      <outArgs>
          <scannerID>1</scannerID>
          <arg-xml>
              <sess_end>
                  <modelnumber> DS670-SR20001ZZR </modelnumber>
                  <serialnumber>S/N:7108E15933CA1B4BB776F7BDB4B3F826</serialnumber>
                  <GUID>7108E15933CA1B4BB776F7BDB4B3F826</GUID>
                  <status>0</status>
              </sess_end>
          </arg-xml>
      </outArgs>
      
      
    6. SCANNER_UF_STATUS

      
      <?xml version="1.0" encoding="UTF-8"?>
      <outArgs>
          <scannerID>1</scannerID>
          <arg-xml>
              <sess_info>
                  <modelnumber> DS670-SR20001ZZR </modelnumber>
                  <serialnumber>S/N:7108E15933CA1B4BB776F7BDB4B3F826</serialnumber>
                  <GUID>7108E15933CA1B4BB776F7BDB4B3F826</GUID>
                  <status>506</status>
              </sess_info>
          </arg-xml>
      </outArgs>
      
      
  9. After the file transfer is complete, click Launch to activate (program into the scanner) the new firmware. Activation takes approximately one minute, during which the LED blinks red and scanning barcode data is disabled. During activation, the scanner does not respond to network queries. When activation (programming) completes, the scanner automatically reboots (the LED turns off), emits a power up beep and restarts with the new upgraded firmware.

    Figure 30: Firmware Upgrade Through Bulk (Faster Download Mode) Channel

Scan Scan Write

Scan Scan Write can be used to "commission" tags (change the Serial Number and EPC id). This information gets written to the tag. Scan Scan Write works with all interfaces (except Keyboard Wedge) but SNAPI is recommended.

NOTE The new tab control will be visible only when a DS9908R device is connected and selected from the list of barcode scanners currently connected to the demo application.

Follow these steps.

  1. Download the latest version of the Zebra CoreScanner Driver and Zebra Scanner SDK for Windows from zebra.com.
  2. Set the USB Device Type to "SNAPI" (with or without imaging) on the DS990R and connect it to your PC.
  3. Open the Scanner SDK C# Sample Applications app.
  4. Select "Discover Scanners". DS9908-xxxxxxxxxxx will appear in the "Connected Scanners List".

    Select the "Scan Scan Write" tab you will see a screen similar to the one below.

    NOTE: The new tab control will be visible only when a DS9908R device is connected and selected from the list of barcode scanners currently connected to the demo application.

    Figure 31: Device Discovery
  5. Scan the RFID tag. The Existing EPC id, Filter value, Position, Serial Number and User Bank data (if applicable) will be populated. See screen shot below.

    Figure 32: Scan RFID Tag
  6. Scan the barcode. The Scan Barcode and New EPC id will be populated. See screen shot below.

    Figure 33: Scan Barcode
  7. Edit the Serial Number if desired. New EPC id will change to reflect the new Serial Number.

    Figure 34: Edit Serial Number
  8. Rescan the RFID tag and select "Write tag". The new EPC id will be written to the RFID tag. A green checkmark will appear after the new EPC id. Or red X if.

    Figure 35: Write Tag
  9. Select "Clear" to clear the fields.

    Figure 36: Clear Fields
  10. Rescan the RFID tag and Select "verify tag" to verify the contents.

    Figure 37: Verify Tag

Write Simple Application Using the Scanner SDK API

Overview

This section provides a step by step guide to writing simple applications using CoreScanner APIs.

Before you start to write applications using CoreScanner APIs, please prepare your development environment properly.

  • Install Microsoft Visual Studio 2017 or newer version and make sure you have enough system resources to develop an application on your system.
  • Install the Scanner SDK and make sure the SDK is operational. See Installing the SDK for more details.

Import CoreScanner Reference, Class Declaration and Instantiation

To create an empty project in Microsoft Visual Studio 2017 (create a console project):

  1. Start Microsoft Visual Studio 2019.
  2. Go to New → New → Project

    Figure 38: Create New Project
  3. Select Project Visual C# and Template as Console App (.NET Framework) and type a name for your project. In this example, it is ConsoleApplication1.

    Figure 39: C# Console Application
  4. Import CoreScanner as a reference into your application. Go to Project → Add Reference.

    Figure 40: Add Reference
  5. Select the CoreScanner Type Library from the COM tab and click OK.

    Figure 41: CoreScanner Type Library
  6. To avoid versioning conflicts between different versions of the COM component set Embed Interop Types to False in the reference properties windows.

    Figure 42: COM Interop Type
  7. CoreScanner is listed in your project under references as shown below.

    Figure 43: CoreScanner Reference
  8. You are now ready to import the CoreScanner library into your application. After importing, you can declare and instantiate the CoreScanner class for the application.

    Open the Program.cs file and enter the modifications as shown below.

    Figure 44: CoreScanner Initialization
  9. Now you are ready to start dealing with CoreScanner APIs.

Open API

After you instantiate CoreScanner class into your application you can call Open API as shown below.


using System;
using System.Collections.Generic;
using System.Text;
using CoreScanner;

namespace ConsoleApplication1
{
    class Program
    {
        // Declare CoreScannerClass
        static CCoreScannerClass cCoreScannerClass;

        static void Main(string[] args)
        {
            //Instantiate CoreScanner Class
            cCoreScannerClass = new CCoreScannerClass();

            //Call Open API
            short[] scannerTypes = new short[1];    // Scanner Types you are interested in
            scannerTypes[0] = 1;                    // 1 for all scanner types
            short numberOfScannerTypes = 1;         // Size of the scannerTypes array 
            int status;                             // Extended API return code

            cCoreScannerClass.Open(0, scannerTypes, numberOfScannerTypes, out status);

            if (status == 0)
            { 
                Console.WriteLine("CoreScanner API: Open Successful");
            }
            else
            {
                Console.WriteLine("CoreScanner API: Open Failed"); 
            }
        }
    }
}                                                            

If you have successfully executed all the commands, you see the following output on the console window.

Figure 45: Open API Success - Console Window

GetScanners API

After you call Open API as described above you can call the GetScanners API as shown below.


using System;
using System.Collections.Generic;
using System.Text;
using CoreScanner;

namespace ConsoleApplication1
{
    class Program
    {
        // Declare CoreScannerClass
        static CCoreScannerClass cCoreScannerClass;

        static void Main(string[] args)
        {
            //Instantiate CoreScanner Class
            cCoreScannerClass = new CCoreScannerClass();

            //Call Open API
            short[] scannerTypes = new short[1];    // Scanner Types you are interested in
            scannerTypes[0] = 1;                    // 1 for all scanner types
            short numberOfScannerTypes = 1;         // Size of the scannerTypes array 
            int status;                             // Extended API return code

            cCoreScannerClass.Open(0, scannerTypes, numberOfScannerTypes, out status);

            // Lets list down all the scanners connected to the host

            short numberOfScanners;                         // Number of scanners expect to be used 
            int[] connectedScannerIDList = new int[255];    // List of scanner IDs to be returned 
            string outXML;                                  // Scanner details output

            cCoreScannerClass.GetScanners(out numberOfScanners, connectedScannerIDList, out outXML, out status);

            Console.WriteLine(outXML);
        }
    }
}

If you have successfully executed all the commands, you see the following output on the console window.

Figure 46: GetScanners API Success - Console Window

ExecCommand API to Demonstrate Beep the Beeper

After you call Open API as described above, you can call ExecCommand API as shown below.


using System;
using System.Collections.Generic;
using System.Text;
using CoreScanner;

namespace ConsoleApplication1
{
    class Program
    {
        // Declare CoreScannerClass
        static CCoreScannerClass cCoreScannerClass;

        static void Main(string[] args)
        {
            // Instantiate CoreScanner Class 
            cCoreScannerClass = new CCoreScannerClass();

            // Call Open API
            short[] scannerTypes = new short[1];    // Scanner Types you are interested in     
            scannerTypes[0] = 1;                    // 1 for all scanner types
            short numberOfScannerTypes = 1;         // Size of the scannerTypes array 
            int status;                             // Extended API return code

            cCoreScannerClass.Open(0, scannerTypes, numberOfScannerTypes, out status);

            // Let's beep the beeper
            int opcode = 6000;  // Method for Beep the beeper 
            string outXML;      // Output
            string inXML = "<inArgs>" +
                                "<scannerID>1</scannerID>" + // The scanner you need to beep
                                "<cmdArgs>" +
                                    "<arg-int>3</arg-int>" + // 4 high short beep pattern
                                "</cmdArgs>" + 
                            "</inArgs>";

            cCoreScannerClass.ExecCommand(opcode, ref inXML, out outXML, out status);
        }
    }
} 

If you have successfully executed all the commands, you see the following output on the console window. There is no visual output for this beep command but an audible beep sounds from the scanner.

Figure 47: ExecCommand API Success (Scanner Beep) - Console Window

Retrieve Asset Tracking Information from ExecCommand with the RSM_GET Method

After you call Open API as described above, you can call ExecCommand API as shown below.


using System;
using System.Collections.Generic;
using System.Text;
using CoreScanner;

namespace ConsoleApplication1
{
    class Program
    {
        // Declare CoreScannerClass
        static CCoreScannerClass cCoreScannerClass;

        static void Main(string[] args)
        {
            // Instantiate CoreScanner Class
            cCoreScannerClass = new CCoreScannerClass();

            // Call Open API
            short[] scannerTypes = new short[1];    // Scanner Types you are interested in
            scannerTypes[0] = 1;                    // 1 for all scanner types
            short numberOfScannerTypes = 1;         // Size of the scannerTypes array 
            int status;                             // Extended API return code

            cCoreScannerClass.Open(0, scannerTypes, numberOfScannerTypes, out status);

            // Let's retrieve assert tracking information
            int opcode = 5001;                  // Method for Get the scanner attributes 
            string outXML;                      // XML Output
            string inXML = "<inArgs>" +
                                "<scannerID>1</scannerID>" + // The scanner you need to get the information
                                "<cmdArgs>" +
                                    "<arg-xml>" +
                                        "<attrib_list>20004,533,20007,1</attrib_list>" + // attribute numbers you need
                                    "</arg-xml>" +
                                "</cmdArgs>" +
                            "</inArgs>";

            cCoreScannerClass.ExecCommand(opcode, ref inXML, out outXML, out status);
            Console.WriteLine(outXML); 
        }
    }
}

If you have successfully executed all the commands, you see the following output on the console window.

Figure 48: ExecCommand API Success (RSM GET) - Console Window

Enable the UPC-A Attribute by Calling SET_ATTRIBUTE via ExecCommand

After you call Open API as described above, you can call ExecCommand API as shown below.

This method does not show any output but it sets the UPC-A to enable (True) or disable (False).

Capture Barcode Data into an Application

  1. Create an empty C# Windows Forms App (.NET Framework) project in Microsoft Visual Studio.

    Figure 49: Create Empty C# Windows Forms Application
  2. Add CoreScanner as a reference into your project. See Import CoreScanner Reference, Class Declaration and Instantiation above for more details.
  3. Add a button and a text area into your application.

    Figure 50: C# Win Forms Application
  4. Include the following code segment into the Button click method.

    
    try
    {
        // Instantiate CoreScanner Class
        cCoreScannerClass = new CCoreScannerClass();
    
        // Call Open API
        short[] scannerTypes = new short[1];    // Scanner Types you are interested in
        scannerTypes[0] = 1;                    // 1 for all scanner types
        short numberOfScannerTypes = 1;         // Size of the scannerTypes array 
        int status;                             // Extended API return code
    
        cCoreScannerClass.Open(0, scannerTypes, numberOfScannerTypes, out status);
    
        // Subscribe for barcode events in cCoreScannerClass
        cCoreScannerClass.BarcodeEvent += new _ICoreScannerEvents_BarcodeEventEventHandler(OnBarcodeEvent);
    
        // Let's subscribe for events
        int opcode = 1001;  // Method for Subscribe events 
        string outXML;      // XML Output
        string inXML = "<inArgs>" +
                            "<cmdArgs>" +
                                "<arg-int>1</arg-int>" + // Number of events you want to subscribe
                                "<arg-int>1</arg-int>" + // Comma separated event IDs
                            "</cmdArgs>" +
                        "</inArgs>";
    
        cCoreScannerClass.ExecCommand(opcode, ref inXML, out outXML, out status);
        Console.WriteLine(outXML);
    }
    catch (Exception exp)
    {
        Console.WriteLine("Something wrong please check... " + exp.Message);
    }
    
    
  5. Implement a method to receive the event as shown below and populate the text box with scanned data.

    
    void OnBarcodeEvent(short eventType, ref string pscanData)
    {
        string barcode = pscanData;
        this.Invoke((MethodInvoker)delegate { textBox1.Text = barcode; });
    } 
    
    
  6. If you execute the application and click on the button, the application instantiates CoreScanner and is ready to receive barcode events. Following image illustrates the output when you scan a barcode.

    Figure 51: Scanned Barcode Output

Sample Source Codes

The following sample projects are published on GitHub.

Scanner SDK Sample Applications for Windows

This sample application demonstrates all the functionalities for Barcode Scanner SDK for Windows.

Code Snippets for CoreScanner Driver APIs in C++ and C#


Scanner SDK for Windows API

Overview

The Zebra Scanner SDK provides an easy to use yet powerful and extendible set of API commands to interface with scanner devices. The API commands include:

  • Open
  • GetScanners
  • ExecCommand
  • ExecCommandAsync
  • Close

Once the SDKs Open and GetScanners commands are invoked and the list of connected scanners is retrieved, all other methods execute through the ExecCommand and ExecCommandAsync commands. This is a user friendly approach, and easy to code in terms of day-to-day programming.

With the evolution of the SDK's capabilities, it is easier to increase the number of methods rather than increase the number of API commands. The benefit to the user is that, once you have the system up and running, a new method is just an additional operation to the existing code.

In addition to the commands above, the Zebra Scanner SDK supports nine types of events:

  • ImageEvent
  • VideoEvent
  • BarcodeEvent
  • PNPEvent
  • ScanRMDEvent
  • CommandResponseEvent
  • IOEvent
  • ScannerNotificationEvent
  • RTA Events
  • BinaryDataEvent

See Write Simple Application USing the Scanner SDK API for a starter example of an application illustrating the Zebra Scanner SDK API.

NOTE For a list of a scanner's supported attribute (parameter) numbers and definitions, refer to the Product Reference Guide for that model scanner, available from the Zebra Support website at http://www.zebra.com/support. Attributes include configuration parameters, monitored data, and asset tracking information.

References

Scanner ID

In the SDK context, scanner ID uniquely identifies a scanner device connected to the CoreScanner driver, and is required to communicate programmatically with the device. Developers need to call the GetScanners method of the CoreScanner API in order to retrieve the scanner IDs of connected devices. For example, to switch on a scanner's red LED, the scanner ID of that particular scanner must be obtained to provide that value in the <scannerID> element of inXML of the ExecCommand method call.

During each CoreScanner driver instance, scanner IDs are sequentially assigned to each connected device. When the CoreScanner driver is restarted, the array of connected scanners is reinitialized and previous scanner IDs may no longer be valid. In this case, the GetScanners method must be executed to obtain the new scanner IDs.

During a single CoreScanner driver instance, an RSM (Remote Scanner Management) supported scanner that is unplugged, and reconnected retaina its unique scanner ID. However, a non-RSM device is assigned a different scanner ID each time it is reconnected.

API Commands

Open

Opens an application instance from the user application or user library. This must be the first API command called before invoking any other API command from the user level application.

Syntax

C# C++

void Open(
    int reserved,
    System.Array sfTypes,
    short lengthOfTypes,
    out int status);


HRESULT STDMETHODCALLTYPE Open(
    /* [in] */ LONG reserved,
    /* [in] */ SAFEARRAY * sfTypes,
    /* [in] */ SHORT lengthOfTypes,
    /* [out] */ LONG *status) = 0;


Parameters

reserved - Reserved argument. Set to 0.

sfTypes - Selects the types of scanners requested for use with the API.

Table 12: Values for sfTypes

Code Value Scanner Category
SCANNER_TYPES_ALL 1 All Scanners
SCANNER_TYPES_SNAPI 2 SNAPI Scanners
SCANNER_TYPES_SSI 3 SSI Scanners (RS232)
SCANNER_TYPES_IBMHID 6 IBM Hand Held Scanners (USB OPOS)
SCANNER_TYPES_NIXMODB 7 Nixdorf Mode B scanners (RS232)
SCANNER_TYPES_HIDKB 8 USB HID Keyboard emulation scanners
SCANNER_TYPES_IBMTT 9 IBM Table Top Scanners

lengthOfTypes - Number of elements or the size of sfTypes array

status - Return value for the command

Return Values

0 - Success.

Any other value - See Error and Status Codes on Appendix.

GetScanners

Gets a list of scanners of the requested types that are connected at any time. This command should be invoked after the Open command.

Syntax

C# C++

void GetScanners(
    out short numberOfScanners, System.Array sfScannerIDList, out string outXML,
    out int status);


HRESULT STDMETHODCALLTYPE GetScanners(
    /* [out] */ SHORT *numberOfScanners,
    /* [out][in] */ SAFEARRAY * sfScannerIDList,
    /* [out] */ BSTR *outXML,
    /* [out] */ LONG *status) = 0;        


Parameters

numberOfScanners - Number of connected scanners of requested type(s).

sfScannerIDList - Array of scannerIDs of the requested type(s). The size of the array is 255 (MAX_NUM_DEVICES).

outXML - XML string-scanner meta information.

status - Return value for the command.

Return Values

0 - Success.

Any other value - See Error and Status Codes on Appendix.

ExecCommand

Provides synchronous execution of a method via an opcode.

Syntax

C# C++

void ExecCommand(
    int opcode,
    ref string inXML,
    out string outXML,
    out int status);        


HRESULT STDMETHODCALLTYPE ExecCommand(
    /* [in] */ LONG opcode,
    /* [in] */ BSTR *inXML,
    /* [out] */ BSTR *outXML,
    /* [out] */ LONG *status) = 0;              


Parameters

opcode - Method to be executed. See Appendix for opcodes.

inXML - Relevant argument list for the opcode, structured into an XML string.

outXML - XML string, scanner meta information.

status - Return value for the command.

Return Values

0 - Success.

Any other value - See Error and Status Codes on Appendix.

ExecCommandAsync

Provides asynchronous execution of a method via an opcode. Any response data is retrieved as CommandResponseEvents.


HRESULT STDMETHODCALLTYPE ExecCommandAsync(
    /* [in] */ LONG opcode,
    /* [in] */ BSTR *inXML,
    /* [out] */ LONG *status) = 0;

Syntax

C# C++

void ExecCommandAsync(
    int opcode,
    ref string inXML,
    out int status);


HRESULT STDMETHODCALLTYPE ExecCommandAsync(
    /* [in] */ LONG opcode,
    /* [in] */ BSTR *inXML,
    /* [out] */ LONG *status) = 0;                    


Parameters

opcode - Method to be executed. See Appendix for opcodes.

inXML - Relevant argument list for the opcode, structured into an XML string.

outXML - XML string, scanner meta information.

status - Return value for the command.

Return Values

0 - Success.

Any other value - See Error and Status Codes on Appendix.

Close

Closes the application instance through the CoreScanner service.

Syntax

C# C++

void Close(
    int reserved,
    out int status);


HRESULT STDMETHODALLTYPE Close(
    /* [in] */ LONG reserved,
    /* [out] */ LONG *status ) = 0;


Parameters

reserved - Reserved argument. Set to 0.

status - Return value for the command.

Return Values

0 - Success.

Any other value - See Error and Status Codes on Appendix.

API Events

The user application must register for each event category separately to receive events for that category. Use the methods REGISTER_FOR_EVENTS and UNREGISTER_FOR_EVENTS for this purpose (see Table 13 on Appendix).

ImageEvent

Triggered when an imaging scanner captures images in image mode. To receive ImageEvents, an application needs to execute the REGISTER_FOR_EVENTS method with the SUBSCRIBE_IMAGE event type.

Syntax

C# C++

void OnImageEvent(
    short eventType
    int size
    short imageFormat,
    ref object sfimageData,
    ref string pScannerData)


void OnImageEvent(
    SHORT eventType,
    LONG size,
    SHORT imageFormat,
    VARIANT *sfImageData,
    BSTR* pScannerData)


Parameters

eventType - Type of image event received (see Table 13).

Table 13: Image Event Types

Event Type Value Description
IMAGE_COMPLETE 1 Triggered when complete image captured
IMAGE_TRAN_STATUS 2 Triggered when image error or status

size - Size of image data buffer.

imageFormat - Format of image. (see Table 14)

Table 14: Image Formats

Event Type Value
JPEG_FILE_SELECTION 1
BMP_FILE_SELECTION 3
TIFF_FILE_SELECTION 4

sfimageData - Image data buffer.

pScannerData - Information in XML format about the scanner (ID, Model Number, Serial Number and GUID) that triggered the image event.


<?xml version="1.0" encoding="UTF-8"?>
<outArgs>
    <scannerID>1</scannerID>
    <arg-xml>
        <modelnumber>DS6707-SR20001ZZR</modelnumber>
        <serialnumber>7114000503322</serialnumber>
        <GUID>33C01F39EB23D949B5F3DBF643304FC4</GUID>
    </arg-xml>
</outArgs>

VideoEvent

Triggered when an imaging scanner captures video in video mode. To receive VideoEvents, an application needs to execute the REGISTER_FOR_EVENTS method with the SUBSCRIBE_VIDEO event type.

Syntax

C# C++

void OnVideoEvent(
    short eventType,
    int size,
    ref object sfvideoData,
    ref string pScannerData)


void OnVideoEvent(
    SHORT eventType,
    LONG size,
    VARIANT *sfvideoData,
    BSTR* pScannerData)


Parameters

eventType - Type of video event received (see Table 15).

Table 15: Video Event Types

Event Type Value Description
VIDEO_FRAME_COMPLETE 1 Triggered when complete video frame is captured.

size - Size of video data buffer.

sfvideoData - Video data buffer.

pScannerData - Reserved parameter: always returns an empty string.

BarcodeEvent

Triggered when a scanner captures barcodes. To receive BarcodeEvents, an application needs to execute the REGISTER_FOR_EVENTS method with the SUBSCRIBE_BARCODE event type.

Syntax

C# C++

void OnBarcodeEvent(
    short eventType,
    ref string pscanData)


void OnBarcodeEvent(
    SHORT eventType,
    BSTR pscanData )


Parameters

eventType - Type of video event received (see Table 16).

Table 16: Barcode Event Types

Event Type Value Description
SCANNER_DECODE_GOOD 1 Triggered when a decode is successful.

pscanData - Barcode string that contains information about the scanner that triggered the barcode event including data type, data label and raw data of the scanned barcode.


<?xml version="1.0" encoding="UTF-8"?>
<outArgs>
    <scannerID>1</scannerID>
    <arg-xml>
        <scandata>
            <modelnumber>DS6707-SR20001ZZR</modelnumber>
            <serialnumber>7114000503322</serialnumber>
            <GUID>33C01F39EB23D949B5F3DBF643304FC4</GUID>
            <datatype>8</datatype>
            <datalabel>0x30 0x32 0x31 0x38 0x39 0x38 0x36 0x32</datalabel>
            <rawdata>0x30 0x32 0x31 0x38 0x39 0x38 0x36 0x32</rawdata>
        </scandata>
    </arg-xml>
</outArgs>

The value of the <datatype> in the XML above indicates the barcode type of the scanned barcode.

Table 17 lists the values received in IBM Hand-Held USB, SNAPI and Wincor-Nixdorf RS-232 Mode B communication protocols for each supported barcode type.

Table 17: Barcode Data Types

Barcode Data Types Communication Protocol
SNAPI IBM Hand-Held NIXDORF Mode B
Code 39 1 1 1
Codabar 2 2 2
Code 128 3 3 3
Discrete (Standard) 2 of 5 4 4 4
IATA 5 N/A 4
Interleaved 2 of 5 6 6 6
Code 93 7 7 7
UPC-A 8 8 8
UPC-E0 9 9 9
EAN-8 10 10 10
EAN-13 11 11 8
Code 11 12 N/A N/A
Code 49 13 13 N/A
MSI 14 N/A 14
EAN-128 15 15 15
UPC-E1 16 N/A N/A
PDF-417 17 17 17
Code 16K 18 N/A N/A
Code 39 Full ASCII 19 N/A N/A
UPC-D 20 N/A N/A
Code 39 Trioptic 21 N/A N/A
Bookland 22 N/A 8
Coupon Code 23 N/A N/A
NW-7 24 N/A N/A
ISBT-128 25 N/A N/A
Micro PDF 26 N/A 26
DataMatrix 27 27 27
QR Code 28 28 28
Micro PDF CCA 29 N/A N/A
PostNet US 30 N/A N/A
Planet Code 31 N/A N/A
Code 32 32 N/A N/A
ISBT-128 Con 33 N/A N/A
Japan Postal 34 N/A N/A
Australian Postal 35 N/A N/A
Dutch Postal 36 N/A N/A
MaxiCode 37 37 37
Canadian Postal 38 N/A N/A
UK Postal 39 N/A N/A
Macro PDF N/A N/A
Micro QR code 44 44 28
Aztec 45 45 45
GS1 Databar (RSS-14) 48 48 48
RSS Limited 49 49 49
GS1 Databar Expanded (RSS Expanded) 50 50 50
Scanlet 55 N/A N/A
UPC-A + 2 Supplemental 72 72 N/A
UPC-E0 + 2 Supplemental 73 73 N/A
EAN-8 + 2 Supplemental 74 74 N/A
EAN-13 + 2 Supplemental 75 75 N/A
UPC-E1 + 2 Supplemental 80 N/A N/A
CCA EAN-128 81 N/A N/A
CCA EAN-13 82 N/A N/A
CCA EAN-8 83 N/A N/A
CCA RSS Expanded 84 N/A N/A
CCA RSS Limited 85 N/A N/A
CCA RSS-14 86 N/A N/A
CCA UPC-A 87 N/A N/A
CCA UPC-E 88 N/A N/A
CCC EAN-128 89 N/A N/A
TLC-39 90 N/A N/A
CCB EAN-128 97 N/A N/A
CCB EAN-13 98 N/A N/A
CCB EAN-8 99 N/A N/A
CCB RSS Expanded 100 N/A N/A
CCB RSS Limited 101 N/A N/A
CCB RSS-14 102 N/A N/A
CCB UPC-A 103 N/A N/A
CCB UPC-E 104 N/A N/A
Signature Capture 105 N/A N/A
Matrix 2 of 5 113 N/A N/A
Chinese 2 of 5 114 N/A N/A
UPC-A + 5 Supplemental 136 136 N/A
UPC-E0 + 5 Supplemental 137 137 N/A
EAN-8 + 5 Supplemental 138 138 N/A
EAN-13 + 5 Supplemental 139 139 N/A
UPC-E1 + 5 Supplemental 144 N/A N/A

NOTE A barcode data type marked as N/A is unsupported by that communication protocol. The SDK typically returns a value of 0 for these barcode data types. However, in some cases the SDK may identify these symbologies as a related data type. For example, UPC-A + 2 Supplemental is not a supported symbology in Nixdorf Mode B but the SDK identifies it as UPC-A.

PNPEvent

Triggered when a scanner of a requested type attaches to the system or detaches from the system. The pairing of a Bluetooth scanner to a cradle does not trigger a PnP event. To receive information about a newly paired device, the GetScanners command must be called again. To receive PnPEvents, an application needs to execute the REGISTER_FOR_EVENTS method with the SUBSCRIBE_PNP event type.

Syntax

C# C++

void OnPNPEvent(
    short eventType,
    ref string ppnpData)


void OnPNPEvent(
    SHORT eventType, 
    BSTR ppnpData)


Parameters

eventType - Type of PnP event received (see Table 18).

Table 18: PNP Event Types

Event Type Value Description
SCANNER_ATTACHED 0 Triggered when a Zebra Scanner is attached.
SCANNER_DETACHED 1 Triggered when a Zebra Scanner is detached.

ppnpData - PnP information string containing the asset tracking information of the attached or detached device.

Samples

Sample ppnpData XML for attachment of a direct scanner.


<?xml version="1.0" encoding="UTF-8"?>
<outArgs>
    <arg-xml>
        <scanners>
            <scanner type="SNAPI">
                <scannerID>1</scannerID>
                <modelnumber>DS9808-SR00007C1WR</modelnumber>
                <serialnumber>1026300507698  </serialnumber>
                <GUID>77E48FC31C75444B90BE318FECFAE867</GUID>
            </scanner>
        </scanners>
        <status>1</status>
    </arg-xml>
</outArgs>

Sample ppnpData XML for attachment of a cascaded scanner. This XML can be received as a PnP event after a GetScanners command, if there are devices newly paired to a Bluetooth cradle.


<?xml version="1.0" encoding="UTF-8"?>
<outArgs>
    <arg-xml> 
        <scanners>
            <scanner type="USBIBMHID">
                <scannerID>1</scannerID> <!-- Information about Bluetooth Cradle -->
                <modelnumber>CR0078-SC10007WR </modelnumber>
                <serialnumber>1020800512980  </serialnumber>
                <GUID>3665579766A9514DAAF523D35E051674</GUID> 
                <pnp>0</pnp>
                <scanner type="USBIBMHID">
                    <scannerID>2</scannerID> <!-- Information about Bluetooth Scanner -->
                    <modelnumber>DS6878-SR20007WR </modelnumber>
                    <serialnumber>M1M87R38Y      </serialnumber>
                    <GUID></GUID>
                    <pnp>1</pnp>
                </scanner>
            </scanner>
        </scanners>
        <status>1</status>
    </arg-xml>
</outArgs>

ScanRMDEvent

Receives RMD Events when updating firmware of the scanner. To receive RMD Events, an application needs to execute the REGISTER_FOR_EVENTS method with the SUBSCRIBE_RMD event type.

Syntax

C# C++

void OnScanRMDEvent(
    short eventType,
    ref string prmdData)


void OnScanRMDEvent(
    SHORT eventType,
    BSTR prmdData)


Parameters

eventType - Type of the RMD event received (see Table 19).

prmdData - ScanRMD information string containing the data of event. (See Firmware Upgrade Scenarios for more details on this string.)

Table 19: RMD Event Types

Event Type Value Description
SCANNER_UF_SESS_START 11 Triggered when flash download session starts.
SCANNER_UF_DL_START 12 Triggered when component download starts.
SCANNER_UF_DL_PROGRESS 13 Triggered when block(s) of flash completed.
SCANNER_UF_DL_END 14 Triggered when component download ends.
SCANNER_UF_SESS_END 15 Triggered when flash download session ends.
SCANNER_UF_STATUS 16 Triggered when update error or status.
SCANNER_UC_SESS_START 17 Triggered when configuration push starts.
SCANNER_UC_PROGRESS 18 Triggered to indicate the current progress of the configuration push.
SCANNER_UC_SESS_END 19 Triggered when configuration push session ends.

CommandResponseEvent

Received after an asynchronous command execution (ExecCommandAsync). To receive CommandResponseEvents, an application needs to execute the REGISTER_FOR_EVENTS method with the SUBSCRIBE_OTHER event type.

Syntax

C# C++

void OnCommandResponseEvent(
    short status,
    ref string prspData)


void OnScanRMDEvent(
    SHORT status,
    BSTR prspData)


Parameters

status - Status of the executed command. (See Error and Status Codes on Appendix.)

prspData - CommandResponse information string that contains the outXML of the executed command.

IOEvent

Received when an exclusively claimed device is accessed by another client application. To receive IOEvents, an application needs to execute the REGISTER_FOR_EVENTS method with the SUBSCRIBE_OTHER event type. Standard practice is that an application handles these IO Events once it has claimed a scanner. While that application has the scanner claimed, other applications get STATUS_LOCKED when they try to execute commands directed toward the claimed scanner.

Syntax

C# C++

void OnIOEvent(
    short type,
    byte data)


void OnIOEvent(
    short type,
    BYTE data)


Parameters

type - Reserved parameter.

data - Reserved parameter.

ScannerNotificationEvent

Received when a SNAPI scanner changes its operational mode. To receive ScannerNotificationEvents, an application needs to execute the REGISTER_FOR_EVENTS method with the SUBSCRIBE_OTHER event type.

Syntax

C# C++

void OnScannerNotification(
    short notificationType,
    ref string pScannerData)


void OnScannerNotification(
    short notificationType,
    BSTR pScannerData)


Parameters

notificationType - Type of the notification event received (see Table 20).

pScannerData - Information about the scanner (ID, Model Number, Serial Number. GUID) and notification data (if any) that triggered the notification event.

Table 20: Notification Event Types

Event Type Value Description
DECODE_MODE 1 Triggered when a scanner changes its operation mode to decode.
SNAPSHOT_MODE 2 Triggered when a scanner changes its operation mode to image mode.
VIDEO_MODE 3 Triggered when a scanner changes its operation mode to video mode.
DEVICE_ENABLED 13 Triggered when the scanner is enabled.
DEVICE_DISABLED 14 Triggered when the scanner is disabled.
RTA_EVENT 2000 Triggered when RTA event is received.

RTA Events

How to recive Real Time Alerts events

For more information, please refer to Real Time Alerts (RTA).

BinaryDataEvent

Triggered when an IDC-supported imaging scanner captures an image in Intelligent Document Capture (IDC) or Signature Capture mode. To receive a BinaryDataEvent, an application needs to execute the REGISTER_FOR_EVENT method with the SUBSCRIBE_IMAGE event type.

Syntax

C# C++

void On_BinaryDataEvent(
    short eventType,
    int size,
    short dataFormat,
    ref object sfBinaryData, ref string pScannerData)


void OnBinaryDataEvent(
    SHORT eventType,
    LONG size,
    SHORT dataFormat,
    VARIANT * sfBinaryData, BSTR* pScannerData)


Parameters

eventType - Reserved.

size - Size of the BinaryData data buffer.

dataFormat - The format of the Binary DataEvent (see Table 21).

Table 21: Binary Data Event Types (Data Format)

Date Format Description
0xB5 IDC Format
0x69 Signature Capture Format

sfBinaryData - IDC/Signature Capture data buffer.

pScannerData - Information in XML format about the scanner (ID, Model Number, Serial Number, and GUID) that triggered the BinaryDataEvent.


<?xml version="1.0" encoding="UTF-8"?>
<outArgs>
    <scannerID>1</scannerID>
    <arg-xml>
        <modelnumber>DS6707-DC20007ZZR </modelnumber>
        <serialnumber>1222800502597  </serialnumber>
        <GUID>28B8BF91FB7F3A459CFF63BAEFDC767B</GUID>
        <channel>usb_BULK</channel>
    </arg-xml>
</outArgs>                                                            

NOTED The <channel> tag in the XML above refers to the USB channel which the scanner uses to send the Binary data. This can be usb_BULK or usb_HID.

Both Intelligent Document Capture (IDC) and Signature Capture data are presented with the BinaryDataEvent. This event is fired by the CoreScanner service when this binary capture data is available. A client application has to register for image events using the RegisterForEvents opcode in order to receive BinaryDataEvents from the CoreScanner driver. The image data payload of a BinaryDataEvent is passed through the VARIANT type argument sfBinaryData. The event type captured, IDC or Signature, is specified with the dataFormat parameter of the event handler function. Document Capture data is formatted according to the ISO15434 Specification (see Description of Intelligent Document Capture Format for details). Signature Capture data is formatted with the Zebra standard image format (refer to Signature Capture in the Appendix of Product Reference Guide for the image scanner in use).

Using the Methods (Examples)

NOTE The inXML segments that follow are only examples. The inXML strings must be customized by the programmer based on each user's requirements.
GET_VERSION (Value 1000)
Description Gets the version of CoreScanner Driver
Asynchronous supported No
Supported Scanner Communication Protocols N/A
InXml

<inArgs></inArgs>

OutXml

Version of the CoreScanner.


<?xml version="1.0" encoding="UTF-8"?>
<outArgs>
    <arg-xml>
        <arg-string>01.00.00</arg-string>
    </arg-xml>
</outArgs> 

REGISTER_FOR_EVENTS (Value 1001)
Description Register for API events described API Events above.
Asynchronous supported No
Supported Scanner Communication Protocols N/A
InXml

<inArgs>
    <cmdArgs>
        <arg-int>6</arg-int> <!-- Number of Events -->
        <arg-int>1,2,4,8,16,32</arg-int> <!-- Event ID(s) -->
    </cmdArgs>
</inArgs>

Table 22 lists the Event IDs for the inXML code above.

Table 22: Event IDs

Event Name Event ID
SUBSCRIBE_BARCODE 1
SUBSCRIBE_IMAGE 2
SUBSCRIBE_VIDEO 4
SUBSCRIBE_RMD 8
SUBSCRIBE_PNP 16
SUBSCRIBE_OTHER 32
OutXml

null

UNREGISTER_FOR_EVENTS (Value 1002)
Description Register for API events described API Events above.
Asynchronous supported No
Supported Scanner Communication Protocols N/A
InXml

<inArgs>
    <cmdArgs>
        <arg-int>6</arg-int> <!-- Number of Events --> 
        <arg-int>1,2,4,8,16,32</arg-int> <!-- Event ID(s) -->
    </cmdArgs>
</inArgs>

OutXml

null

CLAIM_DEVICE (Value 1500)
Description Claim a specified device.
Asynchronous supported No
Supported Scanner Communication Protocols N/A
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

RELEASE_DEVICE (Value 1501)
Description Release a specified device.
Asynchronous supported No
Supported Scanner Communication Protocols N/A
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

ABORT_MACROPDF (Value 2000)
Description Abort MacroPDF of a specified scanner.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

ABORT_UPDATE_FIRMWARE (Value 2001)
Description Abort Firmware updates process of a specified scanner while it is progressing.
Asynchronous supported No
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

WARNING! If the scanners firmware is not backup protected, issuing this command during a firmware update may cause a corruption leaving the scanner inoperable. For models that are backup protected refer to the Scanner SDK for Windows website at: www.zebra.com/scannersdkforwindows.
AIM_OFF (Value 2002)
Description Turn off the aiming of a specified scanner.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

AIM_ON (Value 2003)
Description Turn on the aiming of a specified scanner.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

FLUSH_MACROPDF (Value 2005)
Description Flush MacroPDF of a specified scanner.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

DEVICE_PULL_TRIGGER (Value 2011)
Description Pull the trigger of a specified scanner.
Asynchronous supported N/A
Supported Scanner Communication Protocols SNAPI, IBM Hand-held*, IBM Table-top*, SSI*

* Supported auxiliary scanners if the firmware supports.

InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

DEVICE_RELEASE_TRIGGER (Value 2012)
Description Release the pulled trigger of a specified scanner.
Asynchronous supported N/A
Supported Scanner Communication Protocols SNAPI, IBM Hand-held*, IBM Table-top*, SSI*

* Supported auxiliary scanners if the firmware supports.

InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

SCAN_DISABLE (Value 2013)
Description Disable scanning on a specified scanner
Asynchronous supported N/A
Supported Scanner Communication Protocols SNAPI, IBM Hand-held, IBM Table-top, Nixdorf Mode B, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

SCAN_ENABLE (Value 2014)
Description Enable scanning on a specified scanner
Asynchronous supported N/A
Supported Scanner Communication Protocols SNAPI, IBM Hand-held, IBM Table-top, Nixdorf Mode B, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

SET_PARAMETER_DEFAULTS (Value 2015)
Description Set parameters to default values of a specified scanner.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

DEVICE_SET_PARAMETERS (Value 2016)
Description Set parameter(s) of a specified scanner temporarily. Parameters set using this command are lost after the next power down.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID -->
    <cmdArgs>
        <arg-xml>
            <attrib_list>
                <attribute>
                    <id>145</id> <!-- Attribute Number -->
                    <datatype>B</datatype> <!-- Attribute Type -->
                    <value>0</value> <!-- Attribute Value -->
                </attribute>
            </attrib_list>
        </arg-xml>
    </cmdArgs>
</inArgs>

OutXml

null

NOTE Refer to the pertinent scanner's Product Reference Guide for supported attribute numbers, types, and possible values.
SET_PARAMETER_PERSISTANCE (Value 2017)
Description Set parameter(s) of a specified scanner persistently. Parameters set using this command are persistent over power down and power up cycles.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID -->
    <cmdArgs>
        <arg-xml>
            <attrib_list>
                <attribute>
                    <id>145</id> <!-- Attribute Number -->
                    <datatype>B</datatype> <!-- Attribute Type -->
                    <value>0</value> <!-- Attribute Value -->
                </attribute>
            </attrib_list>
        </arg-xml>
    </cmdArgs>
</inArgs>

OutXml

null

REBOOT_SCANNER (Value 2019)
Description Reboot a specified scanner. Direct execution of this command on a Bluetooth scanner does not result in a reboot. This command needs to be sent to the scanner's associated cradle to reboot the Bluetooth scanner.
Asynchronous supported N/A
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

DEVICE_CAPTURE_IMAGE (Value 3000)
Description Change a specified scanner to snapshot mode. While in this mode, an imaging scanner blinks the green LED at one second intervals to indicate it is not in standard operating (decode) mode. The scanner comes to its standard operating mode after a trigger pull or the snapshot time out is exceeded. After a trigger pull, the CoreScanner driver triggers an ImageEvent containing the captured image.
Asynchronous supported N/A
Supported Scanner Communication Protocols SNAPI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

DEVICE_CAPTURE_BARCODE (Value 3500)
Description Change a specified scanner to decode mode.
Asynchronous supported N/A
Supported Scanner Communication Protocols SNAPI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

DEVICE_CAPTURE_VIDEO (Value 4000)
Description Change a specified scanner to video mode. In this mode, the imaging scanner behaves as a video camera as long as the trigger is pulled. When the trigger is released, the scanner returns to Decode Mode. As long as the trigger is pulled, the CoreScanner driver triggers VideoEvents that contain the video data.
Asynchronous supported N/A
Supported Scanner Communication Protocols SNAPI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

ATTR_GETALL (Value 5000)
Description Get all the attributes of a specified scanner. A synchronous call of this method returns an outXML like the example below. An asynchronous call of this event triggers a CommandResponseEvent.
Asynchronous supported Yes
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

<?xml version="1.0" encoding="UTF-8" ?>
<outArgs>
    <scannerID>1</scannerID> <!-- Scanner ID of Data Receiving -->
    <arg-xml>
        <modelnumber>DS6700-SR20001ZZR</modelnumber>
        <serialnumber>7116000501003</serialnumber>
        <GUID>A2E647DED2163545B18BCEBD0A2A133D</GUID> <!-- Asset Tracking Information of the Scanner -->
        <response>
            <opcode>5000</opcode> <!-- Method Response Received -->
            <attrib_list>
                <attribute name="">0</attribute> <!-- Attribute Numbers -->
                <attribute name="">1</attribute>
                <attribute name="">2</attribute>
                <attribute name="">3</attribute>
                <attribute name="">4</attribute>
                <attribute name="">5</attribute>
                <attribute name="">6</attribute>
                <attribute name="">7</attribute>
                <attribute name="">8</attribute>
                <attribute name="">9</attribute>
                <attribute name="">10</attribute>
                <attribute name="">11</attribute>
                <attribute name="">12</attribute>
                <attribute name="">13</attribute>
                <attribute name="">14</attribute>
                <attribute name="">15</attribute>
                <attribute name="">16</attribute>
                <attribute name="">17</attribute>
                <attribute name="">18</attribute>
                <attribute name="">19</attribute>
                <attribute name="">20</attribute>
                <attribute name="">21</attribute>
                <attribute name="">22</attribute>
                <attribute name="">23</attribute>
                <attribute name="">24</attribute>
                <attribute name="">25</attribute>
                <attribute name="">26</attribute>
                <attribute name="">27</attribute>
                <attribute name="">28</attribute>
                <attribute name="">29</attribute>
                <attribute name="">30</attribute>
                <attribute name="">31</attribute>
                <attribute name="">34</attribute>
                <attribute name="">35</attribute>
                <attribute name="">36</attribute>
                <attribute name="">37</attribute>
                <attribute name="">38</attribute>
                <attribute name="">39</attribute>
                <attribute name="">655</attribute>
                <attribute name="">656</attribute>
                <attribute name="">657</attribute>
                <attribute name="">658</attribute>
                <attribute name="">659</attribute>
                <attribute name="">665</attribute>
                <attribute name="">670</attribute>
                <attribute name="">672</attribute>
                <attribute name="">673</attribute>
                <attribute name="">705</attribute>
                <attribute name="">716</attribute>
                <attribute name="">718</attribute>
                <attribute name="">721</attribute>
                <attribute name="">724</attribute>
                <attribute name="">726</attribute>
                <attribute name="">727</attribute>
                <attribute name="">728</attribute>
                <attribute name="">730</attribute>
                <attribute name="">731</attribute>
                <attribute name="">734</attribute>
                <attribute name="">735</attribute>
                <attribute name="">745</attribute>
                <attribute name="">6000</attribute>
                <attribute name="">6001</attribute>
                <attribute name="">6002</attribute>
                <attribute name="">6003</attribute>
                <attribute name="">6004</attribute>
                <attribute name="">20004</attribute>
                <attribute name="">20006</attribute>
                <attribute name="">20007</attribute>
                <attribute name="">20008</attribute>
                <attribute name="">20009</attribute>
                <attribute name="">20010</attribute>
                <attribute name="">20011</attribute>
                <attribute name="">20013</attribute>
            </attrib_list>
        </response>
    </arg-xml>
</outArgs>

NOTE Refer to the pertinent scanner's Product Reference Guide for supported attribute numbers, types, and possible values.
ATTR_GET (Value 5001)
Description Query the values of attribute(s) of a specified scanner. An synchronous call of this method returns outXML like the example below. An asynchronous call of this event triggers a CommandResponseEvent.
Asynchronous supported Yes
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID -->
    <cmdArgs>
        <arg-xml>
            <attrib_list>535,20004,1,140,392</attrib_list> <!-- Required Attribute Numbers -->
        </arg-xml>
    </cmdArgs>
</inArgs>        

OutXml

<?xml version="1.0" encoding="UTF-8" ?>
<outArgs>
    <scannerID>1</scannerID> <!-- Scanner ID of Data Receiving -->
    <arg-xml>
        <modelnumber>DS670-SR20001ZZR</modelnumber>
        <serialnumber>7116000501003</serialnumber>
        <GUID>A2E647DED2163545B18BCEBD0A2A133D</GUID> <!-- Asset Tracking Information of the Scanner -->
        <response>
            <opcode>5001</opcode> <!-- Method Response Received  -->
            <attrib_list>
                <attribute>
                    <id>535</id> <!-- Attribute Number -->
                    <name></name> <!-- Attribute Name -->
                    <datatype>S</datatype> <!-- Attribute Data Type -->
                    <permission>R</permission> <!-- Permissions of the Attribute -->
                    <value>27APR07</value> <!-- Attribute Value -->
                </attribute>
                <attribute>
                    <id>20004</id>
                    <name></name>
                    <datatype>S</datatype>
                    <permission>R</permission>
                    <value>DS6707X4</value>
                </attribute>
                <attribute>
                    <id>1</id>
                    <name></name>
                    <datatype>F</datatype>
                    <permission>RWP</permission>
                    <value>True</value>
                </attribute>
                <attribute>
                    <id>140</id>
                    <name></name>
                    <datatype>B</datatype>
                    <permission>RWP</permission>
                    <value>0</value>
                </attribute>
                <attribute>
                    <id>392</id>
                    <name></name>
                    <datatype>A</datatype>
                    <permission>RWP</permission>
                    <value>0x01 0x00 0x58 0x55 0x41 0x00 0x0b 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00</value>
                </attribute>
            </attrib_list>
        </response>
    </arg-xml>
</outArgs>

ATTR_GETNEXT (Value 5002)
Description Query the value of the next attribute to a given attribute of a specified scanner. A synchronous call of this method returns an outXML like the example below. An asynchronous call of this event triggers a CommandResponseEvent.
Asynchronous supported Yes
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID -->
    <cmdArgs>
        <arg-xml>
            <attrib_list>14</attrib_list> <!-- Attribute Numbers -->
        </arg-xml>
    </cmdArgs>
</inArgs>        

OutXml

<?xml version="1.0" encoding="UTF-8"?>
<outArgs>
    <scannerID>1</scannerID> <!-- Scanner ID of Data Receiving  -->
    <arg-xml>
        <modelnumber>DS670-SR20001ZZR</modelnumber>
        <serialnumber>7116000501003</serialnumber>
        <GUID>A2E647DED2163545B18BCEBD0A2A133D</GUID> <!-- Asset Tracking Information of the Scanner -->
        <response>
            <opcode>5002</opcode> <!-- Method Response Received -->
            <attrib_list>
                <attribute> 
                    <id>15</id>
                    <name></name>
                    <datatype>F</datatype>
                    <permission>RWP</permission>
                    <value>True</value>
                </attribute>
            </attrib_list>
        </response>
    </arg-xml>
</outArgs>

NOTE If the next available attribute is not readable (for example, an Action attribute), this command returns the next available readable attribute value.
ATTR_SET (Value 5004)
Description Set the values of attribute(s) of a specified scanner. Attribute(s) set using this command are lost after the next power down.
Asynchronous supported Yes
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID -->
    <cmdArgs>
        <arg-xml>
            <attrib_list>
                <attribute>
                    <id>1</id> <!-- Attribute Number -->
                    <datatype>F</datatype> <!-- Attribute Data Type -->
                    <value>False</value> <!-- Attribute Value -->
                </attribute>
            </attrib_list>
        </arg-xml>
    </cmdArgs>
</inArgs>

OutXml

null

ATTR_STORE (Value 5005)
Description Store the values of attribute(s) of a specified scanner. Attribute(s) store using this command are persistent over power down and power up cycles.
Asynchronous supported Yes
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID -->
    <cmdArgs>
        <arg-xml>
            <attrib_list>
                <attribute>
                    <id>1</id> <!-- Attribute Number -->
                    <datatype>F</datatype> <!-- Attribute Data Type -->
                    <value>False</value> <!-- Attribute Value -->
                </attribute>
            </attrib_list>
        </arg-xml>
    </cmdArgs>
</inArgs>

OutXml

null

GET_DEVICE_TOPOLOGY (Value 5006)
Description Get the topology of devices that are connected to the calling system.
Asynchronous supported No
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs></inArgs>

OutXml

<?xml version="1.0" encoding="UTF-8"?>
<outArgs>
    <arg-xml>
        <scanners>
            <scanner type="SNAPI"> <!-- Scanner Type -->
                <scannerID>1</scannerID>
                <modelnumber>DS670-SR20001ZZR</modelnumber>
                <serialnumber>7116000501003</serialnumber>
                <GUID>A2E647DED2163545B18BCEBD0A2A133D</GUID>
                <VID>1504</VID>
                <PID>6400</PID>
                <DoM>24MAR10</DoM>
                <firmware>NBRPUAAM</firmware>
            </scanner>
            <scanner type="USBIBMHID">
                <scannerID>2</scannerID>
                <modelnumber>CR0078-SC10007WR</modelnumber> <!-- Asset Tracking Information of the Scanner -->
                <serialnumber>MXA4WD88</serialnumber>
                <GUID>993DF345C3B00E408E8160116AE9A319</GUID>
                <VID>1504</VID>
                <PID>2080</PID>
                <DoM>24MAR10</DoM>
                <firmware>NBCACAK7</firmware>
                <scanner type="USBIBMHID">
                    <scannerID>3</scannerID> <!-- Cascaded Scanner -->
                    <serialnumber>M1M87R39H</serialnumber>
                    <modelnumber>DS6878-SR20007WR</modelnumber>
                    <DoM>08OCT10</DoM>
                    <firmware>PAAAJS00-002-N25</firmware>
                </scanner>
            </scanner>
        </scanners>
    </arg-xml>
</outArgs>

START_NEW_FIRMWARE (Value 5014)
Description Start the updated firmware. This causes a reboot of the specified scanner.
Asynchronous supported N/A
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID -->
</inArgs>        

OutXml

null

UPDATE_FIRMWARE (Value 5016)
Description Update the firmware of the specified scanner. A user can specify the bulk firmware update option for faster firmware download in SNAPI mode. If an application registered for ScanRMDEvents.
Asynchronous supported N/A
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID -->
    <cmdArgs>
        <arg-string>D:\ScannerFW\DS6707\NBRPUCAM.DAT</arg-string> <!-- Path to the DAT File -->
        <arg-int>2</arg-int>
    </cmdArgs>
</inArgs>

OutXml

null

UPDATE_FIRMWARE_FROM_PLUGIN (Value 5017)
Description Update the firmware of the specified scanner using a scanner plug-in. A user can specify the bulk firmware update option for faster firmware download in SNAPI mode. If an application registered for ScanRMDEvents, it receives ScanRMDEvents.
Asynchronous supported N/A
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID -->
    <cmdArgs>
        <arg-string>D:\ScannerFW\DS9808\DS9808-COMMON SR MODELS-S-018.SCNPLG</arg-string> <!-- Path to the Plug-in File -->
        <arg-int>2</arg-int> <!-- Bulk Update Option-->
    </cmdArgs> 
</inArgs> 

NOTE The UPDATE_FIRMWARE_FROM_PLUGIN command does not verify the supported scanner models of the plug-in. It attempts the firmware update with the DAT file extracted from the specified plug-in file regardless of model.
OutXml

null

LOAD_SCANNER_CONFIGURATION (Value 5020)
Description Load the configuration to the selected scanner using a scanner configuration file cerated by using the 123Scan Configuration Utility.
Asynchronous supported N/A
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID>
    <cmdArgs>
        <arg-string>C:\Config File_MP7200.scncfg</arg-string>
    </cmdArgs>
</inArgs>

OutXml

Configuration load session start. <maxcount> tag list the number of attributes.


<outArgs>
  <scannerID>1</scannerID>
  <arg-xml>
    <uc_sess_start>
      <modelnumber>SP7208-SV00004CCWW</modelnumber>
      <serialnumber>23315523070177</serialnumber>
      <maxcount>333</maxcount>
      <status>0</status>
    </uc_sess_start>
  </arg-xml>
</outArgs>

Configuration load progress updata. <progress> tag notify the progress count.


<outArgs>
  <scannerID>1</scannerID>
  <arg-xml>
    <uc_progress>
      <modelnumber>SP7208-SV00004CCWW</modelnumber>
      <serialnumber>23315523070177  </serialnumber>
      <progress>33</progress>
      <status>0</status>
    </uc_progress>
  </arg-xml>
</outArgs>

Configuration load completion.


<outArgs>
  <scannerID>1</scannerID>
  <arg-xml>
    <uc_sess_end>
      <modelnumber>SP7208-SV00004CCWW</modelnumber>
      <serialnumber>23315523070177  </serialnumber>
      <status>0</status>
    </uc_sess_end>
  </arg-xml>
</outArgs>

UPDATE_DECODE_TONE (Value 5050)
Description Update good scan tone of the scanner with the specified WAV file.
Asynchronous supported N/A
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID -->
    <cmdArgs>
        <arg-string> C:\WavFiles\tone16Khz16bit.wav</arg-string> <!-- Path to WAV File -->
    </cmdArgs> 
</inArgs>

OutXml

null

ERASE_DECODE_TONE (Value 5051)
Description Erase the good scan tone of the scanner.
Asynchronous supported N/A
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID  -->
</inArgs>

OutXml

null

GET_SUPPORTED_RTA_EVENTS (Value 5500)
Description Gets RTA events supported by the device.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI, USBOPOS, IBM Handheld, IBM Table-top
InXml

<inArgs>
    <scannerID>1</scannerID>
</inArgs>    

OutXml

Supported RTA events (ID and Stat type) along with on-limit & off-limit.

NOTE: On-limit/ Off-limit with "Not set" requires the value to be set when registering and "Not applicable" doesn't require a value to be set.


<?xml version="1.0" encoding="UTF-8"?>
<outArgs>
    <scannerID>1</scannerID>
    <arg-xml>
        <modelnumber>CR8178-PCM00FBWW</modelnumber>
        <serialnumber>23117010558099</serialnumber>
        <GUID>B2887932D8F09D40880BFAE7AD61A8BA</GUID>
        <configname>Modified</configname>
        <response>
            <opcode>5500</opcode>
            <rtaevent_list>
                <rtaevent>
                    <id>38004</id>
                    <stat>7</stat>
                    <onlimit>Not set</onlimit>
                    <offlimit>Not applicable</offlimit>
                </rtaevent>
                <rtaevent>
                    <id>38001</id>
                    <stat>7</stat>
                    <onlimit>Not set</onlimit>
                    <offlimit>Not applicable</offlimit>
                </rtaevent>
                <rtaevent>
                    <id>38003</id>
                    <stat>13</stat>
                    <onlimit>Not applicable</onlimit>
                    <offlimit>Not applicable</offlimit>
                </rtaevent>
                <rtaevent>
                    <id>616</id>
                    <stat>2</stat>
                    <onlimit>Not applicable</onlimit>
                    <offlimit>Not applicable</offlimit>
                </rtaevent>
            </rtaevent_list>
        </response>
    </arg-xml>
</outArgs>

UNREGISTER_RTA_EVENTS (Value 5502)
Description Unregister for selected RTA events using RTA event ID and type.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI, USBOPOS, IBM Handheld, IBM Table-top
InXml

<inArgs>
    <scannerID>1</scannerID>
    <cmdArgs>
        <arg-xml>
            <rtaevent_list>
                <rtaevent>
                    <id>38004</id>
                    <stat>7</stat>
                </rtaevent>
                <rtaevent>
                    <id>38001</id>
                    <stat>7</stat>
                </rtaevent>
            </rtaevent_list>
        </arg-xml>
    </cmdArgs>
</inArgs>

OutXml

null

GET_RTA_ALERT_STATUS (Value 5503)
Description

Retrieve the RTA event's alert status. The RTA alert status contains information on the following four statuses:

  • Registered: Whether the event is registered or not.
  • Reported: An alert associated with the event has been reported.
  • Measuring: Device has started measurement of the event.
  • Initialized: Device has initialized the event.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI, USBOPOS, IBM Handheld, IBM Table-top
InXml

<inArgs>
    <scannerID>1</scannerID>
</inArgs>    

OutXml

<outArgs>
    <scannerID>1</scannerID>
    <arg-xml>
        <modelnumber>CR8178-PC100F4WW  </modelnumber>
        <serialnumber>17034010506402  </serialnumber>
        <GUID>8835E76BE40A6C49B458BEEA0065F60E</GUID>
        <configname>Factory Default </configname>
        <response>
            <opcode>5503</opcode>
            <suspend>FALSE</suspend>
            <rtaevent_list>
                <rtaevent>
                    <id>38004</id>
                    <stat>7</stat>
                    <scope>0</scope>
                    <registered>TRUE</registered>
                    <reported>FALSE</reported>
                    <initialized>TRUE</initialized>
                    <measuring>FALSE</measuring>
                </rtaevent>
                <rtaevent>
                    <id>38001</id>
                    <stat>7</stat>
                    <scope>0</scope>
                    <registered>TRUE</registered>
                    <reported>TRUE</reported>
                    <initialized>TRUE</initialized>
                    <measuring>TRUE</measuring>
                </rtaevent>
            </rtaevent_list>
        </response>
    </arg-xml>
</outArgs>                                                                          

SET_RTA_ALERT_STATUS (Value 5504)
Description

Set RTA event's reported state.

NOTE: Only the <reported> alert status can be modified, and it can only be transitioned from true (1) to false (0). If set to any other value, the system will automatically overwrite it with 0.

Asynchronous supported No
Supported Scanner Communication Protocols SNAPI, USBOPOS, IBM Handheld, IBM Table-top
InXml

<inArgs>
    <scannerID>1</scannerID>
    <cmdArgs>
        <arg-xml>
            <rtaevent_list>
                <rtaevent>
                    <id>38004</id>
                    <stat>7</stat>
                    <reported>0</reported>
                </rtaevent>
                <rtaevent>
                    <id>616</id>
                    <stat>2</stat>
                    <reported>0</reported>
                </rtaevent>
            </rtaevent_list>
        </arg-xml>
    </cmdArgs>
</inArgs>

OutXml

null

RTA_SUSPEND (Value 5505)
Description Toggle RTA alert notification reporting to the host.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI, USBOPOS, IBM Handheld, IBM Table-top
InXml

<inArgs>
    <scannerID>1</scannerID>
    <cmdArgs>
        <arg-bool>false</arg-bool> <!--"true" will enable RTA suspend, "false" will disable RTA suspend -->
    </cmdArgs>
</inArgs>      

OutXml

null

RTA_STATE (Value 5506)
Description

Retrieve the current operational state of RTAs. State will have 4 values as follows.

State Name Value Description
Wait For Register 1 There are currently no alerts registered by the User.
Wait for Context 2 The scanner has not yet been assigned a Context Address for reporting.
Online 3 The Real Time Alerts feature is fully operational.
Suspend 0 The Real Time Alerts were suspended automatically or by the RTA_Suspend command.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI, USBOPOS, IBM Handheld, IBM Table-top
InXml

<inArgs>
    <scannerID>1</scannerID>
</inArgs>      

OutXml

<outArgs>
    <scannerID>1</scannerID>
    <arg-xml>
        <modelnumber>CR8178-PC100F4WW  </modelnumber>
        <serialnumber>17034010506402  </serialnumber>
        <GUID>8835E76BE40A6C49B458BEEA0065F60E</GUID>
        <configname>Factory Default </configname>
        <response>
            <opcode>5506</opcode>
            <state>0</state>
        </response>
    </arg-xml>
</outArgs>                                                                          

SET_ACTION (Value 6000)
Description Perform an action involving the scanner's beeper or LEDs. Values for the SET_ACTION method are available in Action Attributes and Values
Asynchronous supported N/A
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, SSI
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID -->
    <cmdArgs>
        <arg-int>0</arg-int> <!-- Scanner Action Commands -->
    </cmdArgs>
</inArgs>

OutXml

null

DEVICE_SET_SERIAL_PORT_SETTINGS (Value 6101)
Description Set the serial port settings of a NIXDORF Mode B Scanner.
Asynchronous supported N/A
Supported Scanner Communication Protocols N/A
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID -->
    <cmdArgs>
        <arg-int>5</arg-int> <!-- Number of Parameters -->
        <arg-int>9600,8,0,0,1</arg-int> <!-- Serial Port Settings -->
    </cmdArgs>
</inArgs>

OutXml

null

DEVICE_SWITCH_HOST_MODE (Value 6200)
Description Switch the USB host mode of a specified scanner. This operation causes a reboot of the device as a result of the host mode switch. When the specified scanner is in HID Keyboard mode, the only supported target host variants are IBM Hand-held, IBM Table-top, SNAPI, and SSI. A user can configure the switching host mode as a silent switch (suppressing the typical device reboot beeps) and keep the targeted host mode as the permanent host mode of the device by setting those parameters in the inXML string. Direct execution of this command on a Bluetooth scanner does not result in a host mode switch. This command needs to be sent to the scanner's associated cradle to switch the host mode of the Bluetooth scanner.
Asynchronous supported N/A
Supported Scanner Communication Protocols IBM Hand-held, IBM Table-top, SNAPI, HID Keyboard.
InXml

<inArgs>
    <scannerID>1</scannerID> <!-- Specified Scanner ID -->
    <cmdArgs>
        <arg-string>XUA-45001-1</arg-string> <!-- String Code for Target Host Variant -->
        <arg-bool>TRUE</arg-bool> <!-- Silent Switch Option -->
        <arg-bool>FALSE</arg-bool> <!-- Permanent Change Option -->
    </cmdArgs>
</inArgs>

Table 23 lists the string codes for USB host variants.

Table 23: USB Host Variants

Host Variant String Code
USB-IBMHID XUA-45001-1
USB-IBMTT XUA-45001-2
USB-HIDKB XUA-45001-3
USB-OPOS XUA-45001-8
USB-SNAPI with Imaging XUA-45001-9
USB-SNAPI without Imaging XUA-45001-10
USB-CDC Serial Emulation (see note below) XUA-45001-11
USB-SSI Over CDC XUA-45001-14

NOTE USB-CDC (Communications Device Class) host mode enables Zebra barcode scanners to communicate with applications requiring legacy serial COM port emulation using a USB port. Using the Scanner SDK, you can switch the scanner into USB-CDC mode, but you cannot switch back into other modes. Please scan the Set All Defaults barcode from your scanner's Quick Start Guide to make the scanner visible to the SDK. Go to: http://www.zebra.com/support for more information about USB CDC host mode.
OutXml

null

KEYBOARD_EMULATOR_ENABLE (Value 6300)
Description This setting enables/disables the keyboard emulation mode of the connected scanners which are in IBM Hand-held, IBM Table-top, NIXDORF Mode B, SNAPI, and SSI host modes.
Asynchronous supported No
Supported Scanner Communication Protocols N/A
InXml

<inArgs>
    <cmdArgs>
        <arg-bool>TRUE</arg-bool> <!-- Keyboard Emulator State -->
    </cmdArgs>
</inArgs>

OutXml

null

NOTE Any HIDKB Emulator-related settings that are changed using the API are temporary. These settings revert to the values in the config.xml file after a restart of the CoreScanner service or a system reboot.
KEYBOARD_EMULATOR_SET_LOCALE (Value 6301)
Description Change the locale of the emulated keyboard.
Asynchronous supported No
Supported Scanner Communication Protocols N/A
InXml

<inArgs>
    <cmdArgs>
        <arg-int>1</arg-int> <!-- Keyboard Emulator Language Locale ID -->
    </cmdArgs>
</inArgs>        

Table 24 lists the Language Locale ID for the XML code above.

Table 24: Language Locale IDs

Local Value
Deafult 0 (generic keyboard, not language specific)
French 1
English 2
Italian 2

OutXml

null

KEYBOARD_EMULATOR_GET_CONFIG (Value 6302)
Description Gets the current configuration of the HID Keyboard Emulator from the config.xml file.
Asynchronous supported No
Supported Scanner Communication Protocols N/A
InXml

<inArgs></inArgs> 

OutXml

<outArgs>
    <arg-xml>
        <KeyEnumState>1</KeyEnumState> <!-- Keyboard Emulator State -->
        <KeyEnumLocale>0</KeyEnumLocale> <!-- Keyboard Emulator Language Locale ID -->
    </arg-xml>
</outArgs>        

SCALE_READ_WEIGHT (Value 7000)
Description Measure the weight on the scanner's platter and get the value.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI, IBM HID, IBM Table-top, SSI
InXml

<inArgs>
    <scannerID>1</scannerID>
</inArgs>        

OutXml

<?xml version="1.0" encoding="UTF-8"?>
<outArgs>
    <scannerID>1</scannerID>
    <arg-xml>
        <modelnumber>MP6200-LN000M010US</modelnumber>
        <serialnumber>13049010501209 </serialnumber>
        <GUID>D827BAC4979B430BB6E57747620C1978</GUID>
        <response>
            <opcode>7000</opcode>
            <weight>0.700</weight> <!-- The weight of the item in killogram or English pounds. -->
            <weight_mode>English</weight_mode> <!-- English (pounds), Metric (Kg). -->
            <status>6</status> <!-- Status of the scale. -->
            <rawdata>0x06 0x01 0x00 0x00 0x02 0xbc </rawdata> <!-- The value retrieved from RSM attribute 6017. -->
        </response>
    </arg-xml>
</outArgs>                                                                         

Table 25: Scale Status Codes Descriptions

Status Code Value Description
0 scaleNotEnabled
1 scaleNotReady
2 stableWeightOverLimit
3 stableWeightUnderZero
4 nonStableWeight
5 stableZeroWeight
6 stableNonZeroWeight

SCALE_ZERO_SCALE (Value 7002)
Description Zero the scale.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI, IBM HID, IBM Table-top, SSI
InXml

<inArgs>
    <scannerID>1</scannerID>
</inArgs>

OutXml

null

SCALE_SYSTEM_RESET (Value 7015)
Description Reset the scale.
Asynchronous supported No
Supported Scanner Communication Protocols SNAPI, IBM HID, IBM Table-top, SSI
InXml

<inArgs>
    <scannerID>1</scannerID>
</inArgs>

OutXml

null



Appendix

Error/Status Codes

Table 26: Error and Status Codes

Error/Status Code Value Description
SUCCESS 0 Generic success.
STATUS_LOCKED 10 Device is locked by another application.
ERROR_INVALID_APPHANDLE 100 Invalid application handle. Reserved parameter. Value is zero.
ERROR_COMMLIB_UNAVAILABLE 101 Required Comm Lib is unavailable to support the requested Type.
ERROR_NULL_BUFFER_POINTER 102 Null buffer pointer.
ERROR_INVALID_BUFFER_POINTER 103 Invalid buffer pointer.
ERROR_INCORRECT_BUFFER_SIZE 104 Incorrect buffer size.
ERROR_DUPLICATE_TYPES 105 Requested Type IDs are duplicated.
ERROR_INCORRECT_NUMBER_OF_TYPES 106 Incorrect value for number of Types.
ERROR_INVALID_ARG 107 Invalid argument
ERROR_INVALID_SCANNERID 108 Invalid scanner ID.
ERROR_INCORRECT_NUMBER_OF_EVENTS 109 Incorrect value for number of Event IDs.
ERROR_DUPLICATE_EVENTID 110 Event IDs are duplicated.
ERROR_INVALID_EVENTID 111 Invalid value for Event ID.
ERROR_DEVICE_UNAVAILABLE 112 Required device is unavailable.
ERROR_INVALID_OPCODE 113 Opcode is invalid.
ERROR_INVALID_TYPE 114 Invalid value for Type.
ERROR_ASYNC_NOT_SUPPORTED 115 Opcode does not support asynchronous method.
ERROR_OPCODE_NOT_SUPPORTED 116 Device does not support the Opcode.
ERROR_OPERATION_FAILED 117 Operation failed in device.
ERROR_REQUEST_FAILED 118 Request failed in CoreScanner.
ERROR_OPERATION_NOT_SUPPORTED_FOR_ AUXILIARY_SCANNERS 119 Operation not supported for auxiliary scanners.
ERROR_DEVICE_BUSY 120 Device busy. Applications should retry command.
ERROR_ALREADY_OPENED 200 CoreScanner is already opened.
ERROR_ALREADY_CLOSED 201 CoreScanner is already closed.
ERROR_CLOSED 202 CoreScanner is closed.
ERROR_INVALID_INXML 300 Malformed inXML.
ERROR_XMLREADER_NOT_CREATED 301 XML Reader could not be instantiated.
ERROR_XMLREADER_INPUT_NOT_SET 302 Input for XML Reader could not be set.
ERROR_XMLREADER_PROPERTY_NOT_SET 303 XML Reader property could not be set.
ERROR_XMLWRITER_NOT_CREATED 304 XML Writer could not be instantiated.
ERROR_XMLWRITER_OUTPUT_NOT_SET 305 Output for XML Writer could not be set.
ERROR_XMLWRITER_PROPERTY_NOT_SET 306 XML Writer property could not be set.
ERROR_XML_ELEMENT_CANT_READ 307 Cannot read element from XML input.
ERROR_XML_INVALID_ARG 308 Arguments in inXML are not valid.
ERROR_XML_WRITE_FAIL 309 Write to XML output string failed.
ERROR_XML_INXML_EXCEED_LENGTH 310 InXML exceed length.
ERROR_XML_EXCEED_BUFFER_LENGTH 311 Buffer length for type exceeded.
ERROR_NULL_POINTER 400 Null pointer.
ERROR_DUPLICATE_CLIENT 401 Cannot add a duplicate client.
ERROR_FW_INVALID_DATFILE 500 Invalid firmware file.
ERROR_FW_UPDATE_FAILED_IN_SCN 501 Firmware Update failed in scanner.
ERROR_FW_READ_FAILED_DATFILE 502 Failed to read DAT file.
ERROR_FW_UPDATE_INPROGRESS 503 Firmware Update is in progress (cannot proceed another firmware update or another command).
ERROR_FW_UPDATE_ALREADY_ABORTED 504 Firmware update is already aborted.
ERROR_FW_UPDATE_ABORTED 505 Firmware Update aborted.
ERROR_FW_SCN_DETTACHED 506 Scanner is disconnected while updating firmware.
STATUS_FW_SWCOMP_RESIDENT 600 The software component is already resident in the scanner.
ERROR_INVALID_CONFIG_FILE 601 Invalid Configuration file (File does not exist,Incorrect extension or Self-hash failure).
ERROR_INCOMPATIBLE_CONFIG_FILE 602 Unsupported device for Configuration file.
ERROR_CONFIG_FILE_SYNTAX_VALIDATION_FAILED 603 Configuration file syntax validation failed.

Methods Invoked Through ExecCommand Or ExecCommandAsync

Table 27: List of Methods

Description Method Value
Scanner SDK Commands GET_VERSION 1000
REGISTER_FOR_EVENTS 1001
UNREGISTER_FOR_EVENTS 1002
Scanner Access Control Commands CLAIM_DEVICE 1500
RELEASE_DEVICE 1501
Scanner Common Commands ABORT_MACROPDF 2000
ABORT_UPDATE_FIRMWARE 2001
AIM_OFF 2002
AIM_ON 2003
FLUSH_MACROPDF 2005
DEVICE_PULL_TRIGGER 2011
DEVICE_RELEASE_TRIGGER 2012
SCAN_DISABLE 2013
SCAN_ENABLE 2014
SET_PARAMETER_DEFAULTS 2015
DEVICE_SET_PARAMETERS 2016
SET_PARAMETER_PERSISTANCE 2017
REBOOT_SCANNER 2019
Scanner Operation Mode Commands DEVICE_CAPTURE_IMAGE 3000
DEVICE_CAPTURE_BARCODE 3500
DEVICE_CAPTURE_VIDEO 4000
Scanner Management Commands ATTR_GETALL 5000
ATTR_GET 5001
ATTR_GETNEXT 5002
ATTR_SET 5004
ATTR_STORE 5005
GET_DEVICE_TOPOLOGY 5006
START_NEW_FIRMWARE 5014
UPDATE_FIRMWARE 5016
UPDATE_FIRMWARE_FROM_PLUGIN 5017
LOAD_SCANNER_CONFIGURATION 5020
UPDATE_DECODE_TONE 5050
ERASE_DECODE_TONE 5051
RTA Configuration Commands (Real Time Alerts) GET SUPPORTED RTA EVENTS 5500
UNREGISTER_RTA_EVENTS 5502
GET_RTA_ALERT_STATUS 5503
SET_RTA_ALERT_STATUS 5504
RTA_SUSPEND 5505
RTA_STATE 5506
Scanner Action Commands SET_ACTION 6000
Serial Scanner Commands DEVICE_SET_SERIAL_PORT_SETTINGS 6101
Other Commands DEVICE_SWITCH_HOST_MODE 6200
Keyboard Emulator Commands KEYBOARD_EMULATOR_ENABLE 6300
KEYBOARD_EMULATOR_SET_LOCALE 6301
KEYBOARD_EMULATOR_GET_CONFIG 6302
Scale Commands SCALE_READ_WEIGHT 7000
SCALE_ZERO_SCALE 7002
SCALE_SYSTEM_RESET 7015

Zero Scale Operation

The weight reading of the scale can be set to zero by performing the Zero Scale operation. Once performed, the reading is set to Zero and this operation is applicable for both Read Weight and Async Read Weight.

NOTE: Only the weights less than 30g can be set to zero. Any weight higher than 30g will not set to Zero.

Action Attributes and Values

Table 28: Action Attributes and Values

Attribute Number Attribute Name Description Data Type Values
6000 Beeper/LED Triggers the beeper/LED via command 'X' 0 - 1 high short beep
1 - 2 high short beeps
2 - 3 high short beeps
3 - 4 high short beeps
4 - 5 high short beeps
5 - 1 low short beep
6 - 2 low short beeps
7 - 3 low short beeps
8 - 4 low short beeps
9 - 5 low short beeps
10 - 1 high long beep
11 - 2 high long beeps
12 - 3 high long beeps
13 - 4 high long beeps
14 - 5 high long beeps
15 - 1 low long beep
16 - 2 low long beeps
17 - 3 low long beeps
18 - 4 low long beeps
19 - 5 low long beeps
20 - Fast warble beep
21 - Slow warble beep
22 - High-low beep
23 - Low-high beep
24 - High-low-high beep
25 - Low-high-low beep
26 - High-high-low-low beep
42 - Green LED off
43 - Green LED on
45 - Yellow LED
46 - Yellow LED off
47 - Red LED on
48 - Red LED off
6001 ParameterDefaults Initiates a parameter defaults command 'X' 0 - Restore Defaults
1 - Restore Factory Defaults
2 - Write Custom Defaults
6003 BeepOnNextBootup Controls whether or not boot up/power up beep is suppressed on the next power up. 'X' 0 - Disable beep on next bootup
1 - Enable beep on next bootup
6004 Reboot Remote reboot command. 'X'
6005 HostTriggerSession Triggers the scanner to start scanning via command. 'X' 0 - start Host Trigger Session
1 - stop Host Trigger Session
6011 StatsReset Reset/default a specific statistic. 'X' The specific statistic attribute to reset. Range: 15002-19999.
6013 StatsResetAll Reset/default all statistics. 'X'
6017 ScaleReadWeight Read Weight from scale. 'A' Byte[0] status:
0 - scaleNotEnabled
1 - scaleNotReady
2 - stableWeightOverLimit
3 - stableWeightUnderZero
4 - nonStableWeight
5 - stableZeroWeight
6 - stableNonZeroWeight
Byte[1] units:
0=kgs
1=lbs
Bytes[2-5] weight in thousandths of units
6018 ScaleZero Zeros the scale. 'X'
6019 ScaleReset Resets the scale. 'X'
6022 ChangeAllCodeTypes Enables/Disables all code types. 'X' 0 = Disable All Code types
1 = Enable All Code Types

Description of Intelligent Document Capture Format

The Intelligent Document Capture output is presented as decode data of type BT_ISO15434. This data starts with Zebra specific items, such as the data length and message type, followed by one ISO/IEC 15434 message envelope containing one or more Format 09 (binary data) envelopes (one each for image and barcode data). Table 29 illustrates the format.

Table 29: Formats

Data Length (Bytes) Comment
BT_ISO15434 1 Packet Identifier
XXXXXXXX 4 Packet Length (32-bit unsigned)
MSG_EASYCAP 1 ISO/IEC 15434 Message type2
[)>Rs 4 Message Header

ISO/IEC 15434 Envelope

09GstttGsGsnnGs varies Format Header
ttt = BMP or JPEG or TIFF
nn = number of bytes in data field

Image

Image Data varies Data5
Rs 1 Format Trailer
09GstttGsGsnnGs varies Format Header
ttt = Barcode
nn = number of bytes in data field

Barcode4

Barcode Data varies Data6
Rs 1 Format Trailer
Eot 1 Message Trailer

NOTE

  1. Rs=0x1E; Gs = 0x1D; Eot = 0x04
  2. Currently only message type defined.
  3. Image and barcode entries may appear in any order.
  4. Barcode envelope (header, data and trailer) may be missing (Intelligent Document Capture doesn't always require a barcode).
  5. Image format same as is currently used for BT_SIGNATURE, with type of 0.
  6. Byte1=code type (BT_*), followed by decode data.
Example:

The following is a BT_ISO15434 decode message with one barcode (type DataMatrix with data ABC123456789) followed by one image (8x8x1, BMP format). This example shows how to map the bytes into the format detailed in Table 29.


0x0000	b5	00	00	00	95	00	5b	29	3e	1e	30	39	1d	42	61	72
0x0010	43	6f	64	65	1d	1d	31	34	1d	1b	41	42	43	20	31	32
0x0020	33	34	35	36	37	38	39	1e	30	39	1d	42	4d	50	1d	1d
0x0030	31	30	30	1d	03	00	00	00	00	5e	42	4d	5e	00	00	00
0x0040	00	00	00	00	3e	00	00	00	28	00	00	00	08	00	00	00
0x0050	08	00	00	00	01	00	01	00	00	00	00	00	00	00	00	00
0x0060	00	00	00	00	00	00	00	00	00	00	00	00	00	00	00	00
0x0070	00	00	00	00	ff	ff	ff	00	ff	00	00	00	ff	00	00	00
0x0080	ff	00	00	00	ff	00	00	00	ff	00	00	00	ff	00	00	00
0x0090	ff	00	00	00	ef	00	00	00	1e	04

Addr Data Description
00 b5 Packet Identifier = BT_ISO15434
01 00000095 Packet Data Length
05 00 Message type = MSG_EASYCAP
06 5b 29 3e 1e Message Header = "[)>Rs"
0a 30 39 1d 42 61 72 43 6f 64 65 1d 1d 31 34 1d Format Header = "09GsBarCodeGsGs14Gs"
19 1b Code Type = BT_DATAMATRIX
1a 41 42 43 20 31 32 33 34 35 36 37 38 39 Decode Data = "ABC 123456789"
27 1e Format Trailer = Rs
28 30 39 1d 42 4d 50 1d 1d 31 30 30 1d Format Header = "09GsBMPGsGs100Gs
34 03 File format = BMP
35 00 Type = DocCap
36 0000005e Bytes in image data
3a 42 4d Signature = "BM"
3c 5e000000 Size of the file
40 0000 Reserved
42 0000 Reserved
44 3e000000 Starting position of image data
48 28000000 Size of header
4c 08000000 Image width
50 08000000 Image height
54 0100 Number of color planes
56 0100 Number of bits per pixel
58 00000000 Compression method
5c 00000000 Size of bitmap
60 00000000 Horizontal resolution
64 00000000 Vertical resolution
68 00000000 Number of colors
6c 00000000 Number of important colors
70 00000000 ffffff00 Color Palette
78 ff000000 ff000000 ff000000 ff000000 ff000000 ff000000 ff000000 ff000000 Image Data
98 1e Format Trailer = Rs
99 04 Message Trailer = Eot

Windows Registry Keys for CoreScanner Driver

The CoreScanner driver reads a number of its settings from the Windows registry. Every value listed below lives under the following base key, which is the same on 32-bit and 64-bit Windows:


HKEY_LOCAL_MACHINE\SOFTWARE\Zebra\Zebra Scanners\CoreScanner

The Subkey column gives the path relative to that base key. (base key) means the value is set on the base key itself.

Table 30: Registry Keys for CoreScanner Driver

Subkey Value Name Values Description
(base key) DebugPrint 0 = Disable
1 = Enable
Enable debug log messages viewable through a debug log viewer such as Microsoft DebugView.
DevInitDelay 0 - 10000
Default value: 3000 (0xBB8)
Device initialization delay.
EngDbgStr 0 = Disabled
1 = Enabled
Enable detailed engineering-level debug messages through a debug log viewer.
HidKeyboardEmulatorInstalled Values not applicable The presence of this registry value indicates whether HidKeyboardEmulator is installed.
RestartPortOnDeviceCommError 0 = Not restarting USB port
1 = Restarting USB port
Restart the device's USB port when the device fails to populate ASSET information.
USEvents 0 = Disable the Unsolicited Events
1 = Enable the Unsolicited Events
Determines whether Unsolicited Events (topology change events) are enabled.
Version Represents version numbers. For example, 3.08.0012 CoreScanner driver version.
\BT Disabled 0 = Enable the Bluetooth device support
1 = Disable the Bluetooth device support
Controls the availability of Bluetooth device support.
\DeviceStartup DeviceDisable 0 = CoreScanner sets the device scan state to Enabled
1 = CoreScanner sets the device scan state to Disabled
2 = CoreScanner does not change the device scan state
Set the scanner state when the device connects to the host.
\NIXMODB AutoDisable 0 = Enable
1 = Disable
Control Nixdorf Mode B RTS status when a barcode is received.
EnableGraveKey 0 = Disable: the Grave character is converted to CR
1 = Enable: the Grave character is preserved
Set Grave key handling.
\ServiceStartup DeviceDisable 0 = Set the scanner state to Enable
1 = Set the scanner state to Disable
2 = No change to the device's status
Set the scanner state when the service starts.
ExAssetInfoDisable 0 = Enable
1 = Disable
Enable/disable Extended Asset information when the device is connected.
\SNAPI FlashRspTimeout 0 - 80000
Default value: 60000 (0xEA60)
Timeout for receiving SNAPI firmware update response.
\SSI CDCDeviceModelFilter Represents any model number. For example, RFD or DS Filter the device based on model number for SSI or CDC host modes.
EnumerateCDC 0 = Disable
1 = Enable
Enable/disable enumerating SSI over USB CDC devices.
WriteTimeout 0 - 10000
Default value: 2000 (0x7D0)
Time that CoreScanner waits for asynchronous packet transmission related to SSI modes, including Bluetooth.

Download

Download Barcode Scanner SDK for Windows

IMPORTANT

Zebra recommends using the latest release whenever possible.

To download Barcode Scanner SDK for Windows:

  1. Visit the Zebra Barcode Scanner SDK for Windows download page and select the desired download(s).
  2. Proceed to the Barcode Scanner SDK for Windows release notes for the version details.
  3. Proceed to the Barcode Scanner SDK for Windows setup page for installation instructions.