---
title: roIRReceiver
slug: develop/roirreceiver
docTags: 
createdAt: 2025-03-11T07:07:18.732Z
---

This object supports receiving arbitrary Infrared remote control codes using the NEC and RC5 protocols. The JavaScript equivalent is [BSIRReceiver](docId\:W5oQmfTxhlg8lwisWtg7r).

Object Creation: The *roIRReceiver* object is created with an associative array.

```text
CreateObject("roIRReceiver", config As roAssociativeArray)
```

The associative array can contain the following parameters:

- `source`: A string value indicating the source of the input.
  - "IR-in": The 3.5mm IR input/output connector&#x20;
  - "Type-C": Cable input over USB for LS players
  - "GPIO": Pin 1 of the GPIO connector
  - "Iguana": The [Iguanaworks](http://iguanaworks.net/) IR transceiver. This source can support both NEC and RC5 encodings simultaneously.
  - “tvcontroller” : This virtual IR driver is only available on BrightSign built-in products. It reads the IR messages from UART and drives the roIRReceiver object like other IR receivers. See the Examples section.
- `encodings`: An array indicating the required encodings.
  - "NEC"
  - "RC5" (supported on the Iguanaworks IR transceiver only)

NEC codes are expressed in 24 bits:

- Bits 0-7: Button code
- Bits 8-23: Manufacturer code

:::hint{type="info"}
If the manufacturer code is zero, then the code is considered to be intended for the Roku SoundBridge remote control.
:::

The *roIRReceiver* object can generate the following events:

- *roIRDownEvent*: Generates when a button is pressed.
- *roIRRepeatEvent*: Generates when a button repeats.
- *roIRUpEvent* (Iguanaworks IR transceiver only): Generates when a button is released

## ifUserData

### SetUserData(user\_data As Object)

Sets the user data that will be returned when events are raised.

### GetUserData() As Object

Returns the user data that has previously been set via `SetUserData()`. It will return `Invalid` if no data has been set.

## ifMessagePort

### SetPort(port As roMessagePort)

Specifies the port that will receive events generated by the *roIRReceiver* instance.

## Examples

### Connecting a USB-C port to an IR receiver

:::hint{type="info"}
Series 4 and 5 LS players (LS424, LS425, and LS445) are the only models that support IR input on the Type C connector. A special cable is also required: either an adapter (3.5mm plug to 3.5mm socket crossover), or custom all-in-one cable (LiteOn PN 306300009327).
:::

```text
'2-3-23 - V1.12 Test IR input, output to system log
 
Sub Main()
scriptlog = CreateObject("roSystemLog")   'display messages in system log
msgPort = CreateObject("roMessagePort")
gpioPort = CreateObject("roGpioControlPort")
gpioPort.SetPort(msgPort)
  
configIR = CreateObject("roAssociativeArray")
'Built-in IR via usb c
configIR.source = "TypeC"
configIR.encodings = CreateObject("roArray", 1, false)
configIR.encodings[0] = "NEC"
IRRecep = CreateObject("roIRReceiver", configIR)
  
if (type(IRRecep) = "roIRReceiver") then
    IRRecep.SetPort(msgPort)
    scriptlog.SendLine(" @@@@ Please press a button on remote control to display IR code... ")
else if IRRecep = invalid then
    scriptlog.SendLine(" @@@@ IR receiver not detected, Please connect IR receiver and reboot player... ")
end if
  
Eventloop(msgport)
 
End Sub
 
 
Sub Eventloop(msgport as object)
    scriptlog = CreateObject("roSystemLog")   'display messages in system log
    while true
        event = wait(0, msgPort)
        scriptlog.SendLine("@@@@ Received event"+ type(event))  
        if (type(event) = "roIRDownEvent") then       
                IrData$ = stri(event)
                scriptlog.SendLine(" @@@@ "+IrData$)
        end If    
    End while
end Sub
```

### Creating a tvcontoller IR Receiver

```text
configIR = CreateObject("roAssociativeArray")
'tvcontroller IR type
configIR.source = "tvcontroller"
configIR.encodings = CreateObject("roArray", 0, false)
IRRecep = CreateObject("roIRReceiver", configIR)
```

