KC50 Kiosk PoE Usage Guide

EMDK For Android 13.0

Overview

Zebra's KC50 is a rugged Android-based fixed-mount computer designed for kiosk applications including point-of-sale, information display and/or look-up, and various payment and conversational self-service scenarios. Zebra's kiosk computers are available in 22-inch and 15-inch sizes and with or without Power Over Ethernet capability.

Also available is the TD50, a 15-inch touch display designed to work with the KC50 to provide secondary video output and touch input. All KC50 and TD50 models support standard VESA mounting, with wall, floor and countertop mounting solutions available.

image The 15-inch KC50 (facing away) with optional TC50 Touch Display and back-to-back counter stand. Click image to enlarge; ESC to exit.

Premium KC50 models support Power over Ethernet (PoE) and all can be expanded to include scanners, LED indicators, payment terminals and other accessories to suit interactive use cases in airports, hospitality, retail, healthcare and many others. The unit is IP65-rated to protect it from dust, debris and liquids in kitchens and other hostile environments.

Available Models

  • 15-inch KC50 Kiosk Computer:
    • Android computer with 15-inch touch display
    • Bluetooth, Ethernet, Wi-Fi
    • Powered by AC/DC adapter
    • VESA mounting
  • 22-inch KC50 Kiosk Computer:
    • Android computer with 22-inch touch display
    • Bluetooth, Ethernet, Wi-Fi
    • Powered by AC/DC adapter
    • VESA mounting
  • TD50 Touch Display:
    • Touch-sensitive 15-inch monitor
    • Provides secondary video output and touch input for KC50
    • Powered by dedicated AC/DC adapter or nearby KC50 via USBC-to-USBC cable
    • USB-C cable also carries video and touch screen signals
    • VESA mounting

† Also available in Premium model, which adds a front-facing camera, NFC input, haptic feedback and Power Over Ethernet capabilities.

Accessories

  • AC/DC power supply (country-specific line cord sold separately)
  • USBC-to-USBC power and data cable (KC50-specific)
  • Z-Flex SE4720 scanner
  • Z-Flex LED Light Bar (see LED Usage Guide)
  • Stands* (third-party):
    • Single or dual display mount with countertop base
    • Dual display mount with pedestal base
      * Other styles available; see accessory guide (link below) or contact your Zebra sales representative.

For a list of product accessories and SKUs, see the Zebra Kiosk System Accessory Guide (.pdf).

image The 22-inch KC50 taking an order as a self-service kiosk. Click image to enlarge; ESC to exit.


image Zebra KC50 kiosk computers can be powered by AC or PoE, and are suitable for infinite self-service use cases.
Click image to enlarge; ESC to exit.


Default PoE Ratings

Shown below are "out-of-the-box" settings for the 22- and 15-inch KC50 models. A LifeGuard update scheduled for Q4-2024 is intended to allow customized power management configurations.

image The default PoE settings of KC50-series devices.
Click image to enlarge; ESC to exit.


KC50 Series Notes

  • The detection and discovery of the PoE power class (4,6 or 8) occurs early during KC50 boot-up process.
  • A flashing red LED indicates the device has not detected a suitable power class (min. = class 4).
  • A list of compatible Power Sourcing Equipment (PSE) can be found in the online Product Reference Guide.
  • Zebra recommends fully testing PoE with minimum Cat5e RJ45 cabling before full deployment to ensure PoE equipment compatibility.
  • Qualified cable installers should be used at each site to ensure compliance with TIA 586.2-D specifications.
  • A Q4-2024 LifeGuard release is intended to allow customized power management configurations via .JSON file download.
  • By default, the TD50 mirrors content displayed on the KS50 to which it is connected.
  • Use of the TD50 as a secondary display requires activation of Desktop Mode on the KS50 in some scenarios.
  • Desktop Mode MUST be enabled if soft keyboard input is required on the TD50.
  • The KC50 (and a connected TD50, if present) can be configured to:

image With Z-Flex ports on all four sides, KC50 can be outfitted with accessories to fit an unlimited number of use cases. Click image to enlarge; ESC to exit.


LED Control

The KC50 supports an optional multi-color LED Light Bar that can be controlled programmatically through the Zebra LED service and its Android Interface Definition Language (AIDL) interface. This permits an app to control the light bar without the need for Android Notification APIs and the accompanying on-screen notifications. The sample code below can be modified for use in apps to indicate status of any relevant activity.

image Click image to enlarge; ESC to exit.

Requirements

  • KC50 with Z-Flex Light Bar attached
  • ILedBarLightService.aidl file (download below)
  • Supported Functions
    • Light Bar ON with defined color
    • Light Bar repeats two-color sequence indefinitely
    • Light Bar stops two-color sequence and displays a single color (or turns OFF)
    • Light Bar OFF

Intents

  • Binding to the Light Bar service
  • Use established mechanisms to bind to the service
  • Service package name: com.zebra.ledbarlightservice

Example code


Intent i=new Intent(“LedBarLightService”);
i.setPackage(“com.zebra.ledbarlightservice”);
bindService(I, mConnection, BIND_AUTO_CREATE);

The ServiceConnection class method onServiceConnected() capture the binding to the service.

APIs

  1. setLight(int ID, int COLOR);
Parameter Values Description
ID Type: int
101
LED identification
COLOR Type: int
from 0x000000–0xFFFFFF
RGB color in the format 0xRRGGBB
Go to RGB hex table
COLOR1 Type: int
from 0x000000–0xFFFFFF
RGB color in the format 0xRRGGBB
Go to RGB hex table
COLOR2 Type: int
from 0x000000–0xFFFFFF
RGB color in the format 0xRRGGBB
Go to RGB hex table
PERIOD1 Type: int Time (in milliseconds) to illuminate LED bar with COLOR1
PERIOD2 Type: int Time (in milliseconds) to illuminate LED bar with COLOR2

To control the KC50 Light Bar programmatically:

1. Download the KC50 AIDL file and add it to the Android Studio project:
image
2. Add the standard AIDL boilerplate code to connect with (and disconnect from) the Zebra LED service and modify as needed for the app under development.
Note the ComponentName in the sample code below:

    
package com.mycompany.mysampleapp;

// Imports go here.

public class MySampleActivity extends Activity {
    private static final String TAG = "MySampleActivity"
    private ILed mLedService = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //...

        // Connect to the AIDL interface for LED control.
        Intent intent = new Intent().setComponent(new ComponentName("com.zebra.led", "com.zebra.led.LedService"));
        bindService(intent, ledConnection, Context.BIND_AUTO_CREATE);
    }

    @Override
    protected void onDestroy() {
        unbindService(ledConnection);
        super.onDestroy();
    }

    /**
      * This code monitors the connection to the LED service:
      */
    private final ServiceConnection ledConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            mLedService = ILed.Stub.asInterface(iBinder);
        }
        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            mLedService = null;
        }
    };

3. Call ledId and color to illuminate LED wth the desired color:

// ILedBarLightService.aidl
package com.zebra.ledbarlightservice;
interface ILedBarLightService {
      /**
       * Sets the color of the LED with the specified ID.
       *
       * @param ledId The ID of the LED to control.
       * @param color The color value to set for the LED.
       */
      void setLight(int ledId, int color);
       /**
        * Turns off the LED.
        */
      void setLedOff();
       /**
        * sets the sequence of led to flash with the specific color till the respective times given.
        */
      void setLightSequence(int ledId, int color1, int period1, int color2, int period2);
      /**
       * sets the led sequence to off and display the color specified. If color is not specified, the LED will turn off.
       */
      void setLedSequenceOff(int ledId, int color);


 }

AIDL File

The Zebra aidl file is shown below and is available for download.

// Copyright (c) 2020-2021 Zebra Technologies Corporation and/or its affiliates. All rights reserved.

package com.zebra.led;

/**
 * Interface for apps to control device LEDs. Use this interface when you wish to control LEDs
 * beyond what is available in Android's Notification API; for example, to light an LED without
 * showing an on-screen notification, or to specify which LED when there is (or could be more than 
 * one (such as on KC50 and WS50 devices).
 */
interface ILed
{
    /** LED id for a single app-controlled LED (available on Sharp RZ-H270, red and green
        colors only) */
    const int LED_USER = 1;
    /** LED id for the left LED on devices with multiple LEDs (available on Zebra WS50) */
    const int LED_LEFT = 2;
    /** LED id for the right LED on devices with multiple LEDs (available on Zebra WS50) */
    const int LED_RIGHT = 3;

    /**
     * Sets an LED to a solid color. LED and color availability varies by product.
     *
     * @param ledID the LED to control, one of the LED_ constants
     * @param color the color to set, in standard Android ARGB format. The opacity (A) is
     *              ignored. Use Color.TRANSPARENT (0) to turn the LED off.
     * @throws IllegalArgumentException the LED is not available to control on this product, or the
     *                                  the given color is not supported for the LED
     */
    void setLed(int ledId, int color);

    /**
     * Sets an LED to a blinking color. LEDs, color availability, and blinking support varies by
     * product.
     *
     * @param ledID the LED to control, one of the LED_ constants
     * @param color the color to set, in standard Android ARGB format. The opacity (A) is
     *              ignored.
     * @throws IllegalArgumentException the LED is not available to control on this product, or the
     *                                  the given color is not supported for the LED
     * @throws UnsupportedOperationException blinking is not supported for this product or LED
     */
    void setLedBlinking(int ledId, int color);
}

Also See