IVI-shell ========= IVI-shell provides a shell interface for Weston, which maps the GENIVI API (http://www.genivi.org) for In-Vehicle Infotainment as Wayland-Ivi-Extension (http://wiki.projects.genivi.org/index.php/Wayland_IVI_Extension_Design). This module includes two protocols: ivi-application (provided by weston), and ivi-controller (provided by GENIVI's wayland-ivi-extension). In IVI use case, the client creates and destroys a surface using a unique ID acquired from the ivi-application protocol. On the other hand, a controller (such as the HMI Controller) manages a set of properties (visibility, position, size, etc.), created using unique IDs provided by the ivi-controller protocol. A Unique ID is necessary to create and control both the ivi-surface and the ivi-layer, however Qt has no API for setting these IDs. The ivi-shell plugin works around this limitation by setting the unique ID via the environment variable QT_IVI_SURFACE_ID, used for both ivi-surface and ivi-layer. If an application needs more than two surfaces, ivi-surface IDs will be incremented automatically. If QT_IVI_SURFACE_ID is not set, ivi-surface and ivi-layer IDs will be generated internally. QT_IVI_SURFACE_ID is a 32 bit value composed of the process ID and the surface ID. Bits 0 to 22 represent the process ID, and bits 23 to 32 represent the surface ID in a process. For example, when the process ID is 0x765 and there are two surfaces, ivi-layer ID is 0x765 and ivi-surface IDs are 0x765 and 0x00400765. +------------+---------------------------+ |31 23|22 0| +------------+---------------------------+ |0000 0000 00|00 0000 0000 0000 0000 0000| |<- ID ->|<- process ID ->| +------------+---------------------------+