Diagram has one semantic issue: the ivi-controller.xml removed and we have ivi-wm.xml instead the ivi-controller.so is still there [图片中的ivi-controller.xml已经被替换为ivi-wm.xml]

图有一个语义问题:去掉了ivi-controller.xml,我们用ivi-wm.xml代替了ivi-controller。所以仍然存在(图片中的ivi-controller.xml已经被替换为ivi-wm.xml]

完整的组件图
完整的组件图,其中蓝色部分是wayland-ivi-extension提供,其他颜色则为wayland以及wayland在linux上的其他组件。
    Layer Manager APIs: three shared libraries to be compatible with IVI Layer Management: http://projects.genivi.org/ivi-layer-management. These internally use ivi-application/ivi-controller protocol. This means developer also directly uses ivi-application/ivi-controller protocol to manage wayland surfaces without Layer Manager APIs.
    ivi-controller: A shared library to export ivi-layout interfaces via ivi-controller protocol.
    ivi-layout inteface: compatible with IVI Layer Management APIs. These internal APIs allow developers to develop an window manager in weston process with IVI Layer Management like APIs.
    HMI Controller: provided as a module which shall be loaded on ivi-shell. This is a reference implementation how to use ivi-layout library. This shall be exclusively used with ivi-controller. In other words, developer shall decide how to implement own window manager with either using ivi-controller.so or ivi-layout interface inside of weston.
    ivi-shell: realize ivi-application protocol and framework to load ivi-controller.so (or hmi-controller) as ivi-module to use ivi-layout interfaces.
Definitions
Wayland IVI Extension is loaded as ivi-module in ivi-shell + Weston. These modules are configured to be loaded by using weston.ini.
Weston will load ivi-shell.so to enable ivi features. ivi-shell.so will load ivi-controller.so which implements server side of ivi-controller.xml protocol.
    IVI Scene    Logical container for multiple screens, layers and surfaces.
    IVI Surface    Represents graphical content of an application. One application can provide several surfaces.
    IVI Layer    Logical container for multiple surfaces usually attached to one ivi screen
    IVI Screen    Logical container for multiple layers usualy corresponds to concrete display
    IVI        In Vehicle Infotainment
    RenderOrder    Logical arrangements of surfaces or layers, first element of the list is on bottom, last element is on top
    IVI Application    client application for ivi. Predefined numeric ID shall be assigned to each ivi application to be identified by HMI Central Controller.
    Applications basically use the wayland core protocol defined by Wayland (e.g connection to display, wl_display and so on) to draw their contents. Weston also supports implementing our own shell which defines management of surfaces. For example, the positioning of a surface can be implemented in the shell. Without a shell, there is no composition of surface in screen. By default, the shell in Weston is "desktop-shell" which supports wl_shell. Wayland IVI Extension uses the ivi-shell to manage surfaces, whose shell protocol is ivi-application.xml. Applications must support the ivi-application protocol to be managed by the HMI central controller with an unique numeric ID.
    ivi controller[edit]   ivi controller is a extension protocol defined in this project wayland-ivi-extension. It exports surface/layer/screen management protocol to make each product scene
    ivi input    ivi-input is enabled when ivi-input.so is added after ivi-controll.so in weston.ini. Without ivi-input, input handling is the same as normal desktop style; a top focused surface will be received when input event. Refer Wayland_IVI_Extension_Design_ivi_input
    HMI Controller/Central Controller    Window Manager which is responsible to controll the composition and input routing
    HMI    Human-Machine Interface

对应源代码

https://github.com/GENIVI/wayland-ivi-extension

Sections in this file describe:
- How to build
- Example applications
- How to testHow to build on different platforms
====================================Pre-requisite:
- Weston
- CMake required (version 2.6 or higher)
- Open GLES and EGL for example applications
- Gtest for the test suiteBuild up
1. Pull the current codebase form the git repoE.g. git clone https://github.com/GENIVI/wayland-ivi-extension.git2. Create a build directoryE.g mkdir build_ivi_extension3. In <build-dir> Generate build system for your platform using CMake.E.g. cd <build-dir>cmake -DCMAKE_TOOLCHAIN_FILE=<your setting *.cmake> ../4. Start the build and installE.g. sudo make installExample applications
====================================Pre-requisite:
- Modify weston.ini to use ivi-shell.soExample:[core]shell=ivi-shell.somodules=ivi-controller.so[ivi-shell]ivi-input-module=ivi-input-controller.so- Set Environmental valuesExample:export XDG_RUNTIME_DIR=/var/run/<your user name>/1000export LD_LIBRARY_PATH=<your installation path>/lib Start-up Weston:Example: <your installation path>/bin/westonStart-up HMI helper:Example: <your installation path>/bin/layer-add-surfaces 1000 1EGLWLMockNavigation:Example: <your installation path>/bin/EGLWLMockNavigationHow to test
====================================
1. Build the testsuite by setting BUILD_ILM_API_TESTS option.Example: cmake -DBUILD_ILM_API_TESTS
2. After starting up Weston run the testsuite.Example: <your installation path>/bin/ivi-layermanagement-api-test


1.最上面本来是两张500*500的图片
2.将第一张图从(10.10)开始截取一个(480*480)大小的图。第二张图不设置,任然500*500. –》surface source region
3.将第一张图放在layer0(500,10)的位置,并且缩放成大小是900*480的大小【由于layer的总大小只有1000*500,所以只能放进去一部分,其余部分丢失】;第二张图未设置从(0,0)位置放置,大小任然是500*500;;;另外将第二张图放入layer1   --》surface destination region
4.放图后的layer内容;将layer1的大小改成从(10,10)开始的480*480大小。 --》layer source region
5.将layer0放入screen0,从screen0的(0,0)开始放置,,将layer0的大小缩放为500*500;screen的大小为500*500;;将layer1的内容放置到screen1,从screen的(10,10)放置,将layer1的内容缩放至480*480;--》layer destination region

需要的工具:

1.layer-add-surface

root@:~# layer-add-surfaces --help-h,  --help                  display this help and exit.-d,  --display-name          name of the display which will be used,e.g.: HDMI-A-1, LVDS1If it is not set, display with highest resolution is used.-l,  --layer-id              id of the used ILM layer. It has to be set-s,  --surface-count         number of surfaces which will be added tothe layer. It has to be set

2.LayerManagerControl

LayerManagerControl
help: supported commands:
add surface <sid> to layer <lid>
analyze surface <surfaceid>
create layer <layerid> <width> <height>
destroy layer <id>
dump screen|surface <id> to <file>
export scene to <filename>
export xtext to <filename> <grammar> <url>
get input device <name> capabilities
get input devices with pointer|keyboard|touch|all
get input focus
get scene|screens|layers|surfaces
get screen|layer|surface <id>
get surface <surfaceid> input acceptance
help
remove surface <sid> from layer <lid>
set layer|surface <id> destination region <x> <y> <w> <h>
set layer|surface <id> opacity <opacity>
set layer|surface <id> source region <x> <y> <w> <h>
set layer|surface <id> visibility <visibility>
set screen|layer <id> render order [<idarray>]
set surface <surfaceid> input acceptance to [<namearray>]
set surface <surfaceid> type <type>
set|unset surfaces [<idarray>] input focus pointer|keyboard|touch|all
test notification layer <layerid>
tree                         //此命令可以告诉你所有的LayerManagerControl的命令
watch layer|surface <idarray>
root@:~# LayerManagerControl tree
help: supported commands:[root]
|--add
|  |--surface
|  |  |--<sid>
|  |  |  |--to
|  |  |  |  |--layer
|  |  |  |  |  |--<lid>*
|--analyze
|  |--surface
|  |  |--<surfaceid>*
|--create
|  |--layer
|  |  |--<layerid>
|  |  |  |--<width>
|  |  |  |  |--<height>*
|--destroy
|  |--layer
|  |  |--<id>*
|--dump
|  |--screen|surface
|  |  |--<id>
|  |  |  |--to
|  |  |  |  |--<file>*
|--export
|  |--scene
|  |  |--to
|  |  |  |--<filename>*
|  |--xtext
|  |  |--to
|  |  |  |--<filename>
|  |  |  |  |--<grammar>
|  |  |  |  |  |--<url>*
|--get
|  |--input
|  |  |--device
|  |  |  |--<name>
|  |  |  |  |--capabilities*
|  |  |--devices
|  |  |  |--with
|  |  |  |  |--pointer|keyboard|touch|all*
|  |  |--focus*
|  |--scene|screens|layers|surfaces*
|  |--screen|layer|surface
|  |  |--<id>*
|  |--surface
|  |  |--<surfaceid>
|  |  |  |--input
|  |  |  |  |--acceptance*
|--help*
|--remove
|  |--surface
|  |  |--<sid>
|  |  |  |--from
|  |  |  |  |--layer
|  |  |  |  |  |--<lid>*
|--set
|  |--layer|surface
|  |  |--<id>
|  |  |  |--destination
|  |  |  |  |--region
|  |  |  |  |  |--<x>
|  |  |  |  |  |  |--<y>
|  |  |  |  |  |  |  |--<w>
|  |  |  |  |  |  |  |  |--<h>*
|  |  |  |--opacity
|  |  |  |  |--<opacity>*
|  |  |  |--source
|  |  |  |  |--region
|  |  |  |  |  |--<x>
|  |  |  |  |  |  |--<y>
|  |  |  |  |  |  |  |--<w>
|  |  |  |  |  |  |  |  |--<h>*
|  |  |  |--visibility
|  |  |  |  |--<visibility>*
|  |--screen|layer
|  |  |--<id>
|  |  |  |--render
|  |  |  |  |--order
|  |  |  |  |  |--[<idarray>]*
|  |--surface
|  |  |--<surfaceid>
|  |  |  |--input
|  |  |  |  |--acceptance
|  |  |  |  |  |--to
|  |  |  |  |  |  |--[<namearray>]*
|  |  |  |--type
|  |  |  |  |--<type>*
|--set|unset
|  |--surfaces
|  |  |--[<idarray>]
|  |  |  |--input
|  |  |  |  |--focus
|  |  |  |  |  |--pointer|keyboard|touch|all*
|--test
|  |--notification
|  |  |--layer
|  |  |  |--<layerid>*
|--tree*
|--watch
|  |--layer|surface
|  |  |--<idarray>*

使用实例

$ layer-add-surface 1 1000&  添加surface
$ export XDG_RUNTIME_DIR=/var/run/user/1000
$ weston &                    //打开weston
$ LayerManagerControl create layer 1000 600 400    //创建layer;id为1000. 宽600.长400
$ LayerManagerControl set layer 1000 render order 10    //为layer1000链接上id为10的surface
$ LayerManagerControl set surface 10 source region 0 0 600 400 //将surface10 的内容从(0,0)开始截取一个600*400的范围
$ LayerManagerControl set surface 10 destination region 0 0 600 400 //将surface截取后的内容放置到layer(0,0)的位置,缩放为600*400的大小
$ LayerManagerControl set screen 0 render order 1000    //将screen0与layer1000链接
$ LayerManagerControl set layer 1000 visibility 1    //将layer1000设置为可见
$ LayerManagerControl set surface 10 visibility 1    //将surface设置为可见

WayLand IVI Extension相关推荐

  1. Linux中OBS在Wayland环境下黑屏只显示鼠标的应对措施

    本文写于2018-02-10.截至到此文完成时,没有已知的方法可以让OBS在Wayland环境下正常工作. 解决方法 放弃使用Wayland,改用X Window 在Wanyland上录制屏幕,可以使 ...

  2. Wayland是什么

    今天大家可能在"Wow! Ubuntu"或其他地方看到了这篇文章:Ubuntu 决定未来将启用 Wayland X-Server.Wayland是什么呢?它是X Window?还是 ...

  3. Wayland的前世与今生(一)-----我的前半生

    今天大家可能在"Wow! Ubuntu"或其他地方看到了这篇文章:Ubuntu 决定未来将启用 Wayland X-Server. Wayland是什么呢?它是X Window?还 ...

  4. TVM apps extension示例扩展库

    TVM apps extension示例扩展库 此文件夹包含TVM的示例扩展库.演示了其它库如何在C++和Python API中扩展TVM. 该库扩展了TVM的功能. python模块加载新的共享库, ...

  5. ios share extension 真机不显示_ios企业签名:APPGroups实现App之间数据共享

    一.认识App Groups AppGroup allows data sharing between two different apps or even app and widgets by cr ...

  6. php解决 mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysq

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. The mysql extension is deprecated and will be removed i ...

  7. 解决 The mysql extension is deprecated and will be r

    为什么80%的码农都做不了架构师?>>>    解决 The mysql extension is deprecated and will be removed in the fut ...

  8. Enlightenment E19 将完整支持 Wayland

    Enlightenment E19加入了对Wayland显示服务器的完整支持, 成为第一个完整支持Wayland的Linux桌面.Enlightenment对Wayland的支持被认为处于试验阶段,某 ...

  9. Chrome Restful Api 测试工具 Postman-REST-Client离线安装包下载,Axure RP Extension for Chrome离线版下载...

    [Postman for Chrome 离线下载] Postman-REST-Client离线安装包,可直接在Chrome浏览器本地安装使用,可模拟各种http请求,Restful Api测试, CS ...

最新文章

  1. 面试碰到这个算法:字母异位词分组
  2. Shell脚本_备份/etc数据
  3. Python中sort和sorted的用法与区别
  4. python输入字符串从大到小排列_567. 字符串的排列(Python)
  5. python 图表_新手向——制作web图表(基于Python和GooPyCharts)
  6. java中退订程序怎么写_如何在RxJava中的自定义Observable中获得观察者的退订操作的通知...
  7. Java连载1-概述常用的dos命令
  8. 7,复习,多对多表的三种创建,form组件,cookie,session
  9. java电商项目的项目描述_Java电商项目-6.实现门户首页数据展示_Redis数据缓存
  10. hdu 4005(边双连通)
  11. 批量导入手机通讯录_怎么批量导出联系人通讯录,华为手机通讯录转移如何操作?...
  12. java从地址串中解析提取省市区-完美匹配中国所有地址
  13. 思维导图的用处是什么?绘制思维导图技巧分享
  14. 常见的web前端编程软件
  15. css固定定位的代码,CSS——相对定位、绝对定位、固定定位(示例代码)
  16. 地图处理方法-判断一个点是否在某个区域内
  17. Objective-C学习资源
  18. 配置exchange2010邮箱和邮件大小限制
  19. stm32f4xx.h文件的详解
  20. 200518更新校园卡最新小道消息

热门文章

  1. Linux下使用JRTPLIB进行实时流媒体编程
  2. TCP的URG和PSH详解----区别
  3. 《proe 二次开发01》
  4. 使用FSL-FAST分割三种脑组织:白质,灰质,脑脊液
  5. @Transactional注解与try catch
  6. div自定义滚动条样式
  7. 微信小程序按钮失效的几大原因
  8. 近乎完美的行走于虚拟世界?Pathbender推出跑步机StriderVR
  9. 计算机网络诊断策略服务未运行,Windows7网络无法使用提示“诊断策略服务未运行”怎么办?...
  10. 汇编中各寄存器及作用