From 4aad369c9728061c97b3de792286e743ee884b09 Mon Sep 17 00:00:00 2001 From: growupboron Date: Fri, 11 Sep 2020 17:18:57 +0530 Subject: Simplified doc-site generation Updated theme to windmill Using Mkdocs static site generator Deployed on readthedocs Signed-off-by: growupboron Change-Id: If62eaaea1855c91b64f687900f54eba6bc1caee8 Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/documentation/+/25236 Reviewed-by: Jan-Simon Moeller Tested-by: Jan-Simon Moeller --- .../4.7.1_Home_Screen_Developer_Guide.md | 532 ++++++++++++ .../4.7_HMI_Framework/4.7.2_WindowManager-Guide.md | 938 +++++++++++++++++++++ .../4.7.3_Sound_Manager_Developer_Guide.md | 388 +++++++++ .../4.7.4_Sound_Manager_Developer_Guide_2.md | 133 +++ .../4.7.5_Sound_Manager_Developer_Guide_3.md | 343 ++++++++ .../4.7_HMI_Framework/parts/am-component.png | Bin 0 -> 90431 bytes .../4.7_HMI_Framework/parts/change_layout_seq.png | Bin 0 -> 34698 bytes .../4.7_HMI_Framework/parts/deactivate_window.png | Bin 0 -> 44618 bytes .../4.7_HMI_Framework/parts/example_split.png | Bin 0 -> 223071 bytes .../parts/hmi_framework_designed_seq_toyota.png | Bin 0 -> 54198 bytes .../parts/initialize-set-event-handler.svg | 32 + .../4.7_HMI_Framework/parts/on_screen_message.svg | 36 + .../4.7_HMI_Framework/parts/request_role.png | Bin 0 -> 26503 bytes .../4.7_HMI_Framework/parts/seq_changevolume.svg | 117 +++ .../parts/seq_connectsoundroute.svg | 145 ++++ .../parts/seq_disconnectsoundroute.svg | 110 +++ .../4.7_HMI_Framework/parts/seq_registration.svg | 235 ++++++ .../parts/seq_releasesoundmode.svg | 119 +++ .../parts/seq_requestsoundmode.svg | 165 ++++ .../4.7_HMI_Framework/parts/seq_setmutestate.svg | 115 +++ .../parts/seq_startsoundstreaming.svg | 129 +++ .../4.7_HMI_Framework/parts/seq_startup.svg | 68 ++ .../parts/seq_stopsoundstreaming.svg | 129 +++ .../4.7_HMI_Framework/parts/showInformation.svg | 30 + .../4.7_HMI_Framework/parts/showNotification.svg | 34 + .../4.7_HMI_Framework/parts/showOnScreen.svg | 72 ++ .../4.7_HMI_Framework/parts/showWindow.svg | 34 + .../4.7_HMI_Framework/parts/software-stack.png | Bin 0 -> 197208 bytes .../parts/state_change_example.png | Bin 0 -> 182038 bytes .../4.7_HMI_Framework/parts/tap_shortcut.svg | 26 + .../4.7_HMI_Framework/parts/typical-usecase.png | Bin 0 -> 256665 bytes .../4.7_HMI_Framework/parts/wm_area.png | Bin 0 -> 12427 bytes .../4.7_HMI_Framework/parts/wm_change_layout.png | Bin 0 -> 86852 bytes .../4.7_HMI_Framework/parts/wm_layer_stack.png | Bin 0 -> 33482 bytes .../4.7_HMI_Framework/parts/wm_software_stack.png | Bin 0 -> 28935 bytes 35 files changed, 3930 insertions(+) create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.1_Home_Screen_Developer_Guide.md create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.2_WindowManager-Guide.md create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.3_Sound_Manager_Developer_Guide.md create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.4_Sound_Manager_Developer_Guide_2.md create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.5_Sound_Manager_Developer_Guide_3.md create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/am-component.png create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/change_layout_seq.png create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/deactivate_window.png create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/example_split.png create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/hmi_framework_designed_seq_toyota.png create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/initialize-set-event-handler.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/on_screen_message.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/request_role.png create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_changevolume.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_connectsoundroute.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_disconnectsoundroute.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_registration.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_releasesoundmode.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_requestsoundmode.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_setmutestate.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_startsoundstreaming.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_startup.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_stopsoundstreaming.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showInformation.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showNotification.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showOnScreen.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showWindow.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/software-stack.png create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/state_change_example.png create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/tap_shortcut.svg create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/typical-usecase.png create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_area.png create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_change_layout.png create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_layer_stack.png create mode 100644 docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_software_stack.png (limited to 'docs/4_APIs_and_Services/4.7_HMI_Framework') diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.1_Home_Screen_Developer_Guide.md b/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.1_Home_Screen_Developer_Guide.md new file mode 100644 index 0000000..50baf6d --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.1_Home_Screen_Developer_Guide.md @@ -0,0 +1,532 @@ +--- +edit_link: '' +title: Home Screen Developer Guide +origin_url: >- + https://git.automotivelinux.org/apps/agl-service-homescreen/plain/doc/ApplicationGuide.md?h=master +--- + + + +**HomeScreen GUI Application / HomeScreen Service Guide** +==== + Revision: 0.1 + TOYOTA MOTOR CORPORATION + Advanced Driver Information Technology + 13th/May/2019 + +* * * + +## Table of content +- [Target reader of this document](#target-reader-of-this-document) +- [Overview](#overview) +- [Getting Start](#getting-start) + - [Supported environment](#supported-environment) + - [Build](#build) + - [Configuring](#configuring) + - [How to call HomeScreen APIs from your Application?](#how-to-call-homescreen-apis-from-your-application) +- [Supported usecase](#supported-usecase) +- [Software Architecture](#software-architecture) +- [API reference](#api-reference) +- [Sequence](#sequence) + - [Initialize](#initialize-sequence) + - [Tap Shortcut(deprecated)](#tap-shortcut-sequence) + - [ShowWindow](#showwindow-sequence) + - [On Screen Message / Reply Sequence(deprecated)](#on-screen-message-reply-sequence) + - [ShowOnscreen](#showonscreen-sequence) + - [ShowNotification](#shownotification-sequence) + - [ShowInformation](#showinformation-sequence) +- [Sample code](#sample-code) +- [Limitation](#limitation) +- [Next Plan](#next-plan) +- [Appendix](#appendix) + +* * * + +## Target reader of this document +Application developer whose software uses HomeScreen. + +* * * + +## Overview +HomeScreen is built with a GUI application created with Qt(referred as HomeScreenGUI), and a service running on afb-daemon (referred as HomeScreenBinder). +HomeScreen can start/switch applications run in AGL, also displays information such as onscreen messages. + +You can find these projects in AGL gerrit. + +- [homescreen(HomeScreenGUI)](https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/homescreen) +- [launcher(LauncherGUI)](https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/launcher) +- [agl-service-homescreen(HomeScreenBinder's binding library)](https://gerrit.automotivelinux.org/gerrit/#/admin/projects/apps/agl-service-homescreen) +- [libhomescreen(library for application to communication with HomeScreenBinder]( https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/libhomescreen) +- [libqthomescreen(library for qt application to communication with HomeScreenBinder based on libhomescreen)](https://gerrit.automotivelinux.org/gerrit/#/admin/projects/src/libqthomescreen) + +Also HomeScreenGUI is using libwindowmanager. + +* * * + +## Getting Start + +### Supported environment + +| Item | Description | +|:------------|:----------------------------------| +| AGL version | Grumpy Guppy | +| Hardware | Renesas R-Car Starter Kit Pro(M3) | + + +### Build + +**Download recipe** + +``` +$ mkdir WORK +$ cd WORK +$ repo init -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo +$ repo sync + +``` + +Then you can find the following recipes. + +* `meta-agl-demo/recipes-demo-hmi/homescreen` + +* `meta-agl-devel/meta-hmi-framework/recipes-demo-hmi/launcher` + +* `meta-agl-demo/recipes-demo-hmi/agl-service-homescreen` + +* `meta-agl-demo/recipes-demo-hmi/libhomescreen` + +* `meta-agl-devel/meta-hmi-framework/recipes-demo-hmi/qlibhomescreen` + + +**Bitbake** + +``` +$ source meta-agl/scripts/aglsetup.sh -m m3ulcb agl-demo agl-devel agl-appfw-smack agl-hmi-framework +$ bitbake agl-demo-platform +``` + +### Configuring +To use HomeScreen API, an application shall paste the following configuration definition into "config.xml" of application. + +``` + + + + +``` + +### How to call HomeScreen APIs from your Application? +HomeScreen provides a library which is called "libhomescreen". +This library treats "json format" as API calling. +For example, if an application wants to call "showWIndow()" API, then you should implement as below. + +At first the application should create the instance of libhomescreen. + +``` +LibHomeScreen* libhs; +libhs = new LibHomeScreen(); +libhs->init(port, token); +``` + +The port and token is provided by Application Framework + +Execute the "showWindow()" function. + +``` +libhs->showWindow("application_id", "display_area"); +``` + +Regarding the detail of showWindow() API, please refer [this](#homescreen-specific-api) section. +The first parameter is the appid of application which want to display,liked "dashboard". +And the second parameter corresponds to display_area which defined by windowmanager,usually "normal", +so in this case "showWindow" the two parameters are proper string. + +See also our [Sample code](#sample-code). + +* * * + +## Supported usecase +1. HomeScreenGUI sending showWindow event to applications + - Applications using libhomescreen to subscribe the showWindow event, + HomeScreenGUI will send showWindow event to applications. +2. Display OnScreen messages(deprecated) + - Applications sending OnScreen messages to homescreen-service, and OnScreenAPP + will get these message and display. +3. Get OnSreen Reply event(deprecated) + - When OnScreen messages is displaying, OnScreenAPP will send a reply event to applications. +4. Display OnScreen by showWindow + - When application who want to show OnScreen,it can call "showWindow",then OnScreenApp will + display request OnScreen. +5. Hide OnScreen by hideWindow + - When application who want to hide OnScreen which is displaying,it can call "hideWindow",then OnScreenApp + will hide OnScreen. +6. Send OnScreen Reply by replyShowWindow + - When user touch the button of OnScreen, OnScreenApp can call "relplyShowWindow" to send reply information + back to application. +7. Show Notification on HomeScreenGUI + - When application who want to display a notification,it can call "showNotification",then HomeScreenGUI will + display the notification contents on the screen top area. +8. Show Information on HomeScreenGUI + - When application who want to display a information,it can call "showInformation",then HomeScreenGUI will + display the information contents on the screen bottom area. + +* * * + +## Software Architecture +The architecture of HomeScreen is shown below. +HomeScreen is the service designed to be used by multiple applications. +Therefore HomeScreen framework consists on two binder layers. Please refer the following figure. +The upper binder is for application side security context for applications. The lower binder is for servide side security context. +Usually application side binder has some business logic for each application, so the number of binders depend on the number of applications which use HomeScreen. +On the other hand, regarding lower binder there is only one module in the system. This binder receives all messages from multiple applications (in detail, it comes from upper layer binder). + +The communication protocols between libhomescreen and upper binder, upper binder and lower binder(homescreen-binding) are WebSocket. + +![software-stack.png](parts/software-stack.png) + +* * * + +## API reference +"libhomescreen" and "agl-service-homescreen" provides several kinds of APIs. + +### HomeScreen Specific API + +- LibHomeScreen::init (const int port, const std::string &token) +``` + port [in] : This argument should be specified to the port number to be used for WebSocket + token [in] : This argument should be specified to the token to be used for WebSocket + + Create connection to homescreen-service by port and token which provided by + application framework. This API must be called before calling other api. +``` +- LibHomeScreen::tapShortcut(const char *application_id) +``` + application_id [in] : Tapped application id (label) + + This api is deprecated, recommend using showWindow. +``` +- LibHomeScreen::onScreenMessage(const char *display_message) +``` + display_message [in] : message for display + + This api is deprecated, recommend using showWindow/hideWindow to call onscreenapp. +``` +- LibHomeScreen::onScreenReply(const char *reply_message) +``` + reply_message [in] : message for reply + + This api is deprecated, recommend using replyShowWindow. +``` +- LibHomeScreen::registerCallback(void(*event_cb)(const std::string &event, struct json_object *event_contents), void(*reply_cb)(struct json_object *reply_contents), void(*hangup_cb)(void)=nullptr) +``` + event_cb [in] : This argument should be specified to the callback for subscribed event + reply_cb [in] : This argument should be specified to the reply callback for call function + hangup_cb [in] : This argument should be specified to the hangup callback for call function + + This api is deprecated, recommend using set_event_handler. +``` +- LibHomeScreen::set_event_handler(enum EventType et, handler_func f) +``` + et [in] : event name + f [in] : event handler + + Setting event handler for Homescreen-Service Event. +``` +- LibHomeScreen::call(const string& verb, struct json_object* arg) +- LibHomeScreen::call(const char* verb, struct json_object* arg) +``` + verb [in] : This argument should be specified to the API name (e.g. "tap_shortcut") + arg [in] : This argument should be specified to the argument of API. + And this argument expects JSON object + + Call homescreen-service verb. +``` +- LibHomeScreen::subscribe(const string& event_name) +``` + event_name [in] : This argument should be specified to the event name + + Subscribe homescreen-service event. Deprecated, recommend using set_event_handler. +``` +- LibHomeScreen::unsubscribe(const string& event_name) +``` + event_name [in] : This argument should be specified to the event name + + Unsubscribe homescreen-service event. Deprecated, recommend using set_event_handler. +``` +- LibHomeScreen::showWindow(const char* application_id, json_object* json) +``` + application_id [in] : This argument should be specified to the application's id + json [in] : This argument should be specified to the json parameters + + Request to show the window of application_id, and set display area in json liked + {"area":"normal.full"}. +``` +- LibHomeScreen::hideWindow(const char* application_id) +``` + application_id [in] : This argument should be specified to the application's id + + Request to hide the window of application_id. +``` +- LibHomeScreen::replyShowWindow(const char* application_id, json_object* json) +``` + application_id [in] : This argument should be specified to the onscreen reply to applilcation id + json [in] : This argument should be specified to the json parameters + + Post reply information to who called showWindow. +``` +- LibHomeScreen::showNotification(json_object* json) +``` + json [in] : This argument should be specified to the json parameters. + + Post Notification to Homescreen which will display at top area of Homescreen. +``` +- LibHomeScreen::showInformation(json_object* json) +``` + json [in] : This argument should be specified to the json parameters. + + Post Information to Homescreen which will display at bottom area of Homescreen. +``` + +* * * + +## Sequence + +### Initialize Sequence +![initialize-set-event-handler](parts/initialize-set-event-handler.svg) + +### Tap Shortcut Sequence +![tap_shortcut.svg](parts/tap_shortcut.svg) + +### ShowWindow Sequence +![showWindow.svg](parts/showWindow.svg) + +### On Screen Message / Reply Sequence +![on_screen_message.svg](parts/on_screen_message.svg) + +### ShowOnScreen Sequence +![showOnScreen.svg](parts/showOnScreen.svg) + +### ShowNotification Sequence +![showNotification.svg](parts/showNotification.svg) + +### ShowInformation Sequence +![showInformation.svg](parts/showInformation.svg) + +* * * + +## Sample code +You can find sample implementation of HomeScreen as below. + +* `libhomescreen/sample/simple-egl` + +* `libhomescreen/sample/template` + +* * * + +## Limitation +None. + +* * * + +## Next Plan +None. + +* * * + +## Appendix + +``` +@startuml + +title Application initialization phase + +entity App +entity HomeScreenBinder +entity HomeScreenGUI + +App->HomeScreenBinder: init(port, token) +App->HomeScreenBinder: set_event_handler() + +note over HomeScreenBinder + setup event handler the App wishes to receive + ・LibHomeScreen::Event_ShowWindow + ・LibHomeScreen::Event_HideWindow + ・LibHomeScreen::Event_ReplyShowWindow +end note + +@enduml +``` + +``` +@startuml +title Application Callback Event TapShortcut phase +entity App +entity HomeScreenBinder +entity HomeScreenGUI +App->HomeScreenBinder: set_event_handler() + +note over App + LibHomeScreen::Event_TapShortcut +end note + +HomeScreenGUI->HomeScreenBinder: tapShortcut(application_id) +HomeScreenBinder->App: event_handler(application_id) +@enduml +``` + +``` +@startuml + +title Application callback event showWindow phase + +actor user +entity "homescreen-service" as hss +entity launcher +entity App +entity windowmanager as wm + +user-->launcher: tap app's icon +launcher->hss: showWindow() +note over hss,App +{"application_id":"tapped application id", "parameter":{"area":"display area", ...}} +end note +hss->App: push showWindow event +App->wm: activateWindow("application_name","display area") +wm-->App: push syncDraw event +App->App: display + +@enduml +``` + +``` +@startuml +title Application Callback Event On Screen Message / Reply phase +entity App +entity HomeScreenBinder +entity HomeScreenGUI + +HomeScreenGUI->HomeScreenBinder: set_event_handler() + +note over HomeScreenGUI + LibHomeScreen::Event_OnScreenMessage +end note + + +App->HomeScreenBinder: set_event_handler() + +note over App + LibHomeScreen::Event_OnScreenReply +end note + +App->HomeScreenBinder: onScreenMessage(display_message) +HomeScreenBinder->HomeScreenGUI: event_handler(display_message) +HomeScreenGUI->HomeScreenBinder: onScreenReply(reply_message) +HomeScreenBinder->App: event_handler(reply_message) +@enduml +``` + +``` +@startuml + +title show/hide onscreen phase + +actor user +entity "homescreen-service" as hss +entity App +entity onscreenapp +entity windowmanager as wm + +== show onscreen == +user->App: the operation request onscreen +App->hss: showWindow() +note over App,hss +{"application_id":"onscreenapp", +"parameter":{"area":"display area", "file":"qml file path", +"data":{"the datas to onscreen qml"}}} +end note + +hss->onscreenapp: push showWindow event +note over hss,onscreenapp +{"application_id":"onscreenapp", +"parameter":{"area":"display area", "file":"qml file path", +"data":{"the datas to onscreen qml"}, +"replyto":"caller application id" +}} +end note + +onscreenapp->onscreenapp: get and save parameters +onscreenapp->wm: activateWindow("onscreeapp", "display area") +alt can show +wm-->onscreenapp: push syncDraw event +onscreenapp->wm: endDraw("onscreeapp") +onscreenapp->onscreenapp: load and display qml file +else can't show +note over onscreenapp,wm +do nothing +end note +end + +== hide onscreen == + +user->onscreenapp: tap onscreen's button +onscreenapp->hss: replyShowWindow() +note over onscreenapp,hss +{"application_id":"the application id who called onscreenapp", +"parameter": {"buttonName": "VOLUME_UP", "buttonPressMode": "shortPress", "buttonPressState": "release"}} +end note +hss->App: push replyShowWindow event +App->App: call reply function +App->hss: hideWindow("onscreenapp") +hss->onscreenapp: push hideWindow event +note over hss,onscreenapp +{"application_id":"request hideWindow application id"} +end note +onscreenapp->wm: deactivateWindow("onscreenapp"); +onscreenapp->onscreenapp: hide window + +@enduml +``` + +``` +@startuml + +title show notification on HomeScreen top area + +entity "homescreen-service" as hss +entity homescreen +entity App + +App->hss: showNotification() +note over App,hss +{"icon":"display icon", "text":"display text"} +end note +hss-> homescreen: push showNotification event +note over hss,homescreen +{"application_id":"request application id", +"parameter":{"icon":"display icon", "text":"display text"}} +end note + +homescreen->homescreen: display notification message 3s + +@enduml +``` + +``` +@startuml + +title show information on HomeScreen bottom area + +entity "homescreen-service" as hss +entity homescreen +entity App + +App->hss: showInformation() +note over hss +{"info":"display information"} +end note +hss-> homescreen: push showInformation event + +homescreen->homescreen: display information message 3s + +@enduml +``` diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.2_WindowManager-Guide.md b/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.2_WindowManager-Guide.md new file mode 100644 index 0000000..d372be7 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.2_WindowManager-Guide.md @@ -0,0 +1,938 @@ +--- +edit_link: '' +title: Window Manager Developer Guide +origin_url: >- + https://git.automotivelinux.org/apps/agl-service-windowmanager/plain/doc/ApplicationGuide.md?h=master +--- + + + +# Window Manager Application Guide + +## Table of content + +- [Target reader of this document](#target-reader-of-this-document) +- [Overview](#overview) + - [Supported usecase](#supported-usecase) +- [Getting Started](#getting-started) + - [Build](#build-by-sdk) + - [Install](#install) + - [Bitbake](#bitbake) + - [Enable to call Window Manager](#enable-to-call-window-manager) +- [Software Architecture](#software-architecture) +- [Sequence](#sequence) +- [API reference](#api-reference) + - [Request to Window Manager](#request-to-window-manager) + - [Event from Window Manager](#event-from-window-manager) + - [Client Library](#client-library) +- [Sample code](#sample-code) +- [Policy Manager](#policy-manager) + - [Enabling split](#enabling-split) +- [Release Note](#release-note) + +| Version | Author | Updated at | +|:-:|:-:|:-:| +| 0.8 | TOYOTA MOTOR CORPORATION| 22th/Feb/2019 | + +* * * + +## Target reader of this document + +This document is intended for developers and system integrators who +need to know, how Window manager works and how it is to be used. + +### Scope of this Document + +This document covers Window manager that was implemented for TMC and +delivered to the Automotive Grade Linux (AGL) project. It includes its +implementation details, concepts of operation, configuration and usage. + +It does not include + +- document of the underlying architecture, see + [HMI-Framework](https://wiki.automotivelinux.org/hmiframework). + +- document of the AGL application framework and its technologies, + see [AGL Application + Framework](https://wiki.automotivelinux.org/agl-distro/app-framework). + +- document of HomeScreen, see + [HomeScreen](./ApplicationGuide.html). + +It is highly recommended to have a good understanding of these documents +and projects before using Window manager. + +* * * + +# Overview + +Window Manager is the service process which provides window management based on policy. +And implements a layout switching of applications on +multiple layers and with different layer layouts. +Window Manager is based on ivi layer management from GENIVI and AGL application framework. + +Window Manager consists of + +- afb-binder +- service binding library +- shared library for policy management +- configuration files + +In order to understand Window Manager, the below figure shows the one of typical usecases. +In this example, there are two mode for window management. + +1. Window Management in `Car Stops` +1. Window Management in `Car Runs` + +![Figure: Typical usecase](parts/state_change_example.png) + +The important points are: + +- Window transition should be done by Window Manager + + Window Manager switch application displayed on top layer by user operation(touch shortcut button). + In this example, when an user touches `navigation` shortcut button, Window Manager displays `navigation` and hide `launcher`. Next, when an user touches `videoplayer` shortcut button, Window Manager divides a screen into two parts and display two applications. + +- There is a priority `role` for each application. + + Window Manager realizes state transition change based on the policy which consists of `role`. + According to the state transition table, it controls the visibility of application window, layout change, and so on. + The reasons why this is necessary are + +- to support user driving +- not to disturb a driver concerns on driving for safety + + In this example, for safety, when the car starts running, Window Manager set up the role `videoplayer` + to be masked and uncontrollable by user not to disturb driver concerns. + And, for supporting driving, set up `navigation` role to be displayed 3 seconds after the car ran. + In `Car Run` state, the user can't switch to other application from Navigation application until car stops. + +## Supported usecase + +1. Window Management +- When an user chooses a different application, Window Manager changes the layout and then displays the application. +- When an user chooses a different application, Window Manager changes the layout and then hides the displayed application. +2. Policy Management +- Window Manager changes layout according to policy table based on `role`. +3. Define Layout by `area` configuration +- Window Manager realizes the abstracted `area` and can resize the window by using it. User can easily edit this configuration. + +* * * + +## Getting Started + +### Build by SDK + +```bash +git clone https://gerrit.automotivelinux.org/gerrit/apps/agl-service-windowmanager +cd agl-service-windowmanager +mkdir build +cd build +source // normally this is /opt/agl-sdk/environment +cmake .. +make +make package +``` + +The widget package is populated in the 'package' directory. + +```bash +ls package/ +root windowmanager-service.wgt +``` + +### Install + +Copy windowmanager-service.wgt to the file system then execute the following command. + +```bash +afm-util install windowmanager-service.wgt +``` + +## Bitbake + +You can make Window Manager object files with the following two stage operations. + +### Download recipe + +```bash +mkdir WORK +cd WORK +repo init -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo +repo sync +``` + +### Execute Bitbake + +```bash +source meta-agl/scripts/aglsetup.sh -m m3ulcb agl-demo hmi-framework +bitbake agl-demo-platform +``` + +* * * + +## Enable to call Window Manager + +To call Window Manager, it is important to enable the permission from security framework. +To use Window Manager API, an application or a service shall add the following configuration definition into "config.xml" of your application. + +```xml + + + +``` + +To call Window Manager function easily, Window Manager provides a library which is called "libwindowmanager". +This library provides a function style API calling interface. +So you can include the libwindowmanager.hpp header file, and can link against this library. +Please also refer to the sample application. + +See also our [Sample code](#sample-code). + +* * * + +## Software Architecture + +The static relationship with other components is shown below. +The actual logic of Window Manager is the binding in Binder(afb-daemon). +Window Manager is based on AGL application framework, +so the IPC via websocket is protected by AGL application framework. + +The upper binder is for the application side security context. +The lower binder is the Window Manager for the server side security context. +Usually an application side binder has some business logic for each application, so the number of binders depend on the number of applications which use Window Manager. +On the other hand, regarding lower binder there is only one module in the system. This binder receives messages from multiple applications. + +An application can use libwindowmanager.so to call Window Manager API simply. + +Window Manager is based on the GENIVI layer management system. + +![wm_software_stack.png](parts/wm_software_stack.png) + +### Layers + +Layers are entities that means the application stack group defined in `layers.json`. +This doesn't mean layer ID defined in GENIVI ivi layer. +The layer ID is used for application itself in Window Manager. +Currently, application can't have multiple surfaces in Window Manager. + +### Surfaces + +Surfaces are *placed* on layers . The surface +will then be resized to dimensions, according to the name of `areas.json` +application requests by `activateWindow` or policy management. +As default, `normal.full` is set by libwindowmanager for native application. + +### Configuration + +The window manager is configured with the *layers.json*, *areas.json*, *roles.db* configuration +files. By default they are searched in `${AFM_APP_INSTALL_DIR}/etc/`. + +Sample configurations are provided with the window manager +implementation, these samples are installed to ${AFM_APP_INSTALL_DIR}/etc/ . + +This configuration is supposed to be configured by policy designer which means OEM or Tier1. + +#### layers.json + +`layers.json` has three roles. + +1. Create application containers `Layer`. +1. Set id range for applications. +1. Attach application to `Layer` according to the role application requests. + +The sample configuration is here + +```json +{ + "comment": "Surface ID to Layer ID mapping", + + "main_surface": { + "surface_role": "HomeScreen", + "comment": "This surface should never be made invisible (The HomeScreen)" + }, + + "mappings": [ + { + "role": "BackGroundLayer", + "name": "BackGroundLayer", + "layer_id": 999, + "comment": "Single BackGround layer map for the map, radio, music and video" + }, + { + "role": "homescreen", + "name": "FarHomeScreen", + "layer_id": 1000, + "comment": "FarHomeScreen is the part of HomeScreen. The z order of this layer is lower than NearHomeScreen" + }, + { + "role": "music|video|browser|radio|phone|map|hvac|settings|dashboard|poi|mixer|sdl|launcher|fallback", + "name": "Apps", + "layer_id": 1001, + "comment": "Range of IDs that will always be placed on layer 1001" + }, + { + "role": "^on_screen.*", + "name": "OnScreen", + "layer_id": 9999, + "comment": "Range of IDs that will always be placed on the OnScreen layer, that gets a very high 'dummy' id of 9999" + } + ] +} +``` + +Each mapping defines the following items to map corresponding surfaces +to a layer. + +- `role` defines what kind of ability the application has. And the application will be attached to `Layer` according to the `role`. + A regular expression that application drawing names + are matched against. If applications match this regular expression, + the surface will be visible on this layer. + +- `name` is just a name definition for `Layer`, it has no + functional use apart from identifying a layer with a name. +- `layer_id` is the id used in GENIVI IVI layer management control. + +`Layer` stacks from beginning to end. + +The above `Layer` example image is below. + +![wm_layer_stack.png](parts/wm_layer_stack.png) + +Note: +"fallback" role is the special role. This role is set if the role application requests doesn't exist +in `layers.json`. Then, Window Manager will accept any applications. +If the "fallback" is not set in layers.json, window manager blocks the application displaying in such case. +In such a situation, you have to add your role(application name) at "role" in layers.json. + +Note: +`BackGroundLayer` name of `Layer` is exception for work around. This layer is fallback layer not to stop event loop of application when it becomes invisible. +The problem is issued in . + +#### areas.json + +Area means abstract expressions of 2-dimensional size and position. +`areas.json` defines the area which an application is set. + +```json +{ + "areas": [ + { + "name": "fullscreen", + "rect": { + "x": 0, + "y": 0, + "w": 1080, + "h": 1920 + } + }, + { + "name": "normal.full", + "rect": { + "x": 0, + "y": 218, + "w": 1080, + "h": 1488 + } + }, + { + "name": "split.main", + "rect": { + "x": 0, + "y": 218, + "w": 1080, + "h": 744 + } + }, + { + "name": "split.sub", + "rect": { + "x": 0, + "y": 962, + "w": 1080, + "h": 744 + } + } + ] +} +``` + +The image of the above setting is described below. + +![wm_area.png](parts/wm_area.png) + +- `name` is an abstract data of rectangle. + +- `rect` has 4 arguments. `x`, `y` means the offset from (0, 0) of screen.`w` means the width of the area, and `h` means the height of the area. The dimensions can be specified relative to the screen dimensions. + +The dimensions can be specified absolute to the screen dimensions. But if `fullscreen` is not suitable to screen dimensions, Window Manager scales the area automatically. + +Note: + +`fullscreen` must be set because this is the base size of scaling in Window Manger. + +Note: + +The direction of the coordinates depends on `transform` in weston.ini. +Currently, agl-demo-platform set `transform=270`. +This suppose to use screen vertically. + +#### roles.db + +* * * + +## Sequence + +To understand the sequence between application and window manager, refer to the [spec document](https://wiki.automotivelinux.org/hmiframework). + +The typical sequence to render your application, follow the sequence below. + +1. Register your role (and request surfaceID) + +![request_role.png](parts/request_role.png) + +The above sequence is the initialization phase of your application to use Window Manager. +An Application has to register your `role` to Window Manager. For ivi-shell application, Window Manager generates surfaceID to input it into the function +to create surface. And also it is important for synchronization to get `syncDraw` event for receiving the request for resize and redraw, and notifying Window Manager of `endDraw`, so register callback function with setEventHandler for `syncDraw`. + +[requestSurface](#requestSurface) + +[setEventHandler](#wm_subscribe) + +setEventHandler is API of libwindowmanager. This calls wm_subscribe internally. + +2. Display your window + +![hmi_framework_designed_seq_toyota.png](parts/hmi_framework_designed_seq_toyota.png) + +To display your window, your application has to request `activateWindow` with `role` and `area` to Window Manager. +Window Manager checks the app should be visible on the `area` according to the policy table using `role` . +If it is accepted, afb_req_success will be returned, and next Window Manager +will push the event `syncDraw` to applications which will be displayed. If it is denied, afb_req_fail will be returned. In this sample sequence, `syncDraw` is emitted to the apps who requested only, +but this shall be emitted to other applications whose size shall be changed. + +[activateWindow](#activateWindow) + +[syncDraw](#syncDraw) + +[endDraw](#endDraw) + +[flushDraw](#flushDraw) + +3. Activate OnScreen Window + +![deactivate_window.png](parts/deactivate_window.png) + +[deactivateWindow](#deactivateWindow) + +[See sample code for more detail about OnScreen Window.](https://gerrit.automotivelinux.org/gerrit/gitweb?p=apps%2Fonscreenapp.git;a=summary) + +The above sequence shows the sample of OnScreen Window. +If the role is high priority than NormapApp, Window Manager rejects NormalApp +request when OnScreenApp is displayed. + +Note : Above repository is currently empty, so please refer to the sandbox branch. + +* * * + +## API reference + +### Request to Window Manager + +| Use | verb | version | +|:-:|:-:|:-:| +| Initialize | requestSurface | from 0.7 | +| | wm_subscribe | from 0.7 | +| | requestSurfaceXDG | from 0.7 | +|Activate/Deactivate| activateWindow | from 0.7 | +| | deactivateWindow | from 0.7 | +| | endDraw | from 0.7 | +| Change area size | changeAreaSize | from 0.8 | +| Get Infomation | getDisplayInfo | from 0.7 | +| | getAreaList | from 0.8 | + +Note: We created this table from 0.7 + +The data of IPC via websocket consists of JSON. +This section describes the verb of API and key. +Normally, the body of requesting API will be here. + +### Initialize + +#### *requestSurface* + +Register your role to Window Manager and get surfaceID for ivi-shell. The role is used for policy management. SurfaceID is supposed to be set to the API `ivi_application_surface_create` of ivi-application protocol or set it to environment variable `QT_IVI_SURFACE_ID` if your app is Qt and integrate ivi-shell. + +- verb : "requestSurface" +- argument : {"drawing_name":"your role"} + +the value must be selected in layers.json. + +argument example : + +```json +{ + "drawing_name" : "navigation" +} +``` + +#### *requestSurfaceXDG* + +This API is for XDGLauncher, so it is not necessary for normal application. +XDGLauncher is created for XDG application for desktop app without editing for HMI-Framework. +Please see the repository in detail. + + +#### *wm_subscribe* + +Subscribe the Window Manager's event. +Application must subscribe `syncDraw` event. + +- verb : "wm_subscribe" +- argument : {"event" : *event number*} + +argument example : + +```json +{ + "event" : 5 +} +``` + +The event is abstracted with a number (enumeration). + +| Number | Event | +|:-:|:-:| +| 0 | "active" | +| 1 | "inactive" | +| 2 | "visible" | +| 3 | "invisible" | +| 4 | "syncDraw" | +| 5 | "flushDraw" | +| 6 | "screenUpdated" | + +### Activate/Deactivate + +#### *activateWindow* + +Request to display your application with `role` on the `area` to Window Manager. +Window Manager checks the app should be visible on the `area` and change layout according to the policy table using `role` . +If it is accepted, afb_req_success will be returned, and next Window Manager +will push the event `syncDraw` to applications which will be displayed. +If it is denied, afb_req_fail will be returned. + +- verb : "activateWindow" +- argument : {"drawing_name" : "your role", "drawing_area" : "your area"} + +the value must be selected among layers.json. + +argument example : + +```json +{ + "drawing_name" : "navigation", + "drawing_area" : "normal.full" +} +``` + +#### *deactivateWindow* + +Request to hide your application to Window Manager. +This verb is supposed to be used by high priority application which +are for example popup application or system UI application such like alert. +If Window Manager set the priority of popup high in the policy, Window Manager may not hide the popup even if normal applications +send `activateWindow` until popup application send `deactivateWindow` . This behavior depends on the policy table. After this request, Window Manager checks which app should be visible and change layout according to the policy table. + +- verb : "deactivateWindow" +- argument : None + +#### *endDraw* + +Notify Window Manager of application finishes drawing. +This function must be sent in event `syncDraw`. +Otherwise, Window Manager will roll back to previous state and reject your request `activateWindow` . + +- verb : "endDraw" +- argument : {"drawing_name" : "your role"} + +argument example : + +```json +{ + "drawing_name" : "navigation", +} +``` + +#### *changeAreaSize* + +Request to change the size of area and location. Then Window Manager sends `syncDraw` to the applications whose size and location will be changed. +The caller has responsible of appearance of layouts. + +The use case of this function is shown in below. +The system application such like HomeScreen call this function, then the layout changes. The trigger may be user request on GUI, or system events and so on. + +![chnage_layout_img](parts/wm_change_layout.png) + +The sequence is below. + +![change_layout_sequnce](parts/change_layout_seq.png) + +- verb : "changeAreaSize" +- argument : {"areas" : [{"name":"area_name","rect":{"x":int,"y":int,"w":int,"h":int}, ...}]} + +Note: Only the application whose role is written in whitelist is allowed to call this API. This is because marcious application can change the layouts. The layout should be controled by system application. + +### Get Information + +#### *getDisplayInfo* + +Get screen information such as resolution. + +- verb : "getDisplayInfo" +- argument : None + +Return : The screen information will return. + +Return example : + +```json +{ + "response":{ + "width_pixel":1080, + "height_pixel":1920, + "width_mm":320, + "height_mm":520, + "scale":1 + }, + "jtype" : "afb-reply", + "request":{ + "status":"success", + "info":"success", + "uuid":"05ae219a-0e56-4f46-af9f-3186a18cb110" + } +} +``` + +Note : + +"width_mm", "height_mm" is from output which is one of the wayland object. +These items lack reliability, so recommend not to use. + +#### *getAreaList* + +Get area definition defined in areas.json. + +- verb : "getAreaList" +- argument : None + +Return : The area definition list. + +Return example : + +```json +{ + "response":{ + "areas":[ + { + "name":"on_screen", + "rect":{ + "x":0, + "y":218, + "w":1080, + "h":1488 + } + }, + { + "name":"restriction.split.sub", + "rect":{ + "x":0, + "y":962, + "w":1080, + "h":744 + } + } + ] + }, + "jtype":"afb-reply", + "request":{ + "status":"success", + "uuid":"0e6b8835-0df0-4a34-9718-125e6258b378" + } +} +``` + +### Event from Window Manager + +| Number | Event | version | +|:-:|:-:|:-:| +| 0 | "active" | from 0.7| +| 1 | "inactive" | from 0.7 | +| 2 | "visible" | from 0.7 | +| 3 | "invisible" | from 0.7 | +| 4 | "syncDraw" | from 0.7 | +| 5 | "flushDraw" | from 0.7 | +| 6 | "screenUpdated" | from 0.7 | + +Events also consists of JSON. +The data of event is contained in `data` such like + +```json +{ + "event":"windowmanager\/active", + "date":{ + "drawing_name":"navigation" + }, + "jtype":"afb-event" +} +``` + +"event" is the event name. +"data" is the data object from Window Manager and contains +the message of event. +This section describes "event" and the contents of "data". + +#### active + +This event means when the application becomes active state. + +example : + +```json +{ + "event":"windowmanager\/active", + "data":{ + "drawing_name":"launcher" + } + }, + "jtype":"afb-event" +} +``` + +#### inactive + +This event means when the application becomes inactive state. + +example : + +```json +{ + "event":"windowmanager\/inactive", + "data":{ + "drawing_name":"launcher" + } + }, + "jtype":"afb-event" +} +``` + +#### visible + +This event is issued when the application is visible state. + +example : + +```json +{ + "event":"windowmanager\/visible", + "data":{ + "drawing_name":"launcher" + } + }, + "jtype":"afb-event" +} +``` + +#### invisible + +This event is issued when the application is invisible state. + +example : + +```json +{ + "event":"windowmanager\/invisible", + "data":{ + "drawing_name":"launcher" + } + }, + "jtype":"afb-event" +} +``` + +#### syncDraw + +This event is issued by Window Manager state change operation in policy to the following cases. + +- Your app requested `activateWindow` then your application will be resized or visible. +- Other app requested `activateWindow` then your application will be resized or visible. +- Window Manager change layout due to vehicle condition. + +This event is the requests from Window Manager to + +- request your app to callback `endDraw` to Window Manager. +- request your app to resize and redraw according to "drawing_area". + +This is the abstract word then the real size is given in "drawing_rect". + +example : + +```json +{ + "event":"windowmanager\/syncDraw", + "data":{ + "drawing_name":"radio", + "drawing_area":"normal.full", + "drawing_rect":{ + "x":0, + "y":218, + "width":1080, + "height":1488 + } + }, + "jtype":"afb-event" +} +``` + +An application which gets this event must send `endDraw`. +For details, please see the sequence. + +#### flushDraw + +This event is issued after Window Manager receives all `endDraw` from applications who recieved `syncDraw` . After this event, Window Manager expects applications to update its surface. + +example : + +```json +{ + "event":"windowmanager\/flushDraw", + "data":{ + "drawing_name":"launcher" + } + }, + "jtype":"afb-event" +} +``` + +#### screenUpdated + +This event is issued after the visible application changes as a state transition change. This contains resized applications and visible applications. This event is issued to all subscriber. Typical usecase is only for HomeScreen. If HomeScreen has an animation until the started application is visible such as progress bar, this signal may become a switch to stop the animation. + +```json +{ + "event":"windowmanager\/screenUpdated", + "data":{ + "ids":[ + "mediaplayer", + "navi" + ] + }, + "jtype":"afb-event" +} +``` + +"ids" is the application_id described in config.xml of application. + +### Client library + +A client library implementation that internally uses the *libafbwsc*, is +provided in the `libwindowmanager`. +This library is for C++ native application. + +Regarding more detail, please refer to + +* * * + +## Sample code + +In order to enable application to activate application(render on layer), +above described steps need to be implemented. + +As a minimal example the usage and initialization can look like the +following. + +Typical implementation of C++ application. + +- Repo: `git clone https://gerrit.automotivelinux.org/gerrit/src/libhomescreen` + - Path: `sample/simple-egl/main.c` + +Typical implementation of Qt application. + +- Repo: `git clone https://gerrit.automotivelinux.org/gerrit/apps/radio` +- Repo: `git clone https://gerrit.automotivelinux.org/gerrit/apps/videoplayer` + +This is the good example to write more simply for Qt application using QtAGLExtras. + +## Policy Manager + +### Concepts + +Policy Manager decides next layout by using input event data and current state +based on the policy table. + +And PolicyManager is plugin for WindowManager. +Therefore the OEMs can replace it. + +### Enabling split + +Window Manager supports split layout to change policy and `areas.json`. +This section describes how to play split layout. The sample image is here. + +![example_split.png](parts/example_split.png) + +To play the split layout, + +1. Edit in `policy_manager/CMakeLists.txt` as follows: + +```cmake:policy_manager/CMakeList.txt + #set(STM_DIR stub) + set(STM_DIR zipc) +``` + +This results in using source code generated by ZIPC. + +1. Set bool value "ON" to TRY_SPLIT_LAYOUT at line 28 in policy_manager/CMakeLists.txt as follows: + set(TRY_SPLIT_LAYOUT ON CACHE BOOL "Enable to show split layout") +1. compile +1. copy window manager to your board +1. re-install windowmanager and reboot + +As a result, if application requests `navi` with `activateWindow` when current layout is `video` or `mediaplayer`, Window Manager change layout to split window. The reverse is true. + +Note: + +Currently, the policy manager force application change the size even if the application which has the role doesn't have the split design. In that case, the view of application may be ugly. Window Manager supposes that applications may have multi designs according to system design by OEM. For example, if OEM sets 2 pattern layout for `navi`, the application which requests `navi` should have 2 pattern designs. + +* * * + +## Release Note + +### version: 0.8 + +#### New Feature + +- Add Policy Manager + +### version: 0.7 + +#### New Features + +- Add API of getting area list and changing area size on runtime + +#### Changes + +- Reduce binary size to use ilmControl library. +- Change layer management. Client has one ivi-layer and can have multi surfaces. +- Stop conversion table which is compatible with old role to avoid complexity. +- Upgrade bindings v3. +- Add configuration file over-ride mechanism. + +#### Limitation + +- Only single-surface Qt applications are support through the + libwindowmanager library. This is a limitation of how Qt creates surface + IDs for the ivi-application interface. + +- Currenly, Window Manager supports only one screen. Dual display is not supported. +- As implemented in sample code, Qt application has to wait requesting `activateWindow` until `frameSwapped` is emitted. +- Qt application conceals, wayland and openGL processes, so it is difficult to call `swapBuffer` after `flushDraw` event described in the architecture document. But no problem if you use toolkit such as Qt, because it is automatically processed between applications and compositor(weston). +- Editing ZIPC is difficult for open source developer due to licence. diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.3_Sound_Manager_Developer_Guide.md b/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.3_Sound_Manager_Developer_Guide.md new file mode 100644 index 0000000..2462f4d --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.3_Sound_Manager_Developer_Guide.md @@ -0,0 +1,388 @@ +--- +edit_link: '' +title: Sound Manager Developper Guide +origin_url: >- + https://git.automotivelinux.org/apps/agl-service-soundmanager/plain/doc/ApplicationGuide.md?h=master +--- + + + +# **Sound Manager Application Guide** + +
Revision: 0.3alpha
+
TOYOTA MOTOR CORPORATION
+
Advanced Driver Information Technology
+
11th/Dec/2017
+ +* * * + +
+ +## Table of content + +- [Target reader of this document](#Target\ reader\ of\ this\ document) +- [Overview](#Overview) +- [Getting Start](#Getting\ Start) + - [Supported environment](#Supported\ environment) + - [Build](#Build) + - [Configuring](#Configuring) + - [Additional work](#Additional\ work) + - [How to call Sound Manager's APIs from your Application?](#How\ to\ call\ Sound\ Manager\ APIs\ from\ your\ Application?) +- [Supported usecase](#Supported\ usecase) +- [Software Architecture](#Software\ Architecture) +- [API reference](#API\ reference) + - [APIs](#APIs) + - [Events](#Events) +- [Sequence](#Sequence) + - [StartUp](#StartUp) + - [Registration](#Registration) + - [Request Sound Right](#Request\ Sound\ Right) + - [Connect Sound Route](#Connect\ Sound\ Route) + - [Start Sound Streaming](#Start\ Sound\ Streaming) + - [Stop Sound Streaming](#Stop\ Sound\ Streaming) + - [Disconnect Sound Route](#Disconnect\ Sound\ Route) + - [Change Volume](#Change\ Volume) + - [Set Mute State](#Set\ Mute\ State) + - [Release Sound Right](#Release\ Sound\ Right) + - [Audio Domain](#Audio\ Domain) +- [Sample code](#Sample\ code) +- [Limitation](#Limitation) + +* * * + +
+ +## Target reader of this document + +Application developer whose software uses sound output. + +* * * + +
+ +## Overview + +The sound manager is the service which provides **sound-right management** for multiple sound sources. +This service is based on GENIVI Audio Manager, and this package contains service binding and library for API calling. +The reason why this service is based on GENIVI Audio Manager is because GENIVI Audio Manager supports highly strong and flexible sound-right management function. + +In order to understand, the below figure shows the one of typical usecases. +In this example, there are four sound mode. + +1. Audio Off +1. Media Player +1. Tel (Ring and talking) +1. TTS (Text To Speech; typically it's used by Navigation sound) + +![Figure: Typical usecase](parts/typical-usecase.png) + +The important points are: + +- **There is a priority for each sound source.** + In this example, the priority of "Tel" and "TTS" is higher than "MediaPlayer". Therefore when the system got incoming call, all four outputs of MediaPlayer are muted automatically by Sound Manager. And in this timing, Sound Manager will issue the event to Media Player, then Media Player can stop the music. (Because depending on OEM's requirement, "Stop" is required.) + "Tel" and "TTS" have the same priority. So if TTS event happened on talking, each sound will output from independent speaker. + If on-hook button is touched, Sound Manager will resume previous sound mode. In this example, basically it's MediaPlayer sound. But if TTS still playing, three speaker will output MediaPlayer sound but one speaker will continue to output TTS sound. +- **Sound mode transition should be done by Sound Manager not Applications.** + Actually application cannot recognize all sound source and its priority, so some centerized manager is required. Sound Manager provides this function. Sound Manager has a database for usecase and priority and in line with this policy Sound Manager controls proper sound mode. + +The below links show the example of Sound/Window mode transition. + +- [Single window application](Display_Audio_Transition1.html) + This transition assumes target IVI system support only one window on screen. It's a similar transition to CES2017 demo. +- [Dual window application](Display_Audio_Transition2.html) + This transition assumes target IVI system support two window (split screen) on screen. + +Of course user can customize shortcut menu, but since it's too many states so this example limits shortcut menu as "Home", "MediaPlayer", "HVAC" and "Navigation". + +* * * + +
+ +## Getting Start + +
+ +### Supported environment + +| Item | Description | +|:------------|:----------------------------------| +| AGL version | Electric Eel | +| Hardware | Renesas R-Car Starter Kit Pro(M3) | + +
+ +### Build + +You can make Sound Manager object files by the following two stage operations. + +#### Download recipe + +If repo is already done, please start with git clone + +```bash +mkdir WORK +cd WORK +repo init -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo +repo sync +``` + +#### Bitbake + +```bash +source meta-agl/scripts/aglsetup.sh -m m3ulcb agl-demo agl-devel agl-appfw-smack agl-hmi-framework +bitbake agl-demo-platform +``` + +* * * + +
+ +### Configuring + +To use Sound Manager API, an application shall paste the following configuration definition into "config.xml" of application. + +```xml + + + +``` + +* * * + +
+ +### Additional work + +#### **Add Policy file** + +To add Sound Manager Domain into policy, put the following file to /etc/audiomanager/control on the target rootfs. + +`${SOUNDMANAGER_DIR}/conf/audiomanager-config-sample/configuration.xml` + +This is a sample configuration. + +#### **Remove Module router of Pulse Audio** + +Because the module rounter accesses Audio manager for getting sound right instead of application in CES2017, after you changed your application code for Sound manager, you shall modify the configuration for puluse audio not to load module router. +To do this, you shall comment out line.143 of /etc/pulse/default.pa on the target rootfs as below. + +```conf +.ifexists module-router.so +#load-module module-router +.endif +``` + +* * * + +
+ +### How to call Sound Manager APIs from your Application? + +Sound Manager provides a library which is called "libsoundmanager". +This library provides function style API calling interface. So you can include libsoundmanager.hpp headerfile, and can link this library. +Please also refer sample application and template. + +See also our [Sample code](#Sample\ code). + +* * * + +
+ +## Supported usecase + +1. Active source change +- When user choose different audio source with current one, IVI system stop or pause current source and activate new one. +- When user connect external device e.g. iPhone, USB memory IVI system change active source automatically to connected one. +2. Active source locking +- When user is in phone call, IVI restrict to change active source. +3. Interrupt source mixing +- When car close to cross road IVI system reduce the volume of current source and mix with interrupt source e.g. Navigation Guidance. +4. Volume change +- User can change the volume of active source or sink. +- When user change volume during interruption e.g. Navigation Guidance, IVI system change its volume temporary or permanently. +5. Mute/unmute +- User can mute/unmute current active source. +6. Volume management +- When user change active source, IVI system mute/unmute to avoid distortion of sound. +7. Volume acceleration +- When road noise is increased by speed, IVI system automatically change the volume of active source. +8. Routing sound +- System needs to route sound stream to proper zones. (driver zone, passenger zone, rear seat zone) + +[See also this page](https://wiki.automotivelinux.org/eg-ui-graphics-req-audiorouting) + +* * * + +
+ +## Software Architecture + +The architecture of Sound Manager is shown below. +Sound Manager is the service designed to be used by multiple applications. +Therefore Sound Manager framework consists of two binder layers. Please refer the following figure. +The upper binder is for application side security context. The lower binder is for server side security context. +Usually an application side binder has some business logic for each application, so the number of binders depend on the number of applications which use Sound Manager. +On the other hand, regarding lower binder there is only one module in the system. This binder receives messages from multiple applications (in detail, it comes from upper layer binder). + +The communication protocols between libsoundmanager and upper binder, upper binder and lower binder, are WebSocket. The protocols between lower binder (soundmanager-binding) and AudioManager is D-Bus. + +![software-stack.png](parts/software-stack.png) + +* * * + +
+ +## API reference + +"libsoundmanager" and "soundmanager_binding" provides several kinds of APIs, and these APIs basically correspond to GENIVI Audio Manager API. (Some APIs are Sound Manager original functions.) + +For understanding, GENIVI Audio Manager stands for one core module and three plug-ins. + +1. AudioManagerDaemon + This is a core module of Audio Manager. +2. AudioManagerCommandPlugin + This is a command interface for Audio Manager. +3. AudioManagerController + This plug-in can be used for sound-right management. +4. AudioManagerRountingPlugin + This plug-in abstracts the hardware and software. And sometimes there may be multiple plug-ins. + +*) [See also GENIVI AudioManager Components](http://docs.projects.genivi.org/AudioManager/audiomanagercomponentspage.html) + +![See also GENIVI AudioManager Components](parts/am-component.png) +(This figure was copied from GENIVI Web page.) + +
+ +### APIs + +- init(int port, const std::string& token) +- registerSource(const std::string& sourceName) +- connect(int sourceID, int sinkID) +- connect(int sourceID, const std::string& sinkName) +- disconnect(int connectionID) +- ackSetSourceState(int handle, int err) +- registerCallback( void (*event_cb)(const std::string& event, struct json_object* event_contents), void (*reply_cb)(struct json_object* reply_contents), void (*hangup_cb)(void) = nullptr) + +Regarding more detail, please refer doxygen documents. + +
+ +### Events + +"libsoundmanager" provides the feature which receives the events which an app subscribes with "subscribe" API. +An application can get events to register a callback function with "registerCallback" API. + +And this event is subscribed automatically. (See below Note) + +- asyncSetSourceState + +The below events are available but not mandatory. + +- newMainConnection +- removedMainConnection +- mainConnectionStateChanged +- volumeChanged +- sinkMuteStateChanged +- setRoutingReady +- asyncConnect +- asyncDisconnect + +Note: + +"asyncSetSourceState" is always subscribed in init phase because this is the most important event for audio policy management. This event indicates the approval/disapproval/pause. + +Regarding more detail, please refer doxygen documents. + +* * * + +
+ +## Sequence +
+ +### StartUp + +![seq_startup.png](parts/seq_startup.svg) + +
+ +### Registration + +![seq_registration.png](parts/seq_registration.svg) + +
+ +### Request Sound Right + +![seq_requestsoundmode.png](parts/seq_requestsoundmode.svg) + +
+ +### Connect Sound Route +![seq_connectsoundroute.png](parts/seq_connectsoundroute.svg) + +
+ +### Start Sound Streaming + +![seq_startsoundstreaming.png](parts/seq_startsoundstreaming.svg) + +
+ +### Stop Sound Streaming + +![seq_stopsoundstreaming.png](parts/seq_stopsoundstreaming.svg) + +
+ +### Disconnect Sound Route + +![seq_disconnectsoundroute.png](parts/seq_disconnectsoundroute.svg) + +
+ +### Change Volume + +![seq_changevolume.png](parts/seq_changevolume.svg) + +
+ +### Set Mute State + +![seq_setmutestate.png](parts/seq_setmutestate.svg) + +
+ +### Release Sound Right + +![seq_releasesoundmode.png](parts/seq_releasesoundmode.svg) + +* * * + +
+ +### Audio Domain + +One of the most important concept of Audio Manager is Audio Domain. +To use GENIVI Audio Manager based system, it may be better to understand this concept. +The below document should bring good understanding. + +[GENIVI Audio Manager: Generic Controller Plug-in](http://events.linuxfoundation.org/sites/events/files/slides/AGL_AMM_presentation_A01.pdf) + +Although strongly recommended to read whole pages, but you can get quick understanding by page.10 to 14. + +
+ +## Sample code + +You can find samples using Sound Manager as below. + +- `apps/agl-service-homescreen-2017/sample/template` +- `apps/radio (branch=sandbox/knimitz/hmi-framework)` + +
+ +## Limitation + +- Sound of application is not automatically muted for now because Audio Manager doesn't stop with current plugins. Just notify stop/pause/play. diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.4_Sound_Manager_Developer_Guide_2.md b/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.4_Sound_Manager_Developer_Guide_2.md new file mode 100644 index 0000000..020b0d7 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.4_Sound_Manager_Developer_Guide_2.md @@ -0,0 +1,133 @@ +--- +edit_link: '' +title: Sound Manager Developper Guide 2 +origin_url: >- + https://git.automotivelinux.org/apps/agl-service-soundmanager/plain/doc/Display_Audio_Transition1.md?h=master +--- + + + +# Sound mode transition for single window application + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateEvent
State IDDisplayAudioPowerPush HomeScreen buttonStart BTAIncoming callPush Shortcut buttonTTSPush Phone control buttonSafety hazard
Win#1PopUpFLFRRLRROnOffMedia PlayerRadioNaviHVACPhoneOther buttonHomeMedia PlayerHVACNaviNavi INT TTSEndedRejectOff hookOn hookDetectedRecovered
S1--offoffoffoffS2--------------------
S2Home-offoffoffoff-S1S22S27S37S57S77S97S17S4-S22S57S37S3----S117-
S3Home-offTTSoffoff-S1S23S28S38S58S78S98S18S4-S23S58S38-S2---S117-
S4HomeRingingTeloffoffoff-S1------S19-------S2S5-S117-
S5Phone-Teloffoffoff-S1------S20--S25S60S40S6---S2S117-
S6Phone-TelTTSoffoff-S1------S21--S26S61S41-S5--S3S117-
S7Home-MPMPMPMP-S1S22S27S42S62S82S102S17S9-S22S62S42S8----S117-
S8Home-MPTTSMPMP-S1S23S28S43S63S83S103S18S9-S23S63S43-S7---S117-
S9HomeRingingTeloffoffoff-S1------S19-------S7S10-S117-
S10Phone-Teloffoffoff-S1------S20--S25S65S45S11---S7S117-
S11Phone-TelTTSoffoff-S1------S21--S26S66S46-S10--S8S117-
S12Home-RadioRadioRadioRadio-S1S22S27S47S67S87S107S17S14-S22S67S47S13----S117-
S13Home-RadioTTSRadioRadio-S1S23S28S48S68S88S108S18S14-S23S68S48-S12---S117-
S14HomeRingingTeloffoffoff-S1------S19-------S12S15-S117-
S15Phone-Teloffoffoff-S1------S20--S25S70S50S16---S12S117-
S16Phone-TelTTSoffoff-S1------S21--S26S71S51-S15--S13S117-
S17Home-BTABTABTABTA-S1S32S27S52S72S92S112S17S19-S32S72S52S18----S117-
S18Home-BTATTSBTABTA-S1S33S28S53S73S93S113S18S19-S33S73S53-S17---S117-
S19HomeRingingTeloffoffoff-S1------S19-------S17S20-S117-
S20Phone-Teloffoffoff-S1------S20--S35S75S55S21---S17S117-
S21Phone-TelTTSoffoff-S1------S21--S36S76S56-S20--S18S117-
S22MP-MPMPMPMP-S1------S32S24S7-S62S42S23---S117-
S23MP-MPTTSMPMP-S1------S33S24S8-S63S43-S22--S117-
S24MPRingingTeloffoffoff-S1------S34-------S22S25-S117-
S25Phone-Teloffoffoff-S1------S35-S10-S65S45S26---S22S117-
S26Phone-TelTTSoffoff-S1------S36-S11-S66S46-S25--S23S117-
S27Radio-RadioRadioRadioRadio-S1------S32S29S12S22S67S47S28---S117-
S28Radio-RadioTTSRadioRadio-S1------S33S29S13S23S68S48-S27--S117-
S29RadioRingingTeloffoffoff-S1------S34-------S27S30-S117-
S30Phone-Teloffoffoff-S1------S35-S15S25S70S50S31---S27S117-
S31Phone-TelTTSoffoff-S1------S36-S16S26S71S51-S30--S28S117-
S32MP(BTA)-BTABTABTABTA-S1-------S34S17-S72S52S33---S117-
S33MP(BTA)-BTATTSBTABTA-S1-------S34S18-S73S53-S32--S117-
S34MP(BTA)RingingTeloffoffoff-S1--------------S32S35-S117-
S35Phone-Teloffoffoff-S1--------S20-S75S55S36---S32S117-
S36Phone-TelTTSoffoff-S1--------S21-S76S56-S35--S33S117-
S37Navioffoffoffoff-S1------S52S39S2S22S57S37S38----S117-
S38NavioffTTSoffoff-S1------S53S39S3S23S58S38-S37---S117-
S39NaviRingingTeloffoffoff-S1------S54-------S37S40-S117-
S40Phone-Teloffoffoff-S1------S55-S5S25S60S40S41---S37S117-
S41Phone-TelTTSoffoff-S1------S56-S6S26S61S41-S40--S38S117-
S42Navi-MPMPMPMP-S1------S52S44S7S22S62-S43----S117-
S43Navi-MPTTSMPMP-S1------S53S44S8S23S63--S42---S117-
S44NaviRingingTeloffoffoff-S1------S54-------S42S45-S117-
S45Phone-Teloffoffoff-S1------S55-S10S25S65-S46---S42S117-
S46Phone-TelTTSoffoff-S1------S56-S11S26S66--S45--S43S117-
S47Navi-RadioRadioRadioRadio-S1------S52S49S12S22S67-S48----S117-
S48Navi-RadioTTSRadioRadio-S1------S53S49S13S23S68--S47---S117-
S49NaviRingingTeloffoffoff-S1------S54-------S47S50-S117-
S50Phone-Teloffoffoff-S1------S55-S15S25S70-S51---S47S117-
S51Phone-TelTTSoffoff-S1------S56-S16S26S71--S50--S48S117-
S52Navi-BTABTABTABTA-S1-------S54S17S32S72S52S53----S117-
S53Navi-BTATTSBTABTA-S1-------S54S18S33S73S53-S52---S117-
S54NaviRingingTeloffoffoff-S1--------------S52S55-S117-
S55Phone-Teloffoffoff-S1--------S20S35S75S55S56---S52S117-
S56Phone-TelTTSoffoff-S1--------S21S36S76S56-S55--S53S117-
S57HVACoffoffoffoff-S1------S72S59S2S22-S37S58----S117-
S58HVACoffTTSoffoff-S1------S73S59S3S23-S38-S57---S117-
S59HVACRingingTeloffoffoff-S1------S74-------S57S60-S117-
S60Phone-Teloffoffoff-S1------S75-S5S25-S40S61---S57S117-
S61Phone-TelTTSoffoff-S1------S76-S6S26-S41-S60--S58S117-
S62HVAC-MPMPMPMP-S1------S72S64S7S22-S42S63----S117-
S63HVAC-MPTTSMPMP-S1------S73S64S8S23-S43-S62---S117-
S64HVACRingingTeloffoffoff-S1------S74-------S62S65-S117-
S65Phone-Teloffoffoff-S1------S75-S10S25-S45S66---S62S117-
S66Phone-TelTTSoffoff-S1------S76-S11S26-S46-S65--S63S117-
S67HVAC-RadioRadioRadioRadio-S1------S72S69S12S22-S47S68----S117-
S68HVAC-RadioTTSRadioRadio-S1------S73S69S13S23-S48-S67---S117-
S69HVACRingingTeloffoffoff-S1------S74-------S67S70-S117-
S70Phone-Teloffoffoff-S1------S75-S15S25-S50S71---S67S117-
S71Phone-TelTTSoffoff-S1------S76-S16S26-S51-S70--S68S117-
S72HVAC-BTABTABTABTA-S1-------S74S17S32-S52S73----S117-
S73HVAC-BTATTSBTABTA-S1-------S74S18S33-S53-S72---S117-
S74HVACRingingTeloffoffoff-S1--------------S72S75-S117-
S75Phone-Teloffoffoff-S1--------S20S35-S55S76---S72S117-
S76Phone-TelTTSoffoff-S1--------S21S36-S56-S75--S73S117-
S77Phoneoffoffoffoff-S1------S92S79S2S22S57S37S78----S117-
S78PhoneoffTTSoffoff-S1------S93S79S3S23S58S38-S77---S117-
S79PhoneRingingTeloffoffoff-S1------S94-------S77S80-S117-
S80Phone-Teloffoffoff-S1------S95-S5S25S60S40S81---S77S117-
S81Phone-TelTTSoffoff-S1------S96-S6S26S61S41-S80--S78S117-
S82Phone-MPMPMPMP-S1------S92S84S7S22S62S42S83----S117-
S83Phone-MPTTSMPMP-S1------S93S84S8S23S63S43-S82---S117-
S84PhoneRingingTeloffoffoff-S1------S94-------S82S85-S117-
S85Phone-Teloffoffoff-S1------S95-S10S25S65S45S86---S82S117-
S86Phone-TelTTSoffoff-S1------S96-S11S26S66S46-S85--S83S117-
S87Phone-RadioRadioRadioRadio-S1------S92S89S12S22S67S47S88----S117-
S88Phone-RadioTTSRadioRadio-S1------S93S89S13S23S68S48-S87---S117-
S89PhoneRingingTeloffoffoff-S1------S94-------S87S90-S117-
S90Phone-Teloffoffoff-S1------S95-S15S25S70S50S91---S87S117-
S91Phone-TelTTSoffoff-S1------S96-S16S26S71S51-S90--S88S117-
S92Phone-BTABTABTABTA-S1-------S94S17S32S72S52S93----S117-
S93Phone-BTATTSBTABTA-S1-------S94S18S33S73S53-S92---S117-
S94PhoneRingingTeloffoffoff-S1--------------S92S95-S117-
S95Phone-Teloffoffoff-S1--------S20S35S75S55S96---S92S117-
S96Phone-TelTTSoffoff-S1--------S21S36S76S56-S95--S93S117-
S97Other-offoffoffoff-S1------S112S99S2S22S57S37S98----S117-
S98Other-offTTSoffoff-S1------S113S99S3S23S58S38-S97---S117-
S99OtherRingingTeloffoffoff-S1------S114-------S97S100-S117-
S100Other-Teloffoffoff-S1------S115-S5S25S60S40S101---S97S117-
S101Other-TelTTSoffoff-S1------S116-S6S26S61S41-S100--S98S117-
S102OtherMPMPMPMP-S1------S112S104S7S22S62S42S103----S117-
S103OtherMPTTSMPMP-S1------S113S104S8S23S63S43-S102---S117-
S104OtherRingingTeloffoffoff-S1------S114-------S102S105-S117-
S105Other-Teloffoffoff-S1------S115-S10S25S65S45S106---S102S117-
S106Other-TelTTSoffoff-S1------S116-S11S26S66S46-S105--S103S117-
S107Other-RadioRadioRadioRadio-S1------S112S109S12S22S67S47S108----S117-
S108Other-RadioTTSRadioRadio-S1------S113S109S13S23S68S48-S107---S117-
S109OtherRingingTeloffoffoff-S1------S114-------S107S110-S117-
S110Other-Teloffoffoff-S1------S115-S15S25S70S50S111---S107S117-
S111Other-TelTTSoffoff-S1------S116-S16S26S71S51-S110--S108S117-
S112Other-BTABTABTABTA-S1-------S114S17S32S72S52S113----S117-
S113Other-BTATTSBTABTA-S1-------S114S18S33S73S53-S112---S117-
S114OtherRingingTeloffoffoff-S1--------------S112S115-S117-
S115Other-Teloffoffoff-S1--------S20S35S75S55S116---S112S117-
S116Other-TelTTSoffoff-S1--------S21S36S76S56-S115--S113S117-
S117anyanyanyWarnanyany-S1------------------S(previous)
diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.5_Sound_Manager_Developer_Guide_3.md b/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.5_Sound_Manager_Developer_Guide_3.md new file mode 100644 index 0000000..9c3e54e --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/4.7.5_Sound_Manager_Developer_Guide_3.md @@ -0,0 +1,343 @@ +--- +edit_link: '' +title: Sound Manager Developper Guide 3 +origin_url: >- + https://git.automotivelinux.org/apps/agl-service-soundmanager/plain/doc/Display_Audio_Transition2.md?h=master +--- + + + +# Sound mode transition for dual window application + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateEvent
State IDDisplayAudioPowerPush HomeScreen buttonStart BTAIncoming callPush Shortcut buttonTouchTTSPush Phone control buttonSafety hazard
Win#1Win#2PopUpFLFRRLRROnOffMedia PlayerRadioNaviHVACPhoneOther buttonHomeMedia PlayerHVACNaviWin#1Win#2Navi INT TTSEndedRejectOff hookOn hookDetectedRecovered
S1---offoffoffoffS2----------------------
S2Home--offoffoffoff-S1S22S27S37S57S77S97S17S4-S22S57S37--S3----S327-
S3Home--offTTSoffoff-S1S23S28S38S58S78S98S18S4-S23S58S38---S2---S327-
S4Home-RingingTeloffoffoff-S1------S19---------S2S5-S327-
S5Phone--Teloffoffoff-S1------S20--S25S60S40--S6---S2S327-
S6Phone--TelTTSoffoff-S1------S21--S26S61S41---S5--S3S327-
S7Home--MPMPMPMP-S1S22S27S42S62S82S102S17S9-S22S62S42--S8----S327-
S8Home--MPTTSMPMP-S1S23S28S43S63S83S103S18S9-S23S63S43---S7---S327-
S9Home-RingingTeloffoffoff-S1------S19---------S7S10-S327-
S10Phone--Teloffoffoff-S1------S20--S25S65S45--S11---S7S327-
S11Phone--TelTTSoffoff-S1------S21--S26S66S46---S10--S8S327-
S12Home--RadioRadioRadioRadio-S1S22S27S47S67S87S107S17S14-S22S67S47--S13----S327-
S13Home--RadioTTSRadioRadio-S1S23S28S48S68S88S108S18S14-S23S68S48---S12---S327-
S14Home-RingingTeloffoffoff-S1------S19---------S12S15-S327-
S15Phone--Teloffoffoff-S1------S20--S25S70S50--S16---S12S327-
S16Phone--TelTTSoffoff-S1------S21--S26S71S51---S15--S13S327-
S17Home--BTABTABTABTA-S1S32S27S52S72S92S112S17S19-S32S72S52--S18----S327-
S18Home--BTATTSBTABTA-S1S33S28S53S73S93S113S18S19-S33S73S53---S17---S327-
S19Home-RingingTeloffoffoff-S1------S19---------S17S20-S327-
S20Phone--Teloffoffoff-S1------S20--S35S75S55--S21---S17S327-
S21Phone--TelTTSoffoff-S1------S21--S36S76S56---S20--S18S327-
S22MP--MPMPMPMP-S1------S32S24S7-S117S122--S23---S327-
S23MP--MPTTSMPMP-S1------S33S24S8-S118S123---S22--S327-
S24MP-RingingTeloffoffoff-S1------S34---------S22S25-S327-
S25Phone--Teloffoffoff-S1------S35-S10-S120S125--S26---S22S327-
S26Phone--TelTTSoffoff-S1------S36-S11-S121S126---S25--S23S327-
S27Radio--RadioRadioRadioRadio-S1------S32S29S12S132S147S152--S28---S327-
S28Radio--RadioTTSRadioRadio-S1------S33S29S13S133S148S153---S27--S327-
S29Radio-RingingTeloffoffoff-S1------S34---------S27S30-S327-
S30Phone--Teloffoffoff-S1------S35-S15S135S150S155--S31---S27S327-
S31Phone--TelTTSoffoff-S1------S36-S16S136S151S156---S30--S28S327-
S32MP(BTA)--BTABTABTABTA-S1-------S34S17S32S157S162--S33---S327-
S33MP(BTA)--BTATTSBTABTA-S1-------S34S18S33S158S163---S32--S327-
S34MP(BTA)-RingingTeloffoffoff-S1----------------S32S35-S327-
S35Phone--Teloffoffoff-S1--------S20S35S160S165--S36---S32S327-
S36Phone--TelTTSoffoff-S1--------S21S36S161S166---S35--S33S327-
S37Navi-offoffoffoff-S1------S52S39S2S247S257S37--S38----S327-
S38Navi-offTTSoffoff-S1------S53S39S3S248S258S38---S37---S327-
S39Navi-RingingTeloffoffoff-S1------S54---------S37S40-S327-
S40Phone--Teloffoffoff-S1------S55-S5S250S260S40--S41---S37S327-
S41Phone--TelTTSoffoff-S1------S56-S6S251S261S41---S40--S38S327-
S42Navi--MPMPMPMP-S1------S52S44S7S247S262S42--S43----S327-
S43Navi--MPTTSMPMP-S1------S53S44S8S248S263S43---S42---S327-
S44Navi-RingingTeloffoffoff-S1------S54---------S42S45-S327-
S45Phone--Teloffoffoff-S1------S55-S10S250S265S45--S46---S42S327-
S46Phone--TelTTSoffoff-S1------S56-S11S251S266S46---S45--S43S327-
S47Navi--RadioRadioRadioRadio-S1------S52S49S12S247S267S47--S48----S327-
S48Navi--RadioTTSRadioRadio-S1------S53S49S13S248S268S48---S47---S327-
S49Navi-RingingTeloffoffoff-S1------S54---------S47S50-S327-
S50Phone--Teloffoffoff-S1------S55-S15S250S270S50--S51---S47S327-
S51Phone--TelTTSoffoff-S1------S56-S16S251S271S51---S50--S48S327-
S52Navi--BTABTABTABTA-S1-------S54S17S252S272S52--S53----S327-
S53Navi--BTATTSBTABTA-S1-------S54S18S253S273S53---S52---S327-
S54Navi-RingingTeloffoffoff-S1----------------S52S55-S327-
S55Phone--Teloffoffoff-S1--------S20S255S275S55--S56---S52S327-
S56Phone--TelTTSoffoff-S1--------S21S256S276S56---S55--S53S327-
S57HVAC-offoffoffoff-S1------S72S59S2S167S57S177--S58----S327-
S58HVAC-offTTSoffoff-S1------S73S59S3S168S58S178---S57---S327-
S59HVAC-RingingTeloffoffoff-S1------S74---------S57S60-S327-
S60Phone--Teloffoffoff-S1------S75-S5S170S60S177--S61---S57S327-
S61Phone--TelTTSoffoff-S1------S76-S6S171S61S178---S60--S58S327-
S62HVAC--MPMPMPMP-S1------S72S64S7S167S62S182--S63----S327-
S63HVAC--MPTTSMPMP-S1------S73S64S8S168S63S183---S62---S327-
S64HVAC-RingingTeloffoffoff-S1------S74---------S62S65-S327-
S65Phone--Teloffoffoff-S1------S75-S10S170S65S185--S66---S62S327-
S66Phone--TelTTSoffoff-S1------S76-S11S171S66S186---S65--S63S327-
S67HVAC--RadioRadioRadioRadio-S1------S72S69S12S167S67S187--S68----S327-
S68HVAC--RadioTTSRadioRadio-S1------S73S69S13S168S68S188---S67---S327-
S69HVAC-RingingTeloffoffoff-S1------S74---------S67S70-S327-
S70Phone--Teloffoffoff-S1------S75-S15S170S70S190--S71---S67S327-
S71Phone--TelTTSoffoff-S1------S76-S16S171S71S191---S70--S68S327-
S72HVAC--BTABTABTABTA-S1-------S74S17S172S72S192--S73----S327-
S73HVAC--BTATTSBTABTA-S1-------S74S18S173S73S193---S72---S327-
S74HVAC-RingingTeloffoffoff-S1----------------S72S75-S327-
S75Phone--Teloffoffoff-S1--------S20S175S75S195--S76---S72S327-
S76Phone--TelTTSoffoff-S1--------S21S176S76S196---S75--S73S327-
S77Phone-offoffoffoff-S1------S92S79S2S197S207S227--S78----S327-
S78Phone-offTTSoffoff-S1------S93S79S3S198S208S228---S77---S327-
S79Phone-RingingTeloffoffoff-S1------S94---------S77S80-S327-
S80Phone--Teloffoffoff-S1------S95-S5S200S210S230--S81---S77S327-
S81Phone--TelTTSoffoff-S1------S96-S6S201S211S231---S80--S78S327-
S82Phone--MPMPMPMP-S1------S92S84S7S197S212S232--S83----S327-
S83Phone--MPTTSMPMP-S1------S93S84S8S198S213S233---S82---S327-
S84Phone-RingingTeloffoffoff-S1------S94---------S82S85-S327-
S85Phone--Teloffoffoff-S1------S95-S10S200S215S235--S86---S82S327-
S86Phone--TelTTSoffoff-S1------S96-S11S201S216S236---S85--S83S327-
S87Phone--RadioRadioRadioRadio-S1------S92S89S12S197S217S237--S88----S327-
S88Phone--RadioTTSRadioRadio-S1------S93S89S13S198S218S238---S87---S327-
S89Phone-RingingTeloffoffoff-S1------S94---------S87S90-S327-
S90Phone--Teloffoffoff-S1------S95-S15S200S220S240--S91---S87S327-
S91Phone--TelTTSoffoff-S1------S96-S16S201S221S241---S90--S88S327-
S92Phone--BTABTABTABTA-S1-------S94S17S202S222S242--S93----S327-
S93Phone--BTATTSBTABTA-S1-------S94S18S203S223S243---S92---S327-
S94Phone-RingingTeloffoffoff-S1----------------S92S95-S327-
S95Phone--Teloffoffoff-S1--------S20S205S225S245--S96---S92S327-
S96Phone--TelTTSoffoff-S1--------S21S206S226S246---S95--S93S327-
S97Other--offoffoffoff-S1------S112S99S2S277S287S307--S98----S327-
S98Other--offTTSoffoff-S1------S113S99S3S278S288S308---S97---S327-
S99Other-RingingTeloffoffoff-S1------S114---------S97S100-S327-
S100Other--Teloffoffoff-S1------S115-S5S278S290S310--S101---S97S327-
S101Other--TelTTSoffoff-S1------S116-S6S278S291S311---S100--S98S327-
S102Other-MPMPMPMP-S1------S112S104S7S277S292S312--S103----S327-
S103Other-MPTTSMPMP-S1------S113S104S8S278S293S313---S102---S327-
S104Other-RingingTeloffoffoff-S1------S114---------S102S105-S327-
S105Other--Teloffoffoff-S1------S115-S10S278S295S315--S106---S102S327-
S106Other--TelTTSoffoff-S1------S116-S11S278S296S316---S105--S103S327-
S107Other--RadioRadioRadioRadio-S1------S112S109S12S277S297S317--S108----S327-
S108Other--RadioTTSRadioRadio-S1------S113S109S13S278S298S318---S107---S327-
S109Other-RingingTeloffoffoff-S1------S114---------S107S110-S327-
S110Other--Teloffoffoff-S1------S115-S15S278S300S320--S111---S107S327-
S111Other--TelTTSoffoff-S1------S116-S16S278S301S321---S110--S108S327-
S112Other--BTABTABTABTA-S1-------S114S17S282S302S322--S113----S327-
S113Other--BTATTSBTABTA-S1-------S114S18S283S303S323---S112---S327-
S114Other-RingingTeloffoffoff-S1----------------S112S115-S327-
S115Other--Teloffoffoff-S1--------S20S285S305S325--S116---S112S327-
S116Other--TelTTSoffoff-S1--------S21S286S306S326---S115--S113S327-
S117MPHVAC-MPMPMPMP-S1------S157S119S7--S122--S118----S327-
S118MPHVAC-MPTTSMPMP-S1------S158S119S8--S123---S117---S327-
S119MPHVACRingingTeloffoffoff-S1------S159---------S117S120-S327-
S120PhoneHVAC-Teloffoffoff-S1------S160-S10--S125--S121---S117S327-
S121PhoneHVAC-TelTTSoffoff-S1------S161-S11--S126---S120--S118S327-
S122MPNavi-MPMPMPMP-S1------S162S124S7-S117---S123----S327-
S123MPNavi-MPTTSMPMP-S1------S163S124S8-S118----S122---S327-
S124MPNaviRingingTeloffoffoff-S1------S164---------S122S125-S327-
S125PhoneNavi-Teloffoffoff-S1------S165-S10-S120---S126---S122S327-
S126PhoneNavi-Teloffoffoff-S1------S166-S11-S121----S125--S123S327-
S127RadioMP-RadioRadioRadioRadio-S1------S137S129S12S127S147S152-S132S128----S327-
S128RadioMP-RadioTTSRadioRadio-S1------S138S129S13S128S148S153-S133-S127---S327-
S129RadioMPRingingTeloffoffoff-S1------S139---------S127S130-S327-
S130PhoneMP-Teloffoffoff-S1------S140-S15S130S150S155-S135S131---S127S327-
S131PhoneMP-TelTTSoffoff-S1------S141-S16S131S151S156-S136-S130--S128S327-
S132RadioMP-MPMPMPMP-S1------S137S134S7S132S147S152S127-S133----S327-
S133RadioMP-MPTTSMPMP-S1------S138S134S8S133S148S153S128--S132---S327-
S134RadioMPRingingTeloffoffoff-S1------S139---------S132S135-S327-
S135PhoneMP-Teloffoffoff-S1------S140-S10S135S150S155S130-S136---S132S327-
S136PhoneMP-Teloffoffoff-S1------S141-S11S136S151S156S131--S135--S133S327-
S137RadioMP(BTA)-BTABTABTABTA-S1-------S139S17S137S147S152S142-S138----S327-
S138RadioMP(BTA)-BTATTSBTABTA-S1-------S139S18S138S148S153S143--S137---S327-
S139RadioMP(BTA)RingingTeloffoffoff-S1----------------S137S140-S327-
S140PhoneMP(BTA)-Teloffoffoff-S1--------S20S140S150S155S145-S141---S137S327-
S141PhoneMP(BTA)-TelTTSoffoff-S1--------S21S141S151S156S146--S140--S138S327-
S142RadioMP(BTA)-RadioRadioRadioRadio-S1-------S144S17S142S152S157-S137S143----S327-
S143RadioMP(BTA)-RadioTTSRadioRadio-S1-------S144S18S143S153S158-S138-S142---S327-
S144RadioMP(BTA)RingingTeloffoffoff-S1----------------S142S145-S327-
S145PhoneMP(BTA)-Teloffoffoff-S1--------S20S145S155S160-S140S146---S142S327-
S146PhoneMP(BTA)-TelTTSoffoff-S1--------S21S146S156S161-S141-S145--S143S327-
S147RadioHVAC-RadioRadioRadioRadio-S1------S157S149S12S132-S152--S148----S327-
S148RadioHVAC-RadioTTSRadioRadio-S1------S158S149S13S133-S153---S147---S327-
S149RadioHVACRingingTeloffoffoff-S1------S159---------S147S150-S327-
S150PhoneHVAC-Teloffoffoff-S1------S160-S15S135-S155--S151---S147S327-
S151PhoneHVAC-Teloffoffoff-S1------S161-S16S136-S156---S150--S148S327-
S152RadioNavi-RadioRadioRadioRadio-S1------S162S154S12S132S147---S153----S327-
S153RadioNavi-RadioTTSRadioRadio-S1------S163S154S13S133S148----S152---S327-
S154RadioNaviRingingTeloffoffoff-S1------S164---------S152S155-S327-
S155PhoneNavi-Teloffoffoff-S1------S165-S15S135S150---S156---S152S327-
S156PhoneNavi-Teloffoffoff-S1------S166-S16S136S151----S155--S153S327-
S157MP(BTA)HVAC-BTABTABTABTA-S1-------S159S17--S162--S158----S327-
S158MP(BTA)HVAC-BTATTSBTABTA-S1-------S159S18--S163---S157---S327-
S159MP(BTA)HVACRingingTeloffoffoff-S1----------------S157S160-S327-
S160PhoneHVAC-Teloffoffoff-S1--------S20--S165--S161---S157S327-
S161PhoneHVAC-Teloffoffoff-S1--------S21--S166---S160--S158S327-
S162MP(BTA)Navi-BTABTABTABTA-S1-------S164S17-S157---S163----S327-
S163MP(BTA)Navi-BTATTSBTABTA-S1-------S164S18-S158----S162---S327-
S164MP(BTA)NaviRingingTeloffoffoff-S1----------------S162S165-S327-
S165PhoneNavi-Teloffoffoff-S1--------S20-S160---S166---S162S327-
S166PhoneNavi-Teloffoffoff-S1--------S21-S161----S165--S163S327-
S167HVACMP-MPMPMPMP-S1------S172S169S7--S182--S168----S327-
S168HVACMP-MPTTSMPMP-S1------S173S169S8--S183---S167---S327-
S169HVACMPRingingTeloffoffoff-S1------S174---------S167S170-S327-
S170PhoneMP-Teloffoffoff-S1------S175-S10--S183--S171---S167S327-
S171PhoneMP-TelTTSoffoff-S1------S176-S11--S183---S170--S168S327-
S172HVACMP(BTA)-BTABTABTABTA-S1-------S174S17--S192--S173----S327-
S173HVACMP(BTA)-BTATTSBTABTA-S1-------S174S18--S193---S172---S327-
S174HVACMP(BTA)RingingTeloffoffoff-S1----------------S172S175-S327-
S175PhoneMP(BTA)-Teloffoffoff-S1--------S20--S195--S176---S172S327-
S176PhoneMP(BTA)-TelTTSoffoff-S1--------S21--S196---S175--S173S327-
S177HVACNavi-offoffoffoff-S1------S192S179S2S167----S178----S327-
S178HVACNavi-offTTSoffoff-S1------S193S179S3S167-----S177---S327-
S179HVACNaviRingingTeloffoffoff-S1------S194---------S177S180-S327-
S180PhoneNavi-Teloffoffoff-S1------S195-S20S170----S181---S177S327-
S181PhoneNavi-TelTTSoffoff-S1------S196-S21S171-----S180--S178S327-
S182HVACNavi-MPMPMPMP-S1------S192S184S7S167----S183----S327-
S183HVACNavi-MPTTSMPMP-S1------S193S184S8S167-----S182---S327-
S184HVACNaviRingingTeloffoffoff-S1------S194---------S182S185-S327-
S185PhoneNavi-Teloffoffoff-S1------S195-S10S170----S186---S182S327-
S186PhoneNavi-TelTTSoffoff-S1------S196-S11S171-----S185--S183S327-
S187HVACNavi-RadioRadioRadioRadio-S1------S192S189S12S167----S188----S327-
S188HVACNavi-RadioTTSRadioRadio-S1------S193S189S13S167-----S187---S327-
S189HVACNaviRingingTeloffoffoff-S1------S194---------S187S190-S327-
S190PhoneNavi-Teloffoffoff-S1------S195-S15S170----S191---S187S327-
S191PhoneNavi-TelTTSoffoff-S1------S196-S16S171-----S190--S188S327-
S192HVACNavi-BTABTABTABTA-S1-------S194S17S172----S193----S327-
S193HVACNavi-BTATTSBTABTA-S1-------S194S18S173-----S192---S327-
S194HVACNaviRingingTeloffoffoff-S1----------------S192S195-S327-
S195PhoneNavi-Teloffoffoff-S1--------S20S175----S196---S192S327-
S196PhoneNavi-TelTTSoffoff-S1--------S21S176-----S195--S193S327-
S197PhoneMPMPMPMPMP-S1------S202S199S7-S212S232--S198----S327-
S198PhoneMPMPTTSMPMP-S1------S203S199S8-S213S233---S197---S327-
S199PhoneMPRingingTeloffoffoff-S1------S204---------S197S200-S327-
S200PhoneMP-Teloffoffoff-S1------S205-S10-S215S235--S201---S197S327-
S201PhoneMP-TelTTSoffoff-S1------S206-S11-S216S236---S200--S198S327-
S202PhoneMP(BTA)-BTABTABTABTA-S1-------S204S17-S222S242--S203----S327-
S203PhoneMP(BTA)-BTATTSBTABTA-S1-------S204S18-S223S243---S202---S327-
S204PhoneMP(BTA)RingingTeloffoffoff-S1----------------S202S205-S327-
S205PhoneMP(BTA)-Teloffoffoff-S1--------S20-S225S245--S206---S202S327-
S206PhoneMP(BTA)-TelTTSoffoff-S1--------S21-S226S246---S205--S203S327-
S207PhoneHVAC-offoffoffoff-S1------S222S209S2S197-S227--S208----S327-
S208PhoneHVAC-offTTSoffoff-S1------S223S209S3S198-S228---S207---S327-
S209PhoneHVACRingingTeloffoffoff-S1------S224---------S207S210-S327-
S210PhoneHVAC-Teloffoffoff-S1------S225-S20S200-S230--S211---S207S327-
S211PhoneHVAC-TelTTSoffoff-S1------S226-S21S201-S231---S210--S208S327-
S212PhoneHVACMPMPMPMP-S1------S222S214S7S197-S232--S213----S327-
S213PhoneHVACMPTTSMPMP-S1------S223S214S8S198-S233---S212---S327-
S214PhoneHVACRingingTeloffoffoff-S1------S224---------S212S215-S327-
S215PhoneHVAC-Teloffoffoff-S1------S225-S10S200-S235--S216---S212S327-
S216PhoneHVAC-TelTTSoffoff-S1------S226-S11S201-S236---S215--S213S327-
S217PhoneHVAC-RadioRadioRadioRadio-S1------S222S219S12S197-S237--S218----S327-
S218PhoneHVAC-RadioTTSRadioRadio-S1------S223S219S13S198-S238---S217---S327-
S219PhoneHVACRingingTeloffoffoff-S1------S224---------S217S220-S327-
S220PhoneHVAC-Teloffoffoff-S1------S225-S15S200-S240--S221---S217S327-
S221PhoneHVAC-TelTTSoffoff-S1------S226-S16S201-S241---S220--S218S327-
S222PhoneHVAC-BTABTABTABTA-S1-------S224S17S202-S242--S223----S327-
S223PhoneHVAC-BTATTSBTABTA-S1-------S224S18S203-S243---S222---S327-
S224PhoneHVACRingingTeloffoffoff-S1----------------S222S225-S327-
S225PhoneHVAC-Teloffoffoff-S1--------S20S205-S245--S226---S222S327-
S226PhoneHVAC-TelTTSoffoff-S1--------S21S206-S246---S225--S223S327-
S227PhoneNavi-offoffoffoff-S1------S242S229S2S197S207---S228----S327-
S228PhoneNavi-offTTSoffoff-S1------S243S229S3S198S208----S227---S327-
S229PhoneNaviRingingTeloffoffoff-S1------S244---------S227S230-S327-
S230PhoneNavi-Teloffoffoff-S1------S245-S20S200S210---S231---S227S327-
S231PhoneNavi-TelTTSoffoff-S1------S246-S21S201S211----S230--S228S327-
S232PhoneNaviMPMPMPMP-S1------S242S234S7S197S212---S233----S327-
S233PhoneNaviMPTTSMPMP-S1------S243S234S8S198S213----S232---S327-
S234PhoneNaviRingingTeloffoffoff-S1------S244---------S232S235-S327-
S235PhoneNavi-Teloffoffoff-S1------S245-S10S200S215---S236---S232S327-
S236PhoneNavi-TelTTSoffoff-S1------S246-S11S201S216----S235--S233S327-
S237PhoneNavi-RadioRadioRadioRadio-S1------S242S239S12S197S217---S238----S327-
S238PhoneNavi-RadioTTSRadioRadio-S1------S243S239S13S198S218----S237---S327-
S239PhoneNaviRingingTeloffoffoff-S1------S244---------S237S240-S327-
S240PhoneNavi-Teloffoffoff-S1------S245-S15S200S220---S241---S237S327-
S241PhoneNavi-TelTTSoffoff-S1------S246-S16S201S221----S240--S238S327-
S242PhoneNavi-BTABTABTABTA-S1-------S244S17S202S222---S243----S327-
S243PhoneNavi-BTATTSBTABTA-S1-------S244S18S203S223----S242---S327-
S244PhoneNaviRingingTeloffoffoff-S1----------------S242S245-S327-
S245PhoneNavi-Teloffoffoff-S1--------S20S205S225---S246---S242S327-
S246PhoneNavi-TelTTSoffoff-S1--------S21S206S226----S245--S243S327-
S247NaviMP-MPMPMPMP-S1------S252S249S7-S262---S248----S327-
S248NaviMP-MPTTSMPMP-S1------S253S249S8-S263----S247---S327-
S249NaviMPRingingTeloffoffoff-S1------S254---------S247S248-S327-
S250PhoneMP-Teloffoffoff-S1------S255-S10-S265---S251---S247S327-
S251PhoneMP-TelTTSoffoff-S1------S256-S11-S266----S250--S248S327-
S252NaviMP(BTA)-BTABTABTABTA-S1-------S254S17-S272---S253----S327-
S253NaviMP(BTA)-BTATTSBTABTA-S1-------S254S18-S273----S252---S327-
S254NaviMP(BTA)RingingTeloffoffoff-S1----------------S252S253-S327-
S255PhoneMP(BTA)-Teloffoffoff-S1--------S20-S275---S256---S252S327-
S256PhoneMP(BTA)-TelTTSoffoff-S1--------S21-S276----S255--S253S327-
S257NaviHVAC-offoffoffoff-S1------S272S259S2S247----S258----S327-
S258NaviHVAC-offTTSoffoff-S1------S273S259S3S248-----S257---S327-
S259NaviHVACRingingTeloffoffoff-S1------S274---------S257S260-S327-
S260PhoneHVAC-Teloffoffoff-S1------S275-S20S250----S261---S257S327-
S261PhoneHVAC-TelTTSoffoff-S1------S276-S21S251-----S260--S258S327-
S262NaviHVAC-MPMPMPMP-S1------S272S264S7S247----S263----S327-
S263NaviHVAC-MPTTSMPMP-S1------S273S264S8S248-----S262---S327-
S264NaviHVACRingingTeloffoffoff-S1------S274---------S262S265-S327-
S265PhoneHVAC-Teloffoffoff-S1------S275-S10S250----S266---S262S327-
S266PhoneHVAC-TelTTSoffoff-S1------S276-S11S251-----S265--S263S327-
S267NaviHVAC-RadioRadioRadioRadio-S1------S272S269S12S247----S268----S327-
S268NaviHVAC-RadioTTSRadioRadio-S1------S273S269S13S248-----S267---S327-
S269NaviHVACRingingTeloffoffoff-S1------S274---------S267S270-S327-
S270PhoneHVAC-Teloffoffoff-S1------S275-S15S250----S271---S267S327-
S271PhoneHVAC-TelTTSoffoff-S1------S276-S16S251-----S270--S268S327-
S272NaviHVAC-BTABTABTABTA-S1-------S274S17S252----S273----S327-
S273NaviHVAC-BTATTSBTABTA-S1-------S274S18S253-----S272---S327-
S274NaviHVACRingingTeloffoffoff-S1----------------S272S275-S327-
S275PhoneHVAC-Teloffoffoff-S1--------S20S255----S276---S272S327-
S276PhoneHVAC-TelTTSoffoff-S1--------S21S256-----S275--S273S327-
S277OtherMP-MPMPMPMP-S1------S282S279S7-S292S312--S278----S327-
S278OtherMP-MPTTSMPMP-S1------S283S279S8-S293S313---S277---S327-
S279OtherMPRingingTeloffoffoff-S1------S284---------S277S280-S327-
S280PhoneMP-Teloffoffoff-S1------S285-S10-S295S317--S281---S277S327-
S281PhoneMP-TelTTSoffoff-S1------S286-S11-S296S318---S280--S278S327-
S282OtherMP(BTA)-BTABTABTABTA-S1-------S284S12-S302S322--S283----S327-
S283OtherMP(BTA)-BTATTSBTABTA-S1-------S284S13-S303S323---S282---S327-
S284OtherMP(BTA)RingingTeloffoffoff-S1----------------S282S285-S327-
S285PhoneMP(BTA)-Teloffoffoff-S1--------S20-S305S325--S286---S282S327-
S286PhoneMP(BTA)-TelTTSoffoff-S1--------S21-S306S326---S285--S283S327-
S287OtherHVAC-offoffoffoff-S1------S302S289S2S277-S307--S288----S327-
S288OtherHVAC-offTTSoffoff-S1------S303S289S3S278-S308---S287---S327-
S289OtherHVACRingingTeloffoffoff-S1------S304---------S287S290-S327-
S290PhoneHVAC-Teloffoffoff-S1------S305-S20S280-S310--S291---S287S327-
S291PhoneHVAC-TelTTSoffoff-S1------S306-S21S281-S311---S290--S288S327-
S292OtherHVAC-MPMPMPMP-S1------S302S294S7S277-S312--S293----S327-
S293OtherHVAC-MPTTSMPMP-S1------S303S294S8S278-S313---S292---S327-
S294OtherHVACRingingTeloffoffoff-S1------S304---------S292S295-S327-
S295PhoneHVAC-Teloffoffoff-S1------S305-S10S278-S315--S296---S292S327-
S296PhoneHVAC-TelTTSoffoff-S1------S306-S11S278-S316---S295--S293S327-
S297OtherHVAC-RadioRadioRadioRadio-S1------S302S299S12S277-S317--S298----S327-
S298OtherHVAC-RadioTTSRadioRadio-S1------S303S299S13S278-S318---S297---S327-
S299OtherHVACRingingTeloffoffoff-S1------S304---------S297S300-S327-
S300PhoneHVAC-Teloffoffoff-S1------S305-S15S280-S320--S301---S297S327-
S301PhoneHVAC-TelTTSoffoff-S1------S306-S16S281-S321---S300--S298S327-
S302OtherHVAC-BTABTABTABTA-S1-------S304S17S282-S322--S303----S327-
S303OtherHVAC-BTATTSBTABTA-S1-------S304S18S283-S323---S302---S327-
S304OtherHVACRingingTeloffoffoff-S1----------------S302S305-S327-
S305PhoneHVAC-Teloffoffoff-S1--------S20S285-S325--S306---S302S327-
S306PhoneHVAC-TelTTSoffoff-S1--------S21S286-S326---S305--S303S327-
S307OtherNavi-offoffoffoff-S1------S322S309S2S287S287---S308----S327-
S308OtherNavi-offTTSoffoff-S1------S323S309S3S288S288----S307---S327-
S309OtherNaviRingingTeloffoffoff-S1------S324---------S307S310-S327-
S310PhoneNavi-Teloffoffoff-S1------S325-S20S290S290---S311---S307S327-
S311PhoneNavi-TelTTSoffoff-S1------S326-S21S291S291----S310--S308S327-
S312OtherNavi-MPMPMPMP-S1------S322S314S7S292S292---S313----S327-
S313OtherNavi-MPTTSMPMP-S1------S323S314S8S293S293----S312---S327-
S314OtherNaviRingingTeloffoffoff-S1------S324---------S312S315-S327-
S315PhoneNavi-Teloffoffoff-S1------S325-S10S295S295---S316---S312S327-
S316PhoneNavi-TelTTSoffoff-S1------S326-S11S296S296----S315--S313S327-
S317OtherNavi-RadioRadioRadioRadio-S1------S322S319S12S297S297---S318----S327-
S318OtherNavi-RadioTTSRadioRadio-S1------S323S319S13S298S298----S317---S327-
S319OtherNaviRingingTeloffoffoff-S1------S324---------S317S320-S327-
S320PhoneNavi-Teloffoffoff-S1------S325-S15S300S300---S321---S317S327-
S321PhoneNavi-TelTTSoffoff-S1------S326-S16S301S301----S320--S318S327-
S322OtherNavi-BTABTABTABTA-S1-------S324S17S282S302---S323----S327-
S323OtherNavi-BTATTSBTABTA-S1-------S324S18S283S303----S322---S327-
S324OtherNaviRingingTeloffoffoff-S1----------------S322S325-S327-
S325PhoneNavi-Teloffoffoff-S1--------S20S285S305---S326---S322S327-
S326PhoneNavi-TelTTSoffoff-S1--------S21S286S306----S325--S323S327-
S327anyanyanyanyWarnanyany-S1--------------------S(previous)
diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/am-component.png b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/am-component.png new file mode 100644 index 0000000..bf068bb Binary files /dev/null and b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/am-component.png differ diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/change_layout_seq.png b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/change_layout_seq.png new file mode 100644 index 0000000..6895cfa Binary files /dev/null and b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/change_layout_seq.png differ diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/deactivate_window.png b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/deactivate_window.png new file mode 100644 index 0000000..cd0d48c Binary files /dev/null and b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/deactivate_window.png differ diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/example_split.png b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/example_split.png new file mode 100644 index 0000000..e9fd476 Binary files /dev/null and b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/example_split.png differ diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/hmi_framework_designed_seq_toyota.png b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/hmi_framework_designed_seq_toyota.png new file mode 100644 index 0000000..2dedabf Binary files /dev/null and b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/hmi_framework_designed_seq_toyota.png differ diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/initialize-set-event-handler.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/initialize-set-event-handler.svg new file mode 100644 index 0000000..bd7fcfc --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/initialize-set-event-handler.svg @@ -0,0 +1,32 @@ +Application initialization phase (ex. set_event_handler)AppAppHomeScreenBinderHomeScreenBinderHomeScreenGUIHomeScreenGUIinit(port, token)set_event_handler()setup event handler the App wishes to receive・LibHomeScreen::Event_ShowWindow・LibHomeScreen::Event_HideWindow・LibHomeScreen::Event_ReplyShowWindow \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/on_screen_message.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/on_screen_message.svg new file mode 100644 index 0000000..66ceed3 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/on_screen_message.svg @@ -0,0 +1,36 @@ +Application Callback Event On Screen Message / Reply phaseAppAppHomeScreenBinderHomeScreenBinderHomeScreenGUIHomeScreenGUIset_event_handler()LibHomeScreen::Event_OnScreenMessageset_event_handler()LibHomeScreen::Event_OnScreenReplyonScreenMessage(display_message)event_handler(display_message)onScreenReply(reply_message)event_handler(reply_message) \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/request_role.png b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/request_role.png new file mode 100644 index 0000000..ca20678 Binary files /dev/null and b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/request_role.png differ diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_changevolume.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_changevolume.svg new file mode 100644 index 0000000..9f60795 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_changevolume.svg @@ -0,0 +1,117 @@ +CommandPlugInAudio Manager DaemonRoutingPlugInApplicationSoundManagerIAmCommandSendIAmCommandReceiverAudioManagerIAmRoutingReceiveIAmRoutingSendAudio DomainSetVolume()SetVolume()SetVolume()asyncSetSinkVolume()SetVolume()ackSetVolume()ackSetVolumeChange()cbVolumeChangedsignal("volumeChanged")event [volumeChanged] \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_connectsoundroute.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_connectsoundroute.svg new file mode 100644 index 0000000..a3c392a --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_connectsoundroute.svg @@ -0,0 +1,145 @@ +CommandPlugInAudio Manager DaemonRoutingPlugInApplicationSoundManagerIAmCommandSendIAmCommandReceiverAudioManagerIAmRoutingReceiveIAmRoutingSendAudio DomaincbMainConnectionStateChanged(CS_CONNECTING)signal("MmainConnectionChanged (CS_CONECTING)")event [mainConnectionChanged (CS_CONECTING)]Audio Manager Policy decides this mainconnection have to be established.At the beginning of sequence Audio Managershould inform cbMainConnectionStateChanged(CS_CONNECTING) to indicated pre-informationof establishment.asyncConnect()asyncConnect()setAudioMode()ackConnect()ackConnect()asyncConnect()Audio Manager have to know that Applicationcertainly start preparing sound route, and waitproceeding until Application return feedback.Main reason is to make sure that entire sound routeis established before connection state transite tonext phase. Otherwise it is possible for Application toface the problem that ALSA virtual device cannot beopened after connection state is changed.asyncConnect()event [asyncConnect]ackConnect()cbMainConnectionStateChanged(CS_SUSPENDED) \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_disconnectsoundroute.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_disconnectsoundroute.svg new file mode 100644 index 0000000..9036aca --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_disconnectsoundroute.svg @@ -0,0 +1,110 @@ +CommandPlugInAudio Manager DaemonRoutingPlugInApplicationSoundManagerIAmCommandSendIAmCommandReceiverAudioManagerIAmRoutingReceiveIAmRoutingSendAudio DomainasyncDisconnect()asyncDisconnect()event [asyncDisconnect]ackDisconnect()ackDisconnect()asyncDisconnect()asyncDisconnect()disconnect()ackDisconnect()cbMainConnectionStateChanged(CS_DISCONNECTED) \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_registration.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_registration.svg new file mode 100644 index 0000000..9bff665 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_registration.svg @@ -0,0 +1,235 @@ +CommandPlugInAudio Manager DaemonRoutingPlugInApplicationSoundManagerIAmCommandSendIAmCommandReceiverAudioManagerIAmRoutingReceiveIAmRoutingSendAudio Domainalt[Domain Type = DSP/Amplifier]registerDomain()registerDomain()[Domain Type = SoundManager]registerDomain()registerDomain()alt[Register Type = Dynamic]registerSource()registerSource()registerSource()[Register Type = Static]registerSourcecbNewSource()signal("NewSource")event [newSource]alt[Register Type = Dynamic]registerSink()registerSink()[Register Type = Static]registerSinkcbNewSink()signal("NewSink")event [newSink]alt[Register Type = Dynamic]registerGateway()registerGateway()[Register Type = Static]registerGatewayhookDomainRegistrationCompelte()hookDomainRegistrationCompelte() \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_releasesoundmode.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_releasesoundmode.svg new file mode 100644 index 0000000..cbe1fa0 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_releasesoundmode.svg @@ -0,0 +1,119 @@ +CommandPlugInAudio Manager DaemonRoutingPlugInApplicationSoundManagerIAmCommandSendIAmCommandReceiverAudioManagerIAmRoutingReceiveIAmRoutingSendAudio Domaindisconnect()disconnect()disconnect()opt[Main connection is existing]alt[MainConnectioState = CS_SUSPENDED]refDisconnect Sound Route[CS_CONNECTED]refStop Sound StreamingrefDisconnect Sound RoutecbMainConnectionStateChanged()signal("MainConnectionStateChanged")event [mainConnectionStateChanged]cbRemoveMainConnection()signal("RemoveMainConnection")event [removeMainConnection] \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_requestsoundmode.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_requestsoundmode.svg new file mode 100644 index 0000000..5ea9616 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_requestsoundmode.svg @@ -0,0 +1,165 @@ +CommandPlugInAudio Manager DaemonRoutingPlugInApplicationSoundManagerIAmCommandSendIAmCommandReceiverAudioManagerIAmRoutingReceiveIAmRoutingSendAudio Domainconnect()connect()connect()Please note that if same connection(source and sink are completely same)has bee created already, Audio Managerdoes not notify cbNewMainConnection()opt[main connection is not existing]cbNewMainConnectionsignal("NewMainConnection")event [newMainConnection(mainConnectionID)]cbMainConnectionStateChangesignal("MainConnectionStateChange")event [mainConnectionStateChange(CS_DISCONNECTED)]Once connection is requested andcreated in AudioManager, mainconnection continuously performtransition caused by policy decisionloop[Lifecycle of a main connection]alt[Transition of sound mode = Connect]Policy_Decision()refConnect Sound RouterefStart Sound Streaming[Disconnect]refStop Sound StreamingrefDisconnect Sound Route[Suspend]refStop Sound StreamingcbMainConnectionStatesignal("MainConnectionState")event [mainConnectionStateChange]cbRemoveMainConnectionsignal("RemoveMainConnection")event [removemainConnection] \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_setmutestate.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_setmutestate.svg new file mode 100644 index 0000000..8d39775 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_setmutestate.svg @@ -0,0 +1,115 @@ +CommandPlugInAudio Manager DaemonRoutingPlugInApplicationSoundManagerIAmCommandSendIAmCommandReceiverAudioManagerIAmRoutingReceiveIAmRoutingSendAudio DomainSetSinkMuteState()SetSinkMuteState()SetSinkMuteState()asyncSetSinkVolume()SetMute()ackSetMute()ackSetSinkVolumeChange()cbSinkMuteStateChangedsignal("sinkMuteStateChanged")event [sinkMuteStateChanged] \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_startsoundstreaming.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_startsoundstreaming.svg new file mode 100644 index 0000000..108cfa0 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_startsoundstreaming.svg @@ -0,0 +1,129 @@ +CommandPlugInAudio Manager DaemonRoutingPlugInApplicationSoundManagerIAmCommandSendIAmCommandReceiverAudioManagerIAmRoutingReceiveIAmRoutingSendAudio DomainasyncSetSourceState (SS_ON)setMute(SS_ON)Mute(UnMute)ackSetSourceState()asyncSetSourceState()signal("asyncSetSourceState(SS_ON)")event [asyncSetSourceState("on")]Prepare audio device.And start audio playingackSetSourceState()ackSetSourceState()ackSetSource()cbMainConnectionStateChanged(CS_CONNECTED)signal("mainConnectionStateChanged (CS_CONNECTED)")event [mainConnectionStateChanged (CS_CONNECTED)] \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_startup.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_startup.svg new file mode 100644 index 0000000..27f0ab0 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_startup.svg @@ -0,0 +1,68 @@ + +CommandPlugInAudio Manager DaemonRoutingPlugInApplicationSoundManagerIAmCommandSendIAmCommandReceiverAudioManagerIAmRoutingReceiveIAmRoutingSendAudio DomainStartup()loop[Number of Domains]refRegistrationwait_event() \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_stopsoundstreaming.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_stopsoundstreaming.svg new file mode 100644 index 0000000..41a2e41 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/seq_stopsoundstreaming.svg @@ -0,0 +1,129 @@ +CommandPlugInAudio Manager DaemonRoutingPlugInApplicationSoundManagerIAmCommandSendIAmCommandReceiverAudioManagerIAmRoutingReceiveIAmRoutingSendAudio DomainasyncSetSourceState ()asyncSetSourceState(SS_PAUSED)event [asyncSetSourceState("paused")]Stop audio playing.And release audio device.ackSetSourceState()ackSetSourceState()ackSetSourceState()cbMainConnectionStateChanged (CS_SUSPENDED)]signal("MainConnectionStateChanged (CS_SUSPENDED)")event [mainConnectionStateChanged (CS_SUSPENDED)]asyncSetSourceState()SetMute()Mute (MUTE)ackSetSourceState() \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showInformation.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showInformation.svg new file mode 100644 index 0000000..c49d734 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showInformation.svg @@ -0,0 +1,30 @@ +show information on HomeScreen bottom areahomescreen-servicehomescreen-servicehomescreenhomescreenAppAppshowInformation(){"info":"display information"}push showInformation eventdisplay information message 3s \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showNotification.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showNotification.svg new file mode 100644 index 0000000..7ef1572 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showNotification.svg @@ -0,0 +1,34 @@ +show notification on HomeScreen top areahomescreen-servicehomescreen-servicehomescreenhomescreenAppAppshowNotification(){"icon":"display icon", "text":"display text"}push showNotification event{"application_id":"request application id","parameter":{"icon":"display icon", "text":"display text"}}display notification message 3s \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showOnScreen.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showOnScreen.svg new file mode 100644 index 0000000..74fb3a1 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showOnScreen.svg @@ -0,0 +1,72 @@ +show/hide onscreen phaseuseruserhomescreen-servicehomescreen-serviceAppApponscreenapponscreenappwindowmanagerwindowmanagershow onscreenthe operation request onscreenshowWindow(){"application_id":"onscreenapp","parameter":{"area":"display area", "file":"qml file path","data":{"the datas to onscreen qml"}}}push showWindow event{"application_id":"onscreenapp","parameter":{"area":"display area", "file":"qml file path","data":{"the datas to onscreen qml"},"replyto":"caller application id"}}get and save parametersactivateWindow("onscreeapp", "display area")alt[can show]push syncDraw eventendDraw("onscreeapp")load and display qml file[can't show]do nothinghide onscreentap onscreen's buttonreplyShowWindow(){"application_id":"the application id who called onscreenapp","parameter": {"buttonName": "VOLUME_UP", "buttonPressMode": "shortPress", "buttonPressState": "release"}}push replyShowWindow eventcall reply functionhideWindow("onscreenapp")push hideWindow event{"application_id":"request hideWindow application id"}deactivateWindow("onscreenapp");hide window \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showWindow.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showWindow.svg new file mode 100644 index 0000000..c860a85 --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/showWindow.svg @@ -0,0 +1,34 @@ +Application callback event showWindow phaseuseruserhomescreen-servicehomescreen-servicelauncherlauncherAppAppwindowmanagerwindowmanagertap app's iconshowWindow(){"application_id":"tapped application id", "parameter":{"area":"display area", ...}}push showWindow eventactivateWindow("application_name","display area")push syncDraw eventdisplay \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/software-stack.png b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/software-stack.png new file mode 100644 index 0000000..e449868 Binary files /dev/null and b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/software-stack.png differ diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/state_change_example.png b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/state_change_example.png new file mode 100644 index 0000000..23dada4 Binary files /dev/null and b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/state_change_example.png differ diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/tap_shortcut.svg b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/tap_shortcut.svg new file mode 100644 index 0000000..c6be41b --- /dev/null +++ b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/tap_shortcut.svg @@ -0,0 +1,26 @@ +Application Callback Event TapShortcut phaseAppAppHomeScreenBinderHomeScreenBinderHomeScreenGUIHomeScreenGUIset_event_handler()LibHomeScreen::Event_TapShortcuttapShortcut(application_id)event_handler(application_id) \ No newline at end of file diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/typical-usecase.png b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/typical-usecase.png new file mode 100644 index 0000000..47a2d33 Binary files /dev/null and b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/typical-usecase.png differ diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_area.png b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_area.png new file mode 100644 index 0000000..e713782 Binary files /dev/null and b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_area.png differ diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_change_layout.png b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_change_layout.png new file mode 100644 index 0000000..2bc9ef6 Binary files /dev/null and b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_change_layout.png differ diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_layer_stack.png b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_layer_stack.png new file mode 100644 index 0000000..9c99731 Binary files /dev/null and b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_layer_stack.png differ diff --git a/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_software_stack.png b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_software_stack.png new file mode 100644 index 0000000..aa66636 Binary files /dev/null and b/docs/4_APIs_and_Services/4.7_HMI_Framework/parts/wm_software_stack.png differ -- cgit 1.2.3-korg