aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazumasa Mitsunari <knimitz@witz-inc.co.jp>2017-10-02 16:22:02 +0900
committerKazumasa Mitsunari <knimitz@witz-inc.co.jp>2017-10-11 13:33:02 +0900
commitce253994af37137d4c29221e7914f437c3dcb510 (patch)
tree3beed005e974e45d008089ffe67c9793c8bb1ee4
parente483fae4992307f34b6a9926bfba8b2e0568ebe3 (diff)
Add agl-service-soundmanager-2017
Add a new binding agl-service-soundmanager-2017. A image about this see JIRA SPEC-916 Packaging via cmake [PatchSet3] Pass to afb-binding version 2 Fix typo Fix libsoundmanager bug [PatchSet4] Modified commit message [PatchSet5] Re-add root CMakeLists.txt Prevent memory leak of json object Bug-AGL: SPEC-926 Change-Id: I24c0280210777778c379ac7027f3d71fa28d6d85 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
-rw-r--r--CMakeLists.txt46
-rw-r--r--LICENSE54
-rw-r--r--README.md4
-rw-r--r--cmake/modules/Findgtest.cmake38
-rw-r--r--conf/audiomanager-config-sample/configuration.xml545
-rw-r--r--conf/audiomanager-config-sample/configuration_v3.xml545
-rw-r--r--conf/soundmanager-dbus.conf18
-rw-r--r--doc/ApplicationGuide.md330
-rw-r--r--doc/Display_Audio_Transition1.md123
-rw-r--r--doc/Display_Audio_Transition2.md333
-rw-r--r--doc/api-ref/html/annotated.html103
-rw-r--r--doc/api-ref/html/annotated_dup.js5
-rw-r--r--doc/api-ref/html/bc_s.pngbin0 -> 676 bytes
-rw-r--r--doc/api-ref/html/bdwn.pngbin0 -> 147 bytes
-rw-r--r--doc/api-ref/html/class_lib_soundmanager.html532
-rw-r--r--doc/api-ref/html/class_lib_soundmanager.js15
-rw-r--r--doc/api-ref/html/classes.html107
-rw-r--r--doc/api-ref/html/closed.pngbin0 -> 132 bytes
-rw-r--r--doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html104
-rw-r--r--doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.js4
-rw-r--r--doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.html106
-rw-r--r--doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.js5
-rw-r--r--doc/api-ref/html/dir_85932083476b47061c69d172796990a3.html104
-rw-r--r--doc/api-ref/html/dir_85932083476b47061c69d172796990a3.js4
-rw-r--r--doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.html108
-rw-r--r--doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.js6
-rw-r--r--doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.html104
-rw-r--r--doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.js4
-rw-r--r--doc/api-ref/html/doc.pngbin0 -> 746 bytes
-rw-r--r--doc/api-ref/html/doxygen.css1596
-rw-r--r--doc/api-ref/html/doxygen.pngbin0 -> 3779 bytes
-rw-r--r--doc/api-ref/html/dynsections.js104
-rw-r--r--doc/api-ref/html/files.html110
-rw-r--r--doc/api-ref/html/files.js4
-rw-r--r--doc/api-ref/html/folderclosed.pngbin0 -> 616 bytes
-rw-r--r--doc/api-ref/html/folderopen.pngbin0 -> 597 bytes
-rw-r--r--doc/api-ref/html/functions.html137
-rw-r--r--doc/api-ref/html/functions_func.html131
-rw-r--r--doc/api-ref/html/functions_vars.html101
-rw-r--r--doc/api-ref/html/globals.html146
-rw-r--r--doc/api-ref/html/globals_defs.html128
-rw-r--r--doc/api-ref/html/globals_func.html104
-rw-r--r--doc/api-ref/html/globals_vars.html104
-rw-r--r--doc/api-ref/html/index.html97
-rw-r--r--doc/api-ref/html/jquery.js87
-rw-r--r--doc/api-ref/html/libsoundmanager_8cpp.html178
-rw-r--r--doc/api-ref/html/libsoundmanager_8cpp.js5
-rw-r--r--doc/api-ref/html/libsoundmanager_8cpp_source.html116
-rw-r--r--doc/api-ref/html/libsoundmanager_8hpp.html158
-rw-r--r--doc/api-ref/html/libsoundmanager_8hpp.js6
-rw-r--r--doc/api-ref/html/libsoundmanager_8hpp_source.html103
-rw-r--r--doc/api-ref/html/menu.js26
-rw-r--r--doc/api-ref/html/menudata.js16
-rw-r--r--doc/api-ref/html/nav_f.pngbin0 -> 153 bytes
-rw-r--r--doc/api-ref/html/nav_g.pngbin0 -> 95 bytes
-rw-r--r--doc/api-ref/html/nav_h.pngbin0 -> 98 bytes
-rw-r--r--doc/api-ref/html/navtree.css146
-rw-r--r--doc/api-ref/html/navtree.js517
-rw-r--r--doc/api-ref/html/navtreedata.js31
-rw-r--r--doc/api-ref/html/navtreeindex0.js61
-rw-r--r--doc/api-ref/html/open.pngbin0 -> 123 bytes
-rw-r--r--doc/api-ref/html/resize.js114
-rw-r--r--doc/api-ref/html/search/all_0.html26
-rw-r--r--doc/api-ref/html/search/all_0.js4
-rw-r--r--doc/api-ref/html/search/all_1.html26
-rw-r--r--doc/api-ref/html/search/all_1.js9
-rw-r--r--doc/api-ref/html/search/all_2.html26
-rw-r--r--doc/api-ref/html/search/all_2.js6
-rw-r--r--doc/api-ref/html/search/all_3.html26
-rw-r--r--doc/api-ref/html/search/all_3.js4
-rw-r--r--doc/api-ref/html/search/all_4.html26
-rw-r--r--doc/api-ref/html/search/all_4.js6
-rw-r--r--doc/api-ref/html/search/all_5.html26
-rw-r--r--doc/api-ref/html/search/all_5.js6
-rw-r--r--doc/api-ref/html/search/all_6.html26
-rw-r--r--doc/api-ref/html/search/all_6.js5
-rw-r--r--doc/api-ref/html/search/all_7.html26
-rw-r--r--doc/api-ref/html/search/all_7.js4
-rw-r--r--doc/api-ref/html/search/all_8.html26
-rw-r--r--doc/api-ref/html/search/all_8.js7
-rw-r--r--doc/api-ref/html/search/all_9.html26
-rw-r--r--doc/api-ref/html/search/all_9.js6
-rw-r--r--doc/api-ref/html/search/all_a.html26
-rw-r--r--doc/api-ref/html/search/all_a.js8
-rw-r--r--doc/api-ref/html/search/all_b.html26
-rw-r--r--doc/api-ref/html/search/all_b.js4
-rw-r--r--doc/api-ref/html/search/all_c.html26
-rw-r--r--doc/api-ref/html/search/all_c.js4
-rw-r--r--doc/api-ref/html/search/all_d.html26
-rw-r--r--doc/api-ref/html/search/all_d.js4
-rw-r--r--doc/api-ref/html/search/classes_0.html26
-rw-r--r--doc/api-ref/html/search/classes_0.js4
-rw-r--r--doc/api-ref/html/search/classes_1.html26
-rw-r--r--doc/api-ref/html/search/classes_1.js4
-rw-r--r--doc/api-ref/html/search/close.pngbin0 -> 273 bytes
-rw-r--r--doc/api-ref/html/search/defines_0.html26
-rw-r--r--doc/api-ref/html/search/defines_0.js4
-rw-r--r--doc/api-ref/html/search/defines_1.html26
-rw-r--r--doc/api-ref/html/search/defines_1.js6
-rw-r--r--doc/api-ref/html/search/defines_2.html26
-rw-r--r--doc/api-ref/html/search/defines_2.js4
-rw-r--r--doc/api-ref/html/search/defines_3.html26
-rw-r--r--doc/api-ref/html/search/defines_3.js4
-rw-r--r--doc/api-ref/html/search/defines_4.html26
-rw-r--r--doc/api-ref/html/search/defines_4.js4
-rw-r--r--doc/api-ref/html/search/defines_5.html26
-rw-r--r--doc/api-ref/html/search/defines_5.js4
-rw-r--r--doc/api-ref/html/search/defines_6.html26
-rw-r--r--doc/api-ref/html/search/defines_6.js4
-rw-r--r--doc/api-ref/html/search/defines_7.html26
-rw-r--r--doc/api-ref/html/search/defines_7.js5
-rw-r--r--doc/api-ref/html/search/files_0.html26
-rw-r--r--doc/api-ref/html/search/files_0.js5
-rw-r--r--doc/api-ref/html/search/files_1.html26
-rw-r--r--doc/api-ref/html/search/files_1.js4
-rw-r--r--doc/api-ref/html/search/files_2.html26
-rw-r--r--doc/api-ref/html/search/files_2.js4
-rw-r--r--doc/api-ref/html/search/functions_0.html26
-rw-r--r--doc/api-ref/html/search/functions_0.js5
-rw-r--r--doc/api-ref/html/search/functions_1.html26
-rw-r--r--doc/api-ref/html/search/functions_1.js5
-rw-r--r--doc/api-ref/html/search/functions_2.html26
-rw-r--r--doc/api-ref/html/search/functions_2.js4
-rw-r--r--doc/api-ref/html/search/functions_3.html26
-rw-r--r--doc/api-ref/html/search/functions_3.js4
-rw-r--r--doc/api-ref/html/search/functions_4.html26
-rw-r--r--doc/api-ref/html/search/functions_4.js7
-rw-r--r--doc/api-ref/html/search/functions_5.html26
-rw-r--r--doc/api-ref/html/search/functions_5.js5
-rw-r--r--doc/api-ref/html/search/functions_6.html26
-rw-r--r--doc/api-ref/html/search/functions_6.js4
-rw-r--r--doc/api-ref/html/search/functions_7.html26
-rw-r--r--doc/api-ref/html/search/functions_7.js4
-rw-r--r--doc/api-ref/html/search/functions_8.html26
-rw-r--r--doc/api-ref/html/search/functions_8.js4
-rw-r--r--doc/api-ref/html/search/mag_sel.pngbin0 -> 563 bytes
-rw-r--r--doc/api-ref/html/search/nomatches.html12
-rw-r--r--doc/api-ref/html/search/search.css271
-rw-r--r--doc/api-ref/html/search/search.js791
-rw-r--r--doc/api-ref/html/search/search_l.pngbin0 -> 604 bytes
-rw-r--r--doc/api-ref/html/search/search_m.pngbin0 -> 158 bytes
-rw-r--r--doc/api-ref/html/search/search_r.pngbin0 -> 612 bytes
-rw-r--r--doc/api-ref/html/search/searchdata.js30
-rw-r--r--doc/api-ref/html/search/variables_0.html26
-rw-r--r--doc/api-ref/html/search/variables_0.js4
-rw-r--r--doc/api-ref/html/search/variables_1.html26
-rw-r--r--doc/api-ref/html/search/variables_1.js5
-rw-r--r--doc/api-ref/html/search/variables_2.html26
-rw-r--r--doc/api-ref/html/search/variables_2.js4
-rw-r--r--doc/api-ref/html/search/variables_3.html26
-rw-r--r--doc/api-ref/html/search/variables_3.js4
-rw-r--r--doc/api-ref/html/soundmanager_8c.html334
-rw-r--r--doc/api-ref/html/soundmanager_8c.js15
-rw-r--r--doc/api-ref/html/soundmanager_8c_source.html110
-rw-r--r--doc/api-ref/html/splitbar.pngbin0 -> 314 bytes
-rw-r--r--doc/api-ref/html/structevent.html147
-rw-r--r--doc/api-ref/html/structevent.js5
-rw-r--r--doc/api-ref/html/sync_off.pngbin0 -> 853 bytes
-rw-r--r--doc/api-ref/html/sync_on.pngbin0 -> 845 bytes
-rw-r--r--doc/api-ref/html/tab_a.pngbin0 -> 142 bytes
-rw-r--r--doc/api-ref/html/tab_b.pngbin0 -> 169 bytes
-rw-r--r--doc/api-ref/html/tab_h.pngbin0 -> 177 bytes
-rw-r--r--doc/api-ref/html/tab_s.pngbin0 -> 184 bytes
-rw-r--r--doc/api-ref/html/tabs.css1
-rw-r--r--doc/api-ref/html/test_8cpp.html173
-rw-r--r--doc/api-ref/html/test_8cpp.js5
-rw-r--r--doc/api-ref/html/test_8cpp_source.html106
-rw-r--r--doc/parts/am-component.pngbin0 -> 90431 bytes
-rw-r--r--doc/parts/seq_changevolume.svg117
-rw-r--r--doc/parts/seq_connectsoundroute.svg145
-rw-r--r--doc/parts/seq_disconnectsoundroute.svg110
-rw-r--r--doc/parts/seq_initialization.svg129
-rw-r--r--doc/parts/seq_registration.svg235
-rw-r--r--doc/parts/seq_releasesoundmode.svg119
-rw-r--r--doc/parts/seq_requestsoundmode.svg165
-rw-r--r--doc/parts/seq_setmutestate.svg115
-rw-r--r--doc/parts/seq_startsoundstreaming.svg129
-rw-r--r--doc/parts/seq_startup.svg68
-rw-r--r--doc/parts/seq_stopsoundstreaming.svg129
-rw-r--r--doc/parts/software-stack.pngbin0 -> 41677 bytes
-rw-r--r--doc/parts/software-stack2.pngbin0 -> 26849 bytes
-rw-r--r--doc/parts/typical-usecase.pngbin0 -> 256665 bytes
-rw-r--r--doc/parts/typical-usecase2.pngbin0 -> 230655 bytes
-rw-r--r--include/CMakeLists.txt18
-rw-r--r--include/libsoundmanager.hpp95
-rw-r--r--libsoundmanager/CMakeLists.txt48
-rw-r--r--libsoundmanager/libsoundmanager.cpp676
-rw-r--r--package/root/config.xml20
-rw-r--r--package/root/icon.svg283
-rwxr-xr-xscripts/call-sm-binding-method_test.sh17
-rwxr-xr-xscripts/dbus-call-connect-test.sh12
-rwxr-xr-xscripts/dbus-call-test.sh17
-rwxr-xr-xscripts/sm-binding-test-gdb.sh21
-rwxr-xr-xscripts/sm-binding-test.sh21
-rw-r--r--soundmanager.pc.in12
-rw-r--r--src/CMakeLists.txt65
-rw-r--r--src/dbus/audio_manager_interface.c9554
-rw-r--r--src/dbus/audio_manager_interface.h1517
-rw-r--r--src/dbus/command_interface.xml60
-rwxr-xr-xsrc/dbus/generate_dbus.sh24
-rw-r--r--src/dbus/routing_interface.xml85
-rw-r--r--src/dbus/sound_manager_interface.xml36
-rw-r--r--src/export.map1
-rw-r--r--src/sm-error.h52
-rw-r--r--src/sm-helper.c231
-rw-r--r--src/sm-helper.h94
-rw-r--r--src/soundmanager.c1570
207 files changed, 26895 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..54974b4
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,46 @@
+#
+# Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+project(SoundManager C CXX)
+
+cmake_minimum_required(VERSION 2.8)
+
+set(PROJECT_NAME "Sound Manager binding and client library")
+set(PROJECT_VERSION "1.0")
+set(PROJECT_PRETTY_NAME "SM")
+set(PROJECT_DESCRIPTION " Sound Manager binding and client library Binder communicates with Audio Manager and client library to hide IPC for Application")
+set(PROJECT_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})
+set(PROJECT_LIBDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
+set(SOUNDMANAGER_INCLUDEDIR ${PROJECT_INCLUDEDIR}/libsoundmanager)
+set(PROJECT_BINDINGDIR ${binding_install_dir})
+set(LIBSM_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/include)
+
+# get pkgconfig
+INCLUDE(FindPkgConfig)
+link_libraries(-Wl,--as-needed -Wl,--gc-sections -Wl,--no-undefined)
+
+set(CMAKE_BUILD_TYPE Debug)
+add_definitions(-DDEBUGMODE)
+
+add_subdirectory(src)
+add_subdirectory(libsoundmanager)
+add_subdirectory(include)
+
+#generate configure file
+configure_file(soundmanager.pc.in soundmanager.pc @ONLY)
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/soundmanager.pc
+ DESTINATION
+ ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..31c692a
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,54 @@
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ You must give any other recipients of the Work or Derivative Works a copy of this License; and
+ You must cause any modified files to carry prominent notices stating that You changed the files; and
+ You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+ If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b8dbdb1
--- /dev/null
+++ b/README.md
@@ -0,0 +1,4 @@
+This is a SoundManager implementation for the AGL Project.
+===========================================================
+
+See doc/
diff --git a/cmake/modules/Findgtest.cmake b/cmake/modules/Findgtest.cmake
new file mode 100644
index 0000000..8ea850f
--- /dev/null
+++ b/cmake/modules/Findgtest.cmake
@@ -0,0 +1,38 @@
+SET(MODULE_NAME gtest)
+
+SET(${MODULE_NAME}_FOUND FALSE)
+
+FIND_PATH(${MODULE_NAME}_INCLUDE_DIRS
+ NAMES gtest/gtest.h
+ PATHS /usr/include /usr/local/include
+)
+
+FIND_LIBRARY(LIB_GTEST
+ NAMES gtest
+ PATHS /usr/lib
+ /usr/lib64
+ /usr/local/lib
+ /usr/local/lib64
+)
+
+FIND_LIBRARY(LIB_GTEST_MAIN
+ NAMES gtest_main
+ PATHS /usr/lib
+ /usr/lib64
+ /usr/local/lib
+ /usr/local/lib64
+)
+
+IF(LIB_GTEST AND LIB_GTEST_MAIN)
+ SET(${MODULE_NAME}_FOUND TRUE)
+ SET(${MODULE_NAME}_LIBRARIES ${LIB_GTEST} ${LIB_GTEST_MAIN})
+ENDIF()
+
+MARK_AS_ADVANCED(
+ ${MODULE_NAME}_FOUND
+ ${MODULE_NAME}_INCLUDE_DIRS
+ ${MODULE_NAME}_LIBRARIES
+)
+
+MESSAGE(STATUS "${MODULE_NAME}_INCLUDE_DIRS: ${${MODULE_NAME}_INCLUDE_DIRS}")
+MESSAGE(STATUS "${MODULE_NAME}_LIBRARIES: ${${MODULE_NAME}_LIBRARIES}")
diff --git a/conf/audiomanager-config-sample/configuration.xml b/conf/audiomanager-config-sample/configuration.xml
new file mode 100644
index 0000000..3020650
--- /dev/null
+++ b/conf/audiomanager-config-sample/configuration.xml
@@ -0,0 +1,545 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<c:configuration xmlns:c="controller" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="controller audiomanagertypes.xsd ">
+ <listSources>
+ <source>
+ <id>0</id>
+ <domainName>UNKNOWN</domainName>
+ <name>SourceTemplate</name>
+ <volume>0</volume>
+ <visible>TRUE</visible>
+ <className>UNKNOWN</className>
+ <sourceState>SS_OFF</sourceState>
+ <connectionFormat>CF_GENIVI_STEREO</connectionFormat>
+ <connectionFormat>CF_GENIVI_MONO</connectionFormat>
+ <interruptState>IS_OFF</interruptState>
+ <availability>
+ <availability>A_AVAILABLE</availability>
+ <availabilityReason>AR_UNKNOWN</availabilityReason>
+ </availability>
+ <soundProperty>
+ <type>SP_GENIVI_TREBLE</type>
+ <value minValue="0" maxValue="10">5</value>
+ </soundProperty>
+ <soundProperty>
+ <type>SP_GENIVI_MID</type>
+ <value minValue="0" maxValue="10">5</value>
+ </soundProperty>
+ <soundProperty>
+ <type>SP_GENIVI_BASS</type>
+ <value minValue="0" maxValue="10">5</value>
+ </soundProperty>
+ <mainSoundProperty>
+ <type>MSP_GENIVI_TREBLE</type>
+ <value minValue="0" maxValue="10">5</value>
+ </mainSoundProperty>
+ <mainSoundProperty>
+ <type>MSP_GENIVI_MID</type>
+ <value minValue="0" maxValue="10">5</value>
+ </mainSoundProperty>
+ <mainSoundProperty>
+ <type>MSP_GENIVI_BASS</type>
+ <value minValue="0" maxValue="10">5</value>
+ </mainSoundProperty>
+ <registrationType>REG_TEMPLATE</registrationType>
+ <isVolumeSupported>TRUE</isVolumeSupported>
+ <priority>1</priority>
+ <listMainSoundPropertiesToSoundProperties>
+ <mapEntry>MSP_UNKNOWN,SP_UNKNOWN</mapEntry>
+ <mapEntry>MSP_GENIVI_TREBLE,SP_GENIVI_TREBLE</mapEntry>
+ </listMainSoundPropertiesToSoundProperties>
+ </source>
+ <source baseName="SourceTemplate">
+ <id>0</id>
+ <domainName>SoundManager</domainName>
+ <name>mediaplayer</name>
+ <className>BASE</className>
+ <registrationType>REG_ROUTER</registrationType>
+ </source>
+ <source baseName="SourceTemplate">
+ <id>2</id>
+ <domainName>SoundManager</domainName>
+ <name>ALSA#Playback</name>
+ <className>BASE</className>
+ <registrationType>REG_ROUTER</registrationType>
+ </source>
+ <source baseName="SourceTemplate">
+ <id>3</id>
+ <domainName>SoundManager</domainName>
+ <name>music</name>
+ <className>BASE</className>
+ <registrationType>REG_ROUTER</registrationType>
+ </source>
+ <source baseName="SourceTemplate">
+ <id>4</id>
+ <domainName>SoundManager</domainName>
+ <name>Navi</name>
+ <className>INT</className>
+ <registrationType>REG_ROUTER</registrationType>
+ </source>
+ <source baseName="SourceTemplate">
+ <id>5</id>
+ <domainName>SoundManager</domainName>
+ <name>phone</name>
+ <className>PHONE</className>
+ <registrationType>REG_ROUTER</registrationType>
+ </source>
+<!-- add 10-Aug -->
+ <source baseName="SourceTemplate">
+ <id>0</id>
+ <domainName>SoundManager</domainName>
+ <name>radio</name>
+ <className>BASE</className>
+ <registrationType>REG_ROUTER</registrationType>
+ </source>
+<!-- add 10-Aug -->
+ </listSources>
+ <listSinks>
+ <sink>
+ <id>0</id>
+ <domainName>UNKNOWN</domainName>
+ <name>SinkTemplate</name>
+ <volume>0</volume>
+ <visible>TRUE</visible>
+ <mainVolume>100</mainVolume>
+ <className>BASE</className>
+ <muteState>MS_UNMUTED</muteState>
+ <connectionFormat>CF_GENIVI_STEREO</connectionFormat>
+ <connectionFormat>CF_GENIVI_MONO</connectionFormat>
+ <availability>
+ <availability>A_AVAILABLE</availability>
+ <availabilityReason>AR_GENIVI_NEWMEDIA</availabilityReason>
+ </availability>
+ <soundProperty>
+ <type>SP_GENIVI_TREBLE</type>
+ <value minValue="0" maxValue="10">5</value>
+ </soundProperty>
+ <soundProperty>
+ <type>SP_GENIVI_MID</type>
+ <value minValue="0" maxValue="10">5</value>
+ </soundProperty>
+ <soundProperty>
+ <type>SP_GENIVI_BASS</type>
+ <value minValue="0" maxValue="10">5</value>
+ </soundProperty>
+ <mainSoundProperty>
+ <type>MSP_GENIVI_TREBLE</type>
+ <value minValue="0" maxValue="10">5</value>
+ </mainSoundProperty>
+ <mainSoundProperty>
+ <type>MSP_GENIVI_MID</type>
+ <value minValue="0" maxValue="10">5</value>
+ </mainSoundProperty>
+ <mainSoundProperty>
+ <type>MSP_GENIVI_BASS</type>
+ <value minValue="0" maxValue="10">5</value>
+ </mainSoundProperty>
+ <registrationType>REG_TEMPLATE</registrationType>
+ <isVolumeSupported>TRUE</isVolumeSupported>
+ <priority>1</priority>
+ <listMainVolumesToNormalizedVolumes>
+ <tableEntry>0,0.0</tableEntry>
+ <tableEntry>1,0.01</tableEntry>
+ <tableEntry>2,0.02</tableEntry>
+ <tableEntry>3,0.03</tableEntry>
+ <tableEntry>4,0.04</tableEntry>
+ <tableEntry>5,0.05</tableEntry>
+ <tableEntry>6,0.06</tableEntry>
+ <tableEntry>7,0.07</tableEntry>
+ <tableEntry>8,0.08</tableEntry>
+ <tableEntry>9,0.09</tableEntry>
+ <tableEntry>10,0.1</tableEntry>
+ <tableEntry>11,0.11</tableEntry>
+ <tableEntry>12,0.12</tableEntry>
+ <tableEntry>14,0.14</tableEntry>
+ <tableEntry>15,0.15</tableEntry>
+ <tableEntry>17,0.17</tableEntry>
+ <tableEntry>20,0.2</tableEntry>
+ <tableEntry>22,0.22</tableEntry>
+ <tableEntry>25,0.25</tableEntry>
+ <tableEntry>28,0.28</tableEntry>
+ <tableEntry>31,0.31</tableEntry>
+ <tableEntry>35,0.35</tableEntry>
+ <tableEntry>40,0.4</tableEntry>
+ <tableEntry>45,0.45</tableEntry>
+ <tableEntry>50,0.5</tableEntry>
+ <tableEntry>56,0.56</tableEntry>
+ <tableEntry>62,0.62</tableEntry>
+ <tableEntry>70,0.7</tableEntry>
+ <tableEntry>80,0.8</tableEntry>
+ <tableEntry>90,0.9</tableEntry>
+ <tableEntry>100,1.0</tableEntry>
+ </listMainVolumesToNormalizedVolumes>
+ <listNormalizedVolumesToDecibelVolumes>
+ <tableEntry>0.0,-192.0</tableEntry>
+ <tableEntry>0.01,-40.0</tableEntry>
+ <tableEntry>0.02,-34.0</tableEntry>
+ <tableEntry>0.03,-30.0</tableEntry>
+ <tableEntry>0.04,-27.0</tableEntry>
+ <tableEntry>0.05,-26.0</tableEntry>
+ <tableEntry>0.06,-24.0</tableEntry>
+ <tableEntry>0.07,-23.0</tableEntry>
+ <tableEntry>0.08,-22.0</tableEntry>
+ <tableEntry>0.09,-21.0</tableEntry>
+ <tableEntry>0.1,-20.0</tableEntry>
+ <tableEntry>0.11,-19.0</tableEntry>
+ <tableEntry>0.12,-18.0</tableEntry>
+ <tableEntry>0.14,-17.0</tableEntry>
+ <tableEntry>0.15,-16.0</tableEntry>
+ <tableEntry>0.17,-15.0</tableEntry>
+ <tableEntry>0.2,-14.0</tableEntry>
+ <tableEntry>0.22,-13.0</tableEntry>
+ <tableEntry>0.25,-12.0</tableEntry>
+ <tableEntry>0.28,-11.0</tableEntry>
+ <tableEntry>0.31,-10.0</tableEntry>
+ <tableEntry>0.35,-9.0</tableEntry>
+ <tableEntry>0.4,-8.0</tableEntry>
+ <tableEntry>0.45,-7.0</tableEntry>
+ <tableEntry>0.5,-6.0</tableEntry>
+ <tableEntry>0.56,-5.0</tableEntry>
+ <tableEntry>0.62,-4.0</tableEntry>
+ <tableEntry>0.7,-3.0</tableEntry>
+ <tableEntry>0.8,-2.0</tableEntry>
+ <tableEntry>0.9,-1.0</tableEntry>
+ <tableEntry>1.0,0.0</tableEntry>
+ </listNormalizedVolumesToDecibelVolumes>
+ <listMainSoundPropertiesToSoundProperties>
+ <mapEntry>MSP_UNKNOWN,SP_UNKNOWN</mapEntry>
+ <mapEntry>MSP_GENIVI_TREBLE,SP_GENIVI_TREBLE</mapEntry>
+ </listMainSoundPropertiesToSoundProperties>
+ </sink>
+ <sink baseName="SinkTemplate">
+ <id>1</id>
+<!-- <domainName>PulseAudio</domainName> -->
+ <domainName>SoundManager</domainName>
+ <name>rsnd-dai.0-ak4642-hifi#Analog#Stereo</name>
+ <className>BASE</className>
+ <registrationType>REG_CONTROLLER</registrationType>
+ </sink>
+ <sink baseName="SinkTemplate">
+ <id>2</id>
+<!-- <domainName>PulseAudio</domainName> -->
+ <domainName>SoundManager</domainName>
+ <name>Microchip#MOST:0#Multichannel</name>
+ <className>BASE</className>
+ <registrationType>REG_CONTROLLER</registrationType>
+ </sink>
+ </listSinks>
+ <listGateways>
+ <!-- This is a single domain example, therefore no gateway is present -->
+ </listGateways>
+ <listDomains>
+<!-- <domain>
+ <id>0</id>
+ <name>PulseAudio</name>
+ <busName>org.genivi.audiomanager</busName>
+ <nodeName>pulseaudio</nodeName>
+ <early>FALSE</early>
+ <complete>TRUE</complete>
+ <state>DS_CONTROLLED</state>
+ <registrationType>REG_ROUTER</registrationType>
+ </domain> -->
+<!-- add 10-Aug -->
+ <domain>
+ <id>0</id>
+ <name>SoundManager</name>
+ <busName>org.genivi.audiomanager</busName>
+ <nodeName>SoundManager</nodeName>
+ <early>FALSE</early>
+ <complete>TRUE</complete>
+ <state>DS_CONTROLLED</state>
+ <registrationType>REG_ROUTER</registrationType>
+ </domain>
+<!-- add 10-Aug -->
+ </listDomains>
+ <listClasses>
+ <class>
+ <name>BASE</name>
+ <type>C_PLAYBACK</type>
+ <priority>1</priority>
+ <topology>Microchip#MOST:0#Multichannel^rsnd-dai.0-ak4642-hifi#Analog#Stereo=mediaplayer^music^ALSA#Playback^radio</topology>
+ </class>
+ <class>
+ <name>INT</name>
+ <type>C_PLAYBACK</type>
+ <priority>2</priority>
+ <topology>Microchip#MOST:0#Multichannel^rsnd-dai.0-ak4642-hifi#Analog#Stereo=Navi</topology>
+ </class>
+ <class>
+ <name>PHONE</name>
+ <type>C_PLAYBACK</type>
+ <priority>3</priority>
+ <topology>Microchip#MOST:0#Multichannel^rsnd-dai.0-ak4642-hifi#Analog#Stereo=phone</topology>
+ </class>
+ </listClasses>
+ <listPolicies>
+ <!--Connect Policy Start-->
+ <!--BASE Policy-->
+ <policy>
+ <trigger>USER_CONNECTION_REQUEST</trigger>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "BASE"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, REQUESTING, OTHERS) INC CS_CONNECTED</condition>
+ <action>
+ <type>ACTION_DISCONNECT</type>
+ <param>
+ <className>"BASE"</className>
+ <connectionState>CS_CONNECTED</connectionState>
+ </param>
+ </action>
+ </process>
+ </policy>
+ <!--INT policy-->
+ <policy>
+ <trigger>USER_CONNECTION_REQUEST</trigger>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "INT"</condition>
+ <action>
+ <type>ACTION_LIMIT</type>
+ <param>
+ <className>"BASE"</className>
+ <volume>-1000</volume>
+ <pattern>01</pattern>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "INT"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, REQUESTING, OTHERS) INC CS_CONNECTED</condition>
+ <condition>priority(CONNECTIONOFCLASS, REQUESTING, OTHERS) LT priority(CONNECTION, REQUESTING)</condition>
+ <action>
+ <type>ACTION_PUSH</type>
+ <param>
+ <className>"INT"</className>
+ <order>O_NEWEST</order>
+ </param>
+ </action>
+ <break>TRUE</break>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "INT"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, REQUESTING, OTHERS) INC CS_CONNECTED</condition>
+ <action>
+ <type>ACTION_PUSH</type>
+ <param>
+ <className>"INT"</className>
+ <order>O_OLDEST</order>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "INT"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, "PHONE") INC CS_CONNECTED</condition>
+ <action>
+ <type>ACTION_MUTE</type>
+ <param>
+ <className>REQUESTING</className>
+ </param>
+ </action>
+ <action>
+ <type>ACTION_CONNECT</type>
+ <param>
+ <className>REQUESTING</className>
+ </param>
+ </action>
+ <break>TRUE</break>
+ </process>
+ </policy>
+ <!--PHONE policy-->
+ <policy>
+ <trigger>USER_CONNECTION_REQUEST</trigger>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "PHONE"</condition>
+ <action>
+ <type>ACTION_LIMIT</type>
+ <param>
+ <className>"BASE"</className>
+ <volume>-1000</volume>
+ <pattern>02</pattern>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "PHONE"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, "INT") INC CS_CONNECTED</condition>
+ <action>
+ <type>ACTION_MUTE</type>
+ <param>
+ <className>"INT"</className>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(SINK, REQUESTING) EQ "AMP"</condition>
+ <action>
+ <type>ACTION_CONNECT</type>
+ <param>
+ <className>REQUESTING</className>
+ <timeOut>5000</timeOut>
+ </param>
+ </action>
+ <break>TRUE</break>
+ </process>
+ </policy>
+ <!--Connect policy end-->
+ <!--Disconnect policy start-->
+ <policy>
+ <trigger>USER_DISCONNECTION_REQUEST</trigger>
+ <process>
+ <action>
+ <type>ACTION_DISCONNECT</type>
+ <param>
+ <sourceName>REQUESTING</sourceName>
+ <sinkName>REQUESTING</sinkName>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "INT"</condition>
+ <action>
+ <type>ACTION_UNLIMIT</type>
+ <param>
+ <className>"BASE"</className>
+ <pattern>01</pattern>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "INT"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, REQUESTING, OTHERS) INC CS_CONNECTED</condition>
+ <action>
+ <type>ACTION_POP</type>
+ <param>
+ <className>"INT"</className>
+ <order>O_OLDEST</order>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "PHONE"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, "INT") INC CS_CONNECTED</condition>
+ <action>
+ <type>ACTION_UNMUTE</type>
+ <param>
+ <className>"INT"</className>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "PHONE"</condition>
+ <action>
+ <type>ACTION_UNLIMIT</type>
+ <param>
+ <className>"BASE"</className>
+ <pattern>02</pattern>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "BASE"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, "BASE") INC CS_SUSPENDED</condition>
+ <action>
+ <type>ACTION_RESUME</type>
+ <param>
+ <className>"BASE"</className>
+ <connectionState>CS_SUSPENDED</connectionState>
+ </param>
+ </action>
+ </process>
+ </policy>
+ <!-- default volume policy start -->
+ <policy>
+ <trigger>USER_SET_VOLUME</trigger>
+ <process>
+ <action>
+ <type>ACTION_SET_VOLUME</type>
+ <param>
+ <sinkName>REQUESTING</sinkName>
+ </param>
+ </action>
+ </process>
+ </policy>
+ <!-- default volume policy end -->
+ <!-- default mute policy start -->
+ <policy>
+ <trigger>USER_SET_SINK_MUTE_STATE</trigger>
+ <process>
+ <condition>muteState(USER,REQUESTING) EQ MS_MUTED</condition>
+ <action>
+ <type>ACTION_MUTE</type>
+ <param>
+ <sinkName>REQUESTING</sinkName>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>muteState(USER,REQUESTING) EQ MS_UNMUTED</condition>
+ <action>
+ <type>ACTION_UNMUTE</type>
+ <param>
+ <sinkName>REQUESTING</sinkName>
+ </param>
+ </action>
+ </process>
+ </policy>
+ <!-- default mute policy end -->
+ <!-- default set sink sound property policy start -->
+ <policy>
+ <trigger>USER_SET_SINK_MAIN_SOUND_PROPERTY</trigger>
+ <process>
+ <action>
+ <type>ACTION_SET_PROPERTY</type>
+ <param>
+ <sinkName>REQUESTING</sinkName>
+ </param>
+ </action>
+ </process>
+ </policy>
+ <!-- default set sink sound property policy end -->
+ <!-- default set source sound property policy start -->
+ <policy>
+ <trigger>USER_SET_SOURCE_MAIN_SOUND_PROPERTY</trigger>
+ <process>
+ <action>
+ <type>ACTION_SET_PROPERTY</type>
+ <param>
+ <sourceName>REQUESTING</sourceName>
+ </param>
+ </action>
+ </process>
+ </policy>
+ <!-- default set source sound property policy end -->
+ <!-- default connect policy start -->
+ <policy>
+ <trigger>USER_CONNECTION_REQUEST</trigger>
+ <process>
+<!-- <action>
+ <type>ACTION_MUTE</type>
+ <param>
+ <className>REQUESTING</className>
+ <timeOut>5000</timeOut>
+ </param>
+ </action> -->
+ <action>
+ <type>ACTION_CONNECT</type>
+ <param>
+ <className>REQUESTING</className>
+ <timeOut>5000</timeOut>
+ </param>
+ </action>
+<!-- <action>
+ <type>ACTION_UNMUTE</type>
+ <param>
+ <className>REQUESTING</className>
+ </param>
+ </action> -->
+ </process>
+ </policy>
+ <!-- default connect policy end -->
+ </listPolicies>
+ <listSystemProperties>
+ <systemProperty>
+ <type>SYP_DEBUG_LOG</type>
+ <value>5</value>
+ </systemProperty>
+ </listSystemProperties>
+</c:configuration>
diff --git a/conf/audiomanager-config-sample/configuration_v3.xml b/conf/audiomanager-config-sample/configuration_v3.xml
new file mode 100644
index 0000000..9706244
--- /dev/null
+++ b/conf/audiomanager-config-sample/configuration_v3.xml
@@ -0,0 +1,545 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<c:configuration xmlns:c="controller" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="controller audiomanagertypes.xsd ">
+ <listSources>
+ <source>
+ <id>0</id>
+ <domainName>UNKNOWN</domainName>
+ <name>SourceTemplate</name>
+ <volume>0</volume>
+ <visible>TRUE</visible>
+ <className>UNKNOWN</className>
+ <sourceState>SS_OFF</sourceState>
+ <connectionFormat>CF_GENIVI_STEREO</connectionFormat>
+ <connectionFormat>CF_GENIVI_MONO</connectionFormat>
+ <interruptState>IS_OFF</interruptState>
+ <availability>
+ <availability>A_AVAILABLE</availability>
+ <availabilityReason>AR_UNKNOWN</availabilityReason>
+ </availability>
+ <soundProperty>
+ <type>SP_GENIVI_TREBLE</type>
+ <value minValue="0" maxValue="10">5</value>
+ </soundProperty>
+ <soundProperty>
+ <type>SP_GENIVI_MID</type>
+ <value minValue="0" maxValue="10">5</value>
+ </soundProperty>
+ <soundProperty>
+ <type>SP_GENIVI_BASS</type>
+ <value minValue="0" maxValue="10">5</value>
+ </soundProperty>
+ <mainSoundProperty>
+ <type>MSP_GENIVI_TREBLE</type>
+ <value minValue="0" maxValue="10">5</value>
+ </mainSoundProperty>
+ <mainSoundProperty>
+ <type>MSP_GENIVI_MID</type>
+ <value minValue="0" maxValue="10">5</value>
+ </mainSoundProperty>
+ <mainSoundProperty>
+ <type>MSP_GENIVI_BASS</type>
+ <value minValue="0" maxValue="10">5</value>
+ </mainSoundProperty>
+ <registrationType>REG_TEMPLATE</registrationType>
+ <isVolumeSupported>TRUE</isVolumeSupported>
+ <priority>1</priority>
+ <listMainSoundPropertiesToSoundProperties>
+ <mapEntry>MSP_UNKNOWN,SP_UNKNOWN</mapEntry>
+ <mapEntry>MSP_GENIVI_TREBLE,SP_GENIVI_TREBLE</mapEntry>
+ </listMainSoundPropertiesToSoundProperties>
+ </source>
+ <source baseName="SourceTemplate">
+ <id>0</id>
+ <domainName>SoundManager</domainName>
+ <name>mediaplayer</name>
+ <className>BASE</className>
+ <registrationType>REG_ROUTER</registrationType>
+ </source>
+ <source baseName="SourceTemplate">
+ <id>2</id>
+ <domainName>SoundManager</domainName>
+ <name>ALSA#Playback</name>
+ <className>BASE</className>
+ <registrationType>REG_ROUTER</registrationType>
+ </source>
+ <source baseName="SourceTemplate">
+ <id>3</id>
+ <domainName>SoundManager</domainName>
+ <name>music</name>
+ <className>BASE</className>
+ <registrationType>REG_ROUTER</registrationType>
+ </source>
+ <source baseName="SourceTemplate">
+ <id>4</id>
+ <domainName>SoundManager</domainName>
+ <name>Navi</name>
+ <className>INT</className>
+ <registrationType>REG_ROUTER</registrationType>
+ </source>
+ <source baseName="SourceTemplate">
+ <id>5</id>
+ <domainName>SoundManager</domainName>
+ <name>phone</name>
+ <className>PHONE</className>
+ <registrationType>REG_ROUTER</registrationType>
+ </source>
+<!-- add 10-Aug -->
+ <source baseName="SourceTemplate">
+ <id>0</id>
+ <domainName>SoundManager</domainName>
+ <name>radio</name>
+ <className>BASE</className>
+ <registrationType>REG_ROUTER</registrationType>
+ </source>
+<!-- add 10-Aug -->
+ </listSources>
+ <listSinks>
+ <sink>
+ <id>0</id>
+ <domainName>UNKNOWN</domainName>
+ <name>SinkTemplate</name>
+ <volume>0</volume>
+ <visible>TRUE</visible>
+ <mainVolume>100</mainVolume>
+ <className>BASE</className>
+ <muteState>MS_UNMUTED</muteState>
+ <connectionFormat>CF_GENIVI_STEREO</connectionFormat>
+ <connectionFormat>CF_GENIVI_MONO</connectionFormat>
+ <availability>
+ <availability>A_AVAILABLE</availability>
+ <availabilityReason>AR_GENIVI_NEWMEDIA</availabilityReason>
+ </availability>
+ <soundProperty>
+ <type>SP_GENIVI_TREBLE</type>
+ <value minValue="0" maxValue="10">5</value>
+ </soundProperty>
+ <soundProperty>
+ <type>SP_GENIVI_MID</type>
+ <value minValue="0" maxValue="10">5</value>
+ </soundProperty>
+ <soundProperty>
+ <type>SP_GENIVI_BASS</type>
+ <value minValue="0" maxValue="10">5</value>
+ </soundProperty>
+ <mainSoundProperty>
+ <type>MSP_GENIVI_TREBLE</type>
+ <value minValue="0" maxValue="10">5</value>
+ </mainSoundProperty>
+ <mainSoundProperty>
+ <type>MSP_GENIVI_MID</type>
+ <value minValue="0" maxValue="10">5</value>
+ </mainSoundProperty>
+ <mainSoundProperty>
+ <type>MSP_GENIVI_BASS</type>
+ <value minValue="0" maxValue="10">5</value>
+ </mainSoundProperty>
+ <registrationType>REG_TEMPLATE</registrationType>
+ <isVolumeSupported>TRUE</isVolumeSupported>
+ <priority>1</priority>
+ <listMainVolumesToNormalizedVolumes>
+ <tableEntry>0,0.0</tableEntry>
+ <tableEntry>1,0.01</tableEntry>
+ <tableEntry>2,0.02</tableEntry>
+ <tableEntry>3,0.03</tableEntry>
+ <tableEntry>4,0.04</tableEntry>
+ <tableEntry>5,0.05</tableEntry>
+ <tableEntry>6,0.06</tableEntry>
+ <tableEntry>7,0.07</tableEntry>
+ <tableEntry>8,0.08</tableEntry>
+ <tableEntry>9,0.09</tableEntry>
+ <tableEntry>10,0.1</tableEntry>
+ <tableEntry>11,0.11</tableEntry>
+ <tableEntry>12,0.12</tableEntry>
+ <tableEntry>14,0.14</tableEntry>
+ <tableEntry>15,0.15</tableEntry>
+ <tableEntry>17,0.17</tableEntry>
+ <tableEntry>20,0.2</tableEntry>
+ <tableEntry>22,0.22</tableEntry>
+ <tableEntry>25,0.25</tableEntry>
+ <tableEntry>28,0.28</tableEntry>
+ <tableEntry>31,0.31</tableEntry>
+ <tableEntry>35,0.35</tableEntry>
+ <tableEntry>40,0.4</tableEntry>
+ <tableEntry>45,0.45</tableEntry>
+ <tableEntry>50,0.5</tableEntry>
+ <tableEntry>56,0.56</tableEntry>
+ <tableEntry>62,0.62</tableEntry>
+ <tableEntry>70,0.7</tableEntry>
+ <tableEntry>80,0.8</tableEntry>
+ <tableEntry>90,0.9</tableEntry>
+ <tableEntry>100,1.0</tableEntry>
+ </listMainVolumesToNormalizedVolumes>
+ <listNormalizedVolumesToDecibelVolumes>
+ <tableEntry>0.0,-192.0</tableEntry>
+ <tableEntry>0.01,-40.0</tableEntry>
+ <tableEntry>0.02,-34.0</tableEntry>
+ <tableEntry>0.03,-30.0</tableEntry>
+ <tableEntry>0.04,-27.0</tableEntry>
+ <tableEntry>0.05,-26.0</tableEntry>
+ <tableEntry>0.06,-24.0</tableEntry>
+ <tableEntry>0.07,-23.0</tableEntry>
+ <tableEntry>0.08,-22.0</tableEntry>
+ <tableEntry>0.09,-21.0</tableEntry>
+ <tableEntry>0.1,-20.0</tableEntry>
+ <tableEntry>0.11,-19.0</tableEntry>
+ <tableEntry>0.12,-18.0</tableEntry>
+ <tableEntry>0.14,-17.0</tableEntry>
+ <tableEntry>0.15,-16.0</tableEntry>
+ <tableEntry>0.17,-15.0</tableEntry>
+ <tableEntry>0.2,-14.0</tableEntry>
+ <tableEntry>0.22,-13.0</tableEntry>
+ <tableEntry>0.25,-12.0</tableEntry>
+ <tableEntry>0.28,-11.0</tableEntry>
+ <tableEntry>0.31,-10.0</tableEntry>
+ <tableEntry>0.35,-9.0</tableEntry>
+ <tableEntry>0.4,-8.0</tableEntry>
+ <tableEntry>0.45,-7.0</tableEntry>
+ <tableEntry>0.5,-6.0</tableEntry>
+ <tableEntry>0.56,-5.0</tableEntry>
+ <tableEntry>0.62,-4.0</tableEntry>
+ <tableEntry>0.7,-3.0</tableEntry>
+ <tableEntry>0.8,-2.0</tableEntry>
+ <tableEntry>0.9,-1.0</tableEntry>
+ <tableEntry>1.0,0.0</tableEntry>
+ </listNormalizedVolumesToDecibelVolumes>
+ <listMainSoundPropertiesToSoundProperties>
+ <mapEntry>MSP_UNKNOWN,SP_UNKNOWN</mapEntry>
+ <mapEntry>MSP_GENIVI_TREBLE,SP_GENIVI_TREBLE</mapEntry>
+ </listMainSoundPropertiesToSoundProperties>
+ </sink>
+ <sink baseName="SinkTemplate">
+ <id>1</id>
+<!-- <domainName>PulseAudio</domainName> -->
+ <domainName>SoundManager</domainName>
+ <name>rsnd-dai.0-ak4642-hifi#Analog#Stereo</name>
+ <className>BASE</className>
+ <registrationType>REG_CONTROLLER</registrationType>
+ </sink>
+ <sink baseName="SinkTemplate">
+ <id>2</id>
+<!-- <domainName>PulseAudio</domainName> -->
+ <domainName>SoundManager</domainName>
+ <name>Microchip#MOST:0#Multichannel</name>
+ <className>BASE</className>
+ <registrationType>REG_CONTROLLER</registrationType>
+ </sink>
+ </listSinks>
+ <listGateways>
+ <!-- This is a single domain example, therefore no gateway is present -->
+ </listGateways>
+ <listDomains>
+<!-- <domain>
+ <id>0</id>
+ <name>PulseAudio</name>
+ <busName>org.genivi.audiomanager</busName>
+ <nodeName>pulseaudio</nodeName>
+ <early>FALSE</early>
+ <complete>TRUE</complete>
+ <state>DS_CONTROLLED</state>
+ <registrationType>REG_ROUTER</registrationType>
+ </domain> -->
+<!-- add 10-Aug -->
+ <domain>
+ <id>0</id>
+ <name>SoundManager</name>
+ <busName>org.genivi.audiomanager</busName>
+ <nodeName>SoundManager</nodeName>
+ <early>FALSE</early>
+ <complete>TRUE</complete>
+ <state>DS_CONTROLLED</state>
+ <registrationType>REG_ROUTER</registrationType>
+ </domain>
+<!-- add 10-Aug -->
+ </listDomains>
+ <listClasses>
+ <class>
+ <name>BASE</name>
+ <type>C_PLAYBACK</type>
+ <priority>1</priority>
+ <topology>Microchip#MOST:0#Multichannel^rsnd-dai.0-ak4642-hifi#Analog#Stereo=mediaplayer^music^ALSA#Playback^radio</topology>
+ </class>
+ <class>
+ <name>INT</name>
+ <type>C_PLAYBACK</type>
+ <priority>2</priority>
+ <topology>Microchip#MOST:0#Multichannel^rsnd-dai.0-ak4642-hifi#Analog#Stereo=Navi</topology>
+ </class>
+ <class>
+ <name>PHONE</name>
+ <type>C_PLAYBACK</type>
+ <priority>3</priority>
+ <topology>Microchip#MOST:0#Multichannel^rsnd-dai.0-ak4642-hifi#Analog#Stereo=phone</topology>
+ </class>
+ </listClasses>
+ <listPolicies>
+ <!--Connect Policy Start-->
+ <!--BASE Policy-->
+ <policy>
+ <trigger>USER_CONNECTION_REQUEST</trigger>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "BASE"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, REQUESTING, OTHERS) INC CS_CONNECTED</condition>
+ <action>
+ <type>ACTION_SUSPEND</type>
+ <param>
+ <className>"BASE"</className>
+ <connectionState>CS_CONNECTED</connectionState>
+ </param>
+ </action>
+ </process>
+ </policy>
+ <!--INT policy-->
+ <policy>
+ <trigger>USER_CONNECTION_REQUEST</trigger>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "INT"</condition>
+ <action>
+ <type>ACTION_LIMIT</type>
+ <param>
+ <className>"BASE"</className>
+ <volume>-1000</volume>
+ <pattern>01</pattern>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "INT"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, REQUESTING, OTHERS) INC CS_CONNECTED</condition>
+ <condition>priority(CONNECTIONOFCLASS, REQUESTING, OTHERS) LT priority(CONNECTION, REQUESTING)</condition>
+ <action>
+ <type>ACTION_PUSH</type>
+ <param>
+ <className>"INT"</className>
+ <order>O_NEWEST</order>
+ </param>
+ </action>
+ <break>TRUE</break>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "INT"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, REQUESTING, OTHERS) INC CS_CONNECTED</condition>
+ <action>
+ <type>ACTION_PUSH</type>
+ <param>
+ <className>"INT"</className>
+ <order>O_OLDEST</order>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "INT"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, "PHONE") INC CS_CONNECTED</condition>
+ <action>
+ <type>ACTION_MUTE</type>
+ <param>
+ <className>REQUESTING</className>
+ </param>
+ </action>
+ <action>
+ <type>ACTION_CONNECT</type>
+ <param>
+ <className>REQUESTING</className>
+ </param>
+ </action>
+ <break>TRUE</break>
+ </process>
+ </policy>
+ <!--PHONE policy-->
+ <policy>
+ <trigger>USER_CONNECTION_REQUEST</trigger>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "PHONE"</condition>
+ <action>
+ <type>ACTION_LIMIT</type>
+ <param>
+ <className>"BASE"</className>
+ <volume>-1000</volume>
+ <pattern>02</pattern>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "PHONE"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, "INT") INC CS_CONNECTED</condition>
+ <action>
+ <type>ACTION_MUTE</type>
+ <param>
+ <className>"INT"</className>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(SINK, REQUESTING) EQ "AMP"</condition>
+ <action>
+ <type>ACTION_CONNECT</type>
+ <param>
+ <className>REQUESTING</className>
+ <timeOut>5000</timeOut>
+ </param>
+ </action>
+ <break>TRUE</break>
+ </process>
+ </policy>
+ <!--Connect policy end-->
+ <!--Disconnect policy start-->
+ <policy>
+ <trigger>USER_DISCONNECTION_REQUEST</trigger>
+ <process>
+ <action>
+ <type>ACTION_DISCONNECT</type>
+ <param>
+ <sourceName>REQUESTING</sourceName>
+ <sinkName>REQUESTING</sinkName>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "INT"</condition>
+ <action>
+ <type>ACTION_UNLIMIT</type>
+ <param>
+ <className>"BASE"</className>
+ <pattern>01</pattern>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "INT"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, REQUESTING, OTHERS) INC CS_CONNECTED</condition>
+ <action>
+ <type>ACTION_POP</type>
+ <param>
+ <className>"INT"</className>
+ <order>O_OLDEST</order>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "PHONE"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, "INT") INC CS_CONNECTED</condition>
+ <action>
+ <type>ACTION_UNMUTE</type>
+ <param>
+ <className>"INT"</className>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "PHONE"</condition>
+ <action>
+ <type>ACTION_UNLIMIT</type>
+ <param>
+ <className>"BASE"</className>
+ <pattern>02</pattern>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>name(CLASS, REQUESTING) EQ "BASE"</condition>
+ <condition>connectionState(CONNECTIONOFCLASS, "BASE") INC CS_SUSPENDED</condition>
+ <action>
+ <type>ACTION_RESUME</type>
+ <param>
+ <className>"BASE"</className>
+ <connectionState>CS_SUSPENDED</connectionState>
+ </param>
+ </action>
+ </process>
+ </policy>
+ <!-- default volume policy start -->
+ <policy>
+ <trigger>USER_SET_VOLUME</trigger>
+ <process>
+ <action>
+ <type>ACTION_SET_VOLUME</type>
+ <param>
+ <sinkName>REQUESTING</sinkName>
+ </param>
+ </action>
+ </process>
+ </policy>
+ <!-- default volume policy end -->
+ <!-- default mute policy start -->
+ <policy>
+ <trigger>USER_SET_SINK_MUTE_STATE</trigger>
+ <process>
+ <condition>muteState(USER,REQUESTING) EQ MS_MUTED</condition>
+ <action>
+ <type>ACTION_MUTE</type>
+ <param>
+ <sinkName>REQUESTING</sinkName>
+ </param>
+ </action>
+ </process>
+ <process>
+ <condition>muteState(USER,REQUESTING) EQ MS_UNMUTED</condition>
+ <action>
+ <type>ACTION_UNMUTE</type>
+ <param>
+ <sinkName>REQUESTING</sinkName>
+ </param>
+ </action>
+ </process>
+ </policy>
+ <!-- default mute policy end -->
+ <!-- default set sink sound property policy start -->
+ <policy>
+ <trigger>USER_SET_SINK_MAIN_SOUND_PROPERTY</trigger>
+ <process>
+ <action>
+ <type>ACTION_SET_PROPERTY</type>
+ <param>
+ <sinkName>REQUESTING</sinkName>
+ </param>
+ </action>
+ </process>
+ </policy>
+ <!-- default set sink sound property policy end -->
+ <!-- default set source sound property policy start -->
+ <policy>
+ <trigger>USER_SET_SOURCE_MAIN_SOUND_PROPERTY</trigger>
+ <process>
+ <action>
+ <type>ACTION_SET_PROPERTY</type>
+ <param>
+ <sourceName>REQUESTING</sourceName>
+ </param>
+ </action>
+ </process>
+ </policy>
+ <!-- default set source sound property policy end -->
+ <!-- default connect policy start -->
+ <policy>
+ <trigger>USER_CONNECTION_REQUEST</trigger>
+ <process>
+<!-- <action>
+ <type>ACTION_MUTE</type>
+ <param>
+ <className>REQUESTING</className>
+ <timeOut>5000</timeOut>
+ </param>
+ </action> -->
+ <action>
+ <type>ACTION_CONNECT</type>
+ <param>
+ <className>REQUESTING</className>
+ <timeOut>5000</timeOut>
+ </param>
+ </action>
+<!-- <action>
+ <type>ACTION_UNMUTE</type>
+ <param>
+ <className>REQUESTING</className>
+ </param>
+ </action> -->
+ </process>
+ </policy>
+ <!-- default connect policy end -->
+ </listPolicies>
+ <listSystemProperties>
+ <systemProperty>
+ <type>SYP_DEBUG_LOG</type>
+ <value>5</value>
+ </systemProperty>
+ </listSystemProperties>
+</c:configuration>
diff --git a/conf/soundmanager-dbus.conf b/conf/soundmanager-dbus.conf
new file mode 100644
index 0000000..cacb60e
--- /dev/null
+++ b/conf/soundmanager-dbus.conf
@@ -0,0 +1,18 @@
+<!-- This configuration file specifies the required security policies
+to use the audiomanager command d-bus plugin interface. -->
+
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+ <!-- ../system.conf have denied everything, so we just punch some holes -->
+ <policy user="root">
+ <allow own="org.genivi.audiomanager.routing.soundmanager"/>
+ <allow send_destination="org.genivi.audiomanager.routing.soundmanager"/>
+ </policy>
+ <policy at_console="true">
+ <allow send_destination="org.genivi.audiomanager.routing.soundmanager"/>
+ </policy>
+ <policy context="default">
+ <allow send_destination="org.genivi.audiomanager.routing.soundmanager"/>
+ </policy>
+</busconfig>
diff --git a/doc/ApplicationGuide.md b/doc/ApplicationGuide.md
new file mode 100644
index 0000000..a56a7b1
--- /dev/null
+++ b/doc/ApplicationGuide.md
@@ -0,0 +1,330 @@
+**Sound Manager Application Guide**
+====
+<div align="right">Revision: 0.2Beta</div>
+<div align="right">TOYOTA MOTOR CORPORATION</div>
+<div align="right">Advanced Driver Information Technology</div>
+<div align="right">2nd/Oct/2017</div>
+
+* * *
+
+## **<div id="Table\ of\ content">Table of content</div>**
+- [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)
+
+* * *
+
+## **<div id="Target\ reader\ of\ this\ document">Target reader of this document</div>**
+Application developer whose software uses sound output.
+
+* * *
+
+## **<div id="Overview">Overview</div>**
+The sound manager is the service which provides **sound-right management** for multiple sound sources.
+This service based on GENIVI Audio Manager, and this package contains service binder and library for API calling.
+The reason why this service based on GENIVI Audio Manager is because the sound 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
+2. Media Player
+3. Tel (Ring and talking)
+4. 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, "Tel" and "TTS" is stronger 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 depends on OEM's requirement, "Stop" is required, not "Mute".)
+ "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.md)
+ 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.md)
+ 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".
+
+* * *
+
+## **<div id="Getting\ Start">Getting Start</div>**
+
+### **<div id="Supported\ environment">Supported environment</div>**
+| Item | Description |
+|:------------|:----------------------------------|
+| AGL version | Daring Dab |
+| Hardware | Renesas R-Car Starter Kit Pro(M3) |
+
+
+### **<div id="Build">Build</div>**
+
+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
+```
+$ mkdir WORK
+$ cd WORK
+$ repo init -b dab -m dab_4.0.0_xml -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
+$ repo sync
+$ git clone https://gerrit.automotivelinux.org/gerrit/staging/meta-hmi-framework
+
+```
+
+Then you can get the following recipe.
+* `meta-hmi-framework/agl-service-soundmanager-2017`
+
+
+**Bitbake**
+```
+$ source meta-agl/scripts/aglsetup.sh -m m3ulcb agl-demo agl-devel agl-appfw-smack hmi-framework
+$ bitbake agl-service-soundmanager-2017
+```
+
+
+* * *
+
+### **<div id="Configuring">Configuring</div>**
+To use Sound Manager API, an application shall paste the following configuration definition into "config.xml" of application.
+```
+<feature name="urn:AGL:widget:required-api">
+ <param name="soundmanager" value="ws" />
+</feature>
+```
+
+* * *
+
+### **<div id="Additional\ work">Additional work</div>**
+
+**Add Policy file**
+
+To add Sound Manager Domain into policy, put the following file to /etc/audiomanager/control.
+
+` soundmanager/conf/audiomanager-config-sample/configuration.xml`
+
+
+**Remove Module router of Pulse Audio**
+
+Because the module rounter access to Audio manager for getting sound right instead of application in CES2017, after you changed your application code for Sound manager, you should remove the module router.
+To do this, you have to comment out line.143 of /etc/pulse/default.pa as below.
+
+```
+.ifexists module-router.so
+#load-module module-router
+.endif
+
+```
+
+
+* * *
+
+### **<div id="How\ to\ call\ Sound\ Manager\ APIs\ from\ your\ Application?">How to call Sound Manager APIs from your Application?</div>**
+Sound Manager provides a library which is called "libsoundmanager".
+This library provides function style API calling interface. So you should include libsoundmanager.hpp headerfile, and should link this library.
+Please also refer sample application and template.
+
+
+See also our [Sample code](#Sample\ code).
+
+
+<br />
+
+* * *
+
+## **<div id="Supported\ usecase">Supported usecase</div>**
+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)
+
+* * *
+
+## **<div id="Software\ Architecture">Software Architecture</div>**
+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 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 Sound Manager.
+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 libsoundmanager and upper binder, upper binder and lower binder, lower binder (soundmanager-binding) and AudioManager are WebSocket.
+
+![software-stack.png](parts/software-stack.png)
+
+* * *
+
+## **<div id="API\ reference">API reference</div>**
+"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.)
+
+
+### **<div id="APIs">APIs</div>**
+
+- [init(int port, const std::string& token)]()
+- [registerSource(const std::string& sourceName)](http://docs.projects.genivi.org/AudioManager/a00053.html#acadce23459d94cec496d17700cbde230)
+- [connect(int sourceID, int sinkID)](http://docs.projects.genivi.org/AudioManager/a00033.html#a62d8f5aee1e601d59f993c5a5561e234)
+- [connect(int sourceID, const std::string& sinkName = "default")](http://docs.projects.genivi.org/AudioManager/a00033.html#a62d8f5aee1e601d59f993c5a5561e234)
+- [disconnect(int connectionID)](http://docs.projects.genivi.org/AudioManager/a00033.html#aa24d0146f4e3c75e02d6c0152e246da1)
+- [ackSetSourceState(int sourceID, int handle, int errno)](http://docs.projects.genivi.org/AudioManager/a00053.html#a11f6b0378a50296a72107d6a1fa7ec21)
+- [LibSoundmanager ()](api-ref/html/class_lib_soundmanager.html#a8b51e9891813cb62dd12109c017ad106)
+- [set_event_handler(enum EventType_AsyncSetSourceState et, handler_asyncSetSourceState f)]()
+- [register_callback( 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)]()
+- [register_callback( void (*reply_cb)(struct json_object* reply_contents), void (*hangup_cb)(void) = nullptr)]()
+
+
+The below APIs will be available at RC2.
+
+- [setVolume (const am_sinkID_t sinkID, const am_mainVolume_t volume)](http://docs.projects.genivi.org/AudioManager/a00033.html#a6d47bc67473d75495260abe8c666fc7e)
+- [volumeStep (const am_sinkID_t sinkID, const int16_t volumeStep)](http://docs.projects.genivi.org/AudioManager/a00033.html#ad7a4c1fe5a2ecfaae5484a14d8820e58)
+- [setSinkMuteState (const am_sinkID_t sinkID, const am_MuteState_e muteState)](http://docs.projects.genivi.org/AudioManager/a00033.html#afae22041843c5349be16a6593d3ebb9c)
+- [getListMainConnections (std::vector< am_MainConnectionType_s > &listConnections)](http://docs.projects.genivi.org/AudioManager/a00033.html#a59d10a7178e3227d0b8f415308c71179)
+- [confirmRoutingReady (const uint16_t handle, const am_Error_e error)](http://docs.projects.genivi.org/AudioManager/a00053.html#a1dd1b89cccffeaafb1a3c11cebd7e48c)
+
+
+### **<div id="Events">Events</div>**
+
+- [EventType_AsyncSetSourceState]()
+
+The below Events will be available at RC2.
+
+- [EventType_NewMainConnection](http://docs.projects.genivi.org/AudioManager/a00034.html#a69ada9e19c65c1d078d8a5f473d08586)
+- [EventType_RemovedMainConnection](http://docs.projects.genivi.org/AudioManager/a00034.html#aa3b5906bcf682cff155fb24d402efd89)
+- [EventType_MainConnectionStateChanged](http://docs.projects.genivi.org/AudioManager/a00034.html#a32aa8ab84632805a876e023a7aead810)
+- [EventType_VolumeChanged](http://docs.projects.genivi.org/AudioManager/a00034.html#a4494fdd835137e572f2cf4a3aceb6ae5)
+- [EventType_SinkMuteStateChanged](http://docs.projects.genivi.org/AudioManager/a00034.html#a6068ce59089fbdc63aec81e778aba238)
+- [EventType_setRoutingReady](http://docs.projects.genivi.org/AudioManager/a00054.html#a7a4d410e30df0e8240d25a57e3c72c6b)
+- [EventType_asyncConnect](http://docs.projects.genivi.org/AudioManager/a00054.html#a8a81297be9c64511e27d85444c59b0d6)
+- [EventType_asyncSetSourceState](http://docs.projects.genivi.org/AudioManager/a00054.html#ab02d93d54ee9cd98776a3f2d274ee24d)
+- [EventType_asyncDisconnect](http://docs.projects.genivi.org/AudioManager/a00054.html#a93ae95515730eb615ab5dfc1316d7862)
+
+* * *
+
+## **<div id="Sequence">Sequence</div>**
+### **<div id="StartUp">StartUp</div>**
+![seq_startup.png](parts/seq_startup.svg)
+
+### **<div id="Registration">Registration</div>**
+![seq_registration.png](parts/seq_registration.svg)
+
+### **<div id="Request\ Sound\ Right">Request Sound Right</div>**
+![seq_requestsoundmode.png](parts/seq_requestsoundmode.svg)
+
+### **<div id="Connect\ Sound\ Route">Connect Sound Route</div>**
+![seq_connectsoundroute.png](parts/seq_connectsoundroute.svg)
+
+### **<div id="Start\ Sound\ Streaming">Start Sound Streaming</div>**
+![seq_startsoundstreaming.png](parts/seq_startsoundstreaming.svg)
+
+### **<div id="Stop\ Sound\ Streaming">Stop Sound Streaming</div>**
+![seq_stopsoundstreaming.png](parts/seq_stopsoundstreaming.svg)
+
+### **<div id="Disconnect\ Sound\ Route">Disconnect Sound Route</div>**
+![seq_disconnectsoundroute.png](parts/seq_disconnectsoundroute.svg)
+
+### **<div id="Change\ Volume">Change Volume</div>**
+![seq_changevolume.png](parts/seq_changevolume.svg)
+
+### **<div id="Set\ Mute\ State">Set Mute State</div>**
+![seq_setmutestate.png](parts/seq_setmutestate.svg)
+
+### **<div id="Release\ Sound\ Right">Release Sound Right</div>**
+![seq_releasesoundmode.png](parts/seq_releasesoundmode.svg)
+
+* * *
+
+### **<div id="Audio\ Domain">Audio Domain</div>**
+
+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.
+
+
+# **<div id="Sample\ code">Sample code</div>**
+You can find sample implementation of Sound Manager as below.
+* `apps/agl-service-homescreen-2017/sample/template`
+* `apps/agl-service-homescreen-2017/sample/radio`
+* `apps/agl-service-homescreen-2017/sample/mediaplayer`
+
+
+
+# **<div id="Limitation">Limitation</div>**
+* Minimum APIs and Events are prepared for RC1, the following APIs will be available for RC2.
+
+ * setVolume
+ * volumeStep
+ * setSinkMuteState
+ * getListMainConnections
+ * confirmRoutingReady
+ * EventType_NewMainConnection
+ * EventType_RemovedMainConnection
+ * EventType_MainConnectionStateChanged
+ * EventType_VolumeChanged
+ * EventType_SinkMuteStateChanged
+ * EventType_setRoutingReady
+ * EventType_asyncConnect
+ * EventType_asyncSetSourceState
+ * EventType_asyncDisconnect
+
+
diff --git a/doc/Display_Audio_Transition1.md b/doc/Display_Audio_Transition1.md
new file mode 100644
index 0000000..a9c1604
--- /dev/null
+++ b/doc/Display_Audio_Transition1.md
@@ -0,0 +1,123 @@
+# Sound mode transition for single window application
+<table>
+<tr bgcolor="lightskyblue"><td colspan=7>State</td><td colspan=21>Event</td></tr>
+<tr bgcolor="lightskyblue"><td rowspan=2>State ID</td><td colspan=2>Display</td><td colspan=4>Audio</td><td colspan=2>Power</td><td colspan=6>Push HomeScreen button</td><td rowspan=2>Start BTA</td><td rowspan=2>Incoming call</td><td colspan=4>Push Shortcut button</td><td colspan=2>TTS</td><td colspan=3>Push Phone control button</td><td colspan=2>Safety hazard</td></tr>
+<tr bgcolor="lightskyblue"><td>Win#1</td><td>PopUp</td><td>FL</td><td>FR</td><td>RL</td><td>RR</td><td>On</td><td>Off</td><td>Media Player</td><td>Radio</td><td>Navi</td><td>HVAC</td><td>Phone</td><td>Other button</td><td>Home</td><td>Media Player</td><td>HVAC</td><td>Navi</td><td>Navi INT TTS</td><td>Ended</td><td>Reject</td><td>Off hook</td><td>On hook</td><td>Detected</td><td>Recovered</td></tr>
+<tr><td>S1</td><td>-</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>S2</td><td bgcolor="gray">-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">-</td><td bgcolor="gray">-</td></tr>
+<tr><td>S2</td><td>Home</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>S22</td><td>S27</td><td>S37</td><td>S57</td><td>S77</td><td>S97</td><td>S17</td><td>S4</td><td>-</td><td>S22</td><td>S57</td><td>S37</td><td>S3</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S3</td><td>Home</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>S23</td><td>S28</td><td>S38</td><td>S58</td><td>S78</td><td>S98</td><td>S18</td><td>S4</td><td>-</td><td>S23</td><td>S58</td><td>S38</td><td>-</td><td>S2</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S4</td><td>Home</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S2</td><td>S5</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S5</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S25</td><td>S60</td><td>S40</td><td>S6</td><td>-</td><td>-</td><td>-</td><td>S2</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S6</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S26</td><td>S61</td><td>S41</td><td>-</td><td>S5</td><td>-</td><td>-</td><td>S3</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S7</td><td>Home</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>S22</td><td>S27</td><td>S42</td><td>S62</td><td>S82</td><td>S102</td><td>S17</td><td>S9</td><td>-</td><td>S22</td><td>S62</td><td>S42</td><td>S8</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S8</td><td>Home</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>S23</td><td>S28</td><td>S43</td><td>S63</td><td>S83</td><td>S103</td><td>S18</td><td>S9</td><td>-</td><td>S23</td><td>S63</td><td>S43</td><td>-</td><td>S7</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S9</td><td>Home</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S7</td><td>S10</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S10</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S25</td><td>S65</td><td>S45</td><td>S11</td><td>-</td><td>-</td><td>-</td><td>S7</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S11</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S26</td><td>S66</td><td>S46</td><td>-</td><td>S10</td><td>-</td><td>-</td><td>S8</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S12</td><td>Home</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>S22</td><td>S27</td><td>S47</td><td>S67</td><td>S87</td><td>S107</td><td>S17</td><td>S14</td><td>-</td><td>S22</td><td>S67</td><td>S47</td><td>S13</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S13</td><td>Home</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>S23</td><td>S28</td><td>S48</td><td>S68</td><td>S88</td><td>S108</td><td>S18</td><td>S14</td><td>-</td><td>S23</td><td>S68</td><td>S48</td><td>-</td><td>S12</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S14</td><td>Home</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S12</td><td>S15</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S15</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S25</td><td>S70</td><td>S50</td><td>S16</td><td>-</td><td>-</td><td>-</td><td>S12</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S16</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S26</td><td>S71</td><td>S51</td><td>-</td><td>S15</td><td>-</td><td>-</td><td>S13</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S17</td><td>Home</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>S32</td><td>S27</td><td>S52</td><td>S72</td><td>S92</td><td>S112</td><td>S17</td><td>S19</td><td>-</td><td>S32</td><td>S72</td><td>S52</td><td>S18</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S18</td><td>Home</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>S33</td><td>S28</td><td>S53</td><td>S73</td><td>S93</td><td>S113</td><td>S18</td><td>S19</td><td>-</td><td>S33</td><td>S73</td><td>S53</td><td>-</td><td>S17</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S19</td><td>Home</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S17</td><td>S20</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S20</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S35</td><td>S75</td><td>S55</td><td>S21</td><td>-</td><td>-</td><td>-</td><td>S17</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S21</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S36</td><td>S76</td><td>S56</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S18</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S22</td><td>MP</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>S24</td><td>S7</td><td>-</td><td>S62</td><td>S42</td><td>S23</td><td>-</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S23</td><td>MP</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S33</td><td>S24</td><td>S8</td><td>-</td><td>S63</td><td>S43</td><td>-</td><td>S22</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S24</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S22</td><td>S25</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S25</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S35</td><td>-</td><td>S10</td><td>-</td><td>S65</td><td>S45</td><td>S26</td><td>-</td><td>-</td><td>-</td><td>S22</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S26</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S36</td><td>-</td><td>S11</td><td>-</td><td>S66</td><td>S46</td><td>-</td><td>S25</td><td>-</td><td>-</td><td>S23</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S27</td><td>Radio</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>S29</td><td>S12</td><td>S22</td><td>S67</td><td>S47</td><td>S28</td><td>-</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S28</td><td>Radio</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S33</td><td>S29</td><td>S13</td><td>S23</td><td>S68</td><td>S48</td><td>-</td><td>S27</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S29</td><td>Radio</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S27</td><td>S30</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S30</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S35</td><td>-</td><td>S15</td><td>S25</td><td>S70</td><td>S50</td><td>S31</td><td>-</td><td>-</td><td>-</td><td>S27</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S31</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S36</td><td>-</td><td>S16</td><td>S26</td><td>S71</td><td>S51</td><td>-</td><td>S30</td><td>-</td><td>-</td><td>S28</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S32</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>S17</td><td>-</td><td>S72</td><td>S52</td><td>S33</td><td>-</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S33</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>S18</td><td>-</td><td>S73</td><td>S53</td><td>-</td><td>S32</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S34</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>S35</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S35</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>S75</td><td>S55</td><td>S36</td><td>-</td><td>-</td><td>-</td><td>S32</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S36</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>S76</td><td>S56</td><td>-</td><td>S35</td><td>-</td><td>-</td><td>S33</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S37</td><td>Navi</td><td></td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S39</td><td>S2</td><td>S22</td><td>S57</td><td>S37</td><td>S38</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S38</td><td>Navi</td><td></td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S53</td><td>S39</td><td>S3</td><td>S23</td><td>S58</td><td>S38</td><td>-</td><td>S37</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S39</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S37</td><td>S40</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S40</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>S5</td><td>S25</td><td>S60</td><td>S40</td><td>S41</td><td>-</td><td>-</td><td>-</td><td>S37</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S41</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>S6</td><td>S26</td><td>S61</td><td>S41</td><td>-</td><td>S40</td><td>-</td><td>-</td><td>S38</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S42</td><td>Navi</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S44</td><td>S7</td><td>S22</td><td>S62</td><td>-</td><td>S43</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S43</td><td>Navi</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S53</td><td>S44</td><td>S8</td><td>S23</td><td>S63</td><td>-</td><td>-</td><td>S42</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S44</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S42</td><td>S45</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S45</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>S10</td><td>S25</td><td>S65</td><td>-</td><td>S46</td><td>-</td><td>-</td><td>-</td><td>S42</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S46</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>S11</td><td>S26</td><td>S66</td><td>-</td><td>-</td><td>S45</td><td>-</td><td>-</td><td>S43</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S47</td><td>Navi</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S49</td><td>S12</td><td>S22</td><td>S67</td><td>-</td><td>S48</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S48</td><td>Navi</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S53</td><td>S49</td><td>S13</td><td>S23</td><td>S68</td><td>-</td><td>-</td><td>S47</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S49</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S47</td><td>S50</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S50</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>S15</td><td>S25</td><td>S70</td><td>-</td><td>S51</td><td>-</td><td>-</td><td>-</td><td>S47</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S51</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>S16</td><td>S26</td><td>S71</td><td>-</td><td>-</td><td>S50</td><td>-</td><td>-</td><td>S48</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S52</td><td>Navi</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>S17</td><td>S32</td><td>S72</td><td>S52</td><td>S53</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S53</td><td>Navi</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>S18</td><td>S33</td><td>S73</td><td>S53</td><td>-</td><td>S52</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S54</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S55</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S55</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S35</td><td>S75</td><td>S55</td><td>S56</td><td>-</td><td>-</td><td>-</td><td>S52</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S56</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S36</td><td>S76</td><td>S56</td><td>-</td><td>S55</td><td>-</td><td>-</td><td>S53</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S57</td><td>HVAC</td><td></td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S59</td><td>S2</td><td>S22</td><td>-</td><td>S37</td><td>S58</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S58</td><td>HVAC</td><td></td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S73</td><td>S59</td><td>S3</td><td>S23</td><td>-</td><td>S38</td><td>-</td><td>S57</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S59</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S57</td><td>S60</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S60</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>S5</td><td>S25</td><td>-</td><td>S40</td><td>S61</td><td>-</td><td>-</td><td>-</td><td>S57</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S61</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>S6</td><td>S26</td><td>-</td><td>S41</td><td>-</td><td>S60</td><td>-</td><td>-</td><td>S58</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S62</td><td>HVAC</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S64</td><td>S7</td><td>S22</td><td>-</td><td>S42</td><td>S63</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S63</td><td>HVAC</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S73</td><td>S64</td><td>S8</td><td>S23</td><td>-</td><td>S43</td><td>-</td><td>S62</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S64</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S62</td><td>S65</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S65</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>S10</td><td>S25</td><td>-</td><td>S45</td><td>S66</td><td>-</td><td>-</td><td>-</td><td>S62</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S66</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>S11</td><td>S26</td><td>-</td><td>S46</td><td>-</td><td>S65</td><td>-</td><td>-</td><td>S63</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S67</td><td>HVAC</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S69</td><td>S12</td><td>S22</td><td>-</td><td>S47</td><td>S68</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S68</td><td>HVAC</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S73</td><td>S69</td><td>S13</td><td>S23</td><td>-</td><td>S48</td><td>-</td><td>S67</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S69</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S67</td><td>S70</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S70</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>S15</td><td>S25</td><td>-</td><td>S50</td><td>S71</td><td>-</td><td>-</td><td>-</td><td>S67</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S71</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>S16</td><td>S26</td><td>-</td><td>S51</td><td>-</td><td>S70</td><td>-</td><td>-</td><td>S68</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S72</td><td>HVAC</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>S17</td><td>S32</td><td>-</td><td>S52</td><td>S73</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S73</td><td>HVAC</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>S18</td><td>S33</td><td>-</td><td>S53</td><td>-</td><td>S72</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S74</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S75</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S75</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S35</td><td>-</td><td>S55</td><td>S76</td><td>-</td><td>-</td><td>-</td><td>S72</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S76</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S36</td><td>-</td><td>S56</td><td>-</td><td>S75</td><td>-</td><td>-</td><td>S73</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S77</td><td>Phone</td><td></td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S79</td><td>S2</td><td>S22</td><td>S57</td><td>S37</td><td>S78</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S78</td><td>Phone</td><td></td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S93</td><td>S79</td><td>S3</td><td>S23</td><td>S58</td><td>S38</td><td>-</td><td>S77</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S79</td><td>Phone</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S77</td><td>S80</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S80</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>S5</td><td>S25</td><td>S60</td><td>S40</td><td>S81</td><td>-</td><td>-</td><td>-</td><td>S77</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S81</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>S6</td><td>S26</td><td>S61</td><td>S41</td><td>-</td><td>S80</td><td>-</td><td>-</td><td>S78</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S82</td><td>Phone</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S84</td><td>S7</td><td>S22</td><td>S62</td><td>S42</td><td>S83</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S83</td><td>Phone</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S93</td><td>S84</td><td>S8</td><td>S23</td><td>S63</td><td>S43</td><td>-</td><td>S82</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S84</td><td>Phone</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S82</td><td>S85</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S85</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>S10</td><td>S25</td><td>S65</td><td>S45</td><td>S86</td><td>-</td><td>-</td><td>-</td><td>S82</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S86</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>S11</td><td>S26</td><td>S66</td><td>S46</td><td>-</td><td>S85</td><td>-</td><td>-</td><td>S83</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S87</td><td>Phone</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S89</td><td>S12</td><td>S22</td><td>S67</td><td>S47</td><td>S88</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S88</td><td>Phone</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S93</td><td>S89</td><td>S13</td><td>S23</td><td>S68</td><td>S48</td><td>-</td><td>S87</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S89</td><td>Phone</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S87</td><td>S90</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S90</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>S15</td><td>S25</td><td>S70</td><td>S50</td><td>S91</td><td>-</td><td>-</td><td>-</td><td>S87</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S91</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>S16</td><td>S26</td><td>S71</td><td>S51</td><td>-</td><td>S90</td><td>-</td><td>-</td><td>S88</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S92</td><td>Phone</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>S17</td><td>S32</td><td>S72</td><td>S52</td><td>S93</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S93</td><td>Phone</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>S18</td><td>S33</td><td>S73</td><td>S53</td><td>-</td><td>S92</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S94</td><td>Phone</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S95</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S95</td><td>Phone</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S35</td><td>S75</td><td>S55</td><td>S96</td><td>-</td><td>-</td><td>-</td><td>S92</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S96</td><td>Phone</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S36</td><td>S76</td><td>S56</td><td>-</td><td>S95</td><td>-</td><td>-</td><td>S93</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S97</td><td>Other</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S99</td><td>S2</td><td>S22</td><td>S57</td><td>S37</td><td>S98</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S98</td><td>Other</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S113</td><td>S99</td><td>S3</td><td>S23</td><td>S58</td><td>S38</td><td>-</td><td>S97</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S99</td><td>Other</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S97</td><td>S100</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S100</td><td>Other</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>S5</td><td>S25</td><td>S60</td><td>S40</td><td>S101</td><td>-</td><td>-</td><td>-</td><td>S97</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S101</td><td>Other</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>S6</td><td>S26</td><td>S61</td><td>S41</td><td>-</td><td>S100</td><td>-</td><td>-</td><td>S98</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S102</td><td>Other</td><td></td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S104</td><td>S7</td><td>S22</td><td>S62</td><td>S42</td><td>S103</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S103</td><td>Other</td><td></td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S113</td><td>S104</td><td>S8</td><td>S23</td><td>S63</td><td>S43</td><td>-</td><td>S102</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S104</td><td>Other</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S102</td><td>S105</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S105</td><td>Other</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>S10</td><td>S25</td><td>S65</td><td>S45</td><td>S106</td><td>-</td><td>-</td><td>-</td><td>S102</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S106</td><td>Other</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>S11</td><td>S26</td><td>S66</td><td>S46</td><td>-</td><td>S105</td><td>-</td><td>-</td><td>S103</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S107</td><td>Other</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S109</td><td>S12</td><td>S22</td><td>S67</td><td>S47</td><td>S108</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S108</td><td>Other</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S113</td><td>S109</td><td>S13</td><td>S23</td><td>S68</td><td>S48</td><td>-</td><td>S107</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S109</td><td>Other</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S107</td><td>S110</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S110</td><td>Other</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>S15</td><td>S25</td><td>S70</td><td>S50</td><td>S111</td><td>-</td><td>-</td><td>-</td><td>S107</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S111</td><td>Other</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>S16</td><td>S26</td><td>S71</td><td>S51</td><td>-</td><td>S110</td><td>-</td><td>-</td><td>S108</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S112</td><td>Other</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>S17</td><td>S32</td><td>S72</td><td>S52</td><td>S113</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S113</td><td>Other</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>S18</td><td>S33</td><td>S73</td><td>S53</td><td>-</td><td>S112</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S114</td><td>Other</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S115</td><td>-</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S115</td><td>Other</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S35</td><td>S75</td><td>S55</td><td>S116</td><td>-</td><td>-</td><td>-</td><td>S112</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr><td>S116</td><td>Other</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S36</td><td>S76</td><td>S56</td><td>-</td><td>S115</td><td>-</td><td>-</td><td>S113</td><td bgcolor="gray">S117</td><td bgcolor="gray">-</td></tr>
+<tr bgcolor="gray"><td>S117</td><td>any</td><td>any</td><td>any</td><td>Warn</td><td>any</td><td>any</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S(previous)</td></tr>
+</table>
diff --git a/doc/Display_Audio_Transition2.md b/doc/Display_Audio_Transition2.md
new file mode 100644
index 0000000..46d52b8
--- /dev/null
+++ b/doc/Display_Audio_Transition2.md
@@ -0,0 +1,333 @@
+# Sound mode transition for dual window application
+<table>
+<tr bgcolor="lightskyblue"><td colspan=8>State</td><td colspan=23>Event</td></tr>
+<tr bgcolor="lightskyblue"><td rowspan=2>State ID</td><td colspan=3>Display</td><td colspan=4>Audio</td><td colspan=2>Power</td><td colspan=6>Push HomeScreen button</td><td rowspan=2>Start BTA</td><td rowspan=2>Incoming call</td><td colspan=4>Push Shortcut button</td><td colspan=2>Touch</td><td colspan=2>TTS</td><td colspan=3>Push Phone control button</td><td colspan=2>Safety hazard</td></tr>
+<tr bgcolor="lightskyblue"><td>Win#1</td><td>Win#2</td><td>PopUp</td><td>FL</td><td>FR</td><td>RL</td><td>RR</td><td>On</td><td>Off</td><td>Media Player</td><td>Radio</td><td>Navi</td><td>HVAC</td><td>Phone</td><td>Other button</td><td>Home</td><td>Media Player</td><td>HVAC</td><td>Navi</td><td>Win#1</td><td>Win#2</td><td>Navi INT TTS</td><td>Ended</td><td>Reject</td><td>Off hook</td><td>On hook</td><td>Detected</td><td>Recovered</td></tr>
+<tr><td>S1</td><td>-</td><td>-</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>S2</td><td bgcolor="gray">-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">-</td><td bgcolor="gray">-</td></tr>
+<tr><td>S2</td><td>Home</td><td>-</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>S22</td><td>S27</td><td>S37</td><td>S57</td><td>S77</td><td>S97</td><td>S17</td><td>S4</td><td>-</td><td>S22</td><td>S57</td><td>S37</td><td>-</td><td>-</td><td>S3</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S3</td><td>Home</td><td>-</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>S23</td><td>S28</td><td>S38</td><td>S58</td><td>S78</td><td>S98</td><td>S18</td><td>S4</td><td>-</td><td>S23</td><td>S58</td><td>S38</td><td>-</td><td>-</td><td>-</td><td>S2</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S4</td><td>Home</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S2</td><td>S5</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S5</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S25</td><td>S60</td><td>S40</td><td>-</td><td>-</td><td>S6</td><td>-</td><td>-</td><td>-</td><td>S2</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S6</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S26</td><td>S61</td><td>S41</td><td>-</td><td>-</td><td>-</td><td>S5</td><td>-</td><td>-</td><td>S3</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S7</td><td>Home</td><td>-</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>S22</td><td>S27</td><td>S42</td><td>S62</td><td>S82</td><td>S102</td><td>S17</td><td>S9</td><td>-</td><td>S22</td><td>S62</td><td>S42</td><td>-</td><td>-</td><td>S8</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S8</td><td>Home</td><td>-</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>S23</td><td>S28</td><td>S43</td><td>S63</td><td>S83</td><td>S103</td><td>S18</td><td>S9</td><td>-</td><td>S23</td><td>S63</td><td>S43</td><td>-</td><td>-</td><td>-</td><td>S7</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S9</td><td>Home</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S7</td><td>S10</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S10</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S25</td><td>S65</td><td>S45</td><td>-</td><td>-</td><td>S11</td><td>-</td><td>-</td><td>-</td><td>S7</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S11</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S26</td><td>S66</td><td>S46</td><td>-</td><td>-</td><td>-</td><td>S10</td><td>-</td><td>-</td><td>S8</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S12</td><td>Home</td><td>-</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>S22</td><td>S27</td><td>S47</td><td>S67</td><td>S87</td><td>S107</td><td>S17</td><td>S14</td><td>-</td><td>S22</td><td>S67</td><td>S47</td><td>-</td><td>-</td><td>S13</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S13</td><td>Home</td><td>-</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>S23</td><td>S28</td><td>S48</td><td>S68</td><td>S88</td><td>S108</td><td>S18</td><td>S14</td><td>-</td><td>S23</td><td>S68</td><td>S48</td><td>-</td><td>-</td><td>-</td><td>S12</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S14</td><td>Home</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S12</td><td>S15</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S15</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S25</td><td>S70</td><td>S50</td><td>-</td><td>-</td><td>S16</td><td>-</td><td>-</td><td>-</td><td>S12</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S16</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S26</td><td>S71</td><td>S51</td><td>-</td><td>-</td><td>-</td><td>S15</td><td>-</td><td>-</td><td>S13</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S17</td><td>Home</td><td>-</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>S32</td><td>S27</td><td>S52</td><td>S72</td><td>S92</td><td>S112</td><td>S17</td><td>S19</td><td>-</td><td>S32</td><td>S72</td><td>S52</td><td>-</td><td>-</td><td>S18</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S18</td><td>Home</td><td>-</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>S33</td><td>S28</td><td>S53</td><td>S73</td><td>S93</td><td>S113</td><td>S18</td><td>S19</td><td>-</td><td>S33</td><td>S73</td><td>S53</td><td>-</td><td>-</td><td>-</td><td>S17</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S19</td><td>Home</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S19</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S17</td><td>S20</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S20</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S35</td><td>S75</td><td>S55</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>-</td><td>S17</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S21</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S36</td><td>S76</td><td>S56</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S18</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S22</td><td>MP</td><td>-</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>S24</td><td>S7</td><td>-</td><td>S117</td><td>S122</td><td>-</td><td>-</td><td>S23</td><td>-</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S23</td><td>MP</td><td>-</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S33</td><td>S24</td><td>S8</td><td>-</td><td>S118</td><td>S123</td><td>-</td><td>-</td><td>-</td><td>S22</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S24</td><td>MP</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S22</td><td>S25</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S25</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S35</td><td>-</td><td>S10</td><td>-</td><td>S120</td><td>S125</td><td>-</td><td>-</td><td>S26</td><td>-</td><td>-</td><td>-</td><td>S22</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S26</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S36</td><td>-</td><td>S11</td><td>-</td><td>S121</td><td>S126</td><td>-</td><td>-</td><td>-</td><td>S25</td><td>-</td><td>-</td><td>S23</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S27</td><td>Radio</td><td>-</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>S29</td><td>S12</td><td>S132</td><td>S147</td><td>S152</td><td>-</td><td>-</td><td>S28</td><td>-</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S28</td><td>Radio</td><td>-</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S33</td><td>S29</td><td>S13</td><td>S133</td><td>S148</td><td>S153</td><td>-</td><td>-</td><td>-</td><td>S27</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S29</td><td>Radio</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S27</td><td>S30</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S30</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S35</td><td>-</td><td>S15</td><td>S135</td><td>S150</td><td>S155</td><td>-</td><td>-</td><td>S31</td><td>-</td><td>-</td><td>-</td><td>S27</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S31</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S36</td><td>-</td><td>S16</td><td>S136</td><td>S151</td><td>S156</td><td>-</td><td>-</td><td>-</td><td>S30</td><td>-</td><td>-</td><td>S28</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S32</td><td>MP(BTA)</td><td>-</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>S17</td><td>S32</td><td>S157</td><td>S162</td><td>-</td><td>-</td><td>S33</td><td>-</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S33</td><td>MP(BTA)</td><td>-</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S34</td><td>S18</td><td>S33</td><td>S158</td><td>S163</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>-</td><td>-</td><td></td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S34</td><td>MP(BTA)</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S32</td><td>S35</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S35</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S35</td><td>S160</td><td>S165</td><td>-</td><td>-</td><td>S36</td><td>-</td><td>-</td><td>-</td><td>S32</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S36</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S36</td><td>S161</td><td>S166</td><td>-</td><td>-</td><td>-</td><td>S35</td><td>-</td><td>-</td><td>S33</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S37</td><td>Navi</td><td>-</td><td></td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S39</td><td>S2</td><td>S247</td><td>S257</td><td>S37</td><td>-</td><td>-</td><td>S38</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S38</td><td>Navi</td><td>-</td><td></td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S53</td><td>S39</td><td>S3</td><td>S248</td><td>S258</td><td>S38</td><td>-</td><td>-</td><td>-</td><td>S37</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S39</td><td>Navi</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S37</td><td>S40</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S40</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>S5</td><td>S250</td><td>S260</td><td>S40</td><td>-</td><td>-</td><td>S41</td><td>-</td><td>-</td><td>-</td><td>S37</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S41</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>S6</td><td>S251</td><td>S261</td><td>S41</td><td>-</td><td>-</td><td>-</td><td>S40</td><td>-</td><td>-</td><td>S38</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S42</td><td>Navi</td><td>-</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S44</td><td>S7</td><td>S247</td><td>S262</td><td>S42</td><td>-</td><td>-</td><td>S43</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S43</td><td>Navi</td><td>-</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S53</td><td>S44</td><td>S8</td><td>S248</td><td>S263</td><td>S43</td><td>-</td><td>-</td><td>-</td><td>S42</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S44</td><td>Navi</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S42</td><td>S45</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S45</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>S10</td><td>S250</td><td>S265</td><td>S45</td><td>-</td><td>-</td><td>S46</td><td>-</td><td>-</td><td>-</td><td>S42</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S46</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>S11</td><td>S251</td><td>S266</td><td>S46</td><td>-</td><td>-</td><td>-</td><td>S45</td><td>-</td><td>-</td><td>S43</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S47</td><td>Navi</td><td>-</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S49</td><td>S12</td><td>S247</td><td>S267</td><td>S47</td><td>-</td><td>-</td><td>S48</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S48</td><td>Navi</td><td>-</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S53</td><td>S49</td><td>S13</td><td>S248</td><td>S268</td><td>S48</td><td>-</td><td>-</td><td>-</td><td>S47</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S49</td><td>Navi</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S47</td><td>S50</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S50</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>S15</td><td>S250</td><td>S270</td><td>S50</td><td>-</td><td>-</td><td>S51</td><td>-</td><td>-</td><td>-</td><td>S47</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S51</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>S16</td><td>S251</td><td>S271</td><td>S51</td><td>-</td><td>-</td><td>-</td><td>S50</td><td>-</td><td>-</td><td>S48</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S52</td><td>Navi</td><td>-</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>S17</td><td>S252</td><td>S272</td><td>S52</td><td>-</td><td>-</td><td>S53</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S53</td><td>Navi</td><td>-</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S54</td><td>S18</td><td>S253</td><td>S273</td><td>S53</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S54</td><td>Navi</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S52</td><td>S55</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S55</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S255</td><td>S275</td><td>S55</td><td>-</td><td>-</td><td>S56</td><td>-</td><td>-</td><td>-</td><td>S52</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S56</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S256</td><td>S276</td><td>S56</td><td>-</td><td>-</td><td>-</td><td>S55</td><td>-</td><td>-</td><td>S53</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S57</td><td>HVAC</td><td>-</td><td></td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S59</td><td>S2</td><td>S167</td><td>S57</td><td>S177</td><td>-</td><td>-</td><td>S58</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S58</td><td>HVAC</td><td>-</td><td></td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S73</td><td>S59</td><td>S3</td><td>S168</td><td>S58</td><td>S178</td><td>-</td><td>-</td><td>-</td><td>S57</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S59</td><td>HVAC</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S57</td><td>S60</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S60</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>S5</td><td>S170</td><td>S60</td><td>S177</td><td>-</td><td>-</td><td>S61</td><td>-</td><td>-</td><td>-</td><td>S57</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S61</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>S6</td><td>S171</td><td>S61</td><td>S178</td><td>-</td><td>-</td><td>-</td><td>S60</td><td>-</td><td>-</td><td>S58</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S62</td><td>HVAC</td><td>-</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S64</td><td>S7</td><td>S167</td><td>S62</td><td>S182</td><td>-</td><td>-</td><td>S63</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S63</td><td>HVAC</td><td>-</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S73</td><td>S64</td><td>S8</td><td>S168</td><td>S63</td><td>S183</td><td>-</td><td>-</td><td>-</td><td>S62</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S64</td><td>HVAC</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S62</td><td>S65</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S65</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>S10</td><td>S170</td><td>S65</td><td>S185</td><td>-</td><td>-</td><td>S66</td><td>-</td><td>-</td><td>-</td><td>S62</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S66</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>S11</td><td>S171</td><td>S66</td><td>S186</td><td>-</td><td>-</td><td>-</td><td>S65</td><td>-</td><td>-</td><td>S63</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S67</td><td>HVAC</td><td>-</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S69</td><td>S12</td><td>S167</td><td>S67</td><td>S187</td><td>-</td><td>-</td><td>S68</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S68</td><td>HVAC</td><td>-</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S73</td><td>S69</td><td>S13</td><td>S168</td><td>S68</td><td>S188</td><td>-</td><td>-</td><td>-</td><td>S67</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S69</td><td>HVAC</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S67</td><td>S70</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S70</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>S15</td><td>S170</td><td>S70</td><td>S190</td><td>-</td><td>-</td><td>S71</td><td>-</td><td>-</td><td>-</td><td>S67</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S71</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>S16</td><td>S171</td><td>S71</td><td>S191</td><td>-</td><td>-</td><td>-</td><td>S70</td><td>-</td><td>-</td><td>S68</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S72</td><td>HVAC</td><td>-</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>S17</td><td>S172</td><td>S72</td><td>S192</td><td>-</td><td>-</td><td>S73</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S73</td><td>HVAC</td><td>-</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S74</td><td>S18</td><td>S173</td><td>S73</td><td>S193</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S74</td><td>HVAC</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S72</td><td>S75</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S75</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S175</td><td>S75</td><td>S195</td><td>-</td><td>-</td><td>S76</td><td>-</td><td>-</td><td>-</td><td>S72</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S76</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S176</td><td>S76</td><td>S196</td><td>-</td><td>-</td><td>-</td><td>S75</td><td>-</td><td>-</td><td>S73</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S77</td><td>Phone</td><td>-</td><td></td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S79</td><td>S2</td><td>S197</td><td>S207</td><td>S227</td><td>-</td><td>-</td><td>S78</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S78</td><td>Phone</td><td>-</td><td></td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S93</td><td>S79</td><td>S3</td><td>S198</td><td>S208</td><td>S228</td><td>-</td><td>-</td><td>-</td><td>S77</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S79</td><td>Phone</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S77</td><td>S80</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S80</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>S5</td><td>S200</td><td>S210</td><td>S230</td><td>-</td><td>-</td><td>S81</td><td>-</td><td>-</td><td>-</td><td>S77</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S81</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>S6</td><td>S201</td><td>S211</td><td>S231</td><td>-</td><td>-</td><td>-</td><td>S80</td><td>-</td><td>-</td><td>S78</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S82</td><td>Phone</td><td>-</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S84</td><td>S7</td><td>S197</td><td>S212</td><td>S232</td><td>-</td><td>-</td><td>S83</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S83</td><td>Phone</td><td>-</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S93</td><td>S84</td><td>S8</td><td>S198</td><td>S213</td><td>S233</td><td>-</td><td>-</td><td>-</td><td>S82</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S84</td><td>Phone</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S82</td><td>S85</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S85</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>S10</td><td>S200</td><td>S215</td><td>S235</td><td>-</td><td>-</td><td>S86</td><td>-</td><td>-</td><td>-</td><td>S82</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S86</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>S11</td><td>S201</td><td>S216</td><td>S236</td><td>-</td><td>-</td><td>-</td><td>S85</td><td>-</td><td>-</td><td>S83</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S87</td><td>Phone</td><td>-</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S89</td><td>S12</td><td>S197</td><td>S217</td><td>S237</td><td>-</td><td>-</td><td>S88</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S88</td><td>Phone</td><td>-</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S93</td><td>S89</td><td>S13</td><td>S198</td><td>S218</td><td>S238</td><td>-</td><td>-</td><td>-</td><td>S87</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S89</td><td>Phone</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S87</td><td>S90</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S90</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>S15</td><td>S200</td><td>S220</td><td>S240</td><td>-</td><td>-</td><td>S91</td><td>-</td><td>-</td><td>-</td><td>S87</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S91</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>S16</td><td>S201</td><td>S221</td><td>S241</td><td>-</td><td>-</td><td>-</td><td>S90</td><td>-</td><td>-</td><td>S88</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S92</td><td>Phone</td><td>-</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>S17</td><td>S202</td><td>S222</td><td>S242</td><td>-</td><td>-</td><td>S93</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S93</td><td>Phone</td><td>-</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S94</td><td>S18</td><td>S203</td><td>S223</td><td>S243</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S94</td><td>Phone</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S92</td><td>S95</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S95</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S205</td><td>S225</td><td>S245</td><td>-</td><td>-</td><td>S96</td><td>-</td><td>-</td><td>-</td><td>S92</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S96</td><td>Phone</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S206</td><td>S226</td><td>S246</td><td>-</td><td>-</td><td>-</td><td>S95</td><td>-</td><td>-</td><td>S93</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S97</td><td>Other</td><td>-</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S99</td><td>S2</td><td>S277</td><td>S287</td><td>S307</td><td>-</td><td>-</td><td>S98</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S98</td><td>Other</td><td>-</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S113</td><td>S99</td><td>S3</td><td>S278</td><td>S288</td><td>S308</td><td>-</td><td>-</td><td>-</td><td>S97</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S99</td><td>Other</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S97</td><td>S100</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S100</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>S5</td><td>S278</td><td>S290</td><td>S310</td><td>-</td><td>-</td><td>S101</td><td>-</td><td>-</td><td>-</td><td>S97</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S101</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>S6</td><td>S278</td><td>S291</td><td>S311</td><td>-</td><td>-</td><td>-</td><td>S100</td><td>-</td><td>-</td><td>S98</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S102</td><td>Other</td><td>-</td><td></td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S104</td><td>S7</td><td>S277</td><td>S292</td><td>S312</td><td>-</td><td>-</td><td>S103</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S103</td><td>Other</td><td>-</td><td></td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S113</td><td>S104</td><td>S8</td><td>S278</td><td>S293</td><td>S313</td><td>-</td><td>-</td><td>-</td><td>S102</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S104</td><td>Other</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S102</td><td>S105</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S105</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>S10</td><td>S278</td><td>S295</td><td>S315</td><td>-</td><td>-</td><td>S106</td><td>-</td><td>-</td><td>-</td><td>S102</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S106</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>S11</td><td>S278</td><td>S296</td><td>S316</td><td>-</td><td>-</td><td>-</td><td>S105</td><td>-</td><td>-</td><td>S103</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S107</td><td>Other</td><td>-</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S109</td><td>S12</td><td>S277</td><td>S297</td><td>S317</td><td>-</td><td>-</td><td>S108</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S108</td><td>Other</td><td>-</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S113</td><td>S109</td><td>S13</td><td>S278</td><td>S298</td><td>S318</td><td>-</td><td>-</td><td>-</td><td>S107</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S109</td><td>Other</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S107</td><td>S110</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S110</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>S15</td><td>S278</td><td>S300</td><td>S320</td><td>-</td><td>-</td><td>S111</td><td>-</td><td>-</td><td>-</td><td>S107</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S111</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>S16</td><td>S278</td><td>S301</td><td>S321</td><td>-</td><td>-</td><td>-</td><td>S110</td><td>-</td><td>-</td><td>S108</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S112</td><td>Other</td><td>-</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>S17</td><td>S282</td><td>S302</td><td>S322</td><td>-</td><td>-</td><td>S113</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S113</td><td>Other</td><td>-</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S114</td><td>S18</td><td>S283</td><td>S303</td><td>S323</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S114</td><td>Other</td><td>-</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S112</td><td>S115</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S115</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S285</td><td>S305</td><td>S325</td><td>-</td><td>-</td><td>S116</td><td>-</td><td>-</td><td>-</td><td>S112</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S116</td><td>Other</td><td>-</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S286</td><td>S306</td><td>S326</td><td>-</td><td>-</td><td>-</td><td>S115</td><td>-</td><td>-</td><td>S113</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S117</td><td>MP</td><td>HVAC</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S157</td><td>S119</td><td>S7</td><td>-</td><td>-</td><td>S122</td><td>-</td><td>-</td><td>S118</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S118</td><td>MP</td><td>HVAC</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S158</td><td>S119</td><td>S8</td><td>-</td><td>-</td><td>S123</td><td>-</td><td>-</td><td>-</td><td>S117</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S119</td><td>MP</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S159</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S117</td><td>S120</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S120</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S160</td><td>-</td><td>S10</td><td>-</td><td>-</td><td>S125</td><td>-</td><td>-</td><td>S121</td><td>-</td><td>-</td><td>-</td><td>S117</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S121</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S161</td><td>-</td><td>S11</td><td>-</td><td>-</td><td>S126</td><td>-</td><td>-</td><td>-</td><td>S120</td><td>-</td><td>-</td><td>S118</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S122</td><td>MP</td><td>Navi</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S162</td><td>S124</td><td>S7</td><td>-</td><td>S117</td><td>-</td><td>-</td><td>-</td><td>S123</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S123</td><td>MP</td><td>Navi</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S163</td><td>S124</td><td>S8</td><td>-</td><td>S118</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S122</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S124</td><td>MP</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S164</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S122</td><td>S125</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S125</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S165</td><td>-</td><td>S10</td><td>-</td><td>S120</td><td>-</td><td>-</td><td>-</td><td>S126</td><td>-</td><td>-</td><td>-</td><td>S122</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S126</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S166</td><td>-</td><td>S11</td><td>-</td><td>S121</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S125</td><td>-</td><td>-</td><td>S123</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S127</td><td>Radio</td><td>MP</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S137</td><td>S129</td><td>S12</td><td>S127</td><td>S147</td><td>S152</td><td>-</td><td>S132</td><td>S128</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S128</td><td>Radio</td><td>MP</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S138</td><td>S129</td><td>S13</td><td>S128</td><td>S148</td><td>S153</td><td>-</td><td>S133</td><td>-</td><td>S127</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S129</td><td>Radio</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S139</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S127</td><td>S130</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S130</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S140</td><td>-</td><td>S15</td><td>S130</td><td>S150</td><td>S155</td><td>-</td><td>S135</td><td>S131</td><td>-</td><td>-</td><td>-</td><td>S127</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S131</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S141</td><td>-</td><td>S16</td><td>S131</td><td>S151</td><td>S156</td><td>-</td><td>S136</td><td>-</td><td>S130</td><td>-</td><td>-</td><td>S128</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S132</td><td>Radio</td><td>MP</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S137</td><td>S134</td><td>S7</td><td>S132</td><td>S147</td><td>S152</td><td>S127</td><td>-</td><td>S133</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S133</td><td>Radio</td><td>MP</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S138</td><td>S134</td><td>S8</td><td>S133</td><td>S148</td><td>S153</td><td>S128</td><td>-</td><td>-</td><td>S132</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S134</td><td>Radio</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S139</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S132</td><td>S135</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S135</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S140</td><td>-</td><td>S10</td><td>S135</td><td>S150</td><td>S155</td><td>S130</td><td>-</td><td>S136</td><td>-</td><td>-</td><td>-</td><td>S132</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S136</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S141</td><td>-</td><td>S11</td><td>S136</td><td>S151</td><td>S156</td><td>S131</td><td>-</td><td>-</td><td>S135</td><td>-</td><td>-</td><td>S133</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S137</td><td>Radio</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S139</td><td>S17</td><td>S137</td><td>S147</td><td>S152</td><td>S142</td><td>-</td><td>S138</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S138</td><td>Radio</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S139</td><td>S18</td><td>S138</td><td>S148</td><td>S153</td><td>S143</td><td>-</td><td>-</td><td>S137</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S139</td><td>Radio</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S137</td><td>S140</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S140</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S140</td><td>S150</td><td>S155</td><td>S145</td><td>-</td><td>S141</td><td>-</td><td>-</td><td>-</td><td>S137</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S141</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S141</td><td>S151</td><td>S156</td><td>S146</td><td>-</td><td>-</td><td>S140</td><td>-</td><td>-</td><td>S138</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S142</td><td>Radio</td><td>MP(BTA)</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S144</td><td>S17</td><td>S142</td><td>S152</td><td>S157</td><td>-</td><td>S137</td><td>S143</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S143</td><td>Radio</td><td>MP(BTA)</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S144</td><td>S18</td><td>S143</td><td>S153</td><td>S158</td><td>-</td><td>S138</td><td>-</td><td>S142</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S144</td><td>Radio</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S142</td><td>S145</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S145</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S145</td><td>S155</td><td>S160</td><td>-</td><td>S140</td><td>S146</td><td>-</td><td>-</td><td>-</td><td>S142</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S146</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S146</td><td>S156</td><td>S161</td><td>-</td><td>S141</td><td>-</td><td>S145</td><td>-</td><td>-</td><td>S143</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S147</td><td>Radio</td><td>HVAC</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S157</td><td>S149</td><td>S12</td><td>S132</td><td>-</td><td>S152</td><td>-</td><td>-</td><td>S148</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S148</td><td>Radio</td><td>HVAC</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S158</td><td>S149</td><td>S13</td><td>S133</td><td>-</td><td>S153</td><td>-</td><td>-</td><td>-</td><td>S147</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S149</td><td>Radio</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S159</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S147</td><td>S150</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S150</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S160</td><td>-</td><td>S15</td><td>S135</td><td>-</td><td>S155</td><td>-</td><td>-</td><td>S151</td><td>-</td><td>-</td><td>-</td><td>S147</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S151</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S161</td><td>-</td><td>S16</td><td>S136</td><td>-</td><td>S156</td><td>-</td><td>-</td><td>-</td><td>S150</td><td>-</td><td>-</td><td>S148</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S152</td><td>Radio</td><td>Navi</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S162</td><td>S154</td><td>S12</td><td>S132</td><td>S147</td><td>-</td><td>-</td><td>-</td><td>S153</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S153</td><td>Radio</td><td>Navi</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S163</td><td>S154</td><td>S13</td><td>S133</td><td>S148</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S152</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S154</td><td>Radio</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S164</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S152</td><td>S155</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S155</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S165</td><td>-</td><td>S15</td><td>S135</td><td>S150</td><td>-</td><td>-</td><td>-</td><td>S156</td><td>-</td><td>-</td><td>-</td><td>S152</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S156</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S166</td><td>-</td><td>S16</td><td>S136</td><td>S151</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S155</td><td>-</td><td>-</td><td>S153</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S157</td><td>MP(BTA)</td><td>HVAC</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S159</td><td>S17</td><td>-</td><td>-</td><td>S162</td><td>-</td><td>-</td><td>S158</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S158</td><td>MP(BTA)</td><td>HVAC</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S159</td><td>S18</td><td>-</td><td>-</td><td>S163</td><td>-</td><td>-</td><td>-</td><td>S157</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S159</td><td>MP(BTA)</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S157</td><td>S160</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S160</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S165</td><td>-</td><td>-</td><td>S161</td><td>-</td><td>-</td><td>-</td><td>S157</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S161</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S166</td><td>-</td><td>-</td><td>-</td><td>S160</td><td>-</td><td>-</td><td>S158</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S162</td><td>MP(BTA)</td><td>Navi</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S164</td><td>S17</td><td>-</td><td>S157</td><td>-</td><td>-</td><td>-</td><td>S163</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S163</td><td>MP(BTA)</td><td>Navi</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S164</td><td>S18</td><td>-</td><td>S158</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S162</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S164</td><td>MP(BTA)</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S162</td><td>S165</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S165</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>S160</td><td>-</td><td>-</td><td>-</td><td>S166</td><td>-</td><td>-</td><td>-</td><td>S162</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S166</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>S161</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S165</td><td>-</td><td>-</td><td>S163</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S167</td><td>HVAC</td><td>MP</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S172</td><td>S169</td><td>S7</td><td>-</td><td>-</td><td>S182</td><td>-</td><td>-</td><td>S168</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S168</td><td>HVAC</td><td>MP</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S173</td><td>S169</td><td>S8</td><td>-</td><td>-</td><td>S183</td><td>-</td><td>-</td><td>-</td><td>S167</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S169</td><td>HVAC</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S174</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S167</td><td>S170</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S170</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S175</td><td>-</td><td>S10</td><td>-</td><td>-</td><td>S183</td><td>-</td><td>-</td><td>S171</td><td>-</td><td>-</td><td>-</td><td>S167</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S171</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S176</td><td>-</td><td>S11</td><td>-</td><td>-</td><td>S183</td><td>-</td><td>-</td><td>-</td><td>S170</td><td>-</td><td>-</td><td>S168</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S172</td><td>HVAC</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S174</td><td>S17</td><td>-</td><td>-</td><td>S192</td><td>-</td><td>-</td><td>S173</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S173</td><td>HVAC</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S174</td><td>S18</td><td>-</td><td>-</td><td>S193</td><td>-</td><td>-</td><td>-</td><td>S172</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S174</td><td>HVAC</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S172</td><td>S175</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S175</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>-</td><td>S195</td><td>-</td><td>-</td><td>S176</td><td>-</td><td>-</td><td>-</td><td>S172</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S176</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>-</td><td>S196</td><td>-</td><td>-</td><td>-</td><td>S175</td><td>-</td><td>-</td><td>S173</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S177</td><td>HVAC</td><td>Navi</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S192</td><td>S179</td><td>S2</td><td>S167</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S178</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S178</td><td>HVAC</td><td>Navi</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S193</td><td>S179</td><td>S3</td><td>S167</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S177</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S179</td><td>HVAC</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S194</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S177</td><td>S180</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S180</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S195</td><td>-</td><td>S20</td><td>S170</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S181</td><td>-</td><td>-</td><td>-</td><td>S177</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S181</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S196</td><td>-</td><td>S21</td><td>S171</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S180</td><td>-</td><td>-</td><td>S178</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S182</td><td>HVAC</td><td>Navi</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S192</td><td>S184</td><td>S7</td><td>S167</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S183</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S183</td><td>HVAC</td><td>Navi</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S193</td><td>S184</td><td>S8</td><td>S167</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S182</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S184</td><td>HVAC</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S194</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S182</td><td>S185</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S185</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S195</td><td>-</td><td>S10</td><td>S170</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S186</td><td>-</td><td>-</td><td>-</td><td>S182</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S186</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S196</td><td>-</td><td>S11</td><td>S171</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S185</td><td>-</td><td>-</td><td>S183</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S187</td><td>HVAC</td><td>Navi</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S192</td><td>S189</td><td>S12</td><td>S167</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S188</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S188</td><td>HVAC</td><td>Navi</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S193</td><td>S189</td><td>S13</td><td>S167</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S187</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S189</td><td>HVAC</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S194</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S187</td><td>S190</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S190</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S195</td><td>-</td><td>S15</td><td>S170</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S191</td><td>-</td><td>-</td><td>-</td><td>S187</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S191</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S196</td><td>-</td><td>S16</td><td>S171</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S190</td><td>-</td><td>-</td><td>S188</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S192</td><td>HVAC</td><td>Navi</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S194</td><td>S17</td><td>S172</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S193</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S193</td><td>HVAC</td><td>Navi</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S194</td><td>S18</td><td>S173</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S192</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S194</td><td>HVAC</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S192</td><td>S195</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S195</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S175</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S196</td><td>-</td><td>-</td><td>-</td><td>S192</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S196</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S176</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S195</td><td>-</td><td>-</td><td>S193</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S197</td><td>Phone</td><td>MP</td><td></td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S202</td><td>S199</td><td>S7</td><td>-</td><td>S212</td><td>S232</td><td>-</td><td>-</td><td>S198</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S198</td><td>Phone</td><td>MP</td><td></td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S203</td><td>S199</td><td>S8</td><td>-</td><td>S213</td><td>S233</td><td>-</td><td>-</td><td>-</td><td>S197</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S199</td><td>Phone</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S204</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S197</td><td>S200</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S200</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S205</td><td>-</td><td>S10</td><td>-</td><td>S215</td><td>S235</td><td>-</td><td>-</td><td>S201</td><td>-</td><td>-</td><td>-</td><td>S197</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S201</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S206</td><td>-</td><td>S11</td><td>-</td><td>S216</td><td>S236</td><td>-</td><td>-</td><td>-</td><td>S200</td><td>-</td><td>-</td><td>S198</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S202</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S204</td><td>S17</td><td>-</td><td>S222</td><td>S242</td><td>-</td><td>-</td><td>S203</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S203</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S204</td><td>S18</td><td>-</td><td>S223</td><td>S243</td><td>-</td><td>-</td><td>-</td><td>S202</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S204</td><td>Phone</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S202</td><td>S205</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S205</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>S225</td><td>S245</td><td>-</td><td>-</td><td>S206</td><td>-</td><td>-</td><td>-</td><td>S202</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S206</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>S226</td><td>S246</td><td>-</td><td>-</td><td>-</td><td>S205</td><td>-</td><td>-</td><td>S203</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S207</td><td>Phone</td><td>HVAC</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S222</td><td>S209</td><td>S2</td><td>S197</td><td>-</td><td>S227</td><td>-</td><td>-</td><td>S208</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S208</td><td>Phone</td><td>HVAC</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S223</td><td>S209</td><td>S3</td><td>S198</td><td>-</td><td>S228</td><td>-</td><td>-</td><td>-</td><td>S207</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S209</td><td>Phone</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S224</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S207</td><td>S210</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S210</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S225</td><td>-</td><td>S20</td><td>S200</td><td>-</td><td>S230</td><td>-</td><td>-</td><td>S211</td><td>-</td><td>-</td><td>-</td><td>S207</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S211</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S226</td><td>-</td><td>S21</td><td>S201</td><td>-</td><td>S231</td><td>-</td><td>-</td><td>-</td><td>S210</td><td>-</td><td>-</td><td>S208</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S212</td><td>Phone</td><td>HVAC</td><td></td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S222</td><td>S214</td><td>S7</td><td>S197</td><td>-</td><td>S232</td><td>-</td><td>-</td><td>S213</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S213</td><td>Phone</td><td>HVAC</td><td></td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S223</td><td>S214</td><td>S8</td><td>S198</td><td>-</td><td>S233</td><td>-</td><td>-</td><td>-</td><td>S212</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S214</td><td>Phone</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S224</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S212</td><td>S215</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S215</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S225</td><td>-</td><td>S10</td><td>S200</td><td>-</td><td>S235</td><td>-</td><td>-</td><td>S216</td><td>-</td><td>-</td><td>-</td><td>S212</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S216</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S226</td><td>-</td><td>S11</td><td>S201</td><td>-</td><td>S236</td><td>-</td><td>-</td><td>-</td><td>S215</td><td>-</td><td>-</td><td>S213</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S217</td><td>Phone</td><td>HVAC</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S222</td><td>S219</td><td>S12</td><td>S197</td><td>-</td><td>S237</td><td>-</td><td>-</td><td>S218</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S218</td><td>Phone</td><td>HVAC</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S223</td><td>S219</td><td>S13</td><td>S198</td><td>-</td><td>S238</td><td>-</td><td>-</td><td>-</td><td>S217</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S219</td><td>Phone</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S224</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S217</td><td>S220</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S220</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S225</td><td>-</td><td>S15</td><td>S200</td><td>-</td><td>S240</td><td>-</td><td>-</td><td>S221</td><td>-</td><td>-</td><td>-</td><td>S217</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S221</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S226</td><td>-</td><td>S16</td><td>S201</td><td>-</td><td>S241</td><td>-</td><td>-</td><td>-</td><td>S220</td><td>-</td><td>-</td><td>S218</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S222</td><td>Phone</td><td>HVAC</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S224</td><td>S17</td><td>S202</td><td>-</td><td>S242</td><td>-</td><td>-</td><td>S223</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S223</td><td>Phone</td><td>HVAC</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S224</td><td>S18</td><td>S203</td><td>-</td><td>S243</td><td>-</td><td>-</td><td>-</td><td>S222</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S224</td><td>Phone</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S222</td><td>S225</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S225</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S205</td><td>-</td><td>S245</td><td>-</td><td>-</td><td>S226</td><td>-</td><td>-</td><td>-</td><td>S222</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S226</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S206</td><td>-</td><td>S246</td><td>-</td><td>-</td><td>-</td><td>S225</td><td>-</td><td>-</td><td>S223</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S227</td><td>Phone</td><td>Navi</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S242</td><td>S229</td><td>S2</td><td>S197</td><td>S207</td><td>-</td><td>-</td><td>-</td><td>S228</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S228</td><td>Phone</td><td>Navi</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S243</td><td>S229</td><td>S3</td><td>S198</td><td>S208</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S227</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S229</td><td>Phone</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S244</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S227</td><td>S230</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S230</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S245</td><td>-</td><td>S20</td><td>S200</td><td>S210</td><td>-</td><td>-</td><td>-</td><td>S231</td><td>-</td><td>-</td><td>-</td><td>S227</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S231</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S246</td><td>-</td><td>S21</td><td>S201</td><td>S211</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S230</td><td>-</td><td>-</td><td>S228</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S232</td><td>Phone</td><td>Navi</td><td></td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S242</td><td>S234</td><td>S7</td><td>S197</td><td>S212</td><td>-</td><td>-</td><td>-</td><td>S233</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S233</td><td>Phone</td><td>Navi</td><td></td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S243</td><td>S234</td><td>S8</td><td>S198</td><td>S213</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S232</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S234</td><td>Phone</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S244</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S232</td><td>S235</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S235</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S245</td><td>-</td><td>S10</td><td>S200</td><td>S215</td><td>-</td><td>-</td><td>-</td><td>S236</td><td>-</td><td>-</td><td>-</td><td>S232</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S236</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S246</td><td>-</td><td>S11</td><td>S201</td><td>S216</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S235</td><td>-</td><td>-</td><td>S233</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S237</td><td>Phone</td><td>Navi</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S242</td><td>S239</td><td>S12</td><td>S197</td><td>S217</td><td>-</td><td>-</td><td>-</td><td>S238</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S238</td><td>Phone</td><td>Navi</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S243</td><td>S239</td><td>S13</td><td>S198</td><td>S218</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S237</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S239</td><td>Phone</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S244</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S237</td><td>S240</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S240</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S245</td><td>-</td><td>S15</td><td>S200</td><td>S220</td><td>-</td><td>-</td><td>-</td><td>S241</td><td>-</td><td>-</td><td>-</td><td>S237</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S241</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S246</td><td>-</td><td>S16</td><td>S201</td><td>S221</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S240</td><td>-</td><td>-</td><td>S238</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S242</td><td>Phone</td><td>Navi</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S244</td><td>S17</td><td>S202</td><td>S222</td><td>-</td><td>-</td><td>-</td><td>S243</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S243</td><td>Phone</td><td>Navi</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S244</td><td>S18</td><td>S203</td><td>S223</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S242</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S244</td><td>Phone</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S242</td><td>S245</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S245</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S205</td><td>S225</td><td>-</td><td>-</td><td>-</td><td>S246</td><td>-</td><td>-</td><td>-</td><td>S242</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S246</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S206</td><td>S226</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S245</td><td>-</td><td>-</td><td>S243</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S247</td><td>Navi</td><td>MP</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S252</td><td>S249</td><td>S7</td><td>-</td><td>S262</td><td>-</td><td>-</td><td>-</td><td>S248</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S248</td><td>Navi</td><td>MP</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S253</td><td>S249</td><td>S8</td><td>-</td><td>S263</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S247</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S249</td><td>Navi</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S254</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S247</td><td>S248</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S250</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S255</td><td>-</td><td>S10</td><td>-</td><td>S265</td><td>-</td><td>-</td><td>-</td><td>S251</td><td>-</td><td>-</td><td>-</td><td>S247</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S251</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S256</td><td>-</td><td>S11</td><td>-</td><td>S266</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S250</td><td>-</td><td>-</td><td>S248</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S252</td><td>Navi</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S254</td><td>S17</td><td>-</td><td>S272</td><td>-</td><td>-</td><td>-</td><td>S253</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S253</td><td>Navi</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S254</td><td>S18</td><td>-</td><td>S273</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S252</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S254</td><td>Navi</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S252</td><td>S253</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S255</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>S275</td><td>-</td><td>-</td><td>-</td><td>S256</td><td>-</td><td>-</td><td>-</td><td>S252</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S256</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>S276</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S255</td><td>-</td><td>-</td><td>S253</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S257</td><td>Navi</td><td>HVAC</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S272</td><td>S259</td><td>S2</td><td>S247</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S258</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S258</td><td>Navi</td><td>HVAC</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S273</td><td>S259</td><td>S3</td><td>S248</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S257</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S259</td><td>Navi</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S274</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S257</td><td>S260</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S260</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S275</td><td>-</td><td>S20</td><td>S250</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S261</td><td>-</td><td>-</td><td>-</td><td>S257</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S261</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S276</td><td>-</td><td>S21</td><td>S251</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S260</td><td>-</td><td>-</td><td>S258</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S262</td><td>Navi</td><td>HVAC</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S272</td><td>S264</td><td>S7</td><td>S247</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S263</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S263</td><td>Navi</td><td>HVAC</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S273</td><td>S264</td><td>S8</td><td>S248</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S262</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S264</td><td>Navi</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S274</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S262</td><td>S265</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S265</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S275</td><td>-</td><td>S10</td><td>S250</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S266</td><td>-</td><td>-</td><td>-</td><td>S262</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S266</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S276</td><td>-</td><td>S11</td><td>S251</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S265</td><td>-</td><td>-</td><td>S263</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S267</td><td>Navi</td><td>HVAC</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S272</td><td>S269</td><td>S12</td><td>S247</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S268</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S268</td><td>Navi</td><td>HVAC</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S273</td><td>S269</td><td>S13</td><td>S248</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S267</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S269</td><td>Navi</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S274</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S267</td><td>S270</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S270</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S275</td><td>-</td><td>S15</td><td>S250</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S271</td><td>-</td><td>-</td><td>-</td><td>S267</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S271</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S276</td><td>-</td><td>S16</td><td>S251</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S270</td><td>-</td><td>-</td><td>S268</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S272</td><td>Navi</td><td>HVAC</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S274</td><td>S17</td><td>S252</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S273</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S273</td><td>Navi</td><td>HVAC</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S274</td><td>S18</td><td>S253</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S272</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S274</td><td>Navi</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S272</td><td>S275</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S275</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S255</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S276</td><td>-</td><td>-</td><td>-</td><td>S272</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S276</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S256</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S275</td><td>-</td><td>-</td><td>S273</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S277</td><td>Other</td><td>MP</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S282</td><td>S279</td><td>S7</td><td>-</td><td>S292</td><td>S312</td><td>-</td><td>-</td><td>S278</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S278</td><td>Other</td><td>MP</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S283</td><td>S279</td><td>S8</td><td>-</td><td>S293</td><td>S313</td><td>-</td><td>-</td><td>-</td><td>S277</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S279</td><td>Other</td><td>MP</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S284</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S277</td><td>S280</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S280</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S285</td><td>-</td><td>S10</td><td>-</td><td>S295</td><td>S317</td><td>-</td><td>-</td><td>S281</td><td>-</td><td>-</td><td>-</td><td>S277</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S281</td><td>Phone</td><td>MP</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S286</td><td>-</td><td>S11</td><td>-</td><td>S296</td><td>S318</td><td>-</td><td>-</td><td>-</td><td>S280</td><td>-</td><td>-</td><td>S278</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S282</td><td>Other</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S284</td><td>S12</td><td>-</td><td>S302</td><td>S322</td><td>-</td><td>-</td><td>S283</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S283</td><td>Other</td><td>MP(BTA)</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S284</td><td>S13</td><td>-</td><td>S303</td><td>S323</td><td>-</td><td>-</td><td>-</td><td>S282</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S284</td><td>Other</td><td>MP(BTA)</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S282</td><td>S285</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S285</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>-</td><td>S305</td><td>S325</td><td>-</td><td>-</td><td>S286</td><td>-</td><td>-</td><td>-</td><td>S282</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S286</td><td>Phone</td><td>MP(BTA)</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>-</td><td>S306</td><td>S326</td><td>-</td><td>-</td><td>-</td><td>S285</td><td>-</td><td>-</td><td>S283</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S287</td><td>Other</td><td>HVAC</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S302</td><td>S289</td><td>S2</td><td>S277</td><td>-</td><td>S307</td><td>-</td><td>-</td><td>S288</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S288</td><td>Other</td><td>HVAC</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S303</td><td>S289</td><td>S3</td><td>S278</td><td>-</td><td>S308</td><td>-</td><td>-</td><td>-</td><td>S287</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S289</td><td>Other</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S304</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S287</td><td>S290</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S290</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S305</td><td>-</td><td>S20</td><td>S280</td><td>-</td><td>S310</td><td>-</td><td>-</td><td>S291</td><td>-</td><td>-</td><td>-</td><td>S287</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S291</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S306</td><td>-</td><td>S21</td><td>S281</td><td>-</td><td>S311</td><td>-</td><td>-</td><td>-</td><td>S290</td><td>-</td><td>-</td><td>S288</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S292</td><td>Other</td><td>HVAC</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S302</td><td>S294</td><td>S7</td><td>S277</td><td>-</td><td>S312</td><td>-</td><td>-</td><td>S293</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S293</td><td>Other</td><td>HVAC</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S303</td><td>S294</td><td>S8</td><td>S278</td><td>-</td><td>S313</td><td>-</td><td>-</td><td>-</td><td>S292</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S294</td><td>Other</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S304</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S292</td><td>S295</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S295</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S305</td><td>-</td><td>S10</td><td>S278</td><td>-</td><td>S315</td><td>-</td><td>-</td><td>S296</td><td>-</td><td>-</td><td>-</td><td>S292</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S296</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S306</td><td>-</td><td>S11</td><td>S278</td><td>-</td><td>S316</td><td>-</td><td>-</td><td>-</td><td>S295</td><td>-</td><td>-</td><td>S293</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S297</td><td>Other</td><td>HVAC</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S302</td><td>S299</td><td>S12</td><td>S277</td><td>-</td><td>S317</td><td>-</td><td>-</td><td>S298</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S298</td><td>Other</td><td>HVAC</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S303</td><td>S299</td><td>S13</td><td>S278</td><td>-</td><td>S318</td><td>-</td><td>-</td><td>-</td><td>S297</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S299</td><td>Other</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S304</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S297</td><td>S300</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S300</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S305</td><td>-</td><td>S15</td><td>S280</td><td>-</td><td>S320</td><td>-</td><td>-</td><td>S301</td><td>-</td><td>-</td><td>-</td><td>S297</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S301</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S306</td><td>-</td><td>S16</td><td>S281</td><td>-</td><td>S321</td><td>-</td><td>-</td><td>-</td><td>S300</td><td>-</td><td>-</td><td>S298</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S302</td><td>Other</td><td>HVAC</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S304</td><td>S17</td><td>S282</td><td>-</td><td>S322</td><td>-</td><td>-</td><td>S303</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S303</td><td>Other</td><td>HVAC</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S304</td><td>S18</td><td>S283</td><td>-</td><td>S323</td><td>-</td><td>-</td><td>-</td><td>S302</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S304</td><td>Other</td><td>HVAC</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S302</td><td>S305</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S305</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S285</td><td>-</td><td>S325</td><td>-</td><td>-</td><td>S306</td><td>-</td><td>-</td><td>-</td><td>S302</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S306</td><td>Phone</td><td>HVAC</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S286</td><td>-</td><td>S326</td><td>-</td><td>-</td><td>-</td><td>S305</td><td>-</td><td>-</td><td>S303</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S307</td><td>Other</td><td>Navi</td><td>-</td><td>off</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S322</td><td>S309</td><td>S2</td><td>S287</td><td>S287</td><td>-</td><td>-</td><td>-</td><td>S308</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S308</td><td>Other</td><td>Navi</td><td>-</td><td>off</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S323</td><td>S309</td><td>S3</td><td>S288</td><td>S288</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S307</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S309</td><td>Other</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S324</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S307</td><td>S310</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S310</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S325</td><td>-</td><td>S20</td><td>S290</td><td>S290</td><td>-</td><td>-</td><td>-</td><td>S311</td><td>-</td><td>-</td><td>-</td><td>S307</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S311</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S326</td><td>-</td><td>S21</td><td>S291</td><td>S291</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S310</td><td>-</td><td>-</td><td>S308</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S312</td><td>Other</td><td>Navi</td><td>-</td><td>MP</td><td>MP</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S322</td><td>S314</td><td>S7</td><td>S292</td><td>S292</td><td>-</td><td>-</td><td>-</td><td>S313</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S313</td><td>Other</td><td>Navi</td><td>-</td><td>MP</td><td>TTS</td><td>MP</td><td>MP</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S323</td><td>S314</td><td>S8</td><td>S293</td><td>S293</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S312</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S314</td><td>Other</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S324</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S312</td><td>S315</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S315</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S325</td><td>-</td><td>S10</td><td>S295</td><td>S295</td><td>-</td><td>-</td><td>-</td><td>S316</td><td>-</td><td>-</td><td>-</td><td>S312</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S316</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S326</td><td>-</td><td>S11</td><td>S296</td><td>S296</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S315</td><td>-</td><td>-</td><td>S313</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S317</td><td>Other</td><td>Navi</td><td>-</td><td>Radio</td><td>Radio</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S322</td><td>S319</td><td>S12</td><td>S297</td><td>S297</td><td>-</td><td>-</td><td>-</td><td>S318</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S318</td><td>Other</td><td>Navi</td><td>-</td><td>Radio</td><td>TTS</td><td>Radio</td><td>Radio</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S323</td><td>S319</td><td>S13</td><td>S298</td><td>S298</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S317</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S319</td><td>Other</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S324</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S317</td><td>S320</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S320</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S325</td><td>-</td><td>S15</td><td>S300</td><td>S300</td><td>-</td><td>-</td><td>-</td><td>S321</td><td>-</td><td>-</td><td>-</td><td>S317</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S321</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S326</td><td>-</td><td>S16</td><td>S301</td><td>S301</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S320</td><td>-</td><td>-</td><td>S318</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S322</td><td>Other</td><td>Navi</td><td>-</td><td>BTA</td><td>BTA</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S324</td><td>S17</td><td>S282</td><td>S302</td><td>-</td><td>-</td><td>-</td><td>S323</td><td>-</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S323</td><td>Other</td><td>Navi</td><td>-</td><td>BTA</td><td>TTS</td><td>BTA</td><td>BTA</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S324</td><td>S18</td><td>S283</td><td>S303</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S322</td><td>-</td><td>-</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S324</td><td>Other</td><td>Navi</td><td>Ringing</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S322</td><td>S325</td><td>-</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S325</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>off</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S20</td><td>S285</td><td>S305</td><td>-</td><td>-</td><td>-</td><td>S326</td><td>-</td><td>-</td><td>-</td><td>S322</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr><td>S326</td><td>Phone</td><td>Navi</td><td>-</td><td>Tel</td><td>TTS</td><td>off</td><td>off</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S21</td><td>S286</td><td>S306</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S325</td><td>-</td><td>-</td><td>S323</td><td bgcolor="gray">S327</td><td bgcolor="gray">-</td></tr>
+<tr bgcolor="gray"><td>S327</td><td>any</td><td>any</td><td>any</td><td>any</td><td>Warn</td><td>any</td><td>any</td><td>-</td><td bgcolor="gray">S1</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>S(previous)</td></tr>
+</table>
diff --git a/doc/api-ref/html/annotated.html b/doc/api-ref/html/annotated.html
new file mode 100644
index 0000000..c8aeca2
--- /dev/null
+++ b/doc/api-ref/html/annotated.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Data Structures</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('annotated.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Data Structures</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structevent.html" target="_self">event</a></td><td class="desc"></td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="class_lib_soundmanager.html" target="_self">LibSoundmanager</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/annotated_dup.js b/doc/api-ref/html/annotated_dup.js
new file mode 100644
index 0000000..9ab7e04
--- /dev/null
+++ b/doc/api-ref/html/annotated_dup.js
@@ -0,0 +1,5 @@
+var annotated_dup =
+[
+ [ "event", "structevent.html", "structevent" ],
+ [ "LibSoundmanager", "class_lib_soundmanager.html", "class_lib_soundmanager" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/bc_s.png b/doc/api-ref/html/bc_s.png
new file mode 100644
index 0000000..224b29a
--- /dev/null
+++ b/doc/api-ref/html/bc_s.png
Binary files differ
diff --git a/doc/api-ref/html/bdwn.png b/doc/api-ref/html/bdwn.png
new file mode 100644
index 0000000..940a0b9
--- /dev/null
+++ b/doc/api-ref/html/bdwn.png
Binary files differ
diff --git a/doc/api-ref/html/class_lib_soundmanager.html b/doc/api-ref/html/class_lib_soundmanager.html
new file mode 100644
index 0000000..013af0d
--- /dev/null
+++ b/doc/api-ref/html/class_lib_soundmanager.html
@@ -0,0 +1,532 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: LibSoundmanager Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('class_lib_soundmanager.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> </div>
+ <div class="headertitle">
+<div class="title">LibSoundmanager Class Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+
+<p><code>#include &lt;<a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager.hpp</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a289a9d6ff8be95ae78660f239d962d79"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79">LibSoundmanager</a> (const int port, const std::string &amp;token)</td></tr>
+<tr class="separator:a289a9d6ff8be95ae78660f239d962d79"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf861908e3d6d85d2b3c08683b08f934"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934">~LibSoundmanager</a> ()</td></tr>
+<tr class="separator:abf861908e3d6d85d2b3c08683b08f934"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a560edf9ae3b1e367ad4cbb31c7021d74"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">register_callback</a> (void(*event_cb)(const std::string &amp;<a class="el" href="structevent.html">event</a>, struct json_object *event_contents), void(*reply_cb)(struct json_object *reply_contents))</td></tr>
+<tr class="separator:a560edf9ae3b1e367ad4cbb31c7021d74"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe71d3531e7888f47185a601b284e729"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729">run_eventloop</a> ()</td></tr>
+<tr class="separator:abe71d3531e7888f47185a601b284e729"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1fe952a4dabbab6126cc23e36c79c773"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">call</a> (const std::string &amp;verb, struct json_object *arg)</td></tr>
+<tr class="separator:a1fe952a4dabbab6126cc23e36c79c773"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae5b83ce661b1d785de2518ca10113956"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956">call_sync</a> (const std::string &amp;verb, struct json_object *arg, struct json_object *ret)</td></tr>
+<tr class="separator:ae5b83ce661b1d785de2518ca10113956"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cd7c5470cb135f9b1aa56d790c7e91e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e">subscribe</a> (const std::string &amp;event_name)</td></tr>
+<tr class="separator:a9cd7c5470cb135f9b1aa56d790c7e91e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a21060844aa7efad6473b6104546afb06"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06">unsubscribe</a> (const std::string &amp;event_name)</td></tr>
+<tr class="separator:a21060844aa7efad6473b6104546afb06"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a71a8165cb15c7815aa95a8955f5cd7f6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6">on_hangup</a> (void *closure, struct afb_wsj1 *wsj)</td></tr>
+<tr class="separator:a71a8165cb15c7815aa95a8955f5cd7f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3ba2255cb1d29c77c4c6a2267949eda0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0">on_call</a> (void *closure, const char *api, const char *verb, struct afb_wsj1_msg *msg)</td></tr>
+<tr class="separator:a3ba2255cb1d29c77c4c6a2267949eda0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a86ef62e7847cd20e9cafbc1f6c017b3e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e">on_event</a> (void *closure, const char *<a class="el" href="structevent.html">event</a>, struct afb_wsj1_msg *msg)</td></tr>
+<tr class="separator:a86ef62e7847cd20e9cafbc1f6c017b3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a69b4f10e509605a570cc52c795bc9d51"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51">on_reply</a> (void *closure, struct afb_wsj1_msg *msg)</td></tr>
+<tr class="separator:a69b4f10e509605a570cc52c795bc9d51"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8hpp_source.html#l00062">62</a> of file <a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager.hpp</a>.</p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a289a9d6ff8be95ae78660f239d962d79"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a289a9d6ff8be95ae78660f239d962d79">&#9670;&nbsp;</a></span>LibSoundmanager()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LibSoundmanager::LibSoundmanager </td>
+ <td>(</td>
+ <td class="paramtype">const int&#160;</td>
+ <td class="paramname"><em>port</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>token</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a id="abf861908e3d6d85d2b3c08683b08f934"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abf861908e3d6d85d2b3c08683b08f934">&#9670;&nbsp;</a></span>~LibSoundmanager()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">LibSoundmanager::~LibSoundmanager </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00093">93</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a1fe952a4dabbab6126cc23e36c79c773"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1fe952a4dabbab6126cc23e36c79c773">&#9670;&nbsp;</a></span>call()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LibSoundmanager::call </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>verb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct json_object *&#160;</td>
+ <td class="paramname"><em>arg</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>This function calls the API of Audio Manager via WebSocket</p>
+<h4>Parameters</h4>
+<ul>
+<li>verb [in] : This argument should be specified to the API name (e.g. "connect")</li>
+<li>arg [in] : This argument should be specified to the argument of API. And this argument expects JSON object</li>
+</ul>
+<h4>Rreturn</h4>
+<ul>
+<li>Returns 0 on success or -1 in case of error.</li>
+</ul>
+<h4>Note</h4>
+<p>To call Audio Manager's APIs, the application should set its function name, arguments to JSON format. </p>
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00217">217</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="ae5b83ce661b1d785de2518ca10113956"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae5b83ce661b1d785de2518ca10113956">&#9670;&nbsp;</a></span>call_sync()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LibSoundmanager::call_sync </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>verb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct json_object *&#160;</td>
+ <td class="paramname"><em>arg</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct json_object *&#160;</td>
+ <td class="paramname"><em>ret</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00236">236</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a3ba2255cb1d29c77c4c6a2267949eda0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3ba2255cb1d29c77c4c6a2267949eda0">&#9670;&nbsp;</a></span>on_call()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LibSoundmanager::on_call </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>api</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>verb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct afb_wsj1_msg *&#160;</td>
+ <td class="paramname"><em>msg</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00347">347</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a86ef62e7847cd20e9cafbc1f6c017b3e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a86ef62e7847cd20e9cafbc1f6c017b3e">&#9670;&nbsp;</a></span>on_event()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LibSoundmanager::on_event </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>event</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct afb_wsj1_msg *&#160;</td>
+ <td class="paramname"><em>msg</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00358">358</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a71a8165cb15c7815aa95a8955f5cd7f6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a71a8165cb15c7815aa95a8955f5cd7f6">&#9670;&nbsp;</a></span>on_hangup()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LibSoundmanager::on_hangup </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct afb_wsj1 *&#160;</td>
+ <td class="paramname"><em>wsj</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00342">342</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a69b4f10e509605a570cc52c795bc9d51"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a69b4f10e509605a570cc52c795bc9d51">&#9670;&nbsp;</a></span>on_reply()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LibSoundmanager::on_reply </td>
+ <td>(</td>
+ <td class="paramtype">void *&#160;</td>
+ <td class="paramname"><em>closure</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">struct afb_wsj1_msg *&#160;</td>
+ <td class="paramname"><em>msg</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00369">369</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a560edf9ae3b1e367ad4cbb31c7021d74"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a560edf9ae3b1e367ad4cbb31c7021d74">&#9670;&nbsp;</a></span>register_callback()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void LibSoundmanager::register_callback </td>
+ <td>(</td>
+ <td class="paramtype">void(*)(const std::string &amp;<a class="el" href="structevent.html">event</a>, struct json_object *event_contents)&#160;</td>
+ <td class="paramname"><em>event_cb</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void(*)(struct json_object *reply_contents)&#160;</td>
+ <td class="paramname"><em>reply_cb</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>This function register callback function for reply/event message from sound manager</p>
+<h4>Parameters</h4>
+<ul>
+<li>event_cb [in] : This argument should be specified to the callback for subscribed event</li>
+<li>reply_cb [in] : This argument should be specified to the reply callback for call function</li>
+</ul>
+<h4>Rreturn</h4>
+<ul>
+<li>Returns 0 on success or -1 in case of error.</li>
+</ul>
+<h4>Note</h4>
+<p>Event callback is invoked by sound manager for event you subscribed. If you would like to get event, please call subscribe function before/after this function </p>
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00119">119</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="abe71d3531e7888f47185a601b284e729"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abe71d3531e7888f47185a601b284e729">&#9670;&nbsp;</a></span>run_eventloop()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LibSoundmanager::run_eventloop </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>This function start receiving the reply/event message from sound manager</p>
+<h4>Parameters</h4>
+<p>Nothing </p><h4>Rreturn</h4>
+<ul>
+<li>Returns thread_id on success or -1 in case of error.</li>
+</ul>
+<h4>Note</h4>
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00182">182</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a9cd7c5470cb135f9b1aa56d790c7e91e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cd7c5470cb135f9b1aa56d790c7e91e">&#9670;&nbsp;</a></span>subscribe()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LibSoundmanager::subscribe </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>event_name</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Register callback function for each event</p>
+<h4>Parameters</h4>
+<ul>
+<li>event_name [in] : This argument should be specified to the event name</li>
+</ul>
+<h4>Rreturn</h4>
+<ul>
+<li>Returns 0 on success or -1 in case of error.</li>
+</ul>
+<h4>Note</h4>
+<p>This function enables to get an event to your callback function. Regarding the list of event name, please refer to CommandSender API and RountingSender API. </p>
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00255">255</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a21060844aa7efad6473b6104546afb06"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a21060844aa7efad6473b6104546afb06">&#9670;&nbsp;</a></span>unsubscribe()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int LibSoundmanager::unsubscribe </td>
+ <td>(</td>
+ <td class="paramtype">const std::string &amp;&#160;</td>
+ <td class="paramname"><em>event_name</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p>Unregister callback function for each event</p>
+<h4>Parameters</h4>
+<ul>
+<li>event_name [in] : This argument should be specified to the event name</li>
+</ul>
+<h4>Rreturn</h4>
+<ul>
+<li>Returns 0 on success or -1 in case of error.</li>
+</ul>
+<h4>Note</h4>
+<p>This function disables to get an event to your callback function. </p>
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00284">284</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>SoundManagerBinding/include/libsoundmanager/<a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager.hpp</a></li>
+<li>SoundManagerBinding/libsoundmanager/<a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="class_lib_soundmanager.html">LibSoundmanager</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/class_lib_soundmanager.js b/doc/api-ref/html/class_lib_soundmanager.js
new file mode 100644
index 0000000..ed52e34
--- /dev/null
+++ b/doc/api-ref/html/class_lib_soundmanager.js
@@ -0,0 +1,15 @@
+var class_lib_soundmanager =
+[
+ [ "LibSoundmanager", "class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79", null ],
+ [ "~LibSoundmanager", "class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934", null ],
+ [ "call", "class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773", null ],
+ [ "call_sync", "class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956", null ],
+ [ "on_call", "class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0", null ],
+ [ "on_event", "class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e", null ],
+ [ "on_hangup", "class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6", null ],
+ [ "on_reply", "class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51", null ],
+ [ "register_callback", "class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74", null ],
+ [ "run_eventloop", "class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729", null ],
+ [ "subscribe", "class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e", null ],
+ [ "unsubscribe", "class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06", null ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/classes.html b/doc/api-ref/html/classes.html
new file mode 100644
index 0000000..ccaae38
--- /dev/null
+++ b/doc/api-ref/html/classes.html
@@ -0,0 +1,107 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Data Structure Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('classes.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Data Structure Index</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_e">e</a>&#160;|&#160;<a class="qindex" href="#letter_l">l</a></div>
+<table class="classindex">
+<tr><td rowspan="2" valign="bottom"><a name="letter_e"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;e&#160;&#160;</div></td></tr></table>
+</td><td rowspan="2" valign="bottom"><a name="letter_l"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;l&#160;&#160;</div></td></tr></table>
+</td><td></td></tr>
+<tr><td></td></tr>
+<tr><td valign="top"><a class="el" href="structevent.html">event</a>&#160;&#160;&#160;</td><td valign="top"><a class="el" href="class_lib_soundmanager.html">LibSoundmanager</a>&#160;&#160;&#160;</td><td></td></tr>
+<tr><td></td><td></td><td></td></tr>
+</table>
+<div class="qindex"><a class="qindex" href="#letter_e">e</a>&#160;|&#160;<a class="qindex" href="#letter_l">l</a></div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/closed.png b/doc/api-ref/html/closed.png
new file mode 100644
index 0000000..98cc2c9
--- /dev/null
+++ b/doc/api-ref/html/closed.png
Binary files differ
diff --git a/doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html b/doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html
new file mode 100644
index 0000000..b3d3d7f
--- /dev/null
+++ b/doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/include/libsoundmanager Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">libsoundmanager Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:libsoundmanager_8hpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libsoundmanager_8hpp.html">libsoundmanager.hpp</a> <a href="libsoundmanager_8hpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_c2dc0533631c44dc5d574e7be055c656.html">include</a></li><li class="navelem"><a class="el" href="dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html">libsoundmanager</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.js b/doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.js
new file mode 100644
index 0000000..47bb19a
--- /dev/null
+++ b/doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.js
@@ -0,0 +1,4 @@
+var dir_4ed4f07a8451d34bdd1d92ed62b81ed4 =
+[
+ [ "libsoundmanager.hpp", "libsoundmanager_8hpp.html", "libsoundmanager_8hpp" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.html b/doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.html
new file mode 100644
index 0000000..9af5eb6
--- /dev/null
+++ b/doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/libsoundmanager Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_574c53d22ed4def281d320d129dd43c9.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">libsoundmanager Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:libsoundmanager_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libsoundmanager_8cpp.html">libsoundmanager.cpp</a> <a href="libsoundmanager_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:test_8cpp"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="test_8cpp.html">test.cpp</a> <a href="test_8cpp_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html">libsoundmanager</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.js b/doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.js
new file mode 100644
index 0000000..2b5132f
--- /dev/null
+++ b/doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.js
@@ -0,0 +1,5 @@
+var dir_574c53d22ed4def281d320d129dd43c9 =
+[
+ [ "libsoundmanager.cpp", "libsoundmanager_8cpp.html", "libsoundmanager_8cpp" ],
+ [ "test.cpp", "test_8cpp.html", "test_8cpp" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/dir_85932083476b47061c69d172796990a3.html b/doc/api-ref/html/dir_85932083476b47061c69d172796990a3.html
new file mode 100644
index 0000000..72d6a35
--- /dev/null
+++ b/doc/api-ref/html/dir_85932083476b47061c69d172796990a3.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/soundmanager_binging Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_85932083476b47061c69d172796990a3.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">soundmanager_binging Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:soundmanager_8c"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html">soundmanager.c</a> <a href="soundmanager_8c_source.html">[code]</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_85932083476b47061c69d172796990a3.html">soundmanager_binging</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/dir_85932083476b47061c69d172796990a3.js b/doc/api-ref/html/dir_85932083476b47061c69d172796990a3.js
new file mode 100644
index 0000000..1e22727
--- /dev/null
+++ b/doc/api-ref/html/dir_85932083476b47061c69d172796990a3.js
@@ -0,0 +1,4 @@
+var dir_85932083476b47061c69d172796990a3 =
+[
+ [ "soundmanager.c", "soundmanager_8c.html", "soundmanager_8c" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.html b/doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.html
new file mode 100644
index 0000000..cd5167f
--- /dev/null
+++ b/doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_b967abc00200c877344b4504e6cbcf3f.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">SoundManagerBinding Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_c2dc0533631c44dc5d574e7be055c656"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_c2dc0533631c44dc5d574e7be055c656.html">include</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_574c53d22ed4def281d320d129dd43c9"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html">libsoundmanager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:dir_85932083476b47061c69d172796990a3"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_85932083476b47061c69d172796990a3.html">soundmanager_binging</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.js b/doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.js
new file mode 100644
index 0000000..f0a5be1
--- /dev/null
+++ b/doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.js
@@ -0,0 +1,6 @@
+var dir_b967abc00200c877344b4504e6cbcf3f =
+[
+ [ "include", "dir_c2dc0533631c44dc5d574e7be055c656.html", "dir_c2dc0533631c44dc5d574e7be055c656" ],
+ [ "libsoundmanager", "dir_574c53d22ed4def281d320d129dd43c9.html", "dir_574c53d22ed4def281d320d129dd43c9" ],
+ [ "soundmanager_binging", "dir_85932083476b47061c69d172796990a3.html", "dir_85932083476b47061c69d172796990a3" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.html b/doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.html
new file mode 100644
index 0000000..6131795
--- /dev/null
+++ b/doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/include Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('dir_c2dc0533631c44dc5d574e7be055c656.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">include Directory Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:dir_4ed4f07a8451d34bdd1d92ed62b81ed4"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html">libsoundmanager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_c2dc0533631c44dc5d574e7be055c656.html">include</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.js b/doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.js
new file mode 100644
index 0000000..07c80e4
--- /dev/null
+++ b/doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.js
@@ -0,0 +1,4 @@
+var dir_c2dc0533631c44dc5d574e7be055c656 =
+[
+ [ "libsoundmanager", "dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html", "dir_4ed4f07a8451d34bdd1d92ed62b81ed4" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/doc.png b/doc/api-ref/html/doc.png
new file mode 100644
index 0000000..17edabf
--- /dev/null
+++ b/doc/api-ref/html/doc.png
Binary files differ
diff --git a/doc/api-ref/html/doxygen.css b/doc/api-ref/html/doxygen.css
new file mode 100644
index 0000000..4f1ab91
--- /dev/null
+++ b/doc/api-ref/html/doxygen.css
@@ -0,0 +1,1596 @@
+/* The standard CSS for doxygen 1.8.13 */
+
+body, table, div, p, dl {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+p.reference, p.definition {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+ font-size: 150%;
+}
+
+.title {
+ font: 400 14px/28px Roboto,sans-serif;
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2.groupheader {
+ border-bottom: 1px solid #879ECB;
+ color: #354C7B;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
+}
+
+h3.groupheader {
+ font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: 0 0 15px cyan;
+}
+
+dt {
+ font-weight: bold;
+}
+
+div.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+}
+
+p.startli, p.startdd {
+ margin-top: 2px;
+}
+
+p.starttd {
+ margin-top: 0px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.qindex, div.navtab{
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+}
+
+div.qindex, div.navpath {
+ width: 100%;
+ line-height: 140%;
+}
+
+div.navtab {
+ margin-right: 15px;
+}
+
+/* @group Link Styling */
+
+a {
+ color: #3D578C;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #4665A2;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a.qindex {
+ font-weight: bold;
+}
+
+a.qindexHL {
+ font-weight: bold;
+ background-color: #9CAFD4;
+ color: #ffffff;
+ border: 1px double #869DCA;
+}
+
+.contents a.qindexHL:visited {
+ color: #ffffff;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+ color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+ color: #4665A2;
+}
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+div.fragment {
+ padding: 0px;
+ margin: 4px 8px 4px 2px;
+ background-color: #FBFCFD;
+ border: 1px solid #C4CFE5;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 13px;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+div.line:after {
+ content:"\000A";
+ white-space: pre;
+}
+
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+ padding-right: 4px;
+ text-align: right;
+ border-right: 2px solid #0F0;
+ background-color: #E8E8E8;
+ white-space: pre;
+}
+span.lineno a {
+ background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+ background-color: #C8C8C8;
+}
+
+.lineno {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+div.ah, span.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #ffffff;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -webkit-box-shadow: 2px 2px 3px #999;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
+}
+
+div.classindex ul {
+ list-style: none;
+ padding-left: 0;
+}
+
+div.classindex span.ai {
+ display: inline-block;
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 12px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: #EBEFF6;
+ font-weight: bold;
+ border: 1px solid #C4CFE5;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+td.indexvalue {
+ background-color: #EBEFF6;
+ border: 1px solid #C4CFE5;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+blockquote {
+ background-color: #F7F8FB;
+ border-left: 2px solid #9CAFD4;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
+/* @end */
+
+/*
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+ background: #EBEFF6;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+ background-color: cyan;
+ box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #F9FAFC;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: #4665A2;
+ white-space: nowrap;
+ font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtitle {
+ padding: 8px;
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ margin-bottom: -1px;
+ background-image: url('nav_f.png');
+ background-repeat: repeat-x;
+ background-color: #E2E8F2;
+ line-height: 1.25;
+ font-weight: 300;
+ float:left;
+}
+
+.permalink
+{
+ font-size: 65%;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+ -webkit-transition: box-shadow 0.5s linear;
+ -moz-transition: box-shadow 0.5s linear;
+ -ms-transition: box-shadow 0.5s linear;
+ -o-transition: box-shadow 0.5s linear;
+ transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
+}
+
+.memitem.glow {
+ box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+ font-weight: 400;
+ margin-left: 6px;
+}
+
+.memname td {
+ vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: bold;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ background-color: #DFE5F1;
+ /* opera specific markup */
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 4px;
+ /* firefox specific markup */
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ -moz-border-radius-topright: 4px;
+ /* webkit specific markup */
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ -webkit-border-top-right-radius: 4px;
+
+}
+
+.overload {
+ font-family: "courier new",courier,monospace;
+ font-size: 65%;
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 10px 2px 10px;
+ background-color: #FBFCFD;
+ border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
+ /* opera specific markup */
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ /* firefox specific markup */
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+.paramname code {
+ line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+.params .paramname, .retval .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+table.mlabels {
+ border-spacing: 0px;
+}
+
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
+}
+
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
+
+span.mlabels {
+ margin-left: 8px;
+}
+
+span.mlabel {
+ background-color: #728DC1;
+ border-top:1px solid #5373B4;
+ border-left:1px solid #5373B4;
+ border-right:1px solid #C4CFE5;
+ border-bottom:1px solid #C4CFE5;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid #9CAFD4;
+ border-bottom: 1px solid #9CAFD4;
+ width: 100%;
+}
+
+.directory table {
+ border-collapse:collapse;
+}
+
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
+
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
+ padding-top: 3px;
+}
+
+.directory td.entry a {
+ outline:none;
+}
+
+.directory td.entry a img {
+ border: none;
+}
+
+.directory td.desc {
+ width: 100%;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+ padding-left: 6px;
+ background-color: #F7F8FB;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+.directory .levels {
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ font-size: 9pt;
+}
+
+.directory .levels span {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: #3D578C;
+}
+
+.arrow {
+ color: #9CAFD4;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ font-size: 80%;
+ display: inline-block;
+ width: 16px;
+ height: 22px;
+}
+
+.icon {
+ font-family: Arial, Helvetica;
+ font-weight: bold;
+ font-size: 12px;
+ height: 14px;
+ width: 16px;
+ display: inline-block;
+ background-color: #728DC1;
+ color: white;
+ text-align: center;
+ border-radius: 4px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+.icona {
+ width: 24px;
+ height: 22px;
+ display: inline-block;
+}
+
+.iconfopen {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderopen.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.iconfclosed {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderclosed.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.icondoc {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('doc.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+table.directory {
+ font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+ margin-top: 8px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+address {
+ font-style: normal;
+ color: #2A3D61;
+}
+
+table.doxtable caption {
+ caption-side: top;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+table.fieldtable {
+ /*width: 100%;*/
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+ margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+ margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ font-weight: 400;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ background-position: 0 -5px;
+ height:30px;
+ line-height:30px;
+ color:#8AA0CC;
+ border:solid 1px #C2CDE4;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+ color: #283A5D;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:#6884BD;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+table.classindex
+{
+ margin: 10px;
+ white-space: nowrap;
+ margin-left: 3%;
+ margin-right: 3%;
+ width: 94%;
+ border: 0;
+ border-spacing: 0;
+ padding: 0;
+}
+
+div.ingroups
+{
+ font-size: 8pt;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ margin: 0px;
+ border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 10px;
+}
+
+dl
+{
+ padding: 0 0 0 10px;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */
+dl.section
+{
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+dl.note
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00D000;
+}
+
+dl.deprecated
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #505050;
+}
+
+dl.todo
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #00C0E0;
+}
+
+dl.test
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #3030E0;
+}
+
+dl.bug
+{
+ margin-left:-7px;
+ padding-left: 3px;
+ border-left:4px solid;
+ border-color: #C08050;
+}
+
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectalign
+{
+ vertical-align: middle;
+}
+
+#projectname
+{
+ font: 300% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 120% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.plantumlgraph
+{
+ text-align: center;
+}
+
+.diagraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+}
+
+dl.citelist dd {
+ margin:2px 0;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: #F4F6FA;
+ border: 1px solid #D8DFEE;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 8px 10px 10px;
+ width: 200px;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #4665A2;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+div.toc li.level4 {
+ margin-left: 45px;
+}
+
+.inherit_header {
+ font-weight: bold;
+ color: gray;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.inherit_header td {
+ padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+ display: none;
+}
+
+tr.heading h2 {
+ margin-top: 12px;
+ margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+ position: absolute;
+ display: none;
+}
+
+#powerTip {
+ cursor: default;
+ white-space: nowrap;
+ background-color: white;
+ border: 1px solid gray;
+ border-radius: 4px 4px 4px 4px;
+ box-shadow: 1px 1px 7px gray;
+ display: none;
+ font-size: smaller;
+ max-width: 80%;
+ opacity: 0.9;
+ padding: 1ex 1em 1em;
+ position: absolute;
+ z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+ color: grey;
+ font-style: italic;
+}
+
+#powerTip div.ttname a {
+ font-weight: bold;
+}
+
+#powerTip div.ttname {
+ font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+ color: #006318;
+}
+
+#powerTip div {
+ margin: 0px;
+ padding: 0px;
+ font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+ content: "";
+ position: absolute;
+ margin: 0px;
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.w:after, #powerTip.w:before,
+#powerTip.e:after, #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+}
+
+#powerTip.n:after, #powerTip.s:after,
+#powerTip.w:after, #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+ border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before, #powerTip.s:before,
+#powerTip.w:before, #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+ border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+ top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+ border-top-color: #ffffff;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+#powerTip.n:before {
+ border-top-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+ left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+ right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+ left: 14px;
+}
+
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+ border-bottom-color: #ffffff;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+ border-bottom-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+ left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+ right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+ left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+ left: 100%;
+}
+#powerTip.e:after {
+ border-left-color: #ffffff;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.e:before {
+ border-left-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+ right: 100%;
+}
+#powerTip.w:after {
+ border-right-color: #ffffff;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.w:before {
+ border-right-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+@media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+}
+
+/* @group Markdown */
+
+/*
+table.markdownTable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.markdownTableHead tr {
+}
+
+table.markdownTableBodyLeft td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+th.markdownTableHeadLeft {
+ text-align: left
+}
+
+th.markdownTableHeadRight {
+ text-align: right
+}
+
+th.markdownTableHeadCenter {
+ text-align: center
+}
+*/
+
+table.markdownTable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.markdownTable tr {
+}
+
+th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+th.markdownTableHeadLeft, td.markdownTableBodyLeft {
+ text-align: left
+}
+
+th.markdownTableHeadRight, td.markdownTableBodyRight {
+ text-align: right
+}
+
+th.markdownTableHeadCenter, td.markdownTableBodyCenter {
+ text-align: center
+}
+
+
+/* @end */
diff --git a/doc/api-ref/html/doxygen.png b/doc/api-ref/html/doxygen.png
new file mode 100644
index 0000000..3ff17d8
--- /dev/null
+++ b/doc/api-ref/html/doxygen.png
Binary files differ
diff --git a/doc/api-ref/html/dynsections.js b/doc/api-ref/html/dynsections.js
new file mode 100644
index 0000000..1e6bf07
--- /dev/null
+++ b/doc/api-ref/html/dynsections.js
@@ -0,0 +1,104 @@
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+ content.hide();
+ summary.show();
+ $(linkObj).addClass('closed').removeClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ content.show();
+ summary.hide();
+ $(linkObj).removeClass('closed').addClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+ $('table.directory tr').
+ removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+ $('table.directory tr').each(function() {
+ var l = this.id.split('_').length-1;
+ var i = $('#img'+this.id.substring(3));
+ var a = $('#arr'+this.id.substring(3));
+ if (l<level+1) {
+ i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+ a.html('&#9660;');
+ $(this).show();
+ } else if (l==level+1) {
+ i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+ a.html('&#9658;');
+ $(this).show();
+ } else {
+ $(this).hide();
+ }
+ });
+ updateStripes();
+}
+
+function toggleFolder(id)
+{
+ // the clicked row
+ var currentRow = $('#row_'+id);
+
+ // all rows after the clicked row
+ var rows = currentRow.nextAll("tr");
+
+ var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+ // only match elements AFTER this one (can't hide elements before)
+ var childRows = rows.filter(function() { return this.id.match(re); });
+
+ // first row is visible we are HIDING
+ if (childRows.filter(':first').is(':visible')===true) {
+ // replace down arrow by right arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ currentRowSpans.filter(".arrow").html('&#9658;');
+ rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+ } else { // we are SHOWING
+ // replace right arrow by down arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+ currentRowSpans.filter(".arrow").html('&#9660;');
+ // replace down arrows by right arrows for child rows
+ var childRowsSpans = childRows.find("span");
+ childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ childRowsSpans.filter(".arrow").html('&#9658;');
+ childRows.show(); //show all children
+ }
+ updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+ var rows = $('tr.inherit.'+id);
+ var img = $('tr.inherit_header.'+id+' img');
+ var src = $(img).attr('src');
+ if (rows.filter(':first').is(':visible')===true) {
+ rows.css('display','none');
+ $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ rows.css('display','table-row'); // using show() causes jump in firefox
+ $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+}
+
+
+$(document).ready(function() {
+ $('.code,.codeRef').each(function() {
+ $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());
+ $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });
+ });
+});
diff --git a/doc/api-ref/html/files.html b/doc/api-ref/html/files.html
new file mode 100644
index 0000000..cefc25d
--- /dev/null
+++ b/doc/api-ref/html/files.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('files.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">File List</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all files with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html" target="_self">SoundManagerBinding</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><span id="img_0_0_" class="iconfopen" onclick="toggleFolder('0_0_')">&#160;</span><a class="el" href="dir_c2dc0533631c44dc5d574e7be055c656.html" target="_self">include</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">&#9660;</span><span id="img_0_0_0_" class="iconfopen" onclick="toggleFolder('0_0_0_')">&#160;</span><a class="el" href="dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html" target="_self">libsoundmanager</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="libsoundmanager_8hpp_source.html"><span class="icondoc"></span></a><a class="el" href="libsoundmanager_8hpp.html" target="_self">libsoundmanager.hpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_1_" class="arrow" onclick="toggleFolder('0_1_')">&#9660;</span><span id="img_0_1_" class="iconfopen" onclick="toggleFolder('0_1_')">&#160;</span><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html" target="_self">libsoundmanager</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="libsoundmanager_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="libsoundmanager_8cpp.html" target="_self">libsoundmanager.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="test_8cpp_source.html"><span class="icondoc"></span></a><a class="el" href="test_8cpp.html" target="_self">test.cpp</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_2_" class="arrow" onclick="toggleFolder('0_2_')">&#9660;</span><span id="img_0_2_" class="iconfopen" onclick="toggleFolder('0_2_')">&#160;</span><a class="el" href="dir_85932083476b47061c69d172796990a3.html" target="_self">soundmanager_binging</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="soundmanager_8c_source.html"><span class="icondoc"></span></a><a class="el" href="soundmanager_8c.html" target="_self">soundmanager.c</a></td><td class="desc"></td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/files.js b/doc/api-ref/html/files.js
new file mode 100644
index 0000000..4d99c33
--- /dev/null
+++ b/doc/api-ref/html/files.js
@@ -0,0 +1,4 @@
+var files =
+[
+ [ "SoundManagerBinding", "dir_b967abc00200c877344b4504e6cbcf3f.html", "dir_b967abc00200c877344b4504e6cbcf3f" ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/folderclosed.png b/doc/api-ref/html/folderclosed.png
new file mode 100644
index 0000000..bb8ab35
--- /dev/null
+++ b/doc/api-ref/html/folderclosed.png
Binary files differ
diff --git a/doc/api-ref/html/folderopen.png b/doc/api-ref/html/folderopen.png
new file mode 100644
index 0000000..d6c7f67
--- /dev/null
+++ b/doc/api-ref/html/folderopen.png
Binary files differ
diff --git a/doc/api-ref/html/functions.html b/doc/api-ref/html/functions.html
new file mode 100644
index 0000000..5d6c445
--- /dev/null
+++ b/doc/api-ref/html/functions.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Data Fields</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('functions.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all struct and union fields with links to the structures/unions they belong to:</div><ul>
+<li>call()
+: <a class="el" href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">LibSoundmanager</a>
+</li>
+<li>call_sync()
+: <a class="el" href="class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956">LibSoundmanager</a>
+</li>
+<li>event
+: <a class="el" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a>
+</li>
+<li>LibSoundmanager()
+: <a class="el" href="class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79">LibSoundmanager</a>
+</li>
+<li>name
+: <a class="el" href="structevent.html#a723489bec273335d13513cd1040c0216">event</a>
+</li>
+<li>on_call()
+: <a class="el" href="class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0">LibSoundmanager</a>
+</li>
+<li>on_event()
+: <a class="el" href="class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e">LibSoundmanager</a>
+</li>
+<li>on_hangup()
+: <a class="el" href="class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6">LibSoundmanager</a>
+</li>
+<li>on_reply()
+: <a class="el" href="class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51">LibSoundmanager</a>
+</li>
+<li>register_callback()
+: <a class="el" href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">LibSoundmanager</a>
+</li>
+<li>run_eventloop()
+: <a class="el" href="class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729">LibSoundmanager</a>
+</li>
+<li>subscribe()
+: <a class="el" href="class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e">LibSoundmanager</a>
+</li>
+<li>unsubscribe()
+: <a class="el" href="class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06">LibSoundmanager</a>
+</li>
+<li>~LibSoundmanager()
+: <a class="el" href="class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934">LibSoundmanager</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/functions_func.html b/doc/api-ref/html/functions_func.html
new file mode 100644
index 0000000..385add2
--- /dev/null
+++ b/doc/api-ref/html/functions_func.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Data Fields - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('functions_func.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>call()
+: <a class="el" href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">LibSoundmanager</a>
+</li>
+<li>call_sync()
+: <a class="el" href="class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956">LibSoundmanager</a>
+</li>
+<li>LibSoundmanager()
+: <a class="el" href="class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79">LibSoundmanager</a>
+</li>
+<li>on_call()
+: <a class="el" href="class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0">LibSoundmanager</a>
+</li>
+<li>on_event()
+: <a class="el" href="class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e">LibSoundmanager</a>
+</li>
+<li>on_hangup()
+: <a class="el" href="class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6">LibSoundmanager</a>
+</li>
+<li>on_reply()
+: <a class="el" href="class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51">LibSoundmanager</a>
+</li>
+<li>register_callback()
+: <a class="el" href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">LibSoundmanager</a>
+</li>
+<li>run_eventloop()
+: <a class="el" href="class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729">LibSoundmanager</a>
+</li>
+<li>subscribe()
+: <a class="el" href="class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e">LibSoundmanager</a>
+</li>
+<li>unsubscribe()
+: <a class="el" href="class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06">LibSoundmanager</a>
+</li>
+<li>~LibSoundmanager()
+: <a class="el" href="class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934">LibSoundmanager</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/functions_vars.html b/doc/api-ref/html/functions_vars.html
new file mode 100644
index 0000000..030f1ea
--- /dev/null
+++ b/doc/api-ref/html/functions_vars.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Data Fields - Variables</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('functions_vars.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>event
+: <a class="el" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a>
+</li>
+<li>name
+: <a class="el" href="structevent.html#a723489bec273335d13513cd1040c0216">event</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/globals.html b/doc/api-ref/html/globals.html
new file mode 100644
index 0000000..ebb2eae
--- /dev/null
+++ b/doc/api-ref/html/globals.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('globals.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:</div><ul>
+<li>_GNU_SOURCE
+: <a class="el" href="soundmanager_8c.html#a369266c24eacffb87046522897a570d5">soundmanager.c</a>
+</li>
+<li>afbBindingV1Register()
+: <a class="el" href="soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567">soundmanager.c</a>
+</li>
+<li>afbBindingV1ServiceInit()
+: <a class="el" href="soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d">soundmanager.c</a>
+</li>
+<li>AM_CMD_PATH
+: <a class="el" href="soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291">soundmanager.c</a>
+</li>
+<li>AM_NAME
+: <a class="el" href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461">soundmanager.c</a>
+</li>
+<li>AM_ROUTE_PATH
+: <a class="el" href="soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff">soundmanager.c</a>
+</li>
+<li>api_list
+: <a class="el" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">libsoundmanager.hpp</a>
+</li>
+<li>COMMAND_EVENT_NUM
+: <a class="el" href="soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e">soundmanager.c</a>
+</li>
+<li>DLOG
+: <a class="el" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">libsoundmanager.cpp</a>
+</li>
+<li>ELOG
+: <a class="el" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">libsoundmanager.cpp</a>
+</li>
+<li>event_list
+: <a class="el" href="libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0">libsoundmanager.hpp</a>
+</li>
+<li>main()
+: <a class="el" href="test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">test.cpp</a>
+</li>
+<li>MAX_LEN_STR
+: <a class="el" href="soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570">soundmanager.c</a>
+</li>
+<li>ROUTING_EVENT_NUM
+: <a class="el" href="soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f">soundmanager.c</a>
+</li>
+<li>sm
+: <a class="el" href="test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022">test.cpp</a>
+</li>
+<li>SOUND_MANAGER_NAME
+: <a class="el" href="soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0">soundmanager.c</a>
+</li>
+<li>SOUND_MANAGER_PATH
+: <a class="el" href="soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da">soundmanager.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/globals_defs.html b/doc/api-ref/html/globals_defs.html
new file mode 100644
index 0000000..e1d3a04
--- /dev/null
+++ b/doc/api-ref/html/globals_defs.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('globals_defs.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>_GNU_SOURCE
+: <a class="el" href="soundmanager_8c.html#a369266c24eacffb87046522897a570d5">soundmanager.c</a>
+</li>
+<li>AM_CMD_PATH
+: <a class="el" href="soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291">soundmanager.c</a>
+</li>
+<li>AM_NAME
+: <a class="el" href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461">soundmanager.c</a>
+</li>
+<li>AM_ROUTE_PATH
+: <a class="el" href="soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff">soundmanager.c</a>
+</li>
+<li>COMMAND_EVENT_NUM
+: <a class="el" href="soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e">soundmanager.c</a>
+</li>
+<li>DLOG
+: <a class="el" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">libsoundmanager.cpp</a>
+</li>
+<li>ELOG
+: <a class="el" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">libsoundmanager.cpp</a>
+</li>
+<li>MAX_LEN_STR
+: <a class="el" href="soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570">soundmanager.c</a>
+</li>
+<li>ROUTING_EVENT_NUM
+: <a class="el" href="soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f">soundmanager.c</a>
+</li>
+<li>SOUND_MANAGER_NAME
+: <a class="el" href="soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0">soundmanager.c</a>
+</li>
+<li>SOUND_MANAGER_PATH
+: <a class="el" href="soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da">soundmanager.c</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/globals_func.html b/doc/api-ref/html/globals_func.html
new file mode 100644
index 0000000..0c13d5f
--- /dev/null
+++ b/doc/api-ref/html/globals_func.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('globals_func.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>afbBindingV1Register()
+: <a class="el" href="soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567">soundmanager.c</a>
+</li>
+<li>afbBindingV1ServiceInit()
+: <a class="el" href="soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d">soundmanager.c</a>
+</li>
+<li>main()
+: <a class="el" href="test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">test.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/globals_vars.html b/doc/api-ref/html/globals_vars.html
new file mode 100644
index 0000000..a74e481
--- /dev/null
+++ b/doc/api-ref/html/globals_vars.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Globals</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('globals_vars.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>api_list
+: <a class="el" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">libsoundmanager.hpp</a>
+</li>
+<li>event_list
+: <a class="el" href="libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0">libsoundmanager.hpp</a>
+</li>
+<li>sm
+: <a class="el" href="test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022">test.cpp</a>
+</li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/index.html b/doc/api-ref/html/index.html
new file mode 100644
index 0000000..9319f4a
--- /dev/null
+++ b/doc/api-ref/html/index.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: Main Page</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('index.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">Sound Manager Documentation</div> </div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/jquery.js b/doc/api-ref/html/jquery.js
new file mode 100644
index 0000000..f5343ed
--- /dev/null
+++ b/doc/api-ref/html/jquery.js
@@ -0,0 +1,87 @@
+/*!
+ * jQuery JavaScript Library v1.7.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Mon Nov 21 21:11:03 2011 -0500
+ */
+(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav></:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="<div style='width:4px;'></div>";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});
+/*!
+ * Sizzle CSS Selector Engine
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+bS+"'/>";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="<p class='TEST'></p>";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="<div class='test e'></div><div class='test'></div>";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div<div>","</div>"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1></$2>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]==="<table>"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("<div>").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*!
+ * jQuery UI 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css("overflow")==="hidden"){return false}var e=(f&&f==="left")?"scrollLeft":"scrollTop",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!
+ * jQuery UI Widget 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!
+ * jQuery UI Mouse 1.8.18
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */
+(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!
+ * jQuery hashchange event - v1.3 - 7/21/2010
+ * http://benalman.com/projects/jquery-hashchange-plugin/
+ *
+ * Copyright (c) 2010 "Cowboy" Ben Alman
+ * Dual licensed under the MIT and GPL licenses.
+ * http://benalman.com/about/license/
+ */
+(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);/*!
+ PowerTip - v1.2.0 - 2013-04-03
+ http://stevenbenner.github.com/jquery-powertip/
+ Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));/*!
+ * jQuery UI Touch Punch 0.2.3
+ *
+ * Copyright 2011–2014, Dave Furfero
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ */
+(function(b){b.support.touch="ontouchend" in document;if(!b.support.touch){return}var d=b.ui.mouse.prototype,f=d._mouseInit,c=d._mouseDestroy,a;function e(h,i){if(h.originalEvent.touches.length>1){return}h.preventDefault();var j=h.originalEvent.changedTouches[0],g=document.createEvent("MouseEvents");g.initMouseEvent(i,true,true,window,1,j.screenX,j.screenY,j.clientX,j.clientY,false,false,false,false,0,null);h.target.dispatchEvent(g)}d._touchStart=function(h){var g=this;if(a||!g._mouseCapture(h.originalEvent.changedTouches[0])){return}a=true;g._touchMoved=false;e(h,"mouseover");e(h,"mousemove");e(h,"mousedown")};d._touchMove=function(g){if(!a){return}this._touchMoved=true;e(g,"mousemove")};d._touchEnd=function(g){if(!a){return}e(g,"mouseup");e(g,"mouseout");if(!this._touchMoved){e(g,"click")}a=false};d._mouseInit=function(){var g=this;g.element.bind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});f.call(g)};d._mouseDestroy=function(){var g=this;g.element.unbind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});c.call(g)}})(jQuery);/*!
+ * SmartMenus jQuery Plugin - v1.0.0 - January 27, 2016
+ * http://www.smartmenus.org/
+ *
+ * Copyright Vasil Dinkov, Vadikom Web Ltd.
+ * http://vadikom.com
+ *
+ * Licensed MIT
+ */
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof module==="object"&&typeof module.exports==="object"){module.exports=a(require("jquery"))}else{a(jQuery)}}}(function(a){var b=[],e=!!window.createPopup,f=false,d="ontouchstart" in window,h=false,g=window.requestAnimationFrame||function(l){return setTimeout(l,1000/60)},c=window.cancelAnimationFrame||function(l){clearTimeout(l)};function k(m){var n=".smartmenus_mouse";if(!h&&!m){var o=true,l=null;a(document).bind(i([["mousemove",function(s){var t={x:s.pageX,y:s.pageY,timeStamp:new Date().getTime()};if(l){var q=Math.abs(l.x-t.x),p=Math.abs(l.y-t.y);if((q>0||p>0)&&q<=2&&p<=2&&t.timeStamp-l.timeStamp<=300){f=true;if(o){var r=a(s.target).closest("a");if(r.is("a")){a.each(b,function(){if(a.contains(this.$root[0],r[0])){this.itemEnter({currentTarget:r[0]});return false}})}o=false}}}l=t}],[d?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut",function(p){if(j(p.originalEvent)){f=false}}]],n));h=true}else{if(h&&m){a(document).unbind(n);h=false}}}function j(l){return !/^(4|mouse)$/.test(l.pointerType)}function i(l,n){if(!n){n=""}var m={};a.each(l,function(o,p){m[p[0].split(" ").join(n+" ")+n]=p[1]});return m}a.SmartMenus=function(m,l){this.$root=a(m);this.opts=l;this.rootId="";this.accessIdPrefix="";this.$subArrow=null;this.activatedItems=[];this.visibleSubMenus=[];this.showTimeout=0;this.hideTimeout=0;this.scrollTimeout=0;this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.idInc=0;this.$firstLink=null;this.$firstSub=null;this.disabled=false;this.$disableOverlay=null;this.$touchScrollingSub=null;this.cssTransforms3d="perspective" in m.style||"webkitPerspective" in m.style;this.wasCollapsible=false;this.init()};a.extend(a.SmartMenus,{hideAll:function(){a.each(b,function(){this.menuHideAll()})},destroy:function(){while(b.length){b[0].destroy()}k(true)},prototype:{init:function(n){var l=this;if(!n){b.push(this);this.rootId=(new Date().getTime()+Math.random()+"").replace(/\D/g,"");this.accessIdPrefix="sm-"+this.rootId+"-";if(this.$root.hasClass("sm-rtl")){this.opts.rightToLeftSubMenus=true}var r=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).bind(i([["mouseover focusin",a.proxy(this.rootOver,this)],["mouseout focusout",a.proxy(this.rootOut,this)],["keydown",a.proxy(this.rootKeyDown,this)]],r)).delegate("a",i([["mouseenter",a.proxy(this.itemEnter,this)],["mouseleave",a.proxy(this.itemLeave,this)],["mousedown",a.proxy(this.itemDown,this)],["focus",a.proxy(this.itemFocus,this)],["blur",a.proxy(this.itemBlur,this)],["click",a.proxy(this.itemClick,this)]],r));r+=this.rootId;if(this.opts.hideOnClick){a(document).bind(i([["touchstart",a.proxy(this.docTouchStart,this)],["touchmove",a.proxy(this.docTouchMove,this)],["touchend",a.proxy(this.docTouchEnd,this)],["click",a.proxy(this.docClick,this)]],r))}a(window).bind(i([["resize orientationchange",a.proxy(this.winResize,this)]],r));if(this.opts.subIndicators){this.$subArrow=a("<span/>").addClass("sub-arrow");if(this.opts.subIndicatorsText){this.$subArrow.html(this.opts.subIndicatorsText)}}k()}this.$firstSub=this.$root.find("ul").each(function(){l.menuInit(a(this))}).eq(0);this.$firstLink=this.$root.find("a").eq(0);if(this.opts.markCurrentItem){var p=/(index|default)\.[^#\?\/]*/i,m=/#.*/,q=window.location.href.replace(p,""),o=q.replace(m,"");this.$root.find("a").each(function(){var s=this.href.replace(p,""),t=a(this);if(s==q||s==o){t.addClass("current");if(l.opts.markCurrentTree){t.parentsUntil("[data-smartmenus-id]","ul").each(function(){a(this).dataSM("parent-a").addClass("current")})}}})}this.wasCollapsible=this.isCollapsible()},destroy:function(m){if(!m){var n=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").unbind(n).undelegate(n);n+=this.rootId;a(document).unbind(n);a(window).unbind(n);if(this.opts.subIndicators){this.$subArrow=null}}this.menuHideAll();var l=this;this.$root.find("ul").each(function(){var o=a(this);if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}if(o.dataSM("shown-before")){if(l.opts.subMenusMinWidth||l.opts.subMenusMaxWidth){o.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap")}if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}o.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})}if((o.attr("id")||"").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("ie-shim").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded");this.$root.find("a.has-submenu").each(function(){var o=a(this);if(o.attr("id").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub");if(this.opts.subIndicators){this.$root.find("span.sub-arrow").remove()}if(this.opts.markCurrentItem){this.$root.find("a.current").removeClass("current")}if(!m){this.$root=null;this.$firstLink=null;this.$firstSub=null;if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}b.splice(a.inArray(this,b),1)}},disable:function(l){if(!this.disabled){this.menuHideAll();if(!l&&!this.opts.isPopup&&this.$root.is(":visible")){var m=this.$root.offset();this.$disableOverlay=a('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:m.top,left:m.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(true),opacity:0}).appendTo(document.body)}this.disabled=true}},docClick:function(l){if(this.$touchScrollingSub){this.$touchScrollingSub=null;return}if(this.visibleSubMenus.length&&!a.contains(this.$root[0],l.target)||a(l.target).is("a")){this.menuHideAll()}},docTouchEnd:function(m){if(!this.lastTouch){return}if(this.visibleSubMenus.length&&(this.lastTouch.x2===undefined||this.lastTouch.x1==this.lastTouch.x2)&&(this.lastTouch.y2===undefined||this.lastTouch.y1==this.lastTouch.y2)&&(!this.lastTouch.target||!a.contains(this.$root[0],this.lastTouch.target))){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},350)}this.lastTouch=null},docTouchMove:function(m){if(!this.lastTouch){return}var l=m.originalEvent.touches[0];this.lastTouch.x2=l.pageX;this.lastTouch.y2=l.pageY},docTouchStart:function(m){var l=m.originalEvent.touches[0];this.lastTouch={x1:l.pageX,y1:l.pageY,target:l.target}},enable:function(){if(this.disabled){if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}this.disabled=false}},getClosestMenu:function(m){var l=a(m).closest("ul");while(l.dataSM("in-mega")){l=l.parent().closest("ul")}return l[0]||null},getHeight:function(l){return this.getOffset(l,true)},getOffset:function(n,l){var m;if(n.css("display")=="none"){m={position:n[0].style.position,visibility:n[0].style.visibility};n.css({position:"absolute",visibility:"hidden"}).show()}var o=n[0].getBoundingClientRect&&n[0].getBoundingClientRect(),p=o&&(l?o.height||o.bottom-o.top:o.width||o.right-o.left);if(!p&&p!==0){p=l?n[0].offsetHeight:n[0].offsetWidth}if(m){n.hide().css(m)}return p},getStartZIndex:function(l){var m=parseInt(this[l?"$root":"$firstSub"].css("z-index"));if(!l&&isNaN(m)){m=parseInt(this.$root.css("z-index"))}return !isNaN(m)?m:1},getTouchPoint:function(l){return l.touches&&l.touches[0]||l.changedTouches&&l.changedTouches[0]||l},getViewport:function(l){var m=l?"Height":"Width",o=document.documentElement["client"+m],n=window["inner"+m];if(n){o=Math.min(o,n)}return o},getViewportHeight:function(){return this.getViewport(true)},getViewportWidth:function(){return this.getViewport()},getWidth:function(l){return this.getOffset(l)},handleEvents:function(){return !this.disabled&&this.isCSSOn()},handleItemEvents:function(l){return this.handleEvents()&&!this.isLinkInMegaMenu(l)},isCollapsible:function(){return this.$firstSub.css("position")=="static"},isCSSOn:function(){return this.$firstLink.css("display")=="block"},isFixed:function(){var l=this.$root.css("position")=="fixed";if(!l){this.$root.parentsUntil("body").each(function(){if(a(this).css("position")=="fixed"){l=true;return false}})}return l},isLinkInMegaMenu:function(l){return a(this.getClosestMenu(l[0])).hasClass("mega-menu")},isTouchMode:function(){return !f||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(p,l){var n=p.closest("ul"),q=n.dataSM("level");if(q>1&&(!this.activatedItems[q-2]||this.activatedItems[q-2][0]!=n.dataSM("parent-a")[0])){var m=this;a(n.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(n).each(function(){m.itemActivate(a(this).dataSM("parent-a"))})}if(!this.isCollapsible()||l){this.menuHideSubMenus(!this.activatedItems[q-1]||this.activatedItems[q-1][0]!=p[0]?q-1:q)}this.activatedItems[q-1]=p;if(this.$root.triggerHandler("activate.smapi",p[0])===false){return}var o=p.dataSM("sub");if(o&&(this.isTouchMode()||(!this.opts.showOnClick||this.clickActivated))){this.menuShow(o)}},itemBlur:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}this.$root.triggerHandler("blur.smapi",l[0])},itemClick:function(o){var n=a(o.currentTarget);if(!this.handleItemEvents(n)){return}if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==n.closest("ul")[0]){this.$touchScrollingSub=null;o.stopPropagation();return false}if(this.$root.triggerHandler("click.smapi",n[0])===false){return false}var p=a(o.target).is("span.sub-arrow"),m=n.dataSM("sub"),l=m?m.dataSM("level")==2:false;if(m&&!m.is(":visible")){if(this.opts.showOnClick&&l){this.clickActivated=true}this.itemActivate(n);if(m.is(":visible")){this.focusActivated=true;return false}}else{if(this.isCollapsible()&&p){this.itemActivate(n);this.menuHide(m);return false}}if(this.opts.showOnClick&&l||n.hasClass("disabled")||this.$root.triggerHandler("select.smapi",n[0])===false){return false}},itemDown:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}l.dataSM("mousedown",true)},itemEnter:function(n){var m=a(n.currentTarget);if(!this.handleItemEvents(m)){return}if(!this.isTouchMode()){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var l=this;this.showTimeout=setTimeout(function(){l.itemActivate(m)},this.opts.showOnClick&&m.closest("ul").dataSM("level")==1?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",m[0])},itemFocus:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(this.focusActivated&&(!this.isTouchMode()||!l.dataSM("mousedown"))&&(!this.activatedItems.length||this.activatedItems[this.activatedItems.length-1][0]!=l[0])){this.itemActivate(l,true)}this.$root.triggerHandler("focus.smapi",l[0])},itemLeave:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(!this.isTouchMode()){l[0].blur();if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}}l.removeDataSM("mousedown");this.$root.triggerHandler("mouseleave.smapi",l[0])},menuHide:function(m){if(this.$root.triggerHandler("beforehide.smapi",m[0])===false){return}m.stop(true,true);if(m.css("display")!="none"){var l=function(){m.css("z-index","")};if(this.isCollapsible()){if(this.opts.collapsibleHideFunction){this.opts.collapsibleHideFunction.call(this,m,l)}else{m.hide(this.opts.collapsibleHideDuration,l)}}else{if(this.opts.hideFunction){this.opts.hideFunction.call(this,m,l)}else{m.hide(this.opts.hideDuration,l)}}if(m.dataSM("ie-shim")){m.dataSM("ie-shim").remove().css({"-webkit-transform":"",transform:""})}if(m.dataSM("scroll")){this.menuScrollStop(m);m.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).unbind(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()}m.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false");m.attr({"aria-expanded":"false","aria-hidden":"true"});var n=m.dataSM("level");this.activatedItems.splice(n-1,1);this.visibleSubMenus.splice(a.inArray(m,this.visibleSubMenus),1);this.$root.triggerHandler("hide.smapi",m[0])}},menuHideAll:function(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var m=this.opts.isPopup?1:0;for(var l=this.visibleSubMenus.length-1;l>=m;l--){this.menuHide(this.visibleSubMenus[l])}if(this.opts.isPopup){this.$root.stop(true,true);if(this.$root.is(":visible")){if(this.opts.hideFunction){this.opts.hideFunction.call(this,this.$root)}else{this.$root.hide(this.opts.hideDuration)}if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").remove()}}}this.activatedItems=[];this.visibleSubMenus=[];this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(n){for(var l=this.activatedItems.length-1;l>=n;l--){var m=this.activatedItems[l].dataSM("sub");if(m){this.menuHide(m)}}},menuIframeShim:function(l){if(e&&this.opts.overlapControlsInIE&&!l.dataSM("ie-shim")){l.dataSM("ie-shim",a("<iframe/>").attr({src:"javascript:0",tabindex:-9}).css({position:"absolute",top:"auto",left:"0",opacity:0,border:"0"}))}},menuInit:function(l){if(!l.dataSM("in-mega")){if(l.hasClass("mega-menu")){l.find("ul").dataSM("in-mega",true)}var q=2,m=l[0];while((m=m.parentNode.parentNode)!=this.$root[0]){q++}var n=l.prevAll("a").eq(-1);if(!n.length){n=l.prevAll().find("a").eq(-1)}n.addClass("has-submenu").dataSM("sub",l);l.dataSM("parent-a",n).dataSM("level",q).parent().dataSM("sub",l);var o=n.attr("id")||this.accessIdPrefix+(++this.idInc),p=l.attr("id")||this.accessIdPrefix+(++this.idInc);n.attr({id:o,"aria-haspopup":"true","aria-controls":p,"aria-expanded":"false"});l.attr({id:p,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"});if(this.opts.subIndicators){n[this.opts.subIndicatorsPos](this.$subArrow.clone())}}},menuPosition:function(K){var r=K.dataSM("parent-a"),D=r.closest("li"),E=D.parent(),l=K.dataSM("level"),t=this.getWidth(K),J=this.getHeight(K),u=r.offset(),o=u.left,m=u.top,q=this.getWidth(r),F=this.getHeight(r),H=a(window),v=H.scrollLeft(),s=H.scrollTop(),z=this.getViewportWidth(),L=this.getViewportHeight(),w=E.parent().is("[data-sm-horizontal-sub]")||l==2&&!E.hasClass("sm-vertical"),B=this.opts.rightToLeftSubMenus&&!D.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&D.is("[data-sm-reverse]"),p=l==2?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,n=l==2?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY,C,A;if(w){C=B?q-t-p:p;A=this.opts.bottomToTopSubMenus?-J-n:F+n}else{C=B?p-t:q-p;A=this.opts.bottomToTopSubMenus?F-n-J:n}if(this.opts.keepInViewport){var N=o+C,M=m+A;if(B&&N<v){C=w?v-N+C:q-p}else{if(!B&&N+t>v+z){C=w?v+z-t-N+C:p-t}}if(!w){if(J<L&&M+J>s+L){A+=s+L-J-M}else{if(J>=L||M<s){A+=s-M}}}if(w&&(M+J>s+L+0.49||M<s)||!w&&J>L+0.49){var G=this;if(!K.dataSM("scroll-arrows")){K.dataSM("scroll-arrows",a([a('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],a('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).bind({mouseenter:function(){K.dataSM("scroll").up=a(this).hasClass("scroll-up");G.menuScroll(K)},mouseleave:function(x){G.menuScrollStop(K);G.menuScrollOut(K,x)},"mousewheel DOMMouseScroll":function(x){x.preventDefault()}}).insertAfter(K))}var I=".smartmenus_scroll";K.dataSM("scroll",{y:this.cssTransforms3d?0:A-F,step:1,itemH:F,subH:J,arrowDownH:this.getHeight(K.dataSM("scroll-arrows").eq(1))}).bind(i([["mouseover",function(x){G.menuScrollOver(K,x)}],["mouseout",function(x){G.menuScrollOut(K,x)}],["mousewheel DOMMouseScroll",function(x){G.menuScrollMousewheel(K,x)}]],I)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:C+(parseInt(K.css("border-left-width"))||0),width:t-(parseInt(K.css("border-left-width"))||0)-(parseInt(K.css("border-right-width"))||0),zIndex:K.css("z-index")}).eq(w&&this.opts.bottomToTopSubMenus?0:1).show();if(this.isFixed()){K.css({"touch-action":"none","-ms-touch-action":"none"}).bind(i([[d?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp",function(x){G.menuScrollTouch(K,x)}]],I))}}}K.css({top:"auto",left:"0",marginLeft:C,marginTop:A-F});this.menuIframeShim(K);if(K.dataSM("ie-shim")){K.dataSM("ie-shim").css({zIndex:K.css("z-index"),width:t,height:J,marginLeft:C,marginTop:A-F})}},menuScroll:function(r,m,n){var p=r.dataSM("scroll"),q=r.dataSM("scroll-arrows"),o=p.up?p.upEnd:p.downEnd,s;if(!m&&p.momentum){p.momentum*=0.92;s=p.momentum;if(s<0.5){this.menuScrollStop(r);return}}else{s=n||(m||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(p.step))}var l=r.dataSM("level");if(this.activatedItems[l-1]&&this.activatedItems[l-1].dataSM("sub")&&this.activatedItems[l-1].dataSM("sub").is(":visible")){this.menuHideSubMenus(l-1)}p.y=p.up&&o<=p.y||!p.up&&o>=p.y?p.y:(Math.abs(o-p.y)>s?p.y+(p.up?s:-s):o);r.add(r.dataSM("ie-shim")).css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+p.y+"px, 0)",transform:"translate3d(0, "+p.y+"px, 0)"}:{marginTop:p.y});if(f&&(p.up&&p.y>p.downEnd||!p.up&&p.y<p.upEnd)){q.eq(p.up?1:0).show()}if(p.y==o){if(f){q.eq(p.up?0:1).hide()}this.menuScrollStop(r)}else{if(!m){if(this.opts.scrollAccelerate&&p.step<this.opts.scrollStep){p.step+=0.2}var t=this;this.scrollTimeout=g(function(){t.menuScroll(r)})}}},menuScrollMousewheel:function(m,n){if(this.getClosestMenu(n.target)==m[0]){n=n.originalEvent;var l=(n.wheelDelta||-n.detail)>0;if(m.dataSM("scroll-arrows").eq(l?0:1).is(":visible")){m.dataSM("scroll").up=l;this.menuScroll(m,true)}}n.preventDefault()},menuScrollOut:function(l,m){if(f){if(!/^scroll-(up|down)/.test((m.relatedTarget||"").className)&&(l[0]!=m.relatedTarget&&!a.contains(l[0],m.relatedTarget)||this.getClosestMenu(m.relatedTarget)!=l[0])){l.dataSM("scroll-arrows").css("visibility","hidden")}}},menuScrollOver:function(n,o){if(f){if(!/^scroll-(up|down)/.test(o.target.className)&&this.getClosestMenu(o.target)==n[0]){this.menuScrollRefreshData(n);var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;n.dataSM("scroll-arrows").eq(0).css("margin-top",l).end().eq(1).css("margin-top",l+this.getViewportHeight()-m.arrowDownH).end().css("visibility","visible")}}},menuScrollRefreshData:function(n){var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;if(this.cssTransforms3d){l=-(parseFloat(n.css("margin-top"))-l)}a.extend(m,{upEnd:l,downEnd:l+this.getViewportHeight()-m.subH})},menuScrollStop:function(l){if(this.scrollTimeout){c(this.scrollTimeout);this.scrollTimeout=0;l.dataSM("scroll").step=1;return true}},menuScrollTouch:function(p,q){q=q.originalEvent;if(j(q)){var m=this.getTouchPoint(q);if(this.getClosestMenu(m.target)==p[0]){var o=p.dataSM("scroll");if(/(start|down)$/i.test(q.type)){if(this.menuScrollStop(p)){q.preventDefault();this.$touchScrollingSub=p}else{this.$touchScrollingSub=null}this.menuScrollRefreshData(p);a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}else{if(/move$/i.test(q.type)){var n=o.touchY!==undefined?o.touchY:o.touchStartY;if(n!==undefined&&n!=m.pageY){this.$touchScrollingSub=p;var l=n<m.pageY;if(o.up!==undefined&&o.up!=l){a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}a.extend(o,{up:l,touchY:m.pageY});this.menuScroll(p,true,Math.abs(m.pageY-n))}q.preventDefault()}else{if(o.touchY!==undefined){if(o.momentum=Math.pow(Math.abs(m.pageY-o.touchStartY)/(q.timeStamp-o.touchStartTime),2)*15){this.menuScrollStop(p);this.menuScroll(p);q.preventDefault()}delete o.touchY}}}}}},menuShow:function(n){if(!n.dataSM("beforefirstshowfired")){n.dataSM("beforefirstshowfired",true);if(this.$root.triggerHandler("beforefirstshow.smapi",n[0])===false){return}}if(this.$root.triggerHandler("beforeshow.smapi",n[0])===false){return}n.dataSM("shown-before",true).stop(true,true);if(!n.is(":visible")){var m=n.dataSM("parent-a");if(this.opts.keepHighlighted||this.isCollapsible()){m.addClass("highlighted")}if(this.isCollapsible()){n.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""})}else{n.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1);if(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth){n.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap");if(this.opts.subMenusMinWidth){n.css("min-width",this.opts.subMenusMinWidth)}if(this.opts.subMenusMaxWidth){var o=this.getWidth(n);n.css("max-width",this.opts.subMenusMaxWidth);if(o>this.getWidth(n)){n.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}}}this.menuPosition(n);if(n.dataSM("ie-shim")){n.dataSM("ie-shim").insertBefore(n)}}var l=function(){n.css("overflow","")};if(this.isCollapsible()){if(this.opts.collapsibleShowFunction){this.opts.collapsibleShowFunction.call(this,n,l)}else{n.show(this.opts.collapsibleShowDuration,l)}}else{if(this.opts.showFunction){this.opts.showFunction.call(this,n,l)}else{n.show(this.opts.showDuration,l)}}m.attr("aria-expanded","true");n.attr({"aria-expanded":"true","aria-hidden":"false"});this.visibleSubMenus.push(n);this.$root.triggerHandler("show.smapi",n[0])}},popupHide:function(l){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var m=this;this.hideTimeout=setTimeout(function(){m.menuHideAll()},l?1:this.opts.hideTimeout)},popupShow:function(o,n){if(!this.opts.isPopup){alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.');return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}this.$root.dataSM("shown-before",true).stop(true,true);if(!this.$root.is(":visible")){this.$root.css({left:o,top:n});this.menuIframeShim(this.$root);if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").css({zIndex:this.$root.css("z-index"),width:this.getWidth(this.$root),height:this.getHeight(this.$root),left:o,top:n}).insertBefore(this.$root)}var m=this,l=function(){m.$root.css("overflow","")};if(this.opts.showFunction){this.opts.showFunction.call(this,this.$root,l)}else{this.$root.show(this.opts.showDuration,l)}this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(true);this.init(true)},rootKeyDown:function(o){if(!this.handleEvents()){return}switch(o.keyCode){case 27:var m=this.activatedItems[0];if(m){this.menuHideAll();m[0].focus();var n=m.dataSM("sub");if(n){this.menuHide(n)}}break;case 32:var l=a(o.target);if(l.is("a")&&this.handleItemEvents(l)){var n=l.dataSM("sub");if(n&&!n.is(":visible")){this.itemClick({currentTarget:o.target});o.preventDefault()}}break}},rootOut:function(m){if(!this.handleEvents()||this.isTouchMode()||m.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}if(!this.opts.showOnClick||!this.opts.hideOnClick){var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(l){if(!this.handleEvents()||this.isTouchMode()||l.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}},winResize:function(m){if(!this.handleEvents()){if(this.$disableOverlay){var n=this.$root.offset();this.$disableOverlay.css({top:n.top,left:n.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}return}if(!("onorientationchange" in window)||m.type=="orientationchange"){var l=this.isCollapsible();if(!(this.wasCollapsible&&l)){if(this.activatedItems.length){this.activatedItems[this.activatedItems.length-1][0].blur()}this.menuHideAll()}this.wasCollapsible=l}}}});a.fn.dataSM=function(l,m){if(m){return this.data(l+"_smartmenus",m)}return this.data(l+"_smartmenus")};a.fn.removeDataSM=function(l){return this.removeData(l+"_smartmenus")};a.fn.smartmenus=function(m){if(typeof m=="string"){var l=arguments,o=m;Array.prototype.shift.call(l);return this.each(function(){var p=a(this).data("smartmenus");if(p&&p[o]){p[o].apply(p,l)}})}var n=a.extend({},a.fn.smartmenus.defaults,m);return this.each(function(){new a.SmartMenus(this,n)})};a.fn.smartmenus.defaults={isPopup:false,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:true,subIndicatorsPos:"prepend",subIndicatorsText:"+",scrollStep:30,scrollAccelerate:true,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(m,l){m.fadeOut(200,l)},collapsibleShowDuration:0,collapsibleShowFunction:function(m,l){m.slideDown(200,l)},collapsibleHideDuration:0,collapsibleHideFunction:function(m,l){m.slideUp(200,l)},showOnClick:false,hideOnClick:true,noMouseOver:false,keepInViewport:true,keepHighlighted:true,markCurrentItem:false,markCurrentTree:true,rightToLeftSubMenus:false,bottomToTopSubMenus:false,overlapControlsInIE:true};return a})); \ No newline at end of file
diff --git a/doc/api-ref/html/libsoundmanager_8cpp.html b/doc/api-ref/html/libsoundmanager_8cpp.html
new file mode 100644
index 0000000..06842ea
--- /dev/null
+++ b/doc/api-ref/html/libsoundmanager_8cpp.html
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/libsoundmanager/libsoundmanager.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('libsoundmanager_8cpp.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> </div>
+ <div class="headertitle">
+<div class="title">libsoundmanager.cpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdarg.h&gt;</code><br />
+<code>#include &lt;sys/socket.h&gt;</code><br />
+<code>#include &lt;iostream&gt;</code><br />
+<code>#include &lt;algorithm&gt;</code><br />
+<code>#include &lt;thread&gt;</code><br />
+<code>#include &lt;errno.h&gt;</code><br />
+<code>#include &lt;<a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager/libsoundmanager.hpp</a>&gt;</code><br />
+</div>
+<p><a href="libsoundmanager_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a797aa3053bd6a29819d44f8fad8a5eca"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(args, ...)&#160;&#160;&#160;_ELOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)</td></tr>
+<tr class="separator:a797aa3053bd6a29819d44f8fad8a5eca"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e42b2f5af2174dd24f958351becf63d"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">DLOG</a>(args, ...)&#160;&#160;&#160;_DLOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)</td></tr>
+<tr class="separator:a4e42b2f5af2174dd24f958351becf63d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a4e42b2f5af2174dd24f958351becf63d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e42b2f5af2174dd24f958351becf63d">&#9670;&nbsp;</a></span>DLOG</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define DLOG</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">args, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;_DLOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00026">26</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+<a id="a797aa3053bd6a29819d44f8fad8a5eca"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a797aa3053bd6a29819d44f8fad8a5eca">&#9670;&nbsp;</a></span>ELOG</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ELOG</td>
+ <td>(</td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname">args, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">&#160;</td>
+ <td class="paramname"><em>...</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td>&#160;&#160;&#160;_ELOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8cpp_source.html#l00025">25</a> of file <a class="el" href="libsoundmanager_8cpp_source.html">libsoundmanager.cpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html">libsoundmanager</a></li><li class="navelem"><a class="el" href="libsoundmanager_8cpp.html">libsoundmanager.cpp</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/libsoundmanager_8cpp.js b/doc/api-ref/html/libsoundmanager_8cpp.js
new file mode 100644
index 0000000..b599e84
--- /dev/null
+++ b/doc/api-ref/html/libsoundmanager_8cpp.js
@@ -0,0 +1,5 @@
+var libsoundmanager_8cpp =
+[
+ [ "DLOG", "libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d", null ],
+ [ "ELOG", "libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca", null ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/libsoundmanager_8cpp_source.html b/doc/api-ref/html/libsoundmanager_8cpp_source.html
new file mode 100644
index 0000000..43e6d5d
--- /dev/null
+++ b/doc/api-ref/html/libsoundmanager_8cpp_source.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/libsoundmanager/libsoundmanager.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('libsoundmanager_8cpp_source.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">libsoundmanager.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="libsoundmanager_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (c) 2017 TOYOTA MOTOR CORPORATION</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;stdarg.h&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;sys/socket.h&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;thread&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;errno.h&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="libsoundmanager_8hpp.html">libsoundmanager/libsoundmanager.hpp</a>&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca"> 25</a></span>&#160;<span class="preprocessor">#define ELOG(args,...) _ELOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)</span></div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d"> 26</a></span>&#160;<span class="preprocessor">#define DLOG(args,...) _DLOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _DLOG(<span class="keyword">const</span> <span class="keywordtype">char</span>* func, <span class="keyword">const</span> <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* log, ...);</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _ELOG(<span class="keyword">const</span> <span class="keywordtype">char</span>* func, <span class="keyword">const</span> <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* log, ...);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> has_verb(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; verb);</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> API[] = <span class="stringliteral">&quot;soundmanager&quot;</span>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _on_hangup_static(<span class="keywordtype">void</span> *closure, <span class="keyword">struct</span> afb_wsj1 *wsj)</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>*<span class="keyword">&gt;</span>(closure)-&gt;on_hangup(NULL,wsj);</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;}</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _on_call_static(<span class="keywordtype">void</span> *closure, <span class="keyword">const</span> <span class="keywordtype">char</span> *api, <span class="keyword">const</span> <span class="keywordtype">char</span> *verb, <span class="keyword">struct</span> afb_wsj1_msg *msg)</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">/* LibSoundmanager is not called from other process */</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;}</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _on_event_static(<span class="keywordtype">void</span>* closure, <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="structevent.html">event</a>, <span class="keyword">struct</span> afb_wsj1_msg *msg)</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;{</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>*<span class="keyword">&gt;</span>(closure)-&gt;on_event(NULL,event,msg);</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;}</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _on_reply_static(<span class="keywordtype">void</span> *closure, <span class="keyword">struct</span> afb_wsj1_msg *msg)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;{</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>*<span class="keyword">&gt;</span>(closure)-&gt;on_reply(NULL,msg); </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;}</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;LibSoundmanager::LibSoundmanager(<span class="keyword">const</span> <span class="keywordtype">int</span> port, <span class="keyword">const</span> <span class="keywordtype">string</span>&amp; token)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;{</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordtype">int</span> ret;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span>(port &gt; 0 &amp;&amp; token.size() &gt; 0)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; mport = port;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; mtoken = token;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;port and token should be &gt; 0, Initial port and token uses.&quot;</span>);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; ret = initialize_websocket();</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span>(ret != 0 )</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Failed to initialize websocket&quot;</span>);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">DLOG</a>(<span class="stringliteral">&quot;Initialized&quot;</span>);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;}</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934"> 93</a></span>&#160;<a class="code" href="class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934">LibSoundmanager::~LibSoundmanager</a>()</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;{</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">if</span>(mploop)</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; sd_event_unref(mploop);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">if</span>(sp_websock != NULL)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; free(sp_websock);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;}</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74"> 119</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">LibSoundmanager::register_callback</a>(</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordtype">void</span> (*event_cb)(<span class="keyword">const</span> std::string&amp; event, <span class="keyword">struct</span> json_object* event_contents), </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordtype">void</span> (*reply_cb)(<span class="keyword">struct</span> json_object* reply_contents))</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;{</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; onEvent = event_cb;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; onReply = reply_cb;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;}</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="keywordtype">int</span> LibSoundmanager::initialize_websocket()</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;{</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; mploop = NULL;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; onEvent = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; onReply = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordtype">int</span> ret = sd_event_default(&amp;mploop);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span>(ret &lt; 0)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Failed to create event loop&quot;</span>);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">goto</span> END;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">/* Initialize interface from websocket */</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; minterface.on_hangup = _on_hangup_static;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; minterface.on_call = _on_call_static; <span class="comment">/* Is this necessary? */</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; minterface.on_event = _on_event_static;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; muri += <span class="stringliteral">&quot;ws://localhost:&quot;</span> + to_string(mport) + <span class="stringliteral">&quot;/api?token=&quot;</span> + mtoken; <span class="comment">/*To be modified*/</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; sp_websock = afb_ws_client_connect_wsj1(mploop, muri.c_str(), &amp;minterface, <span class="keyword">this</span>);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">if</span>(sp_websock == NULL)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Failed to create websocket connection&quot;</span>);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">goto</span> END;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="comment">/* creates the evsrc */</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="comment">//ret = sd_event_add_io(mploop,&amp;mevent_src, sp_websock-&gt;fd, EPOLLIN, event_callback, NULL);</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; </div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;END:</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span>(mploop)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; sd_event_unref(mploop);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;}</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> *event_loop_run(<span class="keywordtype">void</span> *args)</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;{</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keyword">struct </span>sd_event* loop = (<span class="keyword">struct </span>sd_event*)(args);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">DLOG</a>(<span class="stringliteral">&quot;start eventloop&quot;</span>);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">for</span>(;;)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; sd_event_run(loop, 30000000);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;}</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729"> 182</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729">LibSoundmanager::run_eventloop</a>()</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;{</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">if</span>(mploop &amp;&amp; sp_websock)</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; pthread_t thread_id;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordtype">int</span> ret = pthread_create(&amp;thread_id, NULL, event_loop_run, mploop);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">if</span>(ret != 0)</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Cannot run eventloop due to error:%d&quot;</span>, errno);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">return</span> thread_id;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Connecting is not established yet&quot;</span>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;}</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773"> 217</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">LibSoundmanager::call</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; verb, <span class="keyword">struct</span> json_object* arg)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;{</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">int</span> ret;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">if</span>(!sp_websock)</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">if</span> (!has_verb(verb))</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;verb doesn&#39;t exit&quot;</span>);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; ret = afb_wsj1_call_j(sp_websock, API, verb.c_str(), arg, _on_reply_static, <span class="keyword">this</span>);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">if</span> (ret &lt; 0) {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Failed to call verb:%s&quot;</span>,verb.c_str());</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;}</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956"> 236</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956">LibSoundmanager::call_sync</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; verb, <span class="keyword">struct</span> json_object* arg, <span class="keyword">struct</span> json_object* ret)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;{</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">/* I haven&#39;t implemented yet */</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;}</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e"> 255</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e">LibSoundmanager::subscribe</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; event_name)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;{</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">if</span>(!sp_websock)</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; {</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">struct </span>json_object* j_obj = json_object_new_object();</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; json_object_object_add(j_obj, <span class="stringliteral">&quot;event&quot;</span>, json_object_new_string(event_name.c_str()));</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordtype">int</span> ret = afb_wsj1_call_j(sp_websock, API, <span class="stringliteral">&quot;subscribe&quot;</span>, j_obj, _on_reply_static, <span class="keyword">this</span>);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">if</span> (ret &lt; 0) {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Failed to call verb:%s&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;}</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06"> 284</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06">LibSoundmanager::unsubscribe</a>(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; event_name)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;{</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">if</span>(!sp_websock)</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; }</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keyword">struct </span>json_object* j_obj = json_object_new_object();</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; json_object_object_add(j_obj, <span class="stringliteral">&quot;event&quot;</span>, json_object_new_string(event_name.c_str()));</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordtype">int</span> ret = afb_wsj1_call_j(sp_websock, API, <span class="stringliteral">&quot;unsubscribe&quot;</span>, j_obj, _on_reply_static, <span class="keyword">this</span>);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span> (ret &lt; 0) {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a>(<span class="stringliteral">&quot;Failed to call verb:%s&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;}</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;am_Error_e LibSoundmanager::connect(<span class="keyword">const</span> am_sourceID_t sourceID, <span class="keyword">const</span> am_sinkID_t sinkID, am_mainConnectionID_t&amp; mainConnectionID)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;{</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">/*int ret;</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;<span class="comment"> char *key;</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;<span class="comment"> rc = asprintf(&amp;key, &quot;%d:%s/%s&quot;, ++num, api, &quot;connect&quot;); </span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;<span class="comment"> ret = afb_wsj1_call_s(wsj1, api, verb, object, on_reply, key);</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="comment"> if(ret &lt; 0)</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;<span class="comment"> {</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="comment"> fprintf(stderr, &quot;calling %s/%s(%s) failed: %m\n&quot;, api, verb, object);</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="comment"> </span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="comment"> }*/</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="comment">/* open the json scripts */</span></div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="comment">// get mainconnedction ID */</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="comment">//mainConnectionID = xx; </span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">return</span> E_OK; </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;}</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160;am_Error_e LibSoundmanager::disconnect(<span class="keyword">const</span> am_mainConnectionID_t mainConnectionID)</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;{</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">return</span> E_OK;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;}</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;<span class="comment">/*const struct afb_wsj1* LibSoundmanager::get_websocket_handler()</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;<span class="comment">{</span></div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;<span class="comment"> if(sp_websock)</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;<span class="comment"> {</span></div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="comment"> return sp_websock;</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;<span class="comment"> return nullptr;</span></div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;<span class="comment">}</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;<span class="comment">const struct sd_event* LibSoundmanager::get_sd_event()</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160;<span class="comment">{</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;<span class="comment"> if(mploop)</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;<span class="comment"> {</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;<span class="comment"> return mploop;</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;<span class="comment"> }</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160;<span class="comment"> return nullptr;</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="comment">}*/</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;<span class="comment">/************* Callback Function *************/</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6"> 342</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6">LibSoundmanager::on_hangup</a>(<span class="keywordtype">void</span> *closure, <span class="keyword">struct</span> afb_wsj1 *wsj)</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;{</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">DLOG</a>(<span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;}</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0"> 347</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0">LibSoundmanager::on_call</a>(<span class="keywordtype">void</span> *closure, <span class="keyword">const</span> <span class="keywordtype">char</span> *api, <span class="keyword">const</span> <span class="keywordtype">char</span> *verb, <span class="keyword">struct</span> afb_wsj1_msg *msg)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;{</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;}</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;<span class="comment">* event is like &quot;soundmanager/newMainConnection&quot;</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="comment">* msg is like {&quot;event&quot;:&quot;soundmanager\/newMainConnection&quot;,&quot;data&quot;:{&quot;mainConnectionID&quot;:3,&quot;sourceID&quot;:101,&quot;sinkID&quot;:100,&quot;delay&quot;:0,&quot;connectionState&quot;:4},&quot;jtype&quot;:&quot;afb-event&quot;})}</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;<span class="comment">* ^key^ ^^^^^^^^^^^^ value ^^^^^^^^^^^^</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;<span class="comment">* so you can get </span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;<span class="comment"> event name : struct json_object obj = json_object_object_get(msg,&quot;event&quot;)</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="comment">*/</span> </div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e"> 358</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e">LibSoundmanager::on_event</a>(<span class="keywordtype">void</span> *closure, <span class="keyword">const</span> <span class="keywordtype">char</span> *event, <span class="keyword">struct</span> afb_wsj1_msg *msg)</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;{</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;ON-EVENT:&quot;</span> &lt;&lt; <span class="keyword">event</span> &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; afb_wsj1_msg_object_s(msg) &lt;&lt; <span class="stringliteral">&quot;)&quot;</span> &lt;&lt; endl; </div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">if</span>(onEvent != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keyword">const</span> <span class="keywordtype">string</span> ev(event);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keyword">struct </span>json_object* ev_contents = afb_wsj1_msg_object_j(msg);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; onEvent(ev, ev_contents);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;}</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51"> 369</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51">LibSoundmanager::on_reply</a>(<span class="keywordtype">void</span> *closure, <span class="keyword">struct</span> afb_wsj1_msg *msg)</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;ON-REPLY:&quot;</span> &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; afb_wsj1_msg_object_s(msg) &lt;&lt; <span class="stringliteral">&quot;)&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordflow">if</span>(onReply != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; {</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keyword">struct </span>json_object* reply = afb_wsj1_msg_object_j(msg);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; onReply(reply);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;}</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="comment">/* Internal Function in libsoundmanager */</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _ELOG(<span class="keyword">const</span> <span class="keywordtype">char</span>* func, <span class="keyword">const</span> <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* log, ...)</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160;{</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordtype">char</span> *message;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; va_list args;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; va_start(args, log);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (log == NULL || vasprintf(&amp;message, log, args) &lt; 0)</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; message = NULL;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;[ERROR]&quot;</span> &lt;&lt; func &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; line &lt;&lt; <span class="stringliteral">&quot;):&quot;</span> &lt;&lt; message &lt;&lt; endl; </div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; va_end(args);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; free(message);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;}</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> _DLOG(<span class="keyword">const</span> <span class="keywordtype">char</span>* func, <span class="keyword">const</span> <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* log, ...)</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160;{</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordtype">char</span> *message;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; va_list args;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; va_start(args, log);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">if</span> (log == NULL || vasprintf(&amp;message, log, args) &lt; 0)</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; message = NULL;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;[DEBUG]&quot;</span> &lt;&lt; func &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; line &lt;&lt; <span class="stringliteral">&quot;):&quot;</span> &lt;&lt; message &lt;&lt; endl; </div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; va_end(args);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; free(message);</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;}</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;<span class="keyword">static</span> <span class="keywordtype">bool</span> has_verb(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; verb)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;{</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">DLOG</a>(<span class="stringliteral">&quot;verb is %s&quot;</span>, verb.c_str());</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">if</span>(find(<a class="code" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a>.begin(), <a class="code" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a>.end(), verb) != <a class="code" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a>.end())</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;}</div><div class="ttc" id="libsoundmanager_8hpp_html_a1f6a1c6cdbe66b174179ef6395f2981f"><div class="ttname"><a href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; api_list</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8hpp_source.html#l00034">libsoundmanager.hpp:34</a></div></div>
+<div class="ttc" id="structevent_html"><div class="ttname"><a href="structevent.html">event</a></div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00049">soundmanager.c:49</a></div></div>
+<div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_ae5b83ce661b1d785de2518ca10113956"><div class="ttname"><a href="class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956">LibSoundmanager::call_sync</a></div><div class="ttdeci">int call_sync(const std::string &amp;verb, struct json_object *arg, struct json_object *ret)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00236">libsoundmanager.cpp:236</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a21060844aa7efad6473b6104546afb06"><div class="ttname"><a href="class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06">LibSoundmanager::unsubscribe</a></div><div class="ttdeci">int unsubscribe(const std::string &amp;event_name)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00284">libsoundmanager.cpp:284</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a1fe952a4dabbab6126cc23e36c79c773"><div class="ttname"><a href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">LibSoundmanager::call</a></div><div class="ttdeci">int call(const std::string &amp;verb, struct json_object *arg)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00217">libsoundmanager.cpp:217</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a560edf9ae3b1e367ad4cbb31c7021d74"><div class="ttname"><a href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">LibSoundmanager::register_callback</a></div><div class="ttdeci">void register_callback(void(*event_cb)(const std::string &amp;event, struct json_object *event_contents), void(*reply_cb)(struct json_object *reply_contents))</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00119">libsoundmanager.cpp:119</a></div></div>
+<div class="ttc" id="libsoundmanager_8hpp_html"><div class="ttname"><a href="libsoundmanager_8hpp.html">libsoundmanager.hpp</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_abf861908e3d6d85d2b3c08683b08f934"><div class="ttname"><a href="class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934">LibSoundmanager::~LibSoundmanager</a></div><div class="ttdeci">~LibSoundmanager()</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00093">libsoundmanager.cpp:93</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_abe71d3531e7888f47185a601b284e729"><div class="ttname"><a href="class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729">LibSoundmanager::run_eventloop</a></div><div class="ttdeci">int run_eventloop()</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00182">libsoundmanager.cpp:182</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a71a8165cb15c7815aa95a8955f5cd7f6"><div class="ttname"><a href="class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6">LibSoundmanager::on_hangup</a></div><div class="ttdeci">void on_hangup(void *closure, struct afb_wsj1 *wsj)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00342">libsoundmanager.cpp:342</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a9cd7c5470cb135f9b1aa56d790c7e91e"><div class="ttname"><a href="class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e">LibSoundmanager::subscribe</a></div><div class="ttdeci">int subscribe(const std::string &amp;event_name)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00255">libsoundmanager.cpp:255</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a69b4f10e509605a570cc52c795bc9d51"><div class="ttname"><a href="class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51">LibSoundmanager::on_reply</a></div><div class="ttdeci">void on_reply(void *closure, struct afb_wsj1_msg *msg)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00369">libsoundmanager.cpp:369</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html"><div class="ttname"><a href="class_lib_soundmanager.html">LibSoundmanager</a></div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8hpp_source.html#l00062">libsoundmanager.hpp:62</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a3ba2255cb1d29c77c4c6a2267949eda0"><div class="ttname"><a href="class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0">LibSoundmanager::on_call</a></div><div class="ttdeci">void on_call(void *closure, const char *api, const char *verb, struct afb_wsj1_msg *msg)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00347">libsoundmanager.cpp:347</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a86ef62e7847cd20e9cafbc1f6c017b3e"><div class="ttname"><a href="class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e">LibSoundmanager::on_event</a></div><div class="ttdeci">void on_event(void *closure, const char *event, struct afb_wsj1_msg *msg)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00358">libsoundmanager.cpp:358</a></div></div>
+<div class="ttc" id="libsoundmanager_8cpp_html_a797aa3053bd6a29819d44f8fad8a5eca"><div class="ttname"><a href="libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca">ELOG</a></div><div class="ttdeci">#define ELOG(args,...)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00025">libsoundmanager.cpp:25</a></div></div>
+<div class="ttc" id="libsoundmanager_8cpp_html_a4e42b2f5af2174dd24f958351becf63d"><div class="ttname"><a href="libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d">DLOG</a></div><div class="ttdeci">#define DLOG(args,...)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00026">libsoundmanager.cpp:26</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html">libsoundmanager</a></li><li class="navelem"><a class="el" href="libsoundmanager_8cpp.html">libsoundmanager.cpp</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/libsoundmanager_8hpp.html b/doc/api-ref/html/libsoundmanager_8hpp.html
new file mode 100644
index 0000000..4291c66
--- /dev/null
+++ b/doc/api-ref/html/libsoundmanager_8hpp.html
@@ -0,0 +1,158 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/include/libsoundmanager/libsoundmanager.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('libsoundmanager_8hpp.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">libsoundmanager.hpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;audiomanagertypes.h&gt;</code><br />
+<code>#include &lt;vector&gt;</code><br />
+<code>#include &lt;map&gt;</code><br />
+<code>#include &lt;string&gt;</code><br />
+<code>#include &lt;json-c/json.h&gt;</code><br />
+<code>#include &lt;systemd/sd-event.h&gt;</code><br />
+<code>#include &lt;afb/afb-binding.h&gt;</code><br />
+<code>#include &lt;afb/afb-wsj1.h&gt;</code><br />
+<code>#include &lt;afb/afb-ws-client.h&gt;</code><br />
+</div>
+<p><a href="libsoundmanager_8hpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_lib_soundmanager.html">LibSoundmanager</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a1f6a1c6cdbe66b174179ef6395f2981f"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a></td></tr>
+<tr class="separator:a1f6a1c6cdbe66b174179ef6395f2981f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a63497e6f3147871c0c6b1b251565e7f0"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0">event_list</a></td></tr>
+<tr class="separator:a63497e6f3147871c0c6b1b251565e7f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Variable Documentation</h2>
+<a id="a1f6a1c6cdbe66b174179ef6395f2981f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1f6a1c6cdbe66b174179ef6395f2981f">&#9670;&nbsp;</a></span>api_list</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const std::vector&lt;std::string&gt; api_list</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Initial value:</b><div class="fragment"><div class="line">{</div><div class="line"> std::string(<span class="stringliteral">&quot;connect&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;disconnect&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;setVolume&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;volumeStep&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;setSinkMuteState&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;getListMainConnections&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;ackConnect&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;ackDisconnect&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;ackSetSourceState&quot;</span>), </div><div class="line"> std::string(<span class="stringliteral">&quot;registerSource&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;deregisterSource&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;subscribe&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;unsubscribe&quot;</span>)</div><div class="line">}</div></div><!-- fragment -->
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8hpp_source.html#l00034">34</a> of file <a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager.hpp</a>.</p>
+
+</div>
+</div>
+<a id="a63497e6f3147871c0c6b1b251565e7f0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a63497e6f3147871c0c6b1b251565e7f0">&#9670;&nbsp;</a></span>event_list</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const std::vector&lt;std::string&gt; event_list</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<b>Initial value:</b><div class="fragment"><div class="line">{</div><div class="line"> std::string(<span class="stringliteral">&quot;newMainConnection&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;volumeChanged&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;removedMainConnection&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;sinkMuteStateChanged&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;mainConnectionStateChanged&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;setRoutingReady&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;setRoutingRundown&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;asyncConnect&quot;</span>),</div><div class="line"> std::string(<span class="stringliteral">&quot;ackSetSourceState&quot;</span>)</div><div class="line">}</div></div><!-- fragment -->
+<p class="definition">Definition at line <a class="el" href="libsoundmanager_8hpp_source.html#l00050">50</a> of file <a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager.hpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_c2dc0533631c44dc5d574e7be055c656.html">include</a></li><li class="navelem"><a class="el" href="dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html">libsoundmanager</a></li><li class="navelem"><a class="el" href="libsoundmanager_8hpp.html">libsoundmanager.hpp</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/libsoundmanager_8hpp.js b/doc/api-ref/html/libsoundmanager_8hpp.js
new file mode 100644
index 0000000..16a31f8
--- /dev/null
+++ b/doc/api-ref/html/libsoundmanager_8hpp.js
@@ -0,0 +1,6 @@
+var libsoundmanager_8hpp =
+[
+ [ "LibSoundmanager", "class_lib_soundmanager.html", "class_lib_soundmanager" ],
+ [ "api_list", "libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f", null ],
+ [ "event_list", "libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0", null ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/libsoundmanager_8hpp_source.html b/doc/api-ref/html/libsoundmanager_8hpp_source.html
new file mode 100644
index 0000000..58073d6
--- /dev/null
+++ b/doc/api-ref/html/libsoundmanager_8hpp_source.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/include/libsoundmanager/libsoundmanager.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('libsoundmanager_8hpp_source.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">libsoundmanager.hpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="libsoundmanager_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (c) 2017 TOYOTA MOTOR CORPORATION</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#ifndef LIBSOUNDMANAGER_H</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#define LIBSOUNDMANAGER_H</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;audiomanagertypes.h&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;json-c/json.h&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;systemd/sd-event.h&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;{</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;afb/afb-binding.h&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;afb/afb-wsj1.h&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;afb/afb-ws-client.h&gt;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceam.html">am</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f"> 34</a></span>&#160;<span class="keyword">const</span> std::vector&lt;std::string&gt; <a class="code" href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a>{</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; std::string(<span class="stringliteral">&quot;connect&quot;</span>),</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; std::string(<span class="stringliteral">&quot;disconnect&quot;</span>),</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; std::string(<span class="stringliteral">&quot;setVolume&quot;</span>),</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::string(<span class="stringliteral">&quot;volumeStep&quot;</span>),</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; std::string(<span class="stringliteral">&quot;setSinkMuteState&quot;</span>),</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; std::string(<span class="stringliteral">&quot;getListMainConnections&quot;</span>),</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; std::string(<span class="stringliteral">&quot;ackConnect&quot;</span>),</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; std::string(<span class="stringliteral">&quot;ackDisconnect&quot;</span>),</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; std::string(<span class="stringliteral">&quot;ackSetSourceState&quot;</span>), </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; std::string(<span class="stringliteral">&quot;registerSource&quot;</span>),</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; std::string(<span class="stringliteral">&quot;deregisterSource&quot;</span>),</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; std::string(<span class="stringliteral">&quot;subscribe&quot;</span>),</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; std::string(<span class="stringliteral">&quot;unsubscribe&quot;</span>)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;};</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0"> 50</a></span>&#160;<span class="keyword">const</span> std::vector&lt;std::string&gt; <a class="code" href="libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0">event_list</a>{</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; std::string(<span class="stringliteral">&quot;newMainConnection&quot;</span>),</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; std::string(<span class="stringliteral">&quot;volumeChanged&quot;</span>),</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; std::string(<span class="stringliteral">&quot;removedMainConnection&quot;</span>),</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; std::string(<span class="stringliteral">&quot;sinkMuteStateChanged&quot;</span>),</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; std::string(<span class="stringliteral">&quot;mainConnectionStateChanged&quot;</span>),</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; std::string(<span class="stringliteral">&quot;setRoutingReady&quot;</span>),</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; std::string(<span class="stringliteral">&quot;setRoutingRundown&quot;</span>),</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; std::string(<span class="stringliteral">&quot;asyncConnect&quot;</span>),</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; std::string(<span class="stringliteral">&quot;ackSetSourceState&quot;</span>)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;};</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="class_lib_soundmanager.html"> 62</a></span>&#160;<span class="keyword">class </span><a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;{</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>() = <span class="keyword">delete</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> port, <span class="keyword">const</span> std::string&amp; token);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">//LibSoundmanager(const std::string&amp; uri); </span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; ~<a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="comment">/* Method */</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordtype">void</span> register_callback(</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordtype">void</span> (*event_cb)(<span class="keyword">const</span> std::string&amp; <a class="code" href="structevent.html">event</a>, <span class="keyword">struct</span> json_object* event_contents), </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">void</span> (*reply_cb)(<span class="keyword">struct</span> json_object* reply_contents)</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; );</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordtype">int</span> run_eventloop();</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordtype">int</span> call(<span class="keyword">const</span> std::string&amp; verb, <span class="keyword">struct</span> json_object* arg);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">int</span> call_sync(<span class="keyword">const</span> std::string&amp; verb, <span class="keyword">struct</span> json_object* arg, <span class="keyword">struct</span> json_object* ret);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">int</span> subscribe(<span class="keyword">const</span> std::string&amp; event_name);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordtype">int</span> unsubscribe(<span class="keyword">const</span> std::string&amp; event_name);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">/*const struct afb_wsj1* get_websocket_handler();</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment"> const struct sd_event* get_sd_event();*/</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">int</span> initialize_websocket();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; void (*onEvent)(<span class="keyword">const</span> std::string&amp; event, <span class="keyword">struct </span>json_object* event_contents);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; void (*onReply)(<span class="keyword">struct </span>json_object* reply);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">struct </span>afb_wsj1* sp_websock;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">struct </span>afb_wsj1_itf minterface;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; sd_event* mploop;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; std::string muri;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">int</span> mport = 12345;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; std::string mtoken = <span class="stringliteral">&quot;123456&quot;</span>;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; am_Error_e connect(<span class="keyword">const</span> am_sourceID_t sourceID, <span class="keyword">const</span> am_sinkID_t sinkID, am::am_mainConnectionID_t&amp; mainConnectionID);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; am_Error_e disconnect(<span class="keyword">const</span> am_mainConnectionID_t mainConnectionID);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">/* Don&#39;t use/ Internal only */</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">void</span> on_hangup(<span class="keywordtype">void</span> *closure, <span class="keyword">struct</span> afb_wsj1 *wsj);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">void</span> on_call(<span class="keywordtype">void</span> *closure, <span class="keyword">const</span> <span class="keywordtype">char</span> *api, <span class="keyword">const</span> <span class="keywordtype">char</span> *verb, <span class="keyword">struct</span> afb_wsj1_msg *msg);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">void</span> on_event(<span class="keywordtype">void</span> *closure, <span class="keyword">const</span> <span class="keywordtype">char</span> *event, <span class="keyword">struct</span> afb_wsj1_msg *msg);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordtype">void</span> on_reply(<span class="keywordtype">void</span> *closure, <span class="keyword">struct</span> afb_wsj1_msg *msg);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;};</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* LIBSOUNDMANAGER_H */</span><span class="preprocessor"></span></div><div class="ttc" id="namespaceam_html"><div class="ttname"><a href="namespaceam.html">am</a></div></div>
+<div class="ttc" id="libsoundmanager_8hpp_html_a1f6a1c6cdbe66b174179ef6395f2981f"><div class="ttname"><a href="libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f">api_list</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; api_list</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8hpp_source.html#l00034">libsoundmanager.hpp:34</a></div></div>
+<div class="ttc" id="libsoundmanager_8hpp_html_a63497e6f3147871c0c6b1b251565e7f0"><div class="ttname"><a href="libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0">event_list</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; event_list</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8hpp_source.html#l00050">libsoundmanager.hpp:50</a></div></div>
+<div class="ttc" id="structevent_html"><div class="ttname"><a href="structevent.html">event</a></div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00049">soundmanager.c:49</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html"><div class="ttname"><a href="class_lib_soundmanager.html">LibSoundmanager</a></div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8hpp_source.html#l00062">libsoundmanager.hpp:62</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_c2dc0533631c44dc5d574e7be055c656.html">include</a></li><li class="navelem"><a class="el" href="dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html">libsoundmanager</a></li><li class="navelem"><a class="el" href="libsoundmanager_8hpp.html">libsoundmanager.hpp</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/menu.js b/doc/api-ref/html/menu.js
new file mode 100644
index 0000000..97db4c2
--- /dev/null
+++ b/doc/api-ref/html/menu.js
@@ -0,0 +1,26 @@
+function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
+ function makeTree(data,relPath) {
+ var result='';
+ if ('children' in data) {
+ result+='<ul>';
+ for (var i in data.children) {
+ result+='<li><a href="'+relPath+data.children[i].url+'">'+
+ data.children[i].text+'</a>'+
+ makeTree(data.children[i],relPath)+'</li>';
+ }
+ result+='</ul>';
+ }
+ return result;
+ }
+
+ $('#main-nav').append(makeTree(menudata,relPath));
+ $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
+ if (searchEnabled) {
+ if (serverSide) {
+ $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.png" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>');
+ } else {
+ $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.png" alt=""/></a></span></div></li>');
+ }
+ }
+ $('#main-menu').smartmenus();
+}
diff --git a/doc/api-ref/html/menudata.js b/doc/api-ref/html/menudata.js
new file mode 100644
index 0000000..52fe2ba
--- /dev/null
+++ b/doc/api-ref/html/menudata.js
@@ -0,0 +1,16 @@
+var menudata={children:[
+{text:"Main Page",url:"index.html"},
+{text:"Data Structures",url:"annotated.html",children:[
+{text:"Data Structures",url:"annotated.html"},
+{text:"Data Structure Index",url:"classes.html"},
+{text:"Data Fields",url:"functions.html",children:[
+{text:"All",url:"functions.html"},
+{text:"Functions",url:"functions_func.html"},
+{text:"Variables",url:"functions_vars.html"}]}]},
+{text:"Files",url:"files.html",children:[
+{text:"File List",url:"files.html"},
+{text:"Globals",url:"globals.html",children:[
+{text:"All",url:"globals.html"},
+{text:"Functions",url:"globals_func.html"},
+{text:"Variables",url:"globals_vars.html"},
+{text:"Macros",url:"globals_defs.html"}]}]}]}
diff --git a/doc/api-ref/html/nav_f.png b/doc/api-ref/html/nav_f.png
new file mode 100644
index 0000000..72a58a5
--- /dev/null
+++ b/doc/api-ref/html/nav_f.png
Binary files differ
diff --git a/doc/api-ref/html/nav_g.png b/doc/api-ref/html/nav_g.png
new file mode 100644
index 0000000..2093a23
--- /dev/null
+++ b/doc/api-ref/html/nav_g.png
Binary files differ
diff --git a/doc/api-ref/html/nav_h.png b/doc/api-ref/html/nav_h.png
new file mode 100644
index 0000000..33389b1
--- /dev/null
+++ b/doc/api-ref/html/nav_h.png
Binary files differ
diff --git a/doc/api-ref/html/navtree.css b/doc/api-ref/html/navtree.css
new file mode 100644
index 0000000..0cc7e77
--- /dev/null
+++ b/doc/api-ref/html/navtree.css
@@ -0,0 +1,146 @@
+#nav-tree .children_ul {
+ margin:0;
+ padding:4px;
+}
+
+#nav-tree ul {
+ list-style:none outside none;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree li {
+ white-space:nowrap;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .plus {
+ margin:0px;
+}
+
+#nav-tree .selected {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+#nav-tree img {
+ margin:0px;
+ padding:0px;
+ border:0px;
+ vertical-align: middle;
+}
+
+#nav-tree a {
+ text-decoration:none;
+ padding:0px;
+ margin:0px;
+ outline:none;
+}
+
+#nav-tree .label {
+ margin:0px;
+ padding:0px;
+ font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+#nav-tree .label a {
+ padding:2px;
+}
+
+#nav-tree .selected a {
+ text-decoration:none;
+ color:#fff;
+}
+
+#nav-tree .children_ul {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .item {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree {
+ padding: 0px 0px;
+ background-color: #FAFAFF;
+ font-size:14px;
+ overflow:auto;
+}
+
+#doc-content {
+ overflow:auto;
+ display:block;
+ padding:0px;
+ margin:0px;
+ -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#side-nav {
+ padding:0 6px 0 0;
+ margin: 0px;
+ display:block;
+ position: absolute;
+ left: 0px;
+ width: 250px;
+}
+
+.ui-resizable .ui-resizable-handle {
+ display:block;
+}
+
+.ui-resizable-e {
+ background-image:url("splitbar.png");
+ background-size:100%;
+ background-repeat:no-repeat;
+ background-attachment: scroll;
+ cursor:ew-resize;
+ height:100%;
+ right:0;
+ top:0;
+ width:6px;
+}
+
+.ui-resizable-handle {
+ display:none;
+ font-size:0.1px;
+ position:absolute;
+ z-index:1;
+}
+
+#nav-tree-contents {
+ margin: 6px 0px 0px 0px;
+}
+
+#nav-tree {
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#nav-sync {
+ position:absolute;
+ top:5px;
+ right:24px;
+ z-index:0;
+}
+
+#nav-sync img {
+ opacity:0.3;
+}
+
+#nav-sync img:hover {
+ opacity:0.9;
+}
+
+@media print
+{
+ #nav-tree { display: none; }
+ div.ui-resizable-handle { display: none; position: relative; }
+}
+
diff --git a/doc/api-ref/html/navtree.js b/doc/api-ref/html/navtree.js
new file mode 100644
index 0000000..e6d31b0
--- /dev/null
+++ b/doc/api-ref/html/navtree.js
@@ -0,0 +1,517 @@
+var navTreeSubIndices = new Array();
+var arrowDown = '&#9660;';
+var arrowRight = '&#9658;';
+
+function getData(varName)
+{
+ var i = varName.lastIndexOf('/');
+ var n = i>=0 ? varName.substring(i+1) : varName;
+ return eval(n.replace(/\-/g,'_'));
+}
+
+function stripPath(uri)
+{
+ return uri.substring(uri.lastIndexOf('/')+1);
+}
+
+function stripPath2(uri)
+{
+ var i = uri.lastIndexOf('/');
+ var s = uri.substring(i+1);
+ var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
+ return m ? uri.substring(i-6) : s;
+}
+
+function hashValue()
+{
+ return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,'');
+}
+
+function hashUrl()
+{
+ return '#'+hashValue();
+}
+
+function pathName()
+{
+ return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, '');
+}
+
+function localStorageSupported()
+{
+ try {
+ return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
+ }
+ catch(e) {
+ return false;
+ }
+}
+
+
+function storeLink(link)
+{
+ if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
+ window.localStorage.setItem('navpath',link);
+ }
+}
+
+function deleteLink()
+{
+ if (localStorageSupported()) {
+ window.localStorage.setItem('navpath','');
+ }
+}
+
+function cachedLink()
+{
+ if (localStorageSupported()) {
+ return window.localStorage.getItem('navpath');
+ } else {
+ return '';
+ }
+}
+
+function getScript(scriptName,func,show)
+{
+ var head = document.getElementsByTagName("head")[0];
+ var script = document.createElement('script');
+ script.id = scriptName;
+ script.type = 'text/javascript';
+ script.onload = func;
+ script.src = scriptName+'.js';
+ if ($.browser.msie && $.browser.version<=8) {
+ // script.onload does not work with older versions of IE
+ script.onreadystatechange = function() {
+ if (script.readyState=='complete' || script.readyState=='loaded') {
+ func(); if (show) showRoot();
+ }
+ }
+ }
+ head.appendChild(script);
+}
+
+function createIndent(o,domNode,node,level)
+{
+ var level=-1;
+ var n = node;
+ while (n.parentNode) { level++; n=n.parentNode; }
+ if (node.childrenData) {
+ var imgNode = document.createElement("span");
+ imgNode.className = 'arrow';
+ imgNode.style.paddingLeft=(16*level).toString()+'px';
+ imgNode.innerHTML=arrowRight;
+ node.plus_img = imgNode;
+ node.expandToggle = document.createElement("a");
+ node.expandToggle.href = "javascript:void(0)";
+ node.expandToggle.onclick = function() {
+ if (node.expanded) {
+ $(node.getChildrenUL()).slideUp("fast");
+ node.plus_img.innerHTML=arrowRight;
+ node.expanded = false;
+ } else {
+ expandNode(o, node, false, false);
+ }
+ }
+ node.expandToggle.appendChild(imgNode);
+ domNode.appendChild(node.expandToggle);
+ } else {
+ var span = document.createElement("span");
+ span.className = 'arrow';
+ span.style.width = 16*(level+1)+'px';
+ span.innerHTML = '&#160;';
+ domNode.appendChild(span);
+ }
+}
+
+var animationInProgress = false;
+
+function gotoAnchor(anchor,aname,updateLocation)
+{
+ var pos, docContent = $('#doc-content');
+ var ancParent = $(anchor.parent());
+ if (ancParent.hasClass('memItemLeft') ||
+ ancParent.hasClass('fieldname') ||
+ ancParent.hasClass('fieldtype') ||
+ ancParent.is(':header'))
+ {
+ pos = ancParent.position().top;
+ } else if (anchor.position()) {
+ pos = anchor.position().top;
+ }
+ if (pos) {
+ var dist = Math.abs(Math.min(
+ pos-docContent.offset().top,
+ docContent[0].scrollHeight-
+ docContent.height()-docContent.scrollTop()));
+ animationInProgress=true;
+ docContent.animate({
+ scrollTop: pos + docContent.scrollTop() - docContent.offset().top
+ },Math.max(50,Math.min(500,dist)),function(){
+ if (updateLocation) window.location.href=aname;
+ animationInProgress=false;
+ });
+ }
+}
+
+function newNode(o, po, text, link, childrenData, lastNode)
+{
+ var node = new Object();
+ node.children = Array();
+ node.childrenData = childrenData;
+ node.depth = po.depth + 1;
+ node.relpath = po.relpath;
+ node.isLast = lastNode;
+
+ node.li = document.createElement("li");
+ po.getChildrenUL().appendChild(node.li);
+ node.parentNode = po;
+
+ node.itemDiv = document.createElement("div");
+ node.itemDiv.className = "item";
+
+ node.labelSpan = document.createElement("span");
+ node.labelSpan.className = "label";
+
+ createIndent(o,node.itemDiv,node,0);
+ node.itemDiv.appendChild(node.labelSpan);
+ node.li.appendChild(node.itemDiv);
+
+ var a = document.createElement("a");
+ node.labelSpan.appendChild(a);
+ node.label = document.createTextNode(text);
+ node.expanded = false;
+ a.appendChild(node.label);
+ if (link) {
+ var url;
+ if (link.substring(0,1)=='^') {
+ url = link.substring(1);
+ link = url;
+ } else {
+ url = node.relpath+link;
+ }
+ a.className = stripPath(link.replace('#',':'));
+ if (link.indexOf('#')!=-1) {
+ var aname = '#'+link.split('#')[1];
+ var srcPage = stripPath(pathName());
+ var targetPage = stripPath(link.split('#')[0]);
+ a.href = srcPage!=targetPage ? url : "javascript:void(0)";
+ a.onclick = function(){
+ storeLink(link);
+ if (!$(a).parent().parent().hasClass('selected'))
+ {
+ $('.item').removeClass('selected');
+ $('.item').removeAttr('id');
+ $(a).parent().parent().addClass('selected');
+ $(a).parent().parent().attr('id','selected');
+ }
+ var anchor = $(aname);
+ gotoAnchor(anchor,aname,true);
+ };
+ } else {
+ a.href = url;
+ a.onclick = function() { storeLink(link); }
+ }
+ } else {
+ if (childrenData != null)
+ {
+ a.className = "nolink";
+ a.href = "javascript:void(0)";
+ a.onclick = node.expandToggle.onclick;
+ }
+ }
+
+ node.childrenUL = null;
+ node.getChildrenUL = function() {
+ if (!node.childrenUL) {
+ node.childrenUL = document.createElement("ul");
+ node.childrenUL.className = "children_ul";
+ node.childrenUL.style.display = "none";
+ node.li.appendChild(node.childrenUL);
+ }
+ return node.childrenUL;
+ };
+
+ return node;
+}
+
+function showRoot()
+{
+ var headerHeight = $("#top").height();
+ var footerHeight = $("#nav-path").height();
+ var windowHeight = $(window).height() - headerHeight - footerHeight;
+ (function (){ // retry until we can scroll to the selected item
+ try {
+ var navtree=$('#nav-tree');
+ navtree.scrollTo('#selected',0,{offset:-windowHeight/2});
+ } catch (err) {
+ setTimeout(arguments.callee, 0);
+ }
+ })();
+}
+
+function expandNode(o, node, imm, showRoot)
+{
+ if (node.childrenData && !node.expanded) {
+ if (typeof(node.childrenData)==='string') {
+ var varName = node.childrenData;
+ getScript(node.relpath+varName,function(){
+ node.childrenData = getData(varName);
+ expandNode(o, node, imm, showRoot);
+ }, showRoot);
+ } else {
+ if (!node.childrenVisited) {
+ getNode(o, node);
+ } if (imm || ($.browser.msie && $.browser.version>8)) {
+ // somehow slideDown jumps to the start of tree for IE9 :-(
+ $(node.getChildrenUL()).show();
+ } else {
+ $(node.getChildrenUL()).slideDown("fast");
+ }
+ node.plus_img.innerHTML = arrowDown;
+ node.expanded = true;
+ }
+ }
+}
+
+function glowEffect(n,duration)
+{
+ n.addClass('glow').delay(duration).queue(function(next){
+ $(this).removeClass('glow');next();
+ });
+}
+
+function highlightAnchor()
+{
+ var aname = hashUrl();
+ var anchor = $(aname);
+ if (anchor.parent().attr('class')=='memItemLeft'){
+ var rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
+ glowEffect(rows.children(),300); // member without details
+ } else if (anchor.parent().attr('class')=='fieldname'){
+ glowEffect(anchor.parent().parent(),1000); // enum value
+ } else if (anchor.parent().attr('class')=='fieldtype'){
+ glowEffect(anchor.parent().parent(),1000); // struct field
+ } else if (anchor.parent().is(":header")) {
+ glowEffect(anchor.parent(),1000); // section header
+ } else {
+ glowEffect(anchor.next(),1000); // normal member
+ }
+ gotoAnchor(anchor,aname,false);
+}
+
+function selectAndHighlight(hash,n)
+{
+ var a;
+ if (hash) {
+ var link=stripPath(pathName())+':'+hash.substring(1);
+ a=$('.item a[class$="'+link+'"]');
+ }
+ if (a && a.length) {
+ a.parent().parent().addClass('selected');
+ a.parent().parent().attr('id','selected');
+ highlightAnchor();
+ } else if (n) {
+ $(n.itemDiv).addClass('selected');
+ $(n.itemDiv).attr('id','selected');
+ }
+ if ($('#nav-tree-contents .item:first').hasClass('selected')) {
+ $('#nav-sync').css('top','30px');
+ } else {
+ $('#nav-sync').css('top','5px');
+ }
+ showRoot();
+}
+
+function showNode(o, node, index, hash)
+{
+ if (node && node.childrenData) {
+ if (typeof(node.childrenData)==='string') {
+ var varName = node.childrenData;
+ getScript(node.relpath+varName,function(){
+ node.childrenData = getData(varName);
+ showNode(o,node,index,hash);
+ },true);
+ } else {
+ if (!node.childrenVisited) {
+ getNode(o, node);
+ }
+ $(node.getChildrenUL()).css({'display':'block'});
+ node.plus_img.innerHTML = arrowDown;
+ node.expanded = true;
+ var n = node.children[o.breadcrumbs[index]];
+ if (index+1<o.breadcrumbs.length) {
+ showNode(o,n,index+1,hash);
+ } else {
+ if (typeof(n.childrenData)==='string') {
+ var varName = n.childrenData;
+ getScript(n.relpath+varName,function(){
+ n.childrenData = getData(varName);
+ node.expanded=false;
+ showNode(o,node,index,hash); // retry with child node expanded
+ },true);
+ } else {
+ var rootBase = stripPath(o.toroot.replace(/\..+$/, ''));
+ if (rootBase=="index" || rootBase=="pages" || rootBase=="search") {
+ expandNode(o, n, true, true);
+ }
+ selectAndHighlight(hash,n);
+ }
+ }
+ }
+ } else {
+ selectAndHighlight(hash);
+ }
+}
+
+function removeToInsertLater(element) {
+ var parentNode = element.parentNode;
+ var nextSibling = element.nextSibling;
+ parentNode.removeChild(element);
+ return function() {
+ if (nextSibling) {
+ parentNode.insertBefore(element, nextSibling);
+ } else {
+ parentNode.appendChild(element);
+ }
+ };
+}
+
+function getNode(o, po)
+{
+ var insertFunction = removeToInsertLater(po.li);
+ po.childrenVisited = true;
+ var l = po.childrenData.length-1;
+ for (var i in po.childrenData) {
+ var nodeData = po.childrenData[i];
+ po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2],
+ i==l);
+ }
+ insertFunction();
+}
+
+function gotoNode(o,subIndex,root,hash,relpath)
+{
+ var nti = navTreeSubIndices[subIndex][root+hash];
+ o.breadcrumbs = $.extend(true, [], nti ? nti : navTreeSubIndices[subIndex][root]);
+ if (!o.breadcrumbs && root!=NAVTREE[0][1]) { // fallback: show index
+ navTo(o,NAVTREE[0][1],"",relpath);
+ $('.item').removeClass('selected');
+ $('.item').removeAttr('id');
+ }
+ if (o.breadcrumbs) {
+ o.breadcrumbs.unshift(0); // add 0 for root node
+ showNode(o, o.node, 0, hash);
+ }
+}
+
+function navTo(o,root,hash,relpath)
+{
+ var link = cachedLink();
+ if (link) {
+ var parts = link.split('#');
+ root = parts[0];
+ if (parts.length>1) hash = '#'+parts[1].replace(/[^\w\-]/g,'');
+ else hash='';
+ }
+ if (hash.match(/^#l\d+$/)) {
+ var anchor=$('a[name='+hash.substring(1)+']');
+ glowEffect(anchor.parent(),1000); // line number
+ hash=''; // strip line number anchors
+ }
+ var url=root+hash;
+ var i=-1;
+ while (NAVTREEINDEX[i+1]<=url) i++;
+ if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
+ if (navTreeSubIndices[i]) {
+ gotoNode(o,i,root,hash,relpath)
+ } else {
+ getScript(relpath+'navtreeindex'+i,function(){
+ navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
+ if (navTreeSubIndices[i]) {
+ gotoNode(o,i,root,hash,relpath);
+ }
+ },true);
+ }
+}
+
+function showSyncOff(n,relpath)
+{
+ n.html('<img src="'+relpath+'sync_off.png" title="'+SYNCOFFMSG+'"/>');
+}
+
+function showSyncOn(n,relpath)
+{
+ n.html('<img src="'+relpath+'sync_on.png" title="'+SYNCONMSG+'"/>');
+}
+
+function toggleSyncButton(relpath)
+{
+ var navSync = $('#nav-sync');
+ if (navSync.hasClass('sync')) {
+ navSync.removeClass('sync');
+ showSyncOff(navSync,relpath);
+ storeLink(stripPath2(pathName())+hashUrl());
+ } else {
+ navSync.addClass('sync');
+ showSyncOn(navSync,relpath);
+ deleteLink();
+ }
+}
+
+function initNavTree(toroot,relpath)
+{
+ var o = new Object();
+ o.toroot = toroot;
+ o.node = new Object();
+ o.node.li = document.getElementById("nav-tree-contents");
+ o.node.childrenData = NAVTREE;
+ o.node.children = new Array();
+ o.node.childrenUL = document.createElement("ul");
+ o.node.getChildrenUL = function() { return o.node.childrenUL; };
+ o.node.li.appendChild(o.node.childrenUL);
+ o.node.depth = 0;
+ o.node.relpath = relpath;
+ o.node.expanded = false;
+ o.node.isLast = true;
+ o.node.plus_img = document.createElement("span");
+ o.node.plus_img.className = 'arrow';
+ o.node.plus_img.innerHTML = arrowRight;
+
+ if (localStorageSupported()) {
+ var navSync = $('#nav-sync');
+ if (cachedLink()) {
+ showSyncOff(navSync,relpath);
+ navSync.removeClass('sync');
+ } else {
+ showSyncOn(navSync,relpath);
+ }
+ navSync.click(function(){ toggleSyncButton(relpath); });
+ }
+
+ $(window).load(function(){
+ navTo(o,toroot,hashUrl(),relpath);
+ showRoot();
+ });
+
+ $(window).bind('hashchange', function(){
+ if (window.location.hash && window.location.hash.length>1){
+ var a;
+ if ($(location).attr('hash')){
+ var clslink=stripPath(pathName())+':'+hashValue();
+ a=$('.item a[class$="'+clslink.replace(/</g,'\\3c ')+'"]');
+ }
+ if (a==null || !$(a).parent().parent().hasClass('selected')){
+ $('.item').removeClass('selected');
+ $('.item').removeAttr('id');
+ }
+ var link=stripPath2(pathName());
+ navTo(o,link,hashUrl(),relpath);
+ } else if (!animationInProgress) {
+ $('#doc-content').scrollTop(0);
+ $('.item').removeClass('selected');
+ $('.item').removeAttr('id');
+ navTo(o,toroot,hashUrl(),relpath);
+ }
+ })
+}
+
diff --git a/doc/api-ref/html/navtreedata.js b/doc/api-ref/html/navtreedata.js
new file mode 100644
index 0000000..c0ffb45
--- /dev/null
+++ b/doc/api-ref/html/navtreedata.js
@@ -0,0 +1,31 @@
+var NAVTREE =
+[
+ [ "Sound Manager", "index.html", [
+ [ "Data Structures", "annotated.html", [
+ [ "Data Structures", "annotated.html", "annotated_dup" ],
+ [ "Data Structure Index", "classes.html", null ],
+ [ "Data Fields", "functions.html", [
+ [ "All", "functions.html", null ],
+ [ "Functions", "functions_func.html", null ],
+ [ "Variables", "functions_vars.html", null ]
+ ] ]
+ ] ],
+ [ "Files", null, [
+ [ "File List", "files.html", "files" ],
+ [ "Globals", "globals.html", [
+ [ "All", "globals.html", null ],
+ [ "Functions", "globals_func.html", null ],
+ [ "Variables", "globals_vars.html", null ],
+ [ "Macros", "globals_defs.html", null ]
+ ] ]
+ ] ]
+ ] ]
+];
+
+var NAVTREEINDEX =
+[
+"annotated.html"
+];
+
+var SYNCONMSG = 'click to disable panel synchronisation';
+var SYNCOFFMSG = 'click to enable panel synchronisation'; \ No newline at end of file
diff --git a/doc/api-ref/html/navtreeindex0.js b/doc/api-ref/html/navtreeindex0.js
new file mode 100644
index 0000000..fdd7edc
--- /dev/null
+++ b/doc/api-ref/html/navtreeindex0.js
@@ -0,0 +1,61 @@
+var NAVTREEINDEX0 =
+{
+"annotated.html":[0,0],
+"class_lib_soundmanager.html":[0,0,1],
+"class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773":[0,0,1,2],
+"class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06":[0,0,1,11],
+"class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79":[0,0,1,0],
+"class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0":[0,0,1,4],
+"class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74":[0,0,1,8],
+"class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51":[0,0,1,7],
+"class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6":[0,0,1,6],
+"class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e":[0,0,1,5],
+"class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e":[0,0,1,10],
+"class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729":[0,0,1,9],
+"class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934":[0,0,1,1],
+"class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956":[0,0,1,3],
+"classes.html":[0,1],
+"dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html":[1,0,0,0,0],
+"dir_574c53d22ed4def281d320d129dd43c9.html":[1,0,0,1],
+"dir_85932083476b47061c69d172796990a3.html":[1,0,0,2],
+"dir_b967abc00200c877344b4504e6cbcf3f.html":[1,0,0],
+"dir_c2dc0533631c44dc5d574e7be055c656.html":[1,0,0,0],
+"files.html":[1,0],
+"functions.html":[0,2,0],
+"functions_func.html":[0,2,1],
+"functions_vars.html":[0,2,2],
+"globals.html":[1,1,0],
+"globals_defs.html":[1,1,3],
+"globals_func.html":[1,1,1],
+"globals_vars.html":[1,1,2],
+"index.html":[],
+"libsoundmanager_8cpp.html":[1,0,0,1,0],
+"libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d":[1,0,0,1,0,0],
+"libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca":[1,0,0,1,0,1],
+"libsoundmanager_8cpp_source.html":[1,0,0,1,0],
+"libsoundmanager_8hpp.html":[1,0,0,0,0,0],
+"libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f":[1,0,0,0,0,0,1],
+"libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0":[1,0,0,0,0,0,2],
+"libsoundmanager_8hpp_source.html":[1,0,0,0,0,0],
+"pages.html":[],
+"soundmanager_8c.html":[1,0,0,2,0],
+"soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e":[1,0,0,2,0,5],
+"soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da":[1,0,0,2,0,9],
+"soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f":[1,0,0,2,0,7],
+"soundmanager_8c.html#a369266c24eacffb87046522897a570d5":[1,0,0,2,0,1],
+"soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567":[1,0,0,2,0,10],
+"soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff":[1,0,0,2,0,4],
+"soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0":[1,0,0,2,0,8],
+"soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d":[1,0,0,2,0,11],
+"soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570":[1,0,0,2,0,6],
+"soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461":[1,0,0,2,0,3],
+"soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291":[1,0,0,2,0,2],
+"soundmanager_8c_source.html":[1,0,0,2,0],
+"structevent.html":[0,0,0],
+"structevent.html#a58726ebc551d36562ac3f9e1fe293214":[0,0,0,0],
+"structevent.html#a723489bec273335d13513cd1040c0216":[0,0,0,1],
+"test_8cpp.html":[1,0,0,1,1],
+"test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022":[1,0,0,1,1,1],
+"test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627":[1,0,0,1,1,0],
+"test_8cpp_source.html":[1,0,0,1,1]
+};
diff --git a/doc/api-ref/html/open.png b/doc/api-ref/html/open.png
new file mode 100644
index 0000000..30f75c7
--- /dev/null
+++ b/doc/api-ref/html/open.png
Binary files differ
diff --git a/doc/api-ref/html/resize.js b/doc/api-ref/html/resize.js
new file mode 100644
index 0000000..56e4a02
--- /dev/null
+++ b/doc/api-ref/html/resize.js
@@ -0,0 +1,114 @@
+function initResizable()
+{
+ var cookie_namespace = 'doxygen';
+ var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight;
+
+ function readCookie(cookie)
+ {
+ var myCookie = cookie_namespace+"_"+cookie+"=";
+ if (document.cookie) {
+ var index = document.cookie.indexOf(myCookie);
+ if (index != -1) {
+ var valStart = index + myCookie.length;
+ var valEnd = document.cookie.indexOf(";", valStart);
+ if (valEnd == -1) {
+ valEnd = document.cookie.length;
+ }
+ var val = document.cookie.substring(valStart, valEnd);
+ return val;
+ }
+ }
+ return 0;
+ }
+
+ function writeCookie(cookie, val, expiration)
+ {
+ if (val==undefined) return;
+ if (expiration == null) {
+ var date = new Date();
+ date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
+ expiration = date.toGMTString();
+ }
+ document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/";
+ }
+
+ function resizeWidth()
+ {
+ var windowWidth = $(window).width() + "px";
+ var sidenavWidth = $(sidenav).outerWidth();
+ content.css({marginLeft:parseInt(sidenavWidth)+"px"});
+ writeCookie('width',sidenavWidth-barWidth, null);
+ }
+
+ function restoreWidth(navWidth)
+ {
+ var windowWidth = $(window).width() + "px";
+ content.css({marginLeft:parseInt(navWidth)+barWidth+"px"});
+ sidenav.css({width:navWidth + "px"});
+ }
+
+ function resizeHeight()
+ {
+ var headerHeight = header.outerHeight();
+ var footerHeight = footer.outerHeight();
+ var windowHeight = $(window).height() - headerHeight - footerHeight;
+ content.css({height:windowHeight + "px"});
+ navtree.css({height:windowHeight + "px"});
+ sidenav.css({height:windowHeight + "px"});
+ var width=$(window).width();
+ if (width!=collapsedWidth) {
+ if (width<desktop_vp && collapsedWidth>=desktop_vp) {
+ if (!collapsed) {
+ collapseExpand();
+ }
+ } else if (width>desktop_vp && collapsedWidth<desktop_vp) {
+ if (collapsed) {
+ collapseExpand();
+ }
+ }
+ collapsedWidth=width;
+ }
+ }
+
+ function collapseExpand()
+ {
+ if (sidenav.width()>0) {
+ restoreWidth(0);
+ collapsed=true;
+ }
+ else {
+ var width = readCookie('width');
+ if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); }
+ collapsed=false;
+ }
+ }
+
+ header = $("#top");
+ sidenav = $("#side-nav");
+ content = $("#doc-content");
+ navtree = $("#nav-tree");
+ footer = $("#nav-path");
+ $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
+ $(sidenav).resizable({ minWidth: 0 });
+ $(window).resize(function() { resizeHeight(); });
+ var device = navigator.userAgent.toLowerCase();
+ var touch_device = device.match(/(iphone|ipod|ipad|android)/);
+ if (touch_device) { /* wider split bar for touch only devices */
+ $(sidenav).css({ paddingRight:'20px' });
+ $('.ui-resizable-e').css({ width:'20px' });
+ $('#nav-sync').css({ right:'34px' });
+ barWidth=20;
+ }
+ var width = readCookie('width');
+ if (width) { restoreWidth(width); } else { resizeWidth(); }
+ resizeHeight();
+ var url = location.href;
+ var i=url.indexOf("#");
+ if (i>=0) window.location.hash=url.substr(i);
+ var _preventDefault = function(evt) { evt.preventDefault(); };
+ $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
+ $(".ui-resizable-handle").dblclick(collapseExpand);
+ $(window).load(resizeHeight);
+}
+
+
diff --git a/doc/api-ref/html/search/all_0.html b/doc/api-ref/html/search/all_0.html
new file mode 100644
index 0000000..f25360b
--- /dev/null
+++ b/doc/api-ref/html/search/all_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_0.js b/doc/api-ref/html/search/all_0.js
new file mode 100644
index 0000000..b97cbfb
--- /dev/null
+++ b/doc/api-ref/html/search/all_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['_5fgnu_5fsource',['_GNU_SOURCE',['../soundmanager_8c.html#a369266c24eacffb87046522897a570d5',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/all_1.html b/doc/api-ref/html/search/all_1.html
new file mode 100644
index 0000000..b13f0f7
--- /dev/null
+++ b/doc/api-ref/html/search/all_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_1.js b/doc/api-ref/html/search/all_1.js
new file mode 100644
index 0000000..c6903b6
--- /dev/null
+++ b/doc/api-ref/html/search/all_1.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['afbbindingv1register',['afbBindingV1Register',['../soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567',1,'soundmanager.c']]],
+ ['afbbindingv1serviceinit',['afbBindingV1ServiceInit',['../soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d',1,'soundmanager.c']]],
+ ['am_5fcmd_5fpath',['AM_CMD_PATH',['../soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291',1,'soundmanager.c']]],
+ ['am_5fname',['AM_NAME',['../soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461',1,'soundmanager.c']]],
+ ['am_5froute_5fpath',['AM_ROUTE_PATH',['../soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff',1,'soundmanager.c']]],
+ ['api_5flist',['api_list',['../libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f',1,'libsoundmanager.hpp']]]
+];
diff --git a/doc/api-ref/html/search/all_2.html b/doc/api-ref/html/search/all_2.html
new file mode 100644
index 0000000..9543c57
--- /dev/null
+++ b/doc/api-ref/html/search/all_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_2.js b/doc/api-ref/html/search/all_2.js
new file mode 100644
index 0000000..6110f63
--- /dev/null
+++ b/doc/api-ref/html/search/all_2.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['call',['call',['../class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773',1,'LibSoundmanager']]],
+ ['call_5fsync',['call_sync',['../class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956',1,'LibSoundmanager']]],
+ ['command_5fevent_5fnum',['COMMAND_EVENT_NUM',['../soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/all_3.html b/doc/api-ref/html/search/all_3.html
new file mode 100644
index 0000000..03405c0
--- /dev/null
+++ b/doc/api-ref/html/search/all_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_3.js b/doc/api-ref/html/search/all_3.js
new file mode 100644
index 0000000..dacb0bc
--- /dev/null
+++ b/doc/api-ref/html/search/all_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['dlog',['DLOG',['../libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d',1,'libsoundmanager.cpp']]]
+];
diff --git a/doc/api-ref/html/search/all_4.html b/doc/api-ref/html/search/all_4.html
new file mode 100644
index 0000000..8e1f4b9
--- /dev/null
+++ b/doc/api-ref/html/search/all_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_4.js b/doc/api-ref/html/search/all_4.js
new file mode 100644
index 0000000..f241b7f
--- /dev/null
+++ b/doc/api-ref/html/search/all_4.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['elog',['ELOG',['../libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca',1,'libsoundmanager.cpp']]],
+ ['event',['event',['../structevent.html',1,'event'],['../structevent.html#a58726ebc551d36562ac3f9e1fe293214',1,'event::event()']]],
+ ['event_5flist',['event_list',['../libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0',1,'libsoundmanager.hpp']]]
+];
diff --git a/doc/api-ref/html/search/all_5.html b/doc/api-ref/html/search/all_5.html
new file mode 100644
index 0000000..89a879e
--- /dev/null
+++ b/doc/api-ref/html/search/all_5.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_5.js b/doc/api-ref/html/search/all_5.js
new file mode 100644
index 0000000..626f0c6
--- /dev/null
+++ b/doc/api-ref/html/search/all_5.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['libsoundmanager',['LibSoundmanager',['../class_lib_soundmanager.html',1,'LibSoundmanager'],['../class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79',1,'LibSoundmanager::LibSoundmanager()']]],
+ ['libsoundmanager_2ecpp',['libsoundmanager.cpp',['../libsoundmanager_8cpp.html',1,'']]],
+ ['libsoundmanager_2ehpp',['libsoundmanager.hpp',['../libsoundmanager_8hpp.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/all_6.html b/doc/api-ref/html/search/all_6.html
new file mode 100644
index 0000000..6afac06
--- /dev/null
+++ b/doc/api-ref/html/search/all_6.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_6.js b/doc/api-ref/html/search/all_6.js
new file mode 100644
index 0000000..4b803da
--- /dev/null
+++ b/doc/api-ref/html/search/all_6.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['main',['main',['../test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'test.cpp']]],
+ ['max_5flen_5fstr',['MAX_LEN_STR',['../soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/all_7.html b/doc/api-ref/html/search/all_7.html
new file mode 100644
index 0000000..de19107
--- /dev/null
+++ b/doc/api-ref/html/search/all_7.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_7.js b/doc/api-ref/html/search/all_7.js
new file mode 100644
index 0000000..d6f2e90
--- /dev/null
+++ b/doc/api-ref/html/search/all_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['name',['name',['../structevent.html#a723489bec273335d13513cd1040c0216',1,'event']]]
+];
diff --git a/doc/api-ref/html/search/all_8.html b/doc/api-ref/html/search/all_8.html
new file mode 100644
index 0000000..11e27cd
--- /dev/null
+++ b/doc/api-ref/html/search/all_8.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_8.js b/doc/api-ref/html/search/all_8.js
new file mode 100644
index 0000000..07d9659
--- /dev/null
+++ b/doc/api-ref/html/search/all_8.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['on_5fcall',['on_call',['../class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0',1,'LibSoundmanager']]],
+ ['on_5fevent',['on_event',['../class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e',1,'LibSoundmanager']]],
+ ['on_5fhangup',['on_hangup',['../class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6',1,'LibSoundmanager']]],
+ ['on_5freply',['on_reply',['../class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/all_9.html b/doc/api-ref/html/search/all_9.html
new file mode 100644
index 0000000..f8abbbe
--- /dev/null
+++ b/doc/api-ref/html/search/all_9.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_9.js b/doc/api-ref/html/search/all_9.js
new file mode 100644
index 0000000..f64b6c8
--- /dev/null
+++ b/doc/api-ref/html/search/all_9.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['register_5fcallback',['register_callback',['../class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74',1,'LibSoundmanager']]],
+ ['routing_5fevent_5fnum',['ROUTING_EVENT_NUM',['../soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f',1,'soundmanager.c']]],
+ ['run_5feventloop',['run_eventloop',['../class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/all_a.html b/doc/api-ref/html/search/all_a.html
new file mode 100644
index 0000000..9601fce
--- /dev/null
+++ b/doc/api-ref/html/search/all_a.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_a.js b/doc/api-ref/html/search/all_a.js
new file mode 100644
index 0000000..6797659
--- /dev/null
+++ b/doc/api-ref/html/search/all_a.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['sm',['sm',['../test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022',1,'test.cpp']]],
+ ['sound_5fmanager_5fname',['SOUND_MANAGER_NAME',['../soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0',1,'soundmanager.c']]],
+ ['sound_5fmanager_5fpath',['SOUND_MANAGER_PATH',['../soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da',1,'soundmanager.c']]],
+ ['soundmanager_2ec',['soundmanager.c',['../soundmanager_8c.html',1,'']]],
+ ['subscribe',['subscribe',['../class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/all_b.html b/doc/api-ref/html/search/all_b.html
new file mode 100644
index 0000000..0814e4e
--- /dev/null
+++ b/doc/api-ref/html/search/all_b.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_b.js b/doc/api-ref/html/search/all_b.js
new file mode 100644
index 0000000..2abceaa
--- /dev/null
+++ b/doc/api-ref/html/search/all_b.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['test_2ecpp',['test.cpp',['../test_8cpp.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/all_c.html b/doc/api-ref/html/search/all_c.html
new file mode 100644
index 0000000..da08c38
--- /dev/null
+++ b/doc/api-ref/html/search/all_c.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_c.js b/doc/api-ref/html/search/all_c.js
new file mode 100644
index 0000000..3c4ce14
--- /dev/null
+++ b/doc/api-ref/html/search/all_c.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['unsubscribe',['unsubscribe',['../class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/all_d.html b/doc/api-ref/html/search/all_d.html
new file mode 100644
index 0000000..9986c9c
--- /dev/null
+++ b/doc/api-ref/html/search/all_d.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/all_d.js b/doc/api-ref/html/search/all_d.js
new file mode 100644
index 0000000..8beb9df
--- /dev/null
+++ b/doc/api-ref/html/search/all_d.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['_7elibsoundmanager',['~LibSoundmanager',['../class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/classes_0.html b/doc/api-ref/html/search/classes_0.html
new file mode 100644
index 0000000..1c3e406
--- /dev/null
+++ b/doc/api-ref/html/search/classes_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/classes_0.js b/doc/api-ref/html/search/classes_0.js
new file mode 100644
index 0000000..2ddd7f1
--- /dev/null
+++ b/doc/api-ref/html/search/classes_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['event',['event',['../structevent.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/classes_1.html b/doc/api-ref/html/search/classes_1.html
new file mode 100644
index 0000000..a8e7069
--- /dev/null
+++ b/doc/api-ref/html/search/classes_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/classes_1.js b/doc/api-ref/html/search/classes_1.js
new file mode 100644
index 0000000..8579e77
--- /dev/null
+++ b/doc/api-ref/html/search/classes_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['libsoundmanager',['LibSoundmanager',['../class_lib_soundmanager.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/close.png b/doc/api-ref/html/search/close.png
new file mode 100644
index 0000000..9342d3d
--- /dev/null
+++ b/doc/api-ref/html/search/close.png
Binary files differ
diff --git a/doc/api-ref/html/search/defines_0.html b/doc/api-ref/html/search/defines_0.html
new file mode 100644
index 0000000..5b25204
--- /dev/null
+++ b/doc/api-ref/html/search/defines_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_0.js b/doc/api-ref/html/search/defines_0.js
new file mode 100644
index 0000000..b97cbfb
--- /dev/null
+++ b/doc/api-ref/html/search/defines_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['_5fgnu_5fsource',['_GNU_SOURCE',['../soundmanager_8c.html#a369266c24eacffb87046522897a570d5',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/defines_1.html b/doc/api-ref/html/search/defines_1.html
new file mode 100644
index 0000000..91488cb
--- /dev/null
+++ b/doc/api-ref/html/search/defines_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_1.js b/doc/api-ref/html/search/defines_1.js
new file mode 100644
index 0000000..ca7fddf
--- /dev/null
+++ b/doc/api-ref/html/search/defines_1.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['am_5fcmd_5fpath',['AM_CMD_PATH',['../soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291',1,'soundmanager.c']]],
+ ['am_5fname',['AM_NAME',['../soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461',1,'soundmanager.c']]],
+ ['am_5froute_5fpath',['AM_ROUTE_PATH',['../soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/defines_2.html b/doc/api-ref/html/search/defines_2.html
new file mode 100644
index 0000000..8655993
--- /dev/null
+++ b/doc/api-ref/html/search/defines_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_2.js b/doc/api-ref/html/search/defines_2.js
new file mode 100644
index 0000000..1d68a26
--- /dev/null
+++ b/doc/api-ref/html/search/defines_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['command_5fevent_5fnum',['COMMAND_EVENT_NUM',['../soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/defines_3.html b/doc/api-ref/html/search/defines_3.html
new file mode 100644
index 0000000..a55d3ff
--- /dev/null
+++ b/doc/api-ref/html/search/defines_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_3.js b/doc/api-ref/html/search/defines_3.js
new file mode 100644
index 0000000..dacb0bc
--- /dev/null
+++ b/doc/api-ref/html/search/defines_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['dlog',['DLOG',['../libsoundmanager_8cpp.html#a4e42b2f5af2174dd24f958351becf63d',1,'libsoundmanager.cpp']]]
+];
diff --git a/doc/api-ref/html/search/defines_4.html b/doc/api-ref/html/search/defines_4.html
new file mode 100644
index 0000000..54da39a
--- /dev/null
+++ b/doc/api-ref/html/search/defines_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_4.js b/doc/api-ref/html/search/defines_4.js
new file mode 100644
index 0000000..0be396a
--- /dev/null
+++ b/doc/api-ref/html/search/defines_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['elog',['ELOG',['../libsoundmanager_8cpp.html#a797aa3053bd6a29819d44f8fad8a5eca',1,'libsoundmanager.cpp']]]
+];
diff --git a/doc/api-ref/html/search/defines_5.html b/doc/api-ref/html/search/defines_5.html
new file mode 100644
index 0000000..dd7bfdc
--- /dev/null
+++ b/doc/api-ref/html/search/defines_5.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_5.js b/doc/api-ref/html/search/defines_5.js
new file mode 100644
index 0000000..da39044
--- /dev/null
+++ b/doc/api-ref/html/search/defines_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['max_5flen_5fstr',['MAX_LEN_STR',['../soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/defines_6.html b/doc/api-ref/html/search/defines_6.html
new file mode 100644
index 0000000..58d00e9
--- /dev/null
+++ b/doc/api-ref/html/search/defines_6.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_6.js b/doc/api-ref/html/search/defines_6.js
new file mode 100644
index 0000000..3faadd4
--- /dev/null
+++ b/doc/api-ref/html/search/defines_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['routing_5fevent_5fnum',['ROUTING_EVENT_NUM',['../soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/defines_7.html b/doc/api-ref/html/search/defines_7.html
new file mode 100644
index 0000000..275e1b3
--- /dev/null
+++ b/doc/api-ref/html/search/defines_7.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="defines_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/defines_7.js b/doc/api-ref/html/search/defines_7.js
new file mode 100644
index 0000000..84e27d8
--- /dev/null
+++ b/doc/api-ref/html/search/defines_7.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['sound_5fmanager_5fname',['SOUND_MANAGER_NAME',['../soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0',1,'soundmanager.c']]],
+ ['sound_5fmanager_5fpath',['SOUND_MANAGER_PATH',['../soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/files_0.html b/doc/api-ref/html/search/files_0.html
new file mode 100644
index 0000000..4f272b8
--- /dev/null
+++ b/doc/api-ref/html/search/files_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/files_0.js b/doc/api-ref/html/search/files_0.js
new file mode 100644
index 0000000..5bbdd4a
--- /dev/null
+++ b/doc/api-ref/html/search/files_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['libsoundmanager_2ecpp',['libsoundmanager.cpp',['../libsoundmanager_8cpp.html',1,'']]],
+ ['libsoundmanager_2ehpp',['libsoundmanager.hpp',['../libsoundmanager_8hpp.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/files_1.html b/doc/api-ref/html/search/files_1.html
new file mode 100644
index 0000000..dcce422
--- /dev/null
+++ b/doc/api-ref/html/search/files_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/files_1.js b/doc/api-ref/html/search/files_1.js
new file mode 100644
index 0000000..b6ebd2c
--- /dev/null
+++ b/doc/api-ref/html/search/files_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['soundmanager_2ec',['soundmanager.c',['../soundmanager_8c.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/files_2.html b/doc/api-ref/html/search/files_2.html
new file mode 100644
index 0000000..d5c6c3b
--- /dev/null
+++ b/doc/api-ref/html/search/files_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/files_2.js b/doc/api-ref/html/search/files_2.js
new file mode 100644
index 0000000..2abceaa
--- /dev/null
+++ b/doc/api-ref/html/search/files_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['test_2ecpp',['test.cpp',['../test_8cpp.html',1,'']]]
+];
diff --git a/doc/api-ref/html/search/functions_0.html b/doc/api-ref/html/search/functions_0.html
new file mode 100644
index 0000000..4e6d87d
--- /dev/null
+++ b/doc/api-ref/html/search/functions_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_0.js b/doc/api-ref/html/search/functions_0.js
new file mode 100644
index 0000000..6ce8cfa
--- /dev/null
+++ b/doc/api-ref/html/search/functions_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['afbbindingv1register',['afbBindingV1Register',['../soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567',1,'soundmanager.c']]],
+ ['afbbindingv1serviceinit',['afbBindingV1ServiceInit',['../soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d',1,'soundmanager.c']]]
+];
diff --git a/doc/api-ref/html/search/functions_1.html b/doc/api-ref/html/search/functions_1.html
new file mode 100644
index 0000000..b343e2d
--- /dev/null
+++ b/doc/api-ref/html/search/functions_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_1.js b/doc/api-ref/html/search/functions_1.js
new file mode 100644
index 0000000..caf07a6
--- /dev/null
+++ b/doc/api-ref/html/search/functions_1.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['call',['call',['../class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773',1,'LibSoundmanager']]],
+ ['call_5fsync',['call_sync',['../class_lib_soundmanager.html#ae5b83ce661b1d785de2518ca10113956',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/functions_2.html b/doc/api-ref/html/search/functions_2.html
new file mode 100644
index 0000000..ecce2f3
--- /dev/null
+++ b/doc/api-ref/html/search/functions_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_2.js b/doc/api-ref/html/search/functions_2.js
new file mode 100644
index 0000000..6bc3e4c
--- /dev/null
+++ b/doc/api-ref/html/search/functions_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['libsoundmanager',['LibSoundmanager',['../class_lib_soundmanager.html#a289a9d6ff8be95ae78660f239d962d79',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/functions_3.html b/doc/api-ref/html/search/functions_3.html
new file mode 100644
index 0000000..15f06ab
--- /dev/null
+++ b/doc/api-ref/html/search/functions_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_3.js b/doc/api-ref/html/search/functions_3.js
new file mode 100644
index 0000000..a52fe02
--- /dev/null
+++ b/doc/api-ref/html/search/functions_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['main',['main',['../test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'test.cpp']]]
+];
diff --git a/doc/api-ref/html/search/functions_4.html b/doc/api-ref/html/search/functions_4.html
new file mode 100644
index 0000000..8985ff2
--- /dev/null
+++ b/doc/api-ref/html/search/functions_4.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_4.js b/doc/api-ref/html/search/functions_4.js
new file mode 100644
index 0000000..07d9659
--- /dev/null
+++ b/doc/api-ref/html/search/functions_4.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['on_5fcall',['on_call',['../class_lib_soundmanager.html#a3ba2255cb1d29c77c4c6a2267949eda0',1,'LibSoundmanager']]],
+ ['on_5fevent',['on_event',['../class_lib_soundmanager.html#a86ef62e7847cd20e9cafbc1f6c017b3e',1,'LibSoundmanager']]],
+ ['on_5fhangup',['on_hangup',['../class_lib_soundmanager.html#a71a8165cb15c7815aa95a8955f5cd7f6',1,'LibSoundmanager']]],
+ ['on_5freply',['on_reply',['../class_lib_soundmanager.html#a69b4f10e509605a570cc52c795bc9d51',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/functions_5.html b/doc/api-ref/html/search/functions_5.html
new file mode 100644
index 0000000..0314918
--- /dev/null
+++ b/doc/api-ref/html/search/functions_5.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_5.js b/doc/api-ref/html/search/functions_5.js
new file mode 100644
index 0000000..7e4a2c1
--- /dev/null
+++ b/doc/api-ref/html/search/functions_5.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['register_5fcallback',['register_callback',['../class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74',1,'LibSoundmanager']]],
+ ['run_5feventloop',['run_eventloop',['../class_lib_soundmanager.html#abe71d3531e7888f47185a601b284e729',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/functions_6.html b/doc/api-ref/html/search/functions_6.html
new file mode 100644
index 0000000..c506123
--- /dev/null
+++ b/doc/api-ref/html/search/functions_6.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_6.js b/doc/api-ref/html/search/functions_6.js
new file mode 100644
index 0000000..4c6ed89
--- /dev/null
+++ b/doc/api-ref/html/search/functions_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['subscribe',['subscribe',['../class_lib_soundmanager.html#a9cd7c5470cb135f9b1aa56d790c7e91e',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/functions_7.html b/doc/api-ref/html/search/functions_7.html
new file mode 100644
index 0000000..83a7b84
--- /dev/null
+++ b/doc/api-ref/html/search/functions_7.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_7.js b/doc/api-ref/html/search/functions_7.js
new file mode 100644
index 0000000..3c4ce14
--- /dev/null
+++ b/doc/api-ref/html/search/functions_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['unsubscribe',['unsubscribe',['../class_lib_soundmanager.html#a21060844aa7efad6473b6104546afb06',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/functions_8.html b/doc/api-ref/html/search/functions_8.html
new file mode 100644
index 0000000..b55f0e6
--- /dev/null
+++ b/doc/api-ref/html/search/functions_8.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/functions_8.js b/doc/api-ref/html/search/functions_8.js
new file mode 100644
index 0000000..8beb9df
--- /dev/null
+++ b/doc/api-ref/html/search/functions_8.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['_7elibsoundmanager',['~LibSoundmanager',['../class_lib_soundmanager.html#abf861908e3d6d85d2b3c08683b08f934',1,'LibSoundmanager']]]
+];
diff --git a/doc/api-ref/html/search/mag_sel.png b/doc/api-ref/html/search/mag_sel.png
new file mode 100644
index 0000000..81f6040
--- /dev/null
+++ b/doc/api-ref/html/search/mag_sel.png
Binary files differ
diff --git a/doc/api-ref/html/search/nomatches.html b/doc/api-ref/html/search/nomatches.html
new file mode 100644
index 0000000..b1ded27
--- /dev/null
+++ b/doc/api-ref/html/search/nomatches.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/search.css b/doc/api-ref/html/search/search.css
new file mode 100644
index 0000000..3cf9df9
--- /dev/null
+++ b/doc/api-ref/html/search/search.css
@@ -0,0 +1,271 @@
+/*---------------- Search Box */
+
+#FSearchBox {
+ float: left;
+}
+
+#MSearchBox {
+ white-space : nowrap;
+ float: none;
+ margin-top: 8px;
+ right: 0px;
+ width: 170px;
+ height: 24px;
+ z-index: 102;
+}
+
+#MSearchBox .left
+{
+ display:block;
+ position:absolute;
+ left:10px;
+ width:20px;
+ height:19px;
+ background:url('search_l.png') no-repeat;
+ background-position:right;
+}
+
+#MSearchSelect {
+ display:block;
+ position:absolute;
+ width:20px;
+ height:19px;
+}
+
+.left #MSearchSelect {
+ left:4px;
+}
+
+.right #MSearchSelect {
+ right:5px;
+}
+
+#MSearchField {
+ display:block;
+ position:absolute;
+ height:19px;
+ background:url('search_m.png') repeat-x;
+ border:none;
+ width:115px;
+ margin-left:20px;
+ padding-left:4px;
+ color: #909090;
+ outline: none;
+ font: 9pt Arial, Verdana, sans-serif;
+ -webkit-border-radius: 0px;
+}
+
+#FSearchBox #MSearchField {
+ margin-left:15px;
+}
+
+#MSearchBox .right {
+ display:block;
+ position:absolute;
+ right:10px;
+ top:8px;
+ width:20px;
+ height:19px;
+ background:url('search_r.png') no-repeat;
+ background-position:left;
+}
+
+#MSearchClose {
+ display: none;
+ position: absolute;
+ top: 4px;
+ background : none;
+ border: none;
+ margin: 0px 4px 0px 0px;
+ padding: 0px 0px;
+ outline: none;
+}
+
+.left #MSearchClose {
+ left: 6px;
+}
+
+.right #MSearchClose {
+ right: 2px;
+}
+
+.MSearchBoxActive #MSearchField {
+ color: #000000;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #90A5CE;
+ background-color: #F9FAFC;
+ z-index: 10001;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+ font: 8pt Arial, Verdana, sans-serif;
+ padding-left: 2px;
+ padding-right: 12px;
+ border: 0px;
+}
+
+span.SelectionMark {
+ margin-right: 4px;
+ font-family: monospace;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem {
+ display: block;
+ outline-style: none;
+ color: #000000;
+ text-decoration: none;
+ padding-left: 6px;
+ padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+ color: #000000;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem:hover {
+ color: #FFFFFF;
+ background-color: #3D578C;
+ outline-style: none;
+ text-decoration: none;
+ cursor: pointer;
+ display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+ width: 60ex;
+ height: 15em;
+}
+
+#MSearchResultsWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #000;
+ background-color: #EEF1F7;
+ z-index:10000;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+ clear:both;
+ padding-bottom: 15px;
+}
+
+.SREntry {
+ font-size: 10pt;
+ padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+ font-size: 8pt;
+ padding: 1px 5px;
+}
+
+body.SRPage {
+ margin: 5px 2px;
+}
+
+.SRChildren {
+ padding-left: 3ex; padding-bottom: .5em
+}
+
+.SRPage .SRChildren {
+ display: none;
+}
+
+.SRSymbol {
+ font-weight: bold;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRScope {
+ display: block;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+ text-decoration: underline;
+}
+
+span.SRScope {
+ padding-left: 4px;
+}
+
+.SRPage .SRStatus {
+ padding: 2px 5px;
+ font-size: 8pt;
+ font-style: italic;
+}
+
+.SRResult {
+ display: none;
+}
+
+DIV.searchresults {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+ background-color: #F0F3F8;
+}
+
+.pages b {
+ color: white;
+ padding: 5px 5px 3px 5px;
+ background-image: url("../tab_a.png");
+ background-repeat: repeat-x;
+ text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+ line-height: 17px;
+ margin-left: 4px;
+ text-decoration: none;
+}
+
+.hl {
+ font-weight: bold;
+}
+
+#searchresults {
+ margin-bottom: 20px;
+}
+
+.searchpages {
+ margin-top: 10px;
+}
+
diff --git a/doc/api-ref/html/search/search.js b/doc/api-ref/html/search/search.js
new file mode 100644
index 0000000..dedce3b
--- /dev/null
+++ b/doc/api-ref/html/search/search.js
@@ -0,0 +1,791 @@
+function convertToId(search)
+{
+ var result = '';
+ for (i=0;i<search.length;i++)
+ {
+ var c = search.charAt(i);
+ var cn = c.charCodeAt(0);
+ if (c.match(/[a-z0-9\u0080-\uFFFF]/))
+ {
+ result+=c;
+ }
+ else if (cn<16)
+ {
+ result+="_0"+cn.toString(16);
+ }
+ else
+ {
+ result+="_"+cn.toString(16);
+ }
+ }
+ return result;
+}
+
+function getXPos(item)
+{
+ var x = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ x += item.offsetLeft;
+ item = item.offsetParent;
+ }
+ }
+ return x;
+}
+
+function getYPos(item)
+{
+ var y = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ y += item.offsetTop;
+ item = item.offsetParent;
+ }
+ }
+ return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+ Parameters:
+ name - The name of the global variable that will be
+ storing this instance. Is needed to be able to set timeouts.
+ resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, inFrame, label)
+{
+ if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
+
+ // ---------- Instance variables
+ this.name = name;
+ this.resultsPath = resultsPath;
+ this.keyTimeout = 0;
+ this.keyTimeoutLength = 500;
+ this.closeSelectionTimeout = 300;
+ this.lastSearchValue = "";
+ this.lastResultsPage = "";
+ this.hideTimeout = 0;
+ this.searchIndex = 0;
+ this.searchActive = false;
+ this.insideFrame = inFrame;
+ this.searchLabel = label;
+
+ // ----------- DOM Elements
+
+ this.DOMSearchField = function()
+ { return document.getElementById("MSearchField"); }
+
+ this.DOMSearchSelect = function()
+ { return document.getElementById("MSearchSelect"); }
+
+ this.DOMSearchSelectWindow = function()
+ { return document.getElementById("MSearchSelectWindow"); }
+
+ this.DOMPopupSearchResults = function()
+ { return document.getElementById("MSearchResults"); }
+
+ this.DOMPopupSearchResultsWindow = function()
+ { return document.getElementById("MSearchResultsWindow"); }
+
+ this.DOMSearchClose = function()
+ { return document.getElementById("MSearchClose"); }
+
+ this.DOMSearchBox = function()
+ { return document.getElementById("MSearchBox"); }
+
+ // ------------ Event Handlers
+
+ // Called when focus is added or removed from the search field.
+ this.OnSearchFieldFocus = function(isActive)
+ {
+ this.Activate(isActive);
+ }
+
+ this.OnSearchSelectShow = function()
+ {
+ var searchSelectWindow = this.DOMSearchSelectWindow();
+ var searchField = this.DOMSearchSelect();
+
+ if (this.insideFrame)
+ {
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ left += searchField.offsetWidth + 6;
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ left -= searchSelectWindow.offsetWidth;
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+ }
+ else
+ {
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+ }
+
+ // stop selection hide timer
+ if (this.hideTimeout)
+ {
+ clearTimeout(this.hideTimeout);
+ this.hideTimeout=0;
+ }
+ return false; // to avoid "image drag" default event
+ }
+
+ this.OnSearchSelectHide = function()
+ {
+ this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+ this.closeSelectionTimeout);
+ }
+
+ // Called when the content of the search field is changed.
+ this.OnSearchFieldChange = function(evt)
+ {
+ if (this.keyTimeout) // kill running timer
+ {
+ clearTimeout(this.keyTimeout);
+ this.keyTimeout = 0;
+ }
+
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 || e.keyCode==13)
+ {
+ if (e.shiftKey==1)
+ {
+ this.OnSearchSelectShow();
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ child.focus();
+ return;
+ }
+ }
+ return;
+ }
+ else if (window.frames.MSearchResults.searchResults)
+ {
+ var elem = window.frames.MSearchResults.searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+ }
+ else if (e.keyCode==27) // Escape out of the search field
+ {
+ this.DOMSearchField().blur();
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ this.Activate(false);
+ return;
+ }
+
+ // strip whitespaces
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+ if (searchValue != this.lastSearchValue) // search value has changed
+ {
+ if (searchValue != "") // non-empty search
+ {
+ // set timer for search update
+ this.keyTimeout = setTimeout(this.name + '.Search()',
+ this.keyTimeoutLength);
+ }
+ else // empty search field
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ }
+ }
+ }
+
+ this.SelectItemCount = function(id)
+ {
+ var count=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ this.SelectItemSet = function(id)
+ {
+ var i,j=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ var node = child.firstChild;
+ if (j==id)
+ {
+ node.innerHTML='&#8226;';
+ }
+ else
+ {
+ node.innerHTML='&#160;';
+ }
+ j++;
+ }
+ }
+ }
+
+ // Called when an search filter selection is made.
+ // set item with index id as the active item
+ this.OnSelectItem = function(id)
+ {
+ this.searchIndex = id;
+ this.SelectItemSet(id);
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+ if (searchValue!="" && this.searchActive) // something was found -> do a search
+ {
+ this.Search();
+ }
+ }
+
+ this.OnSearchSelectKey = function(evt)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+ {
+ this.searchIndex++;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==38 && this.searchIndex>0) // Up
+ {
+ this.searchIndex--;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==13 || e.keyCode==27)
+ {
+ this.OnSelectItem(this.searchIndex);
+ this.CloseSelectionWindow();
+ this.DOMSearchField().focus();
+ }
+ return false;
+ }
+
+ // --------- Actions
+
+ // Closes the results window.
+ this.CloseResultsWindow = function()
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.Activate(false);
+ }
+
+ this.CloseSelectionWindow = function()
+ {
+ this.DOMSearchSelectWindow().style.display = 'none';
+ }
+
+ // Performs a search.
+ this.Search = function()
+ {
+ this.keyTimeout = 0;
+
+ // strip leading whitespace
+ var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+ var code = searchValue.toLowerCase().charCodeAt(0);
+ var idxChar = searchValue.substr(0, 1).toLowerCase();
+ if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+ {
+ idxChar = searchValue.substr(0, 2);
+ }
+
+ var resultsPage;
+ var resultsPageWithSearch;
+ var hasResultsPage;
+
+ var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+ if (idx!=-1)
+ {
+ var hexCode=idx.toString(16);
+ resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';
+ resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+ hasResultsPage = true;
+ }
+ else // nothing available for this search term
+ {
+ resultsPage = this.resultsPath + '/nomatches.html';
+ resultsPageWithSearch = resultsPage;
+ hasResultsPage = false;
+ }
+
+ window.frames.MSearchResults.location = resultsPageWithSearch;
+ var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+ if (domPopupSearchResultsWindow.style.display!='block')
+ {
+ var domSearchBox = this.DOMSearchBox();
+ this.DOMSearchClose().style.display = 'inline';
+ if (this.insideFrame)
+ {
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ domPopupSearchResultsWindow.style.position = 'relative';
+ domPopupSearchResultsWindow.style.display = 'block';
+ var width = document.body.clientWidth - 8; // the -8 is for IE :-(
+ domPopupSearchResultsWindow.style.width = width + 'px';
+ domPopupSearchResults.style.width = width + 'px';
+ }
+ else
+ {
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+ var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
+ domPopupSearchResultsWindow.style.display = 'block';
+ left -= domPopupSearchResults.offsetWidth;
+ domPopupSearchResultsWindow.style.top = top + 'px';
+ domPopupSearchResultsWindow.style.left = left + 'px';
+ }
+ }
+
+ this.lastSearchValue = searchValue;
+ this.lastResultsPage = resultsPage;
+ }
+
+ // -------- Activation Functions
+
+ // Activates or deactivates the search panel, resetting things to
+ // their default values if necessary.
+ this.Activate = function(isActive)
+ {
+ if (isActive || // open it
+ this.DOMPopupSearchResultsWindow().style.display == 'block'
+ )
+ {
+ this.DOMSearchBox().className = 'MSearchBoxActive';
+
+ var searchField = this.DOMSearchField();
+
+ if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+ {
+ searchField.value = '';
+ this.searchActive = true;
+ }
+ }
+ else if (!isActive) // directly remove the panel
+ {
+ this.DOMSearchBox().className = 'MSearchBoxInactive';
+ this.DOMSearchField().value = this.searchLabel;
+ this.searchActive = false;
+ this.lastSearchValue = ''
+ this.lastResultsPage = '';
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+ // The number of matches from the last run of <Search()>.
+ this.lastMatchCount = 0;
+ this.lastKey = 0;
+ this.repeatOn = false;
+
+ // Toggles the visibility of the passed element ID.
+ this.FindChildElement = function(id)
+ {
+ var parentElement = document.getElementById(id);
+ var element = parentElement.firstChild;
+
+ while (element && element!=parentElement)
+ {
+ if (element.nodeName == 'DIV' && element.className == 'SRChildren')
+ {
+ return element;
+ }
+
+ if (element.nodeName == 'DIV' && element.hasChildNodes())
+ {
+ element = element.firstChild;
+ }
+ else if (element.nextSibling)
+ {
+ element = element.nextSibling;
+ }
+ else
+ {
+ do
+ {
+ element = element.parentNode;
+ }
+ while (element && element!=parentElement && !element.nextSibling);
+
+ if (element && element!=parentElement)
+ {
+ element = element.nextSibling;
+ }
+ }
+ }
+ }
+
+ this.Toggle = function(id)
+ {
+ var element = this.FindChildElement(id);
+ if (element)
+ {
+ if (element.style.display == 'block')
+ {
+ element.style.display = 'none';
+ }
+ else
+ {
+ element.style.display = 'block';
+ }
+ }
+ }
+
+ // Searches for the passed string. If there is no parameter,
+ // it takes it from the URL query.
+ //
+ // Always returns true, since other documents may try to call it
+ // and that may or may not be possible.
+ this.Search = function(search)
+ {
+ if (!search) // get search word from URL
+ {
+ search = window.location.search;
+ search = search.substring(1); // Remove the leading '?'
+ search = unescape(search);
+ }
+
+ search = search.replace(/^ +/, ""); // strip leading spaces
+ search = search.replace(/ +$/, ""); // strip trailing spaces
+ search = search.toLowerCase();
+ search = convertToId(search);
+
+ var resultRows = document.getElementsByTagName("div");
+ var matches = 0;
+
+ var i = 0;
+ while (i < resultRows.length)
+ {
+ var row = resultRows.item(i);
+ if (row.className == "SRResult")
+ {
+ var rowMatchName = row.id.toLowerCase();
+ rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+ if (search.length<=rowMatchName.length &&
+ rowMatchName.substr(0, search.length)==search)
+ {
+ row.style.display = 'block';
+ matches++;
+ }
+ else
+ {
+ row.style.display = 'none';
+ }
+ }
+ i++;
+ }
+ document.getElementById("Searching").style.display='none';
+ if (matches == 0) // no results
+ {
+ document.getElementById("NoMatches").style.display='block';
+ }
+ else // at least one result
+ {
+ document.getElementById("NoMatches").style.display='none';
+ }
+ this.lastMatchCount = matches;
+ return true;
+ }
+
+ // return the first item with index index or higher that is visible
+ this.NavNext = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index++;
+ }
+ return focusItem;
+ }
+
+ this.NavPrev = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index--;
+ }
+ return focusItem;
+ }
+
+ this.ProcessKeys = function(e)
+ {
+ if (e.type == "keydown")
+ {
+ this.repeatOn = false;
+ this.lastKey = e.keyCode;
+ }
+ else if (e.type == "keypress")
+ {
+ if (!this.repeatOn)
+ {
+ if (this.lastKey) this.repeatOn = true;
+ return false; // ignore first keypress after keydown
+ }
+ }
+ else if (e.type == "keyup")
+ {
+ this.lastKey = 0;
+ this.repeatOn = false;
+ }
+ return this.lastKey!=0;
+ }
+
+ this.Nav = function(evt,itemIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ var newIndex = itemIndex-1;
+ var focusItem = this.NavPrev(newIndex);
+ if (focusItem)
+ {
+ var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+ if (child && child.style.display == 'block') // children visible
+ {
+ var n=0;
+ var tmpElem;
+ while (1) // search for last child
+ {
+ tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+ if (tmpElem)
+ {
+ focusItem = tmpElem;
+ }
+ else // found it!
+ {
+ break;
+ }
+ n++;
+ }
+ }
+ }
+ if (focusItem)
+ {
+ focusItem.focus();
+ }
+ else // return focus to search field
+ {
+ parent.document.getElementById("MSearchField").focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = itemIndex+1;
+ var focusItem;
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem && elem.style.display == 'block') // children visible
+ {
+ focusItem = document.getElementById('Item'+itemIndex+'_c0');
+ }
+ if (!focusItem) focusItem = this.NavNext(newIndex);
+ if (focusItem) focusItem.focus();
+ }
+ else if (this.lastKey==39) // Right
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'block';
+ }
+ else if (this.lastKey==37) // Left
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'none';
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+
+ this.NavChild = function(evt,itemIndex,childIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ if (childIndex>0)
+ {
+ var newIndex = childIndex-1;
+ document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+ }
+ else // already at first child, jump to parent
+ {
+ document.getElementById('Item'+itemIndex).focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = childIndex+1;
+ var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+ if (!elem) // last child, jump to parent next parent
+ {
+ elem = this.NavNext(itemIndex+1);
+ }
+ if (elem)
+ {
+ elem.focus();
+ }
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+}
+
+function setKeyActions(elem,action)
+{
+ elem.setAttribute('onkeydown',action);
+ elem.setAttribute('onkeypress',action);
+ elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+ elem.setAttribute('class',attr);
+ elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+ var results = document.getElementById("SRResults");
+ for (var e=0; e<searchData.length; e++)
+ {
+ var id = searchData[e][0];
+ var srResult = document.createElement('div');
+ srResult.setAttribute('id','SR_'+id);
+ setClassAttr(srResult,'SRResult');
+ var srEntry = document.createElement('div');
+ setClassAttr(srEntry,'SREntry');
+ var srLink = document.createElement('a');
+ srLink.setAttribute('id','Item'+e);
+ setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+ setClassAttr(srLink,'SRSymbol');
+ srLink.innerHTML = searchData[e][1][0];
+ srEntry.appendChild(srLink);
+ if (searchData[e][1].length==2) // single result
+ {
+ srLink.setAttribute('href',searchData[e][1][1][0]);
+ if (searchData[e][1][1][1])
+ {
+ srLink.setAttribute('target','_parent');
+ }
+ var srScope = document.createElement('span');
+ setClassAttr(srScope,'SRScope');
+ srScope.innerHTML = searchData[e][1][1][2];
+ srEntry.appendChild(srScope);
+ }
+ else // multiple results
+ {
+ srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+ var srChildren = document.createElement('div');
+ setClassAttr(srChildren,'SRChildren');
+ for (var c=0; c<searchData[e][1].length-1; c++)
+ {
+ var srChild = document.createElement('a');
+ srChild.setAttribute('id','Item'+e+'_c'+c);
+ setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+ setClassAttr(srChild,'SRScope');
+ srChild.setAttribute('href',searchData[e][1][c+1][0]);
+ if (searchData[e][1][c+1][1])
+ {
+ srChild.setAttribute('target','_parent');
+ }
+ srChild.innerHTML = searchData[e][1][c+1][2];
+ srChildren.appendChild(srChild);
+ }
+ srEntry.appendChild(srChildren);
+ }
+ srResult.appendChild(srEntry);
+ results.appendChild(srResult);
+ }
+}
+
+function init_search()
+{
+ var results = document.getElementById("MSearchSelectWindow");
+ for (var key in indexSectionLabels)
+ {
+ var link = document.createElement('a');
+ link.setAttribute('class','SelectItem');
+ link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+ link.href='javascript:void(0)';
+ link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
+ results.appendChild(link);
+ }
+ searchBox.OnSelectItem(0);
+}
+
diff --git a/doc/api-ref/html/search/search_l.png b/doc/api-ref/html/search/search_l.png
new file mode 100644
index 0000000..c872f4d
--- /dev/null
+++ b/doc/api-ref/html/search/search_l.png
Binary files differ
diff --git a/doc/api-ref/html/search/search_m.png b/doc/api-ref/html/search/search_m.png
new file mode 100644
index 0000000..b429a16
--- /dev/null
+++ b/doc/api-ref/html/search/search_m.png
Binary files differ
diff --git a/doc/api-ref/html/search/search_r.png b/doc/api-ref/html/search/search_r.png
new file mode 100644
index 0000000..97ee8b4
--- /dev/null
+++ b/doc/api-ref/html/search/search_r.png
Binary files differ
diff --git a/doc/api-ref/html/search/searchdata.js b/doc/api-ref/html/search/searchdata.js
new file mode 100644
index 0000000..71ea2d3
--- /dev/null
+++ b/doc/api-ref/html/search/searchdata.js
@@ -0,0 +1,30 @@
+var indexSectionsWithContent =
+{
+ 0: "_acdelmnorstu~",
+ 1: "el",
+ 2: "lst",
+ 3: "aclmorsu~",
+ 4: "aens",
+ 5: "_acdemrs"
+};
+
+var indexSectionNames =
+{
+ 0: "all",
+ 1: "classes",
+ 2: "files",
+ 3: "functions",
+ 4: "variables",
+ 5: "defines"
+};
+
+var indexSectionLabels =
+{
+ 0: "All",
+ 1: "Data Structures",
+ 2: "Files",
+ 3: "Functions",
+ 4: "Variables",
+ 5: "Macros"
+};
+
diff --git a/doc/api-ref/html/search/variables_0.html b/doc/api-ref/html/search/variables_0.html
new file mode 100644
index 0000000..74ce807
--- /dev/null
+++ b/doc/api-ref/html/search/variables_0.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/variables_0.js b/doc/api-ref/html/search/variables_0.js
new file mode 100644
index 0000000..2e775a1
--- /dev/null
+++ b/doc/api-ref/html/search/variables_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['api_5flist',['api_list',['../libsoundmanager_8hpp.html#a1f6a1c6cdbe66b174179ef6395f2981f',1,'libsoundmanager.hpp']]]
+];
diff --git a/doc/api-ref/html/search/variables_1.html b/doc/api-ref/html/search/variables_1.html
new file mode 100644
index 0000000..84237b6
--- /dev/null
+++ b/doc/api-ref/html/search/variables_1.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/variables_1.js b/doc/api-ref/html/search/variables_1.js
new file mode 100644
index 0000000..303e342
--- /dev/null
+++ b/doc/api-ref/html/search/variables_1.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['event',['event',['../structevent.html#a58726ebc551d36562ac3f9e1fe293214',1,'event']]],
+ ['event_5flist',['event_list',['../libsoundmanager_8hpp.html#a63497e6f3147871c0c6b1b251565e7f0',1,'libsoundmanager.hpp']]]
+];
diff --git a/doc/api-ref/html/search/variables_2.html b/doc/api-ref/html/search/variables_2.html
new file mode 100644
index 0000000..5c9de1a
--- /dev/null
+++ b/doc/api-ref/html/search/variables_2.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/variables_2.js b/doc/api-ref/html/search/variables_2.js
new file mode 100644
index 0000000..d6f2e90
--- /dev/null
+++ b/doc/api-ref/html/search/variables_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['name',['name',['../structevent.html#a723489bec273335d13513cd1040c0216',1,'event']]]
+];
diff --git a/doc/api-ref/html/search/variables_3.html b/doc/api-ref/html/search/variables_3.html
new file mode 100644
index 0000000..f95e34c
--- /dev/null
+++ b/doc/api-ref/html/search/variables_3.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="variables_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/search/variables_3.js b/doc/api-ref/html/search/variables_3.js
new file mode 100644
index 0000000..4f3ec89
--- /dev/null
+++ b/doc/api-ref/html/search/variables_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['sm',['sm',['../test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022',1,'test.cpp']]]
+];
diff --git a/doc/api-ref/html/soundmanager_8c.html b/doc/api-ref/html/soundmanager_8c.html
new file mode 100644
index 0000000..01ac3bb
--- /dev/null
+++ b/doc/api-ref/html/soundmanager_8c.html
@@ -0,0 +1,334 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/soundmanager_binging/soundmanager.c File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('soundmanager_8c.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Data Structures</a> &#124;
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle">
+<div class="title">soundmanager.c File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;stdio.h&gt;</code><br />
+<code>#include &lt;string.h&gt;</code><br />
+<code>#include &lt;stdlib.h&gt;</code><br />
+<code>#include &lt;stdint.h&gt;</code><br />
+<code>#include &lt;unistd.h&gt;</code><br />
+<code>#include &lt;json-c/json.h&gt;</code><br />
+<code>#include &lt;pthread.h&gt;</code><br />
+<code>#include &lt;afb/afb-binding.h&gt;</code><br />
+<code>#include &quot;sm-helper.h&quot;</code><br />
+<code>#include &quot;dbus/audio_manager_interface.h&quot;</code><br />
+</div>
+<p><a href="soundmanager_8c_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
+Data Structures</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structevent.html">event</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a369266c24eacffb87046522897a570d5"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a369266c24eacffb87046522897a570d5">_GNU_SOURCE</a></td></tr>
+<tr class="separator:a369266c24eacffb87046522897a570d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad25089fbfd55bf795bed283a5b283461"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461">AM_NAME</a>&#160;&#160;&#160;&quot;org.genivi.audiomanager&quot;</td></tr>
+<tr class="separator:ad25089fbfd55bf795bed283a5b283461"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afa98a8b4c63efeb6e209144e7b247291"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291">AM_CMD_PATH</a>&#160;&#160;&#160;&quot;/org/genivi/audiomanager/commandinterface&quot;</td></tr>
+<tr class="separator:afa98a8b4c63efeb6e209144e7b247291"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9a50fb496af125690fb276944b3b4cff"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff">AM_ROUTE_PATH</a>&#160;&#160;&#160;&quot;/org/genivi/audiomanager/routinginterface&quot;</td></tr>
+<tr class="separator:a9a50fb496af125690fb276944b3b4cff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9b2ae077f774994129a3c231be6703a0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0">SOUND_MANAGER_NAME</a>&#160;&#160;&#160;&quot;org.soundmanager.genivi.routingsend&quot;</td></tr>
+<tr class="separator:a9b2ae077f774994129a3c231be6703a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2690d3e2461f5a2f9bb0720d657280da"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da">SOUND_MANAGER_PATH</a>&#160;&#160;&#160;&quot;org/soundmanager/genivi/routingsend&quot;</td></tr>
+<tr class="separator:a2690d3e2461f5a2f9bb0720d657280da"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a09f43d9e7e1c5d2198c0d66024b4500e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e">COMMAND_EVENT_NUM</a>&#160;&#160;&#160;10</td></tr>
+<tr class="separator:a09f43d9e7e1c5d2198c0d66024b4500e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a33d1c40de8a5e7a3d6f0e2f45de9f37f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f">ROUTING_EVENT_NUM</a>&#160;&#160;&#160;10</td></tr>
+<tr class="separator:a33d1c40de8a5e7a3d6f0e2f45de9f37f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab29566f6eaf3523d21c1465a3ff71570"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570">MAX_LEN_STR</a>&#160;&#160;&#160;100</td></tr>
+<tr class="separator:ab29566f6eaf3523d21c1465a3ff71570"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a88642b2e51aa08fd18fdfc8017c8d567"><td class="memItemLeft" align="right" valign="top">const struct afb_binding *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567">afbBindingV1Register</a> (const struct afb_binding_interface *itf)</td></tr>
+<tr class="separator:a88642b2e51aa08fd18fdfc8017c8d567"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aace0247d919659df209ceb7dbeff6a2d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d">afbBindingV1ServiceInit</a> (struct afb_service service)</td></tr>
+<tr class="separator:aace0247d919659df209ceb7dbeff6a2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Macro Definition Documentation</h2>
+<a id="a369266c24eacffb87046522897a570d5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a369266c24eacffb87046522897a570d5">&#9670;&nbsp;</a></span>_GNU_SOURCE</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define _GNU_SOURCE</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00017">17</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="afa98a8b4c63efeb6e209144e7b247291"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afa98a8b4c63efeb6e209144e7b247291">&#9670;&nbsp;</a></span>AM_CMD_PATH</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define AM_CMD_PATH&#160;&#160;&#160;&quot;/org/genivi/audiomanager/commandinterface&quot;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00032">32</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="ad25089fbfd55bf795bed283a5b283461"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad25089fbfd55bf795bed283a5b283461">&#9670;&nbsp;</a></span>AM_NAME</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define AM_NAME&#160;&#160;&#160;&quot;org.genivi.audiomanager&quot;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00031">31</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="a9a50fb496af125690fb276944b3b4cff"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9a50fb496af125690fb276944b3b4cff">&#9670;&nbsp;</a></span>AM_ROUTE_PATH</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define AM_ROUTE_PATH&#160;&#160;&#160;&quot;/org/genivi/audiomanager/routinginterface&quot;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00033">33</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="a09f43d9e7e1c5d2198c0d66024b4500e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a09f43d9e7e1c5d2198c0d66024b4500e">&#9670;&nbsp;</a></span>COMMAND_EVENT_NUM</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define COMMAND_EVENT_NUM&#160;&#160;&#160;10</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00037">37</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="ab29566f6eaf3523d21c1465a3ff71570"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab29566f6eaf3523d21c1465a3ff71570">&#9670;&nbsp;</a></span>MAX_LEN_STR</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define MAX_LEN_STR&#160;&#160;&#160;100</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00039">39</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="a33d1c40de8a5e7a3d6f0e2f45de9f37f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a33d1c40de8a5e7a3d6f0e2f45de9f37f">&#9670;&nbsp;</a></span>ROUTING_EVENT_NUM</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define ROUTING_EVENT_NUM&#160;&#160;&#160;10</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00038">38</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="a9b2ae077f774994129a3c231be6703a0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9b2ae077f774994129a3c231be6703a0">&#9670;&nbsp;</a></span>SOUND_MANAGER_NAME</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SOUND_MANAGER_NAME&#160;&#160;&#160;&quot;org.soundmanager.genivi.routingsend&quot;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00034">34</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="a2690d3e2461f5a2f9bb0720d657280da"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2690d3e2461f5a2f9bb0720d657280da">&#9670;&nbsp;</a></span>SOUND_MANAGER_PATH</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">#define SOUND_MANAGER_PATH&#160;&#160;&#160;&quot;org/soundmanager/genivi/routingsend&quot;</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00035">35</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a88642b2e51aa08fd18fdfc8017c8d567"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a88642b2e51aa08fd18fdfc8017c8d567">&#9670;&nbsp;</a></span>afbBindingV1Register()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">const struct afb_binding* afbBindingV1Register </td>
+ <td>(</td>
+ <td class="paramtype">const struct afb_binding_interface *&#160;</td>
+ <td class="paramname"><em>itf</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l01137">1137</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="aace0247d919659df209ceb7dbeff6a2d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aace0247d919659df209ceb7dbeff6a2d">&#9670;&nbsp;</a></span>afbBindingV1ServiceInit()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int afbBindingV1ServiceInit </td>
+ <td>(</td>
+ <td class="paramtype">struct afb_service&#160;</td>
+ <td class="paramname"><em>service</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l01145">1145</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_85932083476b47061c69d172796990a3.html">soundmanager_binging</a></li><li class="navelem"><a class="el" href="soundmanager_8c.html">soundmanager.c</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/soundmanager_8c.js b/doc/api-ref/html/soundmanager_8c.js
new file mode 100644
index 0000000..ed837d7
--- /dev/null
+++ b/doc/api-ref/html/soundmanager_8c.js
@@ -0,0 +1,15 @@
+var soundmanager_8c =
+[
+ [ "event", "structevent.html", "structevent" ],
+ [ "_GNU_SOURCE", "soundmanager_8c.html#a369266c24eacffb87046522897a570d5", null ],
+ [ "AM_CMD_PATH", "soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291", null ],
+ [ "AM_NAME", "soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461", null ],
+ [ "AM_ROUTE_PATH", "soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff", null ],
+ [ "COMMAND_EVENT_NUM", "soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e", null ],
+ [ "MAX_LEN_STR", "soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570", null ],
+ [ "ROUTING_EVENT_NUM", "soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f", null ],
+ [ "SOUND_MANAGER_NAME", "soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0", null ],
+ [ "SOUND_MANAGER_PATH", "soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da", null ],
+ [ "afbBindingV1Register", "soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567", null ],
+ [ "afbBindingV1ServiceInit", "soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d", null ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/soundmanager_8c_source.html b/doc/api-ref/html/soundmanager_8c_source.html
new file mode 100644
index 0000000..30d2f9b
--- /dev/null
+++ b/doc/api-ref/html/soundmanager_8c_source.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/soundmanager_binging/soundmanager.c Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('soundmanager_8c_source.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">soundmanager.c</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="soundmanager_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (c) 2017 TOYOTA MOTOR CORPORATION</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a369266c24eacffb87046522897a570d5"> 17</a></span>&#160;<span class="preprocessor">#define _GNU_SOURCE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;stdint.h&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;json-c/json.h&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">//#include &lt;search.h&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;pthread.h&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;afb/afb-binding.h&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &quot;sm-helper.h&quot;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;glib.h&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &quot;dbus/audio_manager_interface.h&quot;</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461"> 31</a></span>&#160;<span class="preprocessor">#define AM_NAME &quot;org.genivi.audiomanager&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291"> 32</a></span>&#160;<span class="preprocessor">#define AM_CMD_PATH &quot;/org/genivi/audiomanager/commandinterface&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff"> 33</a></span>&#160;<span class="preprocessor">#define AM_ROUTE_PATH &quot;/org/genivi/audiomanager/routinginterface&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0"> 34</a></span>&#160;<span class="preprocessor">#define SOUND_MANAGER_NAME &quot;org.soundmanager.genivi.routingsend&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da"> 35</a></span>&#160;<span class="preprocessor">#define SOUND_MANAGER_PATH &quot;org/soundmanager/genivi/routingsend&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e"> 37</a></span>&#160;<span class="preprocessor">#define COMMAND_EVENT_NUM 10</span></div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f"> 38</a></span>&#160;<span class="preprocessor">#define ROUTING_EVENT_NUM 10</span></div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#ab29566f6eaf3523d21c1465a3ff71570"> 39</a></span>&#160;<span class="preprocessor">#define MAX_LEN_STR 100</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">const</span> <span class="keyword">static</span> <span class="keyword">struct </span>afb_binding_interface *afbitf;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">static</span> AudiomanagerCommandinterface *am_cmd_bus;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keyword">static</span> AudiomanagerRoutinginterface *am_route_bus;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword">static</span> OrgSoundmanagerGeniviRoutingsend *sm_adapter;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">static</span> OrgSoundmanagerGeniviRoutingsendIface* sm_itf;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">static</span> GMainLoop *loop = NULL;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">/* To Do hash table is better */</span></div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="structevent.html"> 49</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structevent.html">event</a>{</div><div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="structevent.html#a723489bec273335d13513cd1040c0216"> 50</a></span>&#160; <span class="keywordtype">char</span>* <a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a>;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214"> 51</a></span>&#160; <span class="keyword">struct </span>afb_event* <a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; };</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structevent.html">event</a> command_event_list[<a class="code" href="soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e">COMMAND_EVENT_NUM</a>];</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="structevent.html">event</a> routing_event_list[<a class="code" href="soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f">ROUTING_EVENT_NUM</a>];</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_new_connection;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_removed_main_connection;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_volume_changed;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_sink_mute_state_changed;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_main_connection_state_changed;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">/* Routing interface event */</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_set_routing_ready;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_set_routing_rundown;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_async_connect;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">static</span> <span class="keyword">struct </span>afb_event ev_async_set_source_state;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _sourceid[] = <span class="stringliteral">&quot;sourceID&quot;</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _sinkid[] = <span class="stringliteral">&quot;sinkID&quot;</span> ;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _main_connection_id[] = <span class="stringliteral">&quot;mainConnectionID&quot;</span>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _delay[] = <span class="stringliteral">&quot;delay&quot;</span>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _connectionState[] = <span class="stringliteral">&quot;connectionState&quot;</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _connectionID[] = <span class="stringliteral">&quot;connectionID&quot;</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _volume[] = <span class="stringliteral">&quot;volume&quot;</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _volumeStep[] = <span class="stringliteral">&quot;volumeStep&quot;</span>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _muteState[] = <span class="stringliteral">&quot;muteState&quot;</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _handle[] = <span class="stringliteral">&quot;handle&quot;</span>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _appname[] = <span class="stringliteral">&quot;appname&quot;</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _ramp[] = <span class="stringliteral">&quot;ramp&quot;</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _time[] = <span class="stringliteral">&quot;time&quot;</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _sourceState[] = <span class="stringliteral">&quot;sourceState&quot;</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _sourceClassID[] = <span class="stringliteral">&quot;sourceClassID&quot;</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _error[] = <span class="stringliteral">&quot;error&quot;</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _sinkData[] = <span class="stringliteral">&quot;sinkData&quot;</span>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _sourceData[] = <span class="stringliteral">&quot;sourceData&quot;</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _interruptState[] = <span class="stringliteral">&quot;interruptState&quot;</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _availability[] = <span class="stringliteral">&quot;availability&quot;</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _domainID[] = <span class="stringliteral">&quot;domainID&quot;</span>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _listvolumes[] = <span class="stringliteral">&quot;listvolumes&quot;</span>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _payload[] = <span class="stringliteral">&quot;payload&quot;</span>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> _connectionFormat[] = <span class="stringliteral">&quot;connectionFormat&quot;</span>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment">********** Method of Sound Manager (API) **********</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment">/* call &quot;connect&quot; function of Audio Manager*/</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> connect (<span class="keyword">struct</span> afb_req request) </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;{</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call connect&quot;</span>);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; guint16 source_id, sink_id;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; guint16 main_connectionID = 0;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; gint16 ret;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; REQ_ERROR req_err1, req_err2;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">/* ToDo select appname or sourceID(sinkID) */</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; req_err1 = getid_uint16(request, _sourceid, &amp;source_id);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; req_err2 = getid_uint16(request, _sinkid, &amp;sink_id);</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK))</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;getid_uint16 source ret = %d,sink ret = %d&quot;</span>, source_id, sink_id);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; NOTICE(afbitf,<span class="stringliteral">&quot;wrong request&quot;</span>);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>,NULL);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; audiomanager_commandinterface_call_connect_sync(</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; am_cmd_bus,</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; source_id,</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; sink_id,</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; &amp;ret,</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; &amp;main_connectionID,</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call connect&quot;</span>);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="comment">/* ToDo Remember appname(key) and tie to sourceID(value) */</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="comment">/*create response json object*/</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">struct </span>json_object *res = json_object_new_object();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; sm_add_object_to_json_object_func(res, __FUNCTION__, 4,</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="stringliteral">&quot;error&quot;</span>, ret,</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; _main_connection_id, main_connectionID);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; get_response_audiomanager_massage_error(ret,&amp;info);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; afb_req_success(request, res, info);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;}</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="comment">/* call &quot;disconnect&quot; function of Audio Manager*/</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> disconnect (<span class="keyword">struct</span> afb_req request) </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;{</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call disconnect&quot;</span>);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; guint16 id;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; gint16 ret;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; REQ_ERROR req_err;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; req_err = getid_uint16(request, _main_connection_id, &amp;<span class="keywordtype">id</span>);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;requested %s = %d&quot;</span>, _main_connection_id, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">if</span>(req_err != REQ_OK)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>,afb_req_value (request, _main_connection_id));</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; audiomanager_commandinterface_call_disconnect_sync(</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; am_cmd_bus,</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordtype">id</span>,</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; &amp;ret,</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;ret = %d&quot;</span>, ret);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call getListMainConnections&quot;</span>);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="stringliteral">&quot;error&quot;</span>, ret);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; get_response_audiomanager_massage_error(ret,&amp;info);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; afb_req_success(request, res_obj, info); <span class="comment">/* return error num as status */</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;}</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> setVolume (<span class="keyword">struct</span> afb_req request) </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;{</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call setVolume&quot;</span>);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; guint16 sink_id, vol;</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; gint16 ret;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; REQ_ERROR req_err1, req_err2;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; req_err1 = getid_uint16(request, _sinkid, &amp;sink_id);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; req_err2 = getid_int16(request, _volume, &amp;vol);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;requested %s = %d, %s = %d&quot;</span>,_sinkid, sink_id, _volume, vol);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK))</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, NULL);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; audiomanager_commandinterface_call_set_volume_sync(</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; am_cmd_bus,</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; sink_id,</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; vol,</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; &amp;ret,</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;ret = %d&quot;</span>, ret);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call setVolume&quot;</span>);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="stringliteral">&quot;error&quot;</span>, ret);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; get_response_audiomanager_massage_error(ret,&amp;info);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; afb_req_success(request, res_obj, info); <span class="comment">/* return error num as status */</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;}</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> volumeStep (<span class="keyword">struct</span> afb_req request) </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;{</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call volumeStep&quot;</span>);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; guint16 sink_id, vol;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; gint16 ret;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; REQ_ERROR req_err1, req_err2;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; req_err1 = getid_uint16(request, _sinkid, &amp;sink_id);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; req_err2 = getid_int16(request, _volumeStep, &amp;vol);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;requested %s = %d, %s = %d&quot;</span>,_sinkid, sink_id, _volumeStep, vol);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK))</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, NULL);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; audiomanager_commandinterface_call_volume_step_sync(</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; am_cmd_bus,</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; sink_id,</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; vol,</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; &amp;ret,</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;ret = %d&quot;</span>, ret);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call volumeStep&quot;</span>);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="stringliteral">&quot;error&quot;</span>, ret);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; get_response_audiomanager_massage_error(ret,&amp;info);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; afb_req_success(request, res_obj, info); <span class="comment">/* return error num as status */</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;}</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;<span class="comment">/* 1 means mute, 2 means unmute */</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> setSinkMuteState(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;{</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call setSinkMuteStete&quot;</span>);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; guint16 sink_id, mute;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; gint16 ret;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; REQ_ERROR req_err1, req_err2;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; req_err1 = getid_uint16(request, _sinkid, &amp;sink_id);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; req_err2 = getid_int16(request, _muteState, &amp;mute);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;requested %s = %d, %s = %d&quot;</span>,_sinkid, sink_id, _muteState, mute);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK))</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, NULL);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; audiomanager_commandinterface_call_set_sink_mute_state_sync(</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; am_cmd_bus,</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; sink_id,</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; mute,</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; &amp;ret,</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;ret = %d&quot;</span>, ret);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call setSinkMuteStete&quot;</span>);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="stringliteral">&quot;error&quot;</span>, ret);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; get_response_audiomanager_massage_error(ret,&amp;info);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; afb_req_success(request, res_obj, info); <span class="comment">/* return error num as status */</span> </div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;}</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;<span class="comment">/* call &quot;getListMainConnections&quot; function of Audio Manager */</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> getListMainConnections(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;{</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call getListMainConnections&quot;</span>);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; guint16 ret;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; GVariant* mainConnectionList;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; audiomanager_commandinterface_call_get_list_main_connections_sync(</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; am_cmd_bus,</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; &amp;ret,</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; &amp;mainConnectionList,</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; NULL,</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; &amp;err</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; );</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;ret = %d, mainConnectionList pointer = %p&quot;</span>, ret, &amp;mainConnectionList);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; </div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call getListMainConnections&quot;</span>);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="comment">/* create response */</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keyword">struct </span>json_object *array_res = json_object_new_array();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; gsize size = g_variant_n_children(mainConnectionList);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;mainConnectionList size is %u&quot;</span>,(uint16_t)size);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">struct </span>json_object *verb_obj = json_object_new_object();</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; sm_add_object_to_json_object_func(verb_obj, __FUNCTION__, 0);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; json_object_array_add(array_res, verb_obj);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">if</span>(size &lt;= 0)</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; {</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; NOTICE(afbitf, <span class="stringliteral">&quot;mainConnectionList size is 0&quot;</span>);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; size; ++i)</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; guint16 mcid, srcid, sinkid;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; gint16 delay, constate;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; g_variant_get_child(</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; mainConnectionList,i,<span class="stringliteral">&quot;(qqqnn)&quot;</span>, </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; &amp;mcid, &amp;srcid, &amp;sinkid, &amp;delay, &amp;constate</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; );</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; sm_add_object_to_json_object_func(res_obj,__FUNCTION__,10,</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; _main_connection_id, mcid,</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; _sourceid, srcid,</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; _sinkid, sinkid,</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; _delay, delay,</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; _connectionState, constate</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; );</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; json_object_array_add(array_res,res_obj);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; }</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;json object :%s:&quot;</span>,json_object_to_json_string(array_res));</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; afb_req_success(request, array_res, <span class="stringliteral">&quot;Success to get main connection list&quot;</span>);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160;}</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;<span class="comment">****** Routing Interface method(API) ***********</span></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> ackConnect(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;{</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call %s&quot;</span>, __FUNCTION__);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; guint16 handle, connection_id, error;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; REQ_ERROR req_err1, req_err2 , req_err3;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; </div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; req_err1 = getid_uint16(request, _handle, &amp;handle);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; req_err2 = getid_uint16(request, _connectionID, &amp;connection_id);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; req_err3 = getid_uint16(request, _error, &amp;error);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; </div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK) || (req_err3 != REQ_OK))</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, NULL);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">if</span>(connection_id == 0)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; {</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, <span class="stringliteral">&quot;connectionID is more than 0&quot;</span>);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; </div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; audiomanager_routinginterface_call_ack_connect_sync(</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; am_route_bus,</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; handle,</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; connection_id,</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; error,</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call ackConnect&quot;</span>);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; afb_req_success(request, NULL, NULL);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;}</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> ackDisconnect(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;{</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call %s&quot;</span>, __FUNCTION__);</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; guint16 handle, connection_id, error;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; REQ_ERROR req_err1, req_err2 , req_err3;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; </div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; req_err1 = getid_uint16(request, _handle, &amp;handle);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; req_err2 = getid_uint16(request, _connectionID, &amp;connection_id);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; req_err3 = getid_uint16(request, _error, &amp;error);</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; </div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK) || (req_err3 != REQ_OK))</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, <span class="stringliteral">&quot;connectionID is more than 0&quot;</span>); </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span>(connection_id == 0)</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, <span class="stringliteral">&quot;connectionID is more than 0&quot;</span>);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; }</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; audiomanager_routinginterface_call_ack_disconnect_sync(</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; am_route_bus,</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; handle,</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; connection_id,</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; error,</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call ackDisconnect&quot;</span>);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; afb_req_success(request, NULL, NULL);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;}</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> ackSetSourceState(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;{</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call %s&quot;</span>, __FUNCTION__);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; guint16 handle, error;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; REQ_ERROR req_err1, req_err2;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; </div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; req_err1 = getid_uint16(request, _handle, &amp;handle);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; req_err2 = getid_uint16(request, _error, &amp;error);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; </div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">if</span>((req_err1 != REQ_OK) || (req_err2 != REQ_OK))</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; NOTICE(afbitf,<span class="stringliteral">&quot;wrong request&quot;</span>);</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, NULL); </div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; audiomanager_routinginterface_call_ack_set_source_state_sync(</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; am_route_bus,</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; handle,</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; error,</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; {</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call ackDisconnect&quot;</span>);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; afb_req_success(request, NULL, NULL);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;}</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> registerSink(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;{</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="comment">/* This function will be deprecated because application will not register function*/</span></div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;}</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> deregisterSink(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;{</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="comment">/* This function will be deprecated because application will not register function*/</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;}</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment">/* This function will be modified to abstract argument */</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> registerSource(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;{</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;call %s&quot;</span>, __FUNCTION__);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; guint16 source_id; <span class="comment">/* q 0 is for dynamic id*/</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; guint16 domain_id; <span class="comment">/* q */</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; guint16 source_class_id; <span class="comment">/* q */</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; gint32 source_state = 1; <span class="comment">/* i SS_ON */</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; gint16 volume; <span class="comment">/* n */</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; </div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">if</span>(REQ_OK != getid_uint16(request, _sourceid, &amp;source_id)){</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; source_id = 0; <span class="comment">/* if 0, dynamic source id will be attached */</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">if</span>( REQ_OK != getid_uint16(request, _domainID, &amp;domain_id)){</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, <span class="stringliteral">&quot;domainID should be more than 0&quot;</span>);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">if</span>(domain_id == 0)</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; afb_req_fail(request,<span class="stringliteral">&quot;wrong-request&quot;</span>, <span class="stringliteral">&quot;domainID should be more than 0&quot;</span>);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keyword">const</span> gchar* <a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = afb_req_value(request, _appname); <span class="comment">/* s */</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">if</span>(!name)</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordtype">char</span>* info = <span class="stringliteral">&quot;Must specify the name. Please input json arg such as {\&quot;appname\&quot;:\&quot;radio\&quot;}&quot;</span>;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; afb_req_fail(request, NULL, info);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">if</span>(REQ_OK != getid_uint16(request, _sourceClassID, &amp;source_class_id)){</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; source_class_id = 0; <span class="comment">/* BASE */</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; }</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">if</span>(REQ_OK != getid_uint16(request, _sourceState, &amp;source_state)){</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; source_state = 0;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">if</span>(REQ_OK != getid_int16(request, _volume, &amp;volume)){</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; volume = 3000;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; gboolean visible = TRUE; <span class="comment">/* b */</span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keyword">struct </span>availability_s available; <span class="comment">/* (ii) */</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; available.availability = 1; <span class="comment">/* A_UNKNOWN */</span></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; available.avalilable_reason = 0; <span class="comment">/* AR_UNKNOWN */</span></div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; guint16 interrupt = 1; <span class="comment">/* q IS_OFF */</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keyword">struct </span>sound_property_s sound_property_list; <span class="comment">/* a(in) */</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; sound_property_list.type = 0;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; sound_property_list.value = 0; <span class="comment">/* in reality, this is array of struct */</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; </div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; gint32 connection_format_list = 0; <span class="comment">/* ai */</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keyword">struct </span>main_sound_property_s main_property_list; <span class="comment">/* a(in) */</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; main_property_list.type = 0;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; main_property_list.value = 0;</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keyword">struct </span>notification_config_s nconf_routing;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keyword">struct </span>notification_config_s nconf_command; <span class="comment">/* a(iin)a(iin) */</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; nconf_routing.type = 0;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; nconf_routing.status = 0;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; nconf_routing.parameter = 0;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; nconf_command.type = 0;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; nconf_command.status = 0;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; nconf_command.parameter = 0;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="comment">/* acuire data */</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; guint16 acquire_source_id;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; guint16 error;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; GVariant* sourceData = create_source_data (source_id, domain_id, name, source_class_id, </div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; source_state, volume, visible, available, interrupt,</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; sound_property_list, connection_format_list, main_property_list,</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; nconf_routing, nconf_command, afbitf);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; GVariant* input = g_variant_ref_sink(sourceData);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; audiomanager_routinginterface_call_register_source_sync(</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; am_route_bus,</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; input,</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; &amp;acquire_source_id,</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; &amp;error,</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; g_variant_unref(input);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; {</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call registerSource&quot;</span>);</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; }</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="comment">/*create response json object*/</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keyword">struct </span>json_object *res = json_object_new_object();</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; sm_add_object_to_json_object_func(res, __FUNCTION__, 4,</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; _error, error,</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; _sourceid, acquire_source_id);</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; get_response_audiomanager_massage_error(error,&amp;info);</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; afb_req_success(request, res, info);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;}</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> deregisterSource(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;{</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; guint16 source_id;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; guint16 error;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; </div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; GError *err = NULL;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; </div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">if</span>(REQ_OK != getid_uint16(request, _sourceid, &amp;source_id)){</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;wrong-request&quot;</span>, NULL);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; audiomanager_routinginterface_call_deregister_source_sync(</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; am_route_bus,</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; source_id,</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; &amp;error,</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; NULL, &amp;err</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; );</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; afb_req_fail(request, <span class="stringliteral">&quot;failed&quot;</span>, <span class="stringliteral">&quot;Unable to call deregisterSource&quot;</span>);</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; }</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="comment">/*create response json object*/</span></div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keyword">struct </span>json_object *res = json_object_new_object();</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; sm_add_object_to_json_object_func(res, __FUNCTION__, 2,</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; _error, error);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; get_response_audiomanager_massage_error(error,&amp;info);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; afb_req_success(request, res, info);</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;}</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> confirmRoutingReady(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;{</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="comment">/* This function will be deprecated because application will not register function*/</span> </div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;}</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> confirmRoutingRundown(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;{</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="comment">/* This function will be deprecated because application will not register function*/</span> </div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;}</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> ackSetVolumes(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;{</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;}</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> ackSinkNotificationConfiguration(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;{</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;}</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> ackSourceNotificationConfiguration(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;{</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="comment">/* This function will be deprecated */</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;}</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> subscribe(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;{</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *value = afb_req_value(request, <span class="stringliteral">&quot;event&quot;</span>);</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;value is %s&quot;</span>, value);</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordflow">if</span>(value) { </div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordtype">int</span> index = sm_search_event_name_index(value);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">if</span>(index &lt; 0)</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; index = sm_search_routing_event_name_index(value);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">if</span>(index &lt; 0)</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; {</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;dedicated event doesn&#39;t exist&quot;</span>); </div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; {</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; afb_req_subscribe(request, *routing_event_list[index].<a class="code" href="structevent.html">event</a>);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; } </div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; {</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; afb_req_subscribe(request, *command_event_list[index].<a class="code" href="structevent.html">event</a>); </div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Please input event name&quot;</span>);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; }</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; afb_req_success(request, NULL, NULL);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;}</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> unsubscribe(<span class="keyword">struct</span> afb_req request)</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160;{</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *value = afb_req_value(request, <span class="stringliteral">&quot;event&quot;</span>);</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordtype">char</span> *info;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;value is %s&quot;</span>, value);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">if</span>(value) { </div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordtype">int</span> index = sm_search_event_name_index(value);</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">if</span>(index &lt; 0)</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; {</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; index = sm_search_routing_event_name_index(value);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">if</span>(index &lt; 0)</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;dedicated event doesn&#39;t exist&quot;</span>); </div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; afb_req_unsubscribe(request, *routing_event_list[index].<a class="code" href="structevent.html">event</a>);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; } </div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; {</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; afb_req_unsubscribe(request, *command_event_list[index].<a class="code" href="structevent.html">event</a>); </div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; }</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; }</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Please input event name&quot;</span>);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; }</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; afb_req_success(request, NULL, NULL);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160;}</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;<span class="comment">********** Callback Function invoked by Audio Manager **********</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_new_main_connection(AudiomanagerCommandinterface* interface,</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; GVariant* mainConnection)</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;{</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; guint16 mcid, srcid, sinkid;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; gint16 delay, constate;</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; g_variant_get(</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; mainConnection,<span class="stringliteral">&quot;(qqqnn)&quot;</span>, &amp;mcid, &amp;srcid, &amp;sinkid, &amp;delay, &amp;constate);</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; </div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; sm_add_object_to_json_object(res_obj,10,</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; _main_connection_id, mcid,</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; _sourceid, srcid,</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; _sinkid, sinkid,</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; _delay, delay,</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; _connectionState, constate</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; );</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;json object :%s:&quot;</span>,json_object_to_json_string(res_obj));</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; afb_event_push(ev_new_connection, res_obj);</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;}</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_removed_main_connection(</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; AudiomanagerCommandinterface* interface, guint16 mainConnectionID)</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160;{</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; </div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; sm_add_object_to_json_object(res_obj, 2, </div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; _main_connection_id, mainConnectionID);</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; afb_event_push(ev_removed_main_connection, res_obj);</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160;}</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_main_connection_state_changed(</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; AudiomanagerCommandinterface* interface, guint16 connectionID, gint16 connectionState)</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160;{</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160;</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; sm_add_object_to_json_object(res_obj, 4, </div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; _connectionID, connectionID,</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; _connectionState, connectionState);</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; afb_event_push(ev_main_connection_state_changed, res_obj);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;}</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_volume_changed(</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; AudiomanagerCommandinterface* interface, guint16 sinkID, gint16 volume)</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;{</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; sm_add_object_to_json_object(res_obj, 4, </div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; _sinkid, sinkID,</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; _volume, volume);</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; afb_event_push(ev_volume_changed, res_obj);</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160;}</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_sink_mute_state_changed(</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; AudiomanagerCommandinterface* interface, guint16 sinkID, gint16 mute)</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;{</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; sm_add_object_to_json_object(res_obj, 4, </div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; _sinkid, sinkID,</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; _muteState, mute);</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; afb_event_push(ev_sink_mute_state_changed, res_obj);</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;}</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;<span class="comment">********** Callback Function invoked by Audio Manager Routing Interface**********</span></div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_set_routing_ready(</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; AudiomanagerRoutinginterface* interface)</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;{</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; afb_event_push(ev_set_routing_ready, NULL);</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;}</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> on_set_routing_rundown(</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; AudiomanagerRoutinginterface* interface)</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;{</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; DEBUG(afbitf,<span class="stringliteral">&quot;%s is called&quot;</span>,__FUNCTION__);</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; afb_event_push(ev_set_routing_ready, NULL);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;}</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160;</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160;</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160;<span class="comment">********** Callback Function invoked by Sound Manager Adapter Interface**********</span></div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;<span class="comment">* For now, there may be no need to send events to applications from these invocation.</span></div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;<span class="comment">* Sound Manager just sends ack to Audio Manager in charge of applications.</span></div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;<span class="comment">* If event is needed, make events in initialize function in this source, and </span></div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;<span class="comment">* write afb_event_push in the invocations.</span></div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;<span class="comment">* Events should be pushed in this source.(I teseted to push events in other code, but can&#39;t)</span></div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;<span class="comment">*</span></div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;<span class="keyword">static</span> gboolean on_async_abort(</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; OrgSoundmanagerGeniviRoutingsend *<span class="keywordtype">object</span>,</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; GDBusMethodInvocation *invocation,</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; guint16 arg_handle)</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;{</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__); </div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="comment">/* Nothing To Do. If it is better to implement something, I will implement */</span></div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;}</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160;</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;<span class="keyword">static</span> gboolean on_async_connect(</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; OrgSoundmanagerGeniviRoutingsend *<span class="keywordtype">object</span>,</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; GDBusMethodInvocation *invocation,</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; guint16 arg_handle,</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; guint16 arg_connectionID,</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; guint16 arg_sourceID,</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; guint16 arg_sinkID,</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; gint arg_connectionFormat)</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;{</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__); </div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; GError* err;</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object();</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; sm_add_object_to_json_object(res_obj, 10, </div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; _handle, arg_handle,</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; _connectionID, arg_connectionID,</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; _sourceid, arg_sourceID,</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; _sinkid, arg_sinkID,</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; _connectionFormat, arg_connectionFormat);</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; afb_event_push(ev_async_connect, res_obj);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; audiomanager_routinginterface_call_ack_connect_sync(</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; am_route_bus,</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; arg_handle,</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; arg_connectionID,</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; NULL,</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; {</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Can&#39;t create sound manager adapter&quot;</span>);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; }</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keywordflow">return</span> TRUE; </div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160;}</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160;</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160;<span class="keyword">static</span> gboolean on_async_disconnect(</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; OrgSoundmanagerGeniviRoutingsend *<span class="keywordtype">object</span>,</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; GDBusMethodInvocation *invocation,</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; guint16 arg_handle,</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; guint16 arg_connectionID)</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;{</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__); </div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; GError* err;</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; audiomanager_routinginterface_call_ack_disconnect_sync(</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; am_route_bus,</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; arg_handle,</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; arg_connectionID,</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; NULL,</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; NULL, &amp;err);</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; {</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Can&#39;t create sound manager adapter&quot;</span>);</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; }</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160;}</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160;<span class="keyword">static</span> gboolean on_async_set_sink_volume(</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; OrgSoundmanagerGeniviRoutingsend *<span class="keywordtype">object</span>,</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; GDBusMethodInvocation *invocation,</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; guint16 arg_handle,</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; guint16 arg_sinkID,</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; gint16 arg_volume,</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; gint16 arg_ramp,</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; guint16 arg_time)</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160;{</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__); </div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="comment">/* Nothing To Do. If it is better to implement something, I will implement */</span></div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <span class="keywordflow">return</span> TRUE; </div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160;}</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160;<span class="keyword">static</span> gboolean on_async_set_source_state(</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; OrgSoundmanagerGeniviRoutingsend *<span class="keywordtype">object</span>,</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; GDBusMethodInvocation *invocation,</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; guint16 arg_handle,</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; guint16 arg_sourceID,</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; gint arg_sourceState)</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160;{</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__); </div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; GError* err;</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; <span class="keyword">struct </span>json_object* res_obj = json_object_new_object(); </div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; sm_add_object_to_json_object(res_obj, 6, </div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; _handle, arg_handle,</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; _sourceid, arg_sourceID,</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; _sourceState, arg_sourceState);</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; afb_event_push(ev_async_set_source_state, res_obj);</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="comment">/* Applications should return ackSetSourceState, then Sound Manager doen&#39;t return ackSetSourceState */</span></div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <span class="comment">/*audiomanager_routinginterface_call_ack_set_source_state_sync(</span></div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160;<span class="comment"> am_route_bus,</span></div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160;<span class="comment"> arg_handle,</span></div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;<span class="comment"> NULL,</span></div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160;<span class="comment"> NULL, &amp;err);*/</span></div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="keywordflow">if</span>(err != NULL)</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; {</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Can&#39;t create sound manager adapter&quot;</span>);</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; }</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;}</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160;<span class="keyword">static</span> gboolean init_sound_manager_adapter(GDBusServer *server, GDBusConnection *conn, gpointer data)</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160;{</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;%s called&quot;</span>, __FUNCTION__);</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; sm_adapter = org_soundmanager_genivi_routingsend_skeleton_new();</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; sm_itf = ORG_SOUNDMANAGER_GENIVI_ROUTINGSEND_GET_IFACE(sm_adapter);</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="comment">/* initialize sound manager adapter */</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; sm_itf-&gt;handle_async_abort = on_async_abort;</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; sm_itf-&gt;handle_async_connect = on_async_connect;</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; sm_itf-&gt;handle_async_disconnect = on_async_disconnect;</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; sm_itf-&gt;handle_async_set_sink_volume = on_async_set_sink_volume;</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; sm_itf-&gt;handle_async_set_source_state = on_async_set_source_state;</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; gboolean ret = g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(sm_adapter), conn, <a class="code" href="soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da">SOUND_MANAGER_PATH</a>, NULL);</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="keywordflow">if</span>(!ret)</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; {</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Can&#39;t create sound manager adapter&quot;</span>);</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; }</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160;}</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160;</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160;<span class="comment"> * array of the verbs exported to afb-daemon</span></div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">struct </span>afb_verb_desc_v1 binding_verbs[]= {</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160;<span class="comment">/* VERB&#39;S NAME SESSION MANAGEMENT FUNCTION TO CALL SHORT DESCRIPTION */</span></div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;{ .name = <span class="stringliteral">&quot;connect&quot;</span>, .session = AFB_SESSION_NONE, .callback = connect, .info = <span class="stringliteral">&quot;Connect source id and sink id&quot;</span> },</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160;{ .name = <span class="stringliteral">&quot;disconnect&quot;</span>, .session = AFB_SESSION_NONE, .callback = disconnect, .info = <span class="stringliteral">&quot;Disconnect source id and sink id&quot;</span> },</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160;{ .name = <span class="stringliteral">&quot;setVolume&quot;</span>, .session = AFB_SESSION_NONE, .callback = setVolume, .info = <span class="stringliteral">&quot;Set volume value&quot;</span> }, <span class="comment">/* it is better to show the range*/</span></div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160;{ .name = <span class="stringliteral">&quot;volumeStep&quot;</span>, .session = AFB_SESSION_NONE, .callback = volumeStep, .info = <span class="stringliteral">&quot;Set volume step range&quot;</span> },</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160;{ .name = <span class="stringliteral">&quot;setSinkMuteState&quot;</span>, .session = AFB_SESSION_NONE, .callback = setSinkMuteState, .info = <span class="stringliteral">&quot;Set Mute state: 1 means mute, 2 means umute. Others are invalid&quot;</span> },</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160;{ .name = <span class="stringliteral">&quot;getListMainConnections&quot;</span>, .session = AFB_SESSION_NONE, .callback = getListMainConnections, .info = <span class="stringliteral">&quot;Get MainConnection List&quot;</span> },</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160;<span class="comment">/* Routing Interface */</span></div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160;{ .name = <span class="stringliteral">&quot;registerSource&quot;</span>, .session = AFB_SESSION_NONE, .callback = registerSource, .info = <span class="stringliteral">&quot;Register Application&quot;</span> },</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;{ .name = <span class="stringliteral">&quot;deregisterSource&quot;</span>, .session = AFB_SESSION_NONE, .callback = deregisterSource, .info = <span class="stringliteral">&quot;Deregister Application&quot;</span> },</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160;{ .name = <span class="stringliteral">&quot;ackConnect&quot;</span>, .session = AFB_SESSION_NONE, .callback = ackConnect, .info = <span class="stringliteral">&quot;Acknowledge of asyncConnect&quot;</span> },</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160;{ .name = <span class="stringliteral">&quot;ackDisconnect&quot;</span>, .session = AFB_SESSION_NONE, .callback = ackDisconnect, .info = <span class="stringliteral">&quot;Acknowledge of asyncConnect&quot;</span> },</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160;{ .name = <span class="stringliteral">&quot;ackSetSourceState&quot;</span>, .session = AFB_SESSION_NONE, .callback = ackSetSourceState, .info = <span class="stringliteral">&quot;Acknowledge of asyncSetSourceState&quot;</span> },</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160;{ .name = <span class="stringliteral">&quot;subscribe&quot;</span>, .session = AFB_SESSION_NONE, .callback = subscribe, .info = <span class="stringliteral">&quot;Subscribe event&quot;</span> },</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160;{ .name = <span class="stringliteral">&quot;unsubscribe&quot;</span>, .session = AFB_SESSION_NONE, .callback = unsubscribe, .info = <span class="stringliteral">&quot;Unsubscribe event&quot;</span> },</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160;{ .name = NULL } <span class="comment">/* marker for end of the array */</span></div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160;};</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160;</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160;<span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">struct </span>afb_binding binding_description = </div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160;{</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; .type = AFB_BINDING_VERSION_1,</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; .v1 = {</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; .info = <span class="stringliteral">&quot;Sound Manager&quot;</span> ,</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; .prefix = <span class="stringliteral">&quot;soundmanager&quot;</span> ,</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; .verbs = binding_verbs</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; }</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160;};</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160;</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> *dbus_event_loop_run(<span class="keywordtype">void</span> *args)</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160;{</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; loop = g_main_loop_new(NULL, FALSE);</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; g_main_loop_run(loop);</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160;}</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160;</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> free_dbus()</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160;{</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;free dbus&quot;</span>);</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <span class="keywordflow">if</span>(am_cmd_bus)</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; {</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; free(am_cmd_bus);</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; }</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="keywordflow">if</span>(am_route_bus)</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; {</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; free(am_route_bus);</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; }</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160;}</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160;</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> init()</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160;{</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <span class="keywordtype">int</span> ret;</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; INFO(afbitf,<span class="stringliteral">&quot;Initialize Dbus object&quot;</span>);</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="comment">/* Initialize Dbus interface */</span></div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <span class="keywordflow">if</span>(am_cmd_bus || am_route_bus)</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; {</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;Dbus object to Audio Manager is already created&quot;</span>);</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; <span class="keywordflow">goto</span> out;</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; am_cmd_bus = audiomanager_commandinterface_proxy_new_for_bus_sync(</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; G_BUS_TYPE_SYSTEM,</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; G_DBUS_PROXY_FLAGS_NONE,</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; <a class="code" href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461">AM_NAME</a>,</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <a class="code" href="soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291">AM_CMD_PATH</a>,</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; NULL,</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; NULL</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; );</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; am_route_bus = audiomanager_routinginterface_proxy_new_for_bus_sync(</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; G_BUS_TYPE_SYSTEM,</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; G_DBUS_PROXY_FLAGS_NONE,</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <a class="code" href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461">AM_NAME</a>,</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <a class="code" href="soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff">AM_ROUTE_PATH</a>,</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; NULL,</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; NULL</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; );</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="keywordflow">if</span>(!am_cmd_bus || !am_route_bus)</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; {</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="keywordflow">goto</span> out;</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; }</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; INFO(afbitf, <span class="stringliteral">&quot;Finish Initialize&quot;</span>);</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;out:</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; ERROR(afbitf,<span class="stringliteral">&quot;Failed to initialize&quot;</span>);</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; free_dbus();</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;}</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> sm_event_init()</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;{</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; INFO(afbitf,<span class="stringliteral">&quot;Initialize event receive setting&quot;</span>);</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordtype">int</span> ret;</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="comment">/* Initialize make event */</span></div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordtype">size_t</span> size = <span class="keyword">sizeof</span> cmd_evlist / <span class="keyword">sizeof</span> *cmd_evlist;</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="comment">/*create event*/</span></div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="comment">/*ToDo Hash table is better. And event should be created in the loop</span></div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;<span class="comment"> I would like to change */</span></div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; ev_volume_changed = afb_daemon_make_event(afbitf-&gt;daemon, cmd_evlist[0]);</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; ev_new_connection = afb_daemon_make_event(afbitf-&gt;daemon, cmd_evlist[1]);</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; ev_removed_main_connection = afb_daemon_make_event(afbitf-&gt;daemon, cmd_evlist[2]);</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; ev_sink_mute_state_changed = afb_daemon_make_event(afbitf-&gt;daemon, cmd_evlist[3]);</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; ev_main_connection_state_changed = afb_daemon_make_event(afbitf-&gt;daemon, cmd_evlist[4]);</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; command_event_list[0].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = cmd_evlist[0]; </div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; command_event_list[0].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_volume_changed;</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; command_event_list[1].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = cmd_evlist[1]; </div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; command_event_list[1].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_new_connection;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; command_event_list[2].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = cmd_evlist[2]; </div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; command_event_list[2].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_removed_main_connection;</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; command_event_list[3].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = cmd_evlist[3]; </div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; command_event_list[3].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_sink_mute_state_changed;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; command_event_list[4].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = cmd_evlist[4]; </div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; command_event_list[4].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_main_connection_state_changed;</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <span class="comment">/* create routing event */</span></div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; ev_set_routing_ready = afb_daemon_make_event(afbitf-&gt;daemon, route_evlist[0]);</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; ev_set_routing_rundown = afb_daemon_make_event(afbitf-&gt;daemon, route_evlist[1]); </div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; ev_async_connect = afb_daemon_make_event(afbitf-&gt;daemon, route_evlist[2]);</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; ev_async_set_source_state = afb_daemon_make_event(afbitf-&gt;daemon, route_evlist[3]);</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; routing_event_list[0].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = route_evlist[0]; </div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; routing_event_list[0].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_set_routing_ready;</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; routing_event_list[1].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = route_evlist[1]; </div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; routing_event_list[1].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_set_routing_rundown;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; routing_event_list[2].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = route_evlist[1]; </div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; routing_event_list[2].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_async_connect;</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; routing_event_list[3].<a class="code" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a> = route_evlist[1]; </div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; routing_event_list[3].<a class="code" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a> = &amp;ev_async_set_source_state;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="comment">/*for(size_t i = 0; i &lt; size; ++i)</span></div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;<span class="comment"> {</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;<span class="comment"> struct afb_event afbev = afb_daemon_make_event(afbitf-&gt;daemon, cmd_evlist[i]));</span></div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;<span class="comment"> size_t afbev_size = sizeof afbev;</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;<span class="comment"> size_t key_size = sizeof cmd_evlist[i];</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;<span class="comment"></span></div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;<span class="comment"> struct event ev = {cmd_evlist[i],afbev};</span></div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;<span class="comment"> command_event_list[i] = malloc(key_size + afbev_size);</span></div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="comment"> command_event_list[i] = ev;</span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;<span class="comment"> search_result = hsearch(entry, FIND);</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="comment"> if(search_result)</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="comment"> DEBUG(afbitf, &quot;event name is %s&quot;, search_result-&gt;key); </span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;<span class="comment"> }*/</span></div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="comment">/* Initialize dbus event thread */</span></div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <span class="keywordflow">if</span>(!am_cmd_bus || !am_route_bus)</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; {</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">goto</span> ev_init_out;</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; }</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; pthread_t thread_id;</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; ret = pthread_create(&amp;thread_id, NULL, dbus_event_loop_run, NULL);</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keywordflow">if</span>(ret != 0)</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; {</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="keywordflow">goto</span> ev_init_out;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; }</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="comment">/* initialize signal from audio manager command interface */</span></div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; g_signal_connect(am_cmd_bus, </div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="stringliteral">&quot;volume_changed&quot;</span>, </div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; G_CALLBACK(on_volume_changed), </div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; NULL);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; g_signal_connect(am_cmd_bus, </div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="stringliteral">&quot;new_main_connection&quot;</span>, </div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; G_CALLBACK(on_new_main_connection), </div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; NULL);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; g_signal_connect(am_cmd_bus, </div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <span class="stringliteral">&quot;removed_main_connection&quot;</span>, </div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; G_CALLBACK(on_removed_main_connection), </div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; NULL);</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; g_signal_connect(am_cmd_bus, </div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="stringliteral">&quot;sink_mute_state_changed&quot;</span>, </div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; G_CALLBACK(on_sink_mute_state_changed), </div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; NULL);</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; g_signal_connect(am_cmd_bus, </div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="stringliteral">&quot;main_connection_state_changed&quot;</span>, </div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; G_CALLBACK(on_main_connection_state_changed), </div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; NULL);</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; g_signal_connect(am_route_bus, </div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="stringliteral">&quot;set_routing_ready&quot;</span>, </div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; G_CALLBACK(on_set_routing_ready), </div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; NULL);</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; g_signal_connect(am_route_bus, </div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="stringliteral">&quot;set_routing_rundown&quot;</span>, </div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; G_CALLBACK(on_set_routing_rundown), </div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; NULL);</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; <span class="comment">/* Get soundmanager adapter bus */</span></div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; g_bus_own_name(G_BUS_TYPE_SYSTEM, <a class="code" href="soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0">SOUND_MANAGER_NAME</a>, G_BUS_NAME_OWNER_FLAGS_NONE,</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; NULL, init_sound_manager_adapter, NULL, NULL, NULL);</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; INFO(afbitf,<span class="stringliteral">&quot;Finish Initialize event receive setting&quot;</span>);</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;ev_init_out:</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keywordflow">if</span>(loop != NULL)</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; {</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; g_main_loop_unref(loop);</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; }</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; free_dbus();</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; ERROR(afbitf, <span class="stringliteral">&quot;DBus connection is not created&quot;</span>);</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;}</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;<span class="comment"> * activation function for registering the binding called by afb-daemon</span></div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01137"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567"> 1137</a></span>&#160;<span class="keyword">const</span> <span class="keyword">struct </span>afb_binding *<a class="code" href="soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567">afbBindingV1Register</a> (<span class="keyword">const</span> <span class="keyword">struct</span> afb_binding_interface *itf)</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;{</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; afbitf = itf; <span class="comment">// records the interface for accessing afb-daemon</span></div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="keywordtype">int</span> ret = init(); <span class="comment">// Set Dbus communication with audio mangaer</span></div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="keywordflow">return</span> (ret == 0) ? &amp;binding_description : NULL;</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;}</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;</div><div class="line"><a name="l01145"></a><span class="lineno"><a class="line" href="soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d"> 1145</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d">afbBindingV1ServiceInit</a>(<span class="keyword">struct</span> afb_service service)</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;{</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; DEBUG(afbitf, <span class="stringliteral">&quot;Initializing Audio Manager Notification \n&quot;</span>);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keywordtype">int</span> ret = sm_event_init();</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;}</div><div class="ttc" id="structevent_html_a58726ebc551d36562ac3f9e1fe293214"><div class="ttname"><a href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event::event</a></div><div class="ttdeci">struct afb_event * event</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00051">soundmanager.c:51</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_afa98a8b4c63efeb6e209144e7b247291"><div class="ttname"><a href="soundmanager_8c.html#afa98a8b4c63efeb6e209144e7b247291">AM_CMD_PATH</a></div><div class="ttdeci">#define AM_CMD_PATH</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00032">soundmanager.c:32</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_ad25089fbfd55bf795bed283a5b283461"><div class="ttname"><a href="soundmanager_8c.html#ad25089fbfd55bf795bed283a5b283461">AM_NAME</a></div><div class="ttdeci">#define AM_NAME</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00031">soundmanager.c:31</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_a9a50fb496af125690fb276944b3b4cff"><div class="ttname"><a href="soundmanager_8c.html#a9a50fb496af125690fb276944b3b4cff">AM_ROUTE_PATH</a></div><div class="ttdeci">#define AM_ROUTE_PATH</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00033">soundmanager.c:33</a></div></div>
+<div class="ttc" id="structevent_html"><div class="ttname"><a href="structevent.html">event</a></div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00049">soundmanager.c:49</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_a88642b2e51aa08fd18fdfc8017c8d567"><div class="ttname"><a href="soundmanager_8c.html#a88642b2e51aa08fd18fdfc8017c8d567">afbBindingV1Register</a></div><div class="ttdeci">const struct afb_binding * afbBindingV1Register(const struct afb_binding_interface *itf)</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l01137">soundmanager.c:1137</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_aace0247d919659df209ceb7dbeff6a2d"><div class="ttname"><a href="soundmanager_8c.html#aace0247d919659df209ceb7dbeff6a2d">afbBindingV1ServiceInit</a></div><div class="ttdeci">int afbBindingV1ServiceInit(struct afb_service service)</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l01145">soundmanager.c:1145</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_a33d1c40de8a5e7a3d6f0e2f45de9f37f"><div class="ttname"><a href="soundmanager_8c.html#a33d1c40de8a5e7a3d6f0e2f45de9f37f">ROUTING_EVENT_NUM</a></div><div class="ttdeci">#define ROUTING_EVENT_NUM</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00038">soundmanager.c:38</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_a2690d3e2461f5a2f9bb0720d657280da"><div class="ttname"><a href="soundmanager_8c.html#a2690d3e2461f5a2f9bb0720d657280da">SOUND_MANAGER_PATH</a></div><div class="ttdeci">#define SOUND_MANAGER_PATH</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00035">soundmanager.c:35</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_a9b2ae077f774994129a3c231be6703a0"><div class="ttname"><a href="soundmanager_8c.html#a9b2ae077f774994129a3c231be6703a0">SOUND_MANAGER_NAME</a></div><div class="ttdeci">#define SOUND_MANAGER_NAME</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00034">soundmanager.c:34</a></div></div>
+<div class="ttc" id="soundmanager_8c_html_a09f43d9e7e1c5d2198c0d66024b4500e"><div class="ttname"><a href="soundmanager_8c.html#a09f43d9e7e1c5d2198c0d66024b4500e">COMMAND_EVENT_NUM</a></div><div class="ttdeci">#define COMMAND_EVENT_NUM</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00037">soundmanager.c:37</a></div></div>
+<div class="ttc" id="structevent_html_a723489bec273335d13513cd1040c0216"><div class="ttname"><a href="structevent.html#a723489bec273335d13513cd1040c0216">event::name</a></div><div class="ttdeci">char * name</div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00050">soundmanager.c:50</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_85932083476b47061c69d172796990a3.html">soundmanager_binging</a></li><li class="navelem"><a class="el" href="soundmanager_8c.html">soundmanager.c</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/splitbar.png b/doc/api-ref/html/splitbar.png
new file mode 100644
index 0000000..fe895f2
--- /dev/null
+++ b/doc/api-ref/html/splitbar.png
Binary files differ
diff --git a/doc/api-ref/html/structevent.html b/doc/api-ref/html/structevent.html
new file mode 100644
index 0000000..efe2a4d
--- /dev/null
+++ b/doc/api-ref/html/structevent.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: event Struct Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('structevent.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#pub-attribs">Data Fields</a> </div>
+ <div class="headertitle">
+<div class="title">event Struct Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
+Data Fields</h2></td></tr>
+<tr class="memitem:a723489bec273335d13513cd1040c0216"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structevent.html#a723489bec273335d13513cd1040c0216">name</a></td></tr>
+<tr class="separator:a723489bec273335d13513cd1040c0216"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a58726ebc551d36562ac3f9e1fe293214"><td class="memItemLeft" align="right" valign="top">struct afb_event *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structevent.html#a58726ebc551d36562ac3f9e1fe293214">event</a></td></tr>
+<tr class="separator:a58726ebc551d36562ac3f9e1fe293214"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock">
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00049">49</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+</div><h2 class="groupheader">Field Documentation</h2>
+<a id="a58726ebc551d36562ac3f9e1fe293214"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a58726ebc551d36562ac3f9e1fe293214">&#9670;&nbsp;</a></span>event</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">struct afb_event* event::event</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00051">51</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<a id="a723489bec273335d13513cd1040c0216"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a723489bec273335d13513cd1040c0216">&#9670;&nbsp;</a></span>name</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">char* event::name</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="soundmanager_8c_source.html#l00050">50</a> of file <a class="el" href="soundmanager_8c_source.html">soundmanager.c</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this struct was generated from the following file:<ul>
+<li>SoundManagerBinding/soundmanager_binging/<a class="el" href="soundmanager_8c_source.html">soundmanager.c</a></li>
+</ul>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="structevent.html">event</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/structevent.js b/doc/api-ref/html/structevent.js
new file mode 100644
index 0000000..4e71468
--- /dev/null
+++ b/doc/api-ref/html/structevent.js
@@ -0,0 +1,5 @@
+var structevent =
+[
+ [ "event", "structevent.html#a58726ebc551d36562ac3f9e1fe293214", null ],
+ [ "name", "structevent.html#a723489bec273335d13513cd1040c0216", null ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/sync_off.png b/doc/api-ref/html/sync_off.png
new file mode 100644
index 0000000..3b443fc
--- /dev/null
+++ b/doc/api-ref/html/sync_off.png
Binary files differ
diff --git a/doc/api-ref/html/sync_on.png b/doc/api-ref/html/sync_on.png
new file mode 100644
index 0000000..e08320f
--- /dev/null
+++ b/doc/api-ref/html/sync_on.png
Binary files differ
diff --git a/doc/api-ref/html/tab_a.png b/doc/api-ref/html/tab_a.png
new file mode 100644
index 0000000..3b725c4
--- /dev/null
+++ b/doc/api-ref/html/tab_a.png
Binary files differ
diff --git a/doc/api-ref/html/tab_b.png b/doc/api-ref/html/tab_b.png
new file mode 100644
index 0000000..e2b4a86
--- /dev/null
+++ b/doc/api-ref/html/tab_b.png
Binary files differ
diff --git a/doc/api-ref/html/tab_h.png b/doc/api-ref/html/tab_h.png
new file mode 100644
index 0000000..fd5cb70
--- /dev/null
+++ b/doc/api-ref/html/tab_h.png
Binary files differ
diff --git a/doc/api-ref/html/tab_s.png b/doc/api-ref/html/tab_s.png
new file mode 100644
index 0000000..ab478c9
--- /dev/null
+++ b/doc/api-ref/html/tab_s.png
Binary files differ
diff --git a/doc/api-ref/html/tabs.css b/doc/api-ref/html/tabs.css
new file mode 100644
index 0000000..a28614b
--- /dev/null
+++ b/doc/api-ref/html/tabs.css
@@ -0,0 +1 @@
+.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#doc-content{overflow:auto;display:block;padding:0;margin:0;-webkit-overflow-scrolling:touch}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file
diff --git a/doc/api-ref/html/test_8cpp.html b/doc/api-ref/html/test_8cpp.html
new file mode 100644
index 0000000..7d62d1f
--- /dev/null
+++ b/doc/api-ref/html/test_8cpp.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/libsoundmanager/test.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('test_8cpp.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> &#124;
+<a href="#var-members">Variables</a> </div>
+ <div class="headertitle">
+<div class="title">test.cpp File Reference</div> </div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><code>#include &lt;<a class="el" href="libsoundmanager_8hpp_source.html">libsoundmanager/libsoundmanager.hpp</a>&gt;</code><br />
+<code>#include &lt;iostream&gt;</code><br />
+<code>#include &lt;glib-2.0/glib.h&gt;</code><br />
+<code>#include &lt;fcntl.h&gt;</code><br />
+<code>#include &lt;string&gt;</code><br />
+<code>#include &lt;sys/types.h&gt;</code><br />
+<code>#include &lt;sys/stat.h&gt;</code><br />
+<code>#include &lt;thread&gt;</code><br />
+<code>#include &lt;exception&gt;</code><br />
+<code>#include &lt;vector&gt;</code><br />
+<code>#include &lt;sstream&gt;</code><br />
+</div>
+<p><a href="test_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a> (int argc, char **argv)</td></tr>
+<tr class="separator:a3c04138a5bfe5d72780bb7e82a18e627"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr class="memitem:a0cbfe893edb63b7b0c419db013fa9022"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_lib_soundmanager.html">LibSoundmanager</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022">sm</a></td></tr>
+<tr class="separator:a0cbfe893edb63b7b0c419db013fa9022"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Function Documentation</h2>
+<a id="a3c04138a5bfe5d72780bb7e82a18e627"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c04138a5bfe5d72780bb7e82a18e627">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>argc</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char **&#160;</td>
+ <td class="paramname"><em>argv</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="test_8cpp_source.html#l00123">123</a> of file <a class="el" href="test_8cpp_source.html">test.cpp</a>.</p>
+
+</div>
+</div>
+<h2 class="groupheader">Variable Documentation</h2>
+<a id="a0cbfe893edb63b7b0c419db013fa9022"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0cbfe893edb63b7b0c419db013fa9022">&#9670;&nbsp;</a></span>sm</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="class_lib_soundmanager.html">LibSoundmanager</a>* sm</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p class="definition">Definition at line <a class="el" href="test_8cpp_source.html#l00033">33</a> of file <a class="el" href="test_8cpp_source.html">test.cpp</a>.</p>
+
+</div>
+</div>
+</div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html">libsoundmanager</a></li><li class="navelem"><a class="el" href="test_8cpp.html">test.cpp</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/api-ref/html/test_8cpp.js b/doc/api-ref/html/test_8cpp.js
new file mode 100644
index 0000000..2de2e8c
--- /dev/null
+++ b/doc/api-ref/html/test_8cpp.js
@@ -0,0 +1,5 @@
+var test_8cpp =
+[
+ [ "main", "test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627", null ],
+ [ "sm", "test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022", null ]
+]; \ No newline at end of file
diff --git a/doc/api-ref/html/test_8cpp_source.html b/doc/api-ref/html/test_8cpp_source.html
new file mode 100644
index 0000000..bde178d
--- /dev/null
+++ b/doc/api-ref/html/test_8cpp_source.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.13"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>Sound Manager: SoundManagerBinding/libsoundmanager/test.cpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="navtree.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="resize.js"></script>
+<script type="text/javascript" src="navtreedata.js"></script>
+<script type="text/javascript" src="navtree.js"></script>
+<script type="text/javascript">
+ $(document).ready(initResizable);
+</script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+ <td id="projectalign" style="padding-left: 0.5em;">
+ <div id="projectname">Sound Manager
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.13 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<div id="side-nav" class="ui-resizable side-nav-resizable">
+ <div id="nav-tree">
+ <div id="nav-tree-contents">
+ <div id="nav-sync" class="sync"></div>
+ </div>
+ </div>
+ <div id="splitbar" style="-moz-user-select:none;"
+ class="ui-resizable-handle">
+ </div>
+</div>
+<script type="text/javascript">
+$(document).ready(function(){initNavTree('test_8cpp_source.html','');});
+</script>
+<div id="doc-content">
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle">
+<div class="title">test.cpp</div> </div>
+</div><!--header-->
+<div class="contents">
+<a href="test_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (c) 2017 TOYOTA MOTOR CORPORATION</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="libsoundmanager_8hpp.html">libsoundmanager/libsoundmanager.hpp</a>&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;glib-2.0/glib.h&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;fcntl.h&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;sys/stat.h&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;thread&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;exception&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> io_event_callback(sd_event_source *src, <span class="keywordtype">int</span> fd, uint32_t revents, <span class="keywordtype">void</span> *closure);</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">static</span> vector&lt;string&gt; split(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; str, <span class="keywordtype">char</span> sep);</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022"> 33</a></span>&#160;<a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>* <a class="code" href="test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022">sm</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">static</span> sd_event_source *evsrc;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">static</span> GMainLoop *loop = NULL;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> call_test();</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> usage()</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;{</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;verb &quot;</span>&lt;&lt; <span class="stringliteral">&quot;key:arg&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;example: connect sourceID 100 sinkID 100&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;verb list:&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="comment">// Todo output api list</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; exit(0);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;}</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> *event_loop_run(<span class="keywordtype">void</span> *args)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; call_test();</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;}</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="keyword">static</span> <span class="keywordtype">int</span> io_event_callback(sd_event_source *src, <span class="keywordtype">int</span> fd, uint32_t revents, <span class="keywordtype">void</span> *closure)</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;{</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">/* This is for Receiving Thread */</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;}</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> call_test()</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">string</span> command;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;input verb and argments&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">/* read the buffer */</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">for</span>(;;){</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordtype">char</span> line[1023];</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; cin.getline(line, <span class="keyword">sizeof</span>(line));</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; command = line;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">if</span>(command.empty()){</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; }</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; vector&lt;string&gt; v_command = split(command, <span class="charliteral">&#39; &#39;</span>);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">/*for(auto itr = v_command.begin(); itr != v_command.end(); ++itr)</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> {</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"> cout &lt;&lt; *itr &lt;&lt;endl;</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment"> }*/</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordtype">size_t</span> num = v_command.size();</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span>(num % 2 == 0){</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;If command contains args, please input &lt;key,value&gt; in argument part&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">/* create json object */</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">struct </span>json_object* j_obj = json_object_new_object();</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 1;i &lt; (v_command.size()) ;++i){</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">struct </span>json_object* val = json_object_new_string(v_command[i+1].c_str());</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; json_object_object_add(j_obj, v_command[i].c_str(), val);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; ++i;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">/* call verb via libsoundmanager */</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; sm-&gt;<a class="code" href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">call</a>(v_command[0], j_obj);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">/* free vector */</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; vector&lt;string&gt;().swap(v_command);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; string().swap(command);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;}</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> onRep(<span class="keyword">struct</span> json_object* reply_contents)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;{</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* str = json_object_to_json_string(reply_contents);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;[CB onRep]: &quot;</span> &lt;&lt; str &lt;&lt; endl;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; json_object_put(reply_contents);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;}</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="keyword">static</span> <span class="keywordtype">void</span> onEv(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; <a class="code" href="structevent.html">event</a>, <span class="keyword">struct</span> json_object* event_contents)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;{</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* str = json_object_to_json_string(event_contents);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;[CB onEvent]: event&quot;</span> &lt;&lt; <span class="keyword">event</span>.c_str() &lt;&lt; <span class="stringliteral">&quot; contents:&quot;</span> &lt;&lt; str &lt;&lt; endl;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; json_object_put(event_contents);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;}</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword">static</span> vector&lt;string&gt; split(<span class="keyword">const</span> <span class="keywordtype">string</span>&amp; str, <span class="keywordtype">char</span> sep)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;{</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; vector&lt;string&gt; v;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; stringstream ss(str);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordtype">string</span> buffer;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">while</span>( getline(ss, buffer, sep) ) {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">if</span>(!buffer.empty())</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; v.push_back(buffer);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">return</span> v;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;}</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627"> 123</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;{</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordtype">int</span> ret;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">if</span>(argc == 1)</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; printf(<span class="stringliteral">&quot;Please input port num in first argument, and token in second argument&quot;</span>);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; usage();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">if</span>(argc == 2)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordtype">string</span> av(argv[1]);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span>( (av == <span class="stringliteral">&quot;-h&quot;</span>) || (av == <span class="stringliteral">&quot;--help&quot;</span>))</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; usage();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; } </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordtype">string</span> port_string(argv[1]);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordtype">string</span> token(argv[2]);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordtype">char</span>* endptr;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordtype">long</span> port = strtol(port_string.c_str(),&amp;endptr,10);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">/* error check of range */</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span>( (port &gt; 20000) || (port &lt; 0) )</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; printf(<span class="stringliteral">&quot;input under 20000(temporary number)&quot;</span>);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span>(*endptr != <span class="charliteral">&#39;\0&#39;</span>)</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; printf(<span class="stringliteral">&quot;not number&quot;</span>);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; cout &lt;&lt; <span class="stringliteral">&quot;Call test for libsoundmanager&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; sm = <span class="keyword">new</span> <a class="code" href="class_lib_soundmanager.html">LibSoundmanager</a>(port, token); </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; sm-&gt;<a class="code" href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">register_callback</a>(&amp;onEv, &amp;onRep);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; pthread_t thread_id;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; ret = pthread_create(&amp;thread_id, NULL, event_loop_run, NULL);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; sd_event *sloop;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; ret = sd_event_default(&amp;sloop);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (ret &lt; 0) {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; printf(<span class="stringliteral">&quot;failed to create event loop&quot;</span>);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; sd_event_add_io(sloop, &amp;evsrc, 0, EPOLLIN, io_event_callback, NULL);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">for</span>(;;)</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; sd_event_run(sloop, 30000000);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;}</div><div class="ttc" id="structevent_html"><div class="ttname"><a href="structevent.html">event</a></div><div class="ttdef"><b>Definition:</b> <a href="soundmanager_8c_source.html#l00049">soundmanager.c:49</a></div></div>
+<div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a1fe952a4dabbab6126cc23e36c79c773"><div class="ttname"><a href="class_lib_soundmanager.html#a1fe952a4dabbab6126cc23e36c79c773">LibSoundmanager::call</a></div><div class="ttdeci">int call(const std::string &amp;verb, struct json_object *arg)</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00217">libsoundmanager.cpp:217</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html_a560edf9ae3b1e367ad4cbb31c7021d74"><div class="ttname"><a href="class_lib_soundmanager.html#a560edf9ae3b1e367ad4cbb31c7021d74">LibSoundmanager::register_callback</a></div><div class="ttdeci">void register_callback(void(*event_cb)(const std::string &amp;event, struct json_object *event_contents), void(*reply_cb)(struct json_object *reply_contents))</div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8cpp_source.html#l00119">libsoundmanager.cpp:119</a></div></div>
+<div class="ttc" id="test_8cpp_html_a0cbfe893edb63b7b0c419db013fa9022"><div class="ttname"><a href="test_8cpp.html#a0cbfe893edb63b7b0c419db013fa9022">sm</a></div><div class="ttdeci">LibSoundmanager * sm</div><div class="ttdef"><b>Definition:</b> <a href="test_8cpp_source.html#l00033">test.cpp:33</a></div></div>
+<div class="ttc" id="libsoundmanager_8hpp_html"><div class="ttname"><a href="libsoundmanager_8hpp.html">libsoundmanager.hpp</a></div></div>
+<div class="ttc" id="test_8cpp_html_a3c04138a5bfe5d72780bb7e82a18e627"><div class="ttname"><a href="test_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a></div><div class="ttdeci">int main(int argc, char **argv)</div><div class="ttdef"><b>Definition:</b> <a href="test_8cpp_source.html#l00123">test.cpp:123</a></div></div>
+<div class="ttc" id="class_lib_soundmanager_html"><div class="ttname"><a href="class_lib_soundmanager.html">LibSoundmanager</a></div><div class="ttdef"><b>Definition:</b> <a href="libsoundmanager_8hpp_source.html#l00062">libsoundmanager.hpp:62</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+</div><!-- doc-content -->
+<!-- start footer part -->
+<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
+ <ul>
+ <li class="navelem"><a class="el" href="dir_b967abc00200c877344b4504e6cbcf3f.html">SoundManagerBinding</a></li><li class="navelem"><a class="el" href="dir_574c53d22ed4def281d320d129dd43c9.html">libsoundmanager</a></li><li class="navelem"><a class="el" href="test_8cpp.html">test.cpp</a></li>
+ <li class="footer">Generated by
+ <a href="http://www.doxygen.org/index.html">
+ <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
+ </ul>
+</div>
+</body>
+</html>
diff --git a/doc/parts/am-component.png b/doc/parts/am-component.png
new file mode 100644
index 0000000..bf068bb
--- /dev/null
+++ b/doc/parts/am-component.png
Binary files differ
diff --git a/doc/parts/seq_changevolume.svg b/doc/parts/seq_changevolume.svg
new file mode 100644
index 0000000..9f60795
--- /dev/null
+++ b/doc/parts/seq_changevolume.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="788px" preserveAspectRatio="none" style="width:1211px;height:788px;background:#EEEBDC;" version="1.1" viewBox="0 0 1211 788" width="1211px" zoomAndPan="magnify"><defs><filter height="300%" id="fh0kb20fxhbpa" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#EEEBDC" height="766.2969" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="347.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="362" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="766.2969" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="491.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="620.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="766.2969" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="963.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="978" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="185.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="93.9688"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="728.1641"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="223.5" y="114.9688"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="101.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="223.5" y="657.0313"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="121.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="413.5" y="144.1016"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="413.5" y="627.8984"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="568" y="198.2344"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="189.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="709.5" y="237.3672"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="111.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="709.5" y="573.8984"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="841.5" y="534.7656"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1022.5" y="358.3672"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="193.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1022.5" y="505.6328"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="93.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1154.5" y="412.5"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="45" x2="45" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="228" x2="228" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="418.5" x2="418.5" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="572.5" x2="572.5" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="714.5" x2="714.5" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="846.5" x2="846.5" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1027.5" x2="1027.5" y1="83.9688" y2="776.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1159.5" x2="1159.5" y1="83.9688" y2="776.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="8" y="81.1387">Application</text><ellipse cx="45.5" cy="13" fill="#FFFACD" filter="url(#fh0kb20fxhbpa)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M45.5,21 L45.5,48 M32.5,29 L58.5,29 M45.5,48 L32.5,63 M45.5,48 L58.5,63 " fill="#FFFACD" filter="url(#fh0kb20fxhbpa)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="172" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="179" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="351.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="358.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="495.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="502.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="660.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="667.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="778.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="785.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="967.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="974.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1113.5" y="81.1387">Audio Domain</text><ellipse cx="1159.5" cy="13" fill="#FFFACD" filter="url(#fh0kb20fxhbpa)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1159.5,21 L1159.5,48 M1146.5,29 L1172.5,29 M1159.5,48 L1146.5,63 M1159.5,48 L1172.5,63 " fill="#FFFACD" filter="url(#fh0kb20fxhbpa)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="185.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="93.9688"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="728.1641"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="223.5" y="114.9688"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="101.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="223.5" y="657.0313"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="121.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="413.5" y="144.1016"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="413.5" y="627.8984"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="568" y="198.2344"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="189.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="709.5" y="237.3672"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="111.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="709.5" y="573.8984"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="841.5" y="534.7656"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1022.5" y="358.3672"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="193.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1022.5" y="505.6328"/><rect fill="#00FF00" filter="url(#fh0kb20fxhbpa)" height="93.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1154.5" y="412.5"/><polygon fill="#000000" points="211.5,110.9688,221.5,114.9688,211.5,118.9688,215.5,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="50.5" x2="217.5" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="81" x="57.5" y="110.0356">SetVolume()</text><polygon fill="#000000" points="401.5,140.1016,411.5,144.1016,401.5,148.1016,405.5,144.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="233.5" x2="407.5" y1="144.1016" y2="144.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="81" x="240.5" y="139.1685">SetVolume()</text><polygon fill="#000000" points="556,194.2344,566,198.2344,556,202.2344,560,198.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="423.5" x2="562" y1="198.2344" y2="198.2344"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="81" x="430.5" y="193.3013">SetVolume()</text><polygon fill="#000000" points="697.5,233.3672,707.5,237.3672,697.5,241.3672,701.5,237.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="578" x2="703.5" y1="237.3672" y2="237.3672"/><polygon fill="#000000" points="434.5,247.3672,424.5,251.3672,434.5,255.3672,430.5,251.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="428.5" x2="572" y1="251.3672" y2="251.3672"/><polygon fill="#000000" points="244.5,261.3672,234.5,265.3672,244.5,269.3672,240.5,265.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="238.5" x2="417.5" y1="265.3672" y2="265.3672"/><polygon fill="#000000" points="56.5,275.3672,46.5,279.3672,56.5,283.3672,52.5,279.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="50.5" x2="227.5" y1="279.3672" y2="279.3672"/><polygon fill="#000000" points="1010.5,354.3672,1020.5,358.3672,1010.5,362.3672,1014.5,358.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="719.5" x2="1016.5" y1="358.3672" y2="358.3672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="726.5" y="353.4341">asyncSetSinkVolume()</text><polygon fill="#000000" points="1142.5,408.5,1152.5,412.5,1142.5,416.5,1146.5,412.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1032.5" x2="1148.5" y1="412.5" y2="412.5"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="81" x="1039.5" y="407.5669">SetVolume()</text><polygon fill="#000000" points="725.5,422.6328,715.5,426.6328,725.5,430.6328,721.5,426.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="719.5" x2="1026.5" y1="426.6328" y2="426.6328"/><polygon fill="#000000" points="1043.5,501.6328,1033.5,505.6328,1043.5,509.6328,1039.5,505.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1037.5" x2="1158.5" y1="505.6328" y2="505.6328"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="103" x="1049.5" y="500.6997">ackSetVolume()</text><polygon fill="#000000" points="862.5,530.7656,852.5,534.7656,862.5,538.7656,858.5,534.7656" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="856.5" x2="1021.5" y1="534.7656" y2="534.7656"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="152" x="868.5" y="529.8325">ackSetVolumeChange()</text><polygon fill="#000000" points="730.5,569.8984,720.5,573.8984,730.5,577.8984,726.5,573.8984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="724.5" x2="840.5" y1="573.8984" y2="573.8984"/><polygon fill="#000000" points="434.5,623.8984,424.5,627.8984,434.5,631.8984,430.5,627.8984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="428.5" x2="708.5" y1="627.8984" y2="627.8984"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="121" x="440.5" y="622.9653">cbVolumeChanged</text><polygon fill="#000000" points="244.5,653.0313,234.5,657.0313,244.5,661.0313,240.5,657.0313" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="238.5" x2="412.5" y1="657.0313" y2="657.0313"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="161" x="250.5" y="652.0981">signal("volumeChanged")</text><polygon fill="#000000" points="697.5,667.1641,707.5,671.1641,697.5,675.1641,701.5,671.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="418.5" x2="703.5" y1="671.1641" y2="671.1641"/><polygon fill="#000000" points="829.5,681.1641,839.5,685.1641,829.5,689.1641,833.5,685.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="714.5" x2="835.5" y1="685.1641" y2="685.1641"/><polygon fill="#000000" points="1015.5,695.1641,1025.5,699.1641,1015.5,703.1641,1019.5,699.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="846.5" x2="1021.5" y1="699.1641" y2="699.1641"/><polygon fill="#000000" points="61.5,724.1641,51.5,728.1641,61.5,732.1641,57.5,728.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="55.5" x2="222.5" y1="728.1641" y2="728.1641"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="154" x="67.5" y="723.231">event [volumeChanged]</text><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+
+activate AP #00ff00
+AP -> SM : SetVolume()
+activate SM #00ff00
+SM -> CS : SetVolume()
+activate CS #00ff00
+|||
+CS -> CR : SetVolume()
+activate CR #00ff00
+|||
+CR -> AM
+activate AM #00ff00
+
+CR - -> CS
+deactivate CR
+CS- ->SM
+deactivate CS
+SM- ->AP
+deactivate SM
+deactivate AP
+
+|||
+|||
+AM -> RS : asyncSetSinkVolume()
+activate RS #00ff00
+|||
+RS -> AD : SetVolume()
+activate AD #00ff00
+RS - -> AM
+deactivate RS
+deactivate AM
+|||
+|||
+AD -> RS : ackSetVolume()
+deactivate AD
+activate RS #00ff00
+
+RS -> RR : ackSetVolumeChange()
+activate RR #00ff00
+|||
+RR -> AM
+activate AM #00ff00
+|||
+AM -> CS : cbVolumeChanged
+activate CS #00ff00
+CS -> SM : signal("volumeChanged")
+activate SM #00ff00
+CS- ->AM
+deactivate CS
+AM- ->RR
+deactivate AM
+RR- ->RS
+deactivate RR
+deactivate RS
+SM -> AP : event [volumeChanged]
+activate AP #00ff00
+deactivate SM
+deactivate AP
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_connectsoundroute.svg b/doc/parts/seq_connectsoundroute.svg
new file mode 100644
index 0000000..a3c392a
--- /dev/null
+++ b/doc/parts/seq_connectsoundroute.svg
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1126px" preserveAspectRatio="none" style="width:1371px;height:1126px;background:#EEEBDC;" version="1.1" viewBox="0 0 1371 1126" width="1371px" zoomAndPan="magnify"><defs><filter height="300%" id="f1jw437lb3978k" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#EEEBDC" height="1104.0859" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="475.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="490" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="1104.0859" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="619.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="748.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="1104.0859" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="1048.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1063" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="232.5"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="925.5547"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="284.5" y="174.2344"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="199.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="284.5" y="896.4219"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="541.5" y="129.9688"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="39.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="541.5" y="1042.8203"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="349.8594" style="stroke: #404040; stroke-width: 1.0;" width="10" x="837.5" y="129.9688"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="402.8594" style="stroke: #404040; stroke-width: 1.0;" width="10" x="837.5" y="679.2266"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="969.5" y="640.0938"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="73.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="406.5625"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="112.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="580.9609"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="247.4609" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="722.2266"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="97.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="998.6875"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1236.5" y="435.6953"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="131.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1236.5" y="479.8281"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1241.5" y="516.8281"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="45" x2="45" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="289" x2="289" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="546.5" x2="546.5" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="700.5" x2="700.5" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="842.5" x2="842.5" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="974.5" x2="974.5" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1112.5" x2="1112.5" y1="83.9688" y2="1114.0859"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1241.5" x2="1241.5" y1="83.9688" y2="1114.0859"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="8" y="81.1387">Application</text><ellipse cx="45.5" cy="13" fill="#FFFACD" filter="url(#f1jw437lb3978k)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M45.5,21 L45.5,48 M32.5,29 L58.5,29 M45.5,48 L32.5,63 M45.5,48 L58.5,63 " fill="#FFFACD" filter="url(#f1jw437lb3978k)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="233" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="240" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="479.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="486.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="623.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="630.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="788.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="795.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="906.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="913.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="1052.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1059.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1195.5" y="81.1387">Audio Domain</text><ellipse cx="1241.5" cy="13" fill="#FFFACD" filter="url(#f1jw437lb3978k)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1241.5,21 L1241.5,48 M1228.5,29 L1254.5,29 M1241.5,48 L1228.5,63 M1241.5,48 L1254.5,63 " fill="#FFFACD" filter="url(#f1jw437lb3978k)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="232.5"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="925.5547"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="284.5" y="174.2344"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="199.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="284.5" y="896.4219"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="541.5" y="129.9688"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="39.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="541.5" y="1042.8203"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="349.8594" style="stroke: #404040; stroke-width: 1.0;" width="10" x="837.5" y="129.9688"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="402.8594" style="stroke: #404040; stroke-width: 1.0;" width="10" x="837.5" y="679.2266"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="969.5" y="640.0938"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="73.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="406.5625"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="112.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="580.9609"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="247.4609" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="722.2266"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="97.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1107.5" y="998.6875"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1236.5" y="435.6953"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="131.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1236.5" y="479.8281"/><rect fill="#00FF00" filter="url(#f1jw437lb3978k)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1241.5" y="516.8281"/><polygon fill="#000000" points="562.5,125.9688,552.5,129.9688,562.5,133.9688,558.5,129.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="556.5" x2="836.5" y1="129.9688" y2="129.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="214" x="568.5" y="110.0356">cbMainConnectionStateChanged(</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="116" x="592.5" y="125.1685">CS_CONNECTING)</text><polygon fill="#000000" points="305.5,170.2344,295.5,174.2344,305.5,178.2344,301.5,174.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="299.5" x2="540.5" y1="174.2344" y2="174.2344"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="228" x="311.5" y="154.3013">signal("MmainConnectionChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="116" x="331.5" y="169.4341">CS_CONECTING)")</text><polygon fill="#000000" points="825.5,184.5,835.5,188.5,825.5,192.5,829.5,188.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="546.5" x2="831.5" y1="188.5" y2="188.5"/><polygon fill="#000000" points="61.5,228.5,51.5,232.5,61.5,236.5,57.5,232.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="55.5" x2="283.5" y1="232.5" y2="232.5"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="215" x="67.5" y="212.5669">event [mainConnectionChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="111" x="87.5" y="227.6997">CS_CONECTING)]</text><polygon fill="#FBFB77" filter="url(#f1jw437lb3978k)" points="979,275.7656,979,375.7656,1303,375.7656,1303,285.7656,1293,275.7656,979,275.7656" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1293" x2="1293" y1="275.7656" y2="285.7656"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1303" x2="1293" y1="285.7656" y2="285.7656"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="252" x="985" y="292.8325">Audio Manager Policy decides this main</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="223" x="985" y="307.9653">connection have to be established.</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="287" x="985" y="323.0981">At the beginning of sequence Audio Manager</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="300" x="985" y="338.231">should inform cbMainConnectionStateChanged</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="303" x="985" y="353.3638">(CS_CONNECTING) to indicated pre-information</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="111" x="985" y="368.4966">of establishment.</text><polygon fill="#000000" points="1095.5,402.5625,1105.5,406.5625,1095.5,410.5625,1099.5,406.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="847.5" x2="1101.5" y1="406.5625" y2="406.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="100" x="854.5" y="401.6294">asyncConnect()</text><polygon fill="#000000" points="1224.5,431.6953,1234.5,435.6953,1224.5,439.6953,1228.5,435.6953" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1117.5" x2="1230.5" y1="435.6953" y2="435.6953"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="100" x="1124.5" y="430.7622">asyncConnect()</text><polygon fill="#000000" points="853.5,475.8281,843.5,479.8281,853.5,483.8281,849.5,479.8281" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="847.5" x2="1111.5" y1="479.8281" y2="479.8281"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1251.5" x2="1293.5" y1="508.9609" y2="508.9609"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1293.5" x2="1293.5" y1="508.9609" y2="521.9609"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1252.5" x2="1293.5" y1="521.9609" y2="521.9609"/><polygon fill="#000000" points="1262.5,517.9609,1252.5,521.9609,1262.5,525.9609,1258.5,521.9609" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="101" x="1258.5" y="503.895">setAudioMode()</text><polygon fill="#000000" points="1128.5,576.9609,1118.5,580.9609,1128.5,584.9609,1124.5,580.9609" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1122.5" x2="1235.5" y1="580.9609" y2="580.9609"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="85" x="1134.5" y="576.0278">ackConnect()</text><polygon fill="#000000" points="990.5,636.0938,980.5,640.0938,990.5,644.0938,986.5,640.0938" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="984.5" x2="1106.5" y1="640.0938" y2="640.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="85" x="996.5" y="635.1606">ackConnect()</text><polygon fill="#000000" points="858.5,675.2266,848.5,679.2266,858.5,683.2266,854.5,679.2266" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="852.5" x2="968.5" y1="679.2266" y2="679.2266"/><polygon fill="#000000" points="1100.5,689.2266,1110.5,693.2266,1100.5,697.2266,1104.5,693.2266" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="974.5" x2="1106.5" y1="693.2266" y2="693.2266"/><polygon fill="#000000" points="1095.5,718.2266,1105.5,722.2266,1095.5,726.2266,1099.5,722.2266" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="847.5" x2="1101.5" y1="722.2266" y2="722.2266"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="100" x="854.5" y="717.2935">asyncConnect()</text><polygon fill="#FBFB77" filter="url(#f1jw437lb3978k)" points="335,735.3594,335,866.3594,692,866.3594,692,745.3594,682,735.3594,335,735.3594" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="682" x2="682" y1="735.3594" y2="745.3594"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="692" x2="682" y1="745.3594" y2="745.3594"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="288" x="341" y="752.4263">Audio Manager have to know that Application</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="295" x="341" y="767.5591">certainly start preparing sound route, and wait</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="285" x="341" y="782.6919">proceeding until Application return feedback.</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="333" x="341" y="797.8247">Main reason is to make sure that entire sound route</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="313" x="341" y="812.9575">is established before connection state transite to</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="336" x="341" y="828.0903">next phase. Otherwise it is possible for Application to</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="333" x="341" y="843.2231">face the problem that ALSA virtual device cannot be</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="270" x="341" y="858.356">opened after connection state is changed.</text><polygon fill="#000000" points="305.5,892.4219,295.5,896.4219,305.5,900.4219,301.5,896.4219" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="299.5" x2="1106.5" y1="896.4219" y2="896.4219"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="100" x="311.5" y="891.4888">asyncConnect()</text><polygon fill="#000000" points="61.5,921.5547,51.5,925.5547,61.5,929.5547,57.5,925.5547" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="55.5" x2="283.5" y1="925.5547" y2="925.5547"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="140" x="67.5" y="920.6216">event [asyncConnect]</text><polygon fill="#000000" points="858.5,965.6875,848.5,969.6875,858.5,973.6875,854.5,969.6875" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="852.5" x2="1111.5" y1="969.6875" y2="969.6875"/><polygon fill="#000000" points="1095.5,994.6875,1105.5,998.6875,1095.5,1002.6875,1099.5,998.6875" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="294.5" x2="1101.5" y1="998.6875" y2="998.6875"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="85" x="301.5" y="993.7544">ackConnect()</text><polygon fill="#000000" points="562.5,1038.8203,552.5,1042.8203,562.5,1046.8203,558.5,1042.8203" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="556.5" x2="836.5" y1="1042.8203" y2="1042.8203"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="214" x="568.5" y="1022.8872">cbMainConnectionStateChanged(</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="112" x="584.5" y="1038.02">CS_SUSPENDED)</text><polygon fill="#000000" points="830.5,1078.0859,840.5,1082.0859,830.5,1086.0859,834.5,1082.0859" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="546.5" x2="836.5" y1="1082.0859" y2="1082.0859"/><polygon fill="#000000" points="300.5,1092.0859,290.5,1096.0859,300.5,1100.0859,296.5,1096.0859" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="294.5" x2="1111.5" y1="1096.0859" y2="1096.0859"/><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+AM -> CS : cbMainConnectionStateChanged(\n CS_CONNECTING)
+activate AM #00FF00
+activate CS #00FF00
+
+CS -> SM : signal("MmainConnectionChanged (\n CS_CONECTING)")
+activate SM #00FF00
+CS - -> AM
+deactivate CS
+SM -> AP : event [mainConnectionChanged (\n CS_CONECTING)]
+activate AP #00FF00
+deactivate SM
+
+deactivate AP
+
+
+note right of RR
+ Audio Manager Policy decides this main
+ connection have to be established.
+ At the beginning of sequence Audio Manager
+ should inform cbMainConnectionStateChanged
+ (CS_CONNECTING) to indicated pre-information
+ of establishment.
+end note
+
+AM -> RS : asyncConnect()
+activate RS #00FF00
+
+RS-> AD : asyncConnect()
+
+activate AD #00FF00
+deactivate AD
+RS - -> AM
+deactivate RS
+deactivate AM
+
+activate AD #00FF00
+AD -> AD : setAudioMode()
+activate AD #00FF00
+deactivate AD
+AD -> RS : ackConnect()
+activate RS #00FF00
+deactivate AD
+
+RS -> RR : ackConnect()
+activate RR #00FF00
+|||
+RR -> AM
+activate AM #00FF00
+
+RR - -> RS
+deactivate RR
+deactivate RS
+
+AM -> RS : asyncConnect()
+activate RS #00FF00
+
+note left of CR
+ Audio Manager have to know that Application
+ certainly start preparing sound route, and wait
+ proceeding until Application return feedback.
+ Main reason is to make sure that entire sound route
+ is established before connection state transite to
+ next phase. Otherwise it is possible for Application to
+ face the problem that ALSA virtual device cannot be
+ opened after connection state is changed.
+end note
+
+RS -> SM : asyncConnect()
+activate SM #00FF00
+SM -> AP : event [asyncConnect]
+activate AP #00FF00
+deactivate AP
+RS - -> AM
+deactivate RS
+SM -> RS : ackConnect()
+activate RS #00FF00
+
+AM -> CS : cbMainConnectionStateChanged(\n CS_SUSPENDED)
+activate CS #00FF00
+|||
+CS - -> AM
+deactivate CS
+deactivate AM
+RS- ->SM
+deactivate RS
+deactivate SM
+@enduml
+
+PlantUML version 1.2017.16beta5(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_disconnectsoundroute.svg b/doc/parts/seq_disconnectsoundroute.svg
new file mode 100644
index 0000000..9036aca
--- /dev/null
+++ b/doc/parts/seq_disconnectsoundroute.svg
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="843px" preserveAspectRatio="none" style="width:1187px;height:843px;background:#EEEBDC;" version="1.1" viewBox="0 0 1187 843" width="1187px" zoomAndPan="magnify"><defs><filter height="300%" id="f190eucmp65hi5" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#EEEBDC" height="821.4297" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="295" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="309.5" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="821.4297" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="439" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="568" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="821.4297" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="868" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="882.5" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="198.2344"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="227.5" y="169.1016"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="39.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="361" y="774.1641"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="396.9297" style="stroke: #404040; stroke-width: 1.0;" width="10" x="657" y="114.9688"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="122.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="657" y="691.1641"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="789" y="311.5"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="789" y="652.0313"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="396.9297" style="stroke: #404040; stroke-width: 1.0;" width="10" x="927" y="114.9688"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="107.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="927" y="598.0313"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="100.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1074" y="497.7656"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1079" y="548.8984"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="45" x2="45" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="232" x2="232" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="366" x2="366" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="520" x2="520" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="662" x2="662" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="794" x2="794" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="932" x2="932" y1="83.9688" y2="831.4297"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1079" x2="1079" y1="83.9688" y2="831.4297"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="8" y="81.1387">Application</text><ellipse cx="45.5" cy="13" fill="#FFFACD" filter="url(#f190eucmp65hi5)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M45.5,21 L45.5,48 M32.5,29 L58.5,29 M45.5,48 L32.5,63 M45.5,48 L58.5,63 " fill="#FFFACD" filter="url(#f190eucmp65hi5)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="176" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="183" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="299" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="306" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="443" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="450" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="608" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="615" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="726" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="733" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="872" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="879" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1033" y="81.1387">Audio Domain</text><ellipse cx="1079" cy="13" fill="#FFFACD" filter="url(#f190eucmp65hi5)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1079,21 L1079,48 M1066,29 L1092,29 M1079,48 L1066,63 M1079,48 L1092,63 " fill="#FFFACD" filter="url(#f190eucmp65hi5)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="198.2344"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="227.5" y="169.1016"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="39.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="361" y="774.1641"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="396.9297" style="stroke: #404040; stroke-width: 1.0;" width="10" x="657" y="114.9688"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="122.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="657" y="691.1641"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="789" y="311.5"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="789" y="652.0313"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="396.9297" style="stroke: #404040; stroke-width: 1.0;" width="10" x="927" y="114.9688"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="107.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="927" y="598.0313"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="100.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1074" y="497.7656"/><rect fill="#00FF00" filter="url(#f190eucmp65hi5)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1079" y="548.8984"/><polygon fill="#000000" points="915,110.9688,925,114.9688,915,118.9688,919,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="667" x2="921" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="118" x="674" y="110.0356">asyncDisconnect()</text><polygon fill="#000000" points="248.5,165.1016,238.5,169.1016,248.5,173.1016,244.5,169.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="242.5" x2="926" y1="169.1016" y2="169.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="118" x="254.5" y="164.1685">asyncDisconnect()</text><polygon fill="#000000" points="61.5,194.2344,51.5,198.2344,61.5,202.2344,57.5,198.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="55.5" x2="226.5" y1="198.2344" y2="198.2344"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="158" x="67.5" y="193.3013">event [asyncDisconnect]</text><polygon fill="#000000" points="915,253.3672,925,257.3672,915,261.3672,919,257.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="232.5" x2="921" y1="257.3672" y2="257.3672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="103" x="239.5" y="252.4341">ackDisconnect()</text><polygon fill="#000000" points="810,307.5,800,311.5,810,315.5,806,311.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="804" x2="926" y1="311.5" y2="311.5"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="103" x="816" y="306.5669">ackDisconnect()</text><polygon fill="#000000" points="678,346.6328,668,350.6328,678,354.6328,674,350.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="672" x2="788" y1="350.6328" y2="350.6328"/><polygon fill="#000000" points="915,360.6328,925,364.6328,915,368.6328,919,364.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="794" x2="921" y1="364.6328" y2="364.6328"/><polygon fill="#000000" points="915,439.6328,925,443.6328,915,447.6328,919,443.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="667" x2="921" y1="443.6328" y2="443.6328"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="118" x="674" y="438.6997">asyncDisconnect()</text><polygon fill="#000000" points="1062,493.7656,1072,497.7656,1062,501.7656,1066,497.7656" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="937" x2="1068" y1="497.7656" y2="497.7656"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="118" x="944" y="492.8325">asyncDisconnect()</text><polygon fill="#000000" points="673,507.8984,663,511.8984,673,515.8984,669,511.8984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="667" x2="931" y1="511.8984" y2="511.8984"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1089" x2="1131" y1="541.0313" y2="541.0313"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1131" x2="1131" y1="541.0313" y2="554.0313"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1090" x2="1131" y1="554.0313" y2="554.0313"/><polygon fill="#000000" points="1100,550.0313,1090,554.0313,1100,558.0313,1096,554.0313" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="79" x="1096" y="535.9653">disconnect()</text><polygon fill="#000000" points="948,594.0313,938,598.0313,948,602.0313,944,598.0313" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="942" x2="1078" y1="598.0313" y2="598.0313"/><polygon fill="#000000" points="810,648.0313,800,652.0313,810,656.0313,806,652.0313" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="804" x2="926" y1="652.0313" y2="652.0313"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="103" x="816" y="647.0981">ackDisconnect()</text><polygon fill="#000000" points="678,687.1641,668,691.1641,678,695.1641,674,691.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="672" x2="788" y1="691.1641" y2="691.1641"/><polygon fill="#000000" points="920,701.1641,930,705.1641,920,709.1641,924,705.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="794" x2="926" y1="705.1641" y2="705.1641"/><polygon fill="#000000" points="382,770.1641,372,774.1641,382,778.1641,378,774.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="376" x2="656" y1="774.1641" y2="774.1641"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="214" x="388" y="754.231">cbMainConnectionStateChanged(</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="133" x="480" y="769.3638">CS_DISCONNECTED)</text><polygon fill="#000000" points="650,809.4297,660,813.4297,650,817.4297,654,813.4297" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="366" x2="656" y1="813.4297" y2="813.4297"/><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+
+AM -> RS : asyncDisconnect()
+activate AM #00ff00
+activate RS #00ff00
+|||
+RS -> SM : asyncDisconnect()
+activate SM #00ff00
+SM -> AP : event [asyncDisconnect]
+activate AP #00ff00
+deactivate AP
+SM -> RS : ackDisconnect()
+deactivate SM
+|||
+RS -> RR : ackDisconnect()
+activate RR #00ff00
+|||
+RR -> AM
+RR- ->RS
+deactivate RR
+|||
+|||
+AM -> RS : asyncDisconnect()
+|||
+RS -> AD : asyncDisconnect()
+activate AD #00ff00
+RS - -> AM
+deactivate RS
+deactivate AM
+
+AD -> AD : disconnect()
+activate AD #00ff00
+deactivate AD
+AD -> RS
+deactivate AD
+activate RS #00ff00
+|||
+RS -> RR : ackDisconnect()
+activate RR #00ff00
+|||
+RR->AM
+activate AM #00ff00
+RR - -> RS
+deactivate RR
+deactivate RS
+|||
+AM->CS : cbMainConnectionStateChanged(\n CS_DISCONNECTED)
+activate CS #00ff00
+|||
+CS - -> AM
+deactivate CS
+deactivate AM
+@enduml
+
+PlantUML version 1.2017.16beta5(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_initialization.svg b/doc/parts/seq_initialization.svg
new file mode 100644
index 0000000..18cc0bb
--- /dev/null
+++ b/doc/parts/seq_initialization.svg
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="992px" preserveAspectRatio="none" style="width:1276px;height:992px;background:#EEEBDC;" version="1.1" viewBox="0 0 1276 992" width="1276px" zoomAndPan="magnify"><defs><filter height="300%" id="f1dii61ex93pkt" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#EEEBDC" height="970.2031" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="328" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="342.5" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="970.2031" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="505.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="634.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="970.2031" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="970.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="985" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="264.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="442.4063"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="29.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="260.5" y="413.2734"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="196.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="260.5" y="510.5391"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="64.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="394" y="735.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="394" y="854.0703"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="582" y="854.0703"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="343.6016" style="stroke: #404040; stroke-width: 1.0;" width="10" x="723.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="135.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="723.5" y="664.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="723.5" y="893.2031"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="855.5" y="625.8047"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="93.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="260.2031"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="122.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="359.1406"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="153.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="539.6719"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="98.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1203.5" y="192.0703"/><rect fill="#EEEBDC" filter="url(#f1dii61ex93pkt)" height="471.8359" style="stroke: #000000; stroke-width: 2.0;" width="1251.5" x="13" y="100.9688"/><rect fill="#EEEBDC" height="249.4688" style="stroke: none; stroke-width: 1.0;" width="1251.5" x="13" y="323.3359"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="60" x2="60" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="265" x2="265" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="399" x2="399" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="586.5" x2="586.5" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="728.5" x2="728.5" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="860.5" x2="860.5" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1034.5" x2="1034.5" y1="83.9688" y2="980.2031"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1208.5" x2="1208.5" y1="83.9688" y2="980.2031"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="23" y="81.1387">Application</text><ellipse cx="60.5" cy="13" fill="#FFFACD" filter="url(#f1dii61ex93pkt)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M60.5,21 L60.5,48 M47.5,29 L73.5,29 M60.5,48 L47.5,63 M60.5,48 L73.5,63 " fill="#FFFACD" filter="url(#f1dii61ex93pkt)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="209" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="216" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="332" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="339" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="509.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="516.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="674.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="681.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="792.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="799.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="974.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="981.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1162.5" y="81.1387">Audio Domain</text><ellipse cx="1208.5" cy="13" fill="#FFFACD" filter="url(#f1dii61ex93pkt)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1208.5,21 L1208.5,48 M1195.5,29 L1221.5,29 M1208.5,48 L1195.5,63 M1208.5,48 L1221.5,63 " fill="#FFFACD" filter="url(#f1dii61ex93pkt)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="264.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="442.4063"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="29.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="260.5" y="413.2734"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="196.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="260.5" y="510.5391"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="64.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="394" y="735.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="394" y="854.0703"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="582" y="854.0703"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="343.6016" style="stroke: #404040; stroke-width: 1.0;" width="10" x="723.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="135.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="723.5" y="664.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="723.5" y="893.2031"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="855.5" y="625.8047"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="93.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="260.2031"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="122.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="359.1406"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="153.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1029.5" y="539.6719"/><rect fill="#00FF00" filter="url(#f1dii61ex93pkt)" height="98.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1203.5" y="192.0703"/><rect fill="none" height="471.8359" style="stroke: #000000; stroke-width: 2.0;" width="1251.5" x="13" y="100.9688"/><polygon fill="#EEEEEE" points="13,100.9688,77,100.9688,77,105.9688,67,115.9688,13,115.9688,13,100.9688" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="28" y="113.1074">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="196" x="92" y="113.1792">[Domain Type = DSP/Amplifier]</text><polygon fill="#000000" points="1017.5,133.9375,1027.5,137.9375,1017.5,141.9375,1021.5,137.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="733.5" x2="1023.5" y1="137.9375" y2="137.9375"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="740.5" y="133.0044">setRoutingReady()</text><polygon fill="#000000" points="1191.5,188.0703,1201.5,192.0703,1191.5,196.0703,1195.5,192.0703" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1039.5" x2="1197.5" y1="192.0703" y2="192.0703"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="1046.5" y="187.1372">setRoutingReady()</text><polygon fill="#000000" points="744.5,227.2031,734.5,231.2031,744.5,235.2031,740.5,231.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="738.5" x2="1033.5" y1="231.2031" y2="231.2031"/><polygon fill="#000000" points="1050.5,256.2031,1040.5,260.2031,1050.5,264.2031,1046.5,260.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1044.5" x2="1202.5" y1="260.2031" y2="260.2031"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="1056.5" y="255.27">confirmRoutingReady()</text><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="13" x2="1264.5" y1="324.3359" y2="324.3359"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="182" x="18" y="334.5464">[Domain Type = Application]</text><polygon fill="#000000" points="1017.5,355.1406,1027.5,359.1406,1017.5,363.1406,1021.5,359.1406" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="733.5" x2="1023.5" y1="359.1406" y2="359.1406"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="740.5" y="354.2075">setRoutingReady()</text><polygon fill="#000000" points="281.5,409.2734,271.5,413.2734,281.5,417.2734,277.5,413.2734" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="275.5" x2="1028.5" y1="413.2734" y2="413.2734"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="164" x="287.5" y="408.3403">signal("setRoutingReady")</text><polygon fill="#000000" points="76.5,438.4063,66.5,442.4063,76.5,446.4063,72.5,442.4063" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="70.5" x2="264.5" y1="442.4063" y2="442.4063"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="157" x="82.5" y="437.4731">event [setRoutingReady]</text><polygon fill="#000000" points="739.5,477.5391,729.5,481.5391,739.5,485.5391,735.5,481.5391" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="733.5" x2="1033.5" y1="481.5391" y2="481.5391"/><polygon fill="#000000" points="248.5,506.5391,258.5,510.5391,248.5,514.5391,252.5,510.5391" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="65.5" x2="254.5" y1="510.5391" y2="510.5391"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="176" x="72.5" y="505.606">call("confirmRoutingReady")</text><polygon fill="#000000" points="1017.5,535.6719,1027.5,539.6719,1017.5,543.6719,1021.5,539.6719" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="270.5" x2="1023.5" y1="539.6719" y2="539.6719"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="277.5" y="534.7388">confirmRoutingReady()</text><polygon fill="#000000" points="876.5,621.8047,866.5,625.8047,876.5,629.8047,872.5,625.8047" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="870.5" x2="1028.5" y1="625.8047" y2="625.8047"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="882.5" y="620.8716">confirmRoutingReady()</text><polygon fill="#000000" points="744.5,660.9375,734.5,664.9375,744.5,668.9375,740.5,664.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="738.5" x2="854.5" y1="664.9375" y2="664.9375"/><polygon fill="#000000" points="1017.5,674.9375,1027.5,678.9375,1017.5,682.9375,1021.5,678.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="860.5" x2="1023.5" y1="678.9375" y2="678.9375"/><polygon fill="#000000" points="281.5,688.9375,271.5,692.9375,281.5,696.9375,277.5,692.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="275.5" x2="1033.5" y1="692.9375" y2="692.9375"/><polygon fill="#000000" points="71.5,702.9375,61.5,706.9375,71.5,710.9375,67.5,706.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="65.5" x2="264.5" y1="706.9375" y2="706.9375"/><polygon fill="#000000" points="415,731.9375,405,735.9375,415,739.9375,411,735.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="409" x2="722.5" y1="735.9375" y2="735.9375"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="136" x="421" y="731.0044">setCommandReady()</text><polygon fill="#000000" points="716.5,796.0703,726.5,800.0703,716.5,804.0703,720.5,800.0703" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="399" x2="722.5" y1="800.0703" y2="800.0703"/><polygon fill="#000000" points="570,850.0703,580,854.0703,570,858.0703,574,854.0703" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="404" x2="576" y1="854.0703" y2="854.0703"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="164" x="411" y="849.1372">confirmCommandReady()</text><polygon fill="#000000" points="711.5,889.2031,721.5,893.2031,711.5,897.2031,715.5,893.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="592" x2="717.5" y1="893.2031" y2="893.2031"/><polygon fill="#000000" points="410,958.2031,400,962.2031,410,966.2031,406,962.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="404" x2="586" y1="962.2031" y2="962.2031"/><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application
+participant SoundManager
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver
+ participant AudioManager
+ participant IAmRoutingReceive
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend
+end box
+actor "Audio Domain"
+
+alt Domain Type = DSP/Amplifier
+ AudioManager -> IAmRoutingSend : setRoutingReady()
+ activate AudioManager #00FF00
+ activate IAmRoutingSend #00FF00
+ |||
+ IAmRoutingSend -> "Audio Domain" : setRoutingReady()
+ activate "Audio Domain" #00FF00
+ |||
+ AudioManager <- - IAmRoutingSend
+ deactivate IAmRoutingSend
+ IAmRoutingSend <- "Audio Domain" : confirmRoutingReady()
+ activate IAmRoutingSend #00ff00
+ deactivate IAmRoutingSend
+ deactivate "Audio Domain"
+ |||
+else Domain Type = Application
+ AudioManager -> IAmRoutingSend : setRoutingReady()
+ activate IAmRoutingSend #00FF00
+ |||
+ SoundManager <- IAmRoutingSend : signal("setRoutingReady")
+ activate SoundManager #00FF00
+ Application <- SoundManager : event [setRoutingReady]
+ deactivate SoundManager
+ activate Application #00FF00
+ |||
+ AudioManager <- - IAmRoutingSend
+ deactivate IAmRoutingSend
+ deactivate AudioManager
+ Application -> SoundManager : call("confirmRoutingReady")
+ activate SoundManager #00FF00
+ SoundManager -> IAmRoutingSend : confirmRoutingReady()
+ activate IAmRoutingSend #00FF00
+ |||
+end
+
+|||
+IAmRoutingReceive <- IAmRoutingSend : confirmRoutingReady()
+activate IAmRoutingReceive #00FF00
+|||
+AudioManager <- IAmRoutingReceive
+activate AudioManager #00FF00
+IAmRoutingReceive - -> IAmRoutingSend
+deactivate IAmRoutingReceive
+
+IAmRoutingSend- ->SoundManager
+deactivate IAmRoutingSend
+SoundManager- ->Application
+deactivate SoundManager
+deactivate Application
+
+IAmCommandSend <- AudioManager : setCommandReady()
+activate IAmCommandSend #00FF00
+|||
+|||
+IAmCommandSend - -> AudioManager
+deactivate IAmCommandSend
+deactivate AudioManager
+|||
+IAmCommandSend -> IAmCommandReceiver : confirmCommandReady()
+activate IAmCommandSend #00FF00
+activate IAmCommandReceiver #00FF00
+|||
+IAmCommandReceiver -> AudioManager
+activate AudioManager #00ff00
+deactivate AudioManager
+|||
+IAmCommandSend <- - IAmCommandReceiver
+deactivate IAmCommandReceiver
+deactivate IAmCommandSend
+@enduml
+
+PlantUML version 1.2017.16beta5(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_registration.svg b/doc/parts/seq_registration.svg
new file mode 100644
index 0000000..9bff665
--- /dev/null
+++ b/doc/parts/seq_registration.svg
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1957px" preserveAspectRatio="none" style="width:1380px;height:1957px;background:#EEEBDC;" version="1.1" viewBox="0 0 1380 1957" width="1380px" zoomAndPan="magnify"><defs><filter height="300%" id="f65nhzdhunqvj" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#EEEBDC" height="1935.9844" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="296.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="311" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="1935.9844" style="stroke: #DEB887; stroke-width: 1.0;" width="428" x="440.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="570" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="1935.9844" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="990.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1005" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="114.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="593.2422"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="973.8438"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="1418.4141"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="333.0078"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="114.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="593.2422"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="930.7109"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="1375.2813"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="362.5" y="901.5781"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="362.5" y="1346.1484"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="206.2031"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="401.2734"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="279.2031" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="665.6406"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="226.2031" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="1163.2109"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="121.9375" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="1607.7813"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="1883.9844"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="167.0703"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="362.1406"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="28.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="651.5078"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="39.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="776.4453"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="42.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1135.0781"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="39.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1221.0156"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="42.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1579.6484"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="39.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1690.5859"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="58.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1869.8516"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="333.0078"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="85.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="622.375"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="71.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="1105.9453"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="71.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="1550.5156"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="87.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="1840.7188"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1307.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="763.9063" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1307.5" y="1105.9453"/><rect fill="#EEEBDC" filter="url(#f65nhzdhunqvj)" height="391.3047" style="stroke: #000000; stroke-width: 2.0;" width="1225.5" x="143" y="100.9688"/><rect fill="#EEEBDC" height="195.0703" style="stroke: none; stroke-width: 1.0;" width="1225.5" x="143" y="297.2031"/><rect fill="#EEEBDC" filter="url(#f65nhzdhunqvj)" height="292.3047" style="stroke: #000000; stroke-width: 2.0;" width="1111.5" x="13" y="556.2734"/><rect fill="#EEEBDC" height="107.9375" style="stroke: none; stroke-width: 1.0;" width="1111.5" x="13" y="740.6406"/><rect fill="#EEEBDC" filter="url(#f65nhzdhunqvj)" height="224.1719" style="stroke: #000000; stroke-width: 2.0;" width="769" x="599.5" y="1068.9766"/><rect fill="#EEEBDC" height="107.9375" style="stroke: none; stroke-width: 1.0;" width="769" x="599.5" y="1185.2109"/><rect fill="#EEEBDC" filter="url(#f65nhzdhunqvj)" height="249.1719" style="stroke: #000000; stroke-width: 2.0;" width="769" x="599.5" y="1513.5469"/><rect fill="#EEEBDC" height="107.9375" style="stroke: none; stroke-width: 1.0;" width="769" x="599.5" y="1654.7813"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="60" x2="60" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="209" x2="209" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="367.5" x2="367.5" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="521.5" x2="521.5" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="663.5" x2="663.5" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="796.5" x2="796.5" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1054.5" x2="1054.5" y1="83.9688" y2="1945.9844"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1312.5" x2="1312.5" y1="83.9688" y2="1945.9844"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="23" y="81.1387">Application</text><ellipse cx="60.5" cy="13" fill="#FFFACD" filter="url(#f65nhzdhunqvj)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M60.5,21 L60.5,48 M47.5,29 L73.5,29 M60.5,48 L47.5,63 M60.5,48 L73.5,63 " fill="#FFFACD" filter="url(#f65nhzdhunqvj)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="153" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="160" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="300.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="307.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="444.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="451.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="609.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="616.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="728.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="735.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="994.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1001.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1266.5" y="81.1387">Audio Domain</text><ellipse cx="1312.5" cy="13" fill="#FFFACD" filter="url(#f65nhzdhunqvj)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1312.5,21 L1312.5,48 M1299.5,29 L1325.5,29 M1312.5,48 L1299.5,63 M1312.5,48 L1325.5,63 " fill="#FFFACD" filter="url(#f65nhzdhunqvj)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="114.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="593.2422"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="973.8438"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="1418.4141"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="333.0078"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="114.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="593.2422"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="930.7109"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="204.5" y="1375.2813"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="362.5" y="901.5781"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="362.5" y="1346.1484"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="206.2031"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="401.2734"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="279.2031" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="665.6406"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="226.2031" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="1163.2109"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="121.9375" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="1607.7813"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="1883.9844"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="167.0703"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="108.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="362.1406"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="28.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="651.5078"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="39.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="776.4453"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="42.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1135.0781"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="39.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1221.0156"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="42.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1579.6484"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="39.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1690.5859"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="58.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="791.5" y="1869.8516"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="333.0078"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="85.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="622.375"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="71.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="1105.9453"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="71.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="1550.5156"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="87.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1049.5" y="1840.7188"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="151.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1307.5" y="137.9375"/><rect fill="#00FF00" filter="url(#f65nhzdhunqvj)" height="763.9063" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1307.5" y="1105.9453"/><rect fill="none" height="391.3047" style="stroke: #000000; stroke-width: 2.0;" width="1225.5" x="143" y="100.9688"/><polygon fill="#EEEEEE" points="143,100.9688,207,100.9688,207,105.9688,197,115.9688,143,115.9688,143,100.9688" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="158" y="113.1074">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="196" x="222" y="113.1792">[Domain Type = DSP/Amplifier]</text><polygon fill="#000000" points="1070.5,133.9375,1060.5,137.9375,1070.5,141.9375,1066.5,137.9375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1064.5" x2="1306.5" y1="137.9375" y2="137.9375"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="109" x="1076.5" y="133.0044">registerDomain()</text><polygon fill="#000000" points="812.5,163.0703,802.5,167.0703,812.5,171.0703,808.5,167.0703" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="806.5" x2="1048.5" y1="167.0703" y2="167.0703"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="109" x="818.5" y="162.1372">registerDomain()</text><polygon fill="#000000" points="679.5,202.2031,669.5,206.2031,679.5,210.2031,675.5,206.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="673.5" x2="790.5" y1="206.2031" y2="206.2031"/><polygon fill="#000000" points="1037.5,271.2031,1047.5,275.2031,1037.5,279.2031,1041.5,275.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="796.5" x2="1043.5" y1="275.2031" y2="275.2031"/><polygon fill="#000000" points="1300.5,285.2031,1310.5,289.2031,1300.5,293.2031,1304.5,289.2031" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1054.5" x2="1306.5" y1="289.2031" y2="289.2031"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="143" x2="1368.5" y1="298.2031" y2="298.2031"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="206" x="148" y="308.4136">[Domain Type = SoundManager]</text><polygon fill="#000000" points="1037.5,329.0078,1047.5,333.0078,1037.5,337.0078,1041.5,333.0078" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="214.5" x2="1043.5" y1="333.0078" y2="333.0078"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="109" x="221.5" y="328.0747">registerDomain()</text><polygon fill="#000000" points="812.5,358.1406,802.5,362.1406,812.5,366.1406,808.5,362.1406" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="806.5" x2="1048.5" y1="362.1406" y2="362.1406"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="109" x="818.5" y="357.2075">registerDomain()</text><polygon fill="#000000" points="679.5,397.2734,669.5,401.2734,679.5,405.2734,675.5,401.2734" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="673.5" x2="790.5" y1="401.2734" y2="401.2734"/><polygon fill="#000000" points="1037.5,466.2734,1047.5,470.2734,1037.5,474.2734,1041.5,470.2734" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="796.5" x2="1043.5" y1="470.2734" y2="470.2734"/><polygon fill="#000000" points="220.5,480.2734,210.5,484.2734,220.5,488.2734,216.5,484.2734" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="214.5" x2="1053.5" y1="484.2734" y2="484.2734"/><rect fill="none" height="292.3047" style="stroke: #000000; stroke-width: 2.0;" width="1111.5" x="13" y="556.2734"/><polygon fill="#EEEEEE" points="13,556.2734,77,556.2734,77,561.2734,67,571.2734,13,571.2734,13,556.2734" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="28" y="568.4121">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="92" y="568.4839">[Register Type = Dynamic]</text><polygon fill="#000000" points="192.5,589.2422,202.5,593.2422,192.5,597.2422,196.5,593.2422" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="65.5" x2="198.5" y1="593.2422" y2="593.2422"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="104" x="72.5" y="588.3091">registerSource()</text><polygon fill="#000000" points="1037.5,618.375,1047.5,622.375,1037.5,626.375,1041.5,622.375" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="214.5" x2="1043.5" y1="622.375" y2="622.375"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="104" x="221.5" y="617.4419">registerSource()</text><polygon fill="#000000" points="812.5,647.5078,802.5,651.5078,812.5,655.5078,808.5,651.5078" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="806.5" x2="1048.5" y1="651.5078" y2="651.5078"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="104" x="818.5" y="646.5747">registerSource()</text><polygon fill="#000000" points="679.5,661.6406,669.5,665.6406,679.5,669.6406,675.5,665.6406" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="673.5" x2="790.5" y1="665.6406" y2="665.6406"/><polygon fill="#000000" points="1037.5,675.6406,1047.5,679.6406,1037.5,683.6406,1041.5,679.6406" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="796.5" x2="1043.5" y1="679.6406" y2="679.6406"/><polygon fill="#000000" points="225.5,689.6406,215.5,693.6406,225.5,697.6406,221.5,693.6406" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="219.5" x2="1048.5" y1="693.6406" y2="693.6406"/><polygon fill="#000000" points="71.5,703.6406,61.5,707.6406,71.5,711.6406,67.5,707.6406" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="65.5" x2="208.5" y1="707.6406" y2="707.6406"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="13" x2="1124.5" y1="741.6406" y2="741.6406"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="152" x="18" y="751.8511">[Register Type = Static]</text><polygon fill="#000000" points="779.5,772.4453,789.5,776.4453,779.5,780.4453,783.5,776.4453" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="668.5" x2="785.5" y1="776.4453" y2="776.4453"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="94" x="675.5" y="771.5122">registerSource</text><polygon fill="#000000" points="679.5,811.5781,669.5,815.5781,679.5,819.5781,675.5,815.5781" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="673.5" x2="795.5" y1="815.5781" y2="815.5781"/><polygon fill="#000000" points="383.5,897.5781,373.5,901.5781,383.5,905.5781,379.5,901.5781" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="377.5" x2="657.5" y1="901.5781" y2="901.5781"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="97" x="389.5" y="896.645">cbNewSource()</text><polygon fill="#000000" points="225.5,926.7109,215.5,930.7109,225.5,934.7109,221.5,930.7109" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="219.5" x2="361.5" y1="930.7109" y2="930.7109"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="129" x="231.5" y="925.7778">signal("NewSource")</text><polygon fill="#000000" points="651.5,940.8438,661.5,944.8438,651.5,948.8438,655.5,944.8438" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="367.5" x2="657.5" y1="944.8438" y2="944.8438"/><polygon fill="#000000" points="76.5,969.8438,66.5,973.8438,76.5,977.8438,72.5,973.8438" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="70.5" x2="203.5" y1="973.8438" y2="973.8438"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="120" x="82.5" y="968.9106">event [newSource]</text><rect fill="none" height="224.1719" style="stroke: #000000; stroke-width: 2.0;" width="769" x="599.5" y="1068.9766"/><polygon fill="#EEEEEE" points="599.5,1068.9766,663.5,1068.9766,663.5,1073.9766,653.5,1083.9766,599.5,1083.9766,599.5,1068.9766" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="614.5" y="1081.1152">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="678.5" y="1081.187">[Register Type = Dynamic]</text><polygon fill="#000000" points="1070.5,1101.9453,1060.5,1105.9453,1070.5,1109.9453,1066.5,1105.9453" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1064.5" x2="1306.5" y1="1105.9453" y2="1105.9453"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="86" x="1076.5" y="1101.0122">registerSink()</text><polygon fill="#000000" points="812.5,1131.0781,802.5,1135.0781,812.5,1139.0781,808.5,1135.0781" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="806.5" x2="1048.5" y1="1135.0781" y2="1135.0781"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="86" x="818.5" y="1130.145">registerSink()</text><polygon fill="#000000" points="1295.5,1145.2109,1305.5,1149.2109,1295.5,1153.2109,1299.5,1149.2109" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1059.5" x2="1301.5" y1="1149.2109" y2="1149.2109"/><polygon fill="#000000" points="679.5,1159.2109,669.5,1163.2109,679.5,1167.2109,675.5,1163.2109" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="673.5" x2="790.5" y1="1163.2109" y2="1163.2109"/><polygon fill="#000000" points="1042.5,1173.2109,1052.5,1177.2109,1042.5,1181.2109,1046.5,1177.2109" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="796.5" x2="1048.5" y1="1177.2109" y2="1177.2109"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="599.5" x2="1368.5" y1="1186.2109" y2="1186.2109"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="152" x="604.5" y="1196.4214">[Register Type = Static]</text><polygon fill="#000000" points="779.5,1217.0156,789.5,1221.0156,779.5,1225.0156,783.5,1221.0156" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="668.5" x2="785.5" y1="1221.0156" y2="1221.0156"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="76" x="675.5" y="1216.0825">registerSink</text><polygon fill="#000000" points="679.5,1256.1484,669.5,1260.1484,679.5,1264.1484,675.5,1260.1484" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="673.5" x2="795.5" y1="1260.1484" y2="1260.1484"/><polygon fill="#000000" points="383.5,1342.1484,373.5,1346.1484,383.5,1350.1484,379.5,1346.1484" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="377.5" x2="657.5" y1="1346.1484" y2="1346.1484"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="79" x="389.5" y="1341.2153">cbNewSink()</text><polygon fill="#000000" points="225.5,1371.2813,215.5,1375.2813,225.5,1379.2813,221.5,1375.2813" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="219.5" x2="361.5" y1="1375.2813" y2="1375.2813"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="111" x="231.5" y="1370.3481">signal("NewSink")</text><polygon fill="#000000" points="651.5,1385.4141,661.5,1389.4141,651.5,1393.4141,655.5,1389.4141" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="367.5" x2="657.5" y1="1389.4141" y2="1389.4141"/><polygon fill="#000000" points="76.5,1414.4141,66.5,1418.4141,76.5,1422.4141,72.5,1418.4141" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="70.5" x2="203.5" y1="1418.4141" y2="1418.4141"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="102" x="82.5" y="1413.481">event [newSink]</text><rect fill="none" height="249.1719" style="stroke: #000000; stroke-width: 2.0;" width="769" x="599.5" y="1513.5469"/><polygon fill="#EEEEEE" points="599.5,1513.5469,663.5,1513.5469,663.5,1518.5469,653.5,1528.5469,599.5,1528.5469,599.5,1513.5469" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="614.5" y="1525.6855">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="678.5" y="1525.7573">[Register Type = Dynamic]</text><polygon fill="#000000" points="1070.5,1546.5156,1060.5,1550.5156,1070.5,1554.5156,1066.5,1550.5156" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1064.5" x2="1306.5" y1="1550.5156" y2="1550.5156"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="114" x="1076.5" y="1545.5825">registerGateway()</text><polygon fill="#000000" points="812.5,1575.6484,802.5,1579.6484,812.5,1583.6484,808.5,1579.6484" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="806.5" x2="1048.5" y1="1579.6484" y2="1579.6484"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="114" x="818.5" y="1574.7153">registerGateway()</text><polygon fill="#000000" points="1295.5,1589.7813,1305.5,1593.7813,1295.5,1597.7813,1299.5,1593.7813" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1059.5" x2="1301.5" y1="1593.7813" y2="1593.7813"/><polygon fill="#000000" points="679.5,1603.7813,669.5,1607.7813,679.5,1611.7813,675.5,1607.7813" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="673.5" x2="790.5" y1="1607.7813" y2="1607.7813"/><polygon fill="#000000" points="1042.5,1617.7813,1052.5,1621.7813,1042.5,1625.7813,1046.5,1621.7813" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="796.5" x2="1048.5" y1="1621.7813" y2="1621.7813"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="599.5" x2="1368.5" y1="1655.7813" y2="1655.7813"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="152" x="604.5" y="1665.9917">[Register Type = Static]</text><polygon fill="#000000" points="779.5,1686.5859,789.5,1690.5859,779.5,1694.5859,783.5,1690.5859" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="668.5" x2="785.5" y1="1690.5859" y2="1690.5859"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="104" x="675.5" y="1685.6528">registerGateway</text><polygon fill="#000000" points="674.5,1725.7188,664.5,1729.7188,674.5,1733.7188,670.5,1729.7188" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="668.5" x2="795.5" y1="1729.7188" y2="1729.7188"/><polygon fill="#000000" points="1070.5,1836.7188,1060.5,1840.7188,1070.5,1844.7188,1066.5,1840.7188" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1064.5" x2="1306.5" y1="1840.7188" y2="1840.7188"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="229" x="1076.5" y="1835.7856">hookDomainRegistrationCompelte()</text><polygon fill="#000000" points="812.5,1865.8516,802.5,1869.8516,812.5,1873.8516,808.5,1869.8516" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="806.5" x2="1048.5" y1="1869.8516" y2="1869.8516"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="229" x="818.5" y="1864.9185">hookDomainRegistrationCompelte()</text><polygon fill="#000000" points="679.5,1879.9844,669.5,1883.9844,679.5,1887.9844,675.5,1883.9844" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="673.5" x2="790.5" y1="1883.9844" y2="1883.9844"/><polygon fill="#000000" points="1042.5,1923.9844,1052.5,1927.9844,1042.5,1931.9844,1046.5,1927.9844" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="796.5" x2="1048.5" y1="1927.9844" y2="1927.9844"/><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+alt Domain Type = DSP/Amplifier
+ RS <- AD : registerDomain()
+ activate AD #00FF00
+
+ activate RS #00FF00
+ RR <- RS : registerDomain()
+
+ activate RR #00FF00
+ |||
+ AM <- RR
+ activate AM #00ff00
+ deactivate AM
+ |||
+ RR - -> RS
+ deactivate RR
+
+ RS - -> AD
+ deactivate RS
+
+ deactivate AD
+else Domain Type = SoundManager
+ RS <- SM : registerDomain()
+ activate SM #00FF00
+ activate RS #00FF00
+
+ RR <- RS : registerDomain()
+
+ activate RR #00FF00
+ |||
+ AM <- RR
+ activate AM #00ff00
+ deactivate AM
+ |||
+ RR - -> RS
+ deactivate RR
+
+ RS - -> SM
+ deactivate RS
+ deactivate SM
+end
+|||
+|||
+alt Register Type = Dynamic
+ SM <- AP : registerSource()
+ activate AP #00FF00
+
+ activate SM #00FF00
+ RS <- SM : registerSource()
+
+ activate RS #00FF00
+ RS -> RR : registerSource()
+ activate RR #00FF00
+
+ RR -> AM
+ activate AM #00FF00
+ RR - -> RS
+ deactivate RR
+
+ RS - -> SM
+ SM - -> AP
+ deactivate RS
+ deactivate SM
+ deactivate AP
+ |||
+
+else Register Type = Static
+ AM -> RR : registerSource
+ activate RR #00FF00
+ |||
+ RR - -> AM
+ deactivate RR
+ |||
+end
+|||
+AM -> CS : cbNewSource()
+activate CS #00FF00
+CS -> SM : signal("NewSource")
+activate SM #00FF00
+
+CS - -> AM
+deactivate CS
+deactivate AM
+
+SM -> AP : event [newSource]
+activate AP #00FF00
+deactivate SM
+
+deactivate AP
+|||
+|||
+alt Register Type = Dynamic
+ RS <- AD : registerSink()
+ activate AD #00FF00
+
+ activate RS #00FF00
+ RR <- RS : registerSink()
+ activate RR #00FF00
+
+ RS - -> AD
+' deactivate AD
+
+ RR -> AM
+ activate AM #00FF00
+ RR - -> RS
+ deactivate RS
+ deactivate RR
+
+
+else Register Type = Static
+ AM -> RR : registerSink
+ activate RR #00FF00
+ |||
+ RR - -> AM
+ deactivate RR
+ |||
+end
+|||
+AM -> CS : cbNewSink()
+
+activate CS #00FF00
+CS -> SM : signal("NewSink")
+activate SM #00FF00
+
+CS - -> AM
+deactivate CS
+deactivate AM
+
+SM -> AP : event [newSink]
+activate AP #00FF00
+deactivate SM
+deactivate AP
+|||
+|||
+alt Register Type = Dynamic
+ RS <- AD : registerGateway()
+' activate AD #00FF00
+
+ activate RS #00FF00
+ RR <- RS : registerGateway()
+ activate RR #00FF00
+
+ RS - -> AD
+' deactivate AD
+
+ RR -> AM
+ activate AM #00FF00
+ RR - -> RS
+ deactivate RS
+ deactivate RR
+ |||
+else Register Type = Static
+ AM -> RR : registerGateway
+ activate RR #00FF00
+ |||
+ RR - -> AM
+ deactivate RR
+ deactivate AM
+ |||
+end
+
+|||
+|||
+AD -> RS : hookDomainRegistrationCompelte()
+'activate AD #00FF00
+activate RS #00FF00
+RS -> RR : hookDomainRegistrationCompelte()
+deactivate AD
+activate RR #00FF00
+RR -> AM
+activate AM #00FF00
+deactivate AM
+
+RR - -> RS
+deactivate RR
+deactivate RS
+deactivate AD
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_releasesoundmode.svg b/doc/parts/seq_releasesoundmode.svg
new file mode 100644
index 0000000..cbe1fa0
--- /dev/null
+++ b/doc/parts/seq_releasesoundmode.svg
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1079px" preserveAspectRatio="none" style="width:1374px;height:1079px;background:#EEEBDC;" version="1.1" viewBox="0 0 1374 1079" width="1374px" zoomAndPan="magnify"><defs><filter height="300%" id="fcbo85lr89mzm" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#EEEBDC" height="1057.2109" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="544.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="559" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="1057.2109" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="688.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="817.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="1057.2109" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="1117.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1132" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="185.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="93.9688"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="830.6797"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="1012.0781"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="330.5" y="114.9688"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="330.5" y="787.5469"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="330.5" y="968.9453"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="121.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="610.5" y="144.1016"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="610.5" y="733.4141"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="610.5" y="914.8125"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="765" y="198.2344"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="820.8438" style="stroke: #404040; stroke-width: 1.0;" width="10" x="906.5" y="237.3672"/><rect fill="#EEEBDC" filter="url(#fcbo85lr89mzm)" height="705.8438" style="stroke: #000000; stroke-width: 2.0;" width="1350.5" x="13" y="344.3672"/><rect fill="#EEEBDC" filter="url(#fcbo85lr89mzm)" height="288.0781" style="stroke: #000000; stroke-width: 2.0;" width="815" x="538.5" y="392.3359"/><rect fill="#EEEBDC" height="178.0078" style="stroke: none; stroke-width: 1.0;" width="815" x="538.5" y="502.4063"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="60" x2="60" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="335" x2="335" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="615.5" x2="615.5" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="769.5" x2="769.5" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="911.5" x2="911.5" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1043.5" x2="1043.5" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1181.5" x2="1181.5" y1="83.9688" y2="1067.2109"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1297.5" x2="1297.5" y1="83.9688" y2="1067.2109"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="23" y="81.1387">Application</text><ellipse cx="60.5" cy="13" fill="#FFFACD" filter="url(#fcbo85lr89mzm)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M60.5,21 L60.5,48 M47.5,29 L73.5,29 M60.5,48 L47.5,63 M60.5,48 L73.5,63 " fill="#FFFACD" filter="url(#fcbo85lr89mzm)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="279" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="286" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="548.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="555.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="692.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="699.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="857.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="864.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="975.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="982.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="1121.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1128.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1251.5" y="81.1387">Audio Domain</text><ellipse cx="1297.5" cy="13" fill="#FFFACD" filter="url(#fcbo85lr89mzm)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1297.5,21 L1297.5,48 M1284.5,29 L1310.5,29 M1297.5,48 L1284.5,63 M1297.5,48 L1310.5,63 " fill="#FFFACD" filter="url(#fcbo85lr89mzm)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="185.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="93.9688"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="830.6797"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="55.5" y="1012.0781"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="330.5" y="114.9688"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="330.5" y="787.5469"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="330.5" y="968.9453"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="121.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="610.5" y="144.1016"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="610.5" y="733.4141"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="610.5" y="914.8125"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="765" y="198.2344"/><rect fill="#00FF00" filter="url(#fcbo85lr89mzm)" height="820.8438" style="stroke: #404040; stroke-width: 1.0;" width="10" x="906.5" y="237.3672"/><polygon fill="#000000" points="318.5,110.9688,328.5,114.9688,318.5,118.9688,322.5,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="65.5" x2="324.5" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="79" x="72.5" y="110.0356">disconnect()</text><polygon fill="#000000" points="598.5,140.1016,608.5,144.1016,598.5,148.1016,602.5,144.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="340.5" x2="604.5" y1="144.1016" y2="144.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="79" x="347.5" y="139.1685">disconnect()</text><polygon fill="#000000" points="753,194.2344,763,198.2344,753,202.2344,757,198.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="620.5" x2="759" y1="198.2344" y2="198.2344"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="79" x="627.5" y="193.3013">disconnect()</text><polygon fill="#000000" points="894.5,233.3672,904.5,237.3672,894.5,241.3672,898.5,237.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="775" x2="900.5" y1="237.3672" y2="237.3672"/><polygon fill="#000000" points="631.5,247.3672,621.5,251.3672,631.5,255.3672,627.5,251.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="625.5" x2="769" y1="251.3672" y2="251.3672"/><polygon fill="#000000" points="351.5,261.3672,341.5,265.3672,351.5,269.3672,347.5,265.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="345.5" x2="614.5" y1="265.3672" y2="265.3672"/><polygon fill="#000000" points="71.5,275.3672,61.5,279.3672,71.5,283.3672,67.5,279.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="65.5" x2="334.5" y1="279.3672" y2="279.3672"/><rect fill="none" height="705.8438" style="stroke: #000000; stroke-width: 2.0;" width="1350.5" x="13" y="344.3672"/><polygon fill="#EEEEEE" points="13,344.3672,82,344.3672,82,349.3672,72,359.3672,13,359.3672,13,344.3672" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="24" x="28" y="356.5059">opt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="186" x="97" y="356.5776">[Main connection is existing]</text><rect fill="none" height="288.0781" style="stroke: #000000; stroke-width: 2.0;" width="815" x="538.5" y="392.3359"/><polygon fill="#EEEEEE" points="538.5,392.3359,602.5,392.3359,602.5,397.3359,592.5,407.3359,538.5,407.3359,538.5,392.3359" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="553.5" y="404.4746">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="256" x="617.5" y="404.5464">[MainConnectioState = CS_SUSPENDED]</text><rect fill="#FFFFFF" filter="url(#fcbo85lr89mzm)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="797" x="545.5" y="433.3047"/><polygon fill="#EEEEEE" points="545.5,433.3047,610.5,433.3047,610.5,438.3047,600.5,448.3047,545.5,448.3047,545.5,433.3047" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="558.5" y="446.4434">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="157" x="867.5" y="464.3716">Disconnect Sound Route</text><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="538.5" x2="1353.5" y1="503.4063" y2="503.4063"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="112" x="543.5" y="513.6167">[CS_CONNECTED]</text><rect fill="#FFFFFF" filter="url(#fcbo85lr89mzm)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="797" x="545.5" y="542.2109"/><polygon fill="#EEEEEE" points="545.5,542.2109,610.5,542.2109,610.5,547.2109,600.5,557.2109,545.5,557.2109,545.5,542.2109" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="558.5" y="555.3496">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="146" x="873" y="573.2778">Stop Sound Streaming</text><rect fill="#FFFFFF" filter="url(#fcbo85lr89mzm)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="797" x="545.5" y="611.3125"/><polygon fill="#EEEEEE" points="545.5,611.3125,610.5,611.3125,610.5,616.3125,600.5,626.3125,545.5,626.3125,545.5,611.3125" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="558.5" y="624.4512">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="157" x="867.5" y="642.3794">Disconnect Sound Route</text><polygon fill="#000000" points="631.5,729.4141,621.5,733.4141,631.5,737.4141,627.5,733.4141" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="625.5" x2="905.5" y1="733.4141" y2="733.4141"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="219" x="637.5" y="728.481">cbMainConnectionStateChanged()</text><polygon fill="#000000" points="351.5,783.5469,341.5,787.5469,351.5,791.5469,347.5,787.5469" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="345.5" x2="609.5" y1="787.5469" y2="787.5469"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="251" x="357.5" y="782.6138">signal("MainConnectionStateChanged")</text><polygon fill="#000000" points="894.5,797.6797,904.5,801.6797,894.5,805.6797,898.5,801.6797" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="615.5" x2="900.5" y1="801.6797" y2="801.6797"/><polygon fill="#000000" points="76.5,826.6797,66.5,830.6797,76.5,834.6797,72.5,830.6797" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="70.5" x2="329.5" y1="830.6797" y2="830.6797"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="246" x="82.5" y="825.7466">event [mainConnectionStateChanged]</text><polygon fill="#000000" points="631.5,910.8125,621.5,914.8125,631.5,918.8125,627.5,914.8125" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="625.5" x2="905.5" y1="914.8125" y2="914.8125"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="179" x="637.5" y="909.8794">cbRemoveMainConnection()</text><polygon fill="#000000" points="351.5,964.9453,341.5,968.9453,351.5,972.9453,347.5,968.9453" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="345.5" x2="609.5" y1="968.9453" y2="968.9453"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="211" x="357.5" y="964.0122">signal("RemoveMainConnection")</text><polygon fill="#000000" points="894.5,979.0781,904.5,983.0781,894.5,987.0781,898.5,983.0781" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="615.5" x2="900.5" y1="983.0781" y2="983.0781"/><polygon fill="#000000" points="76.5,1008.0781,66.5,1012.0781,76.5,1016.0781,72.5,1012.0781" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="70.5" x2="329.5" y1="1012.0781" y2="1012.0781"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="201" x="82.5" y="1007.145">event [removeMainConnection]</text><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+
+activate AP #00ff00
+AP -> SM : disconnect()
+activate SM #00ff00
+SM -> CS : disconnect()
+activate CS #00ff00
+|||
+CS -> CR : disconnect()
+activate CR #00ff00
+|||
+CR -> AM
+activate AM #00ff00
+CR - -> CS
+deactivate CR
+CS- ->SM
+deactivate CS
+SM- ->AP
+deactivate SM
+deactivate AP
+|||
+|||
+opt Main connection is existing
+ |||
+ alt MainConnectioState = CS_SUSPENDED
+ |||
+ ref over CS,AD : Disconnect Sound Route
+ |||
+ else CS_CONNECTED
+ |||
+ ref over CS,AD : Stop Sound Streaming
+ |||
+ ref over CS,AD : Disconnect Sound Route
+ |||
+ end
+ |||
+ AM -> CS : cbMainConnectionStateChanged()
+ activate CS #00ff00
+ |||
+ CS -> SM : signal("MainConnectionStateChanged")
+ activate SM #00ff00
+ CS - -> AM
+ deactivate CS
+ SM -> AP : event [mainConnectionStateChanged]
+ activate AP #00ff00
+ deactivate SM
+ deactivate AP
+ |||
+ AM -> CS : cbRemoveMainConnection()
+ activate CS #00ff00
+ |||
+ CS -> SM : signal("RemoveMainConnection")
+ activate SM #00ff00
+ CS - -> AM
+ deactivate CS
+ SM -> AP : event [removeMainConnection]
+ activate AP #00ff00
+ deactivate SM
+ deactivate AP
+
+end
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_requestsoundmode.svg b/doc/parts/seq_requestsoundmode.svg
new file mode 100644
index 0000000..5ea9616
--- /dev/null
+++ b/doc/parts/seq_requestsoundmode.svg
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1701px" preserveAspectRatio="none" style="width:1368px;height:1701px;background:#EEEBDC;" version="1.1" viewBox="0 0 1368 1701" width="1368px" zoomAndPan="magnify"><defs><filter height="300%" id="f1lx8mwkk69qwd" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#EEEBDC" height="1679.4453" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="538.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="553" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="1679.4453" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="682.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="811.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="1679.4453" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="1111.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1126" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="135.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="93.9688"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="503.1328"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="699.6641"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="1459.9141"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="1641.3125"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="114.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="88.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="445"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="88.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="641.5313"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="1416.7813"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="1598.1797"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="71.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="144.1016"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="415.8672"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="612.3984"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="1387.6484"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="1569.0469"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="28.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="759" y="173.2344"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="1493.0781" style="stroke: #404040; stroke-width: 1.0;" width="10" x="900.5" y="187.3672"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="905.5" y="954.3984"/><rect fill="#EEEBDC" filter="url(#f1lx8mwkk69qwd)" height="359.0313" style="stroke: #000000; stroke-width: 2.0;" width="946.5" x="23" y="378.8984"/><rect fill="#EEEBDC" filter="url(#f1lx8mwkk69qwd)" height="498.1875" style="stroke: #000000; stroke-width: 2.0;" width="1344.5" x="13" y="861.4609"/><rect fill="#EEEBDC" filter="url(#f1lx8mwkk69qwd)" height="418.2188" style="stroke: #000000; stroke-width: 2.0;" width="1324.5" x="23" y="909.4297"/><rect fill="#EEEBDC" height="133.0078" style="stroke: none; stroke-width: 1.0;" width="1324.5" x="23" y="1115.7344"/><rect fill="#EEEBDC" height="78.9063" style="stroke: none; stroke-width: 1.0;" width="1324.5" x="23" y="1248.7422"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="70" x2="70" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="337" x2="337" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="609.5" x2="609.5" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="763.5" x2="763.5" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="905.5" x2="905.5" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1037.5" x2="1037.5" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1175.5" x2="1175.5" y1="83.9688" y2="1689.4453"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1291.5" x2="1291.5" y1="83.9688" y2="1689.4453"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="33" y="81.1387">Application</text><ellipse cx="70.5" cy="13" fill="#FFFACD" filter="url(#f1lx8mwkk69qwd)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M70.5,21 L70.5,48 M57.5,29 L83.5,29 M70.5,48 L57.5,63 M70.5,48 L83.5,63 " fill="#FFFACD" filter="url(#f1lx8mwkk69qwd)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="281" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="288" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="542.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="549.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="686.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="693.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="851.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="858.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="969.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="976.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="1115.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1122.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1245.5" y="81.1387">Audio Domain</text><ellipse cx="1291.5" cy="13" fill="#FFFACD" filter="url(#f1lx8mwkk69qwd)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1291.5,21 L1291.5,48 M1278.5,29 L1304.5,29 M1291.5,48 L1278.5,63 M1291.5,48 L1304.5,63 " fill="#FFFACD" filter="url(#f1lx8mwkk69qwd)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="135.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="93.9688"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="503.1328"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="699.6641"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="1459.9141"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="65.5" y="1641.3125"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="114.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="88.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="445"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="88.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="641.5313"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="1416.7813"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="73.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="332.5" y="1598.1797"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="71.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="144.1016"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="415.8672"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="612.3984"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="1387.6484"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="604.5" y="1569.0469"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="28.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="759" y="173.2344"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="1493.0781" style="stroke: #404040; stroke-width: 1.0;" width="10" x="900.5" y="187.3672"/><rect fill="#00FF00" filter="url(#f1lx8mwkk69qwd)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="905.5" y="954.3984"/><polygon fill="#000000" points="320.5,110.9688,330.5,114.9688,320.5,118.9688,324.5,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="75.5" x2="326.5" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="61" x="82.5" y="110.0356">connect()</text><polygon fill="#000000" points="592.5,140.1016,602.5,144.1016,592.5,148.1016,596.5,144.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="342.5" x2="598.5" y1="144.1016" y2="144.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="61" x="349.5" y="139.1685">connect()</text><polygon fill="#000000" points="747,169.2344,757,173.2344,747,177.2344,751,173.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="614.5" x2="753" y1="173.2344" y2="173.2344"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="61" x="621.5" y="168.3013">connect()</text><polygon fill="#000000" points="888.5,183.3672,898.5,187.3672,888.5,191.3672,892.5,187.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="769" x2="894.5" y1="187.3672" y2="187.3672"/><polygon fill="#000000" points="625.5,197.3672,615.5,201.3672,625.5,205.3672,621.5,201.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="619.5" x2="763" y1="201.3672" y2="201.3672"/><polygon fill="#000000" points="353.5,211.3672,343.5,215.3672,353.5,219.3672,349.5,215.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="347.5" x2="608.5" y1="215.3672" y2="215.3672"/><polygon fill="#000000" points="81.5,225.3672,71.5,229.3672,81.5,233.3672,77.5,229.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="75.5" x2="336.5" y1="229.3672" y2="229.3672"/><polygon fill="#FBFB77" filter="url(#f1lx8mwkk69qwd)" points="915,292.3672,915,362.3672,1195,362.3672,1195,302.3672,1185,292.3672,915,292.3672" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1185" x2="1185" y1="292.3672" y2="302.3672"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1195" x2="1185" y1="302.3672" y2="302.3672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="230" x="921" y="309.4341">Please note that if same connection</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="249" x="921" y="324.5669">(source and sink are completely same)</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="259" x="921" y="339.6997">has bee created already, Audio Manager</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="253" x="921" y="354.8325">does not notify cbNewMainConnection()</text><rect fill="none" height="359.0313" style="stroke: #000000; stroke-width: 2.0;" width="946.5" x="23" y="378.8984"/><polygon fill="#EEEEEE" points="23,378.8984,92,378.8984,92,383.8984,82,393.8984,23,393.8984,23,378.8984" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="24" x="38" y="391.0371">opt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="211" x="107" y="391.1089">[main connection is not existing]</text><polygon fill="#000000" points="625.5,411.8672,615.5,415.8672,625.5,419.8672,621.5,415.8672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="619.5" x2="899.5" y1="415.8672" y2="415.8672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="144" x="631.5" y="410.9341">cbNewMainConnection</text><polygon fill="#000000" points="353.5,441,343.5,445,353.5,449,349.5,445" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="347.5" x2="603.5" y1="445" y2="445"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="186" x="359.5" y="440.0669">signal("NewMainConnection")</text><polygon fill="#000000" points="888.5,455.1328,898.5,459.1328,888.5,463.1328,892.5,459.1328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="609.5" x2="894.5" y1="459.1328" y2="459.1328"/><polygon fill="#000000" points="86.5,499.1328,76.5,503.1328,86.5,507.1328,82.5,503.1328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="80.5" x2="331.5" y1="503.1328" y2="503.1328"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="172" x="92.5" y="483.1997">event [newMainConnection</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="132" x="148.5" y="498.3325">(mainConnectionID)]</text><polygon fill="#000000" points="625.5,608.3984,615.5,612.3984,625.5,616.3984,621.5,612.3984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="619.5" x2="899.5" y1="612.3984" y2="612.3984"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="201" x="631.5" y="607.4653">cbMainConnectionStateChange</text><polygon fill="#000000" points="353.5,637.5313,343.5,641.5313,353.5,645.5313,349.5,641.5313" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="347.5" x2="603.5" y1="641.5313" y2="641.5313"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="243" x="359.5" y="636.5981">signal("MainConnectionStateChange")</text><polygon fill="#000000" points="888.5,651.6641,898.5,655.6641,888.5,659.6641,892.5,655.6641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="609.5" x2="894.5" y1="655.6641" y2="655.6641"/><polygon fill="#000000" points="86.5,695.6641,76.5,699.6641,86.5,703.6641,82.5,699.6641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="80.5" x2="331.5" y1="699.6641" y2="699.6641"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="233" x="92.5" y="679.731">event [mainConnectionStateChange</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="143" x="148.5" y="694.8638">(CS_DISCONNECTED)]</text><polygon fill="#FBFB77" filter="url(#f1lx8mwkk69qwd)" points="915,774.9297,915,844.9297,1161,844.9297,1161,784.9297,1151,774.9297,915,774.9297" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1151" x2="1151" y1="774.9297" y2="784.9297"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="1161" x2="1151" y1="784.9297" y2="784.9297"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="218" x="921" y="791.9966">Once connection is requested and</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="200" x="921" y="807.1294">created in AudioManager, main</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="209" x="921" y="822.2622">connection continuously perform</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="225" x="921" y="837.395">transition caused by policy decision</text><rect fill="none" height="498.1875" style="stroke: #000000; stroke-width: 2.0;" width="1344.5" x="13" y="861.4609"/><polygon fill="#EEEEEE" points="13,861.4609,89,861.4609,89,866.4609,79,876.4609,13,876.4609,13,861.4609" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="31" x="28" y="873.5996">loop</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="206" x="104" y="873.6714">[Lifecycle of a main connection]</text><rect fill="none" height="418.2188" style="stroke: #000000; stroke-width: 2.0;" width="1324.5" x="23" y="909.4297"/><polygon fill="#EEEEEE" points="23,909.4297,87,909.4297,87,914.4297,77,924.4297,23,924.4297,23,909.4297" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="19" x="38" y="921.5684">alt</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="244" x="102" y="921.6401">[Transition of sound mode = Connect]</text><line style="stroke: #000000; stroke-width: 1.0;" x1="915.5" x2="957.5" y1="946.5313" y2="946.5313"/><line style="stroke: #000000; stroke-width: 1.0;" x1="957.5" x2="957.5" y1="946.5313" y2="959.5313"/><line style="stroke: #000000; stroke-width: 1.0;" x1="916.5" x2="957.5" y1="959.5313" y2="959.5313"/><polygon fill="#000000" points="926.5,955.5313,916.5,959.5313,926.5,963.5313,922.5,959.5313" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="107" x="922.5" y="941.4653">Policy_Decision()</text><rect fill="#FFFFFF" filter="url(#f1lx8mwkk69qwd)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="1306.5" x="30" y="1007.5313"/><polygon fill="#EEEEEE" points="30,1007.5313,95,1007.5313,95,1012.5313,85,1022.5313,30,1022.5313,30,1007.5313" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="43" y="1020.6699">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="139" x="615.75" y="1038.5981">Connect Sound Route</text><rect fill="#FFFFFF" filter="url(#f1lx8mwkk69qwd)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="1306.5" x="30" y="1061.6328"/><polygon fill="#EEEEEE" points="30,1061.6328,95,1061.6328,95,1066.6328,85,1076.6328,30,1076.6328,30,1061.6328" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="43" y="1074.7715">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="148" x="611.25" y="1092.6997">Start Sound Streaming</text><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="23" x2="1347.5" y1="1116.7344" y2="1116.7344"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="81" x="28" y="1126.9448">[Disconnect]</text><rect fill="#FFFFFF" filter="url(#f1lx8mwkk69qwd)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="1306.5" x="30" y="1140.5391"/><polygon fill="#EEEEEE" points="30,1140.5391,95,1140.5391,95,1145.5391,85,1155.5391,30,1155.5391,30,1140.5391" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="43" y="1153.6777">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="146" x="612.25" y="1171.606">Stop Sound Streaming</text><rect fill="#FFFFFF" filter="url(#f1lx8mwkk69qwd)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="1306.5" x="30" y="1194.6406"/><polygon fill="#EEEEEE" points="30,1194.6406,95,1194.6406,95,1199.6406,85,1209.6406,30,1209.6406,30,1194.6406" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="43" y="1207.7793">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="157" x="606.75" y="1225.7075">Disconnect Sound Route</text><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="23" x2="1347.5" y1="1249.7422" y2="1249.7422"/><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="65" x="28" y="1259.9526">[Suspend]</text><rect fill="#FFFFFF" filter="url(#f1lx8mwkk69qwd)" height="39.1016" style="stroke: #000000; stroke-width: 2.0;" width="1306.5" x="30" y="1273.5469"/><polygon fill="#EEEEEE" points="30,1273.5469,95,1273.5469,95,1278.5469,85,1288.5469,30,1288.5469,30,1273.5469" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="20" x="43" y="1286.6855">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="146" x="612.25" y="1304.6138">Stop Sound Streaming</text><polygon fill="#000000" points="625.5,1383.6484,615.5,1387.6484,625.5,1391.6484,621.5,1387.6484" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="619.5" x2="899.5" y1="1387.6484" y2="1387.6484"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="152" x="631.5" y="1382.7153">cbMainConnectionState</text><polygon fill="#000000" points="353.5,1412.7813,343.5,1416.7813,353.5,1420.7813,349.5,1416.7813" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="347.5" x2="603.5" y1="1416.7813" y2="1416.7813"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="194" x="359.5" y="1411.8481">signal("MainConnectionState")</text><polygon fill="#000000" points="888.5,1426.9141,898.5,1430.9141,888.5,1434.9141,892.5,1430.9141" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="609.5" x2="894.5" y1="1430.9141" y2="1430.9141"/><polygon fill="#000000" points="86.5,1455.9141,76.5,1459.9141,86.5,1463.9141,82.5,1459.9141" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="80.5" x2="331.5" y1="1459.9141" y2="1459.9141"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="238" x="92.5" y="1454.981">event [mainConnectionStateChange]</text><polygon fill="#000000" points="625.5,1565.0469,615.5,1569.0469,625.5,1573.0469,621.5,1569.0469" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="619.5" x2="899.5" y1="1569.0469" y2="1569.0469"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="169" x="631.5" y="1564.1138">cbRemoveMainConnection</text><polygon fill="#000000" points="353.5,1594.1797,343.5,1598.1797,353.5,1602.1797,349.5,1598.1797" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="347.5" x2="603.5" y1="1598.1797" y2="1598.1797"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="211" x="359.5" y="1593.2466">signal("RemoveMainConnection")</text><polygon fill="#000000" points="888.5,1608.3125,898.5,1612.3125,888.5,1616.3125,892.5,1612.3125" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="609.5" x2="894.5" y1="1612.3125" y2="1612.3125"/><polygon fill="#000000" points="86.5,1637.3125,76.5,1641.3125,86.5,1645.3125,82.5,1641.3125" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="80.5" x2="331.5" y1="1641.3125" y2="1641.3125"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="203" x="92.5" y="1636.3794">event [removemainConnection]</text><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+activate AP #00FF00
+AP -> SM : connect()
+activate SM #00FF00
+SM -> CS : connect()
+activate CS #00FF00
+
+CS ->CR : connect()
+activate CR #00FF00
+
+CR->AM
+activate AM #00FF00
+CR - -> CS
+deactivate CR
+
+CS - -> SM
+deactivate CS
+SM - -> AP
+deactivate SM
+deactivate AP
+|||
+|||
+note right of AM
+ Please note that if same connection
+ (source and sink are completely same)
+ has bee created already, Audio Manager
+ does not notify cbNewMainConnection()
+end note
+opt main connection is not existing
+ AM -> CS : cbNewMainConnection
+ activate CS #00FF00
+ CS -> SM : signal("NewMainConnection")
+ activate SM #00FF00
+ CS - -> AM
+ deactivate CS
+ SM -> AP : event [newMainConnection\n (mainConnectionID)]
+ activate AP #00ff00
+ deactivate SM
+ deactivate AP
+ |||
+ |||
+ AM -> CS : cbMainConnectionStateChange
+ activate CS #00FF00
+ CS -> SM : signal("MainConnectionStateChange")
+ activate SM #00FF00
+ CS - -> AM
+ deactivate CS
+ SM -> AP : event [mainConnectionStateChange\n (CS_DISCONNECTED)]
+ activate AP #00ff00
+ deactivate SM
+ deactivate AP
+end
+|||
+note right of AM
+ Once connection is requested and
+ created in AudioManager, main
+ connection continuously perform
+ transition caused by policy decision
+end note
+
+loop Lifecycle of a main connection
+ |||
+ alt Transition of sound mode = Connect
+ AM -> AM : Policy_Decision()
+ activate AM #00ff00
+ deactivate AM
+ ||10||
+ ref over AP,AD : Connect Sound Route
+ ||10||
+ ref over AP,AD : Start Sound Streaming
+ ||10||
+ else Disconnect
+ ||10||
+ ref over AP,AD : Stop Sound Streaming
+ ||10||
+ ref over AP,AD : Disconnect Sound Route
+ ||10||
+ else Suspend
+ ||10||
+ ref over AP,AD : Stop Sound Streaming
+ ||10||
+ end
+ |||
+end
+
+AM -> CS : cbMainConnectionState
+activate CS #00FF00
+CS -> SM : signal("MainConnectionState")
+activate SM #00FF00
+CS - -> AM
+deactivate CS
+SM -> AP : event [mainConnectionStateChange]
+activate AP #00ff00
+deactivate SM
+deactivate AP
+|||
+|||
+AM -> CS : cbRemoveMainConnection
+activate CS #00FF00
+CS -> SM : signal("RemoveMainConnection")
+activate SM #00FF00
+CS - -> AM
+deactivate CS
+SM -> AP : event [removemainConnection]
+activate AP #00ff00
+deactivate SM
+deactivate AP
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_setmutestate.svg b/doc/parts/seq_setmutestate.svg
new file mode 100644
index 0000000..8d39775
--- /dev/null
+++ b/doc/parts/seq_setmutestate.svg
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="738px" preserveAspectRatio="none" style="width:1313px;height:738px;background:#EEEBDC;" version="1.1" viewBox="0 0 1313 738" width="1313px" zoomAndPan="magnify"><defs><filter height="300%" id="f13x6ysrvu2fjr" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#EEEBDC" height="716.2969" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="437.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="452" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="716.2969" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="582" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="711" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="716.2969" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="1081" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1095.5" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="160.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="93.9688"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="678.1641"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="139.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="268.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="101.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="268.5" y="607.0313"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="96.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="503.5" y="144.1016"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="503.5" y="552.8984"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="173.2344"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="139.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="800" y="212.3672"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="136.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="800" y="498.8984"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="189.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="932" y="459.7656"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1140" y="283.3672"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="218.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1140" y="430.6328"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="93.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1256" y="337.5"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="45" x2="45" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="273" x2="273" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="508.5" x2="508.5" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="663" x2="663" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="805" x2="805" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="937" x2="937" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1145" x2="1145" y1="83.9688" y2="726.2969"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1261" x2="1261" y1="83.9688" y2="726.2969"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="8" y="81.1387">Application</text><ellipse cx="45.5" cy="13" fill="#FFFACD" filter="url(#f13x6ysrvu2fjr)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M45.5,21 L45.5,48 M32.5,29 L58.5,29 M45.5,48 L32.5,63 M45.5,48 L58.5,63 " fill="#FFFACD" filter="url(#f13x6ysrvu2fjr)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="217" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="224" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="441.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="448.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="586" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="593" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="751" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="758" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="869" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="876" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="1085" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1092" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1215" y="81.1387">Audio Domain</text><ellipse cx="1261" cy="13" fill="#FFFACD" filter="url(#f13x6ysrvu2fjr)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1261,21 L1261,48 M1248,29 L1274,29 M1261,48 L1248,63 M1261,48 L1274,63 " fill="#FFFACD" filter="url(#f13x6ysrvu2fjr)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="160.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="93.9688"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="40.5" y="678.1641"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="139.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="268.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="101.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="268.5" y="607.0313"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="96.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="503.5" y="144.1016"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="503.5" y="552.8984"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="658.5" y="173.2344"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="139.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="800" y="212.3672"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="136.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="800" y="498.8984"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="189.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="932" y="459.7656"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1140" y="283.3672"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="218.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1140" y="430.6328"/><rect fill="#00FF00" filter="url(#f13x6ysrvu2fjr)" height="93.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1256" y="337.5"/><polygon fill="#000000" points="256.5,110.9688,266.5,114.9688,256.5,118.9688,260.5,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="50.5" x2="262.5" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="126" x="57.5" y="110.0356">SetSinkMuteState()</text><polygon fill="#000000" points="491.5,140.1016,501.5,144.1016,491.5,148.1016,495.5,144.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="278.5" x2="497.5" y1="144.1016" y2="144.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="126" x="285.5" y="139.1685">SetSinkMuteState()</text><polygon fill="#000000" points="646.5,169.2344,656.5,173.2344,646.5,177.2344,650.5,173.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="513.5" x2="652.5" y1="173.2344" y2="173.2344"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="126" x="520.5" y="168.3013">SetSinkMuteState()</text><polygon fill="#000000" points="788,208.3672,798,212.3672,788,216.3672,792,212.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="668.5" x2="794" y1="212.3672" y2="212.3672"/><polygon fill="#000000" points="524.5,222.3672,514.5,226.3672,524.5,230.3672,520.5,226.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="518.5" x2="662.5" y1="226.3672" y2="226.3672"/><polygon fill="#000000" points="289.5,236.3672,279.5,240.3672,289.5,244.3672,285.5,240.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="283.5" x2="507.5" y1="240.3672" y2="240.3672"/><polygon fill="#000000" points="56.5,250.3672,46.5,254.3672,56.5,258.3672,52.5,254.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="50.5" x2="272.5" y1="254.3672" y2="254.3672"/><polygon fill="#000000" points="1128,279.3672,1138,283.3672,1128,287.3672,1132,283.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="810" x2="1134" y1="283.3672" y2="283.3672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="145" x="817" y="278.4341">asyncSetSinkVolume()</text><polygon fill="#000000" points="1244,333.5,1254,337.5,1244,341.5,1248,337.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1150" x2="1250" y1="337.5" y2="337.5"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="64" x="1157" y="332.5669">SetMute()</text><polygon fill="#000000" points="816,347.6328,806,351.6328,816,355.6328,812,351.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="810" x2="1144" y1="351.6328" y2="351.6328"/><polygon fill="#000000" points="1161,426.6328,1151,430.6328,1161,434.6328,1157,430.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1155" x2="1260" y1="430.6328" y2="430.6328"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="86" x="1167" y="425.6997">ackSetMute()</text><polygon fill="#000000" points="953,455.7656,943,459.7656,953,463.7656,949,459.7656" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="947" x2="1139" y1="459.7656" y2="459.7656"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="179" x="959" y="454.8325">ackSetSinkVolumeChange()</text><polygon fill="#000000" points="821,494.8984,811,498.8984,821,502.8984,817,498.8984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="815" x2="931" y1="498.8984" y2="498.8984"/><polygon fill="#000000" points="524.5,548.8984,514.5,552.8984,524.5,556.8984,520.5,552.8984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="518.5" x2="799" y1="552.8984" y2="552.8984"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="166" x="530.5" y="547.9653">cbSinkMuteStateChanged</text><polygon fill="#000000" points="289.5,603.0313,279.5,607.0313,289.5,611.0313,285.5,607.0313" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="283.5" x2="502.5" y1="607.0313" y2="607.0313"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="206" x="295.5" y="602.0981">signal("sinkMuteStateChanged")</text><polygon fill="#000000" points="788,617.1641,798,621.1641,788,625.1641,792,621.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="508.5" x2="794" y1="621.1641" y2="621.1641"/><polygon fill="#000000" points="920,631.1641,930,635.1641,920,639.1641,924,635.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="805" x2="926" y1="635.1641" y2="635.1641"/><polygon fill="#000000" points="1133,645.1641,1143,649.1641,1133,653.1641,1137,649.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="937" x2="1139" y1="649.1641" y2="649.1641"/><polygon fill="#000000" points="61.5,674.1641,51.5,678.1641,61.5,682.1641,57.5,678.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="55.5" x2="267.5" y1="678.1641" y2="678.1641"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="199" x="67.5" y="673.231">event [sinkMuteStateChanged]</text><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+
+activate AP #00ff00
+AP -> SM : SetSinkMuteState()
+activate SM #00ff00
+SM -> CS : SetSinkMuteState()
+activate CS #00ff00
+CS -> CR : SetSinkMuteState()
+activate CR #00ff00
+|||
+CR -> AM
+activate AM #00ff00
+CR - -> CS
+deactivate CR
+CS- ->SM
+deactivate CS
+SM- ->AP
+deactivate SM
+deactivate AP
+
+AM -> RS : asyncSetSinkVolume()
+activate RS #00ff00
+|||
+RS -> AD : SetMute()
+activate AD #00ff00
+RS - -> AM
+deactivate RS
+deactivate AM
+|||
+|||
+AD -> RS : ackSetMute()
+deactivate AD
+activate RS #00ff00
+
+RS -> RR : ackSetSinkVolumeChange()
+activate RR #00ff00
+|||
+RR -> AM
+activate AM #00ff00
+|||
+AM -> CS : cbSinkMuteStateChanged
+activate CS #00ff00
+|||
+CS -> SM : signal("sinkMuteStateChanged")
+activate SM #00ff00
+CS- ->AM
+deactivate CS
+AM- ->RR
+deactivate AM
+RR- ->RS
+deactivate RR
+deactivate RS
+
+SM -> AP : event [sinkMuteStateChanged]
+activate AP #00ff00
+deactivate SM
+deactivate AP
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_startsoundstreaming.svg b/doc/parts/seq_startsoundstreaming.svg
new file mode 100644
index 0000000..108cfa0
--- /dev/null
+++ b/doc/parts/seq_startsoundstreaming.svg
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1017px" preserveAspectRatio="none" style="width:1501px;height:1017px;background:#EEEBDC;" version="1.1" viewBox="0 0 1501 1017" width="1501px" zoomAndPan="magnify"><defs><filter height="300%" id="f1f8zzovgj1d8a" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#EEEBDC" height="995.3594" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="582.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="597" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="995.3594" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="726.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="855.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="995.3594" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="1180.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1195" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="316.7969" style="stroke: #404040; stroke-width: 1.0;" width="10" x="88.5" y="493.7656"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="88.5" y="957.0938"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="59.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="367.5" y="464.6328"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="367.5" y="646.1641"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="367.5" y="898.8281"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="648.5" y="854.5625"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="944.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="224.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="944.5" y="367.5"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="144.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="944.5" y="768.5625"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1076.5" y="328.3672"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1076.5" y="729.4297"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="112.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="269.3672"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="156.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="435.5"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="121.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="675.2969"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="130.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1375.5" y="169.1016"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1380.5" y="220.2344"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="93" x2="93" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="372" x2="372" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="653.5" x2="653.5" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="807.5" x2="807.5" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="949.5" x2="949.5" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1081.5" x2="1081.5" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1244.5" x2="1244.5" y1="83.9688" y2="1005.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1380.5" x2="1380.5" y1="83.9688" y2="1005.3594"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="56" y="81.1387">Application</text><ellipse cx="93.5" cy="13" fill="#FFFACD" filter="url(#f1f8zzovgj1d8a)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M93.5,21 L93.5,48 M80.5,29 L106.5,29 M93.5,48 L80.5,63 M93.5,48 L106.5,63 " fill="#FFFACD" filter="url(#f1f8zzovgj1d8a)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="316" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="323" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="586.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="593.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="730.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="737.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="895.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="902.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="1013.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="1020.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="1184.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1191.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1334.5" y="81.1387">Audio Domain</text><ellipse cx="1380.5" cy="13" fill="#FFFACD" filter="url(#f1f8zzovgj1d8a)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1380.5,21 L1380.5,48 M1367.5,29 L1393.5,29 M1380.5,48 L1367.5,63 M1380.5,48 L1393.5,63 " fill="#FFFACD" filter="url(#f1f8zzovgj1d8a)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="316.7969" style="stroke: #404040; stroke-width: 1.0;" width="10" x="88.5" y="493.7656"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="88.5" y="957.0938"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="59.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="367.5" y="464.6328"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="164.3984" style="stroke: #404040; stroke-width: 1.0;" width="10" x="367.5" y="646.1641"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="367.5" y="898.8281"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="648.5" y="854.5625"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="944.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="224.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="944.5" y="367.5"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="144.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="944.5" y="768.5625"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1076.5" y="328.3672"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1076.5" y="729.4297"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="68.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="112.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="269.3672"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="156.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="435.5"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="121.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1239.5" y="675.2969"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="130.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1375.5" y="169.1016"/><rect fill="#00FF00" filter="url(#f1f8zzovgj1d8a)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1380.5" y="220.2344"/><polygon fill="#000000" points="1227.5,110.9688,1237.5,114.9688,1227.5,118.9688,1231.5,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="954.5" x2="1233.5" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="198" x="961.5" y="110.0356">asyncSetSourceState (SS_ON)</text><polygon fill="#000000" points="1363.5,165.1016,1373.5,169.1016,1363.5,173.1016,1367.5,169.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1249.5" x2="1369.5" y1="169.1016" y2="169.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="107" x="1256.5" y="164.1685">setMute(SS_ON)</text><polygon fill="#000000" points="960.5,179.2344,950.5,183.2344,960.5,187.2344,956.5,183.2344" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="954.5" x2="1243.5" y1="183.2344" y2="183.2344"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1390.5" x2="1432.5" y1="212.3672" y2="212.3672"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1432.5" x2="1432.5" y1="212.3672" y2="225.3672"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1391.5" x2="1432.5" y1="225.3672" y2="225.3672"/><polygon fill="#000000" points="1401.5,221.3672,1391.5,225.3672,1401.5,229.3672,1397.5,225.3672" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="92" x="1397.5" y="207.3013">Mute(UnMute)</text><polygon fill="#000000" points="1260.5,265.3672,1250.5,269.3672,1260.5,273.3672,1256.5,269.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1254.5" x2="1374.5" y1="269.3672" y2="269.3672"/><polygon fill="#000000" points="1097.5,324.3672,1087.5,328.3672,1097.5,332.3672,1093.5,328.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1091.5" x2="1238.5" y1="328.3672" y2="328.3672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="1103.5" y="323.4341">ackSetSourceState()</text><polygon fill="#000000" points="965.5,363.5,955.5,367.5,965.5,371.5,961.5,367.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="959.5" x2="1075.5" y1="367.5" y2="367.5"/><polygon fill="#000000" points="1232.5,377.5,1242.5,381.5,1232.5,385.5,1236.5,381.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1081.5" x2="1238.5" y1="381.5" y2="381.5"/><polygon fill="#000000" points="1227.5,431.5,1237.5,435.5,1227.5,439.5,1231.5,435.5" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="954.5" x2="1233.5" y1="435.5" y2="435.5"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="149" x="961.5" y="430.5669">asyncSetSourceState()</text><polygon fill="#000000" points="388.5,460.6328,378.5,464.6328,388.5,468.6328,384.5,464.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="382.5" x2="1238.5" y1="464.6328" y2="464.6328"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="251" x="394.5" y="459.6997">signal("asyncSetSourceState(SS_ON)")</text><polygon fill="#000000" points="109.5,489.7656,99.5,493.7656,109.5,497.7656,105.5,493.7656" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="103.5" x2="366.5" y1="493.7656" y2="493.7656"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="225" x="115.5" y="488.8325">event [asyncSetSourceState("on")]</text><polygon fill="#FBFB77" filter="url(#f1f8zzovgj1d8a)" points="8,536.8984,8,576.8984,176,576.8984,176,546.8984,166,536.8984,8,536.8984" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="166" x2="166" y1="536.8984" y2="546.8984"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="176" x2="166" y1="546.8984" y2="546.8984"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="138" x="14" y="553.9653">Prepare audio device.</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="147" x="14" y="569.0981">And start audio playing</text><polygon fill="#000000" points="960.5,588.1641,950.5,592.1641,960.5,596.1641,956.5,592.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="954.5" x2="1243.5" y1="592.1641" y2="592.1641"/><polygon fill="#000000" points="355.5,642.1641,365.5,646.1641,355.5,650.1641,359.5,646.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="98.5" x2="361.5" y1="646.1641" y2="646.1641"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="105.5" y="641.231">ackSetSourceState()</text><polygon fill="#000000" points="1227.5,671.2969,1237.5,675.2969,1227.5,679.2969,1231.5,675.2969" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="377.5" x2="1233.5" y1="675.2969" y2="675.2969"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="384.5" y="670.3638">ackSetSourceState()</text><polygon fill="#000000" points="1097.5,725.4297,1087.5,729.4297,1097.5,733.4297,1093.5,729.4297" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1091.5" x2="1238.5" y1="729.4297" y2="729.4297"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="99" x="1103.5" y="724.4966">ackSetSource()</text><polygon fill="#000000" points="965.5,764.5625,955.5,768.5625,965.5,772.5625,961.5,768.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="959.5" x2="1075.5" y1="768.5625" y2="768.5625"/><polygon fill="#000000" points="1227.5,778.5625,1237.5,782.5625,1227.5,786.5625,1231.5,782.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1081.5" x2="1233.5" y1="782.5625" y2="782.5625"/><polygon fill="#000000" points="388.5,792.5625,378.5,796.5625,388.5,800.5625,384.5,796.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="382.5" x2="1243.5" y1="796.5625" y2="796.5625"/><polygon fill="#000000" points="104.5,806.5625,94.5,810.5625,104.5,814.5625,100.5,810.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="98.5" x2="371.5" y1="810.5625" y2="810.5625"/><polygon fill="#000000" points="669.5,850.5625,659.5,854.5625,669.5,858.5625,665.5,854.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="663.5" x2="943.5" y1="854.5625" y2="854.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="214" x="675.5" y="834.6294">cbMainConnectionStateChanged(</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="111" x="715.5" y="849.7622">CS_CONNECTED)</text><polygon fill="#000000" points="388.5,894.8281,378.5,898.8281,388.5,902.8281,384.5,898.8281" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="382.5" x2="647.5" y1="898.8281" y2="898.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="252" x="394.5" y="878.895">signal("mainConnectionStateChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="121" x="434.5" y="894.0278">CS_CONNECTED)")</text><polygon fill="#000000" points="937.5,909.0938,947.5,913.0938,937.5,917.0938,941.5,913.0938" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="653.5" x2="943.5" y1="913.0938" y2="913.0938"/><polygon fill="#000000" points="109.5,953.0938,99.5,957.0938,109.5,961.0938,105.5,957.0938" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="103.5" x2="366.5" y1="957.0938" y2="957.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="250" x="115.5" y="937.1606">event [mainConnectionStateChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="116" x="155.5" y="952.2935">CS_CONNECTED)]</text><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+
+AM -> RS : asyncSetSourceState (SS_ON)
+activate AM #00FF00
+activate RS #00ff00
+|||
+RS -> AD : setMute(SS_ON)
+activate AD #00ff00
+RS - -> AM
+deactivate RS
+deactivate AM
+
+AD -> AD : Mute(UnMute)
+activate AD #00ff00
+deactivate AD
+
+AD -> RS
+activate RS #00ff00
+deactivate AD
+
+RS -> RR : ackSetSourceState()
+activate RR #00ff00
+|||
+RR -> AM
+activate AM #00ff00
+RR - -> RS
+deactivate RR
+deactivate RS
+|||
+AM -> RS : asyncSetSourceState()
+activate RS #00ff00
+
+RS -> SM : signal("asyncSetSourceState(SS_ON)")
+activate SM #00ff00
+SM -> AP : event [asyncSetSourceState("on")]
+activate AP #00ff00
+deactivate SM
+note over AP: Prepare audio device.\nAnd start audio playing
+RS - -> AM
+|||
+deactivate RS
+deactivate AM
+AP -> SM : ackSetSourceState()
+activate SM #00ff00
+SM -> RS : ackSetSourceState()
+activate RS #00ff00
+|||
+RS -> RR : ackSetSource()
+activate RR #00ff00
+|||
+RR -> AM
+activate AM #00ff00
+RR - -> RS
+deactivate RR
+RS- ->SM
+deactivate RS
+SM- ->AP
+deactivate SM
+deactivate AP
+
+AM -> CS : cbMainConnectionStateChanged(\n CS_CONNECTED)
+activate CS #00ff00
+CS -> SM : signal("mainConnectionStateChanged (\n CS_CONNECTED)")
+activate SM #00ff00
+CS - -> AM
+deactivate CS
+deactivate AM
+SM -> AP : event [mainConnectionStateChanged (\n CS_CONNECTED)]
+activate AP #00ff00
+deactivate SM
+deactivate AP
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_startup.svg b/doc/parts/seq_startup.svg
new file mode 100644
index 0000000..27f0ab0
--- /dev/null
+++ b/doc/parts/seq_startup.svg
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="356px" preserveAspectRatio="none" style="width:1047px;height:356px;background:#EEEBDC;" version="1.1" viewBox="0 0 1047 356" width="1047px" zoomAndPan="magnify"><defs><filter height="300%" id="f5gmqbksvd81r" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#EEEBDC" height="334.6328" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="227" y="4"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="121" x="237.5" y="16.0669">CommandPlugIn</text><rect fill="#EEEBDC" height="334.6328" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="371" y="4"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="178" x="495.5" y="16.0669">Audio Manager Daemon</text><rect fill="#EEEBDC" height="334.6328" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="800" y="4"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="103" x="812.5" y="16.0669">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="241.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="589" y="93.9688"/><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="594" y="122.9688"/><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="594" y="291.5"/><rect fill="#EEEBDC" filter="url(#f5gmqbksvd81r)" height="82.3984" style="stroke: #000000; stroke-width: 2.0;" width="1023" x="13" y="173.1016"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="60" x2="60" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="164" x2="164" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="298" x2="298" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="452" x2="452" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="594" x2="594" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="726" x2="726" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="864" x2="864" y1="83.9688" y2="344.6328"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="980" x2="980" y1="83.9688" y2="344.6328"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="23" y="81.1387">Application</text><ellipse cx="60.5" cy="13" fill="#FFFACD" filter="url(#f5gmqbksvd81r)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M60.5,21 L60.5,48 M47.5,29 L73.5,29 M60.5,48 L47.5,63 M60.5,48 L73.5,63 " fill="#FFFACD" filter="url(#f5gmqbksvd81r)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="108" y="51"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="115" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="231" y="51"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="238" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="375" y="51"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="382" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="540" y="51"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="547" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="658" y="51"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="665" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="804" y="51"/><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="811" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="Yu Gothic UI" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="934" y="81.1387">Audio Domain</text><ellipse cx="980" cy="13" fill="#FFFACD" filter="url(#f5gmqbksvd81r)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M980,21 L980,48 M967,29 L993,29 M980,48 L967,63 M980,48 L993,63 " fill="#FFFACD" filter="url(#f5gmqbksvd81r)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="241.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="589" y="93.9688"/><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="594" y="122.9688"/><rect fill="#00FF00" filter="url(#f5gmqbksvd81r)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="594" y="291.5"/><line style="stroke: #000000; stroke-width: 1.0;" x1="604" x2="646" y1="115.1016" y2="115.1016"/><line style="stroke: #000000; stroke-width: 1.0;" x1="646" x2="646" y1="115.1016" y2="128.1016"/><line style="stroke: #000000; stroke-width: 1.0;" x1="605" x2="646" y1="128.1016" y2="128.1016"/><polygon fill="#000000" points="615,124.1016,605,128.1016,615,132.1016,611,128.1016" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="58" x="611" y="110.0356">Startup()</text><rect fill="none" height="82.3984" style="stroke: #000000; stroke-width: 2.0;" width="1023" x="13" y="173.1016"/><polygon fill="#EEEEEE" points="13,173.1016,90,173.1016,90,180.1016,80,190.1016,13,190.1016,13,173.1016" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="32" x="28" y="186.1685">loop</text><text fill="#000000" font-family="sans-serif" font-size="11" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="135" x="105" y="185.312">[Number of Domains]</text><rect fill="#FFFFFF" filter="url(#f5gmqbksvd81r)" height="40.2656" style="stroke: #000000; stroke-width: 2.0;" width="1005" x="20" y="200.2344"/><polygon fill="#EEEEEE" points="20,200.2344,86,200.2344,86,207.2344,76,217.2344,20,217.2344,20,200.2344" style="stroke: #000000; stroke-width: 2.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="21" x="33" y="214.3013">ref</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="76" x="486.5" y="233.3013">Registration</text><line style="stroke: #000000; stroke-width: 1.0;" x1="604" x2="646" y1="283.6328" y2="283.6328"/><line style="stroke: #000000; stroke-width: 1.0;" x1="646" x2="646" y1="283.6328" y2="296.6328"/><line style="stroke: #000000; stroke-width: 1.0;" x1="605" x2="646" y1="296.6328" y2="296.6328"/><polygon fill="#000000" points="615,292.6328,605,296.6328,615,300.6328,611,296.6328" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="78" x="611" y="278.5669">wait_event()</text><!--
+@startuml
+hide footbox
+
+skinparam backgroundColor #EEEBDC
+skinparam sequence {
+ ArrowColor black
+ ActorBorderColor black
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontName Yu Gothic UI
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+ ActorFontName Yu Gothic UI
+
+ BoxBorderColor #deb887
+}
+
+actor Application
+participant SoundManager
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver
+ participant AudioManager
+ participant IAmRoutingReceive
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend
+end box
+actor "Audio Domain"
+
+activate AudioManager #00FF00
+AudioManager -> AudioManager: Startup()
+activate AudioManager #00FF00
+deactivate AudioManager
+
+loop Number of Domains
+||10||
+ref over Application, "Audio Domain" : Registration
+||10||
+end
+
+AudioManager -> AudioManager: wait_event()
+activate AudioManager #00FF00
+
+deactivate AudioManager
+@enduml
+
+PlantUML version 1.2017.16beta5(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/seq_stopsoundstreaming.svg b/doc/parts/seq_stopsoundstreaming.svg
new file mode 100644
index 0000000..41a2e41
--- /dev/null
+++ b/doc/parts/seq_stopsoundstreaming.svg
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="1108px" preserveAspectRatio="none" style="width:1478px;height:1108px;background:#EEEBDC;" version="1.1" viewBox="0 0 1478 1108" width="1478px" zoomAndPan="magnify"><defs><filter height="300%" id="f148ll50d7lbg7" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#EEEBDC" height="1086.625" style="stroke: #DEB887; stroke-width: 1.0;" width="142" x="589.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="113" x="604" y="15.1387">CommandPlugIn</text><rect fill="#EEEBDC" height="1086.625" style="stroke: #DEB887; stroke-width: 1.0;" width="427" x="733.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="169" x="862.5" y="15.1387">Audio Manager Daemon</text><rect fill="#EEEBDC" height="1086.625" style="stroke: #DEB887; stroke-width: 1.0;" width="128" x="1187.5" y="4"/><text fill="#000000" font-family="sans-serif" font-size="12" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="99" x="1202" y="15.1387">RoutingPlugIn</text><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="166.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="97.5" y="228.3672"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="97.5" y="727.8281"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="376.5" y="184.1016"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="59.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="376.5" y="364.8984"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="376.5" y="669.5625"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="655.5" y="625.2969"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="166.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="951.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="338.0625" style="stroke: #404040; stroke-width: 1.0;" width="10" x="951.5" y="517.2969"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="951.5" y="1034.625"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1083.5" y="478.1641"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="83.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1083.5" y="995.4922"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="166.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="107.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="424.0313"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="812.0938"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="137.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="941.4922"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="100.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1362.5" y="841.2266"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1367.5" y="892.3594"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="102" x2="102" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="381" x2="381" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="660.5" x2="660.5" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="814.5" x2="814.5" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="956.5" x2="956.5" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1088.5" x2="1088.5" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1251.5" x2="1251.5" y1="83.9688" y2="1096.625"/><line style="stroke: #404040; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="1367.5" x2="1367.5" y1="83.9688" y2="1096.625"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="69" x="65" y="81.1387">Application</text><ellipse cx="102.5" cy="13" fill="#FFFACD" filter="url(#f148ll50d7lbg7)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M102.5,21 L102.5,48 M89.5,29 L115.5,29 M102.5,48 L89.5,63 M102.5,48 L115.5,63 " fill="#FFFACD" filter="url(#f148ll50d7lbg7)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="109" x="325" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="95" x="332" y="69.1387">SoundManager</text><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="130" x="593.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="116" x="600.5" y="69.1387">IAmCommandSend</text><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="151" x="737.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="137" x="744.5" y="69.1387">IAmCommandReceiver</text><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="104" x="902.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="90" x="909.5" y="69.1387">AudioManager</text><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="132" x="1020.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="118" x="1027.5" y="69.1387">IAmRoutingReceive</text><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="27.9688" style="stroke: #000000; stroke-width: 1.5;" width="116" x="1191.5" y="51"/><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="102" x="1198.5" y="69.1387">IAmRoutingSend</text><text fill="#000000" font-family="sans-serif" font-size="12" lengthAdjust="spacingAndGlyphs" textLength="86" x="1321.5" y="81.1387">Audio Domain</text><ellipse cx="1367.5" cy="13" fill="#FFFACD" filter="url(#f148ll50d7lbg7)" rx="8" ry="8" style="stroke: #000000; stroke-width: 2.0;"/><path d="M1367.5,21 L1367.5,48 M1354.5,29 L1380.5,29 M1367.5,48 L1354.5,63 M1367.5,48 L1380.5,63 " fill="#FFFACD" filter="url(#f148ll50d7lbg7)" style="stroke: #000000; stroke-width: 2.0;"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="166.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="97.5" y="228.3672"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="97.5" y="727.8281"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="376.5" y="184.1016"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="59.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="376.5" y="364.8984"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="88.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="376.5" y="669.5625"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="58.5313" style="stroke: #404040; stroke-width: 1.0;" width="10" x="655.5" y="625.2969"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="166.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="951.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="338.0625" style="stroke: #404040; stroke-width: 1.0;" width="10" x="951.5" y="517.2969"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="30" style="stroke: #404040; stroke-width: 1.0;" width="10" x="951.5" y="1034.625"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="53.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1083.5" y="478.1641"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="83.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1083.5" y="995.4922"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="166.6641" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="114.9688"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="107.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="424.0313"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="43.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="812.0938"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="137.1328" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1246.5" y="941.4922"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="100.2656" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1362.5" y="841.2266"/><rect fill="#00FF00" filter="url(#f148ll50d7lbg7)" height="28" style="stroke: #404040; stroke-width: 1.0;" width="10" x="1367.5" y="892.3594"/><polygon fill="#000000" points="1234.5,110.9688,1244.5,114.9688,1234.5,118.9688,1238.5,114.9688" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="961.5" x2="1240.5" y1="114.9688" y2="114.9688"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="153" x="968.5" y="110.0356">asyncSetSourceState ()</text><polygon fill="#000000" points="397.5,180.1016,387.5,184.1016,397.5,188.1016,393.5,184.1016" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="391.5" x2="1245.5" y1="184.1016" y2="184.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="144" x="403.5" y="164.1685">asyncSetSourceState(</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="84" x="419.5" y="179.3013">SS_PAUSED)</text><polygon fill="#000000" points="118.5,224.3672,108.5,228.3672,118.5,232.3672,114.5,228.3672" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="112.5" x2="375.5" y1="228.3672" y2="228.3672"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="189" x="124.5" y="208.4341">event [asyncSetSourceState(</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="67" x="140.5" y="223.5669">"paused")]</text><polygon fill="#000000" points="1234.5,238.6328,1244.5,242.6328,1234.5,246.6328,1238.5,242.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="381.5" x2="1240.5" y1="242.6328" y2="242.6328"/><polygon fill="#000000" points="967.5,277.6328,957.5,281.6328,967.5,285.6328,963.5,281.6328" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="961.5" x2="1250.5" y1="281.6328" y2="281.6328"/><polygon fill="#FBFB77" filter="url(#f148ll50d7lbg7)" points="8,294.6328,8,334.6328,193,334.6328,193,304.6328,183,294.6328,8,294.6328" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="183" x2="183" y1="294.6328" y2="304.6328"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="193" x2="183" y1="304.6328" y2="304.6328"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="122" x="14" y="311.6997">Stop audio playing.</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="164" x="14" y="326.8325">And release audio device.</text><polygon fill="#000000" points="364.5,360.8984,374.5,364.8984,364.5,368.8984,368.5,364.8984" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="107.5" x2="370.5" y1="364.8984" y2="364.8984"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="114.5" y="359.9653">ackSetSourceState()</text><polygon fill="#000000" points="1234.5,420.0313,1244.5,424.0313,1234.5,428.0313,1238.5,424.0313" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="381.5" x2="1240.5" y1="424.0313" y2="424.0313"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="388.5" y="419.0981">ackSetSourceState()</text><polygon fill="#000000" points="1104.5,474.1641,1094.5,478.1641,1104.5,482.1641,1100.5,478.1641" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1098.5" x2="1245.5" y1="478.1641" y2="478.1641"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="1110.5" y="473.231">ackSetSourceState()</text><polygon fill="#000000" points="972.5,513.2969,962.5,517.2969,972.5,521.2969,968.5,517.2969" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="966.5" x2="1082.5" y1="517.2969" y2="517.2969"/><polygon fill="#000000" points="1239.5,527.2969,1249.5,531.2969,1239.5,535.2969,1243.5,531.2969" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1088.5" x2="1245.5" y1="531.2969" y2="531.2969"/><polygon fill="#000000" points="676.5,621.2969,666.5,625.2969,676.5,629.2969,672.5,625.2969" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="670.5" x2="950.5" y1="625.2969" y2="625.2969"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="218" x="682.5" y="605.3638">cbMainConnectionStateChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="706.5" y="620.4966">CS_SUSPENDED)]</text><polygon fill="#000000" points="397.5,665.5625,387.5,669.5625,397.5,673.5625,393.5,669.5625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="391.5" x2="654.5" y1="669.5625" y2="669.5625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="250" x="403.5" y="649.6294">signal("MainConnectionStateChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="122" x="419.5" y="664.7622">CS_SUSPENDED)")</text><polygon fill="#000000" points="939.5,679.8281,949.5,683.8281,939.5,687.8281,943.5,683.8281" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="660.5" x2="945.5" y1="683.8281" y2="683.8281"/><polygon fill="#000000" points="118.5,723.8281,108.5,727.8281,118.5,731.8281,114.5,727.8281" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="112.5" x2="375.5" y1="727.8281" y2="727.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="250" x="124.5" y="707.895">event [mainConnectionStateChanged (</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="117" x="140.5" y="723.0278">CS_SUSPENDED)]</text><polygon fill="#000000" points="1234.5,808.0938,1244.5,812.0938,1234.5,816.0938,1238.5,812.0938" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="961.5" x2="1240.5" y1="812.0938" y2="812.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="149" x="968.5" y="807.1606">asyncSetSourceState()</text><polygon fill="#000000" points="1350.5,837.2266,1360.5,841.2266,1350.5,845.2266,1354.5,841.2266" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1256.5" x2="1356.5" y1="841.2266" y2="841.2266"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="64" x="1263.5" y="836.2935">SetMute()</text><polygon fill="#000000" points="967.5,851.3594,957.5,855.3594,967.5,859.3594,963.5,855.3594" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="961.5" x2="1250.5" y1="855.3594" y2="855.3594"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1377.5" x2="1419.5" y1="884.4922" y2="884.4922"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1419.5" x2="1419.5" y1="884.4922" y2="897.4922"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1378.5" x2="1419.5" y1="897.4922" y2="897.4922"/><polygon fill="#000000" points="1388.5,893.4922,1378.5,897.4922,1388.5,901.4922,1384.5,897.4922" style="stroke: #000000; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="82" x="1384.5" y="879.4263">Mute (MUTE)</text><polygon fill="#000000" points="1267.5,937.4922,1257.5,941.4922,1267.5,945.4922,1263.5,941.4922" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1261.5" x2="1366.5" y1="941.4922" y2="941.4922"/><polygon fill="#000000" points="1104.5,991.4922,1094.5,995.4922,1104.5,999.4922,1100.5,995.4922" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="1098.5" x2="1245.5" y1="995.4922" y2="995.4922"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="134" x="1110.5" y="990.5591">ackSetSourceState()</text><polygon fill="#000000" points="972.5,1030.625,962.5,1034.625,972.5,1038.625,968.5,1034.625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0;" x1="966.5" x2="1082.5" y1="1034.625" y2="1034.625"/><polygon fill="#000000" points="1239.5,1074.625,1249.5,1078.625,1239.5,1082.625,1243.5,1078.625" style="stroke: #000000; stroke-width: 1.0;"/><line style="stroke: #000000; stroke-width: 1.0; stroke-dasharray: 2.0,2.0;" x1="1088.5" x2="1245.5" y1="1078.625" y2="1078.625"/><!--
+@startuml
+hide footbox
+
+'skinparam defaultFontSize 10
+skinparam backgroundColor #EEEBDC
+skinparam sequenceGroupHeaderFontSize 12
+
+skinparam sequence {
+ ArrowColor black
+
+ ActorBorderColor black
+
+ LifeLineBorderColor #404040
+ LifeLineBackgroundColor #404040
+
+ ParticipantBorderColor black
+ ParticipantBackgroundColor #00FF00
+ ParticipantFontSize 12
+ ParticipantFontColor black
+
+ ActorBackgroundColor #FFFACD
+ ActorFontColor black
+ ActorFontSize 12
+
+
+ BoxBorderColor #deb887
+ BoxFontSize 12
+ TitleFontSize 20
+}
+
+
+actor Application as AP
+participant SoundManager as SM
+box "CommandPlugIn" #EEEBDC
+ participant IAmCommandSend as CS
+end box
+box "Audio Manager Daemon" #EEEBDC
+ participant IAmCommandReceiver as CR
+ participant AudioManager as AM
+ participant IAmRoutingReceive as RR
+end box
+box "RoutingPlugIn" #EEEBDC
+ participant IAmRoutingSend as RS
+end box
+actor "Audio Domain" as AD
+
+
+AM -> RS : asyncSetSourceState ()
+activate AM #00FF00
+activate RS #00ff00
+|||
+RS -> SM : asyncSetSourceState(\n SS_PAUSED)
+activate SM #00ff00
+SM -> AP : event [asyncSetSourceState(\n "paused")]
+activate AP #00ff00
+SM- ->RS
+deactivate SM
+|||
+RS - -> AM
+deactivate RS
+deactivate AM
+note over AP: Stop audio playing.\nAnd release audio device.
+AP -> SM : ackSetSourceState()
+activate SM #00ff00
+deactivate AP
+SM -> RS : ackSetSourceState()
+deactivate SM
+activate RS #00ff00
+|||
+RS -> RR : ackSetSourceState()
+activate RR #00ff00
+|||
+RR -> AM
+activate AM #00ff00
+RR - -> RS
+deactivate RR
+deactivate RS
+
+|||
+|||
+AM -> CS : cbMainConnectionStateChanged (\n CS_SUSPENDED)]
+activate CS #00ff00
+
+CS -> SM : signal("MainConnectionStateChanged (\n CS_SUSPENDED)")
+activate SM #00ff00
+CS - -> AM
+deactivate CS
+SM -> AP : event [mainConnectionStateChanged (\n CS_SUSPENDED)]
+activate AP #00ff00
+deactivate SM
+deactivate AP
+|||
+AM -> RS : asyncSetSourceState()
+activate RS #00ff00
+RS -> AD : SetMute()
+activate AD #00ff00
+RS - -> AM
+deactivate RS
+deactivate AM
+
+AD -> AD : Mute (MUTE)
+activate AD #00ff00
+deactivate AD
+AD -> RS
+deactivate AD
+activate RS #00ff00
+|||
+RS -> RR : ackSetSourceState()
+activate RR #00ff00
+|||
+RR -> AM
+activate AM #00ff00
+deactivate AM
+RR - -> RS
+deactivate RR
+deactivate RS
+@enduml
+
+PlantUML version 1.2017.18beta10(Unknown compile time)
+(GPL source distribution)
+Java Runtime: Java(TM) SE Runtime Environment
+JVM: Java HotSpot(TM) 64-Bit Server VM
+Java Version: 1.7.0_25-b15
+Operating System: Linux
+Default Encoding: UTF-8
+Language: en
+Country: US
+--></g></svg> \ No newline at end of file
diff --git a/doc/parts/software-stack.png b/doc/parts/software-stack.png
new file mode 100644
index 0000000..cdca6ce
--- /dev/null
+++ b/doc/parts/software-stack.png
Binary files differ
diff --git a/doc/parts/software-stack2.png b/doc/parts/software-stack2.png
new file mode 100644
index 0000000..870c22f
--- /dev/null
+++ b/doc/parts/software-stack2.png
Binary files differ
diff --git a/doc/parts/typical-usecase.png b/doc/parts/typical-usecase.png
new file mode 100644
index 0000000..47a2d33
--- /dev/null
+++ b/doc/parts/typical-usecase.png
Binary files differ
diff --git a/doc/parts/typical-usecase2.png b/doc/parts/typical-usecase2.png
new file mode 100644
index 0000000..4d05304
--- /dev/null
+++ b/doc/parts/typical-usecase2.png
Binary files differ
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
new file mode 100644
index 0000000..fe8f74b
--- /dev/null
+++ b/include/CMakeLists.txt
@@ -0,0 +1,18 @@
+#
+# Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+if(DEFINED CMAKE_INSTALL_INCLUDEDIR)
+ INSTALL(FILES libsoundmanager.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+endif(DEFINED CMAKE_INSTALL_INCLUDEDIR)
diff --git a/include/libsoundmanager.hpp b/include/libsoundmanager.hpp
new file mode 100644
index 0000000..55e23df
--- /dev/null
+++ b/include/libsoundmanager.hpp
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef LIBSOUNDMANAGER_H
+#define LIBSOUNDMANAGER_H
+#include <vector>
+#include <map>
+#include <string>
+#include <functional>
+#include <json-c/json.h>
+#include <systemd/sd-event.h>
+extern "C"
+{
+#include <afb/afb-binding.h>
+#include <afb/afb-wsj1.h>
+#include <afb/afb-ws-client.h>
+}
+
+class LibSoundmanager
+{
+public:
+ LibSoundmanager();
+ ~LibSoundmanager();
+ LibSoundmanager(const LibSoundmanager &) = delete;
+ LibSoundmanager &operator=(const LibSoundmanager &) = delete;
+ int init(int port, const std::string& token);
+
+ using handler_asyncSetSourceState = std::function<void(int sourceID, int handle)>;
+
+ enum EventType_AsyncSetSourceState {
+ Event_AsyncSetSourceState_On = 1,
+ Event_AsyncSetSourceState_Off ,
+ Event_AsyncSetSourceState_Pause
+ };
+
+ /* Method */
+ int registerSource(const std::string& sourceName);
+ int connect(int sourceID, int sinkID);
+ int connect(int sourceID, const std::string& sinkName = "default");
+ int disconnect(int connectionID);
+ int ackSetSourceState(int handle, int error);
+
+ int call(const std::string& verb, struct json_object* arg);
+ int call(const char* verb, struct json_object* arg);
+ int subscribe(const std::string& event_name);
+ int unsubscribe(const std::string& event_name);
+ void set_event_handler(enum EventType_AsyncSetSourceState et, handler_asyncSetSourceState f);
+ void register_callback(
+ 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);
+ void register_callback(
+ void (*reply_cb)(struct json_object* reply_contents),
+ void (*hangup_cb)(void) = nullptr);
+
+private:
+ int run_eventloop();
+ int init_event();
+ int initialize_websocket();
+ int dispatch_asyncSetSourceState(int sourceID, int handle, const std::string& sourceState);
+
+ void (*onEvent)(const std::string& event, struct json_object* event_contents);
+ void (*onReply)(struct json_object* reply);
+ void (*onHangup)(void);
+
+ struct afb_wsj1* sp_websock;
+ struct afb_wsj1_itf minterface;
+ sd_event* mploop;
+ int mport;
+ std::string mtoken;
+ std::vector<int> msourceIDs;
+ std::map<EventType_AsyncSetSourceState, std::function<void(int sourceID, int handle)>> handlers;
+
+public:
+ /* Don't use/ Internal only */
+ void on_hangup(void *closure, struct afb_wsj1 *wsj);
+ void on_call(void *closure, const char *api, const char *verb, struct afb_wsj1_msg *msg);
+ void on_event(void *closure, const char *event, struct afb_wsj1_msg *msg);
+ void on_reply(void *closure, struct afb_wsj1_msg *msg);
+};
+
+#endif /* LIBSOUNDMANAGER_H */
diff --git a/libsoundmanager/CMakeLists.txt b/libsoundmanager/CMakeLists.txt
new file mode 100644
index 0000000..4c25a6c
--- /dev/null
+++ b/libsoundmanager/CMakeLists.txt
@@ -0,0 +1,48 @@
+#
+# Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+
+cmake_minimum_required(VERSION 2.8)
+
+set(TARGET_LIBSM soundmanager)
+add_definitions("-std=c++11")
+
+pkg_check_modules(libsm_depends json-c libafbwsc libsystemd)
+set(libsm_sources libsoundmanager.cpp)
+
+include_directories(${LIBSM_INCLUDE_DIR})
+link_libraries(-Wl,--as-needed -Wl,--gc-sections -Wl,--no-undefined)
+
+add_library(${TARGET_LIBSM} SHARED ${libsm_sources})
+target_compile_options(${TARGET_LIBSM} PUBLIC ${libsm_depends_CFLAGS})
+
+if(DEFINED DEBUGMODE)
+ target_compile_options(${TARGET_LIBSM} PRIVATE -g -O0)
+else(DEFINED DEBUGMODE)
+ target_compile_options(${TARGET_LIBSM} PRIVATE -g -O2)
+endif(DEFINED DEBUGMODE)
+
+include_directories(${TARGET_LIBSM} ${libsm_depends_INCLUDE_DIRS})
+target_link_libraries(${TARGET_LIBSM} afbwsc -lpthread ${link_libraries} ${libsm_depends_LIBRARIES})
+
+if(DEFINED CMAKE_INSTALL_LIBDIR)
+ INSTALL(TARGETS ${TARGET_LIBSM}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+endif(DEFINED CMAKE_INSTALL_LIBDIR)
+
+#####################
+#add_subdirectory(test)
+
diff --git a/libsoundmanager/libsoundmanager.cpp b/libsoundmanager/libsoundmanager.cpp
new file mode 100644
index 0000000..c61f9d2
--- /dev/null
+++ b/libsoundmanager/libsoundmanager.cpp
@@ -0,0 +1,676 @@
+/*
+ * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdarg.h>
+#include <sys/socket.h>
+#include <iostream>
+#include <algorithm>
+#include <thread>
+#include <errno.h>
+#include <libsoundmanager.hpp>
+
+#define ELOG(args,...) _ELOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)
+#ifdef DEBUGMODE
+ #define DLOG(args,...) _DLOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)
+#else
+ #define DLOG(args,...)
+#endif
+static void _DLOG(const char* func, const int line, const char* log, ...);
+static void _ELOG(const char* func, const int line, const char* log, ...);
+
+using namespace std;
+
+static bool has_verb(const std::string& verb);
+static const char API[] = "soundmanager";
+
+static const std::vector<std::string> api_list{
+ std::string("connect"),
+ std::string("disconnect"),
+ std::string("setVolume"),
+ std::string("volumeStep"),
+ std::string("setSinkMuteState"),
+ std::string("getListMainConnections"),
+ std::string("ackConnect"),
+ std::string("ackDisconnect"),
+ std::string("ackSetSourceState"),
+ std::string("registerSource"),
+ std::string("deregisterSource"),
+ std::string("subscribe"),
+ std::string("unsubscribe")
+};
+
+static const std::vector<std::string> event_list{
+ std::string("newMainConnection"),
+ std::string("volumeChanged"),
+ std::string("removedMainConnection"),
+ std::string("sinkMuteStateChanged"),
+ std::string("mainConnectionStateChanged"),
+ std::string("setRoutingReady"),
+ std::string("setRoutingRundown"),
+ std::string("asyncConnect"),
+ std::string("asyncSetSourceState")
+};
+
+static void _on_hangup_static(void *closure, struct afb_wsj1 *wsj)
+{
+ static_cast<LibSoundmanager*>(closure)->on_hangup(NULL,wsj);
+}
+
+static void _on_call_static(void *closure, const char *api, const char *verb, struct afb_wsj1_msg *msg)
+{
+ /* LibSoundmanager is not called from other process */
+}
+
+static void _on_event_static(void* closure, const char* event, struct afb_wsj1_msg *msg)
+{
+ static_cast<LibSoundmanager*>(closure)->on_event(NULL,event,msg);
+}
+
+static void _on_reply_static(void *closure, struct afb_wsj1_msg *msg)
+{
+ static_cast<LibSoundmanager*>(closure)->on_reply(NULL,msg);
+}
+
+static void *event_loop_run(void *args)
+{
+ struct sd_event* loop = (struct sd_event*)(args);
+ DLOG("start eventloop");
+ for(;;)
+ sd_event_run(loop, 30000000);
+}
+
+LibSoundmanager::LibSoundmanager()
+{
+}
+
+LibSoundmanager::~LibSoundmanager()
+{
+ if(mploop)
+ {
+ sd_event_unref(mploop);
+ }
+ if(sp_websock != NULL)
+ {
+ afb_wsj1_unref(sp_websock);
+ }
+}
+
+
+/**
+ * This function is initialization function
+ *
+ * #### Parameters
+ * - 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
+ *
+ * #### Rreturn
+ * Returns 0 on success or -1 in case of error.
+ *
+ * #### Note
+ *
+ */
+int LibSoundmanager::init(int port, const string& token)
+{
+ int ret;
+ if(port > 0 && token.size() > 0)
+ {
+ mport = port;
+ mtoken = token;
+ }
+ else
+ {
+ ELOG("port and token should be > 0, Initial port and token uses.");
+ return -1;
+ }
+
+ ret = initialize_websocket();
+ if(ret != 0 )
+ {
+ ELOG("Failed to initialize websocket");
+ return -1;
+ }
+ ret = init_event();
+ if(ret != 0 )
+ {
+ ELOG("Failed to initialize websocket");
+ return -1;
+ }
+ ret = run_eventloop();
+ if(ret == -1){
+ ELOG("Failed to create thread");
+ return -1;
+ }
+ return 0;
+}
+
+int LibSoundmanager::initialize_websocket()
+{
+ mploop = NULL;
+ onEvent = nullptr;
+ onReply = nullptr;
+ int ret = sd_event_default(&mploop);
+ if(ret < 0)
+ {
+ ELOG("Failed to create event loop");
+ goto END;
+ }
+ /* Initialize interface from websocket */
+ {
+ minterface.on_hangup = _on_hangup_static;
+ minterface.on_call = _on_call_static;
+ minterface.on_event = _on_event_static;
+ string muri = "ws://localhost:" + to_string(mport) + "/api?token=" + mtoken;
+ sp_websock = afb_ws_client_connect_wsj1(mploop, muri.c_str(), &minterface, this);
+ }
+ if(sp_websock == NULL)
+ {
+ ELOG("Failed to create websocket connection");
+ goto END;
+ }
+
+ return 0;
+END:
+ if(mploop)
+ {
+ sd_event_unref(mploop);
+ }
+ return -1;
+}
+
+int LibSoundmanager::init_event(){
+ /* subscribe most important event for sound right */
+ return subscribe(string("asyncSetSourceState"));
+}
+
+/**
+ * This function register callback function for reply/event message from sound manager
+ *
+ * #### Parameters
+ * - 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
+ *
+ * #### Rreturn
+ * - Returns 0 on success or -1 in case of error.
+ *
+ * #### Note
+ * Event callback is invoked by sound manager for event you subscribed.
+ * If you would like to get event, please call subscribe function before/after this function
+ */
+void LibSoundmanager::register_callback(
+ void (*event_cb)(const string& event, struct json_object* event_contents),
+ void (*reply_cb)(struct json_object* reply_contents),
+ void (*hangup_cb)(void))
+{
+ onEvent = event_cb;
+ onReply = reply_cb;
+ onHangup = hangup_cb;
+}
+
+void LibSoundmanager::register_callback(
+ void (*reply_cb)(struct json_object* reply_contents),
+ void (*hangup_cb)(void))
+{
+ onReply = reply_cb;
+ onHangup = hangup_cb;
+}
+
+int LibSoundmanager::run_eventloop()
+{
+ if(mploop && sp_websock)
+ {
+ pthread_t thread_id;
+ int ret = pthread_create(&thread_id, NULL, event_loop_run, mploop);
+ if(ret != 0)
+ {
+ ELOG("Cannot run eventloop due to error:%d", errno);
+ return -1;
+ }
+ else
+ return 0;
+ }
+ else
+ {
+ ELOG("Connecting is not established yet");
+ return -1;
+ }
+}
+
+/**
+ * This function calls registerSource of Audio Manager via WebSocket
+ * registerSource is registration as source for policy management
+ *
+ * #### Parameters
+ * - sourceName [in] : This argument should be specified to the source name (e.g. "MediaPlayer")
+ *
+ * #### Rreturn
+ * - Returns 0 on success or -1 in case of error.
+ *
+ * #### Note
+ * This function must be called to get source ID
+ * mainConnectionID is returned by async reply function
+ *
+ */
+int LibSoundmanager::registerSource(const string& sourceName)
+{
+ if(!sp_websock)
+ {
+ return -1;
+ }
+ struct json_object* j_obj = json_object_new_object();
+ struct json_object* jsn = json_object_new_string(sourceName.c_str());
+ json_object_object_add(j_obj, "appname", jsn);
+ return this->call(__FUNCTION__, j_obj);
+}
+
+/**
+ * This function calls connect of Audio Manager via WebSocket
+ * connect is to get sound right
+ *
+ * #### Parameters
+ * - sourceID [in] : This argument should be specified to the sourceID as int. This parameter is returned value of registerSource
+ * - sinkID [in] : This argument should be specified to the sinkID as int. ID is specified by AudioManager
+ *
+ * #### Rreturn
+ * - Returns 0 on success or -1 in case of error.
+ *
+ * #### Note
+ * This function must be called to get source right
+ * connectionID is
+ *
+ */
+int LibSoundmanager::connect(int sourceID, int sinkID)
+{
+ if(!sp_websock)
+ {
+ return -1;
+ }
+ struct json_object* j_obj = json_object_new_object();
+ struct json_object* jsource = json_object_new_int(sourceID);
+ struct json_object* jsink = json_object_new_int(sinkID);
+ json_object_object_add(j_obj, "sourceID", jsource);
+ json_object_object_add(j_obj, "sinkID", jsink);
+ return this->call(__FUNCTION__, j_obj);
+}
+
+/**
+ * This function calls the connect of Audio Manager via WebSocket
+ *
+ * #### Parameters
+ * - sourceID [in] : This argument should be specified to the sourceID as int. This parameter is returned value of registerSource
+ * - sinkName [in] : This argument should be specified to the sinkID as int. ID is aliased by SoundManager (e.g: "default")
+ *
+ * #### Rreturn
+ * - Returns 0 on success or -1 in case of error.
+ *
+ * #### Note
+ * For now, aliase(hardware abstraction) like "DriverZone:Speaker" is undier hard consideration
+ * Just "default" is usable. "default" parameter is set by soundmanager
+ *
+ */
+int LibSoundmanager::connect(int sourceID, const string& sinkName)
+{
+ if(!sp_websock)
+ {
+ return -1;
+ }
+ struct json_object* j_obj = json_object_new_object();
+ struct json_object* jsource = json_object_new_int(sourceID);
+ //struct json_object* jsink = json_object_new_int(1);
+ struct json_object* jsink = json_object_new_string(sinkName.c_str());
+ json_object_object_add(j_obj, "sourceID", jsource);
+ json_object_object_add(j_obj, "sinkID", jsink);
+ return this->call(__FUNCTION__, j_obj);
+}
+
+/**
+ * This function calls the disconnect of Audio Manager via WebSocket
+ *
+ * #### Parameters
+ * - connectionID [in] : This parameter is returned value of connect
+ *
+ * #### Rreturn
+ * - Returns 0 on success or -1 in case of error.
+ *
+ * #### Note
+ *
+ *
+ */
+int LibSoundmanager::disconnect(int connectionID)
+{
+ if(!sp_websock)
+ {
+ return -1;
+ }
+ struct json_object* j_obj = json_object_new_object();
+ struct json_object* jconnection = json_object_new_int(connectionID);
+ json_object_object_add(j_obj, "mainConnectionID", jconnection);
+ return this->call(__FUNCTION__, j_obj);
+}
+
+/**
+ * This function calls the ackSetSourceState of Audio Manager via WebSocket
+ *
+ * #### Parameters
+ * - sourceID [in] : This parameter is returned value of ackSetSourceState
+ * - handle [in] : This parameter is returned value of ackSetSourceState
+ * - errno [in] : If you have some errors, input ohter than 0. 0 means acknowledge
+ *
+ * #### Rreturn
+ * - Returns 0 on success or -1 in case of error.
+ *
+ * #### Note
+ * This function must be called when application get asyncSetSourceState event
+ * Input handle number attached in asyncSetSourceState and error number(0 is acknowledge)
+ */
+int LibSoundmanager::ackSetSourceState(int handle, int error)
+{
+ if(!sp_websock)
+ {
+ return -1;
+ }
+ struct json_object* j_obj = json_object_new_object();
+ struct json_object* jhandle = json_object_new_int(handle);
+ struct json_object* jerrno = json_object_new_int(error);
+ json_object_object_add(j_obj, "handle", jhandle);
+ json_object_object_add(j_obj, "error", jerrno);
+ return this->call(__FUNCTION__, j_obj);
+}
+
+/**
+ * This function calls the API of Audio Manager via WebSocket
+ *
+ * #### Parameters
+ * - verb [in] : This argument should be specified to the API name (e.g. "connect")
+ * - arg [in] : This argument should be specified to the argument of API. And this argument expects JSON object
+ *
+ * #### Rreturn
+ * - Returns 0 on success or -1 in case of error.
+ *
+ * #### Note
+ * To call Audio Manager's APIs, the application should set its function name, arguments to JSON format.
+ *
+ */
+int LibSoundmanager::call(const string& verb, struct json_object* arg)
+{
+ int ret;
+ if(!sp_websock)
+ {
+ return -1;
+ }
+ if (!has_verb(verb))
+ {
+ ELOG("verb doesn't exit");
+ return -1;
+ }
+ ret = afb_wsj1_call_j(sp_websock, API, verb.c_str(), arg, _on_reply_static, this);
+ if (ret < 0) {
+ ELOG("Failed to call verb:%s",verb.c_str());
+ }
+ return ret;
+}
+
+/**
+ * This function calls the API of Audio Manager via WebSocket
+ * This function is overload function of "call"
+ *
+ * #### Parameters
+ * - verb [in] : This argument should be specified to the API name (e.g. "connect")
+ * - arg [in] : This argument should be specified to the argument of API. And this argument expects JSON object
+ *
+ * #### Rreturn
+ * - Returns 0 on success or -1 in case of error.
+ *
+ * #### Note
+ * To call Audio Manager's APIs, the application should set its function name, arguments to JSON format.
+ *
+ */
+int LibSoundmanager::call(const char* verb, struct json_object* arg)
+{
+ int ret;
+ if(!sp_websock)
+ {
+ return -1;
+ }
+ if (!has_verb(string(verb)))
+ {
+ ELOG("verb doesn't exit");
+ return -1;
+ }
+ ret = afb_wsj1_call_j(sp_websock, API, verb, arg, _on_reply_static, this);
+ if (ret < 0) {
+ ELOG("Failed to call verb:%s",verb);
+ }
+ return ret;
+}
+
+/**
+ * Register callback function for each event
+ *
+ * #### Parameters
+ * - event_name [in] : This argument should be specified to the event name
+ *
+ * #### Rreturn
+ * - Returns 0 on success or -1 in case of error.
+ *
+ * #### Note
+ * This function enables to get an event to your callback function.
+ * Regarding the list of event name, please refer to CommandSender API and RountingSender API.
+ *
+ */
+int LibSoundmanager::subscribe(const string& event_name)
+{
+ if(!sp_websock)
+ {
+ return -1;
+ }
+ struct json_object* j_obj = json_object_new_object();
+ json_object_object_add(j_obj, "event", json_object_new_string(event_name.c_str()));
+
+ int ret = afb_wsj1_call_j(sp_websock, API, "subscribe", j_obj, _on_reply_static, this);
+ if (ret < 0) {
+ ELOG("Failed to call verb:%s",__FUNCTION__);
+ }
+ return ret;
+}
+
+/**
+ * Unregister callback function for each event
+ *
+ * #### Parameters
+ * - event_name [in] : This argument should be specified to the event name
+ *
+ * #### Rreturn
+ * - Returns 0 on success or -1 in case of error.
+ *
+ * #### Note
+ * This function disables to get an event to your callback function.
+ *
+ */
+int LibSoundmanager::unsubscribe(const string& event_name)
+{
+ if(!sp_websock)
+ {
+ return -1;
+ }
+ struct json_object* j_obj = json_object_new_object();
+ json_object_object_add(j_obj, "event", json_object_new_string(event_name.c_str()));
+
+ int ret = afb_wsj1_call_j(sp_websock, API, "unsubscribe", j_obj, _on_reply_static, this);
+ if (ret < 0) {
+ ELOG("Failed to call verb:%s",__FUNCTION__);
+ }
+ return ret;
+}
+
+/**
+ * This function calls the ackSetSourceState of Audio Manager via WebSocket
+ *
+ * #### Parameters
+ * - EventType_AsyncSetSourceState [in] : This parameter is EventType of soundmanager
+ * - handler_func [in] : This parameter is callback function
+ *
+ * #### Rreturn
+ * - Returns 0 on success or -1 in case of error.
+ *
+ * #### Note
+ * This function must be called when application get asyncSetSourceState event
+ * Input handle number attached in asyncSetSourceState and error number(0 is acknowledge)
+ */
+void LibSoundmanager::set_event_handler(enum EventType_AsyncSetSourceState et, handler_asyncSetSourceState f)
+{
+ if (et >= 1 && et <= 3) {
+ this->handlers[et] = std::move(f);
+ }
+}
+
+
+/************* Callback Function *************/
+
+void LibSoundmanager::on_hangup(void *closure, struct afb_wsj1 *wsj)
+{
+ DLOG("%s called", __FUNCTION__);
+ if(onHangup != nullptr)
+ {
+ onHangup();
+ }
+}
+
+void LibSoundmanager::on_call(void *closure, const char *api, const char *verb, struct afb_wsj1_msg *msg)
+{
+}
+
+/*
+* event is like "soundmanager/newMainConnection"
+* msg is like {"event":"soundmanager\/newMainConnection","data":{"mainConnectionID":3,"sourceID":101,"sinkID":100,"delay":0,"connectionState":4},"jtype":"afb-event"})}
+* ^key^ ^^^^^^^^^^^^ value ^^^^^^^^^^^^
+* so you can get
+ event name : struct json_object obj = json_object_object_get(msg,"event")
+*/
+void LibSoundmanager::on_event(void *closure, const char *event, struct afb_wsj1_msg *msg)
+{
+ /* check event is for us */
+ string ev = string(event);
+ if (ev.find(API) == string::npos) {
+ /* It's not us */
+ return;
+ }
+ struct json_object* ev_contents = afb_wsj1_msg_object_j(msg);
+ if((onEvent != nullptr))
+ {
+ onEvent(ev, ev_contents);
+ }
+
+ if(ev.find("asyncSetSourceState") != string::npos){
+ // check sourceID is indicated to me
+ struct json_object *json_data, *jSourceID, *jsourceState, *jhandle;
+ json_object_object_get_ex(ev_contents, "data", &json_data);
+ json_object_object_get_ex(json_data, "sourceID", &jSourceID);
+ int sourceID = json_object_get_int(jSourceID);
+ /* This is not supported yet because application may have some sourceID.
+ Application has to check sourceID
+ if(find( msourceIDs.begin(),msourceIDs.end(), sourceID) != msourceIDs.end()){
+ json_object_put(ev_contents);
+ return;
+ }*/
+ json_object_object_get_ex(json_data, "sourceState", &jsourceState);
+ json_object_object_get_ex(json_data, "handle", &jhandle);
+ string sourceState = string(json_object_get_string(jsourceState));
+ int handle = json_object_get_int(jhandle);
+ dispatch_asyncSetSourceState(sourceID, handle, sourceState);
+ json_object_put(json_data);
+ json_object_put(jSourceID);
+ json_object_put(jsourceState);
+ json_object_put(jhandle);
+ }
+ json_object_put(ev_contents);
+}
+
+void LibSoundmanager::on_reply(void *closure, struct afb_wsj1_msg *msg)
+{
+ struct json_object* reply = afb_wsj1_msg_object_j(msg);
+ /*struct json_object *json_data = json_object_object_get(reply, "response");
+ struct json_object *jverb = json_object_object_get(json_data, "verb");
+ const char* cverb = json_object_get_string(jverb);
+ DLOG("cverb is %s",cverb);
+ string verb = string(cverb);
+ DLOG("verb is %s",verb.c_str());
+
+ if(verb == "registerSource"){
+ struct json_object *jsourceID = json_object_object_get(json_data, "sourceID");
+ int sourceID = json_object_get_int(jsourceID);
+ msourceIDs.push_back(sourceID);
+ DLOG("my sourceID is created: %d", sourceID);
+ }*/
+ if(onReply != nullptr)
+ {
+ onReply(reply);
+ }
+ json_object_put(reply);
+}
+
+int LibSoundmanager::dispatch_asyncSetSourceState(int sourceID, int handle, const string& sourceState){
+ //dipatch event
+ EventType_AsyncSetSourceState x;
+ if(sourceState == "on"){
+ x = Event_AsyncSetSourceState_On;
+ }else if(sourceState == "off"){
+ x = Event_AsyncSetSourceState_Off;
+ }else if(sourceState == "pause"){
+ x = Event_AsyncSetSourceState_Pause;
+ }
+ auto i = this->handlers.find(x);
+ if(i != handlers.end()){
+ i->second(sourceID, handle);
+ return 0;
+ }
+ else{
+ return -1;
+ }
+}
+
+/* Internal Function in libsoundmanager */
+
+static void _ELOG(const char* func, const int line, const char* log, ...)
+{
+ char *message;
+ va_list args;
+ va_start(args, log);
+ if (log == NULL || vasprintf(&message, log, args) < 0)
+ message = NULL;
+ cout << "[ERROR: soundmanager]" << func << "(" << line << "):" << message << endl;
+ va_end(args);
+ free(message);
+}
+
+static void _DLOG(const char* func, const int line, const char* log, ...)
+{
+ char *message;
+ va_list args;
+ va_start(args, log);
+ if (log == NULL || vasprintf(&message, log, args) < 0)
+ message = NULL;
+ cout << "[DEBUG: soundmanager]" << func << "(" << line << "):" << message << endl;
+ va_end(args);
+ free(message);
+}
+
+static bool has_verb(const string& verb)
+{
+ if(find(api_list.begin(), api_list.end(), verb) != api_list.end())
+ return true;
+ else
+ return false;
+}
diff --git a/package/root/config.xml b/package/root/config.xml
new file mode 100644
index 0000000..2d36a29
--- /dev/null
+++ b/package/root/config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" id="soundmanager-service-2017" version="0.1">
+ <name>soundmanager-service-2017</name>
+ <icon src="icon.svg"/>
+ <content src="config.xml" type="application/vnd.agl.service"/>
+ <description>Sound Manager Binding service rooting to Audio Manager</description>
+ <author>TOYOTA</author>
+ <license>APL 2.0</license>
+ <feature name="urn:AGL:widget:required-permission">
+ <param name="urn:AGL:permission::public:hidden" value="required" />
+ <param name="urn:AGL:permission::system:run-by-default" value="required" />
+ <param name="http://tizen.org/privilege/internal/dbus" value="required" />
+ </feature>
+ <feature name="urn:AGL:widget:provided-api">
+ <param name="soundmanager" value="ws" />
+ </feature>
+ <feature name="urn:AGL:widget:required-api">
+ <param name="lib/soundmanager-service.so" value="local" />
+ </feature>
+</widget>
diff --git a/package/root/icon.svg b/package/root/icon.svg
new file mode 100644
index 0000000..6628784
--- /dev/null
+++ b/package/root/icon.svg
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+
+<svg
+ xmlns:i="&amp;ns_ai;"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ x="0px"
+ y="0px"
+ viewBox="0 0 320 320"
+ style="enable-background:new 0 0 320 320;"
+ xml:space="preserve"
+ id="svg2"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="icon.svg"><metadata
+ id="metadata1292"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs1290" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1464"
+ id="namedview1288"
+ showgrid="false"
+ inkscape:zoom="0.7375"
+ inkscape:cx="-697.62712"
+ inkscape:cy="160"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2" /><style
+ type="text/css"
+ id="style4">
+ .st0{display:none;}
+ .st1{display:inline;}
+ .st2{opacity:0.4;fill:url(#SVGID_1_);}
+ .st3{fill:url(#SVGID_2_);}
+ .st4{fill:#FFFFFF;}
+ .st5{font-family:'Roboto-Regular';}
+ .st6{font-size:25px;}
+ .st7{letter-spacing:6;}
+ .st8{fill:url(#SVGID_3_);}
+ .st9{fill:url(#SVGID_4_);}
+ .st10{fill:url(#SVGID_5_);}
+ .st11{fill:url(#SVGID_6_);}
+ .st12{fill:url(#SVGID_7_);}
+ .st13{fill:url(#SVGID_8_);}
+ .st14{fill:url(#SVGID_9_);}
+ .st15{fill:url(#SVGID_10_);}
+ .st16{fill:url(#SVGID_11_);}
+ .st17{fill:url(#SVGID_12_);}
+ .st18{fill:url(#SVGID_13_);}
+ .st19{fill:url(#SVGID_14_);}
+ .st20{fill:url(#SVGID_15_);}
+ .st21{fill:url(#SVGID_16_);}
+ .st22{fill:url(#SVGID_17_);}
+ .st23{fill:url(#SVGID_18_);}
+ .st24{opacity:0.29;}
+ .st25{fill:url(#SVGID_19_);}
+ .st26{fill:url(#SVGID_20_);}
+ .st27{fill:url(#SVGID_21_);}
+ .st28{fill:url(#SVGID_22_);}
+ .st29{fill:url(#SVGID_23_);}
+ .st30{fill:url(#SVGID_24_);}
+ .st31{fill:url(#SVGID_25_);}
+ .st32{fill:url(#SVGID_26_);}
+ .st33{fill:url(#SVGID_27_);}
+ .st34{fill:url(#SVGID_28_);}
+ .st35{fill:url(#SVGID_29_);}
+ .st36{fill:url(#SVGID_30_);}
+ .st37{fill:url(#SVGID_31_);}
+ .st38{fill:url(#SVGID_32_);}
+ .st39{fill:url(#SVGID_33_);}
+ .st40{fill:url(#SVGID_34_);}
+ .st41{fill:url(#SVGID_35_);}
+ .st42{fill:url(#SVGID_36_);}
+ .st43{opacity:0.4;fill:url(#SVGID_37_);}
+ .st44{fill:url(#SVGID_38_);}
+ .st45{fill:url(#SVGID_39_);}
+ .st46{fill:url(#SVGID_40_);}
+ .st47{fill:url(#SVGID_41_);}
+ .st48{fill:url(#SVGID_42_);}
+ .st49{fill:url(#SVGID_43_);}
+ .st50{fill:url(#SVGID_44_);}
+ .st51{display:inline;opacity:0.29;}
+ .st52{display:inline;fill:url(#SVGID_45_);}
+ .st53{display:inline;fill:url(#SVGID_46_);}
+ .st54{display:inline;fill:#FFFFFF;}
+ .st55{display:inline;fill:url(#SVGID_47_);}
+ .st56{display:inline;fill:url(#SVGID_48_);}
+ .st57{display:inline;fill:url(#SVGID_49_);}
+ .st58{display:inline;fill:url(#SVGID_50_);}
+ .st59{display:inline;fill:url(#SVGID_51_);}
+ .st60{display:inline;fill:url(#SVGID_52_);}
+ .st61{opacity:0.4;fill:url(#SVGID_53_);}
+ .st62{fill:url(#SVGID_54_);}
+ .st63{fill:url(#SVGID_55_);}
+ .st64{fill:url(#SVGID_56_);}
+ .st65{fill:url(#SVGID_57_);}
+ .st66{fill:url(#SVGID_58_);}
+ .st67{opacity:0.4;fill:url(#SVGID_59_);}
+ .st68{fill:url(#SVGID_60_);}
+ .st69{fill:url(#SVGID_61_);}
+ .st70{fill:url(#SVGID_62_);}
+ .st71{fill:url(#SVGID_63_);}
+ .st72{fill:url(#SVGID_64_);}
+ .st73{fill:url(#SVGID_65_);}
+ .st74{fill:url(#SVGID_66_);}
+ .st75{fill:url(#SVGID_67_);}
+ .st76{fill:url(#SVGID_68_);}
+ .st77{fill:url(#SVGID_69_);}
+ .st78{fill:url(#SVGID_70_);}
+ .st79{fill:url(#SVGID_71_);}
+ .st80{fill:url(#SVGID_72_);}
+ .st81{fill:url(#SVGID_73_);}
+ .st82{fill:url(#SVGID_74_);}
+ .st83{fill:url(#SVGID_75_);}
+ .st84{fill:url(#SVGID_76_);}
+ .st85{fill:url(#SVGID_77_);}
+ .st86{fill:url(#SVGID_78_);}
+ .st87{fill:url(#SVGID_79_);}
+ .st88{fill:url(#SVGID_80_);}
+ .st89{fill:url(#SVGID_81_);}
+ .st90{fill:url(#SVGID_82_);}
+ .st91{fill:url(#SVGID_83_);}
+ .st92{fill:url(#SVGID_84_);}
+ .st93{fill:url(#SVGID_85_);}
+ .st94{fill:url(#SVGID_86_);}
+ .st95{opacity:0.4;fill:url(#SVGID_87_);}
+ .st96{fill:url(#SVGID_88_);}
+ .st97{fill:url(#SVGID_89_);}
+ .st98{fill:url(#SVGID_90_);}
+ .st99{display:inline;fill:url(#SVGID_91_);}
+ .st100{display:inline;fill:url(#SVGID_92_);}
+ .st101{fill:url(#SVGID_93_);}
+ .st102{fill:url(#SVGID_94_);}
+ .st103{opacity:0.4;fill:url(#SVGID_95_);}
+ .st104{fill:url(#SVGID_96_);}
+ .st105{fill:url(#SVGID_97_);}
+ .st106{fill:url(#SVGID_98_);}
+ .st107{fill:url(#SVGID_99_);}
+ .st108{fill:url(#SVGID_100_);}
+ .st109{fill:url(#SVGID_101_);}
+ .st110{display:inline;fill:url(#SVGID_102_);}
+ .st111{display:inline;fill:url(#SVGID_103_);}
+ .st112{fill:url(#SVGID_104_);}
+ .st113{fill:url(#SVGID_105_);}
+ .st114{fill:url(#SVGID_106_);}
+ .st115{fill:url(#SVGID_107_);}
+ .st116{fill:url(#SVGID_108_);}
+ .st117{opacity:0.4;fill:url(#SVGID_109_);}
+ .st118{fill:url(#SVGID_110_);}
+ .st119{fill:url(#SVGID_111_);}
+ .st120{fill:url(#SVGID_112_);}
+ .st121{fill:url(#SVGID_113_);}
+ .st122{fill:url(#SVGID_114_);}
+ .st123{opacity:0.4;fill:url(#SVGID_115_);}
+ .st124{fill:url(#SVGID_116_);}
+ .st125{fill:url(#SVGID_117_);}
+ .st126{fill:url(#SVGID_118_);}
+ .st127{fill:url(#SVGID_119_);}
+ .st128{fill:url(#SVGID_120_);}
+ .st129{fill:url(#SVGID_121_);}
+ .st130{fill:url(#SVGID_122_);}
+</style><switch
+ id="switch6"><g
+ i:extraneous="self"
+ id="g8"><g
+ id="Settings_Active"><circle
+ class="st24"
+ cx="159.7"
+ cy="133.4"
+ r="101.9"
+ id="circle1230" /><linearGradient
+ id="SVGID_119_"
+ gradientUnits="userSpaceOnUse"
+ x1="115.9317"
+ y1="254.1836"
+ x2="256.3852"
+ y2="-133.5267"><stop
+ offset="0"
+ style="stop-color:#8BC53F"
+ id="stop1233" /><stop
+ offset="2.015080e-02"
+ style="stop-color:#7CCB56;stop-opacity:0.9678"
+ id="stop1235" /><stop
+ offset="6.089833e-02"
+ style="stop-color:#62D67D;stop-opacity:0.9028"
+ id="stop1237" /><stop
+ offset="0.1057"
+ style="stop-color:#4BDFA0;stop-opacity:0.8312"
+ id="stop1239" /><stop
+ offset="0.1543"
+ style="stop-color:#38E7BE;stop-opacity:0.7537"
+ id="stop1241" /><stop
+ offset="0.2077"
+ style="stop-color:#28EED6;stop-opacity:0.6684"
+ id="stop1243" /><stop
+ offset="0.2681"
+ style="stop-color:#1CF3E8;stop-opacity:0.572"
+ id="stop1245" /><stop
+ offset="0.3394"
+ style="stop-color:#13F6F5;stop-opacity:0.4581"
+ id="stop1247" /><stop
+ offset="0.4323"
+ style="stop-color:#0EF8FD;stop-opacity:0.3098"
+ id="stop1249" /><stop
+ offset="0.6264"
+ style="stop-color:#0DF9FF;stop-opacity:0"
+ id="stop1251" /></linearGradient><circle
+ class="st127"
+ cx="159.7"
+ cy="133.4"
+ r="101.9"
+ id="circle1253" /><linearGradient
+ id="SVGID_120_"
+ gradientUnits="userSpaceOnUse"
+ x1="4.0481"
+ y1="287.9492"
+ x2="320.4859"
+ y2="-15.4029"
+ gradientTransform="matrix(1 5.464556e-03 -5.464556e-03 1 -2.0192 -3.0212)"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop1256" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop1258" /></linearGradient><path
+ class="st128"
+ d="M160,238.8c-0.2,0-0.4,0-0.6,0c-58-0.3-104.9-47.7-104.6-105.7C55.2,75.3,102.3,28.5,160,28.5 c0.2,0,0.4,0,0.6,0c58,0.3,104.9,47.7,104.6,105.7l0,0C264.8,192,217.7,238.8,160,238.8z M160,32.2 c-55.7,0-101.2,45.2-101.5,100.9c-0.3,55.9,45,101.7,100.9,102c0.2,0,0.4,0,0.6,0c55.7,0,101.2-45.2,101.5-100.9 c0.3-55.9-45-101.7-100.9-102C160.4,32.2,160.2,32.2,160,32.2z"
+ id="path1260" /><g
+ id="g1262"><text
+ transform="matrix(1 0 0 1 75.4379 284.7129)"
+ class="st4 st5 st6 st7"
+ id="text1264">SETTINGS</text>
+<g
+ id="g1266"><g
+ id="g1268"><g
+ id="g1270"><linearGradient
+ id="SVGID_121_"
+ gradientUnits="userSpaceOnUse"
+ x1="79.1804"
+ y1="226.0817"
+ x2="282.752"
+ y2="-4.8609"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop1273" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop1275" /></linearGradient><path
+ class="st129"
+ d="M159.9,163.9c-16.3,0-29.5-13.2-29.5-29.4s13.2-29.4,29.5-29.4v3.9c-14.1,0-25.5,11.4-25.5,25.5 c0,14,11.5,25.5,25.5,25.5c14.1,0,25.6-11.4,25.6-25.5h3.9C189.4,150.7,176.2,163.9,159.9,163.9z"
+ id="path1277" /></g><g
+ id="g1279"><linearGradient
+ id="SVGID_122_"
+ gradientUnits="userSpaceOnUse"
+ x1="79.2457"
+ y1="226.1393"
+ x2="282.8174"
+ y2="-4.8033"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop1282" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop1284" /></linearGradient><path
+ class="st130"
+ d="M171.7,197.4h-23.4c-2.2,0-4-1.8-4-3.9V181c-2-0.7-4-1.5-6-2.5l-8.8,8.8c-1.5,1.5-4,1.5-5.6-0.1 l-16.6-16.6c-1.6-1.6-1.6-4.1-0.1-5.6l8.7-8.7c-1-2-1.8-4-2.5-6.1h-12.3c-2.2,0-3.9-1.8-3.9-4v-23.4c0-2.2,1.8-4,3.9-4h12.3 c0.9-2.6,1.9-5.1,3.2-7.4l3.5,1.8c-1.4,2.6-2.5,5.3-3.4,8.1l-0.4,1.4h-15.2l0,23.5l15.2,0.1l0.4,1.4c0.9,2.8,2,5.5,3.4,8 l0.7,1.3L110,167.8l16.6,16.6l10.9-10.8l1.3,0.7c2.6,1.4,5.2,2.5,8,3.3l1.4,0.4v15.4l23.5,0l0.1-15.4l1.4-0.4 c2.7-0.8,5.4-1.9,7.9-3.3l1.3-0.7l10.9,10.9l16.6-16.6l-10.8-11l0.7-1.3c1.4-2.6,2.5-5.2,3.3-7.9l0.4-1.4h15.4l0-23.5 l-15.3-0.1l-0.4-1.4c-0.8-2.8-1.9-5.5-3.3-8l-0.7-1.3l10.8-10.8l-16.6-16.6l-10.8,10.7l-1.3-0.7c-2.6-1.4-5.3-2.5-8.1-3.4 l-1.4-0.4V75.6l-23.5,0l-0.1,15.1l-1.4,0.4c-2.8,0.9-5.6,2-8.1,3.4l-1.3,0.7l-10.7-10.7L107.2,104c-1.5-1.5-1.5-4,0.1-5.6 l16.5-16.5c0.8-0.8,1.8-1.3,2.9-1.2c1,0,2,0.4,2.7,1.1l8.7,8.6c2-1,4-1.8,6.2-2.5V75.6c0-2.2,1.8-3.9,4-3.9h23.4 c2.2,0,4,1.8,4,3.9v12.3c2.1,0.7,4.1,1.6,6.1,2.5l8.7-8.7c0.7-0.7,1.7-1.1,2.7-1.1h0c1.1,0,2.1,0.4,2.9,1.2l16.6,16.6 c0.8,0.8,1.2,1.8,1.2,2.9c0,1-0.4,2-1.1,2.7l-8.8,8.8c1,2,1.8,4,2.5,6h12.4c2.2,0,3.9,1.8,3.9,4v23.4c0,2.2-1.8,4-3.9,4 h-12.5c-0.7,2-1.5,4-2.5,6l8.9,8.9c1.5,1.5,1.5,4-0.1,5.6l-16.6,16.6c-0.8,0.8-1.8,1.2-2.9,1.2h0c-1,0-2-0.4-2.7-1.1 l-8.9-8.9c-1.9,1-3.9,1.8-5.9,2.5v12.5C175.7,195.6,173.9,197.4,171.7,197.4z"
+ id="path1286" /></g></g></g></g></g></g></switch></svg> \ No newline at end of file
diff --git a/scripts/call-sm-binding-method_test.sh b/scripts/call-sm-binding-method_test.sh
new file mode 100755
index 0000000..e3f1139
--- /dev/null
+++ b/scripts/call-sm-binding-method_test.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+echo "please call method after launch afb-client-demo"
+echo " # ./sm-binding-test.sh"
+echo "To get soundmanager api "
+echo "example) monitor get {\"apis\":[\"monitor\"]}"
+echo "example) soundmanager disconnect {\"mainConnectionID\":1}"
+port=12345
+token=123456
+if test $1;then
+port=$1
+fi
+if test $2; then
+token=$2
+fi
+afb-client-demo ws://localhost:${port}/api?token=${token}
+
diff --git a/scripts/dbus-call-connect-test.sh b/scripts/dbus-call-connect-test.sh
new file mode 100755
index 0000000..882afae
--- /dev/null
+++ b/scripts/dbus-call-connect-test.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+echo How to call connect and disconnect of AudioManager
+echo Connect
+echo dbus-send --system --dest=org.genivi.audiomanager --type=method_call \
+ --print-reply /org/genivi/audiomanager/commandinterface \
+ org.genivi.audiomanager.commandinterface.Connect uint16:xxx uint16:xxx
+echo
+echo Disconnect
+echo dbus-send --system --dest=org.genivi.audiomanager --type=method_call \
+ --print-reply /org/genivi/audiomanager/commandinterface \
+ org.genivi.audiomanager.commandinterface.Disconnect uint16:xxx
+
diff --git a/scripts/dbus-call-test.sh b/scripts/dbus-call-test.sh
new file mode 100755
index 0000000..f20af35
--- /dev/null
+++ b/scripts/dbus-call-test.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+echo "This is the dbus call test to check main source/sink/connection"
+
+echo Get List Main Sources
+dbus-send --system --dest=org.genivi.audiomanager --type=method_call \
+ --print-reply /org/genivi/audiomanager/commandinterface \
+ org.genivi.audiomanager.commandinterface.GetListMainSources
+
+echo Get List Main Sinks
+dbus-send --system --dest=org.genivi.audiomanager --type=method_call \
+ --print-reply /org/genivi/audiomanager/commandinterface \
+ org.genivi.audiomanager.commandinterface.GetListMainSinks
+
+echo Get List Main Connections
+dbus-send --system --dest=org.genivi.audiomanager --type=method_call \
+ --print-reply /org/genivi/audiomanager/commandinterface \
+ org.genivi.audiomanager.commandinterface.GetListMainConnections \ No newline at end of file
diff --git a/scripts/sm-binding-test-gdb.sh b/scripts/sm-binding-test-gdb.sh
new file mode 100755
index 0000000..68fabc7
--- /dev/null
+++ b/scripts/sm-binding-test-gdb.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+echo "launch soundmanager binder test"
+cmd=/usr/bin/afb-daemon
+libsm="soundmanager-service.so"
+port="12345"
+token="123456"
+if test $1; then
+ port=$1
+fi
+if test $2; then
+ token=$2
+fi
+libpath="/home/root"
+arg="--verbose --verbose --verbose --port=${port} --token=${token} --binding=${libpath}/${libsm}"
+echo "gdb $cmd $arg"
+gdb $cmd
+echo $! $?
+if(test $! -gt 0); then
+ echo "success to launch"
+fi
diff --git a/scripts/sm-binding-test.sh b/scripts/sm-binding-test.sh
new file mode 100755
index 0000000..0ffd759
--- /dev/null
+++ b/scripts/sm-binding-test.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+echo "launch soundmanager binder test"
+cmd=/usr/bin/afb-daemon
+libsm="soundmanager-service.so"
+port="12345"
+token="123456"
+if test $1; then
+ port=$1
+fi
+if test $2; then
+ token=$2
+fi
+libpath="/home/root"
+arg="--verbose --verbose --verbose --port=${port} --token=${token} --binding=${libpath}/${libsm}"
+echo "$cmd $arg"
+$cmd $arg &
+echo $! $?
+if(test $! -gt 0); then
+ echo "success to launch"
+fi
diff --git a/soundmanager.pc.in b/soundmanager.pc.in
new file mode 100644
index 0000000..a02286c
--- /dev/null
+++ b/soundmanager.pc.in
@@ -0,0 +1,12 @@
+includedir=@PROJECT_INCLUDEDIR@
+libdir=@PROJECT_LIBDIR@
+binding_install_dir=@binding_install_dir@
+
+Name: @PROJECT_PRETTY_NAME@
+Description: @PROJECT_DESCRIPTION@
+Version: @PROJECT_VERSION@
+URL: @PROJECT_URL@
+
+Requires: json-c afb-daemon audiomanager
+Cflags: -I${includedir}
+Libs: -L${libdir} -lsoundmanager \ No newline at end of file
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..c29aa89
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,65 @@
+#
+# Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+cmake_minimum_required(VERSION 2.8)
+
+set(TARGETS_SMBINDER soundmanager-service)
+
+INCLUDE(FindThreads)
+FIND_PACKAGE(Threads)
+
+pkg_check_modules(sm_binding_depends afb-daemon glib-2.0 gio-2.0 gio-unix-2.0 json-c)
+set(binding_sm_sources
+ soundmanager.c
+ sm-helper.c
+ dbus/audio_manager_interface.c)
+
+include_directories(dbus)
+link_libraries(-Wl,--as-needed -Wl,--gc-sections -Wl,--no-undefined)
+
+add_library(${TARGETS_SMBINDER} MODULE ${binding_sm_sources})
+
+target_compile_options(${TARGETS_SMBINDER} PRIVATE ${sm_binding_depends_CFLAGS})
+if(DEFINED DEBUGMODE)
+ target_compile_options(${TARGETS_SMBINDER} PRIVATE -g -O0)
+else(DEFINED DEBUGMODE)
+ target_compile_options(${TARGETS_SMBINDER} PRIVATE -g -O2)
+endif(DEFINED DEBUGMODE)
+
+target_include_directories(${TARGETS_SMBINDER} PRIVATE ${sm_binding_depends_INCLUDE_DIRS})
+target_link_libraries(${TARGETS_SMBINDER} ${CMAKE_THREAD_LIBS_INIT} ${link_libraries} ${sm_binding_depends_LIBRARIES})
+
+# Binder exposes a unique public entry point
+
+set_target_properties(${TARGETS_SMBINDER} PROPERTIES
+ PREFIX ""
+ LINK_FLAGS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/export.map"
+ )
+
+if(NOT EXISTS ${PROJECT_BINARY_DIR}/package)
+ add_custom_command(TARGET ${TARGETS_SMBINDER} POST_BUILD
+ COMMAND cp -rf ${PROJECT_SOURCE_DIR}/package ${PROJECT_BINARY_DIR}
+ )
+endif()
+
+add_custom_command(TARGET ${TARGETS_SMBINDER} POST_BUILD
+ COMMAND mkdir -p ${PROJECT_BINARY_DIR}/package/root/lib
+ COMMAND cp -rf ${PROJECT_BINARY_DIR}/src/${TARGETS_SMBINDER}.so ${PROJECT_BINARY_DIR}/package/root/lib
+)
+
+add_custom_target(package DEPENDS ${PROJECT_BINARY_DIR}/package/root
+ COMMAND wgtpkg-pack -f -o ${PROJECT_BINARY_DIR}/package/${TARGETS_SMBINDER}-2017.wgt ${PROJECT_BINARY_DIR}/package/root
+)
diff --git a/src/dbus/audio_manager_interface.c b/src/dbus/audio_manager_interface.c
new file mode 100644
index 0000000..c276d70
--- /dev/null
+++ b/src/dbus/audio_manager_interface.c
@@ -0,0 +1,9554 @@
+/*
+ * Generated by gdbus-codegen 2.40.2. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "audio_manager_interface.h"
+
+#include <string.h>
+#ifdef G_OS_UNIX
+# include <gio/gunixfdlist.h>
+#endif
+
+typedef struct
+{
+ GDBusArgInfo parent_struct;
+ gboolean use_gvariant;
+} _ExtendedGDBusArgInfo;
+
+typedef struct
+{
+ GDBusMethodInfo parent_struct;
+ const gchar *signal_name;
+ gboolean pass_fdlist;
+} _ExtendedGDBusMethodInfo;
+
+typedef struct
+{
+ GDBusSignalInfo parent_struct;
+ const gchar *signal_name;
+} _ExtendedGDBusSignalInfo;
+
+typedef struct
+{
+ GDBusPropertyInfo parent_struct;
+ const gchar *hyphen_name;
+ gboolean use_gvariant;
+} _ExtendedGDBusPropertyInfo;
+
+typedef struct
+{
+ GDBusInterfaceInfo parent_struct;
+ const gchar *hyphen_name;
+} _ExtendedGDBusInterfaceInfo;
+
+typedef struct
+{
+ const _ExtendedGDBusPropertyInfo *info;
+ guint prop_id;
+ GValue orig_value; /* the value before the change */
+} ChangedProperty;
+
+static void
+_changed_property_free (ChangedProperty *data)
+{
+ g_value_unset (&data->orig_value);
+ g_free (data);
+}
+
+static gboolean
+_g_strv_equal0 (gchar **a, gchar **b)
+{
+ gboolean ret = FALSE;
+ guint n;
+ if (a == NULL && b == NULL)
+ {
+ ret = TRUE;
+ goto out;
+ }
+ if (a == NULL || b == NULL)
+ goto out;
+ if (g_strv_length (a) != g_strv_length (b))
+ goto out;
+ for (n = 0; a[n] != NULL; n++)
+ if (g_strcmp0 (a[n], b[n]) != 0)
+ goto out;
+ ret = TRUE;
+out:
+ return ret;
+}
+
+static gboolean
+_g_variant_equal0 (GVariant *a, GVariant *b)
+{
+ gboolean ret = FALSE;
+ if (a == NULL && b == NULL)
+ {
+ ret = TRUE;
+ goto out;
+ }
+ if (a == NULL || b == NULL)
+ goto out;
+ ret = g_variant_equal (a, b);
+out:
+ return ret;
+}
+
+G_GNUC_UNUSED static gboolean
+_g_value_equal (const GValue *a, const GValue *b)
+{
+ gboolean ret = FALSE;
+ g_assert (G_VALUE_TYPE (a) == G_VALUE_TYPE (b));
+ switch (G_VALUE_TYPE (a))
+ {
+ case G_TYPE_BOOLEAN:
+ ret = (g_value_get_boolean (a) == g_value_get_boolean (b));
+ break;
+ case G_TYPE_UCHAR:
+ ret = (g_value_get_uchar (a) == g_value_get_uchar (b));
+ break;
+ case G_TYPE_INT:
+ ret = (g_value_get_int (a) == g_value_get_int (b));
+ break;
+ case G_TYPE_UINT:
+ ret = (g_value_get_uint (a) == g_value_get_uint (b));
+ break;
+ case G_TYPE_INT64:
+ ret = (g_value_get_int64 (a) == g_value_get_int64 (b));
+ break;
+ case G_TYPE_UINT64:
+ ret = (g_value_get_uint64 (a) == g_value_get_uint64 (b));
+ break;
+ case G_TYPE_DOUBLE:
+ {
+ /* Avoid -Wfloat-equal warnings by doing a direct bit compare */
+ gdouble da = g_value_get_double (a);
+ gdouble db = g_value_get_double (b);
+ ret = memcmp (&da, &db, sizeof (gdouble)) == 0;
+ }
+ break;
+ case G_TYPE_STRING:
+ ret = (g_strcmp0 (g_value_get_string (a), g_value_get_string (b)) == 0);
+ break;
+ case G_TYPE_VARIANT:
+ ret = _g_variant_equal0 (g_value_get_variant (a), g_value_get_variant (b));
+ break;
+ default:
+ if (G_VALUE_TYPE (a) == G_TYPE_STRV)
+ ret = _g_strv_equal0 (g_value_get_boxed (a), g_value_get_boxed (b));
+ else
+ g_critical ("_g_value_equal() does not handle type %s", g_type_name (G_VALUE_TYPE (a)));
+ break;
+ }
+ return ret;
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.genivi.audiomanager.commandinterface
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:AudiomanagerCommandinterface
+ * @title: AudiomanagerCommandinterface
+ * @short_description: Generated C code for the org.genivi.audiomanager.commandinterface D-Bus interface
+ *
+ * This section contains code for working with the <link linkend="gdbus-interface-org-genivi-audiomanager-commandinterface.top_of_page">org.genivi.audiomanager.commandinterface</link> D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.genivi.audiomanager.commandinterface ---- */
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_connect_IN_ARG_sourceID =
+{
+ {
+ -1,
+ (gchar *) "sourceID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_connect_IN_ARG_sinkID =
+{
+ {
+ -1,
+ (gchar *) "sinkID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_method_info_connect_IN_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_method_info_connect_IN_ARG_sourceID,
+ &_audiomanager_commandinterface_method_info_connect_IN_ARG_sinkID,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_connect_OUT_ARG_result =
+{
+ {
+ -1,
+ (gchar *) "result",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_connect_OUT_ARG_mainConnectionID =
+{
+ {
+ -1,
+ (gchar *) "mainConnectionID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_method_info_connect_OUT_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_method_info_connect_OUT_ARG_result,
+ &_audiomanager_commandinterface_method_info_connect_OUT_ARG_mainConnectionID,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_commandinterface_method_info_connect =
+{
+ {
+ -1,
+ (gchar *) "Connect",
+ (GDBusArgInfo **) &_audiomanager_commandinterface_method_info_connect_IN_ARG_pointers,
+ (GDBusArgInfo **) &_audiomanager_commandinterface_method_info_connect_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-connect",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_disconnect_IN_ARG_mainConnectionID =
+{
+ {
+ -1,
+ (gchar *) "mainConnectionID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_method_info_disconnect_IN_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_method_info_disconnect_IN_ARG_mainConnectionID,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_disconnect_OUT_ARG_result =
+{
+ {
+ -1,
+ (gchar *) "result",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_method_info_disconnect_OUT_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_method_info_disconnect_OUT_ARG_result,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_commandinterface_method_info_disconnect =
+{
+ {
+ -1,
+ (gchar *) "Disconnect",
+ (GDBusArgInfo **) &_audiomanager_commandinterface_method_info_disconnect_IN_ARG_pointers,
+ (GDBusArgInfo **) &_audiomanager_commandinterface_method_info_disconnect_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-disconnect",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_set_volume_IN_ARG_sinkID =
+{
+ {
+ -1,
+ (gchar *) "sinkID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_set_volume_IN_ARG_volume =
+{
+ {
+ -1,
+ (gchar *) "volume",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_method_info_set_volume_IN_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_method_info_set_volume_IN_ARG_sinkID,
+ &_audiomanager_commandinterface_method_info_set_volume_IN_ARG_volume,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_set_volume_OUT_ARG_result =
+{
+ {
+ -1,
+ (gchar *) "result",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_method_info_set_volume_OUT_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_method_info_set_volume_OUT_ARG_result,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_commandinterface_method_info_set_volume =
+{
+ {
+ -1,
+ (gchar *) "SetVolume",
+ (GDBusArgInfo **) &_audiomanager_commandinterface_method_info_set_volume_IN_ARG_pointers,
+ (GDBusArgInfo **) &_audiomanager_commandinterface_method_info_set_volume_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-set-volume",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_volume_step_IN_ARG_sinkID =
+{
+ {
+ -1,
+ (gchar *) "sinkID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_volume_step_IN_ARG_volumeStep =
+{
+ {
+ -1,
+ (gchar *) "volumeStep",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_method_info_volume_step_IN_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_method_info_volume_step_IN_ARG_sinkID,
+ &_audiomanager_commandinterface_method_info_volume_step_IN_ARG_volumeStep,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_volume_step_OUT_ARG_result =
+{
+ {
+ -1,
+ (gchar *) "result",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_method_info_volume_step_OUT_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_method_info_volume_step_OUT_ARG_result,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_commandinterface_method_info_volume_step =
+{
+ {
+ -1,
+ (gchar *) "VolumeStep",
+ (GDBusArgInfo **) &_audiomanager_commandinterface_method_info_volume_step_IN_ARG_pointers,
+ (GDBusArgInfo **) &_audiomanager_commandinterface_method_info_volume_step_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-volume-step",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_set_sink_mute_state_IN_ARG_sinkID =
+{
+ {
+ -1,
+ (gchar *) "sinkID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_set_sink_mute_state_IN_ARG_muteState =
+{
+ {
+ -1,
+ (gchar *) "muteState",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_method_info_set_sink_mute_state_IN_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_method_info_set_sink_mute_state_IN_ARG_sinkID,
+ &_audiomanager_commandinterface_method_info_set_sink_mute_state_IN_ARG_muteState,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_set_sink_mute_state_OUT_ARG_result =
+{
+ {
+ -1,
+ (gchar *) "result",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_method_info_set_sink_mute_state_OUT_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_method_info_set_sink_mute_state_OUT_ARG_result,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_commandinterface_method_info_set_sink_mute_state =
+{
+ {
+ -1,
+ (gchar *) "SetSinkMuteState",
+ (GDBusArgInfo **) &_audiomanager_commandinterface_method_info_set_sink_mute_state_IN_ARG_pointers,
+ (GDBusArgInfo **) &_audiomanager_commandinterface_method_info_set_sink_mute_state_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-set-sink-mute-state",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_get_list_main_connections_OUT_ARG_result =
+{
+ {
+ -1,
+ (gchar *) "result",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_get_list_main_connections_OUT_ARG_listConnections =
+{
+ {
+ -1,
+ (gchar *) "listConnections",
+ (gchar *) "a(qqqnn)",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_method_info_get_list_main_connections_OUT_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_method_info_get_list_main_connections_OUT_ARG_result,
+ &_audiomanager_commandinterface_method_info_get_list_main_connections_OUT_ARG_listConnections,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_commandinterface_method_info_get_list_main_connections =
+{
+ {
+ -1,
+ (gchar *) "GetListMainConnections",
+ NULL,
+ (GDBusArgInfo **) &_audiomanager_commandinterface_method_info_get_list_main_connections_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-get-list-main-connections",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_get_list_main_sinks_OUT_ARG_result =
+{
+ {
+ -1,
+ (gchar *) "result",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_method_info_get_list_main_sinks_OUT_ARG_listMainSinks =
+{
+ {
+ -1,
+ (gchar *) "listMainSinks",
+ (gchar *) "a(qs(nn)nnq)",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_method_info_get_list_main_sinks_OUT_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_method_info_get_list_main_sinks_OUT_ARG_result,
+ &_audiomanager_commandinterface_method_info_get_list_main_sinks_OUT_ARG_listMainSinks,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_commandinterface_method_info_get_list_main_sinks =
+{
+ {
+ -1,
+ (gchar *) "GetListMainSinks",
+ NULL,
+ (GDBusArgInfo **) &_audiomanager_commandinterface_method_info_get_list_main_sinks_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-get-list-main-sinks",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _audiomanager_commandinterface_method_info_pointers[] =
+{
+ &_audiomanager_commandinterface_method_info_connect,
+ &_audiomanager_commandinterface_method_info_disconnect,
+ &_audiomanager_commandinterface_method_info_set_volume,
+ &_audiomanager_commandinterface_method_info_volume_step,
+ &_audiomanager_commandinterface_method_info_set_sink_mute_state,
+ &_audiomanager_commandinterface_method_info_get_list_main_connections,
+ &_audiomanager_commandinterface_method_info_get_list_main_sinks,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_signal_info_new_main_connection_ARG_mainConnection =
+{
+ {
+ -1,
+ (gchar *) "mainConnection",
+ (gchar *) "(qqqnn)",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_signal_info_new_main_connection_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_signal_info_new_main_connection_ARG_mainConnection,
+ NULL
+};
+
+static const _ExtendedGDBusSignalInfo _audiomanager_commandinterface_signal_info_new_main_connection =
+{
+ {
+ -1,
+ (gchar *) "NewMainConnection",
+ (GDBusArgInfo **) &_audiomanager_commandinterface_signal_info_new_main_connection_ARG_pointers,
+ NULL
+ },
+ "new-main-connection"
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_signal_info_removed_main_connection_ARG_mainConnectionId =
+{
+ {
+ -1,
+ (gchar *) "mainConnectionId",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_signal_info_removed_main_connection_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_signal_info_removed_main_connection_ARG_mainConnectionId,
+ NULL
+};
+
+static const _ExtendedGDBusSignalInfo _audiomanager_commandinterface_signal_info_removed_main_connection =
+{
+ {
+ -1,
+ (gchar *) "RemovedMainConnection",
+ (GDBusArgInfo **) &_audiomanager_commandinterface_signal_info_removed_main_connection_ARG_pointers,
+ NULL
+ },
+ "removed-main-connection"
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_signal_info_main_connection_state_changed_ARG_connectionID =
+{
+ {
+ -1,
+ (gchar *) "connectionID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_signal_info_main_connection_state_changed_ARG_connectionState =
+{
+ {
+ -1,
+ (gchar *) "connectionState",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_signal_info_main_connection_state_changed_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_signal_info_main_connection_state_changed_ARG_connectionID,
+ &_audiomanager_commandinterface_signal_info_main_connection_state_changed_ARG_connectionState,
+ NULL
+};
+
+static const _ExtendedGDBusSignalInfo _audiomanager_commandinterface_signal_info_main_connection_state_changed =
+{
+ {
+ -1,
+ (gchar *) "MainConnectionStateChanged",
+ (GDBusArgInfo **) &_audiomanager_commandinterface_signal_info_main_connection_state_changed_ARG_pointers,
+ NULL
+ },
+ "main-connection-state-changed"
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_signal_info_volume_changed_ARG_sinkID =
+{
+ {
+ -1,
+ (gchar *) "sinkID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_signal_info_volume_changed_ARG_volume =
+{
+ {
+ -1,
+ (gchar *) "volume",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_signal_info_volume_changed_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_signal_info_volume_changed_ARG_sinkID,
+ &_audiomanager_commandinterface_signal_info_volume_changed_ARG_volume,
+ NULL
+};
+
+static const _ExtendedGDBusSignalInfo _audiomanager_commandinterface_signal_info_volume_changed =
+{
+ {
+ -1,
+ (gchar *) "VolumeChanged",
+ (GDBusArgInfo **) &_audiomanager_commandinterface_signal_info_volume_changed_ARG_pointers,
+ NULL
+ },
+ "volume-changed"
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_signal_info_sink_mute_state_changed_ARG_sinkID =
+{
+ {
+ -1,
+ (gchar *) "sinkID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_signal_info_sink_mute_state_changed_ARG_muteState =
+{
+ {
+ -1,
+ (gchar *) "muteState",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_signal_info_sink_mute_state_changed_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_signal_info_sink_mute_state_changed_ARG_sinkID,
+ &_audiomanager_commandinterface_signal_info_sink_mute_state_changed_ARG_muteState,
+ NULL
+};
+
+static const _ExtendedGDBusSignalInfo _audiomanager_commandinterface_signal_info_sink_mute_state_changed =
+{
+ {
+ -1,
+ (gchar *) "SinkMuteStateChanged",
+ (GDBusArgInfo **) &_audiomanager_commandinterface_signal_info_sink_mute_state_changed_ARG_pointers,
+ NULL
+ },
+ "sink-mute-state-changed"
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_commandinterface_signal_info_system_property_changed_ARG_SystemProperty =
+{
+ {
+ -1,
+ (gchar *) "SystemProperty",
+ (gchar *) "(nn)",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_commandinterface_signal_info_system_property_changed_ARG_pointers[] =
+{
+ &_audiomanager_commandinterface_signal_info_system_property_changed_ARG_SystemProperty,
+ NULL
+};
+
+static const _ExtendedGDBusSignalInfo _audiomanager_commandinterface_signal_info_system_property_changed =
+{
+ {
+ -1,
+ (gchar *) "SystemPropertyChanged",
+ (GDBusArgInfo **) &_audiomanager_commandinterface_signal_info_system_property_changed_ARG_pointers,
+ NULL
+ },
+ "system-property-changed"
+};
+
+static const _ExtendedGDBusSignalInfo * const _audiomanager_commandinterface_signal_info_pointers[] =
+{
+ &_audiomanager_commandinterface_signal_info_new_main_connection,
+ &_audiomanager_commandinterface_signal_info_removed_main_connection,
+ &_audiomanager_commandinterface_signal_info_main_connection_state_changed,
+ &_audiomanager_commandinterface_signal_info_volume_changed,
+ &_audiomanager_commandinterface_signal_info_sink_mute_state_changed,
+ &_audiomanager_commandinterface_signal_info_system_property_changed,
+ NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _audiomanager_commandinterface_interface_info =
+{
+ {
+ -1,
+ (gchar *) "org.genivi.audiomanager.commandinterface",
+ (GDBusMethodInfo **) &_audiomanager_commandinterface_method_info_pointers,
+ (GDBusSignalInfo **) &_audiomanager_commandinterface_signal_info_pointers,
+ NULL,
+ NULL
+ },
+ "audiomanager-commandinterface",
+};
+
+
+/**
+ * audiomanager_commandinterface_interface_info:
+ *
+ * Gets a machine-readable description of the <link linkend="gdbus-interface-org-genivi-audiomanager-commandinterface.top_of_page">org.genivi.audiomanager.commandinterface</link> D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+audiomanager_commandinterface_interface_info (void)
+{
+ return (GDBusInterfaceInfo *) &_audiomanager_commandinterface_interface_info.parent_struct;
+}
+
+/**
+ * audiomanager_commandinterface_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #AudiomanagerCommandinterface interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+audiomanager_commandinterface_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+ return property_id_begin - 1;
+}
+
+
+
+/**
+ * AudiomanagerCommandinterface:
+ *
+ * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-commandinterface.top_of_page">org.genivi.audiomanager.commandinterface</link>.
+ */
+
+/**
+ * AudiomanagerCommandinterfaceIface:
+ * @parent_iface: The parent interface.
+ * @handle_connect: Handler for the #AudiomanagerCommandinterface::handle-connect signal.
+ * @handle_disconnect: Handler for the #AudiomanagerCommandinterface::handle-disconnect signal.
+ * @handle_get_list_main_connections: Handler for the #AudiomanagerCommandinterface::handle-get-list-main-connections signal.
+ * @handle_get_list_main_sinks: Handler for the #AudiomanagerCommandinterface::handle-get-list-main-sinks signal.
+ * @handle_set_sink_mute_state: Handler for the #AudiomanagerCommandinterface::handle-set-sink-mute-state signal.
+ * @handle_set_volume: Handler for the #AudiomanagerCommandinterface::handle-set-volume signal.
+ * @handle_volume_step: Handler for the #AudiomanagerCommandinterface::handle-volume-step signal.
+ * @main_connection_state_changed: Handler for the #AudiomanagerCommandinterface::main-connection-state-changed signal.
+ * @new_main_connection: Handler for the #AudiomanagerCommandinterface::new-main-connection signal.
+ * @removed_main_connection: Handler for the #AudiomanagerCommandinterface::removed-main-connection signal.
+ * @sink_mute_state_changed: Handler for the #AudiomanagerCommandinterface::sink-mute-state-changed signal.
+ * @system_property_changed: Handler for the #AudiomanagerCommandinterface::system-property-changed signal.
+ * @volume_changed: Handler for the #AudiomanagerCommandinterface::volume-changed signal.
+ *
+ * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-commandinterface.top_of_page">org.genivi.audiomanager.commandinterface</link>.
+ */
+
+typedef AudiomanagerCommandinterfaceIface AudiomanagerCommandinterfaceInterface;
+G_DEFINE_INTERFACE (AudiomanagerCommandinterface, audiomanager_commandinterface, G_TYPE_OBJECT);
+
+static void
+audiomanager_commandinterface_default_init (AudiomanagerCommandinterfaceIface *iface)
+{
+ /* GObject signals for incoming D-Bus method calls: */
+ /**
+ * AudiomanagerCommandinterface::handle-connect:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_sourceID: Argument passed by remote caller.
+ * @arg_sinkID: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.Connect">Connect()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_commandinterface_complete_connect() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-connect",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerCommandinterfaceIface, handle_connect),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerCommandinterface::handle-disconnect:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_mainConnectionID: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.Disconnect">Disconnect()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_commandinterface_complete_disconnect() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-disconnect",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerCommandinterfaceIface, handle_disconnect),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 2,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerCommandinterface::handle-set-volume:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_sinkID: Argument passed by remote caller.
+ * @arg_volume: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.SetVolume">SetVolume()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_commandinterface_complete_set_volume() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-set-volume",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerCommandinterfaceIface, handle_set_volume),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_INT);
+
+ /**
+ * AudiomanagerCommandinterface::handle-volume-step:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_sinkID: Argument passed by remote caller.
+ * @arg_volumeStep: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.VolumeStep">VolumeStep()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_commandinterface_complete_volume_step() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-volume-step",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerCommandinterfaceIface, handle_volume_step),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_INT);
+
+ /**
+ * AudiomanagerCommandinterface::handle-set-sink-mute-state:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_sinkID: Argument passed by remote caller.
+ * @arg_muteState: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.SetSinkMuteState">SetSinkMuteState()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_commandinterface_complete_set_sink_mute_state() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-set-sink-mute-state",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerCommandinterfaceIface, handle_set_sink_mute_state),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_INT);
+
+ /**
+ * AudiomanagerCommandinterface::handle-get-list-main-connections:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.GetListMainConnections">GetListMainConnections()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_commandinterface_complete_get_list_main_connections() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-get-list-main-connections",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerCommandinterfaceIface, handle_get_list_main_connections),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 1,
+ G_TYPE_DBUS_METHOD_INVOCATION);
+
+ /**
+ * AudiomanagerCommandinterface::handle-get-list-main-sinks:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: A #GDBusMethodInvocation.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.GetListMainSinks">GetListMainSinks()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_commandinterface_complete_get_list_main_sinks() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-get-list-main-sinks",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerCommandinterfaceIface, handle_get_list_main_sinks),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 1,
+ G_TYPE_DBUS_METHOD_INVOCATION);
+
+ /* GObject signals for received D-Bus signals: */
+ /**
+ * AudiomanagerCommandinterface::new-main-connection:
+ * @object: A #AudiomanagerCommandinterface.
+ * @arg_mainConnection: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-genivi-audiomanager-commandinterface.NewMainConnection">"NewMainConnection"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+ g_signal_new ("new-main-connection",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerCommandinterfaceIface, new_main_connection),
+ NULL,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 1, G_TYPE_VARIANT);
+
+ /**
+ * AudiomanagerCommandinterface::removed-main-connection:
+ * @object: A #AudiomanagerCommandinterface.
+ * @arg_mainConnectionId: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-genivi-audiomanager-commandinterface.RemovedMainConnection">"RemovedMainConnection"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+ g_signal_new ("removed-main-connection",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerCommandinterfaceIface, removed_main_connection),
+ NULL,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 1, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerCommandinterface::main-connection-state-changed:
+ * @object: A #AudiomanagerCommandinterface.
+ * @arg_connectionID: Argument.
+ * @arg_connectionState: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-genivi-audiomanager-commandinterface.MainConnectionStateChanged">"MainConnectionStateChanged"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+ g_signal_new ("main-connection-state-changed",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerCommandinterfaceIface, main_connection_state_changed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 2, G_TYPE_UINT, G_TYPE_INT);
+
+ /**
+ * AudiomanagerCommandinterface::volume-changed:
+ * @object: A #AudiomanagerCommandinterface.
+ * @arg_sinkID: Argument.
+ * @arg_volume: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-genivi-audiomanager-commandinterface.VolumeChanged">"VolumeChanged"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+ g_signal_new ("volume-changed",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerCommandinterfaceIface, volume_changed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 2, G_TYPE_UINT, G_TYPE_INT);
+
+ /**
+ * AudiomanagerCommandinterface::sink-mute-state-changed:
+ * @object: A #AudiomanagerCommandinterface.
+ * @arg_sinkID: Argument.
+ * @arg_muteState: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-genivi-audiomanager-commandinterface.SinkMuteStateChanged">"SinkMuteStateChanged"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+ g_signal_new ("sink-mute-state-changed",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerCommandinterfaceIface, sink_mute_state_changed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 2, G_TYPE_UINT, G_TYPE_INT);
+
+ /**
+ * AudiomanagerCommandinterface::system-property-changed:
+ * @object: A #AudiomanagerCommandinterface.
+ * @arg_SystemProperty: Argument.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-genivi-audiomanager-commandinterface.SystemPropertyChanged">"SystemPropertyChanged"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+ g_signal_new ("system-property-changed",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerCommandinterfaceIface, system_property_changed),
+ NULL,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 1, G_TYPE_VARIANT);
+
+}
+
+/**
+ * audiomanager_commandinterface_emit_new_main_connection:
+ * @object: A #AudiomanagerCommandinterface.
+ * @arg_mainConnection: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-genivi-audiomanager-commandinterface.NewMainConnection">"NewMainConnection"</link> D-Bus signal.
+ */
+void
+audiomanager_commandinterface_emit_new_main_connection (
+ AudiomanagerCommandinterface *object,
+ GVariant *arg_mainConnection)
+{
+ g_signal_emit_by_name (object, "new-main-connection", arg_mainConnection);
+}
+
+/**
+ * audiomanager_commandinterface_emit_removed_main_connection:
+ * @object: A #AudiomanagerCommandinterface.
+ * @arg_mainConnectionId: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-genivi-audiomanager-commandinterface.RemovedMainConnection">"RemovedMainConnection"</link> D-Bus signal.
+ */
+void
+audiomanager_commandinterface_emit_removed_main_connection (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_mainConnectionId)
+{
+ g_signal_emit_by_name (object, "removed-main-connection", arg_mainConnectionId);
+}
+
+/**
+ * audiomanager_commandinterface_emit_main_connection_state_changed:
+ * @object: A #AudiomanagerCommandinterface.
+ * @arg_connectionID: Argument to pass with the signal.
+ * @arg_connectionState: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-genivi-audiomanager-commandinterface.MainConnectionStateChanged">"MainConnectionStateChanged"</link> D-Bus signal.
+ */
+void
+audiomanager_commandinterface_emit_main_connection_state_changed (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_connectionID,
+ gint16 arg_connectionState)
+{
+ g_signal_emit_by_name (object, "main-connection-state-changed", arg_connectionID, arg_connectionState);
+}
+
+/**
+ * audiomanager_commandinterface_emit_volume_changed:
+ * @object: A #AudiomanagerCommandinterface.
+ * @arg_sinkID: Argument to pass with the signal.
+ * @arg_volume: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-genivi-audiomanager-commandinterface.VolumeChanged">"VolumeChanged"</link> D-Bus signal.
+ */
+void
+audiomanager_commandinterface_emit_volume_changed (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_sinkID,
+ gint16 arg_volume)
+{
+ g_signal_emit_by_name (object, "volume-changed", arg_sinkID, arg_volume);
+}
+
+/**
+ * audiomanager_commandinterface_emit_sink_mute_state_changed:
+ * @object: A #AudiomanagerCommandinterface.
+ * @arg_sinkID: Argument to pass with the signal.
+ * @arg_muteState: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-genivi-audiomanager-commandinterface.SinkMuteStateChanged">"SinkMuteStateChanged"</link> D-Bus signal.
+ */
+void
+audiomanager_commandinterface_emit_sink_mute_state_changed (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_sinkID,
+ gint16 arg_muteState)
+{
+ g_signal_emit_by_name (object, "sink-mute-state-changed", arg_sinkID, arg_muteState);
+}
+
+/**
+ * audiomanager_commandinterface_emit_system_property_changed:
+ * @object: A #AudiomanagerCommandinterface.
+ * @arg_SystemProperty: Argument to pass with the signal.
+ *
+ * Emits the <link linkend="gdbus-signal-org-genivi-audiomanager-commandinterface.SystemPropertyChanged">"SystemPropertyChanged"</link> D-Bus signal.
+ */
+void
+audiomanager_commandinterface_emit_system_property_changed (
+ AudiomanagerCommandinterface *object,
+ GVariant *arg_SystemProperty)
+{
+ g_signal_emit_by_name (object, "system-property-changed", arg_SystemProperty);
+}
+
+/**
+ * audiomanager_commandinterface_call_connect:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @arg_sourceID: Argument to pass with the method invocation.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.Connect">Connect()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_commandinterface_call_connect_finish() to get the result of the operation.
+ *
+ * See audiomanager_commandinterface_call_connect_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_commandinterface_call_connect (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sourceID,
+ guint16 arg_sinkID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Connect",
+ g_variant_new ("(qq)",
+ arg_sourceID,
+ arg_sinkID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_commandinterface_call_connect_finish:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @out_mainConnectionID: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_commandinterface_call_connect().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_commandinterface_call_connect().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_connect_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ guint16 *out_mainConnectionID,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(nq)",
+ out_result,
+ out_mainConnectionID);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_call_connect_sync:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @arg_sourceID: Argument to pass with the method invocation.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @out_mainConnectionID: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.Connect">Connect()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_commandinterface_call_connect() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_connect_sync (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sourceID,
+ guint16 arg_sinkID,
+ gint16 *out_result,
+ guint16 *out_mainConnectionID,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Connect",
+ g_variant_new ("(qq)",
+ arg_sourceID,
+ arg_sinkID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(nq)",
+ out_result,
+ out_mainConnectionID);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_call_disconnect:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @arg_mainConnectionID: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.Disconnect">Disconnect()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_commandinterface_call_disconnect_finish() to get the result of the operation.
+ *
+ * See audiomanager_commandinterface_call_disconnect_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_commandinterface_call_disconnect (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_mainConnectionID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "Disconnect",
+ g_variant_new ("(q)",
+ arg_mainConnectionID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_commandinterface_call_disconnect_finish:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_commandinterface_call_disconnect().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_commandinterface_call_disconnect().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_disconnect_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n)",
+ out_result);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_call_disconnect_sync:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @arg_mainConnectionID: Argument to pass with the method invocation.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.Disconnect">Disconnect()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_commandinterface_call_disconnect() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_disconnect_sync (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_mainConnectionID,
+ gint16 *out_result,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "Disconnect",
+ g_variant_new ("(q)",
+ arg_mainConnectionID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n)",
+ out_result);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_call_set_volume:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @arg_volume: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.SetVolume">SetVolume()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_commandinterface_call_set_volume_finish() to get the result of the operation.
+ *
+ * See audiomanager_commandinterface_call_set_volume_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_commandinterface_call_set_volume (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sinkID,
+ gint16 arg_volume,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "SetVolume",
+ g_variant_new ("(qn)",
+ arg_sinkID,
+ arg_volume),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_commandinterface_call_set_volume_finish:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_commandinterface_call_set_volume().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_commandinterface_call_set_volume().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_set_volume_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n)",
+ out_result);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_call_set_volume_sync:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @arg_volume: Argument to pass with the method invocation.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.SetVolume">SetVolume()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_commandinterface_call_set_volume() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_set_volume_sync (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sinkID,
+ gint16 arg_volume,
+ gint16 *out_result,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "SetVolume",
+ g_variant_new ("(qn)",
+ arg_sinkID,
+ arg_volume),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n)",
+ out_result);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_call_volume_step:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @arg_volumeStep: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.VolumeStep">VolumeStep()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_commandinterface_call_volume_step_finish() to get the result of the operation.
+ *
+ * See audiomanager_commandinterface_call_volume_step_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_commandinterface_call_volume_step (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sinkID,
+ gint16 arg_volumeStep,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "VolumeStep",
+ g_variant_new ("(qn)",
+ arg_sinkID,
+ arg_volumeStep),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_commandinterface_call_volume_step_finish:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_commandinterface_call_volume_step().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_commandinterface_call_volume_step().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_volume_step_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n)",
+ out_result);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_call_volume_step_sync:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @arg_volumeStep: Argument to pass with the method invocation.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.VolumeStep">VolumeStep()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_commandinterface_call_volume_step() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_volume_step_sync (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sinkID,
+ gint16 arg_volumeStep,
+ gint16 *out_result,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "VolumeStep",
+ g_variant_new ("(qn)",
+ arg_sinkID,
+ arg_volumeStep),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n)",
+ out_result);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_call_set_sink_mute_state:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @arg_muteState: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.SetSinkMuteState">SetSinkMuteState()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_commandinterface_call_set_sink_mute_state_finish() to get the result of the operation.
+ *
+ * See audiomanager_commandinterface_call_set_sink_mute_state_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_commandinterface_call_set_sink_mute_state (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sinkID,
+ gint16 arg_muteState,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "SetSinkMuteState",
+ g_variant_new ("(qn)",
+ arg_sinkID,
+ arg_muteState),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_commandinterface_call_set_sink_mute_state_finish:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_commandinterface_call_set_sink_mute_state().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_commandinterface_call_set_sink_mute_state().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_set_sink_mute_state_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n)",
+ out_result);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_call_set_sink_mute_state_sync:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @arg_muteState: Argument to pass with the method invocation.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.SetSinkMuteState">SetSinkMuteState()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_commandinterface_call_set_sink_mute_state() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_set_sink_mute_state_sync (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sinkID,
+ gint16 arg_muteState,
+ gint16 *out_result,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "SetSinkMuteState",
+ g_variant_new ("(qn)",
+ arg_sinkID,
+ arg_muteState),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n)",
+ out_result);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_call_get_list_main_connections:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.GetListMainConnections">GetListMainConnections()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_commandinterface_call_get_list_main_connections_finish() to get the result of the operation.
+ *
+ * See audiomanager_commandinterface_call_get_list_main_connections_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_commandinterface_call_get_list_main_connections (
+ AudiomanagerCommandinterface *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "GetListMainConnections",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_commandinterface_call_get_list_main_connections_finish:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @out_listConnections: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_commandinterface_call_get_list_main_connections().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_commandinterface_call_get_list_main_connections().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_get_list_main_connections_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GVariant **out_listConnections,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n@a(qqqnn))",
+ out_result,
+ out_listConnections);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_call_get_list_main_connections_sync:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @out_listConnections: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.GetListMainConnections">GetListMainConnections()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_commandinterface_call_get_list_main_connections() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_get_list_main_connections_sync (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GVariant **out_listConnections,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "GetListMainConnections",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n@a(qqqnn))",
+ out_result,
+ out_listConnections);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_call_get_list_main_sinks:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.GetListMainSinks">GetListMainSinks()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_commandinterface_call_get_list_main_sinks_finish() to get the result of the operation.
+ *
+ * See audiomanager_commandinterface_call_get_list_main_sinks_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_commandinterface_call_get_list_main_sinks (
+ AudiomanagerCommandinterface *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "GetListMainSinks",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_commandinterface_call_get_list_main_sinks_finish:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @out_listMainSinks: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_commandinterface_call_get_list_main_sinks().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_commandinterface_call_get_list_main_sinks().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_get_list_main_sinks_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GVariant **out_listMainSinks,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n@a(qs(nn)nnq))",
+ out_result,
+ out_listMainSinks);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_call_get_list_main_sinks_sync:
+ * @proxy: A #AudiomanagerCommandinterfaceProxy.
+ * @out_result: (out): Return location for return parameter or %NULL to ignore.
+ * @out_listMainSinks: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.GetListMainSinks">GetListMainSinks()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_commandinterface_call_get_list_main_sinks() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_commandinterface_call_get_list_main_sinks_sync (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GVariant **out_listMainSinks,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "GetListMainSinks",
+ g_variant_new ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n@a(qs(nn)nnq))",
+ out_result,
+ out_listMainSinks);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_commandinterface_complete_connect:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ * @mainConnectionID: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.Connect">Connect()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_commandinterface_complete_connect (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result,
+ guint16 mainConnectionID)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(nq)",
+ result,
+ mainConnectionID));
+}
+
+/**
+ * audiomanager_commandinterface_complete_disconnect:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.Disconnect">Disconnect()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_commandinterface_complete_disconnect (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(n)",
+ result));
+}
+
+/**
+ * audiomanager_commandinterface_complete_set_volume:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.SetVolume">SetVolume()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_commandinterface_complete_set_volume (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(n)",
+ result));
+}
+
+/**
+ * audiomanager_commandinterface_complete_volume_step:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.VolumeStep">VolumeStep()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_commandinterface_complete_volume_step (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(n)",
+ result));
+}
+
+/**
+ * audiomanager_commandinterface_complete_set_sink_mute_state:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.SetSinkMuteState">SetSinkMuteState()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_commandinterface_complete_set_sink_mute_state (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(n)",
+ result));
+}
+
+/**
+ * audiomanager_commandinterface_complete_get_list_main_connections:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ * @listConnections: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.GetListMainConnections">GetListMainConnections()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_commandinterface_complete_get_list_main_connections (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result,
+ GVariant *listConnections)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(n@a(qqqnn))",
+ result,
+ listConnections));
+}
+
+/**
+ * audiomanager_commandinterface_complete_get_list_main_sinks:
+ * @object: A #AudiomanagerCommandinterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @result: Parameter to return.
+ * @listMainSinks: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-commandinterface.GetListMainSinks">GetListMainSinks()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_commandinterface_complete_get_list_main_sinks (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result,
+ GVariant *listMainSinks)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(n@a(qs(nn)nnq))",
+ result,
+ listMainSinks));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * AudiomanagerCommandinterfaceProxy:
+ *
+ * The #AudiomanagerCommandinterfaceProxy structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * AudiomanagerCommandinterfaceProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #AudiomanagerCommandinterfaceProxy.
+ */
+
+struct _AudiomanagerCommandinterfaceProxyPrivate
+{
+ GData *qdata;
+};
+
+static void audiomanager_commandinterface_proxy_iface_init (AudiomanagerCommandinterfaceIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (AudiomanagerCommandinterfaceProxy, audiomanager_commandinterface_proxy, G_TYPE_DBUS_PROXY,
+ G_ADD_PRIVATE (AudiomanagerCommandinterfaceProxy)
+ G_IMPLEMENT_INTERFACE (TYPE_AUDIOMANAGER_COMMANDINTERFACE, audiomanager_commandinterface_proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (AudiomanagerCommandinterfaceProxy, audiomanager_commandinterface_proxy, G_TYPE_DBUS_PROXY,
+ G_IMPLEMENT_INTERFACE (TYPE_AUDIOMANAGER_COMMANDINTERFACE, audiomanager_commandinterface_proxy_iface_init));
+
+#endif
+static void
+audiomanager_commandinterface_proxy_finalize (GObject *object)
+{
+ AudiomanagerCommandinterfaceProxy *proxy = AUDIOMANAGER_COMMANDINTERFACE_PROXY (object);
+ g_datalist_clear (&proxy->priv->qdata);
+ G_OBJECT_CLASS (audiomanager_commandinterface_proxy_parent_class)->finalize (object);
+}
+
+static void
+audiomanager_commandinterface_proxy_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+audiomanager_commandinterface_proxy_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+audiomanager_commandinterface_proxy_g_signal (GDBusProxy *proxy,
+ const gchar *sender_name G_GNUC_UNUSED,
+ const gchar *signal_name,
+ GVariant *parameters)
+{
+ _ExtendedGDBusSignalInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint n;
+ guint signal_id;
+ info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_audiomanager_commandinterface_interface_info.parent_struct, signal_name);
+ if (info == NULL)
+ return;
+ num_params = g_variant_n_children (parameters);
+ paramv = g_new0 (GValue, num_params + 1);
+ g_value_init (&paramv[0], TYPE_AUDIOMANAGER_COMMANDINTERFACE);
+ g_value_set_object (&paramv[0], proxy);
+ g_variant_iter_init (&iter, parameters);
+ n = 1;
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (&paramv[n], G_TYPE_VARIANT);
+ g_value_set_variant (&paramv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, TYPE_AUDIOMANAGER_COMMANDINTERFACE);
+ g_signal_emitv (paramv, signal_id, 0, NULL);
+ for (n = 0; n < num_params + 1; n++)
+ g_value_unset (&paramv[n]);
+ g_free (paramv);
+}
+
+static void
+audiomanager_commandinterface_proxy_g_properties_changed (GDBusProxy *_proxy,
+ GVariant *changed_properties,
+ const gchar *const *invalidated_properties)
+{
+ AudiomanagerCommandinterfaceProxy *proxy = AUDIOMANAGER_COMMANDINTERFACE_PROXY (_proxy);
+ guint n;
+ const gchar *key;
+ GVariantIter *iter;
+ _ExtendedGDBusPropertyInfo *info;
+ g_variant_get (changed_properties, "a{sv}", &iter);
+ while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_audiomanager_commandinterface_interface_info.parent_struct, key);
+ g_datalist_remove_data (&proxy->priv->qdata, key);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+ g_variant_iter_free (iter);
+ for (n = 0; invalidated_properties[n] != NULL; n++)
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_audiomanager_commandinterface_interface_info.parent_struct, invalidated_properties[n]);
+ g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+}
+
+static void
+audiomanager_commandinterface_proxy_init (AudiomanagerCommandinterfaceProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ proxy->priv = audiomanager_commandinterface_proxy_get_instance_private (proxy);
+#else
+ proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_AUDIOMANAGER_COMMANDINTERFACE_PROXY, AudiomanagerCommandinterfaceProxyPrivate);
+#endif
+
+ g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), audiomanager_commandinterface_interface_info ());
+}
+
+static void
+audiomanager_commandinterface_proxy_class_init (AudiomanagerCommandinterfaceProxyClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusProxyClass *proxy_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = audiomanager_commandinterface_proxy_finalize;
+ gobject_class->get_property = audiomanager_commandinterface_proxy_get_property;
+ gobject_class->set_property = audiomanager_commandinterface_proxy_set_property;
+
+ proxy_class = G_DBUS_PROXY_CLASS (klass);
+ proxy_class->g_signal = audiomanager_commandinterface_proxy_g_signal;
+ proxy_class->g_properties_changed = audiomanager_commandinterface_proxy_g_properties_changed;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (AudiomanagerCommandinterfaceProxyPrivate));
+#endif
+}
+
+static void
+audiomanager_commandinterface_proxy_iface_init (AudiomanagerCommandinterfaceIface *iface)
+{
+}
+
+/**
+ * audiomanager_commandinterface_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-commandinterface.top_of_page">org.genivi.audiomanager.commandinterface</link>. See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_commandinterface_proxy_new_finish() to get the result of the operation.
+ *
+ * See audiomanager_commandinterface_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+audiomanager_commandinterface_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (TYPE_AUDIOMANAGER_COMMANDINTERFACE_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.genivi.audiomanager.commandinterface", NULL);
+}
+
+/**
+ * audiomanager_commandinterface_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_commandinterface_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with audiomanager_commandinterface_proxy_new().
+ *
+ * Returns: (transfer full) (type AudiomanagerCommandinterfaceProxy): The constructed proxy object or %NULL if @error is set.
+ */
+AudiomanagerCommandinterface *
+audiomanager_commandinterface_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return AUDIOMANAGER_COMMANDINTERFACE (ret);
+ else
+ return NULL;
+}
+
+/**
+ * audiomanager_commandinterface_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-commandinterface.top_of_page">org.genivi.audiomanager.commandinterface</link>. See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_commandinterface_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type AudiomanagerCommandinterfaceProxy): The constructed proxy object or %NULL if @error is set.
+ */
+AudiomanagerCommandinterface *
+audiomanager_commandinterface_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (TYPE_AUDIOMANAGER_COMMANDINTERFACE_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.genivi.audiomanager.commandinterface", NULL);
+ if (ret != NULL)
+ return AUDIOMANAGER_COMMANDINTERFACE (ret);
+ else
+ return NULL;
+}
+
+
+/**
+ * audiomanager_commandinterface_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like audiomanager_commandinterface_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_commandinterface_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See audiomanager_commandinterface_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+audiomanager_commandinterface_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (TYPE_AUDIOMANAGER_COMMANDINTERFACE_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.genivi.audiomanager.commandinterface", NULL);
+}
+
+/**
+ * audiomanager_commandinterface_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_commandinterface_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with audiomanager_commandinterface_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type AudiomanagerCommandinterfaceProxy): The constructed proxy object or %NULL if @error is set.
+ */
+AudiomanagerCommandinterface *
+audiomanager_commandinterface_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return AUDIOMANAGER_COMMANDINTERFACE (ret);
+ else
+ return NULL;
+}
+
+/**
+ * audiomanager_commandinterface_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like audiomanager_commandinterface_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_commandinterface_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type AudiomanagerCommandinterfaceProxy): The constructed proxy object or %NULL if @error is set.
+ */
+AudiomanagerCommandinterface *
+audiomanager_commandinterface_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (TYPE_AUDIOMANAGER_COMMANDINTERFACE_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.genivi.audiomanager.commandinterface", NULL);
+ if (ret != NULL)
+ return AUDIOMANAGER_COMMANDINTERFACE (ret);
+ else
+ return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * AudiomanagerCommandinterfaceSkeleton:
+ *
+ * The #AudiomanagerCommandinterfaceSkeleton structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * AudiomanagerCommandinterfaceSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #AudiomanagerCommandinterfaceSkeleton.
+ */
+
+struct _AudiomanagerCommandinterfaceSkeletonPrivate
+{
+ GValue *properties;
+ GList *changed_properties;
+ GSource *changed_properties_idle_source;
+ GMainContext *context;
+ GMutex lock;
+};
+
+static void
+_audiomanager_commandinterface_skeleton_handle_method_call (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ AudiomanagerCommandinterfaceSkeleton *skeleton = AUDIOMANAGER_COMMANDINTERFACE_SKELETON (user_data);
+ _ExtendedGDBusMethodInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint num_extra;
+ guint n;
+ guint signal_id;
+ GValue return_value = G_VALUE_INIT;
+ info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+ g_assert (info != NULL);
+ num_params = g_variant_n_children (parameters);
+ num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra);
+ n = 0;
+ g_value_init (&paramv[n], TYPE_AUDIOMANAGER_COMMANDINTERFACE);
+ g_value_set_object (&paramv[n++], skeleton);
+ g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+ g_value_set_object (&paramv[n++], invocation);
+ if (info->pass_fdlist)
+ {
+#ifdef G_OS_UNIX
+ g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
+ g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));
+#else
+ g_assert_not_reached ();
+#endif
+ }
+ g_variant_iter_init (&iter, parameters);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (&paramv[n], G_TYPE_VARIANT);
+ g_value_set_variant (&paramv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, TYPE_AUDIOMANAGER_COMMANDINTERFACE);
+ g_value_init (&return_value, G_TYPE_BOOLEAN);
+ g_signal_emitv (paramv, signal_id, 0, &return_value);
+ if (!g_value_get_boolean (&return_value))
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);
+ g_value_unset (&return_value);
+ for (n = 0; n < num_params + num_extra; n++)
+ g_value_unset (&paramv[n]);
+ g_free (paramv);
+}
+
+static GVariant *
+_audiomanager_commandinterface_skeleton_handle_get_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GError **error,
+ gpointer user_data)
+{
+ AudiomanagerCommandinterfaceSkeleton *skeleton = AUDIOMANAGER_COMMANDINTERFACE_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ GVariant *ret;
+ ret = NULL;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_audiomanager_commandinterface_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+ }
+ else
+ {
+ g_value_init (&value, pspec->value_type);
+ g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_value_unset (&value);
+ }
+ return ret;
+}
+
+static gboolean
+_audiomanager_commandinterface_skeleton_handle_set_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GVariant *variant,
+ GError **error,
+ gpointer user_data)
+{
+ AudiomanagerCommandinterfaceSkeleton *skeleton = AUDIOMANAGER_COMMANDINTERFACE_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ gboolean ret;
+ ret = FALSE;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_audiomanager_commandinterface_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+ }
+ else
+ {
+ if (info->use_gvariant)
+ g_value_set_variant (&value, variant);
+ else
+ g_dbus_gvariant_to_gvalue (variant, &value);
+ g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ g_value_unset (&value);
+ ret = TRUE;
+ }
+ return ret;
+}
+
+static const GDBusInterfaceVTable _audiomanager_commandinterface_skeleton_vtable =
+{
+ _audiomanager_commandinterface_skeleton_handle_method_call,
+ _audiomanager_commandinterface_skeleton_handle_get_property,
+ _audiomanager_commandinterface_skeleton_handle_set_property,
+ {NULL}
+};
+
+static GDBusInterfaceInfo *
+audiomanager_commandinterface_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return audiomanager_commandinterface_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+audiomanager_commandinterface_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return (GDBusInterfaceVTable *) &_audiomanager_commandinterface_skeleton_vtable;
+}
+
+static GVariant *
+audiomanager_commandinterface_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+ AudiomanagerCommandinterfaceSkeleton *skeleton = AUDIOMANAGER_COMMANDINTERFACE_SKELETON (_skeleton);
+
+ GVariantBuilder builder;
+ guint n;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ if (_audiomanager_commandinterface_interface_info.parent_struct.properties == NULL)
+ goto out;
+ for (n = 0; _audiomanager_commandinterface_interface_info.parent_struct.properties[n] != NULL; n++)
+ {
+ GDBusPropertyInfo *info = _audiomanager_commandinterface_interface_info.parent_struct.properties[n];
+ if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+ {
+ GVariant *value;
+ value = _audiomanager_commandinterface_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.genivi.audiomanager.commandinterface", info->name, NULL, skeleton);
+ if (value != NULL)
+ {
+ g_variant_take_ref (value);
+ g_variant_builder_add (&builder, "{sv}", info->name, value);
+ g_variant_unref (value);
+ }
+ }
+ }
+out:
+ return g_variant_builder_end (&builder);
+}
+
+static void
+audiomanager_commandinterface_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+}
+
+static void
+_audiomanager_commandinterface_on_signal_new_main_connection (
+ AudiomanagerCommandinterface *object,
+ GVariant *arg_mainConnection)
+{
+ AudiomanagerCommandinterfaceSkeleton *skeleton = AUDIOMANAGER_COMMANDINTERFACE_SKELETON (object);
+
+ GList *connections, *l;
+ GVariant *signal_variant;
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+ signal_variant = g_variant_ref_sink (g_variant_new ("(@(qqqnn))",
+ arg_mainConnection));
+ for (l = connections; l != NULL; l = l->next)
+ {
+ GDBusConnection *connection = l->data;
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.genivi.audiomanager.commandinterface", "NewMainConnection",
+ signal_variant, NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+}
+
+static void
+_audiomanager_commandinterface_on_signal_removed_main_connection (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_mainConnectionId)
+{
+ AudiomanagerCommandinterfaceSkeleton *skeleton = AUDIOMANAGER_COMMANDINTERFACE_SKELETON (object);
+
+ GList *connections, *l;
+ GVariant *signal_variant;
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+ signal_variant = g_variant_ref_sink (g_variant_new ("(q)",
+ arg_mainConnectionId));
+ for (l = connections; l != NULL; l = l->next)
+ {
+ GDBusConnection *connection = l->data;
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.genivi.audiomanager.commandinterface", "RemovedMainConnection",
+ signal_variant, NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+}
+
+static void
+_audiomanager_commandinterface_on_signal_main_connection_state_changed (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_connectionID,
+ gint16 arg_connectionState)
+{
+ AudiomanagerCommandinterfaceSkeleton *skeleton = AUDIOMANAGER_COMMANDINTERFACE_SKELETON (object);
+
+ GList *connections, *l;
+ GVariant *signal_variant;
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+ signal_variant = g_variant_ref_sink (g_variant_new ("(qn)",
+ arg_connectionID,
+ arg_connectionState));
+ for (l = connections; l != NULL; l = l->next)
+ {
+ GDBusConnection *connection = l->data;
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.genivi.audiomanager.commandinterface", "MainConnectionStateChanged",
+ signal_variant, NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+}
+
+static void
+_audiomanager_commandinterface_on_signal_volume_changed (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_sinkID,
+ gint16 arg_volume)
+{
+ AudiomanagerCommandinterfaceSkeleton *skeleton = AUDIOMANAGER_COMMANDINTERFACE_SKELETON (object);
+
+ GList *connections, *l;
+ GVariant *signal_variant;
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+ signal_variant = g_variant_ref_sink (g_variant_new ("(qn)",
+ arg_sinkID,
+ arg_volume));
+ for (l = connections; l != NULL; l = l->next)
+ {
+ GDBusConnection *connection = l->data;
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.genivi.audiomanager.commandinterface", "VolumeChanged",
+ signal_variant, NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+}
+
+static void
+_audiomanager_commandinterface_on_signal_sink_mute_state_changed (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_sinkID,
+ gint16 arg_muteState)
+{
+ AudiomanagerCommandinterfaceSkeleton *skeleton = AUDIOMANAGER_COMMANDINTERFACE_SKELETON (object);
+
+ GList *connections, *l;
+ GVariant *signal_variant;
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+ signal_variant = g_variant_ref_sink (g_variant_new ("(qn)",
+ arg_sinkID,
+ arg_muteState));
+ for (l = connections; l != NULL; l = l->next)
+ {
+ GDBusConnection *connection = l->data;
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.genivi.audiomanager.commandinterface", "SinkMuteStateChanged",
+ signal_variant, NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+}
+
+static void
+_audiomanager_commandinterface_on_signal_system_property_changed (
+ AudiomanagerCommandinterface *object,
+ GVariant *arg_SystemProperty)
+{
+ AudiomanagerCommandinterfaceSkeleton *skeleton = AUDIOMANAGER_COMMANDINTERFACE_SKELETON (object);
+
+ GList *connections, *l;
+ GVariant *signal_variant;
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+ signal_variant = g_variant_ref_sink (g_variant_new ("(@(nn))",
+ arg_SystemProperty));
+ for (l = connections; l != NULL; l = l->next)
+ {
+ GDBusConnection *connection = l->data;
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.genivi.audiomanager.commandinterface", "SystemPropertyChanged",
+ signal_variant, NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+}
+
+static void audiomanager_commandinterface_skeleton_iface_init (AudiomanagerCommandinterfaceIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (AudiomanagerCommandinterfaceSkeleton, audiomanager_commandinterface_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_ADD_PRIVATE (AudiomanagerCommandinterfaceSkeleton)
+ G_IMPLEMENT_INTERFACE (TYPE_AUDIOMANAGER_COMMANDINTERFACE, audiomanager_commandinterface_skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (AudiomanagerCommandinterfaceSkeleton, audiomanager_commandinterface_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_IMPLEMENT_INTERFACE (TYPE_AUDIOMANAGER_COMMANDINTERFACE, audiomanager_commandinterface_skeleton_iface_init));
+
+#endif
+static void
+audiomanager_commandinterface_skeleton_finalize (GObject *object)
+{
+ AudiomanagerCommandinterfaceSkeleton *skeleton = AUDIOMANAGER_COMMANDINTERFACE_SKELETON (object);
+ g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ g_main_context_unref (skeleton->priv->context);
+ g_mutex_clear (&skeleton->priv->lock);
+ G_OBJECT_CLASS (audiomanager_commandinterface_skeleton_parent_class)->finalize (object);
+}
+
+static void
+audiomanager_commandinterface_skeleton_init (AudiomanagerCommandinterfaceSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ skeleton->priv = audiomanager_commandinterface_skeleton_get_instance_private (skeleton);
+#else
+ skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_AUDIOMANAGER_COMMANDINTERFACE_SKELETON, AudiomanagerCommandinterfaceSkeletonPrivate);
+#endif
+
+ g_mutex_init (&skeleton->priv->lock);
+ skeleton->priv->context = g_main_context_ref_thread_default ();
+}
+
+static void
+audiomanager_commandinterface_skeleton_class_init (AudiomanagerCommandinterfaceSkeletonClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusInterfaceSkeletonClass *skeleton_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = audiomanager_commandinterface_skeleton_finalize;
+
+ skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+ skeleton_class->get_info = audiomanager_commandinterface_skeleton_dbus_interface_get_info;
+ skeleton_class->get_properties = audiomanager_commandinterface_skeleton_dbus_interface_get_properties;
+ skeleton_class->flush = audiomanager_commandinterface_skeleton_dbus_interface_flush;
+ skeleton_class->get_vtable = audiomanager_commandinterface_skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (AudiomanagerCommandinterfaceSkeletonPrivate));
+#endif
+}
+
+static void
+audiomanager_commandinterface_skeleton_iface_init (AudiomanagerCommandinterfaceIface *iface)
+{
+ iface->new_main_connection = _audiomanager_commandinterface_on_signal_new_main_connection;
+ iface->removed_main_connection = _audiomanager_commandinterface_on_signal_removed_main_connection;
+ iface->main_connection_state_changed = _audiomanager_commandinterface_on_signal_main_connection_state_changed;
+ iface->volume_changed = _audiomanager_commandinterface_on_signal_volume_changed;
+ iface->sink_mute_state_changed = _audiomanager_commandinterface_on_signal_sink_mute_state_changed;
+ iface->system_property_changed = _audiomanager_commandinterface_on_signal_system_property_changed;
+}
+
+/**
+ * audiomanager_commandinterface_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-commandinterface.top_of_page">org.genivi.audiomanager.commandinterface</link>.
+ *
+ * Returns: (transfer full) (type AudiomanagerCommandinterfaceSkeleton): The skeleton object.
+ */
+AudiomanagerCommandinterface *
+audiomanager_commandinterface_skeleton_new (void)
+{
+ return AUDIOMANAGER_COMMANDINTERFACE (g_object_new (TYPE_AUDIOMANAGER_COMMANDINTERFACE_SKELETON, NULL));
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.genivi.audiomanager.routinginterface
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:AudiomanagerRoutinginterface
+ * @title: AudiomanagerRoutinginterface
+ * @short_description: Generated C code for the org.genivi.audiomanager.routinginterface D-Bus interface
+ *
+ * This section contains code for working with the <link linkend="gdbus-interface-org-genivi-audiomanager-routinginterface.top_of_page">org.genivi.audiomanager.routinginterface</link> D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.genivi.audiomanager.routinginterface ---- */
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_connect_IN_ARG_handle =
+{
+ {
+ -1,
+ (gchar *) "handle",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_connect_IN_ARG_connectionID =
+{
+ {
+ -1,
+ (gchar *) "connectionID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_connect_IN_ARG_error =
+{
+ {
+ -1,
+ (gchar *) "error",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_ack_connect_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_ack_connect_IN_ARG_handle,
+ &_audiomanager_routinginterface_method_info_ack_connect_IN_ARG_connectionID,
+ &_audiomanager_routinginterface_method_info_ack_connect_IN_ARG_error,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_ack_connect =
+{
+ {
+ -1,
+ (gchar *) "ackConnect",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_ack_connect_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-ack-connect",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_disconnect_IN_ARG_handle =
+{
+ {
+ -1,
+ (gchar *) "handle",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_disconnect_IN_ARG_connectionID =
+{
+ {
+ -1,
+ (gchar *) "connectionID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_disconnect_IN_ARG_error =
+{
+ {
+ -1,
+ (gchar *) "error",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_ack_disconnect_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_ack_disconnect_IN_ARG_handle,
+ &_audiomanager_routinginterface_method_info_ack_disconnect_IN_ARG_connectionID,
+ &_audiomanager_routinginterface_method_info_ack_disconnect_IN_ARG_error,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_ack_disconnect =
+{
+ {
+ -1,
+ (gchar *) "ackDisconnect",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_ack_disconnect_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-ack-disconnect",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_set_source_state_IN_ARG_handle =
+{
+ {
+ -1,
+ (gchar *) "handle",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_set_source_state_IN_ARG_error =
+{
+ {
+ -1,
+ (gchar *) "error",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_ack_set_source_state_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_ack_set_source_state_IN_ARG_handle,
+ &_audiomanager_routinginterface_method_info_ack_set_source_state_IN_ARG_error,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_ack_set_source_state =
+{
+ {
+ -1,
+ (gchar *) "ackSetSourceState",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_ack_set_source_state_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-ack-set-source-state",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_set_sink_volume_IN_ARG_handle =
+{
+ {
+ -1,
+ (gchar *) "handle",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_set_sink_volume_IN_ARG_volume =
+{
+ {
+ -1,
+ (gchar *) "volume",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_set_sink_volume_IN_ARG_error =
+{
+ {
+ -1,
+ (gchar *) "error",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_ack_set_sink_volume_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_ack_set_sink_volume_IN_ARG_handle,
+ &_audiomanager_routinginterface_method_info_ack_set_sink_volume_IN_ARG_volume,
+ &_audiomanager_routinginterface_method_info_ack_set_sink_volume_IN_ARG_error,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_ack_set_sink_volume =
+{
+ {
+ -1,
+ (gchar *) "ackSetSinkVolume",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_ack_set_sink_volume_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-ack-set-sink-volume",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_register_sink_IN_ARG_sinkData =
+{
+ {
+ -1,
+ (gchar *) "sinkData",
+ (gchar *) "(qsqinb(ii)nna(in)aia(in)a(iin)a(iin))",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_register_sink_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_register_sink_IN_ARG_sinkData,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_register_sink_OUT_ARG_sinkID =
+{
+ {
+ -1,
+ (gchar *) "sinkID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_register_sink_OUT_ARG_error =
+{
+ {
+ -1,
+ (gchar *) "error",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_register_sink_OUT_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_register_sink_OUT_ARG_sinkID,
+ &_audiomanager_routinginterface_method_info_register_sink_OUT_ARG_error,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_register_sink =
+{
+ {
+ -1,
+ (gchar *) "registerSink",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_register_sink_IN_ARG_pointers,
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_register_sink_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-register-sink",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_deregister_sink_IN_ARG_sinkID =
+{
+ {
+ -1,
+ (gchar *) "sinkID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_deregister_sink_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_deregister_sink_IN_ARG_sinkID,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_deregister_sink_OUT_ARG_error =
+{
+ {
+ -1,
+ (gchar *) "error",
+ (gchar *) "i",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_deregister_sink_OUT_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_deregister_sink_OUT_ARG_error,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_deregister_sink =
+{
+ {
+ -1,
+ (gchar *) "deregisterSink",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_deregister_sink_IN_ARG_pointers,
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_deregister_sink_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-deregister-sink",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_register_source_IN_ARG_sourceData =
+{
+ {
+ -1,
+ (gchar *) "sourceData",
+ (gchar *) "(qqsqinb(ii)qa(in)aia(in)a(iin)a(iin))",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_register_source_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_register_source_IN_ARG_sourceData,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_register_source_OUT_ARG_sourceID =
+{
+ {
+ -1,
+ (gchar *) "sourceID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_register_source_OUT_ARG_error =
+{
+ {
+ -1,
+ (gchar *) "error",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_register_source_OUT_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_register_source_OUT_ARG_sourceID,
+ &_audiomanager_routinginterface_method_info_register_source_OUT_ARG_error,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_register_source =
+{
+ {
+ -1,
+ (gchar *) "registerSource",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_register_source_IN_ARG_pointers,
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_register_source_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-register-source",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_deregister_source_IN_ARG_sourceID =
+{
+ {
+ -1,
+ (gchar *) "sourceID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_deregister_source_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_deregister_source_IN_ARG_sourceID,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_deregister_source_OUT_ARG_error =
+{
+ {
+ -1,
+ (gchar *) "error",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_deregister_source_OUT_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_deregister_source_OUT_ARG_error,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_deregister_source =
+{
+ {
+ -1,
+ (gchar *) "deregisterSource",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_deregister_source_IN_ARG_pointers,
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_deregister_source_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-deregister-source",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_hook_interrupt_status_change_IN_ARG_sourceID =
+{
+ {
+ -1,
+ (gchar *) "sourceID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_hook_interrupt_status_change_IN_ARG_interruptState =
+{
+ {
+ -1,
+ (gchar *) "interruptState",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_hook_interrupt_status_change_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_hook_interrupt_status_change_IN_ARG_sourceID,
+ &_audiomanager_routinginterface_method_info_hook_interrupt_status_change_IN_ARG_interruptState,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_hook_interrupt_status_change =
+{
+ {
+ -1,
+ (gchar *) "hookInterruptStatusChange",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_hook_interrupt_status_change_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-hook-interrupt-status-change",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_hook_source_availablity_status_change_IN_ARG_sourceID =
+{
+ {
+ -1,
+ (gchar *) "sourceID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_hook_source_availablity_status_change_IN_ARG_availability =
+{
+ {
+ -1,
+ (gchar *) "availability",
+ (gchar *) "(nn)",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_hook_source_availablity_status_change_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_hook_source_availablity_status_change_IN_ARG_sourceID,
+ &_audiomanager_routinginterface_method_info_hook_source_availablity_status_change_IN_ARG_availability,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_hook_source_availablity_status_change =
+{
+ {
+ -1,
+ (gchar *) "hookSourceAvailablityStatusChange",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_hook_source_availablity_status_change_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-hook-source-availablity-status-change",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_confirm_routing_ready_IN_ARG_domainID =
+{
+ {
+ -1,
+ (gchar *) "domainID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_confirm_routing_ready_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_confirm_routing_ready_IN_ARG_domainID,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_confirm_routing_ready =
+{
+ {
+ -1,
+ (gchar *) "confirmRoutingReady",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_confirm_routing_ready_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-confirm-routing-ready",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_confirm_routing_rundown_IN_ARG_domainID =
+{
+ {
+ -1,
+ (gchar *) "domainID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_confirm_routing_rundown_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_confirm_routing_rundown_IN_ARG_domainID,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_confirm_routing_rundown =
+{
+ {
+ -1,
+ (gchar *) "confirmRoutingRundown",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_confirm_routing_rundown_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-confirm-routing-rundown",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_set_volumes_IN_ARG_handle =
+{
+ {
+ -1,
+ (gchar *) "handle",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_set_volumes_IN_ARG_listvolumes =
+{
+ {
+ -1,
+ (gchar *) "listvolumes",
+ (gchar *) "a(nqqnq)",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_set_volumes_IN_ARG_error =
+{
+ {
+ -1,
+ (gchar *) "error",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_ack_set_volumes_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_ack_set_volumes_IN_ARG_handle,
+ &_audiomanager_routinginterface_method_info_ack_set_volumes_IN_ARG_listvolumes,
+ &_audiomanager_routinginterface_method_info_ack_set_volumes_IN_ARG_error,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_ack_set_volumes =
+{
+ {
+ -1,
+ (gchar *) "ackSetVolumes",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_ack_set_volumes_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-ack-set-volumes",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_sink_notification_configuration_IN_ARG_handle =
+{
+ {
+ -1,
+ (gchar *) "handle",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_sink_notification_configuration_IN_ARG_error =
+{
+ {
+ -1,
+ (gchar *) "error",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_ack_sink_notification_configuration_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_ack_sink_notification_configuration_IN_ARG_handle,
+ &_audiomanager_routinginterface_method_info_ack_sink_notification_configuration_IN_ARG_error,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_ack_sink_notification_configuration =
+{
+ {
+ -1,
+ (gchar *) "ackSinkNotificationConfiguration",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_ack_sink_notification_configuration_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-ack-sink-notification-configuration",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_source_notification_configuration_IN_ARG_handle =
+{
+ {
+ -1,
+ (gchar *) "handle",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_ack_source_notification_configuration_IN_ARG_error =
+{
+ {
+ -1,
+ (gchar *) "error",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_ack_source_notification_configuration_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_ack_source_notification_configuration_IN_ARG_handle,
+ &_audiomanager_routinginterface_method_info_ack_source_notification_configuration_IN_ARG_error,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_ack_source_notification_configuration =
+{
+ {
+ -1,
+ (gchar *) "ackSourceNotificationConfiguration",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_ack_source_notification_configuration_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-ack-source-notification-configuration",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_register_domain_IN_ARG_domaindata =
+{
+ {
+ -1,
+ (gchar *) "domaindata",
+ (gchar *) "(qsssbbn)",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_register_domain_IN_ARG_returnBusname =
+{
+ {
+ -1,
+ (gchar *) "returnBusname",
+ (gchar *) "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_register_domain_IN_ARG_returnPath =
+{
+ {
+ -1,
+ (gchar *) "returnPath",
+ (gchar *) "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_register_domain_IN_ARG_returnInterface =
+{
+ {
+ -1,
+ (gchar *) "returnInterface",
+ (gchar *) "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_register_domain_IN_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_register_domain_IN_ARG_domaindata,
+ &_audiomanager_routinginterface_method_info_register_domain_IN_ARG_returnBusname,
+ &_audiomanager_routinginterface_method_info_register_domain_IN_ARG_returnPath,
+ &_audiomanager_routinginterface_method_info_register_domain_IN_ARG_returnInterface,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_register_domain_OUT_ARG_domainid =
+{
+ {
+ -1,
+ (gchar *) "domainid",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routinginterface_method_info_register_domain_OUT_ARG_error =
+{
+ {
+ -1,
+ (gchar *) "error",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routinginterface_method_info_register_domain_OUT_ARG_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_register_domain_OUT_ARG_domainid,
+ &_audiomanager_routinginterface_method_info_register_domain_OUT_ARG_error,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routinginterface_method_info_register_domain =
+{
+ {
+ -1,
+ (gchar *) "registerDomain",
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_register_domain_IN_ARG_pointers,
+ (GDBusArgInfo **) &_audiomanager_routinginterface_method_info_register_domain_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-register-domain",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _audiomanager_routinginterface_method_info_pointers[] =
+{
+ &_audiomanager_routinginterface_method_info_ack_connect,
+ &_audiomanager_routinginterface_method_info_ack_disconnect,
+ &_audiomanager_routinginterface_method_info_ack_set_source_state,
+ &_audiomanager_routinginterface_method_info_ack_set_sink_volume,
+ &_audiomanager_routinginterface_method_info_register_sink,
+ &_audiomanager_routinginterface_method_info_deregister_sink,
+ &_audiomanager_routinginterface_method_info_register_source,
+ &_audiomanager_routinginterface_method_info_deregister_source,
+ &_audiomanager_routinginterface_method_info_hook_interrupt_status_change,
+ &_audiomanager_routinginterface_method_info_hook_source_availablity_status_change,
+ &_audiomanager_routinginterface_method_info_confirm_routing_ready,
+ &_audiomanager_routinginterface_method_info_confirm_routing_rundown,
+ &_audiomanager_routinginterface_method_info_ack_set_volumes,
+ &_audiomanager_routinginterface_method_info_ack_sink_notification_configuration,
+ &_audiomanager_routinginterface_method_info_ack_source_notification_configuration,
+ &_audiomanager_routinginterface_method_info_register_domain,
+ NULL
+};
+
+static const _ExtendedGDBusSignalInfo _audiomanager_routinginterface_signal_info_set_routing_ready =
+{
+ {
+ -1,
+ (gchar *) "setRoutingReady",
+ NULL,
+ NULL
+ },
+ "set-routing-ready"
+};
+
+static const _ExtendedGDBusSignalInfo _audiomanager_routinginterface_signal_info_set_routing_rundown =
+{
+ {
+ -1,
+ (gchar *) "setRoutingRundown",
+ NULL,
+ NULL
+ },
+ "set-routing-rundown"
+};
+
+static const _ExtendedGDBusSignalInfo * const _audiomanager_routinginterface_signal_info_pointers[] =
+{
+ &_audiomanager_routinginterface_signal_info_set_routing_ready,
+ &_audiomanager_routinginterface_signal_info_set_routing_rundown,
+ NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _audiomanager_routinginterface_interface_info =
+{
+ {
+ -1,
+ (gchar *) "org.genivi.audiomanager.routinginterface",
+ (GDBusMethodInfo **) &_audiomanager_routinginterface_method_info_pointers,
+ (GDBusSignalInfo **) &_audiomanager_routinginterface_signal_info_pointers,
+ NULL,
+ NULL
+ },
+ "audiomanager-routinginterface",
+};
+
+
+/**
+ * audiomanager_routinginterface_interface_info:
+ *
+ * Gets a machine-readable description of the <link linkend="gdbus-interface-org-genivi-audiomanager-routinginterface.top_of_page">org.genivi.audiomanager.routinginterface</link> D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+audiomanager_routinginterface_interface_info (void)
+{
+ return (GDBusInterfaceInfo *) &_audiomanager_routinginterface_interface_info.parent_struct;
+}
+
+/**
+ * audiomanager_routinginterface_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #AudiomanagerRoutinginterface interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+audiomanager_routinginterface_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+ return property_id_begin - 1;
+}
+
+
+
+/**
+ * AudiomanagerRoutinginterface:
+ *
+ * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routinginterface.top_of_page">org.genivi.audiomanager.routinginterface</link>.
+ */
+
+/**
+ * AudiomanagerRoutinginterfaceIface:
+ * @parent_iface: The parent interface.
+ * @handle_ack_connect: Handler for the #AudiomanagerRoutinginterface::handle-ack-connect signal.
+ * @handle_ack_disconnect: Handler for the #AudiomanagerRoutinginterface::handle-ack-disconnect signal.
+ * @handle_ack_set_sink_volume: Handler for the #AudiomanagerRoutinginterface::handle-ack-set-sink-volume signal.
+ * @handle_ack_set_source_state: Handler for the #AudiomanagerRoutinginterface::handle-ack-set-source-state signal.
+ * @handle_ack_set_volumes: Handler for the #AudiomanagerRoutinginterface::handle-ack-set-volumes signal.
+ * @handle_ack_sink_notification_configuration: Handler for the #AudiomanagerRoutinginterface::handle-ack-sink-notification-configuration signal.
+ * @handle_ack_source_notification_configuration: Handler for the #AudiomanagerRoutinginterface::handle-ack-source-notification-configuration signal.
+ * @handle_confirm_routing_ready: Handler for the #AudiomanagerRoutinginterface::handle-confirm-routing-ready signal.
+ * @handle_confirm_routing_rundown: Handler for the #AudiomanagerRoutinginterface::handle-confirm-routing-rundown signal.
+ * @handle_deregister_sink: Handler for the #AudiomanagerRoutinginterface::handle-deregister-sink signal.
+ * @handle_deregister_source: Handler for the #AudiomanagerRoutinginterface::handle-deregister-source signal.
+ * @handle_hook_interrupt_status_change: Handler for the #AudiomanagerRoutinginterface::handle-hook-interrupt-status-change signal.
+ * @handle_hook_source_availablity_status_change: Handler for the #AudiomanagerRoutinginterface::handle-hook-source-availablity-status-change signal.
+ * @handle_register_domain: Handler for the #AudiomanagerRoutinginterface::handle-register-domain signal.
+ * @handle_register_sink: Handler for the #AudiomanagerRoutinginterface::handle-register-sink signal.
+ * @handle_register_source: Handler for the #AudiomanagerRoutinginterface::handle-register-source signal.
+ * @set_routing_ready: Handler for the #AudiomanagerRoutinginterface::set-routing-ready signal.
+ * @set_routing_rundown: Handler for the #AudiomanagerRoutinginterface::set-routing-rundown signal.
+ *
+ * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routinginterface.top_of_page">org.genivi.audiomanager.routinginterface</link>.
+ */
+
+typedef AudiomanagerRoutinginterfaceIface AudiomanagerRoutinginterfaceInterface;
+G_DEFINE_INTERFACE (AudiomanagerRoutinginterface, audiomanager_routinginterface, G_TYPE_OBJECT);
+
+static void
+audiomanager_routinginterface_default_init (AudiomanagerRoutinginterfaceIface *iface)
+{
+ /* GObject signals for incoming D-Bus method calls: */
+ /**
+ * AudiomanagerRoutinginterface::handle-ack-connect:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_handle: Argument passed by remote caller.
+ * @arg_connectionID: Argument passed by remote caller.
+ * @arg_error: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackConnect">ackConnect()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_ack_connect() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-ack-connect",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_ack_connect),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 4,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-ack-disconnect:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_handle: Argument passed by remote caller.
+ * @arg_connectionID: Argument passed by remote caller.
+ * @arg_error: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackDisconnect">ackDisconnect()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_ack_disconnect() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-ack-disconnect",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_ack_disconnect),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 4,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-ack-set-source-state:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_handle: Argument passed by remote caller.
+ * @arg_error: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSetSourceState">ackSetSourceState()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_ack_set_source_state() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-ack-set-source-state",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_ack_set_source_state),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-ack-set-sink-volume:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_handle: Argument passed by remote caller.
+ * @arg_volume: Argument passed by remote caller.
+ * @arg_error: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSetSinkVolume">ackSetSinkVolume()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_ack_set_sink_volume() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-ack-set-sink-volume",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_ack_set_sink_volume),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 4,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_INT, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-register-sink:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_sinkData: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.registerSink">registerSink()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_register_sink() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-register-sink",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_register_sink),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 2,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_VARIANT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-deregister-sink:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_sinkID: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.deregisterSink">deregisterSink()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_deregister_sink() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-deregister-sink",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_deregister_sink),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 2,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-register-source:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_sourceData: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.registerSource">registerSource()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_register_source() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-register-source",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_register_source),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 2,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_VARIANT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-deregister-source:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_sourceID: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.deregisterSource">deregisterSource()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_deregister_source() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-deregister-source",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_deregister_source),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 2,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-hook-interrupt-status-change:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_sourceID: Argument passed by remote caller.
+ * @arg_interruptState: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.hookInterruptStatusChange">hookInterruptStatusChange()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_hook_interrupt_status_change() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-hook-interrupt-status-change",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_hook_interrupt_status_change),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-hook-source-availablity-status-change:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_sourceID: Argument passed by remote caller.
+ * @arg_availability: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.hookSourceAvailablityStatusChange">hookSourceAvailablityStatusChange()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_hook_source_availablity_status_change() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-hook-source-availablity-status-change",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_hook_source_availablity_status_change),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_VARIANT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-confirm-routing-ready:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_domainID: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.confirmRoutingReady">confirmRoutingReady()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_confirm_routing_ready() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-confirm-routing-ready",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_confirm_routing_ready),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 2,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-confirm-routing-rundown:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_domainID: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.confirmRoutingRundown">confirmRoutingRundown()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_confirm_routing_rundown() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-confirm-routing-rundown",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_confirm_routing_rundown),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 2,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-ack-set-volumes:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_handle: Argument passed by remote caller.
+ * @arg_listvolumes: Argument passed by remote caller.
+ * @arg_error: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSetVolumes">ackSetVolumes()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_ack_set_volumes() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-ack-set-volumes",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_ack_set_volumes),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 4,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_VARIANT, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-ack-sink-notification-configuration:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_handle: Argument passed by remote caller.
+ * @arg_error: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSinkNotificationConfiguration">ackSinkNotificationConfiguration()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_ack_sink_notification_configuration() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-ack-sink-notification-configuration",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_ack_sink_notification_configuration),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-ack-source-notification-configuration:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_handle: Argument passed by remote caller.
+ * @arg_error: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSourceNotificationConfiguration">ackSourceNotificationConfiguration()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_ack_source_notification_configuration() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-ack-source-notification-configuration",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_ack_source_notification_configuration),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutinginterface::handle-register-domain:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_domaindata: Argument passed by remote caller.
+ * @arg_returnBusname: Argument passed by remote caller.
+ * @arg_returnPath: Argument passed by remote caller.
+ * @arg_returnInterface: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.registerDomain">registerDomain()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routinginterface_complete_register_domain() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-register-domain",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, handle_register_domain),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 5,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_VARIANT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+
+ /* GObject signals for received D-Bus signals: */
+ /**
+ * AudiomanagerRoutinginterface::set-routing-ready:
+ * @object: A #AudiomanagerRoutinginterface.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-genivi-audiomanager-routinginterface.setRoutingReady">"setRoutingReady"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+ g_signal_new ("set-routing-ready",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, set_routing_ready),
+ NULL,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 0);
+
+ /**
+ * AudiomanagerRoutinginterface::set-routing-rundown:
+ * @object: A #AudiomanagerRoutinginterface.
+ *
+ * On the client-side, this signal is emitted whenever the D-Bus signal <link linkend="gdbus-signal-org-genivi-audiomanager-routinginterface.setRoutingRundown">"setRoutingRundown"</link> is received.
+ *
+ * On the service-side, this signal can be used with e.g. g_signal_emit_by_name() to make the object emit the D-Bus signal.
+ */
+ g_signal_new ("set-routing-rundown",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutinginterfaceIface, set_routing_rundown),
+ NULL,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 0);
+
+}
+
+/**
+ * audiomanager_routinginterface_emit_set_routing_ready:
+ * @object: A #AudiomanagerRoutinginterface.
+ *
+ * Emits the <link linkend="gdbus-signal-org-genivi-audiomanager-routinginterface.setRoutingReady">"setRoutingReady"</link> D-Bus signal.
+ */
+void
+audiomanager_routinginterface_emit_set_routing_ready (
+ AudiomanagerRoutinginterface *object)
+{
+ g_signal_emit_by_name (object, "set-routing-ready");
+}
+
+/**
+ * audiomanager_routinginterface_emit_set_routing_rundown:
+ * @object: A #AudiomanagerRoutinginterface.
+ *
+ * Emits the <link linkend="gdbus-signal-org-genivi-audiomanager-routinginterface.setRoutingRundown">"setRoutingRundown"</link> D-Bus signal.
+ */
+void
+audiomanager_routinginterface_emit_set_routing_rundown (
+ AudiomanagerRoutinginterface *object)
+{
+ g_signal_emit_by_name (object, "set-routing-rundown");
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_connect:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_connectionID: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackConnect">ackConnect()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_ack_connect_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_ack_connect_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_ack_connect (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "ackConnect",
+ g_variant_new ("(qqq)",
+ arg_handle,
+ arg_connectionID,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_connect_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_ack_connect().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_ack_connect().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_connect_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_connect_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_connectionID: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackConnect">ackConnect()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_ack_connect() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_connect_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "ackConnect",
+ g_variant_new ("(qqq)",
+ arg_handle,
+ arg_connectionID,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_disconnect:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_connectionID: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackDisconnect">ackDisconnect()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_ack_disconnect_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_ack_disconnect_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_ack_disconnect (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "ackDisconnect",
+ g_variant_new ("(qqq)",
+ arg_handle,
+ arg_connectionID,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_disconnect_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_ack_disconnect().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_ack_disconnect().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_disconnect_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_disconnect_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_connectionID: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackDisconnect">ackDisconnect()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_ack_disconnect() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_disconnect_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "ackDisconnect",
+ g_variant_new ("(qqq)",
+ arg_handle,
+ arg_connectionID,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_set_source_state:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSetSourceState">ackSetSourceState()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_ack_set_source_state_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_ack_set_source_state_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_ack_set_source_state (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "ackSetSourceState",
+ g_variant_new ("(qq)",
+ arg_handle,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_set_source_state_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_ack_set_source_state().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_ack_set_source_state().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_set_source_state_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_set_source_state_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSetSourceState">ackSetSourceState()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_ack_set_source_state() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_set_source_state_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "ackSetSourceState",
+ g_variant_new ("(qq)",
+ arg_handle,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_set_sink_volume:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_volume: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSetSinkVolume">ackSetSinkVolume()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_ack_set_sink_volume_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_ack_set_sink_volume_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_ack_set_sink_volume (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ gint16 arg_volume,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "ackSetSinkVolume",
+ g_variant_new ("(qnq)",
+ arg_handle,
+ arg_volume,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_set_sink_volume_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_ack_set_sink_volume().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_ack_set_sink_volume().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_set_sink_volume_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_set_sink_volume_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_volume: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSetSinkVolume">ackSetSinkVolume()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_ack_set_sink_volume() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_set_sink_volume_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ gint16 arg_volume,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "ackSetSinkVolume",
+ g_variant_new ("(qnq)",
+ arg_handle,
+ arg_volume,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_register_sink:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_sinkData: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.registerSink">registerSink()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_register_sink_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_register_sink_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_register_sink (
+ AudiomanagerRoutinginterface *proxy,
+ GVariant *arg_sinkData,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "registerSink",
+ g_variant_new ("(@(qsqinb(ii)nna(in)aia(in)a(iin)a(iin)))",
+ arg_sinkData),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_register_sink_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @out_sinkID: (out): Return location for return parameter or %NULL to ignore.
+ * @out_error: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_register_sink().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_register_sink().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_register_sink_finish (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 *out_sinkID,
+ guint16 *out_error,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(qq)",
+ out_sinkID,
+ out_error);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_register_sink_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_sinkData: Argument to pass with the method invocation.
+ * @out_sinkID: (out): Return location for return parameter or %NULL to ignore.
+ * @out_error: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.registerSink">registerSink()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_register_sink() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_register_sink_sync (
+ AudiomanagerRoutinginterface *proxy,
+ GVariant *arg_sinkData,
+ guint16 *out_sinkID,
+ guint16 *out_error,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "registerSink",
+ g_variant_new ("(@(qsqinb(ii)nna(in)aia(in)a(iin)a(iin)))",
+ arg_sinkData),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(qq)",
+ out_sinkID,
+ out_error);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_deregister_sink:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.deregisterSink">deregisterSink()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_deregister_sink_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_deregister_sink_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_deregister_sink (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sinkID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "deregisterSink",
+ g_variant_new ("(q)",
+ arg_sinkID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_deregister_sink_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @out_error: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_deregister_sink().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_deregister_sink().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_deregister_sink_finish (
+ AudiomanagerRoutinginterface *proxy,
+ gint *out_error,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(i)",
+ out_error);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_deregister_sink_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @out_error: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.deregisterSink">deregisterSink()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_deregister_sink() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_deregister_sink_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sinkID,
+ gint *out_error,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "deregisterSink",
+ g_variant_new ("(q)",
+ arg_sinkID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(i)",
+ out_error);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_register_source:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_sourceData: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.registerSource">registerSource()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_register_source_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_register_source_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_register_source (
+ AudiomanagerRoutinginterface *proxy,
+ GVariant *arg_sourceData,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "registerSource",
+ g_variant_new ("(@(qqsqinb(ii)qa(in)aia(in)a(iin)a(iin)))",
+ arg_sourceData),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_register_source_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @out_sourceID: (out): Return location for return parameter or %NULL to ignore.
+ * @out_error: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_register_source().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_register_source().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_register_source_finish (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 *out_sourceID,
+ guint16 *out_error,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(qq)",
+ out_sourceID,
+ out_error);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_register_source_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_sourceData: Argument to pass with the method invocation.
+ * @out_sourceID: (out): Return location for return parameter or %NULL to ignore.
+ * @out_error: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.registerSource">registerSource()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_register_source() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_register_source_sync (
+ AudiomanagerRoutinginterface *proxy,
+ GVariant *arg_sourceData,
+ guint16 *out_sourceID,
+ guint16 *out_error,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "registerSource",
+ g_variant_new ("(@(qqsqinb(ii)qa(in)aia(in)a(iin)a(iin)))",
+ arg_sourceData),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(qq)",
+ out_sourceID,
+ out_error);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_deregister_source:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_sourceID: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.deregisterSource">deregisterSource()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_deregister_source_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_deregister_source_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_deregister_source (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sourceID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "deregisterSource",
+ g_variant_new ("(q)",
+ arg_sourceID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_deregister_source_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @out_error: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_deregister_source().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_deregister_source().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_deregister_source_finish (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 *out_error,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(q)",
+ out_error);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_deregister_source_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_sourceID: Argument to pass with the method invocation.
+ * @out_error: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.deregisterSource">deregisterSource()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_deregister_source() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_deregister_source_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sourceID,
+ guint16 *out_error,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "deregisterSource",
+ g_variant_new ("(q)",
+ arg_sourceID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(q)",
+ out_error);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_hook_interrupt_status_change:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_sourceID: Argument to pass with the method invocation.
+ * @arg_interruptState: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.hookInterruptStatusChange">hookInterruptStatusChange()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_hook_interrupt_status_change_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_hook_interrupt_status_change_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_hook_interrupt_status_change (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sourceID,
+ guint16 arg_interruptState,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "hookInterruptStatusChange",
+ g_variant_new ("(qq)",
+ arg_sourceID,
+ arg_interruptState),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_hook_interrupt_status_change_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_hook_interrupt_status_change().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_hook_interrupt_status_change().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_hook_interrupt_status_change_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_hook_interrupt_status_change_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_sourceID: Argument to pass with the method invocation.
+ * @arg_interruptState: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.hookInterruptStatusChange">hookInterruptStatusChange()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_hook_interrupt_status_change() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_hook_interrupt_status_change_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sourceID,
+ guint16 arg_interruptState,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "hookInterruptStatusChange",
+ g_variant_new ("(qq)",
+ arg_sourceID,
+ arg_interruptState),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_hook_source_availablity_status_change:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_sourceID: Argument to pass with the method invocation.
+ * @arg_availability: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.hookSourceAvailablityStatusChange">hookSourceAvailablityStatusChange()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_hook_source_availablity_status_change_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_hook_source_availablity_status_change_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_hook_source_availablity_status_change (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sourceID,
+ GVariant *arg_availability,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "hookSourceAvailablityStatusChange",
+ g_variant_new ("(q@(nn))",
+ arg_sourceID,
+ arg_availability),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_hook_source_availablity_status_change_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_hook_source_availablity_status_change().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_hook_source_availablity_status_change().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_hook_source_availablity_status_change_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_hook_source_availablity_status_change_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_sourceID: Argument to pass with the method invocation.
+ * @arg_availability: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.hookSourceAvailablityStatusChange">hookSourceAvailablityStatusChange()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_hook_source_availablity_status_change() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_hook_source_availablity_status_change_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sourceID,
+ GVariant *arg_availability,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "hookSourceAvailablityStatusChange",
+ g_variant_new ("(q@(nn))",
+ arg_sourceID,
+ arg_availability),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_confirm_routing_ready:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_domainID: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.confirmRoutingReady">confirmRoutingReady()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_confirm_routing_ready_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_confirm_routing_ready_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_confirm_routing_ready (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_domainID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "confirmRoutingReady",
+ g_variant_new ("(q)",
+ arg_domainID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_confirm_routing_ready_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_confirm_routing_ready().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_confirm_routing_ready().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_confirm_routing_ready_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_confirm_routing_ready_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_domainID: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.confirmRoutingReady">confirmRoutingReady()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_confirm_routing_ready() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_confirm_routing_ready_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_domainID,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "confirmRoutingReady",
+ g_variant_new ("(q)",
+ arg_domainID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_confirm_routing_rundown:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_domainID: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.confirmRoutingRundown">confirmRoutingRundown()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_confirm_routing_rundown_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_confirm_routing_rundown_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_confirm_routing_rundown (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_domainID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "confirmRoutingRundown",
+ g_variant_new ("(q)",
+ arg_domainID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_confirm_routing_rundown_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_confirm_routing_rundown().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_confirm_routing_rundown().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_confirm_routing_rundown_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_confirm_routing_rundown_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_domainID: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.confirmRoutingRundown">confirmRoutingRundown()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_confirm_routing_rundown() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_confirm_routing_rundown_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_domainID,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "confirmRoutingRundown",
+ g_variant_new ("(q)",
+ arg_domainID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_set_volumes:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_listvolumes: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSetVolumes">ackSetVolumes()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_ack_set_volumes_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_ack_set_volumes_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_ack_set_volumes (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ GVariant *arg_listvolumes,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "ackSetVolumes",
+ g_variant_new ("(q@a(nqqnq)q)",
+ arg_handle,
+ arg_listvolumes,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_set_volumes_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_ack_set_volumes().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_ack_set_volumes().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_set_volumes_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_set_volumes_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_listvolumes: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSetVolumes">ackSetVolumes()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_ack_set_volumes() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_set_volumes_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ GVariant *arg_listvolumes,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "ackSetVolumes",
+ g_variant_new ("(q@a(nqqnq)q)",
+ arg_handle,
+ arg_listvolumes,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_sink_notification_configuration:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSinkNotificationConfiguration">ackSinkNotificationConfiguration()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_ack_sink_notification_configuration_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_ack_sink_notification_configuration_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_ack_sink_notification_configuration (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "ackSinkNotificationConfiguration",
+ g_variant_new ("(qq)",
+ arg_handle,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_sink_notification_configuration_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_ack_sink_notification_configuration().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_ack_sink_notification_configuration().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_sink_notification_configuration_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_sink_notification_configuration_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSinkNotificationConfiguration">ackSinkNotificationConfiguration()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_ack_sink_notification_configuration() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_sink_notification_configuration_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "ackSinkNotificationConfiguration",
+ g_variant_new ("(qq)",
+ arg_handle,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_source_notification_configuration:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSourceNotificationConfiguration">ackSourceNotificationConfiguration()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_ack_source_notification_configuration_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_ack_source_notification_configuration_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_ack_source_notification_configuration (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "ackSourceNotificationConfiguration",
+ g_variant_new ("(qq)",
+ arg_handle,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_source_notification_configuration_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_ack_source_notification_configuration().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_ack_source_notification_configuration().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_source_notification_configuration_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_ack_source_notification_configuration_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_error: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSourceNotificationConfiguration">ackSourceNotificationConfiguration()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_ack_source_notification_configuration() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_ack_source_notification_configuration_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "ackSourceNotificationConfiguration",
+ g_variant_new ("(qq)",
+ arg_handle,
+ arg_error),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_register_domain:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_domaindata: Argument to pass with the method invocation.
+ * @arg_returnBusname: Argument to pass with the method invocation.
+ * @arg_returnPath: Argument to pass with the method invocation.
+ * @arg_returnInterface: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.registerDomain">registerDomain()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_call_register_domain_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_call_register_domain_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routinginterface_call_register_domain (
+ AudiomanagerRoutinginterface *proxy,
+ GVariant *arg_domaindata,
+ const gchar *arg_returnBusname,
+ const gchar *arg_returnPath,
+ const gchar *arg_returnInterface,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "registerDomain",
+ g_variant_new ("(@(qsssbbn)sss)",
+ arg_domaindata,
+ arg_returnBusname,
+ arg_returnPath,
+ arg_returnInterface),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routinginterface_call_register_domain_finish:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @out_domainid: (out): Return location for return parameter or %NULL to ignore.
+ * @out_error: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_call_register_domain().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routinginterface_call_register_domain().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_register_domain_finish (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 *out_domainid,
+ guint16 *out_error,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(qq)",
+ out_domainid,
+ out_error);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_call_register_domain_sync:
+ * @proxy: A #AudiomanagerRoutinginterfaceProxy.
+ * @arg_domaindata: Argument to pass with the method invocation.
+ * @arg_returnBusname: Argument to pass with the method invocation.
+ * @arg_returnPath: Argument to pass with the method invocation.
+ * @arg_returnInterface: Argument to pass with the method invocation.
+ * @out_domainid: (out): Return location for return parameter or %NULL to ignore.
+ * @out_error: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.registerDomain">registerDomain()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_call_register_domain() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routinginterface_call_register_domain_sync (
+ AudiomanagerRoutinginterface *proxy,
+ GVariant *arg_domaindata,
+ const gchar *arg_returnBusname,
+ const gchar *arg_returnPath,
+ const gchar *arg_returnInterface,
+ guint16 *out_domainid,
+ guint16 *out_error,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "registerDomain",
+ g_variant_new ("(@(qsssbbn)sss)",
+ arg_domaindata,
+ arg_returnBusname,
+ arg_returnPath,
+ arg_returnInterface),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(qq)",
+ out_domainid,
+ out_error);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routinginterface_complete_ack_connect:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackConnect">ackConnect()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_ack_connect (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routinginterface_complete_ack_disconnect:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackDisconnect">ackDisconnect()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_ack_disconnect (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routinginterface_complete_ack_set_source_state:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSetSourceState">ackSetSourceState()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_ack_set_source_state (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routinginterface_complete_ack_set_sink_volume:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSetSinkVolume">ackSetSinkVolume()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_ack_set_sink_volume (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routinginterface_complete_register_sink:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @sinkID: Parameter to return.
+ * @error: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.registerSink">registerSink()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_register_sink (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 sinkID,
+ guint16 error)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(qq)",
+ sinkID,
+ error));
+}
+
+/**
+ * audiomanager_routinginterface_complete_deregister_sink:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @error: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.deregisterSink">deregisterSink()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_deregister_sink (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ gint error)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(i)",
+ error));
+}
+
+/**
+ * audiomanager_routinginterface_complete_register_source:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @sourceID: Parameter to return.
+ * @error: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.registerSource">registerSource()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_register_source (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 sourceID,
+ guint16 error)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(qq)",
+ sourceID,
+ error));
+}
+
+/**
+ * audiomanager_routinginterface_complete_deregister_source:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @error: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.deregisterSource">deregisterSource()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_deregister_source (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 error)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(q)",
+ error));
+}
+
+/**
+ * audiomanager_routinginterface_complete_hook_interrupt_status_change:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.hookInterruptStatusChange">hookInterruptStatusChange()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_hook_interrupt_status_change (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routinginterface_complete_hook_source_availablity_status_change:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.hookSourceAvailablityStatusChange">hookSourceAvailablityStatusChange()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_hook_source_availablity_status_change (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routinginterface_complete_confirm_routing_ready:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.confirmRoutingReady">confirmRoutingReady()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_confirm_routing_ready (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routinginterface_complete_confirm_routing_rundown:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.confirmRoutingRundown">confirmRoutingRundown()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_confirm_routing_rundown (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routinginterface_complete_ack_set_volumes:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSetVolumes">ackSetVolumes()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_ack_set_volumes (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routinginterface_complete_ack_sink_notification_configuration:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSinkNotificationConfiguration">ackSinkNotificationConfiguration()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_ack_sink_notification_configuration (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routinginterface_complete_ack_source_notification_configuration:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.ackSourceNotificationConfiguration">ackSourceNotificationConfiguration()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_ack_source_notification_configuration (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routinginterface_complete_register_domain:
+ * @object: A #AudiomanagerRoutinginterface.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @domainid: Parameter to return.
+ * @error: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routinginterface.registerDomain">registerDomain()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routinginterface_complete_register_domain (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 domainid,
+ guint16 error)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(qq)",
+ domainid,
+ error));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * AudiomanagerRoutinginterfaceProxy:
+ *
+ * The #AudiomanagerRoutinginterfaceProxy structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * AudiomanagerRoutinginterfaceProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #AudiomanagerRoutinginterfaceProxy.
+ */
+
+struct _AudiomanagerRoutinginterfaceProxyPrivate
+{
+ GData *qdata;
+};
+
+static void audiomanager_routinginterface_proxy_iface_init (AudiomanagerRoutinginterfaceIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (AudiomanagerRoutinginterfaceProxy, audiomanager_routinginterface_proxy, G_TYPE_DBUS_PROXY,
+ G_ADD_PRIVATE (AudiomanagerRoutinginterfaceProxy)
+ G_IMPLEMENT_INTERFACE (TYPE_AUDIOMANAGER_ROUTINGINTERFACE, audiomanager_routinginterface_proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (AudiomanagerRoutinginterfaceProxy, audiomanager_routinginterface_proxy, G_TYPE_DBUS_PROXY,
+ G_IMPLEMENT_INTERFACE (TYPE_AUDIOMANAGER_ROUTINGINTERFACE, audiomanager_routinginterface_proxy_iface_init));
+
+#endif
+static void
+audiomanager_routinginterface_proxy_finalize (GObject *object)
+{
+ AudiomanagerRoutinginterfaceProxy *proxy = AUDIOMANAGER_ROUTINGINTERFACE_PROXY (object);
+ g_datalist_clear (&proxy->priv->qdata);
+ G_OBJECT_CLASS (audiomanager_routinginterface_proxy_parent_class)->finalize (object);
+}
+
+static void
+audiomanager_routinginterface_proxy_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+audiomanager_routinginterface_proxy_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+audiomanager_routinginterface_proxy_g_signal (GDBusProxy *proxy,
+ const gchar *sender_name G_GNUC_UNUSED,
+ const gchar *signal_name,
+ GVariant *parameters)
+{
+ _ExtendedGDBusSignalInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint n;
+ guint signal_id;
+ info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_audiomanager_routinginterface_interface_info.parent_struct, signal_name);
+ if (info == NULL)
+ return;
+ num_params = g_variant_n_children (parameters);
+ paramv = g_new0 (GValue, num_params + 1);
+ g_value_init (&paramv[0], TYPE_AUDIOMANAGER_ROUTINGINTERFACE);
+ g_value_set_object (&paramv[0], proxy);
+ g_variant_iter_init (&iter, parameters);
+ n = 1;
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (&paramv[n], G_TYPE_VARIANT);
+ g_value_set_variant (&paramv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, TYPE_AUDIOMANAGER_ROUTINGINTERFACE);
+ g_signal_emitv (paramv, signal_id, 0, NULL);
+ for (n = 0; n < num_params + 1; n++)
+ g_value_unset (&paramv[n]);
+ g_free (paramv);
+}
+
+static void
+audiomanager_routinginterface_proxy_g_properties_changed (GDBusProxy *_proxy,
+ GVariant *changed_properties,
+ const gchar *const *invalidated_properties)
+{
+ AudiomanagerRoutinginterfaceProxy *proxy = AUDIOMANAGER_ROUTINGINTERFACE_PROXY (_proxy);
+ guint n;
+ const gchar *key;
+ GVariantIter *iter;
+ _ExtendedGDBusPropertyInfo *info;
+ g_variant_get (changed_properties, "a{sv}", &iter);
+ while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_audiomanager_routinginterface_interface_info.parent_struct, key);
+ g_datalist_remove_data (&proxy->priv->qdata, key);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+ g_variant_iter_free (iter);
+ for (n = 0; invalidated_properties[n] != NULL; n++)
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_audiomanager_routinginterface_interface_info.parent_struct, invalidated_properties[n]);
+ g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+}
+
+static void
+audiomanager_routinginterface_proxy_init (AudiomanagerRoutinginterfaceProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ proxy->priv = audiomanager_routinginterface_proxy_get_instance_private (proxy);
+#else
+ proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_AUDIOMANAGER_ROUTINGINTERFACE_PROXY, AudiomanagerRoutinginterfaceProxyPrivate);
+#endif
+
+ g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), audiomanager_routinginterface_interface_info ());
+}
+
+static void
+audiomanager_routinginterface_proxy_class_init (AudiomanagerRoutinginterfaceProxyClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusProxyClass *proxy_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = audiomanager_routinginterface_proxy_finalize;
+ gobject_class->get_property = audiomanager_routinginterface_proxy_get_property;
+ gobject_class->set_property = audiomanager_routinginterface_proxy_set_property;
+
+ proxy_class = G_DBUS_PROXY_CLASS (klass);
+ proxy_class->g_signal = audiomanager_routinginterface_proxy_g_signal;
+ proxy_class->g_properties_changed = audiomanager_routinginterface_proxy_g_properties_changed;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (AudiomanagerRoutinginterfaceProxyPrivate));
+#endif
+}
+
+static void
+audiomanager_routinginterface_proxy_iface_init (AudiomanagerRoutinginterfaceIface *iface)
+{
+}
+
+/**
+ * audiomanager_routinginterface_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routinginterface.top_of_page">org.genivi.audiomanager.routinginterface</link>. See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_proxy_new_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+audiomanager_routinginterface_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (TYPE_AUDIOMANAGER_ROUTINGINTERFACE_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.genivi.audiomanager.routinginterface", NULL);
+}
+
+/**
+ * audiomanager_routinginterface_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with audiomanager_routinginterface_proxy_new().
+ *
+ * Returns: (transfer full) (type AudiomanagerRoutinginterfaceProxy): The constructed proxy object or %NULL if @error is set.
+ */
+AudiomanagerRoutinginterface *
+audiomanager_routinginterface_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return AUDIOMANAGER_ROUTINGINTERFACE (ret);
+ else
+ return NULL;
+}
+
+/**
+ * audiomanager_routinginterface_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routinginterface.top_of_page">org.genivi.audiomanager.routinginterface</link>. See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type AudiomanagerRoutinginterfaceProxy): The constructed proxy object or %NULL if @error is set.
+ */
+AudiomanagerRoutinginterface *
+audiomanager_routinginterface_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (TYPE_AUDIOMANAGER_ROUTINGINTERFACE_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.genivi.audiomanager.routinginterface", NULL);
+ if (ret != NULL)
+ return AUDIOMANAGER_ROUTINGINTERFACE (ret);
+ else
+ return NULL;
+}
+
+
+/**
+ * audiomanager_routinginterface_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like audiomanager_routinginterface_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routinginterface_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See audiomanager_routinginterface_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+audiomanager_routinginterface_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (TYPE_AUDIOMANAGER_ROUTINGINTERFACE_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.genivi.audiomanager.routinginterface", NULL);
+}
+
+/**
+ * audiomanager_routinginterface_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routinginterface_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with audiomanager_routinginterface_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type AudiomanagerRoutinginterfaceProxy): The constructed proxy object or %NULL if @error is set.
+ */
+AudiomanagerRoutinginterface *
+audiomanager_routinginterface_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return AUDIOMANAGER_ROUTINGINTERFACE (ret);
+ else
+ return NULL;
+}
+
+/**
+ * audiomanager_routinginterface_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like audiomanager_routinginterface_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routinginterface_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type AudiomanagerRoutinginterfaceProxy): The constructed proxy object or %NULL if @error is set.
+ */
+AudiomanagerRoutinginterface *
+audiomanager_routinginterface_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (TYPE_AUDIOMANAGER_ROUTINGINTERFACE_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.genivi.audiomanager.routinginterface", NULL);
+ if (ret != NULL)
+ return AUDIOMANAGER_ROUTINGINTERFACE (ret);
+ else
+ return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * AudiomanagerRoutinginterfaceSkeleton:
+ *
+ * The #AudiomanagerRoutinginterfaceSkeleton structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * AudiomanagerRoutinginterfaceSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #AudiomanagerRoutinginterfaceSkeleton.
+ */
+
+struct _AudiomanagerRoutinginterfaceSkeletonPrivate
+{
+ GValue *properties;
+ GList *changed_properties;
+ GSource *changed_properties_idle_source;
+ GMainContext *context;
+ GMutex lock;
+};
+
+static void
+_audiomanager_routinginterface_skeleton_handle_method_call (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ AudiomanagerRoutinginterfaceSkeleton *skeleton = AUDIOMANAGER_ROUTINGINTERFACE_SKELETON (user_data);
+ _ExtendedGDBusMethodInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint num_extra;
+ guint n;
+ guint signal_id;
+ GValue return_value = G_VALUE_INIT;
+ info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+ g_assert (info != NULL);
+ num_params = g_variant_n_children (parameters);
+ num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra);
+ n = 0;
+ g_value_init (&paramv[n], TYPE_AUDIOMANAGER_ROUTINGINTERFACE);
+ g_value_set_object (&paramv[n++], skeleton);
+ g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+ g_value_set_object (&paramv[n++], invocation);
+ if (info->pass_fdlist)
+ {
+#ifdef G_OS_UNIX
+ g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
+ g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));
+#else
+ g_assert_not_reached ();
+#endif
+ }
+ g_variant_iter_init (&iter, parameters);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (&paramv[n], G_TYPE_VARIANT);
+ g_value_set_variant (&paramv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, TYPE_AUDIOMANAGER_ROUTINGINTERFACE);
+ g_value_init (&return_value, G_TYPE_BOOLEAN);
+ g_signal_emitv (paramv, signal_id, 0, &return_value);
+ if (!g_value_get_boolean (&return_value))
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);
+ g_value_unset (&return_value);
+ for (n = 0; n < num_params + num_extra; n++)
+ g_value_unset (&paramv[n]);
+ g_free (paramv);
+}
+
+static GVariant *
+_audiomanager_routinginterface_skeleton_handle_get_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GError **error,
+ gpointer user_data)
+{
+ AudiomanagerRoutinginterfaceSkeleton *skeleton = AUDIOMANAGER_ROUTINGINTERFACE_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ GVariant *ret;
+ ret = NULL;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_audiomanager_routinginterface_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+ }
+ else
+ {
+ g_value_init (&value, pspec->value_type);
+ g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_value_unset (&value);
+ }
+ return ret;
+}
+
+static gboolean
+_audiomanager_routinginterface_skeleton_handle_set_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GVariant *variant,
+ GError **error,
+ gpointer user_data)
+{
+ AudiomanagerRoutinginterfaceSkeleton *skeleton = AUDIOMANAGER_ROUTINGINTERFACE_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ gboolean ret;
+ ret = FALSE;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_audiomanager_routinginterface_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+ }
+ else
+ {
+ if (info->use_gvariant)
+ g_value_set_variant (&value, variant);
+ else
+ g_dbus_gvariant_to_gvalue (variant, &value);
+ g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ g_value_unset (&value);
+ ret = TRUE;
+ }
+ return ret;
+}
+
+static const GDBusInterfaceVTable _audiomanager_routinginterface_skeleton_vtable =
+{
+ _audiomanager_routinginterface_skeleton_handle_method_call,
+ _audiomanager_routinginterface_skeleton_handle_get_property,
+ _audiomanager_routinginterface_skeleton_handle_set_property,
+ {NULL}
+};
+
+static GDBusInterfaceInfo *
+audiomanager_routinginterface_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return audiomanager_routinginterface_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+audiomanager_routinginterface_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return (GDBusInterfaceVTable *) &_audiomanager_routinginterface_skeleton_vtable;
+}
+
+static GVariant *
+audiomanager_routinginterface_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+ AudiomanagerRoutinginterfaceSkeleton *skeleton = AUDIOMANAGER_ROUTINGINTERFACE_SKELETON (_skeleton);
+
+ GVariantBuilder builder;
+ guint n;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ if (_audiomanager_routinginterface_interface_info.parent_struct.properties == NULL)
+ goto out;
+ for (n = 0; _audiomanager_routinginterface_interface_info.parent_struct.properties[n] != NULL; n++)
+ {
+ GDBusPropertyInfo *info = _audiomanager_routinginterface_interface_info.parent_struct.properties[n];
+ if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+ {
+ GVariant *value;
+ value = _audiomanager_routinginterface_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.genivi.audiomanager.routinginterface", info->name, NULL, skeleton);
+ if (value != NULL)
+ {
+ g_variant_take_ref (value);
+ g_variant_builder_add (&builder, "{sv}", info->name, value);
+ g_variant_unref (value);
+ }
+ }
+ }
+out:
+ return g_variant_builder_end (&builder);
+}
+
+static void
+audiomanager_routinginterface_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+}
+
+static void
+_audiomanager_routinginterface_on_signal_set_routing_ready (
+ AudiomanagerRoutinginterface *object)
+{
+ AudiomanagerRoutinginterfaceSkeleton *skeleton = AUDIOMANAGER_ROUTINGINTERFACE_SKELETON (object);
+
+ GList *connections, *l;
+ GVariant *signal_variant;
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+ signal_variant = g_variant_ref_sink (g_variant_new ("()"));
+ for (l = connections; l != NULL; l = l->next)
+ {
+ GDBusConnection *connection = l->data;
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.genivi.audiomanager.routinginterface", "setRoutingReady",
+ signal_variant, NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+}
+
+static void
+_audiomanager_routinginterface_on_signal_set_routing_rundown (
+ AudiomanagerRoutinginterface *object)
+{
+ AudiomanagerRoutinginterfaceSkeleton *skeleton = AUDIOMANAGER_ROUTINGINTERFACE_SKELETON (object);
+
+ GList *connections, *l;
+ GVariant *signal_variant;
+ connections = g_dbus_interface_skeleton_get_connections (G_DBUS_INTERFACE_SKELETON (skeleton));
+
+ signal_variant = g_variant_ref_sink (g_variant_new ("()"));
+ for (l = connections; l != NULL; l = l->next)
+ {
+ GDBusConnection *connection = l->data;
+ g_dbus_connection_emit_signal (connection,
+ NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.genivi.audiomanager.routinginterface", "setRoutingRundown",
+ signal_variant, NULL);
+ }
+ g_variant_unref (signal_variant);
+ g_list_free_full (connections, g_object_unref);
+}
+
+static void audiomanager_routinginterface_skeleton_iface_init (AudiomanagerRoutinginterfaceIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (AudiomanagerRoutinginterfaceSkeleton, audiomanager_routinginterface_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_ADD_PRIVATE (AudiomanagerRoutinginterfaceSkeleton)
+ G_IMPLEMENT_INTERFACE (TYPE_AUDIOMANAGER_ROUTINGINTERFACE, audiomanager_routinginterface_skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (AudiomanagerRoutinginterfaceSkeleton, audiomanager_routinginterface_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_IMPLEMENT_INTERFACE (TYPE_AUDIOMANAGER_ROUTINGINTERFACE, audiomanager_routinginterface_skeleton_iface_init));
+
+#endif
+static void
+audiomanager_routinginterface_skeleton_finalize (GObject *object)
+{
+ AudiomanagerRoutinginterfaceSkeleton *skeleton = AUDIOMANAGER_ROUTINGINTERFACE_SKELETON (object);
+ g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ g_main_context_unref (skeleton->priv->context);
+ g_mutex_clear (&skeleton->priv->lock);
+ G_OBJECT_CLASS (audiomanager_routinginterface_skeleton_parent_class)->finalize (object);
+}
+
+static void
+audiomanager_routinginterface_skeleton_init (AudiomanagerRoutinginterfaceSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ skeleton->priv = audiomanager_routinginterface_skeleton_get_instance_private (skeleton);
+#else
+ skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_AUDIOMANAGER_ROUTINGINTERFACE_SKELETON, AudiomanagerRoutinginterfaceSkeletonPrivate);
+#endif
+
+ g_mutex_init (&skeleton->priv->lock);
+ skeleton->priv->context = g_main_context_ref_thread_default ();
+}
+
+static void
+audiomanager_routinginterface_skeleton_class_init (AudiomanagerRoutinginterfaceSkeletonClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusInterfaceSkeletonClass *skeleton_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = audiomanager_routinginterface_skeleton_finalize;
+
+ skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+ skeleton_class->get_info = audiomanager_routinginterface_skeleton_dbus_interface_get_info;
+ skeleton_class->get_properties = audiomanager_routinginterface_skeleton_dbus_interface_get_properties;
+ skeleton_class->flush = audiomanager_routinginterface_skeleton_dbus_interface_flush;
+ skeleton_class->get_vtable = audiomanager_routinginterface_skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (AudiomanagerRoutinginterfaceSkeletonPrivate));
+#endif
+}
+
+static void
+audiomanager_routinginterface_skeleton_iface_init (AudiomanagerRoutinginterfaceIface *iface)
+{
+ iface->set_routing_ready = _audiomanager_routinginterface_on_signal_set_routing_ready;
+ iface->set_routing_rundown = _audiomanager_routinginterface_on_signal_set_routing_rundown;
+}
+
+/**
+ * audiomanager_routinginterface_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routinginterface.top_of_page">org.genivi.audiomanager.routinginterface</link>.
+ *
+ * Returns: (transfer full) (type AudiomanagerRoutinginterfaceSkeleton): The skeleton object.
+ */
+AudiomanagerRoutinginterface *
+audiomanager_routinginterface_skeleton_new (void)
+{
+ return AUDIOMANAGER_ROUTINGINTERFACE (g_object_new (TYPE_AUDIOMANAGER_ROUTINGINTERFACE_SKELETON, NULL));
+}
+
+/* ------------------------------------------------------------------------
+ * Code for interface org.genivi.audiomanager.routing.soundmanager
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:AudiomanagerRoutingSoundmanager
+ * @title: AudiomanagerRoutingSoundmanager
+ * @short_description: Generated C code for the org.genivi.audiomanager.routing.soundmanager D-Bus interface
+ *
+ * This section contains code for working with the <link linkend="gdbus-interface-org-genivi-audiomanager-routing-soundmanager.top_of_page">org.genivi.audiomanager.routing.soundmanager</link> D-Bus interface in C.
+ */
+
+/* ---- Introspection data for org.genivi.audiomanager.routing.soundmanager ---- */
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_abort_IN_ARG_handle =
+{
+ {
+ -1,
+ (gchar *) "handle",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routing_soundmanager_method_info_async_abort_IN_ARG_pointers[] =
+{
+ &_audiomanager_routing_soundmanager_method_info_async_abort_IN_ARG_handle,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_abort_OUT_ARG_error =
+{
+ {
+ -1,
+ (gchar *) "error",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routing_soundmanager_method_info_async_abort_OUT_ARG_pointers[] =
+{
+ &_audiomanager_routing_soundmanager_method_info_async_abort_OUT_ARG_error,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routing_soundmanager_method_info_async_abort =
+{
+ {
+ -1,
+ (gchar *) "asyncAbort",
+ (GDBusArgInfo **) &_audiomanager_routing_soundmanager_method_info_async_abort_IN_ARG_pointers,
+ (GDBusArgInfo **) &_audiomanager_routing_soundmanager_method_info_async_abort_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-async-abort",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_connect_IN_ARG_handle =
+{
+ {
+ -1,
+ (gchar *) "handle",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_connect_IN_ARG_connectionID =
+{
+ {
+ -1,
+ (gchar *) "connectionID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_connect_IN_ARG_sourceID =
+{
+ {
+ -1,
+ (gchar *) "sourceID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_connect_IN_ARG_sinkID =
+{
+ {
+ -1,
+ (gchar *) "sinkID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_connect_IN_ARG_connectionFormat =
+{
+ {
+ -1,
+ (gchar *) "connectionFormat",
+ (gchar *) "i",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routing_soundmanager_method_info_async_connect_IN_ARG_pointers[] =
+{
+ &_audiomanager_routing_soundmanager_method_info_async_connect_IN_ARG_handle,
+ &_audiomanager_routing_soundmanager_method_info_async_connect_IN_ARG_connectionID,
+ &_audiomanager_routing_soundmanager_method_info_async_connect_IN_ARG_sourceID,
+ &_audiomanager_routing_soundmanager_method_info_async_connect_IN_ARG_sinkID,
+ &_audiomanager_routing_soundmanager_method_info_async_connect_IN_ARG_connectionFormat,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routing_soundmanager_method_info_async_connect =
+{
+ {
+ -1,
+ (gchar *) "asyncConnect",
+ (GDBusArgInfo **) &_audiomanager_routing_soundmanager_method_info_async_connect_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-async-connect",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_disconnect_IN_ARG_handle =
+{
+ {
+ -1,
+ (gchar *) "handle",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_disconnect_IN_ARG_connectionID =
+{
+ {
+ -1,
+ (gchar *) "connectionID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routing_soundmanager_method_info_async_disconnect_IN_ARG_pointers[] =
+{
+ &_audiomanager_routing_soundmanager_method_info_async_disconnect_IN_ARG_handle,
+ &_audiomanager_routing_soundmanager_method_info_async_disconnect_IN_ARG_connectionID,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routing_soundmanager_method_info_async_disconnect =
+{
+ {
+ -1,
+ (gchar *) "asyncDisconnect",
+ (GDBusArgInfo **) &_audiomanager_routing_soundmanager_method_info_async_disconnect_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-async-disconnect",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_set_sink_volume_IN_ARG_handle =
+{
+ {
+ -1,
+ (gchar *) "handle",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_set_sink_volume_IN_ARG_sinkID =
+{
+ {
+ -1,
+ (gchar *) "sinkID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_set_sink_volume_IN_ARG_volume =
+{
+ {
+ -1,
+ (gchar *) "volume",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_set_sink_volume_IN_ARG_ramp =
+{
+ {
+ -1,
+ (gchar *) "ramp",
+ (gchar *) "n",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_set_sink_volume_IN_ARG_time =
+{
+ {
+ -1,
+ (gchar *) "time",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routing_soundmanager_method_info_async_set_sink_volume_IN_ARG_pointers[] =
+{
+ &_audiomanager_routing_soundmanager_method_info_async_set_sink_volume_IN_ARG_handle,
+ &_audiomanager_routing_soundmanager_method_info_async_set_sink_volume_IN_ARG_sinkID,
+ &_audiomanager_routing_soundmanager_method_info_async_set_sink_volume_IN_ARG_volume,
+ &_audiomanager_routing_soundmanager_method_info_async_set_sink_volume_IN_ARG_ramp,
+ &_audiomanager_routing_soundmanager_method_info_async_set_sink_volume_IN_ARG_time,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routing_soundmanager_method_info_async_set_sink_volume =
+{
+ {
+ -1,
+ (gchar *) "asyncSetSinkVolume",
+ (GDBusArgInfo **) &_audiomanager_routing_soundmanager_method_info_async_set_sink_volume_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-async-set-sink-volume",
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_set_source_state_IN_ARG_handle =
+{
+ {
+ -1,
+ (gchar *) "handle",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_set_source_state_IN_ARG_sourceID =
+{
+ {
+ -1,
+ (gchar *) "sourceID",
+ (gchar *) "q",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo _audiomanager_routing_soundmanager_method_info_async_set_source_state_IN_ARG_sourceState =
+{
+ {
+ -1,
+ (gchar *) "sourceState",
+ (gchar *) "i",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _audiomanager_routing_soundmanager_method_info_async_set_source_state_IN_ARG_pointers[] =
+{
+ &_audiomanager_routing_soundmanager_method_info_async_set_source_state_IN_ARG_handle,
+ &_audiomanager_routing_soundmanager_method_info_async_set_source_state_IN_ARG_sourceID,
+ &_audiomanager_routing_soundmanager_method_info_async_set_source_state_IN_ARG_sourceState,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _audiomanager_routing_soundmanager_method_info_async_set_source_state =
+{
+ {
+ -1,
+ (gchar *) "asyncSetSourceState",
+ (GDBusArgInfo **) &_audiomanager_routing_soundmanager_method_info_async_set_source_state_IN_ARG_pointers,
+ NULL,
+ NULL
+ },
+ "handle-async-set-source-state",
+ FALSE
+};
+
+static const _ExtendedGDBusMethodInfo * const _audiomanager_routing_soundmanager_method_info_pointers[] =
+{
+ &_audiomanager_routing_soundmanager_method_info_async_abort,
+ &_audiomanager_routing_soundmanager_method_info_async_connect,
+ &_audiomanager_routing_soundmanager_method_info_async_disconnect,
+ &_audiomanager_routing_soundmanager_method_info_async_set_sink_volume,
+ &_audiomanager_routing_soundmanager_method_info_async_set_source_state,
+ NULL
+};
+
+static const _ExtendedGDBusInterfaceInfo _audiomanager_routing_soundmanager_interface_info =
+{
+ {
+ -1,
+ (gchar *) "org.genivi.audiomanager.routing.soundmanager",
+ (GDBusMethodInfo **) &_audiomanager_routing_soundmanager_method_info_pointers,
+ NULL,
+ NULL,
+ NULL
+ },
+ "audiomanager-routing-soundmanager",
+};
+
+
+/**
+ * audiomanager_routing_soundmanager_interface_info:
+ *
+ * Gets a machine-readable description of the <link linkend="gdbus-interface-org-genivi-audiomanager-routing-soundmanager.top_of_page">org.genivi.audiomanager.routing.soundmanager</link> D-Bus interface.
+ *
+ * Returns: (transfer none): A #GDBusInterfaceInfo. Do not free.
+ */
+GDBusInterfaceInfo *
+audiomanager_routing_soundmanager_interface_info (void)
+{
+ return (GDBusInterfaceInfo *) &_audiomanager_routing_soundmanager_interface_info.parent_struct;
+}
+
+/**
+ * audiomanager_routing_soundmanager_override_properties:
+ * @klass: The class structure for a #GObject<!-- -->-derived class.
+ * @property_id_begin: The property id to assign to the first overridden property.
+ *
+ * Overrides all #GObject properties in the #AudiomanagerRoutingSoundmanager interface for a concrete class.
+ * The properties are overridden in the order they are defined.
+ *
+ * Returns: The last property id.
+ */
+guint
+audiomanager_routing_soundmanager_override_properties (GObjectClass *klass, guint property_id_begin)
+{
+ return property_id_begin - 1;
+}
+
+
+
+/**
+ * AudiomanagerRoutingSoundmanager:
+ *
+ * Abstract interface type for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routing-soundmanager.top_of_page">org.genivi.audiomanager.routing.soundmanager</link>.
+ */
+
+/**
+ * AudiomanagerRoutingSoundmanagerIface:
+ * @parent_iface: The parent interface.
+ * @handle_async_abort: Handler for the #AudiomanagerRoutingSoundmanager::handle-async-abort signal.
+ * @handle_async_connect: Handler for the #AudiomanagerRoutingSoundmanager::handle-async-connect signal.
+ * @handle_async_disconnect: Handler for the #AudiomanagerRoutingSoundmanager::handle-async-disconnect signal.
+ * @handle_async_set_sink_volume: Handler for the #AudiomanagerRoutingSoundmanager::handle-async-set-sink-volume signal.
+ * @handle_async_set_source_state: Handler for the #AudiomanagerRoutingSoundmanager::handle-async-set-source-state signal.
+ *
+ * Virtual table for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routing-soundmanager.top_of_page">org.genivi.audiomanager.routing.soundmanager</link>.
+ */
+
+typedef AudiomanagerRoutingSoundmanagerIface AudiomanagerRoutingSoundmanagerInterface;
+G_DEFINE_INTERFACE (AudiomanagerRoutingSoundmanager, audiomanager_routing_soundmanager, G_TYPE_OBJECT);
+
+static void
+audiomanager_routing_soundmanager_default_init (AudiomanagerRoutingSoundmanagerIface *iface)
+{
+ /* GObject signals for incoming D-Bus method calls: */
+ /**
+ * AudiomanagerRoutingSoundmanager::handle-async-abort:
+ * @object: A #AudiomanagerRoutingSoundmanager.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_handle: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncAbort">asyncAbort()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routing_soundmanager_complete_async_abort() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-async-abort",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutingSoundmanagerIface, handle_async_abort),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 2,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutingSoundmanager::handle-async-connect:
+ * @object: A #AudiomanagerRoutingSoundmanager.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_handle: Argument passed by remote caller.
+ * @arg_connectionID: Argument passed by remote caller.
+ * @arg_sourceID: Argument passed by remote caller.
+ * @arg_sinkID: Argument passed by remote caller.
+ * @arg_connectionFormat: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncConnect">asyncConnect()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routing_soundmanager_complete_async_connect() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-async-connect",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutingSoundmanagerIface, handle_async_connect),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 6,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INT);
+
+ /**
+ * AudiomanagerRoutingSoundmanager::handle-async-disconnect:
+ * @object: A #AudiomanagerRoutingSoundmanager.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_handle: Argument passed by remote caller.
+ * @arg_connectionID: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncDisconnect">asyncDisconnect()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routing_soundmanager_complete_async_disconnect() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-async-disconnect",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutingSoundmanagerIface, handle_async_disconnect),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 3,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutingSoundmanager::handle-async-set-sink-volume:
+ * @object: A #AudiomanagerRoutingSoundmanager.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_handle: Argument passed by remote caller.
+ * @arg_sinkID: Argument passed by remote caller.
+ * @arg_volume: Argument passed by remote caller.
+ * @arg_ramp: Argument passed by remote caller.
+ * @arg_time: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncSetSinkVolume">asyncSetSinkVolume()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routing_soundmanager_complete_async_set_sink_volume() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-async-set-sink-volume",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutingSoundmanagerIface, handle_async_set_sink_volume),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 6,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INT, G_TYPE_INT, G_TYPE_UINT);
+
+ /**
+ * AudiomanagerRoutingSoundmanager::handle-async-set-source-state:
+ * @object: A #AudiomanagerRoutingSoundmanager.
+ * @invocation: A #GDBusMethodInvocation.
+ * @arg_handle: Argument passed by remote caller.
+ * @arg_sourceID: Argument passed by remote caller.
+ * @arg_sourceState: Argument passed by remote caller.
+ *
+ * Signal emitted when a remote caller is invoking the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncSetSourceState">asyncSetSourceState()</link> D-Bus method.
+ *
+ * If a signal handler returns %TRUE, it means the signal handler will handle the invocation (e.g. take a reference to @invocation and eventually call audiomanager_routing_soundmanager_complete_async_set_source_state() or e.g. g_dbus_method_invocation_return_error() on it) and no order signal handlers will run. If no signal handler handles the invocation, the %G_DBUS_ERROR_UNKNOWN_METHOD error is returned.
+ *
+ * Returns: %TRUE if the invocation was handled, %FALSE to let other signal handlers run.
+ */
+ g_signal_new ("handle-async-set-source-state",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (AudiomanagerRoutingSoundmanagerIface, handle_async_set_source_state),
+ g_signal_accumulator_true_handled,
+ NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 4,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INT);
+
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_abort:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncAbort">asyncAbort()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routing_soundmanager_call_async_abort_finish() to get the result of the operation.
+ *
+ * See audiomanager_routing_soundmanager_call_async_abort_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routing_soundmanager_call_async_abort (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "asyncAbort",
+ g_variant_new ("(q)",
+ arg_handle),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_abort_finish:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @out_error: (out): Return location for return parameter or %NULL to ignore.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routing_soundmanager_call_async_abort().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routing_soundmanager_call_async_abort().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routing_soundmanager_call_async_abort_finish (
+ AudiomanagerRoutingSoundmanager *proxy,
+ gint16 *out_error,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n)",
+ out_error);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_abort_sync:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @out_error: (out): Return location for return parameter or %NULL to ignore.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncAbort">asyncAbort()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routing_soundmanager_call_async_abort() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routing_soundmanager_call_async_abort_sync (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ gint16 *out_error,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "asyncAbort",
+ g_variant_new ("(q)",
+ arg_handle),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(n)",
+ out_error);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_connect:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_connectionID: Argument to pass with the method invocation.
+ * @arg_sourceID: Argument to pass with the method invocation.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @arg_connectionFormat: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncConnect">asyncConnect()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routing_soundmanager_call_async_connect_finish() to get the result of the operation.
+ *
+ * See audiomanager_routing_soundmanager_call_async_connect_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routing_soundmanager_call_async_connect (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_sourceID,
+ guint16 arg_sinkID,
+ gint arg_connectionFormat,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "asyncConnect",
+ g_variant_new ("(qqqqi)",
+ arg_handle,
+ arg_connectionID,
+ arg_sourceID,
+ arg_sinkID,
+ arg_connectionFormat),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_connect_finish:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routing_soundmanager_call_async_connect().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routing_soundmanager_call_async_connect().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routing_soundmanager_call_async_connect_finish (
+ AudiomanagerRoutingSoundmanager *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_connect_sync:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_connectionID: Argument to pass with the method invocation.
+ * @arg_sourceID: Argument to pass with the method invocation.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @arg_connectionFormat: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncConnect">asyncConnect()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routing_soundmanager_call_async_connect() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routing_soundmanager_call_async_connect_sync (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_sourceID,
+ guint16 arg_sinkID,
+ gint arg_connectionFormat,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "asyncConnect",
+ g_variant_new ("(qqqqi)",
+ arg_handle,
+ arg_connectionID,
+ arg_sourceID,
+ arg_sinkID,
+ arg_connectionFormat),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_disconnect:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_connectionID: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncDisconnect">asyncDisconnect()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routing_soundmanager_call_async_disconnect_finish() to get the result of the operation.
+ *
+ * See audiomanager_routing_soundmanager_call_async_disconnect_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routing_soundmanager_call_async_disconnect (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "asyncDisconnect",
+ g_variant_new ("(qq)",
+ arg_handle,
+ arg_connectionID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_disconnect_finish:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routing_soundmanager_call_async_disconnect().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routing_soundmanager_call_async_disconnect().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routing_soundmanager_call_async_disconnect_finish (
+ AudiomanagerRoutingSoundmanager *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_disconnect_sync:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_connectionID: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncDisconnect">asyncDisconnect()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routing_soundmanager_call_async_disconnect() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routing_soundmanager_call_async_disconnect_sync (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "asyncDisconnect",
+ g_variant_new ("(qq)",
+ arg_handle,
+ arg_connectionID),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_set_sink_volume:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @arg_volume: Argument to pass with the method invocation.
+ * @arg_ramp: Argument to pass with the method invocation.
+ * @arg_time: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncSetSinkVolume">asyncSetSinkVolume()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routing_soundmanager_call_async_set_sink_volume_finish() to get the result of the operation.
+ *
+ * See audiomanager_routing_soundmanager_call_async_set_sink_volume_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routing_soundmanager_call_async_set_sink_volume (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_sinkID,
+ gint16 arg_volume,
+ gint16 arg_ramp,
+ guint16 arg_time,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "asyncSetSinkVolume",
+ g_variant_new ("(qqnnq)",
+ arg_handle,
+ arg_sinkID,
+ arg_volume,
+ arg_ramp,
+ arg_time),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_set_sink_volume_finish:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routing_soundmanager_call_async_set_sink_volume().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routing_soundmanager_call_async_set_sink_volume().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routing_soundmanager_call_async_set_sink_volume_finish (
+ AudiomanagerRoutingSoundmanager *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_set_sink_volume_sync:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_sinkID: Argument to pass with the method invocation.
+ * @arg_volume: Argument to pass with the method invocation.
+ * @arg_ramp: Argument to pass with the method invocation.
+ * @arg_time: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncSetSinkVolume">asyncSetSinkVolume()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routing_soundmanager_call_async_set_sink_volume() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routing_soundmanager_call_async_set_sink_volume_sync (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_sinkID,
+ gint16 arg_volume,
+ gint16 arg_ramp,
+ guint16 arg_time,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "asyncSetSinkVolume",
+ g_variant_new ("(qqnnq)",
+ arg_handle,
+ arg_sinkID,
+ arg_volume,
+ arg_ramp,
+ arg_time),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_set_source_state:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_sourceID: Argument to pass with the method invocation.
+ * @arg_sourceState: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied or %NULL.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncSetSourceState">asyncSetSourceState()</link> D-Bus method on @proxy.
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routing_soundmanager_call_async_set_source_state_finish() to get the result of the operation.
+ *
+ * See audiomanager_routing_soundmanager_call_async_set_source_state_sync() for the synchronous, blocking version of this method.
+ */
+void
+audiomanager_routing_soundmanager_call_async_set_source_state (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_sourceID,
+ gint arg_sourceState,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "asyncSetSourceState",
+ g_variant_new ("(qqi)",
+ arg_handle,
+ arg_sourceID,
+ arg_sourceState),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_set_source_state_finish:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routing_soundmanager_call_async_set_source_state().
+ * @error: Return location for error or %NULL.
+ *
+ * Finishes an operation started with audiomanager_routing_soundmanager_call_async_set_source_state().
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routing_soundmanager_call_async_set_source_state_finish (
+ AudiomanagerRoutingSoundmanager *proxy,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routing_soundmanager_call_async_set_source_state_sync:
+ * @proxy: A #AudiomanagerRoutingSoundmanagerProxy.
+ * @arg_handle: Argument to pass with the method invocation.
+ * @arg_sourceID: Argument to pass with the method invocation.
+ * @arg_sourceState: Argument to pass with the method invocation.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL.
+ *
+ * Synchronously invokes the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncSetSourceState">asyncSetSourceState()</link> D-Bus method on @proxy. The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routing_soundmanager_call_async_set_source_state() for the asynchronous version of this method.
+ *
+ * Returns: (skip): %TRUE if the call succeded, %FALSE if @error is set.
+ */
+gboolean
+audiomanager_routing_soundmanager_call_async_set_source_state_sync (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_sourceID,
+ gint arg_sourceState,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "asyncSetSourceState",
+ g_variant_new ("(qqi)",
+ arg_handle,
+ arg_sourceID,
+ arg_sourceState),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "()");
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+/**
+ * audiomanager_routing_soundmanager_complete_async_abort:
+ * @object: A #AudiomanagerRoutingSoundmanager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ * @error: Parameter to return.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncAbort">asyncAbort()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routing_soundmanager_complete_async_abort (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation,
+ gint16 error)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(n)",
+ error));
+}
+
+/**
+ * audiomanager_routing_soundmanager_complete_async_connect:
+ * @object: A #AudiomanagerRoutingSoundmanager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncConnect">asyncConnect()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routing_soundmanager_complete_async_connect (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routing_soundmanager_complete_async_disconnect:
+ * @object: A #AudiomanagerRoutingSoundmanager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncDisconnect">asyncDisconnect()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routing_soundmanager_complete_async_disconnect (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routing_soundmanager_complete_async_set_sink_volume:
+ * @object: A #AudiomanagerRoutingSoundmanager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncSetSinkVolume">asyncSetSinkVolume()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routing_soundmanager_complete_async_set_sink_volume (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/**
+ * audiomanager_routing_soundmanager_complete_async_set_source_state:
+ * @object: A #AudiomanagerRoutingSoundmanager.
+ * @invocation: (transfer full): A #GDBusMethodInvocation.
+ *
+ * Helper function used in service implementations to finish handling invocations of the <link linkend="gdbus-method-org-genivi-audiomanager-routing-soundmanager.asyncSetSourceState">asyncSetSourceState()</link> D-Bus method. If you instead want to finish handling an invocation by returning an error, use g_dbus_method_invocation_return_error() or similar.
+ *
+ * This method will free @invocation, you cannot use it afterwards.
+ */
+void
+audiomanager_routing_soundmanager_complete_async_set_source_state (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("()"));
+}
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * AudiomanagerRoutingSoundmanagerProxy:
+ *
+ * The #AudiomanagerRoutingSoundmanagerProxy structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * AudiomanagerRoutingSoundmanagerProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #AudiomanagerRoutingSoundmanagerProxy.
+ */
+
+struct _AudiomanagerRoutingSoundmanagerProxyPrivate
+{
+ GData *qdata;
+};
+
+static void audiomanager_routing_soundmanager_proxy_iface_init (AudiomanagerRoutingSoundmanagerIface *iface);
+
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (AudiomanagerRoutingSoundmanagerProxy, audiomanager_routing_soundmanager_proxy, G_TYPE_DBUS_PROXY,
+ G_ADD_PRIVATE (AudiomanagerRoutingSoundmanagerProxy)
+ G_IMPLEMENT_INTERFACE (TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER, audiomanager_routing_soundmanager_proxy_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (AudiomanagerRoutingSoundmanagerProxy, audiomanager_routing_soundmanager_proxy, G_TYPE_DBUS_PROXY,
+ G_IMPLEMENT_INTERFACE (TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER, audiomanager_routing_soundmanager_proxy_iface_init));
+
+#endif
+static void
+audiomanager_routing_soundmanager_proxy_finalize (GObject *object)
+{
+ AudiomanagerRoutingSoundmanagerProxy *proxy = AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY (object);
+ g_datalist_clear (&proxy->priv->qdata);
+ G_OBJECT_CLASS (audiomanager_routing_soundmanager_proxy_parent_class)->finalize (object);
+}
+
+static void
+audiomanager_routing_soundmanager_proxy_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+audiomanager_routing_soundmanager_proxy_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec G_GNUC_UNUSED)
+{
+}
+
+static void
+audiomanager_routing_soundmanager_proxy_g_signal (GDBusProxy *proxy,
+ const gchar *sender_name G_GNUC_UNUSED,
+ const gchar *signal_name,
+ GVariant *parameters)
+{
+ _ExtendedGDBusSignalInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint n;
+ guint signal_id;
+ info = (_ExtendedGDBusSignalInfo *) g_dbus_interface_info_lookup_signal ((GDBusInterfaceInfo *) &_audiomanager_routing_soundmanager_interface_info.parent_struct, signal_name);
+ if (info == NULL)
+ return;
+ num_params = g_variant_n_children (parameters);
+ paramv = g_new0 (GValue, num_params + 1);
+ g_value_init (&paramv[0], TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER);
+ g_value_set_object (&paramv[0], proxy);
+ g_variant_iter_init (&iter, parameters);
+ n = 1;
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.args[n - 1];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (&paramv[n], G_TYPE_VARIANT);
+ g_value_set_variant (&paramv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER);
+ g_signal_emitv (paramv, signal_id, 0, NULL);
+ for (n = 0; n < num_params + 1; n++)
+ g_value_unset (&paramv[n]);
+ g_free (paramv);
+}
+
+static void
+audiomanager_routing_soundmanager_proxy_g_properties_changed (GDBusProxy *_proxy,
+ GVariant *changed_properties,
+ const gchar *const *invalidated_properties)
+{
+ AudiomanagerRoutingSoundmanagerProxy *proxy = AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY (_proxy);
+ guint n;
+ const gchar *key;
+ GVariantIter *iter;
+ _ExtendedGDBusPropertyInfo *info;
+ g_variant_get (changed_properties, "a{sv}", &iter);
+ while (g_variant_iter_next (iter, "{&sv}", &key, NULL))
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_audiomanager_routing_soundmanager_interface_info.parent_struct, key);
+ g_datalist_remove_data (&proxy->priv->qdata, key);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+ g_variant_iter_free (iter);
+ for (n = 0; invalidated_properties[n] != NULL; n++)
+ {
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_audiomanager_routing_soundmanager_interface_info.parent_struct, invalidated_properties[n]);
+ g_datalist_remove_data (&proxy->priv->qdata, invalidated_properties[n]);
+ if (info != NULL)
+ g_object_notify (G_OBJECT (proxy), info->hyphen_name);
+ }
+}
+
+static void
+audiomanager_routing_soundmanager_proxy_init (AudiomanagerRoutingSoundmanagerProxy *proxy)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ proxy->priv = audiomanager_routing_soundmanager_proxy_get_instance_private (proxy);
+#else
+ proxy->priv = G_TYPE_INSTANCE_GET_PRIVATE (proxy, TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY, AudiomanagerRoutingSoundmanagerProxyPrivate);
+#endif
+
+ g_dbus_proxy_set_interface_info (G_DBUS_PROXY (proxy), audiomanager_routing_soundmanager_interface_info ());
+}
+
+static void
+audiomanager_routing_soundmanager_proxy_class_init (AudiomanagerRoutingSoundmanagerProxyClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusProxyClass *proxy_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = audiomanager_routing_soundmanager_proxy_finalize;
+ gobject_class->get_property = audiomanager_routing_soundmanager_proxy_get_property;
+ gobject_class->set_property = audiomanager_routing_soundmanager_proxy_set_property;
+
+ proxy_class = G_DBUS_PROXY_CLASS (klass);
+ proxy_class->g_signal = audiomanager_routing_soundmanager_proxy_g_signal;
+ proxy_class->g_properties_changed = audiomanager_routing_soundmanager_proxy_g_properties_changed;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (AudiomanagerRoutingSoundmanagerProxyPrivate));
+#endif
+}
+
+static void
+audiomanager_routing_soundmanager_proxy_iface_init (AudiomanagerRoutingSoundmanagerIface *iface)
+{
+}
+
+/**
+ * audiomanager_routing_soundmanager_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routing-soundmanager.top_of_page">org.genivi.audiomanager.routing.soundmanager</link>. See g_dbus_proxy_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routing_soundmanager_proxy_new_finish() to get the result of the operation.
+ *
+ * See audiomanager_routing_soundmanager_proxy_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+audiomanager_routing_soundmanager_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.genivi.audiomanager.routing.soundmanager", NULL);
+}
+
+/**
+ * audiomanager_routing_soundmanager_proxy_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routing_soundmanager_proxy_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with audiomanager_routing_soundmanager_proxy_new().
+ *
+ * Returns: (transfer full) (type AudiomanagerRoutingSoundmanagerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+AudiomanagerRoutingSoundmanager *
+audiomanager_routing_soundmanager_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return AUDIOMANAGER_ROUTING_SOUNDMANAGER (ret);
+ else
+ return NULL;
+}
+
+/**
+ * audiomanager_routing_soundmanager_proxy_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates a proxy for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routing-soundmanager.top_of_page">org.genivi.audiomanager.routing.soundmanager</link>. See g_dbus_proxy_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routing_soundmanager_proxy_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type AudiomanagerRoutingSoundmanagerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+AudiomanagerRoutingSoundmanager *
+audiomanager_routing_soundmanager_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-connection", connection, "g-object-path", object_path, "g-interface-name", "org.genivi.audiomanager.routing.soundmanager", NULL);
+ if (ret != NULL)
+ return AUDIOMANAGER_ROUTING_SOUNDMANAGER (ret);
+ else
+ return NULL;
+}
+
+
+/**
+ * audiomanager_routing_soundmanager_proxy_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like audiomanager_routing_soundmanager_proxy_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call audiomanager_routing_soundmanager_proxy_new_for_bus_finish() to get the result of the operation.
+ *
+ * See audiomanager_routing_soundmanager_proxy_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+audiomanager_routing_soundmanager_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.genivi.audiomanager.routing.soundmanager", NULL);
+}
+
+/**
+ * audiomanager_routing_soundmanager_proxy_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to audiomanager_routing_soundmanager_proxy_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with audiomanager_routing_soundmanager_proxy_new_for_bus().
+ *
+ * Returns: (transfer full) (type AudiomanagerRoutingSoundmanagerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+AudiomanagerRoutingSoundmanager *
+audiomanager_routing_soundmanager_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return AUDIOMANAGER_ROUTING_SOUNDMANAGER (ret);
+ else
+ return NULL;
+}
+
+/**
+ * audiomanager_routing_soundmanager_proxy_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusProxyFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like audiomanager_routing_soundmanager_proxy_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See audiomanager_routing_soundmanager_proxy_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type AudiomanagerRoutingSoundmanagerProxy): The constructed proxy object or %NULL if @error is set.
+ */
+AudiomanagerRoutingSoundmanager *
+audiomanager_routing_soundmanager_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY, cancellable, error, "g-flags", flags, "g-name", name, "g-bus-type", bus_type, "g-object-path", object_path, "g-interface-name", "org.genivi.audiomanager.routing.soundmanager", NULL);
+ if (ret != NULL)
+ return AUDIOMANAGER_ROUTING_SOUNDMANAGER (ret);
+ else
+ return NULL;
+}
+
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * AudiomanagerRoutingSoundmanagerSkeleton:
+ *
+ * The #AudiomanagerRoutingSoundmanagerSkeleton structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * AudiomanagerRoutingSoundmanagerSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #AudiomanagerRoutingSoundmanagerSkeleton.
+ */
+
+struct _AudiomanagerRoutingSoundmanagerSkeletonPrivate
+{
+ GValue *properties;
+ GList *changed_properties;
+ GSource *changed_properties_idle_source;
+ GMainContext *context;
+ GMutex lock;
+};
+
+static void
+_audiomanager_routing_soundmanager_skeleton_handle_method_call (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name,
+ const gchar *method_name,
+ GVariant *parameters,
+ GDBusMethodInvocation *invocation,
+ gpointer user_data)
+{
+ AudiomanagerRoutingSoundmanagerSkeleton *skeleton = AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON (user_data);
+ _ExtendedGDBusMethodInfo *info;
+ GVariantIter iter;
+ GVariant *child;
+ GValue *paramv;
+ guint num_params;
+ guint num_extra;
+ guint n;
+ guint signal_id;
+ GValue return_value = G_VALUE_INIT;
+ info = (_ExtendedGDBusMethodInfo *) g_dbus_method_invocation_get_method_info (invocation);
+ g_assert (info != NULL);
+ num_params = g_variant_n_children (parameters);
+ num_extra = info->pass_fdlist ? 3 : 2; paramv = g_new0 (GValue, num_params + num_extra);
+ n = 0;
+ g_value_init (&paramv[n], TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER);
+ g_value_set_object (&paramv[n++], skeleton);
+ g_value_init (&paramv[n], G_TYPE_DBUS_METHOD_INVOCATION);
+ g_value_set_object (&paramv[n++], invocation);
+ if (info->pass_fdlist)
+ {
+#ifdef G_OS_UNIX
+ g_value_init (&paramv[n], G_TYPE_UNIX_FD_LIST);
+ g_value_set_object (&paramv[n++], g_dbus_message_get_unix_fd_list (g_dbus_method_invocation_get_message (invocation)));
+#else
+ g_assert_not_reached ();
+#endif
+ }
+ g_variant_iter_init (&iter, parameters);
+ while ((child = g_variant_iter_next_value (&iter)) != NULL)
+ {
+ _ExtendedGDBusArgInfo *arg_info = (_ExtendedGDBusArgInfo *) info->parent_struct.in_args[n - num_extra];
+ if (arg_info->use_gvariant)
+ {
+ g_value_init (&paramv[n], G_TYPE_VARIANT);
+ g_value_set_variant (&paramv[n], child);
+ n++;
+ }
+ else
+ g_dbus_gvariant_to_gvalue (child, &paramv[n++]);
+ g_variant_unref (child);
+ }
+ signal_id = g_signal_lookup (info->signal_name, TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER);
+ g_value_init (&return_value, G_TYPE_BOOLEAN);
+ g_signal_emitv (paramv, signal_id, 0, &return_value);
+ if (!g_value_get_boolean (&return_value))
+ g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD, "Method %s is not implemented on interface %s", method_name, interface_name);
+ g_value_unset (&return_value);
+ for (n = 0; n < num_params + num_extra; n++)
+ g_value_unset (&paramv[n]);
+ g_free (paramv);
+}
+
+static GVariant *
+_audiomanager_routing_soundmanager_skeleton_handle_get_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GError **error,
+ gpointer user_data)
+{
+ AudiomanagerRoutingSoundmanagerSkeleton *skeleton = AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ GVariant *ret;
+ ret = NULL;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_audiomanager_routing_soundmanager_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+ }
+ else
+ {
+ g_value_init (&value, pspec->value_type);
+ g_object_get_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ ret = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (info->parent_struct.signature));
+ g_value_unset (&value);
+ }
+ return ret;
+}
+
+static gboolean
+_audiomanager_routing_soundmanager_skeleton_handle_set_property (
+ GDBusConnection *connection G_GNUC_UNUSED,
+ const gchar *sender G_GNUC_UNUSED,
+ const gchar *object_path G_GNUC_UNUSED,
+ const gchar *interface_name G_GNUC_UNUSED,
+ const gchar *property_name,
+ GVariant *variant,
+ GError **error,
+ gpointer user_data)
+{
+ AudiomanagerRoutingSoundmanagerSkeleton *skeleton = AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON (user_data);
+ GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ _ExtendedGDBusPropertyInfo *info;
+ gboolean ret;
+ ret = FALSE;
+ info = (_ExtendedGDBusPropertyInfo *) g_dbus_interface_info_lookup_property ((GDBusInterfaceInfo *) &_audiomanager_routing_soundmanager_interface_info.parent_struct, property_name);
+ g_assert (info != NULL);
+ pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (skeleton), info->hyphen_name);
+ if (pspec == NULL)
+ {
+ g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "No property with name %s", property_name);
+ }
+ else
+ {
+ if (info->use_gvariant)
+ g_value_set_variant (&value, variant);
+ else
+ g_dbus_gvariant_to_gvalue (variant, &value);
+ g_object_set_property (G_OBJECT (skeleton), info->hyphen_name, &value);
+ g_value_unset (&value);
+ ret = TRUE;
+ }
+ return ret;
+}
+
+static const GDBusInterfaceVTable _audiomanager_routing_soundmanager_skeleton_vtable =
+{
+ _audiomanager_routing_soundmanager_skeleton_handle_method_call,
+ _audiomanager_routing_soundmanager_skeleton_handle_get_property,
+ _audiomanager_routing_soundmanager_skeleton_handle_set_property,
+ {NULL}
+};
+
+static GDBusInterfaceInfo *
+audiomanager_routing_soundmanager_skeleton_dbus_interface_get_info (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return audiomanager_routing_soundmanager_interface_info ();
+}
+
+static GDBusInterfaceVTable *
+audiomanager_routing_soundmanager_skeleton_dbus_interface_get_vtable (GDBusInterfaceSkeleton *skeleton G_GNUC_UNUSED)
+{
+ return (GDBusInterfaceVTable *) &_audiomanager_routing_soundmanager_skeleton_vtable;
+}
+
+static GVariant *
+audiomanager_routing_soundmanager_skeleton_dbus_interface_get_properties (GDBusInterfaceSkeleton *_skeleton)
+{
+ AudiomanagerRoutingSoundmanagerSkeleton *skeleton = AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON (_skeleton);
+
+ GVariantBuilder builder;
+ guint n;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}"));
+ if (_audiomanager_routing_soundmanager_interface_info.parent_struct.properties == NULL)
+ goto out;
+ for (n = 0; _audiomanager_routing_soundmanager_interface_info.parent_struct.properties[n] != NULL; n++)
+ {
+ GDBusPropertyInfo *info = _audiomanager_routing_soundmanager_interface_info.parent_struct.properties[n];
+ if (info->flags & G_DBUS_PROPERTY_INFO_FLAGS_READABLE)
+ {
+ GVariant *value;
+ value = _audiomanager_routing_soundmanager_skeleton_handle_get_property (g_dbus_interface_skeleton_get_connection (G_DBUS_INTERFACE_SKELETON (skeleton)), NULL, g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (skeleton)), "org.genivi.audiomanager.routing.soundmanager", info->name, NULL, skeleton);
+ if (value != NULL)
+ {
+ g_variant_take_ref (value);
+ g_variant_builder_add (&builder, "{sv}", info->name, value);
+ g_variant_unref (value);
+ }
+ }
+ }
+out:
+ return g_variant_builder_end (&builder);
+}
+
+static void
+audiomanager_routing_soundmanager_skeleton_dbus_interface_flush (GDBusInterfaceSkeleton *_skeleton)
+{
+}
+
+static void audiomanager_routing_soundmanager_skeleton_iface_init (AudiomanagerRoutingSoundmanagerIface *iface);
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+G_DEFINE_TYPE_WITH_CODE (AudiomanagerRoutingSoundmanagerSkeleton, audiomanager_routing_soundmanager_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_ADD_PRIVATE (AudiomanagerRoutingSoundmanagerSkeleton)
+ G_IMPLEMENT_INTERFACE (TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER, audiomanager_routing_soundmanager_skeleton_iface_init));
+
+#else
+G_DEFINE_TYPE_WITH_CODE (AudiomanagerRoutingSoundmanagerSkeleton, audiomanager_routing_soundmanager_skeleton, G_TYPE_DBUS_INTERFACE_SKELETON,
+ G_IMPLEMENT_INTERFACE (TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER, audiomanager_routing_soundmanager_skeleton_iface_init));
+
+#endif
+static void
+audiomanager_routing_soundmanager_skeleton_finalize (GObject *object)
+{
+ AudiomanagerRoutingSoundmanagerSkeleton *skeleton = AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON (object);
+ g_list_free_full (skeleton->priv->changed_properties, (GDestroyNotify) _changed_property_free);
+ if (skeleton->priv->changed_properties_idle_source != NULL)
+ g_source_destroy (skeleton->priv->changed_properties_idle_source);
+ g_main_context_unref (skeleton->priv->context);
+ g_mutex_clear (&skeleton->priv->lock);
+ G_OBJECT_CLASS (audiomanager_routing_soundmanager_skeleton_parent_class)->finalize (object);
+}
+
+static void
+audiomanager_routing_soundmanager_skeleton_init (AudiomanagerRoutingSoundmanagerSkeleton *skeleton)
+{
+#if GLIB_VERSION_MAX_ALLOWED >= GLIB_VERSION_2_38
+ skeleton->priv = audiomanager_routing_soundmanager_skeleton_get_instance_private (skeleton);
+#else
+ skeleton->priv = G_TYPE_INSTANCE_GET_PRIVATE (skeleton, TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON, AudiomanagerRoutingSoundmanagerSkeletonPrivate);
+#endif
+
+ g_mutex_init (&skeleton->priv->lock);
+ skeleton->priv->context = g_main_context_ref_thread_default ();
+}
+
+static void
+audiomanager_routing_soundmanager_skeleton_class_init (AudiomanagerRoutingSoundmanagerSkeletonClass *klass)
+{
+ GObjectClass *gobject_class;
+ GDBusInterfaceSkeletonClass *skeleton_class;
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = audiomanager_routing_soundmanager_skeleton_finalize;
+
+ skeleton_class = G_DBUS_INTERFACE_SKELETON_CLASS (klass);
+ skeleton_class->get_info = audiomanager_routing_soundmanager_skeleton_dbus_interface_get_info;
+ skeleton_class->get_properties = audiomanager_routing_soundmanager_skeleton_dbus_interface_get_properties;
+ skeleton_class->flush = audiomanager_routing_soundmanager_skeleton_dbus_interface_flush;
+ skeleton_class->get_vtable = audiomanager_routing_soundmanager_skeleton_dbus_interface_get_vtable;
+
+#if GLIB_VERSION_MAX_ALLOWED < GLIB_VERSION_2_38
+ g_type_class_add_private (klass, sizeof (AudiomanagerRoutingSoundmanagerSkeletonPrivate));
+#endif
+}
+
+static void
+audiomanager_routing_soundmanager_skeleton_iface_init (AudiomanagerRoutingSoundmanagerIface *iface)
+{
+}
+
+/**
+ * audiomanager_routing_soundmanager_skeleton_new:
+ *
+ * Creates a skeleton object for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routing-soundmanager.top_of_page">org.genivi.audiomanager.routing.soundmanager</link>.
+ *
+ * Returns: (transfer full) (type AudiomanagerRoutingSoundmanagerSkeleton): The skeleton object.
+ */
+AudiomanagerRoutingSoundmanager *
+audiomanager_routing_soundmanager_skeleton_new (void)
+{
+ return AUDIOMANAGER_ROUTING_SOUNDMANAGER (g_object_new (TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON, NULL));
+}
+
+/* ------------------------------------------------------------------------
+ * Code for Object, ObjectProxy and ObjectSkeleton
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:Object
+ * @title: Object
+ * @short_description: Specialized GDBusObject types
+ *
+ * This section contains the #Object, #ObjectProxy, and #ObjectSkeleton types which make it easier to work with objects implementing generated types for D-Bus interfaces.
+ */
+
+/**
+ * Object:
+ *
+ * The #Object type is a specialized container of interfaces.
+ */
+
+/**
+ * ObjectIface:
+ * @parent_iface: The parent interface.
+ *
+ * Virtual table for the #Object interface.
+ */
+
+typedef ObjectIface ObjectInterface;
+G_DEFINE_INTERFACE_WITH_CODE (Object, object, G_TYPE_OBJECT, g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_DBUS_OBJECT));
+
+static void
+object_default_init (ObjectIface *iface)
+{
+ /**
+ * Object:audiomanager-commandinterface:
+ *
+ * The #AudiomanagerCommandinterface instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-commandinterface.top_of_page">org.genivi.audiomanager.commandinterface</link>, if any.
+ *
+ * Connect to the #GObject::notify signal to get informed of property changes.
+ */
+ g_object_interface_install_property (iface, g_param_spec_object ("audiomanager-commandinterface", "audiomanager-commandinterface", "audiomanager-commandinterface", TYPE_AUDIOMANAGER_COMMANDINTERFACE, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS));
+
+ /**
+ * Object:audiomanager-routinginterface:
+ *
+ * The #AudiomanagerRoutinginterface instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routinginterface.top_of_page">org.genivi.audiomanager.routinginterface</link>, if any.
+ *
+ * Connect to the #GObject::notify signal to get informed of property changes.
+ */
+ g_object_interface_install_property (iface, g_param_spec_object ("audiomanager-routinginterface", "audiomanager-routinginterface", "audiomanager-routinginterface", TYPE_AUDIOMANAGER_ROUTINGINTERFACE, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS));
+
+ /**
+ * Object:audiomanager-routing-soundmanager:
+ *
+ * The #AudiomanagerRoutingSoundmanager instance corresponding to the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routing-soundmanager.top_of_page">org.genivi.audiomanager.routing.soundmanager</link>, if any.
+ *
+ * Connect to the #GObject::notify signal to get informed of property changes.
+ */
+ g_object_interface_install_property (iface, g_param_spec_object ("audiomanager-routing-soundmanager", "audiomanager-routing-soundmanager", "audiomanager-routing-soundmanager", TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER, G_PARAM_READWRITE|G_PARAM_STATIC_STRINGS));
+
+}
+
+/**
+ * object_get_audiomanager_commandinterface:
+ * @object: A #Object.
+ *
+ * Gets the #AudiomanagerCommandinterface instance for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-commandinterface.top_of_page">org.genivi.audiomanager.commandinterface</link> on @object, if any.
+ *
+ * Returns: (transfer full): A #AudiomanagerCommandinterface that must be freed with g_object_unref() or %NULL if @object does not implement the interface.
+ */
+AudiomanagerCommandinterface *object_get_audiomanager_commandinterface (Object *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.genivi.audiomanager.commandinterface");
+ if (ret == NULL)
+ return NULL;
+ return AUDIOMANAGER_COMMANDINTERFACE (ret);
+}
+
+/**
+ * object_get_audiomanager_routinginterface:
+ * @object: A #Object.
+ *
+ * Gets the #AudiomanagerRoutinginterface instance for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routinginterface.top_of_page">org.genivi.audiomanager.routinginterface</link> on @object, if any.
+ *
+ * Returns: (transfer full): A #AudiomanagerRoutinginterface that must be freed with g_object_unref() or %NULL if @object does not implement the interface.
+ */
+AudiomanagerRoutinginterface *object_get_audiomanager_routinginterface (Object *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.genivi.audiomanager.routinginterface");
+ if (ret == NULL)
+ return NULL;
+ return AUDIOMANAGER_ROUTINGINTERFACE (ret);
+}
+
+/**
+ * object_get_audiomanager_routing_soundmanager:
+ * @object: A #Object.
+ *
+ * Gets the #AudiomanagerRoutingSoundmanager instance for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routing-soundmanager.top_of_page">org.genivi.audiomanager.routing.soundmanager</link> on @object, if any.
+ *
+ * Returns: (transfer full): A #AudiomanagerRoutingSoundmanager that must be freed with g_object_unref() or %NULL if @object does not implement the interface.
+ */
+AudiomanagerRoutingSoundmanager *object_get_audiomanager_routing_soundmanager (Object *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.genivi.audiomanager.routing.soundmanager");
+ if (ret == NULL)
+ return NULL;
+ return AUDIOMANAGER_ROUTING_SOUNDMANAGER (ret);
+}
+
+
+/**
+ * object_peek_audiomanager_commandinterface: (skip)
+ * @object: A #Object.
+ *
+ * Like object_get_audiomanager_commandinterface() but doesn't increase the reference count on the returned object.
+ *
+ * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning>
+ *
+ * Returns: (transfer none): A #AudiomanagerCommandinterface or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object.
+ */
+AudiomanagerCommandinterface *object_peek_audiomanager_commandinterface (Object *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.genivi.audiomanager.commandinterface");
+ if (ret == NULL)
+ return NULL;
+ g_object_unref (ret);
+ return AUDIOMANAGER_COMMANDINTERFACE (ret);
+}
+
+/**
+ * object_peek_audiomanager_routinginterface: (skip)
+ * @object: A #Object.
+ *
+ * Like object_get_audiomanager_routinginterface() but doesn't increase the reference count on the returned object.
+ *
+ * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning>
+ *
+ * Returns: (transfer none): A #AudiomanagerRoutinginterface or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object.
+ */
+AudiomanagerRoutinginterface *object_peek_audiomanager_routinginterface (Object *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.genivi.audiomanager.routinginterface");
+ if (ret == NULL)
+ return NULL;
+ g_object_unref (ret);
+ return AUDIOMANAGER_ROUTINGINTERFACE (ret);
+}
+
+/**
+ * object_peek_audiomanager_routing_soundmanager: (skip)
+ * @object: A #Object.
+ *
+ * Like object_get_audiomanager_routing_soundmanager() but doesn't increase the reference count on the returned object.
+ *
+ * <warning>It is not safe to use the returned object if you are on another thread than the one where the #GDBusObjectManagerClient or #GDBusObjectManagerServer for @object is running.</warning>
+ *
+ * Returns: (transfer none): A #AudiomanagerRoutingSoundmanager or %NULL if @object does not implement the interface. Do not free the returned object, it is owned by @object.
+ */
+AudiomanagerRoutingSoundmanager *object_peek_audiomanager_routing_soundmanager (Object *object)
+{
+ GDBusInterface *ret;
+ ret = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.genivi.audiomanager.routing.soundmanager");
+ if (ret == NULL)
+ return NULL;
+ g_object_unref (ret);
+ return AUDIOMANAGER_ROUTING_SOUNDMANAGER (ret);
+}
+
+
+static void
+object_notify (GDBusObject *object, GDBusInterface *interface)
+{
+ _ExtendedGDBusInterfaceInfo *info = (_ExtendedGDBusInterfaceInfo *) g_dbus_interface_get_info (interface);
+ /* info can be NULL if the other end is using a D-Bus interface we don't know
+ * anything about, for example old generated code in this process talking to
+ * newer generated code in the other process. */
+ if (info != NULL)
+ g_object_notify (G_OBJECT (object), info->hyphen_name);
+}
+
+/**
+ * ObjectProxy:
+ *
+ * The #ObjectProxy structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * ObjectProxyClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #ObjectProxy.
+ */
+
+static void
+object_proxy__object_iface_init (ObjectIface *iface G_GNUC_UNUSED)
+{
+}
+
+static void
+object_proxy__g_dbus_object_iface_init (GDBusObjectIface *iface)
+{
+ iface->interface_added = object_notify;
+ iface->interface_removed = object_notify;
+}
+
+
+G_DEFINE_TYPE_WITH_CODE (ObjectProxy, object_proxy, G_TYPE_DBUS_OBJECT_PROXY,
+ G_IMPLEMENT_INTERFACE (TYPE_OBJECT, object_proxy__object_iface_init)
+ G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT, object_proxy__g_dbus_object_iface_init));
+
+static void
+object_proxy_init (ObjectProxy *object G_GNUC_UNUSED)
+{
+}
+
+static void
+object_proxy_set_property (GObject *gobject,
+ guint prop_id,
+ const GValue *value G_GNUC_UNUSED,
+ GParamSpec *pspec)
+{
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+}
+
+static void
+object_proxy_get_property (GObject *gobject,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ ObjectProxy *object = OBJECT_PROXY (gobject);
+ GDBusInterface *interface;
+
+ switch (prop_id)
+ {
+ case 1:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.genivi.audiomanager.commandinterface");
+ g_value_take_object (value, interface);
+ break;
+
+ case 2:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.genivi.audiomanager.routinginterface");
+ g_value_take_object (value, interface);
+ break;
+
+ case 3:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.genivi.audiomanager.routing.soundmanager");
+ g_value_take_object (value, interface);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+object_proxy_class_init (ObjectProxyClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->set_property = object_proxy_set_property;
+ gobject_class->get_property = object_proxy_get_property;
+
+ g_object_class_override_property (gobject_class, 1, "audiomanager-commandinterface");
+ g_object_class_override_property (gobject_class, 2, "audiomanager-routinginterface");
+ g_object_class_override_property (gobject_class, 3, "audiomanager-routing-soundmanager");
+}
+
+/**
+ * object_proxy_new:
+ * @connection: A #GDBusConnection.
+ * @object_path: An object path.
+ *
+ * Creates a new proxy object.
+ *
+ * Returns: (transfer full): The proxy object.
+ */
+ObjectProxy *
+object_proxy_new (GDBusConnection *connection,
+ const gchar *object_path)
+{
+ g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL);
+ g_return_val_if_fail (g_variant_is_object_path (object_path), NULL);
+ return OBJECT_PROXY (g_object_new (TYPE_OBJECT_PROXY, "g-connection", connection, "g-object-path", object_path, NULL));
+}
+
+/**
+ * ObjectSkeleton:
+ *
+ * The #ObjectSkeleton structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * ObjectSkeletonClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #ObjectSkeleton.
+ */
+
+static void
+object_skeleton__object_iface_init (ObjectIface *iface G_GNUC_UNUSED)
+{
+}
+
+
+static void
+object_skeleton__g_dbus_object_iface_init (GDBusObjectIface *iface)
+{
+ iface->interface_added = object_notify;
+ iface->interface_removed = object_notify;
+}
+
+G_DEFINE_TYPE_WITH_CODE (ObjectSkeleton, object_skeleton, G_TYPE_DBUS_OBJECT_SKELETON,
+ G_IMPLEMENT_INTERFACE (TYPE_OBJECT, object_skeleton__object_iface_init)
+ G_IMPLEMENT_INTERFACE (G_TYPE_DBUS_OBJECT, object_skeleton__g_dbus_object_iface_init));
+
+static void
+object_skeleton_init (ObjectSkeleton *object G_GNUC_UNUSED)
+{
+}
+
+static void
+object_skeleton_set_property (GObject *gobject,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ ObjectSkeleton *object = OBJECT_SKELETON (gobject);
+ GDBusInterfaceSkeleton *interface;
+
+ switch (prop_id)
+ {
+ case 1:
+ interface = g_value_get_object (value);
+ if (interface != NULL)
+ {
+ g_warn_if_fail (IS_AUDIOMANAGER_COMMANDINTERFACE (interface));
+ g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface);
+ }
+ else
+ {
+ g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.genivi.audiomanager.commandinterface");
+ }
+ break;
+
+ case 2:
+ interface = g_value_get_object (value);
+ if (interface != NULL)
+ {
+ g_warn_if_fail (IS_AUDIOMANAGER_ROUTINGINTERFACE (interface));
+ g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface);
+ }
+ else
+ {
+ g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.genivi.audiomanager.routinginterface");
+ }
+ break;
+
+ case 3:
+ interface = g_value_get_object (value);
+ if (interface != NULL)
+ {
+ g_warn_if_fail (IS_AUDIOMANAGER_ROUTING_SOUNDMANAGER (interface));
+ g_dbus_object_skeleton_add_interface (G_DBUS_OBJECT_SKELETON (object), interface);
+ }
+ else
+ {
+ g_dbus_object_skeleton_remove_interface_by_name (G_DBUS_OBJECT_SKELETON (object), "org.genivi.audiomanager.routing.soundmanager");
+ }
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+object_skeleton_get_property (GObject *gobject,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ ObjectSkeleton *object = OBJECT_SKELETON (gobject);
+ GDBusInterface *interface;
+
+ switch (prop_id)
+ {
+ case 1:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.genivi.audiomanager.commandinterface");
+ g_value_take_object (value, interface);
+ break;
+
+ case 2:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.genivi.audiomanager.routinginterface");
+ g_value_take_object (value, interface);
+ break;
+
+ case 3:
+ interface = g_dbus_object_get_interface (G_DBUS_OBJECT (object), "org.genivi.audiomanager.routing.soundmanager");
+ g_value_take_object (value, interface);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+object_skeleton_class_init (ObjectSkeletonClass *klass)
+{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+
+ gobject_class->set_property = object_skeleton_set_property;
+ gobject_class->get_property = object_skeleton_get_property;
+
+ g_object_class_override_property (gobject_class, 1, "audiomanager-commandinterface");
+ g_object_class_override_property (gobject_class, 2, "audiomanager-routinginterface");
+ g_object_class_override_property (gobject_class, 3, "audiomanager-routing-soundmanager");
+}
+
+/**
+ * object_skeleton_new:
+ * @object_path: An object path.
+ *
+ * Creates a new skeleton object.
+ *
+ * Returns: (transfer full): The skeleton object.
+ */
+ObjectSkeleton *
+object_skeleton_new (const gchar *object_path)
+{
+ g_return_val_if_fail (g_variant_is_object_path (object_path), NULL);
+ return OBJECT_SKELETON (g_object_new (TYPE_OBJECT_SKELETON, "g-object-path", object_path, NULL));
+}
+
+/**
+ * object_skeleton_set_audiomanager_commandinterface:
+ * @object: A #ObjectSkeleton.
+ * @interface_: (allow-none): A #AudiomanagerCommandinterface or %NULL to clear the interface.
+ *
+ * Sets the #AudiomanagerCommandinterface instance for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-commandinterface.top_of_page">org.genivi.audiomanager.commandinterface</link> on @object.
+ */
+void object_skeleton_set_audiomanager_commandinterface (ObjectSkeleton *object, AudiomanagerCommandinterface *interface_)
+{
+ g_object_set (G_OBJECT (object), "audiomanager-commandinterface", interface_, NULL);
+}
+
+/**
+ * object_skeleton_set_audiomanager_routinginterface:
+ * @object: A #ObjectSkeleton.
+ * @interface_: (allow-none): A #AudiomanagerRoutinginterface or %NULL to clear the interface.
+ *
+ * Sets the #AudiomanagerRoutinginterface instance for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routinginterface.top_of_page">org.genivi.audiomanager.routinginterface</link> on @object.
+ */
+void object_skeleton_set_audiomanager_routinginterface (ObjectSkeleton *object, AudiomanagerRoutinginterface *interface_)
+{
+ g_object_set (G_OBJECT (object), "audiomanager-routinginterface", interface_, NULL);
+}
+
+/**
+ * object_skeleton_set_audiomanager_routing_soundmanager:
+ * @object: A #ObjectSkeleton.
+ * @interface_: (allow-none): A #AudiomanagerRoutingSoundmanager or %NULL to clear the interface.
+ *
+ * Sets the #AudiomanagerRoutingSoundmanager instance for the D-Bus interface <link linkend="gdbus-interface-org-genivi-audiomanager-routing-soundmanager.top_of_page">org.genivi.audiomanager.routing.soundmanager</link> on @object.
+ */
+void object_skeleton_set_audiomanager_routing_soundmanager (ObjectSkeleton *object, AudiomanagerRoutingSoundmanager *interface_)
+{
+ g_object_set (G_OBJECT (object), "audiomanager-routing-soundmanager", interface_, NULL);
+}
+
+
+/* ------------------------------------------------------------------------
+ * Code for ObjectManager client
+ * ------------------------------------------------------------------------
+ */
+
+/**
+ * SECTION:ObjectManagerClient
+ * @title: ObjectManagerClient
+ * @short_description: Generated GDBusObjectManagerClient type
+ *
+ * This section contains a #GDBusObjectManagerClient that uses object_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc.
+ */
+
+/**
+ * ObjectManagerClient:
+ *
+ * The #ObjectManagerClient structure contains only private data and should only be accessed using the provided API.
+ */
+
+/**
+ * ObjectManagerClientClass:
+ * @parent_class: The parent class.
+ *
+ * Class structure for #ObjectManagerClient.
+ */
+
+G_DEFINE_TYPE (ObjectManagerClient, object_manager_client, G_TYPE_DBUS_OBJECT_MANAGER_CLIENT);
+
+static void
+object_manager_client_init (ObjectManagerClient *manager G_GNUC_UNUSED)
+{
+}
+
+static void
+object_manager_client_class_init (ObjectManagerClientClass *klass G_GNUC_UNUSED)
+{
+}
+
+/**
+ * object_manager_client_get_proxy_type:
+ * @manager: A #GDBusObjectManagerClient.
+ * @object_path: The object path of the remote object (unused).
+ * @interface_name: (allow-none): Interface name of the remote object or %NULL to get the object proxy #GType.
+ * @user_data: User data (unused).
+ *
+ * A #GDBusProxyTypeFunc that maps @interface_name to the generated #GDBusObjectProxy<!-- -->- and #GDBusProxy<!-- -->-derived types.
+ *
+ * Returns: A #GDBusProxy<!-- -->-derived #GType if @interface_name is not %NULL, otherwise the #GType for #ObjectProxy.
+ */
+GType
+object_manager_client_get_proxy_type (GDBusObjectManagerClient *manager G_GNUC_UNUSED, const gchar *object_path G_GNUC_UNUSED, const gchar *interface_name, gpointer user_data G_GNUC_UNUSED)
+{
+ static gsize once_init_value = 0;
+ static GHashTable *lookup_hash;
+ GType ret;
+
+ if (interface_name == NULL)
+ return TYPE_OBJECT_PROXY;
+ if (g_once_init_enter (&once_init_value))
+ {
+ lookup_hash = g_hash_table_new (g_str_hash, g_str_equal);
+ g_hash_table_insert (lookup_hash, (gpointer) "org.genivi.audiomanager.commandinterface", GSIZE_TO_POINTER (TYPE_AUDIOMANAGER_COMMANDINTERFACE_PROXY));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.genivi.audiomanager.routinginterface", GSIZE_TO_POINTER (TYPE_AUDIOMANAGER_ROUTINGINTERFACE_PROXY));
+ g_hash_table_insert (lookup_hash, (gpointer) "org.genivi.audiomanager.routing.soundmanager", GSIZE_TO_POINTER (TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY));
+ g_once_init_leave (&once_init_value, 1);
+ }
+ ret = (GType) GPOINTER_TO_SIZE (g_hash_table_lookup (lookup_hash, interface_name));
+ if (ret == (GType) 0)
+ ret = G_TYPE_DBUS_PROXY;
+ return ret;
+}
+
+/**
+ * object_manager_client_new:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Asynchronously creates #GDBusObjectManagerClient using object_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc. See g_dbus_object_manager_client_new() for more details.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call object_manager_client_new_finish() to get the result of the operation.
+ *
+ * See object_manager_client_new_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+object_manager_client_new (
+ GDBusConnection *connection,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (TYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "flags", flags, "name", name, "connection", connection, "object-path", object_path, "get-proxy-type-func", object_manager_client_get_proxy_type, NULL);
+}
+
+/**
+ * object_manager_client_new_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to object_manager_client_new().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with object_manager_client_new().
+ *
+ * Returns: (transfer full) (type ObjectManagerClient): The constructed object manager client or %NULL if @error is set.
+ */
+GDBusObjectManager *
+object_manager_client_new_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return G_DBUS_OBJECT_MANAGER (ret);
+ else
+ return NULL;
+}
+
+/**
+ * object_manager_client_new_sync:
+ * @connection: A #GDBusConnection.
+ * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration.
+ * @name: (allow-none): A bus name (well-known or unique) or %NULL if @connection is not a message bus connection.
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Synchronously creates #GDBusObjectManagerClient using object_manager_client_get_proxy_type() as the #GDBusProxyTypeFunc. See g_dbus_object_manager_client_new_sync() for more details.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See object_manager_client_new() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type ObjectManagerClient): The constructed object manager client or %NULL if @error is set.
+ */
+GDBusObjectManager *
+object_manager_client_new_sync (
+ GDBusConnection *connection,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (TYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name", name, "connection", connection, "object-path", object_path, "get-proxy-type-func", object_manager_client_get_proxy_type, NULL);
+ if (ret != NULL)
+ return G_DBUS_OBJECT_MANAGER (ret);
+ else
+ return NULL;
+}
+
+
+/**
+ * object_manager_client_new_for_bus:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @callback: A #GAsyncReadyCallback to call when the request is satisfied.
+ * @user_data: User data to pass to @callback.
+ *
+ * Like object_manager_client_new() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * When the operation is finished, @callback will be invoked in the <link linkend="g-main-context-push-thread-default">thread-default main loop</link> of the thread you are calling this method from.
+ * You can then call object_manager_client_new_for_bus_finish() to get the result of the operation.
+ *
+ * See object_manager_client_new_for_bus_sync() for the synchronous, blocking version of this constructor.
+ */
+void
+object_manager_client_new_for_bus (
+ GBusType bus_type,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_async_initable_new_async (TYPE_OBJECT_MANAGER_CLIENT, G_PRIORITY_DEFAULT, cancellable, callback, user_data, "flags", flags, "name", name, "bus-type", bus_type, "object-path", object_path, "get-proxy-type-func", object_manager_client_get_proxy_type, NULL);
+}
+
+/**
+ * object_manager_client_new_for_bus_finish:
+ * @res: The #GAsyncResult obtained from the #GAsyncReadyCallback passed to object_manager_client_new_for_bus().
+ * @error: Return location for error or %NULL
+ *
+ * Finishes an operation started with object_manager_client_new_for_bus().
+ *
+ * Returns: (transfer full) (type ObjectManagerClient): The constructed object manager client or %NULL if @error is set.
+ */
+GDBusObjectManager *
+object_manager_client_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error)
+{
+ GObject *ret;
+ GObject *source_object;
+ source_object = g_async_result_get_source_object (res);
+ ret = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object), res, error);
+ g_object_unref (source_object);
+ if (ret != NULL)
+ return G_DBUS_OBJECT_MANAGER (ret);
+ else
+ return NULL;
+}
+
+/**
+ * object_manager_client_new_for_bus_sync:
+ * @bus_type: A #GBusType.
+ * @flags: Flags from the #GDBusObjectManagerClientFlags enumeration.
+ * @name: A bus name (well-known or unique).
+ * @object_path: An object path.
+ * @cancellable: (allow-none): A #GCancellable or %NULL.
+ * @error: Return location for error or %NULL
+ *
+ * Like object_manager_client_new_sync() but takes a #GBusType instead of a #GDBusConnection.
+ *
+ * The calling thread is blocked until a reply is received.
+ *
+ * See object_manager_client_new_for_bus() for the asynchronous version of this constructor.
+ *
+ * Returns: (transfer full) (type ObjectManagerClient): The constructed object manager client or %NULL if @error is set.
+ */
+GDBusObjectManager *
+object_manager_client_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GInitable *ret;
+ ret = g_initable_new (TYPE_OBJECT_MANAGER_CLIENT, cancellable, error, "flags", flags, "name", name, "bus-type", bus_type, "object-path", object_path, "get-proxy-type-func", object_manager_client_get_proxy_type, NULL);
+ if (ret != NULL)
+ return G_DBUS_OBJECT_MANAGER (ret);
+ else
+ return NULL;
+}
+
+
diff --git a/src/dbus/audio_manager_interface.h b/src/dbus/audio_manager_interface.h
new file mode 100644
index 0000000..c2568f1
--- /dev/null
+++ b/src/dbus/audio_manager_interface.h
@@ -0,0 +1,1517 @@
+/*
+ * Generated by gdbus-codegen 2.40.2. DO NOT EDIT.
+ *
+ * The license of this code is the same as for the source it was derived from.
+ */
+
+#ifndef __AUDIO_MANAGER_INTERFACE_H__
+#define __AUDIO_MANAGER_INTERFACE_H__
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+
+/* ------------------------------------------------------------------------ */
+/* Declarations for org.genivi.audiomanager.commandinterface */
+
+#define TYPE_AUDIOMANAGER_COMMANDINTERFACE (audiomanager_commandinterface_get_type ())
+#define AUDIOMANAGER_COMMANDINTERFACE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_AUDIOMANAGER_COMMANDINTERFACE, AudiomanagerCommandinterface))
+#define IS_AUDIOMANAGER_COMMANDINTERFACE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_AUDIOMANAGER_COMMANDINTERFACE))
+#define AUDIOMANAGER_COMMANDINTERFACE_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), TYPE_AUDIOMANAGER_COMMANDINTERFACE, AudiomanagerCommandinterfaceIface))
+
+struct _AudiomanagerCommandinterface;
+typedef struct _AudiomanagerCommandinterface AudiomanagerCommandinterface;
+typedef struct _AudiomanagerCommandinterfaceIface AudiomanagerCommandinterfaceIface;
+
+struct _AudiomanagerCommandinterfaceIface
+{
+ GTypeInterface parent_iface;
+
+
+ gboolean (*handle_connect) (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_sourceID,
+ guint16 arg_sinkID);
+
+ gboolean (*handle_disconnect) (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_mainConnectionID);
+
+ gboolean (*handle_get_list_main_connections) (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation);
+
+ gboolean (*handle_get_list_main_sinks) (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation);
+
+ gboolean (*handle_set_sink_mute_state) (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_sinkID,
+ gint16 arg_muteState);
+
+ gboolean (*handle_set_volume) (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_sinkID,
+ gint16 arg_volume);
+
+ gboolean (*handle_volume_step) (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_sinkID,
+ gint16 arg_volumeStep);
+
+ void (*main_connection_state_changed) (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_connectionID,
+ gint16 arg_connectionState);
+
+ void (*new_main_connection) (
+ AudiomanagerCommandinterface *object,
+ GVariant *arg_mainConnection);
+
+ void (*removed_main_connection) (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_mainConnectionId);
+
+ void (*sink_mute_state_changed) (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_sinkID,
+ gint16 arg_muteState);
+
+ void (*system_property_changed) (
+ AudiomanagerCommandinterface *object,
+ GVariant *arg_SystemProperty);
+
+ void (*volume_changed) (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_sinkID,
+ gint16 arg_volume);
+
+};
+
+GType audiomanager_commandinterface_get_type (void) G_GNUC_CONST;
+
+GDBusInterfaceInfo *audiomanager_commandinterface_interface_info (void);
+guint audiomanager_commandinterface_override_properties (GObjectClass *klass, guint property_id_begin);
+
+
+/* D-Bus method call completion functions: */
+void audiomanager_commandinterface_complete_connect (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result,
+ guint16 mainConnectionID);
+
+void audiomanager_commandinterface_complete_disconnect (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result);
+
+void audiomanager_commandinterface_complete_set_volume (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result);
+
+void audiomanager_commandinterface_complete_volume_step (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result);
+
+void audiomanager_commandinterface_complete_set_sink_mute_state (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result);
+
+void audiomanager_commandinterface_complete_get_list_main_connections (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result,
+ GVariant *listConnections);
+
+void audiomanager_commandinterface_complete_get_list_main_sinks (
+ AudiomanagerCommandinterface *object,
+ GDBusMethodInvocation *invocation,
+ gint16 result,
+ GVariant *listMainSinks);
+
+
+
+/* D-Bus signal emissions functions: */
+void audiomanager_commandinterface_emit_new_main_connection (
+ AudiomanagerCommandinterface *object,
+ GVariant *arg_mainConnection);
+
+void audiomanager_commandinterface_emit_removed_main_connection (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_mainConnectionId);
+
+void audiomanager_commandinterface_emit_main_connection_state_changed (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_connectionID,
+ gint16 arg_connectionState);
+
+void audiomanager_commandinterface_emit_volume_changed (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_sinkID,
+ gint16 arg_volume);
+
+void audiomanager_commandinterface_emit_sink_mute_state_changed (
+ AudiomanagerCommandinterface *object,
+ guint16 arg_sinkID,
+ gint16 arg_muteState);
+
+void audiomanager_commandinterface_emit_system_property_changed (
+ AudiomanagerCommandinterface *object,
+ GVariant *arg_SystemProperty);
+
+
+
+/* D-Bus method calls: */
+void audiomanager_commandinterface_call_connect (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sourceID,
+ guint16 arg_sinkID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_commandinterface_call_connect_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ guint16 *out_mainConnectionID,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_commandinterface_call_connect_sync (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sourceID,
+ guint16 arg_sinkID,
+ gint16 *out_result,
+ guint16 *out_mainConnectionID,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_commandinterface_call_disconnect (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_mainConnectionID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_commandinterface_call_disconnect_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_commandinterface_call_disconnect_sync (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_mainConnectionID,
+ gint16 *out_result,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_commandinterface_call_set_volume (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sinkID,
+ gint16 arg_volume,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_commandinterface_call_set_volume_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_commandinterface_call_set_volume_sync (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sinkID,
+ gint16 arg_volume,
+ gint16 *out_result,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_commandinterface_call_volume_step (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sinkID,
+ gint16 arg_volumeStep,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_commandinterface_call_volume_step_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_commandinterface_call_volume_step_sync (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sinkID,
+ gint16 arg_volumeStep,
+ gint16 *out_result,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_commandinterface_call_set_sink_mute_state (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sinkID,
+ gint16 arg_muteState,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_commandinterface_call_set_sink_mute_state_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_commandinterface_call_set_sink_mute_state_sync (
+ AudiomanagerCommandinterface *proxy,
+ guint16 arg_sinkID,
+ gint16 arg_muteState,
+ gint16 *out_result,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_commandinterface_call_get_list_main_connections (
+ AudiomanagerCommandinterface *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_commandinterface_call_get_list_main_connections_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GVariant **out_listConnections,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_commandinterface_call_get_list_main_connections_sync (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GVariant **out_listConnections,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_commandinterface_call_get_list_main_sinks (
+ AudiomanagerCommandinterface *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_commandinterface_call_get_list_main_sinks_finish (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GVariant **out_listMainSinks,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_commandinterface_call_get_list_main_sinks_sync (
+ AudiomanagerCommandinterface *proxy,
+ gint16 *out_result,
+ GVariant **out_listMainSinks,
+ GCancellable *cancellable,
+ GError **error);
+
+
+
+/* ---- */
+
+#define TYPE_AUDIOMANAGER_COMMANDINTERFACE_PROXY (audiomanager_commandinterface_proxy_get_type ())
+#define AUDIOMANAGER_COMMANDINTERFACE_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_AUDIOMANAGER_COMMANDINTERFACE_PROXY, AudiomanagerCommandinterfaceProxy))
+#define AUDIOMANAGER_COMMANDINTERFACE_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TYPE_AUDIOMANAGER_COMMANDINTERFACE_PROXY, AudiomanagerCommandinterfaceProxyClass))
+#define AUDIOMANAGER_COMMANDINTERFACE_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_AUDIOMANAGER_COMMANDINTERFACE_PROXY, AudiomanagerCommandinterfaceProxyClass))
+#define IS_AUDIOMANAGER_COMMANDINTERFACE_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_AUDIOMANAGER_COMMANDINTERFACE_PROXY))
+#define IS_AUDIOMANAGER_COMMANDINTERFACE_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_AUDIOMANAGER_COMMANDINTERFACE_PROXY))
+
+typedef struct _AudiomanagerCommandinterfaceProxy AudiomanagerCommandinterfaceProxy;
+typedef struct _AudiomanagerCommandinterfaceProxyClass AudiomanagerCommandinterfaceProxyClass;
+typedef struct _AudiomanagerCommandinterfaceProxyPrivate AudiomanagerCommandinterfaceProxyPrivate;
+
+struct _AudiomanagerCommandinterfaceProxy
+{
+ /*< private >*/
+ GDBusProxy parent_instance;
+ AudiomanagerCommandinterfaceProxyPrivate *priv;
+};
+
+struct _AudiomanagerCommandinterfaceProxyClass
+{
+ GDBusProxyClass parent_class;
+};
+
+GType audiomanager_commandinterface_proxy_get_type (void) G_GNUC_CONST;
+
+void audiomanager_commandinterface_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+AudiomanagerCommandinterface *audiomanager_commandinterface_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error);
+AudiomanagerCommandinterface *audiomanager_commandinterface_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_commandinterface_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+AudiomanagerCommandinterface *audiomanager_commandinterface_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error);
+AudiomanagerCommandinterface *audiomanager_commandinterface_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+
+/* ---- */
+
+#define TYPE_AUDIOMANAGER_COMMANDINTERFACE_SKELETON (audiomanager_commandinterface_skeleton_get_type ())
+#define AUDIOMANAGER_COMMANDINTERFACE_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_AUDIOMANAGER_COMMANDINTERFACE_SKELETON, AudiomanagerCommandinterfaceSkeleton))
+#define AUDIOMANAGER_COMMANDINTERFACE_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TYPE_AUDIOMANAGER_COMMANDINTERFACE_SKELETON, AudiomanagerCommandinterfaceSkeletonClass))
+#define AUDIOMANAGER_COMMANDINTERFACE_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_AUDIOMANAGER_COMMANDINTERFACE_SKELETON, AudiomanagerCommandinterfaceSkeletonClass))
+#define IS_AUDIOMANAGER_COMMANDINTERFACE_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_AUDIOMANAGER_COMMANDINTERFACE_SKELETON))
+#define IS_AUDIOMANAGER_COMMANDINTERFACE_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_AUDIOMANAGER_COMMANDINTERFACE_SKELETON))
+
+typedef struct _AudiomanagerCommandinterfaceSkeleton AudiomanagerCommandinterfaceSkeleton;
+typedef struct _AudiomanagerCommandinterfaceSkeletonClass AudiomanagerCommandinterfaceSkeletonClass;
+typedef struct _AudiomanagerCommandinterfaceSkeletonPrivate AudiomanagerCommandinterfaceSkeletonPrivate;
+
+struct _AudiomanagerCommandinterfaceSkeleton
+{
+ /*< private >*/
+ GDBusInterfaceSkeleton parent_instance;
+ AudiomanagerCommandinterfaceSkeletonPrivate *priv;
+};
+
+struct _AudiomanagerCommandinterfaceSkeletonClass
+{
+ GDBusInterfaceSkeletonClass parent_class;
+};
+
+GType audiomanager_commandinterface_skeleton_get_type (void) G_GNUC_CONST;
+
+AudiomanagerCommandinterface *audiomanager_commandinterface_skeleton_new (void);
+
+
+/* ------------------------------------------------------------------------ */
+/* Declarations for org.genivi.audiomanager.routinginterface */
+
+#define TYPE_AUDIOMANAGER_ROUTINGINTERFACE (audiomanager_routinginterface_get_type ())
+#define AUDIOMANAGER_ROUTINGINTERFACE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_AUDIOMANAGER_ROUTINGINTERFACE, AudiomanagerRoutinginterface))
+#define IS_AUDIOMANAGER_ROUTINGINTERFACE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_AUDIOMANAGER_ROUTINGINTERFACE))
+#define AUDIOMANAGER_ROUTINGINTERFACE_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), TYPE_AUDIOMANAGER_ROUTINGINTERFACE, AudiomanagerRoutinginterfaceIface))
+
+struct _AudiomanagerRoutinginterface;
+typedef struct _AudiomanagerRoutinginterface AudiomanagerRoutinginterface;
+typedef struct _AudiomanagerRoutinginterfaceIface AudiomanagerRoutinginterfaceIface;
+
+struct _AudiomanagerRoutinginterfaceIface
+{
+ GTypeInterface parent_iface;
+
+
+ gboolean (*handle_ack_connect) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_error);
+
+ gboolean (*handle_ack_disconnect) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_error);
+
+ gboolean (*handle_ack_set_sink_volume) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ gint16 arg_volume,
+ guint16 arg_error);
+
+ gboolean (*handle_ack_set_source_state) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ guint16 arg_error);
+
+ gboolean (*handle_ack_set_volumes) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ GVariant *arg_listvolumes,
+ guint16 arg_error);
+
+ gboolean (*handle_ack_sink_notification_configuration) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ guint16 arg_error);
+
+ gboolean (*handle_ack_source_notification_configuration) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ guint16 arg_error);
+
+ gboolean (*handle_confirm_routing_ready) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_domainID);
+
+ gboolean (*handle_confirm_routing_rundown) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_domainID);
+
+ gboolean (*handle_deregister_sink) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_sinkID);
+
+ gboolean (*handle_deregister_source) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_sourceID);
+
+ gboolean (*handle_hook_interrupt_status_change) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_sourceID,
+ guint16 arg_interruptState);
+
+ gboolean (*handle_hook_source_availablity_status_change) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_sourceID,
+ GVariant *arg_availability);
+
+ gboolean (*handle_register_domain) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ GVariant *arg_domaindata,
+ const gchar *arg_returnBusname,
+ const gchar *arg_returnPath,
+ const gchar *arg_returnInterface);
+
+ gboolean (*handle_register_sink) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ GVariant *arg_sinkData);
+
+ gboolean (*handle_register_source) (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ GVariant *arg_sourceData);
+
+ void (*set_routing_ready) (
+ AudiomanagerRoutinginterface *object);
+
+ void (*set_routing_rundown) (
+ AudiomanagerRoutinginterface *object);
+
+};
+
+GType audiomanager_routinginterface_get_type (void) G_GNUC_CONST;
+
+GDBusInterfaceInfo *audiomanager_routinginterface_interface_info (void);
+guint audiomanager_routinginterface_override_properties (GObjectClass *klass, guint property_id_begin);
+
+
+/* D-Bus method call completion functions: */
+void audiomanager_routinginterface_complete_ack_connect (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routinginterface_complete_ack_disconnect (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routinginterface_complete_ack_set_source_state (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routinginterface_complete_ack_set_sink_volume (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routinginterface_complete_register_sink (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 sinkID,
+ guint16 error);
+
+void audiomanager_routinginterface_complete_deregister_sink (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ gint error);
+
+void audiomanager_routinginterface_complete_register_source (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 sourceID,
+ guint16 error);
+
+void audiomanager_routinginterface_complete_deregister_source (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 error);
+
+void audiomanager_routinginterface_complete_hook_interrupt_status_change (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routinginterface_complete_hook_source_availablity_status_change (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routinginterface_complete_confirm_routing_ready (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routinginterface_complete_confirm_routing_rundown (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routinginterface_complete_ack_set_volumes (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routinginterface_complete_ack_sink_notification_configuration (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routinginterface_complete_ack_source_notification_configuration (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routinginterface_complete_register_domain (
+ AudiomanagerRoutinginterface *object,
+ GDBusMethodInvocation *invocation,
+ guint16 domainid,
+ guint16 error);
+
+
+
+/* D-Bus signal emissions functions: */
+void audiomanager_routinginterface_emit_set_routing_ready (
+ AudiomanagerRoutinginterface *object);
+
+void audiomanager_routinginterface_emit_set_routing_rundown (
+ AudiomanagerRoutinginterface *object);
+
+
+
+/* D-Bus method calls: */
+void audiomanager_routinginterface_call_ack_connect (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_ack_connect_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_ack_connect_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_ack_disconnect (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_ack_disconnect_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_ack_disconnect_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_ack_set_source_state (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_ack_set_source_state_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_ack_set_source_state_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_ack_set_sink_volume (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ gint16 arg_volume,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_ack_set_sink_volume_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_ack_set_sink_volume_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ gint16 arg_volume,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_register_sink (
+ AudiomanagerRoutinginterface *proxy,
+ GVariant *arg_sinkData,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_register_sink_finish (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 *out_sinkID,
+ guint16 *out_error,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_register_sink_sync (
+ AudiomanagerRoutinginterface *proxy,
+ GVariant *arg_sinkData,
+ guint16 *out_sinkID,
+ guint16 *out_error,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_deregister_sink (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sinkID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_deregister_sink_finish (
+ AudiomanagerRoutinginterface *proxy,
+ gint *out_error,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_deregister_sink_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sinkID,
+ gint *out_error,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_register_source (
+ AudiomanagerRoutinginterface *proxy,
+ GVariant *arg_sourceData,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_register_source_finish (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 *out_sourceID,
+ guint16 *out_error,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_register_source_sync (
+ AudiomanagerRoutinginterface *proxy,
+ GVariant *arg_sourceData,
+ guint16 *out_sourceID,
+ guint16 *out_error,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_deregister_source (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sourceID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_deregister_source_finish (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 *out_error,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_deregister_source_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sourceID,
+ guint16 *out_error,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_hook_interrupt_status_change (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sourceID,
+ guint16 arg_interruptState,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_hook_interrupt_status_change_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_hook_interrupt_status_change_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sourceID,
+ guint16 arg_interruptState,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_hook_source_availablity_status_change (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sourceID,
+ GVariant *arg_availability,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_hook_source_availablity_status_change_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_hook_source_availablity_status_change_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_sourceID,
+ GVariant *arg_availability,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_confirm_routing_ready (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_domainID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_confirm_routing_ready_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_confirm_routing_ready_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_domainID,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_confirm_routing_rundown (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_domainID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_confirm_routing_rundown_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_confirm_routing_rundown_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_domainID,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_ack_set_volumes (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ GVariant *arg_listvolumes,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_ack_set_volumes_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_ack_set_volumes_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ GVariant *arg_listvolumes,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_ack_sink_notification_configuration (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_ack_sink_notification_configuration_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_ack_sink_notification_configuration_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_ack_source_notification_configuration (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_ack_source_notification_configuration_finish (
+ AudiomanagerRoutinginterface *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_ack_source_notification_configuration_sync (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 arg_handle,
+ guint16 arg_error,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_call_register_domain (
+ AudiomanagerRoutinginterface *proxy,
+ GVariant *arg_domaindata,
+ const gchar *arg_returnBusname,
+ const gchar *arg_returnPath,
+ const gchar *arg_returnInterface,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routinginterface_call_register_domain_finish (
+ AudiomanagerRoutinginterface *proxy,
+ guint16 *out_domainid,
+ guint16 *out_error,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routinginterface_call_register_domain_sync (
+ AudiomanagerRoutinginterface *proxy,
+ GVariant *arg_domaindata,
+ const gchar *arg_returnBusname,
+ const gchar *arg_returnPath,
+ const gchar *arg_returnInterface,
+ guint16 *out_domainid,
+ guint16 *out_error,
+ GCancellable *cancellable,
+ GError **error);
+
+
+
+/* ---- */
+
+#define TYPE_AUDIOMANAGER_ROUTINGINTERFACE_PROXY (audiomanager_routinginterface_proxy_get_type ())
+#define AUDIOMANAGER_ROUTINGINTERFACE_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_AUDIOMANAGER_ROUTINGINTERFACE_PROXY, AudiomanagerRoutinginterfaceProxy))
+#define AUDIOMANAGER_ROUTINGINTERFACE_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TYPE_AUDIOMANAGER_ROUTINGINTERFACE_PROXY, AudiomanagerRoutinginterfaceProxyClass))
+#define AUDIOMANAGER_ROUTINGINTERFACE_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_AUDIOMANAGER_ROUTINGINTERFACE_PROXY, AudiomanagerRoutinginterfaceProxyClass))
+#define IS_AUDIOMANAGER_ROUTINGINTERFACE_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_AUDIOMANAGER_ROUTINGINTERFACE_PROXY))
+#define IS_AUDIOMANAGER_ROUTINGINTERFACE_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_AUDIOMANAGER_ROUTINGINTERFACE_PROXY))
+
+typedef struct _AudiomanagerRoutinginterfaceProxy AudiomanagerRoutinginterfaceProxy;
+typedef struct _AudiomanagerRoutinginterfaceProxyClass AudiomanagerRoutinginterfaceProxyClass;
+typedef struct _AudiomanagerRoutinginterfaceProxyPrivate AudiomanagerRoutinginterfaceProxyPrivate;
+
+struct _AudiomanagerRoutinginterfaceProxy
+{
+ /*< private >*/
+ GDBusProxy parent_instance;
+ AudiomanagerRoutinginterfaceProxyPrivate *priv;
+};
+
+struct _AudiomanagerRoutinginterfaceProxyClass
+{
+ GDBusProxyClass parent_class;
+};
+
+GType audiomanager_routinginterface_proxy_get_type (void) G_GNUC_CONST;
+
+void audiomanager_routinginterface_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+AudiomanagerRoutinginterface *audiomanager_routinginterface_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error);
+AudiomanagerRoutinginterface *audiomanager_routinginterface_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routinginterface_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+AudiomanagerRoutinginterface *audiomanager_routinginterface_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error);
+AudiomanagerRoutinginterface *audiomanager_routinginterface_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+
+/* ---- */
+
+#define TYPE_AUDIOMANAGER_ROUTINGINTERFACE_SKELETON (audiomanager_routinginterface_skeleton_get_type ())
+#define AUDIOMANAGER_ROUTINGINTERFACE_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_AUDIOMANAGER_ROUTINGINTERFACE_SKELETON, AudiomanagerRoutinginterfaceSkeleton))
+#define AUDIOMANAGER_ROUTINGINTERFACE_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TYPE_AUDIOMANAGER_ROUTINGINTERFACE_SKELETON, AudiomanagerRoutinginterfaceSkeletonClass))
+#define AUDIOMANAGER_ROUTINGINTERFACE_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_AUDIOMANAGER_ROUTINGINTERFACE_SKELETON, AudiomanagerRoutinginterfaceSkeletonClass))
+#define IS_AUDIOMANAGER_ROUTINGINTERFACE_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_AUDIOMANAGER_ROUTINGINTERFACE_SKELETON))
+#define IS_AUDIOMANAGER_ROUTINGINTERFACE_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_AUDIOMANAGER_ROUTINGINTERFACE_SKELETON))
+
+typedef struct _AudiomanagerRoutinginterfaceSkeleton AudiomanagerRoutinginterfaceSkeleton;
+typedef struct _AudiomanagerRoutinginterfaceSkeletonClass AudiomanagerRoutinginterfaceSkeletonClass;
+typedef struct _AudiomanagerRoutinginterfaceSkeletonPrivate AudiomanagerRoutinginterfaceSkeletonPrivate;
+
+struct _AudiomanagerRoutinginterfaceSkeleton
+{
+ /*< private >*/
+ GDBusInterfaceSkeleton parent_instance;
+ AudiomanagerRoutinginterfaceSkeletonPrivate *priv;
+};
+
+struct _AudiomanagerRoutinginterfaceSkeletonClass
+{
+ GDBusInterfaceSkeletonClass parent_class;
+};
+
+GType audiomanager_routinginterface_skeleton_get_type (void) G_GNUC_CONST;
+
+AudiomanagerRoutinginterface *audiomanager_routinginterface_skeleton_new (void);
+
+
+/* ------------------------------------------------------------------------ */
+/* Declarations for org.genivi.audiomanager.routing.soundmanager */
+
+#define TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER (audiomanager_routing_soundmanager_get_type ())
+#define AUDIOMANAGER_ROUTING_SOUNDMANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER, AudiomanagerRoutingSoundmanager))
+#define IS_AUDIOMANAGER_ROUTING_SOUNDMANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER))
+#define AUDIOMANAGER_ROUTING_SOUNDMANAGER_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER, AudiomanagerRoutingSoundmanagerIface))
+
+struct _AudiomanagerRoutingSoundmanager;
+typedef struct _AudiomanagerRoutingSoundmanager AudiomanagerRoutingSoundmanager;
+typedef struct _AudiomanagerRoutingSoundmanagerIface AudiomanagerRoutingSoundmanagerIface;
+
+struct _AudiomanagerRoutingSoundmanagerIface
+{
+ GTypeInterface parent_iface;
+
+ gboolean (*handle_async_abort) (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle);
+
+ gboolean (*handle_async_connect) (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_sourceID,
+ guint16 arg_sinkID,
+ gint arg_connectionFormat);
+
+ gboolean (*handle_async_disconnect) (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ guint16 arg_connectionID);
+
+ gboolean (*handle_async_set_sink_volume) (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ guint16 arg_sinkID,
+ gint16 arg_volume,
+ gint16 arg_ramp,
+ guint16 arg_time);
+
+ gboolean (*handle_async_set_source_state) (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ guint16 arg_sourceID,
+ gint arg_sourceState);
+
+};
+
+GType audiomanager_routing_soundmanager_get_type (void) G_GNUC_CONST;
+
+GDBusInterfaceInfo *audiomanager_routing_soundmanager_interface_info (void);
+guint audiomanager_routing_soundmanager_override_properties (GObjectClass *klass, guint property_id_begin);
+
+
+/* D-Bus method call completion functions: */
+void audiomanager_routing_soundmanager_complete_async_abort (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation,
+ gint16 error);
+
+void audiomanager_routing_soundmanager_complete_async_connect (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routing_soundmanager_complete_async_disconnect (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routing_soundmanager_complete_async_set_sink_volume (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation);
+
+void audiomanager_routing_soundmanager_complete_async_set_source_state (
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation);
+
+
+
+/* D-Bus method calls: */
+void audiomanager_routing_soundmanager_call_async_abort (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routing_soundmanager_call_async_abort_finish (
+ AudiomanagerRoutingSoundmanager *proxy,
+ gint16 *out_error,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routing_soundmanager_call_async_abort_sync (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ gint16 *out_error,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routing_soundmanager_call_async_connect (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_sourceID,
+ guint16 arg_sinkID,
+ gint arg_connectionFormat,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routing_soundmanager_call_async_connect_finish (
+ AudiomanagerRoutingSoundmanager *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routing_soundmanager_call_async_connect_sync (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_sourceID,
+ guint16 arg_sinkID,
+ gint arg_connectionFormat,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routing_soundmanager_call_async_disconnect (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routing_soundmanager_call_async_disconnect_finish (
+ AudiomanagerRoutingSoundmanager *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routing_soundmanager_call_async_disconnect_sync (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routing_soundmanager_call_async_set_sink_volume (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_sinkID,
+ gint16 arg_volume,
+ gint16 arg_ramp,
+ guint16 arg_time,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routing_soundmanager_call_async_set_sink_volume_finish (
+ AudiomanagerRoutingSoundmanager *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routing_soundmanager_call_async_set_sink_volume_sync (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_sinkID,
+ gint16 arg_volume,
+ gint16 arg_ramp,
+ guint16 arg_time,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routing_soundmanager_call_async_set_source_state (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_sourceID,
+ gint arg_sourceState,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean audiomanager_routing_soundmanager_call_async_set_source_state_finish (
+ AudiomanagerRoutingSoundmanager *proxy,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean audiomanager_routing_soundmanager_call_async_set_source_state_sync (
+ AudiomanagerRoutingSoundmanager *proxy,
+ guint16 arg_handle,
+ guint16 arg_sourceID,
+ gint arg_sourceState,
+ GCancellable *cancellable,
+ GError **error);
+
+
+
+/* ---- */
+
+#define TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY (audiomanager_routing_soundmanager_proxy_get_type ())
+#define AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY, AudiomanagerRoutingSoundmanagerProxy))
+#define AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY, AudiomanagerRoutingSoundmanagerProxyClass))
+#define AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY, AudiomanagerRoutingSoundmanagerProxyClass))
+#define IS_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY))
+#define IS_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_PROXY))
+
+typedef struct _AudiomanagerRoutingSoundmanagerProxy AudiomanagerRoutingSoundmanagerProxy;
+typedef struct _AudiomanagerRoutingSoundmanagerProxyClass AudiomanagerRoutingSoundmanagerProxyClass;
+typedef struct _AudiomanagerRoutingSoundmanagerProxyPrivate AudiomanagerRoutingSoundmanagerProxyPrivate;
+
+struct _AudiomanagerRoutingSoundmanagerProxy
+{
+ /*< private >*/
+ GDBusProxy parent_instance;
+ AudiomanagerRoutingSoundmanagerProxyPrivate *priv;
+};
+
+struct _AudiomanagerRoutingSoundmanagerProxyClass
+{
+ GDBusProxyClass parent_class;
+};
+
+GType audiomanager_routing_soundmanager_proxy_get_type (void) G_GNUC_CONST;
+
+void audiomanager_routing_soundmanager_proxy_new (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+AudiomanagerRoutingSoundmanager *audiomanager_routing_soundmanager_proxy_new_finish (
+ GAsyncResult *res,
+ GError **error);
+AudiomanagerRoutingSoundmanager *audiomanager_routing_soundmanager_proxy_new_sync (
+ GDBusConnection *connection,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+void audiomanager_routing_soundmanager_proxy_new_for_bus (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+AudiomanagerRoutingSoundmanager *audiomanager_routing_soundmanager_proxy_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error);
+AudiomanagerRoutingSoundmanager *audiomanager_routing_soundmanager_proxy_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusProxyFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+
+/* ---- */
+
+#define TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON (audiomanager_routing_soundmanager_skeleton_get_type ())
+#define AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON, AudiomanagerRoutingSoundmanagerSkeleton))
+#define AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON, AudiomanagerRoutingSoundmanagerSkeletonClass))
+#define AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON, AudiomanagerRoutingSoundmanagerSkeletonClass))
+#define IS_AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON))
+#define IS_AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_AUDIOMANAGER_ROUTING_SOUNDMANAGER_SKELETON))
+
+typedef struct _AudiomanagerRoutingSoundmanagerSkeleton AudiomanagerRoutingSoundmanagerSkeleton;
+typedef struct _AudiomanagerRoutingSoundmanagerSkeletonClass AudiomanagerRoutingSoundmanagerSkeletonClass;
+typedef struct _AudiomanagerRoutingSoundmanagerSkeletonPrivate AudiomanagerRoutingSoundmanagerSkeletonPrivate;
+
+struct _AudiomanagerRoutingSoundmanagerSkeleton
+{
+ /*< private >*/
+ GDBusInterfaceSkeleton parent_instance;
+ AudiomanagerRoutingSoundmanagerSkeletonPrivate *priv;
+};
+
+struct _AudiomanagerRoutingSoundmanagerSkeletonClass
+{
+ GDBusInterfaceSkeletonClass parent_class;
+};
+
+GType audiomanager_routing_soundmanager_skeleton_get_type (void) G_GNUC_CONST;
+
+AudiomanagerRoutingSoundmanager *audiomanager_routing_soundmanager_skeleton_new (void);
+
+
+/* ---- */
+
+#define TYPE_OBJECT (object_get_type ())
+#define OBJECT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_OBJECT, Object))
+#define IS_OBJECT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_OBJECT))
+#define OBJECT_GET_IFACE(o) (G_TYPE_INSTANCE_GET_INTERFACE ((o), TYPE_OBJECT, Object))
+
+struct _Object;
+typedef struct _Object Object;
+typedef struct _ObjectIface ObjectIface;
+
+struct _ObjectIface
+{
+ GTypeInterface parent_iface;
+};
+
+GType object_get_type (void) G_GNUC_CONST;
+
+AudiomanagerCommandinterface *object_get_audiomanager_commandinterface (Object *object);
+AudiomanagerRoutinginterface *object_get_audiomanager_routinginterface (Object *object);
+AudiomanagerRoutingSoundmanager *object_get_audiomanager_routing_soundmanager (Object *object);
+AudiomanagerCommandinterface *object_peek_audiomanager_commandinterface (Object *object);
+AudiomanagerRoutinginterface *object_peek_audiomanager_routinginterface (Object *object);
+AudiomanagerRoutingSoundmanager *object_peek_audiomanager_routing_soundmanager (Object *object);
+
+#define TYPE_OBJECT_PROXY (object_proxy_get_type ())
+#define OBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_OBJECT_PROXY, ObjectProxy))
+#define OBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TYPE_OBJECT_PROXY, ObjectProxyClass))
+#define OBJECT_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_OBJECT_PROXY, ObjectProxyClass))
+#define IS_OBJECT_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_OBJECT_PROXY))
+#define IS_OBJECT_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_OBJECT_PROXY))
+
+typedef struct _ObjectProxy ObjectProxy;
+typedef struct _ObjectProxyClass ObjectProxyClass;
+typedef struct _ObjectProxyPrivate ObjectProxyPrivate;
+
+struct _ObjectProxy
+{
+ /*< private >*/
+ GDBusObjectProxy parent_instance;
+ ObjectProxyPrivate *priv;
+};
+
+struct _ObjectProxyClass
+{
+ GDBusObjectProxyClass parent_class;
+};
+
+GType object_proxy_get_type (void) G_GNUC_CONST;
+ObjectProxy *object_proxy_new (GDBusConnection *connection, const gchar *object_path);
+
+#define TYPE_OBJECT_SKELETON (object_skeleton_get_type ())
+#define OBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_OBJECT_SKELETON, ObjectSkeleton))
+#define OBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TYPE_OBJECT_SKELETON, ObjectSkeletonClass))
+#define OBJECT_SKELETON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_OBJECT_SKELETON, ObjectSkeletonClass))
+#define IS_OBJECT_SKELETON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_OBJECT_SKELETON))
+#define IS_OBJECT_SKELETON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_OBJECT_SKELETON))
+
+typedef struct _ObjectSkeleton ObjectSkeleton;
+typedef struct _ObjectSkeletonClass ObjectSkeletonClass;
+typedef struct _ObjectSkeletonPrivate ObjectSkeletonPrivate;
+
+struct _ObjectSkeleton
+{
+ /*< private >*/
+ GDBusObjectSkeleton parent_instance;
+ ObjectSkeletonPrivate *priv;
+};
+
+struct _ObjectSkeletonClass
+{
+ GDBusObjectSkeletonClass parent_class;
+};
+
+GType object_skeleton_get_type (void) G_GNUC_CONST;
+ObjectSkeleton *object_skeleton_new (const gchar *object_path);
+void object_skeleton_set_audiomanager_commandinterface (ObjectSkeleton *object, AudiomanagerCommandinterface *interface_);
+void object_skeleton_set_audiomanager_routinginterface (ObjectSkeleton *object, AudiomanagerRoutinginterface *interface_);
+void object_skeleton_set_audiomanager_routing_soundmanager (ObjectSkeleton *object, AudiomanagerRoutingSoundmanager *interface_);
+
+/* ---- */
+
+#define TYPE_OBJECT_MANAGER_CLIENT (object_manager_client_get_type ())
+#define OBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TYPE_OBJECT_MANAGER_CLIENT, ObjectManagerClient))
+#define OBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), TYPE_OBJECT_MANAGER_CLIENT, ObjectManagerClientClass))
+#define OBJECT_MANAGER_CLIENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TYPE_OBJECT_MANAGER_CLIENT, ObjectManagerClientClass))
+#define IS_OBJECT_MANAGER_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TYPE_OBJECT_MANAGER_CLIENT))
+#define IS_OBJECT_MANAGER_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), TYPE_OBJECT_MANAGER_CLIENT))
+
+typedef struct _ObjectManagerClient ObjectManagerClient;
+typedef struct _ObjectManagerClientClass ObjectManagerClientClass;
+typedef struct _ObjectManagerClientPrivate ObjectManagerClientPrivate;
+
+struct _ObjectManagerClient
+{
+ /*< private >*/
+ GDBusObjectManagerClient parent_instance;
+ ObjectManagerClientPrivate *priv;
+};
+
+struct _ObjectManagerClientClass
+{
+ GDBusObjectManagerClientClass parent_class;
+};
+
+GType object_manager_client_get_type (void) G_GNUC_CONST;
+
+GType object_manager_client_get_proxy_type (GDBusObjectManagerClient *manager, const gchar *object_path, const gchar *interface_name, gpointer user_data);
+
+void object_manager_client_new (
+ GDBusConnection *connection,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GDBusObjectManager *object_manager_client_new_finish (
+ GAsyncResult *res,
+ GError **error);
+GDBusObjectManager *object_manager_client_new_sync (
+ GDBusConnection *connection,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+void object_manager_client_new_for_bus (
+ GBusType bus_type,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+GDBusObjectManager *object_manager_client_new_for_bus_finish (
+ GAsyncResult *res,
+ GError **error);
+GDBusObjectManager *object_manager_client_new_for_bus_sync (
+ GBusType bus_type,
+ GDBusObjectManagerClientFlags flags,
+ const gchar *name,
+ const gchar *object_path,
+ GCancellable *cancellable,
+ GError **error);
+
+
+G_END_DECLS
+
+#endif /* __AUDIO_MANAGER_INTERFACE_H__ */
diff --git a/src/dbus/command_interface.xml b/src/dbus/command_interface.xml
new file mode 100644
index 0000000..e33d7fb
--- /dev/null
+++ b/src/dbus/command_interface.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<node name="/" xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
+ <interface name="org.genivi.audiomanager.commandinterface">
+ <method name="Connect">
+ <arg type="q" name="sourceID" direction="in"/>
+ <arg type="q" name="sinkID" direction="in"/>
+ <arg type="n" name="result" direction="out"/> <!-- method return code (am_Error_e) -->
+ <arg type="q" name="mainConnectionID" direction="out"/>
+ </method>
+ <method name="Disconnect">
+ <arg type="q" name="mainConnectionID" direction="in"/>
+ <arg type="n" name="result" direction="out"/> <!-- method return code (am_Error_e) -->
+ </method>
+ <method name="SetVolume">
+ <arg type="q" name="sinkID" direction="in"/>
+ <arg type="n" name="volume" direction="in"/>
+ <arg type="n" name="result" direction="out"/>
+ </method>
+ <method name="VolumeStep">
+ <arg type="q" name="sinkID" direction="in"/>
+ <arg type="n" name="volumeStep" direction="in"/>
+ <arg type="n" name="result" direction="out"/>
+ </method>
+ <method name="SetSinkMuteState">
+ <arg type="q" name="sinkID" direction="in"/>
+ <arg type="n" name="muteState" direction="in"/>
+ <arg type="n" name="result" direction="out"/>
+ </method>
+ <method name="GetListMainConnections">
+ <arg type="n" name="result" direction="out"/>
+ <arg type="a(qqqnn)" name="listConnections" direction="out"/>
+ </method>
+ <method name="GetListMainSinks">
+ <arg type="n" name="result" direction="out"/> <!-- method return code (am_Error_e) -->
+ <arg type="a(qs(nn)nnq)" name="listMainSinks" direction="out"/>
+ <!-- uint16 sinkID; std::string name; am_Availability_s availability; am_mainVolume_t volume; am_MuteState_e muteState; am_sinkClass_t sinkClassID; -->
+ </method>
+ <signal name="NewMainConnection">
+ <arg type="(qqqnn)" name="mainConnection" direction="out"/>
+ </signal>
+ <signal name="RemovedMainConnection">
+ <arg type="q" name="mainConnectionId" direction="out"/>
+ </signal>
+ <signal name="MainConnectionStateChanged">
+ <arg type="q" name="connectionID" direction="out"/>
+ <arg type="n" name="connectionState" direction="out"/>
+ </signal>
+ <signal name="VolumeChanged">
+ <arg type="q" name="sinkID" direction="out"/>
+ <arg type="n" name="volume" direction="out"/>
+ </signal>
+ <signal name="SinkMuteStateChanged">
+ <arg type="q" name="sinkID" direction="out"/>
+ <arg type="n" name="muteState" direction="out"/>
+ </signal>
+ <signal name="SystemPropertyChanged">
+ <arg type="(nn)" name="SystemProperty" direction="out"/>
+ </signal>
+ </interface>
+</node>
diff --git a/src/dbus/generate_dbus.sh b/src/dbus/generate_dbus.sh
new file mode 100755
index 0000000..cacf518
--- /dev/null
+++ b/src/dbus/generate_dbus.sh
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#!/bin/sh
+echo "generate dbus c code"
+gdbus-codegen \
+ --interface-prefix org.genivi. \
+ --generate-c-code audio_manager_interface \
+ --c-generate-object-manager \
+ command_interface.xml routing_interface.xml sound_manager_interface.xml
+
+echo "end generate dbus c code"
diff --git a/src/dbus/routing_interface.xml b/src/dbus/routing_interface.xml
new file mode 100644
index 0000000..a91d6eb
--- /dev/null
+++ b/src/dbus/routing_interface.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE node PUBLIC
+ "-//freedesktop//DTD D-Bus Object Introspection 1.0//EN"
+ "http://standards.freedesktop.org/dbus/1.0/introspect.dtd">
+
+<node>
+ <interface name="org.genivi.audiomanager.routinginterface">
+ <method name="ackConnect">
+ <arg name="handle" type="q" direction="in" />
+ <arg name="connectionID" type="q" direction="in" />
+ <arg name="error" type="q" direction="in" />
+ </method>
+ <method name="ackDisconnect">
+ <arg name="handle" type="q" direction="in" />
+ <arg name="connectionID" type="q" direction="in" />
+ <arg name="error" type="q" direction="in" />
+ </method>
+ <method name="ackSetSourceState">
+ <arg name="handle" type="q" direction="in" />
+ <arg name="error" type="q" direction="in" />
+ </method>
+ <method name="ackSetSinkVolume">
+ <arg name="handle" type="q" direction="in" />
+ <arg name="volume" type="n" direction="in" />
+ <arg name="error" type="q" direction="in" />
+ </method>
+ <method name="registerSink">
+ <arg name="sinkData" type="(qsqinb(ii)nna(in)aia(in)a(iin)a(iin))" direction="in" /> <!-- am_sinkID_t sinkID; std::string name; am_domainID_t domainID; am_sinkClass_t sinkClassID; am_volume_t volume; bool visible; am_Availability_s available; am_MuteState_e muteState;am_mainVolume_t mainVolume; std::vector<am_SoundProperty_s> listSoundProperties; std::vector<am_CustomAvailabilityReason_t> listConnectionFormats; std::vector<am_MainSoundProperty_s> listMainSoundProperties; -->
+ <arg name="sinkID" type="q" direction="out" />
+ <arg name="error" type="q" direction="out" />
+ </method>
+ <method name="deregisterSink">
+ <arg name="sinkID" type="q" direction="in" />
+ <arg name="error" type="i" direction="out" />
+ </method>
+ <method name="registerSource">
+ <arg name="sourceData" type="(qqsqinb(ii)qa(in)aia(in)a(iin)a(iin))" direction="in" /> <!-- am_sourceID_t sourceID; am_domainID_t domainID; std::string name; am_sourceClass_t sourceClassID; am_SourceState_e sourceState; am_volume_t volume; bool visible; am_Availability_s available; am_InterruptState_e interruptState; std::vector<am_SoundProperty_s> listSoundProperties; std::vector<am_CustomAvailabilityReason_t> listConnectionFormats; std::vector<am_MainSoundProperty_s> listMainSoundProperties; -->
+ <arg name="sourceID" type="q" direction="out" />
+ <arg name="error" type="q" direction="out" />
+ </method>
+ <method name="deregisterSource">
+ <arg name="sourceID" type="q" direction="in" />
+ <arg name="error" type="q" direction="out" />
+ </method>
+ <method name="hookInterruptStatusChange">
+ <arg name="sourceID" type="q" direction="in" />
+ <arg name="interruptState" type="q" direction="in" />
+ </method>
+ <method name="hookSourceAvailablityStatusChange">
+ <arg name="sourceID" type="q" direction="in" />
+ <arg name="availability" type="(nn)" direction="in"/>
+ </method>
+ <method name="confirmRoutingReady">
+ <arg name="domainID" type="q" direction="in" />
+ </method>
+ <method name="confirmRoutingRundown">
+ <arg name="domainID" type="q" direction="in" />
+ </method>
+ <method name="ackSetVolumes">
+ <arg name="handle" type="q" direction="in" />
+ <arg name="listvolumes" type="a(nqqnq)" direction="in" />
+ <arg name="error" type="q" direction="in" />
+ </method>
+ <method name="ackSinkNotificationConfiguration">
+ <arg name="handle" type="q" direction="in" />
+ <arg name="error" type="q" direction="in" />
+ </method>
+ <method name="ackSourceNotificationConfiguration">
+ <arg name="handle" type="q" direction="in" />
+ <arg name="error" type="q" direction="in" />
+ </method>
+ <method name="registerDomain">
+ <arg name="domaindata" type="(qsssbbn)" direction="in" /> <!-- am_domainID_t domainID; std::string name; std::string busname; std::string nodename; bool early; bool complete; am_DomainState_e state; -->
+ <arg name="returnBusname" type="s" direction="in" /> <!-- the busname for all communication to this domain -->
+ <arg name="returnPath" type="s" direction="in" /> <!-- the path for all communication to this domain -->
+ <arg name="returnInterface" type="s" direction="in" /> <!-- the interface for all communication to this domain -->
+ <arg name="domainid" type="q" direction="out" />
+ <arg name="error" type="q" direction="out" />
+ </method>
+ <signal name="setRoutingReady">
+ </signal>
+ <signal name="setRoutingRundown">
+ </signal>
+ </interface>
+</node>
diff --git a/src/dbus/sound_manager_interface.xml b/src/dbus/sound_manager_interface.xml
new file mode 100644
index 0000000..df7df04
--- /dev/null
+++ b/src/dbus/sound_manager_interface.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE node PUBLIC
+ "-//freedesktop//DTD D-Bus Object Introspection 1.0//EN"
+ "http://standards.freedesktop.org/dbus/1.0/introspect.dtd">
+
+<node>
+ <interface name='org.genivi.audiomanager.routing.soundmanager'>
+ <method name='asyncAbort'>
+ <arg name='handle' type='q' direction='in' />
+ <arg name='error' type='n' direction='out' />
+ </method>
+ <method name='asyncConnect'>
+ <arg name='handle' type='q' direction='in' />
+ <arg name='connectionID' type='q' direction='in' />
+ <arg name='sourceID' type='q' direction='in' />
+ <arg name='sinkID' type='q' direction='in' />
+ <arg name='connectionFormat' type='i' direction='in' />
+ </method>
+ <method name='asyncDisconnect'>
+ <arg name='handle' type='q' direction='in' />
+ <arg name='connectionID' type='q' direction='in' />
+ </method>
+ <method name='asyncSetSinkVolume'>
+ <arg name='handle' type='q' direction='in' />
+ <arg name='sinkID' type='q' direction='in' />
+ <arg name='volume' type='n' direction='in' />
+ <arg name='ramp' type='n' direction='in' />
+ <arg name='time' type='q' direction='in' />
+ </method>
+ <method name='asyncSetSourceState'>
+ <arg name='handle' type='q' direction='in' />
+ <arg name='sourceID' type='q' direction='in' />
+ <arg name='sourceState' type='i' direction='in' />
+ </method>
+ </interface>
+</node>
diff --git a/src/export.map b/src/export.map
new file mode 100644
index 0000000..f3961c0
--- /dev/null
+++ b/src/export.map
@@ -0,0 +1 @@
+{ global: afbBindingV*; local: *; }; \ No newline at end of file
diff --git a/src/sm-error.h b/src/sm-error.h
new file mode 100644
index 0000000..a963d47
--- /dev/null
+++ b/src/sm-error.h
@@ -0,0 +1,52 @@
+#ifndef SM_ERROR_H
+#define SM_ERROR_H
+
+char* get_response_audiomanager_massage_error(int am_error_code)
+{
+ switch (am_error_code){
+ case 0:
+ return "OK";
+ case 1:
+ return "unknown error";
+ case 2:
+ return "value out of range";
+ case 3:
+ return "not used";
+ case 4:
+ return "database error occured";
+ case 5:
+ return "the desired object already exists";
+ case 6:
+ return "there is no change";
+ case 7:
+ return "the desired action is not possible";
+ case 8:
+ return "the desired object is non existent";
+ case 9:
+ return "the asynchronous action was aborted";
+ case 10:
+ return "connectionFormat is not selected";
+ case 11:
+ return "communication error";
+ case 100:
+ return "desired event doesn't exist";
+ default:
+ return "Audio Manager responsed unknown error number";
+ }
+}
+
+char* get_source_state_key(int am_source_state){
+ switch (am_source_state){
+ case 0:
+ return "unknown";
+ case 1:
+ return "on";
+ case 2:
+ return "off";
+ case 3:
+ return "paused";
+ default:
+ return "";
+ }
+}
+#endif
diff --git a/src/sm-helper.c b/src/sm-helper.c
new file mode 100644
index 0000000..3300d67
--- /dev/null
+++ b/src/sm-helper.c
@@ -0,0 +1,231 @@
+/*
+ * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "sm-helper.h"
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include <json-c/json.h>
+#include <stdarg.h>
+
+REQ_ERROR get_value_uint16(const struct afb_req request, const char *source, uint16_t *out_id)
+{
+ char* endptr;
+ const char* tmp = afb_req_value (request, source);
+ if(!tmp)
+ {
+ return REQ_FAIL;
+ }
+ long tmp_id = strtol(tmp,&endptr,10);
+
+ /* error check of range */
+ if( (tmp_id > UINT16_MAX) || (tmp_id < 0) )
+ {
+ return OUT_RANGE;
+ }
+ if(*endptr != '\0')
+ {
+ return NOT_NUMBER;
+ }
+
+ *out_id = (uint16_t)tmp_id;
+ return REQ_OK;
+}
+
+REQ_ERROR get_value_int16(const struct afb_req request, const char *source, int16_t *out_id)
+{
+ char* endptr;
+ const char* tmp = afb_req_value (request, source);
+ if(!tmp)
+ {
+ return REQ_FAIL;
+ }
+ long tmp_id = strtol(tmp,&endptr,10);
+
+ /* error check of range */
+ if( (tmp_id > INT16_MAX) || (tmp_id < INT16_MIN) )
+ {
+ return OUT_RANGE;
+ }
+ if(*endptr != '\0')
+ {
+ return NOT_NUMBER;
+ }
+
+ *out_id = (int16_t)tmp_id;
+ return REQ_OK;
+}
+
+REQ_ERROR get_value_int32(const struct afb_req request, const char *source, int32_t *out_id)
+{
+ char* endptr;
+ const char* tmp = afb_req_value (request, source);
+ if(!tmp)
+ {
+ return REQ_FAIL;
+ }
+ long tmp_id = strtol(tmp,&endptr,10);
+
+ /* error check of range */
+ if( (tmp_id > INT32_MAX) || (tmp_id < INT32_MIN) )
+ {
+ return OUT_RANGE;
+ }
+ if(*endptr != '\0')
+ {
+ return NOT_NUMBER;
+ }
+
+ *out_id = (int32_t)tmp_id;
+ return REQ_OK;
+}
+
+void sm_add_object_to_json_object(struct json_object* j_obj, int count,...)
+{
+ va_list args;
+ va_start(args, count);
+ for(int i = 0; i < count; ++i )
+ {
+ char *key = va_arg(args, char*);
+ int value = va_arg(args, int);
+ json_object_object_add(j_obj, key, json_object_new_int((int32_t)value));
+ ++i;
+ }
+ va_end(args);
+}
+
+void sm_add_object_to_json_object_func(struct json_object* j_obj, const char* verb_name, int count, ...)
+{
+ va_list args;
+ va_start(args, count);
+
+ json_object_object_add(j_obj,"verb", json_object_new_string(verb_name));
+
+ for(int i = 0; i < count; ++i )
+ {
+ char *key = va_arg(args, char*);
+ int value = va_arg(args, int);
+ json_object_object_add(j_obj, key, json_object_new_int((int32_t)value));
+ ++i;
+ }
+ va_end(args);
+}
+
+int sm_search_event_name_index(const char* value)
+{
+ size_t buf_size = 50;
+ size_t size = sizeof cmd_evlist / sizeof *cmd_evlist;
+ int ret = -1;
+ for(size_t i = 0 ; i < size ; ++i)
+ {
+ if(!strncmp(value, cmd_evlist[i], buf_size))
+ {
+ ret = i;
+ break;
+ }
+ }
+ return ret;
+}
+
+int sm_search_routing_event_name_index(const char* value)
+{
+ size_t buf_size = 50;
+ size_t size = sizeof route_evlist / sizeof *route_evlist;
+ int ret = -1;
+ for(size_t i = 0 ; i < size ; ++i)
+ {
+ if(!strncmp(value, route_evlist[i], buf_size))
+ {
+ ret = i;
+ break;
+ }
+ }
+ return ret;
+}
+
+GVariant* create_source_data(guint16 sourceID, guint16 domainID, const char* appname, guint16 sourceClassID,
+ gint32 sourceState, gint16 volume, gboolean visible, struct availability_s availables,
+ guint16 interrupt, struct sound_property_s soundPropertyList, gint32 connectionFormatList,
+ struct main_sound_property_s mainPropertyList, struct notification_config_s NConfRouting,
+ struct notification_config_s NConfCommand)
+{
+ GVariantBuilder builder;
+
+ AFB_DEBUG("create sourceData %d", __LINE__);
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("(qqsqinb(ii)qa(in)aia(in)a(iin)a(iin))"));
+ g_variant_builder_add (&builder, "q", sourceID);
+ g_variant_builder_add (&builder, "q", domainID);
+ g_variant_builder_add (&builder, "s", appname);
+ g_variant_builder_add (&builder, "q", sourceClassID);
+ g_variant_builder_add (&builder, "i", sourceState);
+ g_variant_builder_add (&builder, "n", volume);
+ g_variant_builder_add (&builder, "b", visible);
+ g_variant_builder_add (&builder, "(ii)", availables.availability, availables.avalilable_reason);
+ g_variant_builder_add (&builder, "q", interrupt);
+
+ g_variant_builder_open(&builder, G_VARIANT_TYPE("a(in)"));
+ g_variant_builder_open(&builder, G_VARIANT_TYPE("(in)"));
+ g_variant_builder_add (&builder, "i", soundPropertyList.type);
+ g_variant_builder_add (&builder, "n", soundPropertyList.value);
+ g_variant_builder_close(&builder);
+ g_variant_builder_close (&builder);
+
+ g_variant_builder_open(&builder, G_VARIANT_TYPE("ai"));
+ g_variant_builder_add (&builder, "i", connectionFormatList);
+ g_variant_builder_close (&builder);
+
+ g_variant_builder_open(&builder, G_VARIANT_TYPE("a(in)"));
+ g_variant_builder_open(&builder, G_VARIANT_TYPE("(in)"));
+ g_variant_builder_add (&builder, "i", mainPropertyList.type);
+ g_variant_builder_add (&builder, "n", mainPropertyList.value);
+ g_variant_builder_close (&builder);
+ g_variant_builder_close(&builder);
+
+ g_variant_builder_open(&builder, G_VARIANT_TYPE("a(iin)"));
+ g_variant_builder_open(&builder, G_VARIANT_TYPE("(iin)"));
+ g_variant_builder_add (&builder, "i", NConfRouting.type);
+ g_variant_builder_add (&builder, "i", NConfRouting.status);
+ g_variant_builder_add (&builder, "n", NConfRouting.parameter);
+ g_variant_builder_close(&builder);
+ g_variant_builder_close (&builder);
+
+
+ g_variant_builder_open(&builder, G_VARIANT_TYPE("a(iin)"));
+ g_variant_builder_open(&builder, G_VARIANT_TYPE("(iin)"));
+ g_variant_builder_add (&builder, "i", NConfCommand.type);
+ g_variant_builder_add (&builder, "i", NConfCommand.status);
+ g_variant_builder_add (&builder, "n", NConfCommand.parameter);
+ g_variant_builder_close(&builder);
+ g_variant_builder_close (&builder);
+
+ AFB_DEBUG("created sourceData %d", __LINE__);
+ return g_variant_builder_end (&builder);
+}
+
+GVariant* create_domain_data(struct domain_data* data)
+{
+ GVariantBuilder builder;
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("(qsssbbn)"));
+ g_variant_builder_add (&builder, "q", data->domainID);
+ g_variant_builder_add (&builder, "s", data->name);
+ g_variant_builder_add (&builder, "s", data->busname);
+ g_variant_builder_add (&builder, "s", data->nodename);
+ g_variant_builder_add (&builder, "b", data->early);
+ g_variant_builder_add (&builder, "b", data->complete);
+ g_variant_builder_add (&builder, "n", data->state);
+ AFB_DEBUG("created domainData %d", __LINE__);
+ return g_variant_builder_end (&builder);
+}
diff --git a/src/sm-helper.h b/src/sm-helper.h
new file mode 100644
index 0000000..f6a3601
--- /dev/null
+++ b/src/sm-helper.h
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef AM_HELPER_H
+#define AM_HELPER_H
+#define _GNU_SOURCE
+#define AFB_BINDING_VERSION 2
+#include <afb/afb-binding.h>
+#include <stdint.h>
+#include <glib.h>
+//#include <errno.h>
+
+typedef enum REQ_ERROR
+{
+ REQ_FAIL = -1,
+ REQ_OK=0,
+ NOT_NUMBER,
+ OUT_RANGE
+}REQ_ERROR;
+
+static const char* cmd_evlist[] = {
+ "volumeChanged",
+ "newMainConnection",
+ "removedMainConnection",
+ "sinkMuteStateChanged",
+ "mainConnectionStateChanged"
+};
+
+static const char* route_evlist[] = {
+ /* Routing event*/
+ "setRoutingReady",
+ "setRoutingRundown",
+ "asyncConnect",
+ "asyncSetSourceState",
+ "asyncDisconnect"
+};
+
+struct sound_property_s{
+ guint16 type;
+ gint16 value;
+};
+struct availability_s{
+ gint32 availability;
+ gint32 avalilable_reason;
+};
+struct notification_config_s{
+ gint32 type;
+ gint32 status;
+ gint16 parameter;
+};
+struct main_sound_property_s{
+ gint32 type; /* am_CustomMainSoundPropertyType_t */
+ gint16 value;
+};
+
+struct domain_data{
+ guint16 domainID;
+ gchar* name;
+ gchar* busname;
+ gchar* nodename;
+ gboolean early;
+ gboolean complete;
+ gint16 state;
+};
+
+REQ_ERROR get_value_uint16(const struct afb_req request, const char *source, uint16_t *out_id);
+REQ_ERROR get_value_int16(const struct afb_req request, const char *source, int16_t *out_id);
+REQ_ERROR get_value_int32(const struct afb_req request, const char *source, int32_t *out_id);
+void sm_add_object_to_json_object(struct json_object* j_obj, int count, ...);
+void sm_add_object_to_json_object_func(struct json_object* j_obj, const char* verb_name, int count, ...);
+int sm_search_event_name_index(const char* value);
+int sm_search_routing_event_name_index(const char* value);
+GVariant* create_source_data(guint16 sourceID, guint16 domainID, const char* appname, guint16 sourceClassID,
+ gint32 sourceState, gint16 volume, gboolean visible, struct availability_s availables,
+ guint16 interrupt, struct sound_property_s soundPropertyList, gint32 connectionFormatList,
+ struct main_sound_property_s mainPropertyList, struct notification_config_s NConfRouting,
+ struct notification_config_s NConfCommand);
+GVariant* create_domain_data(struct domain_data*);
+
+
+#endif /*AM_HELPER_H*/ \ No newline at end of file
diff --git a/src/soundmanager.c b/src/soundmanager.c
new file mode 100644
index 0000000..030b1ab
--- /dev/null
+++ b/src/soundmanager.c
@@ -0,0 +1,1570 @@
+/*
+ * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define _GNU_SOURCE
+#define AFB_BINDING_VERSION 2
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <json-c/json.h>
+#include <glib.h>
+#include <pthread.h>
+#include <afb/afb-binding.h>
+#include "sm-error.h"
+#include "sm-helper.h"
+#include "dbus/audio_manager_interface.h"
+
+#define AM_NAME "org.genivi.audiomanager"
+#define AM_CMD_PATH "/org/genivi/audiomanager/commandinterface"
+#define AM_ROUTE_PATH "/org/genivi/audiomanager/routinginterface"
+#define AM_ROUTE_NAME "org.genivi.audiomanager.routinginterface"
+#define SOUND_MANAGER_RETURN_INTERFACE "org.genivi.audiomanager.routing.soundmanager"
+#define SOUND_MANAGER_BUS_NAME "org.genivi.audiomanager.routing.soundmanager"
+#define SOUND_MANAGER_PATH "/org/genivi/audiomanager/routing/soundmanager"
+
+#define COMMAND_EVENT_NUM 10
+#define ROUTING_EVENT_NUM 10
+#define DEFAULT_SINK 1
+#define DEFAULT_SOURCE_CLASS_ID 100
+#define DYNAMIC_DOMAIN_ID 100
+#define DEFAULT_DOMAIN_ID 0
+#define DYNAMIC_SOURCE_ID 0
+#define DEFAULT_VOLUME 100
+#define DEFAULT_AVAILABLES 1
+#define DEFAULT_CONNECTION_FORMAT 2
+#define DEFAULT_INTERRUPT 0
+#define DEFAULT_SOURCE_STATE 2
+#define DS_CONTROLLED 1
+
+#define EVENT_SUBSCRIBE_ERROR_CODE 100
+
+const static struct afb_binding_interface *afbitf;
+static AudiomanagerCommandinterface *am_cmd_bus;
+static AudiomanagerRoutinginterface *am_route_bus;
+static AudiomanagerRoutingSoundmanager *sm_adapter;
+static AudiomanagerRoutingSoundmanagerIface* sm_itf;
+static GDBusConnection* system_conn = NULL;
+
+static GMainLoop *loop = NULL;
+static guint16 SOUNDMANAGER_DOMAIN_ID;
+/* To Do hash table is better */
+struct event{
+ char* name;
+ struct afb_event* event;
+ };
+static struct event command_event_list[COMMAND_EVENT_NUM];
+static struct event routing_event_list[ROUTING_EVENT_NUM];
+
+static struct afb_event ev_new_connection;
+static struct afb_event ev_removed_main_connection;
+static struct afb_event ev_volume_changed;
+static struct afb_event ev_sink_mute_state_changed;
+static struct afb_event ev_main_connection_state_changed;
+
+/* Routing interface event */
+static struct afb_event ev_set_routing_ready;
+static struct afb_event ev_set_routing_rundown;
+static struct afb_event ev_async_connect;
+static struct afb_event ev_async_disconnect;
+static struct afb_event ev_async_set_source_state;
+
+static const char _source_id[] = "sourceID";
+static const char _sink_id[] = "sinkID" ;
+static const char _sink_name[] = "sinkName" ;
+static const char _main_connection_id[] = "mainConnectionID";
+static const char _delay[] = "delay";
+static const char _connection_state[] = "connectionState";
+static const char _connection_id[] = "connectionID";
+static const char _volume[] = "volume";
+static const char _volume_step[] = "volumeStep";
+static const char _mute_state[] = "muteState";
+
+static const char _domain_id[] = "domainID";
+static const char _handle[] = "handle";
+static const char _appname[] = "appname";
+static const char _ramp[] = "ramp";
+static const char _time[] = "time";
+static const char _source_state[] = "sourceState";
+static const char _source_class_id[] = "sourceClassID";
+static const char _sink_class_id[] = "sinkClassID";
+static const char _error[] = "error";
+static const char _sink_data[] = "sinkData";
+static const char _source_data[] = "sourceData";
+static const char _interrupt_state[] = "interruptState";
+static const char _availability[] = "availability";
+static const char _list_volumes[] = "listVolumes";
+static const char _payload[] = "payload";
+static const char _connection_format[] = "connectionFormat";
+/*
+********** Method of Sound Manager (API) **********
+*/
+
+/**
+ * Call "connect" function of Audio Manager.
+ * Getting resource right to output audio stream.
+ * Please input following keys with value into json string object in argument.
+ * In case of using libsoundmanager,
+ * json_object *jobj = json_object_new_object();
+ * json_object_object_add(jobj, "sourceID", json_object_new_int(100));
+ * json_object_object_add(jobj, "sinkID", json_object_new_int(100));
+ * call("connect", jobj);
+ *
+ * The order of arguments is not important.
+ *
+ * #### Parameters
+ * Request key
+ * - sourceID : Source ID getting in return value in registerSource or appname.
+ * - sinkID : Sink ID. This should be more than 0. If no request, defalut value is set by sound manager
+ *
+ * This will be changed in near future because these arguments should be aliased like
+ * sinkID:100 -> sinkID:"speaker"
+ *
+ * This will be modified after integrating
+ *
+ * #### Rreturn
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message.
+ *
+ * #### Note
+ * sourceID and sinkID should be more than 0
+ *
+ */
+static void connect (struct afb_req request)
+{
+ AFB_DEBUG("call %s", __FUNCTION__);
+ guint16 source_id = 0, sink_id = 0;
+ guint16 main_connectionID = 0;
+ gint16 ret = -1;
+ REQ_ERROR req_err1 = REQ_FAIL;
+ REQ_ERROR req_err2 = REQ_FAIL;
+ GError *err = NULL;
+
+ req_err1 = get_value_uint16(request, _source_id, &source_id);
+ /* ToDo: Hardware abstraction for application user is needed.
+ select appname(speaker) or sourceID(sinkID). If appname is desired, it changes to sourceID(sinkID) */
+
+ const char* default_sink = afb_req_value (request, _sink_id);
+ if(default_sink != NULL){
+ if((strlen("default") == strlen(default_sink)) &&
+ (0 == strncmp("default", default_sink, strlen("default")))){
+ sink_id = DEFAULT_SINK;
+ req_err2 = REQ_OK;
+ }
+ else{
+ req_err2 = get_value_uint16(request, _sink_id, &sink_id);
+ }
+ }
+
+ if((req_err1 != REQ_OK) || (req_err2 != REQ_OK))
+ {
+ AFB_INFO("get_value_uint16 source ret = %d,sink ret = %d", source_id, sink_id);
+ AFB_NOTICE("wrong request");
+ afb_req_fail(request,"wrong-request",NULL);
+ return;
+ }
+
+ audiomanager_commandinterface_call_connect_sync(
+ am_cmd_bus,
+ source_id,
+ sink_id,
+ &ret,
+ &main_connectionID,
+ NULL, &err);
+
+ if(err != NULL)
+ {
+ afb_req_fail_f(request, "failed", "Unable to call %s", __FUNCTION__);
+ return;
+ }
+
+ /* ToDo Remember appname(key) and tie to sourceID(value) */
+
+ /*create response json object*/
+ struct json_object *res = json_object_new_object();
+ sm_add_object_to_json_object_func(res, __FUNCTION__, 4,
+ "error", ret,
+ _main_connection_id, main_connectionID);
+ char *info = get_response_audiomanager_massage_error(ret);
+ afb_req_success(request, res, info);
+}
+
+/**
+ * Call "disconnect" function of Audio Manager.
+ * Release resource right to output audio stream.
+ *
+ * #### Parameters
+ * Request key
+ * - sourceID : Source ID getting in return value in registerSource or appname.
+ *
+ *
+ * #### Rreturn
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message.
+ *
+ * #### Note
+ * sourceID should be more than 0
+ *
+ */
+static void disconnect (struct afb_req request)
+{
+ AFB_DEBUG("call %s", __FUNCTION__);
+
+ guint16 id;
+ gint16 ret;
+ REQ_ERROR req_err;
+ GError *err = NULL;
+
+ req_err = get_value_uint16(request, _main_connection_id, &id);
+ AFB_DEBUG( "requested %s = %d", _main_connection_id, id);
+
+ if(req_err != REQ_OK)
+ {
+ afb_req_fail(request,"wrong-request",afb_req_value (request, _main_connection_id));
+ return;
+ }
+ audiomanager_commandinterface_call_disconnect_sync(
+ am_cmd_bus,
+ id,
+ &ret,
+ NULL, &err);
+ AFB_DEBUG( "ret = %d", ret);
+
+ if(err != NULL)
+ {
+ afb_req_fail_f(request, "failed", "Unable to call %s", __FUNCTION__);
+ return;
+ }
+
+ struct json_object* res_obj = json_object_new_object();
+ sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,
+ _error, ret);
+ char *info = get_response_audiomanager_massage_error(ret);
+
+ afb_req_success(request, res_obj, info); /* return error num as status */
+}
+
+/**
+ * Call "setVolume" function of Audio Manager.
+ * Set sink volume.
+ *
+ * #### Parameters
+ * Request key
+ * - volume : volume value. The range of value should be [0-100]
+ * - sinkID : sinkID you would like to change volume at
+ *
+ * #### Rreturn
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message.
+ *
+ * #### Note
+ *
+ */
+static void setVolume (struct afb_req request)
+{
+ AFB_DEBUG("call %s", __FUNCTION__);
+
+ guint16 sink_id, vol;
+ gint16 ret;
+ REQ_ERROR req_err1, req_err2;
+ GError *err = NULL;
+
+ req_err1 = get_value_uint16(request, _sink_id, &sink_id);
+ req_err2 = get_value_int16(request, _volume, &vol);
+ AFB_DEBUG( "requested %s = %d, %s = %d",_sink_id, sink_id, _volume, vol);
+ if((req_err1 != REQ_OK) || (req_err2 != REQ_OK))
+ {
+ afb_req_fail(request,"wrong-request", NULL);
+ return;
+ }
+
+ audiomanager_commandinterface_call_set_volume_sync(
+ am_cmd_bus,
+ sink_id,
+ vol,
+ &ret,
+ NULL, &err);
+ AFB_DEBUG( "ret = %d", ret);
+
+ if(err != NULL)
+ {
+ afb_req_fail_f(request, "failed", "Unable to call %s", __FUNCTION__);
+ return;
+ }
+
+ struct json_object* res_obj = json_object_new_object();
+ sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,
+ "error", ret);
+ char *info = get_response_audiomanager_massage_error(ret);
+
+ afb_req_success(request, res_obj, info); /* return error num as status */
+}
+
+/**
+ * Call "volumeStep" function of Audio Manager.
+ * Change volume step of sink
+ *
+ * #### Parameters
+ * Request key
+ * - sinkID : sinkID you would to change volume step
+ * - volumeStep : Step size of volume
+ *
+ *
+ * #### Rreturn
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message.
+ *
+ * #### Note
+ *
+ */
+static void volumeStep (struct afb_req request)
+{
+ AFB_DEBUG("call %s", __FUNCTION__);
+
+ guint16 sink_id, vol;
+ gint16 ret;
+ REQ_ERROR req_err1, req_err2;
+ GError *err = NULL;
+
+ req_err1 = get_value_uint16(request, _sink_id, &sink_id);
+ req_err2 = get_value_int16(request, _volume_step, &vol);
+ AFB_DEBUG( "requested %s = %d, %s = %d",_sink_id, sink_id, _volume_step, vol);
+ if((req_err1 != REQ_OK) || (req_err2 != REQ_OK))
+ {
+ afb_req_fail(request,"wrong-request", NULL);
+ return;
+ }
+
+ audiomanager_commandinterface_call_volume_step_sync(
+ am_cmd_bus,
+ sink_id,
+ vol,
+ &ret,
+ NULL, &err);
+ AFB_DEBUG( "ret = %d", ret);
+
+ if(err != NULL)
+ {
+ afb_req_fail_f(request, "failed", "Unable to call %s", __FUNCTION__);
+ return;
+ }
+
+ struct json_object* res_obj = json_object_new_object();
+ sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,
+ "error", ret);
+ char *info = get_response_audiomanager_massage_error(ret);
+
+ afb_req_success(request, res_obj, info); /* return error num as status */
+}
+
+/**
+ * Call "volumeStep" function of Audio Manager.
+ * Change volume step of sink
+ *
+ * #### Parameters
+ * Request key
+ * - sinkID : sinkID you would like to change mute state
+ * - muteState : muteState, 1 means mute, 2 means unmute. Or you can designate as "mute" or "unmute"
+ *
+ *
+ * #### Rreturn
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message.
+ *
+ * #### Note
+ *
+ */
+static void setSinkMuteState(struct afb_req request)
+{
+ AFB_DEBUG("call %s", __FUNCTION__);
+
+ guint16 sink_id, mute;
+ gint16 ret;
+ REQ_ERROR req_err1, req_err2;
+ GError *err = NULL;
+
+ req_err1 = get_value_uint16(request, _sink_id, &sink_id);
+ req_err2 = get_value_int16(request, _mute_state, &mute);
+ AFB_DEBUG( "requested %s = %d, %s = %d",_sink_id, sink_id, _mute_state, mute);
+ if((req_err1 != REQ_OK) || (req_err2 != REQ_OK))
+ {
+ afb_req_fail(request,"wrong-request", NULL);
+ return;
+ }
+
+ audiomanager_commandinterface_call_set_sink_mute_state_sync(
+ am_cmd_bus,
+ sink_id,
+ mute,
+ &ret,
+ NULL, &err);
+ AFB_DEBUG( "ret = %d", ret);
+
+ if(err != NULL)
+ {
+ afb_req_fail_f(request, "failed", "Unable to call %s", __FUNCTION__);
+ return;
+ }
+
+ struct json_object* res_obj = json_object_new_object();
+ sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,
+ "error", ret);
+ char *info = get_response_audiomanager_massage_error(ret);
+
+ afb_req_success(request, res_obj, info); /* return error num as status */
+}
+
+/**
+ * Call "getListMainConnections" function of Audio Manager.
+ * Get mainc connection list
+ *
+ * #### Parameters
+ * Request key
+ * None
+ *
+ *
+ * #### Rreturn
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message. Even if there is no connection list,
+ * Sound Manager return success.
+ *
+ * #### Note
+ *
+ */
+static void getListMainConnections(struct afb_req request)
+{
+ AFB_DEBUG("call getListMainConnections");
+ guint16 ret;
+ GVariant* mainConnectionList;
+ GError *err = NULL;
+
+ audiomanager_commandinterface_call_get_list_main_connections_sync(
+ am_cmd_bus,
+ &ret,
+ &mainConnectionList,
+ NULL,
+ &err
+ );
+
+ if(err != NULL)
+ {
+ afb_req_fail_f(request, "failed", "Unable to call %s", __FUNCTION__);
+ return;
+ }
+
+ /* create response */
+ struct json_object *array_res = json_object_new_array();
+ gsize size = g_variant_n_children(mainConnectionList);
+ AFB_DEBUG("mainConnectionList size is %u",(uint16_t)size);
+ struct json_object *verb_obj = json_object_new_object();
+ sm_add_object_to_json_object_func(verb_obj, __FUNCTION__, 0);
+ json_object_array_add(array_res, verb_obj);
+ if(size <= 0)
+ {
+ AFB_NOTICE( "mainConnectionList size is 0");
+ }
+ else{
+ for(int i = 0; i < size; ++i)
+ {
+ guint16 mcid, srcid, sinkid;
+ gint16 delay, constate;
+ g_variant_get_child(
+ mainConnectionList,i,"(qqqnn)",
+ &mcid, &srcid, &sinkid, &delay, &constate
+ );
+
+ struct json_object* res_obj = json_object_new_object();
+ sm_add_object_to_json_object(res_obj,10,
+ _main_connection_id, mcid,
+ _source_id, srcid,
+ _sink_id, sinkid,
+ _delay, delay,
+ _connection_state, constate
+ );
+ json_object_array_add(array_res,res_obj);
+ }
+ }
+ AFB_DEBUG("json object :%s:",json_object_to_json_string(array_res));
+ afb_req_success(request, array_res, "Success to get main connection list");
+}
+
+/**
+ * Call "getListMainSinks" function of Audio Manager.
+ * Get main sink list
+ *
+ * #### Parameters
+ * Request key
+ * None
+ *
+ *
+ * #### Rreturn
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message. Even if there is no connection list,
+ * Sound Manager return success.
+ *
+ * #### Note
+ *
+ */
+static void getListMainSinks(struct afb_req request)
+{
+ AFB_DEBUG("call %s", __FUNCTION__);
+ guint16 ret;
+ GVariant* mainSinkList;
+ GError *err = NULL;
+
+ audiomanager_commandinterface_call_get_list_main_sinks_sync(
+ am_cmd_bus,
+ &ret,
+ &mainSinkList,
+ NULL,
+ &err
+ );
+
+ if(err != NULL)
+ {
+ afb_req_fail_f(request, "failed", "Unable to call %s", __FUNCTION__);
+ return;
+ }
+
+ /* create response */
+ struct json_object *array_res = json_object_new_array();
+ gsize size = g_variant_n_children(mainSinkList);
+ AFB_DEBUG( "%s size is %u",__FUNCTION__, (uint16_t)size);
+ struct json_object *verb_obj = json_object_new_object();
+ sm_add_object_to_json_object_func(verb_obj, __FUNCTION__, 0);
+ json_object_array_add(array_res, verb_obj);
+ if(size <= 0)
+ {
+ AFB_NOTICE("%s size is 0", __FUNCTION__);
+ }
+ else{
+ /*for(int i = 0; i < size; ++i)
+ {
+ guint16 sinkid, sinkclassid;
+ gchar* sinkname;
+ GVariant* available = g_variant_new("(nn)", -1, -1);
+ gint16 volume, mutestate;
+ g_variant_get_child(
+ mainSinkList,i,"(qs(nn)nnq)",
+ &sinkid, sinkname, &volume, &mutestate, &sinkclassid);
+ struct json_object* res_obj = json_object_new_object();
+ sm_add_object_to_json_object(res_obj,2,_sink_id, sinkid);
+ json_object_object_add(res_obj, _sink_name, json_object_new_string(sinkname));
+ sm_add_object_to_json_object(res_obj,6,
+ _volume, volume,
+ _mute_state, mutestate,
+ _sink_class_id, sinkclassid);
+ json_object_array_add(array_res,res_obj);
+ }*/
+ }
+ AFB_DEBUG("json object :%s:",json_object_to_json_string(array_res));
+ //afb_req_success(request, array_res, "Success to get main sink list");
+ afb_req_success(request, array_res, "This is not implemented yet");
+}
+/*
+*
+****** Routing Interface method(API) ***********
+*
+*/
+
+/**
+ * Call "ackConnect" function of Audio Manager.
+ * Return acknowledge of connect against asyncConnect
+ *
+ * #### Parameters
+ * - handle : Handle id when you get on asyncConnect
+ * - connectionID : connection id when you got on connect return value
+ * - error : Error Number you would like to send. If error is 0, it means OK.
+ * If an application has some error, send error number in function then AM release
+ * resources the application got in connect.
+ *
+ *
+ * #### Rreturn
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message. Even if there is no connection list,
+ * Sound Manager return success. So you should check the contents size of return json object
+ *
+ * #### Note
+ *
+ */
+static void ackConnect(struct afb_req request)
+{
+ /* This function will be deprecated */
+ AFB_DEBUG("call %s", __FUNCTION__);
+ guint16 handle, connection_id, error;
+ guint16 ret = 0;
+ REQ_ERROR req_err1, req_err2 , req_err3;
+ GError *err = NULL;
+
+ req_err1 = get_value_uint16(request, _handle, &handle);
+ req_err2 = get_value_uint16(request, _connection_id, &connection_id);
+ req_err3 = get_value_uint16(request, _error, &error);
+
+ if((req_err1 != REQ_OK) || (req_err2 != REQ_OK) || (req_err3 != REQ_OK))
+ {
+ afb_req_fail(request,"wrong-request", NULL);
+ return;
+ }
+ if(connection_id == 0)
+ {
+ afb_req_fail(request,"wrong-request", "connectionID is more than 0");
+ return;
+ }
+
+ audiomanager_routinginterface_call_ack_connect_sync(
+ am_route_bus,
+ handle,
+ connection_id,
+ error,
+ NULL, &err);
+
+ if(err != NULL)
+ {
+ afb_req_fail_f(request, "failed", "Unable to call %s", __FUNCTION__);
+ return;
+ }
+ /*create response json object*/
+ struct json_object *res = json_object_new_object();
+ sm_add_object_to_json_object_func(res, __FUNCTION__, 2,
+ _error, ret);
+ char *info = get_response_audiomanager_massage_error(ret);
+ afb_req_success(request, res, info);
+}
+
+/**
+ * Call "ackDisconnect" function of Audio Manager.
+ * Return acknowledge of disconnect against asyncDisconnect
+ *
+ * #### Parameters
+ * - handle : Handle id when you get on asyncDisconnect
+ * - connectionID : connection id when you got on connect return value
+ * - error : Error Number you would like to send. If error is 0, it means OK.
+ * If an application has some error, send error number in function then AM
+ *
+ *
+ * #### Rreturn
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message. Even if there is no connection list,
+ * Sound Manager return success. So you should check the contents size of return json object
+ *
+ * #### Note
+ *
+ */
+static void ackDisconnect(struct afb_req request)
+{
+ /* This function will be deprecated */
+ AFB_DEBUG("call %s", __FUNCTION__);
+ guint16 handle, connection_id, error;
+ guint16 ret = 0;
+ REQ_ERROR req_err1, req_err2 , req_err3;
+ GError *err = NULL;
+
+ req_err1 = get_value_uint16(request, _handle, &handle);
+ req_err2 = get_value_uint16(request, _connection_id, &connection_id);
+ req_err3 = get_value_uint16(request, _error, &error);
+
+ if((req_err1 != REQ_OK) || (req_err2 != REQ_OK) || (req_err3 != REQ_OK))
+ {
+ afb_req_fail(request,"wrong-request", "connectionID is more than 0");
+ return;
+ }
+ if(connection_id == 0)
+ {
+ afb_req_fail(request,"wrong-request", "connectionID is more than 0");
+ return;
+ }
+
+ audiomanager_routinginterface_call_ack_disconnect_sync(
+ am_route_bus,
+ handle,
+ connection_id,
+ error,
+ NULL, &err);
+
+ if(err != NULL)
+ {
+ afb_req_fail_f(request, "failed", "Unable to call %s", __FUNCTION__);
+ return;
+ }
+ /*create response json object*/
+ struct json_object *res = json_object_new_object();
+ sm_add_object_to_json_object_func(res, __FUNCTION__, 2,
+ _error, ret);
+ char *info = get_response_audiomanager_massage_error(ret);
+ afb_req_success(request, res, info);
+}
+
+/**
+ * Call "ackSetSourceState" function of Audio Manager.
+ * Return acknowledge of setSourceState against asyncSetSourceState.
+ *
+ * #### Parameters
+ * - handle : Handle id when you get on asyncSetSourceState
+ * - error : Error Number you would like to send. If error is 0, it means OK.
+ * If an application has some errors, send error number in function
+ *
+ * #### Rreturn
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message.
+ *
+ * #### Note
+ * This function is very important for applications to realise the sequence of Audio Management.
+ * An Application which matches with sourceID in the parameter of asyncSetSourceState has to return ack to use this function
+ *
+ */
+static void ackSetSourceState(struct afb_req request)
+{
+ AFB_DEBUG("call %s", __FUNCTION__);
+ guint16 handle, error;
+ guint16 ret = 0;
+ REQ_ERROR req_err1, req_err2;
+ GError *err = NULL;
+
+ req_err1 = get_value_uint16(request, _handle, &handle);
+ req_err2 = get_value_uint16(request, _error, &error);
+
+ if((req_err1 != REQ_OK) || (req_err2 != REQ_OK))
+ {
+ AFB_DEBUG("wrong request");
+ afb_req_fail(request,"wrong-request", NULL);
+ return;
+ }
+
+ audiomanager_routinginterface_call_ack_set_source_state_sync(
+ am_route_bus,
+ handle,
+ error,
+ NULL, &err);
+
+ if(err != NULL)
+ {
+ afb_req_fail_f(request, "failed", "Unable to call %s", __FUNCTION__);
+ return;
+ }
+ /*create response json object*/
+ struct json_object *res = json_object_new_object();
+ sm_add_object_to_json_object_func(res, __FUNCTION__, 2,
+ _error, ret);
+ char *info = get_response_audiomanager_massage_error(ret);
+ afb_req_success(request, res, info);
+}
+
+/**
+ * Call "registerSource" function of Audio Manager.
+ * Register source(application) to Audio Manager Policy Management
+ * Application must call this function on its initialization
+ *
+ * #### Parameters
+ * - appname : Application unieque name
+ * [Option]
+ * It is not necessary to designate following argument, because these are default value is selected y soundmanager
+ * If you would like to set value, please input the following key and value
+ * - sourceClassID :
+ * - sourceState :
+ *
+ * #### Return
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message.
+ *
+ * #### Note
+ *
+ */
+static void registerSource(struct afb_req request)
+{
+ AFB_DEBUG("call %s", __FUNCTION__);
+ GError *err = NULL;
+
+
+ guint16 source_id; /* q 0 is for dynamic id*/
+ guint16 domain_id; /* q */
+ guint16 source_class_id; /* q */
+ gint32 source_state; /* i */
+ gint16 volume; /* n */
+
+ if(REQ_OK != get_value_uint16(request, _source_id, &source_id)){
+ source_id = DYNAMIC_SOURCE_ID; /* if 0, dynamic source id will be applied */
+ }
+ REQ_ERROR req_err = get_value_uint16(request, _domain_id, &domain_id);
+ if( req_err != REQ_OK){
+ if(req_err == REQ_FAIL)
+ {
+ domain_id = SOUNDMANAGER_DOMAIN_ID; /* default in AGL */
+ }
+ else{
+ afb_req_fail(request,"wrong-request", "Please input domainID as uint16, otherwise no value is OK");
+ return;
+ }
+ }
+ if(domain_id == 0)
+ {
+ afb_req_fail(request,"wrong-request", "domainID should be more than 0");
+ return;
+ }
+ const gchar* name = afb_req_value(request, _appname); /* s */
+ if(!name)
+ {
+ char* info = "Must specify the name. Please input json arg such as {\"appname\":\"radio\"}";
+ afb_req_fail(request, NULL, info);
+ return;
+ }
+ if(REQ_OK != get_value_uint16(request, _source_class_id, &source_class_id)){
+ source_class_id = DEFAULT_SOURCE_CLASS_ID; /* BASE */
+ }
+ if(REQ_OK != get_value_int32(request, _source_state, &source_state)){
+ source_state = DEFAULT_SOURCE_STATE; /* SS_OFF */
+ }
+ if(REQ_OK != get_value_int16(request, _volume, &volume)){
+ volume = DEFAULT_VOLUME;
+ }
+ gboolean visible = TRUE; /* b */
+ struct availability_s available; /* (ii) */
+ available.availability = DEFAULT_AVAILABLES; /* A_UNKNOWN */
+ available.avalilable_reason = 0; /* AR_UNKNOWN */
+ guint16 interrupt = DEFAULT_INTERRUPT; /* q IS_OFF */
+
+ struct sound_property_s sound_property_list; /* a(in) */
+ sound_property_list.type = 0;
+ sound_property_list.value = 0; /* in reality, this is array of struct */
+
+ gint32 connection_format_list = DEFAULT_CONNECTION_FORMAT; /* ai */
+ struct main_sound_property_s main_property_list; /* a(in) */
+ main_property_list.type = 0;
+ main_property_list.value = 0;
+
+ struct notification_config_s nconf_routing;
+ struct notification_config_s nconf_command; /* a(iin)a(iin) */
+ nconf_routing.type = 0;
+ nconf_routing.status = 0;
+ nconf_routing.parameter = 0;
+
+ nconf_command.type = 0;
+ nconf_command.status = 0;
+ nconf_command.parameter = 0;
+
+ /* acquire data */
+ guint16 acquire_source_id;
+ guint16 ret;
+
+ GVariant* sourceData = create_source_data (source_id, domain_id, name, source_class_id,
+ source_state, volume, visible, available, interrupt,
+ sound_property_list, connection_format_list, main_property_list,
+ nconf_routing, nconf_command);
+
+ GVariant* input = g_variant_ref_sink(sourceData);
+ audiomanager_routinginterface_call_register_source_sync(
+ am_route_bus,
+ input,
+ &acquire_source_id,
+ &ret,
+ NULL, &err);
+ g_variant_unref(input);
+
+ if(err != NULL)
+ {
+ afb_req_fail_f(request, "failed", "Unable to call %s", __FUNCTION__);
+ return;
+ }
+
+ /*create response json object*/
+ struct json_object *res = json_object_new_object();
+ sm_add_object_to_json_object_func(res, __FUNCTION__, 4,
+ _error, ret,
+ _source_id, acquire_source_id);
+ char *info = get_response_audiomanager_massage_error(ret);
+ afb_req_success(request, res, info);
+}
+
+/**
+ * Call "deregisterSource" function of Audio Manager.
+ * Deregister source(application) to Audio Manager Policy Management
+ *
+ * #### Parameters
+ * - sourceID : sourceID returned in resisterSource
+ *
+ * #### Rreturn
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message.
+ *
+ * #### Note
+ *
+ */
+static void deregisterSource(struct afb_req request)
+{
+ guint16 source_id;
+ guint16 ret;
+
+ GError *err = NULL;
+
+ if(REQ_OK != get_value_uint16(request, _source_id, &source_id)){
+ afb_req_fail(request, "wrong-request", NULL);
+ }
+ audiomanager_routinginterface_call_deregister_source_sync(
+ am_route_bus,
+ source_id,
+ &ret,
+ NULL, &err
+ );
+ if(err != NULL)
+ {
+ afb_req_fail_f(request, "failed", "Unable to call %s", __FUNCTION__);
+ return;
+ }
+ /*create response json object*/
+ struct json_object *res = json_object_new_object();
+ sm_add_object_to_json_object_func(res, __FUNCTION__, 2,
+ _error, ret);
+ char *info = get_response_audiomanager_massage_error(ret);
+ afb_req_success(request, res, info);
+
+}
+
+/**
+ * Subscribe event
+ *
+ * #### Parameters
+ * - event : Event name. Event list is written in libsoundmanager.hpp
+ *
+ * #### Rreturn
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message.
+ *
+ * #### Note
+ *
+ */
+static void subscribe(struct afb_req request)
+{
+ const char *value = afb_req_value(request, "event");
+ AFB_DEBUG( "value is %s", value);
+ int ret = 0;
+ if(value) {
+ int index = sm_search_event_name_index(value);
+ if(index < 0)
+ {
+ index = sm_search_routing_event_name_index(value);
+ if(index < 0)
+ {
+ AFB_NOTICE( "dedicated event doesn't exist");
+ ret = EVENT_SUBSCRIBE_ERROR_CODE;
+ }
+ else
+ {
+ afb_req_subscribe(request, *routing_event_list[index].event);
+ }
+ }
+ else
+ {
+ afb_req_subscribe(request, *command_event_list[index].event);
+ }
+ }
+ else{
+ AFB_NOTICE( "Please input event name");
+ ret = EVENT_SUBSCRIBE_ERROR_CODE;
+ }
+ /*create response json object*/
+ struct json_object *res = json_object_new_object();
+ sm_add_object_to_json_object_func(res, __FUNCTION__, 2,
+ _error, ret);
+ char *info = get_response_audiomanager_massage_error(ret);
+ afb_req_success(request, res, info);
+}
+
+/**
+ * Unsubscribe event
+ *
+ * #### Parameters
+ * - event : Event name. Event list is written in libsoundmanager.hpp
+ *
+ * #### Rreturn
+ * - error : Error status number. If error is 0, it means the request is accepted, otherwise error message is attached with error code in reply message.
+ *
+ * #### Note
+ *
+ */
+static void unsubscribe(struct afb_req request)
+{
+ const char *value = afb_req_value(request, "event");
+ AFB_DEBUG( "value is %s", value);
+ int ret = 0;
+ if(value) {
+ int index = sm_search_event_name_index(value);
+ if(index < 0)
+ {
+ index = sm_search_routing_event_name_index(value);
+ if(index < 0)
+ {
+ AFB_NOTICE( "dedicated event doesn't exist");
+ ret = EVENT_SUBSCRIBE_ERROR_CODE;
+ }
+ else
+ {
+ afb_req_unsubscribe(request, *routing_event_list[index].event);
+ }
+ }
+ else
+ {
+ afb_req_unsubscribe(request, *command_event_list[index].event);
+ }
+ }
+ else{
+ AFB_NOTICE( "Please input event name");
+ ret = EVENT_SUBSCRIBE_ERROR_CODE;
+ }
+ /*create response json object*/
+ struct json_object *res = json_object_new_object();
+ sm_add_object_to_json_object_func(res, __FUNCTION__, 2,
+ _error, ret);
+ char *info = get_response_audiomanager_massage_error(ret);
+ afb_req_success(request, res, info);
+}
+
+/*
+********** Callback Function invoked by Audio Manager **********
+*/
+
+static void on_new_main_connection(AudiomanagerCommandinterface* interface,
+ GVariant* mainConnection)
+{
+ AFB_DEBUG("%s is called",__FUNCTION__);
+
+ guint16 mcid, srcid, sinkid;
+ gint16 delay, constate;
+ g_variant_get(
+ mainConnection,"(qqqnn)", &mcid, &srcid, &sinkid, &delay, &constate);
+
+ struct json_object* res_obj = json_object_new_object();
+ sm_add_object_to_json_object(res_obj,10,
+ _main_connection_id, mcid,
+ _source_id, srcid,
+ _sink_id, sinkid,
+ _delay, delay,
+ _connection_state, constate
+ );
+ AFB_DEBUG("json object :%s:",json_object_to_json_string(res_obj));
+
+ afb_event_push(ev_new_connection, res_obj);
+}
+
+static void on_removed_main_connection(
+ AudiomanagerCommandinterface* interface, guint16 mainConnectionID)
+{
+ AFB_DEBUG("%s is called",__FUNCTION__);
+
+ struct json_object* res_obj = json_object_new_object();
+ sm_add_object_to_json_object(res_obj, 2,
+ _main_connection_id, mainConnectionID);
+ afb_event_push(ev_removed_main_connection, res_obj);
+}
+
+static void on_main_connection_state_changed(
+ AudiomanagerCommandinterface* interface, guint16 connectionID, gint16 connectionState)
+{
+ AFB_DEBUG("%s is called",__FUNCTION__);
+
+ struct json_object* res_obj = json_object_new_object();
+ sm_add_object_to_json_object(res_obj, 4,
+ _connection_id, connectionID,
+ _connection_state, connectionState);
+ afb_event_push(ev_main_connection_state_changed, res_obj);
+}
+
+static void on_volume_changed(
+ AudiomanagerCommandinterface* interface, guint16 sinkID, gint16 volume)
+{
+ AFB_DEBUG("%s is called",__FUNCTION__);
+ struct json_object* res_obj = json_object_new_object();
+ sm_add_object_to_json_object(res_obj, 4,
+ _sink_id, sinkID,
+ _volume, volume);
+ afb_event_push(ev_volume_changed, res_obj);
+}
+
+static void on_sink_mute_state_changed(
+ AudiomanagerCommandinterface* interface, guint16 sinkID, gint16 mute)
+{
+ AFB_DEBUG("%s is called",__FUNCTION__);
+ struct json_object* res_obj = json_object_new_object();
+ sm_add_object_to_json_object(res_obj, 4,
+ _sink_id, sinkID,
+ _mute_state, mute);
+ afb_event_push(ev_sink_mute_state_changed, res_obj);
+}
+
+/*
+********** Callback Function invoked by Audio Manager Routing Interface**********
+*/
+static void on_set_routing_ready(
+ AudiomanagerRoutinginterface* interface)
+{
+ AFB_DEBUG("%s is called",__FUNCTION__);
+ afb_event_push(ev_set_routing_ready, NULL);
+}
+
+static void on_set_routing_rundown(
+ AudiomanagerRoutinginterface* interface)
+{
+ AFB_DEBUG("%s is called",__FUNCTION__);
+ afb_event_push(ev_set_routing_ready, NULL);
+}
+
+
+
+/*
+********** Callback Function invoked by Sound Manager Adapter Interface**********
+*
+* For now, there may be no need to send events to applications from these invocation.
+* Sound Manager just sends ack to Audio Manager in charge of applications.
+*
+*/
+static gboolean on_async_abort(
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle)
+{
+ AFB_DEBUG( "%s called", __FUNCTION__);
+ /* Nothing To Do. If it is better to implement something, I will implement */
+ return TRUE;
+}
+
+static gboolean on_async_connect(
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ guint16 arg_connectionID,
+ guint16 arg_sourceID,
+ guint16 arg_sinkID,
+ gint arg_connectionFormat)
+{
+ AFB_DEBUG( "%s called", __FUNCTION__);
+
+ struct json_object* ev_obj = json_object_new_object();
+ sm_add_object_to_json_object(ev_obj, 10,
+ _handle, arg_handle,
+ _connection_id, arg_connectionID,
+ _source_id, arg_sourceID,
+ _sink_id, arg_sinkID,
+ _connection_format, arg_connectionFormat);
+ afb_event_push(ev_async_connect, ev_obj);
+
+ /* GError must be initialized here because it is same as grobal errno,
+ so if afb_event_push is failed due to something, number will be changed */
+ GError* err = NULL;
+ audiomanager_routinginterface_call_ack_connect_sync(
+ am_route_bus,
+ arg_handle,
+ arg_connectionID,
+ 0,
+ NULL, &err);
+ if(err != NULL)
+ {
+ AFB_ERROR( "Can't send ack to sound manager adapter %s", __FUNCTION__);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean on_async_disconnect(
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ guint16 arg_connectionID)
+{
+ AFB_DEBUG( "%s called", __FUNCTION__);
+ struct json_object* ev_obj = json_object_new_object();
+ sm_add_object_to_json_object(ev_obj, 4,
+ _handle, arg_handle,
+ _connection_id, arg_connectionID);
+ afb_event_push(ev_async_disconnect, ev_obj);
+ GError* err = NULL;
+ audiomanager_routinginterface_call_ack_disconnect_sync(
+ am_route_bus,
+ arg_handle,
+ arg_connectionID,
+ 0,
+ NULL, &err);
+ if(err != NULL)
+ {
+ AFB_ERROR( "Can't send ack to sound manager adapter %s", __FUNCTION__);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static gboolean on_async_set_sink_volume(
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ guint16 arg_sinkID,
+ gint16 arg_volume,
+ gint16 arg_ramp,
+ guint16 arg_time)
+{
+ AFB_DEBUG( "%s called", __FUNCTION__);
+ GError* err = NULL;
+ audiomanager_routinginterface_call_ack_set_sink_volume_sync(
+ am_route_bus,
+ arg_handle,
+ arg_volume,
+ 0, NULL, &err);
+ if(err != NULL);{
+ AFB_ERROR( "Can't send ack to sound manager adapter %s", __FUNCTION__);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**
+ * Event "asyncSetSourceState"
+ * This event is one of the result of Audio Management for connect/disconnect.
+ *
+ * #### Parameters
+ * Request key
+ * - sourceID : sourceID to be commanded by Audio Manager. The contents of command is sourceState
+ * - handle : handle is the dynamic number managed by Audio Manager. Please return this parameter to input ackSetSourceState as is
+ * - sourceState : "on" is the instruction that application can output sound
+ * "off" is the instruction that application sound right will be removed_main_connection
+ * "pause" is the instruction that application must stop output sound because other applications temporaly got sound right and will output sound
+ *
+ * #### Note
+ * This function is very important for applications to realise the sequence of Audio Management.
+ * An Application which matches with sourceID in the parameter of asyncSetSourceState has to return ack to use this function
+ *
+ */
+static gboolean on_async_set_source_state(
+ AudiomanagerRoutingSoundmanager *object,
+ GDBusMethodInvocation *invocation,
+ guint16 arg_handle,
+ guint16 arg_sourceID,
+ gint arg_sourceState)
+{
+ AFB_DEBUG( "%s called", __FUNCTION__);
+ struct json_object* ev_obj = json_object_new_object();
+ char* ss_key = get_source_state_key(arg_sourceState);
+ sm_add_object_to_json_object(ev_obj, 4,
+ _handle, arg_handle,
+ _source_id, arg_sourceID);
+ json_object_object_add(ev_obj, _source_state, json_object_new_string(ss_key));
+ afb_event_push(ev_async_set_source_state, ev_obj);
+ /* Applications must return ackSetSourceState to look sourceID, then Sound Manager doen't return ackSetSourceState */
+ /*audiomanager_routinginterface_call_ack_set_source_state_sync(
+ am_route_bus,
+ arg_handle,
+ NULL,
+ NULL, &err);*/
+}
+
+
+/*
+ * array of the verbs exported to afb-daemon
+ */
+static const struct afb_verb_v2 binding_verbs[]= {
+{ .verb = "connect", .callback = connect, .auth = NULL,
+ .info = "Connect source id and sink id" , .session = AFB_SESSION_NONE},
+{ .verb = "disconnect", .callback = disconnect, .auth = NULL,
+ .info = "Disconnect source id and sink id" , .session = AFB_SESSION_NONE},
+{ .verb = "setVolume", .callback = setVolume, .auth = NULL,
+ .info = "Set volume value" , .session = AFB_SESSION_NONE}, /* it is better to show the range*/
+{ .verb = "volumeStep", .callback = volumeStep, .auth = NULL,
+ .info = "Set volume step range" , .session = AFB_SESSION_NONE},
+{ .verb = "setSinkMuteState", .callback = setSinkMuteState, .auth = NULL,
+ .info = "Set Mute state: 1 means mute, 2 means umute. Others are invalid" ,.session = AFB_SESSION_NONE},
+{ .verb = "getListMainConnections", .callback = getListMainConnections, .auth = NULL,
+ .info = "Get MainConnection List" , .session = AFB_SESSION_NONE},
+{ .verb = "getListMainSinks", .callback = getListMainSinks, .auth = NULL,
+ .info = "Get MainSink List" , .session = AFB_SESSION_NONE},
+{ .verb = "registerSource", .callback = registerSource, .auth = NULL,
+ .info = "Register Application" , .session = AFB_SESSION_NONE},
+{ .verb = "deregisterSource", .callback = deregisterSource, .auth = NULL,
+ .info = "Deregister Application" , .session = AFB_SESSION_NONE},
+{ .verb = "ackConnect", .callback = ackConnect, .auth = NULL,
+ .info = "Acknowledge of asyncConnect" , .session = AFB_SESSION_NONE},
+{ .verb = "ackDisconnect", .callback = ackDisconnect, .auth = NULL,
+ .info = "Acknowledge of asyncConnect" , .session = AFB_SESSION_NONE},
+{ .verb = "ackSetSourceState", .callback = ackSetSourceState, .auth = NULL,
+ .info = "Acknowledge of asyncSetSourceState" , .session = AFB_SESSION_NONE},
+{ .verb = "subscribe", .callback = subscribe, .auth = NULL,
+ .info = "Subscribe event" , .session = AFB_SESSION_NONE},
+{ .verb = "unsubscribe", .callback = unsubscribe, .auth = NULL,
+ .info = "Unsubscribe event" , .session = AFB_SESSION_NONE},
+{ .verb = NULL } /* marker for end of the array */};
+
+static void *dbus_event_loop_run(void *args)
+{
+ loop = g_main_loop_new(NULL, FALSE);
+ g_main_loop_run(loop);
+}
+
+/*
+*
+********** Internal Function used by Sound Manager **********
+*
+*/
+
+static int registerDomain()
+{
+ /* Default Setting of Sound Manager Domain */
+ struct domain_data ddata = {
+ .domainID = DYNAMIC_DOMAIN_ID,
+ .name = "SoundManager",
+ .busname = SOUND_MANAGER_BUS_NAME,
+ .nodename = "soundmanager",
+ .early = FALSE,
+ .complete = TRUE,
+ .state = DS_CONTROLLED
+ };
+ GVariant* domainData = create_domain_data(&ddata);
+ gchar* retBusName = SOUND_MANAGER_BUS_NAME;
+ gchar* retPath = SOUND_MANAGER_PATH;
+ gchar* retInterface = SOUND_MANAGER_RETURN_INTERFACE;
+ guint16 domain_id;
+ GError *err = NULL;
+ guint16 error;
+
+ audiomanager_routinginterface_call_register_domain_sync(
+ am_route_bus,
+ domainData,
+ retBusName,
+ retPath,
+ retInterface,
+ &domain_id, &error,
+ NULL, &err);
+ if(err != NULL){
+ AFB_ERROR( "Failed to call %s", __FUNCTION__);
+ return -1;
+ }
+ if(error != 0)
+ {
+ AFB_ERROR( "Failed to register domain");
+ return error;
+ }
+ SOUNDMANAGER_DOMAIN_ID = domain_id;
+ AFB_NOTICE( "Complete registered domain id:%d",SOUNDMANAGER_DOMAIN_ID);
+ return 0;
+}
+
+static int preinit()
+{
+ int ret;
+ AFB_INFO("Initialize Dbus object");
+ /* Initialize Dbus interface */
+ if(am_cmd_bus || am_route_bus)
+ {
+ AFB_ERROR( "Dbus object to Audio Manager is already created");
+ goto out;
+ }
+ am_cmd_bus = audiomanager_commandinterface_proxy_new_for_bus_sync(
+ G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ AM_NAME,
+ AM_CMD_PATH,
+ NULL,
+ NULL
+ );
+ am_route_bus = audiomanager_routinginterface_proxy_new_for_bus_sync(
+ G_BUS_TYPE_SYSTEM,
+ G_DBUS_PROXY_FLAGS_NONE,
+ AM_NAME,
+ AM_ROUTE_PATH,
+ NULL,
+ NULL
+ );
+
+ if(!am_cmd_bus || !am_route_bus)
+ {
+ goto out;
+ }
+
+ AFB_NOTICE( "Finish Initialize");
+ return 0;
+out:
+ AFB_ERROR("Failed to initialize");
+ return -1;
+}
+
+static int create_adapter()
+{
+ GError *error = NULL;
+ gboolean ret;
+ GVariant *value;
+ system_conn = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error);
+ if (error)
+ {
+ g_error_free(error);
+ return -1;
+ }
+ sm_adapter = audiomanager_routing_soundmanager_skeleton_new();
+ sm_itf = AUDIOMANAGER_ROUTING_SOUNDMANAGER_GET_IFACE(sm_adapter);
+
+ /* initialize sound manager adapter */
+ sm_itf->handle_async_abort = on_async_abort;
+ sm_itf->handle_async_connect = on_async_connect;
+ sm_itf->handle_async_disconnect = on_async_disconnect;
+ sm_itf->handle_async_set_sink_volume = on_async_set_sink_volume;
+ sm_itf->handle_async_set_source_state = on_async_set_source_state;
+
+ int sigret = g_signal_connect(sm_adapter, "handle-async-abort", G_CALLBACK(on_async_abort),NULL);
+ sigret = g_signal_connect(sm_adapter, "handle-async-connect", G_CALLBACK(on_async_connect),NULL);
+ sigret = g_signal_connect(sm_adapter, "handle-async-disconnect", G_CALLBACK(on_async_disconnect),NULL);
+ sigret = g_signal_connect(sm_adapter, "handle-async-set-sink-volume", G_CALLBACK(on_async_set_sink_volume),NULL);
+ sigret = g_signal_connect(sm_adapter, "handle-async-set-source-state", G_CALLBACK(on_async_set_source_state),NULL);
+ ret = g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(sm_adapter), system_conn, SOUND_MANAGER_PATH, &error);
+ if (FALSE == ret)
+ {
+ AFB_ERROR( "failed to export");
+ g_error_free(error);
+ g_object_unref(system_conn);
+
+ return -1;
+ }
+
+ return 0;
+}
+
+
+static void on_name_lost(GDBusServer *server, GDBusConnection *conn, gpointer data)
+{
+ AFB_WARNING("%s called", __FUNCTION__);
+}
+
+
+static int sm_event_init()
+{
+ AFB_NOTICE("Initialize event receive setting");
+ printf("Initialize event receive setting");
+ int ret;
+ /* Initialize make event */
+ size_t size = sizeof cmd_evlist / sizeof *cmd_evlist;
+
+ /*create event*/
+ /*ToDo Hash table is better. And event should be created in the loop
+ I would like to change */
+ ev_volume_changed = afb_daemon_make_event(cmd_evlist[0]);
+ ev_new_connection = afb_daemon_make_event(cmd_evlist[1]);
+ ev_removed_main_connection = afb_daemon_make_event(cmd_evlist[2]);
+ ev_sink_mute_state_changed = afb_daemon_make_event(cmd_evlist[3]);
+ ev_main_connection_state_changed = afb_daemon_make_event(cmd_evlist[4]);
+ command_event_list[0].name = cmd_evlist[0];
+ command_event_list[0].event = &ev_volume_changed;
+ command_event_list[1].name = cmd_evlist[1];
+ command_event_list[1].event = &ev_new_connection;
+ command_event_list[2].name = cmd_evlist[2];
+ command_event_list[2].event = &ev_removed_main_connection;
+ command_event_list[3].name = cmd_evlist[3];
+ command_event_list[3].event = &ev_sink_mute_state_changed;
+ command_event_list[4].name = cmd_evlist[4];
+ command_event_list[4].event = &ev_main_connection_state_changed;
+
+ /* create routing event */
+ ev_set_routing_ready = afb_daemon_make_event(route_evlist[0]);
+ ev_set_routing_rundown = afb_daemon_make_event(route_evlist[1]);
+ ev_async_connect = afb_daemon_make_event(route_evlist[2]);
+ ev_async_set_source_state = afb_daemon_make_event(route_evlist[3]);
+ ev_async_disconnect = afb_daemon_make_event(route_evlist[4]);
+
+ routing_event_list[0].name = route_evlist[0];
+ routing_event_list[0].event = &ev_set_routing_ready;
+ routing_event_list[1].name = route_evlist[1];
+ routing_event_list[1].event = &ev_set_routing_rundown;
+ routing_event_list[2].name = route_evlist[2];
+ routing_event_list[2].event = &ev_async_connect;
+ routing_event_list[3].name = route_evlist[3];
+ routing_event_list[3].event = &ev_async_set_source_state;
+ routing_event_list[4].name = route_evlist[4];
+ routing_event_list[4].event = &ev_async_disconnect;
+ /*for(size_t i = 0; i < size; ++i)
+ {
+ struct afb_event afbev = afb_daemon_make_event(afbitf->daemon, cmd_evlist[i]));
+ size_t afbev_size = sizeof afbev;
+ size_t key_size = sizeof cmd_evlist[i];
+
+ struct event ev = {cmd_evlist[i],afbev};
+ command_event_list[i] = malloc(key_size + afbev_size);
+ command_event_list[i] = ev;
+ search_result = hsearch(entry, FIND);
+ if(search_result)
+ AFB_NOTICE( "event name is %s", search_result->key);
+ }*/
+
+ /* Initialize dbus event thread */
+ if(!am_cmd_bus || !am_route_bus)
+ {
+ goto ev_init_out;
+ }
+ pthread_t thread_id;
+ ret = pthread_create(&thread_id, NULL, dbus_event_loop_run, NULL);
+ if(ret != 0)
+ {
+ goto ev_init_out;
+ }
+ /* initialize signal from audio manager command interface */
+ g_signal_connect(am_cmd_bus,
+ "volume_changed",
+ G_CALLBACK(on_volume_changed),
+ NULL);
+ g_signal_connect(am_cmd_bus,
+ "new_main_connection",
+ G_CALLBACK(on_new_main_connection),
+ NULL);
+ g_signal_connect(am_cmd_bus,
+ "removed_main_connection",
+ G_CALLBACK(on_removed_main_connection),
+ NULL);
+ g_signal_connect(am_cmd_bus,
+ "sink_mute_state_changed",
+ G_CALLBACK(on_sink_mute_state_changed),
+ NULL);
+ g_signal_connect(am_cmd_bus,
+ "main_connection_state_changed",
+ G_CALLBACK(on_main_connection_state_changed),
+ NULL);
+ g_signal_connect(am_route_bus,
+ "set_routing_ready",
+ G_CALLBACK(on_set_routing_ready),
+ NULL);
+ g_signal_connect(am_route_bus,
+ "set_routing_rundown",
+ G_CALLBACK(on_set_routing_rundown),
+ NULL);
+
+ /* Get soundmanager adapter bus */
+ ret = g_bus_own_name(G_BUS_TYPE_SYSTEM, SOUND_MANAGER_BUS_NAME, G_BUS_NAME_OWNER_FLAGS_NONE,
+ NULL,NULL, NULL, NULL, NULL);
+ AFB_DEBUG( "g_bus_own_name ret: %d", ret);
+ ret = create_adapter();
+ if(ret != 0)
+ {
+ goto ev_init_out;
+ }
+ ret = registerDomain();
+
+ if(ret != 0)
+ {
+ AFB_ERROR("registerDomain error: %s",get_response_audiomanager_massage_error(ret));
+ goto ev_init_out;
+ }
+
+ AFB_INFO("Finish Initialize event receive setting");
+ return 0;
+
+ev_init_out:
+ if(loop != NULL)
+ {
+ g_main_loop_unref(loop);
+ }
+ AFB_WARNING( "DBus connection is not created");
+ return -1;
+}
+
+static void onevent(const char *event, struct json_object *object)
+{
+ AFB_NOTICE("on_event %s", event);
+}
+
+const struct afb_binding_v2 afbBindingV2 = {
+ .api = "soundmanager",
+ .specification = NULL,
+ .verbs = binding_verbs,
+ .preinit = preinit,
+ .init = sm_event_init,
+ .onevent = onevent
+};