From ce253994af37137d4c29221e7914f437c3dcb510 Mon Sep 17 00:00:00 2001 From: Kazumasa Mitsunari Date: Mon, 2 Oct 2017 16:22:02 +0900 Subject: 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 --- doc/api-ref/html/annotated.html | 103 ++ doc/api-ref/html/annotated_dup.js | 5 + doc/api-ref/html/bc_s.png | Bin 0 -> 676 bytes doc/api-ref/html/bdwn.png | Bin 0 -> 147 bytes doc/api-ref/html/class_lib_soundmanager.html | 532 +++++++ doc/api-ref/html/class_lib_soundmanager.js | 15 + doc/api-ref/html/classes.html | 107 ++ doc/api-ref/html/closed.png | Bin 0 -> 132 bytes .../html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html | 104 ++ .../html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.js | 4 + .../html/dir_574c53d22ed4def281d320d129dd43c9.html | 106 ++ .../html/dir_574c53d22ed4def281d320d129dd43c9.js | 5 + .../html/dir_85932083476b47061c69d172796990a3.html | 104 ++ .../html/dir_85932083476b47061c69d172796990a3.js | 4 + .../html/dir_b967abc00200c877344b4504e6cbcf3f.html | 108 ++ .../html/dir_b967abc00200c877344b4504e6cbcf3f.js | 6 + .../html/dir_c2dc0533631c44dc5d574e7be055c656.html | 104 ++ .../html/dir_c2dc0533631c44dc5d574e7be055c656.js | 4 + doc/api-ref/html/doc.png | Bin 0 -> 746 bytes doc/api-ref/html/doxygen.css | 1596 ++++++++++++++++++++ doc/api-ref/html/doxygen.png | Bin 0 -> 3779 bytes doc/api-ref/html/dynsections.js | 104 ++ doc/api-ref/html/files.html | 110 ++ doc/api-ref/html/files.js | 4 + doc/api-ref/html/folderclosed.png | Bin 0 -> 616 bytes doc/api-ref/html/folderopen.png | Bin 0 -> 597 bytes doc/api-ref/html/functions.html | 137 ++ doc/api-ref/html/functions_func.html | 131 ++ doc/api-ref/html/functions_vars.html | 101 ++ doc/api-ref/html/globals.html | 146 ++ doc/api-ref/html/globals_defs.html | 128 ++ doc/api-ref/html/globals_func.html | 104 ++ doc/api-ref/html/globals_vars.html | 104 ++ doc/api-ref/html/index.html | 97 ++ doc/api-ref/html/jquery.js | 87 ++ doc/api-ref/html/libsoundmanager_8cpp.html | 178 +++ doc/api-ref/html/libsoundmanager_8cpp.js | 5 + doc/api-ref/html/libsoundmanager_8cpp_source.html | 116 ++ doc/api-ref/html/libsoundmanager_8hpp.html | 158 ++ doc/api-ref/html/libsoundmanager_8hpp.js | 6 + doc/api-ref/html/libsoundmanager_8hpp_source.html | 103 ++ doc/api-ref/html/menu.js | 26 + doc/api-ref/html/menudata.js | 16 + doc/api-ref/html/nav_f.png | Bin 0 -> 153 bytes doc/api-ref/html/nav_g.png | Bin 0 -> 95 bytes doc/api-ref/html/nav_h.png | Bin 0 -> 98 bytes doc/api-ref/html/navtree.css | 146 ++ doc/api-ref/html/navtree.js | 517 +++++++ doc/api-ref/html/navtreedata.js | 31 + doc/api-ref/html/navtreeindex0.js | 61 + doc/api-ref/html/open.png | Bin 0 -> 123 bytes doc/api-ref/html/resize.js | 114 ++ doc/api-ref/html/search/all_0.html | 26 + doc/api-ref/html/search/all_0.js | 4 + doc/api-ref/html/search/all_1.html | 26 + doc/api-ref/html/search/all_1.js | 9 + doc/api-ref/html/search/all_2.html | 26 + doc/api-ref/html/search/all_2.js | 6 + doc/api-ref/html/search/all_3.html | 26 + doc/api-ref/html/search/all_3.js | 4 + doc/api-ref/html/search/all_4.html | 26 + doc/api-ref/html/search/all_4.js | 6 + doc/api-ref/html/search/all_5.html | 26 + doc/api-ref/html/search/all_5.js | 6 + doc/api-ref/html/search/all_6.html | 26 + doc/api-ref/html/search/all_6.js | 5 + doc/api-ref/html/search/all_7.html | 26 + doc/api-ref/html/search/all_7.js | 4 + doc/api-ref/html/search/all_8.html | 26 + doc/api-ref/html/search/all_8.js | 7 + doc/api-ref/html/search/all_9.html | 26 + doc/api-ref/html/search/all_9.js | 6 + doc/api-ref/html/search/all_a.html | 26 + doc/api-ref/html/search/all_a.js | 8 + doc/api-ref/html/search/all_b.html | 26 + doc/api-ref/html/search/all_b.js | 4 + doc/api-ref/html/search/all_c.html | 26 + doc/api-ref/html/search/all_c.js | 4 + doc/api-ref/html/search/all_d.html | 26 + doc/api-ref/html/search/all_d.js | 4 + doc/api-ref/html/search/classes_0.html | 26 + doc/api-ref/html/search/classes_0.js | 4 + doc/api-ref/html/search/classes_1.html | 26 + doc/api-ref/html/search/classes_1.js | 4 + doc/api-ref/html/search/close.png | Bin 0 -> 273 bytes doc/api-ref/html/search/defines_0.html | 26 + doc/api-ref/html/search/defines_0.js | 4 + doc/api-ref/html/search/defines_1.html | 26 + doc/api-ref/html/search/defines_1.js | 6 + doc/api-ref/html/search/defines_2.html | 26 + doc/api-ref/html/search/defines_2.js | 4 + doc/api-ref/html/search/defines_3.html | 26 + doc/api-ref/html/search/defines_3.js | 4 + doc/api-ref/html/search/defines_4.html | 26 + doc/api-ref/html/search/defines_4.js | 4 + doc/api-ref/html/search/defines_5.html | 26 + doc/api-ref/html/search/defines_5.js | 4 + doc/api-ref/html/search/defines_6.html | 26 + doc/api-ref/html/search/defines_6.js | 4 + doc/api-ref/html/search/defines_7.html | 26 + doc/api-ref/html/search/defines_7.js | 5 + doc/api-ref/html/search/files_0.html | 26 + doc/api-ref/html/search/files_0.js | 5 + doc/api-ref/html/search/files_1.html | 26 + doc/api-ref/html/search/files_1.js | 4 + doc/api-ref/html/search/files_2.html | 26 + doc/api-ref/html/search/files_2.js | 4 + doc/api-ref/html/search/functions_0.html | 26 + doc/api-ref/html/search/functions_0.js | 5 + doc/api-ref/html/search/functions_1.html | 26 + doc/api-ref/html/search/functions_1.js | 5 + doc/api-ref/html/search/functions_2.html | 26 + doc/api-ref/html/search/functions_2.js | 4 + doc/api-ref/html/search/functions_3.html | 26 + doc/api-ref/html/search/functions_3.js | 4 + doc/api-ref/html/search/functions_4.html | 26 + doc/api-ref/html/search/functions_4.js | 7 + doc/api-ref/html/search/functions_5.html | 26 + doc/api-ref/html/search/functions_5.js | 5 + doc/api-ref/html/search/functions_6.html | 26 + doc/api-ref/html/search/functions_6.js | 4 + doc/api-ref/html/search/functions_7.html | 26 + doc/api-ref/html/search/functions_7.js | 4 + doc/api-ref/html/search/functions_8.html | 26 + doc/api-ref/html/search/functions_8.js | 4 + doc/api-ref/html/search/mag_sel.png | Bin 0 -> 563 bytes doc/api-ref/html/search/nomatches.html | 12 + doc/api-ref/html/search/search.css | 271 ++++ doc/api-ref/html/search/search.js | 791 ++++++++++ doc/api-ref/html/search/search_l.png | Bin 0 -> 604 bytes doc/api-ref/html/search/search_m.png | Bin 0 -> 158 bytes doc/api-ref/html/search/search_r.png | Bin 0 -> 612 bytes doc/api-ref/html/search/searchdata.js | 30 + doc/api-ref/html/search/variables_0.html | 26 + doc/api-ref/html/search/variables_0.js | 4 + doc/api-ref/html/search/variables_1.html | 26 + doc/api-ref/html/search/variables_1.js | 5 + doc/api-ref/html/search/variables_2.html | 26 + doc/api-ref/html/search/variables_2.js | 4 + doc/api-ref/html/search/variables_3.html | 26 + doc/api-ref/html/search/variables_3.js | 4 + doc/api-ref/html/soundmanager_8c.html | 334 ++++ doc/api-ref/html/soundmanager_8c.js | 15 + doc/api-ref/html/soundmanager_8c_source.html | 110 ++ doc/api-ref/html/splitbar.png | Bin 0 -> 314 bytes doc/api-ref/html/structevent.html | 147 ++ doc/api-ref/html/structevent.js | 5 + doc/api-ref/html/sync_off.png | Bin 0 -> 853 bytes doc/api-ref/html/sync_on.png | Bin 0 -> 845 bytes doc/api-ref/html/tab_a.png | Bin 0 -> 142 bytes doc/api-ref/html/tab_b.png | Bin 0 -> 169 bytes doc/api-ref/html/tab_h.png | Bin 0 -> 177 bytes doc/api-ref/html/tab_s.png | Bin 0 -> 184 bytes doc/api-ref/html/tabs.css | 1 + doc/api-ref/html/test_8cpp.html | 173 +++ doc/api-ref/html/test_8cpp.js | 5 + doc/api-ref/html/test_8cpp_source.html | 106 ++ 157 files changed, 8869 insertions(+) create mode 100644 doc/api-ref/html/annotated.html create mode 100644 doc/api-ref/html/annotated_dup.js create mode 100644 doc/api-ref/html/bc_s.png create mode 100644 doc/api-ref/html/bdwn.png create mode 100644 doc/api-ref/html/class_lib_soundmanager.html create mode 100644 doc/api-ref/html/class_lib_soundmanager.js create mode 100644 doc/api-ref/html/classes.html create mode 100644 doc/api-ref/html/closed.png create mode 100644 doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.html create mode 100644 doc/api-ref/html/dir_4ed4f07a8451d34bdd1d92ed62b81ed4.js create mode 100644 doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.html create mode 100644 doc/api-ref/html/dir_574c53d22ed4def281d320d129dd43c9.js create mode 100644 doc/api-ref/html/dir_85932083476b47061c69d172796990a3.html create mode 100644 doc/api-ref/html/dir_85932083476b47061c69d172796990a3.js create mode 100644 doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.html create mode 100644 doc/api-ref/html/dir_b967abc00200c877344b4504e6cbcf3f.js create mode 100644 doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.html create mode 100644 doc/api-ref/html/dir_c2dc0533631c44dc5d574e7be055c656.js create mode 100644 doc/api-ref/html/doc.png create mode 100644 doc/api-ref/html/doxygen.css create mode 100644 doc/api-ref/html/doxygen.png create mode 100644 doc/api-ref/html/dynsections.js create mode 100644 doc/api-ref/html/files.html create mode 100644 doc/api-ref/html/files.js create mode 100644 doc/api-ref/html/folderclosed.png create mode 100644 doc/api-ref/html/folderopen.png create mode 100644 doc/api-ref/html/functions.html create mode 100644 doc/api-ref/html/functions_func.html create mode 100644 doc/api-ref/html/functions_vars.html create mode 100644 doc/api-ref/html/globals.html create mode 100644 doc/api-ref/html/globals_defs.html create mode 100644 doc/api-ref/html/globals_func.html create mode 100644 doc/api-ref/html/globals_vars.html create mode 100644 doc/api-ref/html/index.html create mode 100644 doc/api-ref/html/jquery.js create mode 100644 doc/api-ref/html/libsoundmanager_8cpp.html create mode 100644 doc/api-ref/html/libsoundmanager_8cpp.js create mode 100644 doc/api-ref/html/libsoundmanager_8cpp_source.html create mode 100644 doc/api-ref/html/libsoundmanager_8hpp.html create mode 100644 doc/api-ref/html/libsoundmanager_8hpp.js create mode 100644 doc/api-ref/html/libsoundmanager_8hpp_source.html create mode 100644 doc/api-ref/html/menu.js create mode 100644 doc/api-ref/html/menudata.js create mode 100644 doc/api-ref/html/nav_f.png create mode 100644 doc/api-ref/html/nav_g.png create mode 100644 doc/api-ref/html/nav_h.png create mode 100644 doc/api-ref/html/navtree.css create mode 100644 doc/api-ref/html/navtree.js create mode 100644 doc/api-ref/html/navtreedata.js create mode 100644 doc/api-ref/html/navtreeindex0.js create mode 100644 doc/api-ref/html/open.png create mode 100644 doc/api-ref/html/resize.js create mode 100644 doc/api-ref/html/search/all_0.html create mode 100644 doc/api-ref/html/search/all_0.js create mode 100644 doc/api-ref/html/search/all_1.html create mode 100644 doc/api-ref/html/search/all_1.js create mode 100644 doc/api-ref/html/search/all_2.html create mode 100644 doc/api-ref/html/search/all_2.js create mode 100644 doc/api-ref/html/search/all_3.html create mode 100644 doc/api-ref/html/search/all_3.js create mode 100644 doc/api-ref/html/search/all_4.html create mode 100644 doc/api-ref/html/search/all_4.js create mode 100644 doc/api-ref/html/search/all_5.html create mode 100644 doc/api-ref/html/search/all_5.js create mode 100644 doc/api-ref/html/search/all_6.html create mode 100644 doc/api-ref/html/search/all_6.js create mode 100644 doc/api-ref/html/search/all_7.html create mode 100644 doc/api-ref/html/search/all_7.js create mode 100644 doc/api-ref/html/search/all_8.html create mode 100644 doc/api-ref/html/search/all_8.js create mode 100644 doc/api-ref/html/search/all_9.html create mode 100644 doc/api-ref/html/search/all_9.js create mode 100644 doc/api-ref/html/search/all_a.html create mode 100644 doc/api-ref/html/search/all_a.js create mode 100644 doc/api-ref/html/search/all_b.html create mode 100644 doc/api-ref/html/search/all_b.js create mode 100644 doc/api-ref/html/search/all_c.html create mode 100644 doc/api-ref/html/search/all_c.js create mode 100644 doc/api-ref/html/search/all_d.html create mode 100644 doc/api-ref/html/search/all_d.js create mode 100644 doc/api-ref/html/search/classes_0.html create mode 100644 doc/api-ref/html/search/classes_0.js create mode 100644 doc/api-ref/html/search/classes_1.html create mode 100644 doc/api-ref/html/search/classes_1.js create mode 100644 doc/api-ref/html/search/close.png create mode 100644 doc/api-ref/html/search/defines_0.html create mode 100644 doc/api-ref/html/search/defines_0.js create mode 100644 doc/api-ref/html/search/defines_1.html create mode 100644 doc/api-ref/html/search/defines_1.js create mode 100644 doc/api-ref/html/search/defines_2.html create mode 100644 doc/api-ref/html/search/defines_2.js create mode 100644 doc/api-ref/html/search/defines_3.html create mode 100644 doc/api-ref/html/search/defines_3.js create mode 100644 doc/api-ref/html/search/defines_4.html create mode 100644 doc/api-ref/html/search/defines_4.js create mode 100644 doc/api-ref/html/search/defines_5.html create mode 100644 doc/api-ref/html/search/defines_5.js create mode 100644 doc/api-ref/html/search/defines_6.html create mode 100644 doc/api-ref/html/search/defines_6.js create mode 100644 doc/api-ref/html/search/defines_7.html create mode 100644 doc/api-ref/html/search/defines_7.js create mode 100644 doc/api-ref/html/search/files_0.html create mode 100644 doc/api-ref/html/search/files_0.js create mode 100644 doc/api-ref/html/search/files_1.html create mode 100644 doc/api-ref/html/search/files_1.js create mode 100644 doc/api-ref/html/search/files_2.html create mode 100644 doc/api-ref/html/search/files_2.js create mode 100644 doc/api-ref/html/search/functions_0.html create mode 100644 doc/api-ref/html/search/functions_0.js create mode 100644 doc/api-ref/html/search/functions_1.html create mode 100644 doc/api-ref/html/search/functions_1.js create mode 100644 doc/api-ref/html/search/functions_2.html create mode 100644 doc/api-ref/html/search/functions_2.js create mode 100644 doc/api-ref/html/search/functions_3.html create mode 100644 doc/api-ref/html/search/functions_3.js create mode 100644 doc/api-ref/html/search/functions_4.html create mode 100644 doc/api-ref/html/search/functions_4.js create mode 100644 doc/api-ref/html/search/functions_5.html create mode 100644 doc/api-ref/html/search/functions_5.js create mode 100644 doc/api-ref/html/search/functions_6.html create mode 100644 doc/api-ref/html/search/functions_6.js create mode 100644 doc/api-ref/html/search/functions_7.html create mode 100644 doc/api-ref/html/search/functions_7.js create mode 100644 doc/api-ref/html/search/functions_8.html create mode 100644 doc/api-ref/html/search/functions_8.js create mode 100644 doc/api-ref/html/search/mag_sel.png create mode 100644 doc/api-ref/html/search/nomatches.html create mode 100644 doc/api-ref/html/search/search.css create mode 100644 doc/api-ref/html/search/search.js create mode 100644 doc/api-ref/html/search/search_l.png create mode 100644 doc/api-ref/html/search/search_m.png create mode 100644 doc/api-ref/html/search/search_r.png create mode 100644 doc/api-ref/html/search/searchdata.js create mode 100644 doc/api-ref/html/search/variables_0.html create mode 100644 doc/api-ref/html/search/variables_0.js create mode 100644 doc/api-ref/html/search/variables_1.html create mode 100644 doc/api-ref/html/search/variables_1.js create mode 100644 doc/api-ref/html/search/variables_2.html create mode 100644 doc/api-ref/html/search/variables_2.js create mode 100644 doc/api-ref/html/search/variables_3.html create mode 100644 doc/api-ref/html/search/variables_3.js create mode 100644 doc/api-ref/html/soundmanager_8c.html create mode 100644 doc/api-ref/html/soundmanager_8c.js create mode 100644 doc/api-ref/html/soundmanager_8c_source.html create mode 100644 doc/api-ref/html/splitbar.png create mode 100644 doc/api-ref/html/structevent.html create mode 100644 doc/api-ref/html/structevent.js create mode 100644 doc/api-ref/html/sync_off.png create mode 100644 doc/api-ref/html/sync_on.png create mode 100644 doc/api-ref/html/tab_a.png create mode 100644 doc/api-ref/html/tab_b.png create mode 100644 doc/api-ref/html/tab_h.png create mode 100644 doc/api-ref/html/tab_s.png create mode 100644 doc/api-ref/html/tabs.css create mode 100644 doc/api-ref/html/test_8cpp.html create mode 100644 doc/api-ref/html/test_8cpp.js create mode 100644 doc/api-ref/html/test_8cpp_source.html (limited to 'doc/api-ref/html') 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 @@ + + + + + + + +Sound Manager: Data Structures + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Data Structures
+
+
+
Here are the data structures with brief descriptions:
+ + + +
 Cevent
 CLibSoundmanager
+
+
+
+ + + + 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 Binary files /dev/null and b/doc/api-ref/html/bc_s.png differ diff --git a/doc/api-ref/html/bdwn.png b/doc/api-ref/html/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/doc/api-ref/html/bdwn.png 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 @@ + + + + + + + +Sound Manager: LibSoundmanager Class Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
LibSoundmanager Class Reference
+
+
+ +

#include <libsoundmanager.hpp>

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 LibSoundmanager (const int port, const std::string &token)
 
 ~LibSoundmanager ()
 
void register_callback (void(*event_cb)(const std::string &event, struct json_object *event_contents), void(*reply_cb)(struct json_object *reply_contents))
 
int run_eventloop ()
 
int call (const std::string &verb, struct json_object *arg)
 
int call_sync (const std::string &verb, struct json_object *arg, struct json_object *ret)
 
int subscribe (const std::string &event_name)
 
int unsubscribe (const std::string &event_name)
 
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)
 
+

Detailed Description

+
+

Definition at line 62 of file libsoundmanager.hpp.

+

Constructor & Destructor Documentation

+ +

◆ LibSoundmanager()

+ +
+
+ + + + + + + + + + + + + + + + + + +
LibSoundmanager::LibSoundmanager (const int port,
const std::string & token 
)
+
+ +
+
+ +

◆ ~LibSoundmanager()

+ +
+
+ + + + + + + +
LibSoundmanager::~LibSoundmanager ()
+
+ +

Definition at line 93 of file libsoundmanager.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ call()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int LibSoundmanager::call (const std::string & verb,
struct json_object * arg 
)
+
+

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.

+ +

Definition at line 217 of file libsoundmanager.cpp.

+ +
+
+ +

◆ call_sync()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int LibSoundmanager::call_sync (const std::string & verb,
struct json_object * arg,
struct json_object * ret 
)
+
+ +

Definition at line 236 of file libsoundmanager.cpp.

+ +
+
+ +

◆ on_call()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void LibSoundmanager::on_call (void * closure,
const char * api,
const char * verb,
struct afb_wsj1_msg * msg 
)
+
+ +

Definition at line 347 of file libsoundmanager.cpp.

+ +
+
+ +

◆ on_event()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void LibSoundmanager::on_event (void * closure,
const char * event,
struct afb_wsj1_msg * msg 
)
+
+ +

Definition at line 358 of file libsoundmanager.cpp.

+ +
+
+ +

◆ on_hangup()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void LibSoundmanager::on_hangup (void * closure,
struct afb_wsj1 * wsj 
)
+
+ +

Definition at line 342 of file libsoundmanager.cpp.

+ +
+
+ +

◆ on_reply()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void LibSoundmanager::on_reply (void * closure,
struct afb_wsj1_msg * msg 
)
+
+ +

Definition at line 369 of file libsoundmanager.cpp.

+ +
+
+ +

◆ register_callback()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void LibSoundmanager::register_callback (void(*)(const std::string &event, struct json_object *event_contents) event_cb,
void(*)(struct json_object *reply_contents) reply_cb 
)
+
+

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

+ +

Definition at line 119 of file libsoundmanager.cpp.

+ +
+
+ +

◆ run_eventloop()

+ +
+
+ + + + + + + +
int LibSoundmanager::run_eventloop ()
+
+

This function start receiving the reply/event message from sound manager

+

Parameters

+

Nothing

Rreturn

+
    +
  • Returns thread_id on success or -1 in case of error.
  • +
+

Note

+ +

Definition at line 182 of file libsoundmanager.cpp.

+ +
+
+ +

◆ subscribe()

+ +
+
+ + + + + + + + +
int LibSoundmanager::subscribe (const std::string & event_name)
+
+

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.

+ +

Definition at line 255 of file libsoundmanager.cpp.

+ +
+
+ +

◆ unsubscribe()

+ +
+
+ + + + + + + + +
int LibSoundmanager::unsubscribe (const std::string & event_name)
+
+

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.

+ +

Definition at line 284 of file libsoundmanager.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + 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 @@ + + + + + + + +Sound Manager: Data Structure Index + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Data Structure Index
+
+
+
e | l
+ + + + + +
  e  
+
  l  
+
event   LibSoundmanager   
+
e | l
+
+
+ + + + diff --git a/doc/api-ref/html/closed.png b/doc/api-ref/html/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/doc/api-ref/html/closed.png 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 @@ + + + + + + + +Sound Manager: SoundManagerBinding/include/libsoundmanager Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
libsoundmanager Directory Reference
+
+
+ + + + +

+Files

file  libsoundmanager.hpp [code]
 
+
+
+ + + + 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 @@ + + + + + + + +Sound Manager: SoundManagerBinding/libsoundmanager Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
libsoundmanager Directory Reference
+
+
+ + + + + + +

+Files

file  libsoundmanager.cpp [code]
 
file  test.cpp [code]
 
+
+
+ + + + 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 @@ + + + + + + + +Sound Manager: SoundManagerBinding/soundmanager_binging Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
soundmanager_binging Directory Reference
+
+
+ + + + +

+Files

file  soundmanager.c [code]
 
+
+
+ + + + 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 @@ + + + + + + + +Sound Manager: SoundManagerBinding Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
SoundManagerBinding Directory Reference
+
+
+ + + + + + + + +

+Directories

directory  include
 
directory  libsoundmanager
 
directory  soundmanager_binging
 
+
+
+ + + + 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 @@ + + + + + + + +Sound Manager: SoundManagerBinding/include Directory Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
include Directory Reference
+
+
+ + + + +

+Directories

directory  libsoundmanager
 
+
+
+ + + + 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 Binary files /dev/null and b/doc/api-ref/html/doc.png 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 Binary files /dev/null and b/doc/api-ref/html/doxygen.png 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 + + + + + + +Sound Manager: File List + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
+
+ + + + 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 Binary files /dev/null and b/doc/api-ref/html/folderclosed.png differ diff --git a/doc/api-ref/html/folderopen.png b/doc/api-ref/html/folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/doc/api-ref/html/folderopen.png 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 @@ + + + + + + + +Sound Manager: Data Fields + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all struct and union fields with links to the structures/unions they belong to:
+
+
+ + + + 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 @@ + + + + + + + +Sound Manager: Data Fields - Functions + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
+ + + + 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 @@ + + + + + + + +Sound Manager: Data Fields - Variables + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
+ + + + 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 @@ + + + + + + + +Sound Manager: Globals + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+
+
+ + + + 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 @@ + + + + + + + +Sound Manager: Globals + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
+ + + + 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 @@ + + + + + + + +Sound Manager: Globals + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
+ + + + 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 @@ + + + + + + + +Sound Manager: Globals + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
+ + + + 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 @@ + + + + + + + +Sound Manager: Main Page + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Sound Manager Documentation
+
+
+
+
+ + + + 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(;b40){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(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?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
a";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>",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="
";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="
t
";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="
";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-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=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=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=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;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?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;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=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 bRe[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=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.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="";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="

";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="
";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;bT0){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;bT0){for(bB=bA;bB=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-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=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_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
","
"]}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>");try{for(var bw=0,bv=this.length;bw1&&bw0?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>");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]===""&&!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=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)<[^<]*)*<\/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=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("
").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.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").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"?"":"")+"");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;h0){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('
').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
');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(hl.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');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=$(' + + +
+ +
+
libsoundmanager.cpp File Reference
+
+
+
#include <stdarg.h>
+#include <sys/socket.h>
+#include <iostream>
+#include <algorithm>
+#include <thread>
+#include <errno.h>
+#include <libsoundmanager/libsoundmanager.hpp>
+
+

Go to the source code of this file.

+
+ + + + + +

+Macros

#define ELOG(args, ...)   _ELOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)
 
#define DLOG(args, ...)   _DLOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)
 
+

Macro Definition Documentation

+ +

◆ DLOG

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define DLOG( args,
 ... 
)   _DLOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)
+
+ +

Definition at line 26 of file libsoundmanager.cpp.

+ +
+
+ +

◆ ELOG

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ELOG( args,
 ... 
)   _ELOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)
+
+ +

Definition at line 25 of file libsoundmanager.cpp.

+ +
+
+ + + + + + 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 @@ + + + + + + + +Sound Manager: SoundManagerBinding/libsoundmanager/libsoundmanager.cpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
libsoundmanager.cpp
+
+
+Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include <stdarg.h>
18 #include <sys/socket.h>
19 #include <iostream>
20 #include <algorithm>
21 #include <thread>
22 #include <errno.h>
24 
25 #define ELOG(args,...) _ELOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)
26 #define DLOG(args,...) _DLOG(__FUNCTION__,__LINE__,args,##__VA_ARGS__)
27 
28 using namespace std;
29 
30 static void _DLOG(const char* func, const int line, const char* log, ...);
31 static void _ELOG(const char* func, const int line, const char* log, ...);
32 static bool has_verb(const string& verb);
33 static const char API[] = "soundmanager";
34 
35 static void _on_hangup_static(void *closure, struct afb_wsj1 *wsj)
36 {
37  static_cast<LibSoundmanager*>(closure)->on_hangup(NULL,wsj);
38 }
39 
40 static void _on_call_static(void *closure, const char *api, const char *verb, struct afb_wsj1_msg *msg)
41 {
42  /* LibSoundmanager is not called from other process */
43 }
44 
45 static void _on_event_static(void* closure, const char* event, struct afb_wsj1_msg *msg)
46 {
47  static_cast<LibSoundmanager*>(closure)->on_event(NULL,event,msg);
48 }
49 
50 static void _on_reply_static(void *closure, struct afb_wsj1_msg *msg)
51 {
52  static_cast<LibSoundmanager*>(closure)->on_reply(NULL,msg);
53 }
54 
55 
70 LibSoundmanager::LibSoundmanager(const int port, const string& token)
71 {
72  int ret;
73  if(port > 0 && token.size() > 0)
74  {
75  mport = port;
76  mtoken = token;
77  }
78  else
79  {
80  ELOG("port and token should be > 0, Initial port and token uses.");
81  }
82 
83  ret = initialize_websocket();
84  if(ret != 0 )
85  {
86  ELOG("Failed to initialize websocket");
87  }
88  else{
89  DLOG("Initialized");
90  }
91 }
92 
94 {
95  if(mploop)
96  {
97  sd_event_unref(mploop);
98  }
99  if(sp_websock != NULL)
100  {
101  free(sp_websock);
102  }
103 }
104 
120  void (*event_cb)(const std::string& event, struct json_object* event_contents),
121  void (*reply_cb)(struct json_object* reply_contents))
122 {
123  onEvent = event_cb;
124  onReply = reply_cb;
125 }
126 
127 int LibSoundmanager::initialize_websocket()
128 {
129  mploop = NULL;
130  onEvent = nullptr;
131  onReply = nullptr;
132  int ret = sd_event_default(&mploop);
133  if(ret < 0)
134  {
135  ELOG("Failed to create event loop");
136  goto END;
137  }
138  /* Initialize interface from websocket */
139 
140  minterface.on_hangup = _on_hangup_static;
141  minterface.on_call = _on_call_static; /* Is this necessary? */
142  minterface.on_event = _on_event_static;
143  muri += "ws://localhost:" + to_string(mport) + "/api?token=" + mtoken; /*To be modified*/
144  sp_websock = afb_ws_client_connect_wsj1(mploop, muri.c_str(), &minterface, this);
145  if(sp_websock == NULL)
146  {
147  ELOG("Failed to create websocket connection");
148  goto END;
149  }
150 
151  /* creates the evsrc */
152  //ret = sd_event_add_io(mploop,&mevent_src, sp_websock->fd, EPOLLIN, event_callback, NULL);
153 
154  return 0;
155 END:
156  if(mploop)
157  {
158  sd_event_unref(mploop);
159  }
160  return -1;
161 }
162 
163 static void *event_loop_run(void *args)
164 {
165  struct sd_event* loop = (struct sd_event*)(args);
166  DLOG("start eventloop");
167  for(;;)
168  sd_event_run(loop, 30000000);
169 }
170 
183 {
184  if(mploop && sp_websock)
185  {
186  pthread_t thread_id;
187  int ret = pthread_create(&thread_id, NULL, event_loop_run, mploop);
188  if(ret != 0)
189  {
190  ELOG("Cannot run eventloop due to error:%d", errno);
191  return -1;
192  }
193  else
194  return thread_id;
195  }
196  else
197  {
198  ELOG("Connecting is not established yet");
199  return -1;
200  }
201 }
202 
217 int LibSoundmanager::call(const string& verb, struct json_object* arg)
218 {
219  int ret;
220  if(!sp_websock)
221  {
222  return -1;
223  }
224  if (!has_verb(verb))
225  {
226  ELOG("verb doesn't exit");
227  return -1;
228  }
229  ret = afb_wsj1_call_j(sp_websock, API, verb.c_str(), arg, _on_reply_static, this);
230  if (ret < 0) {
231  ELOG("Failed to call verb:%s",verb.c_str());
232  }
233  return ret;
234 }
235 
236 int LibSoundmanager::call_sync(const string& verb, struct json_object* arg, struct json_object* ret)
237 {
238  /* I haven't implemented yet */
239 }
240 
255 int LibSoundmanager::subscribe(const string& event_name)
256 {
257  if(!sp_websock)
258  {
259  return -1;
260  }
261  struct json_object* j_obj = json_object_new_object();
262  json_object_object_add(j_obj, "event", json_object_new_string(event_name.c_str()));
263 
264  int ret = afb_wsj1_call_j(sp_websock, API, "subscribe", j_obj, _on_reply_static, this);
265  if (ret < 0) {
266  ELOG("Failed to call verb:%s",__FUNCTION__);
267  }
268  return ret;
269 }
270 
284 int LibSoundmanager::unsubscribe(const string& event_name)
285 {
286  if(!sp_websock)
287  {
288  return -1;
289  }
290  struct json_object* j_obj = json_object_new_object();
291  json_object_object_add(j_obj, "event", json_object_new_string(event_name.c_str()));
292 
293  int ret = afb_wsj1_call_j(sp_websock, API, "unsubscribe", j_obj, _on_reply_static, this);
294  if (ret < 0) {
295  ELOG("Failed to call verb:%s",__FUNCTION__);
296  }
297  return ret;
298 }
299 
300 am_Error_e LibSoundmanager::connect(const am_sourceID_t sourceID, const am_sinkID_t sinkID, am_mainConnectionID_t& mainConnectionID)
301 {
302  /*int ret;
303  char *key;
304  rc = asprintf(&key, "%d:%s/%s", ++num, api, "connect");
305  ret = afb_wsj1_call_s(wsj1, api, verb, object, on_reply, key);
306  if(ret < 0)
307  {
308  fprintf(stderr, "calling %s/%s(%s) failed: %m\n", api, verb, object);
309 
310  }*/
311  /* open the json scripts */
312  // get mainconnedction ID */
313  //mainConnectionID = xx;
314  return E_OK;
315 }
316 
317 am_Error_e LibSoundmanager::disconnect(const am_mainConnectionID_t mainConnectionID)
318 {
319  return E_OK;
320 }
321 
322 /*const struct afb_wsj1* LibSoundmanager::get_websocket_handler()
323 {
324  if(sp_websock)
325  {
326  return sp_websock;
327  }
328  return nullptr;
329 }
330 
331 const struct sd_event* LibSoundmanager::get_sd_event()
332 {
333  if(mploop)
334  {
335  return mploop;
336  }
337  return nullptr;
338 }*/
339 
340 /************* Callback Function *************/
341 
342 void LibSoundmanager::on_hangup(void *closure, struct afb_wsj1 *wsj)
343 {
344  DLOG("%s called", __FUNCTION__);
345 }
346 
347 void LibSoundmanager::on_call(void *closure, const char *api, const char *verb, struct afb_wsj1_msg *msg)
348 {
349 }
350 
351 /*
352 * event is like "soundmanager/newMainConnection"
353 * msg is like {"event":"soundmanager\/newMainConnection","data":{"mainConnectionID":3,"sourceID":101,"sinkID":100,"delay":0,"connectionState":4},"jtype":"afb-event"})}
354 * ^key^ ^^^^^^^^^^^^ value ^^^^^^^^^^^^
355 * so you can get
356  event name : struct json_object obj = json_object_object_get(msg,"event")
357 */
358 void LibSoundmanager::on_event(void *closure, const char *event, struct afb_wsj1_msg *msg)
359 {
360  cout << "ON-EVENT:" << event << "(" << afb_wsj1_msg_object_s(msg) << ")" << endl;
361  if(onEvent != nullptr)
362  {
363  const string ev(event);
364  struct json_object* ev_contents = afb_wsj1_msg_object_j(msg);
365  onEvent(ev, ev_contents);
366  }
367 }
368 
369 void LibSoundmanager::on_reply(void *closure, struct afb_wsj1_msg *msg)
370 {
371  cout << "ON-REPLY:" << "(" << afb_wsj1_msg_object_s(msg) << ")" << endl;
372  if(onReply != nullptr)
373  {
374  struct json_object* reply = afb_wsj1_msg_object_j(msg);
375  onReply(reply);
376  }
377 }
378 
379 /* Internal Function in libsoundmanager */
380 
381 static void _ELOG(const char* func, const int line, const char* log, ...)
382 {
383  char *message;
384  va_list args;
385  va_start(args, log);
386  if (log == NULL || vasprintf(&message, log, args) < 0)
387  message = NULL;
388  cout << "[ERROR]" << func << "(" << line << "):" << message << endl;
389  va_end(args);
390  free(message);
391 }
392 
393 static void _DLOG(const char* func, const int line, const char* log, ...)
394 {
395  char *message;
396  va_list args;
397  va_start(args, log);
398  if (log == NULL || vasprintf(&message, log, args) < 0)
399  message = NULL;
400  cout << "[DEBUG]" << func << "(" << line << "):" << message << endl;
401  va_end(args);
402  free(message);
403 }
404 
405 static bool has_verb(const string& verb)
406 {
407  DLOG("verb is %s", verb.c_str());
408  if(find(api_list.begin(), api_list.end(), verb) != api_list.end())
409  return true;
410  else
411  return false;
412 }
const std::vector< std::string > api_list
+ + +
int call_sync(const std::string &verb, struct json_object *arg, struct json_object *ret)
+
int unsubscribe(const std::string &event_name)
+
int call(const std::string &verb, struct json_object *arg)
+
void register_callback(void(*event_cb)(const std::string &event, struct json_object *event_contents), void(*reply_cb)(struct json_object *reply_contents))
+ + + +
void on_hangup(void *closure, struct afb_wsj1 *wsj)
+
int subscribe(const std::string &event_name)
+
void on_reply(void *closure, struct afb_wsj1_msg *msg)
+ +
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)
+
#define ELOG(args,...)
+
#define DLOG(args,...)
+
+
+ + + + 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 @@ + + + + + + + +Sound Manager: SoundManagerBinding/include/libsoundmanager/libsoundmanager.hpp File Reference + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
libsoundmanager.hpp File Reference
+
+
+
#include <audiomanagertypes.h>
+#include <vector>
+#include <map>
+#include <string>
+#include <json-c/json.h>
+#include <systemd/sd-event.h>
+#include <afb/afb-binding.h>
+#include <afb/afb-wsj1.h>
+#include <afb/afb-ws-client.h>
+
+

Go to the source code of this file.

+ + + + +

+Data Structures

class  LibSoundmanager
 
+ + + + + +

+Variables

const std::vector< std::string > api_list
 
const std::vector< std::string > event_list
 
+

Variable Documentation

+ +

◆ api_list

+ +
+
+ + + + +
const std::vector<std::string> api_list
+
+Initial value:
{
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")
}
+

Definition at line 34 of file libsoundmanager.hpp.

+ +
+
+ +

◆ event_list

+ +
+
+ + + + +
const std::vector<std::string> event_list
+
+Initial value:
{
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("ackSetSourceState")
}
+

Definition at line 50 of file libsoundmanager.hpp.

+ +
+
+
+
+ + + + 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 @@ + + + + + + + +Sound Manager: SoundManagerBinding/include/libsoundmanager/libsoundmanager.hpp Source File + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Sound Manager +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
libsoundmanager.hpp
+
+
+Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef LIBSOUNDMANAGER_H
18 #define LIBSOUNDMANAGER_H
19 #include <audiomanagertypes.h>
20 #include <vector>
21 #include <map>
22 #include <string>
23 #include <json-c/json.h>
24 #include <systemd/sd-event.h>
25 extern "C"
26 {
27 #include <afb/afb-binding.h>
28 #include <afb/afb-wsj1.h>
29 #include <afb/afb-ws-client.h>
30 }
31 
32 using namespace am;
33 
34 const std::vector<std::string> api_list{
35  std::string("connect"),
36  std::string("disconnect"),
37  std::string("setVolume"),
38  std::string("volumeStep"),
39  std::string("setSinkMuteState"),
40  std::string("getListMainConnections"),
41  std::string("ackConnect"),
42  std::string("ackDisconnect"),
43  std::string("ackSetSourceState"),
44  std::string("registerSource"),
45  std::string("deregisterSource"),
46  std::string("subscribe"),
47  std::string("unsubscribe")
48 };
49 
50 const std::vector<std::string> event_list{
51  std::string("newMainConnection"),
52  std::string("volumeChanged"),
53  std::string("removedMainConnection"),
54  std::string("sinkMuteStateChanged"),
55  std::string("mainConnectionStateChanged"),
56  std::string("setRoutingReady"),
57  std::string("setRoutingRundown"),
58  std::string("asyncConnect"),
59  std::string("ackSetSourceState")
60 };
61 
63 {
64 private:
65  LibSoundmanager() = delete;
66 public:
67  LibSoundmanager(const int port, const std::string& token);
68  //LibSoundmanager(const std::string& uri);
69  ~LibSoundmanager();
70 
71  /* Method */
72  void register_callback(
73  void (*event_cb)(const std::string& event, struct json_object* event_contents),
74  void (*reply_cb)(struct json_object* reply_contents)
75  );
76  int run_eventloop();
77  int call(const std::string& verb, struct json_object* arg);
78  int call_sync(const std::string& verb, struct json_object* arg, struct json_object* ret);
79  int subscribe(const std::string& event_name);
80  int unsubscribe(const std::string& event_name);
81  /*const struct afb_wsj1* get_websocket_handler();
82  const struct sd_event* get_sd_event();*/
83 
84 private:
85  int initialize_websocket();
86  void (*onEvent)(const std::string& event, struct json_object* event_contents);
87  void (*onReply)(struct json_object* reply);
88 
89  struct afb_wsj1* sp_websock;
90  struct afb_wsj1_itf minterface;
91  sd_event* mploop;
92  std::string muri;
93  int mport = 12345;
94  std::string mtoken = "123456";
95 
96  am_Error_e connect(const am_sourceID_t sourceID, const am_sinkID_t sinkID, am::am_mainConnectionID_t& mainConnectionID);
97  am_Error_e disconnect(const am_mainConnectionID_t mainConnectionID);
98 
99 public:
100  /* Don't use/ Internal only */
101  void on_hangup(void *closure, struct afb_wsj1 *wsj);
102  void on_call(void *closure, const char *api, const char *verb, struct afb_wsj1_msg *msg);
103  void on_event(void *closure, const char *event, struct afb_wsj1_msg *msg);
104  void on_reply(void *closure, struct afb_wsj1_msg *msg);
105 };
106 #endif /* LIBSOUNDMANAGER_H */
+
const std::vector< std::string > api_list
+
const std::vector< std::string > event_list
+ + +
+
+ + + + 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+=''; + } + 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('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#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 Binary files /dev/null and b/doc/api-ref/html/nav_f.png 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 Binary files /dev/null and b/doc/api-ref/html/nav_g.png 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 Binary files /dev/null and b/doc/api-ref/html/nav_h.png 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 = '▼'; +var arrowRight = '►'; + +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 = ' '; + 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+11) 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(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +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(/=desktop_vp) { + if (!collapsed) { + collapseExpand(); + } + } else if (width>desktop_vp && collapsedWidth0) { + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 Binary files /dev/null and b/doc/api-ref/html/search/close.png 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 Binary files /dev/null and b/doc/api-ref/html/search/mag_sel.png 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 @@ + + + + + + + +
    +
    No Matches
    +
    + + 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 do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // 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 . + 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 + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + 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 @@ + + + + + + + +Sound Manager: SoundManagerBinding/soundmanager_binging/soundmanager.c File Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Sound Manager +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    soundmanager.c File Reference
    +
    +
    +
    #include <stdio.h>
    +#include <string.h>
    +#include <stdlib.h>
    +#include <stdint.h>
    +#include <unistd.h>
    +#include <json-c/json.h>
    +#include <pthread.h>
    +#include <afb/afb-binding.h>
    +#include "sm-helper.h"
    +#include "dbus/audio_manager_interface.h"
    +
    +

    Go to the source code of this file.

    + + + + +

    +Data Structures

    struct  event
     
    + + + + + + + + + + + + + + + + + + + +

    +Macros

    #define _GNU_SOURCE
     
    #define AM_NAME   "org.genivi.audiomanager"
     
    #define AM_CMD_PATH   "/org/genivi/audiomanager/commandinterface"
     
    #define AM_ROUTE_PATH   "/org/genivi/audiomanager/routinginterface"
     
    #define SOUND_MANAGER_NAME   "org.soundmanager.genivi.routingsend"
     
    #define SOUND_MANAGER_PATH   "org/soundmanager/genivi/routingsend"
     
    #define COMMAND_EVENT_NUM   10
     
    #define ROUTING_EVENT_NUM   10
     
    #define MAX_LEN_STR   100
     
    + + + + + +

    +Functions

    const struct afb_binding * afbBindingV1Register (const struct afb_binding_interface *itf)
     
    int afbBindingV1ServiceInit (struct afb_service service)
     
    +

    Macro Definition Documentation

    + +

    ◆ _GNU_SOURCE

    + +
    +
    + + + + +
    #define _GNU_SOURCE
    +
    + +

    Definition at line 17 of file soundmanager.c.

    + +
    +
    + +

    ◆ AM_CMD_PATH

    + +
    +
    + + + + +
    #define AM_CMD_PATH   "/org/genivi/audiomanager/commandinterface"
    +
    + +

    Definition at line 32 of file soundmanager.c.

    + +
    +
    + +

    ◆ AM_NAME

    + +
    +
    + + + + +
    #define AM_NAME   "org.genivi.audiomanager"
    +
    + +

    Definition at line 31 of file soundmanager.c.

    + +
    +
    + +

    ◆ AM_ROUTE_PATH

    + +
    +
    + + + + +
    #define AM_ROUTE_PATH   "/org/genivi/audiomanager/routinginterface"
    +
    + +

    Definition at line 33 of file soundmanager.c.

    + +
    +
    + +

    ◆ COMMAND_EVENT_NUM

    + +
    +
    + + + + +
    #define COMMAND_EVENT_NUM   10
    +
    + +

    Definition at line 37 of file soundmanager.c.

    + +
    +
    + +

    ◆ MAX_LEN_STR

    + +
    +
    + + + + +
    #define MAX_LEN_STR   100
    +
    + +

    Definition at line 39 of file soundmanager.c.

    + +
    +
    + +

    ◆ ROUTING_EVENT_NUM

    + +
    +
    + + + + +
    #define ROUTING_EVENT_NUM   10
    +
    + +

    Definition at line 38 of file soundmanager.c.

    + +
    +
    + +

    ◆ SOUND_MANAGER_NAME

    + +
    +
    + + + + +
    #define SOUND_MANAGER_NAME   "org.soundmanager.genivi.routingsend"
    +
    + +

    Definition at line 34 of file soundmanager.c.

    + +
    +
    + +

    ◆ SOUND_MANAGER_PATH

    + +
    +
    + + + + +
    #define SOUND_MANAGER_PATH   "org/soundmanager/genivi/routingsend"
    +
    + +

    Definition at line 35 of file soundmanager.c.

    + +
    +
    +

    Function Documentation

    + +

    ◆ afbBindingV1Register()

    + +
    +
    + + + + + + + + +
    const struct afb_binding* afbBindingV1Register (const struct afb_binding_interface * itf)
    +
    + +

    Definition at line 1137 of file soundmanager.c.

    + +
    +
    + +

    ◆ afbBindingV1ServiceInit()

    + +
    +
    + + + + + + + + +
    int afbBindingV1ServiceInit (struct afb_service service)
    +
    + +

    Definition at line 1145 of file soundmanager.c.

    + +
    +
    +
    +
    + + + + 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 @@ + + + + + + + +Sound Manager: SoundManagerBinding/soundmanager_binging/soundmanager.c Source File + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Sound Manager +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    soundmanager.c
    +
    +
    +Go to the documentation of this file.
    1 /*
    2  * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
    3  *
    4  * Licensed under the Apache License, Version 2.0 (the "License");
    5  * you may not use this file except in compliance with the License.
    6  * You may obtain a copy of the License at
    7  *
    8  * http://www.apache.org/licenses/LICENSE-2.0
    9  *
    10  * Unless required by applicable law or agreed to in writing, software
    11  * distributed under the License is distributed on an "AS IS" BASIS,
    12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  * See the License for the specific language governing permissions and
    14  * limitations under the License.
    15  */
    16 
    17 #define _GNU_SOURCE
    18 #include <stdio.h>
    19 #include <string.h>
    20 #include <stdlib.h>
    21 #include <stdint.h>
    22 #include <unistd.h>
    23 #include <json-c/json.h>
    24 //#include <search.h>
    25 #include <pthread.h>
    26 #include <afb/afb-binding.h>
    27 #include "sm-helper.h"
    28 #include <glib.h>
    29 #include "dbus/audio_manager_interface.h"
    30 
    31 #define AM_NAME "org.genivi.audiomanager"
    32 #define AM_CMD_PATH "/org/genivi/audiomanager/commandinterface"
    33 #define AM_ROUTE_PATH "/org/genivi/audiomanager/routinginterface"
    34 #define SOUND_MANAGER_NAME "org.soundmanager.genivi.routingsend"
    35 #define SOUND_MANAGER_PATH "org/soundmanager/genivi/routingsend"
    36 
    37 #define COMMAND_EVENT_NUM 10
    38 #define ROUTING_EVENT_NUM 10
    39 #define MAX_LEN_STR 100
    40 
    41 const static struct afb_binding_interface *afbitf;
    42 static AudiomanagerCommandinterface *am_cmd_bus;
    43 static AudiomanagerRoutinginterface *am_route_bus;
    44 static OrgSoundmanagerGeniviRoutingsend *sm_adapter;
    45 static OrgSoundmanagerGeniviRoutingsendIface* sm_itf;
    46 
    47 static GMainLoop *loop = NULL;
    48 /* To Do hash table is better */
    49 struct event{
    50  char* name;
    51  struct afb_event* event;
    52  };
    53 static struct event command_event_list[COMMAND_EVENT_NUM];
    54 static struct event routing_event_list[ROUTING_EVENT_NUM];
    55 
    56 static struct afb_event ev_new_connection;
    57 static struct afb_event ev_removed_main_connection;
    58 static struct afb_event ev_volume_changed;
    59 static struct afb_event ev_sink_mute_state_changed;
    60 static struct afb_event ev_main_connection_state_changed;
    61 
    62 /* Routing interface event */
    63 static struct afb_event ev_set_routing_ready;
    64 static struct afb_event ev_set_routing_rundown;
    65 static struct afb_event ev_async_connect;
    66 static struct afb_event ev_async_set_source_state;
    67 
    68 static const char _sourceid[] = "sourceID";
    69 static const char _sinkid[] = "sinkID" ;
    70 static const char _main_connection_id[] = "mainConnectionID";
    71 static const char _delay[] = "delay";
    72 static const char _connectionState[] = "connectionState";
    73 static const char _connectionID[] = "connectionID";
    74 static const char _volume[] = "volume";
    75 static const char _volumeStep[] = "volumeStep";
    76 static const char _muteState[] = "muteState";
    77 
    78 static const char _handle[] = "handle";
    79 static const char _appname[] = "appname";
    80 static const char _ramp[] = "ramp";
    81 static const char _time[] = "time";
    82 static const char _sourceState[] = "sourceState";
    83 static const char _sourceClassID[] = "sourceClassID";
    84 static const char _error[] = "error";
    85 static const char _sinkData[] = "sinkData";
    86 static const char _sourceData[] = "sourceData";
    87 static const char _interruptState[] = "interruptState";
    88 static const char _availability[] = "availability";
    89 static const char _domainID[] = "domainID";
    90 static const char _listvolumes[] = "listvolumes";
    91 static const char _payload[] = "payload";
    92 static const char _connectionFormat[] = "connectionFormat";
    93 /*
    94 ********** Method of Sound Manager (API) **********
    95 */
    96 
    97 /* call "connect" function of Audio Manager*/
    98 static void connect (struct afb_req request)
    99 {
    100  DEBUG(afbitf,"call connect");
    101  guint16 source_id, sink_id;
    102  guint16 main_connectionID = 0;
    103  gint16 ret;
    104  REQ_ERROR req_err1, req_err2;
    105  GError *err = NULL;
    106  /* ToDo select appname or sourceID(sinkID) */
    107 
    108  req_err1 = getid_uint16(request, _sourceid, &source_id);
    109  req_err2 = getid_uint16(request, _sinkid, &sink_id);
    110 
    111  if((req_err1 != REQ_OK) || (req_err2 != REQ_OK))
    112  {
    113  DEBUG(afbitf, "getid_uint16 source ret = %d,sink ret = %d", source_id, sink_id);
    114  NOTICE(afbitf,"wrong request");
    115  afb_req_fail(request,"wrong-request",NULL);
    116  return;
    117  }
    118 
    119  audiomanager_commandinterface_call_connect_sync(
    120  am_cmd_bus,
    121  source_id,
    122  sink_id,
    123  &ret,
    124  &main_connectionID,
    125  NULL, &err);
    126 
    127  if(err != NULL)
    128  {
    129  afb_req_fail(request, "failed", "Unable to call connect");
    130  return;
    131  }
    132 
    133  /* ToDo Remember appname(key) and tie to sourceID(value) */
    134 
    135  /*create response json object*/
    136  struct json_object *res = json_object_new_object();
    137  sm_add_object_to_json_object_func(res, __FUNCTION__, 4,
    138  "error", ret,
    139  _main_connection_id, main_connectionID);
    140  char *info;
    141  get_response_audiomanager_massage_error(ret,&info);
    142  afb_req_success(request, res, info);
    143 }
    144 
    145 /* call "disconnect" function of Audio Manager*/
    146 static void disconnect (struct afb_req request)
    147 {
    148  DEBUG(afbitf,"call disconnect");
    149 
    150  guint16 id;
    151  gint16 ret;
    152  REQ_ERROR req_err;
    153  GError *err = NULL;
    154 
    155  req_err = getid_uint16(request, _main_connection_id, &id);
    156  DEBUG(afbitf, "requested %s = %d", _main_connection_id, id);
    157 
    158  if(req_err != REQ_OK)
    159  {
    160  afb_req_fail(request,"wrong-request",afb_req_value (request, _main_connection_id));
    161  return;
    162  }
    163  audiomanager_commandinterface_call_disconnect_sync(
    164  am_cmd_bus,
    165  id,
    166  &ret,
    167  NULL, &err);
    168  DEBUG(afbitf, "ret = %d", ret);
    169 
    170  if(err != NULL)
    171  {
    172  afb_req_fail(request, "failed", "Unable to call getListMainConnections");
    173  return;
    174  }
    175 
    176  struct json_object* res_obj = json_object_new_object();
    177  sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,
    178  "error", ret);
    179  char *info;
    180  get_response_audiomanager_massage_error(ret,&info);
    181 
    182  afb_req_success(request, res_obj, info); /* return error num as status */
    183 }
    184 
    185 static void setVolume (struct afb_req request)
    186 {
    187  DEBUG(afbitf,"call setVolume");
    188 
    189  guint16 sink_id, vol;
    190  gint16 ret;
    191  REQ_ERROR req_err1, req_err2;
    192  GError *err = NULL;
    193 
    194  req_err1 = getid_uint16(request, _sinkid, &sink_id);
    195  req_err2 = getid_int16(request, _volume, &vol);
    196  DEBUG(afbitf, "requested %s = %d, %s = %d",_sinkid, sink_id, _volume, vol);
    197  if((req_err1 != REQ_OK) || (req_err2 != REQ_OK))
    198  {
    199  afb_req_fail(request,"wrong-request", NULL);
    200  return;
    201  }
    202 
    203  audiomanager_commandinterface_call_set_volume_sync(
    204  am_cmd_bus,
    205  sink_id,
    206  vol,
    207  &ret,
    208  NULL, &err);
    209  DEBUG(afbitf, "ret = %d", ret);
    210 
    211  if(err != NULL)
    212  {
    213  afb_req_fail(request, "failed", "Unable to call setVolume");
    214  return;
    215  }
    216 
    217  struct json_object* res_obj = json_object_new_object();
    218  sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,
    219  "error", ret);
    220  char *info;
    221  get_response_audiomanager_massage_error(ret,&info);
    222 
    223  afb_req_success(request, res_obj, info); /* return error num as status */
    224 }
    225 
    226 static void volumeStep (struct afb_req request)
    227 {
    228  DEBUG(afbitf,"call volumeStep");
    229 
    230  guint16 sink_id, vol;
    231  gint16 ret;
    232  REQ_ERROR req_err1, req_err2;
    233  GError *err = NULL;
    234 
    235  req_err1 = getid_uint16(request, _sinkid, &sink_id);
    236  req_err2 = getid_int16(request, _volumeStep, &vol);
    237  DEBUG(afbitf, "requested %s = %d, %s = %d",_sinkid, sink_id, _volumeStep, vol);
    238  if((req_err1 != REQ_OK) || (req_err2 != REQ_OK))
    239  {
    240  afb_req_fail(request,"wrong-request", NULL);
    241  return;
    242  }
    243 
    244  audiomanager_commandinterface_call_volume_step_sync(
    245  am_cmd_bus,
    246  sink_id,
    247  vol,
    248  &ret,
    249  NULL, &err);
    250  DEBUG(afbitf, "ret = %d", ret);
    251 
    252  if(err != NULL)
    253  {
    254  afb_req_fail(request, "failed", "Unable to call volumeStep");
    255  return;
    256  }
    257 
    258  struct json_object* res_obj = json_object_new_object();
    259  sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,
    260  "error", ret);
    261  char *info;
    262  get_response_audiomanager_massage_error(ret,&info);
    263 
    264  afb_req_success(request, res_obj, info); /* return error num as status */
    265 }
    266 
    267 /* 1 means mute, 2 means unmute */
    268 static void setSinkMuteState(struct afb_req request)
    269 {
    270  DEBUG(afbitf,"call setSinkMuteStete");
    271 
    272  guint16 sink_id, mute;
    273  gint16 ret;
    274  REQ_ERROR req_err1, req_err2;
    275  GError *err = NULL;
    276 
    277  req_err1 = getid_uint16(request, _sinkid, &sink_id);
    278  req_err2 = getid_int16(request, _muteState, &mute);
    279  DEBUG(afbitf, "requested %s = %d, %s = %d",_sinkid, sink_id, _muteState, mute);
    280  if((req_err1 != REQ_OK) || (req_err2 != REQ_OK))
    281  {
    282  afb_req_fail(request,"wrong-request", NULL);
    283  return;
    284  }
    285 
    286  audiomanager_commandinterface_call_set_sink_mute_state_sync(
    287  am_cmd_bus,
    288  sink_id,
    289  mute,
    290  &ret,
    291  NULL, &err);
    292  DEBUG(afbitf, "ret = %d", ret);
    293 
    294  if(err != NULL)
    295  {
    296  afb_req_fail(request, "failed", "Unable to call setSinkMuteStete");
    297  return;
    298  }
    299 
    300  struct json_object* res_obj = json_object_new_object();
    301  sm_add_object_to_json_object_func(res_obj, __FUNCTION__, 2,
    302  "error", ret);
    303  char *info;
    304  get_response_audiomanager_massage_error(ret,&info);
    305 
    306  afb_req_success(request, res_obj, info); /* return error num as status */
    307 }
    308 
    309 /* call "getListMainConnections" function of Audio Manager */
    310 static void getListMainConnections(struct afb_req request)
    311 {
    312  DEBUG(afbitf,"call getListMainConnections");
    313  guint16 ret;
    314  GVariant* mainConnectionList;
    315  GError *err = NULL;
    316 
    317  audiomanager_commandinterface_call_get_list_main_connections_sync(
    318  am_cmd_bus,
    319  &ret,
    320  &mainConnectionList,
    321  NULL,
    322  &err
    323  );
    324  DEBUG(afbitf,"ret = %d, mainConnectionList pointer = %p", ret, &mainConnectionList);
    325 
    326  if(err != NULL)
    327  {
    328  afb_req_fail(request, "failed", "Unable to call getListMainConnections");
    329  return;
    330  }
    331 
    332  /* create response */
    333  struct json_object *array_res = json_object_new_array();
    334  gsize size = g_variant_n_children(mainConnectionList);
    335  DEBUG(afbitf, "mainConnectionList size is %u",(uint16_t)size);
    336  struct json_object *verb_obj = json_object_new_object();
    337  sm_add_object_to_json_object_func(verb_obj, __FUNCTION__, 0);
    338  json_object_array_add(array_res, verb_obj);
    339  if(size <= 0)
    340  {
    341  NOTICE(afbitf, "mainConnectionList size is 0");
    342  }
    343  else{
    344  for(int i = 0; i < size; ++i)
    345  {
    346  guint16 mcid, srcid, sinkid;
    347  gint16 delay, constate;
    348  g_variant_get_child(
    349  mainConnectionList,i,"(qqqnn)",
    350  &mcid, &srcid, &sinkid, &delay, &constate
    351  );
    352 
    353  struct json_object* res_obj = json_object_new_object();
    354  sm_add_object_to_json_object_func(res_obj,__FUNCTION__,10,
    355  _main_connection_id, mcid,
    356  _sourceid, srcid,
    357  _sinkid, sinkid,
    358  _delay, delay,
    359  _connectionState, constate
    360  );
    361  json_object_array_add(array_res,res_obj);
    362  }
    363  }
    364  DEBUG(afbitf,"json object :%s:",json_object_to_json_string(array_res));
    365  afb_req_success(request, array_res, "Success to get main connection list");
    366 }
    367 
    368 /*
    369 *
    370 ****** Routing Interface method(API) ***********
    371 *
    372 */
    373 static void ackConnect(struct afb_req request)
    374 {
    375  /* This function will be deprecated */
    376  DEBUG(afbitf,"call %s", __FUNCTION__);
    377  guint16 handle, connection_id, error;
    378  REQ_ERROR req_err1, req_err2 , req_err3;
    379  GError *err = NULL;
    380 
    381  req_err1 = getid_uint16(request, _handle, &handle);
    382  req_err2 = getid_uint16(request, _connectionID, &connection_id);
    383  req_err3 = getid_uint16(request, _error, &error);
    384 
    385  if((req_err1 != REQ_OK) || (req_err2 != REQ_OK) || (req_err3 != REQ_OK))
    386  {
    387  afb_req_fail(request,"wrong-request", NULL);
    388  return;
    389  }
    390  if(connection_id == 0)
    391  {
    392  afb_req_fail(request,"wrong-request", "connectionID is more than 0");
    393  return;
    394  }
    395 
    396 
    397  audiomanager_routinginterface_call_ack_connect_sync(
    398  am_route_bus,
    399  handle,
    400  connection_id,
    401  error,
    402  NULL, &err);
    403 
    404  if(err != NULL)
    405  {
    406  afb_req_fail(request, "failed", "Unable to call ackConnect");
    407  return;
    408  }
    409  afb_req_success(request, NULL, NULL);
    410 }
    411 static void ackDisconnect(struct afb_req request)
    412 {
    413  /* This function will be deprecated */
    414  DEBUG(afbitf,"call %s", __FUNCTION__);
    415  guint16 handle, connection_id, error;
    416  REQ_ERROR req_err1, req_err2 , req_err3;
    417  GError *err = NULL;
    418 
    419  req_err1 = getid_uint16(request, _handle, &handle);
    420  req_err2 = getid_uint16(request, _connectionID, &connection_id);
    421  req_err3 = getid_uint16(request, _error, &error);
    422 
    423  if((req_err1 != REQ_OK) || (req_err2 != REQ_OK) || (req_err3 != REQ_OK))
    424  {
    425  afb_req_fail(request,"wrong-request", "connectionID is more than 0");
    426  return;
    427  }
    428  if(connection_id == 0)
    429  {
    430  afb_req_fail(request,"wrong-request", "connectionID is more than 0");
    431  return;
    432  }
    433 
    434  audiomanager_routinginterface_call_ack_disconnect_sync(
    435  am_route_bus,
    436  handle,
    437  connection_id,
    438  error,
    439  NULL, &err);
    440 
    441  if(err != NULL)
    442  {
    443  afb_req_fail(request, "failed", "Unable to call ackDisconnect");
    444  return;
    445  }
    446  afb_req_success(request, NULL, NULL);
    447 }
    448 static void ackSetSourceState(struct afb_req request)
    449 {
    450  /* This function will be deprecated */
    451  /* This function will be deprecated */
    452  DEBUG(afbitf,"call %s", __FUNCTION__);
    453  guint16 handle, error;
    454  REQ_ERROR req_err1, req_err2;
    455  GError *err = NULL;
    456 
    457  req_err1 = getid_uint16(request, _handle, &handle);
    458  req_err2 = getid_uint16(request, _error, &error);
    459 
    460  if((req_err1 != REQ_OK) || (req_err2 != REQ_OK))
    461  {
    462  NOTICE(afbitf,"wrong request");
    463  afb_req_fail(request,"wrong-request", NULL);
    464  return;
    465  }
    466 
    467  audiomanager_routinginterface_call_ack_set_source_state_sync(
    468  am_route_bus,
    469  handle,
    470  error,
    471  NULL, &err);
    472 
    473  if(err != NULL)
    474  {
    475  afb_req_fail(request, "failed", "Unable to call ackDisconnect");
    476  return;
    477  }
    478  afb_req_success(request, NULL, NULL);
    479 }
    480 static void registerSink(struct afb_req request)
    481 {
    482  /* This function will be deprecated because application will not register function*/
    483 }
    484 static void deregisterSink(struct afb_req request)
    485 {
    486  /* This function will be deprecated because application will not register function*/
    487 }
    488 
    489 /* This function will be modified to abstract argument */
    490 static void registerSource(struct afb_req request)
    491 {
    492  DEBUG(afbitf,"call %s", __FUNCTION__);
    493  GError *err = NULL;
    494 
    495  guint16 source_id; /* q 0 is for dynamic id*/
    496  guint16 domain_id; /* q */
    497  guint16 source_class_id; /* q */
    498  gint32 source_state = 1; /* i SS_ON */
    499  gint16 volume; /* n */
    500 
    501  if(REQ_OK != getid_uint16(request, _sourceid, &source_id)){
    502  source_id = 0; /* if 0, dynamic source id will be attached */
    503  }
    504  if( REQ_OK != getid_uint16(request, _domainID, &domain_id)){
    505  afb_req_fail(request,"wrong-request", "domainID should be more than 0");
    506  return;
    507  }
    508  if(domain_id == 0)
    509  {
    510  afb_req_fail(request,"wrong-request", "domainID should be more than 0");
    511  return;
    512  }
    513  const gchar* name = afb_req_value(request, _appname); /* s */
    514  if(!name)
    515  {
    516  char* info = "Must specify the name. Please input json arg such as {\"appname\":\"radio\"}";
    517  afb_req_fail(request, NULL, info);
    518  return;
    519  }
    520  if(REQ_OK != getid_uint16(request, _sourceClassID, &source_class_id)){
    521  source_class_id = 0; /* BASE */
    522  }
    523  if(REQ_OK != getid_uint16(request, _sourceState, &source_state)){
    524  source_state = 0;
    525  }
    526  if(REQ_OK != getid_int16(request, _volume, &volume)){
    527  volume = 3000;
    528  }
    529  gboolean visible = TRUE; /* b */
    530  struct availability_s available; /* (ii) */
    531  available.availability = 1; /* A_UNKNOWN */
    532  available.avalilable_reason = 0; /* AR_UNKNOWN */
    533  guint16 interrupt = 1; /* q IS_OFF */
    534 
    535  struct sound_property_s sound_property_list; /* a(in) */
    536  sound_property_list.type = 0;
    537  sound_property_list.value = 0; /* in reality, this is array of struct */
    538 
    539  gint32 connection_format_list = 0; /* ai */
    540  struct main_sound_property_s main_property_list; /* a(in) */
    541  main_property_list.type = 0;
    542  main_property_list.value = 0;
    543 
    544  struct notification_config_s nconf_routing;
    545  struct notification_config_s nconf_command; /* a(iin)a(iin) */
    546  nconf_routing.type = 0;
    547  nconf_routing.status = 0;
    548  nconf_routing.parameter = 0;
    549 
    550  nconf_command.type = 0;
    551  nconf_command.status = 0;
    552  nconf_command.parameter = 0;
    553 
    554  /* acuire data */
    555  guint16 acquire_source_id;
    556  guint16 error;
    557 
    558  GVariant* sourceData = create_source_data (source_id, domain_id, name, source_class_id,
    559  source_state, volume, visible, available, interrupt,
    560  sound_property_list, connection_format_list, main_property_list,
    561  nconf_routing, nconf_command, afbitf);
    562 
    563  GVariant* input = g_variant_ref_sink(sourceData);
    564  audiomanager_routinginterface_call_register_source_sync(
    565  am_route_bus,
    566  input,
    567  &acquire_source_id,
    568  &error,
    569  NULL, &err);
    570  g_variant_unref(input);
    571 
    572  if(err != NULL)
    573  {
    574  afb_req_fail(request, "failed", "Unable to call registerSource");
    575  return;
    576  }
    577 
    578  /*create response json object*/
    579  struct json_object *res = json_object_new_object();
    580  sm_add_object_to_json_object_func(res, __FUNCTION__, 4,
    581  _error, error,
    582  _sourceid, acquire_source_id);
    583  char *info;
    584  get_response_audiomanager_massage_error(error,&info);
    585  afb_req_success(request, res, info);
    586 }
    587 
    588 static void deregisterSource(struct afb_req request)
    589 {
    590  guint16 source_id;
    591  guint16 error;
    592 
    593  GError *err = NULL;
    594 
    595  if(REQ_OK != getid_uint16(request, _sourceid, &source_id)){
    596  afb_req_fail(request, "wrong-request", NULL);
    597  }
    598  audiomanager_routinginterface_call_deregister_source_sync(
    599  am_route_bus,
    600  source_id,
    601  &error,
    602  NULL, &err
    603  );
    604  if(err != NULL)
    605  {
    606  afb_req_fail(request, "failed", "Unable to call deregisterSource");
    607  return;
    608  }
    609  /*create response json object*/
    610  struct json_object *res = json_object_new_object();
    611  sm_add_object_to_json_object_func(res, __FUNCTION__, 2,
    612  _error, error);
    613  char *info;
    614  get_response_audiomanager_massage_error(error,&info);
    615  afb_req_success(request, res, info);
    616 
    617 }
    618 
    619 static void confirmRoutingReady(struct afb_req request)
    620 {
    621  /* This function will be deprecated because application will not register function*/
    622 }
    623 static void confirmRoutingRundown(struct afb_req request)
    624 {
    625  /* This function will be deprecated because application will not register function*/
    626 }
    627 static void ackSetVolumes(struct afb_req request)
    628 {
    629  /* This function will be deprecated */
    630 }
    631 static void ackSinkNotificationConfiguration(struct afb_req request)
    632 {
    633  /* This function will be deprecated */
    634 }
    635 static void ackSourceNotificationConfiguration(struct afb_req request)
    636 {
    637  /* This function will be deprecated */
    638 }
    639 
    640 
    641 static void subscribe(struct afb_req request)
    642 {
    643  const char *value = afb_req_value(request, "event");
    644  char *info;
    645  DEBUG(afbitf, "value is %s", value);
    646  if(value) {
    647  int index = sm_search_event_name_index(value);
    648  if(index < 0)
    649  {
    650  index = sm_search_routing_event_name_index(value);
    651  if(index < 0)
    652  {
    653  ERROR(afbitf, "dedicated event doesn't exist");
    654  }
    655  else
    656  {
    657  afb_req_subscribe(request, *routing_event_list[index].event);
    658  }
    659  }
    660  else
    661  {
    662  afb_req_subscribe(request, *command_event_list[index].event);
    663  }
    664  }
    665  else{
    666  ERROR(afbitf, "Please input event name");
    667  }
    668  afb_req_success(request, NULL, NULL);
    669 }
    670 
    671 static void unsubscribe(struct afb_req request)
    672 {
    673  const char *value = afb_req_value(request, "event");
    674  char *info;
    675  DEBUG(afbitf, "value is %s", value);
    676  if(value) {
    677  int index = sm_search_event_name_index(value);
    678  if(index < 0)
    679  {
    680  index = sm_search_routing_event_name_index(value);
    681  if(index < 0)
    682  {
    683  ERROR(afbitf, "dedicated event doesn't exist");
    684  }
    685  else
    686  {
    687  afb_req_unsubscribe(request, *routing_event_list[index].event);
    688  }
    689  }
    690  else
    691  {
    692  afb_req_unsubscribe(request, *command_event_list[index].event);
    693  }
    694  }
    695  else{
    696  ERROR(afbitf, "Please input event name");
    697  }
    698  afb_req_success(request, NULL, NULL);
    699 }
    700 
    701 /*
    702 ********** Callback Function invoked by Audio Manager **********
    703 */
    704 
    705 static void on_new_main_connection(AudiomanagerCommandinterface* interface,
    706  GVariant* mainConnection)
    707 {
    708  DEBUG(afbitf,"%s is called",__FUNCTION__);
    709 
    710  guint16 mcid, srcid, sinkid;
    711  gint16 delay, constate;
    712  g_variant_get(
    713  mainConnection,"(qqqnn)", &mcid, &srcid, &sinkid, &delay, &constate);
    714 
    715  struct json_object* res_obj = json_object_new_object();
    716  sm_add_object_to_json_object(res_obj,10,
    717  _main_connection_id, mcid,
    718  _sourceid, srcid,
    719  _sinkid, sinkid,
    720  _delay, delay,
    721  _connectionState, constate
    722  );
    723  DEBUG(afbitf,"json object :%s:",json_object_to_json_string(res_obj));
    724 
    725  afb_event_push(ev_new_connection, res_obj);
    726 }
    727 
    728 static void on_removed_main_connection(
    729  AudiomanagerCommandinterface* interface, guint16 mainConnectionID)
    730 {
    731  DEBUG(afbitf,"%s is called",__FUNCTION__);
    732 
    733  struct json_object* res_obj = json_object_new_object();
    734  sm_add_object_to_json_object(res_obj, 2,
    735  _main_connection_id, mainConnectionID);
    736  afb_event_push(ev_removed_main_connection, res_obj);
    737 }
    738 
    739 static void on_main_connection_state_changed(
    740  AudiomanagerCommandinterface* interface, guint16 connectionID, gint16 connectionState)
    741 {
    742  DEBUG(afbitf,"%s is called",__FUNCTION__);
    743 
    744  struct json_object* res_obj = json_object_new_object();
    745  sm_add_object_to_json_object(res_obj, 4,
    746  _connectionID, connectionID,
    747  _connectionState, connectionState);
    748  afb_event_push(ev_main_connection_state_changed, res_obj);
    749 }
    750 
    751 static void on_volume_changed(
    752  AudiomanagerCommandinterface* interface, guint16 sinkID, gint16 volume)
    753 {
    754  DEBUG(afbitf,"%s is called",__FUNCTION__);
    755  struct json_object* res_obj = json_object_new_object();
    756  sm_add_object_to_json_object(res_obj, 4,
    757  _sinkid, sinkID,
    758  _volume, volume);
    759  afb_event_push(ev_volume_changed, res_obj);
    760 }
    761 
    762 static void on_sink_mute_state_changed(
    763  AudiomanagerCommandinterface* interface, guint16 sinkID, gint16 mute)
    764 {
    765  DEBUG(afbitf,"%s is called",__FUNCTION__);
    766  struct json_object* res_obj = json_object_new_object();
    767  sm_add_object_to_json_object(res_obj, 4,
    768  _sinkid, sinkID,
    769  _muteState, mute);
    770  afb_event_push(ev_sink_mute_state_changed, res_obj);
    771 }
    772 
    773 /*
    774 ********** Callback Function invoked by Audio Manager Routing Interface**********
    775 */
    776 static void on_set_routing_ready(
    777  AudiomanagerRoutinginterface* interface)
    778 {
    779  DEBUG(afbitf,"%s is called",__FUNCTION__);
    780  afb_event_push(ev_set_routing_ready, NULL);
    781 }
    782 
    783 static void on_set_routing_rundown(
    784  AudiomanagerRoutinginterface* interface)
    785 {
    786  DEBUG(afbitf,"%s is called",__FUNCTION__);
    787  afb_event_push(ev_set_routing_ready, NULL);
    788 }
    789 
    790 
    791 
    792 /*
    793 ********** Callback Function invoked by Sound Manager Adapter Interface**********
    794 *
    795 * For now, there may be no need to send events to applications from these invocation.
    796 * Sound Manager just sends ack to Audio Manager in charge of applications.
    797 * If event is needed, make events in initialize function in this source, and
    798 * write afb_event_push in the invocations.
    799 * Events should be pushed in this source.(I teseted to push events in other code, but can't)
    800 *
    801 */
    802 
    803 
    804 static gboolean on_async_abort(
    805  OrgSoundmanagerGeniviRoutingsend *object,
    806  GDBusMethodInvocation *invocation,
    807  guint16 arg_handle)
    808 {
    809  DEBUG(afbitf, "%s called", __FUNCTION__);
    810  /* Nothing To Do. If it is better to implement something, I will implement */
    811  return TRUE;
    812 }
    813 
    814 static gboolean on_async_connect(
    815  OrgSoundmanagerGeniviRoutingsend *object,
    816  GDBusMethodInvocation *invocation,
    817  guint16 arg_handle,
    818  guint16 arg_connectionID,
    819  guint16 arg_sourceID,
    820  guint16 arg_sinkID,
    821  gint arg_connectionFormat)
    822 {
    823  DEBUG(afbitf, "%s called", __FUNCTION__);
    824  GError* err;
    825  struct json_object* res_obj = json_object_new_object();
    826  sm_add_object_to_json_object(res_obj, 10,
    827  _handle, arg_handle,
    828  _connectionID, arg_connectionID,
    829  _sourceid, arg_sourceID,
    830  _sinkid, arg_sinkID,
    831  _connectionFormat, arg_connectionFormat);
    832  afb_event_push(ev_async_connect, res_obj);
    833  audiomanager_routinginterface_call_ack_connect_sync(
    834  am_route_bus,
    835  arg_handle,
    836  arg_connectionID,
    837  NULL,
    838  NULL, &err);
    839  if(err != NULL)
    840  {
    841  ERROR(afbitf, "Can't create sound manager adapter");
    842  return FALSE;
    843  }
    844  return TRUE;
    845 }
    846 
    847 static gboolean on_async_disconnect(
    848  OrgSoundmanagerGeniviRoutingsend *object,
    849  GDBusMethodInvocation *invocation,
    850  guint16 arg_handle,
    851  guint16 arg_connectionID)
    852 {
    853  DEBUG(afbitf, "%s called", __FUNCTION__);
    854  GError* err;
    855  audiomanager_routinginterface_call_ack_disconnect_sync(
    856  am_route_bus,
    857  arg_handle,
    858  arg_connectionID,
    859  NULL,
    860  NULL, &err);
    861  if(err != NULL)
    862  {
    863  ERROR(afbitf, "Can't create sound manager adapter");
    864  return FALSE;
    865  }
    866  return TRUE;
    867 }
    868 
    869 static gboolean on_async_set_sink_volume(
    870  OrgSoundmanagerGeniviRoutingsend *object,
    871  GDBusMethodInvocation *invocation,
    872  guint16 arg_handle,
    873  guint16 arg_sinkID,
    874  gint16 arg_volume,
    875  gint16 arg_ramp,
    876  guint16 arg_time)
    877 {
    878  DEBUG(afbitf, "%s called", __FUNCTION__);
    879  /* Nothing To Do. If it is better to implement something, I will implement */
    880  return TRUE;
    881 }
    882 
    883 static gboolean on_async_set_source_state(
    884  OrgSoundmanagerGeniviRoutingsend *object,
    885  GDBusMethodInvocation *invocation,
    886  guint16 arg_handle,
    887  guint16 arg_sourceID,
    888  gint arg_sourceState)
    889 {
    890  DEBUG(afbitf, "%s called", __FUNCTION__);
    891  GError* err;
    892  struct json_object* res_obj = json_object_new_object();
    893  sm_add_object_to_json_object(res_obj, 6,
    894  _handle, arg_handle,
    895  _sourceid, arg_sourceID,
    896  _sourceState, arg_sourceState);
    897  afb_event_push(ev_async_set_source_state, res_obj);
    898  /* Applications should return ackSetSourceState, then Sound Manager doen't return ackSetSourceState */
    899  /*audiomanager_routinginterface_call_ack_set_source_state_sync(
    900  am_route_bus,
    901  arg_handle,
    902  NULL,
    903  NULL, &err);*/
    904  if(err != NULL)
    905  {
    906  ERROR(afbitf, "Can't create sound manager adapter");
    907  return FALSE;
    908  }
    909  return TRUE;
    910 }
    911 
    912 static gboolean init_sound_manager_adapter(GDBusServer *server, GDBusConnection *conn, gpointer data)
    913 {
    914  DEBUG(afbitf, "%s called", __FUNCTION__);
    915  sm_adapter = org_soundmanager_genivi_routingsend_skeleton_new();
    916  sm_itf = ORG_SOUNDMANAGER_GENIVI_ROUTINGSEND_GET_IFACE(sm_adapter);
    917  /* initialize sound manager adapter */
    918  sm_itf->handle_async_abort = on_async_abort;
    919  sm_itf->handle_async_connect = on_async_connect;
    920  sm_itf->handle_async_disconnect = on_async_disconnect;
    921  sm_itf->handle_async_set_sink_volume = on_async_set_sink_volume;
    922  sm_itf->handle_async_set_source_state = on_async_set_source_state;
    923  gboolean ret = g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(sm_adapter), conn, SOUND_MANAGER_PATH, NULL);
    924  if(!ret)
    925  {
    926  ERROR(afbitf, "Can't create sound manager adapter");
    927  return FALSE;
    928  }
    929  return TRUE;
    930 }
    931 
    932 /*
    933  * array of the verbs exported to afb-daemon
    934  */
    935 static const struct afb_verb_desc_v1 binding_verbs[]= {
    936 /* VERB'S NAME SESSION MANAGEMENT FUNCTION TO CALL SHORT DESCRIPTION */
    937 { .name = "connect", .session = AFB_SESSION_NONE, .callback = connect, .info = "Connect source id and sink id" },
    938 { .name = "disconnect", .session = AFB_SESSION_NONE, .callback = disconnect, .info = "Disconnect source id and sink id" },
    939 { .name = "setVolume", .session = AFB_SESSION_NONE, .callback = setVolume, .info = "Set volume value" }, /* it is better to show the range*/
    940 { .name = "volumeStep", .session = AFB_SESSION_NONE, .callback = volumeStep, .info = "Set volume step range" },
    941 { .name = "setSinkMuteState", .session = AFB_SESSION_NONE, .callback = setSinkMuteState, .info = "Set Mute state: 1 means mute, 2 means umute. Others are invalid" },
    942 { .name = "getListMainConnections", .session = AFB_SESSION_NONE, .callback = getListMainConnections, .info = "Get MainConnection List" },
    943 /* Routing Interface */
    944 { .name = "registerSource", .session = AFB_SESSION_NONE, .callback = registerSource, .info = "Register Application" },
    945 { .name = "deregisterSource", .session = AFB_SESSION_NONE, .callback = deregisterSource, .info = "Deregister Application" },
    946 { .name = "ackConnect", .session = AFB_SESSION_NONE, .callback = ackConnect, .info = "Acknowledge of asyncConnect" },
    947 { .name = "ackDisconnect", .session = AFB_SESSION_NONE, .callback = ackDisconnect, .info = "Acknowledge of asyncConnect" },
    948 { .name = "ackSetSourceState", .session = AFB_SESSION_NONE, .callback = ackSetSourceState, .info = "Acknowledge of asyncSetSourceState" },
    949 { .name = "subscribe", .session = AFB_SESSION_NONE, .callback = subscribe, .info = "Subscribe event" },
    950 { .name = "unsubscribe", .session = AFB_SESSION_NONE, .callback = unsubscribe, .info = "Unsubscribe event" },
    951 { .name = NULL } /* marker for end of the array */
    952 };
    953 
    954 static const struct afb_binding binding_description =
    955 {
    956  .type = AFB_BINDING_VERSION_1,
    957  .v1 = {
    958  .info = "Sound Manager" ,
    959  .prefix = "soundmanager" ,
    960  .verbs = binding_verbs
    961  }
    962 };
    963 
    964 static void *dbus_event_loop_run(void *args)
    965 {
    966  loop = g_main_loop_new(NULL, FALSE);
    967  g_main_loop_run(loop);
    968 }
    969 
    970 static void free_dbus()
    971 {
    972  ERROR(afbitf, "free dbus");
    973  if(am_cmd_bus)
    974  {
    975  free(am_cmd_bus);
    976  }
    977  if(am_route_bus)
    978  {
    979  free(am_route_bus);
    980  }
    981 }
    982 
    983 static int init()
    984 {
    985  int ret;
    986  INFO(afbitf,"Initialize Dbus object");
    987  /* Initialize Dbus interface */
    988  if(am_cmd_bus || am_route_bus)
    989  {
    990  ERROR(afbitf, "Dbus object to Audio Manager is already created");
    991  goto out;
    992  }
    993  am_cmd_bus = audiomanager_commandinterface_proxy_new_for_bus_sync(
    994  G_BUS_TYPE_SYSTEM,
    995  G_DBUS_PROXY_FLAGS_NONE,
    996  AM_NAME,
    997  AM_CMD_PATH,
    998  NULL,
    999  NULL
    1000  );
    1001  am_route_bus = audiomanager_routinginterface_proxy_new_for_bus_sync(
    1002  G_BUS_TYPE_SYSTEM,
    1003  G_DBUS_PROXY_FLAGS_NONE,
    1004  AM_NAME,
    1005  AM_ROUTE_PATH,
    1006  NULL,
    1007  NULL
    1008  );
    1009 
    1010  if(!am_cmd_bus || !am_route_bus)
    1011  {
    1012  goto out;
    1013  }
    1014 
    1015  INFO(afbitf, "Finish Initialize");
    1016  return 0;
    1017 out:
    1018  ERROR(afbitf,"Failed to initialize");
    1019  free_dbus();
    1020  return -1;
    1021 }
    1022 
    1023 static int sm_event_init()
    1024 {
    1025  INFO(afbitf,"Initialize event receive setting");
    1026  int ret;
    1027  /* Initialize make event */
    1028  size_t size = sizeof cmd_evlist / sizeof *cmd_evlist;
    1029 
    1030  /*create event*/
    1031  /*ToDo Hash table is better. And event should be created in the loop
    1032  I would like to change */
    1033  ev_volume_changed = afb_daemon_make_event(afbitf->daemon, cmd_evlist[0]);
    1034  ev_new_connection = afb_daemon_make_event(afbitf->daemon, cmd_evlist[1]);
    1035  ev_removed_main_connection = afb_daemon_make_event(afbitf->daemon, cmd_evlist[2]);
    1036  ev_sink_mute_state_changed = afb_daemon_make_event(afbitf->daemon, cmd_evlist[3]);
    1037  ev_main_connection_state_changed = afb_daemon_make_event(afbitf->daemon, cmd_evlist[4]);
    1038  command_event_list[0].name = cmd_evlist[0];
    1039  command_event_list[0].event = &ev_volume_changed;
    1040  command_event_list[1].name = cmd_evlist[1];
    1041  command_event_list[1].event = &ev_new_connection;
    1042  command_event_list[2].name = cmd_evlist[2];
    1043  command_event_list[2].event = &ev_removed_main_connection;
    1044  command_event_list[3].name = cmd_evlist[3];
    1045  command_event_list[3].event = &ev_sink_mute_state_changed;
    1046  command_event_list[4].name = cmd_evlist[4];
    1047  command_event_list[4].event = &ev_main_connection_state_changed;
    1048 
    1049  /* create routing event */
    1050  ev_set_routing_ready = afb_daemon_make_event(afbitf->daemon, route_evlist[0]);
    1051  ev_set_routing_rundown = afb_daemon_make_event(afbitf->daemon, route_evlist[1]);
    1052  ev_async_connect = afb_daemon_make_event(afbitf->daemon, route_evlist[2]);
    1053  ev_async_set_source_state = afb_daemon_make_event(afbitf->daemon, route_evlist[3]);
    1054  routing_event_list[0].name = route_evlist[0];
    1055  routing_event_list[0].event = &ev_set_routing_ready;
    1056  routing_event_list[1].name = route_evlist[1];
    1057  routing_event_list[1].event = &ev_set_routing_rundown;
    1058  routing_event_list[2].name = route_evlist[1];
    1059  routing_event_list[2].event = &ev_async_connect;
    1060  routing_event_list[3].name = route_evlist[1];
    1061  routing_event_list[3].event = &ev_async_set_source_state;
    1062  /*for(size_t i = 0; i < size; ++i)
    1063  {
    1064  struct afb_event afbev = afb_daemon_make_event(afbitf->daemon, cmd_evlist[i]));
    1065  size_t afbev_size = sizeof afbev;
    1066  size_t key_size = sizeof cmd_evlist[i];
    1067 
    1068  struct event ev = {cmd_evlist[i],afbev};
    1069  command_event_list[i] = malloc(key_size + afbev_size);
    1070  command_event_list[i] = ev;
    1071  search_result = hsearch(entry, FIND);
    1072  if(search_result)
    1073  DEBUG(afbitf, "event name is %s", search_result->key);
    1074  }*/
    1075 
    1076  /* Initialize dbus event thread */
    1077  if(!am_cmd_bus || !am_route_bus)
    1078  {
    1079  goto ev_init_out;
    1080  }
    1081  pthread_t thread_id;
    1082  ret = pthread_create(&thread_id, NULL, dbus_event_loop_run, NULL);
    1083  if(ret != 0)
    1084  {
    1085  goto ev_init_out;
    1086  }
    1087  /* initialize signal from audio manager command interface */
    1088  g_signal_connect(am_cmd_bus,
    1089  "volume_changed",
    1090  G_CALLBACK(on_volume_changed),
    1091  NULL);
    1092  g_signal_connect(am_cmd_bus,
    1093  "new_main_connection",
    1094  G_CALLBACK(on_new_main_connection),
    1095  NULL);
    1096  g_signal_connect(am_cmd_bus,
    1097  "removed_main_connection",
    1098  G_CALLBACK(on_removed_main_connection),
    1099  NULL);
    1100  g_signal_connect(am_cmd_bus,
    1101  "sink_mute_state_changed",
    1102  G_CALLBACK(on_sink_mute_state_changed),
    1103  NULL);
    1104  g_signal_connect(am_cmd_bus,
    1105  "main_connection_state_changed",
    1106  G_CALLBACK(on_main_connection_state_changed),
    1107  NULL);
    1108  g_signal_connect(am_route_bus,
    1109  "set_routing_ready",
    1110  G_CALLBACK(on_set_routing_ready),
    1111  NULL);
    1112  g_signal_connect(am_route_bus,
    1113  "set_routing_rundown",
    1114  G_CALLBACK(on_set_routing_rundown),
    1115  NULL);
    1116 
    1117  /* Get soundmanager adapter bus */
    1118  g_bus_own_name(G_BUS_TYPE_SYSTEM, SOUND_MANAGER_NAME, G_BUS_NAME_OWNER_FLAGS_NONE,
    1119  NULL, init_sound_manager_adapter, NULL, NULL, NULL);
    1120 
    1121  INFO(afbitf,"Finish Initialize event receive setting");
    1122  return 0;
    1123 
    1124 ev_init_out:
    1125  if(loop != NULL)
    1126  {
    1127  g_main_loop_unref(loop);
    1128  }
    1129  free_dbus();
    1130  ERROR(afbitf, "DBus connection is not created");
    1131  return -1;
    1132 }
    1133 
    1134 /*
    1135  * activation function for registering the binding called by afb-daemon
    1136  */
    1137 const struct afb_binding *afbBindingV1Register (const struct afb_binding_interface *itf)
    1138 {
    1139  afbitf = itf; // records the interface for accessing afb-daemon
    1140 
    1141  int ret = init(); // Set Dbus communication with audio mangaer
    1142  return (ret == 0) ? &binding_description : NULL;
    1143 }
    1144 
    1145 int afbBindingV1ServiceInit(struct afb_service service)
    1146 {
    1147  DEBUG(afbitf, "Initializing Audio Manager Notification \n");
    1148  int ret = sm_event_init();
    1149  return ret;
    1150 }
    struct afb_event * event
    Definition: soundmanager.c:51
    +
    #define AM_CMD_PATH
    Definition: soundmanager.c:32
    +
    #define AM_NAME
    Definition: soundmanager.c:31
    +
    #define AM_ROUTE_PATH
    Definition: soundmanager.c:33
    + +
    const struct afb_binding * afbBindingV1Register(const struct afb_binding_interface *itf)
    +
    int afbBindingV1ServiceInit(struct afb_service service)
    +
    #define ROUTING_EVENT_NUM
    Definition: soundmanager.c:38
    +
    #define SOUND_MANAGER_PATH
    Definition: soundmanager.c:35
    +
    #define SOUND_MANAGER_NAME
    Definition: soundmanager.c:34
    +
    #define COMMAND_EVENT_NUM
    Definition: soundmanager.c:37
    +
    char * name
    Definition: soundmanager.c:50
    +
    +
    + + + + diff --git a/doc/api-ref/html/splitbar.png b/doc/api-ref/html/splitbar.png new file mode 100644 index 0000000..fe895f2 Binary files /dev/null and b/doc/api-ref/html/splitbar.png 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 @@ + + + + + + + +Sound Manager: event Struct Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Sound Manager +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    event Struct Reference
    +
    +
    + + + + + + +

    +Data Fields

    char * name
     
    struct afb_event * event
     
    +

    Detailed Description

    +
    +

    Definition at line 49 of file soundmanager.c.

    +

    Field Documentation

    + +

    ◆ event

    + +
    +
    + + + + +
    struct afb_event* event::event
    +
    + +

    Definition at line 51 of file soundmanager.c.

    + +
    +
    + +

    ◆ name

    + +
    +
    + + + + +
    char* event::name
    +
    + +

    Definition at line 50 of file soundmanager.c.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + 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 Binary files /dev/null and b/doc/api-ref/html/sync_off.png 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 Binary files /dev/null and b/doc/api-ref/html/sync_on.png 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 Binary files /dev/null and b/doc/api-ref/html/tab_a.png 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 Binary files /dev/null and b/doc/api-ref/html/tab_b.png 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 Binary files /dev/null and b/doc/api-ref/html/tab_h.png 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 Binary files /dev/null and b/doc/api-ref/html/tab_s.png 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 @@ + + + + + + + +Sound Manager: SoundManagerBinding/libsoundmanager/test.cpp File Reference + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Sound Manager +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    test.cpp File Reference
    +
    +
    +
    #include <libsoundmanager/libsoundmanager.hpp>
    +#include <iostream>
    +#include <glib-2.0/glib.h>
    +#include <fcntl.h>
    +#include <string>
    +#include <sys/types.h>
    +#include <sys/stat.h>
    +#include <thread>
    +#include <exception>
    +#include <vector>
    +#include <sstream>
    +
    +

    Go to the source code of this file.

    + + + + +

    +Functions

    int main (int argc, char **argv)
     
    + + + +

    +Variables

    LibSoundmanagersm
     
    +

    Function Documentation

    + +

    ◆ main()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int main (int argc,
    char ** argv 
    )
    +
    + +

    Definition at line 123 of file test.cpp.

    + +
    +
    +

    Variable Documentation

    + +

    ◆ sm

    + +
    +
    + + + + +
    LibSoundmanager* sm
    +
    + +

    Definition at line 33 of file test.cpp.

    + +
    +
    +
    +
    + + + + 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 @@ + + + + + + + +Sound Manager: SoundManagerBinding/libsoundmanager/test.cpp Source File + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Sound Manager +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    test.cpp
    +
    +
    +Go to the documentation of this file.
    1 /*
    2  * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
    3  *
    4  * Licensed under the Apache License, Version 2.0 (the "License");
    5  * you may not use this file except in compliance with the License.
    6  * You may obtain a copy of the License at
    7  *
    8  * http://www.apache.org/licenses/LICENSE-2.0
    9  *
    10  * Unless required by applicable law or agreed to in writing, software
    11  * distributed under the License is distributed on an "AS IS" BASIS,
    12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  * See the License for the specific language governing permissions and
    14  * limitations under the License.
    15  */
    16 
    18 #include <iostream>
    19 #include <glib-2.0/glib.h>
    20 #include <fcntl.h>
    21 #include <string>
    22 #include <sys/types.h>
    23 #include <sys/stat.h>
    24 #include <thread>
    25 #include <exception>
    26 #include <vector>
    27 #include <sstream>
    28 
    29 using namespace std;
    30 
    31 static int io_event_callback(sd_event_source *src, int fd, uint32_t revents, void *closure);
    32 static vector<string> split(const string& str, char sep);
    34 static sd_event_source *evsrc;
    35 static GMainLoop *loop = NULL;
    36 static void call_test();
    37 
    38 static void usage()
    39 {
    40  cout << "verb "<< "key:arg" << endl;
    41  cout << "example: connect sourceID 100 sinkID 100" << endl;
    42  cout << "verb list:" << endl;
    43  // Todo output api list
    44  exit(0);
    45 }
    46 
    47 static void *event_loop_run(void *args)
    48 {
    49  call_test();
    50 }
    51 
    52 static int io_event_callback(sd_event_source *src, int fd, uint32_t revents, void *closure)
    53 {
    54  /* This is for Receiving Thread */
    55 }
    56 
    57 static void call_test()
    58 {
    59  string command;
    60 
    61  cout << "input verb and argments" << endl;
    62 
    63  /* read the buffer */
    64  for(;;){
    65  char line[1023];
    66  cin.getline(line, sizeof(line));
    67  command = line;
    68  if(command.empty()){
    69  continue;
    70  }
    71 
    72  vector<string> v_command = split(command, ' ');
    73  /*for(auto itr = v_command.begin(); itr != v_command.end(); ++itr)
    74  {
    75  cout << *itr <<endl;
    76  }*/
    77  size_t num = v_command.size();
    78  if(num % 2 == 0){
    79  cout << "If command contains args, please input <key,value> in argument part" << endl;
    80  continue;
    81  }
    82  /* create json object */
    83  struct json_object* j_obj = json_object_new_object();
    84  for(int i = 1;i < (v_command.size()) ;++i){
    85  struct json_object* val = json_object_new_string(v_command[i+1].c_str());
    86  json_object_object_add(j_obj, v_command[i].c_str(), val);
    87  ++i;
    88  }
    89  /* call verb via libsoundmanager */
    90  sm->call(v_command[0], j_obj);
    91  /* free vector */
    92  vector<string>().swap(v_command);
    93  string().swap(command);
    94  }
    95 }
    96 
    97 static void onRep(struct json_object* reply_contents)
    98 {
    99  const char* str = json_object_to_json_string(reply_contents);
    100  cout << "[CB onRep]: " << str << endl;
    101  json_object_put(reply_contents);
    102 }
    103 
    104 static void onEv(const string& event, struct json_object* event_contents)
    105 {
    106  const char* str = json_object_to_json_string(event_contents);
    107  cout << "[CB onEvent]: event" << event.c_str() << " contents:" << str << endl;
    108  json_object_put(event_contents);
    109 }
    110 
    111 static vector<string> split(const string& str, char sep)
    112 {
    113  vector<string> v;
    114  stringstream ss(str);
    115  string buffer;
    116  while( getline(ss, buffer, sep) ) {
    117  if(!buffer.empty())
    118  v.push_back(buffer);
    119  }
    120  return v;
    121 }
    122 
    123 int main(int argc, char **argv)
    124 {
    125  int ret;
    126  if(argc == 1)
    127  {
    128  printf("Please input port num in first argument, and token in second argument");
    129  usage();
    130  return 0;
    131  }
    132  if(argc == 2)
    133  {
    134  string av(argv[1]);
    135  if( (av == "-h") || (av == "--help"))
    136  {
    137  usage();
    138  return 0;
    139  }
    140  }
    141 
    142  string port_string(argv[1]);
    143  string token(argv[2]);
    144  char* endptr;
    145  long port = strtol(port_string.c_str(),&endptr,10);
    146 
    147  /* error check of range */
    148  if( (port > 20000) || (port < 0) )
    149  {
    150  printf("input under 20000(temporary number)");
    151  return 0;
    152  }
    153  if(*endptr != '\0')
    154  {
    155  printf("not number");
    156  return 0;
    157  }
    158 
    159  cout << "Call test for libsoundmanager" << endl;
    160  sm = new LibSoundmanager(port, token);
    161  sm->register_callback(&onEv, &onRep);
    162  pthread_t thread_id;
    163  ret = pthread_create(&thread_id, NULL, event_loop_run, NULL);
    164 
    165  sd_event *sloop;
    166  ret = sd_event_default(&sloop);
    167 
    168  if (ret < 0) {
    169  printf("failed to create event loop");
    170  return -1;
    171  }
    172 
    173  sd_event_add_io(sloop, &evsrc, 0, EPOLLIN, io_event_callback, NULL);
    174  for(;;)
    175  sd_event_run(sloop, 30000000);
    176  return 0;
    177 }
    + +
    int call(const std::string &verb, struct json_object *arg)
    +
    void register_callback(void(*event_cb)(const std::string &event, struct json_object *event_contents), void(*reply_cb)(struct json_object *reply_contents))
    +
    LibSoundmanager * sm
    Definition: test.cpp:33
    + +
    int main(int argc, char **argv)
    Definition: test.cpp:123
    + +
    +
    + + + + -- cgit 1.2.3-korg