Version: 1.0
Status: ⚫⚫⚫
RemoteControl plugin for Thunder framework.
This document describes purpose and functionality of the RemoteControl plugin. It includes detailed specification about its configuration, methods and properties as well as sent notifications.
All identifiers of the interfaces described in this document are case-sensitive. Thus, unless stated otherwise, all keywords, entities, properties, relations and actions should be treated as such.
Acronyms, Abbreviations and Terms
The table below provides and overview of acronyms used in this document and their definitions.
Acronym
Description
API
Application Programming Interface
HTTP
Hypertext Transfer Protocol
JSON
JavaScript Object Notation; a data interchange format
JSON-RPC
A remote procedure call protocol encoded in JSON
The table below provides and overview of terms and abbreviations used in this document and their definitions.
Term
Description
callsign
The name given to an instance of a plugin. One plugin can be instantiated multiple times, but each instance the instance name, callsign, must be unique.
Ref ID
Description
HTTP
HTTP specification
JSON-RPC
JSON-RPC 2.0 specification
JSON
JSON specification
Thunder
Thunder API Reference
The RemoteControl plugin provides user-input functionality from various key-code sources (e.g. STB RC).
The plugin is designed to be loaded and executed within the Thunder framework. For more information about the framework refer to [Thunder ].
The table below lists configuration options of the plugin.
Name
Type
M/O
Description
callsign
string
mandatory
Plugin instance name (default: RemoteControl )
classname
string
mandatory
Class name: RemoteControl
locator
string
mandatory
Library name: libThunderRemoteControl.so
startmode
string
mandatory
Determines in which state the plugin should be moved to at startup of the framework
configuration
object
optional
...
configuration?.mapfile
string
optional
Map File
configuration?.postlookupfile
string
optional
PostLookup File
configuration?.passon
boolean
optional
Enable passon
configuration?.repeatstart
integer
optional
Maximum number of repeats
configuration?.repeatinterval
integer
optional
Maximum duration between repeats
configuration?.releasetimeout
integer
optional
Release timeout
configuration?.devices
array
optional
List of devices
configuration?.devices[#]
object
mandatory
...
configuration?.devices[#]?.name
string
optional
Name
configuration?.devices[#]?.mapfile
string
optional
Map File
configuration?.devices[#]?.passon
boolean
optional
Enable passon
configuration?.devices[#]?.settings
string
optional
Settings
configuration?.virtuals
array
optional
List of virtuals
configuration?.virtuals[#]
object
mandatory
...
configuration?.virtuals[#]?.name
string
optional
Name
configuration?.virtuals[#]?.mapfile
string
optional
Map File
configuration?.virtuals[#]?.passon
boolean
optional
Enable passon
configuration?.virtuals[#]?.settings
string
optional
Settings
configuration?.links
array
optional
List of Links
configuration?.links[#]
object
mandatory
...
configuration?.links[#]?.name
string
optional
Name
configuration?.links[#]?.mapfile
string
optional
Map File
This plugin implements the following interfaces:
The following methods are provided by the RemoteControl plugin:
Built-in methods:
Method
Description
versions
Retrieves a list of JSON-RPC interfaces offered by this service
exists
Checks if a JSON-RPC method or property exists
register
Registers for an asynchronous JSON-RPC notification
unregister
Unregisters from an asynchronous JSON-RPC notification
RemoteControl interface methods:
Method
Description
key
Gets key code details
send
Sends a key to a device (press and release)
press
Presses a key on a device
release
Releases a key on a device
add
Adds a key code to the key map
modify
Modifies a key code in the key map
delete
Deletes a key code from the key map
load
Re-loads the device's key map from persistent memory
save
Saves the device's key map into persistent path
pair
Activates pairing mode of a device
unpair
Unpairs a device
Retrieves a list of JSON-RPC interfaces offered by this service.
This method takes no parameters.
Name
Type
M/O
Description
result
array
mandatory
A list ofsinterfaces with their version numbersArray length must be at most 255 elements.
result[#]
object
mandatory
...
result[#].name
string
mandatory
Name of the interface
result[#].major
integer
mandatory
Major part of version number
result[#].minor
integer
mandatory
Minor part of version number
result[#].patch
integer
mandatory
Patch part of version version number
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.versions"
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : [
{
"name" : " JMyInterface" ,
"major" : 1 ,
"minor" : 0 ,
"patch" : 0
}
]
}
Checks if a JSON-RPC method or property exists.
This method will return True for the following methods/properties: devices, device, versions, exists, register, unregister, key, send, press, release, add, modify, delete, load, save, pair, unpair .
Name
Type
M/O
Description
params
object
mandatory
...
params.method
string
mandatory
Name of the method or property to look up
Name
Type
M/O
Description
result
boolean
mandatory
Denotes if the method exists or not
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.exists" ,
"params" : {
"method" : " devices"
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : false
}
Registers for an asynchronous JSON-RPC notification.
This method supports the following event names: keypressed .
Name
Type
M/O
Description
params
object
mandatory
...
params.event
string
mandatory
Name of the notification to register for
params.id
string
mandatory
Client identifier
Name
Type
M/O
Description
result
null
mandatory
Always null
Message
Description
ERROR_FAILED_REGISTERED
Failed to register for the notification (e.g. already registered)
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.register" ,
"params" : {
"event" : " keypressed" ,
"id" : " myapp"
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : null
}
Unregisters from an asynchronous JSON-RPC notification.
This method supports the following event names: keypressed .
Name
Type
M/O
Description
params
object
mandatory
...
params.event
string
mandatory
Name of the notification to register for
params.id
string
mandatory
Client identifier
Name
Type
M/O
Description
result
null
mandatory
Always null
Message
Description
ERROR_FAILED_UNREGISTERED
Failed to unregister from the notification (e.g. not yet registered)
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.unregister" ,
"params" : {
"event" : " keypressed" ,
"id" : " myapp"
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : null
}
Gets key code details.
Name
Type
M/O
Description
params
object
mandatory
...
params.device
string
mandatory
Device name
params.code
integer
mandatory
Key code
Name
Type
M/O
Description
result
object
mandatory
...
result.code
integer
mandatory
Key code
result.key
integer
mandatory
Key ingest value
result?.modifiers
array
optional
List of key modifiers
result?.modifiers[#]
string
mandatory
Key modifier (must be one of the following: leftalt, leftctrl, leftshift, rightalt, rightctrl, rightshift )
Message
Description
ERROR_UNKNOWN_KEY
Key does not exist
ERROR_UNAVAILABLE
Unknown device
ERROR_BAD_REQUEST
Bad JSON param data format
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.key" ,
"params" : {
"device" : " DevInput" ,
"code" : 1
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : {
"code" : 1 ,
"key" : 103 ,
"modifiers" : [
" leftshift"
]
}
}
Sends a key to a device (press and release).
Name
Type
M/O
Description
params
object
mandatory
...
params.device
string
mandatory
Device name
params.code
integer
mandatory
Key code
Name
Type
M/O
Description
result
null
mandatory
Always null (default: None )
Message
Description
ERROR_UNAVAILABLE
Unknown device
ERROR_BAD_REQUEST
Bad JSON param data format
ERROR_UNKNOWN_KEY
Key does not exist
ERROR_UNKNOWN_TABLE
Key map table does not exist
ERROR_ALREADY_RELEASED
Key is already released
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.send" ,
"params" : {
"device" : " DevInput" ,
"code" : 1
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : null
}
Presses a key on a device.
Name
Type
M/O
Description
params
object
mandatory
...
params.device
string
mandatory
Device name
params.code
integer
mandatory
Key code
Name
Type
M/O
Description
result
null
mandatory
Always null (default: None )
Message
Description
ERROR_UNAVAILABLE
Unknown device
ERROR_BAD_REQUEST
Bad JSON param data format
ERROR_UNKNOWN_KEY
Key does not exist
ERROR_UNKNOWN_TABLE
Key map table does not exist
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.press" ,
"params" : {
"device" : " DevInput" ,
"code" : 1
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : null
}
Releases a key on a device.
Name
Type
M/O
Description
params
object
mandatory
...
params.device
string
mandatory
Device name
params.code
integer
mandatory
Key code
Name
Type
M/O
Description
result
null
mandatory
Always null (default: None )
Message
Description
ERROR_UNAVAILABLE
Unknown device
ERROR_BAD_REQUEST
Bad JSON param data format
ERROR_UNKNOWN_KEY
Key does not exist
ERROR_UNKNOWN_TABLE
Key map table does not exist
ERROR_ALREADY_RELEASED
Key is already released
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.release" ,
"params" : {
"device" : " DevInput" ,
"code" : 1
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : null
}
Adds a key code to the key map.
Name
Type
M/O
Description
params
object
mandatory
...
params.device
string
mandatory
Device name
params.code
integer
mandatory
Key code
params.key
integer
mandatory
Key ingest value
params?.modifiers
array
optional
List of key modifiers
params?.modifiers[#]
string
mandatory
Key modifier (must be one of the following: leftalt, leftctrl, leftshift, rightalt, rightctrl, rightshift )
Name
Type
M/O
Description
result
null
mandatory
Always null (default: None )
Message
Description
ERROR_UNAVAILABLE
Unknown device
ERROR_BAD_REQUEST
Bad JSON param data format
ERROR_UNKNOWN_KEY
Code already exists
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.add" ,
"params" : {
"device" : " DevInput" ,
"code" : 1 ,
"key" : 103 ,
"modifiers" : [
" leftshift"
]
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : null
}
Modifies a key code in the key map.
Name
Type
M/O
Description
params
object
mandatory
...
params.device
string
mandatory
Device name
params.code
integer
mandatory
Key code
params.key
integer
mandatory
Key ingest value
params?.modifiers
array
optional
List of key modifiers
params?.modifiers[#]
string
mandatory
Key modifier (must be one of the following: leftalt, leftctrl, leftshift, rightalt, rightctrl, rightshift )
Name
Type
M/O
Description
result
null
mandatory
Always null (default: None )
Message
Description
ERROR_UNAVAILABLE
Unknown device
ERROR_BAD_REQUEST
Bad JSON param data format
ERROR_UNKNOWN_KEY
Key does not exist
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.modify" ,
"params" : {
"device" : " DevInput" ,
"code" : 1 ,
"key" : 103 ,
"modifiers" : [
" leftshift"
]
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : null
}
Deletes a key code from the key map.
Name
Type
M/O
Description
params
object
mandatory
...
params.device
string
mandatory
Device name
params.code
integer
mandatory
Key code
Name
Type
M/O
Description
result
null
mandatory
Always null (default: None )
Message
Description
ERROR_UNKNOWN_KEY
Key does not exist
ERROR_UNAVAILABLE
Unknown device
ERROR_BAD_REQUEST
Bad JSON param data format
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.delete" ,
"params" : {
"device" : " DevInput" ,
"code" : 1
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : null
}
Re-loads the device's key map from persistent memory.
Name
Type
M/O
Description
params
object
mandatory
...
params.device
string
mandatory
Device name
Name
Type
M/O
Description
result
null
mandatory
Always null (default: None )
Message
Description
ERROR_UNAVAILABLE
Unknown device
ERROR_GENERAL
File does not exist
ERROR_BAD_REQUEST
Bad JSON param data format
ERROR_ILLEGAL_STATE
Illegal state
ERROR_OPENING_FAILED
Opening failed
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.load" ,
"params" : {
"device" : " DevInput"
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : null
}
Saves the device's key map into persistent path.
Name
Type
M/O
Description
params
object
mandatory
...
params.device
string
mandatory
Device name
Name
Type
M/O
Description
result
null
mandatory
Always null (default: None )
Message
Description
ERROR_UNAVAILABLE
Unknown device
ERROR_GENERAL
File is not created
ERROR_BAD_REQUEST
Bad JSON param data format
ERROR_ILLEGAL_STATE
Illegal state
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.save" ,
"params" : {
"device" : " DevInput"
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : null
}
Activates pairing mode of a device.
Name
Type
M/O
Description
params
object
mandatory
...
params.device
string
mandatory
Device name
Name
Type
M/O
Description
result
null
mandatory
Always null (default: None )
Message
Description
ERROR_UNAVAILABLE
Unknown device
ERROR_GENERAL
Failed to activate pairing
ERROR_BAD_REQUEST
Bad JSON param data format
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.pair" ,
"params" : {
"device" : " DevInput"
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : null
}
Unpairs a device.
Name
Type
M/O
Description
params
object
mandatory
...
params.device
string
mandatory
Device name
params.bindid
string
mandatory
Binding ID
Name
Type
M/O
Description
result
null
mandatory
Always null (default: None )
Message
Description
ERROR_UNAVAILABLE
Unknown device
ERROR_GENERAL
Failed to unpair the device
ERROR_BAD_REQUEST
Bad JSON param data format
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.unpair" ,
"params" : {
"device" : " DevInput" ,
"bindid" : " id"
}
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : null
}
The following properties are provided by the RemoteControl plugin:
RemoteControl interface properties:
Property
R/W
Description
devices
read-only
Names of all available devices
device
read-only
Metadata of a specific device
Provides access to the names of all available devices.
This property is read-only .
Name
Type
M/O
Description
(property)
array
mandatory
Names of all available devices
(property)[#]
string
mandatory
Device name
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.devices"
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : [
" Web"
]
}
Provides access to the metadata of a specific device.
This property is read-only .
The device parameter shall be passed as the index to the property, i.e. device@<device>.
Name
Type
M/O
Description
device
string
mandatory
...
Name
Type
M/O
Description
(property)
object
mandatory
Metadata of a specific device
(property).metadata
string
mandatory
Device metadata
Message
Description
ERROR_GENERAL
Metadata not supported on a virtual device
ERROR_UNAVAILABLE
Unknown device
ERROR_BAD_REQUEST
Bad JSON param data format
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.device@DevInput"
}
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"result" : {
"metadata" : " It is based on protocol A"
}
}
Notifications are autonomous events triggered by the internals of the implementation and broadcasted via JSON-RPC to all registered observers. Refer to [Thunder ] for information on how to register for a notification.
The following events are provided by the RemoteControl plugin:
RemoteControl interface events:
Notification
Description
keypressed
Notifies of a key press/release action
Notifies of a key press/release action.
The key code parameter shall be passed within the id parameter to the register call, i.e. <key code>.<client-id>. This registration syntax is deprecated and will be changed in the next major release.
Name
Type
M/O
Description
params
object
mandatory
...
params.pressed
boolean
mandatory
Denotes if the key was pressed (true) or released (false)
{
"jsonrpc" : " 2.0" ,
"id" : 42 ,
"method" : " RemoteControl.1.register" ,
"params" : {
"event" : " keypressed" ,
"id" : " 42.myid"
}
}
{
"jsonrpc" : " 2.0" ,
"method" : " 42.myid.keypressed" ,
"params" : {
"pressed" : false
}
}
The client ID parameter is passed within the notification designator, i.e. <key code>.<client-id>.keypressed.
The key code parameter is passed within the notification designator, i.e. <key code>.<client-id>.keypressed. This syntax is deprecated.