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            ->|
  +------------+---------------------------+
