
{"id":10088,"date":"2024-05-14T07:39:31","date_gmt":"2024-05-14T07:39:31","guid":{"rendered":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/"},"modified":"2025-03-25T05:18:37","modified_gmt":"2025-03-25T05:18:37","slug":"remote_controls_architecture","status":"publish","type":"page","link":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/","title":{"rendered":"Remote Controls Architecture"},"content":{"rendered":"<p><!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/REC-html40\/loose.dtd\"><br \/>\n <html><body><\/p>\n<div class=\"contentLayout2\">\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n<div class=\"toc-macro client-side-toc-macro conf-macro output-block\" data-headerelements=\"H1\" data-hasbody=\"false\" data-macro-name=\"toc\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n\n\n<h2 class=\"wp-block-heading wp-main-header\"><span>Architecture Overview<\/span><\/h2>\n\n\n<p><span>An overall functional diagram of a remote-control unit is as depicted below. RCU Classification is mostly based on its connectivity feature.<\/span><\/p>\n<p><a class=\"lightboxcaller-image\" href=\"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/Architecture.png\"><\/a><img decoding=\"async\" src=\"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/Architecture.png\" alt=\"Architecture\"><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n<hr>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n<h3 class=\"wp-sub-header\">Software Architecture<\/h3>\n<p>Below diagram details the software architecture of a User Input from an RCU in RDK stack.<\/p>\n<p>In general, RCU receiver at the STB\/TV abstracts the input signal from protocol level and with the help of a key-map the driver converts received key code to Linux standard key code which shall be available as input data. Essos along with RDK Shell makes this input available to Application layer. Essos\/ RDK Shell supports key intercepting feature which is optional to introduce another key-mapping specifically for UI or application layer. IR keymapping in the IR Manager application involves receiving and distributing IR signals via the IARM Bus. It publishes events with key code and type information for other applications to utilize, alongside RPC methods for configuring repeat key <span class=\"inline-comment-marker\" data-ref=\"a8fd3114-f128-4afd-af52-4241a997d089\">intervals<\/span>.<\/p>\n<\/p>\n<p><a class=\"lightboxcaller-image\" href=\"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/Software%20Architecture.png\"><\/a><img decoding=\"async\" src=\"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/Software%20Architecture.png\" alt=\"Software Architecture\"><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n<hr>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n<h3 class=\"wp-sub-header\">Remote Details<\/h3>\n<h3 id=\"RemoteControlsArchitecture-BLE\/BTRCUUsecaseSequenceDiagram\">BLE\/BT RCU Use case Sequence Diagram<\/h3>\n<p><a class=\"lightboxcaller-image\" href=\"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/BLEBT_RCU_Use_case_Sequence.png\"><\/a><img decoding=\"async\" src=\"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/BLEBT_RCU_Use_case_Sequence.png\" alt=\"BLE BT RCU_Use_case_Sequence\"><\/p>\n<h3 id=\"RemoteControlsArchitecture-Key-Maps\">Key-Maps<\/h3>\n<h4 id=\"RemoteControlsArchitecture-Key-mapselectionbasedonIRRCUmodel\">Key-map selection based on IR RCU model<\/h4>\n<ul>\n<li>Single IR RCU specific key-map can be added in Linux device tree or pre-configured key maps for various supported RCUs can be activated in runtime based on RCU detected by device driver. Remote configuration utility shall check the factory code being received and based on that it selects the pre-configured key-map in memory. Bluetooth RCU requires HID support enabled in Kernel and the Linux key map shall be applicable for it.<\/li>\n<li>Standard Linux key codes are handled through RDK Shell and are propagated further without alteration in the system. Other key codes are processed by RDK Shell&rsquo;s key-map before Applications receives it via Essos\/RDK Shell.<\/li>\n<\/ul>\n<h4 id=\"RemoteControlsArchitecture-Applicationspecifickeymaps\"><span>Application specific key maps<\/span><\/h4>\n<ul>\n<li>This allow the application to modify the behavior on user inputs to favor user experience. OTT applications such as YouTube, Netflix, Amazon Prime etc implement app specific key action mappings in its process environment with the help of device porting layer.<\/li>\n<\/ul>\n<h3 id=\"RemoteControlsArchitecture-SpecialFeatures\">Special Features<\/h3>\n<h4 id=\"RemoteControlsArchitecture-Wake-Upfrompowersavingmode\">Wake-Up from power saving mode<\/h4>\n<ul>\n<li>STB or RCU can be in power saving mode. This section focuses mainly on STB power saving mode.<\/li>\n<li>STB shall be able to wake up from power saving mode upon special key action on RCU that may be based on reception of a magic packet. This magic packet implementation and related user experience design is out of scope of RDK stack.<\/li>\n<\/ul>\n<h3 id=\"RemoteControlsArchitecture-Hotkeys-dedicatedkeysforOTTApplications\">Hotkeys &#8211; dedicated keys for OTT Applications<\/h3>\n<ul>\n<li>Special or App dedicated keys are mapped in the UI and UI shall be managing respective App launch which requires Application to register listener for the same key with RDK Shell. On detection of such key-code, RDK Shell shall send that to expected listener and that application shall trigger further actions defined for handling based on the use-case.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n<hr>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n\n\n<h2 class=\"wp-block-heading wp-main-header\"><strong>How to integrate a new remote control device to an accelerator?<\/strong><\/h2>\n\n\n<h3 id=\"RemoteControlsArchitecture-IRRCUReceiverDriverandrespectivekeymapintegration\">IR RCU Receiver Driver and respective key map integration<\/h3>\n<p>RCU specific factory code based key map for mapping against Linux key codes shall be integrated either in device-tree or using user space drivers or with the help of similar functionality having components.<\/p>\n<h3 id=\"RemoteControlsArchitecture-SpecifickeymapintegrationatRDKShellkeymap\">Specific key map integration at RDK Shell key map<\/h3>\n<p>RCU specific special key and its modifier configuration shall be integrated at RDK Shell using RDK Shell key-map.<\/p>\n<p>RDK Shell key-map can be added via Thunder using following environment variable.<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">RDKSHELL_KEYMAP_FILE=\/etc\/rdkshell_keymapping.json<\/pre>\n<\/div>\n<\/div>\n<p><span>Sample format of RDK Shell key-map<\/span><\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{\n&nbsp; \"keyMappings\": [\n&nbsp; &nbsp; { \"keyCode\": value, \"mapped\": { \"keyCode\": value, \"modifiers\": [\"ctrl\"] }},\n&nbsp; &nbsp; { \"keyCode\": value, \"mapped\": { \"keyCode\": value, \"modifiers\": [] }}\n&nbsp; ]\n}<\/pre>\n<\/div>\n<\/div>\n<h3 id=\"RemoteControlsArchitecture-Wake-uppacketandwake-uptriggermechanismintegration\"><span>Wake-up packet and wake-up trigger mechanism integration<\/span><\/h3>\n<p>Integration detail and scope is purely abstracted to RCU manufacturer. STB hardware power management and Linux power domain options shall be considered while designing the wake-up trigger mechanism.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n<hr>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"columnLayout single\" data-layout=\"single\">\n<div class=\"cell normal\" data-type=\"normal\">\n<div class=\"innerCell\">\n<p><strong>How to integrate a pre-certified remote to your accelerator?<\/strong><\/p>\n<p>The pre-certified remote controls are expected to work off the shelf without any further modification. The engineering activities in this regards are in progress, and it&#8217;s expected to be published soon to the community. For more updates, please watch this page.<\/p>\n<hr>\n\n\n<h2 class=\"wp-block-heading wp-main-header\"><strong style=\"font-size: 24.0px;letter-spacing: -0.01em;\">Acronyms<\/strong><\/h2>\n\n\n<div class=\"table-wrap\">\n\n\n<table class=\"relative-table wrapped confluenceTable\"><colgroup><col style=\"width: 51.5748%;\"><col style=\"width: 48.4252%;\"><\/colgroup><tbody><tr><th class=\"confluenceTh\"><p><strong>Acronym<\/strong><\/p><\/th><th class=\"confluenceTh\"><p>Description<\/p><\/th><\/tr><tr><td class=\"confluenceTd\"><p>BLE\/BT<\/p><\/td><td class=\"confluenceTd\"><p>Bluetooth Low Energy\/ Bluetooth<\/p><\/td><\/tr><tr><td class=\"confluenceTd\"><p>HID<\/p><\/td><td class=\"confluenceTd\"><p>Human Interface Device Profile<\/p><\/td><\/tr><tr><td class=\"confluenceTd\"><p>IR<\/p><\/td><td class=\"confluenceTd\"><p>Infra-Red<\/p><\/td><\/tr><tr><td class=\"confluenceTd\"><p>OTA<\/p><\/td><td class=\"confluenceTd\"><p>Over The Air<\/p><\/td><\/tr><tr><td class=\"confluenceTd\"><p>OTT<\/p><\/td><td class=\"confluenceTd\"><p>Over The Top<\/p><\/td><\/tr><tr><td class=\"confluenceTd\"><p>RCU<\/p><\/td><td class=\"confluenceTd\"><p>Remote Control Unit<\/p><\/td><\/tr><tr><td class=\"confluenceTd\"><p>STB<\/p><\/td><td class=\"confluenceTd\"><p>Set Top Box<\/p><\/td><\/tr><tr><td class=\"confluenceTd\"><p>UI<\/p><\/td><td class=\"confluenceTd\"><p>User Interface (Graphical)<\/p><\/td><\/tr><\/tbody><\/table>\n\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><\/body><\/html><\/p>","protected":false},"excerpt":{"rendered":"<p>Architecture Overview An overall functional diagram of a remote-control unit is as depicted below. RCU [&hellip;]<\/p>\n","protected":false},"author":28,"featured_media":0,"parent":207,"menu_order":10,"comment_status":"open","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"class_list":["post-10088","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Remote Controls Architecture - RDK Documentation Portal | Support<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Remote Controls Architecture - RDK Documentation Portal | Support\" \/>\n<meta property=\"og:description\" content=\"Architecture Overview An overall functional diagram of a remote-control unit is as depicted below. RCU [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/\" \/>\n<meta property=\"og:site_name\" content=\"RDK Documentation Portal | Support\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-25T05:18:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/Architecture.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/\",\"url\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/\",\"name\":\"Remote Controls Architecture - RDK Documentation Portal | Support\",\"isPartOf\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/Architecture.png\",\"datePublished\":\"2024-05-14T07:39:31+00:00\",\"dateModified\":\"2025-03-25T05:18:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/#primaryimage\",\"url\":\"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/Architecture.png\",\"contentUrl\":\"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/Architecture.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/developer.rdkcentral.com\/support\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Support\",\"item\":\"https:\/\/developer.rdkcentral.com\/support\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Articles\",\"item\":\"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Remote Controls Architecture\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/developer.rdkcentral.com\/support\/#website\",\"url\":\"https:\/\/developer.rdkcentral.com\/support\/\",\"name\":\"RDK Documentation Portal | Support\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/developer.rdkcentral.com\/support\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Remote Controls Architecture - RDK Documentation Portal | Support","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/","og_locale":"en_US","og_type":"article","og_title":"Remote Controls Architecture - RDK Documentation Portal | Support","og_description":"Architecture Overview An overall functional diagram of a remote-control unit is as depicted below. RCU [&hellip;]","og_url":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/","og_site_name":"RDK Documentation Portal | Support","article_modified_time":"2025-03-25T05:18:37+00:00","og_image":[{"url":"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/Architecture.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/","url":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/","name":"Remote Controls Architecture - RDK Documentation Portal | Support","isPartOf":{"@id":"https:\/\/developer.rdkcentral.com\/support\/#website"},"primaryImageOfPage":{"@id":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/#primaryimage"},"image":{"@id":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/#primaryimage"},"thumbnailUrl":"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/Architecture.png","datePublished":"2024-05-14T07:39:31+00:00","dateModified":"2025-03-25T05:18:37+00:00","breadcrumb":{"@id":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/#primaryimage","url":"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/Architecture.png","contentUrl":"https:\/\/developer.rdkcentral.com\/wp-content\/uploads\/sites\/21\/2024\/05\/Architecture.png"},{"@type":"BreadcrumbList","@id":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/remote_controls_architecture\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/developer.rdkcentral.com\/support\/"},{"@type":"ListItem","position":2,"name":"Support","item":"https:\/\/developer.rdkcentral.com\/support\/"},{"@type":"ListItem","position":3,"name":"Articles","item":"https:\/\/developer.rdkcentral.com\/support\/support\/articles\/"},{"@type":"ListItem","position":4,"name":"Remote Controls Architecture"}]},{"@type":"WebSite","@id":"https:\/\/developer.rdkcentral.com\/support\/#website","url":"https:\/\/developer.rdkcentral.com\/support\/","name":"RDK Documentation Portal | Support","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/developer.rdkcentral.com\/support\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/pages\/10088","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/comments?post=10088"}],"version-history":[{"count":7,"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/pages\/10088\/revisions"}],"predecessor-version":[{"id":10262,"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/pages\/10088\/revisions\/10262"}],"up":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/pages\/207"}],"wp:attachment":[{"href":"https:\/\/developer.rdkcentral.com\/support\/wp-json\/wp\/v2\/media?parent=10088"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}