In accordance to our aims, which are mostly being simple and being as lightweight as possible, we first tried to use the supplied IR receiver from the DVB-S box as a user interface. For the DVB-S2 card, the TechniSat, the remote receiver was recognized right away, without any customization of the Kernel or any configuration files. The next step was to find a mapping of each button on the remote, which was very easy, since a ‘keytable’ is available directly in the Kernel. We then converted the table into a yaml file that maps each key code into a human-readable label. For instance 0x0a20 means KEY_CHANNELUP.
The next step was to build a simple prototype to test our assumptions. As soon as the USB device is initialized, a new special character device will be available, for instance /dev/input/event2. To avoid any dependencies, we used the raw device directly without any wrapper libraries to retrieve the emitted key codes.
The integration into gnutv would lead to some architectural changes which is why we decided to test the remote support in the front-end first. As a first solution, a simple callback was used to bind the key code to a dedicated function, e.g. VOLUP increases the volume, VOLDOWN decreases it and CHANNELUP, CHANNELDOWN switches to the next or previous channel.
Since we did not encounter any major problems, the next step is design a simple user interface based on the remote receiver which is usually provided with a DVB-S device. However, such a design is not limited to IR receivers and can be used with any remote control device that uses a /dev/input/event-like interface.
The integration of additional data, for instance EPG data, could be easily done with an online screen display (OSD) which uses directly the framebuffer. This technology could be also used to provide simple program menus and a basic navigation. But because our aim is to provide a working prototype as soon as possible, this feature is rated lower on our to-do list.