# Hardware an application can use

> Canonical HTML: https://screenrig.ai/docs/hardware

An application on a screen can read barcode scanners and badge readers, NFC tags, the camera, the microphone, serial devices, GPIO lines, Bluetooth LE sensors and receipt printers, and it tells your agent what happened. This page is the one table of what each Player offers.

## What an application can reach

An application is the page your agent uploads and places on a screen. The Player gives it the hardware of the device it runs on through [`window.screenrig.device`](https://screenrig.ai/docs/sdk.md#hardware): the application listens for a scan, drives a relay or prints a receipt, and reports the result to your agent with `emit`, so "badge scanned" or "service requested" lands in the project event log.

Each kind of hardware has a capability flag of its own. A flag is true only on a Player that offers the feature, on a device that has the hardware, for the page that controls the screen, so one build also runs on a screen without the hardware. The [SDK reference](https://screenrig.ai/docs/sdk.md#hardware) lists the flags, the calls and the errors.

## Page features on every Player that runs applications

Page visibility, page timing, launch params and the screen's facts in `context` work on every Player that runs applications: the Player web app, Android (Google Play and the Amazon Signage Stick), Linux and Raspberry Pi, macOS, Windows, BrightSign, Samsung Smart Signage (Tizen) and LG webOS Signage. They need no hardware. Apple TV, iPhone and iPad run no applications.

## What each Player offers

A cell names what the Player does. "Yes" is the feature as the row describes it, and "No" is a Player that does not offer it. The calls for each row are in the SDK reference.

| Capability | Android | Linux and Raspberry Pi | macOS | Windows | BrightSign | Samsung (Tizen), LG webOS | Player web app |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Page [visibility](https://screenrig.ai/docs/sdk.md#m-onvisibility), [page timing](https://screenrig.ai/docs/sdk.md#m-pagetiming), [launch params](https://screenrig.ai/docs/sdk.md#m-context-params) and [screen facts](https://screenrig.ai/docs/sdk.md#m-context-screen) in `context` | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| [Barcode scanners and badge readers (keyboard wedge)](https://screenrig.ai/docs/sdk.md#device-onscan) | Yes | Yes | Yes | No | Yes | Yes | Yes |
| [NFC tags](https://screenrig.ai/docs/sdk.md#device-onscan) | Yes | No | No | No | No | No | No |
| [Camera barcode scanning](https://screenrig.ai/docs/sdk.md#device-scanner-start) | Yes | Yes | Yes | No | No | No | No |
| [People count](https://screenrig.ai/docs/sdk.md#device-onpeople) | Yes | No | Yes | No | No | No | No |
| [Microphone sound level](https://screenrig.ai/docs/sdk.md#device-onsoundlevel) | Yes | Yes | Yes | Yes | No | No | No |
| [USB and RS-232 serial](https://screenrig.ai/docs/sdk.md#device-serial-open) | Yes (USB CDC-ACM adapters) | Yes | No | Yes | Yes (the onboard RS-232 port and USB serial) | No | WebSerial, ChromeOS kiosk only |
| [GPIO](https://screenrig.ai/docs/gpio.md) | Where the device exposes a writable sysfs GPIO chip (no pull) | Raspberry Pi; other boards with `SCREENRIG_GPIO_CHIP` | No | No | Yes: GPIO 0 to 7 on the GPIO connector, or a BrightSign USB-to-GPIO adapter | No | No |
| [Bluetooth LE sensors (read and notify)](https://screenrig.ai/docs/sdk.md#device-ble-read) | Yes (Android 12 and later) | Yes (the host's BlueZ) | Yes | Yes | No | No | No |
| [Receipt printers (ESC/POS)](https://screenrig.ai/docs/sdk.md#device-print) | Yes (USB) | Yes | No | Yes | No | No | No |
| [PDF printing](https://screenrig.ai/docs/sdk.md#device-print) | No | Yes (CUPS) | No | No | No | No | No |
| [USB point-of-sale scanners (WebHID)](https://screenrig.ai/docs/sdk.md#device-onscan) | No | No | No | No | No | No | ChromeOS kiosk only |
| [Infrared remote (receive and send)](https://screenrig.ai/docs/sdk.md#device-ir-send) | Send, on a device with an infrared emitter | No | No | No | Receive and send | No | No |
| [UDP messages to and from the screen's network](https://screenrig.ai/docs/sdk.md#device-udp-open) | Yes | Yes | No | Yes | Yes | No | No |
| [Live HDMI input](https://screenrig.ai/docs/sdk.md#device-hdmiinput-open) | No | No | No | No | Yes: XT1143, XT1144, XT1145, XT2144 and XT2145 | No | No |

Android covers the Google Play and Amazon Signage Stick Players. The Raspberry Pi package is the Linux Player.

## Notes for each Player

### Android and the Amazon Signage Stick

Serial ports are USB CDC-ACM serial adapters, printers are USB printers, Bluetooth LE needs Android 12 or later, GPIO lines need a device that exposes a writable sysfs GPIO chip, and infrared sends through the device's own emitter where it has one (Android receives no infrared).

Two kinds of permission apply, and neither interrupts a running screen:

- **The camera, the microphone and Bluetooth** are granted once when you set up the device, in Android's app settings or with `adb shell pm grant`. The Player never asks for them. Until you grant them the page holds no camera or microphone flag, and Bluetooth calls reject `ble_unavailable`.
- **USB devices** raise Android's USB dialog only when a page first opens a serial port or prints to a USB printer, once for each device. A barcode scanner or badge reader that types like a keyboard needs no permission.

### Linux and Raspberry Pi

The Raspberry Pi package is the Linux Player, and every row marked for Linux works on a Pi. A Pi's GPIO header is found by itself on a Pi 3, 4 and 5; another board names its chip with `SCREENRIG_GPIO_CHIP`. [Buttons and relays on GPIO](https://screenrig.ai/docs/gpio.md) covers wiring and the Player's access to the chip. Bluetooth LE uses the host's BlueZ, and PDF printing goes through CUPS, so a PDF printer is a CUPS queue.

### macOS

macOS offers keyboard-wedge scanners, the camera, the microphone and Bluetooth LE. It has no serial, GPIO or printing calls.

### Windows

Windows offers the microphone, serial ports, Bluetooth LE, receipt printers and UDP sockets. It has no keyboard-wedge capture: the Player cannot tell when a field of the page has focus, so it does not take a scanner's keystrokes, and a scanner types into the focused field of the page like any keyboard. The camera and GPIO are not offered.

### BrightSign

An application on a BrightSign player reads its onboard RS-232 port and USB serial devices, keyboard-wedge scanners and badge readers, and GPIO lines: pins 0 to 7 on the GPIO connector, USB GPIO expanders, and the lines and LEDs of BP200 and BP900 button boards. It [receives infrared codes](https://screenrig.ai/docs/sdk.md#device-onir) from a remote, [sends infrared codes](https://screenrig.ai/docs/sdk.md#device-ir-send) to a TV or AV gear, [sends and receives UDP messages](https://screenrig.ai/docs/sdk.md#device-udp-open) for Crestron, AMX, Q-SYS and show controllers, and [shows the live picture of the player's HDMI input](https://screenrig.ai/docs/sdk.md#device-hdmiinput-open) on the XT1143, XT1144, XT1145, XT2144 and XT2145. [Buttons and relays on GPIO](https://screenrig.ai/docs/gpio.md#brightsign) lists the pin ranges, and [BrightSign players](https://screenrig.ai/partners/brightsign.md) covers the player.

### Samsung Smart Signage (Tizen) and LG webOS Signage

These Players run applications in the browser Player. They get the page features and keyboard-wedge scanning wherever a keyboard-style scanner or badge reader is attached, and no other hardware. WebSerial and WebHID are not offered on them.

### The Player web app and ChromeOS

In the Player web app a scanner is a keyboard-wedge reader. WebSerial serial ports and WebHID point-of-sale scanners work in a ChromeOS kiosk only. Chrome grants a serial port to the Player through its enterprise policy `SerialAllowUsbDevicesForUrls` or `SerialAllowAllPortsForUrls`; the [ChromeOS kiosk](https://screenrig.ai/docs/players.md#chromeos) section sets the kiosk up.

## Privacy

The camera is analysed on the device and no image leaves it, and no audio leaves the device.

## MQTT and devices on the network

Hardware on the screen's own network needs no flag. An application fetches from a device on the network and connects to an MQTT broker's WebSocket listener, and the SDK page covers both: [Subscribe to MQTT](https://screenrig.ai/docs/sdk.md#mqtt) and [Reach devices on the screen's network](https://screenrig.ai/docs/sdk.md#network). [Pages on the screen's network](https://screenrig.ai/docs/players.md#local-network) lists what each Player reaches: Samsung Smart Signage (Tizen), LG webOS Signage and BrightSign reach `https://` and `wss://` addresses only.

## Questions

**Which Players read a barcode scanner or badge reader?**
Android, Linux and Raspberry Pi, macOS, BrightSign, Samsung Smart Signage (Tizen), LG webOS Signage and the Player web app read a scanner that types like a keyboard. Windows does not take the scanner's keystrokes.

**Can a Raspberry Pi screen react to a button or switch a relay?**
Yes. A Pi 3, 4 or 5 running the Linux Player reads buttons and contacts on its GPIO header and drives relays through a relay board.

**Does an application need a permission from the person at the screen?**
Not at the screen. On Android, the camera, microphone and Bluetooth are granted once when you set up the device, and the USB dialog appears only the first time a page uses a USB serial port or printer, once for each device.

**Does the camera send pictures anywhere?**
No. The camera is analysed on the device and no image leaves it.

**Does it cost anything?**
screenRIG is free. The scanner, sensor, relay board or printer is your cost.

## Related

- [SDK](https://screenrig.ai/docs/sdk.md): the reference for every call.
- [Buttons and relays on GPIO](https://screenrig.ai/docs/gpio.md): wiring, pins and examples.
- [Players](https://screenrig.ai/docs/players.md): put the screenRIG Player on a device.
- [Raspberry Pi digital signage](https://screenrig.ai/digital-signage/raspberry-pi.md): the Pi as a screen.
