RDK Resources
[*RDK Preferred*]
Code Management Facility
RDK Forums
[RDK Conferences]
RDK Support
Archives
Papers & Presentations Archive
RDK Services are the RDK components implemented as the Thunder Nano services. RDK services are the services that are developed based on the Thunder (WPE) Framework. Services each other or a particular service can be controlled through JSON RPC commands and it has a web-based controller UI.
The graphics UI services like WebKit Browser and so on are run on top of RDK Shell. RDK Shell is a native component that gives the Wayland composition with application management.
For the Integration of RDK Services on Generic RDK image, below are the important components
The links are given here provide the instruction to generate RDK Image for Media Client and Media Gateway through a Yocto 2.2 (Morty) based build framework and also contain the instruction to flash the images to a micro SD card. These instructions are made for the execution of the RDK media stack on Raspberrypi 3 B+ Model.
User Interface involves graphics display on TV to show the app launched on the box and a controller UI that can be launched from the host machine's web browser to control all RDK services remotely.
SwitcherApp is a lightning framework based JS application that launches on a WebKit Browser instance. The URL and other parameters of this WebKit Browser instance can be controller from the ResidentApp service on controller UI (from Host machine's web browser).
SwitcherApp URL: https://px-apps.sys.comcast.net/lightning_apps/SwitcherApp/dist/index.html
Note: App's can be navigated through a Keyboard or an IR (especially Xfinity) remote connected to the RPi
Metrological's App Functionality
Controller UI is a web UI that can be launched from a host machine's (machine under the same network where RPi resides) browser. This UI can be loaded with the RPi box's IP address with port number 9998.
URL: http://<Rpi's IP address>:9998
Controller: List of plugins
In the Controller tab, any plugins can be enabled or disabled. On loading the controller UI initially, it loads the Controller tab with all possible services with the enable or disable status.
ResidentApp Control
Function | Request | Response | Remarks |
---|---|---|---|
get Screen Resolution |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.getScreenResolution" , "params" :{ }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : { "w" : 1920 , "h" : 1080 } } | |
set Screen Resolution |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.setScreenResolution" , "params" :{ "w" : 1920 , "h" : 1080 }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : {} } | |
launch Application |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.launchApplication" , "params" :{ "client" : "appName" , "uri" : "testapp" , "mimeType" : "application/native" }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : {} } | |
suspend Application |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.suspendApplication" , "params" :{ "client" : "Cobalt" }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : {} } | |
resume Application |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.resumeApplication" , "params" :{ "client" : "Cobalt" }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : {} } | |
get Clients |
"jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.getClients" , "params" :{ }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : { "clients" : [ "ResidentApp" , "org.rdk.RDKBrowser2" ]} } | The below functionality will be succeeded only to the clients listed in this response |
get Z-Order |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.getZOrder" , "params" :{ }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : { "clients" : [ "ResidentApp" , "org.rdk.RDKBrowser2" ]} } | |
Move to Front | curl 'http://127.0.0.1:9998/jsonrpc' -d ' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : {} } | client argument should be the exact name of the graphics UI service |
Move to Back | curl 'http://127.0.0.1:9998/jsonrpc' -d ' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : {} } | |
move Behind |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" : {} } | |
set Focus |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" : {} } | |
get Bounds |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.getBounds" , "params" :{ "client" : "ResidentApp" }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : { "x" : 0 , "y" : 0 , "w" : 600 , "h" : 400 } } | |
set Bounds |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.setBounds" , "params" :{ "client" : "WebKitBrowser" , "x" : 0 , "y" : 0 , "w" : 600 , "h" : 400 }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : {} } | |
get Visibility |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.getVisibility" , "params" :{ "client" : "ResidentApp" }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : { "visible" : true } } | |
set Visibility |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" : {} } | |
get Opacity |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.getOpacity" , "params" :{ "client" : "ResidentApp" }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : { "opacity" : 100 } } | |
set Opacity |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.setOpacity" , "params" :{ "client" : "ResidentApp" , "opacity" : 100 }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : {} } | |
get Scale |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.getScale" , "params" :{ "client" : "ResidentApp" }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : { "sx" : 1.5 , "sy" : 1.5 } } | |
set Scale |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.setScale" , "params" :{ "client" : "ResidentApp" , "sx" : 1.5 , "sy" : 1.5 }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : {} } | |
kill |
{ "jsonrpc" : "2.0" , "id" : 3 , "method" : "org.rdk.RDKShell.1.kill" , "params" :{ "client" : "WebKitBrowser " }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" : {} } |
Note: The above functions are referred from the RDK Service's RDK Shell wiki page
Prerequisite: This service has to be enabled from the controller UI to proceed for the checking of its functions
Function | Request | Response | Remarks |
---|---|---|---|
get Interfaces | curl http://localhost:9998/jsonrpc -d '{"jsonrpc":"2.0", "id":3, "method":"org.rdk.Network.1.getInterfaces", "params":{}}' |
| |
is Interface Enabled |
|
| |
Enable Interface |
|
| |
set Default Interface |
|
| |
get Default Interface |
|
| |
get IP for default interface |
|
| |
ping |
|
}} | |
get Named Endpoints |
|
| |
ping to named Endpoint |
|
}} | |
trace |
|
}} | |
trace a named Endpoint |
|
}} | |
get IP Settings |
|
} } | |
set IP Settings |
|
} } |
Note: The functions are referred from the RDK Service's Network wiki page
Prerequisite: This service has to be enabled from the controller UI to proceed for the checking of its functions
Function | Request | Response | Remarks |
---|---|---|---|
get Current State |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" : { "state" : 2 , "success" : true }} | |
start Scan |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "success" : true }} | incremental can be set to true to get each SSID in different events (mostly used from GUI) |
stop scan |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "success" : true }} | |
get connected SSID |
|
|
Note: The functions are referred from the RDK Service's Wifi wiki page
Prerequisite: This service has to be enabled from the controller UI to proceed for the checking of its functions
Function | Request | Response | Remarks |
---|---|---|---|
enable | curl --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0", "id":"3", "method":"org.rdk.Bluetooth.1.enable"}' http://127.0.0.1:9998/jsonrpc | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
disable | curl --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0", "id":"3", "method":"org.rdk.Bluetooth.1.disable"}' http://127.0.0.1:9998/jsonrpc | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
get Device Name |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "name" : "Xfinity Bluetooth Audio" , "success" : true }} | |
set Device Name |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "success" : true }} | |
is Discoverable |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "discoverable" : false , "success" : true }} | |
set Discoverable |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "success" : true }} | |
start Scan |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "status" : "AVAILABLE" , "success" : true }} | |
stop scan |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "success" : true }} | |
get Discovered Devices |
|
| |
pair |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "success" : true }} | |
get Paired Devices |
|
| |
connect |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "success" : true }} | |
get Connected Devices |
|
| |
unpair |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "success" : true }} | |
disconnect |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "success" : true }} | |
set Audio Stream |
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "success" : true }} | |
get Device Info |
|
| |
get Audio Info |
: "2.0" , "id" : "3" , "method" : "org.rdk.Bluetooth.1.getAudioInfo" , "params" : { "deviceID" : "256168644324480" }}' |
| |
send Audio Playback Command |
{ "jsonrpc" : "2.0" , "id" : "3" , "method" : "org.rdk.Bluetooth.1.sendAudioPlaybackCommand" , "params" : { "deviceID" : "256168644324480" , "command" : "PLAY" }}' | { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "success" : true }} | |
respond To Event |
{ "jsonrpc" : "2.0" , "id" : "3" , "method" : "org.rdk.Bluetooth.1.respondToEvent" , "params" : { "deviceID" : "256168644324480" , "eventType" : "onPairingRequest" , "responseValue" : "ACCEPTED" }}
| { "jsonrpc" : "2.0" , "id" : 3 , "result" :{ "success" : true }} |
Note: The functions are referred from the RDK Service's Bluetooth wiki page
Prerequisite: This service has to be enabled from the controller UI to proceed for the checking of its functions
Function | Request | Response | Remarks |
---|---|---|---|
getConnectedVideoDisplays | curl | {"jsonrpc":"2.0","id":3,"result":{"connectedVideoDisplays":["HDMI0"],"success":true}} | |
getConnectedAudioPorts | curl | {"jsonrpc":"2.0","id":3,"result":{"connectedAudioPorts":["HDMI0"],"success":true}} | |
getSupportedResolutions | curl | {"jsonrpc":"2.0","id":3,"result":{"supportedResolutions":["720p","1080i","1080p60"],"success":true}} | |
getSupportedVideoDisplays | curl | {"jsonrpc":"2.0","id":3,"result":{"supportedVideoDisplays":["HDMI0"],"success":true}} | |
getSupportedTvResolutions | curl | {"jsonrpc":"2.0","id":3,"result":{"supportedTvResolutions":["480i","480p","576i","576p","720p","1080i","1080p"],"success":true}} | |
getSupportedSettopResolutions | curl |
| |
getSupportedAudioPorts | curl --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0", "id":3, "method":"org.rdk.DisplaySettings.1.getSupportedAudioPorts"}' | {"jsonrpc":"2.0","id":3,"result":{"supportedAudioPorts":["HDMI0"],"success":true}} | |
getSupportedAudioModes | curl | {"jsonrpc":"2.0","id":3,"result":{"supportedAudioModes":["STEREO","AUTO (Stereo)"],"success":true}} | |
getZoomSetting | curl | {"jsonrpc":"2.0","id":3,"result":{"zoomSetting":"FULL","success":true}} | |
setZoomSetting | curl | {"jsonrpc":"2.0", "id":3, "result":{"success":true}} | |
getCurrentResolution | curl | {"jsonrpc":"2.0","id":3,"result":{"resolution":"720p","success":true}} | |
setCurrentResolution | curl | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
getSoundMode | curl | {"jsonrpc":"2.0","id":3,"result":{"soundMode":"STEREO","success":true}} | |
setSoundMode | curl | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
readEDID | curl | {"jsonrpc":"2.0","id":3,"result":{"EDID":"AP///////wAQrMLQVEJTMQUdAQOA...","success":true}} | |
readHostEDID | curl | {"jsonrpc":"2.0","id":3,"result":{"EDID":"AP///////wAIbSV0Z0UjARgYAQOAgEh...","success":true}} | |
getActiveInput | curl | {"jsonrpc":"2.0","id":3,"result":{"activeInput":false,"success":true}} | |
getTvHDRSupport | curl | {"jsonrpc":"2.0","id":3,"result":{"supportsHDR":false,"standards":["none"],"success":true}} | |
getSettopHDRSupport | curl | {"jsonrpc":"2.0","id":3,"result":{"supportedSettopResolutions":["720p","1080i","1080p60","2160p30","2160p60"],"success":true}} | |
setVideoPortStatusInStandby | curl | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
getVideoPortStatusInStandby | curl | {"jsonrpc":"2.0","id":3,"result":{"videoPortStatusInStandby":false,"success":true}} | |
getCurrentOutputSettings | curl | {"jsonrpc":"2.0","id":3,"result":{"colorSpace":5,"colorDepth":0,"matrixCoefficients":0,"videoEOTF":0,"success":true}} | |
setVolumeLeveller | curl | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
getVolumeLeveller | curl | {"jsonrpc":"2.0","id":3,"result":{"enable":true,"level":9,"success":true}} | |
setBassEnhancer | curl | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
getBassEnhancer | curl | {"jsonrpc":"2.0","id":3,"result":{"bassEnhancerEnable":true,"success":true}} | |
setSurroundVirtualizer | curl | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
getSurroundVirtualizer | curl | {"jsonrpc":"2.0","id":3,"result":{"enable":true,"boost":90,"success":true}} | |
enableSurroundDecoder | curl | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
isSurroundDecoderEnabled | curl | {"jsonrpc":"2.0","id":3,"result":{"surroundDecoderEnable":true,"success":true}} | |
setDRCMode | curl | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
getDRCMode | curl | {"jsonrpc":"2.0","id":3,"result":{"DRCMode":"line","success":true}} | |
setVolumeLevel | curl | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
getVolumeLevel | curl | {"jsonrpc":"2.0","id":3,"result":{"enable":true,"volumeLevel":50,"success":true}} | |
setMuted | curl | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
getMuted | curl | {"jsonrpc":"2.0","id":3,"result":{"muted":true,"success":true}} | |
getAudioDelay | curl | {"jsonrpc":"2.0","id":3,"result":{"audioDelay":"0","success":true}} | |
setAudioDelay | curl | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
getAudioDelayOffset | curl | {"jsonrpc":"2.0","id":3,"result":{"audioDelayOffset":"0","success":true}} | |
setAudioDelayOffset | curl | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
getSinkAtmosCapability | curl | {"jsonrpc":"2.0","id":3,"result":{"atmos_capability":2,"success":true}} | |
setAudioAtmosOutputMode | curl | {"jsonrpc":"2.0","id":3,"result":{"success":true}} | |
getTVHDRCapabilities | curl | {"jsonrpc":"2.0","id":3,"result":{"capabilities":3,"success":true}} | |
getDefaultResolution | curl | {"jsonrpc":"2.0","id":3,"result":{"defaultResolution":"720p","success":true}} | |
setScartParameter | curl | {"jsonrpc":"2.0","id":3,"result":{"success":false}} |
Note: The functions are referred from the RDK Service's System wiki page
Prerequisite: This service has to be enabled from the controller UI to proceed for the checking of its functions
Function | Request | Response | Remarks |
---|---|---|---|
get Number of Input devices | curl --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0","id":"3","method": "org.rdk.AVInput.1.numberOfInputs"}' http://127.0.0.1:9998/jsonrpc | {"jsonrpc":"2.0","id":3,"result":{"numberOfInputs":0,"message":"Success","success":false}} | RPI doesn't have any input device for basic testing |
current Video mode |
|
| |
is Content Protected | curl --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0","id":"3","method": "org.rdk.AVInput.1.contentProtected"}' | {"jsonrpc":"2.0","id":3,"result":{"isContentProtected":true,"success":true}}} |
Note: The functions mentioned above are referred from the RDK Service's AV Input wiki page
Prerequisite: This service has to be enabled from the controller UI to proceed for the checking of its functions
Function | Request | Response | Remarks |
---|---|---|---|
enable Monitoring | curl --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0", "id":3, "method":"org.rdk.ActivityMonitor.1.enableMonitoring", "params":{"config":[{"appPid":"6860", "memoryThresholdMB":"1", "cpuThresholdPercent":"1", "cpuThresholdSeconds":"1"}], "memoryIntervalSeconds":"0.02", "cpuIntervalSeconds":"0.02"}}' | {"jsonrpc":"2.0", "id":3, "result": {"success":true}} | correct pid to be given |
disable Monitoring | curl --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0", "id":3, "method":"org.rdk.ActivityMonitor.1.disableMonitoring", "params":{}}' | {"jsonrpc":"2.0", "id":3, "result": {"success":true}} | |
get Application Memory Usage | curl --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0", "id":3, "method":"org.rdk.ActivityMonitor.1.getApplicationMemoryUsage", "params":{"pid":6860}}' | {"jsonrpc":"2.0", "id":3, "result": {"applicationMemory":{"appPid":6860,"appName":"WPEProcess","memoryMB":6},"success":true}} | correct Pid to be given |
get All Apps Memory Usage | curl --header "Content-Type: application/json" --request POST --data '{"jsonrpc":"2.0", "id":3, "method":"org.rdk.ActivityMonitor.1.getAllMemoryUsage", "params":{}}' |
|
Note: The functions are referred from the RDK Service's ActivityMonitor wiki page