WayLand IVI Extension
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相关推荐
- Linux中OBS在Wayland环境下黑屏只显示鼠标的应对措施
本文写于2018-02-10.截至到此文完成时,没有已知的方法可以让OBS在Wayland环境下正常工作. 解决方法 放弃使用Wayland,改用X Window 在Wanyland上录制屏幕,可以使 ...
- Wayland是什么
今天大家可能在"Wow! Ubuntu"或其他地方看到了这篇文章:Ubuntu 决定未来将启用 Wayland X-Server.Wayland是什么呢?它是X Window?还是 ...
- Wayland的前世与今生(一)-----我的前半生
今天大家可能在"Wow! Ubuntu"或其他地方看到了这篇文章:Ubuntu 决定未来将启用 Wayland X-Server. Wayland是什么呢?它是X Window?还 ...
- TVM apps extension示例扩展库
TVM apps extension示例扩展库 此文件夹包含TVM的示例扩展库.演示了其它库如何在C++和Python API中扩展TVM. 该库扩展了TVM的功能. python模块加载新的共享库, ...
- ios share extension 真机不显示_ios企业签名:APPGroups实现App之间数据共享
一.认识App Groups AppGroup allows data sharing between two different apps or even app and widgets by cr ...
- 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 ...
- 解决 The mysql extension is deprecated and will be r
为什么80%的码农都做不了架构师?>>> 解决 The mysql extension is deprecated and will be removed in the fut ...
- Enlightenment E19 将完整支持 Wayland
Enlightenment E19加入了对Wayland显示服务器的完整支持, 成为第一个完整支持Wayland的Linux桌面.Enlightenment对Wayland的支持被认为处于试验阶段,某 ...
- Chrome Restful Api 测试工具 Postman-REST-Client离线安装包下载,Axure RP Extension for Chrome离线版下载...
[Postman for Chrome 离线下载] Postman-REST-Client离线安装包,可直接在Chrome浏览器本地安装使用,可模拟各种http请求,Restful Api测试, CS ...
最新文章
- 面试碰到这个算法:字母异位词分组
- Shell脚本_备份/etc数据
- Python中sort和sorted的用法与区别
- python输入字符串从大到小排列_567. 字符串的排列(Python)
- python 图表_新手向——制作web图表(基于Python和GooPyCharts)
- java中退订程序怎么写_如何在RxJava中的自定义Observable中获得观察者的退订操作的通知...
- Java连载1-概述常用的dos命令
- 7,复习,多对多表的三种创建,form组件,cookie,session
- java电商项目的项目描述_Java电商项目-6.实现门户首页数据展示_Redis数据缓存
- hdu 4005(边双连通)
- 批量导入手机通讯录_怎么批量导出联系人通讯录,华为手机通讯录转移如何操作?...
- java从地址串中解析提取省市区-完美匹配中国所有地址
- 思维导图的用处是什么?绘制思维导图技巧分享
- 常见的web前端编程软件
- css固定定位的代码,CSS——相对定位、绝对定位、固定定位(示例代码)
- 地图处理方法-判断一个点是否在某个区域内
- Objective-C学习资源
- 配置exchange2010邮箱和邮件大小限制
- stm32f4xx.h文件的详解
- 200518更新校园卡最新小道消息