Remote Scanner Manager

To display only the features present on a particular device, select one or more filters from the SmartDocs bar below.

Input fields accept ENGLISH ONLY.

Queries from MX are not supported on Zebra devices running Android 11 or later. See alternative method.

Overview

The Remote Scanner Manager (RemoteScannerMgr, or RSM) is used to monitor, configure and apply firmware updates to supported Zebra wired and wireless scanners from a Zebra device running Android 5.1 or later.

Main Functionality

  • Update the firmware of a connected scanner
  • Perform the following functions on a paired scanner:
    • Apply a Scan123 config file (downloaded separately; learn more)
    • Cycle the power on the scanner
    • Initiate a device-location LED/sound sequence
    • Disconnect the scanner
    • Unpair the scanner
  • Enter the serial number of a device on which to perform an action

Supported Devices

Remote Scanner Manager supports most wired scanners plus the following Bluetooth scanners:

  • CS6080
  • DS2278
  • DS3678*
  • DS8178
  • LI3678
  • RS507
  • RS5000
  • RS5100
  • RS6000
  • RS6100

Scanners in BOLD are supported only with SDM660-platform devices in SSI mode running Android 11 or later. See Zebra devices by platform.

* Support requires MX 6.3 (or later) on the host device.

Learn about additional Zebra scanner management solutions.


Programmatic Usage

The features of RSM can be accessed programmatically, enabling firmware updates to be built into a new or existing Android app running on a mobile computing device connected to a scanner. The functions required of the app are listed below, followed by sample code with examples of some functions.

  • Firmware update prep steps:
  • Required functions for updating firmware:
    • Push the firmware and required configuration file(s) to the host device using FileMgr.
    • Create a 123Scan config file using 123Scan (if not already created).
    • Push the 123Scan config file to the scanner using RemoteScannerMgr.
    • Display a “Start Update” button that (when pressed) initiates firmware update using RemoteScannerMgr.
      Scanner update begins when user presses the "Start Update" button.

Optionally, Zebra OEMInfo can be used to programmatically query a connected scanner to prepare for an update and/or confirm success afterward. OEMInfo can acquire peripheral battery info and general peripheral device info.

Notes:

  • Scanner must remain connected to the host while the update and configuration are in progress.
  • Scanner cannot be used for scanning until the process is completed.
  • Remove the "Start Update" button from view if the scanner is disconnected before the update begins.
  • All parameters are reset to their default values if the new firmware contains a different parameter list.
  • Ring scanner firmware updates sometimes erase the host MAC address, resulting in a failure to reconnect after reboot (REMEDY: Re-pair host device with scanner).
  • If DataWedge is used for scanning, its parameters overwrite those of 123Scan when the scanner is paired.

† Use of OEMInfo requires the Zebra Device Central 4.4 (or later) app to be installed on the host device.

Sample Code

The Java sample code below can be useful when attempting to perform a firmware update or apply a scan configuration update on a connected Bluetooth scanner in Simple Serial Interface (SSI) mode. The code demonstrates how to register* an app for firmware update progress (as a percentage), and register for fail/pass status of either update.

* Registering for status notifications is NOT required to perform either update. Status updates require RSMZVA 7.0.16 (Android 11) and 7.0.27 (Android 13) on the device. See Settings > Apps > All apps > ... > Show system.

    
    public class MainActivity {
        private String myUri1 = "content://com.zebra.valueadd.rsmservice.provider/rsm/firmware_update";
        private String myUri2  = "content://com.zebra.valueadd.rsmservice.provider/rsm/scncfg_update";
        private String value1, value2, value3, value4, value5;

        // Query the content provider
        ContentResolver cr = getContentResolver();
        Cursor cursor1 = cr.query(Uri.parse(myUri1), null, null, null, null);
        Cursor cursor2 = cr.query(Uri.parse(myUri2),null,null,null,null);

        try {
            if (cursor1 != null) {
                cursor1.moveToFirst();
                String jsonString = cursor1.getString(0);
                JSONObject retrievedObject = null;
                try {
                    retrievedObject = new JSONObject(jsonString);
                }   catch (JSONException ex)  {
                    throw new RuntimeException(ex);
                }

                // Print out the properties and their values
                value1 = retrievedObject.getString("fw_update_status");
                Log.d(TAG, "Property fw_update_status: " + value1);
                value2 = retrievedObject.getString("fw_progress_percentage");
                Log.d(TAG, "Property fw_progress_percentage: " + value2);
                value3 = retrievedObject.getString("fw_update_failure_reason");;
                Log.d(TAG, "Property fw_update_failure_reason: " + value3);
                cursor.close();
            }
        } catch (Exception e) {
            Log.e(TAG, "Error processing fwupdate JSON", e);
        }

        try {
            if (cursor2 != null) {

                cursor2.moveToFirst();
                String jsonString = cursor2.getString(0);
                JSONObject retrievedObject = null;

                try {
                    retrievedObject = new JSONObject(jsonString);
                } catch (JSONException ex) {
                    throw new RuntimeException(ex);
                }

                // Print out the properties and their values
                value4 = retrievedObject.getString("123scncfg_status");
                Log.d(TAG, "Property 123scncfg_status: " + value4);
                value5 = retrievedObject.getString("123scncfg_fail_reason");
                Log.d(TAG, "Property 123scncfg_fail_reason: " + value5);
                cursor.close();
            }
        } catch (Exception e) {
              Log.e(TAG, "Error processing scncfg JSON", e);
        }
    }

Sample code is for demonstration purposes only. DO NOT USE in production environments.


Action

Used to enter an Action to initiate a management function on remote Bluetooth scanners paired with and connected to the device. If performing a firmware update or other file-related function, file(s) must first be acquired using File Manager, StageNow, a compatible MDM solution or other means. Support for the Zebra DS3678 scanner requires MX 6.3 or later.

Parm Name: Action

Option Name Description Note Status Requires
0 Do Nothing This value (or the absence of this parm from the XML) will cause no scanner management action to be performed.

MX: 5.2+

1 Apply 123Scan configuration package (see desc.) Applies the 123Scan (.scncfg) configuration package to configure the scanner. File downloaded separately. Supports RS6000 and DS3678 only; DS requires MX 6.3 or later.

MX: 5.2+

2 Update Scanner Firmware Applies the firmware (.dat file downloaded separately) specified in the corresponding field to update the scanner firmware.

MX: 5.2+

3 Reset Scanner (see desc.) Cycles the power of the connected scanner to clear its memory and other volatile settings. Supports RS6000 and DS3678 only; DS requires MX 6.3 or later.

MX: 5.2+

4 Page Scanner (see desc.) Activates a device-location sequence on the paired scanner consisting of beep sounds, LED flashes and vibration to help locate a misplaced device. Supports RS6000 and DS3678 only; DS requires MX 6.3 or later.

MX: 5.2+

5 Disconnect Bluetooth Scanner (see desc.) Disconnects the currently connected Bluetooth scanner. Supports RS6000 and DS3678 only; DS requires MX 6.3 or later.

MX: 5.2+

6 Unpair Bluetooth Scanner (see desc.) Removes the pairing information from the device for the selected Bluetooth scanner. Supports RS6000 and DS3678; DS requires MX 6.3 or later.

MX: 5.2+

123Scan Config File Name

Used to enter the path and file name of the 123Scan configuration file, which is generated using Zebra's 123Scan Configuration Utility for Windows.

Parm value input rules

  • String from 1-255 characters entering path and name of 123Scan config file

Shown if: Scanner Action is not "Do Nothing"

Parm Name: ConfigFile

Requires:

  • MX: 5.2+

Firmware File Name

Used to enter the path and file name for updating the scanner firmware.

Parm value input rules

  • Accepts a string of characters for the path and name of the firmware file
  • Minimum length is 1 character; maximum length is 255 characters

Shown if: Scanner Action is not "Do Nothing"

Parm Name: DatFile

Requires:

  • MX: 5.2+

Scanner Serial Number

Used to enter the serial number of a scanner on which to perform an Action. This parameter can be used to verify that a scanner identified by its serial number is the unit that is currently connected. The Action will be performed only if the specified serial number matches that of the currently connected scanner (or if this parameter is left blank or not present in the XML). If the specified serial number does not match that of the connected scanner, no action will be performed and an error will be returned to the Result XML.

Parm value input rules

  • Accepts a string of 1-255 characters

Shown if: Scanner Action is not "Do Nothing"

Parm Name: SerialNumber

Requires:

  • MX: 5.2+